flexdesk 0.8.1 → 0.9.1
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 +493 -26
- package/dist/wm.js.map +3 -3
- package/package.json +1 -1
- package/src/tiling/command_palette.js +585 -33
- package/src/tiling/shell.js +4 -1
package/README.md
CHANGED
|
@@ -130,6 +130,40 @@ await createShell({
|
|
|
130
130
|
});
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
+
### The palette that finds anything (0.9.0; matching tightened in 0.9.1)
|
|
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 an
|
|
162
|
+
abbreviation: it starts at a word, and the letters it skips outside word starts are
|
|
163
|
+
at most half the query (`cstmr` finds *customer*; `cour` does not find *Scroll up
|
|
164
|
+
to*). A drill's `search` is debounced, and a stale answer is aborted and
|
|
165
|
+
never drawn. `palette.invalidate()` drops the cache.
|
|
166
|
+
|
|
133
167
|
**`chrome.zoom`** paints a − / track / + / readout control into the element you
|
|
134
168
|
pass, restores the saved zoom through the host's `state` capability, and scales
|
|
135
169
|
the content of tiles and floating windows. It deliberately scales *content only*
|
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);
|