@polishd/next 0.1.0 → 0.2.1-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/AGENTS.md +161 -46
  2. package/CHANGELOG.md +163 -0
  3. package/README.md +275 -49
  4. package/bin/doctor.mjs +374 -0
  5. package/bin/init.mjs +215 -188
  6. package/bin/polishd.mjs +85 -0
  7. package/bin/shared.mjs +114 -0
  8. package/dist/ai/actions.d.ts +13 -2
  9. package/dist/ai/actions.d.ts.map +1 -1
  10. package/dist/ai/actions.js +19 -1
  11. package/dist/ai/actions.js.map +1 -1
  12. package/dist/ai/design.d.ts +28 -0
  13. package/dist/ai/design.d.ts.map +1 -0
  14. package/dist/ai/design.js +245 -0
  15. package/dist/ai/design.js.map +1 -0
  16. package/dist/ai/guard.d.ts +44 -3
  17. package/dist/ai/guard.d.ts.map +1 -1
  18. package/dist/ai/guard.js +13 -2
  19. package/dist/ai/guard.js.map +1 -1
  20. package/dist/ai/providers.d.ts +2 -0
  21. package/dist/ai/providers.d.ts.map +1 -1
  22. package/dist/ai/providers.js +70 -0
  23. package/dist/ai/providers.js.map +1 -1
  24. package/dist/ai/settings.d.ts +15 -1
  25. package/dist/ai/settings.d.ts.map +1 -1
  26. package/dist/ai/settings.js +38 -1
  27. package/dist/ai/settings.js.map +1 -1
  28. package/dist/ai/types.d.ts +57 -0
  29. package/dist/ai/types.d.ts.map +1 -1
  30. package/dist/client/design-scan.d.ts +37 -0
  31. package/dist/client/design-scan.d.ts.map +1 -0
  32. package/dist/client/design-scan.js +319 -0
  33. package/dist/client/design-scan.js.map +1 -0
  34. package/dist/client/init.d.ts.map +1 -1
  35. package/dist/client/init.js +67 -2
  36. package/dist/client/init.js.map +1 -1
  37. package/dist/config.d.ts +57 -3
  38. package/dist/config.d.ts.map +1 -1
  39. package/dist/config.js +62 -3
  40. package/dist/config.js.map +1 -1
  41. package/dist/dashboard/design-review-card.d.ts +15 -0
  42. package/dist/dashboard/design-review-card.d.ts.map +1 -0
  43. package/dist/dashboard/design-review-card.js +82 -0
  44. package/dist/dashboard/design-review-card.js.map +1 -0
  45. package/dist/dashboard/design.d.ts +10 -0
  46. package/dist/dashboard/design.d.ts.map +1 -0
  47. package/dist/dashboard/design.js +83 -0
  48. package/dist/dashboard/design.js.map +1 -0
  49. package/dist/dashboard/index.d.ts +35 -5
  50. package/dist/dashboard/index.d.ts.map +1 -1
  51. package/dist/dashboard/index.js +176 -18
  52. package/dist/dashboard/index.js.map +1 -1
  53. package/dist/dashboard/journeys.d.ts.map +1 -1
  54. package/dist/dashboard/journeys.js +1 -0
  55. package/dist/dashboard/journeys.js.map +1 -1
  56. package/dist/dashboard/summary.d.ts.map +1 -1
  57. package/dist/dashboard/summary.js +59 -5
  58. package/dist/dashboard/summary.js.map +1 -1
  59. package/dist/dashboard/token-auth.d.ts +56 -0
  60. package/dist/dashboard/token-auth.d.ts.map +1 -0
  61. package/dist/dashboard/token-auth.js +158 -0
  62. package/dist/dashboard/token-auth.js.map +1 -0
  63. package/dist/dashboard/unlock.d.ts +2 -0
  64. package/dist/dashboard/unlock.d.ts.map +1 -0
  65. package/dist/dashboard/unlock.js +54 -0
  66. package/dist/dashboard/unlock.js.map +1 -0
  67. package/dist/dashboard.css +2740 -0
  68. package/dist/proxy.d.ts +53 -5
  69. package/dist/proxy.d.ts.map +1 -1
  70. package/dist/proxy.js +73 -3
  71. package/dist/proxy.js.map +1 -1
  72. package/dist/route.d.ts.map +1 -1
  73. package/dist/route.js +11 -3
  74. package/dist/route.js.map +1 -1
  75. package/dist/server/design.d.ts +93 -0
  76. package/dist/server/design.d.ts.map +1 -0
  77. package/dist/server/design.js +430 -0
  78. package/dist/server/design.js.map +1 -0
  79. package/dist/server/ingest.d.ts +33 -2
  80. package/dist/server/ingest.d.ts.map +1 -1
  81. package/dist/server/ingest.js +70 -8
  82. package/dist/server/ingest.js.map +1 -1
  83. package/dist/server/queries.d.ts +16 -0
  84. package/dist/server/queries.d.ts.map +1 -1
  85. package/dist/server/queries.js +80 -16
  86. package/dist/server/queries.js.map +1 -1
  87. package/dist/session.d.ts.map +1 -1
  88. package/dist/session.js +4 -2
  89. package/dist/session.js.map +1 -1
  90. package/dist/shared/types.d.ts +31 -1
  91. package/dist/shared/types.d.ts.map +1 -1
  92. package/dist/shared/types.js +1 -0
  93. package/dist/shared/types.js.map +1 -1
  94. package/docs/SETUP.md +308 -51
  95. package/package.json +14 -7
