@kolkrabbi/kol-theme 0.129.0 → 0.131.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 +15 -2
- package/kol-components-atoms.css +11 -1
- package/kol-components-molecules.css +99 -16
- package/package.json +1 -1
package/kol-animation.css
CHANGED
|
@@ -333,8 +333,9 @@
|
|
|
333
333
|
* kol-component's `utilities/motion.js`, GRAB); `clamp()` holds it half its own
|
|
334
334
|
* length from either end so it stops flush, never past.
|
|
335
335
|
*
|
|
336
|
-
*
|
|
337
|
-
*
|
|
336
|
+
* Fine and long — it should read as a thickening of the line, not a tab stuck
|
|
337
|
+
* to it. (This said "longer and finer than the ColumnBrowser's 3 × 32" until
|
|
338
|
+
* 2026-09-02; that handle takes the same 0.125 × 4.5rem now.) The fade is long and
|
|
338
339
|
* unhurried at BOTH ends on a symmetric in-out: an ease-out popped the first
|
|
339
340
|
* 20 % and crawled the rest, which the user read as a jerk.
|
|
340
341
|
* ═════════════════════════════════════════════════════════════════════ */
|
|
@@ -370,6 +371,18 @@
|
|
|
370
371
|
.kol-rail-grab::before { transition: none; }
|
|
371
372
|
}
|
|
372
373
|
|
|
374
|
+
/* The ColumnBrowser's two handles wear the SAME pill (BrowsePageRulingsAndSeams,
|
|
375
|
+
* kol-r2b2 2026-09-02, user ruling) — `useGrabEdge` drives both. Their geometry
|
|
376
|
+
* and placement differ and stay with the component in
|
|
377
|
+
* kol-components-molecules.css (the strips sit INSIDE the border they grab, and
|
|
378
|
+
* there are two axes); only the reduced-motion cut belongs here, with every
|
|
379
|
+
* other one. The 08-28 note on the rail's pill — "Longer and finer than the
|
|
380
|
+
* ColumnBrowser's 3 × 32" — is stale: they are the same 0.125 × 4.5rem now. */
|
|
381
|
+
@media (prefers-reduced-motion: reduce) {
|
|
382
|
+
.kol-column-browser-resize-x::before,
|
|
383
|
+
.kol-column-browser-resize-y::before { transition: none; }
|
|
384
|
+
}
|
|
385
|
+
|
|
373
386
|
/* ═════════════════════════════════════════════════════════════════════
|
|
374
387
|
* SCROLL ENTRANCE — the reveal family (promoted from kol-website's
|
|
375
388
|
* apps/web/src/styles/animations.css, 2026-08-28, on the user's "it's good to
|
package/kol-components-atoms.css
CHANGED
|
@@ -189,11 +189,21 @@
|
|
|
189
189
|
* inside the content column's right edge — lined up with nothing the fields
|
|
190
190
|
* below it establish. On the edge, the button's box sits on the same vertical
|
|
191
191
|
* as the controls under it. */
|
|
192
|
+
/* THE CLOSE MUST OUT-STACK THE SHEET'S OWN CONTENT (BrowsePageRulingsAndSeams,
|
|
193
|
+
* kol-r2b2 2026-09-02; user 2026-08-28: "doesnt work clicking close"). It sat
|
|
194
|
+
* at a bare `10` — the dropdown rung — and it is the FIRST child of the sheet,
|
|
195
|
+
* so any consumer content after it at 10 or above covered the corner and the
|
|
196
|
+
* click landed on the panel behind. Reproduces in the DS with any tall sheet.
|
|
197
|
+
* `--kol-z-overlay` (50), not the reported 60: the ladder IS the z-contract
|
|
198
|
+
* (01-foundations/01-tokens § Stacking) and a hand-typed number here is the
|
|
199
|
+
* thing that law exists to stop. 50 clears dropdown (10) and sticky (20) inside
|
|
200
|
+
* the sheet, and a Dropdown opened from the sheet still covers it — that one
|
|
201
|
+
* portals to <body> at 210, outside this stacking context, which is correct. */
|
|
192
202
|
.kol-overlay-close {
|
|
193
203
|
position: absolute;
|
|
194
204
|
top: var(--kol-spacing-3);
|
|
195
205
|
right: 0;
|
|
196
|
-
z-index:
|
|
206
|
+
z-index: var(--kol-z-overlay);
|
|
197
207
|
}
|
|
198
208
|
|
|
199
209
|
/* ═══════════════════════════════════════════════════════════════
|
|
@@ -1231,15 +1231,26 @@
|
|
|
1231
1231
|
.kol-doc-page .kol-prose td,
|
|
1232
1232
|
.kol-doc-page .kol-prose th { overflow-wrap: anywhere; word-break: break-word; }
|
|
1233
1233
|
.kol-doc-page .kol-prose pre { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
1234
|
+
/* 3:5 IS THE TALLEST A DOCUMENT PAGE MAY BE (BrowsePageRulingsAndSeams,
|
|
1235
|
+
* kol-r2b2 2026-09-02; user 2026-08-28: "this is not an approved ratio"). The
|
|
1236
|
+
* overlay page was A-series (1:√2) and the column preview had NO bound at all,
|
|
1237
|
+
* so the FILE decided the height — a 7 KB JSON drew a pane taller than the
|
|
1238
|
+
* browser. 3:5 is the portrait rung on the export-specs ladder below 4:5, and
|
|
1239
|
+
* the floor before a page reads as a 9:16 strip. Both presentations take it:
|
|
1240
|
+
* content scrolls inside the box, the box never grows to the file. */
|
|
1234
1241
|
.kol-overlay .kol-doc-page {
|
|
1242
|
+
aspect-ratio: 3 / 5;
|
|
1235
1243
|
height: 85vh;
|
|
1236
|
-
width:
|
|
1244
|
+
width: auto;
|
|
1237
1245
|
max-width: calc(100vw - 10rem);
|
|
1238
1246
|
overflow-y: auto;
|
|
1239
1247
|
overflow-x: hidden;
|
|
1240
1248
|
margin-inline: auto;
|
|
1241
1249
|
}
|
|
1242
1250
|
.kol-column-browser-preview .kol-doc-page {
|
|
1251
|
+
aspect-ratio: 3 / 5;
|
|
1252
|
+
height: auto;
|
|
1253
|
+
overflow: auto;
|
|
1243
1254
|
zoom: 0.5;
|
|
1244
1255
|
background: transparent;
|
|
1245
1256
|
border-radius: 0;
|
|
@@ -1277,11 +1288,42 @@
|
|
|
1277
1288
|
* deepest one holding a selection — then it is the selection, full strength.
|
|
1278
1289
|
* `:has(~ …)` says what a positional selector cannot: "no later column has a
|
|
1279
1290
|
* selected row". */
|
|
1291
|
+
/* ONE FILL ON SCREEN, AND IT MEANS SELECTED (BrowsePageRulingsAndSeams, kol-r2b2
|
|
1292
|
+
* 2026-09-02, user ruling 2026-08-28). Hover and the bare keyboard cursor now
|
|
1293
|
+
* paint NOTHING. With `autoFocus` on there is always a cursor row, so the
|
|
1294
|
+
* 08-28 fill sat on the list permanently and moved with every click — the hover
|
|
1295
|
+
* fill the user removed the day before, back under another name, and at fg-04 it
|
|
1296
|
+
* drowned the selection at fg-02.
|
|
1297
|
+
*
|
|
1298
|
+
* A selected row that is ALSO the cursor keeps its fill, and needs no rule of
|
|
1299
|
+
* its own: `:hover` and `.is-cursor` are (0,2,0), `.is-selected` is (0,2,0) and
|
|
1300
|
+
* comes LATER, so source order hands the tie to the selection. The consumer
|
|
1301
|
+
* needed explicit `.is-selected.is-cursor` selectors only because its override
|
|
1302
|
+
* sat in a later sheet; in one file the order is the mechanism. Do not reorder.
|
|
1303
|
+
*
|
|
1304
|
+
* The VALUES are unchanged and were never wrong — the trail at fg-02, the
|
|
1305
|
+
* deepest column's selection at fg-04. This is a precedence fix, not a palette
|
|
1306
|
+
* one; `autoFocus` and the three-state fill shipped together and have not been
|
|
1307
|
+
* correct together since. */
|
|
1280
1308
|
.kol-column-browser-row:hover,
|
|
1281
|
-
.kol-column-browser-row.is-cursor { background-color:
|
|
1309
|
+
.kol-column-browser-row.is-cursor { background-color: transparent; }
|
|
1282
1310
|
.kol-column-browser-row.is-selected { background-color: var(--kol-fg-02); }
|
|
1283
1311
|
.kol-column-browser-column:not(:has(~ .kol-column-browser-column .is-selected)) > .is-selected { background-color: var(--kol-fg-04); }
|
|
1284
1312
|
|
|
1313
|
+
/* THE ROW IS A PILL (same ticket, user ruling 2026-08-27: "dont make selected
|
|
1314
|
+
* state move the layout"). A constant 4px inset on EVERY row, selected or not,
|
|
1315
|
+
* so the fill appears inside a gutter that was already there instead of the row
|
|
1316
|
+
* changing size; the column pads to match, so the first and last rows sit off
|
|
1317
|
+
* the frame by the same 4. Dividers are gone from the JSX — ColumnBrowser's Row
|
|
1318
|
+
* no longer emits `border-b`, because a hairline under a rounded fill draws the
|
|
1319
|
+
* box the pill is not. `.kol-column-browser-preview` is deliberately NOT in the
|
|
1320
|
+
* padding rule: it has no rows, and its own `p-4` is a Tailwind utility that
|
|
1321
|
+
* would out-rank this layer anyway. */
|
|
1322
|
+
.kol-column-browser-row { margin-inline: 4px; }
|
|
1323
|
+
.kol-column-browser-column { padding-block: 4px; }
|
|
1324
|
+
.kol-column-browser-row.is-selected,
|
|
1325
|
+
.kol-column-browser-row.is-cursor { border-radius: var(--kol-radius-sm); }
|
|
1326
|
+
|
|
1285
1327
|
/* ColumnBrowser resize handles (ColumnBrowserResize, kol-r2b2 2026-08-27 —
|
|
1286
1328
|
* Finder's edge handles, user ruling "that should be a set in ds"; native CSS
|
|
1287
1329
|
* `resize:` rejected). The column border already there is the visual; the
|
|
@@ -1309,33 +1351,74 @@
|
|
|
1309
1351
|
cursor: row-resize;
|
|
1310
1352
|
touch-action: none;
|
|
1311
1353
|
}
|
|
1312
|
-
/* THE GRAB
|
|
1313
|
-
* 2026-
|
|
1314
|
-
*
|
|
1315
|
-
*
|
|
1316
|
-
*
|
|
1317
|
-
*
|
|
1318
|
-
*
|
|
1354
|
+
/* THE GRAB PILL — ON THE LINE, FOLLOWING THE POINTER (BrowsePageRulingsAndSeams,
|
|
1355
|
+
* kol-r2b2 2026-09-02, user ruling; supersedes the "pointer-following was built
|
|
1356
|
+
* and rejected" note that stood here from ColumnBrowserChromeCorrections
|
|
1357
|
+
* 2026-08-28).
|
|
1358
|
+
*
|
|
1359
|
+
* The rejection was already contradicted by the DS itself: the rail's grab
|
|
1360
|
+
* (`kol-animation.css` § THE GRAB PILL, RailFlatGrabOpen, kol-mirror 2026-08-28
|
|
1361
|
+
* — *"make it like it is in kol-r2b2, it has animation and gsap"*) shipped the
|
|
1362
|
+
* pointer-follow, the 0.125 × 4.5rem geometry and the slow proximity fade the
|
|
1363
|
+
* SAME DAY, and its own comment noted the two handles were knowingly different.
|
|
1364
|
+
* One gesture, two shapes, is the ruling now. `useGrabEdge` drives both.
|
|
1365
|
+
*
|
|
1366
|
+
* THESE HANDLES ARE NOT THE SIDENAV'S, and that is the part to keep straight:
|
|
1367
|
+
*
|
|
1368
|
+
* ACROSS the rail's strip STRADDLES its line, so a strip-centred pill IS the
|
|
1369
|
+
* line. These strips lie INSIDE the border they grab — the x strip is
|
|
1370
|
+
* pulled back over the column's right edge (`margin-left: -8px`), the
|
|
1371
|
+
* y strip sits on the root's inner bottom edge — so a strip-centred
|
|
1372
|
+
* pill is always ~4px short of it. The FAR edge plus half the 1px
|
|
1373
|
+
* border is the line: `calc(100% + 0.5px)`.
|
|
1374
|
+
* AXES the rail has one vertical edge; there are two here, and the pill on
|
|
1375
|
+
* each travels the other way from what it resizes. The x handle reads
|
|
1376
|
+
* `--kol-rail-grab-y`, the y handle `--kol-rail-grab-x`.
|
|
1377
|
+
* REST hidden, not dim — N handles standing at rest is noise where the
|
|
1378
|
+
* SideNav has one. The rail's pill rests visible; these do not.
|
|
1379
|
+
*
|
|
1380
|
+
* Shared with the rail, deliberately: the fine/long geometry, the 1800ms fade
|
|
1381
|
+
* with its 400ms rest delay and 40ms engaged delay, and the symmetric in-out
|
|
1382
|
+
* curve. The ease-out kol-r2b2 filed is the curve the rail moved OFF on
|
|
1383
|
+
* 2026-08-28 (it popped the first 20 % and crawled the rest — the user read it
|
|
1384
|
+
* as a jerk); the travel likewise comes from `GRAB` in kol-component's
|
|
1385
|
+
* motion.js — dwell, not a 30px deadband — so one gesture cannot drift into two
|
|
1386
|
+
* feels. `clamp()` holds the pill half its own length from each end. */
|
|
1319
1387
|
.kol-column-browser-resize-x::before,
|
|
1320
1388
|
.kol-column-browser-resize-y::before {
|
|
1321
1389
|
content: '';
|
|
1322
1390
|
position: absolute;
|
|
1323
|
-
top: 50%;
|
|
1324
|
-
left: 50%;
|
|
1325
1391
|
translate: -50% -50%;
|
|
1326
1392
|
border-radius: var(--kol-radius-full);
|
|
1327
1393
|
background: var(--kol-fg-64);
|
|
1328
1394
|
opacity: 0;
|
|
1329
|
-
transition: opacity
|
|
1395
|
+
transition: opacity 1800ms cubic-bezier(0.45, 0, 0.55, 1) 400ms, background-color 500ms ease;
|
|
1396
|
+
}
|
|
1397
|
+
.kol-column-browser-resize-x::before {
|
|
1398
|
+
width: 0.125rem;
|
|
1399
|
+
height: 4.5rem;
|
|
1400
|
+
left: calc(100% + 0.5px);
|
|
1401
|
+
top: clamp(2.25rem, var(--kol-rail-grab-y, 50%), calc(100% - 2.25rem));
|
|
1330
1402
|
}
|
|
1331
|
-
.kol-column-browser-resize-
|
|
1332
|
-
|
|
1333
|
-
.
|
|
1403
|
+
.kol-column-browser-resize-y::before {
|
|
1404
|
+
width: 4.5rem;
|
|
1405
|
+
height: 0.125rem;
|
|
1406
|
+
top: calc(100% + 0.5px);
|
|
1407
|
+
left: clamp(2.25rem, var(--kol-rail-grab-x, 50%), calc(100% - 2.25rem));
|
|
1408
|
+
}
|
|
1409
|
+
/* `is-near` = the pointer is within GRAB.near of THIS handle's line (JS,
|
|
1410
|
+
* hysteresis at GRAB.sleep). The pill shows before you are on the 8px strip, so
|
|
1411
|
+
* the grab is discoverable instead of hidden. */
|
|
1412
|
+
.kol-column-browser-resize-x.is-near::before,
|
|
1334
1413
|
.kol-column-browser-resize-x.is-dragging::before,
|
|
1335
|
-
.kol-column-browser-resize-y
|
|
1414
|
+
.kol-column-browser-resize-y.is-near::before,
|
|
1336
1415
|
.kol-column-browser-resize-y.is-dragging::before {
|
|
1337
1416
|
opacity: 1;
|
|
1417
|
+
transition-delay: 40ms;
|
|
1338
1418
|
}
|
|
1419
|
+
.kol-column-browser-resize-x.is-dragging::before,
|
|
1420
|
+
.kol-column-browser-resize-y.is-dragging::before { background: var(--kol-fg-96); }
|
|
1421
|
+
|
|
1339
1422
|
.kol-overlay .kol-prose {
|
|
1340
1423
|
max-width: var(--kol-content-measure);
|
|
1341
1424
|
margin-inline: auto;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.131.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",
|