dsh-deepseek-style-theme 2.0.87 → 2.0.88

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.
@@ -6,9 +6,7 @@ must be preserved in every redistribution.
6
6
 
7
7
  ---
8
8
 
9
- ## dsh-theme-mineradio — code included
10
-
11
- `lib/client.js` contains a port of the fluid-shader subsystem and the glass
9
+ ## dsh-theme-mineradio — code included`lib/client.js` contains a port of the fluid-shader subsystem and the glass
12
10
  dispersion / specular-parallax subsystem of **dsh-theme-mineradio v2.3.8**:
13
11
 
14
12
  - the three GLSL programs (`VERTEX_SHADER`, `FLOW_SHADER`, `DISPLAY_SHADER`) and
@@ -20,6 +18,16 @@ dispersion / specular-parallax subsystem of **dsh-theme-mineradio v2.3.8**:
20
18
  `supportsSvgBackdropFilter`),
21
19
  - the specular cursor parallax (`startSpecularParallax`).
22
20
 
21
+ One further technique is **re-expressed, not copied** (v2.0.88): the docked bottom bar,
22
+ in which the composer and its stats line become a single glass slab with the backdrop
23
+ blur on the wrapper's `::before`, the inner surfaces transparent, and one hairline at
24
+ the seam. That structure comes from mineradio's "fused" state
25
+ (`[data-dsh-inputbar]:has([data-dsh-stats])`), including two of its recorded lessons:
26
+ `z-index` rather than `isolation` on the wrapper (isolation is also a backdrop root and
27
+ would clip popup frost to the bar) and `backdrop-filter: none` on the inner surfaces so
28
+ their blur cannot double up with the slab's. The declarations here are written against
29
+ this plugin's own tokens (`--dshome-*`), not mineradio's `--dsh-aqua-*`.
30
+
23
31
  Only naming and external dependencies were adapted: plugin-scoped identifiers
24
32
  were renamed to this plugin's `dshome-` prefix, and the upstream settings/theme
25
33
  store and React layer were replaced by function parameters. **The GLSL shader
