@marver-design/marver 0.3.0 → 0.3.1

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 CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  Notable changes to `@marver-design/marver`. Format follows [Keep a Changelog](https://keepachangelog.com); versions follow semver.
4
4
 
5
+ ## 0.3.1 - 2026-08-13
6
+
7
+ ### Fixed
8
+
9
+ - Play-mode variant chrome: the current variant's name was invisible (theme ink on the always-dark glass pill - now the pill's own light ink), and switching variants jiggled the controls. Redesigned: the letter chips now use the sidebar's exact badge language (20px, 7px-radius, one shape in every state) so the two surfaces read as one concept, they LEAD the cluster as the stable anchor, and the name trails at natural width (capped with ellipsis + a tooltip carrying the full title) - a name change grows the pill rightward without moving anything underfoot.
10
+
5
11
  ## 0.3.0 - 2026-08-13
6
12
 
7
13
  The co-thinking release: the canvas now holds the thinking, not just the screens.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marver-design/marver",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "The agent-native design canvas. A design/ folder, one command, a canvas of live frames built from your repo's real components. The tool ships no AI - your coding agent is the designer.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -420,7 +420,6 @@ function PlayInner() {
420
420
  </Tip>
421
421
  {variants.length > 1 && <>
422
422
  <i className="sep" />
423
- <span className="vname">{(() => { const c = variants.find((v) => v.id === play.at); return c ? (c.title ?? (c.id.split('/').pop() ?? '').replace(/^[a-z]-/, '').replace(/-/g, ' ')) : '' })()}</span>
424
423
  {variants.map((v) => (
425
424
  <Tip inv key={v.id} label={<><b>{v.title ?? v.id}</b><span className="k">[ ]</span></>}>
426
425
  <button className={`vchip${v.id === play.at ? ' on' : ''}`} onClick={() => goTo(v.id)}>
@@ -428,6 +427,13 @@ function PlayInner() {
428
427
  </button>
429
428
  </Tip>
430
429
  ))}
430
+ {(() => {
431
+ // chips lead as the stable anchor; the name trails at natural width, so
432
+ // a length change grows the pill rightward instead of shifting the chips
433
+ const c = variants.find((v) => v.id === play.at)
434
+ const full = c ? (c.title ?? (c.id.split('/').pop() ?? '').replace(/^[a-z]-/, '').replace(/-/g, ' ')) : ''
435
+ return <Tip inv label={<b>{full}</b>}><span className="vname">{full}</span></Tip>
436
+ })()}
431
437
  </>}
432
438
  </div>
433
439
  </div>
@@ -587,12 +587,26 @@ body.sh-kbd .sh-app :focus-visible { outline: 2px solid var(--accent); outline-o
587
587
  .sub .chip:hover { color: var(--glass-ink); background: var(--glass-hover) }
588
588
  .sub .chip.on { color: #fff; background: var(--accent); border-color: var(--accent) }
589
589
 
590
- /* play-mode variant chips (SPEC-023 §6) */
591
- .sh-play-nav .vchip { min-width: 24px; font-weight: 700; font-size: 11px }
592
- .sh-play-nav .vchip.on { color: #fff; background: var(--accent); border-radius: 7px }
593
-
594
- .sh-play-nav .vname { font-size: 11px; font-weight: 600; color: var(--glass-ink-2); max-width: 120px;
595
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-transform: capitalize; padding: 0 2px }
590
+ /* play-mode variant chips (SPEC-023 §6): the SAME badge language as the sidebar's
591
+ variant rows (20px, 7px-radius square, one consistent shape in every state) so the
592
+ two surfaces read as one concept - but in the pill's own dark-glass inks, never
593
+ theme tokens (the nav is always dark; theme ink goes invisible in light mode). */
594
+ .sh-play-nav .vchip { width: 20px; height: 20px; min-width: 0; flex: none; margin: 0 1px;
595
+ border: 1px solid rgba(255, 255, 255, .14); border-radius: 7px;
596
+ font: 700 10px -apple-system, system-ui, sans-serif; color: rgba(245, 245, 247, .6);
597
+ line-height: 1; letter-spacing: 0; text-box: trim-both cap alphabetic }
598
+ .sh-play-nav .vchip:hover { color: #f5f5f7; background: rgba(255, 255, 255, .1) }
599
+ .sh-play-nav .vchip.on { color: #fff; background: var(--accent); border-color: var(--accent) }
600
+ /* bordered chips read tighter than borderless icons at the same distance - the
601
+ divider needs a touch more air before the first chip */
602
+ .sh-play-nav .sep + .vchip { margin-left: 5px }
603
+
604
+ /* the current variant's name trails the chips at natural width - the chips anchor,
605
+ so a name change grows the pill rightward without shifting any control underfoot.
606
+ A max caps runaway titles; the Tip carries the full name. */
607
+ .sh-play-nav .vname { font-size: 11px; font-weight: 600; color: rgba(245, 245, 247, .78);
608
+ max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
609
+ text-transform: capitalize; padding: 0 11px 0 5px }
596
610
 
597
611
  /* variant chrome goes LIVE with selection (drive feedback 2026-08-12): accent when the
598
612
  frame is selected, the interact purple when it is being interacted with - the badge,