@invisibleloop/pulse 0.20.5 → 0.20.7

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 (164) hide show
  1. package/.claude/pulse-checklist.md +1 -2
  2. package/CLAUDE.md +1 -2
  3. package/docs/.claude/pulse-checklist.md +1 -2
  4. package/docs/public/coutumes.css +21 -44
  5. package/docs/public/docs.css +73 -6
  6. package/docs/public/home-brut.css +175 -191
  7. package/docs/public/pulse-ui.css +8 -1037
  8. package/docs/public/retrowheels.css +23 -0
  9. package/docs/public/shop.css +35 -1
  10. package/docs/public/sparkys.css +56 -23
  11. package/docs/public/theme.css +51 -7
  12. package/docs/server.js +0 -11
  13. package/docs/src/lib/component-page.js +2 -1
  14. package/docs/src/lib/nav.js +0 -11
  15. package/docs/src/pages/accessibility.js +2 -1
  16. package/docs/src/pages/actions.js +2 -1
  17. package/docs/src/pages/auth.js +2 -1
  18. package/docs/src/pages/caching.js +2 -1
  19. package/docs/src/pages/components/accordion.js +2 -1
  20. package/docs/src/pages/components/alert.js +2 -1
  21. package/docs/src/pages/components/app-badge.js +2 -1
  22. package/docs/src/pages/components/avatar.js +2 -1
  23. package/docs/src/pages/components/badge.js +2 -1
  24. package/docs/src/pages/components/breadcrumbs.js +2 -1
  25. package/docs/src/pages/components/button.js +2 -1
  26. package/docs/src/pages/components/card.js +2 -1
  27. package/docs/src/pages/components/charts.js +4 -2
  28. package/docs/src/pages/components/checkbox.js +2 -1
  29. package/docs/src/pages/components/cluster.js +2 -1
  30. package/docs/src/pages/components/container.js +2 -1
  31. package/docs/src/pages/components/cta.js +2 -1
  32. package/docs/src/pages/components/divider.js +2 -1
  33. package/docs/src/pages/components/empty.js +2 -1
  34. package/docs/src/pages/components/feature.js +2 -1
  35. package/docs/src/pages/components/fieldset.js +2 -1
  36. package/docs/src/pages/components/fileupload.js +2 -1
  37. package/docs/src/pages/components/footer.js +2 -1
  38. package/docs/src/pages/components/grid.js +11 -6
  39. package/docs/src/pages/components/heading.js +2 -1
  40. package/docs/src/pages/components/hero.js +2 -1
  41. package/docs/src/pages/components/icons.js +2 -1
  42. package/docs/src/pages/components/image.js +2 -1
  43. package/docs/src/pages/components/input.js +2 -1
  44. package/docs/src/pages/components/media.js +2 -1
  45. package/docs/src/pages/components/modal.js +2 -1
  46. package/docs/src/pages/components/nav.js +2 -1
  47. package/docs/src/pages/components/phone-frame.js +2 -1
  48. package/docs/src/pages/components/progress.js +2 -1
  49. package/docs/src/pages/components/prose.js +2 -1
  50. package/docs/src/pages/components/pullquote.js +2 -1
  51. package/docs/src/pages/components/radio.js +2 -1
  52. package/docs/src/pages/components/rating.js +2 -1
  53. package/docs/src/pages/components/search.js +2 -1
  54. package/docs/src/pages/components/section.js +2 -1
  55. package/docs/src/pages/components/segmented.js +2 -1
  56. package/docs/src/pages/components/select.js +2 -1
  57. package/docs/src/pages/components/slider.js +2 -1
  58. package/docs/src/pages/components/spinner.js +2 -1
  59. package/docs/src/pages/components/stack.js +2 -1
  60. package/docs/src/pages/components/stat.js +2 -1
  61. package/docs/src/pages/components/stepper.js +2 -1
  62. package/docs/src/pages/components/table.js +2 -1
  63. package/docs/src/pages/components/textarea.js +2 -1
  64. package/docs/src/pages/components/toggle.js +2 -1
  65. package/docs/src/pages/components/tooltip.js +2 -1
  66. package/docs/src/pages/components.js +2 -5
  67. package/docs/src/pages/config.js +2 -1
  68. package/docs/src/pages/constraints.js +2 -1
  69. package/docs/src/pages/deploy.js +2 -1
  70. package/docs/src/pages/error-pages.js +2 -1
  71. package/docs/src/pages/extending.js +2 -1
  72. package/docs/src/pages/faq.js +2 -1
  73. package/docs/src/pages/forms.js +2 -1
  74. package/docs/src/pages/getting-started.js +2 -1
  75. package/docs/src/pages/guard.js +2 -1
  76. package/docs/src/pages/home.js +24 -15
  77. package/docs/src/pages/how-it-works.js +22 -15
  78. package/docs/src/pages/hydration.js +2 -1
  79. package/docs/src/pages/images.js +2 -1
  80. package/docs/src/pages/markdown.js +2 -1
  81. package/docs/src/pages/meta.js +2 -1
  82. package/docs/src/pages/mutations.js +2 -1
  83. package/docs/src/pages/navigation.js +2 -1
  84. package/docs/src/pages/performance.js +2 -1
  85. package/docs/src/pages/persist.js +2 -1
  86. package/docs/src/pages/project-structure.js +2 -1
  87. package/docs/src/pages/prompt-examples.js +2 -1
  88. package/docs/src/pages/raw-responses.js +2 -1
  89. package/docs/src/pages/routing.js +2 -1
  90. package/docs/src/pages/server-api.js +2 -1
  91. package/docs/src/pages/server-data.js +2 -1
  92. package/docs/src/pages/slash-commands.js +2 -1
  93. package/docs/src/pages/spec.js +2 -1
  94. package/docs/src/pages/state.js +2 -1
  95. package/docs/src/pages/store.js +2 -1
  96. package/docs/src/pages/streaming.js +2 -1
  97. package/docs/src/pages/stripe.js +2 -1
  98. package/docs/src/pages/supabase.js +2 -1
  99. package/docs/src/pages/templates/coutumes.js +83 -72
  100. package/docs/src/pages/templates/mobile-app.js +36 -9
  101. package/docs/src/pages/templates/retrowheels.js +17 -4
  102. package/docs/src/pages/templates/shop.js +21 -10
  103. package/docs/src/pages/templates/sparkys.js +35 -20
  104. package/docs/src/pages/templates.js +2 -2
  105. package/docs/src/pages/testing.js +2 -1
  106. package/docs/src/pages/validation.js +2 -1
  107. package/examples/.claude/pulse-checklist.md +1 -2
  108. package/examples/examples.test.js +4 -4
  109. package/examples/pricing.js +21 -3
  110. package/examples/public/pulse-ui.css +8 -1037
  111. package/examples/retrowheels.css +23 -0
  112. package/examples/retrowheels.js +17 -4
  113. package/package.json +5 -1
  114. package/public/.pulse-ui-version +1 -1
  115. package/public/pulse-ui.css +8 -1037
  116. package/src/agent/checklist.md +1 -2
  117. package/src/agent/guide-components.md +43 -67
  118. package/src/agent/guide-design-gallery.md +14 -14
  119. package/src/agent/guide-design-references.md +21 -21
  120. package/src/agent/guide-styles.md +2 -2
  121. package/src/agent/guide-templates.md +6 -6
  122. package/src/agent/identity.md +1 -1
  123. package/src/agent/workflow.md +1 -2
  124. package/src/mcp/server.js +31 -24
  125. package/src/ui/index.js +0 -27
  126. package/src/ui/ui.test.js +0 -137
  127. package/types/charts.d.ts +61 -0
  128. package/types/ui.d.ts +1 -129
  129. package/docs/src/pages/components/banner.js +0 -44
  130. package/docs/src/pages/components/carousel.js +0 -71
  131. package/docs/src/pages/components/code-window.js +0 -56
  132. package/docs/src/pages/components/decorate.js +0 -74
  133. package/docs/src/pages/components/gallery.js +0 -102
  134. package/docs/src/pages/components/list.js +0 -111
  135. package/docs/src/pages/components/marquee.js +0 -76
  136. package/docs/src/pages/components/photo-card.js +0 -74
  137. package/docs/src/pages/components/pricing.js +0 -67
  138. package/docs/src/pages/components/testimonial.js +0 -48
  139. package/docs/src/pages/components/timeline.js +0 -226
  140. package/src/ui/banner.js +0 -41
  141. package/src/ui/brand-statement.js +0 -58
  142. package/src/ui/carousel.js +0 -59
  143. package/src/ui/code-window.js +0 -39
  144. package/src/ui/colophon.js +0 -29
  145. package/src/ui/contact-row.js +0 -41
  146. package/src/ui/decorate.js +0 -55
  147. package/src/ui/display-heading.js +0 -44
  148. package/src/ui/drop-cap.js +0 -29
  149. package/src/ui/editorial-hero.js +0 -63
  150. package/src/ui/entry-list.js +0 -36
  151. package/src/ui/gallery.js +0 -60
  152. package/src/ui/image-pair.js +0 -72
  153. package/src/ui/list.js +0 -36
  154. package/src/ui/marquee.js +0 -48
  155. package/src/ui/photo-card.js +0 -44
  156. package/src/ui/pricing.js +0 -56
  157. package/src/ui/product-card.js +0 -65
  158. package/src/ui/section-label.js +0 -38
  159. package/src/ui/service-card.js +0 -47
  160. package/src/ui/stat-grid.js +0 -40
  161. package/src/ui/testimonial.js +0 -59
  162. package/src/ui/timeline.js +0 -72
  163. package/src/ui/top-strip.js +0 -47
  164. package/src/ui/trust-list.js +0 -46
