@lynn123411/dsh-chat-translate 1.9.0 → 2.0.0

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.
@@ -1,19 +0,0 @@
1
- /**
2
- * 思考卡标题右侧的翻译按钮。
3
- *
4
- * 三态:idle(描边「译」字,点击开始翻译)、working(圈内圆环旋转,点击忽略)、
5
- * translated(实心高亮,点击整条切回原文)。样式只在首次使用注入一次,配色沿用
6
- * 内核的 dsw-* 变量;系统开启「减弱动态效果」时圆环不旋转。
7
- */
8
- export type ThinkButtonState = 'idle' | 'working' | 'translated';
9
- export declare const THINK_BUTTON_CLASS = "dsh-tidy-think-button";
10
- /** 注入按钮样式,重复调用无副作用。 */
11
- export declare function ensureThinkButtonStyles(): void;
12
- export interface ThinkButtonHandle {
13
- element: HTMLButtonElement;
14
- getState(): ThinkButtonState;
15
- setState(state: ThinkButtonState): void;
16
- setDisabled(disabled: boolean, reason: string): void;
17
- }
18
- /** 创建一个按钮实例;onActivate 由调用方决定点下去做什么。 */
19
- export declare function createThinkButton(onActivate: () => void): ThinkButtonHandle;
@@ -1,55 +0,0 @@
1
- /** 稳定的翻译单位:一块级元素,或一段行内节点。 */
2
- export interface ThinkUnit {
3
- element?: HTMLElement;
4
- nodes?: Node[];
5
- text: string;
6
- anchor: Node;
7
- }
8
- /** 收集正文里全部可翻译单位,跳过已挂译文的部分与代码块。 */
9
- export declare function collectThinkUnits(body: HTMLElement): ThinkUnit[];
10
- /** 按估算 token 把单位切成若干次客户端请求,顺序不变。 */
11
- export declare function chunkUnits(units: ThinkUnit[], maxTokens?: number): ThinkUnit[][];
12
- declare class ThinkTranslateController {
13
- /** 总开关与设置里的思考链开关同时打开。 */
14
- private enabled;
15
- /** AI 通道开关打开且已配置;缺任何一条都不注入按钮。 */
16
- private configured;
17
- private states;
18
- private syncTimers;
19
- /** 只处理当前会话的容器;由观察器在会话切换时更新。 */
20
- private scope;
21
- /** 观察器把当前会话的根交给控制器,插入按钮时只看这一棵子树。 */
22
- setScope(scope: ParentNode): void;
23
- isEnabled(): boolean;
24
- setEnabled(enabled: boolean): void;
25
- setConfigured(configured: boolean): void;
26
- /** 按钮是否可以存在:两个开关与 AI 通道配置缺一不可。 */
27
- private usable;
28
- private applyVisibility;
29
- /** 扫描当前会话里的全部思考卡(开关、配置或会话变化后调用)。 */
30
- syncAll(): void;
31
- /** 防抖后同步一张卡片。 */
32
- syncCard(card: HTMLElement): void;
33
- private stateFor;
34
- private runSync;
35
- private updateDisabled;
36
- private ensureButton;
37
- /** 折叠或停用时撤掉按钮,卡片的翻译状态不变。 */
38
- private removeButton;
39
- /** 插件停用:撤掉按钮并还原这张卡片上的全部译文。 */
40
- private discardCard;
41
- /** 卡片当前显示的是译文(至少有一个译文块可见)。 */
42
- private isShowingTranslation;
43
- private bodyOf;
44
- /** 展开时若整条都命中缓存,直接显示中文,不点按钮也不发请求。 */
45
- private showCachedWhenComplete;
46
- /** 按钮被点击;按钮只在展开的卡片上存在。 */
47
- private activate;
48
- /** 翻译这张卡片的全部单位:命中缓存的先挂上,其余按块请求。 */
49
- private translateCard;
50
- private translateUnits;
51
- /** 把译文挂到单位上;期间文本或节点已经变动的单位直接放弃(结果已进缓存)。 */
52
- private applyUnit;
53
- }
54
- export declare const thinkTranslator: ThinkTranslateController;
55
- export {};
@@ -1,43 +0,0 @@
1
- /**
2
- * StreamDebounceViewportObserver
3
- *
4
- * Combines:
5
- * 1. True IntersectionObserver for viewport visibility detection (rootMargin: '150px 0px').
6
- * 2. Typing/streaming debounce (default 400ms) to avoid translating partial streaming sentences.
7
- * 3. Batch queuing to group multiple visible elements into efficient batch requests.
8
- *
9
- */
10
- export interface ViewportObserverOptions {
11
- rootMargin?: string;
12
- debounceMs?: number;
13
- onVisibleBatch: (items: Array<{
14
- element: HTMLElement;
15
- text: string;
16
- }>) => void;
17
- }
18
- export declare class StreamDebounceViewportObserver {
19
- private intersectionObserver;
20
- /**
21
- * Pending per-element streaming debounce timers. A Map (not a WeakMap)
22
- * because disconnect() must enumerate and clear every pending timer: a
23
- * WeakMap cannot be iterated, so a debounce armed just before the switch was
24
- * turned off would still fire register() afterwards.
25
- */
26
- private streamingTimers;
27
- private pendingQueue;
28
- private batchFlushTimer;
29
- private options;
30
- constructor(options: ViewportObserverOptions);
31
- private initIntersectionObserver;
32
- /**
33
- * Observe an element with streaming debounce.
34
- * If streaming updates characterData repeatedly within debounceMs, the timer resets.
35
- */
36
- observeWithDebounce(element: HTMLElement, text: string, immediate?: boolean): void;
37
- private armDebounce;
38
- private register;
39
- private enqueueBatch;
40
- private flushQueue;
41
- unobserve(element: HTMLElement): void;
42
- disconnect(): void;
43
- }
@@ -1,15 +0,0 @@
1
- import type { ITranslationAdapter, PluginConfig } from './base.ts';
2
- interface BingTokens {
3
- ig: string;
4
- key: string;
5
- token: string;
6
- }
7
- export declare function fetchTokens(signal: AbortSignal, forceRefresh?: boolean): Promise<BingTokens>;
8
- export declare class BingWebAdapter implements ITranslationAdapter {
9
- readonly id = "bing";
10
- readonly name = "\u5FAE\u8F6F Bing \u7F51\u9875\u7FFB\u8BD1 (\u514DKey\u76F4\u8FDE)";
11
- isAvailable(_config: PluginConfig): boolean;
12
- translate(text: string, signal: AbortSignal, config: PluginConfig): Promise<string>;
13
- private executeTranslate;
14
- }
15
- export {};