dsh-mega-chat-nav 0.1.1
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/LICENSE +201 -0
- package/README.en.md +149 -0
- package/README.md +149 -0
- package/cordis.patch.yml +4 -0
- package/lib/client/NavOverlay.js +35 -0
- package/lib/client/NavRail.js +12 -0
- package/lib/client/QuestionNavSettingsTab.js +26 -0
- package/lib/client/QuestionNavStrip.js +555 -0
- package/lib/client/components/ConfigPanel.js +14 -0
- package/lib/client/components/DotRail.js +62 -0
- package/lib/client/components/NavOverlay.js +121 -0
- package/lib/client/components/NavRail.js +97 -0
- package/lib/client/components/RailDispatch.js +22 -0
- package/lib/client/components/RailHost.js +79 -0
- package/lib/client/components/SearchBox.js +66 -0
- package/lib/client/components/SettingsPage.js +46 -0
- package/lib/client/components/StandaloneSettings.js +16 -0
- package/lib/client/components/codex/CodexRail.js +139 -0
- package/lib/client/components/deepseek/DeepseekRail.js +264 -0
- package/lib/client/components/minimal/MinimalRail.js +135 -0
- package/lib/client/components/minimal/cards.js +32 -0
- package/lib/client/components/minimal/dot.js +11 -0
- package/lib/client/components/minimal/hint.js +30 -0
- package/lib/client/components/minimal/paging.js +5 -0
- package/lib/client/components/minimal/quick-settings.js +28 -0
- package/lib/client/components/minimal/search.js +67 -0
- package/lib/client/components/minimal/useRail.js +716 -0
- package/lib/client/components/rail/cards.js +32 -0
- package/lib/client/components/rail/hint.js +30 -0
- package/lib/client/components/rail/paging.js +5 -0
- package/lib/client/components/rail/quick-settings.js +28 -0
- package/lib/client/components/rail/search.js +76 -0
- package/lib/client/components/rail/useRail.js +845 -0
- package/lib/client/components/settings/SettingsPage.js +46 -0
- package/lib/client/components/settings/SettingsTab.js +17 -0
- package/lib/client/components/settings/StandaloneSettings.js +16 -0
- package/lib/client/components/shared/Cascade.js +26 -0
- package/lib/client/components/shared/ConfigPanel.js +27 -0
- package/lib/client/components/shared/Dot.js +8 -0
- package/lib/client/components/shared/Hint.js +5 -0
- package/lib/client/components/shared/PagingButton.js +5 -0
- package/lib/client/components/shared/RailShell.js +78 -0
- package/lib/client/components/shared/SearchBox.js +63 -0
- package/lib/client/components/shared/hooks.js +427 -0
- package/lib/client/components/shared/types.js +1 -0
- package/lib/client/config.js +1 -0
- package/lib/client/engines/jump.js +34 -0
- package/lib/client/engines/useAtBottom.js +25 -0
- package/lib/client/engines/useJump.js +40 -0
- package/lib/client/engines/useScrollSpy.js +88 -0
- package/lib/client/hooks.js +11 -0
- package/lib/client/index.js +312 -0
- package/lib/client/jump.js +255 -0
- package/lib/client/locales.js +142 -0
- package/lib/client/pure.js +61 -0
- package/lib/client/settings.js +369 -0
- package/lib/client/virtual/VirtualList.js +21 -0
- package/lib/client.js +3213 -0
- package/lib/compat.js +145 -0
- package/lib/config.js +37 -0
- package/lib/core/active-dot.js +17 -0
- package/lib/core/align.js +9 -0
- package/lib/core/config.js +37 -0
- package/lib/core/focus.js +38 -0
- package/lib/core/jump.js +98 -0
- package/lib/core/logic/active-dot.js +16 -0
- package/lib/core/logic/focus.js +34 -0
- package/lib/core/logic/jump.js +188 -0
- package/lib/core/logic/nodes.js +59 -0
- package/lib/core/model/nav-item.js +1 -0
- package/lib/core/model/turns.js +73 -0
- package/lib/core/nav-item.js +1 -0
- package/lib/core/nodes.js +57 -0
- package/lib/core/page-size.js +7 -0
- package/lib/core/question-entry.js +1 -0
- package/lib/core/time.js +23 -0
- package/lib/core/turn-dots.js +85 -0
- package/lib/core/utils/measure.js +24 -0
- package/lib/core/utils/time.js +26 -0
- package/lib/index.js +64 -0
- package/lib/nav-item.js +1 -0
- package/lib/nodes.js +59 -0
- package/lib/projection.js +126 -0
- package/lib/schema.js +26 -0
- package/lib/search.js +285 -0
- package/lib/settings.js +89 -0
- package/lib/types/client/NavOverlay.d.ts +18 -0
- package/lib/types/client/NavRail.d.ts +7 -0
- package/lib/types/client/QuestionNavSettingsTab.d.ts +16 -0
- package/lib/types/client/QuestionNavStrip.d.ts +48 -0
- package/lib/types/client/components/ConfigPanel.d.ts +14 -0
- package/lib/types/client/components/DotRail.d.ts +15 -0
- package/lib/types/client/components/NavOverlay.d.ts +30 -0
- package/lib/types/client/components/NavRail.d.ts +16 -0
- package/lib/types/client/components/RailDispatch.d.ts +8 -0
- package/lib/types/client/components/RailHost.d.ts +27 -0
- package/lib/types/client/components/SearchBox.d.ts +9 -0
- package/lib/types/client/components/SettingsPage.d.ts +9 -0
- package/lib/types/client/components/StandaloneSettings.d.ts +13 -0
- package/lib/types/client/components/codex/CodexRail.d.ts +3 -0
- package/lib/types/client/components/deepseek/DeepseekRail.d.ts +3 -0
- package/lib/types/client/components/minimal/MinimalRail.d.ts +8 -0
- package/lib/types/client/components/minimal/cards.d.ts +19 -0
- package/lib/types/client/components/minimal/dot.d.ts +14 -0
- package/lib/types/client/components/minimal/hint.d.ts +11 -0
- package/lib/types/client/components/minimal/paging.d.ts +10 -0
- package/lib/types/client/components/minimal/quick-settings.d.ts +8 -0
- package/lib/types/client/components/minimal/search.d.ts +27 -0
- package/lib/types/client/components/minimal/useRail.d.ts +90 -0
- package/lib/types/client/components/rail/cards.d.ts +19 -0
- package/lib/types/client/components/rail/hint.d.ts +11 -0
- package/lib/types/client/components/rail/paging.d.ts +10 -0
- package/lib/types/client/components/rail/quick-settings.d.ts +8 -0
- package/lib/types/client/components/rail/search.d.ts +34 -0
- package/lib/types/client/components/rail/useRail.d.ts +132 -0
- package/lib/types/client/components/settings/SettingsPage.d.ts +9 -0
- package/lib/types/client/components/settings/SettingsTab.d.ts +6 -0
- package/lib/types/client/components/settings/StandaloneSettings.d.ts +13 -0
- package/lib/types/client/components/shared/Cascade.d.ts +14 -0
- package/lib/types/client/components/shared/ConfigPanel.d.ts +8 -0
- package/lib/types/client/components/shared/Dot.d.ts +17 -0
- package/lib/types/client/components/shared/Hint.d.ts +6 -0
- package/lib/types/client/components/shared/PagingButton.d.ts +10 -0
- package/lib/types/client/components/shared/RailShell.d.ts +43 -0
- package/lib/types/client/components/shared/SearchBox.d.ts +18 -0
- package/lib/types/client/components/shared/hooks.d.ts +64 -0
- package/lib/types/client/components/shared/types.d.ts +101 -0
- package/lib/types/client/config.d.ts +9 -0
- package/lib/types/client/engines/jump.d.ts +17 -0
- package/lib/types/client/engines/useAtBottom.d.ts +1 -0
- package/lib/types/client/engines/useJump.d.ts +16 -0
- package/lib/types/client/engines/useScrollSpy.d.ts +12 -0
- package/lib/types/client/hooks.d.ts +7 -0
- package/lib/types/client/index.d.ts +31 -0
- package/lib/types/client/jump.d.ts +47 -0
- package/lib/types/client/locales.d.ts +142 -0
- package/lib/types/client/pure.d.ts +21 -0
- package/lib/types/client/settings.d.ts +173 -0
- package/lib/types/client/virtual/VirtualList.d.ts +15 -0
- package/lib/types/compat.d.ts +44 -0
- package/lib/types/config.d.ts +44 -0
- package/lib/types/core/active-dot.d.ts +15 -0
- package/lib/types/core/align.d.ts +10 -0
- package/lib/types/core/config.d.ts +44 -0
- package/lib/types/core/focus.d.ts +24 -0
- package/lib/types/core/jump.d.ts +39 -0
- package/lib/types/core/logic/active-dot.d.ts +15 -0
- package/lib/types/core/logic/focus.d.ts +22 -0
- package/lib/types/core/logic/jump.d.ts +39 -0
- package/lib/types/core/logic/nodes.d.ts +48 -0
- package/lib/types/core/model/nav-item.d.ts +12 -0
- package/lib/types/core/model/turns.d.ts +30 -0
- package/lib/types/core/nav-item.d.ts +12 -0
- package/lib/types/core/nodes.d.ts +43 -0
- package/lib/types/core/page-size.d.ts +8 -0
- package/lib/types/core/question-entry.d.ts +12 -0
- package/lib/types/core/time.d.ts +4 -0
- package/lib/types/core/turn-dots.d.ts +29 -0
- package/lib/types/core/utils/measure.d.ts +12 -0
- package/lib/types/core/utils/time.d.ts +4 -0
- package/lib/types/index.d.ts +4 -0
- package/lib/types/nav-item.d.ts +12 -0
- package/lib/types/nodes.d.ts +48 -0
- package/lib/types/projection.d.ts +71 -0
- package/lib/types/schema.d.ts +37 -0
- package/lib/types/search.d.ts +42 -0
- package/lib/types/settings.d.ts +99 -0
- package/package.json +71 -0
- package/src/client/components/RailDispatch.tsx +27 -0
- package/src/client/components/codex/CodexRail.tsx +348 -0
- package/src/client/components/deepseek/DeepseekRail.tsx +522 -0
- package/src/client/components/minimal/MinimalRail.tsx +324 -0
- package/src/client/components/minimal/dot.tsx +32 -0
- package/src/client/components/rail/cards.tsx +102 -0
- package/src/client/components/rail/hint.tsx +50 -0
- package/src/client/components/rail/paging.tsx +26 -0
- package/src/client/components/rail/quick-settings.tsx +130 -0
- package/src/client/components/rail/search.tsx +147 -0
- package/src/client/components/rail/useRail.ts +906 -0
- package/src/client/components/settings/SettingsPage.tsx +198 -0
- package/src/client/components/settings/StandaloneSettings.tsx +28 -0
- package/src/client/components/shared/types.ts +99 -0
- package/src/client/index.ts +388 -0
- package/src/client/jump.ts +293 -0
- package/src/client/locales.ts +143 -0
- package/src/client/settings.ts +482 -0
- package/src/client/styles.css +1580 -0
- package/src/compat.ts +161 -0
- package/src/index.ts +66 -0
- package/src/projection.ts +174 -0
- package/src/search.ts +291 -0
- package/src/settings.ts +169 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** 风格选项(当前仅「简约」;后续风格在组件层扩展) */
|
|
2
|
+
export declare const StyleOptions: readonly ["minimal"];
|
|
3
|
+
export type NavStyle = typeof StyleOptions[number];
|
|
4
|
+
export declare const DEFAULT_STYLE: NavStyle;
|
|
5
|
+
/** 停靠侧选项与默认值 */
|
|
6
|
+
export declare const AlignOptions: readonly ["left", "right"];
|
|
7
|
+
export type RailAlign = typeof AlignOptions[number];
|
|
8
|
+
export declare const DEFAULT_RAIL_ALIGN: RailAlign;
|
|
9
|
+
/** 节点栏条带高度档位(决定当前可见节点数:≈10/15/20 个) */
|
|
10
|
+
export declare const BandHeightOptions: readonly ["compact", "standard", "tall"];
|
|
11
|
+
export type BandHeight = typeof BandHeightOptions[number];
|
|
12
|
+
export declare const DEFAULT_BAND: BandHeight;
|
|
13
|
+
/** 档位 → 条带最大高度(px):节点行高 14px × 10/15/20 */
|
|
14
|
+
export declare const BAND_HEIGHT_PX: Record<BandHeight, number>;
|
|
15
|
+
/** 跳转动画方式 */
|
|
16
|
+
export declare const ScrollModeOptions: readonly ["smooth", "instant"];
|
|
17
|
+
export type ScrollMode = typeof ScrollModeOptions[number];
|
|
18
|
+
export declare const DEFAULT_SCROLL_MODE: ScrollMode;
|
|
19
|
+
/** 显示策略:常显 / 悬停浮现 / 隐藏 */
|
|
20
|
+
export declare const ShowModeOptions: readonly ["show", "peek", "hide"];
|
|
21
|
+
export type ShowMode = typeof ShowModeOptions[number];
|
|
22
|
+
export declare const DEFAULT_SHOW: ShowMode;
|
|
23
|
+
/** 悬停级联卡数量(1/3/5 张) */
|
|
24
|
+
export declare const CardCountOptions: readonly [1, 3, 5];
|
|
25
|
+
export type CardCount = typeof CardCountOptions[number];
|
|
26
|
+
export declare const DEFAULT_CARD_COUNT: CardCount;
|
|
27
|
+
/** 风格能力:各风格声明自己的可选能力(组件与设置面据此取舍) */
|
|
28
|
+
export interface StyleCapabilities {
|
|
29
|
+
/** 悬停悬浮卡片(级联预览)——其他风格可能没有 */
|
|
30
|
+
hoverCards: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** 风格 → 能力表 */
|
|
33
|
+
export declare const STYLE_CAPABILITIES: Record<NavStyle, StyleCapabilities>;
|
|
34
|
+
/** 设置键名(嵌套 schema 字段名;client 桥写回与 host schema 共用) */
|
|
35
|
+
export declare const STYLE_KEY = "style";
|
|
36
|
+
export declare const ALIGN_KEY = "align";
|
|
37
|
+
export declare const BAND_KEY = "bandHeight";
|
|
38
|
+
export declare const SCROLL_KEY = "scrollBehavior";
|
|
39
|
+
export declare const SHOW_COUNT_KEY = "showCount";
|
|
40
|
+
export declare const SHOW_SEARCH_KEY = "showSearch";
|
|
41
|
+
export declare const SHOW_QUICK_KEY = "showQuickSettings";
|
|
42
|
+
export declare const CARD_COUNT_KEY = "cardCount";
|
|
43
|
+
/** 本插件设置命名空间(拼写而非导入:client bundle 不得依赖宿主包) */
|
|
44
|
+
export declare const MGS_NS = "mega-chat-nav";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** 一行圆点锚点行的位置测量(滚动口坐标系) */
|
|
2
|
+
export interface DotRowMeasure {
|
|
3
|
+
/** 圆点 key(回合跳转锚点) */
|
|
4
|
+
key: string;
|
|
5
|
+
/** 行顶到滚动口顶的像素差 */
|
|
6
|
+
top: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 选取标记圆点:阅读线之上(含)的最后一行为当前回合;
|
|
10
|
+
* 阅读线在所有行之上(开场问答之前)时取第一行兜底;无渲染行返回 null。
|
|
11
|
+
* 行按圆点顺序输入;扫描保留最后一个满足项,单条乱序测量不回退标记。
|
|
12
|
+
*/
|
|
13
|
+
export declare function nearestReadDot(rows: readonly DotRowMeasure[], readingLine: number): string | null;
|
|
14
|
+
/** 阅读线固定为视口顶部(0) */
|
|
15
|
+
export declare const READING_LINE_TOP = 0;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** 可选停靠侧 */
|
|
2
|
+
export declare const AlignOptions: readonly ["left", "right"];
|
|
3
|
+
/** 停靠侧偏好 */
|
|
4
|
+
export type RailAlign = typeof AlignOptions[number];
|
|
5
|
+
/** 默认停靠侧(设置文档无覆盖时) */
|
|
6
|
+
export declare const DEFAULT_RAIL_ALIGN: RailAlign;
|
|
7
|
+
/** 本插件设置命名空间(此处拼写而非导入:client bundle 不得依赖宿主包) */
|
|
8
|
+
export declare const MGS_NS = "mega-chat-nav";
|
|
9
|
+
/** 设置字段:停靠侧 */
|
|
10
|
+
export declare const ALIGN_KEY = "align";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** 风格选项(当前仅「简约」;后续风格在组件层扩展) */
|
|
2
|
+
export declare const StyleOptions: readonly ["minimal"];
|
|
3
|
+
export type NavStyle = typeof StyleOptions[number];
|
|
4
|
+
export declare const DEFAULT_STYLE: NavStyle;
|
|
5
|
+
/** 停靠侧选项与默认值 */
|
|
6
|
+
export declare const AlignOptions: readonly ["left", "right"];
|
|
7
|
+
export type RailAlign = typeof AlignOptions[number];
|
|
8
|
+
export declare const DEFAULT_RAIL_ALIGN: RailAlign;
|
|
9
|
+
/** 节点栏条带高度档位(决定当前可见节点数:≈10/15/20 个) */
|
|
10
|
+
export declare const BandHeightOptions: readonly ["compact", "standard", "tall"];
|
|
11
|
+
export type BandHeight = typeof BandHeightOptions[number];
|
|
12
|
+
export declare const DEFAULT_BAND: BandHeight;
|
|
13
|
+
/** 档位 → 条带最大高度(px):节点行高 14px × 10/15/20 */
|
|
14
|
+
export declare const BAND_HEIGHT_PX: Record<BandHeight, number>;
|
|
15
|
+
/** 跳转动画方式 */
|
|
16
|
+
export declare const ScrollModeOptions: readonly ["smooth", "instant"];
|
|
17
|
+
export type ScrollMode = typeof ScrollModeOptions[number];
|
|
18
|
+
export declare const DEFAULT_SCROLL_MODE: ScrollMode;
|
|
19
|
+
/** 显示策略:常显 / 悬停浮现 / 隐藏 */
|
|
20
|
+
export declare const ShowModeOptions: readonly ["show", "peek", "hide"];
|
|
21
|
+
export type ShowMode = typeof ShowModeOptions[number];
|
|
22
|
+
export declare const DEFAULT_SHOW: ShowMode;
|
|
23
|
+
/** 悬停级联卡数量(1/3/5 张) */
|
|
24
|
+
export declare const CardCountOptions: readonly [1, 3, 5];
|
|
25
|
+
export type CardCount = typeof CardCountOptions[number];
|
|
26
|
+
export declare const DEFAULT_CARD_COUNT: CardCount;
|
|
27
|
+
/** 风格能力:各风格声明自己的可选能力(组件与设置面据此取舍) */
|
|
28
|
+
export interface StyleCapabilities {
|
|
29
|
+
/** 悬停悬浮卡片(级联预览)——其他风格可能没有 */
|
|
30
|
+
hoverCards: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** 风格 → 能力表 */
|
|
33
|
+
export declare const STYLE_CAPABILITIES: Record<NavStyle, StyleCapabilities>;
|
|
34
|
+
/** 设置键名(嵌套 schema 字段名;client 桥写回与 host schema 共用) */
|
|
35
|
+
export declare const STYLE_KEY = "style";
|
|
36
|
+
export declare const ALIGN_KEY = "align";
|
|
37
|
+
export declare const BAND_KEY = "bandHeight";
|
|
38
|
+
export declare const SCROLL_KEY = "scrollBehavior";
|
|
39
|
+
export declare const SHOW_COUNT_KEY = "showCount";
|
|
40
|
+
export declare const SHOW_SEARCH_KEY = "showSearch";
|
|
41
|
+
export declare const SHOW_QUICK_KEY = "showQuickSettings";
|
|
42
|
+
export declare const CARD_COUNT_KEY = "cardCount";
|
|
43
|
+
/** 本插件设置命名空间(拼写而非导入:client bundle 不得依赖宿主包) */
|
|
44
|
+
export declare const MGS_NS = "mega-chat-nav";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** 选中点两侧保持放大的圆点数 */
|
|
2
|
+
export declare const FOCUS_RADIUS = 2;
|
|
3
|
+
/** 悬停放大倍数:仅选中圆点放大(邻居不再有放大特效) */
|
|
4
|
+
export declare const FOCUS_SCALES: readonly [1.5];
|
|
5
|
+
/** 距离 → 聚焦档(窗口内 0..RADIUS,窗口外 null;供级联卡窗口使用) */
|
|
6
|
+
export declare function focusTier(distance: number): number | null;
|
|
7
|
+
/** 距离 → 放大倍数:仅选中点(distance 0)放大,邻居/窗口外均为 1 */
|
|
8
|
+
export declare function focusScale(distance: number): number;
|
|
9
|
+
/** 级联卡呈现参数:选中卡为焦点(最宽/全文本/品牌条),邻居卡窄而截断 */
|
|
10
|
+
export interface CardMetrics {
|
|
11
|
+
widthPx: number;
|
|
12
|
+
fontSize: number;
|
|
13
|
+
maxLines: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function focusCardMetrics(distance: number): CardMetrics | null;
|
|
16
|
+
/** 基础圆点直径与间距(与轨样式一致,翻页步进按整行计) */
|
|
17
|
+
export declare const DOT_SIZE = 8;
|
|
18
|
+
export declare const DOT_GAP = 6;
|
|
19
|
+
/** 一次翻页揭示的整行数 */
|
|
20
|
+
export declare const DOT_PAGE_ROWS = 5;
|
|
21
|
+
/** 一次翻页的滚动步长(px) */
|
|
22
|
+
export declare function pageStep(dotSize?: number, gap?: number, rows?: number): number;
|
|
23
|
+
/** 将目标滚动位置钳制到有效区间 */
|
|
24
|
+
export declare function clampScrollTop(target: number, maxScroll: number): number;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** 跳转循环所需的会话快照面 */
|
|
2
|
+
export interface JumpSnapshot {
|
|
3
|
+
openState: string;
|
|
4
|
+
hasMore: boolean;
|
|
5
|
+
loadingOlder: boolean;
|
|
6
|
+
rows: Iterable<{
|
|
7
|
+
key: string;
|
|
8
|
+
anchorSeq: number;
|
|
9
|
+
visibility?: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
/** 外部端口:会话读写、DOM 行查找、滚动与时钟(由浏览器半装配) */
|
|
13
|
+
export interface JumpPorts {
|
|
14
|
+
snapshot: () => JumpSnapshot | undefined;
|
|
15
|
+
loadOlder: () => Promise<void>;
|
|
16
|
+
isViewActive: () => boolean;
|
|
17
|
+
findRow: (key: string) => HTMLElement | null;
|
|
18
|
+
scrollIntoView: (row: HTMLElement, mode: 'smooth' | 'instant') => void;
|
|
19
|
+
now: () => number;
|
|
20
|
+
sleep: (ms: number) => Promise<void>;
|
|
21
|
+
report?: (code: JumpFailureCode, fallback?: boolean) => void;
|
|
22
|
+
}
|
|
23
|
+
export type JumpFailureCode = 'VIEW_INACTIVE' | 'TARGET_HIDDEN' | 'NOT_FOUND' | 'TIMEOUT';
|
|
24
|
+
export interface JumpResult {
|
|
25
|
+
ok: boolean;
|
|
26
|
+
code?: JumpFailureCode;
|
|
27
|
+
fallback?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface JumpOptions {
|
|
30
|
+
totalTimeoutMs?: number;
|
|
31
|
+
maxPages?: number;
|
|
32
|
+
rowWaitMs?: number;
|
|
33
|
+
pollMs?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 跳转到 key 对应行:先扩窗(预算内)直至目标入窗,再等待行渲染并滚动;
|
|
37
|
+
* 目标隐藏/缺失时回退最近可渲染行。各失败点返回结构化结果码。
|
|
38
|
+
*/
|
|
39
|
+
export declare function jumpToTarget(ports: JumpPorts, key: string, options?: JumpOptions, mode?: 'smooth' | 'instant'): Promise<JumpResult>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** 一行圆点锚点行的位置测量(滚动口坐标系) */
|
|
2
|
+
export interface DotRowMeasure {
|
|
3
|
+
/** 圆点 key(回合跳转锚点) */
|
|
4
|
+
key: string;
|
|
5
|
+
/** 行顶到滚动口顶的像素差 */
|
|
6
|
+
top: number;
|
|
7
|
+
}
|
|
8
|
+
/** 阅读线固定为视口顶部(0) */
|
|
9
|
+
export declare const READING_LINE_TOP = 0;
|
|
10
|
+
/**
|
|
11
|
+
* 选取标记圆点:阅读线之上(含)的最后一行为当前回合;
|
|
12
|
+
* 阅读线在所有行之上(开场问答之前)时取第一行兜底;无渲染行返回 null。
|
|
13
|
+
* 实现:自尾向首扫描第一个越过阅读线的行(等价于「最后一个满足项」)。
|
|
14
|
+
*/
|
|
15
|
+
export declare function nearestReadDot(rows: readonly DotRowMeasure[], readingLine: number): string | null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** 选中点两侧计入聚焦窗口的圆点数 */
|
|
2
|
+
export declare const FOCUS_RADIUS = 2;
|
|
3
|
+
/** 悬停放大倍数:仅选中圆点放大(邻居不再有放大特效) */
|
|
4
|
+
export declare const FOCUS_SCALES: readonly [1.5];
|
|
5
|
+
/** 级联卡呈现参数:选中卡为焦点(最宽/全文本/品牌条),邻居卡窄而截断 */
|
|
6
|
+
export interface CardMetrics {
|
|
7
|
+
widthPx: number;
|
|
8
|
+
fontSize: number;
|
|
9
|
+
maxLines: number;
|
|
10
|
+
}
|
|
11
|
+
/** 距离 → 聚焦度量(档位 + 放大倍数 + 卡尺寸);聚焦窗口外返回 null */
|
|
12
|
+
export declare function focusMetrics(distance: number): {
|
|
13
|
+
tier: number;
|
|
14
|
+
scale: number;
|
|
15
|
+
card: CardMetrics;
|
|
16
|
+
} | null;
|
|
17
|
+
/** 距离 → 聚焦档(窗口内 0..RADIUS,窗口外 null;供级联卡窗口使用) */
|
|
18
|
+
export declare function focusTier(distance: number): number | null;
|
|
19
|
+
/** 距离 → 放大倍数:仅选中点(distance 0)放大,邻居/窗口外均为 1 */
|
|
20
|
+
export declare function focusScale(distance: number): number;
|
|
21
|
+
/** 距离 → 卡呈现参数;聚焦窗口外返回 null */
|
|
22
|
+
export declare function focusCardMetrics(distance: number): CardMetrics | null;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** 跳转循环所需的会话快照面 */
|
|
2
|
+
export interface JumpSnapshot {
|
|
3
|
+
openState: string;
|
|
4
|
+
hasMore: boolean;
|
|
5
|
+
loadingOlder: boolean;
|
|
6
|
+
rows: Iterable<{
|
|
7
|
+
key: string;
|
|
8
|
+
anchorSeq: number;
|
|
9
|
+
visibility?: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
/** 外部端口:会话读写、DOM 行查找、滚动与时钟(由浏览器半装配) */
|
|
13
|
+
export interface JumpPorts {
|
|
14
|
+
snapshot: () => JumpSnapshot | undefined;
|
|
15
|
+
loadOlder: () => Promise<void>;
|
|
16
|
+
isViewActive: () => boolean;
|
|
17
|
+
findRow: (key: string) => HTMLElement | null;
|
|
18
|
+
scrollIntoView: (row: HTMLElement, mode: 'smooth' | 'instant') => void;
|
|
19
|
+
now: () => number;
|
|
20
|
+
sleep: (ms: number) => Promise<void>;
|
|
21
|
+
report?: (code: JumpFailureCode, fallback?: boolean) => void;
|
|
22
|
+
}
|
|
23
|
+
export type JumpFailureCode = 'VIEW_INACTIVE' | 'TARGET_HIDDEN' | 'NOT_FOUND' | 'TIMEOUT';
|
|
24
|
+
export interface JumpResult {
|
|
25
|
+
ok: boolean;
|
|
26
|
+
code?: JumpFailureCode;
|
|
27
|
+
fallback?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface JumpOptions {
|
|
30
|
+
totalTimeoutMs?: number;
|
|
31
|
+
maxPages?: number;
|
|
32
|
+
rowWaitMs?: number;
|
|
33
|
+
pollMs?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 跳转到 key 对应行:状态机驱动(定位 → 等就绪 → 扩窗 → 等渲染 → 回退);
|
|
37
|
+
* 各失败点返回结构化结果码。
|
|
38
|
+
*/
|
|
39
|
+
export declare function jumpToTarget(ports: JumpPorts, key: string, options?: JumpOptions, mode?: 'smooth' | 'instant'): Promise<JumpResult>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** 一条导航展示/跳转单元 */
|
|
2
|
+
export interface NavNode {
|
|
3
|
+
/** 会话行锚点 key(匹配 [data-chat-anchor-key]) */
|
|
4
|
+
key: string;
|
|
5
|
+
/** 单调锚点序号(排序与窗口最小检测) */
|
|
6
|
+
anchorSeq: number;
|
|
7
|
+
/** 消息事件 seq */
|
|
8
|
+
seq: number;
|
|
9
|
+
/** Unix 毫秒时间戳 */
|
|
10
|
+
time: number;
|
|
11
|
+
/** 完整提问文本(悬停卡用,不截断) */
|
|
12
|
+
text: string;
|
|
13
|
+
}
|
|
14
|
+
/** 会话节点最小结构面(结构型,非 SDK 绑定) */
|
|
15
|
+
export interface ChatRowLike {
|
|
16
|
+
key: string;
|
|
17
|
+
anchorSeq: number;
|
|
18
|
+
visibility?: string;
|
|
19
|
+
kind?: string;
|
|
20
|
+
data?: unknown;
|
|
21
|
+
}
|
|
22
|
+
/** 会话行节点的导航提取 / 查找工具 */
|
|
23
|
+
export declare class NavNodes {
|
|
24
|
+
/** 计入「提问」的节点 kind */
|
|
25
|
+
static readonly KINDS: readonly ["user", "steering"];
|
|
26
|
+
/** 判定节点 kind 是否计入提问 */
|
|
27
|
+
static isKind(kind: string | undefined): boolean;
|
|
28
|
+
/** 消息首文本块;缺省空串 */
|
|
29
|
+
static messageText(content: readonly {
|
|
30
|
+
type?: string;
|
|
31
|
+
text?: string;
|
|
32
|
+
}[] | undefined): string;
|
|
33
|
+
/** 从节点窗口提取提问列表,按 anchorSeq 升序(筛选 → 投影 → 排序 管线) */
|
|
34
|
+
static extract(rows: Iterable<ChatRowLike>): NavNode[];
|
|
35
|
+
/** 节点是否实际渲染(隐藏行不可作滚动目标) */
|
|
36
|
+
static isRenderable(node: ChatRowLike): boolean;
|
|
37
|
+
/** 窗口内精确查找 key 对应行 */
|
|
38
|
+
static find(rows: Iterable<ChatRowLike>, key: string): ChatRowLike | null;
|
|
39
|
+
/** 缺失/隐藏 key 时回退到最近可渲染行(取最新 anchorSeq,贴近用户点击意图) */
|
|
40
|
+
static nearest(rows: Iterable<{
|
|
41
|
+
key: string;
|
|
42
|
+
anchorSeq: number;
|
|
43
|
+
visibility?: string;
|
|
44
|
+
}>, excludeKey: string | undefined): {
|
|
45
|
+
key: string;
|
|
46
|
+
anchorSeq: number;
|
|
47
|
+
} | null;
|
|
48
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { NavItem } from './nav-item.ts';
|
|
2
|
+
import type { NavNode } from '../logic/nodes.ts';
|
|
3
|
+
/**
|
|
4
|
+
* 消息稳定聊天 key 格式:镜像 conversationContextKey(kind, id) 公式,
|
|
5
|
+
* 即 '<kind长度>:<kind><id>';kind 段固定为用户消息的 'input-message'
|
|
6
|
+
* ——必须与 dsh 聊天行的 [data-chat-anchor-key] 对齐(外部契约,勿改)。
|
|
7
|
+
*/
|
|
8
|
+
/** 一个圆点:某回合的提问组(或一条未入投影的活提问) */
|
|
9
|
+
export interface NavDot {
|
|
10
|
+
/** 归属回合;活提问(投影未收)为 null */
|
|
11
|
+
readonly turn: number | null;
|
|
12
|
+
/** 跳转锚点:组内首问的聊天 key */
|
|
13
|
+
readonly key: string;
|
|
14
|
+
/** 首问锚点序号 */
|
|
15
|
+
readonly anchorSeq: number;
|
|
16
|
+
/** 首问时间 */
|
|
17
|
+
readonly time: number;
|
|
18
|
+
/** 组内全部提问文本(按序) */
|
|
19
|
+
readonly texts: readonly string[];
|
|
20
|
+
/** 组内全部聊天 key(活合并去重用) */
|
|
21
|
+
readonly memberKeys: readonly string[];
|
|
22
|
+
}
|
|
23
|
+
/** 投影提问列表 → 每回合一个圆点;同回合连续条目合并(锚点取首问) */
|
|
24
|
+
export declare function groupByTurn(entries: readonly NavItem[]): NavDot[];
|
|
25
|
+
/**
|
|
26
|
+
* 合并活窗口提问(投影推送帧到达前的短暂窗口):
|
|
27
|
+
* 已并入圆点的 key 丢弃(投影副本优先);其余作为单问圆点(turn:null)
|
|
28
|
+
* 按 anchorSeq 有序插入。无新增时返回原数组引用(调用方可 bail out)。
|
|
29
|
+
*/
|
|
30
|
+
export declare function mergeLiveEntries(dots: readonly NavDot[], live: readonly NavNode[]): NavDot[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** 一条导航展示/跳转单元 */
|
|
2
|
+
export interface NavNode {
|
|
3
|
+
/** 会话行锚点 key(匹配 [data-chat-anchor-key]) */
|
|
4
|
+
key: string;
|
|
5
|
+
/** 单调锚点序号(排序与窗口最小检测) */
|
|
6
|
+
anchorSeq: number;
|
|
7
|
+
/** 消息事件 seq */
|
|
8
|
+
seq: number;
|
|
9
|
+
/** Unix 毫秒时间戳 */
|
|
10
|
+
time: number;
|
|
11
|
+
/** 完整提问文本(悬停卡用,不截断) */
|
|
12
|
+
text: string;
|
|
13
|
+
}
|
|
14
|
+
/** 会话节点最小结构面(结构型,非 SDK 绑定) */
|
|
15
|
+
export interface ChatRowLike {
|
|
16
|
+
key: string;
|
|
17
|
+
anchorSeq: number;
|
|
18
|
+
visibility?: string;
|
|
19
|
+
kind?: string;
|
|
20
|
+
data?: unknown;
|
|
21
|
+
}
|
|
22
|
+
/** 计入「提问」的节点 kind */
|
|
23
|
+
export declare const NAV_KINDS: readonly ["user", "steering"];
|
|
24
|
+
/** 消息首文本块;缺省空串 */
|
|
25
|
+
export declare function messageText(content: readonly {
|
|
26
|
+
type?: string;
|
|
27
|
+
text?: string;
|
|
28
|
+
}[] | undefined): string;
|
|
29
|
+
/** 从节点窗口提取提问列表,按 anchorSeq 升序 */
|
|
30
|
+
export declare function extractNavNodes(nodes: Iterable<ChatRowLike>): NavNode[];
|
|
31
|
+
/** 节点是否实际渲染(隐藏行不可作滚动目标) */
|
|
32
|
+
export declare function isRenderable(node: ChatRowLike): boolean;
|
|
33
|
+
/** 窗口内精确查找 key 对应行 */
|
|
34
|
+
export declare function findNavRow(nodes: Iterable<ChatRowLike>, key: string): ChatRowLike | null;
|
|
35
|
+
/** 缺失/隐藏 key 时回退到最近可渲染行(取最新 anchorSeq,贴近用户点击意图) */
|
|
36
|
+
export declare function nearestRenderable(nodes: Iterable<{
|
|
37
|
+
key: string;
|
|
38
|
+
anchorSeq: number;
|
|
39
|
+
visibility?: string;
|
|
40
|
+
}>, excludeKey: string | undefined): {
|
|
41
|
+
key: string;
|
|
42
|
+
anchorSeq: number;
|
|
43
|
+
} | null;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** 可选翻页数量 */
|
|
2
|
+
export declare const PageSizeOptions: readonly [3, 5, 8, 10];
|
|
3
|
+
/** 一次翻页揭示的圆点数 */
|
|
4
|
+
export type PageSize = typeof PageSizeOptions[number];
|
|
5
|
+
/** 默认翻页数量 */
|
|
6
|
+
export declare const DEFAULT_PAGE: PageSize;
|
|
7
|
+
/** 设置字段:翻页数量 */
|
|
8
|
+
export declare const PAGE_SIZE_KEY = "pageSize";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { NavItem } from './nav-item.ts';
|
|
2
|
+
import type { NavNode } from './nodes.ts';
|
|
3
|
+
/** 用户提问节点的定义 kind(锚点 key 推导用) */
|
|
4
|
+
export declare const MESSAGE_KIND = "input-message";
|
|
5
|
+
/** 消息稳定聊天 key:镜像 conversationContextKey(kind, id) 公式 */
|
|
6
|
+
export declare function navKeyOf(id: unknown): string;
|
|
7
|
+
/** 一个圆点:某回合的提问组(或一条未入投影的活提问) */
|
|
8
|
+
export interface NavDot {
|
|
9
|
+
/** 归属回合;活提问(投影未收)为 null */
|
|
10
|
+
readonly turn: number | null;
|
|
11
|
+
/** 跳转锚点:组内首问的聊天 key */
|
|
12
|
+
readonly key: string;
|
|
13
|
+
/** 首问锚点序号 */
|
|
14
|
+
readonly anchorSeq: number;
|
|
15
|
+
/** 首问时间 */
|
|
16
|
+
readonly time: number;
|
|
17
|
+
/** 组内全部提问文本(按序) */
|
|
18
|
+
readonly texts: readonly string[];
|
|
19
|
+
/** 组内全部聊天 key(活合并去重用) */
|
|
20
|
+
readonly memberKeys: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
/** 投影提问列表 → 每回合一个圆点;同回合连续条目合并(锚点取首问) */
|
|
23
|
+
export declare function groupByTurn(entries: readonly NavItem[]): NavDot[];
|
|
24
|
+
/**
|
|
25
|
+
* 合并活窗口提问(投影推送帧到达前的短暂窗口):
|
|
26
|
+
* 已并入圆点的 key 丢弃(投影副本优先);其余作为单问圆点(turn:null)
|
|
27
|
+
* 按 anchorSeq 有序插入。无新增时返回原数组引用(调用方可 bail out)。
|
|
28
|
+
*/
|
|
29
|
+
export declare function mergeLiveEntries(dots: readonly NavDot[], live: readonly NavNode[]): NavDot[];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** 圆点直径(px) */
|
|
2
|
+
export declare const DOT_SIZE = 8;
|
|
3
|
+
/** 相邻圆点间距(px) */
|
|
4
|
+
export declare const DOT_GAP = 6;
|
|
5
|
+
/** 一次翻页揭示的整行数 */
|
|
6
|
+
export declare const DOT_PAGE_ROWS = 5;
|
|
7
|
+
/** 单行占位(直径 + 间距) */
|
|
8
|
+
export declare function rowPitch(dot?: number, gap?: number): number;
|
|
9
|
+
/** 一次翻页的滚动步长(px):行数 × 单行占位 */
|
|
10
|
+
export declare function pageStep(dot?: number, gap?: number, rows?: number): number;
|
|
11
|
+
/** 将滚动位置钳制到有效区间 [0, maxScroll];非法上限按 0 处理 */
|
|
12
|
+
export declare function clampScrollTop(target: number, maxScroll: number): number;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** 一条导航展示/跳转单元 */
|
|
2
|
+
export interface NavNode {
|
|
3
|
+
/** 会话行锚点 key(匹配 [data-chat-anchor-key]) */
|
|
4
|
+
key: string;
|
|
5
|
+
/** 单调锚点序号(排序与窗口最小检测) */
|
|
6
|
+
anchorSeq: number;
|
|
7
|
+
/** 消息事件 seq */
|
|
8
|
+
seq: number;
|
|
9
|
+
/** Unix 毫秒时间戳 */
|
|
10
|
+
time: number;
|
|
11
|
+
/** 完整提问文本(悬停卡用,不截断) */
|
|
12
|
+
text: string;
|
|
13
|
+
}
|
|
14
|
+
/** 会话节点最小结构面(结构型,非 SDK 绑定) */
|
|
15
|
+
export interface ChatRowLike {
|
|
16
|
+
key: string;
|
|
17
|
+
anchorSeq: number;
|
|
18
|
+
visibility?: string;
|
|
19
|
+
kind?: string;
|
|
20
|
+
data?: unknown;
|
|
21
|
+
}
|
|
22
|
+
/** 会话行节点的导航提取 / 查找工具 */
|
|
23
|
+
export declare class NavNodes {
|
|
24
|
+
/** 计入「提问」的节点 kind */
|
|
25
|
+
static readonly KINDS: readonly ["user", "steering"];
|
|
26
|
+
/** 判定节点 kind 是否计入提问 */
|
|
27
|
+
static isKind(kind: string | undefined): boolean;
|
|
28
|
+
/** 消息首文本块;缺省空串 */
|
|
29
|
+
static messageText(content: readonly {
|
|
30
|
+
type?: string;
|
|
31
|
+
text?: string;
|
|
32
|
+
}[] | undefined): string;
|
|
33
|
+
/** 从节点窗口提取提问列表,按 anchorSeq 升序(筛选 → 投影 → 排序 管线) */
|
|
34
|
+
static extract(rows: Iterable<ChatRowLike>): NavNode[];
|
|
35
|
+
/** 节点是否实际渲染(隐藏行不可作滚动目标) */
|
|
36
|
+
static isRenderable(node: ChatRowLike): boolean;
|
|
37
|
+
/** 窗口内精确查找 key 对应行 */
|
|
38
|
+
static find(rows: Iterable<ChatRowLike>, key: string): ChatRowLike | null;
|
|
39
|
+
/** 缺失/隐藏 key 时回退到最近可渲染行(取最新 anchorSeq,贴近用户点击意图) */
|
|
40
|
+
static nearest(rows: Iterable<{
|
|
41
|
+
key: string;
|
|
42
|
+
anchorSeq: number;
|
|
43
|
+
visibility?: string;
|
|
44
|
+
}>, excludeKey: string | undefined): {
|
|
45
|
+
key: string;
|
|
46
|
+
anchorSeq: number;
|
|
47
|
+
} | null;
|
|
48
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `msgNavMessages` session projection unit: a pure fold of the session
|
|
3
|
+
* event log into the ordered list of user questions, each tagged with the
|
|
4
|
+
* turn that claimed it. Registered on `ctx.sessionProjections` by the host
|
|
5
|
+
* half (src/index.ts); persistence, replay, and client delivery are the
|
|
6
|
+
* projection seam's (session-projection-cache checkpoints the state, the
|
|
7
|
+
* api-proxy carriers seed + push the wire view).
|
|
8
|
+
*
|
|
9
|
+
* Fold rules mirror the chat messageDefinition classification: an
|
|
10
|
+
* append-origin `user/message` with a human (`user`) source is a question;
|
|
11
|
+
* replacement copies (compaction checkpoints) and injected context are not.
|
|
12
|
+
* Turns come from `turn/start` boundaries, so retry/goal-continuation turns
|
|
13
|
+
* without a question simply produce no entry — dots may skip turn numbers,
|
|
14
|
+
* staying exactly aligned with the Trajectory view's turn labels.
|
|
15
|
+
*
|
|
16
|
+
* @module dsh-mega-chat-nav/projection
|
|
17
|
+
*/
|
|
18
|
+
import type { ProjectionDefinition } from '@deepseek-ai/dsh-session-projection';
|
|
19
|
+
/** 注册本投影单元到框架的合并扩展表(接口声明于 /types 出口,须在声明处合并) */
|
|
20
|
+
declare module '@deepseek-ai/dsh-session-projection/types' {
|
|
21
|
+
interface SessionProjectionStateMap {
|
|
22
|
+
msgNavMessages: QuestionIndexState;
|
|
23
|
+
}
|
|
24
|
+
interface SessionProjectionMap {
|
|
25
|
+
msgNavMessages: NavItem[];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** 投影条目:一条 user/message 提问的轻量索引(正文零驻留) */
|
|
29
|
+
export interface NavItem {
|
|
30
|
+
/** 归属回合号(turn/start 之后的第一个提问) */
|
|
31
|
+
turn: number;
|
|
32
|
+
/** 消息稳定 id(跳转锚点推导源) */
|
|
33
|
+
id: string;
|
|
34
|
+
/** 事件 seq(排序与锚点序号) */
|
|
35
|
+
seq: number;
|
|
36
|
+
/** Unix 毫秒时间戳 */
|
|
37
|
+
time: number;
|
|
38
|
+
/** 首文本块(悬停/级联卡正文) */
|
|
39
|
+
text: string;
|
|
40
|
+
/** 该轮性能指标(view 附加;缺数据时省略) */
|
|
41
|
+
metrics?: {
|
|
42
|
+
durationMs: number;
|
|
43
|
+
firstTokenMs: number;
|
|
44
|
+
tokensPerSec: number;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Fold state: the last opened turn plus every question recorded so far. */
|
|
48
|
+
/** 一轮的性能指标(由 turn/start、assistant/chunk、assistant/message 折叠) */
|
|
49
|
+
interface TurnMetric {
|
|
50
|
+
/** 轮开始时间(turn/start) */
|
|
51
|
+
startedAt: number;
|
|
52
|
+
/** 首个内容增量块时间(assistant/chunk 首 text/reasoning delta);未流式时为 null */
|
|
53
|
+
firstTokenAt: number | null;
|
|
54
|
+
/** 轮结束时间(assistant/message);未完成时为 null */
|
|
55
|
+
finishedAt: number | null;
|
|
56
|
+
/** 累计输出 token(assistant/message 的 usage.outputTokens 求和) */
|
|
57
|
+
outputTokens: number;
|
|
58
|
+
}
|
|
59
|
+
interface QuestionIndexState {
|
|
60
|
+
/** Turn of the last `turn/start` (0 before any; turns are 1-based). */
|
|
61
|
+
turn: number;
|
|
62
|
+
/** Every recorded question, in event order. */
|
|
63
|
+
questions: NavItem[];
|
|
64
|
+
/** 每轮性能指标(turn 号 → 指标) */
|
|
65
|
+
metrics: Record<number, TurnMetric>;
|
|
66
|
+
}
|
|
67
|
+
/** The `msgNavMessages` unit registered on `ctx.sessionProjections`. */
|
|
68
|
+
export declare const msgNavProjectionDefinition: Omit<ProjectionDefinition<'msgNavMessages', QuestionIndexState>, 'wire'> & {
|
|
69
|
+
wire: NonNullable<ProjectionDefinition<'msgNavMessages', QuestionIndexState>['wire']>;
|
|
70
|
+
};
|
|
71
|
+
export {};
|