dsh-any-background 0.3.2 → 0.3.4
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 +22 -43
- package/README.zh.md +24 -45
- package/lib/client.js +581 -61
- package/lib/client.js.map +1 -1
- package/lib/index.js +21 -0
- package/package.json +13 -18
- package/lib/invariant.js +0 -8
package/lib/client.js
CHANGED
|
@@ -997,6 +997,11 @@ window.__ModuleLoader__.load({
|
|
|
997
997
|
* were checked; several rows may share a `channel` when a newer build was
|
|
998
998
|
* verified as needing no change to that folder's adapter (as `0.1.7-rc.1` was) —
|
|
999
999
|
* a row then reports `exact` instead of `line`, and no new folder appears.
|
|
1000
|
+
* Rows may ALSO share a patch line while carrying different channels, which is
|
|
1001
|
+
* 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`, and
|
|
1003
|
+
* `0.2.0-rc.2` opens a second answer on a line that had one — see the note on
|
|
1004
|
+
* `HostChannel` for why that row is keyed to the build).
|
|
1000
1005
|
* Adding an ADAPTER means adding a channel plus a folder in
|
|
1001
1006
|
* `client/host-compat/versions/`. */
|
|
1002
1007
|
const SUPPORTED_RELEASES = [
|
|
@@ -1015,6 +1020,22 @@ window.__ModuleLoader__.load({
|
|
|
1015
1020
|
{
|
|
1016
1021
|
channel: "0.1.7-alpha",
|
|
1017
1022
|
release: "0.1.7-rc.1"
|
|
1023
|
+
},
|
|
1024
|
+
{
|
|
1025
|
+
channel: "0.1.7-rc",
|
|
1026
|
+
release: "0.1.7-rc.2"
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
channel: "0.2.0-rc",
|
|
1030
|
+
release: "0.2.0-rc.1"
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
channel: "0.2.0-rc.2",
|
|
1034
|
+
release: "0.2.0-rc.2"
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
channel: "0.2.1-alpha",
|
|
1038
|
+
release: "0.2.1-alpha.1"
|
|
1018
1039
|
}
|
|
1019
1040
|
];
|
|
1020
1041
|
const UNKNOWN_HOST_INFO = {
|
|
@@ -1127,37 +1148,6 @@ window.__ModuleLoader__.load({
|
|
|
1127
1148
|
}
|
|
1128
1149
|
//#endregion
|
|
1129
1150
|
//#region src/client/host-compat/versions/shared.ts
|
|
1130
|
-
/**
|
|
1131
|
-
* Selector + declaration vocabulary shared by every per-version adapter.
|
|
1132
|
-
*
|
|
1133
|
-
* These are the ANCHORS, not the decisions. What varies between releases (which
|
|
1134
|
-
* element slides, whether the panel needs promoting, which header slot keys
|
|
1135
|
-
* exist) is answered in the version folders; what is stable across all of them
|
|
1136
|
-
* lives here so no adapter has to re-type a host selector and get it subtly wrong.
|
|
1137
|
-
*
|
|
1138
|
-
* Verified against the harness release tags (dsh-v0.1.5-rc.2 … dsh-v0.1.7-rc.1),
|
|
1139
|
-
* not inferred:
|
|
1140
|
-
* · `[data-sidebar-right-panel]` — emitted by `ui-sidebar-right/shell/SidebarRight.tsx`
|
|
1141
|
-
* on every release in range, with values `push` | `fullscreen`.
|
|
1142
|
-
* · `[data-dockkit-host]` / `[data-dockkit-empty]` — emitted ONLY by
|
|
1143
|
-
* `ui-dockkit/components/TabLayout.tsx`, a file that first appears at
|
|
1144
|
-
* 0.1.7-alpha.1. Dockkit itself EXISTS earlier (its `TabMenu` carries
|
|
1145
|
-
* `[data-dockkit-tab-menu]` on every release), so only these two attributes
|
|
1146
|
-
* are the 0.1.7 marker — never test "is dockkit installed".
|
|
1147
|
-
* · `[data-dsh-bottom-panel]` — the optional dsh-better-sidebar workbench, not
|
|
1148
|
-
* a host element at all. It is a single element on every release, which is
|
|
1149
|
-
* why it needs no version arm.
|
|
1150
|
-
* · `[data-plugin-panel]` / `[data-plugin-scope] > ul` — emitted by
|
|
1151
|
-
* `ui-plugin-manager/src/client/PluginManagerPage.tsx`. That package is NEW AT
|
|
1152
|
-
* 0.1.6-alpha.2: `git ls-tree` shows it absent from 0.1.5-rc.2, 0.1.5-rc.3 and
|
|
1153
|
-
* 0.1.6-alpha.1, where the plugin list lived in `ui-settings-plugin-inventory`
|
|
1154
|
-
* under `[data-plugin-scope]` alone — no `[data-plugin-panel]`, and no card
|
|
1155
|
-
* `ul` in that group either. From alpha.2 on, the group markup (`section` →
|
|
1156
|
-
* `div.groupHead` + `ul.cards`) is byte-identical through 0.1.7-rc.1, so the
|
|
1157
|
-
* ONE rule below serves all four tags that emit the page.
|
|
1158
|
-
*
|
|
1159
|
-
* @module
|
|
1160
|
-
*/
|
|
1161
1151
|
/** The host's own right Sidebar wrapper. */
|
|
1162
1152
|
const PANEL_WRAPPER = "[data-sidebar-right-panel]";
|
|
1163
1153
|
/** The same wrapper in its fullscreen state; the host raises its own z-index to 40. */
|
|
@@ -1168,6 +1158,23 @@ window.__ModuleLoader__.load({
|
|
|
1168
1158
|
* PRODUCED slider (0.3.2): a conversation artifact that happens to open in a
|
|
1169
1159
|
* panel, not a page column — so it fades and frosts with the produced surfaces. */
|
|
1170
1160
|
const BETTER_SIDEBAR_PANEL = "[data-dsh-bottom-panel]";
|
|
1161
|
+
/** The cards that take the composer seat away from the input bar: approval
|
|
1162
|
+
* (`ui-approval`), plan review and the question composer (`ui-user-questions`).
|
|
1163
|
+
* They are siblings of `[data-composer-card]`, not its children — the seat
|
|
1164
|
+
* renders the elected takeover beside the fallback bar (verified per tag in
|
|
1165
|
+
* `ConversationContent.tsx` and both packages' `slots.inject('conversation.composer')`)
|
|
1166
|
+
* — and each paints the capsule's own `--dsw-specific-input-major`, from
|
|
1167
|
+
* `dsh-v0.1.5-rc.2` through `dsh-v0.2.1-alpha.1`.
|
|
1168
|
+
*
|
|
1169
|
+
* The marker sits on the wrapper, the fill on its child card:
|
|
1170
|
+
* `[data-approval-key] > div`, `[data-plan-review-key] > section`,
|
|
1171
|
+
* `[data-question-key] > section`. */
|
|
1172
|
+
const COMPOSER_TAKEOVER_CARD = "[data-approval-key]>div,[data-plan-review-key]>section,[data-question-key]>section";
|
|
1173
|
+
/** The takeover cards' free-text answer field — only the question composer has
|
|
1174
|
+
* one (approval and plan review are button rows). Form controls do not inherit
|
|
1175
|
+
* text properties, so the stroke group needs the editor spelled out; appending
|
|
1176
|
+
* a suffix to `COMPOSER_TAKEOVER_CARD` would bind to its LAST arm only. */
|
|
1177
|
+
const COMPOSER_TAKEOVER_EDITOR = "[data-question-key]>section textarea";
|
|
1171
1178
|
/** Every surface the panel opacity slider owns — the host's own right Sidebar.
|
|
1172
1179
|
* Layout-neutral token re-scope. (The dsh-better-sidebar workbench used to be
|
|
1173
1180
|
* listed here; it moved to the produced group, see `PRODUCED_RULE`.) */
|
|
@@ -1192,10 +1199,19 @@ window.__ModuleLoader__.load({
|
|
|
1192
1199
|
* Which releases emit the page decides who gets this string — see `pluginPageRule`
|
|
1193
1200
|
* in each version folder.
|
|
1194
1201
|
*
|
|
1202
|
+
* The card `ul` is matched through TWO scopes. `0.2.0-rc.1` added a first-read
|
|
1203
|
+
* `ListSkeleton` that reuses `.cards` under `section[data-plugin-loading]`, so a
|
|
1204
|
+
* rule keyed on `[data-plugin-scope]` alone would show the real list frosted and
|
|
1205
|
+
* the loading list bare, then re-frost the block when the data lands. Hosts before
|
|
1206
|
+
* that never emit the attribute, so the extra selector is inert rather than a
|
|
1207
|
+
* version branch.
|
|
1208
|
+
*
|
|
1195
1209
|
* BINDING, and why it is not just "put it in the dialog": the block paints from
|
|
1196
1210
|
* `--dsh-any-bg-settings-surface` and frosts from `--dsh-any-blur-settings`, i.e.
|
|
1197
1211
|
* the settings-opacity / settings-blur pair. On 0.1.7 the page is a child of
|
|
1198
|
-
* `centerCol`, NOT of the settings dialog
|
|
1212
|
+
* `centerCol`, NOT of the settings dialog (and from `0.1.7-rc.2` the dialog is a
|
|
1213
|
+
* `createPortal` beside `#root`, so it is further away still), therefore
|
|
1214
|
+
* `SETTINGS_STYLE_RULE`'s token
|
|
1199
1215
|
* re-scope never reaches it and the list would otherwise follow the homepage card
|
|
1200
1216
|
* alpha; reading the plugin-owned variables off `:root` puts them under the slider
|
|
1201
1217
|
* that owns this page. The `var(--dsw-alias-bg-layer-2)` fallback covers the window
|
|
@@ -1208,10 +1224,143 @@ window.__ModuleLoader__.load({
|
|
|
1208
1224
|
* carries a `plugins.item` slot that third-party plugins fill with their own
|
|
1209
1225
|
* controls, so a dialog can legitimately open inside the list.
|
|
1210
1226
|
*/
|
|
1211
|
-
const PLUGIN_PAGE_FROST_RULE = "[data-plugin-panel] [data-plugin-scope]>ul{position:relative;isolation:isolate;padding:8px;border-radius:14px}[data-plugin-panel] [data-plugin-scope]>ul:has([role=\"dialog\"]){isolation:auto}[data-plugin-panel] [data-plugin-scope]>ul::before{content:\"\";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;background:var(--dsh-any-bg-settings-surface,var(--dsw-alias-bg-layer-2));-webkit-backdrop-filter:var(--dsh-any-blur-settings,none);backdrop-filter:var(--dsh-any-blur-settings,none)}";
|
|
1227
|
+
const PLUGIN_PAGE_FROST_RULE = "[data-plugin-panel] [data-plugin-scope]>ul,[data-plugin-panel] [data-plugin-loading]>ul{position:relative;isolation:isolate;padding:8px;border-radius:14px}[data-plugin-panel] [data-plugin-scope]>ul:has([role=\"dialog\"]),[data-plugin-panel] [data-plugin-loading]>ul:has([role=\"dialog\"]){isolation:auto}[data-plugin-panel] [data-plugin-scope]>ul::before,[data-plugin-panel] [data-plugin-loading]>ul::before{content:\"\";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;background:var(--dsh-any-bg-settings-surface,var(--dsw-alias-bg-layer-2));-webkit-backdrop-filter:var(--dsh-any-blur-settings,none);backdrop-filter:var(--dsh-any-blur-settings,none)}";
|
|
1228
|
+
/** The host's own `ui-theme` name for "dropdowns, popovers, suggestion lists", and
|
|
1229
|
+
* the token the plugin has always remapped onto the card slider. Whether it still
|
|
1230
|
+
* reaches a menu's paint is the question `MenuSurfaceFacts` below answers — from
|
|
1231
|
+
* `0.1.7-rc.2` the host aliases it AWAY from the menu layer, so declaring it alone
|
|
1232
|
+
* fades the non-`MenuSurface` overlays and nothing else. */
|
|
1233
|
+
const MENU_FILL_TOKEN = "--dsw-specific-menu";
|
|
1234
|
+
/** Frost by filtering the element itself — the only option where the element is the
|
|
1235
|
+
* thing that paints, and the shape every release up to `0.1.7-rc.1` presents. Both
|
|
1236
|
+
* prefixes because Safari needs the `-webkit-` one and the cascade must not let
|
|
1237
|
+
* them disagree. */
|
|
1238
|
+
function elementFrostDecl(value) {
|
|
1239
|
+
return `-webkit-backdrop-filter:${value};backdrop-filter:${value}`;
|
|
1240
|
+
}
|
|
1241
|
+
/**
|
|
1242
|
+
* ── Where a menu's paint lives ────────────────────────────────────────────────
|
|
1243
|
+
* Verified by reading the emitting source at each tag, not inferred from a changelog.
|
|
1244
|
+
*
|
|
1245
|
+
* `dsh-v0.1.5-rc.2` … `dsh-v0.1.7-rc.1`: the menu ELEMENT paints itself. Its own
|
|
1246
|
+
* CSS module declares `background:var(--dsw-specific-menu)` — 11 files at
|
|
1247
|
+
* 0.1.5-rc.2/rc.3 and 0.1.6-alpha.1/alpha.2, 15 at 0.1.7-alpha.1/alpha.2, 16 at
|
|
1248
|
+
* rc.1 (`Menu`, `MenuView`, `PopupSelectView`, `ModelSelect`, `dockkit` TabMenu,
|
|
1249
|
+
* `stat-dialog`, `QueueDock`, `ContextMeter`, `TodoPanel`, `GoalBar`,
|
|
1250
|
+
* `JobListAction`, `HoverCard`, `ScheduleCatalogAction`, `SubagentHeaderLineage`,
|
|
1251
|
+
* `TeamAction`, `CordisPanel`). One token therefore paints every menu, and
|
|
1252
|
+
* filtering the element is the arm that reaches it.
|
|
1253
|
+
* Frost is a separate, later fact, and worth recording because it changes what
|
|
1254
|
+
* the plugin is doing on the older tags: `--dsw-menu-backdrop-filter` has ZERO
|
|
1255
|
+
* consumers before `0.1.7-alpha.1` (15 there, 16 at rc.1). On `0.1.5`/`0.1.6` the
|
|
1256
|
+
* host frosts no menu at all, so the card/header blur sliders are the only reason
|
|
1257
|
+
* a menu has a frost there — which is why the declaration goes on the element
|
|
1258
|
+
* rather than into a host token the host does not read.
|
|
1259
|
+
*
|
|
1260
|
+
* `dsh-v0.1.7-rc.2` (npm `latest`) and `dsh-v0.2.0-rc.1`: `TabMenu`, `MenuView`,
|
|
1261
|
+
* `PopupSelectView`, `ModelSelect` and `Menu` all render through the new
|
|
1262
|
+
* `ui-primitives/src/MenuSurface.tsx` (byte-identical between the two tags),
|
|
1263
|
+
* which leaves the element unpainted and draws on a `z-index:-1` child instead
|
|
1264
|
+
* (`MenuSurface.module.css` `.material`: `background:var(--dsw-menu-surface-fill)`
|
|
1265
|
+
* + `backdrop-filter:var(--dsw-menu-backdrop-filter)`). The four menu stylesheets
|
|
1266
|
+
* that used to paint the old token (Menu/MenuView/PopupSelectView/dockkit TabMenu)
|
|
1267
|
+
* drop it at rc.2, which is why the painter count goes 16 → 14.
|
|
1268
|
+
* Two consequences, both measured from those files:
|
|
1269
|
+
* · the host FLIPPED ITS ALIAS — `design-platform.css` now declares
|
|
1270
|
+
* `--dsw-specific-menu:var(--dsw-menu-surface-fill)` where every earlier
|
|
1271
|
+
* release declared the reverse. So a plugin that retints only the old token
|
|
1272
|
+
* writes a value nothing on a menu any longer reads, and the card / header
|
|
1273
|
+
* opacity sliders go inert on exactly the surfaces they were built for.
|
|
1274
|
+
* · that child layer exists on purpose: its comment says filtering only the
|
|
1275
|
+
* background "keeps nested menus and fixed overlays free of an ancestor
|
|
1276
|
+
* backdrop root", and the surface sets `isolation:isolate`. Filtering the
|
|
1277
|
+
* element anyway installs the backdrop root the layer was written to avoid.
|
|
1278
|
+
* The frost therefore rides `--dsw-menu-backdrop-filter`, whose consumer set is
|
|
1279
|
+
* the same 14 stylesheets at both tags (stat dialog, queue dock, context meter,
|
|
1280
|
+
* todo panel, goal bar, job list, `HoverCard`, `PickerPopover`/`TaskMenu`/
|
|
1281
|
+
* `ScheduleCatalogAction`, the subagent lineage, `TeamAction`, `CordisPanel`,
|
|
1282
|
+
* `MenuSurface` itself) — re-declaring the token reaches the frost whoever ends up
|
|
1283
|
+
* applying it, and does not depend on any element being the painting element.
|
|
1284
|
+
*
|
|
1285
|
+
* `dsh-v0.2.0-rc.2` (npm `latest`) and `dsh-v0.2.1-alpha.1`: the layer and the frost
|
|
1286
|
+
* are the same files — `MenuSurface.tsx` and `MenuSurface.module.css` are
|
|
1287
|
+
* byte-identical to rc.1, and every `--dsw-menu-backdrop-filter` consumer is too —
|
|
1288
|
+
* but the sticky GROUP HEADING inside those menus changed owner. Through rc.1 the
|
|
1289
|
+
* only grouped menu was `ModelSelect`, whose own stylesheet painted that heading
|
|
1290
|
+
* from the menu token (`ModelSelect.module.css` `.groupTitle{position:sticky;
|
|
1291
|
+
* background:var(--dsw-specific-menu)}`), so the card slider drove it and a picked
|
|
1292
|
+
* wallpaper color tinted it. At rc.2 the rule is deleted and both grouped popups
|
|
1293
|
+
* (`ModelSelect`, `PopupSelectView`) render the new `ui-primitives/MenuGroup.tsx`,
|
|
1294
|
+
* whose heading stays transparent until `data-stuck` and then paints
|
|
1295
|
+
* `--dsw-alias-menu-group-header-fill` (light `rgba(248,249,250,.94)`, dark
|
|
1296
|
+
* `rgba(48,49,54,.94)`, declared in the `body` blocks of `design-platform.css`).
|
|
1297
|
+
* The surface did not go away — its token was RENAMED, and `ModelSelect.module.css`
|
|
1298
|
+
* is the one `--dsw-specific-menu` consumer that disappears at rc.2. Left alone, it
|
|
1299
|
+
* is the single menu element the fade no longer reaches: an untinted, near-opaque
|
|
1300
|
+
* band sitting on top of every row in the list the moment that list scrolls.
|
|
1301
|
+
*/
|
|
1302
|
+
/** The answer for the releases whose menus paint themselves: `0.1.5-rc`,
|
|
1303
|
+
* `0.1.6-alpha`, `0.1.7-alpha`. The unresolved bucket is its own variant below. */
|
|
1304
|
+
const LEGACY_MENU_SURFACE = {
|
|
1305
|
+
fillTokens: [MENU_FILL_TOKEN],
|
|
1306
|
+
frostDecl: elementFrostDecl
|
|
1307
|
+
};
|
|
1308
|
+
/** The answer for `0.1.7-rc` (`0.1.7-rc.2` onward) and `0.2.0-rc`. The old token
|
|
1309
|
+
* stays in the list on purpose: 14 surfaces in the same claim set still paint their
|
|
1310
|
+
* fill from it — the lineage tree, `CordisPanel`, the stat dialog, `QueueDock`,
|
|
1311
|
+
* `TodoPanel`, `ContextMeter`, `GoalBar`, `JobListAction`, `HoverCard`, `TeamAction`,
|
|
1312
|
+
* `ModelSelect`'s own card and the schedule trio (`PickerPopover`, `TaskMenu`,
|
|
1313
|
+
* `ScheduleCatalogAction`) — while the shared menus moved to
|
|
1314
|
+
* `--dsw-menu-surface-fill`. Dropping either name fades one half of that set. */
|
|
1315
|
+
const LAYERED_MENU_SURFACE = {
|
|
1316
|
+
fillTokens: [MENU_FILL_TOKEN, "--dsw-menu-surface-fill"],
|
|
1317
|
+
frostDecl: (value) => `--dsw-menu-backdrop-filter:${value}`
|
|
1318
|
+
};
|
|
1319
|
+
/** The fill the sticky group heading of a shared menu paints from — `MenuGroup`'s
|
|
1320
|
+
* own contribution to the menu's look, first emitted at `0.2.0-rc.2`. */
|
|
1321
|
+
const MENU_GROUP_HEADER_FILL_TOKEN = "--dsw-alias-menu-group-header-fill";
|
|
1322
|
+
/** The answer for `0.2.0-rc` from `0.2.0-rc.2` and for `0.2.1-alpha`: everything
|
|
1323
|
+
* `LAYERED_MENU_SURFACE` says, plus the heading `MenuGroup` renamed.
|
|
1324
|
+
*
|
|
1325
|
+
* Riding `fillTokens` rather than being left out is a decision with evidence on
|
|
1326
|
+
* both sides, so state it: the host's README calls this token "independent of the
|
|
1327
|
+
* menu material" and gives it a 94% fill while the surface layer sits at 58%/45%.
|
|
1328
|
+
* That is a choice about an OPAQUE menu. This plugin's whole product is a menu the
|
|
1329
|
+
* wallpaper shows through, and one release earlier the very same heading read the
|
|
1330
|
+
* very same token as the card it sits on — so following it keeps rc.1's contract
|
|
1331
|
+
* ("the card slider owns every layer of a menu, in the picked color") instead of
|
|
1332
|
+
* leaving an untinted stock band inside a tinted, faded card.
|
|
1333
|
+
* Compositing is on its side too: the heading stacks on the surface layer it sticks
|
|
1334
|
+
* to, so a heading and a card at the same alpha still read as a band roughly
|
|
1335
|
+
* twice-as-dense as the card (1-(1-a)²) — occluding, at the slider's level, exactly
|
|
1336
|
+
* as it did when both came from one token. */
|
|
1337
|
+
const LAYERED_MENU_SURFACE_WITH_GROUP_HEADER = {
|
|
1338
|
+
fillTokens: [...LAYERED_MENU_SURFACE.fillTokens, MENU_GROUP_HEADER_FILL_TOKEN],
|
|
1339
|
+
frostDecl: LAYERED_MENU_SURFACE.frostDecl
|
|
1340
|
+
};
|
|
1341
|
+
/** The answer when the release could not be resolved, and neither of the two
|
|
1342
|
+
* verified shapes can be asserted. Each half is chosen so that being on the
|
|
1343
|
+
* wrong line costs an inert declaration rather than a wrong pixel:
|
|
1344
|
+
* · BOTH fill tokens. A custom property nothing reads costs nothing, so this
|
|
1345
|
+
* half always lands: the fade reaches a self-painting menu through the old
|
|
1346
|
+
* token and a `MenuSurface` layer through the new one.
|
|
1347
|
+
* · the ELEMENT's frost, and not the host's blur token, because on `0.1.5` and
|
|
1348
|
+
* `0.1.6` `--dsw-menu-backdrop-filter` has no consumer at all (verified: zero
|
|
1349
|
+
* files before 0.1.7-alpha.1) — the token arm would leave those hosts with no
|
|
1350
|
+
* menu frost whatsoever, while filtering the element frosts every release.
|
|
1351
|
+
* On a `MenuSurface` host it does not stack: the surface root IS the element
|
|
1352
|
+
* that carries `role="menu"`, so our filter makes it a backdrop root, and the
|
|
1353
|
+
* `z-index:-1` layer inside it then has only the (unpainted) surface to sample
|
|
1354
|
+
* and its own default `blur(40px)` becomes inert. One frost — ours — plus a
|
|
1355
|
+
* `position:relative` element that hosts nested menus the way the layer was
|
|
1356
|
+
* written not to. Accepted for a bucket that by definition cannot know. */
|
|
1357
|
+
const UNRESOLVED_MENU_SURFACE = {
|
|
1358
|
+
fillTokens: LAYERED_MENU_SURFACE.fillTokens,
|
|
1359
|
+
frostDecl: elementFrostDecl
|
|
1360
|
+
};
|
|
1212
1361
|
/** Session-header slot anchors present on EVERY release in range. The slot
|
|
1213
1362
|
* renderer stamps `data-slot="<key>"` unconditionally (`ui-renderer/scoped-slots.tsx`),
|
|
1214
|
-
* and all five keys are registered from 0.1.5-rc.2 through 0.1
|
|
1363
|
+
* and all five keys are registered from 0.1.5-rc.2 through 0.2.1-alpha.1 —
|
|
1215
1364
|
* verified per tag. Adapters append the keys their own release adds. */
|
|
1216
1365
|
const BASE_HEADER_SLOT_KEYS = [
|
|
1217
1366
|
"conversation.session.header",
|
|
@@ -1243,22 +1392,31 @@ window.__ModuleLoader__.load({
|
|
|
1243
1392
|
* an animated track with its own stacking context, it must be promoted out of it
|
|
1244
1393
|
* or the filter has no wallpaper to sample.
|
|
1245
1394
|
*
|
|
1395
|
+
* Menus paint themselves here: 11 stylesheets declare
|
|
1396
|
+
* `background:var(--dsw-specific-menu)` on the element (`Menu`, `MenuView`,
|
|
1397
|
+
* `PopupSelectView`, `stat-dialog`, `ModelSelect`, `JobListAction`, `ContextMeter`,
|
|
1398
|
+
* `ScheduleCatalogAction`, `SubagentHeaderLineage`, `TeamAction`, `CordisPanel`),
|
|
1399
|
+
* and `--dsw-menu-backdrop-filter`
|
|
1400
|
+
* has NO consumer on this line at all — the host frosts no menu, so the element is
|
|
1401
|
+
* both the paint and the only place a frost can go. Hence `LEGACY_MENU_SURFACE`.
|
|
1402
|
+
*
|
|
1246
1403
|
* @module
|
|
1247
1404
|
*/
|
|
1248
1405
|
/** The wrapper carries the slide transform on this line, so it carries the blur. */
|
|
1249
|
-
function panelFragments$
|
|
1406
|
+
function panelFragments$7() {
|
|
1250
1407
|
return {
|
|
1251
1408
|
promotion: `${PANEL_WRAPPER}{position:fixed!important;z-index:26!important}${PANEL_FULLSCREEN}{z-index:40!important}`,
|
|
1252
1409
|
blur: panelBlurRule(PANEL_WRAPPER)
|
|
1253
1410
|
};
|
|
1254
1411
|
}
|
|
1255
|
-
function createAdapter$
|
|
1412
|
+
function createAdapter$7(host) {
|
|
1256
1413
|
return {
|
|
1257
1414
|
id: "0.1.5-rc.2/rc.3",
|
|
1258
1415
|
channel: "0.1.5-rc",
|
|
1259
1416
|
host,
|
|
1260
|
-
panelFragments: panelFragments$
|
|
1417
|
+
panelFragments: panelFragments$7,
|
|
1261
1418
|
pluginPageRule: "",
|
|
1419
|
+
menus: LEGACY_MENU_SURFACE,
|
|
1262
1420
|
surface: {
|
|
1263
1421
|
ownsSidebarGuideSurface: false,
|
|
1264
1422
|
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
@@ -1288,6 +1446,12 @@ window.__ModuleLoader__.load({
|
|
|
1288
1446
|
* So the panel mechanics match 0.1.5: the wrapper slides, the wrapper takes the
|
|
1289
1447
|
* blur, and the wrapper needs promoting.
|
|
1290
1448
|
*
|
|
1449
|
+
* Menus too — checked separately at both tags, because that is what this folder is
|
|
1450
|
+
* for: 11 stylesheets paint the menu element from `--dsw-specific-menu` on alpha.1
|
|
1451
|
+
* and alpha.2 alike, and `--dsw-menu-backdrop-filter` has no consumer on either, so
|
|
1452
|
+
* `LEGACY_MENU_SURFACE` serves the whole line. The element is both the paint and
|
|
1453
|
+
* the frost's only possible home.
|
|
1454
|
+
*
|
|
1291
1455
|
* @module
|
|
1292
1456
|
*/
|
|
1293
1457
|
/** The extra session-header anchor this line introduces: the macOS titlebar work
|
|
@@ -1320,19 +1484,20 @@ window.__ModuleLoader__.load({
|
|
|
1320
1484
|
const m = /^alpha\.(\d+)$/.exec(pre);
|
|
1321
1485
|
return m === null || Number(m[1]) >= 2;
|
|
1322
1486
|
}
|
|
1323
|
-
function panelFragments$
|
|
1487
|
+
function panelFragments$6() {
|
|
1324
1488
|
return {
|
|
1325
1489
|
promotion: `${PANEL_WRAPPER}{position:fixed!important;z-index:26!important}${PANEL_FULLSCREEN}{z-index:40!important}`,
|
|
1326
1490
|
blur: panelBlurRule(PANEL_WRAPPER)
|
|
1327
1491
|
};
|
|
1328
1492
|
}
|
|
1329
|
-
function createAdapter$
|
|
1493
|
+
function createAdapter$6(host) {
|
|
1330
1494
|
return {
|
|
1331
1495
|
id: "0.1.6-alpha.1/alpha.2",
|
|
1332
1496
|
channel: "0.1.6-alpha",
|
|
1333
1497
|
host,
|
|
1334
|
-
panelFragments: panelFragments$
|
|
1498
|
+
panelFragments: panelFragments$6,
|
|
1335
1499
|
pluginPageRule: hasPluginManagerPage(host.version) ? PLUGIN_PAGE_FROST_RULE : "",
|
|
1500
|
+
menus: LEGACY_MENU_SURFACE,
|
|
1336
1501
|
surface: {
|
|
1337
1502
|
ownsSidebarGuideSurface: true,
|
|
1338
1503
|
headerSlotKeys: hasLeadingHeaderSlot(host.version) ? [...BASE_HEADER_SLOT_KEYS, "conversation.session.header.leading"] : BASE_HEADER_SLOT_KEYS
|
|
@@ -1402,22 +1567,315 @@ window.__ModuleLoader__.load({
|
|
|
1402
1567
|
* too. Checked against every use in this plugin: the stroke group is inherited
|
|
1403
1568
|
* so a second match changes nothing, and the view-card discovery takes the
|
|
1404
1569
|
* first match, which is still the real flow root. No arm needed.
|
|
1570
|
+
* · menus still paint THEMSELVES on this line — 15 stylesheets declare
|
|
1571
|
+
* `background:var(--dsw-specific-menu)` on the element at alpha.1/alpha.2 and 16
|
|
1572
|
+
* at rc.1, so `LEGACY_MENU_SURFACE` is the answer and the `MenuSurface` child
|
|
1573
|
+
* layer does not exist yet. Worth noting what DID arrive here:
|
|
1574
|
+
* `--dsw-menu-backdrop-filter` goes from zero consumers at 0.1.6-alpha.2 to 15 at
|
|
1575
|
+
* alpha.1 (16 at rc.1), i.e. this is the line where the host started frosting
|
|
1576
|
+
* menus on the element itself. The plugin's own filter sits on the same element
|
|
1577
|
+
* and wins the cascade by sheet order, so the element is still the only place a
|
|
1578
|
+
* frost can go — which is exactly why re-declaring the HOST's token instead
|
|
1579
|
+
* would be inert on this line and correct on the next one.
|
|
1405
1580
|
*
|
|
1406
1581
|
* @module
|
|
1407
1582
|
*/
|
|
1408
|
-
function panelFragments$
|
|
1583
|
+
function panelFragments$5() {
|
|
1409
1584
|
return {
|
|
1410
1585
|
promotion: "",
|
|
1411
1586
|
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1412
1587
|
};
|
|
1413
1588
|
}
|
|
1414
|
-
function createAdapter$
|
|
1589
|
+
function createAdapter$5(host) {
|
|
1415
1590
|
return {
|
|
1416
1591
|
id: "0.1.7-alpha.1/alpha.2/rc.1",
|
|
1417
1592
|
channel: "0.1.7-alpha",
|
|
1418
1593
|
host,
|
|
1594
|
+
panelFragments: panelFragments$5,
|
|
1595
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1596
|
+
menus: LEGACY_MENU_SURFACE,
|
|
1597
|
+
surface: {
|
|
1598
|
+
ownsSidebarGuideSurface: true,
|
|
1599
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1600
|
+
}
|
|
1601
|
+
};
|
|
1602
|
+
}
|
|
1603
|
+
//#endregion
|
|
1604
|
+
//#region src/client/host-compat/versions/v0-1-7-rc-2/adapter.ts
|
|
1605
|
+
/**
|
|
1606
|
+
* Adapter for the DSH `0.1.7-rc` channel, verified at `0.1.7-rc.2` (npm `latest`).
|
|
1607
|
+
*
|
|
1608
|
+
* Same patch line as `v0-1-7-alpha-1-2-rc-1`, DIFFERENT ANSWERS — which is why this
|
|
1609
|
+
* folder exists at all rather than another row on that one. Everything the alpha
|
|
1610
|
+
* folder says about panel mechanics still holds here (checked by diffing the panel
|
|
1611
|
+
* CSS, dockkit, the slot renderer and the plugin-manager page tag to tag: no anchor
|
|
1612
|
+
* line moved, and `TabLayout.tsx` / `SidebarRight.module.css` are unchanged from
|
|
1613
|
+
* rc.1). What moved is where a MENU gets its paint.
|
|
1614
|
+
*
|
|
1615
|
+
* Two host changes reach this plugin:
|
|
1616
|
+
*
|
|
1617
|
+
* 1. `ui-primitives/src/MenuSurface.tsx` is NEW, and `TabMenu`, `MenuView`,
|
|
1618
|
+
* `PopupSelectView`, `ModelSelect` and `Menu` all render through it. The element
|
|
1619
|
+
* that carries `role="menu"` no longer paints anything: a `z-index:-1` child
|
|
1620
|
+
* layer does, reading `--dsw-menu-surface-fill` for the fill and
|
|
1621
|
+
* `--dsw-menu-backdrop-filter` for the frost. And `design-platform.css` flipped
|
|
1622
|
+
* its alias — `--dsw-specific-menu:var(--dsw-menu-surface-fill)`, where every
|
|
1623
|
+
* earlier release declared it the other way round. Consequence, read off those
|
|
1624
|
+
* two files rather than guessed: retinting `--dsw-specific-menu` alone now fades
|
|
1625
|
+
* nothing on a shared menu, so the card and header opacity sliders go inert on
|
|
1626
|
+
* exactly the surfaces they were built for. `LAYERED_MENU_SURFACE` is the answer.
|
|
1627
|
+
* Filtering the menu element would also have kept working, sort of — but the
|
|
1628
|
+
* child layer's own comment says it exists so that no ANCESTOR becomes a
|
|
1629
|
+
* backdrop root, so that arm stops being offered here.
|
|
1630
|
+
*
|
|
1631
|
+
* 2. `ui-settings-general/src/client/SettingsRoot.tsx` now renders the dialog
|
|
1632
|
+
* through `createPortal`, beside `#root`, instead of inline in the column. It
|
|
1633
|
+
* costs this plugin nothing, recorded so nobody re-derives it:
|
|
1634
|
+
* `SETTINGS_PANEL_SEL` tests the dialog's own identity (its hashed `_panel`
|
|
1635
|
+
* class plus `role`/`aria-modal`/`aria-labelledby`, all unchanged), never an
|
|
1636
|
+
* ancestor, so the retint and the blur land the same way one level higher up.
|
|
1637
|
+
* The one rule that DID care — `PART_BLUR_RULE`'s
|
|
1638
|
+
* `:has([role="dialog"]){isolation:auto}` valve, written because a modal mounted
|
|
1639
|
+
* inside a column kept its z-index local to that column — now never matches, and
|
|
1640
|
+
* that is fine: the modal it existed to release is no longer inside a column
|
|
1641
|
+
* either, so the trap and the valve left together.
|
|
1642
|
+
*
|
|
1643
|
+
* Still `0.1.7` facts, restated for the reader who only opens this folder:
|
|
1644
|
+
* · the panel is a stationary frame; the dockkit children slide, so the blur goes
|
|
1645
|
+
* on the children and nothing is promoted.
|
|
1646
|
+
* · `conversation.session.header.leading` is gone; `--dsw-specific-menu` is a
|
|
1647
|
+
* literal translucent rgba, not an alias of a layer token.
|
|
1648
|
+
* · the shimmer primitive is STILL `data-text-shimmer` (checked: `data-shimmer`
|
|
1649
|
+
* does not exist at this tag) — that rename belongs to 0.2.0.
|
|
1650
|
+
*
|
|
1651
|
+
* @module
|
|
1652
|
+
*/
|
|
1653
|
+
function panelFragments$4() {
|
|
1654
|
+
return {
|
|
1655
|
+
promotion: "",
|
|
1656
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1657
|
+
};
|
|
1658
|
+
}
|
|
1659
|
+
function createAdapter$4(host) {
|
|
1660
|
+
return {
|
|
1661
|
+
id: "0.1.7-rc.2",
|
|
1662
|
+
channel: "0.1.7-rc",
|
|
1663
|
+
host,
|
|
1664
|
+
panelFragments: panelFragments$4,
|
|
1665
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1666
|
+
menus: LAYERED_MENU_SURFACE,
|
|
1667
|
+
surface: {
|
|
1668
|
+
ownsSidebarGuideSurface: true,
|
|
1669
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1670
|
+
}
|
|
1671
|
+
};
|
|
1672
|
+
}
|
|
1673
|
+
//#endregion
|
|
1674
|
+
//#region src/client/host-compat/versions/v0-2-0-rc-1/adapter.ts
|
|
1675
|
+
/**
|
|
1676
|
+
* Adapter for the DSH `0.2.0-rc` channel, verified at `0.2.0-rc.1`.
|
|
1677
|
+
*
|
|
1678
|
+
* A new MINOR line, and the panel is not what changed. Checked by reading the
|
|
1679
|
+
* emitting source at the tag rather than a changelog:
|
|
1680
|
+
* · `ui-sidebar-right/src/client/shell/SidebarRight.module.css` is BYTE-IDENTICAL
|
|
1681
|
+
* to `0.1.7-rc.2`, and `ui-primitives/src/MenuSurface.tsx` is byte-identical
|
|
1682
|
+
* too. So the slide owner, the layer variable and where a menu gets its paint
|
|
1683
|
+
* all answer the same as the `0.1.7-rc` folder — nothing below re-derives them.
|
|
1684
|
+
* · the five `conversation.session.header*` slot keys are the same five;
|
|
1685
|
+
* `conversation.session.header.leading` is still deleted.
|
|
1686
|
+
* · `ui-settings-general/SettingsRoot.tsx` is byte-identical, so the settings
|
|
1687
|
+
* dialog is still a body-level `createPortal` and `SETTINGS_PANEL_SEL`'s
|
|
1688
|
+
* identity test still reaches it.
|
|
1689
|
+
* · the boot peer gate (`app-boot/src/plugin-compatibility.ts`,
|
|
1690
|
+
* `compatibility-preflight.ts`) is byte-identical, which is what makes the
|
|
1691
|
+
* manifest change below a HARD requirement rather than metadata: an unlisted
|
|
1692
|
+
* peer version disables the plugin at profile composition and its modules are
|
|
1693
|
+
* never imported.
|
|
1694
|
+
*
|
|
1695
|
+
* What did move, and reaches this plugin:
|
|
1696
|
+
*
|
|
1697
|
+
* 1. `ui-dockkit/components/TabLayout.tsx` clamps a FLOATING pane's `top` with
|
|
1698
|
+
* `max(var(--dsh-dockkit-float-top, 0px), Ypx)`. Only floats: the attributes
|
|
1699
|
+
* this plugin matches, `data-dockkit-host="dock"` and `data-dockkit-empty`,
|
|
1700
|
+
* are on unchanged lines (verified by grep at both tags), so the blur arm
|
|
1701
|
+
* stands as the rc.2 folder wrote it.
|
|
1702
|
+
*
|
|
1703
|
+
* 2. `ui-primitives/src/TextShimmer.tsx` is REWRITTEN. The old primitive set
|
|
1704
|
+
* `data-text-shimmer` and painted the element itself with a clipped gradient
|
|
1705
|
+
* (`background-clip:text` + `-webkit-text-fill-color:transparent`) sized by an
|
|
1706
|
+
* inline `--dsh-text-shimmer-spread`, which no longer exists anywhere in the
|
|
1707
|
+
* repo. The new one marks its root `data-shimmer` and moves the highlight onto
|
|
1708
|
+
* an absolutely-positioned overlay (`.decoration` / `.sweep` / `.highlight`)
|
|
1709
|
+
* tinted by `--dsw-alias-label-shimmer`, so the real glyphs keep their own
|
|
1710
|
+
* color. Consequence for the stroke sliders: the old failure mode — a stroke
|
|
1711
|
+
* repainting transparent-filled glyphs as one flat blob — is gone, but
|
|
1712
|
+
* `-webkit-text-stroke` is still inherited, so the chat stroke would now land
|
|
1713
|
+
* on BOTH the real text and the sweeping copy and double every glyph while it
|
|
1714
|
+
* animates. Progress chrome still is not conversation prose, so the exemption
|
|
1715
|
+
* stays and gains the new attribute (`STROKE_RULE`).
|
|
1716
|
+
* More rows use it now: `ReasoningRow` and `GenericCommandCard` join
|
|
1717
|
+
* `ChatGroupSeat` / `MessageItem` / `RunningStatus` / `DisclosureRow`.
|
|
1718
|
+
*
|
|
1719
|
+
* 3. `ui-plugin-manager` gains a first-read `ListSkeleton`. Its card `ul` carries
|
|
1720
|
+
* the same `.cards` class but sits under `section[data-plugin-loading]`
|
|
1721
|
+
* instead of `section[data-plugin-scope]`, so the shared frost rule had to
|
|
1722
|
+
* grow or the plugin page would show an unfrosted list for the length of the
|
|
1723
|
+
* first read and then re-frost it — see `PLUGIN_PAGE_FROST_RULE`.
|
|
1724
|
+
*
|
|
1725
|
+
* @module
|
|
1726
|
+
*/
|
|
1727
|
+
function panelFragments$3() {
|
|
1728
|
+
return {
|
|
1729
|
+
promotion: "",
|
|
1730
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1731
|
+
};
|
|
1732
|
+
}
|
|
1733
|
+
function createAdapter$3(host) {
|
|
1734
|
+
return {
|
|
1735
|
+
id: "0.2.0-rc.1",
|
|
1736
|
+
channel: "0.2.0-rc",
|
|
1737
|
+
host,
|
|
1738
|
+
panelFragments: panelFragments$3,
|
|
1739
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1740
|
+
menus: LAYERED_MENU_SURFACE,
|
|
1741
|
+
surface: {
|
|
1742
|
+
ownsSidebarGuideSurface: true,
|
|
1743
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1744
|
+
}
|
|
1745
|
+
};
|
|
1746
|
+
}
|
|
1747
|
+
//#endregion
|
|
1748
|
+
//#region src/client/host-compat/versions/v0-2-0-rc-2/adapter.ts
|
|
1749
|
+
/**
|
|
1750
|
+
* Adapter for the DSH `0.2.0-rc` line from `0.2.0-rc.2` on, verified at `0.2.0-rc.2`.
|
|
1751
|
+
*
|
|
1752
|
+
* The first case where one patch line AND one prerelease channel carry two
|
|
1753
|
+
* answers, so this folder opens a second channel (see the note on `HostChannel`).
|
|
1754
|
+
* What it took was one renamed token, and it is a menu token, which is the class of
|
|
1755
|
+
* fact this table exists for:
|
|
1756
|
+
*
|
|
1757
|
+
* · `ui-primitives/src/MenuGroup.tsx` + `.module.css` are NEW at rc.2 and the
|
|
1758
|
+
* headings of both grouped popups (`ModelSelect`, `PopupSelectView`) now come
|
|
1759
|
+
* from them. `ModelSelect.module.css` loses `.groupTitle{background:var(
|
|
1760
|
+
* --dsw-specific-menu)}` in the same breath — the sticky heading's paint moved
|
|
1761
|
+
* to `--dsw-alias-menu-group-header-fill`, a token that does not exist before
|
|
1762
|
+
* this tag (`git grep` at `0.1.7-rc.2` and `0.2.0-rc.1`: absent). Hence
|
|
1763
|
+
* `LAYERED_MENU_SURFACE_WITH_GROUP_HEADER` rather than the rc.1 constant: the
|
|
1764
|
+
* old claim set stayed true, it just stopped covering one element.
|
|
1765
|
+
* · the rest of the menu layer is the same code — `MenuSurface.tsx` and
|
|
1766
|
+
* `MenuSurface.module.css` are byte-identical to `0.2.0-rc.1`, and so is every
|
|
1767
|
+
* consumer of `--dsw-menu-backdrop-filter`.
|
|
1768
|
+
*
|
|
1769
|
+
* Also verified at this tag, and NOT a reason for a folder of its own:
|
|
1770
|
+
* · `SidebarRight.module.css` and `ui-dockkit/src/components/TabLayout.tsx` are
|
|
1771
|
+
* unchanged, so the panel is still a stationary frame whose dockkit children
|
|
1772
|
+
* slide (`panelBlurRule(DOCKKIT_SLIDERS)`, no promotion).
|
|
1773
|
+
* · the five `conversation.session.header*` slot keys, and still no `…leading`.
|
|
1774
|
+
* · `PluginManagerPage.tsx` still emits `section[data-plugin-panel]` with the card
|
|
1775
|
+
* `ul` under `[data-plugin-scope]` and `[data-plugin-loading]`.
|
|
1776
|
+
* · `TextShimmer` keeps the rc.1 shape (`data-shimmer`), so the stroke exemption
|
|
1777
|
+
* stands as written.
|
|
1778
|
+
*
|
|
1779
|
+
* What moved that reached this plugin WITHOUT a version branch, because the host
|
|
1780
|
+
* wrote it as a chain with a fallback:
|
|
1781
|
+
* · `TurnTriggerNodeView.module.css` now fills from
|
|
1782
|
+
* `var(--dsw-alias-turn-trigger-bg, var(--dsw-alias-markdown-code-block))` and
|
|
1783
|
+
* hovers with `var(--dsw-alias-turn-trigger-bg-hover, var(--dsw-alias-interactive-bg-hover))`,
|
|
1784
|
+
* both aliases declared in `design-platform.css` at this tag. The produced
|
|
1785
|
+
* slider's arm reads the SAME chain (see `PRODUCED_RULE`), so older hosts take
|
|
1786
|
+
* the fallback and this one takes the new alias — without any release test. That
|
|
1787
|
+
* matters here rather than being pedantry: dark mode repoints the alias at
|
|
1788
|
+
* `--dsw-alias-interactive-bg-hover`, so an arm still mixing on the code-block
|
|
1789
|
+
* token would keep overriding the row with the OLD color and the row would stop
|
|
1790
|
+
* tracking its own hover.
|
|
1791
|
+
*
|
|
1792
|
+
* @module
|
|
1793
|
+
*/
|
|
1794
|
+
function panelFragments$2() {
|
|
1795
|
+
return {
|
|
1796
|
+
promotion: "",
|
|
1797
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1798
|
+
};
|
|
1799
|
+
}
|
|
1800
|
+
function createAdapter$2(host) {
|
|
1801
|
+
return {
|
|
1802
|
+
id: "0.2.0-rc.2",
|
|
1803
|
+
channel: "0.2.0-rc.2",
|
|
1804
|
+
host,
|
|
1805
|
+
panelFragments: panelFragments$2,
|
|
1806
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1807
|
+
menus: LAYERED_MENU_SURFACE_WITH_GROUP_HEADER,
|
|
1808
|
+
surface: {
|
|
1809
|
+
ownsSidebarGuideSurface: true,
|
|
1810
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1811
|
+
}
|
|
1812
|
+
};
|
|
1813
|
+
}
|
|
1814
|
+
//#endregion
|
|
1815
|
+
//#region src/client/host-compat/versions/v0-2-1-alpha-1/adapter.ts
|
|
1816
|
+
/**
|
|
1817
|
+
* Adapter for the DSH `0.2.1-alpha` line, verified at `0.2.1-alpha.1`.
|
|
1818
|
+
*
|
|
1819
|
+
* A new MINOR line opened with a prerelease, and the answer is the `0.2.0-rc.2`
|
|
1820
|
+
* folder's — which is a statement this file has to earn, because "same as the
|
|
1821
|
+
* release before" is exactly the reasoning that went wrong when `0.1.7-rc.2` moved
|
|
1822
|
+
* the menu paint. Read at the tag instead:
|
|
1823
|
+
* · `ui-theme/src/styles/design-platform.css` is BYTE-IDENTICAL to `0.2.0-rc.2`
|
|
1824
|
+
* (`git diff --numstat` empty), so every token this plugin writes — the menu
|
|
1825
|
+
* pair, the specific-menu alias, the turn-trigger chain — resolves to the same
|
|
1826
|
+
* values.
|
|
1827
|
+
* · `MenuGroup.tsx`, `MenuGroup.module.css`, `MenuSurface.tsx` and
|
|
1828
|
+
* `MenuSurface.module.css` are byte-identical too, and `MenuGroup` is still the
|
|
1829
|
+
* only consumer of `--dsw-alias-menu-group-header-fill`. That is why the menus
|
|
1830
|
+
* here answer with `LAYERED_MENU_SURFACE_WITH_GROUP_HEADER`, the same facts the
|
|
1831
|
+
* rc.2 folder checked, and not by re-typing them.
|
|
1832
|
+
* · `ui-sidebar-right/shell/SidebarRight.module.css` and
|
|
1833
|
+
* `ui-dockkit/src/components/TabLayout.tsx` unchanged (only `.tsx` service
|
|
1834
|
+
* wiring moved), so the panel stays a stationary frame with sliding dockkit
|
|
1835
|
+
* children and no promotion.
|
|
1836
|
+
* · the five `conversation.session.header*` slot keys, still no `…leading`.
|
|
1837
|
+
* · `PluginManagerPage.tsx` still emits the three anchors of the card list.
|
|
1838
|
+
* · `TextShimmer` still marks its root `data-shimmer`, so the stroke exemption
|
|
1839
|
+
* written for rc.1 stands.
|
|
1840
|
+
*
|
|
1841
|
+
* What did move, and why none of it needs a fact from this folder:
|
|
1842
|
+
*
|
|
1843
|
+
* 1. `ui-layout/AppFrame` gains a second grid row, `div.bottomRow[data-shell-bottom]`
|
|
1844
|
+
* holding the new `shell.bottom` slot, and it paints `--dsw-alias-bg-base` —
|
|
1845
|
+
* the main-background token, which `applyCustomTokensNow` already re-emits on
|
|
1846
|
+
* `body`, so the strip follows the main-bg slider with no new binding. The row
|
|
1847
|
+
* is `min-height:0` and empty unless a plugin fills the slot, so an untouched
|
|
1848
|
+
* install shows nothing. It also sits AFTER `RightbarColumn` in the frame's
|
|
1849
|
+
* children, which is the side `discoverParts()` does not count from: it anchors
|
|
1850
|
+
* on `data-rightbar-col` and reads `rightIdx-2` / `rightIdx-1`, so the sidebar
|
|
1851
|
+
* and center column are still the same two children.
|
|
1852
|
+
* 2. `ui-primitives/InlineEditor.module.css` is the new home of the inline editor's
|
|
1853
|
+
* `.editor{background:var(--dsw-alias-bg-base)}`. Same token, so the same slider
|
|
1854
|
+
* reaches it wherever the component moved to.
|
|
1855
|
+
* 3. `modules/system.ts` narrowed `claimStyles` to the tags a factory itself added
|
|
1856
|
+
* (see `ensureUiCss` for what that changed about our own sheet).
|
|
1857
|
+
* 4. `@deepseek-ai/dsh-invariants` is DELETED at this tag — `git ls-tree` shows no
|
|
1858
|
+
* `packages/runtime-diagnostics/invariants`, and the boot/app plugin loader never
|
|
1859
|
+
* looked for a plugin's `invariant` export. This plugin's no-op companion was
|
|
1860
|
+
* therefore already dead weight here, and it goes rather than claiming a peer
|
|
1861
|
+
* version for a package the host no longer ships.
|
|
1862
|
+
*
|
|
1863
|
+
* @module
|
|
1864
|
+
*/
|
|
1865
|
+
function panelFragments$1() {
|
|
1866
|
+
return {
|
|
1867
|
+
promotion: "",
|
|
1868
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1869
|
+
};
|
|
1870
|
+
}
|
|
1871
|
+
function createAdapter$1(host) {
|
|
1872
|
+
return {
|
|
1873
|
+
id: "0.2.1-alpha.1",
|
|
1874
|
+
channel: "0.2.1-alpha",
|
|
1875
|
+
host,
|
|
1419
1876
|
panelFragments: panelFragments$1,
|
|
1420
1877
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1878
|
+
menus: LAYERED_MENU_SURFACE_WITH_GROUP_HEADER,
|
|
1421
1879
|
surface: {
|
|
1422
1880
|
ownsSidebarGuideSurface: true,
|
|
1423
1881
|
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
@@ -1459,6 +1917,7 @@ window.__ModuleLoader__.load({
|
|
|
1459
1917
|
host,
|
|
1460
1918
|
panelFragments,
|
|
1461
1919
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1920
|
+
menus: UNRESOLVED_MENU_SURFACE,
|
|
1462
1921
|
surface: {
|
|
1463
1922
|
ownsSidebarGuideSurface: false,
|
|
1464
1923
|
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
@@ -1468,9 +1927,13 @@ window.__ModuleLoader__.load({
|
|
|
1468
1927
|
//#endregion
|
|
1469
1928
|
//#region src/client/host-compat/versions/registry.ts
|
|
1470
1929
|
const ADAPTERS = {
|
|
1471
|
-
"0.1.5-rc": createAdapter$
|
|
1472
|
-
"0.1.6-alpha": createAdapter$
|
|
1473
|
-
"0.1.7-alpha": createAdapter$
|
|
1930
|
+
"0.1.5-rc": createAdapter$7,
|
|
1931
|
+
"0.1.6-alpha": createAdapter$6,
|
|
1932
|
+
"0.1.7-alpha": createAdapter$5,
|
|
1933
|
+
"0.1.7-rc": createAdapter$4,
|
|
1934
|
+
"0.2.0-rc": createAdapter$3,
|
|
1935
|
+
"0.2.0-rc.2": createAdapter$2,
|
|
1936
|
+
"0.2.1-alpha": createAdapter$1,
|
|
1474
1937
|
unknown: createAdapter
|
|
1475
1938
|
};
|
|
1476
1939
|
/** Pick the adapter for a resolved host. `host.channel` is already narrowed to
|
|
@@ -3398,7 +3861,7 @@ window.__ModuleLoader__.load({
|
|
|
3398
3861
|
}
|
|
3399
3862
|
try {
|
|
3400
3863
|
const forceDark = scheme === "dark";
|
|
3401
|
-
const key = `${h}|${s}|${l}|${verdict}|${scheme}|${hasColor}`;
|
|
3864
|
+
const key = `${h}|${s}|${l}|${verdict}|${scheme}|${hasColor}|${hostAdapter().menus.fillTokens.join(",")}`;
|
|
3402
3865
|
if (key !== baseTokenKey) {
|
|
3403
3866
|
baseTokenKey = key;
|
|
3404
3867
|
if (forceDark) document.body.setAttribute("data-ds-dark-theme", "dsh-any-background");
|
|
@@ -3408,6 +3871,13 @@ window.__ModuleLoader__.load({
|
|
|
3408
3871
|
const opVar = OPACITY_VARS[name];
|
|
3409
3872
|
decls.push(`${name}:${opVar !== void 0 ? `var(${opVar})` : value}!important`);
|
|
3410
3873
|
}
|
|
3874
|
+
if (tokens["--dsw-specific-menu"] !== void 0) {
|
|
3875
|
+
const menuVar = OPACITY_VARS[MENU_FILL_TOKEN];
|
|
3876
|
+
for (const name of hostAdapter().menus.fillTokens) {
|
|
3877
|
+
if (name === "--dsw-specific-menu" || tokens[name] !== void 0) continue;
|
|
3878
|
+
decls.push(`${name}:var(${menuVar})!important`);
|
|
3879
|
+
}
|
|
3880
|
+
}
|
|
3411
3881
|
ensureTokenStyle().textContent = `body{${decls.join(";")}}`;
|
|
3412
3882
|
for (const name of appliedTokenNames) document.body.style.removeProperty(name);
|
|
3413
3883
|
appliedTokenNames = Object.keys(tokens);
|
|
@@ -3433,8 +3903,34 @@ window.__ModuleLoader__.load({
|
|
|
3433
3903
|
}
|
|
3434
3904
|
const SETTINGS_PANEL_SEL = "[role=\"dialog\"][aria-modal=\"true\"][aria-labelledby][class*=\"_panel\"]";
|
|
3435
3905
|
const SETTINGS_STYLE_RULE = `${SETTINGS_PANEL_SEL}{background:var(--dsh-any-bg-settings-surface,var(--dsw-alias-bg-layer-2));backdrop-filter:var(--dsh-any-blur-settings,none);--dsw-alias-bg-layer-1:var(--dsh-any-bg-settings-layer-1);--dsw-alias-bg-layer-2:var(--dsh-any-bg-settings-layer-2);--dsw-alias-bg-layer-3:var(--dsh-any-bg-settings-layer-3)}${SETTINGS_PANEL_SEL} .dab-card{backdrop-filter:var(--dsh-any-blur-card-panels,none);-webkit-backdrop-filter:var(--dsh-any-blur-card-panels,none)}`;
|
|
3906
|
+
const CARD_BLUR_VAR = "--dsh-any-blur-card-panels";
|
|
3907
|
+
const POPOVER_MENU_SEL = `[role="menu"]:not([data-dockkit-tab-menu])`;
|
|
3908
|
+
const POPOVER_OTHER_SEL = "[role=\"listbox\"],body > [role=\"tree\"],body > [role=\"dialog\"]:not([aria-modal=\"true\"])";
|
|
3909
|
+
/** The frost declaration this release's menus want, driven by the named plugin var.
|
|
3910
|
+
* Every menu-shaped surface group asks through here, so the card group, the header
|
|
3911
|
+
* group and the exemptions can never disagree about which layer to paint. */
|
|
3912
|
+
function menuFrost(blurVar) {
|
|
3913
|
+
return hostAdapter().menus.frostDecl(`var(${blurVar},none)`);
|
|
3914
|
+
}
|
|
3915
|
+
/** Declare EVERY token this release's menus can paint their fill from with the same
|
|
3916
|
+
* value. One slider, one value, every layer reached — and a token the host does not
|
|
3917
|
+
* read is inert, so this is safe to emit on a line that only needs one.
|
|
3918
|
+
*
|
|
3919
|
+
* Used for values that are guaranteed to resolve. Where the value is a `var()` the
|
|
3920
|
+
* caller must first confirm the variable it names is actually set: an undefined
|
|
3921
|
+
* custom property inside `background:var(…)` computes to the guaranteed-invalid
|
|
3922
|
+
* value and the surface goes fully transparent (see the notes on
|
|
3923
|
+
* `applyHeaderPopovers` and `applyExemptDefaults`). */
|
|
3924
|
+
function menuFillDecls(value) {
|
|
3925
|
+
return hostAdapter().menus.fillTokens.map((name) => `${name}:${value}`).join(";");
|
|
3926
|
+
}
|
|
3927
|
+
function popoverBlurRule() {
|
|
3928
|
+
return `${POPOVER_MENU_SEL}{${menuFrost(CARD_BLUR_VAR)}}${POPOVER_OTHER_SEL}{${elementFrostDecl(`var(${CARD_BLUR_VAR},none)`)}}`;
|
|
3929
|
+
}
|
|
3436
3930
|
const INPUT_FROST_CLASS = "dab-input-frost";
|
|
3437
|
-
|
|
3931
|
+
function inputBlurRule() {
|
|
3932
|
+
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)}.${INPUT_FROST_CLASS} ${COMPOSER_TAKEOVER_CARD}{position:relative;isolation:isolate}.${INPUT_FROST_CLASS} ${COMPOSER_TAKEOVER_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")}}`;
|
|
3933
|
+
}
|
|
3438
3934
|
function applyInputBlur(px) {
|
|
3439
3935
|
const root = document.documentElement;
|
|
3440
3936
|
if (px > 0) root.classList.add(INPUT_FROST_CLASS);
|
|
@@ -3472,9 +3968,22 @@ window.__ModuleLoader__.load({
|
|
|
3472
3968
|
* taking the card blur. `[role]` is a no-op presence test that raises only the
|
|
3473
3969
|
* tagged arm to (0,2,0); the other three already qualify at (0,2,0)+. */
|
|
3474
3970
|
const HEADER_SURFACES_PADDED = [`${HEADER_TAG_SELECTOR}[role]`, ...HEADER_SURFACES.slice(1)];
|
|
3475
|
-
|
|
3971
|
+
/** The header blur variable, and the rule that frosts the header's dropdown set.
|
|
3972
|
+
* The declaration comes from the same adapter answer as the card group's menu arm:
|
|
3973
|
+
* every surface in this set paints its skin from the host's own menu-blur token
|
|
3974
|
+
* (`SubagentHeaderLineage.module.css:120` uses a pseudo-element, the stat dialog and
|
|
3975
|
+
* goal bar use their own layer), so handing over the token reaches all of them on
|
|
3976
|
+
* both paint shapes, while filtering the element would install the ancestor
|
|
3977
|
+
* backdrop root each of those files documents avoiding. */
|
|
3978
|
+
const HEADER_BLUR_VAR = "--dsh-any-blur-header";
|
|
3979
|
+
function headerPopoverRule() {
|
|
3980
|
+
return `${HEADER_SURFACES_PADDED.join(",")}{${menuFrost(HEADER_BLUR_VAR)}}`;
|
|
3981
|
+
}
|
|
3982
|
+
function exemptDefaultRule() {
|
|
3983
|
+
return `[role="dialog"][aria-modal="true"]:not([aria-labelledby]){backdrop-filter:none;-webkit-backdrop-filter:none}[role="menu"]:has([class*="_danger"]){${hostAdapter().menus.frostDecl("none")};-webkit-text-stroke-width:0}`;
|
|
3984
|
+
}
|
|
3476
3985
|
/** Selector the dynamic header token rule targets — the same set as the static
|
|
3477
|
-
*
|
|
3986
|
+
* headerPopoverRule above, so the two can never drift apart. */
|
|
3478
3987
|
const HEADER_TOKEN_SELECTOR = HEADER_SURFACES_PADDED.join(",");
|
|
3479
3988
|
/** Header-popover surfaces: retint the menu token and (re)write the blur.
|
|
3480
3989
|
* Mirrors applyProduced: the static rule above never changes, so a drag only
|
|
@@ -3487,9 +3996,9 @@ window.__ModuleLoader__.load({
|
|
|
3487
3996
|
let opacity = rHeaderOpacity();
|
|
3488
3997
|
if (opacity < 0) opacity = 0;
|
|
3489
3998
|
if (opacity > 1) opacity = 1;
|
|
3490
|
-
const menu = (paletteTokens() ?? readHostOpacityTokens())?.[
|
|
3999
|
+
const menu = (paletteTokens() ?? readHostOpacityTokens())?.[MENU_FILL_TOKEN];
|
|
3491
4000
|
const el = ensureHeaderStyle();
|
|
3492
|
-
const css = menu === void 0 ? "" : `${HEADER_TOKEN_SELECTOR}{
|
|
4001
|
+
const css = menu === void 0 ? "" : `${HEADER_TOKEN_SELECTOR}{${menuFillDecls(toRgba(menu, opacity))}}`;
|
|
3493
4002
|
if (el.textContent !== css) el.textContent = css;
|
|
3494
4003
|
}
|
|
3495
4004
|
let headerStyleEl = null;
|
|
@@ -3529,7 +4038,8 @@ window.__ModuleLoader__.load({
|
|
|
3529
4038
|
add("--dsw-alias-bg-layer-1", source?.["--dsw-alias-bg-layer-1"]);
|
|
3530
4039
|
add("--dsw-alias-bg-layer-2", source?.["--dsw-alias-bg-layer-2"]);
|
|
3531
4040
|
add("--dsw-alias-bg-layer-3", source?.["--dsw-alias-bg-layer-3"]);
|
|
3532
|
-
|
|
4041
|
+
const menuColor = source?.[MENU_FILL_TOKEN];
|
|
4042
|
+
for (const name of hostAdapter().menus.fillTokens) add(name, menuColor);
|
|
3533
4043
|
if (decls.length === 0) {
|
|
3534
4044
|
if (el.textContent !== "") el.textContent = "";
|
|
3535
4045
|
return;
|
|
@@ -3547,17 +4057,17 @@ window.__ModuleLoader__.load({
|
|
|
3547
4057
|
document.head.appendChild(exemptStyleEl);
|
|
3548
4058
|
return exemptStyleEl;
|
|
3549
4059
|
}
|
|
3550
|
-
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}}`;
|
|
4060
|
+
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}}`;
|
|
3551
4061
|
const STROKE_RULE = [
|
|
3552
4062
|
`${SETTINGS_PANEL_SEL}{-webkit-text-stroke:var(--dsh-any-stroke-settings-w,0px) var(--dsh-any-stroke-settings-c,transparent);paint-order:stroke fill}`,
|
|
3553
4063
|
"[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}",
|
|
3554
|
-
|
|
4064
|
+
`[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}`,
|
|
3555
4065
|
`[data-chat-flow]{-webkit-text-stroke:var(--dsh-any-stroke-chat-w,0px) var(--dsh-any-stroke-chat-c,transparent);paint-order:stroke fill}`,
|
|
3556
4066
|
`[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}`,
|
|
3557
4067
|
`[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}`,
|
|
3558
4068
|
`${PANEL_SURFACES}{-webkit-text-stroke:var(--dsh-any-stroke-panel-w,0px) var(--dsh-any-stroke-panel-c,transparent);paint-order:stroke fill}`,
|
|
3559
4069
|
`${HEADER_SURFACES.join(",")}{-webkit-text-stroke:var(--dsh-any-stroke-header-w,0px) var(--dsh-any-stroke-header-c,transparent);paint-order:stroke fill}`,
|
|
3560
|
-
"[data-chat-flow] [role=\"status\"],[data-chat-flow] [data-turn-process],[data-chat-flow] [data-text-shimmer],[data-chat-flow] [style*=\"--dsh-text-shimmer-spread\"]{-webkit-text-stroke-width:0!important;paint-order:normal!important}",
|
|
4070
|
+
"[data-chat-flow] [role=\"status\"],[data-chat-flow] [data-turn-process],[data-chat-flow] [data-text-shimmer],[data-chat-flow] [data-shimmer],[data-chat-flow] [style*=\"--dsh-text-shimmer-spread\"]{-webkit-text-stroke-width:0!important;paint-order:normal!important}",
|
|
3561
4071
|
`svg{-webkit-text-stroke-width:0!important;paint-order:normal!important}`,
|
|
3562
4072
|
`::placeholder{-webkit-text-stroke-width:0!important}`
|
|
3563
4073
|
].join("");
|
|
@@ -3774,6 +4284,7 @@ window.__ModuleLoader__.load({
|
|
|
3774
4284
|
if (px > 0) document.documentElement.style.setProperty("--dsh-any-blur-panel", `blur(${px}px)`);
|
|
3775
4285
|
else document.documentElement.style.removeProperty("--dsh-any-blur-panel");
|
|
3776
4286
|
}
|
|
4287
|
+
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}`;
|
|
3777
4288
|
/** Re-scope one surface group's layer tokens onto plugin-owned variables so a
|
|
3778
4289
|
* dedicated slider owns its alpha (the host has no per-surface opacity). The
|
|
3779
4290
|
* settings group additionally retints its dialog surface variable. Always
|
|
@@ -3800,6 +4311,7 @@ window.__ModuleLoader__.load({
|
|
|
3800
4311
|
function applySettingsOverrides(op) {
|
|
3801
4312
|
applyLayerOverrides("--dsh-any-bg-settings", op, true);
|
|
3802
4313
|
}
|
|
4314
|
+
const TRAJECTORY_STYLE_RULE = "[data-conversation-composer-overlay]{--dsw-alias-bg-layer-1:var(--dsh-any-traj-layer-1);--dsw-alias-bg-layer-2:var(--dsh-any-traj-layer-2);--dsw-alias-bg-layer-3:var(--dsh-any-traj-layer-3)}";
|
|
3803
4315
|
function applyTrajectoryOverrides(op) {
|
|
3804
4316
|
applyLayerOverrides("--dsh-any-traj", op, false);
|
|
3805
4317
|
}
|
|
@@ -4775,9 +5287,10 @@ window.__ModuleLoader__.load({
|
|
|
4775
5287
|
* `wallpaper.ts` — so it is encoded here instead, in one list, with the reason
|
|
4776
5288
|
* next to each entry.
|
|
4777
5289
|
*
|
|
4778
|
-
* What the release can change lives in
|
|
4779
|
-
* (which element carries the frost)
|
|
4780
|
-
*
|
|
5290
|
+
* What the release can change lives in the slots marked below: the panel group
|
|
5291
|
+
* (which element carries the frost), the plugin-manager page (whether this release
|
|
5292
|
+
* ships that page at all), and the menu groups (which token a menu's fill comes
|
|
5293
|
+
* from and whose job its frost is). Everything outside a slot is host-agnostic by
|
|
4781
5294
|
* construction — it targets attributes every release in range emits.
|
|
4782
5295
|
*
|
|
4783
5296
|
* The sheet is rebuilt when the release verdict lands. It has to be: `apply` runs
|
|
@@ -4794,19 +5307,25 @@ window.__ModuleLoader__.load({
|
|
|
4794
5307
|
/**
|
|
4795
5308
|
* The order contract. Later entries override earlier ones at equal specificity,
|
|
4796
5309
|
* which several groups rely on:
|
|
4797
|
-
* ·
|
|
5310
|
+
* · headerPopoverRule() after popoverBlurRule() — a surface moving from the card
|
|
4798
5311
|
* group to the header group must win, not merely be listed twice.
|
|
4799
5312
|
* · PRODUCED_RULE / STROKE_RULE after the blur groups — they shield their
|
|
4800
5313
|
* surfaces from an inherited slider.
|
|
4801
|
-
* ·
|
|
5314
|
+
* · exemptDefaultRule() last of the token groups — an exemption has to land
|
|
4802
5315
|
* after whatever it exempts.
|
|
4803
5316
|
* · PLACEHOLDER_RULE genuinely last — `::placeholder` resets must survive every
|
|
4804
5317
|
* group above.
|
|
5318
|
+
*
|
|
5319
|
+
* Three of these are FUNCTIONS, not constants, and they are version slots like
|
|
5320
|
+
* `panel.blur`: which declaration frosts a menu, and which token a menu's fill
|
|
5321
|
+
* comes from, is the current adapter's answer (`adapter.menus`). They stay in
|
|
5322
|
+
* place rather than moving next to the other slots because the contract above is
|
|
5323
|
+
* about position — a slot is only safe if it does not have to relocate.
|
|
4805
5324
|
*/
|
|
4806
5325
|
function buildStaticStyles() {
|
|
4807
5326
|
const adapter = rHostAdapter();
|
|
4808
5327
|
const panel = adapter.panelFragments();
|
|
4809
|
-
return DARK_GRADIENT + FRAME_CLEAR_RULE + SETTINGS_STYLE_RULE +
|
|
5328
|
+
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;
|
|
4810
5329
|
}
|
|
4811
5330
|
/** Append the plugin's stylesheet and keep it matched to the host.
|
|
4812
5331
|
* Returns a teardown for the plugin's effect scope. */
|
|
@@ -5290,6 +5809,7 @@ window.__ModuleLoader__.load({
|
|
|
5290
5809
|
if (!el) {
|
|
5291
5810
|
el = document.createElement("style");
|
|
5292
5811
|
el.id = CSS_ID;
|
|
5812
|
+
el.dataset.plugin = "dsh-any-background-ui-css";
|
|
5293
5813
|
document.head.appendChild(el);
|
|
5294
5814
|
}
|
|
5295
5815
|
if (el.textContent !== UI_CSS) el.textContent = UI_CSS;
|