@@ -31,9 +31,8 @@ Before finishing any spec, verify every point below. Fix anything that fails.
31
31
  - Hero sections → `hero({ title, subtitle, actions, image, ... })`
32
32
  - Product/service cards → `card({ title, body, image, footer, ... })`
33
33
  - Image + text two-column layouts → `media({ image, content, reverse })`
34
- - Horizontal strips/banners → `banner({ content, variant })`
35
34
  - Feature tiles → `feature({ icon, title, description })`
36
- - Testimonials → `testimonial({ quote, name, role, src })`
35
+ - Testimonials → `card({ content, footer })` with quote + avatar/name in the content slot
37
36
  - CTAs → `cta({ title, subtitle, actions })`
38
37
  - Navigation → `nav({ logo, links, actions })`
39
38
  - Footers → `footer({ logo, links, columns, legal, ... })`
package/CLAUDE.md CHANGED
@@ -673,9 +673,8 @@ Before writing any UI HTML by hand, check `src/ui/index.js` — there are 50+ co
673
673
  - Hero sections → `hero({ title, subtitle, actions, image, layout })`
674
674
  - Product/service cards → `card({ title, body, image, footer })`
675
675
  - Image + text layouts → `media({ image, content, reverse })`
676
- - Horizontal strips → `banner({ content, variant })`
677
676
  - Feature tiles → `feature({ icon, title, description })`
