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.
@@ -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: transparent; transition: background var(--dur-snap) var(--ease); }
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
- .ws-rail-brand { font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-body); color: var(--fg); white-space: nowrap; overflow: hidden; }
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
- Previously unstyled anywhere in this repo (a bare button with no visible
475
- affordance), so every real consumer resorted to a local literal-bracket-
476
- text reimplementation ('[x] on'/'[ ] off') instead. Sized off --space
477
- tokens: a 40x22 track (2x11 knob diameter + 2px inset each side) is the
478
- standard iOS/Material switch proportion, not an arbitrary literal. */
479
- .ds-toggle {
480
- appearance: none; -webkit-appearance: none;
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: 2px solid var(--accent-ink); outline-offset: 2px; }
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(--flame);
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: 10px var(--pad-x);
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: 8px var(--pad-x);
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: 4px; font-size: var(--fs-sm); flex-wrap: wrap; }
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
- outline: var(--focus-w) solid var(--focus-color);
146
- outline-offset: var(--focus-offset);
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: 6px var(--pad-x);
152
- display: flex; align-items: center; gap: 8px;
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
- .app-crumb .leaf { color: var(--fg); font-weight: 600; }
157
- .app-crumb .crumb-right { margin-left: auto; color: var(--fg-3); }
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: 6px;
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: 2px;
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
@@ -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
  ============================================================ */
@@ -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: 0 var(--space-2) var(--space-5) rgba(0, 0, 0, .35); padding: var(--space-1); }
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
@@ -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; }
@@ -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 +
@@ -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;