@celestia-island/hikari 0.55.338 → 0.55.340

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celestia-island/hikari",
3
- "version": "0.55.338",
3
+ "version": "0.55.340",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Hikari UI library, Vue 3 runtime — one design system for Vue 3 and Rust/WASM applications",
@@ -1,9 +1,20 @@
1
1
  @use "../styles/polyfill" as *;
2
2
 
3
- /* HkRangeRibbon — a multi-lane sequence ribbon with a brushed window.
4
- Anatomy: a thin OVERVIEW strip (the full domain, always), the window
5
- highlight + outside scrims + two edge handles riding over it, then the
6
- lane list whose segment bars show either the full domain or the window.
3
+ /* HkRangeRibbon — the two-layer sequence waterfall with a brushed window.
4
+ Anatomy: LAYER 1 (data-layer="minimap") is the thin OVERVIEW strip over
5
+ the full domain, always — the window highlight + outside scrims + two edge
6
+ handles ride over it and the reset seat sits on its field. LAYER 2
7
+ (data-layer="detail") is the lane list: the same segments shown either
8
+ across the full domain or mapped onto the window (0..100% of the track).
9
+ The minimap axis is the CALLER's domain (default `[0, 1]`; a host may
10
+ declare `[-0.1, 1]`, `[0, 2]` …), and `headroom` is the deprecated
11
+ `[0, 1 + headroom]` shorthand that IS the axis — no special tail-clamp.
12
+ Content outside the domain is clipped away; space inside it the content
13
+ does not fill stays blank. The detail layer is never rescaled on the
14
+ minimap axis: its axis is the selected window, or the caller's domain when
15
+ no window is selected. Minimal mode, which suppresses the lane rows and
16
+ the detail layer while the bare bar still lives in the minimap container,
17
+ draws the same domain axis.
7
18
 
8
19
  Geometry is part of the contract and pinned by HkRangeRibbon.test.tsx:
9
20
  the strip is 32px tall, a handle is an 8px half-overlapping grip
@@ -20,15 +31,17 @@
20
31
  pending-segment breathe, registered in animation/registerAnimations.ts. */
21
32
 
22
33
  .hk-range-ribbon {
23
- // ONE label column for both surfaces: the overview paints through an
24
- // empty gutter of this width, so an x% bar sits at the same inline
25
- // position in the strip and in its lane (the strip locates segments).
34
+ // ONE label column for both layers: the overview paints through an empty
35
+ // gutter of this width, so both layers always start at the same inline x.
36
+ // Their x% agree only in the full-domain view — a window re-normalizes the
37
+ // detail against the selected sub-domain, and a non-unit domain rescales
38
+ // the strip.
26
39
  // Wave (2026-11-06 raw-records five): the label column is JS-MEASURED —
27
40
  // the component publishes the widest rendered label as a px value on the
28
41
  // root (two-phase free/measure/pin). THIS fixed column is the no-JS /
29
- // pre-measure fallback: a shared width keeps strip-lane x% alignment
30
- // before the measurement lands (a bare max-content here would resolve
31
- // 0px in the empty gutter and misalign everything).
42
+ // pre-measure fallback: a shared width keeps the two layers' inline START
43
+ // aligned before the measurement lands (a bare max-content here would
44
+ // resolve 0px in the empty gutter and misalign everything).
32
45
  --hk-range-ribbon-label-col: minmax(48px, 84px);
33
46
 
34
47
  display: flex;
@@ -38,7 +51,7 @@
38
51
  min-width: 0;
39
52
  }
40
53
 
41
- // ── Overview strip (the full-domain minimap + brush surface) ─────────────
54
+ // ── LAYER 1: overview strip (the full-domain minimap + brush surface) ───
42
55
  .hk-range-ribbon-overview {
43
56
  position: relative;
44
57
  display: grid;
@@ -253,6 +266,18 @@
253
266
  white-space: nowrap;
254
267
  }
255
268
 
269
+ // ── Detail layer (the window-focused lane list) ─────────────────────────
270
+ // A plain column container, nothing else: it exists so the two layers are
271
+ // explicit in the DOM (and to the stylesheet contract) without disturbing
272
+ // the lane list's own gap/column layout. Its x-axis is the selected window
273
+ // mapped to 0..100% — the caller's domain axis lives on the minimap layer and
274
+ // only drives this layer's no-window (full-view) state.
275
+ .hk-range-ribbon-detail {
276
+ display: flex;
277
+ flex-direction: column;
278
+ min-width: 0;
279
+ }
280
+
256
281
  // ── Lane list ───────────────────────────────────────────────────────────
257
282
  .hk-range-ribbon-lanes {
258
283
  display: flex;