@polishd/next 0.2.3-dev.4 → 0.2.3-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +12 -5
  3. package/bin/init.mjs +4 -1
  4. package/dist/ai/actions.d.ts +7 -1
  5. package/dist/ai/actions.d.ts.map +1 -1
  6. package/dist/ai/actions.js +10 -1
  7. package/dist/ai/actions.js.map +1 -1
  8. package/dist/ai/design.d.ts +5 -1
  9. package/dist/ai/design.d.ts.map +1 -1
  10. package/dist/ai/design.js +21 -4
  11. package/dist/ai/design.js.map +1 -1
  12. package/dist/ai/issues.d.ts +22 -11
  13. package/dist/ai/issues.d.ts.map +1 -1
  14. package/dist/ai/issues.js +102 -43
  15. package/dist/ai/issues.js.map +1 -1
  16. package/dist/ai/types.d.ts +3 -0
  17. package/dist/ai/types.d.ts.map +1 -1
  18. package/dist/dashboard/design-review-card.d.ts +3 -1
  19. package/dist/dashboard/design-review-card.d.ts.map +1 -1
  20. package/dist/dashboard/design-review-card.js +14 -6
  21. package/dist/dashboard/design-review-card.js.map +1 -1
  22. package/dist/dashboard/design.d.ts.map +1 -1
  23. package/dist/dashboard/design.js +75 -17
  24. package/dist/dashboard/design.js.map +1 -1
  25. package/dist/dashboard/file-bug-button.d.ts +14 -0
  26. package/dist/dashboard/file-bug-button.d.ts.map +1 -0
  27. package/dist/dashboard/file-bug-button.js +37 -0
  28. package/dist/dashboard/file-bug-button.js.map +1 -0
  29. package/dist/dashboard/snapshot-actions.d.ts +15 -5
  30. package/dist/dashboard/snapshot-actions.d.ts.map +1 -1
  31. package/dist/dashboard/snapshot-actions.js +69 -24
  32. package/dist/dashboard/snapshot-actions.js.map +1 -1
  33. package/dist/dashboard/snapshots.d.ts.map +1 -1
  34. package/dist/dashboard/snapshots.js +58 -8
  35. package/dist/dashboard/snapshots.js.map +1 -1
  36. package/dist/dashboard/summary.d.ts.map +1 -1
  37. package/dist/dashboard/summary.js +8 -36
  38. package/dist/dashboard/summary.js.map +1 -1
  39. package/dist/dashboard/ui.d.ts +1 -0
  40. package/dist/dashboard/ui.d.ts.map +1 -1
  41. package/dist/dashboard/ui.js +1 -0
  42. package/dist/dashboard/ui.js.map +1 -1
  43. package/dist/dashboard/value-preview.d.ts +47 -0
  44. package/dist/dashboard/value-preview.d.ts.map +1 -0
  45. package/dist/dashboard/value-preview.js +138 -0
  46. package/dist/dashboard/value-preview.js.map +1 -0
  47. package/dist/dashboard.css +170 -50
  48. package/dist/server/snapshots.d.ts +69 -10
  49. package/dist/server/snapshots.d.ts.map +1 -1
  50. package/dist/server/snapshots.js +407 -158
  51. package/dist/server/snapshots.js.map +1 -1
  52. package/dist/server/value-previews.d.ts +47 -0
  53. package/dist/server/value-previews.d.ts.map +1 -0
  54. package/dist/server/value-previews.js +313 -0
  55. package/dist/server/value-previews.js.map +1 -0
  56. package/dist/shared/design-values.d.ts +71 -0
  57. package/dist/shared/design-values.d.ts.map +1 -0
  58. package/dist/shared/design-values.js +98 -0
  59. package/dist/shared/design-values.js.map +1 -0
  60. package/docs/SETUP.md +10 -0
  61. package/package.json +1 -1
@@ -108,6 +108,7 @@
108
108
  --font-weight-medium: 500;
109
109
  --font-weight-semibold: 600;
110
110
  --font-weight-bold: 700;
111
+ --font-weight-extrabold: 800;
111
112
  --tracking-tight: -.025em;