@@ -1,4 +1,4 @@
1
- import type { PolishdAISettings, PolishdAISettingsPublic } from "./types";
1
+ import type { ListModelsResult, PolishdAISettings, PolishdAISettingsPublic } from "./types";
2
2
  /**
3
3
  * Effective settings = saved (dashboard) over env defaults. Returns the full
4
4
  * settings (with key) for server use, plus whether the *provider config* came
@@ -28,4 +28,18 @@ export interface SaveAISettingsInput {
28
28
  }
29
29
  /** Persist owner settings. Returns the refreshed public view. */
30
30
  export declare function saveAISettings(input: SaveAISettingsInput): Promise<PolishdAISettingsPublic>;
31
+ /** Fields the dashboard sends when asking a provider which models are available. */
32
+ export interface ListModelsInput {
33
+ provider?: string;
34
+ /** Typed-but-unsaved key from the form. Falls back to the stored key when blank. */
35
+ apiKey?: string;
36
+ baseUrl?: string;
37
+ }
38
+ /**
39
+ * List the models available to the given (or stored) key, so the dashboard
40
+ * can render a dropdown instead of a free-text model id. The stored key is
41
+ * only reused when its saved provider matches the requested one — a key
42
+ * saved for Anthropic is never sent to Google, even accidentally.
43
+ */
44
+ export declare function listModelsForProvider(input: ListModelsInput): Promise<ListModelsResult>;
31
45
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/ai/settings.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,iBAAiB,EACjB,uBAAuB,EAExB,MAAM,SAAS,CAAC;AAoFjB;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuBlG;AAED,qDAAqD;AACrD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAkB5E;AAED,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,iEAAiE;AACjE,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CA4BlC"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/ai/settings.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAEhB,iBAAiB,EACjB,uBAAuB,EAExB,MAAM,SAAS,CAAC;AAoFjB;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuBlG;AAED,qDAAqD;AACrD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAkB5E;AAED,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,iEAAiE;AACjE,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CA4BlC;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8B7F"}
@@ -10,7 +10,7 @@
10
10
  * boolean before anything reaches the client.
11
11
  */
12
12
  import { getMeta, setMeta } from "../server/store";
13
- import { DEFAULT_MODEL } from "./providers";
13
+ import { DEFAULT_MODEL, listModels } from "./providers";
14
14
  const SETTINGS_KEY = "ai_settings";
