flexdesk 0.8.0 → 0.9.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/README.md +34 -0
- package/css/flexdesk.css +127 -0
- package/css/overrides.css +127 -0
- package/css/tokens.css +2 -0
- package/dist/flexdesk.css +127 -0
- package/dist/tokens.css +2 -0
- package/dist/wm.js +498 -29
- package/dist/wm.js.map +3 -3
- package/package.json +1 -1
- package/src/tiling/command_palette.js +573 -33
- package/src/tiling/shell.js +11 -1
- package/src/tiling/tile_renderer.js +9 -3
- package/src/tiling/wm.js +3 -1
package/README.md
CHANGED
|
@@ -122,6 +122,7 @@ await createShell({
|
|
|
122
122
|
backToOpenList: true, // Back in a record opened beside its list closes onto that list
|
|
123
123
|
floatActiveTab: true, // floating a tile takes the tab on screen, not the whole pane
|
|
124
124
|
tabLayout: 'header', // tabs in the tile header, in place of its title, with a + (0.8.0)
|
|
125
|
+
newTabButton: false, // …and without the + (0.8.1)
|
|
125
126
|
chrome: {
|
|
126
127
|
topNav: document.getElementById('nav'),
|
|
127
128
|
zoom: document.getElementById('status-bar'), // content zoom, 50–200%
|
|
@@ -129,6 +130,38 @@ await createShell({
|
|
|
129
130
|
});
|
|
130
131
|
```
|
|
131
132
|
|
|
133
|
+
### The palette that finds anything (0.9.0)
|
|
134
|
+
|
|
135
|
+
Ctrl+K's grouped layout. Every option is off unless you pass it, so a shell that
|
|
136
|
+
passes none of them keeps the chip strip, the panel toggles and the flat list:
|
|
137
|
+
|
|
138
|
+
```js
|
|
139
|
+
await createShell({
|
|
140
|
+
// …everything above…
|
|
141
|
+
palette: {
|
|
142
|
+
placeholder: 'Search everything…',
|
|
143
|
+
layout: 'grouped', // a header per kind, matches marked
|
|
144
|
+
chrome: { pages: false, panels: false }, // nothing between the input and the results
|
|
145
|
+
groupCap: 4, // then "Show all N", which scopes to the kind
|
|
146
|
+
cache: true, // a re-open draws the last catalogue at once
|
|
147
|
+
empty: async () => recentRows(), // shown before anything is typed, under "Recent"
|
|
148
|
+
commands: () => commandRows(), // `{label, action}`; `>` restricts to them
|
|
149
|
+
drill: (pick) => pick.kind === 'planet' // Tab on a row enters a scope
|
|
150
|
+
? { label: `${pick.label} › moons`, search: (q, signal) => findMoons(pick.id, q, signal) }
|
|
151
|
+
: null,
|
|
152
|
+
onPick: (pick, { mode, scope }) => openSomewhere(pick, mode), // 'open' | 'split' | 'window'
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
A row may carry `context` (drawn, not searched), `keywords` (searched, not
|
|
158
|
+
drawn), `modes` (which of `split`/`window` its keys offer), `drillLabel` (the Tab
|
|
159
|
+
hint), `boost`, `group`/`groupLabel`, `kindLabel`, `shortcut` and `verb`. A group's
|
|
160
|
+
header is the taxonomy's `plural` for the kind, else its `label`. Matching ranks
|
|
161
|
+
exact, prefix, word starts (`ord li` finds *Order lines*), substring, then a tight
|
|
162
|
+
subsequence. A drill's `search` is debounced, and a stale answer is aborted and
|
|
163
|
+
never drawn. `palette.invalidate()` drops the cache.
|
|
164
|
+
|
|
132
165
|
**`chrome.zoom`** paints a − / track / + / readout control into the element you
|
|
133
166
|
pass, restores the saved zoom through the host's `state` capability, and scales
|
|
134
167
|
the content of tiles and floating windows. It deliberately scales *content only*
|
|
@@ -158,6 +191,7 @@ editor tab bar between the header and the body, also from two tabs.
|
|
|
158
191
|
`'header'` (0.8.0) puts that tab bar inside the header in place of the title,
|
|
159
192
|
on every tile, one tab included, with a `+` after the last tab that opens the
|
|
160
193
|
taxonomy root in a new tab (`wm.newTab(leafId)`, the same seed a split uses).
|
|
194
|
+
Pass `newTabButton: false` (0.8.1) to leave the `+` out.
|
|
161
195
|
A panel tile has no tabs and keeps its title. Under `'header'` the tab, not
|
|
162
196
|
the header, is what you drag to move a single-tab pane; the empty part of the
|
|
163
197
|
header still floats the pane on a pull-down or a double-click. Set
|
package/css/flexdesk.css
CHANGED
|
@@ -6684,6 +6684,133 @@ body.twm-dragging * { user-select: none; }
|
|
|
6684
6684
|
margin: 0 1px;
|
|
6685
6685
|
}
|
|
6686
6686
|
|
|
6687
|
+
/* ── C39: the grouped layout (`layout: 'grouped'`) ───────────────────────
|
|
6688
|
+
* Everything here is under `--grouped`, so the flat palette above draws
|
|
6689
|
+
* exactly as it did. Rows are three columns: icon, the label with its
|
|
6690
|
+
* context, and a right side that shows the kind — or, on the active row,
|
|
6691
|
+
* the keys that act on it. */
|
|
6692
|
+
.twm-cmdpal--grouped {
|
|
6693
|
+
width: min(680px, calc(100vw - 32px));
|
|
6694
|
+
max-height: 76vh;
|
|
6695
|
+
border-color: var(--border-strong);
|
|
6696
|
+
}
|
|
6697
|
+
.twm-cmdpal-overlay--grouped { padding-top: 11vh; }
|
|
6698
|
+
.twm-cmdpal--grouped .twm-cmdpal__inputrow {
|
|
6699
|
+
padding: var(--space-md) var(--space-lg);
|
|
6700
|
+
border-bottom-color: var(--border-default);
|
|
6701
|
+
}
|
|
6702
|
+
.twm-cmdpal__search-icon,
|
|
6703
|
+
.twm-cmdpal__search-icon.material-symbols-outlined { color: var(--text-muted); font-size: 20px; }
|
|
6704
|
+
.twm-cmdpal--grouped .twm-cmdpal__input { font-size: var(--font-size-xl); color: var(--text-bright); }
|
|
6705
|
+
.twm-cmdpal--grouped .twm-cmdpal__input::placeholder { color: var(--text-muted); }
|
|
6706
|
+
.twm-cmdpal--grouped .twm-cmdpal__type-chip-label--scope { text-transform: none; letter-spacing: 0; }
|
|
6707
|
+
.twm-cmdpal__esc,
|
|
6708
|
+
.twm-cmdpal--grouped kbd {
|
|
6709
|
+
display: inline-block;
|
|
6710
|
+
padding: 1px 4px;
|
|
6711
|
+
background: var(--surface-2);
|
|
6712
|
+
border: 1px solid var(--border-default);
|
|
6713
|
+
border-radius: 0;
|
|
6714
|
+
color: var(--text-secondary);
|
|
6715
|
+
font-family: var(--font-family-mono);
|
|
6716
|
+
font-size: 10px;
|
|
6717
|
+
line-height: 1.3;
|
|
6718
|
+
}
|
|
6719
|
+
.twm-cmdpal--grouped .twm-cmdpal__list {
|
|
6720
|
+
flex: 1 1 auto;
|
|
6721
|
+
max-height: none;
|
|
6722
|
+
min-height: 0;
|
|
6723
|
+
padding: var(--space-xs) 0;
|
|
6724
|
+
}
|
|
6725
|
+
.twm-cmdpal__group {
|
|
6726
|
+
padding: 10px var(--space-lg) 4px;
|
|
6727
|
+
color: var(--text-muted);
|
|
6728
|
+
font-size: var(--font-size-xs);
|
|
6729
|
+
text-transform: uppercase;
|
|
6730
|
+
letter-spacing: 0.06em;
|
|
6731
|
+
}
|
|
6732
|
+
.twm-cmdpal--grouped .twm-cmdpal__item {
|
|
6733
|
+
grid-template-columns: 20px minmax(0, 1fr) auto;
|
|
6734
|
+
gap: 10px;
|
|
6735
|
+
padding: 5px var(--space-lg);
|
|
6736
|
+
font-size: var(--font-size-md);
|
|
6737
|
+
}
|
|
6738
|
+
/* The flat layout highlights on :hover; here the pointer MOVES the active
|
|
6739
|
+
* row instead, so a hover tint would be a second, disagreeing highlight. */
|
|
6740
|
+
.twm-cmdpal--grouped .twm-cmdpal__item:hover:not(.twm-cmdpal__item--active) { background: transparent; color: var(--text-secondary); }
|
|
6741
|
+
.twm-cmdpal--grouped .twm-cmdpal__item--active {
|
|
6742
|
+
background: var(--state-selected);
|
|
6743
|
+
color: var(--text-bright);
|
|
6744
|
+
box-shadow: inset 2px 0 0 var(--accent-bright);
|
|
6745
|
+
}
|
|
6746
|
+
.twm-cmdpal--grouped .twm-cmdpal__item--active .twm-cmdpal__icon { color: var(--text-bright); }
|
|
6747
|
+
.twm-cmdpal__main {
|
|
6748
|
+
min-width: 0;
|
|
6749
|
+
display: flex;
|
|
6750
|
+
align-items: baseline;
|
|
6751
|
+
gap: var(--space-sm);
|
|
6752
|
+
}
|
|
6753
|
+
.twm-cmdpal--grouped .twm-cmdpal__label {
|
|
6754
|
+
font-weight: 400;
|
|
6755
|
+
white-space: nowrap;
|
|
6756
|
+
overflow: hidden;
|
|
6757
|
+
text-overflow: ellipsis;
|
|
6758
|
+
flex: 0 1 auto;
|
|
6759
|
+
min-width: 0;
|
|
6760
|
+
}
|
|
6761
|
+
.twm-cmdpal__label mark {
|
|
6762
|
+
background: none;
|
|
6763
|
+
color: var(--twm-cmdpal-match);
|
|
6764
|
+
font-weight: var(--font-weight-semibold);
|
|
6765
|
+
}
|
|
6766
|
+
.twm-cmdpal__context,
|
|
6767
|
+
.twm-cmdpal__cells {
|
|
6768
|
+
color: var(--text-muted);
|
|
6769
|
+
font-size: var(--font-size-xs);
|
|
6770
|
+
white-space: nowrap;
|
|
6771
|
+
overflow: hidden;
|
|
6772
|
+
text-overflow: ellipsis;
|
|
6773
|
+
min-width: 0;
|
|
6774
|
+
flex: 0 10 auto;
|
|
6775
|
+
}
|
|
6776
|
+
.twm-cmdpal__cells { font-family: var(--font-family-mono); }
|
|
6777
|
+
.twm-cmdpal__side {
|
|
6778
|
+
display: flex;
|
|
6779
|
+
align-items: center;
|
|
6780
|
+
gap: 10px;
|
|
6781
|
+
color: var(--text-muted);
|
|
6782
|
+
font-size: var(--font-size-xs);
|
|
6783
|
+
white-space: nowrap;
|
|
6784
|
+
}
|
|
6785
|
+
.twm-cmdpal__acts { display: none; gap: 10px; }
|
|
6786
|
+
.twm-cmdpal__item--active .twm-cmdpal__acts { display: flex; }
|
|
6787
|
+
.twm-cmdpal__item--active .twm-cmdpal__kind,
|
|
6788
|
+
.twm-cmdpal__item--active .twm-cmdpal__shortcut { display: none; }
|
|
6789
|
+
.twm-cmdpal__item--more { color: var(--text-muted); font-size: var(--font-size-sm); }
|
|
6790
|
+
.twm-cmdpal__empty {
|
|
6791
|
+
padding: 24px var(--space-lg);
|
|
6792
|
+
color: var(--text-muted);
|
|
6793
|
+
text-align: center;
|
|
6794
|
+
}
|
|
6795
|
+
.twm-cmdpal__empty--quiet { padding: 6px var(--space-lg); text-align: left; font-size: var(--font-size-xs); }
|
|
6796
|
+
.twm-cmdpal__tips {
|
|
6797
|
+
display: flex;
|
|
6798
|
+
flex-wrap: wrap;
|
|
6799
|
+
gap: 6px 16px;
|
|
6800
|
+
margin-top: var(--space-xs);
|
|
6801
|
+
padding: 10px var(--space-lg) var(--space-sm);
|
|
6802
|
+
border-top: 1px solid var(--border-subtle);
|
|
6803
|
+
color: var(--text-muted);
|
|
6804
|
+
font-size: var(--font-size-xs);
|
|
6805
|
+
}
|
|
6806
|
+
.twm-cmdpal--grouped .twm-cmdpal__footer { flex-wrap: wrap; row-gap: 2px; }
|
|
6807
|
+
.twm-cmdpal__footnote { margin-left: auto; color: var(--text-muted); }
|
|
6808
|
+
@media (max-width: 560px) {
|
|
6809
|
+
.twm-cmdpal__context { display: none; }
|
|
6810
|
+
.twm-cmdpal__acts > span:not(:first-child) { display: none; }
|
|
6811
|
+
.twm-cmdpal__footnote { display: none; }
|
|
6812
|
+
}
|
|
6813
|
+
|
|
6687
6814
|
/* ── from tiling/nav.css ───────────────────────── */
|
|
6688
6815
|
/* nav.css — left-nav panel-tile (project / files / git). */
|
|
6689
6816
|
|
package/css/overrides.css
CHANGED
|
@@ -1517,6 +1517,133 @@ body.twm-dragging * { user-select: none; }
|
|
|
1517
1517
|
margin: 0 1px;
|
|
1518
1518
|
}
|
|
1519
1519
|
|
|
1520
|
+
/* ── C39: the grouped layout (`layout: 'grouped'`) ───────────────────────
|
|
1521
|
+
* Everything here is under `--grouped`, so the flat palette above draws
|
|
1522
|
+
* exactly as it did. Rows are three columns: icon, the label with its
|
|
1523
|
+
* context, and a right side that shows the kind — or, on the active row,
|
|
1524
|
+
* the keys that act on it. */
|
|
1525
|
+
.twm-cmdpal--grouped {
|
|
1526
|
+
width: min(680px, calc(100vw - 32px));
|
|
1527
|
+
max-height: 76vh;
|
|
1528
|
+
border-color: var(--border-strong);
|
|
1529
|
+
}
|
|
1530
|
+
.twm-cmdpal-overlay--grouped { padding-top: 11vh; }
|
|
1531
|
+
.twm-cmdpal--grouped .twm-cmdpal__inputrow {
|
|
1532
|
+
padding: var(--space-md) var(--space-lg);
|
|
1533
|
+
border-bottom-color: var(--border-default);
|
|
1534
|
+
}
|
|
1535
|
+
.twm-cmdpal__search-icon,
|
|
1536
|
+
.twm-cmdpal__search-icon.material-symbols-outlined { color: var(--text-muted); font-size: 20px; }
|
|
1537
|
+
.twm-cmdpal--grouped .twm-cmdpal__input { font-size: var(--font-size-xl); color: var(--text-bright); }
|
|
1538
|
+
.twm-cmdpal--grouped .twm-cmdpal__input::placeholder { color: var(--text-muted); }
|
|
1539
|
+
.twm-cmdpal--grouped .twm-cmdpal__type-chip-label--scope { text-transform: none; letter-spacing: 0; }
|
|
1540
|
+
.twm-cmdpal__esc,
|
|
1541
|
+
.twm-cmdpal--grouped kbd {
|
|
1542
|
+
display: inline-block;
|
|
1543
|
+
padding: 1px 4px;
|
|
1544
|
+
background: var(--surface-2);
|
|
1545
|
+
border: 1px solid var(--border-default);
|
|
1546
|
+
border-radius: 0;
|
|
1547
|
+
color: var(--text-secondary);
|
|
1548
|
+
font-family: var(--font-family-mono);
|
|
1549
|
+
font-size: 10px;
|
|
1550
|
+
line-height: 1.3;
|
|
1551
|
+
}
|
|
1552
|
+
.twm-cmdpal--grouped .twm-cmdpal__list {
|
|
1553
|
+
flex: 1 1 auto;
|
|
1554
|
+
max-height: none;
|
|
1555
|
+
min-height: 0;
|
|
1556
|
+
padding: var(--space-xs) 0;
|
|
1557
|
+
}
|
|
1558
|
+
.twm-cmdpal__group {
|
|
1559
|
+
padding: 10px var(--space-lg) 4px;
|
|
1560
|
+
color: var(--text-muted);
|
|
1561
|
+
font-size: var(--font-size-xs);
|
|
1562
|
+
text-transform: uppercase;
|
|
1563
|
+
letter-spacing: 0.06em;
|
|
1564
|
+
}
|
|
1565
|
+
.twm-cmdpal--grouped .twm-cmdpal__item {
|
|
1566
|
+
grid-template-columns: 20px minmax(0, 1fr) auto;
|
|
1567
|
+
gap: 10px;
|
|
1568
|
+
padding: 5px var(--space-lg);
|
|
1569
|
+
font-size: var(--font-size-md);
|
|
1570
|
+
}
|
|
1571
|
+
/* The flat layout highlights on :hover; here the pointer MOVES the active
|
|
1572
|
+
* row instead, so a hover tint would be a second, disagreeing highlight. */
|
|
1573
|
+
.twm-cmdpal--grouped .twm-cmdpal__item:hover:not(.twm-cmdpal__item--active) { background: transparent; color: var(--text-secondary); }
|
|
1574
|
+
.twm-cmdpal--grouped .twm-cmdpal__item--active {
|
|
1575
|
+
background: var(--state-selected);
|
|
1576
|
+
color: var(--text-bright);
|
|
1577
|
+
box-shadow: inset 2px 0 0 var(--accent-bright);
|
|
1578
|
+
}
|
|
1579
|
+
.twm-cmdpal--grouped .twm-cmdpal__item--active .twm-cmdpal__icon { color: var(--text-bright); }
|
|
1580
|
+
.twm-cmdpal__main {
|
|
1581
|
+
min-width: 0;
|
|
1582
|
+
display: flex;
|
|
1583
|
+
align-items: baseline;
|
|
1584
|
+
gap: var(--space-sm);
|
|
1585
|
+
}
|
|
1586
|
+
.twm-cmdpal--grouped .twm-cmdpal__label {
|
|
1587
|
+
font-weight: 400;
|
|
1588
|
+
white-space: nowrap;
|
|
1589
|
+
overflow: hidden;
|
|
1590
|
+
text-overflow: ellipsis;
|
|
1591
|
+
flex: 0 1 auto;
|
|
1592
|
+
min-width: 0;
|
|
1593
|
+
}
|
|
1594
|
+
.twm-cmdpal__label mark {
|
|
1595
|
+
background: none;
|
|
1596
|
+
color: var(--twm-cmdpal-match);
|
|
1597
|
+
font-weight: var(--font-weight-semibold);
|
|
1598
|
+
}
|
|
1599
|
+
.twm-cmdpal__context,
|
|
1600
|
+
.twm-cmdpal__cells {
|
|
1601
|
+
color: var(--text-muted);
|
|
1602
|
+
font-size: var(--font-size-xs);
|
|
1603
|
+
white-space: nowrap;
|
|
1604
|
+
overflow: hidden;
|
|
1605
|
+
text-overflow: ellipsis;
|
|
1606
|
+
min-width: 0;
|
|
1607
|
+
flex: 0 10 auto;
|
|
1608
|
+
}
|
|
1609
|
+
.twm-cmdpal__cells { font-family: var(--font-family-mono); }
|
|
1610
|
+
.twm-cmdpal__side {
|
|
1611
|
+
display: flex;
|
|
1612
|
+
align-items: center;
|
|
1613
|
+
gap: 10px;
|
|
1614
|
+
color: var(--text-muted);
|
|
1615
|
+
font-size: var(--font-size-xs);
|
|
1616
|
+
white-space: nowrap;
|
|
1617
|
+
}
|
|
1618
|
+
.twm-cmdpal__acts { display: none; gap: 10px; }
|
|
1619
|
+
.twm-cmdpal__item--active .twm-cmdpal__acts { display: flex; }
|
|
1620
|
+
.twm-cmdpal__item--active .twm-cmdpal__kind,
|
|
1621
|
+
.twm-cmdpal__item--active .twm-cmdpal__shortcut { display: none; }
|
|
1622
|
+
.twm-cmdpal__item--more { color: var(--text-muted); font-size: var(--font-size-sm); }
|
|
1623
|
+
.twm-cmdpal__empty {
|
|
1624
|
+
padding: 24px var(--space-lg);
|
|
1625
|
+
color: var(--text-muted);
|
|
1626
|
+
text-align: center;
|
|
1627
|
+
}
|
|
1628
|
+
.twm-cmdpal__empty--quiet { padding: 6px var(--space-lg); text-align: left; font-size: var(--font-size-xs); }
|
|
1629
|
+
.twm-cmdpal__tips {
|
|
1630
|
+
display: flex;
|
|
1631
|
+
flex-wrap: wrap;
|
|
1632
|
+
gap: 6px 16px;
|
|
1633
|
+
margin-top: var(--space-xs);
|
|
1634
|
+
padding: 10px var(--space-lg) var(--space-sm);
|
|
1635
|
+
border-top: 1px solid var(--border-subtle);
|
|
1636
|
+
color: var(--text-muted);
|
|
1637
|
+
font-size: var(--font-size-xs);
|
|
1638
|
+
}
|
|
1639
|
+
.twm-cmdpal--grouped .twm-cmdpal__footer { flex-wrap: wrap; row-gap: 2px; }
|
|
1640
|
+
.twm-cmdpal__footnote { margin-left: auto; color: var(--text-muted); }
|
|
1641
|
+
@media (max-width: 560px) {
|
|
1642
|
+
.twm-cmdpal__context { display: none; }
|
|
1643
|
+
.twm-cmdpal__acts > span:not(:first-child) { display: none; }
|
|
1644
|
+
.twm-cmdpal__footnote { display: none; }
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1520
1647
|
/* ── from tiling/nav.css ───────────────────────── */
|
|
1521
1648
|
/* nav.css — left-nav panel-tile (project / files / git). */
|
|
1522
1649
|
|
package/css/tokens.css
CHANGED
|
@@ -256,6 +256,8 @@
|
|
|
256
256
|
--twm-flow-control-border: #454545;
|
|
257
257
|
--twm-flow-muted: #a6a6a6;
|
|
258
258
|
--twm-flow-focus: var(--accent-bright);
|
|
259
|
+
/* C39: a matched character in the command palette (grouped layout). */
|
|
260
|
+
--twm-cmdpal-match: #4fc1ff;
|
|
259
261
|
--twm-flow-error: #f48771;
|
|
260
262
|
--twm-flow-error-bg: rgba(244, 135, 113, 0.09);
|
|
261
263
|
--twm-flow-error-line: rgba(244, 135, 113, 0.35);
|
package/dist/flexdesk.css
CHANGED
|
@@ -6684,6 +6684,133 @@ body.twm-dragging * { user-select: none; }
|
|
|
6684
6684
|
margin: 0 1px;
|
|
6685
6685
|
}
|
|
6686
6686
|
|
|
6687
|
+
/* ── C39: the grouped layout (`layout: 'grouped'`) ───────────────────────
|
|
6688
|
+
* Everything here is under `--grouped`, so the flat palette above draws
|
|
6689
|
+
* exactly as it did. Rows are three columns: icon, the label with its
|
|
6690
|
+
* context, and a right side that shows the kind — or, on the active row,
|
|
6691
|
+
* the keys that act on it. */
|
|
6692
|
+
.twm-cmdpal--grouped {
|
|
6693
|
+
width: min(680px, calc(100vw - 32px));
|
|
6694
|
+
max-height: 76vh;
|
|
6695
|
+
border-color: var(--border-strong);
|
|
6696
|
+
}
|
|
6697
|
+
.twm-cmdpal-overlay--grouped { padding-top: 11vh; }
|
|
6698
|
+
.twm-cmdpal--grouped .twm-cmdpal__inputrow {
|
|
6699
|
+
padding: var(--space-md) var(--space-lg);
|
|
6700
|
+
border-bottom-color: var(--border-default);
|
|
6701
|
+
}
|
|
6702
|
+
.twm-cmdpal__search-icon,
|
|
6703
|
+
.twm-cmdpal__search-icon.material-symbols-outlined { color: var(--text-muted); font-size: 20px; }
|
|
6704
|
+
.twm-cmdpal--grouped .twm-cmdpal__input { font-size: var(--font-size-xl); color: var(--text-bright); }
|
|
6705
|
+
.twm-cmdpal--grouped .twm-cmdpal__input::placeholder { color: var(--text-muted); }
|
|
6706
|
+
.twm-cmdpal--grouped .twm-cmdpal__type-chip-label--scope { text-transform: none; letter-spacing: 0; }
|
|
6707
|
+
.twm-cmdpal__esc,
|
|
6708
|
+
.twm-cmdpal--grouped kbd {
|
|
6709
|
+
display: inline-block;
|
|
6710
|
+
padding: 1px 4px;
|
|
6711
|
+
background: var(--surface-2);
|
|
6712
|
+
border: 1px solid var(--border-default);
|
|
6713
|
+
border-radius: 0;
|
|
6714
|
+
color: var(--text-secondary);
|
|
6715
|
+
font-family: var(--font-family-mono);
|
|
6716
|
+
font-size: 10px;
|
|
6717
|
+
line-height: 1.3;
|
|
6718
|
+
}
|
|
6719
|
+
.twm-cmdpal--grouped .twm-cmdpal__list {
|
|
6720
|
+
flex: 1 1 auto;
|
|
6721
|
+
max-height: none;
|
|
6722
|
+
min-height: 0;
|
|
6723
|
+
padding: var(--space-xs) 0;
|
|
6724
|
+
}
|
|
6725
|
+
.twm-cmdpal__group {
|
|
6726
|
+
padding: 10px var(--space-lg) 4px;
|
|
6727
|
+
color: var(--text-muted);
|
|
6728
|
+
font-size: var(--font-size-xs);
|
|
6729
|
+
text-transform: uppercase;
|
|
6730
|
+
letter-spacing: 0.06em;
|
|
6731
|
+
}
|
|
6732
|
+
.twm-cmdpal--grouped .twm-cmdpal__item {
|
|
6733
|
+
grid-template-columns: 20px minmax(0, 1fr) auto;
|
|
6734
|
+
gap: 10px;
|
|
6735
|
+
padding: 5px var(--space-lg);
|
|
6736
|
+
font-size: var(--font-size-md);
|
|
6737
|
+
}
|
|
6738
|
+
/* The flat layout highlights on :hover; here the pointer MOVES the active
|
|
6739
|
+
* row instead, so a hover tint would be a second, disagreeing highlight. */
|
|
6740
|
+
.twm-cmdpal--grouped .twm-cmdpal__item:hover:not(.twm-cmdpal__item--active) { background: transparent; color: var(--text-secondary); }
|
|
6741
|
+
.twm-cmdpal--grouped .twm-cmdpal__item--active {
|
|
6742
|
+
background: var(--state-selected);
|
|
6743
|
+
color: var(--text-bright);
|
|
6744
|
+
box-shadow: inset 2px 0 0 var(--accent-bright);
|
|
6745
|
+
}
|
|
6746
|
+
.twm-cmdpal--grouped .twm-cmdpal__item--active .twm-cmdpal__icon { color: var(--text-bright); }
|
|
6747
|
+
.twm-cmdpal__main {
|
|
6748
|
+
min-width: 0;
|
|
6749
|
+
display: flex;
|
|
6750
|
+
align-items: baseline;
|
|
6751
|
+
gap: var(--space-sm);
|
|
6752
|
+
}
|
|
6753
|
+
.twm-cmdpal--grouped .twm-cmdpal__label {
|
|
6754
|
+
font-weight: 400;
|
|
6755
|
+
white-space: nowrap;
|
|
6756
|
+
overflow: hidden;
|
|
6757
|
+
text-overflow: ellipsis;
|
|
6758
|
+
flex: 0 1 auto;
|
|
6759
|
+
min-width: 0;
|
|
6760
|
+
}
|
|
6761
|
+
.twm-cmdpal__label mark {
|
|
6762
|
+
background: none;
|
|
6763
|
+
color: var(--twm-cmdpal-match);
|
|
6764
|
+
font-weight: var(--font-weight-semibold);
|
|
6765
|
+
}
|
|
6766
|
+
.twm-cmdpal__context,
|
|
6767
|
+
.twm-cmdpal__cells {
|
|
6768
|
+
color: var(--text-muted);
|
|
6769
|
+
font-size: var(--font-size-xs);
|
|
6770
|
+
white-space: nowrap;
|
|
6771
|
+
overflow: hidden;
|
|
6772
|
+
text-overflow: ellipsis;
|
|
6773
|
+
min-width: 0;
|
|
6774
|
+
flex: 0 10 auto;
|
|
6775
|
+
}
|
|
6776
|
+
.twm-cmdpal__cells { font-family: var(--font-family-mono); }
|
|
6777
|
+
.twm-cmdpal__side {
|
|
6778
|
+
display: flex;
|
|
6779
|
+
align-items: center;
|
|
6780
|
+
gap: 10px;
|
|
6781
|
+
color: var(--text-muted);
|
|
6782
|
+
font-size: var(--font-size-xs);
|
|
6783
|
+
white-space: nowrap;
|
|
6784
|
+
}
|
|
6785
|
+
.twm-cmdpal__acts { display: none; gap: 10px; }
|
|
6786
|
+
.twm-cmdpal__item--active .twm-cmdpal__acts { display: flex; }
|
|
6787
|
+
.twm-cmdpal__item--active .twm-cmdpal__kind,
|
|
6788
|
+
.twm-cmdpal__item--active .twm-cmdpal__shortcut { display: none; }
|
|
6789
|
+
.twm-cmdpal__item--more { color: var(--text-muted); font-size: var(--font-size-sm); }
|
|
6790
|
+
.twm-cmdpal__empty {
|
|
6791
|
+
padding: 24px var(--space-lg);
|
|
6792
|
+
color: var(--text-muted);
|
|
6793
|
+
text-align: center;
|
|
6794
|
+
}
|
|
6795
|
+
.twm-cmdpal__empty--quiet { padding: 6px var(--space-lg); text-align: left; font-size: var(--font-size-xs); }
|
|
6796
|
+
.twm-cmdpal__tips {
|
|
6797
|
+
display: flex;
|
|
6798
|
+
flex-wrap: wrap;
|
|
6799
|
+
gap: 6px 16px;
|
|
6800
|
+
margin-top: var(--space-xs);
|
|
6801
|
+
padding: 10px var(--space-lg) var(--space-sm);
|
|
6802
|
+
border-top: 1px solid var(--border-subtle);
|
|
6803
|
+
color: var(--text-muted);
|
|
6804
|
+
font-size: var(--font-size-xs);
|
|
6805
|
+
}
|
|
6806
|
+
.twm-cmdpal--grouped .twm-cmdpal__footer { flex-wrap: wrap; row-gap: 2px; }
|
|
6807
|
+
.twm-cmdpal__footnote { margin-left: auto; color: var(--text-muted); }
|
|
6808
|
+
@media (max-width: 560px) {
|
|
6809
|
+
.twm-cmdpal__context { display: none; }
|
|
6810
|
+
.twm-cmdpal__acts > span:not(:first-child) { display: none; }
|
|
6811
|
+
.twm-cmdpal__footnote { display: none; }
|
|
6812
|
+
}
|
|
6813
|
+
|
|
6687
6814
|
/* ── from tiling/nav.css ───────────────────────── */
|
|
6688
6815
|
/* nav.css — left-nav panel-tile (project / files / git). */
|
|
6689
6816
|
|
package/dist/tokens.css
CHANGED
|
@@ -256,6 +256,8 @@
|
|
|
256
256
|
--twm-flow-control-border: #454545;
|
|
257
257
|
--twm-flow-muted: #a6a6a6;
|
|
258
258
|
--twm-flow-focus: var(--accent-bright);
|
|
259
|
+
/* C39: a matched character in the command palette (grouped layout). */
|
|
260
|
+
--twm-cmdpal-match: #4fc1ff;
|
|
259
261
|
--twm-flow-error: #f48771;
|
|
260
262
|
--twm-flow-error-bg: rgba(244, 135, 113, 0.09);
|
|
261
263
|
--twm-flow-error-line: rgba(244, 135, 113, 0.35);
|