@kitlangton/knobs 0.4.0-next.2 → 0.4.0-next.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.
@@ -116,7 +116,7 @@ import {
116
116
  createHintController,
117
117
  pageHints,
118
118
  toggleLayer
119
- } from "./chunk-8mabjeyk.js";
119
+ } from "./chunk-0w1xk9jc.js";
120
120
 
121
121
  // src/panel/die.ts
122
122
  var ROUND = 16 * Math.sqrt(5), DIE = { half: 64 + ROUND, round: ROUND, pip: 12 }, PIPS = {
@@ -11448,12 +11448,20 @@ var compareCss = `
11448
11448
  display:flex;flex-direction:column;gap:6px;width:100%;height:100%;min-height:160px;outline:none;user-select:none;-webkit-user-select:none;
11449
11449
  font:var(--_k-weight) var(--_k-font-size)/1.35 var(--_k-font);color:var(--_k-fg);letter-spacing:normal;text-align:left}
11450
11450
  :where(.knobs-ui) :is(.knobs-cmp-mode,.knobs-cmp-toggle){all:revert;box-sizing:border-box;font:inherit;color:inherit;letter-spacing:inherit;background:transparent;border:0;margin:0;padding:0;outline:none;box-shadow:none}
11451
- .knobs-cmp-bar{flex:none;display:flex;align-items:center;gap:2px;height:24px;padding:0 2px}
11452
- .knobs-cmp-modes{display:flex;align-items:center;gap:2px}
11453
- .knobs-ui .knobs-cmp-mode,.knobs-ui .knobs-cmp-toggle{height:22px;padding:0 7px;border-radius:max(0px,calc(var(--_k-radius) - 2px));color:var(--_k-fg-3);cursor:pointer;white-space:nowrap;
11454
- transition:color .15s,background .15s}
11455
- .knobs-ui .knobs-cmp-mode:is(:hover,:focus-visible),.knobs-ui .knobs-cmp-toggle:is(:hover,:focus-visible){color:var(--_k-fg);background:var(--_ku-wash)}
11456
- .knobs-ui .knobs-cmp-mode[aria-checked="true"],.knobs-ui .knobs-cmp-toggle[aria-pressed="true"]{color:var(--_k-fg);font-weight:var(--_k-weight-label)}
11451
+ .knobs-cmp-bar{flex:none;display:flex;align-items:center;gap:var(--_k-gap);height:var(--_k-control-h)}
11452
+ /* The modes: one fill, the selection pill on the one picked; a mode isn't brighter for being
11453
+ picked: the pill's bright copy is. */
11454
+ .knobs-cmp-modes{position:relative;display:inline-flex;height:var(--_k-control-h);border-radius:var(--_k-radius);background:var(--_k-fill)}
11455
+ .knobs-cmp-modes[hidden]{display:none}
11456
+ .knobs-ui .knobs-cmp-mode{display:inline-flex;align-items:center;height:100%;padding:0 8px;border-radius:var(--_k-radius);color:var(--_k-fg-2);cursor:pointer;white-space:nowrap;
11457
+ transition:color calc(var(--_k-hover-out) * 1ms)}
11458
+ .knobs-ui .knobs-cmp-mode:is(:hover,:focus-visible){color:var(--_k-fg)}
11459
+ /* Toggles: icon buttons, the accent's wash when on. */
11460
+ .knobs-ui .knobs-cmp-toggle{display:inline-flex;align-items:center;justify-content:center;width:var(--_k-control-h);height:var(--_k-control-h);border-radius:var(--_k-radius);color:var(--_k-fg-3);cursor:pointer;
11461
+ transition:color calc(var(--_k-hover-out) * 1ms),background calc(var(--_k-hover-out) * 1ms)}
11462
+ .knobs-ui .knobs-cmp-toggle:is(:hover,:focus-visible){color:var(--_k-fg);background:var(--_ku-wash)}
11463
+ .knobs-ui .knobs-cmp-toggle[aria-pressed="true"]{color:var(--_k-accent-fg);background:var(--_k-accent-soft)}
11464
+ .knobs-cmp-toggle svg{display:block}
11457
11465
  .knobs-cmp-fill{flex:1}
11458
11466
  .knobs-cmp-toggle[hidden]{display:none}
11459
11467
  /* One surface: on a card (a walkthrough's step, a split's pane, anything .knobs-surface) or marked
@@ -11468,7 +11476,8 @@ var compareCss = `
11468
11476
  /* Unzoomed, a finger still scrolls the page up and down; zoomed, the stage takes every gesture. */
11469
11477
  .knobs-compare[data-zoomed] .knobs-cmp-stage{cursor:grab;touch-action:none}
11470
11478
  .knobs-compare[data-panning],.knobs-compare[data-panning] *{cursor:grabbing!important}
11471
- .knobs-compare[data-dragging],.knobs-compare[data-dragging] *{cursor:ew-resize!important}
11479
+ /* Wiping, the grip stands in for the cursor. */
11480
+ .knobs-compare[data-dragging],.knobs-compare[data-dragging] *{cursor:none!important}
11472
11481
  .knobs-cmp-sizer{position:absolute;left:0;right:0;top:0;height:0;visibility:hidden;pointer-events:none}
11473
11482
  .knobs-cmp-canvas{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}
11474
11483
  .knobs-cmp-media{position:absolute;left:0;top:0;display:block;max-width:none;margin:0;padding:0;border:0;object-fit:fill;transform-origin:0 0;pointer-events:none;will-change:transform}
@@ -11476,18 +11485,26 @@ var compareCss = `
11476
11485
  /* Glass: what's behind shows through, blurred, on the knobs tokens. */
11477
11486
  .knobs-cmp-label,.knobs-cmp-zoom{background:color-mix(in srgb,var(--_k-bg) 52%,transparent);-webkit-backdrop-filter:blur(14px) saturate(1.6);backdrop-filter:blur(14px) saturate(1.6);
11478
11487
  box-shadow:inset 0 0 0 .5px var(--_k-border),inset 0 1px 0 var(--_k-rim),0 2px 10px rgba(0,0,0,calc(.18 * var(--_k-shadow-k,1)))}
11479
- .knobs-cmp-label{position:absolute;left:0;top:0;padding:1px 7px;border-radius:999px;font-size:var(--_k-text-meta);line-height:16px;color:var(--_k-fg-2);white-space:nowrap;pointer-events:none;will-change:transform;transition:color .15s}
11480
- .knobs-cmp-label[data-lit]{color:var(--_k-fg)}
11481
- .knobs-cmp-label[data-dim]{color:var(--_k-fg-3)}
11482
- /* The wipe: a hairline down the line with a grip at its middle; a wider strip takes the hand and
11483
- the keys (a slider). It fades with the mode. */
11488
+ /* ✗ Before · ✓ After: Before quieter (fg-3), After in full text. Neutral: no colour of its own. */
11489
+ .knobs-cmp-label{position:absolute;left:0;top:0;display:flex;align-items:center;gap:4px;padding:1px 7px 1px 5px;border-radius:999px;font-size:var(--_k-text-meta);line-height:16px;font-weight:var(--_k-weight-label);
11490
+ white-space:nowrap;pointer-events:none;will-change:transform}
11491
+ .knobs-cmp-label[data-side="before"]{color:var(--_k-fg-3)}
11492
+ .knobs-cmp-label[data-side="after"]{color:var(--_k-fg)}
11493
+ .knobs-cmp-mark svg{display:block;width:12px;height:12px}
11494
+ /* The wipe: a hairline down the line with a raised grip at the pointer's height; a wider strip
11495
+ takes the hand and the keys (a slider). It fades with the mode; wiping, line and grip brighten. */
11484
11496
  .knobs-cmp-handle{cursor:ew-resize;position:absolute;left:-12px;top:0;width:24px;height:0;opacity:0;pointer-events:none;outline:none;will-change:transform;transition:opacity .18s cubic-bezier(.4,0,1,1)}
11485
11497
  .knobs-cmp-handle[data-on]{opacity:1;pointer-events:auto;transition:opacity .22s cubic-bezier(.2,.8,.2,1)}
11486
- .knobs-cmp-handle::before{content:"";position:absolute;top:0;bottom:0;left:11.5px;width:1px;background:var(--_ku-cmp-line);box-shadow:0 0 0 .5px rgba(0,0,0,.28),0 0 6px rgba(0,0,0,.25)}
11487
- .knobs-cmp-handle::after{content:"";position:absolute;top:50%;left:9px;width:6px;height:28px;margin-top:-14px;border-radius:3px;background:var(--_ku-cmp-line);
11488
- box-shadow:0 1px 3px rgba(0,0,0,.35),0 0 0 .5px rgba(0,0,0,.2);transition:scale .18s var(--_ku-ease),box-shadow .15s}
11489
- .knobs-compare[data-dragging] .knobs-cmp-handle::after{scale:1.12}
11490
- .knobs-cmp-handle:focus-visible::after,.knobs-compare[data-keyboard] .knobs-cmp-handle:focus::after{box-shadow:0 1px 3px rgba(0,0,0,.35),0 0 0 3px color-mix(in srgb,var(--_k-accent) 40%,transparent)}
11498
+ .knobs-cmp-handle::before{content:"";position:absolute;top:0;bottom:0;left:11.5px;width:1px;background:color-mix(in srgb,var(--_ku-cmp-line) 72%,transparent);box-shadow:0 0 0 .5px rgba(0,0,0,.28),0 0 6px rgba(0,0,0,.25)}
11499
+ .knobs-compare[data-dragging] .knobs-cmp-handle::before{background:var(--_ku-cmp-line)}
11500
+ .knobs-cmp-grip{position:absolute;top:0;left:4px;width:16px;height:28px;border-radius:min(8px,calc(var(--_k-radius) * 999));background:var(--_k-bg-overlay);
11501
+ box-shadow:var(--_k-shadow-overlay),inset 0 0 0 1px var(--_k-border),inset 0 1px 0 var(--_k-rim);will-change:transform;transition:box-shadow calc(var(--_k-hover-out) * 1ms)}
11502
+ .knobs-cmp-grip::before,.knobs-cmp-grip::after{content:"";position:absolute;top:10px;width:1px;height:8px;background:var(--_k-fg-3);transition:background calc(var(--_k-hover-out) * 1ms)}
11503
+ .knobs-cmp-grip::before{left:6px}
11504
+ .knobs-cmp-grip::after{left:9px}
11505
+ .knobs-compare[data-dragging] .knobs-cmp-grip{box-shadow:var(--_k-shadow-overlay),inset 0 0 0 1px var(--_k-border-strong),inset 0 1px 0 var(--_k-rim)}
11506
+ .knobs-compare[data-dragging] .knobs-cmp-grip::before,.knobs-compare[data-dragging] .knobs-cmp-grip::after{background:var(--_k-fg)}
11507
+ .knobs-cmp-handle:focus-visible .knobs-cmp-grip,.knobs-compare[data-keyboard] .knobs-cmp-handle:focus .knobs-cmp-grip{box-shadow:var(--_k-shadow-overlay),0 0 0 2px var(--_k-accent)}
11491
11508
  /* The split's hairline, down the middle side by side. */
11492
11509
  .knobs-cmp-split{position:absolute;left:0;top:0;width:1px;height:0;margin-left:-.5px;background:color-mix(in srgb,var(--_k-bg) 72%,transparent);pointer-events:none;will-change:transform,opacity}
11493
11510
  /* Zoomed: how far, and a way back, in the stage's corner; it fades in and out, nothing shifts. */
@@ -11496,12 +11513,12 @@ var compareCss = `
11496
11513
  opacity:0;scale:.96;pointer-events:none;transition:opacity .16s cubic-bezier(.4,0,1,1),scale .16s cubic-bezier(.4,0,1,1)}
