@kolkrabbi/kol-theme 0.30.1 → 0.31.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-molecules.css +61 -0
- package/kol-components-organisms.css +11 -35
- package/kol-type-roles.css +12 -5
- package/package.json +1 -1
|
@@ -22,6 +22,67 @@
|
|
|
22
22
|
z-index: 110;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/* ── Dropdown — .kol-dd-* ─────────────────────────────────────────────────
|
|
26
|
+
* IMPLEMENTED 2026-08-09. Dropdown.jsx stamped these classes and the docs
|
|
27
|
+
* page recorded their contract (2026-07-08 chrome law) — but no stylesheet
|
|
28
|
+
* ever carried them, so triggers rendered gapless bare buttons at whatever
|
|
29
|
+
* width a resize listener guessed. The trigger IS button chrome (kol-btn
|
|
30
|
+
* rules own fill/focus); these add ONLY trigger layout + the open/panel
|
|
31
|
+
* fusion. No hover, no clicked state (2026-07-15 ruling) — rest and open. */
|
|
32
|
+
.kol-dd-trigger {
|
|
33
|
+
justify-content: space-between;
|
|
34
|
+
gap: var(--kol-spacing-1);
|
|
35
|
+
width: 100%;
|
|
36
|
+
}
|
|
37
|
+
/* REST AND OPEN ARE THE ONLY STATES (2026-07-15 ruling, re-called 2026-08-09).
|
|
38
|
+
* The trigger wears button chrome, and button chrome hovers — so every
|
|
39
|
+
* kol-btn variant hover is PINNED BACK TO REST here. This sheet loads after
|
|
40
|
+
* atoms in the same layer, so the tie resolves to these rules. */
|
|
41
|
+
.kol-dd-trigger.kol-btn-primary:hover {
|
|
42
|
+
background: var(--kol-surface-secondary);
|
|
43
|
+
color: var(--kol-surface-on-primary);
|
|
44
|
+
}
|
|
45
|
+
.kol-dd-trigger.kol-btn-outline:hover {
|
|
46
|
+
background: transparent;
|
|
47
|
+
color: var(--kol-surface-on-primary);
|
|
48
|
+
border-color: var(--kol-oq-16);
|
|
49
|
+
}
|
|
50
|
+
/* ONE PIECE MEANS ONE WIDTH (2026-08-09 user call — "they are connected").
|
|
51
|
+
* The trigger reserves the widest option's width by stacking every label in
|
|
52
|
+
* one grid cell (hidden ghosts), so the panel — pinned to the trigger by
|
|
53
|
+
* matchReferenceWidth — is exactly as wide as the trigger at every value. */
|
|
54
|
+
.kol-dd-label { display: inline-grid; min-width: 0; }
|
|
55
|
+
.kol-dd-label > span { grid-area: 1 / 1; white-space: nowrap; }
|
|
56
|
+
.kol-dd-ghost { visibility: hidden; }
|
|
57
|
+
.kol-dd-caret {
|
|
58
|
+
flex-shrink: 0;
|
|
59
|
+
transition: rotate var(--kol-transition-base);
|
|
60
|
+
}
|
|
61
|
+
.kol-dd-trigger[data-state="open"] .kol-dd-caret { rotate: 180deg; }
|
|
62
|
+
/* grey — the opaque oq-12 fill, dropdown-only (never a kol-btn-* variant) */
|
|
63
|
+
.kol-dd-trigger--grey {
|
|
64
|
+
background: var(--kol-oq-12);
|
|
65
|
+
color: var(--kol-surface-on-primary);
|
|
66
|
+
border: 1px solid transparent;
|
|
67
|
+
}
|
|
68
|
+
/* open/panel fusion — the open trigger and its panel read as ONE piece:
|
|
69
|
+
* trigger squares its bottom corners, panel squares its top, and the fill
|
|
70
|
+
* continues (panel offset is -1 in Dropdown.jsx for the same reason). */
|
|
71
|
+
.kol-dd-trigger--open { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
|
|
72
|
+
.kol-dd-panel {
|
|
73
|
+
border-radius: 0 0 var(--kol-radius-sm) var(--kol-radius-sm);
|
|
74
|
+
overflow: hidden;
|
|
75
|
+
}
|
|
76
|
+
.kol-dd-panel--primary { background: var(--kol-surface-secondary); }
|
|
77
|
+
.kol-dd-panel--grey { background: var(--kol-oq-12); }
|
|
78
|
+
.kol-dd-panel--outline {
|
|
79
|
+
background: var(--kol-surface-primary);
|
|
80
|
+
border: 1px solid var(--kol-oq-16);
|
|
81
|
+
border-top: none; /* the trigger's bottom edge is the divider (docs page) */
|
|
82
|
+
}
|
|
83
|
+
.kol-dd-div { border-top: 1px solid var(--kol-fg-08); }
|
|
84
|
+
.kol-dd-list { padding: var(--kol-spacing-1); }
|
|
85
|
+
|
|
25
86
|
/* Popover — default chrome for floating-ui-positioned panels.
|
|
26
87
|
* Used by molecules/Popover.jsx PopoverPanel. */
|
|
27
88
|
.kol-popover {
|
|
@@ -48,17 +48,9 @@
|
|
|
48
48
|
* audit finding 4); oq-* mirrors the same visual weight without alpha */
|
|
49
49
|
border: 1px solid var(--kol-oq-08);
|
|
50
50
|
border-radius: 4px;
|
|
51
|
-
/*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* at the extremes). */
|
|
55
|
-
/* scroll edges: surface-colored FADE only — no shadow band (user ruling
|
|
56
|
-
* 2026-07-28: the content dissolves into the background, no 3d edge) */
|
|
57
|
-
background:
|
|
58
|
-
linear-gradient(to right, var(--kol-surface-primary) 40%, transparent) left / 32px 100%,
|
|
59
|
-
linear-gradient(to left, var(--kol-surface-primary) 40%, transparent) right / 32px 100%;
|
|
60
|
-
background-repeat: no-repeat;
|
|
61
|
-
background-attachment: local, local;
|
|
51
|
+
/* no scroll-edge paint — the 2026-07-28 ruling bans shadow bands, and the
|
|
52
|
+
* surface-primary "cover" gradients that outlived it rendered as exactly
|
|
53
|
+
* that band on any non-primary surface (brand app dark, 2026-08-09) */
|
|
62
54
|
}
|
|
63
55
|
|
|
64
56
|
.kol-table-wrapper::-webkit-scrollbar { display: none; }
|
|
@@ -172,29 +164,17 @@
|
|
|
172
164
|
.kol-table-pill-dark { background-color: var(--kol-surface-on-primary); color: var(--kol-surface-primary); }
|
|
173
165
|
|
|
174
166
|
.kol-table-token {
|
|
167
|
+
/* THE LOOK LIVES IN ONE PLACE (2026-08-09) — the shared chip recipe in
|
|
168
|
+
* kol-type-roles.css (`.kol-prose code, .kol-doc-code-inline,
|
|
169
|
+
* .kol-table-token`): font, size, weight, colour, fill, padding, radius.
|
|
170
|
+
* This rule keeps only the CELL mechanics the prose chip must not have. */
|
|
175
171
|
display: inline-flex;
|
|
176
172
|
align-items: center;
|
|
177
|
-
padding: 2px 4px;
|
|
178
173
|
/* No outer margin: spacing is the CONTAINER's job. The margin here
|
|
179
174
|
* double-spaced against every flex row's own gap, which is the ragged
|
|
180
175
|
* rhythm the metadata rows showed. */
|
|
181
|
-
/* Radius is the shared chip radius, not a literal (2026-08-01). This one
|
|
182
|
-
* value was the last thing making a table token and a prose inline code chip
|
|
183
|
-
* read as two different objects — see the inline-code block in
|
|
184
|
-
* kol-type-roles.css, which owns the shared fill/radius/colour answer. */
|
|
185
|
-
border-radius: var(--kol-radius-sm);
|
|
186
|
-
font-family: var(--kol-font-family-mono);
|
|
187
|
-
font-size: 0.75rem;
|
|
188
|
-
font-weight: 400;
|
|
189
176
|
line-height: 1;
|
|
190
177
|
white-space: nowrap;
|
|
191
|
-
/* Carries its OWN fill as of 2026-08-01. The look lived only in the
|
|
192
|
-
* `.kol-table code` descendant rule below, so a token chip rendered right
|
|
193
|
-
* inside a table and completely unstyled anywhere else — which is why the
|
|
194
|
-
* component pages hand-rolled a Tailwind lookalike. One concept, two
|
|
195
|
-
* spellings: exactly the drift `.text-fg-*` vs `--kol-fg-*` taught. */
|
|
196
|
-
color: var(--kol-fg-80);
|
|
197
|
-
background-color: var(--kol-fg-08);
|
|
198
178
|
}
|
|
199
179
|
|
|
200
180
|
.kol-table-wrapper.kol-table--simple { border: none; border-radius: 0; }
|
|
@@ -215,14 +195,10 @@
|
|
|
215
195
|
.kol-table th:last-child,
|
|
216
196
|
.kol-table td:last-child { border-right: none; }
|
|
217
197
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
padding: 2px 5px;
|
|
223
|
-
background-color: var(--kol-fg-08);
|
|
224
|
-
border-radius: 3px;
|
|
225
|
-
}
|
|
198
|
+
/* `.kol-table code` — the THIRD spelling of the inline chip, found and folded
|
|
199
|
+
* 2026-08-09 (an off-scale font size and a bare radius literal). A bare
|
|
200
|
+
* <code> in a cell now takes the ONE recipe in kol-type-roles.css beside
|
|
201
|
+
* .kol-doc-code-inline and .kol-table-token. */
|
|
226
202
|
|
|
227
203
|
.kol-table a {
|
|
228
204
|
color: var(--kol-link);
|
package/kol-type-roles.css
CHANGED
|
@@ -117,16 +117,23 @@
|
|
|
117
117
|
* The two chips had drifted on every value that makes them look alike: fg-04
|
|
118
118
|
* against fg-08, radius-sm against a bare literal, no colour against fg-80.
|
|
119
119
|
* Same concept, two spellings — the `.text-fg-*` vs `--kol-fg-*` lesson again.
|
|
120
|
-
*
|
|
121
|
-
*
|
|
120
|
+
* ONE RECIPE NOW, size and padding included (user ruling 2026-08-09: "it's
|
|
121
|
+
* basically the same style, so why are they so different"). The earlier
|
|
122
|
+
* size-and-padding-stay-per-role line — relative-in-prose vs fixed-in-chrome
|
|
123
|
+
* — is reversed: the chip is CHROME wherever it appears, and it takes the
|
|
124
|
+
* chrome numbers (the table token's shipped values, not the prose em). Only
|
|
125
|
+
* wrap behaviour stays per context: prose chips wrap mid-phrase, the table
|
|
126
|
+
* token stays single-line — that lives in the organisms sheet. */
|
|
122
127
|
.kol-prose code,
|
|
123
|
-
.kol-doc-code-inline
|
|
128
|
+
.kol-doc-code-inline,
|
|
129
|
+
.kol-table-token,
|
|
130
|
+
.kol-table code {
|
|
124
131
|
font-family: var(--kol-font-family-mono);
|
|
125
|
-
font-size: 0.
|
|
132
|
+
font-size: 0.75rem;
|
|
126
133
|
font-weight: 400;
|
|
127
134
|
color: var(--kol-fg-80);
|
|
128
135
|
background: var(--kol-fg-08);
|
|
129
|
-
padding:
|
|
136
|
+
padding: 2px var(--kol-spacing-1);
|
|
130
137
|
border-radius: var(--kol-radius-sm);
|
|
131
138
|
}
|
|
132
139
|
/* code inside pre stays stripped (rule preserved from the prose sheet) */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.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",
|