678
- - Testimonials → `testimonial({ quote, name, role, src })`
677
+ - Testimonials → `card({ content, footer })` with quote + avatar/name in the content slot
679
678
  - Call-to-action sections → `cta({ title, subtitle, actions })`
680
679
 
681
680
  If you're about to write `class="hero"` or `class="product-card"`, stop — import the component instead. You can add custom CSS on top of components for brand-specific styling, but the structure and accessibility must come from the component.
@@ -31,9 +31,8 @@ Before finishing any spec, verify every point below. Fix anything that fails.
31
31
  - Hero sections → `hero({ title, subtitle, actions, image, ... })`
32
32
  - Product/service cards → `card({ title, body, image, footer, ... })`
33
33
  - Image + text two-column layouts → `media({ image, content, reverse })`
34
- - Horizontal strips/banners → `banner({ content, variant })`
35
34
  - Feature tiles → `feature({ icon, title, description })`
36
- - Testimonials → `testimonial({ quote, name, role, src })`
35
+ - Testimonials → `card({ content, footer })` with quote + avatar/name in the content slot
37
36
  - CTAs → `cta({ title, subtitle, actions })`
38
37
  - Navigation → `nav({ logo, links, actions })`
39
38
  - Footers → `footer({ logo, links, columns, legal, ... })`
@@ -175,21 +175,6 @@
175
175
  mix-blend-mode: multiply;
176
176
  }
177
177
 
178
- .coutumes-hero-cta {
179
- position: absolute;
180
- bottom: 32px;
181
- left: 50%;
182
- transform: translateX(-50%);
183
- font-family: var(--coutumes-font-ui);
184
- font-size: 0.6875rem;
185
- letter-spacing: 0.12em;
186
- text-transform: uppercase;
187
- color: var(--coutumes-white);
188
- text-decoration: none;
189
- white-space: nowrap;
190
- z-index: 20;
191
- }
192
-
193
178
  /* ── Editorial quote ── */