package/lib/client.js CHANGED
@@ -1506,18 +1506,46 @@ body[data-dshome-dark] :is([class*="_headline"]){background:linear-gradient(120d
1506
1506
  :is(${USER_BUBBLE}){background:rgba(255,255,255,.6)!important;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid rgba(0,0,0,.05);box-shadow:0 4px 16px rgba(13,30,60,.06)}
1507
1507
  body[data-dshome-dark] :is(${USER_BUBBLE}){background:rgba(21,42,86,.65)!important;border:1px solid rgba(255,255,255,.1);box-shadow:0 4px 16px rgba(0,0,0,.25)}
1508
1508
  ` },
1509
- // The line under the composer (round/step/token stats, `[data-dsh-stats]` is
1510
- // product markup that has never been renamed) gets the LENS touch the user
1511
- // asked for: "模糊效果,你对对话窗下方文字进行放大(模拟液体放大)". A real lens
1512
- // magnifies what is behind the glass, which a backdrop filter cannot do --
1513
- // but the pane is directly above this line, so scaling it a touch reads as
1514
- // the pane's magnification, and scaling it further while the pane leans
1515
- // (html[data-dshome-leaning], written by startComposerTilt) ties the motion
1516
- // to the hover. Small on purpose: 6% is a lens hint, 12% while leaning.
1509
+ // The line under the composer: round/step/token stats ([data-dsh-stats]) and
1510
+ // the whole input bar ([data-dsh-inputbar]) -- both product markup that has
1511
+ // never been renamed.
1512
+ //
1513
+ // Two things happen here.
1514
+ //
1515
+ // 1. The DOCKED BOTTOM BAR, borrowed from dsh-theme-mineradio's fused state
1516
+ // (MIT, @dhicoc): once the stats line exists, the WHOLE input bar becomes
1517
+ // one glass slab -- a single border, radius, fill and shadow on the
1518
+ // wrapper, with the backdrop blur on its ::before -- and the card and the
1519
+ // stats turn transparent inside it, leaving one hairline at the seam. The
1520
+ // two surfaces can then never drift apart tonally, and the composer reads
1521
+ // as one designed bar instead of a card with loose text under it.
1522
+ // `:has()` is what makes this safe to attempt at all: when the product
1523
+ // does not render a stats line, none of it applies and the card keeps its
1524
+ // own glass.
1525
+ // Two details are load-bearing and inherited from mineradio's notes:
1526
+ // z-index (not isolation) on the wrapper -- isolation is also a backdrop
1527
+ // root and would clip popup frost to the bar -- and `backdrop-filter:
1528
+ // none` on the inner surfaces, whose own blur would otherwise double up
1529
+ // with the slab's.
1530
+ //
1531
+ // 2. The LENS touch the user asked for ("对对话窗下方文字进行放大(模拟液体放大)"):
1532
+ // a real lens magnifies what is behind the glass, which a backdrop filter
1533
+ // cannot do, so the text is scaled a touch instead -- and a touch further
1534
+ // while the pane leans (html[data-dshome-leaning], written by
1535
+ // startComposerTilt). `transform-origin: left center` keeps a
1536
+ // left-aligned line growing inwards instead of spilling past the slab's
1537
+ // right edge.
1517
1538
  { anchor: "[data-dsh-stats]", css: `
1518
- [data-dsh-stats]{transform:scale(1.06);transform-origin:center center;transition:transform .24s cubic-bezier(.2,.8,.2,1)}
1519
- html[data-dshome-leaning] [data-dsh-stats]{transform:scale(1.12)}
1520
- @media (prefers-reduced-motion:reduce){[data-dsh-stats]{transition:none}}
1539
+ [data-dsh-inputbar]:has([data-dsh-stats]){position:relative;z-index:8;padding:0;border:1.5px solid rgba(255,255,255,.55);border-radius:24px;background:rgba(255,255,255,.42);box-shadow:0 8px 32px rgba(13,30,60,.1),inset 0 1px 1px hsla(0,0%,100%,.8)}
1540
+ [data-dsh-inputbar]:has([data-dsh-stats])::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:-1;-webkit-backdrop-filter:blur(28px) saturate(1.42) brightness(1.02);backdrop-filter:blur(28px) saturate(1.42) brightness(1.02)}
1541
+ [data-dsh-inputbar]:has([data-dsh-stats]) [data-composer-card]{border:none!important;border-radius:0!important;background:transparent!important;background-image:none!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
1542
+ [data-dsh-inputbar]:has([data-dsh-stats]) [data-composer-card]::before,[data-dsh-inputbar]:has([data-dsh-stats]) [data-composer-card]::after{display:none!important}
1543
+ [data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{display:block;width:100%;max-width:none;box-sizing:border-box;margin:auto 0 0;min-height:24px;padding:2px 16px;border:none;border-top:1px solid rgba(0,0,0,.06);border-radius:0;background:transparent;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;transform-origin:left center;transition:transform .24s cubic-bezier(.2,.8,.2,1)}
1544
+ [data-dsh-stats]{transform:scale(1.04)}
1545
+ html[data-dshome-leaning] [data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{transform:scale(1.08)}
1546
+ body[data-dshome-dark] [data-dsh-inputbar]:has([data-dsh-stats]){border-color:rgba(255,255,255,.16);background:rgba(13,30,60,.55);box-shadow:0 10px 40px rgba(0,0,0,.35),inset 0 1px 1px rgba(255,255,255,.06)}
1547
+ body[data-dshome-dark] [data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{border-top-color:rgba(255,255,255,.1)}
1548
+ @media (prefers-reduced-motion:reduce){[data-dsh-inputbar]:has([data-dsh-stats]) [data-dsh-stats]{transition:none}}
1521
1549
  ` },
1522
1550
  // Trajectory view bar.
1523
1551
  { anchor: ".fV0t5q_root", css: `
@@ -2693,7 +2721,7 @@ html[data-dshome-blur="off"] body{
2693
2721
  if (!supportsWebgl2()) return startParticles();
2694
2722
  // Which build is running, readable from the page (see README). One line in
2695
2723
  // the console answers "is the bundle I just installed actually live?".
2696
- try { window.__dshomeBuild = '2.0.87 lens-blur'; } catch (error) {}
2724
+ try { window.__dshomeBuild = '2.0.88 fused-bar'; } catch (error) {}
2697
2725
  const canvas = document.createElement('canvas');
2698
2726
  canvas.setAttribute('data-dsh-deepseek-canvas', '');
2699
2727
  const style = canvas.style;
@@ -2884,7 +2912,7 @@ html[data-dshome-blur="off"] body{
2884
2912
  }
2885
2913
 
2886
2914
  function startParticles() {
2887
- try { window.__dshomeBuild = '2.0.87 lens-blur'; } catch (error) {}
2915
+ try { window.__dshomeBuild = '2.0.88 fused-bar'; } catch (error) {}
2888
2916
  const canvas = document.createElement('canvas');
2889
2917
  canvas.setAttribute('data-dsh-deepseek-canvas', '');
2890
2918
  const style = canvas.style;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-deepseek-style-theme",
3
3
  "description": "DeepSeek official-home style theme: WebGL fluid-flow background, liquid glass with SVG edge refraction, glass sidebar and composer, frosted header, running-subagent progress panel, and DeepSeek brand link for the dsh web GUI",
4
- "version": "2.0.87",
4
+ "version": "2.0.88",
5
5
  "type": "module",
6
6
  "keywords": [
7
7
  "deepseek",