@kolkrabbi/kol-theme 0.7.0 → 0.7.2

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.
@@ -28,6 +28,17 @@
28
28
  }
29
29
  }
30
30
 
31
+ /* Hide the scrollbar on the dashboard's horizontal strips (timeline, host
32
+ pills) while keeping them scrollable. Firefox uses scrollbar-width; WebKit
33
+ the pseudo-element. */
34
+ .scrollbar-none {
35
+ scrollbar-width: none;
36
+ -ms-overflow-style: none;
37
+ }
38
+ .scrollbar-none::-webkit-scrollbar {
39
+ display: none;
40
+ }
41
+
31
42
  /* ---------------------------------------------------------------------------
32
43
  * Dashboard Card Base
33
44
  * --------------------------------------------------------------------------- */
@@ -0,0 +1,496 @@
1
+ /* =============================================================================
2
+ * KOL components — workshop / docs chrome
3
+ * =============================================================================
4
+ * Shell + docs layout chrome shared across the Workshop and Docs surfaces.
5
+ * Relocated from the monorepo's private @kol/ui package:
6
+ * packages/ui/css/components.css → the .shell-* navigation classes
7
+ * packages/ui/css/docs.css → the .docs-* content classes
8
+ * (+ docs-only .inline-tag-pill, .tag-graph-*)
9
+ *
10
+ * Class hooks are preserved so the JSX bindings keep resolving.
11
+ *
12
+ * Layer: this file ships unlayered; kol-theme.css assigns the layer at import —
13
+ * @import "./kol-components-workshop.css" layer(components);
14
+ * placing it in the `components` cascade layer alongside the rest of KOL chrome,
15
+ * so consumer utilities (a later Tailwind layer) still override it.
16
+ *
17
+ * KOL conformance (type/color de-drift):
18
+ * - Resting type + text color moved OUT to `kol-*` type classes + kol color
19
+ * utilities carried DIRECTLY on the JSX className (visible in dev tools).
20
+ * font-family / font-size / font-weight / line-height / letter-spacing /
21
+ * color were stripped from these rules; rules that were type/color only
22
+ * were deleted. Active color is a conditional kol color class in the JSX;
23
+ * the rendered markdown body is wrapped in `.kol-prose`.
24
+ * - Only structural props Tailwind/kol utilities can't express are kept here
25
+ * (sticky, scrollbar hiding, grid/flex layout, container-query, absolute
26
+ * positioning). `:hover` COLOR rules are kept — hover is a pure pointer
27
+ * state with no JSX hook and the kol color utilities have no hover variant.
28
+ * - `.shell-tab`, `.shell-nav-header`, `.shell-toc-expand-button`,
29
+ * `.toggle-switch-label` are rendered by out-of-package / currently-unused
30
+ * JSX, so their type is left in place (nothing in this repo's scope carries
31
+ * a replacement class for them yet).
32
+ * ============================================================================= */
33
+
34
+ /* =============================================================================
35
+ * SHELL NAVIGATION CLASSES
36
+ * ============================================================================= */
37
+
38
+ /* Shell Page Header */
39
+ .shell-page-header {
40
+ background: var(--kol-surface-primary);
41
+ }
42
+
43
+ /* Shell Tab Row */
44
+ .shell-tabrow-items {
45
+ display: flex;
46
+ flex-wrap: nowrap;
47
+ gap: 24px;
48
+ overflow-x: auto;
49
+ padding-top: 8px;
50
+ padding-bottom: 0;
51
+ scrollbar-width: none;
52
+ -ms-overflow-style: none;
53
+ }
54
+
55
+ .shell-tabrow-items::-webkit-scrollbar {
56
+ display: none;
57
+ }
58
+
59
+ /* .shell-tab — structure only. Type + color live inline on the tab element
60
+ * (kol-helper-14 + text-meta / active text-emphasis). The active underline
61
+ * stays here as structure, fired by the `active` marker class. */
62
+ .shell-tab {
63
+ display: inline-flex;
64
+ align-items: center;
65
+ gap: 6px;
66
+ white-space: nowrap;
67
+ flex-shrink: 0;
68
+ padding-top: 8px;
69
+ padding-bottom: 12px;
70
+ border-bottom: 2px solid transparent;
71
+ transition: color 0.2s ease, border-color 0.2s ease;
72
+ text-decoration: none;
73
+ }
74
+
75
+ .shell-tab.active,
76
+ .shell-tab:active {
77
+ border-bottom-color: var(--kol-surface-on-primary);
78
+ }
79
+
80
+ /* Sidebar sticky wrappers — hidden scrollbar, still scrollable */
81
+ .shell-sidebar-sticky {
82
+ scrollbar-width: none;
83
+ }
84
+
85
+ .shell-sidebar-sticky::-webkit-scrollbar {
86
+ display: none;
87
+ }
88
+
89
+ /* Sidebar toggle buttons (collapsible section headers) — layout only.
90
+ * Type/color carried in JSX (kol-helper-10 text-meta). */
91
+ .shell-sidebar-toggle {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: 6px;
95
+ cursor: pointer;
96
+ width: 100%;
97
+ border: none;
98
+ background: transparent;
99
+ padding: 0;
100
+ transition: color 0.15s ease;
101
+ }
102
+
103
+ .shell-sidebar-toggle:hover {
104
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 72%, transparent);
105
+ }
106
+
107
+ /* Sidebar section labels — margin only; type/color in JSX. */
108
+ .shell-sidebar-label {
109
+ margin-bottom: 8px;
110
+ }
111
+
112
+ /* Sidebar links — layout only; type/color (+ active) in JSX. */
113
+ .shell-sidebar-link {
114
+ padding: 4px 0;
115
+ border-radius: 4px;
116
+ text-decoration: none;
117
+ transition: all 0.15s ease;
118
+ display: block;
119
+ }
120
+
121
+ .shell-sidebar-link:hover {
122
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 100%, transparent);
123
+ }
124
+
125
+ /* Sidebar action buttons — layout only; type/color in JSX. */
126
+ .shell-sidebar-action {
127
+ padding: 4px 0;
128
+ border-radius: 4px;
129
+ transition: all 0.15s ease;
130
+ display: flex;
131
+ align-items: center;
132
+ gap: 8px;
133
+ width: 100%;
134
+ text-align: left;
135
+ border: none;
136
+ background: transparent;
137
+ cursor: pointer;
138
+ text-decoration: none;
139
+ }
140
+
141
+ .shell-sidebar-action:hover {
142
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 100%, transparent);
143
+ }
144
+
145
+ /* TOC expand button — no in-package JSX consumer; kept as-is (icon button). */
146
+ .shell-toc-expand-button {
147
+ padding: 2px;
148
+ border: none;
149
+ background: transparent;
150
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 48%, transparent);
151
+ cursor: pointer;
152
+ transition: color 0.15s ease;
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ flex-shrink: 0;
157
+ }
158
+
159
+ .shell-toc-expand-button:hover {
160
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 100%, transparent);
161
+ }
162
+
163
+ /* Navigation header label — structure only; type/color inline (kol-helper-10 text-meta). */
164
+ .shell-nav-header {
165
+ margin-bottom: 12px;
166
+ }
167
+
168
+ /* Navigation group header — layout only; type/color in JSX. */
169
+ .shell-nav-group-header {
170
+ padding: 6px 0 6px 0;
171
+ cursor: pointer;
172
+ display: flex;
173
+ justify-content: space-between;
174
+ align-items: center;
175
+ transition: color 0.15s ease;
176
+ }
177
+
178
+ .shell-nav-group-header:hover {
179
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 90%, transparent);
180
+ }
181
+
182
+ .shell-nav-items {
183
+ display: flex;
184
+ flex-direction: column;
185
+ gap: 4px;
186
+ margin-top: 4px;
187
+ }
188
+
189
+ /* Navigation items — layout only; type/color (+ active) in JSX. */
190
+ .shell-nav-item {
191
+ padding: 4px 12px 4px 20px;
192
+ border-radius: 0px;
193
+ text-decoration: none;
194
+ transition: all 0.15s ease;
195
+ display: block;
196
+ }
197
+
198
+ .shell-nav-item:hover {
199
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 100%, transparent);
200
+ }
201
+
202
+ .shell-nav-item-doc {
203
+ display: flex;
204
+ align-items: baseline;
205
+ justify-content: space-between;
206
+ gap: 8px;
207
+ }
208
+
209
+ .shell-nav-item-id {
210
+ flex-shrink: 0;
211
+ }
212
+
213
+ .shell-nav-item-title {
214
+ min-width: 0;
215
+ }
216
+
217
+ /* Wide viewport nav layout bumps */
218
+ @media (min-width: 1600px) {
219
+ .shell-tabrow-items {
220
+ gap: 32px;
221
+ }
222
+
223
+ .shell-tab {
224
+ gap: 8px;
225
+ padding-top: 10px;
226
+ padding-bottom: 14px;
227
+ }
228
+
229
+ .shell-tab svg {
230
+ width: 18px;
231
+ height: 18px;
232
+ }
233
+
234
+ .shell-sidebar-action svg {
235
+ width: 18px;
236
+ height: 18px;
237
+ }
238
+
239
+ .shell-nav-item {
240
+ padding: 5px 14px 5px 24px;
241
+ }
242
+
243
+ .toggle-switch-label {
244
+ font-size: 13px;
245
+ }
246
+
247
+ /* Wide grid gap */
248
+ .shell-content-grid {
249
+ gap: 48px;
250
+ }
251
+ }
252
+
253
+ /* =============================================================================
254
+ * DOCS CONTENT CLASSES
255
+ * =============================================================================
256
+ * Content-rendering styles for documentation pages. The rendered markdown body
257
+ * is wrapped in `.kol-prose` (headings / p / code / lists / blockquote / links),
258
+ * so the per-element `.docs-article *` type rules that used to live here are
259
+ * gone. Only structural doc chrome (cards, frontmatter layout, callout rule,
260
+ * media, tag graph) remains.
261
+ */
262
+
263
+ /* Documentation Card (used in inventory listing) */
264
+ .docs-card {
265
+ display: block;
266
+ padding: 16px;
267
+ border-radius: 8px;
268
+ border: 1px solid;
269
+ border-color: color-mix(in srgb, var(--kol-surface-on-primary) 4%, transparent);
270
+ background: transparent;
271
+ transition: all 0.2s ease;
272
+ text-decoration: none;
273
+ color: inherit;
274
+ }
275
+
276
+ .docs-card:hover {
277
+ border-color: color-mix(in srgb, var(--kol-surface-on-primary) 12%, transparent);
278
+ background: color-mix(in srgb, var(--kol-surface-on-primary) 2%, transparent);
279
+ }
280
+
281
+ .docs-card:hover * {
282
+ color: inherit;
283
+ }
284
+
285
+ /* Compact doc card for sidebar */
286
+ .docs-card--compact {
287
+ padding: 8px 12px;
288
+ border-radius: 6px;
289
+ }
290
+
291
+ .docs-title-link {
292
+ color: inherit;
293
+ text-decoration: none;
294
+ display: inline-flex;
295
+ align-items: center;
296
+ gap: 8px;
297
+ }
298
+
299
+ /* Doc meta row — layout only; type/color in JSX (kol-helper-10 text-body). */
300
+ .docs-meta {
301
+ display: flex;
302
+ flex-wrap: wrap;
303
+ gap: 12px;
304
+ }
305
+
306
+ /* Article shell — structural only; body type owned by `.kol-prose`. */
307
+ .docs-article {
308
+ width: 100%;
309
+ margin-inline: 0;
310
+ container-type: inline-size;
311
+ }
312
+
313
+ @media (min-width: 768px) {
314
+ .docs-article .kol-codeblock { padding: 24px; }
315
+ }
316
+
317
+ @media (min-width: 1024px) {
318
+ .docs-article .kol-codeblock { padding: 32px; }
319
+ }
320
+
321
+ /* Frontmatter properties block */
322
+ .docs-frontmatter {
323
+ border-bottom: 1px solid color-mix(in srgb, var(--kol-surface-on-primary) 8%, transparent);
324
+ padding-bottom: 20px;
325
+ margin-bottom: 24px;
326
+ }
327
+
328
+ .docs-frontmatter .shell-sidebar-label {
329
+ margin-block-end: 8px;
330
+ }
331
+
332
+ .docs-frontmatter-row {
333
+ display: flex;
334
+ align-items: baseline;
335
+ gap: 16px;
336
+ padding: 4px 0;
337
+ }
338
+
339
+ /* Frontmatter key — layout only; type/color in JSX (kol-helper-12 text-meta). */
340
+ .docs-frontmatter-key {
341
+ display: flex;
342
+ align-items: center;
343
+ gap: 8px;
344
+ min-width: 120px;
345
+ }
346
+
347
+ .docs-frontmatter-row:has(.tag) {
348
+ align-items: center;
349
+ }
350
+
351
+ .docs-color-swatch {
352
+ display: inline-flex;
353
+ align-items: center;
354
+ gap: 5px;
355
+ }
356
+
357
+ .docs-color-swatch-dot {
358
+ display: inline-block;
359
+ width: 10px;
360
+ height: 10px;
361
+ border-radius: 50%;
362
+ flex-shrink: 0;
363
+ }
364
+
365
+ .docs-image {
366
+ max-width: 100%;
367
+ height: auto;
368
+ border-radius: 8px;
369
+ margin-block: 1.5rem;
370
+ }
371
+
372
+ .docs-meta-inline {
373
+ margin-block-end: 1rem;
374
+ }
375
+
376
+ .docs-article hr {
377
+ margin-block: 2rem;
378
+ border: none;
379
+ border-top: 1px solid color-mix(in srgb, var(--kol-surface-on-primary) 12%, transparent);
380
+ }
381
+
382
+ .docs-divider {
383
+ width: 100%;
384
+ margin-block: 2rem;
385
+ }
386
+
387
+ .docs-divider > div {
388
+ background: color-mix(in srgb, var(--kol-surface-on-primary) 8%, transparent) !important;
389
+ }
390
+
391
+ /* Callout / blockquote rule — structural; only the broken palette token fixed. */
392
+ .docs-callout {
393
+ padding: 0;
394
+ padding-left: 16px;
395
+ margin-block-end: 1.5rem;
396
+ background: none;
397
+ border: none;
398
+ border-left: 1px solid var(--kol-color-red-200);
399
+ }
400
+
401
+ /* Inline hashtag pills — layout only; type + resting bg/color in JSX
402
+ * (kol-helper-12 bg-fg-08 text-strong). Hover state kept. */
403
+ .inline-tag-pill {
404
+ padding: 2px 8px;
405
+ border-radius: 9999px;
406
+ text-decoration: none;
407
+ transition: all 0.15s ease;
408
+ white-space: nowrap;
409
+ }
410
+
411
+ .inline-tag-pill:hover {
412
+ background: var(--kol-accent-primary);
413
+ color: var(--kol-surface-primary);
414
+ }
415
+
416
+ /* View toggle buttons — no in-package JSX consumer; layout kept, type stripped. */
417
+ .docs-view-toggle {
418
+ display: inline-flex;
419
+ align-items: center;
420
+ gap: 6px;
421
+ padding: 6px 12px;
422
+ border: 1px solid color-mix(in srgb, var(--kol-surface-on-primary) 16%, transparent);
423
+ border-radius: 6px;
424
+ background: transparent;
425
+ cursor: pointer;
426
+ transition: all 0.15s ease;
427
+ }
428
+
429
+ .docs-view-toggle:hover {
430
+ background: color-mix(in srgb, var(--kol-surface-on-primary) 8%, transparent);
431
+ color: color-mix(in srgb, var(--kol-surface-on-primary) 72%, transparent);
432
+ }
433
+
434
+ .docs-view-toggle.active {
435
+ background: color-mix(in srgb, var(--kol-accent-primary) 16%, transparent);
436
+ border-color: color-mix(in srgb, var(--kol-accent-primary) 40%, transparent);
437
+ color: var(--kol-accent-primary);
438
+ }
439
+
440
+ .docs-view-toggle--small {
441
+ padding: 4px 8px;
442
+ border-radius: 4px;
443
+ }
444
+
445
+ /* Tag Graph - Main content area */
446
+ .tag-graph-container {
447
+ width: 100%;
448
+ position: relative;
449
+ overflow: hidden;
450
+ }
451
+
452
+ .tag-graph-svg {
453
+ display: block;
454
+ margin: 0 auto;
455
+ }
456
+
457
+ /* Tag graph tooltip — layout only; type/color in JSX (kol-helper-10 text-emphasis). */
458
+ .tag-graph-tooltip {
459
+ background: color-mix(in srgb, var(--kol-surface-primary) 92%, transparent);
460
+ padding: 4px 8px;
461
+ border-radius: 4px;
462
+ pointer-events: none;
463
+ white-space: nowrap;
464
+ position: absolute;
465
+ bottom: 8px;
466
+ left: 50%;
467
+ transform: translateX(-50%);
468
+ }
469
+
470
+ /* Tag Graph - Sidebar */
471
+ .tag-graph-sidebar {
472
+ width: 100%;
473
+ aspect-ratio: 1;
474
+ position: relative;
475
+ overflow: hidden;
476
+ border-radius: 8px;
477
+ background: color-mix(in srgb, var(--kol-surface-on-primary) 4%, transparent);
478
+ }
479
+
480
+ .tag-graph-sidebar .tag-graph-svg {
481
+ width: 100%;
482
+ height: 100%;
483
+ }
484
+
485
+ .tag-graph-sidebar .tag-graph-tooltip {
486
+ position: absolute;
487
+ top: 8px;
488
+ left: 50%;
489
+ transform: translateX(-50%);
490
+ bottom: auto;
491
+ z-index: 10;
492
+ }
493
+
494
+ .tag-graph-sidebar-wrapper {
495
+ margin-top: 4px;
496
+ }
package/kol-theme.css CHANGED
@@ -43,6 +43,7 @@
43
43
  @import "./kol-components-organisms.css" layer(components);
44
44
  @import "./kol-components-dashboards.css" layer(components);
45
45
  @import "./kol-components-chess.css" layer(components);
46
+ @import "./kol-components-workshop.css" layer(components);
46
47
 
47
48
  /* Theme-level design tokens */
48
49
  @layer components {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
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",