11497
11514
  .knobs-cmp-zoom[data-on]{opacity:1;scale:1;pointer-events:auto;transition:opacity .2s cubic-bezier(.2,.8,.2,1),scale .2s cubic-bezier(.2,.8,.2,1)}
11498
11515
  :where(.knobs-ui) .knobs-cmp-zoom-reset{all:revert;box-sizing:border-box;font:inherit;letter-spacing:inherit;margin:0;border:0;outline:none;box-shadow:none;
11499
- height:20px;padding:0 8px;border-radius:999px;background:transparent;color:var(--_k-fg-2);cursor:pointer;transition:color .15s,background .15s}
11516
+ display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border-radius:999px;background:transparent;color:var(--_k-fg-2);cursor:pointer;transition:color .15s,background .15s}
11500
11517
  :where(.knobs-ui) .knobs-cmp-zoom-reset:is(:hover,:focus-visible){color:var(--_k-fg);background:color-mix(in srgb,var(--_k-fg) 12%,transparent)}
11501
11518
  .knobs-cmp-note{position:absolute;left:50%;top:50%;translate:-50% -50%;color:var(--_k-fg-3);font-size:var(--_k-text-meta);pointer-events:none}
11502
11519
  .knobs-cmp-note:empty{display:none}
11503
11520
  .knobs-cmp-strip-host{flex:none;height:60px;min-height:0}
