dsh-any-background 0.3.3 → 0.3.5
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 +177 -176
- package/README.zh.md +177 -176
- package/lib/client.js +463 -46
- package/lib/client.js.map +1 -1
- package/lib/index.js +11 -1
- package/package.json +12 -18
- package/lib/invariant.js +0 -8
package/lib/client.js
CHANGED
|
@@ -56,6 +56,7 @@ window.__ModuleLoader__.load({
|
|
|
56
56
|
guideDesc: "管理主题色、壁纸与界面透明度",
|
|
57
57
|
uiProduced: "产出物/高亮内容",
|
|
58
58
|
uiHeader: "顶栏选项",
|
|
59
|
+
uiHeaderBar: "标题栏",
|
|
59
60
|
fontPageTitle: "字体与描边",
|
|
60
61
|
fontTitle: "自定义字体",
|
|
61
62
|
fontHint: "支持 ttf/otf/woff/woff2 字体文件(上限 100MB),将应用到整个界面的文字;代码块的等宽字体保持不变。中文字体通常有几十 MB,首次上传与刷新加载需要片刻",
|
|
@@ -247,6 +248,7 @@ window.__ModuleLoader__.load({
|
|
|
247
248
|
guideDesc: "Theme color, wallpaper and interface opacity in the right sidebar",
|
|
248
249
|
uiProduced: "Produced / highlights",
|
|
249
250
|
uiHeader: "Header popovers",
|
|
251
|
+
uiHeaderBar: "Header bar",
|
|
250
252
|
fontPageTitle: "Font & outline",
|
|
251
253
|
fontTitle: "Custom font",
|
|
252
254
|
fontHint: "Accepts ttf/otf/woff/woff2 files (up to 100MB) and applies them to the whole interface; code blocks keep their monospace stack. CJK fonts routinely span tens of MB, so the first upload and each reload take a moment",
|
|
@@ -426,7 +428,8 @@ window.__ModuleLoader__.load({
|
|
|
426
428
|
input: 30,
|
|
427
429
|
panel: 30,
|
|
428
430
|
produced: 30,
|
|
429
|
-
header: 30
|
|
431
|
+
header: 30,
|
|
432
|
+
headerBar: 30
|
|
430
433
|
},
|
|
431
434
|
strokes: {
|
|
432
435
|
bg: {
|
|
@@ -478,6 +481,11 @@ window.__ModuleLoader__.load({
|
|
|
478
481
|
width: 0,
|
|
479
482
|
color: "auto",
|
|
480
483
|
customColor: "#808080"
|
|
484
|
+
},
|
|
485
|
+
headerBar: {
|
|
486
|
+
width: 0,
|
|
487
|
+
color: "auto",
|
|
488
|
+
customColor: "#808080"
|
|
481
489
|
}
|
|
482
490
|
},
|
|
483
491
|
settingsOpacity: .5,
|
|
@@ -509,6 +517,7 @@ window.__ModuleLoader__.load({
|
|
|
509
517
|
panelOpacity: .5,
|
|
510
518
|
producedOpacity: .5,
|
|
511
519
|
headerOpacity: .5,
|
|
520
|
+
headerBarOpacity: .5,
|
|
512
521
|
profiles: [],
|
|
513
522
|
rotation: {
|
|
514
523
|
enabled: false,
|
|
@@ -649,7 +658,8 @@ window.__ModuleLoader__.load({
|
|
|
649
658
|
"input",
|
|
650
659
|
"panel",
|
|
651
660
|
"produced",
|
|
652
|
-
"header"
|
|
661
|
+
"header",
|
|
662
|
+
"headerBar"
|
|
653
663
|
]) {
|
|
654
664
|
const v = b[k];
|
|
655
665
|
out[k] = typeof v === "number" ? Math.min(60, Math.max(0, v)) : DEFAULT_CONFIG.blurs[k];
|
|
@@ -666,7 +676,8 @@ window.__ModuleLoader__.load({
|
|
|
666
676
|
"input",
|
|
667
677
|
"panel",
|
|
668
678
|
"produced",
|
|
669
|
-
"header"
|
|
679
|
+
"header",
|
|
680
|
+
"headerBar"
|
|
670
681
|
];
|
|
671
682
|
const STROKE_COLOR_KEYS = [
|
|
672
683
|
"auto",
|
|
@@ -718,6 +729,9 @@ window.__ModuleLoader__.load({
|
|
|
718
729
|
function rHeaderOpacity() {
|
|
719
730
|
return clamp01(cfg.headerOpacity, DEFAULT_CONFIG.headerOpacity);
|
|
720
731
|
}
|
|
732
|
+
function rHeaderBarOpacity() {
|
|
733
|
+
return clamp01(cfg.headerBarOpacity, DEFAULT_CONFIG.headerBarOpacity);
|
|
734
|
+
}
|
|
721
735
|
function rBgState() {
|
|
722
736
|
return cfg.bgState;
|
|
723
737
|
}
|
|
@@ -782,7 +796,8 @@ window.__ModuleLoader__.load({
|
|
|
782
796
|
trajectoryOpacity: rTrajectoryOpacity(),
|
|
783
797
|
panelOpacity: rPanelOpacity(),
|
|
784
798
|
producedOpacity: rProducedOpacity(),
|
|
785
|
-
headerOpacity: rHeaderOpacity()
|
|
799
|
+
headerOpacity: rHeaderOpacity(),
|
|
800
|
+
headerBarOpacity: rHeaderBarOpacity()
|
|
786
801
|
};
|
|
787
802
|
}
|
|
788
803
|
/** Apply an appearance snapshot onto cfg (meta fields untouched). */
|
|
@@ -805,6 +820,7 @@ window.__ModuleLoader__.load({
|
|
|
805
820
|
cfg.panelOpacity = clamp01(ap.panelOpacity, DEFAULT_CONFIG.panelOpacity);
|
|
806
821
|
cfg.producedOpacity = clamp01(ap.producedOpacity, DEFAULT_CONFIG.producedOpacity);
|
|
807
822
|
cfg.headerOpacity = clamp01(ap.headerOpacity, DEFAULT_CONFIG.headerOpacity);
|
|
823
|
+
cfg.headerBarOpacity = clamp01(ap.headerBarOpacity, DEFAULT_CONFIG.headerBarOpacity);
|
|
808
824
|
}
|
|
809
825
|
const num = (n, def) => typeof n === "number" ? n : def;
|
|
810
826
|
const cl = (n, lo, hi, def) => typeof n === "number" ? Math.min(hi, Math.max(lo, n)) : def;
|
|
@@ -839,7 +855,8 @@ window.__ModuleLoader__.load({
|
|
|
839
855
|
trajectoryOpacity: clamp01(ac.trajectoryOpacity, DEFAULT_CONFIG.trajectoryOpacity),
|
|
840
856
|
panelOpacity: clamp01(ac.panelOpacity, DEFAULT_CONFIG.panelOpacity),
|
|
841
857
|
producedOpacity: clamp01(ac.producedOpacity, DEFAULT_CONFIG.producedOpacity),
|
|
842
|
-
headerOpacity: clamp01(ac.headerOpacity, DEFAULT_CONFIG.headerOpacity)
|
|
858
|
+
headerOpacity: clamp01(ac.headerOpacity, DEFAULT_CONFIG.headerOpacity),
|
|
859
|
+
headerBarOpacity: clamp01(ac.headerBarOpacity, DEFAULT_CONFIG.headerBarOpacity)
|
|
843
860
|
}
|
|
844
861
|
});
|
|
845
862
|
}
|
|
@@ -905,7 +922,8 @@ window.__ModuleLoader__.load({
|
|
|
905
922
|
"input",
|
|
906
923
|
"panel",
|
|
907
924
|
"produced",
|
|
908
|
-
"header"
|
|
925
|
+
"header",
|
|
926
|
+
"headerBar"
|
|
909
927
|
]) blurs[k] = num(bl[k], DEFAULT_CONFIG.blurs[k]);
|
|
910
928
|
const bgType = [
|
|
911
929
|
"video",
|
|
@@ -949,6 +967,7 @@ window.__ModuleLoader__.load({
|
|
|
949
967
|
panelOpacity: clamp01(c.panelOpacity, DEFAULT_CONFIG.panelOpacity),
|
|
950
968
|
producedOpacity: clamp01(c.producedOpacity, DEFAULT_CONFIG.producedOpacity),
|
|
951
969
|
headerOpacity: clamp01(c.headerOpacity, DEFAULT_CONFIG.headerOpacity),
|
|
970
|
+
headerBarOpacity: clamp01(c.headerBarOpacity, DEFAULT_CONFIG.headerBarOpacity),
|
|
952
971
|
profiles: adoptProfiles(c.profiles),
|
|
953
972
|
rotation: adoptRotation(c.rotation),
|
|
954
973
|
schedule: adoptSchedule(c.schedule),
|
|
@@ -999,7 +1018,9 @@ window.__ModuleLoader__.load({
|
|
|
999
1018
|
* a row then reports `exact` instead of `line`, and no new folder appears.
|
|
1000
1019
|
* Rows may ALSO share a patch line while carrying different channels, which is
|
|
1001
1020
|
* how a line says "the facts changed halfway through it" (`0.1.7-alpha.2` and
|
|
1002
|
-
* `0.1.7-rc.1` speak for `0.1.7-alpha`, `0.1.7-rc.2` opens `0.1.7-rc
|
|
1021
|
+
* `0.1.7-rc.1` speak for `0.1.7-alpha`, `0.1.7-rc.2` opens `0.1.7-rc`, and
|
|
1022
|
+
* `0.2.0-rc.2` opens a second answer on a line that had one — see the note on
|
|
1023
|
+
* `HostChannel` for why that row is keyed to the build).
|
|
1003
1024
|
* Adding an ADAPTER means adding a channel plus a folder in
|
|
1004
1025
|
* `client/host-compat/versions/`. */
|
|
1005
1026
|
const SUPPORTED_RELEASES = [
|
|
@@ -1026,6 +1047,14 @@ window.__ModuleLoader__.load({
|
|
|
1026
1047
|
{
|
|
1027
1048
|
channel: "0.2.0-rc",
|
|
1028
1049
|
release: "0.2.0-rc.1"
|
|
1050
|
+
},
|
|
1051
|
+
{
|
|
1052
|
+
channel: "0.2.0-rc.2",
|
|
1053
|
+
release: "0.2.0-rc.2"
|
|
1054
|
+
},
|
|
1055
|
+
{
|
|
1056
|
+
channel: "0.2.1-alpha",
|
|
1057
|
+
release: "0.2.1-alpha.1"
|
|
1029
1058
|
}
|
|
1030
1059
|
];
|
|
1031
1060
|
const UNKNOWN_HOST_INFO = {
|
|
@@ -1148,6 +1177,40 @@ window.__ModuleLoader__.load({
|
|
|
1148
1177
|
* PRODUCED slider (0.3.2): a conversation artifact that happens to open in a
|
|
1149
1178
|
* panel, not a page column — so it fades and frosts with the produced surfaces. */
|
|
1150
1179
|
const BETTER_SIDEBAR_PANEL = "[data-dsh-bottom-panel]";
|
|
1180
|
+
/** The cards that take the composer seat away from the input bar: approval
|
|
1181
|
+
* (`ui-approval`), plan review and the question composer (`ui-user-questions`).
|
|
1182
|
+
* They are siblings of `[data-composer-card]`, not its children — the seat
|
|
1183
|
+
* renders the elected takeover beside the fallback bar (verified per tag in
|
|
1184
|
+
* `ConversationContent.tsx` and both packages' `slots.inject('conversation.composer')`)
|
|
1185
|
+
* — and each paints the capsule's own `--dsw-specific-input-major`, from
|
|
1186
|
+
* `dsh-v0.1.5-rc.2` through `dsh-v0.2.1-alpha.1`.
|
|
1187
|
+
*
|
|
1188
|
+
* The marker sits on the wrapper, the fill on its child card:
|
|
1189
|
+
* `[data-approval-key] > div`, `[data-plan-review-key] > section`,
|
|
1190
|
+
* `[data-question-key] > section`.
|
|
1191
|
+
*
|
|
1192
|
+
* One more fact these three share, and it is the reason the input-frost
|
|
1193
|
+
* treatment for them lives in a runtime pass instead of a stylesheet rule:
|
|
1194
|
+
* NO release in range declares `position` on any of the three cards (checked
|
|
1195
|
+
* per tag — 0 hits for `position:` in `ApprovalPanel.module.css`,
|
|
1196
|
+
* `PlanReviewPanel.module.css` and `QuestionComposer.module.css`), so unlike
|
|
1197
|
+
* the fallback capsule — whose `.card` is `position:relative` on every tag —
|
|
1198
|
+
* the host does not hand the plugin a containing block to mount a
|
|
1199
|
+
* `z-index:-1` underlay on. Writing that `position` from the plugin's own
|
|
1200
|
+
* stylesheet turns the card's box into a cascade race with anything else that
|
|
1201
|
+
* positions it: a host build that caps the card with a percentage
|
|
1202
|
+
* `max-height` loses its absolute containing block the moment a plugin rule
|
|
1203
|
+
* wins that race, and the whole chain collapses — content outside the card,
|
|
1204
|
+
* buttons off the viewport (dsh-any-background issue #24). The consumer that
|
|
1205
|
+
* needs the containing block (`applyTakeoverFrost`) therefore probes each card
|
|
1206
|
+
* at runtime and only anchors a box whose computed position is `static`; see
|
|
1207
|
+
* `inputBlurRule`. */
|
|
1208
|
+
const COMPOSER_TAKEOVER_CARD = "[data-approval-key]>div,[data-plan-review-key]>section,[data-question-key]>section";
|
|
1209
|
+
/** The takeover cards' free-text answer field — only the question composer has
|
|
1210
|
+
* one (approval and plan review are button rows). Form controls do not inherit
|
|
1211
|
+
* text properties, so the stroke group needs the editor spelled out; appending
|
|
1212
|
+
* a suffix to `COMPOSER_TAKEOVER_CARD` would bind to its LAST arm only. */
|
|
1213
|
+
const COMPOSER_TAKEOVER_EDITOR = "[data-question-key]>section textarea";
|
|
1151
1214
|
/** Every surface the panel opacity slider owns — the host's own right Sidebar.
|
|
1152
1215
|
* Layout-neutral token re-scope. (The dsh-better-sidebar workbench used to be
|
|
1153
1216
|
* listed here; it moved to the produced group, see `PRODUCED_RULE`.) */
|
|
@@ -1254,6 +1317,23 @@ window.__ModuleLoader__.load({
|
|
|
1254
1317
|
* `ScheduleCatalogAction`, the subagent lineage, `TeamAction`, `CordisPanel`,
|
|
1255
1318
|
* `MenuSurface` itself) — re-declaring the token reaches the frost whoever ends up
|
|
1256
1319
|
* applying it, and does not depend on any element being the painting element.
|
|
1320
|
+
*
|
|
1321
|
+
* `dsh-v0.2.0-rc.2` (npm `latest`) and `dsh-v0.2.1-alpha.1`: the layer and the frost
|
|
1322
|
+
* are the same files — `MenuSurface.tsx` and `MenuSurface.module.css` are
|
|
1323
|
+
* byte-identical to rc.1, and every `--dsw-menu-backdrop-filter` consumer is too —
|
|
1324
|
+
* but the sticky GROUP HEADING inside those menus changed owner. Through rc.1 the
|
|
1325
|
+
* only grouped menu was `ModelSelect`, whose own stylesheet painted that heading
|
|
1326
|
+
* from the menu token (`ModelSelect.module.css` `.groupTitle{position:sticky;
|
|
1327
|
+
* background:var(--dsw-specific-menu)}`), so the card slider drove it and a picked
|
|
1328
|
+
* wallpaper color tinted it. At rc.2 the rule is deleted and both grouped popups
|
|
1329
|
+
* (`ModelSelect`, `PopupSelectView`) render the new `ui-primitives/MenuGroup.tsx`,
|
|
1330
|
+
* whose heading stays transparent until `data-stuck` and then paints
|
|
1331
|
+
* `--dsw-alias-menu-group-header-fill` (light `rgba(248,249,250,.94)`, dark
|
|
1332
|
+
* `rgba(48,49,54,.94)`, declared in the `body` blocks of `design-platform.css`).
|
|
1333
|
+
* The surface did not go away — its token was RENAMED, and `ModelSelect.module.css`
|
|
1334
|
+
* is the one `--dsw-specific-menu` consumer that disappears at rc.2. Left alone, it
|
|
1335
|
+
* is the single menu element the fade no longer reaches: an untinted, near-opaque
|
|
1336
|
+
* band sitting on top of every row in the list the moment that list scrolls.
|
|
1257
1337
|
*/
|
|
1258
1338
|
/** The answer for the releases whose menus paint themselves: `0.1.5-rc`,
|
|
1259
1339
|
* `0.1.6-alpha`, `0.1.7-alpha`. The unresolved bucket is its own variant below. */
|
|
@@ -1272,6 +1352,28 @@ window.__ModuleLoader__.load({
|
|
|
1272
1352
|
fillTokens: [MENU_FILL_TOKEN, "--dsw-menu-surface-fill"],
|
|
1273
1353
|
frostDecl: (value) => `--dsw-menu-backdrop-filter:${value}`
|
|
1274
1354
|
};
|
|
1355
|
+
/** The fill the sticky group heading of a shared menu paints from — `MenuGroup`'s
|
|
1356
|
+
* own contribution to the menu's look, first emitted at `0.2.0-rc.2`. */
|
|
1357
|
+
const MENU_GROUP_HEADER_FILL_TOKEN = "--dsw-alias-menu-group-header-fill";
|
|
1358
|
+
/** The answer for `0.2.0-rc` from `0.2.0-rc.2` and for `0.2.1-alpha`: everything
|
|
1359
|
+
* `LAYERED_MENU_SURFACE` says, plus the heading `MenuGroup` renamed.
|
|
1360
|
+
*
|
|
1361
|
+
* Riding `fillTokens` rather than being left out is a decision with evidence on
|
|
1362
|
+
* both sides, so state it: the host's README calls this token "independent of the
|
|
1363
|
+
* menu material" and gives it a 94% fill while the surface layer sits at 58%/45%.
|
|
1364
|
+
* That is a choice about an OPAQUE menu. This plugin's whole product is a menu the
|
|
1365
|
+
* wallpaper shows through, and one release earlier the very same heading read the
|
|
1366
|
+
* very same token as the card it sits on — so following it keeps rc.1's contract
|
|
1367
|
+
* ("the card slider owns every layer of a menu, in the picked color") instead of
|
|
1368
|
+
* leaving an untinted stock band inside a tinted, faded card.
|
|
1369
|
+
* Compositing is on its side too: the heading stacks on the surface layer it sticks
|
|
1370
|
+
* to, so a heading and a card at the same alpha still read as a band roughly
|
|
1371
|
+
* twice-as-dense as the card (1-(1-a)²) — occluding, at the slider's level, exactly
|
|
1372
|
+
* as it did when both came from one token. */
|
|
1373
|
+
const LAYERED_MENU_SURFACE_WITH_GROUP_HEADER = {
|
|
1374
|
+
fillTokens: [...LAYERED_MENU_SURFACE.fillTokens, MENU_GROUP_HEADER_FILL_TOKEN],
|
|
1375
|
+
frostDecl: LAYERED_MENU_SURFACE.frostDecl
|
|
1376
|
+
};
|
|
1275
1377
|
/** The answer when the release could not be resolved, and neither of the two
|
|
1276
1378
|
* verified shapes can be asserted. Each half is chosen so that being on the
|
|
1277
1379
|
* wrong line costs an inert declaration rather than a wrong pixel:
|
|
@@ -1294,7 +1396,7 @@ window.__ModuleLoader__.load({
|
|
|
1294
1396
|
};
|
|
1295
1397
|
/** Session-header slot anchors present on EVERY release in range. The slot
|
|
1296
1398
|
* renderer stamps `data-slot="<key>"` unconditionally (`ui-renderer/scoped-slots.tsx`),
|
|
1297
|
-
* and all five keys are registered from 0.1.5-rc.2 through 0.2.
|
|
1399
|
+
* and all five keys are registered from 0.1.5-rc.2 through 0.2.1-alpha.1 —
|
|
1298
1400
|
* verified per tag. Adapters append the keys their own release adds. */
|
|
1299
1401
|
const BASE_HEADER_SLOT_KEYS = [
|
|
1300
1402
|
"conversation.session.header",
|
|
@@ -1337,18 +1439,18 @@ window.__ModuleLoader__.load({
|
|
|
1337
1439
|
* @module
|
|
1338
1440
|
*/
|
|
1339
1441
|
/** The wrapper carries the slide transform on this line, so it carries the blur. */
|
|
1340
|
-
function panelFragments$
|
|
1442
|
+
function panelFragments$7() {
|
|
1341
1443
|
return {
|
|
1342
1444
|
promotion: `${PANEL_WRAPPER}{position:fixed!important;z-index:26!important}${PANEL_FULLSCREEN}{z-index:40!important}`,
|
|
1343
1445
|
blur: panelBlurRule(PANEL_WRAPPER)
|
|
1344
1446
|
};
|
|
1345
1447
|
}
|
|
1346
|
-
function createAdapter$
|
|
1448
|
+
function createAdapter$7(host) {
|
|
1347
1449
|
return {
|
|
1348
1450
|
id: "0.1.5-rc.2/rc.3",
|
|
1349
1451
|
channel: "0.1.5-rc",
|
|
1350
1452
|
host,
|
|
1351
|
-
panelFragments: panelFragments$
|
|
1453
|
+
panelFragments: panelFragments$7,
|
|
1352
1454
|
pluginPageRule: "",
|
|
1353
1455
|
menus: LEGACY_MENU_SURFACE,
|
|
1354
1456
|
surface: {
|
|
@@ -1418,18 +1520,18 @@ window.__ModuleLoader__.load({
|
|
|
1418
1520
|
const m = /^alpha\.(\d+)$/.exec(pre);
|
|
1419
1521
|
return m === null || Number(m[1]) >= 2;
|
|
1420
1522
|
}
|
|
1421
|
-
function panelFragments$
|
|
1523
|
+
function panelFragments$6() {
|
|
1422
1524
|
return {
|
|
1423
1525
|
promotion: `${PANEL_WRAPPER}{position:fixed!important;z-index:26!important}${PANEL_FULLSCREEN}{z-index:40!important}`,
|
|
1424
1526
|
blur: panelBlurRule(PANEL_WRAPPER)
|
|
1425
1527
|
};
|
|
1426
1528
|
}
|
|
1427
|
-
function createAdapter$
|
|
1529
|
+
function createAdapter$6(host) {
|
|
1428
1530
|
return {
|
|
1429
1531
|
id: "0.1.6-alpha.1/alpha.2",
|
|
1430
1532
|
channel: "0.1.6-alpha",
|
|
1431
1533
|
host,
|
|
1432
|
-
panelFragments: panelFragments$
|
|
1534
|
+
panelFragments: panelFragments$6,
|
|
1433
1535
|
pluginPageRule: hasPluginManagerPage(host.version) ? PLUGIN_PAGE_FROST_RULE : "",
|
|
1434
1536
|
menus: LEGACY_MENU_SURFACE,
|
|
1435
1537
|
surface: {
|
|
@@ -1514,18 +1616,18 @@ window.__ModuleLoader__.load({
|
|
|
1514
1616
|
*
|
|
1515
1617
|
* @module
|
|
1516
1618
|
*/
|
|
1517
|
-
function panelFragments$
|
|
1619
|
+
function panelFragments$5() {
|
|
1518
1620
|
return {
|
|
1519
1621
|
promotion: "",
|
|
1520
1622
|
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1521
1623
|
};
|
|
1522
1624
|
}
|
|
1523
|
-
function createAdapter$
|
|
1625
|
+
function createAdapter$5(host) {
|
|
1524
1626
|
return {
|
|
1525
1627
|
id: "0.1.7-alpha.1/alpha.2/rc.1",
|
|
1526
1628
|
channel: "0.1.7-alpha",
|
|
1527
1629
|
host,
|
|
1528
|
-
panelFragments: panelFragments$
|
|
1630
|
+
panelFragments: panelFragments$5,
|
|
1529
1631
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1530
1632
|
menus: LEGACY_MENU_SURFACE,
|
|
1531
1633
|
surface: {
|
|
@@ -1584,18 +1686,18 @@ window.__ModuleLoader__.load({
|
|
|
1584
1686
|
*
|
|
1585
1687
|
* @module
|
|
1586
1688
|
*/
|
|
1587
|
-
function panelFragments$
|
|
1689
|
+
function panelFragments$4() {
|
|
1588
1690
|
return {
|
|
1589
1691
|
promotion: "",
|
|
1590
1692
|
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1591
1693
|
};
|
|
1592
1694
|
}
|
|
1593
|
-
function createAdapter$
|
|
1695
|
+
function createAdapter$4(host) {
|
|
1594
1696
|
return {
|
|
1595
1697
|
id: "0.1.7-rc.2",
|
|
1596
1698
|
channel: "0.1.7-rc",
|
|
1597
1699
|
host,
|
|
1598
|
-
panelFragments: panelFragments$
|
|
1700
|
+
panelFragments: panelFragments$4,
|
|
1599
1701
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1600
1702
|
menus: LAYERED_MENU_SURFACE,
|
|
1601
1703
|
surface: {
|
|
@@ -1658,18 +1760,18 @@ window.__ModuleLoader__.load({
|
|
|
1658
1760
|
*
|
|
1659
1761
|
* @module
|
|
1660
1762
|
*/
|
|
1661
|
-
function panelFragments$
|
|
1763
|
+
function panelFragments$3() {
|
|
1662
1764
|
return {
|
|
1663
1765
|
promotion: "",
|
|
1664
1766
|
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1665
1767
|
};
|
|
1666
1768
|
}
|
|
1667
|
-
function createAdapter$
|
|
1769
|
+
function createAdapter$3(host) {
|
|
1668
1770
|
return {
|
|
1669
1771
|
id: "0.2.0-rc.1",
|
|
1670
1772
|
channel: "0.2.0-rc",
|
|
1671
1773
|
host,
|
|
1672
|
-
panelFragments: panelFragments$
|
|
1774
|
+
panelFragments: panelFragments$3,
|
|
1673
1775
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1674
1776
|
menus: LAYERED_MENU_SURFACE,
|
|
1675
1777
|
surface: {
|
|
@@ -1679,6 +1781,144 @@ window.__ModuleLoader__.load({
|
|
|
1679
1781
|
};
|
|
1680
1782
|
}
|
|
1681
1783
|
//#endregion
|
|
1784
|
+
//#region src/client/host-compat/versions/v0-2-0-rc-2/adapter.ts
|
|
1785
|
+
/**
|
|
1786
|
+
* Adapter for the DSH `0.2.0-rc` line from `0.2.0-rc.2` on, verified at `0.2.0-rc.2`.
|
|
1787
|
+
*
|
|
1788
|
+
* The first case where one patch line AND one prerelease channel carry two
|
|
1789
|
+
* answers, so this folder opens a second channel (see the note on `HostChannel`).
|
|
1790
|
+
* What it took was one renamed token, and it is a menu token, which is the class of
|
|
1791
|
+
* fact this table exists for:
|
|
1792
|
+
*
|
|
1793
|
+
* · `ui-primitives/src/MenuGroup.tsx` + `.module.css` are NEW at rc.2 and the
|
|
1794
|
+
* headings of both grouped popups (`ModelSelect`, `PopupSelectView`) now come
|
|
1795
|
+
* from them. `ModelSelect.module.css` loses `.groupTitle{background:var(
|
|
1796
|
+
* --dsw-specific-menu)}` in the same breath — the sticky heading's paint moved
|
|
1797
|
+
* to `--dsw-alias-menu-group-header-fill`, a token that does not exist before
|
|
1798
|
+
* this tag (`git grep` at `0.1.7-rc.2` and `0.2.0-rc.1`: absent). Hence
|
|
1799
|
+
* `LAYERED_MENU_SURFACE_WITH_GROUP_HEADER` rather than the rc.1 constant: the
|
|
1800
|
+
* old claim set stayed true, it just stopped covering one element.
|
|
1801
|
+
* · the rest of the menu layer is the same code — `MenuSurface.tsx` and
|
|
1802
|
+
* `MenuSurface.module.css` are byte-identical to `0.2.0-rc.1`, and so is every
|
|
1803
|
+
* consumer of `--dsw-menu-backdrop-filter`.
|
|
1804
|
+
*
|
|
1805
|
+
* Also verified at this tag, and NOT a reason for a folder of its own:
|
|
1806
|
+
* · `SidebarRight.module.css` and `ui-dockkit/src/components/TabLayout.tsx` are
|
|
1807
|
+
* unchanged, so the panel is still a stationary frame whose dockkit children
|
|
1808
|
+
* slide (`panelBlurRule(DOCKKIT_SLIDERS)`, no promotion).
|
|
1809
|
+
* · the five `conversation.session.header*` slot keys, and still no `…leading`.
|
|
1810
|
+
* · `PluginManagerPage.tsx` still emits `section[data-plugin-panel]` with the card
|
|
1811
|
+
* `ul` under `[data-plugin-scope]` and `[data-plugin-loading]`.
|
|
1812
|
+
* · `TextShimmer` keeps the rc.1 shape (`data-shimmer`), so the stroke exemption
|
|
1813
|
+
* stands as written.
|
|
1814
|
+
*
|
|
1815
|
+
* What moved that reached this plugin WITHOUT a version branch, because the host
|
|
1816
|
+
* wrote it as a chain with a fallback:
|
|
1817
|
+
* · `TurnTriggerNodeView.module.css` now fills from
|
|
1818
|
+
* `var(--dsw-alias-turn-trigger-bg, var(--dsw-alias-markdown-code-block))` and
|
|
1819
|
+
* hovers with `var(--dsw-alias-turn-trigger-bg-hover, var(--dsw-alias-interactive-bg-hover))`,
|
|
1820
|
+
* both aliases declared in `design-platform.css` at this tag. The produced
|
|
1821
|
+
* slider's arm reads the SAME chain (see `PRODUCED_RULE`), so older hosts take
|
|
1822
|
+
* the fallback and this one takes the new alias — without any release test. That
|
|
1823
|
+
* matters here rather than being pedantry: dark mode repoints the alias at
|
|
1824
|
+
* `--dsw-alias-interactive-bg-hover`, so an arm still mixing on the code-block
|
|
1825
|
+
* token would keep overriding the row with the OLD color and the row would stop
|
|
1826
|
+
* tracking its own hover.
|
|
1827
|
+
*
|
|
1828
|
+
* @module
|
|
1829
|
+
*/
|
|
1830
|
+
function panelFragments$2() {
|
|
1831
|
+
return {
|
|
1832
|
+
promotion: "",
|
|
1833
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1834
|
+
};
|
|
1835
|
+
}
|
|
1836
|
+
function createAdapter$2(host) {
|
|
1837
|
+
return {
|
|
1838
|
+
id: "0.2.0-rc.2",
|
|
1839
|
+
channel: "0.2.0-rc.2",
|
|
1840
|
+
host,
|
|
1841
|
+
panelFragments: panelFragments$2,
|
|
1842
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1843
|
+
menus: LAYERED_MENU_SURFACE_WITH_GROUP_HEADER,
|
|
1844
|
+
surface: {
|
|
1845
|
+
ownsSidebarGuideSurface: true,
|
|
1846
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1847
|
+
}
|
|
1848
|
+
};
|
|
1849
|
+
}
|
|
1850
|
+
//#endregion
|
|
1851
|
+
//#region src/client/host-compat/versions/v0-2-1-alpha-1/adapter.ts
|
|
1852
|
+
/**
|
|
1853
|
+
* Adapter for the DSH `0.2.1-alpha` line, verified at `0.2.1-alpha.1`.
|
|
1854
|
+
*
|
|
1855
|
+
* A new MINOR line opened with a prerelease, and the answer is the `0.2.0-rc.2`
|
|
1856
|
+
* folder's — which is a statement this file has to earn, because "same as the
|
|
1857
|
+
* release before" is exactly the reasoning that went wrong when `0.1.7-rc.2` moved
|
|
1858
|
+
* the menu paint. Read at the tag instead:
|
|
1859
|
+
* · `ui-theme/src/styles/design-platform.css` is BYTE-IDENTICAL to `0.2.0-rc.2`
|
|
1860
|
+
* (`git diff --numstat` empty), so every token this plugin writes — the menu
|
|
1861
|
+
* pair, the specific-menu alias, the turn-trigger chain — resolves to the same
|
|
1862
|
+
* values.
|
|
1863
|
+
* · `MenuGroup.tsx`, `MenuGroup.module.css`, `MenuSurface.tsx` and
|
|
1864
|
+
* `MenuSurface.module.css` are byte-identical too, and `MenuGroup` is still the
|
|
1865
|
+
* only consumer of `--dsw-alias-menu-group-header-fill`. That is why the menus
|
|
1866
|
+
* here answer with `LAYERED_MENU_SURFACE_WITH_GROUP_HEADER`, the same facts the
|
|
1867
|
+
* rc.2 folder checked, and not by re-typing them.
|
|
1868
|
+
* · `ui-sidebar-right/shell/SidebarRight.module.css` and
|
|
1869
|
+
* `ui-dockkit/src/components/TabLayout.tsx` unchanged (only `.tsx` service
|
|
1870
|
+
* wiring moved), so the panel stays a stationary frame with sliding dockkit
|
|
1871
|
+
* children and no promotion.
|
|
1872
|
+
* · the five `conversation.session.header*` slot keys, still no `…leading`.
|
|
1873
|
+
* · `PluginManagerPage.tsx` still emits the three anchors of the card list.
|
|
1874
|
+
* · `TextShimmer` still marks its root `data-shimmer`, so the stroke exemption
|
|
1875
|
+
* written for rc.1 stands.
|
|
1876
|
+
*
|
|
1877
|
+
* What did move, and why none of it needs a fact from this folder:
|
|
1878
|
+
*
|
|
1879
|
+
* 1. `ui-layout/AppFrame` gains a second grid row, `div.bottomRow[data-shell-bottom]`
|
|
1880
|
+
* holding the new `shell.bottom` slot, and it paints `--dsw-alias-bg-base` —
|
|
1881
|
+
* the main-background token, which `applyCustomTokensNow` already re-emits on
|
|
1882
|
+
* `body`, so the strip follows the main-bg slider with no new binding. The row
|
|
1883
|
+
* is `min-height:0` and empty unless a plugin fills the slot, so an untouched
|
|
1884
|
+
* install shows nothing. It also sits AFTER `RightbarColumn` in the frame's
|
|
1885
|
+
* children, which is the side `discoverParts()` does not count from: it anchors
|
|
1886
|
+
* on `data-rightbar-col` and reads `rightIdx-2` / `rightIdx-1`, so the sidebar
|
|
1887
|
+
* and center column are still the same two children.
|
|
1888
|
+
* 2. `ui-primitives/InlineEditor.module.css` is the new home of the inline editor's
|
|
1889
|
+
* `.editor{background:var(--dsw-alias-bg-base)}`. Same token, so the same slider
|
|
1890
|
+
* reaches it wherever the component moved to.
|
|
1891
|
+
* 3. `modules/system.ts` narrowed `claimStyles` to the tags a factory itself added
|
|
1892
|
+
* (see `ensureUiCss` for what that changed about our own sheet).
|
|
1893
|
+
* 4. `@deepseek-ai/dsh-invariants` is DELETED at this tag — `git ls-tree` shows no
|
|
1894
|
+
* `packages/runtime-diagnostics/invariants`, and the boot/app plugin loader never
|
|
1895
|
+
* looked for a plugin's `invariant` export. This plugin's no-op companion was
|
|
1896
|
+
* therefore already dead weight here, and it goes rather than claiming a peer
|
|
1897
|
+
* version for a package the host no longer ships.
|
|
1898
|
+
*
|
|
1899
|
+
* @module
|
|
1900
|
+
*/
|
|
1901
|
+
function panelFragments$1() {
|
|
1902
|
+
return {
|
|
1903
|
+
promotion: "",
|
|
1904
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1905
|
+
};
|
|
1906
|
+
}
|
|
1907
|
+
function createAdapter$1(host) {
|
|
1908
|
+
return {
|
|
1909
|
+
id: "0.2.1-alpha.1",
|
|
1910
|
+
channel: "0.2.1-alpha",
|
|
1911
|
+
host,
|
|
1912
|
+
panelFragments: panelFragments$1,
|
|
1913
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1914
|
+
menus: LAYERED_MENU_SURFACE_WITH_GROUP_HEADER,
|
|
1915
|
+
surface: {
|
|
1916
|
+
ownsSidebarGuideSurface: true,
|
|
1917
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1918
|
+
}
|
|
1919
|
+
};
|
|
1920
|
+
}
|
|
1921
|
+
//#endregion
|
|
1682
1922
|
//#region src/client/host-compat/versions/unknown/adapter.ts
|
|
1683
1923
|
/**
|
|
1684
1924
|
* Stand-in for "we could not resolve the release".
|
|
@@ -1723,11 +1963,13 @@ window.__ModuleLoader__.load({
|
|
|
1723
1963
|
//#endregion
|
|
1724
1964
|
//#region src/client/host-compat/versions/registry.ts
|
|
1725
1965
|
const ADAPTERS = {
|
|
1726
|
-
"0.1.5-rc": createAdapter$
|
|
1727
|
-
"0.1.6-alpha": createAdapter$
|
|
1728
|
-
"0.1.7-alpha": createAdapter$
|
|
1729
|
-
"0.1.7-rc": createAdapter$
|
|
1730
|
-
"0.2.0-rc": createAdapter$
|
|
1966
|
+
"0.1.5-rc": createAdapter$7,
|
|
1967
|
+
"0.1.6-alpha": createAdapter$6,
|
|
1968
|
+
"0.1.7-alpha": createAdapter$5,
|
|
1969
|
+
"0.1.7-rc": createAdapter$4,
|
|
1970
|
+
"0.2.0-rc": createAdapter$3,
|
|
1971
|
+
"0.2.0-rc.2": createAdapter$2,
|
|
1972
|
+
"0.2.1-alpha": createAdapter$1,
|
|
1731
1973
|
unknown: createAdapter
|
|
1732
1974
|
};
|
|
1733
1975
|
/** Pick the adapter for a resolved host. `host.channel` is already narrowed to
|
|
@@ -3676,6 +3918,8 @@ window.__ModuleLoader__.load({
|
|
|
3676
3918
|
for (const name of appliedTokenNames) document.body.style.removeProperty(name);
|
|
3677
3919
|
appliedTokenNames = Object.keys(tokens);
|
|
3678
3920
|
}
|
|
3921
|
+
applyHeaderBar(surfaces);
|
|
3922
|
+
applyNativeCaption(surfaces);
|
|
3679
3923
|
if (surfaces === null) {
|
|
3680
3924
|
if (!hasColor && override === "auto" && verdict === null) clearThemeTokens();
|
|
3681
3925
|
return;
|
|
@@ -3722,8 +3966,10 @@ window.__ModuleLoader__.load({
|
|
|
3722
3966
|
return `${POPOVER_MENU_SEL}{${menuFrost(CARD_BLUR_VAR)}}${POPOVER_OTHER_SEL}{${elementFrostDecl(`var(${CARD_BLUR_VAR},none)`)}}`;
|
|
3723
3967
|
}
|
|
3724
3968
|
const INPUT_FROST_CLASS = "dab-input-frost";
|
|
3969
|
+
const TAKEOVER_FROST_CLASS = "dab-takeover-frost";
|
|
3970
|
+
const TAKEOVER_POS_ATTR = "data-dab-pos-patched";
|
|
3725
3971
|
function inputBlurRule() {
|
|
3726
|
-
return `.${INPUT_FROST_CLASS} [data-composer-card]{position:relative;isolation:isolate}.${INPUT_FROST_CLASS} [data-composer-card]::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}[data-cordis-panel]{-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}[data-cordis-panel]{${menuFillDecls("var(--dsh-any-op-menu-cordis)!important")}}`;
|
|
3972
|
+
return `.${INPUT_FROST_CLASS} [data-composer-card]{position:relative;isolation:isolate}.${INPUT_FROST_CLASS} [data-composer-card]::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}.${TAKEOVER_FROST_CLASS}{isolation:isolate}.${TAKEOVER_FROST_CLASS}::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}.${TAKEOVER_FROST_CLASS}:has([role="dialog"]){isolation:auto}[data-cordis-panel]{-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}[data-cordis-panel]{${menuFillDecls("var(--dsh-any-op-menu-cordis)!important")}}`;
|
|
3727
3973
|
}
|
|
3728
3974
|
function applyInputBlur(px) {
|
|
3729
3975
|
const root = document.documentElement;
|
|
@@ -3731,8 +3977,114 @@ window.__ModuleLoader__.load({
|
|
|
3731
3977
|
else root.classList.remove(INPUT_FROST_CLASS);
|
|
3732
3978
|
if (px > 0) root.style.setProperty("--dsh-any-input-blur", `blur(${px}px)`);
|
|
3733
3979
|
else root.style.removeProperty("--dsh-any-input-blur");
|
|
3980
|
+
applyTakeoverFrost(px);
|
|
3981
|
+
}
|
|
3982
|
+
/** Carry the input frost on the seat's takeover cards (approval / plan review /
|
|
3983
|
+
* question), the capsule's siblings — see `inputBlurRule` for the recipe and
|
|
3984
|
+
* why it is attached here rather than by a stylesheet selector.
|
|
3985
|
+
*
|
|
3986
|
+
* The anchor probe is the `setBlur` guard: `position:relative` is written
|
|
3987
|
+
* inline ONLY where the host left the card `static`, and remembered with
|
|
3988
|
+
* `TAKEOVER_POS_ATTR` so clearing it is this function's job. A card a host or a
|
|
3989
|
+
* desktop shell positions itself is left exactly as it is — its own position
|
|
3990
|
+
* supplies the underlay's containing block — so no host box ever has its
|
|
3991
|
+
* position decided by this plugin's cascade (issue #24).
|
|
3992
|
+
*
|
|
3993
|
+
* Idempotent and cheap in the steady state: cards already carrying the class
|
|
3994
|
+
* (or already clear of it) are skipped without a style read. */
|
|
3995
|
+
function applyTakeoverFrost(px) {
|
|
3996
|
+
const cards = document.querySelectorAll(COMPOSER_TAKEOVER_CARD);
|
|
3997
|
+
if (px > 0) {
|
|
3998
|
+
for (const card of cards) {
|
|
3999
|
+
if (card.classList.contains(TAKEOVER_FROST_CLASS)) continue;
|
|
4000
|
+
if (getComputedStyle(card).position === "static") {
|
|
4001
|
+
card.style.position = "relative";
|
|
4002
|
+
card.setAttribute(TAKEOVER_POS_ATTR, "1");
|
|
4003
|
+
}
|
|
4004
|
+
card.classList.add(TAKEOVER_FROST_CLASS);
|
|
4005
|
+
}
|
|
4006
|
+
return;
|
|
4007
|
+
}
|
|
4008
|
+
for (const card of cards) {
|
|
4009
|
+
if (!card.classList.contains(TAKEOVER_FROST_CLASS)) continue;
|
|
4010
|
+
card.classList.remove(TAKEOVER_FROST_CLASS);
|
|
4011
|
+
if (card.getAttribute(TAKEOVER_POS_ATTR) === "1") {
|
|
4012
|
+
card.style.removeProperty("position");
|
|
4013
|
+
card.removeAttribute(TAKEOVER_POS_ATTR);
|
|
4014
|
+
}
|
|
4015
|
+
}
|
|
3734
4016
|
}
|
|
3735
4017
|
const MOBILE_HEADER_RULE = ".dsh-mobile-app-header{background:var(--dsh-any-op-bg,transparent)!important;backdrop-filter:var(--dsh-any-part-blur-global,none);-webkit-backdrop-filter:var(--dsh-any-part-blur-global,none)}";
|
|
4018
|
+
const HEADER_BAR_CLASS = "dab-header-bar";
|
|
4019
|
+
const HEADER_BAR_ANCHOR = "[data-slot^=\"conversation.session.header\"]";
|
|
4020
|
+
/** The session header bar, or null where this host has no such element. */
|
|
4021
|
+
function discoverHeaderBar() {
|
|
4022
|
+
if (centerEl === null || !document.body.contains(centerEl)) return null;
|
|
4023
|
+
const bar = centerEl.querySelector(HEADER_BAR_ANCHOR)?.closest("header");
|
|
4024
|
+
return bar instanceof HTMLElement ? bar : null;
|
|
4025
|
+
}
|
|
4026
|
+
/** The bar's paint. The variables are written by `applyHeaderBar`; the class is
|
|
4027
|
+
* only ever added when they are, so a host the plugin is not theming keeps its
|
|
4028
|
+
* own header untouched. */
|
|
4029
|
+
const HEADER_BAR_RULE = `.${HEADER_BAR_CLASS}{background:var(--dsh-any-op-header-bar,transparent)!important;backdrop-filter:var(--dsh-any-blur-header-bar,none);-webkit-backdrop-filter:var(--dsh-any-blur-header-bar,none)}`;
|
|
4030
|
+
/** Claim the bar and write its material + frost. `surfaces` arrives from the token
|
|
4031
|
+
* funnel, which already has the resolved source list; the settings sliders and the
|
|
4032
|
+
* parts pass call it without one and the sources are re-resolved here. */
|
|
4033
|
+
function applyHeaderBar(surfaces) {
|
|
4034
|
+
const base = (surfaces === void 0 ? paletteTokens() ?? readHostOpacityTokens() : surfaces)?.["--dsw-alias-bg-base"];
|
|
4035
|
+
const root = document.documentElement;
|
|
4036
|
+
discoverParts();
|
|
4037
|
+
const bar = discoverHeaderBar();
|
|
4038
|
+
if (base === void 0) {
|
|
4039
|
+
if (bar !== null) bar.classList.remove(HEADER_BAR_CLASS);
|
|
4040
|
+
root.style.removeProperty("--dsh-any-op-header-bar");
|
|
4041
|
+
root.style.removeProperty("--dsh-any-blur-header-bar");
|
|
4042
|
+
return;
|
|
4043
|
+
}
|
|
4044
|
+
root.style.setProperty("--dsh-any-op-header-bar", toRgba(base, rHeaderBarOpacity()));
|
|
4045
|
+
const px = rBlurs().headerBar;
|
|
4046
|
+
if (px > 0) root.style.setProperty("--dsh-any-blur-header-bar", `blur(${px}px)`);
|
|
4047
|
+
else root.style.removeProperty("--dsh-any-blur-header-bar");
|
|
4048
|
+
if (bar !== null) bar.classList.add(HEADER_BAR_CLASS);
|
|
4049
|
+
}
|
|
4050
|
+
const CAPTION_FRAME_CLASS = "dab-frame-caption";
|
|
4051
|
+
const WCO_PROBE_SEL = "body > span[style*=\"--dsw-specific-sidebar-fill\"]";
|
|
4052
|
+
let wcoStyleEl = null;
|
|
4053
|
+
function ensureWcoStyle() {
|
|
4054
|
+
if (wcoStyleEl?.isConnected) return wcoStyleEl;
|
|
4055
|
+
wcoStyleEl = document.createElement("style");
|
|
4056
|
+
wcoStyleEl.dataset.plugin = "dsh-any-background-wco";
|
|
4057
|
+
document.head.appendChild(wcoStyleEl);
|
|
4058
|
+
return wcoStyleEl;
|
|
4059
|
+
}
|
|
4060
|
+
/** The band's opaque material, or '' when the plugin has no theme to assert. The
|
|
4061
|
+
* sampled sidebar fill is already opaque in both source paths (the plugin's
|
|
4062
|
+
* palette builds `hsl()`, the host's own token is a static colour) — it only
|
|
4063
|
+
* misses on a host that exposes neither, and then the neutral the plugin builds
|
|
4064
|
+
* for the effective scheme stands in so the band still tracks the label ink. */
|
|
4065
|
+
function captionFill(src) {
|
|
4066
|
+
const sampled = src?.["--dsw-specific-sidebar-fill"];
|
|
4067
|
+
if (sampled !== void 0) return sampled;
|
|
4068
|
+
if (paletteTokens() === null && rBgDark() === null) return "";
|
|
4069
|
+
const dark = rScheme() === "dark";
|
|
4070
|
+
return genTokens(220, .04, dark ? .14 : .92, dark ? "dark" : "light").tokens["--dsw-specific-sidebar-fill"] ?? "";
|
|
4071
|
+
}
|
|
4072
|
+
/** Write the caption rule and mark the frame it targets. The frame is the
|
|
4073
|
+
* plugin's own discovery (`discoverParts`), not a guessed hashed class name. The
|
|
4074
|
+
* probe selector is a verified shape: an inline style that mentions the sidebar
|
|
4075
|
+
* token on a body-level span is the desktop preload's caption probe and nothing
|
|
4076
|
+
* else, so no match means no desktop caption and the rule is inert. */
|
|
4077
|
+
function applyNativeCaption(surfaces) {
|
|
4078
|
+
if (!document.documentElement.hasAttribute("data-windows-titlebar")) return;
|
|
4079
|
+
const fill = captionFill(surfaces === void 0 ? paletteTokens() ?? readHostOpacityTokens() : surfaces);
|
|
4080
|
+
const css = fill === "" ? "" : `${WCO_PROBE_SEL}{--dsw-specific-sidebar-fill:${fill}}[data-windows-titlebar] .${CAPTION_FRAME_CLASS}::before{background:${fill}!important}`;
|
|
4081
|
+
const el = ensureWcoStyle();
|
|
4082
|
+
if (el.textContent !== css) el.textContent = css;
|
|
4083
|
+
discoverParts();
|
|
4084
|
+
if (frameEl === null) return;
|
|
4085
|
+
if (css === "") frameEl.classList.remove(CAPTION_FRAME_CLASS);
|
|
4086
|
+
else frameEl.classList.add(CAPTION_FRAME_CLASS);
|
|
4087
|
+
}
|
|
3736
4088
|
/** Mirror of the bg-part blur on :root. --dsh-any-part-blur is element-scoped
|
|
3737
4089
|
* to the columns, so surfaces outside their subtree (the mobile header, or
|
|
3738
4090
|
* third-party styles) can never inherit it. */
|
|
@@ -3851,11 +4203,12 @@ window.__ModuleLoader__.load({
|
|
|
3851
4203
|
document.head.appendChild(exemptStyleEl);
|
|
3852
4204
|
return exemptStyleEl;
|
|
3853
4205
|
}
|
|
3854
|
-
const PRODUCED_RULE = `[data-code-block-content] pre,[data-code-block-banner],[data-composer-chip],[data-changed-files],[data-terminal],[data-read],[data-diff],[data-context-injection-body],[data-search],[data-web],[class*="_ioCard"],[data-inspect],[data-turn-trigger],[style*="--dsh-hover-preview-fade"],:not(pre)>code{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}[data-markdown-variant="compact"] :not(pre)>code{-webkit-backdrop-filter:none;backdrop-filter:none}${BETTER_SIDEBAR_PANEL}{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}${BETTER_SIDEBAR_PANEL}{--dsw-alias-bg-base:var(--dsh-any-prod-panel-bg-base);--dsw-alias-bg-layer-1:var(--dsh-any-prod-panel-layer-1);--dsw-alias-bg-layer-2:var(--dsh-any-prod-panel-layer-2);--dsw-alias-bg-layer-3:var(--dsh-any-prod-panel-layer-3)}@supports (background:color-mix(in srgb,red 50%,transparent)){.md-code-block{background:transparent!important}.md-code-block>div{background-color:transparent!important}.md-code-block [data-code-block-content] pre{background-color:color-mix(in srgb,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}.md-code-block [data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsw-alias-markdown-code-block-banner,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent))) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-content]{--shiki-background:color-mix(in srgb,var(--dsw-alias-markdown-code-block,var(--dsl-code-block-background,transparent)) var(--dsh-any-prod-pct,100%),transparent)}:not(pre)>code{background-color:color-mix(in srgb,var(--dsw-alias-markdown-inline-code,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-composer-chip]>*{background-color:color-mix(in srgb,var(--dsw-alias-interactive-bg-hover,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal] button{background-color:transparent!important}[data-read],[data-diff]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-read]>div:first-child:not([data-code-block-banner]),[data-diff]>div:first-child:not([data-code-block-banner]){background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block-banner,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-context-injection-body]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-inspect],[data-turn-trigger]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-turn-trigger]:hover{background-color:color-mix(in srgb,var(--dsw-alias-interactive-bg-hover,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-changed-files]>button:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child:hover{background-color:color-mix(in srgb,var(--changes-hover,var(--changes-fill,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child>span:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"]{background-color:color-mix(in srgb,var(--dsw-hovercard-bg,#2c2c2e) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"][class*="_preview"]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-search]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-web]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[class*="_ioCard"]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}}`;
|
|
4206
|
+
const PRODUCED_RULE = `[data-code-block-content] pre,[data-code-block-banner],[data-composer-chip],[data-changed-files],[data-terminal],[data-read],[data-diff],[data-context-injection-body],[data-search],[data-web],[class*="_ioCard"],[data-inspect],[data-turn-trigger],[style*="--dsh-hover-preview-fade"],:not(pre)>code{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}[data-markdown-variant="compact"] :not(pre)>code{-webkit-backdrop-filter:none;backdrop-filter:none}${BETTER_SIDEBAR_PANEL}{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}${BETTER_SIDEBAR_PANEL}{--dsw-alias-bg-base:var(--dsh-any-prod-panel-bg-base);--dsw-alias-bg-layer-1:var(--dsh-any-prod-panel-layer-1);--dsw-alias-bg-layer-2:var(--dsh-any-prod-panel-layer-2);--dsw-alias-bg-layer-3:var(--dsh-any-prod-panel-layer-3)}@supports (background:color-mix(in srgb,red 50%,transparent)){.md-code-block{background:transparent!important}.md-code-block>div{background-color:transparent!important}.md-code-block [data-code-block-content] pre{background-color:color-mix(in srgb,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}.md-code-block [data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsw-alias-markdown-code-block-banner,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent))) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-content]{--shiki-background:color-mix(in srgb,var(--dsw-alias-markdown-code-block,var(--dsl-code-block-background,transparent)) var(--dsh-any-prod-pct,100%),transparent)}:not(pre)>code{background-color:color-mix(in srgb,var(--dsw-alias-markdown-inline-code,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-composer-chip]>*{background-color:color-mix(in srgb,var(--dsw-alias-interactive-bg-hover,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal] button{background-color:transparent!important}[data-read],[data-diff]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-read]>div:first-child:not([data-code-block-banner]),[data-diff]>div:first-child:not([data-code-block-banner]){background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block-banner,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-context-injection-body]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-inspect]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-turn-trigger]{background-color:color-mix(in srgb,var(--dsw-alias-turn-trigger-bg,var(--dsw-alias-markdown-code-block,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-turn-trigger]:hover{background-color:color-mix(in srgb,var(--dsw-alias-turn-trigger-bg-hover,var(--dsw-alias-interactive-bg-hover,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-changed-files]>button:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child:hover{background-color:color-mix(in srgb,var(--changes-hover,var(--changes-fill,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child>span:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"]{background-color:color-mix(in srgb,var(--dsw-hovercard-bg,#2c2c2e) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"][class*="_preview"]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-search]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-web]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[class*="_ioCard"]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}}`;
|
|
3855
4207
|
const STROKE_RULE = [
|
|
3856
4208
|
`${SETTINGS_PANEL_SEL}{-webkit-text-stroke:var(--dsh-any-stroke-settings-w,0px) var(--dsh-any-stroke-settings-c,transparent);paint-order:stroke fill}`,
|
|
3857
4209
|
"[role=\"menu\"]:not([data-dockkit-tab-menu]),[role=\"listbox\"],body>[role=\"tree\"],body>[role=\"dialog\"]:not([aria-modal=\"true\"]){-webkit-text-stroke:var(--dsh-any-stroke-card-w,0px) var(--dsh-any-stroke-card-c,transparent);paint-order:stroke fill}",
|
|
3858
|
-
|
|
4210
|
+
`[data-composer-card],[data-cordis-panel],[data-composer-card] textarea,[data-composer-card] input,[data-composer-card] [contenteditable],[data-cordis-panel] input,[data-cordis-panel] textarea,${COMPOSER_TAKEOVER_CARD},${COMPOSER_TAKEOVER_EDITOR}{-webkit-text-stroke:var(--dsh-any-stroke-input-w,0px) var(--dsh-any-stroke-input-c,transparent);paint-order:stroke fill}`,
|
|
4211
|
+
`.${HEADER_BAR_CLASS}{-webkit-text-stroke:var(--dsh-any-stroke-headerBar-w,0px) var(--dsh-any-stroke-headerBar-c,transparent);paint-order:stroke fill}`,
|
|
3859
4212
|
`[data-chat-flow]{-webkit-text-stroke:var(--dsh-any-stroke-chat-w,0px) var(--dsh-any-stroke-chat-c,transparent);paint-order:stroke fill}`,
|
|
3860
4213
|
`[data-conversation-composer-overlay]{-webkit-text-stroke:var(--dsh-any-stroke-trajectory-w,0px) var(--dsh-any-stroke-trajectory-c,transparent);paint-order:stroke fill}`,
|
|
3861
4214
|
`[data-code-block-content] pre,[data-code-block-content],[data-code-block-banner],[data-composer-chip],:not(pre)>code,[data-changed-files],[data-terminal],[data-read],[data-diff],[data-inspect],[data-turn-trigger],[data-context-injection-body],[data-search],[data-web],[class*="_ioCard"],[style*="--dsh-hover-preview-fade"],${BETTER_SIDEBAR_PANEL}{-webkit-text-stroke:var(--dsh-any-stroke-produced-w,0px) var(--dsh-any-stroke-produced-c,transparent);paint-order:stroke fill}`,
|
|
@@ -3876,7 +4229,8 @@ window.__ModuleLoader__.load({
|
|
|
3876
4229
|
"input",
|
|
3877
4230
|
"panel",
|
|
3878
4231
|
"produced",
|
|
3879
|
-
"header"
|
|
4232
|
+
"header",
|
|
4233
|
+
"headerBar"
|
|
3880
4234
|
];
|
|
3881
4235
|
/** Resolve one group's stroke color key into a concrete CSS color.
|
|
3882
4236
|
* 'auto' contrasts the FONT direction (white fonts → black stroke and vice
|
|
@@ -4078,7 +4432,7 @@ window.__ModuleLoader__.load({
|
|
|
4078
4432
|
if (px > 0) document.documentElement.style.setProperty("--dsh-any-blur-panel", `blur(${px}px)`);
|
|
4079
4433
|
else document.documentElement.style.removeProperty("--dsh-any-blur-panel");
|
|
4080
4434
|
}
|
|
4081
|
-
const PLACEHOLDER_RULE =
|
|
4435
|
+
const PLACEHOLDER_RULE = `[data-composer-card] textarea::placeholder,[data-composer-card] input::placeholder,[data-composer-card] [contenteditable]::placeholder,[data-cordis-panel] input::placeholder,[data-cordis-panel] textarea::placeholder,${COMPOSER_TAKEOVER_EDITOR}::placeholder,.dab-input::placeholder,.dab-input textarea::placeholder,.dab-input input::placeholder{color:var(--dsh-any-placeholder,var(--dsw-alias-label-caption,#8a8f98))!important;font-style:italic;opacity:.85}`;
|
|
4082
4436
|
/** Re-scope one surface group's layer tokens onto plugin-owned variables so a
|
|
4083
4437
|
* dedicated slider owns its alpha (the host has no per-surface opacity). The
|
|
4084
4438
|
* settings group additionally retints its dialog surface variable. Always
|
|
@@ -4333,6 +4687,8 @@ window.__ModuleLoader__.load({
|
|
|
4333
4687
|
applyPanelBlur(blurs.panel);
|
|
4334
4688
|
applyProduced();
|
|
4335
4689
|
applyHeaderPopovers();
|
|
4690
|
+
applyHeaderBar();
|
|
4691
|
+
applyNativeCaption();
|
|
4336
4692
|
applyViewCards();
|
|
4337
4693
|
}
|
|
4338
4694
|
/** Produced/artifact surfaces (conversation code blocks + their banner +
|
|
@@ -4383,6 +4739,10 @@ window.__ModuleLoader__.load({
|
|
|
4383
4739
|
applyHeaderPopovers();
|
|
4384
4740
|
return;
|
|
4385
4741
|
}
|
|
4742
|
+
if (part === "headerBar") {
|
|
4743
|
+
applyHeaderBar();
|
|
4744
|
+
return;
|
|
4745
|
+
}
|
|
4386
4746
|
if (part === "chat" || part === "trajectory") {
|
|
4387
4747
|
applyViewCards();
|
|
4388
4748
|
return;
|
|
@@ -4634,6 +4994,17 @@ window.__ModuleLoader__.load({
|
|
|
4634
4994
|
function columnsPresent() {
|
|
4635
4995
|
return frameEl !== null && sidebarEl !== null && centerEl !== null && rightEl !== null && document.body.contains(frameEl) && document.body.contains(centerEl);
|
|
4636
4996
|
}
|
|
4997
|
+
/** The composer seat's elected takeover card (approval / plan review / question)
|
|
4998
|
+
* when one is mounted. It is not a view, but it shares the view cards' problem:
|
|
4999
|
+
* the host mounts a fresh element when a takeover is elected, and the pass
|
|
5000
|
+
* signature alone would skip that pass — `applyTakeoverFrost` rides
|
|
5001
|
+
* `applyInputBlur` — leaving the new card bare until a slider moves. Scoped to
|
|
5002
|
+
* the center column exactly like the view markers, because this query runs on
|
|
5003
|
+
* every coalesced mutation burst, including token streaming. */
|
|
5004
|
+
function probeTakeoverCard() {
|
|
5005
|
+
if (centerEl === null || !document.body.contains(centerEl)) return null;
|
|
5006
|
+
return centerEl.querySelector(COMPOSER_TAKEOVER_CARD);
|
|
5007
|
+
}
|
|
4637
5008
|
/** Snapshot of every surface the pass would style, for the identity check. */
|
|
4638
5009
|
function targetsNow() {
|
|
4639
5010
|
return [
|
|
@@ -4641,7 +5012,8 @@ window.__ModuleLoader__.load({
|
|
|
4641
5012
|
sidebarEl,
|
|
4642
5013
|
centerEl,
|
|
4643
5014
|
rightEl,
|
|
4644
|
-
...viewTargets
|
|
5015
|
+
...viewTargets,
|
|
5016
|
+
probeTakeoverCard()
|
|
4645
5017
|
];
|
|
4646
5018
|
}
|
|
4647
5019
|
/** Watch for the AppFrame mounting so persisted blurs land even when the shell
|
|
@@ -5027,6 +5399,13 @@ window.__ModuleLoader__.load({
|
|
|
5027
5399
|
if (name) document.documentElement.style.removeProperty(name);
|
|
5028
5400
|
}
|
|
5029
5401
|
document.documentElement.classList.remove(INPUT_FROST_CLASS);
|
|
5402
|
+
applyTakeoverFrost(0);
|
|
5403
|
+
document.documentElement.style.removeProperty("--dsh-any-op-header-bar");
|
|
5404
|
+
document.documentElement.style.removeProperty("--dsh-any-blur-header-bar");
|
|
5405
|
+
document.querySelectorAll(`.${HEADER_BAR_CLASS}`).forEach((el) => el.classList.remove(HEADER_BAR_CLASS));
|
|
5406
|
+
frameEl?.classList.remove(CAPTION_FRAME_CLASS);
|
|
5407
|
+
wcoStyleEl?.remove();
|
|
5408
|
+
wcoStyleEl = null;
|
|
5030
5409
|
document.documentElement.style.removeProperty("--dsh-any-blur-panel");
|
|
5031
5410
|
document.documentElement.style.removeProperty("--dsh-any-blur-prod");
|
|
5032
5411
|
document.documentElement.style.removeProperty("--dsh-any-prod-pct");
|
|
@@ -5119,7 +5498,7 @@ window.__ModuleLoader__.load({
|
|
|
5119
5498
|
function buildStaticStyles() {
|
|
5120
5499
|
const adapter = rHostAdapter();
|
|
5121
5500
|
const panel = adapter.panelFragments();
|
|
5122
|
-
return DARK_GRADIENT + FRAME_CLEAR_RULE + SETTINGS_STYLE_RULE + popoverBlurRule() + TRAJECTORY_STYLE_RULE + inputBlurRule() + MOBILE_HEADER_RULE + PANEL_TOKEN_RULE + panel.promotion + panel.blur + adapter.pluginPageRule + PRODUCED_RULE + STROKE_RULE + headerPopoverRule() + exemptDefaultRule() + PLACEHOLDER_RULE;
|
|
5501
|
+
return DARK_GRADIENT + FRAME_CLEAR_RULE + SETTINGS_STYLE_RULE + popoverBlurRule() + TRAJECTORY_STYLE_RULE + inputBlurRule() + MOBILE_HEADER_RULE + HEADER_BAR_RULE + PANEL_TOKEN_RULE + panel.promotion + panel.blur + adapter.pluginPageRule + PRODUCED_RULE + STROKE_RULE + headerPopoverRule() + exemptDefaultRule() + PLACEHOLDER_RULE;
|
|
5123
5502
|
}
|
|
5124
5503
|
/** Append the plugin's stylesheet and keep it matched to the host.
|
|
5125
5504
|
* Returns a teardown for the plugin's effect scope. */
|
|
@@ -5603,6 +5982,7 @@ window.__ModuleLoader__.load({
|
|
|
5603
5982
|
if (!el) {
|
|
5604
5983
|
el = document.createElement("style");
|
|
5605
5984
|
el.id = CSS_ID;
|
|
5985
|
+
el.dataset.plugin = "dsh-any-background-ui-css";
|
|
5606
5986
|
document.head.appendChild(el);
|
|
5607
5987
|
}
|
|
5608
5988
|
if (el.textContent !== UI_CSS) el.textContent = UI_CSS;
|
|
@@ -5859,6 +6239,18 @@ window.__ModuleLoader__.load({
|
|
|
5859
6239
|
rx: "2"
|
|
5860
6240
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M8 6.6v2M7 8h2" })]
|
|
5861
6241
|
});
|
|
6242
|
+
/** Session header bar: a window with its title band above the content. */
|
|
6243
|
+
const HeaderBarIcon = ({ size, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Glyph, {
|
|
6244
|
+
size,
|
|
6245
|
+
className,
|
|
6246
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
6247
|
+
x: "2.2",
|
|
6248
|
+
y: "2.2",
|
|
6249
|
+
width: "11.6",
|
|
6250
|
+
height: "11.6",
|
|
6251
|
+
rx: "2"
|
|
6252
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M2.2 5.6h11.6" })]
|
|
6253
|
+
});
|
|
5862
6254
|
const PlusIcon = ({ size, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Glyph, {
|
|
5863
6255
|
size,
|
|
5864
6256
|
className,
|
|
@@ -6885,6 +7277,11 @@ window.__ModuleLoader__.load({
|
|
|
6885
7277
|
labelKey: "uiHeader",
|
|
6886
7278
|
Icon: PanelIcon
|
|
6887
7279
|
},
|
|
7280
|
+
{
|
|
7281
|
+
isHeaderBar: true,
|
|
7282
|
+
labelKey: "uiHeaderBar",
|
|
7283
|
+
Icon: HeaderBarIcon
|
|
7284
|
+
},
|
|
6888
7285
|
{
|
|
6889
7286
|
isPanel: true,
|
|
6890
7287
|
labelKey: "uiPanelNative",
|
|
@@ -6914,11 +7311,11 @@ window.__ModuleLoader__.load({
|
|
|
6914
7311
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
6915
7312
|
className: "dab-grid-parts",
|
|
6916
7313
|
children: PARTS$1.map((part, i) => {
|
|
6917
|
-
const { labelKey, Icon, isSettings, isChat, isTrajectory, isPanel, isProduced, isHeader } = part;
|
|
7314
|
+
const { labelKey, Icon, isSettings, isChat, isTrajectory, isPanel, isProduced, isHeader, isHeaderBar } = part;
|
|
6918
7315
|
const opKey = part.opKey;
|
|
6919
7316
|
const label = t(labelKey);
|
|
6920
|
-
const blurKey = isChat ? "chat" : isTrajectory ? "trajectory" : isSettings ? "settings" : isPanel ? "panel" : isProduced ? "produced" : isHeader ? "header" : opKey;
|
|
6921
|
-
const opacity = isChat ? rChatTextOpacity() : isTrajectory ? rTrajectoryOpacity() : isSettings ? rSop() : isPanel ? rPanelOpacity() : isProduced ? rProducedOpacity() : isHeader ? rHeaderOpacity() : rOps()[opKey];
|
|
7317
|
+
const blurKey = isChat ? "chat" : isTrajectory ? "trajectory" : isSettings ? "settings" : isPanel ? "panel" : isProduced ? "produced" : isHeader ? "header" : isHeaderBar ? "headerBar" : opKey;
|
|
7318
|
+
const opacity = isChat ? rChatTextOpacity() : isTrajectory ? rTrajectoryOpacity() : isSettings ? rSop() : isPanel ? rPanelOpacity() : isProduced ? rProducedOpacity() : isHeader ? rHeaderOpacity() : isHeaderBar ? rHeaderBarOpacity() : rOps()[opKey];
|
|
6922
7319
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
6923
7320
|
className: "dab-card dab-card-hover dab-rise",
|
|
6924
7321
|
style: { "--d": i + 1 },
|
|
@@ -6967,6 +7364,9 @@ window.__ModuleLoader__.load({
|
|
|
6967
7364
|
} else if (isHeader) {
|
|
6968
7365
|
cfg.headerOpacity = op;
|
|
6969
7366
|
applyHeaderPopovers();
|
|
7367
|
+
} else if (isHeaderBar) {
|
|
7368
|
+
cfg.headerBarOpacity = op;
|
|
7369
|
+
applyHeaderBar();
|
|
6970
7370
|
} else {
|
|
6971
7371
|
const ops = { ...rOps() };
|
|
6972
7372
|
ops[opKey] = op;
|
|
@@ -6995,6 +7395,10 @@ window.__ModuleLoader__.load({
|
|
|
6995
7395
|
cfg.headerOpacity = op;
|
|
6996
7396
|
applyHeaderPopovers();
|
|
6997
7397
|
saveConfig();
|
|
7398
|
+
} else if (isHeaderBar) {
|
|
7399
|
+
cfg.headerBarOpacity = op;
|
|
7400
|
+
applyHeaderBar();
|
|
7401
|
+
saveConfig();
|
|
6998
7402
|
} else {
|
|
6999
7403
|
const ops = { ...rOps() };
|
|
7000
7404
|
ops[opKey] = op;
|
|
@@ -7075,6 +7479,11 @@ window.__ModuleLoader__.load({
|
|
|
7075
7479
|
labelKey: "uiHeader",
|
|
7076
7480
|
Icon: PanelIcon
|
|
7077
7481
|
},
|
|
7482
|
+
{
|
|
7483
|
+
key: "headerBar",
|
|
7484
|
+
labelKey: "uiHeaderBar",
|
|
7485
|
+
Icon: HeaderBarIcon
|
|
7486
|
+
},
|
|
7078
7487
|
{
|
|
7079
7488
|
key: "panel",
|
|
7080
7489
|
labelKey: "uiPanelNative",
|
|
@@ -8446,7 +8855,8 @@ window.__ModuleLoader__.load({
|
|
|
8446
8855
|
input: 0,
|
|
8447
8856
|
panel: 0,
|
|
8448
8857
|
produced: 0,
|
|
8449
|
-
header: 0
|
|
8858
|
+
header: 0,
|
|
8859
|
+
headerBar: 0
|
|
8450
8860
|
};
|
|
8451
8861
|
/** Presets ship with strokes off — text outlines are an opt-in look. Fresh
|
|
8452
8862
|
* objects per call so a profile restore can never alias another preset's
|
|
@@ -8467,7 +8877,8 @@ window.__ModuleLoader__.load({
|
|
|
8467
8877
|
input: off(),
|
|
8468
8878
|
panel: off(),
|
|
8469
8879
|
produced: off(),
|
|
8470
|
-
header: off()
|
|
8880
|
+
header: off(),
|
|
8881
|
+
headerBar: off()
|
|
8471
8882
|
};
|
|
8472
8883
|
};
|
|
8473
8884
|
const BUILTIN_PRESETS = [
|
|
@@ -8490,7 +8901,8 @@ window.__ModuleLoader__.load({
|
|
|
8490
8901
|
trajectoryOpacity: 1,
|
|
8491
8902
|
panelOpacity: 1,
|
|
8492
8903
|
producedOpacity: 1,
|
|
8493
|
-
headerOpacity: 1
|
|
8904
|
+
headerOpacity: 1,
|
|
8905
|
+
headerBarOpacity: .85
|
|
8494
8906
|
}
|
|
8495
8907
|
},
|
|
8496
8908
|
{
|
|
@@ -8525,7 +8937,8 @@ window.__ModuleLoader__.load({
|
|
|
8525
8937
|
trajectoryOpacity: .85,
|
|
8526
8938
|
panelOpacity: .85,
|
|
8527
8939
|
producedOpacity: 1,
|
|
8528
|
-
headerOpacity: 1
|
|
8940
|
+
headerOpacity: 1,
|
|
8941
|
+
headerBarOpacity: .62
|
|
8529
8942
|
}
|
|
8530
8943
|
},
|
|
8531
8944
|
{
|
|
@@ -8547,7 +8960,8 @@ window.__ModuleLoader__.load({
|
|
|
8547
8960
|
trajectoryOpacity: 1,
|
|
8548
8961
|
panelOpacity: 1,
|
|
8549
8962
|
producedOpacity: 1,
|
|
8550
|
-
headerOpacity: 1
|
|
8963
|
+
headerOpacity: 1,
|
|
8964
|
+
headerBarOpacity: .97
|
|
8551
8965
|
}
|
|
8552
8966
|
},
|
|
8553
8967
|
{
|
|
@@ -8582,7 +8996,8 @@ window.__ModuleLoader__.load({
|
|
|
8582
8996
|
trajectoryOpacity: .8,
|
|
8583
8997
|
panelOpacity: .8,
|
|
8584
8998
|
producedOpacity: 1,
|
|
8585
|
-
headerOpacity: 1
|
|
8999
|
+
headerOpacity: 1,
|
|
9000
|
+
headerBarOpacity: .5
|
|
8586
9001
|
}
|
|
8587
9002
|
},
|
|
8588
9003
|
{
|
|
@@ -8617,7 +9032,8 @@ window.__ModuleLoader__.load({
|
|
|
8617
9032
|
trajectoryOpacity: .78,
|
|
8618
9033
|
panelOpacity: .75,
|
|
8619
9034
|
producedOpacity: 1,
|
|
8620
|
-
headerOpacity: 1
|
|
9035
|
+
headerOpacity: 1,
|
|
9036
|
+
headerBarOpacity: .42
|
|
8621
9037
|
}
|
|
8622
9038
|
},
|
|
8623
9039
|
{
|
|
@@ -8643,7 +9059,8 @@ window.__ModuleLoader__.load({
|
|
|
8643
9059
|
trajectoryOpacity: 1,
|
|
8644
9060
|
panelOpacity: 1,
|
|
8645
9061
|
producedOpacity: 1,
|
|
8646
|
-
headerOpacity: 1
|
|
9062
|
+
headerOpacity: 1,
|
|
9063
|
+
headerBarOpacity: .92
|
|
8647
9064
|
}
|
|
8648
9065
|
}
|
|
8649
9066
|
];
|