@celestia-island/hikari 0.55.259 → 0.55.260
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,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Source contract for the bond CELLS of the horizontal stepper (2026-10-31
|
|
3
|
-
* user rule; 60 %
|
|
3
|
+
* user rule; share trimmed 80→60→50 % over the same day's three looks).
|
|
4
4
|
*
|
|
5
5
|
* The row is read as one cell per step plus one cell per bond: the steps
|
|
6
6
|
* keep their content width, the leftover splits into EQUAL bond cells, and
|
|
7
|
-
* each bond paints
|
|
7
|
+
* each bond paints 50 % of its own cell CENTERED, so both ends keep a 25 %
|
|
8
8
|
* air gap. Before that rule the bond filled whatever the step had left after
|
|
9
9
|
* its label, minus two fixed 4px margins — measured on a real engine at the
|
|
10
10
|
* provider wizard's 590px row that put the bond 12px off its own label but
|
|
@@ -95,7 +95,7 @@ describe("horizontal bond cell contract", () => {
|
|
|
95
95
|
// while the bond→node air is margin alone — the 12/4 asymmetry that
|
|
96
96
|
// made the bond look glued to the next circle.
|
|
97
97
|
expect(cell).toContain(`margin-inline: calc(-1 * ${GAP}) 0;`);
|
|
98
|
-
// The box must not paint itself: the visible
|
|
98
|
+
// The box must not paint itself: the visible 50 % is the ::before.
|
|
99
99
|
expect(cell).toContain("background: none;");
|
|
100
100
|
// The ::before resolves percentage insets against this box.
|
|
101
101
|
expect(cell).toContain("position: relative;");
|
|
@@ -106,7 +106,7 @@ describe("horizontal bond cell contract", () => {
|
|
|
106
106
|
expect(blockFor(".hk-timeline-step")).toContain(`gap: ${GAP};`);
|
|
107
107
|
});
|
|
108
108
|
|
|
109
|
-
it("paints
|
|
109
|
+
it("paints 50 % of the cell centred with a 25 % inset on each end", () => {
|
|
110
110
|
// The parser above only yields top-level rules; the paint lives in the
|
|
111
111
|
// nested block, so lift it out of the cell rule's body.
|
|
112
112
|
const paint = /&::before\s*\{([^}]*)\}/.exec(blockFor(BOND_CELL))?.[1] ?? "";
|
|
@@ -114,7 +114,7 @@ describe("horizontal bond cell contract", () => {
|
|
|
114
114
|
expect(paint).toContain('content: "";');
|
|
115
115
|
expect(paint).toContain("position: absolute;");
|
|
116
116
|
expect(paint).toContain("inset-block: 0;");
|
|
117
|
-
expect(paint).toContain("inset-inline:
|
|
117
|
+
expect(paint).toContain("inset-inline: 25%;");
|
|
118
118
|
expect(paint).toContain("background: var(--_bond-color);");
|
|
119
119
|
// Percentage PADDING would resolve against the step, not the bond —
|
|
120
120
|
// ban the MECHANISM on both boxes, not one pinned value (a stray
|
|
@@ -189,6 +189,18 @@ describe("horizontal bond cell contract", () => {
|
|
|
189
189
|
expect(unscoped, "no unscoped connector background reset").toHaveLength(0);
|
|
190
190
|
});
|
|
191
191
|
|
|
192
|
+
it("keeps the indicator numbers unselectable through the family policy", () => {
|
|
193
|
+
// Measured on a real engine: the indicator computes user-select: none
|
|
194
|
+
// via styles/selection.scss's html-level deny (chrome text is not
|
|
195
|
+
// content). The timeline must not opt back in, and must not mark its
|
|
196
|
+
// chrome with the .hk-selectable whitelist class.
|
|
197
|
+
expect(src).not.toMatch(/user-select:\s*text/);
|
|
198
|
+
expect(src).not.toContain("@include user-select");
|
|
199
|
+
const tsx = readFileSync(join(here, "HkTimeline.tsx"), "utf-8");
|
|
200
|
+
expect(tsx).not.toContain("hk-selectable");
|
|
201
|
+
expect(tsx).not.toContain("user-select");
|
|
202
|
+
});
|
|
203
|
+
|
|
192
204
|
it("rides the status crossfade on the painted box, not just the frame", () => {
|
|
193
205
|
// The paint moved to the ::before, so the crossfade must cover THAT
|
|
194
206
|
// selector. Asserting the bare selector name proves nothing (the
|
|
@@ -312,12 +312,12 @@
|
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
-
/* ── Bond cells (2026-10-31 user rule; 60 %
|
|
315
|
+
/* ── Bond cells (2026-10-31 user rule; trimmed 80→60→50 % the same day) ─
|
|
316
316
|
The horizontal row reads as one cell per step plus one cell per bond: the
|
|
317
317
|
steps keep their content width, the leftover splits into EQUAL bond cells,
|
|
318
|
-
and each bond paints
|
|
319
|
-
air gap. (
|
|
320
|
-
|
|
318
|
+
and each bond paints 50 % of its cell CENTERED, so both ends keep a 25 %
|
|
319
|
+
air gap. (80 %/10 % read as long as ever; 60 %/20 % still did; 50 %/25 %
|
|
320
|
+
is where the user asked it to land.)
|
|
321
321
|
Three mechanics make that exact:
|
|
322
322
|
|
|
323
323
|
1. The bond's box must span the WHOLE cell. Its cell begins where its own
|
|
@@ -329,8 +329,8 @@
|
|
|
329
329
|
off the next node: the completed bond read as glued to the next circle.
|
|
330
330
|
2. The painted share cannot be `padding-inline` — a percentage padding
|
|
331
331
|
resolves against the CONTAINING block (the step), not the bond's own
|
|
332
|
-
box, which would inset it by a slice of the step instead of
|
|
333
|
-
cell. So the colour lives on a ::before pinned `inset-inline:
|
|
332
|
+
box, which would inset it by a slice of the step instead of 25 % of the
|
|
333
|
+
cell. So the colour lives on a ::before pinned `inset-inline: 25%`,
|
|
334
334
|
which does resolve against the bond. The status rules below therefore
|
|
335
335
|
publish `--_bond-color`; the vertical rail keeps painting its own box
|
|
336
336
|
(it is a rail hanging under the node, not a cell-wide bond).
|
|
@@ -368,7 +368,7 @@
|
|
|
368
368
|
content: "";
|
|
369
369
|
position: absolute;
|
|
370
370
|
inset-block: 0;
|
|
371
|
-
inset-inline:
|
|
371
|
+
inset-inline: 25%;
|
|
372
372
|
background: var(--_bond-color);
|
|
373
373
|
}
|
|
374
374
|
}
|
|
@@ -437,7 +437,7 @@
|
|
|
437
437
|
}
|
|
438
438
|
|
|
439
439
|
[data-el="connector"] {
|
|
440
|
-
// The bonds paint
|
|
440
|
+
// The bonds paint 50 % of their cell through a ::before (see the
|
|
441
441
|
// full-mode cell rule); the token is the single source for both that
|
|
442
442
|
// paint and the vertical rail's own box.
|
|
443
443
|
--_bond-color: var(--hi-color-primary);
|
|
@@ -527,7 +527,7 @@
|
|
|
527
527
|
|
|
528
528
|
// Status crossfade: the data-status driven colors (indicator fill/border,
|
|
529
529
|
// label color, connector fill) transition instead of flipping. The
|
|
530
|
-
// horizontal bond's paint lives on its ::before (the
|
|
530
|
+
// horizontal bond's paint lives on its ::before (the 50 % cell rule), so
|
|
531
531
|
// that box rides the crossfade too — without it a status flip snaps there
|
|
532
532
|
// while the vertical rail keeps easing.
|
|
533
533
|
.hk-timeline-step [data-el="indicator"],
|