@kolkrabbi/kol-theme 0.18.0 → 0.19.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-components-atoms.css +10 -2
- package/kol-components-organisms.css +52 -0
- package/package.json +1 -1
package/kol-components-atoms.css
CHANGED
|
@@ -892,8 +892,16 @@ a:hover .icon-hover,
|
|
|
892
892
|
* between. `sm` is the default and carries no class — it's on .kol-icon-frame
|
|
893
893
|
* above. `full` is a deliberate exception to the hard 4px repo invariant,
|
|
894
894
|
* because a round frame is its own chrome idiom (edge-straddling controls,
|
|
895
|
-
* avatars, status dots) rather than a radius tweak.
|
|
896
|
-
|
|
895
|
+
* avatars, status dots) rather than a radius tweak.
|
|
896
|
+
*
|
|
897
|
+
* Shared with `.kol-btn-radius-full` (component 0.20.0): Button gained the same
|
|
898
|
+
* two-value `radius` prop, and an icon-only Button IS this control with states.
|
|
899
|
+
* ONE rule rather than a second copy of the value — no --kol-* token holds a
|
|
900
|
+
* full round today (checked, zero hits), and inventing one for a single value
|
|
901
|
+
* used by one rule adds a name without adding a source of truth. If such a
|
|
902
|
+
* token ever lands beside --kol-radius-sm, this one selector reads it. */
|
|
903
|
+
.kol-icon-frame-radius-full,
|
|
904
|
+
.kol-btn-radius-full { border-radius: 9999px; }
|
|
897
905
|
|
|
898
906
|
/* pinned squares — the box never moves with glyph size (user law 2026-07-28) */
|
|
899
907
|
.kol-icon-frame-sm { width: 28px; height: 28px; }
|
|
@@ -537,6 +537,58 @@
|
|
|
537
537
|
overflow-y: auto;
|
|
538
538
|
}
|
|
539
539
|
|
|
540
|
+
/* Thumb — the tile's media box. It is the positioning context for the video
|
|
541
|
+
* fallback below, which is the only reason it carries `position`. */
|
|
542
|
+
.kol-media-thumb {
|
|
543
|
+
position: relative;
|
|
544
|
+
width: 100%;
|
|
545
|
+
height: 100%;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/* A blank square must never be the resting state (lobby/MediaLibraryVideoFallback,
|
|
549
|
+
* filed from kol-website 2026-08-01, quoting the consumer this replaced).
|
|
550
|
+
*
|
|
551
|
+
* A <video> paints NOTHING until a frame decodes — so on a slow link, or a codec
|
|
552
|
+
* the browser cannot decode at all, a video tile is an empty grey box with no
|
|
553
|
+
* name and no type marker, and the page reads as broken rather than as loading.
|
|
554
|
+
* 222 of the 433 objects in the reference bucket are video/mp4.
|
|
555
|
+
*
|
|
556
|
+
* This is the <img alt> equivalent: a play glyph and the filename, sitting
|
|
557
|
+
* BEHIND the video and revealed only while it has nothing to show. The video
|
|
558
|
+
* covers it the moment a frame lands, so a decoding tile never flashes it.
|
|
559
|
+
*
|
|
560
|
+
* NB the loading strategy is deliberately untouched. The brief probed
|
|
561
|
+
* preload=metadata + #t= against preload=auto + seek and BOTH timed out
|
|
562
|
+
* headless (no h264 decoder), so that test discriminates nothing and no
|
|
563
|
+
* evidence exists either way. The fallback needs no decoder to justify it. */
|
|
564
|
+
.kol-media-thumb-fallback {
|
|
565
|
+
position: absolute;
|
|
566
|
+
inset: 0;
|
|
567
|
+
display: flex;
|
|
568
|
+
flex-direction: column;
|
|
569
|
+
align-items: center;
|
|
570
|
+
justify-content: center;
|
|
571
|
+
gap: var(--kol-spacing-2);
|
|
572
|
+
padding-inline: var(--kol-spacing-3);
|
|
573
|
+
text-align: center;
|
|
574
|
+
color: var(--kol-fg-48);
|
|
575
|
+
pointer-events: none;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
.kol-media-thumb-fallback > span {
|
|
579
|
+
max-width: 100%;
|
|
580
|
+
overflow: hidden;
|
|
581
|
+
text-overflow: ellipsis;
|
|
582
|
+
white-space: nowrap;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/* Painted — the video has a frame, so the fallback stops being the tile's
|
|
586
|
+
* resting state. Kept in the layout box (opacity, not display) so nothing
|
|
587
|
+
* reflows when the first frame arrives. */
|
|
588
|
+
.kol-media-thumb-fallback[data-painted='true'] {
|
|
589
|
+
opacity: 0;
|
|
590
|
+
}
|
|
591
|
+
|
|
540
592
|
/* Sortable header — a real button inside the <th> so it is keyboard-reachable.
|
|
541
593
|
* The glyph is always in the layout box (opacity, not display) so the header
|
|
542
594
|
* does not reflow on first sort. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.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",
|