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 +11 -1
- package/CHANGELOG.md +11 -1
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/lib/client.js +77 -8
- package/package.json +1 -1
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
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
7610
|
-
//
|
|
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
|
-
|
|
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.
|
|
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",
|