15
15
  const VALID_PROVIDERS = [
16
16
  "anthropic",
@@ -179,4 +179,41 @@ export async function saveAISettings(input) {
179
179
  await setMeta(SETTINGS_KEY, JSON.stringify(next));
180
180
  return getAISettingsPublic();
181
181
  }
182
+ /**
183
+ * List the models available to the given (or stored) key, so the dashboard
184
+ * can render a dropdown instead of a free-text model id. The stored key is
185
+ * only reused when its saved provider matches the requested one — a key
186
+ * saved for Anthropic is never sent to Google, even accidentally.
187
+ */
188
+ export async function listModelsForProvider(input) {
189
+ const provider = coerceProvider(input.provider);
190
+ if (!provider) {
191
+ return { ok: false, error: "bad-provider", message: "Unrecognized provider." };
192
+ }
193
+ let apiKey = input.apiKey?.trim();
194
+ if (!apiKey) {
195
+ const { settings } = await resolveSettings();
196
+ if (settings.provider === provider && settings.apiKey)
197
+ apiKey = settings.apiKey;
198
+ }
199
+ if (!apiKey) {
200
+ return { ok: false, error: "no-key", message: "Add an API key first." };
201
+ }
202
+ try {
203
+ const models = await listModels({
204
+ provider,
205
+ model: "",
206
+ apiKey,
207
+ baseUrl: input.baseUrl?.trim() || undefined,
208
+ });
209
+ return { ok: true, models };
210
+ }
211
+ catch (err) {
212
+ return {
213
+ ok: false,
214
+ error: "provider-error",
215
+ message: err instanceof Error ? err.message : String(err),
216
+ };
217
+ }
218
+ }
182
219
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/ai/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/ai/settings.ts"],"names":[],"mappings":"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"}
@@ -151,6 +151,53 @@ export type GenerateSummaryResult = {
151
151
  message: string;
152
152
  };
153
153
  export type GenerateSummaryError = "no-key" | "no-data" | "provider-error";
154
+ /**
155
+ * One aesthetic problem the model called out. `evidence` must be a concrete
156
+ * token from the design digest (a hex color, a px value, a page path) — the
157
+ * same citation bar the summary's losses are held to, so a review can't
158
+ * invent a color the site never renders.
159
+ */
160
+ export interface PolishdDesignIssue {
161
+ /** The problem, in plain English. */
162
+ issue: string;
163
+ /** The token from the metrics that shows it (hex, px value, page path). */
164
+ evidence: string;
165
+ /** A concrete fix, when the model offered one. */
166
+ suggestion?: string;
167
+ }
168
+ /**
169
+ * The model's aesthetic read of the deterministic design metrics — generated
170
+ * by the same provider/model the owner configured for the analytics summary,
171
+ * cached in the store, and refreshed only on demand or when the metrics change.
172
+ */
173
+ export interface PolishdDesignReview {
174
+ /** The overall assessment — how coherent and tasteful the design reads. */
175
+ text: string;
176
+ /** What the design gets right. */
177
+ strengths?: string[];
178
+ /** Specific, evidence-cited aesthetic problems. */
179
+ issues?: PolishdDesignIssue[];
180
+ provider: PolishdAIProvider;
181
+ model: string;
182
+ generatedAt: number;
183
+ /** Hash of the design digest it was generated from — drives staleness. */
184
+ fingerprint: string;
185
+ usage?: {
186
+ inputTokens?: number;
187
+ outputTokens?: number;
188
+ };
189
+ }
190
+ /** Result of a design review attempt, returned to the dashboard. */
191
+ export type GenerateDesignReviewResult = {
192
+ ok: true;
193
+ review: PolishdDesignReview;
194
+ regenerated: boolean;
195
+ } | {
196
+ ok: false;
197
+ error: GenerateDesignReviewError;
198
+ message: string;
199
+ };
200
+ export type GenerateDesignReviewError = "no-key" | "no-data" | "provider-error";
154
201
  /**
155
202
  * What the configured token can actually do against the configured repo,
156
203
  * checked live during onboarding. `contents` (read) powers source reading;
@@ -185,4 +232,14 @@ export type CreateIssueResult = {
185
232
  message: string;
186
233
  };
187
234
  export type GithubError = "not-connected" | "not-a-bug" | "github-error";
235
+ /** Result of asking a provider which models are available to the configured key. */
236
+ export type ListModelsResult = {
237
+ ok: true;
238
+ models: string[];
239
+ } | {
240
+ ok: false;
241
+ error: ListModelsError;
242
+ message: string;
243
+ };
244
+ export type ListModelsError = "bad-provider" | "no-key" | "provider-error";
188
245
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Polishd — client design scanner.
3
+ *
4
+ * Samples the *rendered* page — computed styles, not source CSS — and reduces
5
+ * it to compact tallies: which font family/size/weight combinations actually
6
+ * appear, which colors paint text/backgrounds/borders, which text-on-background
7
+ * pairs exist (for contrast checking), and which radii and paddings the page
8
+ * really uses. This is the deterministic half of the dashboard's Design tab:
9
+ * reverse-engineering the design system out of the built site.
10
+ *
11
+ * Deliberately tally-based: a page emits one `design_scan` event of a few KB,
12
+ * never per-element rows. Scanning runs once per session per path, after the
13
+ * page has settled, and only when the tab is visible (a background prerender
14
+ * has no layout worth measuring).
15
+ */
16
+ import type { PolishdDesignScanPayload } from "../shared/types";
17
+ /**
18
+ * Parse a computed color into `#rrggbb` / `#rrggbbaa`, or null when fully
19
+ * transparent or in a syntax we don't recognize (rare wide-gamut outputs are
20
+ * skipped rather than guessed at).
21
+ */
22
+ export declare function normalizeColor(value: string): string | null;
23
+ /**
24
+ * Walk the page and reduce it to design tallies. Pure DOM reads — call it when
25
+ * the page has settled. Returns null when there is nothing measurable.
26
+ */
27
+ export declare function collectDesignScan(root?: Element): PolishdDesignScanPayload | null;
28
+ /** Serialize, shrinking the longest lists if a pathological page overflows. */
29
+ export declare function serializeDesignScan(payload: PolishdDesignScanPayload): string;
30
+ /**
31
+ * Scan `path` once per session, after the page settles, and hand the payload
32
+ * to `emit`. Skips silently when the tab is hidden at fire time (layout of a
33
+ * backgrounded prerender isn't the design anyone sees) — a later visit to the
34
+ * same path in this session will still be un-scanned and retry.
35
+ */
36
+ export declare function scheduleDesignScan(path: string, emit: (payloadJson: string, elements: number) => void, delayMs?: number): void;
37
+ //# sourceMappingURL=design-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-scan.d.ts","sourceRoot":"","sources":["../../src/client/design-scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAMV,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AA0BzB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB3D;AAyCD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,OAAuB,GAAG,wBAAwB,GAAG,IAAI,CAqKhG;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAe7E;AAID;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,EACrD,OAAO,SAAO,GACb,IAAI,CAyCN"}
@@ -0,0 +1,319 @@
1
+ /** Hard bound on elements measured, so a huge DOM can't stall the main thread. */
2
+ const MAX_ELEMENTS = 1500;
3
+ /** Per-list caps applied before serializing — one page stays a few KB. */
4
+ const CAPS = { fonts: 60, colors: 48, pairs: 60, radii: 24, pad: 40 };
5
+ /** Keep the serialized payload under ingest's acceptance cap with headroom. */
6
+ const MAX_PAYLOAD_CHARS = 28_000;
7
+ /** Tags that never carry visual design signal. */
8
+ const SKIP_TAGS = new Set([
9
+ "SCRIPT",
10
+ "STYLE",
11
+ "NOSCRIPT",
12
+ "TEMPLATE",
13
+ "META",
14
+ "LINK",
15
+ "HEAD",
16
+ "TITLE",
17
+ "IFRAME",
18
+ "BR",
19
+ "WBR",
20
+ ]);
21
+ const INTERACTIVE_TAGS = new Set(["BUTTON", "A", "INPUT", "SELECT", "TEXTAREA", "SUMMARY"]);
22
+ /**
23
+ * Parse a computed color into `#rrggbb` / `#rrggbbaa`, or null when fully
24
+ * transparent or in a syntax we don't recognize (rare wide-gamut outputs are
25
+ * skipped rather than guessed at).
26
+ */
27
+ export function normalizeColor(value) {
28
+ const m = value.match(/^rgba?\(\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*(?:[,/]\s*([\d.]+%?)\s*)?\)$/);
29
+ if (!m)
30
+ return null;
31
+ const to255 = (s) => Math.max(0, Math.min(255, Math.round(parseFloat(s))));
32
+ const r = to255(m[1]);
33
+ const g = to255(m[2]);
34
+ const b = to255(m[3]);
35
+ let a = 1;
36
+ if (m[4] !== undefined) {
37
+ a = m[4].endsWith("%") ? parseFloat(m[4]) / 100 : parseFloat(m[4]);
38
+ }
39
+ if (!(a > 0.02))
40
+ return null; // effectively invisible
41
+ const hex = (n) => n.toString(16).padStart(2, "0");
42
+ const rgb = `#${hex(r)}${hex(g)}${hex(b)}`;
43
+ return a >= 0.98 ? rgb : `${rgb}${hex(Math.round(a * 255))}`;
44
+ }
45
+ /** First font family in the computed list, unquoted. */
46
+ function primaryFamily(fontFamily) {
47
+ const first = fontFamily.split(",")[0]?.trim() ?? "";
48
+ return first.replace(/^["']|["']$/g, "").slice(0, 60);
49
+ }
50
+ /** Whether the element has a direct (non-whitespace) text child. */
51
+ function hasOwnText(el) {
52
+ for (let n = el.firstChild; n; n = n.nextSibling) {
53
+ if (n.nodeType === 3 && n.textContent && n.textContent.trim().length > 0)
54
+ return true;
55
+ }
56
+ return false;
57
+ }
58
+ function ownText(el) {
59
+ let out = "";
60
+ for (let n = el.firstChild; n; n = n.nextSibling) {
61
+ if (n.nodeType === 3 && n.textContent)
62
+ out += n.textContent;
63
+ if (out.length > 80)
64
+ break;
65
+ }
66
+ return out.replace(/\s+/g, " ").trim().slice(0, 48);
67
+ }
68
+ class Tally {
69
+ map = new Map();
70
+ add(key, n = 1) {
71
+ this.map.set(key, (this.map.get(key) ?? 0) + n);
72
+ }
73
+ top(cap) {
74
+ return [...this.map.entries()].sort((a, b) => b[1] - a[1]).slice(0, cap);
75
+ }
76
+ }
77
+ /**
78
+ * Walk the page and reduce it to design tallies. Pure DOM reads — call it when
79
+ * the page has settled. Returns null when there is nothing measurable.
80
+ */
81
+ export function collectDesignScan(root = document.body) {
82
+ if (!root)
83
+ return null;
84
+ const fonts = new Map();
85
+ const text = new Tally();
86
+ const bg = new Tally();
87
+ const border = new Tally();
88
+ const radii = new Tally();
89
+ const pad = new Tally();
90
+ const pairs = new Map();
91
+ // Effective background of an element: its own, or the nearest ancestor with
92
+ // a non-transparent one. Cached per element so shared ancestors are cheap.
93
+ const bgCache = new Map();
94
+ const effectiveBg = (el) => {
95
+ let node = el;
96
+ const chain = [];
97
+ let found = null;
98
+ for (let depth = 0; node && depth < 16; depth++, node = node.parentElement) {
99
+ const cached = bgCache.get(node);
100
+ if (cached !== undefined) {
101
+ found = cached;
102
+ break;
103
+ }
104
+ chain.push(node);
105
+ const c = normalizeColor(getComputedStyle(node).backgroundColor);
106
+ if (c && c.length === 7) {
107
+ // Only opaque backgrounds count as "the" background — a translucent
108
+ // overlay's real color depends on what's beneath it.
109
+ found = c;
110
+ break;
111
+ }
112
+ }
113
+ for (const n of chain)
114
+ bgCache.set(n, found);
115
+ return found;
116
+ };
117
+ const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
118
+ let sampled = 0;
119
+ let visited = 0;
120
+ for (let node = walker.nextNode(); node && sampled < MAX_ELEMENTS && visited < 6000; node = walker.nextNode()) {
121
+ visited++;
122
+ const el = node;
123
+ if (SKIP_TAGS.has(el.tagName))
124
+ continue;
125
+ if (el.closest("svg") && el.tagName !== "svg")
126
+ continue;
127
+ const cs = getComputedStyle(el);
128
+ if (cs.display === "none" || cs.visibility === "hidden")
129
+ continue;
130
+ const rect = el.getBoundingClientRect();
131
+ if (rect.width <= 0 || rect.height <= 0)
132
+ continue;
133
+ sampled++;
134
+ const ownBg = normalizeColor(cs.backgroundColor);
135
+ const hasBorder = cs.borderStyle !== "none" &&
136
+ (parseFloat(cs.borderTopWidth) > 0 ||
137
+ parseFloat(cs.borderBottomWidth) > 0 ||
138
+ parseFloat(cs.borderLeftWidth) > 0 ||
139
+ parseFloat(cs.borderRightWidth) > 0);
140
+ const boxy = ownBg !== null || hasBorder || INTERACTIVE_TAGS.has(el.tagName);
141
+ // Typography + text color + contrast pair — only where text actually is.
142
+ if (hasOwnText(el)) {
143
+ const family = primaryFamily(cs.fontFamily);
144
+ const size = Math.round(parseFloat(cs.fontSize) * 10) / 10;
145
+ const weight = Math.round(parseFloat(cs.fontWeight)) || 400;
146
+ if (family && size > 0) {
147
+ const key = `${family}|${size}|${weight}`;
148
+ let acc = fonts.get(key);
149
+ if (!acc)
150
+ fonts.set(key, (acc = { count: 0, sample: "", tags: new Set() }));
151
+ acc.count++;
152
+ if (acc.tags.size < 4)
153
+ acc.tags.add(el.tagName.toLowerCase());
154
+ if (!acc.sample || (acc.sample.length < 12 && ownText(el).length > acc.sample.length)) {
155
+ acc.sample = ownText(el);
156
+ }
157
+ }
158
+ const fg = normalizeColor(cs.color);
159
+ if (fg) {
160
+ text.add(fg.slice(0, 7));
161
+ const behind = effectiveBg(el);
162
+ if (behind && fg.length === 7 && fg !== behind) {
163
+ const pkey = `${fg}|${behind}`;
164
+ const bold = weight >= 700;
165
+ const p = pairs.get(pkey);
166
+ if (!p)
167
+ pairs.set(pkey, { count: 1, minSize: size, boldAtMin: bold });
168
+ else {
169
+ p.count++;
170
+ if (size < p.minSize) {
171
+ p.minSize = size;
172
+ p.boldAtMin = bold;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ if (ownBg)
179
+ bg.add(ownBg);
180
+ if (hasBorder) {
181
+ const bc = normalizeColor(cs.borderTopColor);
182
+ if (bc)
183
+ border.add(bc);
184
+ }
185
+ // Radius is only a design token where you can see it.
186
+ if (boxy) {
187
+ const rtl = cs.borderTopLeftRadius;
188
+ if (rtl && rtl !== "0px") {
189
+ const corners = [rtl, cs.borderTopRightRadius, cs.borderBottomLeftRadius, cs.borderBottomRightRadius];
190
+ const uniform = corners.every((c) => c === rtl);
191
+ const px = parseFloat(rtl);
192
+ // Anything at or beyond half the box reads as "fully rounded" — pills
193
+ // and circles — whatever literal value produced it.
194
+ const label = rtl.endsWith("%") && px >= 50
195
+ ? "full"
196
+ : px >= Math.min(rect.width, rect.height) / 2
197
+ ? "full"
198
+ : uniform
199
+ ? `${Math.round(px)}px`
200
+ : `${Math.round(px)}px (mixed)`;
201
+ radii.add(label);
202
+ }
203
+ for (const side of [cs.paddingTop, cs.paddingRight, cs.paddingBottom, cs.paddingLeft]) {
204
+ const v = Math.round(parseFloat(side));
205
+ if (v > 0)
206
+ pad.add(String(v));
207
+ }
208
+ }
209
+ }
210
+ if (sampled === 0 || fonts.size === 0)
211
+ return null;
212
+ const fontTuples = [...fonts.entries()]
213
+ .sort((a, b) => b[1].count - a[1].count)
214
+ .slice(0, CAPS.fonts)
215
+ .map(([key, acc]) => {
216
+ const [family, size, weight] = key.split("|");
217
+ return [family, Number(size), Number(weight), acc.count, acc.sample, [...acc.tags].join(",")];
218
+ });
219
+ const colorTuples = (t) => t.top(CAPS.colors);
220
+ const pairTuples = [...pairs.entries()]
221
+ .sort((a, b) => b[1].count - a[1].count)
222
+ .slice(0, CAPS.pairs)
223
+ .map(([key, p]) => {
224
+ const [fg, behind] = key.split("|");
225
+ return [fg, behind, p.count, p.minSize, p.boldAtMin ? 1 : 0];
226
+ });
227
+ const radiusTuples = radii.top(CAPS.radii);
228
+ const padTuples = pad
229
+ .top(CAPS.pad)
230
+ .map(([px, count]) => [Number(px), count]);
231
+ return {
232
+ v: 1,
233
+ el: sampled,
234
+ fonts: fontTuples,
235
+ text: colorTuples(text),
236
+ bg: colorTuples(bg),
237
+ border: colorTuples(border),
238
+ pairs: pairTuples,
239
+ radii: radiusTuples,
240
+ pad: padTuples,
241
+ };
242
+ }
243
+ /** Serialize, shrinking the longest lists if a pathological page overflows. */
244
+ export function serializeDesignScan(payload) {
245
+ let out = JSON.stringify(payload);
246
+ if (out.length <= MAX_PAYLOAD_CHARS)
247
+ return out;
248
+ const shrunk = {
249
+ ...payload,
250
+ fonts: payload.fonts.slice(0, 30),
251
+ text: payload.text.slice(0, 24),
252
+ bg: payload.bg.slice(0, 24),
253
+ border: payload.border.slice(0, 16),
254
+ pairs: payload.pairs.slice(0, 30),
255
+ radii: payload.radii.slice(0, 16),
256
+ pad: payload.pad.slice(0, 24),
257
+ };
258
+ out = JSON.stringify(shrunk);
259
+ return out.length <= MAX_PAYLOAD_CHARS ? out : "";
260
+ }
261
+ const SCANNED_PREFIX = "polishd_ds:";
262
+ /**
263
+ * Scan `path` once per session, after the page settles, and hand the payload
264
+ * to `emit`. Skips silently when the tab is hidden at fire time (layout of a
265
+ * backgrounded prerender isn't the design anyone sees) — a later visit to the
266
+ * same path in this session will still be un-scanned and retry.
267
+ */
268
+ export function scheduleDesignScan(path, emit, delayMs = 1500) {
269
+ let done = false;
270
+ try {
271
+ if (sessionStorage.getItem(SCANNED_PREFIX + path))
272
+ return;
273
+ }
274
+ catch {
275
+ /* storage blocked — scan anyway, worst case is a duplicate tally */
276
+ }
277
+ const run = () => {
278
+ if (done)
279
+ return;
280
+ done = true;
281
+ // The page navigated on while we waited — that path's own scan will fire.
282
+ if (location.pathname !== path)
283
+ return;
284
+ if (document.visibilityState === "hidden")
285
+ return;
286
+ try {
287
+ const payload = collectDesignScan();
288
+ if (!payload)
289
+ return;
290
+ const json = serializeDesignScan(payload);
291
+ if (!json)
292
+ return;
293
+ try {
294
+ sessionStorage.setItem(SCANNED_PREFIX + path, "1");
295
+ }
296
+ catch {
297
+ /* fine */
298
+ }
299
+ emit(json, payload.el);
300
+ }
301
+ catch {
302
+ // A scan must never break the host page.
303
+ }
304
+ };
305
+ const idle = () => {
306
+ if (typeof requestIdleCallback === "function")
307
+ requestIdleCallback(run, { timeout: 2000 });
308
+ else
309
+ setTimeout(run, 250);
310
+ };
311
+ if (document.readyState === "complete")
312
+ setTimeout(idle, delayMs);
313
+ else {
314
+ addEventListener("load", () => setTimeout(idle, delayMs), { once: true });
315
+ // Soft navigations never fire `load` again — fall back to a plain delay.
316
+ setTimeout(idle, delayMs + 2500);
317
+ }
318
+ }
319
+ //# sourceMappingURL=design-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-scan.js","sourceRoot":"","sources":["../../src/client/design-scan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/client/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAGrE,KAAK,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAI1C,wBAAgB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,IAAI,CAiR3D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/client/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAItF,KAAK,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAS1C,wBAAgB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,IAAI,CA8U3D"}