dsh-better-display 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/CHANGELOG.md +51 -0
- package/DESIGN.md +72 -0
- package/LICENSE +24 -0
- package/README.en.md +41 -0
- package/README.md +41 -0
- package/THIRD_PARTY_NOTICES.md +65 -0
- package/cordis.patch.yml +5 -0
- package/cordis.yml +4 -0
- package/dshx.yml +5 -0
- package/lib/client.js +49923 -0
- package/lib/client.js.map +1 -0
- package/lib/dsh-better-display.js +256 -0
- package/lib/types/client/Blocks.d.ts +45 -0
- package/lib/types/client/Blocks.d.ts.map +1 -0
- package/lib/types/client/Blocks.js +136 -0
- package/lib/types/client/Blocks.js.map +1 -0
- package/lib/types/client/ChoreographedFlow.d.ts +22 -0
- package/lib/types/client/ChoreographedFlow.d.ts.map +1 -0
- package/lib/types/client/ChoreographedFlow.js +170 -0
- package/lib/types/client/ChoreographedFlow.js.map +1 -0
- package/lib/types/client/ClosedProcessSummary.d.ts +9 -0
- package/lib/types/client/ClosedProcessSummary.d.ts.map +1 -0
- package/lib/types/client/ClosedProcessSummary.js +15 -0
- package/lib/types/client/ClosedProcessSummary.js.map +1 -0
- package/lib/types/client/LiveFold.d.ts +10 -0
- package/lib/types/client/LiveFold.d.ts.map +1 -0
- package/lib/types/client/LiveFold.js +39 -0
- package/lib/types/client/LiveFold.js.map +1 -0
- package/lib/types/client/McpAppFrame.d.ts +32 -0
- package/lib/types/client/McpAppFrame.d.ts.map +1 -0
- package/lib/types/client/McpAppFrame.js +193 -0
- package/lib/types/client/McpAppFrame.js.map +1 -0
- package/lib/types/client/Reader.d.ts +3 -0
- package/lib/types/client/Reader.d.ts.map +1 -0
- package/lib/types/client/Reader.js +537 -0
- package/lib/types/client/Reader.js.map +1 -0
- package/lib/types/client/ReasoningCard.d.ts +11 -0
- package/lib/types/client/ReasoningCard.d.ts.map +1 -0
- package/lib/types/client/ReasoningCard.js +301 -0
- package/lib/types/client/ReasoningCard.js.map +1 -0
- package/lib/types/client/StickyLane.d.ts +8 -0
- package/lib/types/client/StickyLane.d.ts.map +1 -0
- package/lib/types/client/StickyLane.js +28 -0
- package/lib/types/client/StickyLane.js.map +1 -0
- package/lib/types/client/TimelineRail.d.ts +10 -0
- package/lib/types/client/TimelineRail.d.ts.map +1 -0
- package/lib/types/client/TimelineRail.js +168 -0
- package/lib/types/client/TimelineRail.js.map +1 -0
- package/lib/types/client/ToolActivity.d.ts +17 -0
- package/lib/types/client/ToolActivity.d.ts.map +1 -0
- package/lib/types/client/ToolActivity.js +192 -0
- package/lib/types/client/ToolActivity.js.map +1 -0
- package/lib/types/client/TurnMetrics.d.ts +11 -0
- package/lib/types/client/TurnMetrics.d.ts.map +1 -0
- package/lib/types/client/TurnMetrics.js +44 -0
- package/lib/types/client/TurnMetrics.js.map +1 -0
- package/lib/types/client/WaitingStatus.d.ts +6 -0
- package/lib/types/client/WaitingStatus.d.ts.map +1 -0
- package/lib/types/client/WaitingStatus.js +19 -0
- package/lib/types/client/WaitingStatus.js.map +1 -0
- package/lib/types/client/conversation-scroll.d.ts +19 -0
- package/lib/types/client/conversation-scroll.d.ts.map +1 -0
- package/lib/types/client/conversation-scroll.js +25 -0
- package/lib/types/client/conversation-scroll.js.map +1 -0
- package/lib/types/client/deliverables.d.ts +24 -0
- package/lib/types/client/deliverables.d.ts.map +1 -0
- package/lib/types/client/deliverables.js +104 -0
- package/lib/types/client/deliverables.js.map +1 -0
- package/lib/types/client/entry-policy.d.ts +10 -0
- package/lib/types/client/entry-policy.d.ts.map +1 -0
- package/lib/types/client/entry-policy.js +24 -0
- package/lib/types/client/entry-policy.js.map +1 -0
- package/lib/types/client/entry.d.ts +4 -0
- package/lib/types/client/entry.d.ts.map +1 -0
- package/lib/types/client/entry.js +34 -0
- package/lib/types/client/entry.js.map +1 -0
- package/lib/types/client/fold-choreography.d.ts +28 -0
- package/lib/types/client/fold-choreography.d.ts.map +1 -0
- package/lib/types/client/fold-choreography.js +31 -0
- package/lib/types/client/fold-choreography.js.map +1 -0
- package/lib/types/client/index.d.ts +7 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +153 -0
- package/lib/types/client/index.js.map +1 -0
- package/lib/types/client/live-turn.d.ts +58 -0
- package/lib/types/client/live-turn.d.ts.map +1 -0
- package/lib/types/client/live-turn.js +144 -0
- package/lib/types/client/live-turn.js.map +1 -0
- package/lib/types/client/markdown/MarkdownText.d.ts +39 -0
- package/lib/types/client/markdown/MarkdownText.d.ts.map +1 -0
- package/lib/types/client/markdown/MarkdownText.js +171 -0
- package/lib/types/client/markdown/MarkdownText.js.map +1 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.d.ts +9 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.d.ts.map +1 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.js +73 -0
- package/lib/types/client/markdown/cjkFriendlyStrong.js.map +1 -0
- package/lib/types/client/markdown/incremental.d.ts +69 -0
- package/lib/types/client/markdown/incremental.d.ts.map +1 -0
- package/lib/types/client/markdown/incremental.js +108 -0
- package/lib/types/client/markdown/incremental.js.map +1 -0
- package/lib/types/client/markdown/katex.d.ts +27 -0
- package/lib/types/client/markdown/katex.d.ts.map +1 -0
- package/lib/types/client/markdown/katex.js +88 -0
- package/lib/types/client/markdown/katex.js.map +1 -0
- package/lib/types/client/markdown/mathCompatibility.d.ts +11 -0
- package/lib/types/client/markdown/mathCompatibility.d.ts.map +1 -0
- package/lib/types/client/markdown/mathCompatibility.js +293 -0
- package/lib/types/client/markdown/mathCompatibility.js.map +1 -0
- package/lib/types/client/markdown/parse.d.ts +25 -0
- package/lib/types/client/markdown/parse.d.ts.map +1 -0
- package/lib/types/client/markdown/parse.js +42 -0
- package/lib/types/client/markdown/parse.js.map +1 -0
- package/lib/types/client/markdown/render.d.ts +119 -0
- package/lib/types/client/markdown/render.d.ts.map +1 -0
- package/lib/types/client/markdown/render.js +435 -0
- package/lib/types/client/markdown/render.js.map +1 -0
- package/lib/types/client/mcp-app.d.ts +50 -0
- package/lib/types/client/mcp-app.d.ts.map +1 -0
- package/lib/types/client/mcp-app.js +328 -0
- package/lib/types/client/mcp-app.js.map +1 -0
- package/lib/types/client/message-chrome.d.ts +19 -0
- package/lib/types/client/message-chrome.d.ts.map +1 -0
- package/lib/types/client/message-chrome.js +42 -0
- package/lib/types/client/message-chrome.js.map +1 -0
- package/lib/types/client/motion.d.ts +38 -0
- package/lib/types/client/motion.d.ts.map +1 -0
- package/lib/types/client/motion.js +367 -0
- package/lib/types/client/motion.js.map +1 -0
- package/lib/types/client/native/ContextBody.d.ts +130 -0
- package/lib/types/client/native/ContextBody.d.ts.map +1 -0
- package/lib/types/client/native/ContextBody.js +398 -0
- package/lib/types/client/native/ContextBody.js.map +1 -0
- package/lib/types/client/native/ContextInjectionRow.d.ts +26 -0
- package/lib/types/client/native/ContextInjectionRow.d.ts.map +1 -0
- package/lib/types/client/native/ContextInjectionRow.js +27 -0
- package/lib/types/client/native/ContextInjectionRow.js.map +1 -0
- package/lib/types/client/native/ReferenceIcon.d.ts +16 -0
- package/lib/types/client/native/ReferenceIcon.d.ts.map +1 -0
- package/lib/types/client/native/ReferenceIcon.js +16 -0
- package/lib/types/client/native/ReferenceIcon.js.map +1 -0
- package/lib/types/client/native/tool-call-model.d.ts +58 -0
- package/lib/types/client/native/tool-call-model.d.ts.map +1 -0
- package/lib/types/client/native/tool-call-model.js +219 -0
- package/lib/types/client/native/tool-call-model.js.map +1 -0
- package/lib/types/client/open-file.d.ts +24 -0
- package/lib/types/client/primitive-labels.d.ts +10 -0
- package/lib/types/client/primitive-labels.d.ts.map +1 -0
- package/lib/types/client/primitive-labels.js +37 -0
- package/lib/types/client/primitive-labels.js.map +1 -0
- package/lib/types/client/projection.d.ts +41 -0
- package/lib/types/client/projection.d.ts.map +1 -0
- package/lib/types/client/projection.js +112 -0
- package/lib/types/client/projection.js.map +1 -0
- package/lib/types/client/reasoning-follow.d.ts +6 -0
- package/lib/types/client/reasoning-follow.d.ts.map +1 -0
- package/lib/types/client/reasoning-follow.js +12 -0
- package/lib/types/client/reasoning-follow.js.map +1 -0
- package/lib/types/client/settings-copy.d.ts +6 -0
- package/lib/types/client/settings-slots.d.ts +16 -0
- package/lib/types/client/store.d.ts +17 -0
- package/lib/types/client/store.d.ts.map +1 -0
- package/lib/types/client/store.js +13 -0
- package/lib/types/client/store.js.map +1 -0
- package/lib/types/client/stream-buffer.d.ts +29 -0
- package/lib/types/client/stream-buffer.d.ts.map +1 -0
- package/lib/types/client/stream-buffer.js +113 -0
- package/lib/types/client/stream-buffer.js.map +1 -0
- package/lib/types/client/streaming.d.ts +18 -0
- package/lib/types/client/streaming.d.ts.map +1 -0
- package/lib/types/client/streaming.js +77 -0
- package/lib/types/client/streaming.js.map +1 -0
- package/lib/types/client/timeline.d.ts +26 -0
- package/lib/types/client/timeline.d.ts.map +1 -0
- package/lib/types/client/timeline.js +48 -0
- package/lib/types/client/timeline.js.map +1 -0
- package/lib/types/client/tool-activity.d.ts +52 -0
- package/lib/types/client/tool-activity.d.ts.map +1 -0
- package/lib/types/client/tool-activity.js +178 -0
- package/lib/types/client/tool-activity.js.map +1 -0
- package/lib/types/client/types.d.ts +66 -0
- package/lib/types/client/types.d.ts.map +1 -0
- package/lib/types/client/types.js +2 -0
- package/lib/types/client/types.js.map +1 -0
- package/lib/types/client/waiting-clock.d.ts +17 -0
- package/lib/types/client/waiting-clock.d.ts.map +1 -0
- package/lib/types/client/waiting-clock.js +24 -0
- package/lib/types/client/waiting-clock.js.map +1 -0
- package/lib/types/client/word-motion.d.ts +16 -0
- package/lib/types/client/word-motion.d.ts.map +1 -0
- package/lib/types/client/word-motion.js +89 -0
- package/lib/types/client/word-motion.js.map +1 -0
- package/lib/types/client/word-timeline.d.ts +28 -0
- package/lib/types/client/word-timeline.d.ts.map +1 -0
- package/lib/types/client/word-timeline.js +100 -0
- package/lib/types/client/word-timeline.js.map +1 -0
- package/lib/types/dsh-better-display.d.ts +17 -0
- package/lib/types/dsh-better-display.d.ts.map +1 -0
- package/lib/types/dsh-better-display.js +53 -0
- package/lib/types/dsh-better-display.js.map +1 -0
- package/package.json +121 -0
- package/scripts/build-motion-fixture.mjs +26 -0
- package/scripts/link-harness-dependencies.mjs +51 -0
- package/skills/generative-mcpapps/SKILL.md +47 -0
- package/skills/generative-mcpapps/examples/interactive_quiz.html +153 -0
- package/skills/generative-mcpapps/references/html_boilerplate.md +122 -0
- package/skills/generative-mcpapps/references/sep1865_protocol.md +54 -0
- package/src/client/Blocks.tsx +205 -0
- package/src/client/ChoreographedFlow.tsx +182 -0
- package/src/client/ClosedProcessSummary.tsx +19 -0
- package/src/client/LiveFold.tsx +43 -0
- package/src/client/McpAppFrame.module.css +210 -0
- package/src/client/McpAppFrame.tsx +317 -0
- package/src/client/Reader.module.css +329 -0
- package/src/client/Reader.tsx +814 -0
- package/src/client/ReasoningCard.tsx +285 -0
- package/src/client/SettingsSection.module.css +147 -0
- package/src/client/SettingsSection.tsx +117 -0
- package/src/client/StickyLane.tsx +24 -0
- package/src/client/TimelineRail.module.css +170 -0
- package/src/client/TimelineRail.tsx +262 -0
- package/src/client/ToolActivity.tsx +214 -0
- package/src/client/TurnMetrics.module.css +139 -0
- package/src/client/TurnMetrics.tsx +160 -0
- package/src/client/WaitingStatus.tsx +22 -0
- package/src/client/conversation-scroll.ts +28 -0
- package/src/client/deliverables.ts +122 -0
- package/src/client/entry-policy.ts +20 -0
- package/src/client/entry.tsx +40 -0
- package/src/client/fold-choreography.ts +38 -0
- package/src/client/index.tsx +198 -0
- package/src/client/live-turn.ts +155 -0
- package/src/client/markdown/MarkdownText.module.css +304 -0
- package/src/client/markdown/MarkdownText.tsx +187 -0
- package/src/client/markdown/cjkFriendlyStrong.ts +84 -0
- package/src/client/markdown/incremental.ts +131 -0
- package/src/client/markdown/katex.tsx +91 -0
- package/src/client/markdown/mathCompatibility.ts +350 -0
- package/src/client/markdown/parse.ts +45 -0
- package/src/client/markdown/render.tsx +630 -0
- package/src/client/markdown/upstream.json +14 -0
- package/src/client/mcp-app.ts +323 -0
- package/src/client/message-chrome.ts +47 -0
- package/src/client/motion.tsx +338 -0
- package/src/client/native/ContextBody.module.css +161 -0
- package/src/client/native/ContextBody.tsx +591 -0
- package/src/client/native/ContextInjectionRow.module.css +62 -0
- package/src/client/native/ContextInjectionRow.tsx +72 -0
- package/src/client/native/ReferenceIcon.tsx +35 -0
- package/src/client/native/tool-call-model.ts +248 -0
- package/src/client/native/upstream.json +41 -0
- package/src/client/open-file.ts +94 -0
- package/src/client/pending-submission.ts +49 -0
- package/src/client/primitive-labels.ts +53 -0
- package/src/client/projection.ts +118 -0
- package/src/client/reasoning-follow.ts +12 -0
- package/src/client/settings-copy.ts +53 -0
- package/src/client/settings-slots.ts +20 -0
- package/src/client/settings.tsx +73 -0
- package/src/client/skill-status.ts +78 -0
- package/src/client/store.ts +30 -0
- package/src/client/stream-buffer.ts +100 -0
- package/src/client/streaming.tsx +62 -0
- package/src/client/style.d.ts +4 -0
- package/src/client/timeline.ts +77 -0
- package/src/client/tool-activity.ts +152 -0
- package/src/client/types.ts +66 -0
- package/src/client/waiting-clock.ts +25 -0
- package/src/client/word-motion.tsx +91 -0
- package/src/client/word-timeline.ts +96 -0
- package/src/dsh-better-display.ts +108 -0
- package/src/skill-roots.ts +138 -0
- package/src/skill-status.ts +81 -0
- package/tests/browser-closed-gap.tsx +20 -0
- package/tests/browser-motion.tsx +65 -0
- package/tests/browser-sticky-lanes.tsx +22 -0
- package/tests/browser-waiting-clock.tsx +14 -0
- package/tests/chat-flow-hook.test.ts +66 -0
- package/tests/cloud-gate.test.ts +34 -0
- package/tests/conversation-scroll.test.ts +47 -0
- package/tests/deliverables.test.ts +128 -0
- package/tests/entry.test.ts +42 -0
- package/tests/fixtures/maid-composer-hide.html +31 -0
- package/tests/fold-choreography.test.ts +38 -0
- package/tests/history-word-regression.test.ts +16 -0
- package/tests/live-turn.test.ts +218 -0
- package/tests/mcp-apps.test.ts +157 -0
- package/tests/message-chrome.test.ts +29 -0
- package/tests/open-file.test.ts +103 -0
- package/tests/pending-submission.test.ts +45 -0
- package/tests/projection.test.ts +184 -0
- package/tests/reasoning-follow.test.ts +34 -0
- package/tests/settings-copy.test.ts +63 -0
- package/tests/skill-status.test.ts +137 -0
- package/tests/stock-install.test.ts +50 -0
- package/tests/stream-buffer.test.ts +97 -0
- package/tests/timeline.test.ts +59 -0
- package/tests/waiting-clock.test.ts +24 -0
- package/tests/word-timeline.test.ts +136 -0
- package/tsconfig.json +11 -0
- package/tsdown.config.ts +49 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
import css from './Reader.module.css';
|
|
4
|
+
import { StreamMotionContext } from './streaming.js';
|
|
5
|
+
const EASING = 'cubic-bezier(.22,1,.36,1)';
|
|
6
|
+
export function useMotionAllowed(enabled) {
|
|
7
|
+
const [reduced, setReduced] = useState(() => window.matchMedia('(prefers-reduced-motion: reduce)').matches);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
const query = window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
10
|
+
const change = () => setReduced(query.matches);
|
|
11
|
+
query.addEventListener('change', change);
|
|
12
|
+
return () => query.removeEventListener('change', change);
|
|
13
|
+
}, []);
|
|
14
|
+
return enabled && !reduced;
|
|
15
|
+
}
|
|
16
|
+
export function usePinnedSelection(root, selector = '[data-reader-answer], [data-reader-process]') {
|
|
17
|
+
const [keys, setKeys] = useState([]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const update = () => {
|
|
20
|
+
const selection = document.getSelection();
|
|
21
|
+
const range = selection && !selection.isCollapsed && selection.rangeCount ? selection.getRangeAt(0) : null;
|
|
22
|
+
const next = range && root.current
|
|
23
|
+
? [...new Set(Array.from(root.current.querySelectorAll(selector))
|
|
24
|
+
.filter(element => range.intersectsNode(element))
|
|
25
|
+
.map(element => element.dataset.readerKey ?? element.dataset.readerProcessKey).filter(Boolean))]
|
|
26
|
+
: [];
|
|
27
|
+
setKeys(previous => previous.length === next.length && previous.every((key, index) => key === next[index]) ? previous : next);
|
|
28
|
+
};
|
|
29
|
+
document.addEventListener('selectionchange', update);
|
|
30
|
+
return () => document.removeEventListener('selectionchange', update);
|
|
31
|
+
}, [root, selector]);
|
|
32
|
+
return keys;
|
|
33
|
+
}
|
|
34
|
+
export function StatusText({ text, motion, shimmer = false }) {
|
|
35
|
+
const ref = useRef(null);
|
|
36
|
+
const [visible, setVisible] = useState(() => !document.hidden);
|
|
37
|
+
const [forcedColors, setForcedColors] = useState(() => window.matchMedia('(forced-colors: active)').matches);
|
|
38
|
+
const allowed = motion && visible && !forcedColors;
|
|
39
|
+
const [frame, setFrame] = useState({ text, id: 0, phase: 'idle', outgoing: null });
|
|
40
|
+
// Adjust before commit, so a new label cannot paint once before its entry state.
|
|
41
|
+
// Reuse the previous incoming key: a rapid change exits from its current pose.
|
|
42
|
+
if (frame.text !== text)
|
|
43
|
+
setFrame({
|
|
44
|
+
text, id: frame.id + 1, phase: allowed ? 'start' : 'idle',
|
|
45
|
+
outgoing: allowed ? { text: frame.text, id: frame.id } : null,
|
|
46
|
+
});
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
const update = () => setVisible(!document.hidden);
|
|
49
|
+
const query = window.matchMedia('(forced-colors: active)');
|
|
50
|
+
const colors = () => setForcedColors(query.matches);
|
|
51
|
+
document.addEventListener('visibilitychange', update);
|
|
52
|
+
query.addEventListener('change', colors);
|
|
53
|
+
return () => { document.removeEventListener('visibilitychange', update); query.removeEventListener('change', colors); };
|
|
54
|
+
}, []);
|
|
55
|
+
useLayoutEffect(() => {
|
|
56
|
+
const id = frame.id;
|
|
57
|
+
const settle = () => setFrame(current => current.id === id && current.outgoing
|
|
58
|
+
? { ...current, phase: 'idle', outgoing: null } : current);
|
|
59
|
+
if (!allowed) {
|
|
60
|
+
settle();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!frame.outgoing || !ref.current)
|
|
64
|
+
return;
|
|
65
|
+
// Commit the supplied .is-enter-start pose before releasing CSS transitions.
|
|
66
|
+
ref.current.getBoundingClientRect();
|
|
67
|
+
let timer = 0;
|
|
68
|
+
const tick = requestAnimationFrame(() => {
|
|
69
|
+
setFrame(current => current.id === id ? { ...current, phase: 'running' } : current);
|
|
70
|
+
timer = window.setTimeout(settle, 200); // 150ms swap + 50ms incoming gap.
|
|
71
|
+
});
|
|
72
|
+
return () => { cancelAnimationFrame(tick); window.clearTimeout(timer); };
|
|
73
|
+
}, [frame.id, allowed]);
|
|
74
|
+
const active = shimmer && allowed;
|
|
75
|
+
const swapping = allowed && frame.outgoing !== null;
|
|
76
|
+
return _jsxs("span", { className: css.statusText, "data-reader-status": true, "data-reader-busy": shimmer, "data-ud-check": "reader-status", children: [_jsxs("span", { className: css.think, "aria-hidden": "true", "data-active": active, "data-reader-status-phase": swapping ? frame.phase : 'idle', "data-ud-motion": "reader-thinking-state", children: [_jsx("span", { className: css.thinkSizer, children: text }), swapping && _jsx("span", { className: `${css.thinkText} ${frame.phase === 'running' ? css.isExit : ''}`, "data-reader-status-copy": "outgoing", "data-text": frame.outgoing.text, children: frame.outgoing.text }, frame.outgoing.id), _jsx("span", { ref: ref, className: `${css.thinkText} ${swapping && frame.phase === 'start' ? css.isEnterStart : ''}`, "data-reader-status-copy": "current", "data-reader-shimmer": active || undefined, "data-text": text, children: text }, frame.id)] }), _jsx("span", { className: css.srOnly, role: "status", "aria-live": "polite", "aria-atomic": "true", children: text })] });
|
|
77
|
+
}
|
|
78
|
+
export function Disclosure({ open, onChange, label, controls, buttonRef, ariaLabel }) {
|
|
79
|
+
const name = ariaLabel ?? '思考与过程';
|
|
80
|
+
return _jsx("div", { className: css.disclosure, "data-reader-disclosure": true, "data-expanded": open, children: _jsxs("button", { ref: buttonRef, type: "button", className: css.disclosureButton, "aria-label": `${open ? '收起' : '展开'}${name}`, "aria-expanded": open, ...(controls ? { 'aria-controls': controls } : {}), onClick: () => onChange(!open), children: [label, _jsx("svg", { className: css.chevron, "data-open": open, viewBox: "0 0 16 16", width: "12", height: "12", "aria-hidden": "true", children: _jsx("path", { d: "m6 4 4 4-4 4" }) })] }) });
|
|
81
|
+
}
|
|
82
|
+
/** Supplemental details stay in source order beside their own narration. */
|
|
83
|
+
export function ProcessFragment({ open, motion, onRead, returnFocusTo, nodeKey, children, framed = false }) {
|
|
84
|
+
const body = useRef(null);
|
|
85
|
+
const running = useRef(null);
|
|
86
|
+
const previous = useRef(open);
|
|
87
|
+
const [present, setPresent] = useState(open);
|
|
88
|
+
useLayoutEffect(() => {
|
|
89
|
+
const element = body.current;
|
|
90
|
+
if (!element)
|
|
91
|
+
return;
|
|
92
|
+
const from = running.current ? element.getBoundingClientRect().height : previous.current ? element.scrollHeight : 0;
|
|
93
|
+
running.current?.cancel();
|
|
94
|
+
running.current = null;
|
|
95
|
+
const changed = previous.current !== open;
|
|
96
|
+
previous.current = open;
|
|
97
|
+
if (open)
|
|
98
|
+
setPresent(true);
|
|
99
|
+
if (!open && element.contains(document.activeElement))
|
|
100
|
+
returnFocusTo.current?.focus();
|
|
101
|
+
element.style.height = open ? 'auto' : '0px';
|
|
102
|
+
const target = open ? element.scrollHeight : 0;
|
|
103
|
+
if (!motion || !changed || Math.abs(from - target) < 1) {
|
|
104
|
+
setPresent(open);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (from > target && motion) {
|
|
108
|
+
document.body.dataset.readerFolding = 'true';
|
|
109
|
+
}
|
|
110
|
+
const animation = element.animate(from > target
|
|
111
|
+
? [
|
|
112
|
+
{ offset: 0, height: `${from}px`, opacity: 1, transform: 'scaleY(1) translateY(0)' },
|
|
113
|
+
{ offset: 0.32, height: `${Math.round(from * 0.92)}px`, opacity: 0.35, transform: 'scaleY(0.96) translateY(-2px)' },
|
|
114
|
+
{ offset: 1, height: `${target}px`, opacity: 0, transform: 'scaleY(0.68) translateY(-8px)' },
|
|
115
|
+
]
|
|
116
|
+
: [
|
|
117
|
+
{ offset: 0, height: `${from}px`, opacity: 0, transform: 'scaleY(0.8) translateY(6px)' },
|
|
118
|
+
{ offset: 0.3, height: `${Math.round(target * 0.4)}px`, opacity: 0.4, transform: 'scaleY(0.92) translateY(3px)' },
|
|
119
|
+
{ offset: 1, height: `${target}px`, opacity: 1, transform: 'scaleY(1) translateY(0)' },
|
|
120
|
+
], { duration: 380, easing: 'cubic-bezier(0.16, 1, 0.3, 1)', fill: 'both' });
|
|
121
|
+
running.current = animation;
|
|
122
|
+
animation.onfinish = () => {
|
|
123
|
+
if (running.current !== animation)
|
|
124
|
+
return;
|
|
125
|
+
delete document.body.dataset.readerFolding;
|
|
126
|
+
running.current = null;
|
|
127
|
+
animation.cancel();
|
|
128
|
+
setPresent(open);
|
|
129
|
+
};
|
|
130
|
+
}, [open, motion, returnFocusTo]);
|
|
131
|
+
useEffect(() => () => { delete document.body.dataset.readerFolding; running.current?.cancel(); }, []);
|
|
132
|
+
if (!open && !present)
|
|
133
|
+
return null;
|
|
134
|
+
return _jsx("div", { ref: body, className: css.disclosureBody, "data-reader-process": true, "data-reader-process-key": nodeKey, "data-ud-motion": "reader-process-size", "aria-hidden": !open, onPointerDown: () => { if (open)
|
|
135
|
+
onRead(); }, onFocusCapture: () => { if (open)
|
|
136
|
+
onRead(); }, ...(!open ? { inert: '' } : {}), children: _jsx("div", { className: framed ? css.processFrame : css.processContents, children: children }) });
|
|
137
|
+
}
|
|
138
|
+
/** Retire only narration that was actually visible; historical rows stay folded. */
|
|
139
|
+
export function RetiringContent({ visible, children }) {
|
|
140
|
+
const { enabled } = useContext(StreamMotionContext);
|
|
141
|
+
const root = useRef(null);
|
|
142
|
+
const animation = useRef(null);
|
|
143
|
+
const [present, setPresent] = useState(visible);
|
|
144
|
+
const [focusHeld, setFocusHeld] = useState(false);
|
|
145
|
+
useLayoutEffect(() => {
|
|
146
|
+
const element = root.current;
|
|
147
|
+
if (visible) {
|
|
148
|
+
animation.current?.cancel();
|
|
149
|
+
animation.current = null;
|
|
150
|
+
setPresent(true);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (!element)
|
|
154
|
+
return;
|
|
155
|
+
if (element.contains(document.activeElement)) {
|
|
156
|
+
setFocusHeld(true);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (focusHeld)
|
|
160
|
+
return;
|
|
161
|
+
const from = element.getBoundingClientRect().height;
|
|
162
|
+
animation.current?.cancel();
|
|
163
|
+
animation.current = null;
|
|
164
|
+
if (!enabled || from < 1) {
|
|
165
|
+
setPresent(false);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const next = element.animate([{ height: `${from}px`, opacity: 1 }, { height: '0px', opacity: 0 }], { duration: 220, easing: EASING, fill: 'both' });
|
|
169
|
+
animation.current = next;
|
|
170
|
+
next.onfinish = () => { if (animation.current === next) {
|
|
171
|
+
animation.current = null;
|
|
172
|
+
next.cancel();
|
|
173
|
+
setPresent(false);
|
|
174
|
+
} };
|
|
175
|
+
}, [visible, enabled, focusHeld]);
|
|
176
|
+
useEffect(() => () => animation.current?.cancel(), []);
|
|
177
|
+
if (!visible && !present)
|
|
178
|
+
return null;
|
|
179
|
+
return _jsx("div", { ref: root, className: css.retiringContent, "data-reader-retiring": visible ? 'visible' : 'retiring', "data-ud-motion": "reader-progress-retire", onBlur: event => { if (!event.currentTarget.contains(event.relatedTarget))
|
|
180
|
+
setFocusHeld(false); }, children: children });
|
|
181
|
+
}
|
|
182
|
+
// DOM-only behavior: the native Session remains the sole source of business data.
|
|
183
|
+
export function useReadingScroll(root, motion) {
|
|
184
|
+
const port = useRef(null);
|
|
185
|
+
const following = useRef(true);
|
|
186
|
+
const anchor = useRef(null);
|
|
187
|
+
const cancelFollow = useRef(() => { });
|
|
188
|
+
const [detached, setDetached] = useState(false);
|
|
189
|
+
useLayoutEffect(() => {
|
|
190
|
+
const content = root.current;
|
|
191
|
+
if (!content)
|
|
192
|
+
return;
|
|
193
|
+
const scroll = content.closest('[data-conversation-scroll]') ?? content;
|
|
194
|
+
port.current = scroll;
|
|
195
|
+
let followFrame = 0;
|
|
196
|
+
let lastFrameAt = 0;
|
|
197
|
+
let layoutDepth = 0;
|
|
198
|
+
let lastWrittenTop = null;
|
|
199
|
+
const layoutStart = () => {
|
|
200
|
+
layoutDepth++;
|
|
201
|
+
cancelAnimationFrame(followFrame);
|
|
202
|
+
followFrame = 0;
|
|
203
|
+
capture();
|
|
204
|
+
};
|
|
205
|
+
const layoutEnd = () => {
|
|
206
|
+
layoutDepth = Math.max(0, layoutDepth - 1);
|
|
207
|
+
if (!layoutDepth && following.current && !followFrame) {
|
|
208
|
+
lastFrameAt = performance.now();
|
|
209
|
+
followFrame = requestAnimationFrame(follow);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
cancelFollow.current = () => {
|
|
213
|
+
cancelAnimationFrame(followFrame);
|
|
214
|
+
followFrame = 0;
|
|
215
|
+
lastWrittenTop = null;
|
|
216
|
+
};
|
|
217
|
+
const selected = () => {
|
|
218
|
+
const selection = document.getSelection();
|
|
219
|
+
return selection && !selection.isCollapsed && selection.anchorNode && content.contains(selection.anchorNode);
|
|
220
|
+
};
|
|
221
|
+
const capture = () => {
|
|
222
|
+
const top = scroll.getBoundingClientRect().top;
|
|
223
|
+
const candidates = content.querySelectorAll('[data-reader-anchor]');
|
|
224
|
+
let candidate = null;
|
|
225
|
+
for (let index = 0; index < candidates.length; index++) {
|
|
226
|
+
const element = candidates[index];
|
|
227
|
+
if (element.getBoundingClientRect().bottom > top + 8) {
|
|
228
|
+
candidate = element;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
anchor.current = candidate ? { element: candidate, top: candidate.getBoundingClientRect().top } : null;
|
|
233
|
+
};
|
|
234
|
+
// Anchor capture is only consumed while detached; coalesce DOM scans to one per frame.
|
|
235
|
+
let captureFrame = 0;
|
|
236
|
+
const scheduleCapture = () => {
|
|
237
|
+
if (captureFrame)
|
|
238
|
+
return;
|
|
239
|
+
captureFrame = requestAnimationFrame(() => { captureFrame = 0; capture(); });
|
|
240
|
+
};
|
|
241
|
+
const onScroll = () => {
|
|
242
|
+
// While a follow animation is actively driving scroll, do not cancel following midway.
|
|
243
|
+
if (followFrame !== 0 || layoutDepth > 0)
|
|
244
|
+
return;
|
|
245
|
+
// Our easing frames must not be mistaken for a user leaving the bottom.
|
|
246
|
+
if (lastWrittenTop !== null && Math.abs(scroll.scrollTop - lastWrittenTop) < 1)
|
|
247
|
+
return;
|
|
248
|
+
const atBottom = scroll.scrollHeight - scroll.scrollTop - scroll.clientHeight < 25;
|
|
249
|
+
following.current = atBottom;
|
|
250
|
+
setDetached(!atBottom);
|
|
251
|
+
if (!atBottom) {
|
|
252
|
+
cancelAnimationFrame(followFrame);
|
|
253
|
+
followFrame = 0;
|
|
254
|
+
scheduleCapture();
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
const onWheel = (event) => {
|
|
258
|
+
cancelAnimationFrame(followFrame);
|
|
259
|
+
followFrame = 0;
|
|
260
|
+
lastWrittenTop = null;
|
|
261
|
+
if (event.deltaY < 0) {
|
|
262
|
+
following.current = false;
|
|
263
|
+
setDetached(true);
|
|
264
|
+
scheduleCapture();
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const onTouch = () => {
|
|
268
|
+
cancelAnimationFrame(followFrame);
|
|
269
|
+
followFrame = 0;
|
|
270
|
+
lastWrittenTop = null;
|
|
271
|
+
};
|
|
272
|
+
const onKey = (event) => {
|
|
273
|
+
if (event.target instanceof HTMLElement && event.target.closest('textarea,input,[contenteditable=true]'))
|
|
274
|
+
return;
|
|
275
|
+
if (['PageUp', 'Home', 'ArrowUp'].includes(event.key)) {
|
|
276
|
+
cancelAnimationFrame(followFrame);
|
|
277
|
+
followFrame = 0;
|
|
278
|
+
lastWrittenTop = null;
|
|
279
|
+
following.current = false;
|
|
280
|
+
setDetached(true);
|
|
281
|
+
scheduleCapture();
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
const writeTop = (top) => { scroll.scrollTop = top; lastWrittenTop = scroll.scrollTop; };
|
|
285
|
+
const follow = (now) => {
|
|
286
|
+
followFrame = 0;
|
|
287
|
+
if (!following.current || selected() || content.contains(document.activeElement))
|
|
288
|
+
return;
|
|
289
|
+
if (layoutDepth > 0)
|
|
290
|
+
return;
|
|
291
|
+
const gap = scroll.scrollHeight - scroll.clientHeight - scroll.scrollTop;
|
|
292
|
+
const delta = Math.min(48, Math.max(1, now - lastFrameAt));
|
|
293
|
+
lastFrameAt = now;
|
|
294
|
+
if (!motion || Math.abs(gap) < 1.5) {
|
|
295
|
+
writeTop(scroll.scrollHeight);
|
|
296
|
+
capture();
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
writeTop(scroll.scrollTop + gap * (1 - Math.exp(-delta / 52)));
|
|
300
|
+
followFrame = requestAnimationFrame(follow);
|
|
301
|
+
};
|
|
302
|
+
const firstFrame = requestAnimationFrame(() => {
|
|
303
|
+
if (following.current && !selected())
|
|
304
|
+
writeTop(scroll.scrollHeight);
|
|
305
|
+
capture();
|
|
306
|
+
});
|
|
307
|
+
const observer = new ResizeObserver(() => {
|
|
308
|
+
if (selected())
|
|
309
|
+
return;
|
|
310
|
+
if (following.current && !content.contains(document.activeElement)) {
|
|
311
|
+
// Height is already animated: no second, lagging scroll easing.
|
|
312
|
+
if (!motion || layoutDepth > 0)
|
|
313
|
+
writeTop(scroll.scrollHeight);
|
|
314
|
+
else if (!followFrame) {
|
|
315
|
+
lastFrameAt = performance.now();
|
|
316
|
+
followFrame = requestAnimationFrame(follow);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
else if (!following.current && anchor.current?.element.isConnected) {
|
|
320
|
+
const delta = anchor.current.element.getBoundingClientRect().top - anchor.current.top;
|
|
321
|
+
if (Math.abs(delta) > .5)
|
|
322
|
+
writeTop(scroll.scrollTop + delta);
|
|
323
|
+
}
|
|
324
|
+
capture();
|
|
325
|
+
});
|
|
326
|
+
observer.observe(content);
|
|
327
|
+
if (scroll !== content)
|
|
328
|
+
observer.observe(scroll);
|
|
329
|
+
content.addEventListener('reader-layout-start', layoutStart);
|
|
330
|
+
content.addEventListener('reader-layout-end', layoutEnd);
|
|
331
|
+
scroll.addEventListener('scroll', onScroll, { passive: true });
|
|
332
|
+
scroll.addEventListener('wheel', onWheel, { passive: true });
|
|
333
|
+
scroll.addEventListener('touchstart', onTouch, { passive: true });
|
|
334
|
+
scroll.addEventListener('touchmove', onTouch, { passive: true });
|
|
335
|
+
scroll.addEventListener('keydown', onKey);
|
|
336
|
+
return () => {
|
|
337
|
+
cancelAnimationFrame(firstFrame);
|
|
338
|
+
cancelAnimationFrame(followFrame);
|
|
339
|
+
cancelAnimationFrame(captureFrame);
|
|
340
|
+
observer.disconnect();
|
|
341
|
+
content.removeEventListener('reader-layout-start', layoutStart);
|
|
342
|
+
content.removeEventListener('reader-layout-end', layoutEnd);
|
|
343
|
+
scroll.removeEventListener('scroll', onScroll);
|
|
344
|
+
scroll.removeEventListener('wheel', onWheel);
|
|
345
|
+
scroll.removeEventListener('touchstart', onTouch);
|
|
346
|
+
scroll.removeEventListener('touchmove', onTouch);
|
|
347
|
+
scroll.removeEventListener('keydown', onKey);
|
|
348
|
+
};
|
|
349
|
+
}, [root, motion]);
|
|
350
|
+
const jump = useCallback(() => {
|
|
351
|
+
cancelFollow.current();
|
|
352
|
+
anchor.current = null;
|
|
353
|
+
following.current = true;
|
|
354
|
+
setDetached(false);
|
|
355
|
+
if (port.current) {
|
|
356
|
+
port.current.scrollTop = port.current.scrollHeight;
|
|
357
|
+
}
|
|
358
|
+
}, []);
|
|
359
|
+
const release = useCallback(() => {
|
|
360
|
+
cancelFollow.current();
|
|
361
|
+
following.current = false;
|
|
362
|
+
anchor.current = null;
|
|
363
|
+
setDetached(true);
|
|
364
|
+
}, []);
|
|
365
|
+
return { detached, jump, release };
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=motion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/client/motion.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9F,OAAO,GAAG,MAAM,qBAAqB,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAE3C,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5G,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAA4B,EAAE,QAAQ,GAAG,6CAA6C;IACvH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3G,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO;gBAChC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAc,QAAQ,CAAC,CAAC;yBAC3E,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;yBAChD,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnG,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChI,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,EAAwD;IAChH,MAAM,GAAG,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAG/B,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,iFAAiF;IACjF,+EAA+E;IAC/E,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;QAAE,QAAQ,CAAC;YAChC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACzD,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;SAC9D,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACtD,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1H,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,QAAQ;YAC5E,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,MAAM,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO;QAC5C,6EAA6E;QAC7E,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,EAAE;YACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACpF,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,kCAAkC;QAC5E,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;IACpD,OAAO,gBAAM,SAAS,EAAE,GAAG,CAAC,UAAU,kDAAuC,OAAO,mBAAgB,eAAe,aACjH,gBAAM,SAAS,EAAE,GAAG,CAAC,KAAK,iBAAc,MAAM,iBAAc,MAAM,8BAA4B,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,oBAAiB,uBAAuB,aACnK,eAAM,SAAS,EAAE,GAAG,CAAC,UAAU,YAAG,IAAI,GAAQ,EAC7C,QAAQ,IAAI,eAA+B,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,6BAC9F,UAAU,eAAY,KAAK,CAAC,QAAS,CAAC,IAAI,YAAG,KAAK,CAAC,QAAS,CAAC,IAAI,IADnE,KAAK,CAAC,QAAS,CAAC,EAAE,CACyD,EACnG,eAAqB,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,6BACjG,SAAS,yBAAsB,MAAM,IAAI,SAAS,eAAa,IAAI,YAAG,IAAI,IADzF,KAAK,CAAC,EAAE,CACyF,IACvG,EACP,eAAM,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAC,QAAQ,eAAW,QAAQ,iBAAa,MAAM,YAAE,IAAI,GAAQ,IACzF,CAAC;AACV,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAIjF;IACC,MAAM,IAAI,GAAG,SAAS,IAAI,OAAO,CAAC;IAClC,OAAO,cAAK,SAAS,EAAE,GAAG,CAAC,UAAU,mDAAwC,IAAI,YAC/E,kBAAQ,GAAG,EAAE,SAAS,EAAE,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,GAAG,CAAC,gBAAgB,gBAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,mBAAiB,IAAI,KAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aACxN,KAAK,EACN,cAAK,SAAS,EAAE,GAAG,CAAC,OAAO,eAAa,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,iBAAa,MAAM,YAAC,eAAM,CAAC,EAAC,cAAc,GAAG,GAAM,IACpI,GACL,CAAC;AACT,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAGvG;IACC,MAAM,IAAI,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACpH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC;QAC1C,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,IAAI,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;YAAE,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC;QAC/C,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAC/B,IAAI,GAAG,MAAM;YACX,CAAC,CAAC;gBACE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE;gBACpF,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,+BAA+B,EAAE;gBACnH,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,+BAA+B,EAAE;aAC7F;YACH,CAAC,CAAC;gBACE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,6BAA6B,EAAE;gBACxF,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBACjH,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE;aACvF,EACL,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,+BAA+B,EAAE,IAAI,EAAE,MAAM,EAAE,CACzE,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;QAC5B,SAAS,CAAC,QAAQ,GAAG,GAAG,EAAE;YACxB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO;YAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAC3C,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,SAAS,CAAC,MAAM,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtG,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,cAAK,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,cAAc,0DAA+C,OAAO,oBAAiB,qBAAqB,iBACjI,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI;YAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI;YAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YACjJ,cAAK,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,YAAG,QAAQ,GAAO,GAC7E,CAAC;AACT,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAA6C;IAC9F,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;YACtD,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7E,IAAI,SAAS;YAAE,OAAO;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;QACpD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACtD,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACxD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpJ,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,GAAG,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,cAAK,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,eAAe,0BAAwB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,oBAAiB,wBAAwB,EACpJ,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAChG,QAAQ,GACL,CAAC;AACT,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,IAA4B,EAAE,MAAe;IAM5E,MAAM,IAAI,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAA+C,IAAI,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,MAAM,CAAa,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAc,4BAA4B,CAAC,IAAI,OAAO,CAAC;QACrF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAkB,IAAI,CAAC;QACzC,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,WAAW,EAAE,CAAC;YACd,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAAC,WAAW,GAAG,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtD,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAAC,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC,CAAC;QACF,YAAY,CAAC,OAAO,GAAG,GAAG,EAAE;YAC1B,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAClC,WAAW,GAAG,CAAC,CAAC;YAChB,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1C,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC/G,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;YAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAc,sBAAsB,CAAC,CAAC;YACjF,IAAI,SAAS,GAAuB,IAAI,CAAC;YACzC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBACvD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;oBAAC,SAAS,GAAG,OAAO,CAAC;oBAAC,MAAM;gBAAC,CAAC;YACvF,CAAC;YACD,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzG,CAAC,CAAC;QACF,uFAAuF;QACvF,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,IAAI,YAAY;gBAAE,OAAO;YACzB,YAAY,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,uFAAuF;YACvF,IAAI,WAAW,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC;gBAAE,OAAO;YACjD,wEAAwE;YACxE,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC;gBAAE,OAAO;YACvF,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;YACnF,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;YAC7B,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;gBAAC,WAAW,GAAG,CAAC,CAAC;gBAAC,eAAe,EAAE,CAAC;YAAC,CAAC;QAC3F,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE;YACpC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAAC,WAAW,GAAG,CAAC,CAAC;YAAC,cAAc,GAAG,IAAI,CAAC;YAC1E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;gBAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAAC,eAAe,EAAE,CAAC;YAAC,CAAC;QAC5F,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAAC,WAAW,GAAG,CAAC,CAAC;YAAC,cAAc,GAAG,IAAI,CAAC;QAC5E,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAE,EAAE;YACrC,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC;gBAAE,OAAO;YACjH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtD,oBAAoB,CAAC,WAAW,CAAC,CAAC;gBAAC,WAAW,GAAG,CAAC,CAAC;gBAAC,cAAc,GAAG,IAAI,CAAC;gBAC1E,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;gBAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAAC,eAAe,EAAE,CAAC;YAClE,CAAC;QACH,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;YAC7B,WAAW,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,QAAQ,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAAE,OAAO;YACzF,IAAI,WAAW,GAAG,CAAC;gBAAE,OAAO;YAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;YAC3D,WAAW,GAAG,GAAG,CAAC;YAClB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;gBAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YACzF,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,EAAE;YAC5C,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE;gBAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACpE,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YACvC,IAAI,QAAQ,EAAE;gBAAE,OAAO;YACvB,IAAI,SAAS,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnE,gEAAgE;gBAChE,IAAI,CAAC,MAAM,IAAI,WAAW,GAAG,CAAC;oBAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;qBACzD,IAAI,CAAC,WAAW,EAAE,CAAC;oBAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAAC,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAAC,CAAC;YAC1G,CAAC;iBAAM,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;gBACrE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;gBACtF,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;oBAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,MAAM,KAAK,OAAO;YAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAC7D,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;YAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC/H,OAAO,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;YAChE,OAAO,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YAC5D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7F,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACpG,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACrD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ContextMessageNode, KnownContextForm } from '@deepseek-ai/dsh-client-ui-conversation/client';
|
|
3
|
+
import type { TranslateNS } from '@deepseek-ai/dsh-client-ui-slots';
|
|
4
|
+
type Translate = TranslateNS<'chat'>;
|
|
5
|
+
/**
|
|
6
|
+
* Default presentation: the model-facing text as text, with its real line
|
|
7
|
+
* breaks, and the remaining source fields beneath it. This is what every form
|
|
8
|
+
* this UI version does not recognize renders as.
|
|
9
|
+
* @param props - Durable content, its source, and the locale seat.
|
|
10
|
+
* @returns The opaque context body.
|
|
11
|
+
*/
|
|
12
|
+
export declare function OpaqueBody({ content, source, t }: {
|
|
13
|
+
content: ContextMessageNode['content'];
|
|
14
|
+
source: unknown;
|
|
15
|
+
t: Translate;
|
|
16
|
+
}): ReactNode;
|
|
17
|
+
/**
|
|
18
|
+
* `instructions` form: the files this context reconciled, then their text.
|
|
19
|
+
*
|
|
20
|
+
* The text keeps its `<system-reminder>` framing verbatim — the framing is part
|
|
21
|
+
* of what the model read, so hiding it would misreport the request.
|
|
22
|
+
* @param props - Durable content, its source, and the locale seat.
|
|
23
|
+
* @returns The instructions context body, or the opaque body when the change
|
|
24
|
+
* list is unreadable.
|
|
25
|
+
*/
|
|
26
|
+
export declare function InstructionsBody({ content, source, t }: {
|
|
27
|
+
content: ContextMessageNode['content'];
|
|
28
|
+
source: unknown;
|
|
29
|
+
t: Translate;
|
|
30
|
+
}): ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* `catalog` form: the published entries as a list, read from the source rather
|
|
33
|
+
* than re-parsed out of the model-facing prose.
|
|
34
|
+
*
|
|
35
|
+
* A catalog whose source carries no usable entries falls through to the opaque
|
|
36
|
+
* body, so an older or hand-edited log still shows its text.
|
|
37
|
+
* @param props - Durable content, its source, and the locale seat.
|
|
38
|
+
* @returns The catalog context body, or the opaque body when the entry list is
|
|
39
|
+
* unreadable.
|
|
40
|
+
*/
|
|
41
|
+
export declare function CatalogBody({ content, source, t }: {
|
|
42
|
+
content: ContextMessageNode['content'];
|
|
43
|
+
source: unknown;
|
|
44
|
+
t: Translate;
|
|
45
|
+
}): ReactNode;
|
|
46
|
+
/**
|
|
47
|
+
* `snapshot` form: the named contributions this snapshot assembled, in order.
|
|
48
|
+
*
|
|
49
|
+
* The sections are the same bytes the model read, split at the boundaries the
|
|
50
|
+
* producer assembled them on, so a reader sees which subsystem contributed
|
|
51
|
+
* which state instead of one undifferentiated wall.
|
|
52
|
+
*
|
|
53
|
+
* One sentence of the model-facing text is NOT in any section: the producer's
|
|
54
|
+
* framing line declaring that this snapshot supersedes earlier ones. Unlike the
|
|
55
|
+
* `<system-reminder>` wrapper an instruction context carries — which wraps
|
|
56
|
+
* content and cannot be separated from it — that line states the form's own
|
|
57
|
+
* semantics, so the body states them as a caption instead of reprinting the
|
|
58
|
+
* joined prose beside the sections it was split from.
|
|
59
|
+
* @param props - Durable content, its source, and the locale seat.
|
|
60
|
+
* @returns The snapshot context body, or the opaque body when unreadable.
|
|
61
|
+
*/
|
|
62
|
+
export declare function SnapshotBody({ content, source, t }: {
|
|
63
|
+
content: ContextMessageNode['content'];
|
|
64
|
+
source: unknown;
|
|
65
|
+
t: Translate;
|
|
66
|
+
}): ReactNode;
|
|
67
|
+
/**
|
|
68
|
+
* `notice` form: what just happened, with the model-facing text beneath it.
|
|
69
|
+
*
|
|
70
|
+
* The one-line account also rides the collapsed row ({@link contextBody}), so a
|
|
71
|
+
* notice is usually readable without expanding at all.
|
|
72
|
+
* @param props - Durable content, its source, and the locale seat.
|
|
73
|
+
* @returns The notice context body.
|
|
74
|
+
*/
|
|
75
|
+
export declare function NoticeBody({ content, t }: {
|
|
76
|
+
content: ContextMessageNode['content'];
|
|
77
|
+
source: unknown;
|
|
78
|
+
t: Translate;
|
|
79
|
+
}): ReactNode;
|
|
80
|
+
/**
|
|
81
|
+
* `relay` form: which agent sent this, then what it said.
|
|
82
|
+
*
|
|
83
|
+
* The sender is an opaque session id; it is shown as a field rather than a
|
|
84
|
+
* label, because this client cannot resolve it to a title.
|
|
85
|
+
* @param props - Durable content, its source, and the locale seat.
|
|
86
|
+
* @returns The relay context body.
|
|
87
|
+
*/
|
|
88
|
+
export declare function RelayBody({ content, source, t }: {
|
|
89
|
+
content: ContextMessageNode['content'];
|
|
90
|
+
source: unknown;
|
|
91
|
+
t: Translate;
|
|
92
|
+
}): ReactNode;
|
|
93
|
+
/**
|
|
94
|
+
* `recall` form: which sessions this material came from and how much of each
|
|
95
|
+
* survived the read, then the material itself.
|
|
96
|
+
*
|
|
97
|
+
* Completeness is the fact a reader needs first: recalled context is bounded on
|
|
98
|
+
* the way in, so a card that hid the omitted count would overstate what the
|
|
99
|
+
* model received.
|
|
100
|
+
* @param props - Durable content, its source, and the locale seat.
|
|
101
|
+
* @returns The recall context body, or the opaque body when unreadable.
|
|
102
|
+
*/
|
|
103
|
+
export declare function RecallBody({ content, source, t }: {
|
|
104
|
+
content: ContextMessageNode['content'];
|
|
105
|
+
source: unknown;
|
|
106
|
+
t: Translate;
|
|
107
|
+
}): ReactNode;
|
|
108
|
+
/**
|
|
109
|
+
* Choose the body for one context node.
|
|
110
|
+
*
|
|
111
|
+
* Returns the form the body actually rendered as, which is not always the
|
|
112
|
+
* declared one: a declared form whose fields are unreadable falls back to
|
|
113
|
+
* opaque, and the caller labels the row with what it really shows.
|
|
114
|
+
* `summary` is the collapsed row's one-line account, which only a `notice`
|
|
115
|
+
* records: its whole point is being readable without expanding.
|
|
116
|
+
* @param form - the producer-declared form projected onto the node.
|
|
117
|
+
* @param props - durable content, its source, and the locale seat.
|
|
118
|
+
* @returns the rendered form (null for opaque), its collapsed summary, and its body.
|
|
119
|
+
*/
|
|
120
|
+
export declare function contextBody(form: ContextMessageNode['form'], props: {
|
|
121
|
+
content: ContextMessageNode['content'];
|
|
122
|
+
source: unknown;
|
|
123
|
+
t: Translate;
|
|
124
|
+
}): {
|
|
125
|
+
rendered: KnownContextForm | null;
|
|
126
|
+
summary: string | null;
|
|
127
|
+
body: ReactNode;
|
|
128
|
+
};
|
|
129
|
+
export {};
|
|
130
|
+
//# sourceMappingURL=ContextBody.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextBody.d.ts","sourceRoot":"","sources":["../../../../src/client/native/ContextBody.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AAE1G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AASnE,KAAK,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;AA6IpC;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IACjD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,OAAO,CAAA;IACf,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,SAAS,CAOZ;AA2DD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IACvD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,OAAO,CAAA;IACf,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,SAAS,CAmBZ;AAgCD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAClD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,OAAO,CAAA;IACf,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,SAAS,CA+BZ;AAyBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IACnD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,OAAO,CAAA;IACf,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,SAAS,CAmBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;IACzC,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,OAAO,CAAA;IACf,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,SAAS,CAEZ;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAChD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,OAAO,CAAA;IACf,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,SAAS,CAYZ;AAwCD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IACjD,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,EAAE,OAAO,CAAA;IACf,CAAC,EAAE,SAAS,CAAA;CACb,GAAG,SAAS,CAwBZ;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAChC,KAAK,EAAE;IAAE,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAC/E;IAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAsChF"}
|