flexdesk 0.17.9 → 0.17.10
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/CHANGELOG.md +21 -0
- package/css/base.css +57 -55
- package/css/flexdesk.css +90 -88
- package/css/overrides.css +12 -12
- package/css/tokens.css +11 -2
- package/dist/flexdesk.css +90 -88
- package/dist/tokens.css +11 -2
- package/docs/concepts/styling.md +68 -0
- package/package.json +1 -1
package/dist/flexdesk.css
CHANGED
|
@@ -734,7 +734,7 @@ body.twm-dt-col-resizing {
|
|
|
734
734
|
second keeps the readonly tables, which hover never claimed, working. */
|
|
735
735
|
.twm-preview-table:not(.twm-preview-table--readonly) tbody tr.selected td,
|
|
736
736
|
.twm-preview-table tbody tr.selected td {
|
|
737
|
-
background: var(--state-selected
|
|
737
|
+
background: var(--state-selected);
|
|
738
738
|
}
|
|
739
739
|
/* ── 0.5.0 DataTable options. Each rule below matches only a class or an
|
|
740
740
|
* attribute a 0.5.0 option sets, so a table that asks for none of them is
|
|
@@ -785,7 +785,7 @@ body.twm-dt-col-resizing {
|
|
|
785
785
|
/* `activeRow` — the row that is OPEN. A left edge, not a background: hover
|
|
786
786
|
* and selection keep theirs. */
|
|
787
787
|
.twm-preview-table tbody tr.twm-dt-row--active > td:first-child {
|
|
788
|
-
box-shadow: inset 2px 0 0 0 var(--accent-bright
|
|
788
|
+
box-shadow: inset 2px 0 0 0 var(--accent-bright);
|
|
789
789
|
}
|
|
790
790
|
/* STORY-0016 `selectToggle` / `selectMode` — the select column. Narrow, never
|
|
791
791
|
* the time column (it is the first child, so the time rules reach it: (0,3,2)
|
|
@@ -853,17 +853,17 @@ body.twm-dt-col-resizing {
|
|
|
853
853
|
}
|
|
854
854
|
.twm-preview-table.twm-dt--select th.twm-dt-select-cell .twm-dt-select-toggle:focus-visible {
|
|
855
855
|
opacity: 1;
|
|
856
|
-
outline: 1px solid var(--accent-bright
|
|
856
|
+
outline: 1px solid var(--accent-bright);
|
|
857
857
|
}
|
|
858
858
|
/* STORY-0003 `selectionMode: 'cells'` — the range is a tint on its cells, the
|
|
859
859
|
* cursor a ring inside its cell (inset, so it moves no column by a pixel). A
|
|
860
860
|
* cell being edited gives its padding to the editor; a commit still out is
|
|
861
861
|
* dimmed, and a refused one carries a red ring and its message as the title. */
|
|
862
862
|
.twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--selected {
|
|
863
|
-
background: var(--state-selected
|
|
863
|
+
background: var(--state-selected);
|
|
864
864
|
}
|
|
865
865
|
.twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--cursor {
|
|
866
|
-
box-shadow: inset 0 0 0 2px var(--accent-bright
|
|
866
|
+
box-shadow: inset 0 0 0 2px var(--accent-bright);
|
|
867
867
|
}
|
|
868
868
|
.twm-preview-table.twm-dt--cells:focus {
|
|
869
869
|
outline: none;
|
|
@@ -878,7 +878,7 @@ body.twm-dt-col-resizing {
|
|
|
878
878
|
margin: 0;
|
|
879
879
|
padding: 2px 6px;
|
|
880
880
|
border: 0;
|
|
881
|
-
outline: 2px solid var(--accent-bright
|
|
881
|
+
outline: 2px solid var(--accent-bright);
|
|
882
882
|
outline-offset: -2px;
|
|
883
883
|
background: var(--surface-well, #1e1e1e);
|
|
884
884
|
color: inherit;
|
|
@@ -905,7 +905,7 @@ body.twm-dt-col-resizing {
|
|
|
905
905
|
}
|
|
906
906
|
/* STORY-0088 `staged`: a value typed and not yet committed. */
|
|
907
907
|
.twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--staged {
|
|
908
|
-
background: color-mix(in srgb, var(--accent-bright
|
|
908
|
+
background: color-mix(in srgb, var(--accent-bright) 16%, transparent);
|
|
909
909
|
}
|
|
910
910
|
/* STORY-0089 `fillHandle`: a square on the range's corner cell, the cells a
|
|
911
911
|
* drag covers dashed, and a cell the fill skipped (not editable) hatched. */
|
|
@@ -919,14 +919,14 @@ body.twm-dt-col-resizing {
|
|
|
919
919
|
width: 7px;
|
|
920
920
|
height: 7px;
|
|
921
921
|
box-sizing: border-box;
|
|
922
|
-
background: var(--accent-bright
|
|
922
|
+
background: var(--accent-bright);
|
|
923
923
|
border: 1px solid var(--surface-well, #1e1e1e);
|
|
924
924
|
cursor: crosshair;
|
|
925
925
|
z-index: 1;
|
|
926
926
|
touch-action: none;
|
|
927
927
|
}
|
|
928
928
|
.twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--fill-preview {
|
|
929
|
-
outline: 1px dashed var(--accent-bright
|
|
929
|
+
outline: 1px dashed var(--accent-bright);
|
|
930
930
|
outline-offset: -1px;
|
|
931
931
|
}
|
|
932
932
|
.twm-preview-table.twm-dt--cells tbody td.twm-dt-cell--fill-skipped {
|
|
@@ -963,10 +963,10 @@ body.twm-dt-col-resizing {
|
|
|
963
963
|
opacity: 0.5;
|
|
964
964
|
}
|
|
965
965
|
.twm-preview-table th.twm-dt-col--drop {
|
|
966
|
-
box-shadow: inset 2px 0 0 0 var(--accent-bright
|
|
966
|
+
box-shadow: inset 2px 0 0 0 var(--accent-bright);
|
|
967
967
|
}
|
|
968
968
|
.twm-preview-table th.twm-dt-col--drop.twm-dt-col--drop-after {
|
|
969
|
-
box-shadow: inset -2px 0 0 0 var(--accent-bright
|
|
969
|
+
box-shadow: inset -2px 0 0 0 var(--accent-bright);
|
|
970
970
|
}
|
|
971
971
|
/* STORY-0066 `columnGroups` — the group row is a table of its own above the
|
|
972
972
|
* header table (`twm-dt-groups`), its `<col>`s copied from the header's widths;
|
|
@@ -1029,7 +1029,7 @@ body.twm-dt-col-resizing {
|
|
|
1029
1029
|
.twm-preview-table .twm-dt-group__action:focus-visible,
|
|
1030
1030
|
.twm-preview-table .twm-dt-col-action:focus-visible {
|
|
1031
1031
|
opacity: 1;
|
|
1032
|
-
outline: 1px solid var(--accent-bright
|
|
1032
|
+
outline: 1px solid var(--accent-bright);
|
|
1033
1033
|
}
|
|
1034
1034
|
.twm-preview-table th.twm-dt-col--placeholder,
|
|
1035
1035
|
.twm-preview-table td.twm-dt-cell--placeholder {
|
|
@@ -1095,16 +1095,16 @@ body.twm-dt-col-resizing {
|
|
|
1095
1095
|
}
|
|
1096
1096
|
.twm-preview-table.twm-dt-crosstab:not(.twm-preview-table--readonly) tbody tr.selected td.twm-dt-pin,
|
|
1097
1097
|
.twm-preview-table.twm-dt-crosstab tbody tr.selected td.twm-dt-pin {
|
|
1098
|
-
--twm-dt-pin-state: linear-gradient(var(--state-selected
|
|
1098
|
+
--twm-dt-pin-state: linear-gradient(var(--state-selected), var(--state-selected));
|
|
1099
1099
|
}
|
|
1100
1100
|
.twm-preview-table.twm-dt-crosstab.twm-dt--clickable tbody tr:not(.twm-dt-spacer):not(.data-table__empty-row):not(.selected):hover td.twm-dt-pin {
|
|
1101
1101
|
--twm-dt-pin-state: linear-gradient(var(--state-hover, rgba(255, 255, 255, 0.05)), var(--state-hover, rgba(255, 255, 255, 0.05)));
|
|
1102
1102
|
}
|
|
1103
1103
|
.twm-preview-table.twm-dt-crosstab.twm-dt--cells tbody td.twm-dt-pin.twm-dt-cell--selected {
|
|
1104
|
-
--twm-dt-pin-state: linear-gradient(var(--state-selected
|
|
1104
|
+
--twm-dt-pin-state: linear-gradient(var(--state-selected), var(--state-selected));
|
|
1105
1105
|
}
|
|
1106
1106
|
.twm-preview-table.twm-dt-crosstab.twm-dt--cells tbody td.twm-dt-pin.twm-dt-cell--staged {
|
|
1107
|
-
--twm-dt-pin-state: linear-gradient(color-mix(in srgb, var(--accent-bright
|
|
1107
|
+
--twm-dt-pin-state: linear-gradient(color-mix(in srgb, var(--accent-bright) 16%, transparent), color-mix(in srgb, var(--accent-bright) 16%, transparent));
|
|
1108
1108
|
}
|
|
1109
1109
|
.twm-preview-table.twm-dt-crosstab.twm-dt--cells tbody td.twm-dt-pin.twm-dt-cell--fill-skipped {
|
|
1110
1110
|
--twm-dt-pin-mark: repeating-linear-gradient(45deg,
|
|
@@ -1135,7 +1135,7 @@ body.twm-dt-col-resizing {
|
|
|
1135
1135
|
--twm-dt-pin-state: linear-gradient(rgba(255,255,255,0.04), rgba(255,255,255,0.04));
|
|
1136
1136
|
}
|
|
1137
1137
|
@keyframes twm-dt-pin-new {
|
|
1138
|
-
from { --twm-dt-pin-new: var(--twm-dt-new-bg
|
|
1138
|
+
from { --twm-dt-pin-new: var(--twm-dt-new-bg); }
|
|
1139
1139
|
to { --twm-dt-pin-new: transparent; }
|
|
1140
1140
|
}
|
|
1141
1141
|
.twm-preview-table.twm-dt-crosstab tbody tr.twm-dt-row--new > td.twm-dt-pin {
|
|
@@ -1151,7 +1151,7 @@ body.twm-dt-col-resizing {
|
|
|
1151
1151
|
cursor: pointer;
|
|
1152
1152
|
}
|
|
1153
1153
|
.twm-preview-table.twm-dt--selecting tbody tr.twm-dt-row--cursor > td {
|
|
1154
|
-
box-shadow: inset 0 1px 0 0 var(--accent-bright
|
|
1154
|
+
box-shadow: inset 0 1px 0 0 var(--accent-bright), inset 0 -1px 0 0 var(--accent-bright);
|
|
1155
1155
|
}
|
|
1156
1156
|
/* `rowIcon` — drawn from `data-twm-icon` so the icon's NAME is not cell
|
|
1157
1157
|
* text (not in a copy, not in the clipped-cell tooltip). The span carries the
|
|
@@ -1298,7 +1298,7 @@ body.twm-dt-col-resizing {
|
|
|
1298
1298
|
}
|
|
1299
1299
|
.twm-preview-table td .twm-dt-detail-toggle:focus-visible {
|
|
1300
1300
|
opacity: 1;
|
|
1301
|
-
outline: 1px solid var(--accent-bright
|
|
1301
|
+
outline: 1px solid var(--accent-bright);
|
|
1302
1302
|
}
|
|
1303
1303
|
/* The detail's row: one cell across every column. It is often the body's
|
|
1304
1304
|
* FIRST cell of its row, so the time column's rules reach it (see the note
|
|
@@ -1331,7 +1331,7 @@ body.twm-dt-col-resizing {
|
|
|
1331
1331
|
}
|
|
1332
1332
|
/* `follow` / `refresh()` — a row the last answer did not have, for a moment. */
|
|
1333
1333
|
@keyframes twm-dt-row-new {
|
|
1334
|
-
from { background: var(--twm-dt-new-bg
|
|
1334
|
+
from { background: var(--twm-dt-new-bg); }
|
|
1335
1335
|
to { background: transparent; }
|
|
1336
1336
|
}
|
|
1337
1337
|
.twm-preview-table tbody tr.twm-dt-row--new > td {
|
|
@@ -1375,11 +1375,11 @@ body.twm-dt-col-resizing {
|
|
|
1375
1375
|
background: rgba(255, 255, 255, 0.06);
|
|
1376
1376
|
}
|
|
1377
1377
|
.twm-dt-filter-chip:focus-visible {
|
|
1378
|
-
outline: 1px solid var(--accent-bright
|
|
1378
|
+
outline: 1px solid var(--accent-bright);
|
|
1379
1379
|
}
|
|
1380
1380
|
.twm-dt-filter-chip.twm-dt-filter-chip--on {
|
|
1381
|
-
border-color: var(--accent-bright
|
|
1382
|
-
background:
|
|
1381
|
+
border-color: var(--accent-bright);
|
|
1382
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
1383
1383
|
color: #ddd;
|
|
1384
1384
|
}
|
|
1385
1385
|
.twm-dt-filter-chip.twm-dt-filter-chip--empty {
|
|
@@ -1449,14 +1449,14 @@ body.twm-dt-col-resizing {
|
|
|
1449
1449
|
width: 16px;
|
|
1450
1450
|
height: 16px;
|
|
1451
1451
|
border-radius: 50%;
|
|
1452
|
-
background:
|
|
1452
|
+
background: var(--accent-light);
|
|
1453
1453
|
margin-top: -5px;
|
|
1454
1454
|
cursor: grab;
|
|
1455
1455
|
border: 2px solid var(--surface-0);
|
|
1456
1456
|
}
|
|
1457
1457
|
.twm-slider-field__input::-webkit-slider-thumb:active {
|
|
1458
1458
|
cursor: grabbing;
|
|
1459
|
-
background:
|
|
1459
|
+
background: var(--accent-lighter);
|
|
1460
1460
|
}
|
|
1461
1461
|
.twm-slider-field__input::-moz-range-track {
|
|
1462
1462
|
height: 6px;
|
|
@@ -1468,7 +1468,7 @@ body.twm-dt-col-resizing {
|
|
|
1468
1468
|
width: 16px;
|
|
1469
1469
|
height: 16px;
|
|
1470
1470
|
border-radius: 50%;
|
|
1471
|
-
background:
|
|
1471
|
+
background: var(--accent-light);
|
|
1472
1472
|
cursor: grab;
|
|
1473
1473
|
border: 2px solid var(--surface-0);
|
|
1474
1474
|
}
|
|
@@ -1591,7 +1591,7 @@ body.twm-dt-col-resizing {
|
|
|
1591
1591
|
.twm-sortable-list__drop {
|
|
1592
1592
|
height: 2px;
|
|
1593
1593
|
margin: 1px 0;
|
|
1594
|
-
background:
|
|
1594
|
+
background: var(--accent-light);
|
|
1595
1595
|
pointer-events: none;
|
|
1596
1596
|
}
|
|
1597
1597
|
.twm-sortable-list__content {
|
|
@@ -1638,12 +1638,12 @@ body.twm-dt-col-resizing {
|
|
|
1638
1638
|
margin-top: var(--space-md);
|
|
1639
1639
|
}
|
|
1640
1640
|
.twm-sortable-list__add:hover {
|
|
1641
|
-
border-color:
|
|
1642
|
-
color:
|
|
1643
|
-
background:
|
|
1641
|
+
border-color: var(--accent-light);
|
|
1642
|
+
color: var(--accent-light);
|
|
1643
|
+
background: color-mix(in srgb, var(--accent-light) 12%, transparent);
|
|
1644
1644
|
}
|
|
1645
1645
|
.twm-sortable-list__add:active {
|
|
1646
|
-
background:
|
|
1646
|
+
background: color-mix(in srgb, var(--accent-light) 20%, transparent);
|
|
1647
1647
|
}
|
|
1648
1648
|
.twm-sortable-list__empty {
|
|
1649
1649
|
padding: var(--space-xl);
|
|
@@ -1668,7 +1668,7 @@ body.twm-dt-col-resizing {
|
|
|
1668
1668
|
}
|
|
1669
1669
|
.twm-sortable-list__input:focus {
|
|
1670
1670
|
outline: none;
|
|
1671
|
-
border-color:
|
|
1671
|
+
border-color: var(--accent-light);
|
|
1672
1672
|
}
|
|
1673
1673
|
/* Global Top Bar (fixed at top) */
|
|
1674
1674
|
.twm-global-top-bar {
|
|
@@ -2142,19 +2142,19 @@ body.twm-dt-col-resizing {
|
|
|
2142
2142
|
padding: var(--space-xxs) 8px;
|
|
2143
2143
|
font-size: var(--font-size-xs);
|
|
2144
2144
|
color: #c7f1ff;
|
|
2145
|
-
background:
|
|
2146
|
-
border: 1px solid
|
|
2145
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
2146
|
+
border: 1px solid color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
2147
2147
|
border-radius: var(--radius-pill);
|
|
2148
2148
|
white-space: nowrap;
|
|
2149
2149
|
text-transform: none;
|
|
2150
2150
|
cursor: default;
|
|
2151
|
-
box-shadow: inset 0 0 0 1px
|
|
2151
|
+
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
2152
2152
|
}
|
|
2153
2153
|
.twm-autocomplete-field__namespace--toggle {
|
|
2154
2154
|
cursor: pointer;
|
|
2155
|
-
background: linear-gradient(90deg,
|
|
2155
|
+
background: linear-gradient(90deg, color-mix(in srgb, var(--accent-bright) 24%, transparent) 0%, color-mix(in srgb, var(--accent-bright) 12%, transparent) 100%);
|
|
2156
2156
|
transition: background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
|
|
2157
|
-
border: 1px solid
|
|
2157
|
+
border: 1px solid color-mix(in srgb, var(--accent-bright) 50%, transparent);
|
|
2158
2158
|
color: #e7f5ff;
|
|
2159
2159
|
outline: none;
|
|
2160
2160
|
}
|
|
@@ -2197,8 +2197,8 @@ body.twm-dt-col-resizing {
|
|
|
2197
2197
|
is the keyboard's, and it is deliberately the stronger of the two so that
|
|
2198
2198
|
moving the pointer across the list does not hide where the cursor is. */
|
|
2199
2199
|
.twm-autocomplete-field__item.active {
|
|
2200
|
-
background-color: var(--state-selected
|
|
2201
|
-
box-shadow: inset 2px 0 0 var(--accent-bright
|
|
2200
|
+
background-color: var(--state-selected);
|
|
2201
|
+
box-shadow: inset 2px 0 0 var(--accent-bright);
|
|
2202
2202
|
}
|
|
2203
2203
|
.twm-autocomplete-field__item {
|
|
2204
2204
|
display: flex;
|
|
@@ -2588,7 +2588,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2588
2588
|
box-sizing: border-box;
|
|
2589
2589
|
}
|
|
2590
2590
|
.twm-data-table__filter-input:focus {
|
|
2591
|
-
border-color:
|
|
2591
|
+
border-color: var(--accent-light);
|
|
2592
2592
|
background: #252525;
|
|
2593
2593
|
}
|
|
2594
2594
|
.twm-data-table__filter-input::placeholder {
|
|
@@ -2649,7 +2649,7 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2649
2649
|
}
|
|
2650
2650
|
.twm-data-table__filter-dropdown-select:focus,
|
|
2651
2651
|
.twm-data-table__filter-dropdown-input:focus {
|
|
2652
|
-
border-color:
|
|
2652
|
+
border-color: var(--accent-light);
|
|
2653
2653
|
}
|
|
2654
2654
|
.twm-data-table__filter-dropdown-select {
|
|
2655
2655
|
appearance: auto;
|
|
@@ -3748,14 +3748,14 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3748
3748
|
/* Add Widget is the toolbar's one primary verb, so it is the one that carries
|
|
3749
3749
|
the accent. */
|
|
3750
3750
|
.add-widget-btn {
|
|
3751
|
-
background:
|
|
3752
|
-
border-color:
|
|
3751
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
3752
|
+
border-color: color-mix(in srgb, var(--accent-bright) 30%, transparent);
|
|
3753
3753
|
color: var(--text-bright);
|
|
3754
3754
|
}
|
|
3755
3755
|
|
|
3756
3756
|
.add-widget-btn:hover {
|
|
3757
|
-
background:
|
|
3758
|
-
border-color:
|
|
3757
|
+
background: color-mix(in srgb, var(--accent-bright) 25%, transparent);
|
|
3758
|
+
border-color: color-mix(in srgb, var(--accent-bright) 50%, transparent);
|
|
3759
3759
|
}
|
|
3760
3760
|
|
|
3761
3761
|
/* The other two are secondary — Export is an aside and Reset Layout throws the
|
|
@@ -3804,13 +3804,15 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3804
3804
|
.tile.resizing {
|
|
3805
3805
|
z-index: var(--z-dropdown);
|
|
3806
3806
|
border-color: var(--accent-bright);
|
|
3807
|
-
box-shadow: 0 0 0 2px
|
|
3807
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-bright) 30%, transparent);
|
|
3808
3808
|
}
|
|
3809
3809
|
|
|
3810
3810
|
/* Selected — set by `_onConfigClick()` while the config dialog is open, and
|
|
3811
|
-
cleared from every sibling by the same handler. #78b9ff is a literal
|
|
3812
|
-
|
|
3813
|
-
|
|
3811
|
+
cleared from every sibling by the same handler. #78b9ff is a literal:
|
|
3812
|
+
`--accent-bright` is #007acc, which is a border colour on this background
|
|
3813
|
+
and not a text one, and the derived light accents (`--accent-light`,
|
|
3814
|
+
`--accent-lighter`) are less blue than this, so using them would change
|
|
3815
|
+
the colour. */
|
|
3814
3816
|
.tile.tile--selected {
|
|
3815
3817
|
border-color: #78b9ff;
|
|
3816
3818
|
box-shadow: 0 0 0 2px rgba(120, 185, 255, 0.3), var(--shadow-md);
|
|
@@ -4081,8 +4083,8 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
4081
4083
|
/* The drop preview, positioned by `_updateGhost()` in grid coordinates. */
|
|
4082
4084
|
.tile-ghost {
|
|
4083
4085
|
position: absolute;
|
|
4084
|
-
background:
|
|
4085
|
-
border: 2px dashed
|
|
4086
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
4087
|
+
border: 2px dashed color-mix(in srgb, var(--accent-bright) 50%, transparent);
|
|
4086
4088
|
border-radius: var(--radius-sm);
|
|
4087
4089
|
pointer-events: none;
|
|
4088
4090
|
z-index: 50;
|
|
@@ -5591,12 +5593,12 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
5591
5593
|
/* ─── Autocomplete field — notebook variant ──────────────── */
|
|
5592
5594
|
|
|
5593
5595
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper {
|
|
5594
|
-
border: 1px solid
|
|
5596
|
+
border: 1px solid var(--accent-light);
|
|
5595
5597
|
font-size: var(--font-size-sm);
|
|
5596
5598
|
}
|
|
5597
5599
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input-wrapper:focus-within {
|
|
5598
5600
|
border-color: #79b8f8;
|
|
5599
|
-
box-shadow: 0 0 3px
|
|
5601
|
+
box-shadow: 0 0 3px color-mix(in srgb, var(--accent-light) 30%, transparent);
|
|
5600
5602
|
}
|
|
5601
5603
|
.twm-autocomplete-field--notebook .twm-autocomplete-field__input {
|
|
5602
5604
|
font-family: 'Courier New', Courier, monospace;
|
|
@@ -6299,7 +6301,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6299
6301
|
}
|
|
6300
6302
|
.twm-color-field__preset:hover,
|
|
6301
6303
|
.twm-color-field__preset:focus-visible {
|
|
6302
|
-
outline: 1px solid var(--ea-accent
|
|
6304
|
+
outline: 1px solid var(--ea-accent);
|
|
6303
6305
|
outline-offset: 1px;
|
|
6304
6306
|
}
|
|
6305
6307
|
/* Colour list: a SortableList whose rows are a colour field + move buttons. */
|
|
@@ -6325,7 +6327,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6325
6327
|
cursor: pointer;
|
|
6326
6328
|
}
|
|
6327
6329
|
.twm-color-list__move:hover:not(:disabled) {
|
|
6328
|
-
color: var(--ea-accent
|
|
6330
|
+
color: var(--ea-accent);
|
|
6329
6331
|
}
|
|
6330
6332
|
.twm-color-list__move:disabled {
|
|
6331
6333
|
opacity: 0.3;
|
|
@@ -6736,7 +6738,7 @@ button.twm-about-dialog__btn--close:focus {
|
|
|
6736
6738
|
}
|
|
6737
6739
|
.twm-entity-header__field select:focus {
|
|
6738
6740
|
outline: none;
|
|
6739
|
-
border-color: var(--ea-accent
|
|
6741
|
+
border-color: var(--ea-accent);
|
|
6740
6742
|
}
|
|
6741
6743
|
.twm-entity-header__field select option { background: var(--ea-input-bg, #1e1e1e); color: var(--ea-text, #ddd); }
|
|
6742
6744
|
.twm-landing__table table {
|
|
@@ -6980,7 +6982,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
6980
6982
|
}
|
|
6981
6983
|
.twm-leaf--focused {
|
|
6982
6984
|
border-color: var(--accent-bright);
|
|
6983
|
-
box-shadow: 0 0 0 1px
|
|
6985
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent-bright) 25%, transparent) inset;
|
|
6984
6986
|
}
|
|
6985
6987
|
.twm-leaf__chrome {
|
|
6986
6988
|
display: flex;
|
|
@@ -7190,15 +7192,15 @@ body.twm-dragging * { user-select: none; }
|
|
|
7190
7192
|
* border, because a border changes the box and every tile in the row would
|
|
7191
7193
|
* reflow by a pixel as the pointer crossed between them. */
|
|
7192
7194
|
.twm-leaf--drop-target {
|
|
7193
|
-
outline: 2px solid var(--accent-bright
|
|
7195
|
+
outline: 2px solid var(--accent-bright);
|
|
7194
7196
|
outline-offset: -2px;
|
|
7195
7197
|
}
|
|
7196
7198
|
|
|
7197
7199
|
/* A STRIP ARMED TO RECEIVE — the drop that adds the tab at the end of this
|
|
7198
7200
|
* tile's list rather than into a zone of its body. */
|
|
7199
7201
|
.twm-leaf__tabbar--drop-target {
|
|
7200
|
-
background: color-mix(in srgb, var(--accent-bright
|
|
7201
|
-
box-shadow: inset 0 0 0 1px var(--accent-bright
|
|
7202
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
7203
|
+
box-shadow: inset 0 0 0 1px var(--accent-bright);
|
|
7202
7204
|
}
|
|
7203
7205
|
|
|
7204
7206
|
/* THE TAB BEING CARRIED. `DragReorder` has put `.dragging` on the TOP strip's
|
|
@@ -7279,7 +7281,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7279
7281
|
position: absolute;
|
|
7280
7282
|
inset: 0;
|
|
7281
7283
|
pointer-events: none;
|
|
7282
|
-
border-top: 1px solid var(--accent-bright
|
|
7284
|
+
border-top: 1px solid var(--accent-bright);
|
|
7283
7285
|
clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%);
|
|
7284
7286
|
}
|
|
7285
7287
|
/* Lower-casing removed here too — a tab label is the same embedder-supplied
|
|
@@ -7492,7 +7494,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7492
7494
|
inset: 0 0 auto 0;
|
|
7493
7495
|
height: 2px;
|
|
7494
7496
|
pointer-events: none;
|
|
7495
|
-
background: var(--accent-bright
|
|
7497
|
+
background: var(--accent-bright);
|
|
7496
7498
|
}
|
|
7497
7499
|
/* A PREVIEW tab — opened by a single click and replaced by the next one.
|
|
7498
7500
|
* Italic is the convention every editor uses for "this one is not staying". */
|
|
@@ -7544,7 +7546,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7544
7546
|
flex: 0 0 auto;
|
|
7545
7547
|
font-size: 9px;
|
|
7546
7548
|
line-height: 1;
|
|
7547
|
-
color: var(--accent-bright
|
|
7549
|
+
color: var(--accent-bright);
|
|
7548
7550
|
}
|
|
7549
7551
|
.notebook-tabs .twm-tab-close {
|
|
7550
7552
|
flex: 0 0 auto;
|
|
@@ -7582,7 +7584,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7582
7584
|
flex: 0 0 auto;
|
|
7583
7585
|
align-self: stretch;
|
|
7584
7586
|
width: 2px;
|
|
7585
|
-
background: var(--accent-bright
|
|
7587
|
+
background: var(--accent-bright);
|
|
7586
7588
|
pointer-events: none;
|
|
7587
7589
|
}
|
|
7588
7590
|
|
|
@@ -7604,8 +7606,8 @@ body.twm-dragging * { user-select: none; }
|
|
|
7604
7606
|
* mean "let go here and this list takes it" should look like one thing. */
|
|
7605
7607
|
.notebook-tabs--drop-target,
|
|
7606
7608
|
.notebook-editor-container--drop-target {
|
|
7607
|
-
background: color-mix(in srgb, var(--accent-bright
|
|
7608
|
-
box-shadow: inset 0 0 0 1px var(--accent-bright
|
|
7609
|
+
background: color-mix(in srgb, var(--accent-bright) 18%, transparent);
|
|
7610
|
+
box-shadow: inset 0 0 0 1px var(--accent-bright);
|
|
7609
7611
|
}
|
|
7610
7612
|
/* ── The tab bar's own context menu ──────────────────────────────────
|
|
7611
7613
|
* Reached only by a consumer that lets the component open it — the tile
|
|
@@ -7743,7 +7745,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7743
7745
|
}
|
|
7744
7746
|
.split-pane-divider:hover,
|
|
7745
7747
|
.split-pane-divider--active {
|
|
7746
|
-
background: var(--accent-bright
|
|
7748
|
+
background: var(--accent-bright);
|
|
7747
7749
|
}
|
|
7748
7750
|
/* A pane is its tab bar over its body. The tab bar's own rule says
|
|
7749
7751
|
* `height: 100%` (it fills a tile's strip); here it is a fixed 26px row, the
|
|
@@ -7766,7 +7768,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7766
7768
|
* `setPanes()`, which is why `SplitPaneContainer` ADDS `.split-pane` to a
|
|
7767
7769
|
* pane instead of replacing its classes with it. */
|
|
7768
7770
|
.split-pane-container--split .editor-pane--focused > .tabs.notebook-tabs {
|
|
7769
|
-
box-shadow: inset 0 -1px 0 var(--accent-bright
|
|
7771
|
+
box-shadow: inset 0 -1px 0 var(--accent-bright);
|
|
7770
7772
|
}
|
|
7771
7773
|
/* The body is the positioning anchor; the editor container fills it
|
|
7772
7774
|
* absolutely, so its height is the body's whatever its content is and the
|
|
@@ -7829,7 +7831,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7829
7831
|
font: inherit;
|
|
7830
7832
|
outline: none;
|
|
7831
7833
|
}
|
|
7832
|
-
.nb-search-bar__input:focus { border-color: var(--accent-bright
|
|
7834
|
+
.nb-search-bar__input:focus { border-color: var(--accent-bright); }
|
|
7833
7835
|
.nb-search-bar__match-info {
|
|
7834
7836
|
min-width: 64px;
|
|
7835
7837
|
color: var(--text-muted);
|
|
@@ -7862,7 +7864,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
7862
7864
|
.nb-search-bar__btn--active,
|
|
7863
7865
|
.nb-search-bar__btn--active:hover {
|
|
7864
7866
|
background: var(--state-selected);
|
|
7865
|
-
border-color: var(--accent-bright
|
|
7867
|
+
border-color: var(--accent-bright);
|
|
7866
7868
|
color: var(--text-bright);
|
|
7867
7869
|
}
|
|
7868
7870
|
/* Two classes, for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
@@ -8002,7 +8004,7 @@ body.twm-dragging * { user-select: none; }
|
|
|
8002
8004
|
.twm-tile-tabmenu__item--cursor {
|
|
8003
8005
|
/* Keyboard cursor reads slightly heavier than hover so a
|
|
8004
8006
|
* mouse-cursor-on-a-different-row state is still legible. */
|
|
8005
|
-
outline: 1px solid var(--accent-bright
|
|
8007
|
+
outline: 1px solid var(--accent-bright);
|
|
8006
8008
|
outline-offset: -1px;
|
|
8007
8009
|
}
|
|
8008
8010
|
.twm-tile-tabmenu__item-hint {
|
|
@@ -8091,13 +8093,13 @@ body.twm-dragging * { user-select: none; }
|
|
|
8091
8093
|
color: var(--text-bright);
|
|
8092
8094
|
}
|
|
8093
8095
|
.twm-tile-tabswitch__item--cursor {
|
|
8094
|
-
outline: 1px solid var(--accent-bright
|
|
8096
|
+
outline: 1px solid var(--accent-bright);
|
|
8095
8097
|
outline-offset: -1px;
|
|
8096
8098
|
}
|
|
8097
8099
|
.twm-tile-tabswitch__item--on { color: var(--text-bright); }
|
|
8098
8100
|
/* Compounded for the Material Symbols tie — see `.twm-leaf__icon`. */
|
|
8099
8101
|
.twm-tile-tabswitch__check,
|
|
8100
|
-
.twm-tile-tabswitch__check.material-symbols-outlined { font-size: 14px; color: var(--accent-bright
|
|
8102
|
+
.twm-tile-tabswitch__check.material-symbols-outlined { font-size: 14px; color: var(--accent-bright); }
|
|
8101
8103
|
.twm-tile-tabswitch__label {
|
|
8102
8104
|
overflow: hidden;
|
|
8103
8105
|
text-overflow: ellipsis;
|
|
@@ -8149,8 +8151,8 @@ body.twm-dragging * { user-select: none; }
|
|
|
8149
8151
|
align-items: center;
|
|
8150
8152
|
gap: var(--space-xs);
|
|
8151
8153
|
padding: 2px 4px 2px 8px;
|
|
8152
|
-
background: var(--state-selected
|
|
8153
|
-
border: 1px solid var(--accent-bright
|
|
8154
|
+
background: var(--state-selected);
|
|
8155
|
+
border: 1px solid var(--accent-bright);
|
|
8154
8156
|
border-radius: 2px;
|
|
8155
8157
|
color: var(--text-bright, #fff);
|
|
8156
8158
|
font-size: var(--font-size-xs);
|
|
@@ -8809,7 +8811,7 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
8809
8811
|
}
|
|
8810
8812
|
.twm-data-table-component--compact .twm-pagination-controls .twm-pagination-btn:hover:not(:disabled) {
|
|
8811
8813
|
color: var(--ea-text, #ddd) !important;
|
|
8812
|
-
border-color: var(--ea-accent
|
|
8814
|
+
border-color: var(--ea-accent) !important;
|
|
8813
8815
|
}
|
|
8814
8816
|
/* Text labels inside the pager — the "Rows X–Y of Z" and "Page X of
|
|
8815
8817
|
* Y" spans don't have classes (just inline style), so target every
|
|
@@ -8838,7 +8840,7 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
8838
8840
|
width: 28px;
|
|
8839
8841
|
height: 28px;
|
|
8840
8842
|
border: 2px solid rgba(255, 255, 255, 0.18);
|
|
8841
|
-
border-top-color: var(--ea-accent
|
|
8843
|
+
border-top-color: var(--ea-accent);
|
|
8842
8844
|
border-radius: 50%;
|
|
8843
8845
|
animation: data-table__spin 0.7s linear infinite;
|
|
8844
8846
|
}
|
|
@@ -9015,7 +9017,7 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
9015
9017
|
width: 18px;
|
|
9016
9018
|
height: 18px;
|
|
9017
9019
|
border: 2px solid var(--ea-border, #333);
|
|
9018
|
-
border-top-color: var(--accent
|
|
9020
|
+
border-top-color: var(--accent);
|
|
9019
9021
|
border-radius: 50%;
|
|
9020
9022
|
animation: twm-tile-loading-spin 0.7s linear infinite;
|
|
9021
9023
|
}
|
|
@@ -9239,7 +9241,7 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
9239
9241
|
cursor: pointer;
|
|
9240
9242
|
}
|
|
9241
9243
|
.twm-tabs__tab:hover { background: var(--surface-2); color: var(--text-primary); }
|
|
9242
|
-
.twm-tabs__tab:focus-visible { outline: 1px solid var(--accent-bright
|
|
9244
|
+
.twm-tabs__tab:focus-visible { outline: 1px solid var(--accent-bright); outline-offset: -1px; }
|
|
9243
9245
|
.twm-tabs__tab--on { background: var(--surface-0); color: var(--text-bright); }
|
|
9244
9246
|
.twm-tabs__tab--on::before {
|
|
9245
9247
|
content: '';
|
|
@@ -9247,7 +9249,7 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
9247
9249
|
inset: 0 0 auto 0;
|
|
9248
9250
|
height: 2px;
|
|
9249
9251
|
pointer-events: none;
|
|
9250
|
-
background: var(--accent-bright
|
|
9252
|
+
background: var(--accent-bright);
|
|
9251
9253
|
}
|
|
9252
9254
|
.twm-tabs__label { overflow: hidden; text-overflow: ellipsis; }
|
|
9253
9255
|
/* Two classes: Google's `.material-symbols-outlined { font-size: 24px }` loads
|
|
@@ -9782,12 +9784,12 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
9782
9784
|
.twm-record--state-error { box-shadow: inset 2px 0 0 0 var(--color-danger, #c74e4e); }
|
|
9783
9785
|
/* `activeKey` — the record that is OPEN: the accent on the left edge, as
|
|
9784
9786
|
* DataTable's `twm-dt-row--active`. It wins over a state's edge. */
|
|
9785
|
-
.twm-record.twm-record--active { box-shadow: inset 2px 0 0 0 var(--accent-bright
|
|
9787
|
+
.twm-record.twm-record--active { box-shadow: inset 2px 0 0 0 var(--accent-bright); }
|
|
9786
9788
|
.twm-record-list--clickable .twm-record { cursor: pointer; }
|
|
9787
9789
|
.twm-record-list--clickable .twm-record:hover { background: var(--state-hover, rgba(255, 255, 255, 0.05)); }
|
|
9788
9790
|
.twm-record:focus { outline: none; }
|
|
9789
9791
|
.twm-record:focus-visible {
|
|
9790
|
-
outline: 1px solid var(--accent-bright
|
|
9792
|
+
outline: 1px solid var(--accent-bright);
|
|
9791
9793
|
outline-offset: -1px;
|
|
9792
9794
|
}
|
|
9793
9795
|
.twm-record-list__empty {
|
|
@@ -10713,7 +10715,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
10713
10715
|
cursor: pointer;
|
|
10714
10716
|
}
|
|
10715
10717
|
.twm-doc-outline__link:hover { background: var(--state-hover, rgba(255, 255, 255, 0.05)); color: var(--text-primary, #e0e0e0); }
|
|
10716
|
-
.twm-doc-outline__link:focus-visible { outline: 1px solid var(--accent-bright
|
|
10718
|
+
.twm-doc-outline__link:focus-visible { outline: 1px solid var(--accent-bright); outline-offset: -1px; }
|
|
10717
10719
|
.twm-doc-outline__item--level-1 > .twm-doc-outline__link { color: var(--text-primary, #e0e0e0); }
|
|
10718
10720
|
.twm-doc-outline__number {
|
|
10719
10721
|
flex: 0 0 auto;
|
|
@@ -10728,8 +10730,8 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
10728
10730
|
white-space: nowrap;
|
|
10729
10731
|
}
|
|
10730
10732
|
.twm-doc-outline__item.twm-doc-outline__item--active > .twm-doc-outline__link {
|
|
10731
|
-
border-left-color: var(--accent-bright
|
|
10732
|
-
background:
|
|
10733
|
+
border-left-color: var(--accent-bright);
|
|
10734
|
+
background: color-mix(in srgb, var(--accent-bright) 15%, transparent);
|
|
10733
10735
|
color: var(--text-primary, #e0e0e0);
|
|
10734
10736
|
}
|
|
10735
10737
|
/* Listed, but nothing in the document answers to it. */
|
|
@@ -10757,7 +10759,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
10757
10759
|
border-radius: var(--radius-sm, 4px);
|
|
10758
10760
|
cursor: text;
|
|
10759
10761
|
}
|
|
10760
|
-
.twm-tag-input:focus-within { border-color: var(--accent-bright
|
|
10762
|
+
.twm-tag-input:focus-within { border-color: var(--accent-bright); }
|
|
10761
10763
|
.twm-tag-input--readonly {
|
|
10762
10764
|
background: transparent;
|
|
10763
10765
|
border-color: transparent;
|
|
@@ -12282,7 +12284,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
12282
12284
|
position: absolute;
|
|
12283
12285
|
pointer-events: none;
|
|
12284
12286
|
border: 1px solid var(--accent-bright);
|
|
12285
|
-
background:
|
|
12287
|
+
background: color-mix(in srgb, var(--accent-bright) 12%, transparent);
|
|
12286
12288
|
}
|
|
12287
12289
|
.twm-canvas__marquee[hidden] { display: none; }
|
|
12288
12290
|
|
|
@@ -12775,7 +12777,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
12775
12777
|
.twm-flow-graph__port--data .twm-flow-graph__port-dot { border-color: #8a8f98; border-radius: 2px; }
|
|
12776
12778
|
.twm-flow-graph--connecting .twm-flow-graph__port--in:not(:disabled) .twm-flow-graph__port-dot {
|
|
12777
12779
|
background: var(--twm-flow-focus);
|
|
12778
|
-
box-shadow: 0 0 0 3px
|
|
12780
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
12779
12781
|
}
|
|
12780
12782
|
.twm-flow-graph__port--taken .twm-flow-graph__port-dot { border-color: var(--twm-flow-ok); background: var(--twm-flow-ok); }
|
|
12781
12783
|
.twm-flow-graph__port--taken .twm-flow-graph__port-count { color: var(--twm-flow-ok); }
|
|
@@ -12787,7 +12789,7 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
12787
12789
|
}
|
|
12788
12790
|
.twm-flow-graph__port--can-drop .twm-flow-graph__port-dot {
|
|
12789
12791
|
background: var(--twm-flow-focus);
|
|
12790
|
-
box-shadow: 0 0 0 3px
|
|
12792
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-bright) 35%, transparent);
|
|
12791
12793
|
}
|
|
12792
12794
|
|
|
12793
12795
|
/* ── a line ─────────────────────────────────────────────────────────── */
|
package/dist/tokens.css
CHANGED
|
@@ -90,6 +90,13 @@
|
|
|
90
90
|
--accent-hover: #1177bb;
|
|
91
91
|
--accent-bright: #007acc; /* --layout-accent value */
|
|
92
92
|
|
|
93
|
+
/* Every other accent colour is DERIVED from the three above, so a
|
|
94
|
+
consumer that sets them (on :root) rethemes the whole accent (BUG-0044).
|
|
95
|
+
The light accents mix --accent-bright toward white: a slider thumb, a
|
|
96
|
+
sortable list's drop line and add button, a focused filter input. */
|
|
97
|
+
--accent-light: color-mix(in srgb, var(--accent-bright) 70%, white); /* ≈ #4da2db, was #569cd6 */
|
|
98
|
+
--accent-lighter: color-mix(in srgb, var(--accent-bright) 55%, white); /* ≈ #73b6e3, was #6eb3e9 */
|
|
99
|
+
|
|
93
100
|
/* ── Semantic colors ───────────────────────────────────────── */
|
|
94
101
|
--color-success: #3fb950;
|
|
95
102
|
--color-warning: #ff9800;
|
|
@@ -100,7 +107,9 @@
|
|
|
100
107
|
/* ── Surface state overlays ────────────────────────────────── */
|
|
101
108
|
--state-hover: rgba(255, 255, 255, 0.05);
|
|
102
109
|
--state-active: rgba(255, 255, 255, 0.08);
|
|
103
|
-
--state-selected: rgba(0, 122, 204, 0.15)
|
|
110
|
+
--state-selected: color-mix(in srgb, var(--accent-bright) 15%, transparent); /* rgba(0, 122, 204, 0.15) */
|
|
111
|
+
/* A DataTable row or cell that has just arrived flashes from this to transparent. */
|
|
112
|
+
--twm-dt-new-bg: color-mix(in srgb, var(--accent-bright) 22%, transparent); /* rgba(0, 122, 204, 0.22) */
|
|
104
113
|
|
|
105
114
|
/* ── Overlay scrollbars (installOverlayScrollbar) ─────────── */
|
|
106
115
|
--scrollbar-size: 6px;
|
|
@@ -114,7 +123,7 @@
|
|
|
114
123
|
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
|
|
115
124
|
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
|
|
116
125
|
--shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
|
|
117
|
-
--shadow-glow: 0 0 2px rgba(0, 122, 204, 0.3)
|
|
126
|
+
--shadow-glow: 0 0 2px color-mix(in srgb, var(--accent-bright) 30%, transparent); /* rgba(0, 122, 204, 0.3) */
|
|
118
127
|
|
|
119
128
|
/* ── Z-index layers ───────────────────────────────────────── */
|
|
120
129
|
--z-base: 0;
|