@kolkrabbi/kol-theme 0.88.0 → 0.90.0
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/kol-animation.css +79 -0
- package/kol-components-molecules.css +21 -1
- package/package.json +1 -1
package/kol-animation.css
CHANGED
|
@@ -353,3 +353,82 @@
|
|
|
353
353
|
@media (prefers-reduced-motion: reduce) {
|
|
354
354
|
.kol-rail-grab::before { transition: none; }
|
|
355
355
|
}
|
|
356
|
+
|
|
357
|
+
/* ═════════════════════════════════════════════════════════════════════
|
|
358
|
+
* SCROLL ENTRANCE — the reveal family (promoted from kol-website's
|
|
359
|
+
* apps/web/src/styles/animations.css, 2026-08-28, on the user's "it's good to
|
|
360
|
+
* localise it"; that file's own header had marked it a DS candidate since
|
|
361
|
+
* 2026-07-28, and it was itself vendored from the elder @kol/ui).
|
|
362
|
+
*
|
|
363
|
+
* A consumer's IntersectionObserver adds `.is-visible`; the class is the whole
|
|
364
|
+
* API. `--kol-reveal-delay` staggers a group without a rule per child.
|
|
365
|
+
*
|
|
366
|
+
* The bare `.reveal*` names are kept as ALIASES beside the `kol-*` ones: they
|
|
367
|
+
* are live in dozens of kol-website call sites and renaming them would be a
|
|
368
|
+
* migration the promotion does not need. New code takes the prefixed name —
|
|
369
|
+
* `.reveal` is exactly the sort of word a consumer's own stylesheet also owns.
|
|
370
|
+
* ═════════════════════════════════════════════════════════════════════ */
|
|
371
|
+
.kol-reveal, .reveal {
|
|
372
|
+
opacity: 0;
|
|
373
|
+
transform: translateY(24px);
|
|
374
|
+
transition: opacity 600ms var(--kol-ease-house), transform 600ms var(--kol-ease-house);
|
|
375
|
+
transition-delay: var(--kol-reveal-delay, var(--reveal-delay, 0s));
|
|
376
|
+
}
|
|
377
|
+
/* the group rung: a shorter travel and a default 1s beat, so a set of children
|
|
378
|
+
* arrives after the block that introduces them */
|
|
379
|
+
.kol-reveal-group, .reveal-group {
|
|
380
|
+
opacity: 0;
|
|
381
|
+
transform: translateY(16px);
|
|
382
|
+
transition: opacity 600ms var(--kol-ease-house), transform 600ms var(--kol-ease-house);
|
|
383
|
+
transition-delay: var(--kol-reveal-delay, var(--reveal-delay, 1s));
|
|
384
|
+
}
|
|
385
|
+
/* the diagonal assembly: 40px in from the side AND 32 up, so a row of blocks
|
|
386
|
+
* converges rather than sliding in parallel */
|
|
387
|
+
.kol-reveal-from-left, .reveal-from-left {
|
|
388
|
+
opacity: 0;
|
|
389
|
+
transform: translate(-40px, 32px);
|
|
390
|
+
transition: opacity 700ms var(--kol-ease-house), transform 700ms var(--kol-ease-house);
|
|
391
|
+
transition-delay: var(--kol-reveal-delay, var(--reveal-delay, 0s));
|
|
392
|
+
}
|
|
393
|
+
.kol-reveal-from-right, .reveal-from-right {
|
|
394
|
+
opacity: 0;
|
|
395
|
+
transform: translate(40px, 32px);
|
|
396
|
+
transition: opacity 700ms var(--kol-ease-house), transform 700ms var(--kol-ease-house);
|
|
397
|
+
transition-delay: var(--kol-reveal-delay, var(--reveal-delay, 0s));
|
|
398
|
+
}
|
|
399
|
+
.kol-reveal.is-visible, .reveal.is-visible,
|
|
400
|
+
.kol-reveal-group.is-visible, .reveal-group.is-visible,
|
|
401
|
+
.kol-reveal-from-left.is-visible, .reveal-from-left.is-visible,
|
|
402
|
+
.kol-reveal-from-right.is-visible, .reveal-from-right.is-visible {
|
|
403
|
+
opacity: 1;
|
|
404
|
+
transform: translate(0, 0);
|
|
405
|
+
}
|
|
406
|
+
@media (prefers-reduced-motion: reduce) {
|
|
407
|
+
.kol-reveal, .reveal,
|
|
408
|
+
.kol-reveal-group, .reveal-group,
|
|
409
|
+
.kol-reveal-from-left, .reveal-from-left,
|
|
410
|
+
.kol-reveal-from-right, .reveal-from-right {
|
|
411
|
+
opacity: 1;
|
|
412
|
+
transform: none;
|
|
413
|
+
transition: none;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/* ═════════════════════════════════════════════════════════════════════
|
|
418
|
+
* AnimatedTitle — the word's rest state (promoted 2026-08-28, same pass).
|
|
419
|
+
*
|
|
420
|
+
* The DS has shipped `atoms/AnimatedTitle.jsx` for months while the CSS its
|
|
421
|
+
* words start from lived in kol-website: the component queried `.animatedWord`
|
|
422
|
+
* and set `opacity: 0` on nothing, so outside that one app the title rendered
|
|
423
|
+
* static and visible with no error. A component whose motion is in a consumer
|
|
424
|
+
* is not shipped. GSAP animates FROM this state; reduced motion skips the
|
|
425
|
+
* tween entirely (the hook), which is why the fallback below is not optional.
|
|
426
|
+
* ═════════════════════════════════════════════════════════════════════ */
|
|
427
|
+
.kol-animated-word, .animatedWord {
|
|
428
|
+
opacity: 0;
|
|
429
|
+
transform: translate3d(150vw, 3.125rem, 0) rotateY(-45deg) rotateX(15deg);
|
|
430
|
+
color: inherit;
|
|
431
|
+
}
|
|
432
|
+
@media (prefers-reduced-motion: reduce) {
|
|
433
|
+
.kol-animated-word, .animatedWord { opacity: 1; transform: none; }
|
|
434
|
+
}
|
|
@@ -36,6 +36,18 @@
|
|
|
36
36
|
gap: var(--kol-spacing-1);
|
|
37
37
|
width: 100%;
|
|
38
38
|
}
|
|
39
|
+
/* THE TRIGGER IS ON THE ICON LADDER (DropdownHeightAndHover, kol-fxr 2026-08-28).
|
|
40
|
+
* A text button takes its height from padding — `.kol-btn-sm` is `4px 12px` on
|
|
41
|
+
* mono-12, about 24 — while every icon control beside it is PINNED
|
|
42
|
+
* (`.kol-btn-icon.kol-btn-sm` is 28×28, the 2026-07-28 law: "the box never
|
|
43
|
+
* moves"). So a `sm` Dropdown sat 4px short of the `IconFrame` and `ThemeToggle`
|
|
44
|
+
* on its own row — the picker-then-icon-cluster header that kol-r2b2 draws and
|
|
45
|
+
* the estate is copying. The trigger is the one text control that always sits in
|
|
46
|
+
* an icon row, so it takes the icon rungs: 28 / 32 / 36. Horizontal padding is
|
|
47
|
+
* untouched; the vertical goes, because the flex box centres the label. */
|
|
48
|
+
.kol-dd-trigger.kol-btn-sm { height: 28px; padding-block: 0; }
|
|
49
|
+
.kol-dd-trigger.kol-btn-md { height: 32px; padding-block: 0; }
|
|
50
|
+
.kol-dd-trigger.kol-btn-lg { height: 36px; padding-block: 0; }
|
|
39
51
|
/* REST AND OPEN ARE THE ONLY STATES (2026-07-15 ruling, re-called twice
|
|
40
52
|
* 2026-08-09). The trigger wears button chrome, and button chrome hovers AND
|
|
41
53
|
* presses — so every kol-btn variant :hover and :active is PINNED BACK TO
|
|
@@ -47,11 +59,19 @@
|
|
|
47
59
|
background: var(--kol-surface-secondary);
|
|
48
60
|
color: var(--kol-surface-on-primary);
|
|
49
61
|
}
|
|
62
|
+
/* oq-08, NOT oq-16 (DropdownHeightAndHover, kol-fxr 2026-08-28). This is a
|
|
63
|
+
* pin-back to rest and it stopped being one: `.kol-btn-outline`'s rest border
|
|
64
|
+
* moved to `oq-08` on 2026-08-26 ("ONE outline border across the controls"),
|
|
65
|
+
* and this line kept the old `oq-16` — so the outline trigger quietly grew a
|
|
66
|
+
* hover the 2026-07-15 ruling forbids, and an untoned Dropdown lit while a
|
|
67
|
+
* sunken one beside it did not. A pin-back has to be re-read whenever the rest
|
|
68
|
+
* value it mirrors moves; that is the cost of expressing "no state" as a
|
|
69
|
+
* restatement rather than as an absence. */
|
|
50
70
|
.kol-dd-trigger.kol-btn-outline:not(:disabled):hover,
|
|
51
71
|
.kol-dd-trigger.kol-btn-outline:not(:disabled):active {
|
|
52
72
|
background: transparent;
|
|
53
73
|
color: var(--kol-surface-on-primary);
|
|
54
|
-
border-color: var(--kol-oq-
|
|
74
|
+
border-color: var(--kol-oq-08);
|
|
55
75
|
}
|
|
56
76
|
/* ONE PIECE MEANS ONE WIDTH (2026-08-09 user call — "they are connected").
|
|
57
77
|
* The trigger reserves the widest option's width by stacking every label in
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.90.0",
|
|
4
4
|
"description": "KOL (Kolkrabbi) design-system tokens + base CSS — brand-neutral. The canonical token/cascade layer every other KOL package and consumer builds on.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|