194
179
  .coutumes-editorial-quote {
195
180
  padding: 80px 24px;
@@ -227,17 +212,16 @@
227
212
  .coutumes-product-card {
228
213
  position: relative;
229
214
  display: block;
230
- overflow: hidden;
231
215
  text-decoration: none;
232
216
  color: var(--coutumes-black);
233
- aspect-ratio: 4/5;
234
217
  }
235
218
 
236
219
  .coutumes-product-card img {
237
220
  width: 100%;
238
- height: 100%;
221
+ aspect-ratio: 4/5;
239
222
  object-fit: cover;
240
223
  display: block;
224
+ overflow: hidden;
241
225
  transition: transform 0.5s ease;
242
226
  }
243
227
 
@@ -258,16 +242,6 @@
258
242
  z-index: 5;
259
243
  }
260
244
 
261
- .coutumes-product-name {
262
- position: absolute;
263
- bottom: 16px;
264
- left: 16px;
265
- font-family: var(--coutumes-font-body);
266
- font-size: 0.9375rem;
267
- color: var(--coutumes-white);
268
- text-shadow: 0 1px 4px rgba(0,0,0,0.3);
269
- }
270
-
271
245
  /* ── 50/50 split images ── */
272
246
  .coutumes-split-images {
273
247
  display: grid;
@@ -482,30 +456,24 @@
482
456
  .coutumes-footer-links { grid-template-columns: 1fr 1fr; }
483
457
  }
484
458
 
485
- /* Override Pulse accent purple → coutumes black for banner contrast (WCAG AA) */
486
- .ui-banner--promo {
487
- background: var(--coutumes-black);
488
- color: var(--coutumes-white);
489
- }
490
-
491
459
  /* Hero overlay — sans-serif display font, top-aligned so text clips at top */
