dsh-quick-toc 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.en.md CHANGED
@@ -2,10 +2,20 @@
2
2
 
3
3
  All notable changes to **dsh-quick-toc** are documented here. Chinese version: [CHANGELOG.md](CHANGELOG.md).
4
4
 
5
+ ## [0.7.11] - 2026-09-28
6
+
7
+ ### Changed
8
+ - **The three pointer triangles now have rounded corners, and the dock toggle's is as large as the other header icons**: the triangles on the side handle, the droplet on the tab strip and the dock toggle were sharp-cornered, and the toggle's was noticeably smaller than its neighbours; all three now share one rounded outline and the toggle's matches the header icons.
9
+
10
+ ## [0.7.10] - 2026-09-28
11
+
12
+ ### Fixed
13
+ - **The droplet handle appeared with no animation while the system asked for reduced motion (Windows' "animation effects" switched off)**: once the curtain retracted the handle simply appeared, with none of its growth out of the view-tab strip's lower line, even though the same handle was animated when it went away. It now animates in both directions.
14
+
5
15
  ## [0.7.9] - 2026-09-28
6
16
 
7
17
  ### Fixed
8
- - **The curtain had no drop or retract animation while the system asked for reduced motion (Windows' "animation effects" switched off)**: it appeared and vanished with no movement at all. The curtain now always plays the two, while the rest of the plugin's motion still follows that system setting.
18
+ - **The curtain had no drop or retract animation while the system asked for reduced motion (Windows' "animation effects" switched off)**: it appeared and vanished with no movement at all. The curtain now always plays both.
9
19
 
10
20
  ## [0.7.8] - 2026-09-27
11
21
 
package/CHANGELOG.md CHANGED
@@ -2,10 +2,20 @@
2
2
 
3
3
  **dsh-quick-toc** 的重要变更都记录在这里。英文版见 [CHANGELOG.en.md](CHANGELOG.en.md)。
4
4
 
5
+ ## [0.7.11] - 2026-09-28
6
+
7
+ ### 变更
8
+ - **三处指示三角改为圆角,停靠按钮的三角放大到与其他顶栏图标相当**:侧边把手、顶部水滴和停靠边切换按钮上的三角原本是尖角,其中停靠按钮那颗明显偏小;现在三者共用同一套圆角轮廓,大小也与顶栏图标一致。
9
+
10
+ ## [0.7.10] - 2026-09-28
11
+
12
+ ### 修复
13
+ - **系统开启「减少动态效果」(Windows 的「动画效果」)时,水滴把手的出现没有动画**:幕布收起后把手直接出现,看不到它从视图标签栏下沿长出来的过程,而它消失的那一段是有动画的。现在把手的出现与消失都有动画。
14
+
5
15
  ## [0.7.9] - 2026-09-28
6
16
 
7
17
  ### 修复
8
- - **系统开启「减少动态效果」(Windows 的「动画效果」)时,幕布的展开与收起没有动画**:幕布会直接出现、直接收回,读者看不到展开与收起的过程。现在幕布始终播放展开与收起这两段动画,插件其余动效仍遵循该系统设置。
18
+ - **系统开启「减少动态效果」(Windows 的「动画效果」)时,幕布的展开与收起没有动画**:幕布会直接出现、直接收回,读者看不到展开与收起的过程。现在幕布始终播放展开与收起这两段动画。
9
19
 
10
20
  ## [0.7.8] - 2026-09-27
11
21
 
package/README.en.md CHANGED
@@ -42,7 +42,7 @@ A conversation TOC plugin for [DeepSeek Harness](https://github.com/deepseek-ai/
42
42
 
43
43
  | Plugin | Supported DSH |
44
44
  | --- | --- |
45
- | **0.7.x** (latest, 0.7.9) | 0.1.5-rc.3, 0.1.7-alpha.1, 0.1.7-alpha.2, 0.1.7-rc.1, 0.1.7-rc.2 |
45
+ | **0.7.x** (latest, 0.7.11) | 0.1.5-rc.3, 0.1.7-alpha.1, 0.1.7-alpha.2, 0.1.7-rc.1, 0.1.7-rc.2 |
46
46
  | 0.6.x (0.6.3) | 0.1.5-rc.1, 0.1.5-rc.2 |
47
47
  | 0.5.x (0.5.1) | 0.1.5-rc.1, 0.1.5-rc.2 |
48
48
  | 0.4.x (0.4.1) | 0.1.5-rc.1, 0.1.5-rc.2 |
package/README.md CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  | 插件版本 | 支持的 DSH 版本 |
44
44
  | --- | --- |
45
- | **0.7.x**(最新,0.7.9) | 0.1.5-rc.3、0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2 |
45
+ | **0.7.x**(最新,0.7.11) | 0.1.5-rc.3、0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2 |
46
46
  | 0.6.x(0.6.3) | 0.1.5-rc.1、0.1.5-rc.2 |
47
47
  | 0.5.x(0.5.1) | 0.1.5-rc.1、0.1.5-rc.2 |
48
48
  | 0.4.x(0.4.1) | 0.1.5-rc.1、0.1.5-rc.2 |
package/lib/client.js CHANGED
@@ -1215,6 +1215,48 @@ window.__ModuleLoader__.load({
1215
1215
  _chatTablistCache = found;
1216
1216
  return found;
1217
1217
  }
1218
+ // ---- a triangle with small rounded corners ---------------------------------------------
1219
+ // Built as a path: each vertex becomes a quadratic Bézier whose CONTROL POINT is that
1220
+ // vertex and whose ends walk `t` down the two edges it joins, so only the corners are
1221
+ // touched and the edges stay straight. A quadratic corner falls short of its vertex by
1222
+ // `0.5 * t * cos(half angle)`, so every vertex is first pushed straight out by exactly that
1223
+ // much — that is what keeps the glyph's outer size equal to the sharp triangle it replaces
1224
+ // (rounding without it cost the slim handle tip 9% of its height; merely stroking the sharp
1225
+ // path rounds it too, but fattens the whole shape by half the stroke instead). All three
1226
+ // pointer glyphs — both handles' tips and the dock toggle — come from here, so they share
1227
+ // one silhouette.
1228
+ function roundedTrianglePath(pts, r) {
1229
+ var num = function (v) { return String(Math.round(v * 100) / 100); };
1230
+ var unit = function (from, to) {
1231
+ var dx = to.x - from.x, dy = to.y - from.y;
1232
+ var l = Math.sqrt(dx * dx + dy * dy) || 1;
1233
+ return { x: dx / l, y: dy / l, len: l };
1234
+ };
1235
+ // 1) push each vertex out along its angle bisector by the corner's own shortfall
1236
+ var v = [];
1237
+ for (var k = 0; k < 3; k++) {
1238
+ var p = pts[(k + 2) % 3], c = pts[k], n = pts[(k + 1) % 3];
1239
+ var a1 = unit(c, p), a2 = unit(c, n);
1240
+ var cosA = Math.max(-1, Math.min(1, a1.x * a2.x + a1.y * a2.y));
1241
+ var t = Math.min(r, a1.len / 3, a2.len / 3);
1242
+ var short = 0.5 * t * Math.cos(Math.acos(cosA) / 2);
1243
+ var bx = a1.x + a2.x, by = a1.y + a2.y;
1244
+ var bl = Math.sqrt(bx * bx + by * by) || 1; // bisector points into the shape
1245
+ v.push({ x: c.x - (bx / bl) * short, y: c.y - (by / bl) * short });
1246
+ }
1247
+ // 2) round the pushed-out corners
1248
+ var out = "";
1249
+ for (var i = 0; i < 3; i++) {
1250
+ var prev = v[(i + 2) % 3], cur = v[i], next = v[(i + 1) % 3];
1251
+ var b1 = unit(cur, prev), b2 = unit(cur, next);
1252
+ var t1 = Math.min(r, b1.len / 3), t2 = Math.min(r, b2.len / 3);
1253
+ var ax = cur.x + b1.x * t1, ay = cur.y + b1.y * t1;
1254
+ var cx = cur.x + b2.x * t2, cy = cur.y + b2.y * t2;
1255
+ out += (i === 0 ? "M" : "L") + num(ax) + " " + num(ay) +
1256
+ "Q" + num(cur.x) + " " + num(cur.y) + " " + num(cx) + " " + num(cy);
1257
+ }
1258
+ return out + "Z";
1259
+ }
1218
1260
  function isChatViewActive() {
1219
1261
  try {
1220
1262
  var tablist = conversationTablist();
@@ -5134,8 +5176,27 @@ window.__ModuleLoader__.load({
5134
5176
  };
5135
5177
  var levelsPopDockEl = (!sheetOpen && (levelsOpen || levelsClosing)) ? buildLevelsPop(false) : null;
5136
5178
  var levelsPopSheetEl = (sheetOpen && (levelsOpen || levelsClosing)) ? buildLevelsPop(true) : null;
5137
- // dock toggle: the triangle tips toward the side it will move TO
5138
- var dockBtnEl = iconBtn(toggleDock, dockRight ? T("handle.dockLeft") : T("handle.dockRight"), dockRight ? "◀" : "▶", 12, dockRight ? { x: -1, y: -1 } : { x: 1, y: -1 });
5179
+ // dock toggle: the triangle tips toward the side it will move TO. Drawn as a path rather
5180
+ // than the ◀/▶ character — a font's triangles have sharp corners and a weight that
5181
+ // differs per platform, while this one carries the same little rounding as the two
5182
+ // handles' tips and follows the button's own colour (currentColor, so the hover tint
5183
+ // still applies).
5184
+ var dockTriEl = react_jsx_runtime.jsx("svg", {
5185
+ width: 14,
5186
+ height: 15,
5187
+ viewBox: "0 0 14 15",
5188
+ style: { display: "block" },
5189
+ children: react_jsx_runtime.jsx("path", {
5190
+ d: roundedTrianglePath(dockRight
5191
+ ? [{ x: 11.6, y: 1.8 }, { x: 2.4, y: 7.5 }, { x: 11.6, y: 13.2 }]
5192
+ : [{ x: 2.4, y: 1.8 }, { x: 11.6, y: 7.5 }, { x: 2.4, y: 13.2 }], 1.8),
5193
+ fill: "currentColor"
5194
+ })
5195
+ });
5196
+ // the x nudge is optical: a triangle's mass sits toward its base, so the tip-side shift
5197
+ // is what makes it read centred (the old character needed the same, plus a y nudge for
5198
+ // its line box, which a path does not have)
5199
+ var dockBtnEl = iconBtn(toggleDock, dockRight ? T("handle.dockLeft") : T("handle.dockRight"), dockTriEl, 12, dockRight ? { x: -1, y: 0 } : { x: 1, y: 0 });
5139
5200
  // the curtain button: a surface with the arrow dropping out of its TOP edge
5140
5201
  var sheetBtnEl = react_jsx_runtime.jsx("button", {
5141
5202
  className: "dqt-sheet-btn",
@@ -6010,7 +6071,9 @@ window.__ModuleLoader__.load({
6010
6071
  children: react_jsx_runtime.jsx("path", {
6011
6072
  // tip points OUTWARD (toward where the panel will pop out):
6012
6073
  // docked left -> points right; docked right -> points left
6013
- d: dockRight ? "M7 4 L1.5 12 L7 20 Z" : "M2 4 L7.5 12 L2 20 Z",
6074
+ d: roundedTrianglePath(dockRight
6075
+ ? [{ x: 7, y: 4 }, { x: 1.5, y: 12 }, { x: 7, y: 20 }]
6076
+ : [{ x: 2, y: 4 }, { x: 7.5, y: 12 }, { x: 2, y: 20 }], 2.2),
6014
6077
  fill: "currentColor"
6015
6078
  })
6016
6079
  })
@@ -6121,8 +6184,9 @@ window.__ModuleLoader__.load({
6121
6184
  react_jsx_runtime.jsx("path", {
6122
6185
  // the side handle's own triangle, turned a quarter turn and taken down a
6123
6186
  // shade — 14 x 4.5 against its 5.5 x 16 — so it reads as the same
6124
- // affordance without crowding the smaller droplet it sits in
6125
- d: "M63 8.5 L77 8.5 L70 13 Z",
6187
+ // affordance without crowding the smaller droplet it sits in; same rounded
6188
+ // corners as the side handle's tip (see roundedTrianglePath)
6189
+ d: roundedTrianglePath([{ x: 63, y: 8.5 }, { x: 77, y: 8.5 }, { x: 70, y: 13 }], 1.9),
6126
6190
  fill: "var(--dsw-alias-label-secondary, #9aa0ab)"
6127
6191
  }, "tip")
6128
6192
  ]
@@ -7606,8 +7670,9 @@ window.__ModuleLoader__.load({
7606
7670
  // `prefers-reduced-motion`: with the host system's animations switched off (Windows
7607
7671
  // "animation effects", which is what Chromium reports as reduce) the curtain used to
7608
7672
  // appear and vanish with no motion at all — reported three times, and the reader wants
7609
- // the movement itself. Every other animation this plugin owns still honours the
7610
- // preference (see the droplet and the mode cross-fade below).
7673
+ // the movement itself. The droplet that opens it is exempt for the same reason (see
7674
+ // below); the plugin's remaining animation, the questions-only cross-fade, still
7675
+ // honours the preference, where "less motion" is what the reader actually wants.
7611
7676
  // The curtain handle is a droplet resting on the view-tab strip's lower line:
7612
7677
  // its silhouette flares into two concave fillets at the line (surface tension,
7613
7678
  // not a detached pill). It grows out of the line when it appears — after a
@@ -7623,7 +7688,11 @@ window.__ModuleLoader__.load({
7623
7688
  // `cubic-bezier(0, 0.55, 0.25, 1)` is exactly `cubic-bezier(0.75, 0, 1, 0.45)`
7624
7689
  // mirrored, which is the curve the press uses.
7625
7690
  ".dqt-sheet-handle>svg{animation:dqt-handle-pop 0.2s cubic-bezier(0, 0.55, 0.25, 1) both;transform-origin:50% 100%}" +
7626
- "@media (prefers-reduced-motion: reduce){.dqt-sheet-handle>svg{animation:none}}" +
7691
+ // NOT gated on `prefers-reduced-motion`, for the same reason as the curtain's own
7692
+ // drop: this is the droplet coming back out of the line, and with the host system's
7693
+ // animations switched off (Windows "animation effects" — what Chromium reports as
7694
+ // reduce) it used to appear at full size in one frame while the press that hid it was
7695
+ // still animated, which reads as a missing animation rather than a calmer one.
7627
7696
  // keyboard cursor: an INSET outline plus a whisper of fill, so it never
7628
7697
  // reflows the row and stays distinct from the reading position's blue box
7629
7698
  // (which keeps the 3px left accent bar and the pastel fill)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-quick-toc",
3
- "version": "0.7.9",
3
+ "version": "0.7.11",
4
4
  "description": "Conversation TOC for DeepSeek Harness (DSH): a whole-session, turn-grouped Markdown outline with hover previews, a level filter, a full-width curtain, jump-to-end buttons, title/full-text/cross-session search and a Chinese/English interface.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",