11504
- .knobs-cmp-timeline-host{flex:none;height:56px;min-height:0}
11521
+ .knobs-cmp-timeline-host{flex:none;min-height:0}
11505
11522
  /* The frame strip: Before over After per column, a difference bar under them, a dot where it peaks. */
11506
11523
  .knobs-ui.knobs-cmp-strip{--_ku-cmp-diff:var(--k-compare-diff,var(--_k-ok));position:relative;width:100%;height:100%;min-height:40px;overflow:hidden;cursor:col-resize;touch-action:none;
11507
11524
  font:var(--_k-weight) var(--_k-font-size)/1.35 var(--_k-font);color:var(--_k-fg)}
@@ -11640,7 +11657,7 @@ var snappy = springLinear(SPRINGS2.snappy), pickerCss = `
11640
11657
  .knobs-picker-suggested{flex:none;color:var(--_k-fg-3);font-size:var(--_k-text-meta)}
11641
11658
  .knobs-picker-check{flex:none;display:flex;width:14px;height:14px;color:var(--_k-accent);opacity:0;scale:.6;filter:blur(2px);
11642
11659
  transition:opacity .11s ease-in,scale .11s ease-in,filter .11s ease-in}
11643
- .knobs-picker-check svg{display:block;width:14px;height:14px}
11660
+ .knobs-picker-check svg{display:block;width:12px;height:12px}
11644
11661
  .knobs-picker-option[data-chosen] .knobs-picker-check{opacity:1;scale:1;filter:none;transition:opacity .15s ease-out,scale var(--kp-snappy-ms) var(--kp-snappy),filter .15s ease-out}
11645
11662
  .knobs-picker-body{position:relative;overflow:visible}
11646
11663
  .knobs-picker-body[data-moving]{overflow:hidden}
@@ -11742,6 +11759,15 @@ var readoutCss = `
11742
11759
  .knobs-panel[data-gpu-active="true"] .knobs-rd-find{position:relative;z-index:2147480003}
