@polishd/next 0.2.3-dev.3 → 0.2.3-dev.4
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 +39 -23
- package/README.md +5 -7
- package/bin/init.mjs +1 -4
- package/dist/ai/actions.d.ts +7 -1
- package/dist/ai/actions.d.ts.map +1 -1
- package/dist/ai/actions.js +10 -0
- package/dist/ai/actions.js.map +1 -1
- package/dist/ai/fix.d.ts +14 -0
- package/dist/ai/fix.d.ts.map +1 -0
- package/dist/ai/fix.js +254 -0
- package/dist/ai/fix.js.map +1 -0
- package/dist/ai/issues.d.ts +12 -0
- package/dist/ai/issues.d.ts.map +1 -1
- package/dist/ai/issues.js +16 -2
- package/dist/ai/issues.js.map +1 -1
- package/dist/ai/types.d.ts +49 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +4 -2
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/issue-list.d.ts +11 -0
- package/dist/dashboard/issue-list.d.ts.map +1 -0
- package/dist/dashboard/issue-list.js +159 -0
- package/dist/dashboard/issue-list.js.map +1 -0
- package/dist/dashboard/issues.d.ts +31 -2
- package/dist/dashboard/issues.d.ts.map +1 -1
- package/dist/dashboard/issues.js +4 -71
- package/dist/dashboard/issues.js.map +1 -1
- package/dist/dashboard/markdown-parse.d.ts +87 -0
- package/dist/dashboard/markdown-parse.d.ts.map +1 -0
- package/dist/dashboard/markdown-parse.js +244 -0
- package/dist/dashboard/markdown-parse.js.map +1 -0
- package/dist/dashboard/markdown.d.ts +5 -0
- package/dist/dashboard/markdown.d.ts.map +1 -0
- package/dist/dashboard/markdown.js +65 -0
- package/dist/dashboard/markdown.js.map +1 -0
- package/dist/dashboard/snapshot-actions.d.ts +5 -15
- package/dist/dashboard/snapshot-actions.d.ts.map +1 -1
- package/dist/dashboard/snapshot-actions.js +24 -64
- package/dist/dashboard/snapshot-actions.js.map +1 -1
- package/dist/dashboard/snapshots.d.ts.map +1 -1
- package/dist/dashboard/snapshots.js +8 -58
- package/dist/dashboard/snapshots.js.map +1 -1
- package/dist/dashboard.css +70 -18
- package/dist/server/snapshots.d.ts +6 -37
- package/dist/server/snapshots.d.ts.map +1 -1
- package/dist/server/snapshots.js +144 -271
- package/dist/server/snapshots.js.map +1 -1
- package/docs/SETUP.md +0 -10
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
10
10
|
* expands into a full-height lightbox.
|
|
11
11
|
*/
|
|
12
12
|
import { useEffect, useState, useTransition } from "react";
|
|
13
|
-
import {
|
|
13
|
+
import { captureSnapshotAction, getSnapshotImageAction } from "./snapshot-actions";
|
|
14
14
|
import { border, card, labelCls, primaryBtn, relTime, RefreshIcon } from "./ui";
|
|
15
15
|
const DEVICES = ["desktop", "phone"];
|
|
16
16
|
const THEMES = ["light", "dark"];
|
|
@@ -53,7 +53,6 @@ export default function SnapshotsCard({ initial, captureIssue }) {
|
|
|
53
53
|
const [error, setError] = useState(null);
|
|
54
54
|
const [zoom, setZoom] = useState(null);
|
|
55
55
|
const [pending, startCapture] = useTransition();
|
|
56
|
-
const [progress, setProgress] = useState(null);
|
|
57
56
|
const selected = snapshots.find((s) => s.id === selectedId) ?? snapshots[0] ?? null;
|
|
58
57
|
// A site with no dark mode has its identical dark shots dropped at capture
|
|
59
58
|
// time — hide the toggle rather than offering an empty view.
|
|
@@ -61,56 +60,13 @@ export default function SnapshotsCard({ initial, captureIssue }) {
|
|
|
61
60
|
const capture = () => {
|
|
62
61
|
setError(null);
|
|
63
62
|
startCapture(async () => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
const begun = await beginSnapshotCaptureAction();
|
|
70
|
-
if (!begun.ok) {
|
|
71
|
-
setError(begun.message);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
setProgress({ done: 0, total: begun.routes.length });
|
|
75
|
-
const failed = [];
|
|
76
|
-
let failure = null;
|
|
77
|
-
for (const [i, route] of begun.routes.entries()) {
|
|
78
|
-
try {
|
|
79
|
-
const res = await captureSnapshotRouteAction(begun.id, route);
|
|
80
|
-
if (!res.ok) {
|
|
81
|
-
failed.push(route);
|
|
82
|
-
failure = res.message;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
failed.push(route);
|
|
87
|
-
failure =
|
|
88
|
-
"the request failed mid-shoot — usually a serverless function " +
|
|
89
|
-
"time limit; the host's function logs will name the exact failure";
|
|
90
|
-
}
|
|
91
|
-
setProgress({ done: i + 1, total: begun.routes.length });
|
|
92
|
-
}
|
|
93
|
-
// Finish even when every route failed: it sweeps the capture's state
|
|
94
|
-
// and reports "every page failed" — the per-route failure is more
|
|
95
|
-
// specific, so it wins the error box when there is one.
|
|
96
|
-
const fin = await finishSnapshotCaptureAction(begun.id);
|
|
97
|
-
if (fin.ok) {
|
|
98
|
-
setSnapshots((prev) => [fin.snapshot, ...prev]);
|
|
99
|
-
setSelectedId(fin.snapshot.id);
|
|
100
|
-
if (failed.length > 0) {
|
|
101
|
-
setError(`${failed.length} of ${begun.routes.length} page${begun.routes.length === 1 ? "" : "s"} failed to capture (${failure}). The rest are in the snapshot.`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
setError(failure ? `Capture failed: ${failure}.` : fin.message);
|
|
106
|
-
}
|
|
63
|
+
const res = await captureSnapshotAction();
|
|
64
|
+
if (res.ok) {
|
|
65
|
+
setSnapshots((prev) => [res.snapshot, ...prev]);
|
|
66
|
+
setSelectedId(res.snapshot.id);
|
|
107
67
|
}
|
|
108
|
-
|
|
109
|
-
setError(
|
|
110
|
-
"logs will name the exact failure.");
|
|
111
|
-
}
|
|
112
|
-
finally {
|
|
113
|
-
setProgress(null);
|
|
68
|
+
else {
|
|
69
|
+
setError(res.message);
|
|
114
70
|
}
|
|
115
71
|
});
|
|
116
72
|
};
|
|
@@ -125,13 +81,7 @@ export default function SnapshotsCard({ initial, captureIssue }) {
|
|
|
125
81
|
// clicks group under these on the collecting side, so "does anyone shoot
|
|
126
82
|
// a second snapshot?" is answerable. Inert for host apps.
|
|
127
83
|
_jsxs("section", { "data-component": "design-snapshots", className: `mb-8 ${card} overflow-hidden`, children: [_jsxs("div", { className: `flex flex-wrap items-center justify-between gap-3 border-b ${border} px-4 py-3 sm:px-5`, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: labelCls, children: "Site snapshots" }), selected && (_jsx("span", { className: "hidden rounded-full bg-[#1a1a1a] px-2 py-0.5 text-[10px] font-medium text-[#888] sm:inline", children: selected.origin }))] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [selected && (_jsxs(_Fragment, { children: [_jsx(TogglePills, { options: DEVICES, value: device, onChange: setDevice, component: "design-snapshot-device" }), !selected.noDarkMode && (_jsx(TogglePills, { options: THEMES, value: theme, onChange: setTheme, component: "design-snapshot-theme" })), snapshots.length > 1 && (_jsx("select", { "data-component": "design-snapshot-history", value: selected.id, onChange: (e) => setSelectedId(e.target.value), className: "rounded-md border border-[#2e2e2e] bg-[#111] px-2 py-1 text-[11px] text-[#aaa] focus:border-[#555] focus:outline-none", children: snapshots.map((s) => (_jsx("option", { value: s.id, children: relTime(s.capturedAt) }, s.id))) }))] })), _jsx("button", { type: "button", "data-component": "design-snapshot-capture", onClick: capture, disabled: pending || captureIssue !== null, title: captureIssue ??
|
|
128
|
-
"Screenshot every scanned page — phone and desktop, light and dark", className: primaryBtn, children: _jsxs("span", { className: "flex items-center gap-1.5", children: [_jsx(RefreshIcon, { spinning: pending }), pending
|
|
129
|
-
? progress
|
|
130
|
-
? `Shooting page ${Math.min(progress.done + 1, progress.total)} of ${progress.total}…`
|
|
131
|
-
: "Shooting pages…"
|
|
132
|
-
: selected
|
|
133
|
-
? "Capture again"
|
|
134
|
-
: "Capture snapshot"] }) })] })] }), _jsxs("div", { className: "px-4 py-4 sm:px-5 sm:py-5", children: [captureIssue && (_jsx("div", { className: "mb-3 rounded-md border border-amber-900/50 bg-amber-950/30 px-3 py-2 text-[12px] text-amber-400", children: captureIssue })), error && (_jsx("div", { className: "mb-3 rounded-md border border-red-900/50 bg-red-950/30 px-3 py-2 text-[12px] text-red-400", children: error })), pending && (_jsx("p", { className: "mb-3 text-[12px] text-[#888]", children: "Shooting every scanned page at two sizes in two themes, one page at a time \u2014 this can take a minute. Keep this tab open." })), !selected && !pending && (_jsx("p", { className: "text-[13px] leading-relaxed text-[#888]", children: "No snapshots yet. Capture one to see every page of the site as it renders right now \u2014 the \u201Cbefore\u201D to hold future design changes against." })), selected && (_jsxs(_Fragment, { children: [shots.length === 0 ? (_jsxs("p", { className: "text-[13px] text-[#888]", children: ["No ", device, "/", theme, " shots in this snapshot."] })) : (_jsx("div", { className: `grid gap-4 ${device === "phone"
|
|
84
|
+
"Screenshot every scanned page — phone and desktop, light and dark", className: primaryBtn, children: _jsxs("span", { className: "flex items-center gap-1.5", children: [_jsx(RefreshIcon, { spinning: pending }), pending ? "Shooting pages…" : selected ? "Capture again" : "Capture snapshot"] }) })] })] }), _jsxs("div", { className: "px-4 py-4 sm:px-5 sm:py-5", children: [captureIssue && (_jsx("div", { className: "mb-3 rounded-md border border-amber-900/50 bg-amber-950/30 px-3 py-2 text-[12px] text-amber-400", children: captureIssue })), error && (_jsx("div", { className: "mb-3 rounded-md border border-red-900/50 bg-red-950/30 px-3 py-2 text-[12px] text-red-400", children: error })), pending && (_jsx("p", { className: "mb-3 text-[12px] text-[#888]", children: "Shooting every scanned page at two sizes in two themes \u2014 this can take a minute. Keep this tab open." })), !selected && !pending && (_jsx("p", { className: "text-[13px] leading-relaxed text-[#888]", children: "No snapshots yet. Capture one to see every page of the site as it renders right now \u2014 the \u201Cbefore\u201D to hold future design changes against." })), selected && (_jsxs(_Fragment, { children: [shots.length === 0 ? (_jsxs("p", { className: "text-[13px] text-[#888]", children: ["No ", device, "/", theme, " shots in this snapshot."] })) : (_jsx("div", { className: `grid gap-4 ${device === "phone"
|
|
135
85
|
? "grid-cols-3 sm:grid-cols-5 lg:grid-cols-6"
|
|
136
86
|
: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4"}`, children: shots.map((s) => (_jsx(ShotTile, { snapshotId: selected.id, shot: s, onZoom: (src, route) => setZoom({ src, route }) }, `${selected.id}|${s.file}`))) })), _jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-[#555]", children: [_jsxs("span", { children: ["Captured ", relTime(selected.capturedAt)] }), selected.noDarkMode && (_jsx("span", { className: "rounded-full bg-[#1a1a1a] px-2 py-0.5 text-[#777]", children: "Site renders identically in dark mode" })), skipped.length > 0 && (_jsxs("span", { className: "text-amber-400/80", children: [skipped.length, " page", skipped.length === 1 ? "" : "s", " skipped", skipped[0].skipped ? ` (${skipped[0].skipped})` : ""] })), selected.authWalled.length > 0 && (_jsxs("span", { className: "text-amber-400/80", children: ["behind login: ", selected.authWalled.slice(0, 3).join(", "), selected.authWalled.length > 3 ? ", …" : ""] }))] })] }))] }), zoom && (_jsx("div", { role: "dialog", "aria-label": `${zoom.route} screenshot`, onClick: () => setZoom(null), className: "fixed inset-0 z-50 flex cursor-zoom-out items-start justify-center overflow-y-auto bg-black/85 p-6", children: _jsx("img", { src: zoom.src, alt: `${zoom.route} full screenshot`, className: "w-full max-w-3xl rounded-md border border-[#333]" }) }))] }));
|
|
137
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/dashboard/snapshots.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;;;GAQG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,
|
|
1
|
+
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/dashboard/snapshots.tsx"],"names":[],"mappings":"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"}
|
package/dist/dashboard.css
CHANGED
|
@@ -93,6 +93,7 @@
|
|
|
93
93
|
--color-purple-300: oklch(82.7% .119 306.383);
|
|
94
94
|
--color-purple-400: oklch(71.4% .203 305.504);
|
|
95
95
|
--color-purple-500: oklch(62.7% .265 303.9);
|
|
96
|
+
--color-purple-950: oklch(29.1% .149 302.717);
|
|
96
97
|
--color-black: #000;
|
|
97
98
|
--color-white: #fff;
|
|
98
99
|
--spacing: .25rem;
|
|
@@ -401,6 +402,10 @@
|
|
|
401
402
|
margin-inline: auto;
|
|
402
403
|
}
|
|
403
404
|
|
|
405
|
+
.polishd-root.polishd-root .my-1 {
|
|
406
|
+
margin-block: var(--spacing);
|
|
407
|
+
}
|
|
408
|
+
|
|
404
409
|
.polishd-root.polishd-root .mt-0\.5 {
|
|
405
410
|
margin-top: calc(var(--spacing) * .5);
|
|
406
411
|
}
|
|
@@ -657,10 +662,6 @@
|
|
|
657
662
|
height: 1px;
|
|
658
663
|
}
|
|
659
664
|
|
|
660
|
-
.polishd-root.polishd-root .max-h-96 {
|
|
661
|
-
max-height: calc(var(--spacing) * 96);
|
|
662
|
-
}
|
|
663
|
-
|
|
664
665
|
.polishd-root.polishd-root .max-h-\[80vh\] {
|
|
665
666
|
max-height: 80vh;
|
|
666
667
|
}
|
|
@@ -994,8 +995,12 @@
|
|
|
994
995
|
resize: vertical;
|
|
995
996
|
}
|
|
996
997
|
|
|
997
|
-
.polishd-root.polishd-root .list-
|
|
998
|
-
list-style-type:
|
|
998
|
+
.polishd-root.polishd-root .list-decimal {
|
|
999
|
+
list-style-type: decimal;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
.polishd-root.polishd-root .list-disc {
|
|
1003
|
+
list-style-type: disc;
|
|
999
1004
|
}
|
|
1000
1005
|
|
|
1001
1006
|
.polishd-root.polishd-root .grid-cols-1 {
|
|
@@ -1094,6 +1099,12 @@
|
|
|
1094
1099
|
gap: 1px;
|
|
1095
1100
|
}
|
|
1096
1101
|
|
|
1102
|
+
.polishd-root.polishd-root :where(.space-y-1 > :not(:last-child)) {
|
|
1103
|
+
--tw-space-y-reverse: 0;
|
|
1104
|
+
margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
|
|
1105
|
+
margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1097
1108
|
.polishd-root.polishd-root :where(.space-y-1\.5 > :not(:last-child)) {
|
|
1098
1109
|
--tw-space-y-reverse: 0;
|
|
1099
1110
|
margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));
|
|
@@ -1261,6 +1272,11 @@
|
|
|
1261
1272
|
border-left-width: 1px;
|
|
1262
1273
|
}
|
|
1263
1274
|
|
|
1275
|
+
.polishd-root.polishd-root .border-l-2 {
|
|
1276
|
+
border-left-style: var(--tw-border-style);
|
|
1277
|
+
border-left-width: 2px;
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1264
1280
|
.polishd-root.polishd-root .border-dashed {
|
|
1265
1281
|
--tw-border-style: dashed;
|
|
1266
1282
|
border-style: dashed;
|
|
@@ -1274,6 +1290,10 @@
|
|
|
1274
1290
|
border-color: oklab(34.6182% -.0177443 -.0713795 / .6);
|
|
1275
1291
|
}
|
|
1276
1292
|
|
|
1293
|
+
.polishd-root.polishd-root .border-\[\#1f1f1f\] {
|
|
1294
|
+
border-color: #1f1f1f;
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1277
1297
|
.polishd-root.polishd-root .border-\[\#2e2e2e\] {
|
|
1278
1298
|
border-color: #2e2e2e;
|
|
1279
1299
|
}
|
|
@@ -1560,6 +1580,10 @@
|
|
|
1560
1580
|
background-color: var(--color-purple-500);
|
|
1561
1581
|
}
|
|
1562
1582
|
|
|
1583
|
+
.polishd-root.polishd-root .bg-purple-950 {
|
|
1584
|
+
background-color: var(--color-purple-950);
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1563
1587
|
.polishd-root.polishd-root .bg-red-500 {
|
|
1564
1588
|
background-color: var(--color-red-500);
|
|
1565
1589
|
}
|
|
@@ -1740,6 +1764,10 @@
|
|
|
1740
1764
|
padding-block: 1px;
|
|
1741
1765
|
}
|
|
1742
1766
|
|
|
1767
|
+
.polishd-root.polishd-root .pt-1 {
|
|
1768
|
+
padding-top: var(--spacing);
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1743
1771
|
.polishd-root.polishd-root .pt-3 {
|
|
1744
1772
|
padding-top: calc(var(--spacing) * 3);
|
|
1745
1773
|
}
|
|
@@ -1820,6 +1848,10 @@
|
|
|
1820
1848
|
padding-left: calc(var(--spacing) * 1.5);
|
|
1821
1849
|
}
|
|
1822
1850
|
|
|
1851
|
+
.polishd-root.polishd-root .pl-3 {
|
|
1852
|
+
padding-left: calc(var(--spacing) * 3);
|
|
1853
|
+
}
|
|
1854
|
+
|
|
1823
1855
|
.polishd-root.polishd-root .pl-4 {
|
|
1824
1856
|
padding-left: calc(var(--spacing) * 4);
|
|
1825
1857
|
}
|
|
@@ -1860,6 +1892,10 @@
|
|
|
1860
1892
|
font-family: var(--font-sans);
|
|
1861
1893
|
}
|
|
1862
1894
|
|
|
1895
|
+
.polishd-root.polishd-root .text-\[0\.92em\] {
|
|
1896
|
+
font-size: .92em;
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1863
1899
|
.polishd-root.polishd-root .text-\[8px\] {
|
|
1864
1900
|
font-size: 8px;
|
|
1865
1901
|
}
|
|
@@ -2160,6 +2196,10 @@
|
|
|
2160
2196
|
color: #8a6a6a;
|
|
2161
2197
|
}
|
|
2162
2198
|
|
|
2199
|
+
.polishd-root.polishd-root .text-\[\#8ab4f8\] {
|
|
2200
|
+
color: #8ab4f8;
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2163
2203
|
.polishd-root.polishd-root .text-\[\#444\] {
|
|
2164
2204
|
color: #444;
|
|
2165
2205
|
}
|
|
@@ -2442,14 +2482,6 @@
|
|
|
2442
2482
|
transition-timing-function: var(--ease-out);
|
|
2443
2483
|
}
|
|
2444
2484
|
|
|
2445
|
-
.polishd-root.polishd-root .group-open\:hidden:is(:where(.group):is([open], :popover-open, :open) *) {
|
|
2446
|
-
display: none;
|
|
2447
|
-
}
|
|
2448
|
-
|
|
2449
|
-
.polishd-root.polishd-root .group-open\:inline:is(:where(.group):is([open], :popover-open, :open) *) {
|
|
2450
|
-
display: inline;
|
|
2451
|
-
}
|
|
2452
|
-
|
|
2453
2485
|
@media (hover: hover) {
|
|
2454
2486
|
.polishd-root.polishd-root .group-hover\:scale-100:is(:where(.group):hover *) {
|
|
2455
2487
|
--tw-scale-x: 100%;
|
|
@@ -2487,6 +2519,22 @@
|
|
|
2487
2519
|
opacity: 1;
|
|
2488
2520
|
}
|
|
2489
2521
|
|
|
2522
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\] ::marker {
|
|
2523
|
+
color: #555;
|
|
2524
|
+
}
|
|
2525
|
+
|
|
2526
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\]::marker {
|
|
2527
|
+
color: #555;
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2530
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\] ::-webkit-details-marker {
|
|
2531
|
+
color: #555;
|
|
2532
|
+
}
|
|
2533
|
+
|
|
2534
|
+
.polishd-root.polishd-root .marker\:text-\[\#555\]::-webkit-details-marker {
|
|
2535
|
+
color: #555;
|
|
2536
|
+
}
|
|
2537
|
+
|
|
2490
2538
|
.polishd-root.polishd-root .placeholder\:text-\[\#555\]::placeholder {
|
|
2491
2539
|
color: #555;
|
|
2492
2540
|
}
|
|
@@ -2557,6 +2605,10 @@
|
|
|
2557
2605
|
color: var(--color-white);
|
|
2558
2606
|
}
|
|
2559
2607
|
|
|
2608
|
+
.polishd-root.polishd-root .hover\:underline:hover {
|
|
2609
|
+
text-decoration-line: underline;
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2560
2612
|
.polishd-root.polishd-root .hover\:opacity-90:hover {
|
|
2561
2613
|
opacity: .9;
|
|
2562
2614
|
}
|
|
@@ -2664,6 +2716,10 @@
|
|
|
2664
2716
|
max-width: var(--container-md);
|
|
2665
2717
|
}
|
|
2666
2718
|
|
|
2719
|
+
.polishd-root.polishd-root .sm\:max-w-xl {
|
|
2720
|
+
max-width: var(--container-xl);
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2667
2723
|
.polishd-root.polishd-root .sm\:grid-cols-2 {
|
|
2668
2724
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
2669
2725
|
}
|
|
@@ -2848,10 +2904,6 @@
|
|
|
2848
2904
|
}
|
|
2849
2905
|
}
|
|
2850
2906
|
|
|
2851
|
-
.polishd-root.polishd-root .\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker {
|
|
2852
|
-
display: none;
|
|
2853
|
-
}
|
|
2854
|
-
|
|
2855
2907
|
@property --tw-translate-x {
|
|
2856
2908
|
syntax: "*";
|
|
2857
2909
|
inherits: false;
|
|
@@ -49,7 +49,7 @@ export declare function listSnapshots(): Promise<PolishdSnapshot[]>;
|
|
|
49
49
|
* are only ever fetched from the URL the index recorded at capture time.
|
|
50
50
|
*/
|
|
51
51
|
export declare function readSnapshotImage(snapshotId: string, file: string): Promise<string | null>;
|
|
52
|
-
export interface
|
|
52
|
+
export interface CaptureSnapshotInput {
|
|
53
53
|
/** The site to shoot, scheme included. */
|
|
54
54
|
origin: string;
|
|
55
55
|
/** Paths to shoot — discovery is skipped, these are shot exactly. */
|
|
@@ -57,21 +57,6 @@ export interface BeginSnapshotInput {
|
|
|
57
57
|
/** Design-metrics fingerprint at capture time, for later pairing. */
|
|
58
58
|
fingerprint: string | null;
|
|
59
59
|
}
|
|
60
|
-
export type BeginSnapshotResult = {
|
|
61
|
-
ok: true;
|
|
62
|
-
id: string;
|
|
63
|
-
routes: string[];
|
|
64
|
-
} | {
|
|
65
|
-
ok: false;
|
|
66
|
-
message: string;
|
|
67
|
-
};
|
|
68
|
-
export type CaptureRouteResult = {
|
|
69
|
-
ok: true;
|
|
70
|
-
shots: PolishdSnapshotShot[];
|
|
71
|
-
} | {
|
|
72
|
-
ok: false;
|
|
73
|
-
message: string;
|
|
74
|
-
};
|
|
75
60
|
export type CaptureSnapshotResult = {
|
|
76
61
|
ok: true;
|
|
77
62
|
snapshot: PolishdSnapshot;
|
|
@@ -79,27 +64,6 @@ export type CaptureSnapshotResult = {
|
|
|
79
64
|
ok: false;
|
|
80
65
|
message: string;
|
|
81
66
|
};
|
|
82
|
-
/**
|
|
83
|
-
* Start a capture: run the environment preflight, sweep any unfinished
|
|
84
|
-
* predecessor's images, and park the plan in the store. The returned routes
|
|
85
|
-
* are what the caller should then feed to `captureSnapshotRoute`, one call
|
|
86
|
-
* each, before `finishSnapshot` records the run.
|
|
87
|
-
*/
|
|
88
|
-
export declare function beginSnapshot(input: BeginSnapshotInput): Promise<BeginSnapshotResult>;
|
|
89
|
-
/**
|
|
90
|
-
* Shoot one route of the capture `beginSnapshot` started — both devices, both
|
|
91
|
-
* themes — store its images, and append the results to the pending record.
|
|
92
|
-
* Bounded work per call by design: this is the request that has to fit inside
|
|
93
|
-
* a serverless host's function time limit.
|
|
94
|
-
*/
|
|
95
|
-
export declare function captureSnapshotRoute(id: string, route: string): Promise<CaptureRouteResult>;
|
|
96
|
-
/**
|
|
97
|
-
* Close out the capture: record the accumulated shots in the snapshot index
|
|
98
|
-
* and prune old snapshots past `MAX_SNAPSHOTS`, images included. Called once
|
|
99
|
-
* every route has been attempted — routes whose calls failed outright are
|
|
100
|
-
* simply absent from the snapshot.
|
|
101
|
-
*/
|
|
102
|
-
export declare function finishSnapshot(id: string): Promise<CaptureSnapshotResult>;
|
|
103
67
|
/**
|
|
104
68
|
* A problem that will make the next capture fail, detectable from the
|
|
105
69
|
* environment alone — or null when none is. Covers the two setup gaps a
|
|
@@ -111,4 +75,9 @@ export declare function finishSnapshot(id: string): Promise<CaptureSnapshotResul
|
|
|
111
75
|
* the dashboard.
|
|
112
76
|
*/
|
|
113
77
|
export declare function snapshotCaptureIssue(): Promise<string | null>;
|
|
78
|
+
/**
|
|
79
|
+
* Shoot the given routes and record the run in the snapshot index. Old
|
|
80
|
+
* snapshots past `MAX_SNAPSHOTS` are pruned, images included.
|
|
81
|
+
*/
|
|
82
|
+
export declare function captureSnapshot(input: CaptureSnapshotInput): Promise<CaptureSnapshotResult>;
|
|
114
83
|
//# sourceMappingURL=snapshots.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"AA6BA,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,oEAAoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAC;CACrB;AAYD,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAsCtC,iFAAiF;AACjF,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAEhE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAwED,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qEAAqE;IACrE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA+DnC;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0CnE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAkIhC"}
|