112
113
  --tracking-normal: 0em;
113
114
  --tracking-wider: .05em;
@@ -118,6 +119,7 @@
118
119
  --radius-lg: .5rem;
119
120
  --radius-xl: .75rem;
120
121
  --ease-out: cubic-bezier(0, 0, .2, 1);
122
+ --ease-in-out: cubic-bezier(.4, 0, .2, 1);
121
123
  --animate-spin: spin 1s linear infinite;
122
124
  --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;
123
125
  --default-transition-duration: .15s;
@@ -220,6 +222,10 @@
220
222
  border-top-width: 1px;
221
223
  }
222
224
 
225
+ .polishd-root.polishd-root .\[container-type\:inline-size\] {
226
+ container-type: inline-size;
227
+ }
228
+
223
229
  .polishd-root.polishd-root .pointer-events-none {
224
230
  pointer-events: none;
225
231
  }
@@ -390,6 +396,14 @@
390
396
  }
391
397
  }
392
398
 
399
+ .polishd-root.polishd-root .-m-1\.5 {
400
+ margin: calc(var(--spacing) * -1.5);
401
+ }
402
+
403
+ .polishd-root.polishd-root .-mx-1\.5 {
404
+ margin-inline: calc(var(--spacing) * -1.5);
405
+ }
406
+
393
407
  .polishd-root.polishd-root .mx-1\.5 {
394
408
  margin-inline: calc(var(--spacing) * 1.5);
395
409
  }
@@ -398,6 +412,10 @@
398
412
  margin-inline: calc(var(--spacing) * 4);
399
413
  }
400
414
 
415
+ .polishd-root.polishd-root .mx-\[0\.02em\] {
416
+ margin-inline: .02em;
417
+ }
418
+
401
419
  .polishd-root.polishd-root .mx-auto {
402
420
  margin-inline: auto;
403
421
  }
@@ -450,6 +468,10 @@
450
468
  margin-top: calc(var(--spacing) * 7);
451
469
  }
452
470
 
471
+ .polishd-root.polishd-root .mt-8 {
472
+ margin-top: calc(var(--spacing) * 8);
473
+ }
474
+
453
475
  .polishd-root.polishd-root .mt-9 {
454
476
  margin-top: calc(var(--spacing) * 9);
455
477
  }
@@ -462,10 +484,6 @@
462
484
  margin-top: calc(var(--spacing) * 14);
463
485
  }
464
486
 
465
- .polishd-root.polishd-root .mt-16 {
466
- margin-top: calc(var(--spacing) * 16);
467
- }
468
-
469
487
  .polishd-root.polishd-root .mt-\[5px\] {
470
488
  margin-top: 5px;
471
489
  }
@@ -478,14 +496,6 @@
478
496
  margin-top: 18px;
479
497
  }
480
498
 
481
- .polishd-root.polishd-root .mt-\[22px\] {
482
- margin-top: 22px;
483
- }
484
-
485
- .polishd-root.polishd-root .mt-\[26px\] {
486
- margin-top: 26px;
487
- }
488
-
489
499
  .polishd-root.polishd-root .mt-\[34px\] {
490
500
  margin-top: 34px;
491
501
  }
@@ -570,6 +580,10 @@
570
580
  aspect-ratio: 4 / 5;
571
581
  }
572
582
 
583
+ .polishd-root.polishd-root .aspect-\[16\/10\] {
584
+ aspect-ratio: 16 / 10;
585
+ }
586
+
573
587
  .polishd-root.polishd-root .h-1 {
574
588
  height: var(--spacing);
575
589
  }
@@ -630,6 +644,10 @@
630
644
  height: calc(var(--spacing) * 16);
631
645
  }
632
646
 
647
+ .polishd-root.polishd-root .h-\[0\.73em\] {
648
+ height: .73em;
649
+ }
650
+
633
651
  .polishd-root.polishd-root .h-\[5px\] {
634
652
  height: 5px;
635
653
  }
@@ -662,6 +680,10 @@
662
680
  height: 1px;
663
681
  }