492
- .coutumes-hero .ui-editorial-hero-overlay {
460
+ .coutumes-hero-text {
493
461
  justify-content: flex-start;
494
462
  padding-top: 0;
495
463
  bottom: -2em; /* extend past hero bottom → clips there */
496
464
  mix-blend-mode: normal;
497
465
  }
498
- .coutumes-hero .ui-editorial-hero-overlay span {
466
+ .coutumes-hero-text span {
499
467
  font-family: var(--coutumes-font-display);
500
468
  font-weight: 400;
501
469
  font-size: clamp(5rem, 14vw, 18rem);
502
470
  }
503
471
  /* Bigger gap between SILVER LANDS and CAPSULE */
504
- .coutumes-hero .ui-editorial-hero-overlay span:nth-child(3) {
472
+ .coutumes-hero-text span:nth-child(3) {
505
473
  margin-top: 1.7em;
506
474
  }
507
- /* Lock hero images to viewport height (prevents 3/4 aspect-ratio making hero ~1700px tall) */
508
- .coutumes-hero .ui-editorial-hero-images {
475
+ /* Lock hero images to viewport height (prevents overly tall hero) */
476
+ .coutumes-hero-images {
509
477
  aspect-ratio: unset;
510
478
  height: 100svh;
511
479
  }
@@ -516,32 +484,41 @@
516
484
  }
517
485
 
518
486
  /* Image pair links */
519
- .ui-image-pair {
487
+ .coutumes-split-images {
520
488
  background: var(--coutumes-white);
521
489
  }
522
490
 
523
- .ui-image-pair-link {
491
+ .coutumes-split-col {
492
+ display: flex;
493
+ flex-direction: column;
494
+ }
495
+
496
+ .coutumes-split-link {
524
497
  font-family: var(--coutumes-font-body);
525
498
  color: var(--coutumes-black);
526
499
  padding: 0.75rem 0;
527
500
  display: block;
501
+ text-decoration: none;
528
502
  }
529
503
 
530
504
  /* Product grid — name/price below image */
531
- .coutumes-product-grid .ui-product-card-caption {
505
+ .coutumes-product-caption {
532
506
  background: var(--coutumes-white);
533
507
  padding-bottom: 10rem;
508
+ padding-top: 1rem;
534
509
  }
535
- .coutumes-product-grid .ui-product-card-name {
510
+ .coutumes-product-name {
536
511
  font-family: var(--coutumes-font-body);
537
512
  font-size: 1.0625rem;
538
513
  color: var(--coutumes-black);
514
+ margin: 0;
539
515
  }
540
- .coutumes-product-grid .ui-product-card-price {
516
+ .coutumes-product-price {
541
517
  font-family: var(--coutumes-font-ui);
542
518
  font-size: 0.875rem;
543
519
  color: var(--coutumes-black);
544
520
  opacity: 0.75;
521
+ margin: 0;
545
522
  }
546
523
 
547
524
  /* Editorial quote — non-italic, generous padding, narrow column */
@@ -1237,7 +1237,7 @@ a:hover {
1237
1237
  text-align: center;
1238
1238
  }
1239
1239
  .demo-preview.is-light {
1240
- background: #f0f0f8;
1240
+ background: var(--surface-2, #f0f0f8);
1241
1241
  }
1242
1242
 
1243
1243
  /* Theme toggle button */
@@ -1745,7 +1745,7 @@ a:hover {
1745
1745
  padding: 0 2rem;
1746
1746
  position: sticky;
1747
1747
  top: 0;
1748
- background: rgba(13, 13, 16, 0.9);
1748
+ background: var(--header-bg, rgba(13, 13, 16, 0.9));
1749
1749
  backdrop-filter: blur(8px);
1750
1750
  z-index: 10;
1751
1751
  }
@@ -1884,7 +1884,7 @@ a:hover {
1884
1884
 
1885
1885
  .docs-content strong:not([class*="ui-"]) {
1886
1886
  font-weight: 600;
1887
- color: #fff;
1887
+ color: var(--text);
1888
1888
  }
1889
1889
 
1890
1890
  .docs-content
@@ -2063,7 +2063,7 @@ tr:hover td {
2063
2063
  }
2064
2064
 
2065
2065
  .callout-note .callout-icon {
2066
- color: #82aaff;
2066
+ color: var(--callout-note-icon, #82aaff);
2067
2067
  }
2068
2068
  .callout-warning .callout-icon {
2069
2069
  color: var(--red);
@@ -2147,8 +2147,8 @@ tr:hover td {
2147
2147
  }
2148
2148
 
2149
2149
  .tag-required {
2150
- background: rgba(255, 107, 107, 0.15);
2151
- color: #ff8080;
2150
+ background: var(--tag-required-bg, rgba(255, 107, 107, 0.15));
2151
+ color: var(--tag-required-text, #ff8080);
2152
2152
  }
2153
2153
  .tag-optional {
2154
2154
  background: var(--surface-2);
@@ -2319,3 +2319,70 @@ hr.doc-hr {
2319
2319
  word-break: break-all;
2320
2320
  line-height: 1.4;
2321
2321
  }
2322
+
2323
+ /* ── How It Works — numbered vertical flow diagram ──────────────────────────
2324
+ Raw HTML (creative override), replacing the removed timeline()/
2325
+ timelineItem() components — see docs/src/pages/how-it-works.js. */
2326
+ .hiw-flow {
2327
+ list-style: none;
2328
+ padding: 0;
2329
+ margin: 0;
2330
+ }
2331
+
2332
+ .hiw-flow-item {
2333
+ display: flex;
2334
+ gap: 1rem;
2335
+ }
2336
+
2337
+ .hiw-flow-side {
2338
+ display: flex;
2339
+ flex-direction: column;
2340
+ align-items: center;
2341
+ flex-shrink: 0;
2342
+ }
2343
+
2344
+ .hiw-flow-dot {
2345
+ width: 2rem;
2346
+ height: 2rem;
2347
+ border-radius: 50%;
2348
+ flex-shrink: 0;
2349
+ display: flex;
2350
+ align-items: center;
2351
+ justify-content: center;
2352
+ position: relative;
2353
+ z-index: 1;
2354
+ font-size: 1rem;
2355
+ background: var(--accent-dim);
2356
+ color: var(--accent);
2357
+ }
2358
+
2359
+ .hiw-flow-connector {
2360
+ width: 2px;
2361
+ background: var(--border);
2362
+ flex: 1;
2363
+ min-height: 0.75rem;
2364
+ }
2365
+
2366
+ .hiw-flow-item:first-child .hiw-flow-connector--before,
2367
+ .hiw-flow-item:last-child .hiw-flow-connector--after {
2368
+ visibility: hidden;
2369
+ }
2370
+
2371
+ .hiw-flow-main {
2372
+ flex: 1;
2373
+ padding-bottom: 1.75rem;
2374
+ }
2375
+
2376
+ .hiw-flow-item:last-child .hiw-flow-main {
2377
+ padding-bottom: 0;
2378
+ }
2379
+
2380
+ .hiw-flow-label {
2381
+ display: block;
2382
+ font-size: 0.72rem;
2383
+ font-weight: 600;
2384
+ color: var(--muted);
2385
+ letter-spacing: 0.05em;
2386
+ text-transform: uppercase;
2387
+ margin-bottom: 0.35rem;
2388
+ }