anentrypoint-design 0.0.486 → 0.0.488
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/README.md +2 -1
- package/chat.css +1 -1
- package/colors_and_type.css +22 -1
- package/community.css +3 -0
- package/dist/247420.css +474 -72
- package/dist/247420.js +24 -24
- package/package.json +1 -1
- package/src/components/content/fields.js +3 -1
- package/src/components/content/panel.js +1 -1
- package/src/components/files/chrome.js +5 -3
- package/src/components/overlay-primitives/floating.js +1 -0
- package/src/components/shell/workspace-columns.js +2 -0
- package/src/css/app-shell/base.css +22 -0
- package/src/css/app-shell/chat-polish.css +165 -0
- package/src/css/app-shell/files.css +39 -0
- package/src/css/app-shell/hero-content.css +13 -4
- package/src/css/app-shell/kits-appended.css +45 -7
- package/src/css/app-shell/loading-alerts.css +3 -1
- package/src/css/app-shell/panel-row.css +11 -1
- package/src/css/app-shell/primitives.css +48 -2
- package/src/css/app-shell/responsive2-workspace.css +24 -5
- package/src/css/app-shell/states-interactions.css +20 -34
- package/src/css/app-shell/topbar.css +47 -13
- package/src/kits/os/launcher.css +7 -0
- package/src/kits/os/theme.css +25 -1
- package/src/kits/os/validate.css +7 -0
- package/src/kits/os/wm.css +7 -0
- package/types/components.d.ts +1 -0
|
@@ -200,10 +200,26 @@
|
|
|
200
200
|
/* Column resize handles: a thin keyboard-accessible separator pinned to the
|
|
201
201
|
right edge of each chrome track; drag (or ArrowLeft/Right) writes a clamped
|
|
202
202
|
inline --ws-*-w. */
|
|
203
|
-
.ws-resizer { grid-row: 1 / -1; align-self: stretch; justify-self: end; width: 8px; margin-right: -4px; z-index: var(--z-raised); cursor: col-resize; background: transparent; border: none; padding: 0; touch-action: none; }
|
|
204
|
-
.ws-resizer::after { content: ""; display: block; width: 2px; height: 100%; margin: 0 auto; background:
|
|
205
|
-
.ws-resizer:hover::after, .ws-resizer:focus-visible::after { background: var(--accent); }
|
|
203
|
+
.ws-resizer { position: relative; grid-row: 1 / -1; align-self: stretch; justify-self: end; width: 8px; margin-right: -4px; z-index: var(--z-raised); cursor: col-resize; background: transparent; border: none; padding: 0; touch-action: none; display: flex; align-items: center; justify-content: center; }
|
|
204
|
+
.ws-resizer::after { content: ""; display: block; width: 2px; height: 100%; margin: 0 auto; background: var(--rule); opacity: 0.4; transition: background var(--dur-snap) var(--ease), opacity var(--dur-snap) var(--ease); }
|
|
205
|
+
.ws-resizer:hover::after, .ws-resizer:focus-visible::after { background: var(--accent); opacity: 1; }
|
|
206
|
+
/* Grip: a small pill of dots centered on the handle, visible at rest (low
|
|
207
|
+
contrast) so the resizer reads as a draggable affordance rather than an
|
|
208
|
+
invisible hit zone, then brightens to accent on hover/drag like the line. */
|
|
209
|
+
.ws-resizer::before {
|
|
210
|
+
content: ""; position: absolute; width: 4px; height: 20px; border-radius: var(--r-hair);
|
|
211
|
+
background-image: radial-gradient(circle, var(--fg-3) 1px, transparent 1px);
|
|
212
|
+
background-size: 4px 5px; background-repeat: repeat-y; background-position: center;
|
|
213
|
+
opacity: 0.5; transition: opacity var(--dur-snap) var(--ease), background-image var(--dur-snap) var(--ease);
|
|
214
|
+
pointer-events: none;
|
|
215
|
+
}
|
|
216
|
+
.ws-resizer:hover::before, .ws-resizer:focus-visible::before {
|
|
217
|
+
opacity: 1; background-image: radial-gradient(circle, var(--accent) 1px, transparent 1px);
|
|
218
|
+
}
|
|
206
219
|
.ws-resizer:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: -2px; }
|
|
220
|
+
/* Active drag state: wider + fully opaque accent grip so the handle a
|
|
221
|
+
fast-moving pointer has left :hover on still visibly reads as "gripped". */
|
|
222
|
+
.ws-resizer.ws-resizer-active::after { background: var(--accent); width: 3px; }
|
|
207
223
|
.ws-resizer.ws-resizer-rail { grid-column: 1; }
|
|
208
224
|
.ws-resizer.ws-resizer-sessions { grid-column: 2; }
|
|
209
225
|
.ws-resizer.ws-resizer-pane { grid-column: 3; justify-self: end; }
|
|
@@ -258,7 +274,10 @@
|
|
|
258
274
|
.ws-rail-toggle:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
259
275
|
.ws-rail-inner { display: flex; flex-direction: column; min-height: 0; flex: 1; padding: var(--space-3) var(--space-2); gap: var(--space-2); }
|
|
260
276
|
.ws-rail-head { display: flex; align-items: center; min-height: 36px; padding: 0 var(--space-2); }
|
|
261
|
-
|
|
277
|
+
/* Wordmark treatment matches .brand (topbar.css) — same display family/weight/
|
|
278
|
+
tracking — so the rail brand reads as the SAME logotype as every other kit's
|
|
279
|
+
topbar wordmark instead of a lighter, differently-set imitation. */
|
|
280
|
+
.ws-rail-brand { font-family: var(--ff-display); font-weight: 700; font-size: var(--fs-body); letter-spacing: var(--tr-tight); color: var(--fg); white-space: nowrap; overflow: hidden; }
|
|
262
281
|
.ws-rail-action {
|
|
263
282
|
display: flex; align-items: center; gap: var(--space-2);
|
|
264
283
|
padding: var(--space-2) var(--space-3); margin: var(--space-1) 0;
|
|
@@ -490,6 +509,6 @@
|
|
|
490
509
|
|
|
491
510
|
@media (prefers-reduced-motion: reduce) {
|
|
492
511
|
.ws-shell, .ws-rail, .ws-pane, .ws-sessions, .ws-scrim { transition: none; }
|
|
493
|
-
.ws-resizer::after { transition: none; }
|
|
512
|
+
.ws-resizer::after, .ws-resizer::before { transition: none; }
|
|
494
513
|
}
|
|
495
514
|
|
|
@@ -254,6 +254,7 @@ input[type="checkbox"], input[type="radio"] {
|
|
|
254
254
|
}
|
|
255
255
|
.ds-context-menu-item.danger {
|
|
256
256
|
color: var(--warn);
|
|
257
|
+
box-shadow: inset 2px 0 0 var(--warn);
|
|
257
258
|
}
|
|
258
259
|
.ds-context-menu-item.danger:hover {
|
|
259
260
|
background: color-mix(in oklab, var(--warn) 12%, var(--bg));
|
|
@@ -356,6 +357,7 @@ textarea::placeholder {
|
|
|
356
357
|
.prose p { margin: 0 0 var(--space-4) 0; }
|
|
357
358
|
.prose p:last-child { margin-bottom: 0; }
|
|
358
359
|
.prose a { color: var(--accent-ink); text-decoration-color: var(--rule-strong); text-underline-offset: 0.15em; }
|
|
360
|
+
.prose a:visited { color: color-mix(in oklab, var(--accent-ink) 70%, var(--purple-2, var(--fg-3))); }
|
|
359
361
|
.prose a:hover { text-decoration-color: currentColor; }
|
|
360
362
|
|
|
361
363
|
/* Rubber-stamp motif — a bordered, uppercase, letter-spaced badge with a
|
|
@@ -471,38 +473,13 @@ hr.rule-dotted { border-top: 2px dotted var(--rule-strong); }
|
|
|
471
473
|
}
|
|
472
474
|
|
|
473
475
|
/* Switch primitive (form-primitives.js Toggle) -- track + sliding knob.
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
display: inline-flex; align-items: center; flex-shrink: 0;
|
|
482
|
-
width: 40px; height: 22px; padding: 2px;
|
|
483
|
-
border: 1px solid var(--rule-strong); border-radius: var(--r-pill, 999px);
|
|
484
|
-
background: var(--bg-3); box-shadow: none; cursor: pointer;
|
|
485
|
-
transition: background-color var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
|
|
486
|
-
}
|
|
487
|
-
.ds-toggle-knob {
|
|
488
|
-
width: 16px; height: 16px; border-radius: 50%;
|
|
489
|
-
background: var(--fg-3);
|
|
490
|
-
transition: transform var(--dur-snap) var(--ease), background-color var(--dur-snap) var(--ease);
|
|
491
|
-
}
|
|
492
|
-
.ds-toggle[aria-checked="true"] {
|
|
493
|
-
background: var(--accent-ink); border-color: var(--accent-ink);
|
|
494
|
-
}
|
|
495
|
-
.ds-toggle[aria-checked="true"] .ds-toggle-knob {
|
|
496
|
-
background: var(--panel-0, var(--bg));
|
|
497
|
-
transform: translateX(18px);
|
|
498
|
-
}
|
|
499
|
-
.ds-toggle:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
500
|
-
.ds-toggle:focus-visible {
|
|
501
|
-
outline: var(--focus-w) solid var(--focus-color);
|
|
502
|
-
outline-offset: var(--focus-offset);
|
|
503
|
-
}
|
|
504
|
-
.ds-toggle-row { display: inline-flex; align-items: center; gap: var(--space-2); cursor: pointer; }
|
|
505
|
-
.ds-toggle-row .ds-toggle-label { color: inherit; }
|
|
476
|
+
Canonical definition lives in editor-primitives.css alongside the rest of
|
|
477
|
+
the .ds-check/.ds-radio/.ds-toggle form-primitive family (that file loads
|
|
478
|
+
AFTER this one in the build.mjs concat order, so a second .ds-toggle block
|
|
479
|
+
here was dead weight that silently lost the cascade while still disagreeing
|
|
480
|
+
on size/colors/knob-offset with the surviving rule — a duplicate-source-of-
|
|
481
|
+
-truth foot-gun, not an intentional override). Removed; see
|
|
482
|
+
editor-primitives.css's ".ds-toggle" block for track/knob/disabled/focus. */
|
|
506
483
|
|
|
507
484
|
/* -- Field controls: themed base for TextField / Select / SearchInput --
|
|
508
485
|
Root fix: previously only `transition` was set, so themed apps got
|
|
@@ -591,6 +568,15 @@ hr.rule-dotted { border-top: 2px dotted var(--rule-strong); }
|
|
|
591
568
|
button) - transparent to any flex/grid layout the bare input previously
|
|
592
569
|
sat in directly. */
|
|
593
570
|
.ds-search-input-wrap { display: contents; }
|
|
571
|
+
/* Leading-icon slot, matching .app-search's icon placement in Topbar so the
|
|
572
|
+
two search surfaces read as one control family instead of icon-vs-no-icon. */
|
|
573
|
+
.ds-search-field { position: relative; display: inline-flex; align-items: center; min-width: 0; }
|
|
574
|
+
.ds-search-field .ds-search-icon {
|
|
575
|
+
position: absolute; left: var(--space-3);
|
|
576
|
+
display: inline-flex; pointer-events: none;
|
|
577
|
+
color: var(--fg-3); opacity: 0.6;
|
|
578
|
+
}
|
|
579
|
+
.ds-search-field .ds-search-input { padding-left: calc(var(--space-3) + 15px + var(--space-2)); }
|
|
594
580
|
|
|
595
581
|
/* Visible clear (X) button for SearchInput - mirrors .ds-alert-dismiss's
|
|
596
582
|
ghost-icon treatment but sized to the kit's 44px touch-target floor
|
|
@@ -612,7 +598,7 @@ hr.rule-dotted { border-top: 2px dotted var(--rule-strong); }
|
|
|
612
598
|
transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
|
|
613
599
|
}
|
|
614
600
|
.ds-search-clear:hover { background: var(--bg-2); color: var(--fg); }
|
|
615
|
-
.ds-search-clear:focus-visible { outline:
|
|
601
|
+
.ds-search-clear:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
|
|
616
602
|
|
|
617
603
|
.ds-field input:not(.input):focus-visible,
|
|
618
604
|
.ds-field textarea:not(.input):focus-visible,
|
|
@@ -632,7 +618,7 @@ hr.rule-dotted { border-top: 2px dotted var(--rule-strong); }
|
|
|
632
618
|
}
|
|
633
619
|
.ds-field input:not(.input)[aria-invalid="true"],
|
|
634
620
|
.ds-field textarea:not(.input)[aria-invalid="true"] {
|
|
635
|
-
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--
|
|
621
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--danger);
|
|
636
622
|
}
|
|
637
623
|
|
|
638
624
|
/* Clear button for text inputs */
|
|
@@ -50,7 +50,7 @@ body.canvas-host { background: transparent !important; }
|
|
|
50
50
|
display: flex; flex-wrap: wrap;
|
|
51
51
|
align-items: center; gap: var(--space-4);
|
|
52
52
|
min-height: var(--app-topbar-h);
|
|
53
|
-
padding:
|
|
53
|
+
padding: var(--space-2-5) var(--pad-x);
|
|
54
54
|
background: color-mix(in oklab, var(--bg) 97%, transparent);
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -63,7 +63,7 @@ body.canvas-host { background: transparent !important; }
|
|
|
63
63
|
position: sticky; top: 0; z-index: var(--z-header);
|
|
64
64
|
display: flex; flex-wrap: wrap; align-items: center;
|
|
65
65
|
gap: var(--space-2) var(--space-4);
|
|
66
|
-
padding:
|
|
66
|
+
padding: var(--space-2) var(--pad-x);
|
|
67
67
|
background: color-mix(in oklab, var(--bg) 97%, transparent);
|
|
68
68
|
}
|
|
69
69
|
.app-chrome > .app-topbar,
|
|
@@ -81,7 +81,7 @@ body.canvas-host { background: transparent !important; }
|
|
|
81
81
|
.app-topbar > .app-search { flex: 1 1 auto; }
|
|
82
82
|
.app-topbar > nav { margin-left: auto; }
|
|
83
83
|
.app-topbar > .app-topbar-theme { flex: 0 0 auto; }
|
|
84
|
-
.app-topbar nav { display: flex; gap:
|
|
84
|
+
.app-topbar nav { display: flex; gap: var(--space-1); font-size: var(--fs-sm); flex-wrap: wrap; }
|
|
85
85
|
.app-topbar nav a { flex: 0 0 auto; }
|
|
86
86
|
.app-topbar nav a {
|
|
87
87
|
color: var(--fg-2);
|
|
@@ -134,6 +134,12 @@ body.canvas-host { background: transparent !important; }
|
|
|
134
134
|
border-radius: var(--r-pill);
|
|
135
135
|
font-size: var(--fs-sm); color: var(--fg-3);
|
|
136
136
|
max-width: 360px;
|
|
137
|
+
/* Match the system-wide input border language (.ds-field / .ds-search-input:
|
|
138
|
+
tonal fill + printed baseline rule) instead of a borderless pill, so the
|
|
139
|
+
topbar search reads as the same control family as every other input. */
|
|
140
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule),
|
|
141
|
+
inset 0 calc(-1 * var(--bw-rule)) 0 var(--rule-strong);
|
|
142
|
+
transition: box-shadow var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease);
|
|
137
143
|
}
|
|
138
144
|
.app-search .icon { opacity: 0.6; }
|
|
139
145
|
.app-search input {
|
|
@@ -141,20 +147,32 @@ body.canvas-host { background: transparent !important; }
|
|
|
141
147
|
font-family: inherit; font-size: inherit; color: var(--fg);
|
|
142
148
|
width: 100%;
|
|
143
149
|
}
|
|
150
|
+
/* Same focus language as .ds-field/.ds-search-input: no outline ring, the
|
|
151
|
+
baseline rule thickens to the accent instead — matching every other form
|
|
152
|
+
input in the system rather than a one-off outline ring. */
|
|
144
153
|
.app-search:focus-within {
|
|
145
|
-
|
|
146
|
-
|
|
154
|
+
background: var(--bg);
|
|
155
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule),
|
|
156
|
+
inset 0 calc(-1 * var(--bw-chunk)) 0 var(--accent);
|
|
147
157
|
}
|
|
148
158
|
|
|
149
159
|
.app-crumb {
|
|
150
160
|
min-height: var(--app-crumb-h);
|
|
151
|
-
padding:
|
|
152
|
-
display: flex; align-items: center; gap:
|
|
161
|
+
padding: var(--space-1-75) var(--pad-x);
|
|
162
|
+
display: flex; align-items: center; gap: var(--space-2);
|
|
153
163
|
font-size: var(--fs-sm); color: var(--fg-3);
|
|
164
|
+
min-width: 0;
|
|
154
165
|
}
|
|
155
|
-
.app-crumb .sep { opacity: 0.5; }
|
|
156
|
-
|
|
157
|
-
|
|
166
|
+
.app-crumb .sep { opacity: 0.5; flex: 0 0 auto; }
|
|
167
|
+
/* Trail segments and the current/leaf segment truncate independently instead
|
|
168
|
+
of the whole crumb bar overflowing — a long segment (deep file path, long
|
|
169
|
+
title) must not push the sibling segments or the right slot off-screen. */
|
|
170
|
+
.app-crumb > span:not(.sep):not(.crumb-right) {
|
|
171
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
172
|
+
min-width: 0; flex: 0 1 auto;
|
|
173
|
+
}
|
|
174
|
+
.app-crumb .leaf { color: var(--fg); font-weight: 600; flex: 0 1 auto; }
|
|
175
|
+
.app-crumb .crumb-right { margin-left: auto; color: var(--fg-3); flex: 0 0 auto; }
|
|
158
176
|
|
|
159
177
|
/* The shell is the grid cell (.app-body's fixed sidebar column); it must own
|
|
160
178
|
its own scroll, not just size to content, because .app-body's row track is
|
|
@@ -197,7 +215,7 @@ body.canvas-host { background: transparent !important; }
|
|
|
197
215
|
.app-side .group {
|
|
198
216
|
font-size: var(--fs-xs); font-weight: 600;
|
|
199
217
|
color: var(--fg-3); padding: 0 var(--space-3);
|
|
200
|
-
margin-bottom:
|
|
218
|
+
margin-bottom: var(--space-1-75);
|
|
201
219
|
}
|
|
202
220
|
.app-side a {
|
|
203
221
|
display: grid; grid-template-columns: 18px 1fr auto;
|
|
@@ -212,7 +230,7 @@ body.canvas-host { background: transparent !important; }
|
|
|
212
230
|
min-height: 44px;
|
|
213
231
|
border-radius: var(--r-1);
|
|
214
232
|
color: var(--fg-2);
|
|
215
|
-
margin-bottom:
|
|
233
|
+
margin-bottom: var(--space-hair);
|
|
216
234
|
}
|
|
217
235
|
@media (pointer: coarse) {
|
|
218
236
|
.app-side a { min-height: 44px; padding: var(--space-2-75) var(--space-3); }
|
|
@@ -308,6 +326,14 @@ body.canvas-host { background: transparent !important; }
|
|
|
308
326
|
width:100% restores fill-then-cap for every .narrow page, not just wide
|
|
309
327
|
viewports (the shrink-to-fit bug undersized even the base 760px case). */
|
|
310
328
|
.app-main.narrow { width: 100%; max-width: var(--measure-narrow); margin: 0 auto; }
|
|
329
|
+
/* .narrow means "prose reading measure", not "shrink the whole shell on wide
|
|
330
|
+
screens" -- the fixed 760px floor read as narrow on any viewport above
|
|
331
|
+
~1300px since the clamp below only widens the no-side case. Sidebar-present
|
|
332
|
+
narrow pages (docs, papers) get the same wide-viewport widening treatment,
|
|
333
|
+
just without the no-side variant's extra sidebar-width allowance. */
|
|
334
|
+
.app-body:not(.no-side) .app-main.narrow {
|
|
335
|
+
max-width: clamp(var(--measure-narrow), 46vw, 1000px);
|
|
336
|
+
}
|
|
311
337
|
/* A shell with no sidebar has no competing column, so the prose clamp there was
|
|
312
338
|
leaving the whole sidebar's worth of width empty -- 760px of content inside a
|
|
313
339
|
1413px shell on a real page. Widen the clamp by the space the absent sidebar
|
|
@@ -372,8 +398,16 @@ body.canvas-host { background: transparent !important; }
|
|
|
372
398
|
color: var(--fg-3);
|
|
373
399
|
border-top: 1px solid var(--rule);
|
|
374
400
|
}
|
|
375
|
-
.app-status .item { color: inherit; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
|
|
401
|
+
.app-status .item { color: inherit; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; display: flex; align-items: center; gap: var(--space-3); }
|
|
376
402
|
.app-status .item:first-of-type { color: var(--accent-ink); }
|
|
403
|
+
/* Subtle divider between adjacent status segments — a thin inset rule, not a
|
|
404
|
+
full-height border, so it reads as a quiet separator rather than boxing
|
|
405
|
+
each item. */
|
|
406
|
+
.app-status .item:not(:first-of-type)::before {
|
|
407
|
+
content: ''; flex: 0 0 auto;
|
|
408
|
+
width: 1px; height: 10px;
|
|
409
|
+
background: var(--rule-strong);
|
|
410
|
+
}
|
|
377
411
|
.app-status .spread { flex: 1; }
|
|
378
412
|
/* The status bar NEVER wraps: at narrow widths the trailing items (hints,
|
|
379
413
|
agent target) drop in priority order instead of breaking mid-word onto a
|
package/src/kits/os/launcher.css
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
/* ============================================================
|
|
2
|
+
DEPRECATED: superseded by theme.css's .launcher-dock rules, the only
|
|
3
|
+
stylesheet any consumer actually links. createLauncher() (the API these
|
|
4
|
+
rules were paired to) was part of the now-removed validation harness --
|
|
5
|
+
renderDock() in launcher.js is the current API, styled by theme.css. Kept
|
|
6
|
+
as a package.json export map entry for now; scheduled for removal in the
|
|
7
|
+
next major version rather than a same-session delete.
|
|
8
|
+
|
|
2
9
|
Launcher dock — paired with createLauncher() (validation harness path)
|
|
3
10
|
Bible: tonal step from canvas, no borders, pill controls, lowercase.
|
|
4
11
|
============================================================ */
|
package/src/kits/os/theme.css
CHANGED
|
@@ -721,6 +721,28 @@ html, body {
|
|
|
721
721
|
--accent-bright: var(--green) !important;
|
|
722
722
|
--paper: #F5F0E4;
|
|
723
723
|
}
|
|
724
|
+
/* Themed scrollbars for every scrollable node under the OS shell (panels,
|
|
725
|
+
* sidebars, panes, modals) that doesn't already opt into its own scrollbar
|
|
726
|
+
* styling — .chat-thread below keeps its bespoke version. Firefox via
|
|
727
|
+
* scrollbar-width/-color, Chrome/Safari/Edge via ::-webkit-scrollbar. */
|
|
728
|
+
.ds-247420, .ds-247420 * {
|
|
729
|
+
scrollbar-width: thin;
|
|
730
|
+
scrollbar-color: color-mix(in oklab, var(--fg) 22%, transparent) transparent;
|
|
731
|
+
}
|
|
732
|
+
.ds-247420::-webkit-scrollbar, .ds-247420 *::-webkit-scrollbar {
|
|
733
|
+
width: 8px;
|
|
734
|
+
height: 8px;
|
|
735
|
+
}
|
|
736
|
+
.ds-247420::-webkit-scrollbar-track, .ds-247420 *::-webkit-scrollbar-track {
|
|
737
|
+
background: transparent;
|
|
738
|
+
}
|
|
739
|
+
.ds-247420::-webkit-scrollbar-thumb, .ds-247420 *::-webkit-scrollbar-thumb {
|
|
740
|
+
background: color-mix(in oklab, var(--fg) 18%, transparent);
|
|
741
|
+
border-radius: var(--r-pill, 999px);
|
|
742
|
+
}
|
|
743
|
+
.ds-247420::-webkit-scrollbar-thumb:hover, .ds-247420 *::-webkit-scrollbar-thumb:hover {
|
|
744
|
+
background: color-mix(in oklab, var(--fg) 30%, transparent);
|
|
745
|
+
}
|
|
724
746
|
/* Window titlebar matches the 34px bar height; clamp so menubar/taskbar/titlebar
|
|
725
747
|
* heights are uniform. */
|
|
726
748
|
.ds-247420 .wm-bar { height: 34px; min-height: 34px; box-sizing: border-box; padding-top: var(--space-1); padding-bottom: var(--space-1); }
|
|
@@ -1129,7 +1151,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1129
1151
|
* every .ds-247420 consumer (see the file header), and the old `#1a1a1a` /
|
|
1130
1152
|
* `#fff` fallbacks were baked DARK values that would have rendered white text
|
|
1131
1153
|
* on a near-white panel in paper mode had they ever fired. */
|
|
1132
|
-
.ds-247420 .wm-context-menu { position: fixed; background: var(--panel-2); border: 1px solid color-mix(in oklab, var(--fg) 18%, transparent); border-radius: var(--r-0); z-index: var(--z-dropdown); font-family: var(--ff-ui); color: var(--fg); min-width: 140px; box-shadow:
|
|
1154
|
+
.ds-247420 .wm-context-menu { position: fixed; background: var(--panel-2); border: 1px solid color-mix(in oklab, var(--fg) 18%, transparent); border-radius: var(--r-0); z-index: var(--z-dropdown); font-family: var(--ff-ui); color: var(--fg); min-width: 140px; box-shadow: var(--shadow-3); padding: var(--space-1); }
|
|
1133
1155
|
.ds-247420 .wm-context-menu-item { display: block; width: 100%; padding: 7px var(--space-2-5); border: none; border-radius: var(--r-0); background: none; color: inherit; font-family: inherit; text-align: left; cursor: pointer; font-size: var(--fs-tiny); }
|
|
1134
1156
|
.ds-247420 .wm-context-menu-item:hover { background: color-mix(in oklab, var(--fg) 8%, transparent); }
|
|
1135
1157
|
|
|
@@ -1815,6 +1837,8 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
|
|
|
1815
1837
|
/* chat composer controls */
|
|
1816
1838
|
.ds-247420 .chat-composer .send { width: var(--os-tap, 44px); height: var(--os-tap, 44px); }
|
|
1817
1839
|
.ds-247420 .cc-toggle { min-height: var(--os-tap, 44px); }
|
|
1840
|
+
/* sessions grid card checkbox */
|
|
1841
|
+
.ds-247420 .tb-sessions-card-check { width: var(--os-tap, 44px); height: var(--os-tap, 44px); flex: 0 0 var(--os-tap, 44px); }
|
|
1818
1842
|
}
|
|
1819
1843
|
|
|
1820
1844
|
/* --- files-app row actions must reveal on coarse pointers too (the existing
|
package/src/kits/os/validate.css
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/* DEPRECATED: styled the validate.html harness, which thebird's README
|
|
2
|
+
documents as removed (headless CI flaked on the 61MB plugkit.wasm
|
|
3
|
+
cold-load). validator-app.js (the component this sheet styled) no longer
|
|
4
|
+
exists in this repo's source -- only a stale vendored copy remains in
|
|
5
|
+
thebird's docs/vendor/. Kept as a package.json export map entry for now;
|
|
6
|
+
scheduled for removal in the next major version rather than a
|
|
7
|
+
same-session delete. */
|
|
1
8
|
body { margin: 0; padding: 24px; font-family: var(--os-font); background: var(--os-bg-0); color: var(--os-fg); }
|
|
2
9
|
h1 { margin: 0 0 8px 0; font-size: 22px; font-weight: 600; }
|
|
3
10
|
h3 { margin: 18px 0 6px 0; color: var(--os-fg-2); font-size: 13px; font-weight: 600; }
|
package/src/kits/os/wm.css
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
/* ============================================================
|
|
2
|
+
DEPRECATED: superseded by theme.css, which has a superset of these rules
|
|
3
|
+
(26 .wm-win selectors vs this file's 11) and is the only stylesheet any
|
|
4
|
+
consumer actually links. createWM() (the API these rules were paired to)
|
|
5
|
+
no longer exists -- renderWindow() in wm.js is the current API, styled by
|
|
6
|
+
theme.css. Kept as a package.json export map entry for now; scheduled for
|
|
7
|
+
removal in the next major version rather than a same-session delete.
|
|
8
|
+
|
|
2
9
|
Window Manager visuals — paired with createWM() behavior
|
|
3
10
|
Tokens: --os-* (defined by desktop/theme.css)
|
|
4
11
|
Bible: tonal surfaces, inset rail for focus, subtle hairline border +
|
package/types/components.d.ts
CHANGED
|
@@ -1568,6 +1568,7 @@ export declare function RootsPicker(props?: RootsPickerProps): VNode;
|
|
|
1568
1568
|
export interface DropZoneProps {
|
|
1569
1569
|
children?: any;
|
|
1570
1570
|
dragover?: any;
|
|
1571
|
+
rejected?: any;
|
|
1571
1572
|
onDrop?: (...args: any[]) => any;
|
|
1572
1573
|
onDragOver?: (...args: any[]) => any;
|
|
1573
1574
|
onDragLeave?: (...args: any[]) => any;
|