11743
11760
  @media(prefers-reduced-motion:reduce){.knobs-rd :where(*){transition:none!important}}
11744
11761
  `;
11762
+
11763
+ // src/ui/selection-pill-css.ts
11764
+ var selectionPillCss = `
11765
+ .knobs-pick-pill,.knobs-pick-copy{position:absolute;left:0;top:0;width:0;height:0;pointer-events:none;transition:opacity .1s linear}
11766
+ .knobs-pick-pill{background:var(--_k-fill-selected);will-change:transform}
11767
+ .knobs-pick-copy{overflow:hidden;will-change:transform}
11768
+ .knobs-pick-copy-rows{position:absolute;left:0;top:0;width:0;height:0}
11769
+ :is(.knobs-pick-pill,.knobs-pick-copy)[data-off]{opacity:0}
11770
+ `;
11745
11771
  // src/ui/look.ts
11746
11772
  var css = `
11747
11773
  :where(.knobs-ui){
@@ -11777,6 +11803,12 @@ var css = `
11777
11803
  --_ku-pane-bg and --_ku-pane-ring so this reaches them. */
11778
11804
  :where(.knobs-surface,.knobs-pane:not([data-nested])>.knobs-pane-clip) .knobs-ui:not(.knobs-surface),.knobs-ui[data-nested]{--_ku-gap:var(--k-ui-gap,0px);--_ku-pane-bg:transparent;--_ku-pane-ring:none;
11779
11805
  --_ku-divider:var(--_k-split-gutter);--_kd-bg:transparent}
11806
+ /* What draws its box without those: a picker's card keeps its fill as the highlight but drops its
11807
+ ring; a timeline's track drops its well for a hairline under the lane; an inline panel sheds its
11808
+ card (--k-chrome 0). A full-window step is the one raised exception (it is the surface). */
11809
+ :is(.knobs-surface,.knobs-pane:not([data-nested])>.knobs-pane-clip) .knobs-picker-card,.knobs-ui[data-nested] .knobs-picker-card{box-shadow:none}
11810
+ :is(.knobs-surface,.knobs-pane:not([data-nested])>.knobs-pane-clip) .knobs-tl-track,.knobs-ui[data-nested] .knobs-tl-track{background:transparent;border-radius:0;box-shadow:inset 0 -1px 0 var(--_k-border-subtle)}
11811
+ :where(.knobs-surface,.knobs-pane:not([data-nested])>.knobs-pane-clip) .knobs-panel.knobs-inline:not(.knobs-page){--k-chrome:0}
11780
11812
  /* Only the pieces' own elements take their type and resets: what you put in a pane is yours. */
11781
11813
  .knobs-ui{box-sizing:border-box}
11782
11814
  :where(.knobs-split>*,.knobs-pane-clip,.knobs-pane-inner,.knobs-pane-body,.knobs-pane-head,.knobs-pane-head *,.knobs-pane-rail,.knobs-pane-rail *,.knobs-tree,.knobs-tree *,.knobs-tree-ghost){box-sizing:border-box}
@@ -11911,11 +11943,9 @@ var css = `
11911
11943
  .knobs-tree:focus .knobs-tree-row[data-active][aria-selected="true"]::before{background:var(--_ku-select-focus)}
11912
11944
  .knobs-tree-row[data-drop="into"]::before{opacity:1;background:color-mix(in srgb,var(--_k-accent) 30%,transparent)}
11913
11945
  .knobs-tree-row[data-dragged]{opacity:.38}
11914
- /* glide: one highlight under the selected row that glides between rows (the row's own stays off). */
11915
- .knobs-tree-cursor{position:absolute;left:var(--_ku-row-x);right:var(--_ku-row-x);top:0;height:var(--_k-row);border-radius:var(--_ku-row-radius);background:var(--_ku-select);
11916
- opacity:0;pointer-events:none;will-change:transform;transition:opacity .15s ease-out,background .12s}
11917
- .knobs-tree-cursor[data-on]{opacity:1}
11918
- .knobs-tree:focus .knobs-tree-cursor{background:var(--_ku-select-focus)}
11946
+ /* glide: the selection pill on the selected row, in the selection's colour (the row's own stays off). */
11947
+ .knobs-tree>.knobs-pick-pill{background:var(--_ku-select)}
11948
+ .knobs-tree:focus>.knobs-pick-pill{background:var(--_ku-select-focus)}
11919
11949
  .knobs-tree[data-glide] .knobs-tree-row[aria-selected="true"]::before{opacity:0!important}
11920
11950
  .knobs-tree-row>*{position:relative}
11921
11951
  .knobs-tree-caret{flex:none;display:flex;align-items:center;justify-content:center;width:16px;height:100%;color:var(--_k-fg-3);transition:transform var(--_ku-ease-ms) var(--_ku-ease)}
@@ -11947,22 +11977,20 @@ var css = `
11947
11977
  box-shadow:0 0 0 1px var(--_k-border-strong),0 6px 18px rgba(0,0,0,calc(.35 * var(--_k-shadow-k,1)));pointer-events:none;white-space:nowrap;font:var(--_k-weight) var(--_k-font-size)/1.6 var(--_k-font)}
11948
11978
  .knobs-tree-empty{padding:10px var(--_k-inset);color:var(--_k-fg-3)}
11949
11979
 
11950
- /* Timeline: a transport (play, the time) beside a track: the ruler's canvas over a lane of
11951
- markers, ranges as soft bands, and the playhead, a hairline in the accent with a cap. */
11980
+ /* Timeline: play beside a track: the ruler's canvas over a lane of markers, ranges as soft bands,
11981
+ and the playhead, a hairline in the accent with a cap. No clock: the time shows under the
11982
+ pointer on the track (the tag), in seconds, while hovering or scrubbing. */
11952
11983
  :where(.knobs-timeline,.knobs-timeline *){box-sizing:border-box}
11953
11984
  .knobs-ui.knobs-timeline{display:flex;align-items:stretch;gap:10px;width:100%;height:100%;min-height:52px;padding:6px var(--_k-inset) 8px 8px;outline:none;user-select:none;-webkit-user-select:none;
11954
11985
  font:var(--_k-weight) var(--_k-font-size)/1.35 var(--_k-font);color:var(--_k-fg);letter-spacing:normal;text-align:left}
11955
11986
  :where(.knobs-ui) :is(.knobs-tl-play,.knobs-tl-edit){all:revert;box-sizing:border-box;font:inherit;color:inherit;letter-spacing:inherit;background:transparent;border:0;margin:0;padding:0;outline:none;box-shadow:none}
11956
- .knobs-tl-transport{flex:none;display:flex;align-items:center;gap:8px;min-width:96px}
11987
+ .knobs-tl-transport{flex:none;display:flex;align-items:center}
11957
11988
  .knobs-ui .knobs-tl-play{flex:none;display:inline-flex;align-items:center;justify-content:center;width:var(--_k-control-h);height:var(--_k-control-h);min-width:22px;min-height:22px;border-radius:calc(var(--_k-radius) * 999);
11958
11989
  background:var(--_k-fill-selected);color:var(--_k-fg);cursor:pointer;transition:background .15s,transform .15s var(--_ku-ease)}
11959
11990
  .knobs-ui .knobs-tl-play:hover{background:color-mix(in srgb,var(--_k-fg) 16%,transparent)}
11960
11991
  .knobs-ui .knobs-tl-play:active{transform:scale(.94)}
11961
11992
  .knobs-tl-play svg{width:12px;height:12px}
11962
11993
  .knobs-timeline[data-playing] .knobs-tl-play{background:var(--_k-accent);color:var(--_k-bg)}
11963
- .knobs-tl-time{display:flex;flex-direction:column;line-height:1.2;font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
11964
- .knobs-tl-now{font:var(--_k-weight) var(--_k-value-size)/1.2 var(--_k-value-font);font-variant-numeric:tabular-nums;font-feature-settings:"tnum";color:var(--_k-fg);white-space:nowrap}
11965
- .knobs-tl-sub{font-size:var(--_k-text-meta);color:var(--_k-fg-3);white-space:nowrap}
11966
11994
  .knobs-tl-track{position:relative;flex:1;min-width:0;overflow:hidden;border-radius:var(--_k-radius);background:var(--_k-fill);cursor:col-resize;touch-action:none;
11967
11995
  transition:background calc(var(--_k-hover-out) * 1ms)}
11968
11996
  .knobs-timeline:focus-visible .knobs-tl-track,.knobs-timeline[data-keyboard]:focus .knobs-tl-track{background:color-mix(in srgb,var(--_k-fill-selected) 80%,transparent)}
@@ -11986,7 +12014,8 @@ var css = `
11986
12014
  .knobs-tl-pin{position:absolute;top:13px;left:-5px;width:10px;height:10px;pointer-events:auto;cursor:grab}
11987
12015
  .knobs-tl-pin::after{content:"";position:absolute;inset:1.5px;border-radius:min(2px,var(--_k-radius));background:var(--knobs-tl-c);rotate:45deg;transition:background .15s,scale .2s var(--_ku-ease)}
11988
12016
  .knobs-tl-mlabel{position:absolute;top:26px;left:3px;max-width:140px;padding:0 6px;border-radius:max(0px,calc(var(--_k-radius) - 3px));background:var(--_k-fill-selected);color:var(--_k-fg);
11989
- font-size:var(--_k-text-meta);line-height:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:auto;cursor:grab;transition:background .15s,color .15s}
12017
+ font-size:var(--_k-text-meta);line-height:17px;white-space:nowrap;pointer-events:auto;cursor:grab;transition:background .15s,color .15s}
12018
+ .knobs-tl-mtext{display:block;overflow:hidden;white-space:nowrap}
11990
12019
  .knobs-tl-marker[data-selected]{--knobs-tl-c:var(--_k-accent)}