664
682
 
683
+ .polishd-root.polishd-root .max-h-\[56vh\] {
684
+ max-height: 56vh;
685
+ }
686
+
665
687
  .polishd-root.polishd-root .max-h-\[80vh\] {
666
688
  max-height: 80vh;
667
689
  }
@@ -782,6 +804,10 @@
782
804
  width: 74px;
783
805
  }
784
806
 
807
+ .polishd-root.polishd-root .w-\[88vw\] {
808
+ width: 88vw;
809
+ }
810
+
785
811
  .polishd-root.polishd-root .w-\[92\%\] {
786
812
  width: 92%;
787
813
  }
@@ -834,12 +860,12 @@
834
860
  max-width: 46ch;
835
861
  }
836
862
 
837
- .polishd-root.polishd-root .max-w-\[52ch\] {
838
- max-width: 52ch;
863
+ .polishd-root.polishd-root .max-w-\[56ch\] {
864
+ max-width: 56ch;
839
865
  }
840
866
 
841
- .polishd-root.polishd-root .max-w-\[58ch\] {
842
- max-width: 58ch;
867
+ .polishd-root.polishd-root .max-w-\[62ch\] {
868
+ max-width: 62ch;
843
869
  }
844
870
 
845
871
  .polishd-root.polishd-root .max-w-\[68ch\] {
@@ -1135,6 +1161,10 @@
1135
1161
  margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
1136
1162
  }
1137
1163
 
1164
+ .polishd-root.polishd-root .gap-x-1\.5 {
1165
+ column-gap: calc(var(--spacing) * 1.5);
1166
+ }
1167
+
1138
1168
  .polishd-root.polishd-root .gap-x-2 {
1139
1169
  column-gap: calc(var(--spacing) * 2);
1140
1170
  }
@@ -1185,6 +1215,10 @@
1185
1215
  overflow-x: auto;
1186
1216
  }
1187
1217
 
1218
+ .polishd-root.polishd-root .overflow-x-clip {
1219
+ overflow-x: clip;
1220
+ }
1221
+
1188
1222
  .polishd-root.polishd-root .overflow-y-auto {
1189
1223
  overflow-y: auto;
1190
1224
  }
@@ -1620,6 +1654,10 @@
1620
1654
  background-color: var(--color-white);
1621
1655
  }
1622
1656
 
1657
+ .polishd-root.polishd-root .object-contain {
1658
+ object-fit: contain;
1659
+ }
1660
+
1623
1661
  .polishd-root.polishd-root .object-cover {
1624
1662
  object-fit: cover;
1625
1663
  }
@@ -1632,6 +1670,14 @@
1632
1670
  padding: calc(var(--spacing) * .5);
1633
1671
  }
1634
1672
 
1673
+ .polishd-root.polishd-root .p-1\.5 {
1674
+ padding: calc(var(--spacing) * 1.5);
1675
+ }
1676
+
1677
+ .polishd-root.polishd-root .p-3 {
1678
+ padding: calc(var(--spacing) * 3);
1679
+ }
1680
+
1635
1681
  .polishd-root.polishd-root .p-4 {
1636
1682
  padding: calc(var(--spacing) * 4);
1637
1683
  }
@@ -1680,10 +1726,6 @@
1680
1726
  padding-inline: 9px;
1681
1727
  }
1682
1728
 
1683
- .polishd-root.polishd-root .px-\[22px\] {
1684
- padding-inline: 22px;
1685
- }
1686
-
1687
1729
  .polishd-root.polishd-root .py-0\.5 {
1688
1730
  padding-block: calc(var(--spacing) * .5);
1689
1731
  }
@@ -1784,8 +1826,8 @@
1784
1826
  padding-top: calc(var(--spacing) * 9);
1785
1827
  }
1786
1828
 
