dsh-conversation-navigator 0.1.8 → 0.1.10
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/lib/client.js +100 -55
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -5,7 +5,7 @@ window.__ModuleLoader__.load({
|
|
|
5
5
|
var exports = module.exports;
|
|
6
6
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
7
7
|
const React = require("react");
|
|
8
|
-
const { Button, IconCloseOutline16 } = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
8
|
+
const { Button, Tooltip, IconCloseOutline16 } = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
9
9
|
|
|
10
10
|
/* ---------- custom icons (DSH outline style, unique to this panel) ---------- */
|
|
11
11
|
function ToggleIcon() {
|
|
@@ -163,7 +163,8 @@ window.__ModuleLoader__.load({
|
|
|
163
163
|
.cnvnav-empty { padding: 18px 10px; text-align: center; color: var(--dsw-alias-label-secondary, #888); }
|
|
164
164
|
.cnvnav-topbar { display: flex; gap: 6px; margin: 6px 6px 0; }
|
|
165
165
|
.cnvnav-footer { display: flex; gap: 6px; margin: 0 6px 6px; }
|
|
166
|
-
.cnvnav-bar-btn { flex: 1; }
|
|
166
|
+
.cnvnav-bar-btn { flex: 1; display: block; }
|
|
167
|
+
.cnvnav-bar-fill { width: 100%; }
|
|
167
168
|
`;
|
|
168
169
|
|
|
169
170
|
function apply(ctx) {
|
|
@@ -444,14 +445,21 @@ window.__ModuleLoader__.load({
|
|
|
444
445
|
setState({ activeKey: null, expanded: {} });
|
|
445
446
|
}
|
|
446
447
|
}, [props.sessionId]);
|
|
447
|
-
return React.createElement(
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
448
|
+
return React.createElement(Tooltip, {
|
|
449
|
+
label: snap.open ? "收起会话导航" : "打开会话导航",
|
|
450
|
+
side: "bottom",
|
|
451
|
+
delayMs: 500,
|
|
452
|
+
},
|
|
453
|
+
React.createElement("span", null,
|
|
454
|
+
React.createElement(Button, {
|
|
455
|
+
variant: snap.open ? "primary" : "ghost",
|
|
456
|
+
size: "sm",
|
|
457
|
+
icon: React.createElement(ToggleIcon),
|
|
458
|
+
"aria-pressed": snap.open,
|
|
459
|
+
onClick: () => setState({ open: !snap.open }),
|
|
460
|
+
}, "导航"),
|
|
461
|
+
),
|
|
462
|
+
);
|
|
455
463
|
}
|
|
456
464
|
|
|
457
465
|
/* ---------- floating navigator panel ---------- */
|
|
@@ -589,34 +597,56 @@ window.__ModuleLoader__.load({
|
|
|
589
597
|
React.createElement("div", { className: "cnvnav-head" },
|
|
590
598
|
React.createElement("span", { className: "cnvnav-title" }, "会话导航"),
|
|
591
599
|
React.createElement("span", { className: "cnvnav-count" }, String(count) + " 条"),
|
|
592
|
-
React.createElement(
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
+
React.createElement(Tooltip, {
|
|
601
|
+
label: "收起面板",
|
|
602
|
+
side: "bottom",
|
|
603
|
+
delayMs: 500,
|
|
604
|
+
},
|
|
605
|
+
React.createElement("span", { className: "cnvnav-close" },
|
|
606
|
+
React.createElement(Button, {
|
|
607
|
+
variant: "ghost",
|
|
608
|
+
size: "sm",
|
|
609
|
+
icon: React.createElement(IconCloseOutline16, { size: 14 }),
|
|
610
|
+
onClick: () => setState({ open: false }),
|
|
611
|
+
}),
|
|
612
|
+
),
|
|
613
|
+
),
|
|
600
614
|
),
|
|
601
615
|
React.createElement("div", { className: "cnvnav-topbar" },
|
|
602
|
-
React.createElement(
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
icon: React.createElement(LoadEarlierIcon),
|
|
616
|
+
React.createElement(Tooltip, {
|
|
617
|
+
label: "加载更早的一批轮次",
|
|
618
|
+
side: "bottom",
|
|
619
|
+
delayMs: 500,
|
|
607
620
|
disabled: !snap.hasMore || snap.loadingOlder,
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
621
|
+
},
|
|
622
|
+
React.createElement("span", { className: "cnvnav-bar-btn" },
|
|
623
|
+
React.createElement(Button, {
|
|
624
|
+
variant: "ghost",
|
|
625
|
+
size: "sm",
|
|
626
|
+
className: "cnvnav-bar-fill",
|
|
627
|
+
icon: React.createElement(LoadEarlierIcon),
|
|
628
|
+
disabled: !snap.hasMore || snap.loadingOlder,
|
|
629
|
+
onClick: () => loadOlderPage(),
|
|
630
|
+
}, "加载更早"),
|
|
631
|
+
),
|
|
632
|
+
),
|
|
633
|
+
React.createElement(Tooltip, {
|
|
634
|
+
label: "加载全部历史轮次",
|
|
635
|
+
side: "bottom",
|
|
636
|
+
delayMs: 500,
|
|
616
637
|
disabled: !snap.hasMore || snap.loadingOlder || snap.loadingAll,
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
638
|
+
},
|
|
639
|
+
React.createElement("span", { className: "cnvnav-bar-btn" },
|
|
640
|
+
React.createElement(Button, {
|
|
641
|
+
variant: "ghost",
|
|
642
|
+
size: "sm",
|
|
643
|
+
className: "cnvnav-bar-fill",
|
|
644
|
+
icon: React.createElement(LoadAllIcon),
|
|
645
|
+
disabled: !snap.hasMore || snap.loadingOlder || snap.loadingAll,
|
|
646
|
+
onClick: () => loadAllPages(),
|
|
647
|
+
}, "加载全部"),
|
|
648
|
+
),
|
|
649
|
+
),
|
|
620
650
|
),
|
|
621
651
|
React.createElement("div", {
|
|
622
652
|
ref: (el) => { listEl = el; },
|
|
@@ -627,27 +657,42 @@ window.__ModuleLoader__.load({
|
|
|
627
657
|
: groupNodes,
|
|
628
658
|
),
|
|
629
659
|
React.createElement("div", { className: "cnvnav-footer" },
|
|
630
|
-
React.createElement(
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
660
|
+
React.createElement(Tooltip, {
|
|
661
|
+
label: "回到对话最新位置",
|
|
662
|
+
side: "top",
|
|
663
|
+
delayMs: 500,
|
|
664
|
+
},
|
|
665
|
+
React.createElement("span", { className: "cnvnav-bar-btn" },
|
|
666
|
+
React.createElement(Button, {
|
|
667
|
+
variant: "ghost",
|
|
668
|
+
size: "sm",
|
|
669
|
+
className: "cnvnav-bar-fill",
|
|
670
|
+
icon: React.createElement(JumpLatestIcon),
|
|
671
|
+
onClick: () => {
|
|
672
|
+
const gs = snap.outline !== null ? snap.outline.groups : [];
|
|
673
|
+
if (gs.length === 0) return;
|
|
674
|
+
const lastGroup = gs[gs.length - 1];
|
|
675
|
+
const lastItem = lastGroup.items[lastGroup.items.length - 1];
|
|
676
|
+
if (lastItem !== undefined) jumpTo(lastItem.key);
|
|
677
|
+
},
|
|
678
|
+
}, "回到最新"),
|
|
679
|
+
),
|
|
680
|
+
),
|
|
681
|
+
React.createElement(Tooltip, {
|
|
682
|
+
label: "折叠所有已展开的轮次",
|
|
683
|
+
side: "top",
|
|
684
|
+
delayMs: 500,
|
|
685
|
+
},
|
|
686
|
+
React.createElement("span", { className: "cnvnav-bar-btn" },
|
|
687
|
+
React.createElement(Button, {
|
|
688
|
+
variant: "ghost",
|
|
689
|
+
size: "sm",
|
|
690
|
+
className: "cnvnav-bar-fill",
|
|
691
|
+
icon: React.createElement(CollapseAllIcon),
|
|
692
|
+
onClick: () => setState({ expanded: {} }),
|
|
693
|
+
}, "全部折叠"),
|
|
694
|
+
),
|
|
695
|
+
),
|
|
651
696
|
),
|
|
652
697
|
);
|
|
653
698
|
}
|