11991
12020
  .knobs-tl-marker[data-selected] .knobs-tl-mlabel{background:color-mix(in srgb,var(--_k-accent) 24%,var(--_k-fill-selected))}
11992
12021
  .knobs-tl-marker[data-selected] .knobs-tl-pin::after{scale:1.2}
@@ -12007,7 +12036,22 @@ var css = `
12007
12036
  .knobs-timeline[data-scrubbing] .knobs-tl-hover{opacity:0}
12008
12037
  @media(prefers-reduced-motion:reduce){.knobs-timeline :where(*,::before,::after){transition:none!important}}
12009
12038
  @media(prefers-reduced-motion:reduce){:is(.knobs-tree,.knobs-split>.knobs-divider,.knobs-pane-head,.knobs-pane-rail) :where(*,::before,::after){transition:none!important}}
12010
- `, uiCss = () => aliased(css + readoutCss + overlayCss + bentoCss + activityCss + pickerCss + compareCss) + rolling_css_default;
12039
+ .knobs-tl-tag{position:absolute;left:0;bottom:2px;font-size:var(--_k-text-meta);line-height:16px;color:var(--_k-fg);font-variant-numeric:tabular-nums;font-feature-settings:"tnum";white-space:nowrap;pointer-events:none;opacity:0}
12040
+ .knobs-tl-tag[data-on]{opacity:1}
12041
+ /* The lane (variant: "lane"): one slim track of ticks under a compare or a video; markers are
12042
+ faint chapter ticks, the current one in text colour; nothing to edit. */
12043
+ .knobs-ui.knobs-timeline[data-variant="lane"]{height:auto;min-height:0;padding:0;gap:var(--_k-gap)}
12044
+ .knobs-timeline[data-variant="lane"] .knobs-tl-track{height:var(--_k-control-h)}
12045
+ .knobs-timeline[data-variant="lane"] .knobs-tl-ruler{height:100%}
12046
+ .knobs-timeline[data-variant="lane"] .knobs-tl-lane{top:0}
12047
+ .knobs-timeline[data-variant="lane"] .knobs-tl-marker{top:0}
12048
+ .knobs-timeline[data-variant="lane"] .knobs-tl-marker::before{top:0;bottom:50%;left:-.75px;width:1.5px;background:var(--_k-fg-3)}
12049
+ .knobs-timeline[data-variant="lane"] .knobs-tl-marker[data-current]::before{background:var(--_k-fg)}
12050
+ .knobs-timeline[data-variant="lane"] :is(.knobs-tl-pin,.knobs-tl-mlabel,.knobs-tl-rlabel){display:none}
12051
+ .knobs-timeline[data-variant="lane"] .knobs-tl-head::before{top:0}
12052
+ .knobs-timeline[data-variant="lane"] .knobs-tl-head::after{content:none}
12053
+ .knobs-timeline[data-variant="lane"] .knobs-tl-tag{top:2px;bottom:auto}
12054
+ `, uiCss = () => aliased(css + readoutCss + overlayCss + bentoCss + activityCss + pickerCss + compareCss + selectionPillCss) + rolling_css_default;
12011
12055
  function injectUiStyles(doc) {
12012
12056
  if (injectTokens(doc), doc.querySelector("style[data-knobs-ui]"))
12013
12057
  return;
@@ -9,7 +9,7 @@ import {
9
9
  writeSession,
10
10
  injectStyles,
11
11
  toggleLayer
12
- } from "./chunk-8mabjeyk.js";
12
+ } from "./chunk-0w1xk9jc.js";
13
13
 
14
14
  // src/panel/attach.ts
15
15
  function attach(controls, element, options = {}) {
@@ -85,7 +85,7 @@ function attach(controls, element, options = {}) {
85
85
  return;
86
86
  loading = !0;
87
87
  try {
88
- let { createPanel } = await (__preload("1qzffbpa"), import("./chunk-1qzffbpa.js"));
88
+ let { createPanel } = await (__preload("76frnh2j"), import("./chunk-76frnh2j.js"));
89
89
  if (disposed || !controls.enabled || panel)
90
90
  return;
91
91
  if (panel = createPanel(controls, element, close, { restored, chip }), remember)
package/dist/dev/index.js CHANGED
@@ -76,7 +76,7 @@ import {
76
76
  urlFlag2,
77
77
  storageKey
78
78
  } from "./chunk-3ygqgy1x.js";
79
- __chunks(import.meta.url,["kd01pt6y","1qzffbpa","ayb292zj","3ygqgy1x","8mabjeyk"],[["./index.js",3],["./chunk-1qzffbpa.js",3,4],["./chunk-ayb292zj.js",3,4],["./chunk-3ygqgy1x.js"],["./chunk-8mabjeyk.js",3]],0);
79
+ __chunks(import.meta.url,["0ytb6x87","76frnh2j","rem3qrhz","3ygqgy1x","0w1xk9jc"],[["./index.js",3],["./chunk-76frnh2j.js",3,4],["./chunk-rem3qrhz.js",3,4],["./chunk-3ygqgy1x.js"],["./chunk-0w1xk9jc.js",3]],0);
80
80
  // src/core/random.ts
81
81
  var lattice = (min, max, step, r) => min + Math.floor(r * (Math.floor((max - min) / step + 0.000000001) + 1)) * step, between = (min, max, r) => min + (max - min) * r;
82
82
  function pick(field, random) {
@@ -1378,11 +1378,11 @@ function defineControls(id, input, options = {}) {
1378
1378
  code: (format, values) => formatCode(values ?? get(), format),
1379
1379
  variants,
1380
1380
  attach(element, chip) {
1381
- let load = options.ship ? () => options.ship().then((m) => m.attach) : () => (__preload("ayb292zj"), import("./chunk-ayb292zj.js")).then((m) => m.attach);
1381
+ let load = options.ship ? () => options.ship().then((m) => m.attach) : () => (__preload("rem3qrhz"), import("./chunk-rem3qrhz.js")).then((m) => m.attach);
1382
1382
  return live(load, (attach) => attach(controls, element, chip), (detach) => detach());
1383
1383
  },
1384
1384
  mount(container, mountOptions) {
1385
- let load = options.ship ? () => options.ship().then((m) => m.mountPanel) : () => (__preload("1qzffbpa"), import("./chunk-1qzffbpa.js")).then((m) => m.mountPanel);
1385
+ let load = options.ship ? () => options.ship().then((m) => m.mountPanel) : () => (__preload("76frnh2j"), import("./chunk-76frnh2j.js")).then((m) => m.mountPanel);
1386
1386
  return live(load, (mountPanel) => {
1387
1387
  let panel = mountPanel(controls, container, mountOptions);
1388
1388
  return mountOptions?.onReady?.(panel), panel;