1787
- .polishd-root.polishd-root .pt-\[72px\] {
1788
- padding-top: 72px;
1829
+ .polishd-root.polishd-root .pt-16 {
1830
+ padding-top: calc(var(--spacing) * 16);
1789
1831
  }
1790
1832
 
1791
1833
  .polishd-root.polishd-root .pt-\[88px\] {
@@ -1948,10 +1990,6 @@
1948
1990
  font-size: 14px;
1949
1991
  }
1950
1992
 
1951
- .polishd-root.polishd-root .text-\[15\.5px\] {
1952
- font-size: 15.5px;
1953
- }
1954
-
1955
1993
  .polishd-root.polishd-root .text-\[15px\] {
1956
1994
  font-size: 15px;
1957
1995
  }
@@ -1988,8 +2026,8 @@
1988
2026
  font-size: 44px;
1989
2027
  }
1990
2028
 
1991
- .polishd-root.polishd-root .text-\[clamp\(15px\,1\.9vw\,18px\)\] {
1992
- font-size: clamp(15px, 1.9vw, 18px);
2029
+ .polishd-root.polishd-root .text-\[clamp\(19px\,2\.6vw\,26px\)\] {
2030
+ font-size: clamp(19px, 2.6vw, 26px);
1993
2031
  }
1994
2032
 
1995
2033
  .polishd-root.polishd-root .text-\[clamp\(22px\,3\.2vw\,32px\)\] {
@@ -2004,13 +2042,13 @@
2004
2042
  font-size: clamp(34px, 7vw, 74px);
2005
2043
  }
2006
2044
 
2007
- .polishd-root.polishd-root .text-\[clamp\(42px\,8\.4vw\,92px\)\] {
2008
- font-size: clamp(42px, 8.4vw, 92px);
2045
+ .polishd-root.polishd-root .text-\[clamp\(64px\,13vw\,160px\)\] {
2046
+ font-size: clamp(64px, 13vw, 160px);
2009
2047
  }
2010
2048
 
2011
- .polishd-root.polishd-root .leading-\[0\.96\] {
2012
- --tw-leading: .96;
2013
- line-height: .96;
2049
+ .polishd-root.polishd-root .leading-\[0\.95\] {
2050
+ --tw-leading: .95;
2051
+ line-height: .95;
2014
2052
  }
2015
2053
 
2016
2054
  .polishd-root.polishd-root .leading-\[1\.02\] {
@@ -2078,6 +2116,11 @@
2078
2116
  font-weight: var(--font-weight-bold);
2079
2117
  }
2080
2118
 
2119
+ .polishd-root.polishd-root .font-extrabold {
2120
+ --tw-font-weight: var(--font-weight-extrabold);
2121
+ font-weight: var(--font-weight-extrabold);
2122
+ }
2123
+
2081
2124
  .polishd-root.polishd-root .font-medium {
2082
2125
  --tw-font-weight: var(--font-weight-medium);
2083
2126
  font-weight: var(--font-weight-medium);
@@ -2118,19 +2161,9 @@
2118
2161
  letter-spacing: -.025em;
2119
2162
  }
2120
2163
 
2121
- .polishd-root.polishd-root .tracking-\[-0\.035em\] {
2122
- --tw-tracking: -.035em;
2123
- letter-spacing: -.035em;
2124
- }
2125
-
2126
- .polishd-root.polishd-root .tracking-\[-0\.045em\] {
2127
- --tw-tracking: -.045em;
2128
- letter-spacing: -.045em;
2129
- }
2130
-
2131
- .polishd-root.polishd-root .tracking-\[0\.06em\] {
2132
- --tw-tracking: .06em;
2133
- letter-spacing: .06em;
2164
+ .polishd-root.polishd-root .tracking-\[0\.005em\] {
2165
+ --tw-tracking: .005em;
2166
+ letter-spacing: .005em;
2134
2167
  }
2135
2168
 
2136
2169
  .polishd-root.polishd-root .tracking-\[0\.07em\] {
@@ -2153,6 +2186,11 @@
2153
2186
  letter-spacing: .14em;
2154
2187
  }
2155
2188
 
2189
+ .polishd-root.polishd-root .tracking-\[0\.015em\] {
2190
+ --tw-tracking: .015em;
2191
+ letter-spacing: .015em;
2192
+ }
2193
+
2156
2194
  .polishd-root.polishd-root .tracking-normal {
2157
2195
  --tw-tracking: var(--tracking-normal);
2158
2196
  letter-spacing: var(--tracking-normal);
@@ -2248,10 +2286,18 @@
2248
2286
  color: #e4e4e4;
2249
2287
  }
2250
2288
 
2289
+ .polishd-root.polishd-root .text-\[\#e5e5e5\] {
2290
+ color: #e5e5e5;
2291
+ }
2292
+
2251
2293
  .polishd-root.polishd-root .text-\[\#f5a623\] {
2252
2294
  color: #f5a623;
2253
2295
  }
2254
2296
 
2297
+ .polishd-root.polishd-root .text-\[\#f5e17a\] {
2298
+ color: #f5e17a;
2299
+ }
2300
+
2255
2301
  .polishd-root.polishd-root .text-amber-300 {
2256
2302
  color: var(--color-amber-300);
2257
2303
  }
@@ -2338,6 +2384,10 @@
2338
2384
  text-transform: capitalize;
2339
2385
  }
2340
2386
 
2387
+ .polishd-root.polishd-root .lowercase {
2388
+ text-transform: lowercase;
2389
+ }
2390
+
2341
2391
  .polishd-root.polishd-root .normal-case {
2342
2392
  text-transform: none;
2343
2393
  }
@@ -2477,11 +2527,30 @@
2477
2527
  transition-timing-function: cubic-bezier(.2, .8, .2, 1);
2478
2528
  }
2479
2529
 
2530
+ .polishd-root.polishd-root .ease-in-out {
2531
+ --tw-ease: var(--ease-in-out);
2532
+ transition-timing-function: var(--ease-in-out);
2533
+ }
2534
+
2480
2535
  .polishd-root.polishd-root .ease-out {
2481
2536
  --tw-ease: var(--ease-out);
2482
2537
  transition-timing-function: var(--ease-out);
2483
2538
  }
2484
2539
 
2540
+ .polishd-root.polishd-root .will-change-transform {
2541
+ will-change: transform;
2542
+ }
2543
+
2544
+ .polishd-root.polishd-root .outline-none {
2545
+ --tw-outline-style: none;
2546
+ outline-style: none;
2547
+ }
2548
+
2549
+ .polishd-root.polishd-root .select-none {
2550
+ -webkit-user-select: none;
2551
+ user-select: none;
2552
+ }
2553
+
2485
2554
  @media (hover: hover) {
2486
2555
  .polishd-root.polishd-root .group-hover\:scale-100:is(:where(.group):hover *) {
2487
2556
  --tw-scale-x: 100%;
@@ -2627,6 +2696,25 @@
2627
2696
  border-color: #777;
2628
2697
  }
2629
2698
 
2699
+ .polishd-root.polishd-root .focus-visible\:bg-\[\#111\]:focus-visible {
2700
+ background-color: #111;
2701
+ }
2702
+
2703
+ .polishd-root.polishd-root .focus-visible\:ring-1:focus-visible {
2704
+ --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
2705
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
2706
+ }
2707
+
2708
+ .polishd-root.polishd-root .focus-visible\:ring-amber-500\/60:focus-visible {
2709
+ --tw-ring-color: #f99c0099;
2710
+ }
2711
+
2712
+ @supports (color: color-mix(in lab, red, red)) {
2713
+ .polishd-root.polishd-root .focus-visible\:ring-amber-500\/60:focus-visible {
2714
+ --tw-ring-color: color-mix(in oklab, var(--color-amber-500) 60%, transparent);
2715
+ }
2716
+ }
2717
+
2630
2718
  .polishd-root.polishd-root .disabled\:cursor-default:disabled {
2631
2719
  cursor: default;
2632
2720
  }
@@ -2774,6 +2862,34 @@
2774
2862
  }
2775
2863
 
2776
2864
  @media (min-width: 48rem) {
2865
+ .polishd-root.polishd-root .md\:mt-12 {
2866
+ margin-top: calc(var(--spacing) * 12);
2867
+ }
2868
+
2869
+ .polishd-root.polishd-root .md\:max-h-none {
2870
+ max-height: none;
2871
+ }
2872
+
2873
+ .polishd-root.polishd-root .md\:min-h-\[390px\] {
2874
+ min-height: 390px;
2875
+ }
2876
+
2877
+ .polishd-root.polishd-root .md\:min-h-screen {
2878
+ min-height: 100vh;
2879
+ }
2880
+
2881
+ .polishd-root.polishd-root .md\:w-\[80vw\] {
2882
+ width: 80vw;
2883
+ }
2884
+
2885
+ .polishd-root.polishd-root .md\:flex-1 {
2886
+ flex: 1;
2887
+ }
2888
+
2889
+ .polishd-root.polishd-root .md\:basis-0 {
2890
+ flex-basis: 0;
2891
+ }
2892
+
2777
2893
  .polishd-root.polishd-root .md\:grid-cols-2 {
2778
2894
  grid-template-columns: repeat(2, minmax(0, 1fr));
2779
2895
  }
@@ -2786,21 +2902,25 @@
2786
2902
  padding-block: calc(var(--spacing) * 28);
2787
2903
  }
2788
2904
 
2789
- .polishd-root.polishd-root .md\:pt-\[110px\] {
2790
- padding-top: 110px;
2905
+ .polishd-root.polishd-root .md\:pt-20 {
2906
+ padding-top: calc(var(--spacing) * 20);
2791
2907
  }
2792
2908
 
2793
2909
  .polishd-root.polishd-root .md\:pt-\[132px\] {
2794
2910
  padding-top: 132px;
2795
2911
  }
2796
2912
 
2797
- .polishd-root.polishd-root .md\:pb-\[72px\] {
2798
- padding-bottom: 72px;
2913
+ .polishd-root.polishd-root .md\:pb-0 {
2914
+ padding-bottom: 0;
2799
2915
  }
2800
2916
 
2801
2917
  .polishd-root.polishd-root .md\:pb-\[108px\] {
2802
2918
  padding-bottom: 108px;
2803
2919
  }
2920
+
2921
+ .polishd-root.polishd-root .md\:text-\[13\.5px\] {
2922
+ font-size: 13.5px;
2923
+ }
2804
2924
  }
2805
2925
 
2806
2926
  @media (min-width: 64rem) {
@@ -1,3 +1,4 @@
1
+ import type { DesignPreviewTarget } from "../shared/design-values";
1
2
  /** One captured (or deliberately skipped) screenshot within a snapshot. */
2
3
  export interface PolishdSnapshotShot {
3
4
  /** Route path, e.g. "/pricing". */
@@ -20,6 +21,23 @@ export interface PolishdSnapshotShot {
20
21
  /** Why the cell has no image, when it doesn't. */
21
22
  skipped?: string;
22
23
  }
24
+ /**
25
+ * A cropped picture of one flagged design value in place — the element that
26
+ * carries a one-off type style, color, radius or off-grid padding, ringed,
27
+ * with the component around it. Shot during the capture, from the same
28
+ * rendering as the route's full shots.
29
+ */
30
+ export interface PolishdSnapshotPreview {
31
+ /** The value pictured — `designValueKey` of its target. */
32
+ key: string;
33
+ route: string;
34
+ device: string;
35
+ theme: string;
36
+ /** Image filename inside the snapshot's `previews/` subdirectory. */
37
+ file: string;
38
+ /** Where the image uploaded, for Blob-stored previews. */
39
+ url?: string;
40
+ }
23
41
  /** One capture run: every page of the site at one moment in time. */
24
42
  export interface PolishdSnapshot {
25
43
  id: string;
@@ -37,26 +55,51 @@ export interface PolishdSnapshot {
37
55
  authWalled: string[];
38
56
  /** True when the site rendered identically in light and dark. */
39
57
  noDarkMode: boolean;
58
+ /** Pictures of the flagged values, where each one renders. Absent on older snapshots. */
59
+ previews?: PolishdSnapshotPreview[];
60
+ /**
61
+ * Values this capture looked for on their pages and never found on screen
62
+ * — rendered only after an interaction, or only at a width it didn't shoot.
63
+ */
64
+ previewMisses?: string[];
40
65
  }
41
66
  /** Cap on routes shot per run, to bound how long the capture action holds. */
42
67
  export declare const MAX_SNAPSHOT_ROUTES = 12;
43
68
  /** Every recorded snapshot, newest first. Read-only; `[]` when none/no store. */
44
69
  export declare function listSnapshots(): Promise<PolishdSnapshot[]>;
45
70
  /**
46
- * Read one shot's image as a data URL, or null when it doesn't exist. The
47
- * filename is only accepted when the index lists it for that snapshot, so a
48
- * caller can never read outside a snapshot directory — and Blob-stored shots
49
- * are only ever fetched from the URL the index recorded at capture time.
71
+ * Read one shot's — or one value preview's — image as a data URL, or null
72
+ * when it doesn't exist. The filename is only accepted when the index lists it
73
+ * for that snapshot, so a caller can never read outside a snapshot directory —
74
+ * and Blob-stored images are only ever fetched from the URL the index recorded
75
+ * at capture time.
50
76
  */
51
77
  export declare function readSnapshotImage(snapshotId: string, file: string): Promise<string | null>;
52
- export interface CaptureSnapshotInput {
78
+ export interface BeginSnapshotInput {
53
79
  /** The site to shoot, scheme included. */
54
80
  origin: string;
55
81
  /** Paths to shoot — discovery is skipped, these are shot exactly. */
56
82
  routes: string[];
57
83
  /** Design-metrics fingerprint at capture time, for later pairing. */
58
84
  fingerprint: string | null;
85
+ /** Flagged values to picture in place, each on the pages it was measured on. */
86
+ targets?: DesignPreviewTarget[];
59
87
  }
88
+ export type BeginSnapshotResult = {
89
+ ok: true;
90
+ id: string;
91
+ routes: string[];
92
+ } | {
93
+ ok: false;
94
+ message: string;
95
+ };
96
+ export type CaptureRouteResult = {
97
+ ok: true;
98
+ shots: PolishdSnapshotShot[];
99
+ } | {
100
+ ok: false;
101
+ message: string;
102
+ };
60
103
  export type CaptureSnapshotResult = {
61
104
  ok: true;
62
105
  snapshot: PolishdSnapshot;
@@ -64,6 +107,27 @@ export type CaptureSnapshotResult = {
64
107
  ok: false;
65
108
  message: string;
66
109
  };
110
+ /**
111
+ * Start a capture: run the environment preflight, sweep any unfinished
112
+ * predecessor's images, and park the plan in the store. The returned routes
113
+ * are what the caller should then feed to `captureSnapshotRoute`, one call
114
+ * each, before `finishSnapshot` records the run.
115
+ */
116
+ export declare function beginSnapshot(input: BeginSnapshotInput): Promise<BeginSnapshotResult>;
117
+ /**
118
+ * Shoot one route of the capture `beginSnapshot` started — both devices, both
119
+ * themes — store its images, and append the results to the pending record.
120
+ * Bounded work per call by design: this is the request that has to fit inside
121
+ * a serverless host's function time limit.
122
+ */
123
+ export declare function captureSnapshotRoute(id: string, route: string): Promise<CaptureRouteResult>;
124
+ /**
125
+ * Close out the capture: record the accumulated shots in the snapshot index
126
+ * and prune old snapshots past `MAX_SNAPSHOTS`, images included. Called once
127
+ * every route has been attempted — routes whose calls failed outright are
128
+ * simply absent from the snapshot.
129
+ */
130
+ export declare function finishSnapshot(id: string): Promise<CaptureSnapshotResult>;
67
131
  /**
68
132
  * A problem that will make the next capture fail, detectable from the
69
133
  * environment alone — or null when none is. Covers the two setup gaps a
@@ -75,9 +139,4 @@ export type CaptureSnapshotResult = {
75
139
  * the dashboard.
76
140
  */
77
141
  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>;
83
142
  //# sourceMappingURL=snapshots.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"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"}