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.
Files changed (300) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/DESIGN.md +72 -0
  3. package/LICENSE +24 -0
  4. package/README.en.md +41 -0
  5. package/README.md +41 -0
  6. package/THIRD_PARTY_NOTICES.md +65 -0
  7. package/cordis.patch.yml +5 -0
  8. package/cordis.yml +4 -0
  9. package/dshx.yml +5 -0
  10. package/lib/client.js +49923 -0
  11. package/lib/client.js.map +1 -0
  12. package/lib/dsh-better-display.js +256 -0
  13. package/lib/types/client/Blocks.d.ts +45 -0
  14. package/lib/types/client/Blocks.d.ts.map +1 -0
  15. package/lib/types/client/Blocks.js +136 -0
  16. package/lib/types/client/Blocks.js.map +1 -0
  17. package/lib/types/client/ChoreographedFlow.d.ts +22 -0
  18. package/lib/types/client/ChoreographedFlow.d.ts.map +1 -0
  19. package/lib/types/client/ChoreographedFlow.js +170 -0
  20. package/lib/types/client/ChoreographedFlow.js.map +1 -0
  21. package/lib/types/client/ClosedProcessSummary.d.ts +9 -0
  22. package/lib/types/client/ClosedProcessSummary.d.ts.map +1 -0
  23. package/lib/types/client/ClosedProcessSummary.js +15 -0
  24. package/lib/types/client/ClosedProcessSummary.js.map +1 -0
  25. package/lib/types/client/LiveFold.d.ts +10 -0
  26. package/lib/types/client/LiveFold.d.ts.map +1 -0
  27. package/lib/types/client/LiveFold.js +39 -0
  28. package/lib/types/client/LiveFold.js.map +1 -0
  29. package/lib/types/client/McpAppFrame.d.ts +32 -0
  30. package/lib/types/client/McpAppFrame.d.ts.map +1 -0
  31. package/lib/types/client/McpAppFrame.js +193 -0
  32. package/lib/types/client/McpAppFrame.js.map +1 -0
  33. package/lib/types/client/Reader.d.ts +3 -0
  34. package/lib/types/client/Reader.d.ts.map +1 -0
  35. package/lib/types/client/Reader.js +537 -0
  36. package/lib/types/client/Reader.js.map +1 -0
  37. package/lib/types/client/ReasoningCard.d.ts +11 -0
  38. package/lib/types/client/ReasoningCard.d.ts.map +1 -0
  39. package/lib/types/client/ReasoningCard.js +301 -0
  40. package/lib/types/client/ReasoningCard.js.map +1 -0
  41. package/lib/types/client/StickyLane.d.ts +8 -0
  42. package/lib/types/client/StickyLane.d.ts.map +1 -0
  43. package/lib/types/client/StickyLane.js +28 -0
  44. package/lib/types/client/StickyLane.js.map +1 -0
  45. package/lib/types/client/TimelineRail.d.ts +10 -0
  46. package/lib/types/client/TimelineRail.d.ts.map +1 -0
  47. package/lib/types/client/TimelineRail.js +168 -0
  48. package/lib/types/client/TimelineRail.js.map +1 -0
  49. package/lib/types/client/ToolActivity.d.ts +17 -0
  50. package/lib/types/client/ToolActivity.d.ts.map +1 -0
  51. package/lib/types/client/ToolActivity.js +192 -0
  52. package/lib/types/client/ToolActivity.js.map +1 -0
  53. package/lib/types/client/TurnMetrics.d.ts +11 -0
  54. package/lib/types/client/TurnMetrics.d.ts.map +1 -0
  55. package/lib/types/client/TurnMetrics.js +44 -0
  56. package/lib/types/client/TurnMetrics.js.map +1 -0
  57. package/lib/types/client/WaitingStatus.d.ts +6 -0
  58. package/lib/types/client/WaitingStatus.d.ts.map +1 -0
  59. package/lib/types/client/WaitingStatus.js +19 -0
  60. package/lib/types/client/WaitingStatus.js.map +1 -0
  61. package/lib/types/client/conversation-scroll.d.ts +19 -0
  62. package/lib/types/client/conversation-scroll.d.ts.map +1 -0
  63. package/lib/types/client/conversation-scroll.js +25 -0
  64. package/lib/types/client/conversation-scroll.js.map +1 -0
  65. package/lib/types/client/deliverables.d.ts +24 -0
  66. package/lib/types/client/deliverables.d.ts.map +1 -0
  67. package/lib/types/client/deliverables.js +104 -0
  68. package/lib/types/client/deliverables.js.map +1 -0
  69. package/lib/types/client/entry-policy.d.ts +10 -0
  70. package/lib/types/client/entry-policy.d.ts.map +1 -0
  71. package/lib/types/client/entry-policy.js +24 -0
  72. package/lib/types/client/entry-policy.js.map +1 -0
  73. package/lib/types/client/entry.d.ts +4 -0
  74. package/lib/types/client/entry.d.ts.map +1 -0
  75. package/lib/types/client/entry.js +34 -0
  76. package/lib/types/client/entry.js.map +1 -0
  77. package/lib/types/client/fold-choreography.d.ts +28 -0
  78. package/lib/types/client/fold-choreography.d.ts.map +1 -0
  79. package/lib/types/client/fold-choreography.js +31 -0
  80. package/lib/types/client/fold-choreography.js.map +1 -0
  81. package/lib/types/client/index.d.ts +7 -0
  82. package/lib/types/client/index.d.ts.map +1 -0
  83. package/lib/types/client/index.js +153 -0
  84. package/lib/types/client/index.js.map +1 -0
  85. package/lib/types/client/live-turn.d.ts +58 -0
  86. package/lib/types/client/live-turn.d.ts.map +1 -0
  87. package/lib/types/client/live-turn.js +144 -0
  88. package/lib/types/client/live-turn.js.map +1 -0
  89. package/lib/types/client/markdown/MarkdownText.d.ts +39 -0
  90. package/lib/types/client/markdown/MarkdownText.d.ts.map +1 -0
  91. package/lib/types/client/markdown/MarkdownText.js +171 -0
  92. package/lib/types/client/markdown/MarkdownText.js.map +1 -0
  93. package/lib/types/client/markdown/cjkFriendlyStrong.d.ts +9 -0
  94. package/lib/types/client/markdown/cjkFriendlyStrong.d.ts.map +1 -0
  95. package/lib/types/client/markdown/cjkFriendlyStrong.js +73 -0
  96. package/lib/types/client/markdown/cjkFriendlyStrong.js.map +1 -0
  97. package/lib/types/client/markdown/incremental.d.ts +69 -0
  98. package/lib/types/client/markdown/incremental.d.ts.map +1 -0
  99. package/lib/types/client/markdown/incremental.js +108 -0
  100. package/lib/types/client/markdown/incremental.js.map +1 -0
  101. package/lib/types/client/markdown/katex.d.ts +27 -0
  102. package/lib/types/client/markdown/katex.d.ts.map +1 -0
  103. package/lib/types/client/markdown/katex.js +88 -0
  104. package/lib/types/client/markdown/katex.js.map +1 -0
  105. package/lib/types/client/markdown/mathCompatibility.d.ts +11 -0
  106. package/lib/types/client/markdown/mathCompatibility.d.ts.map +1 -0
  107. package/lib/types/client/markdown/mathCompatibility.js +293 -0
  108. package/lib/types/client/markdown/mathCompatibility.js.map +1 -0
  109. package/lib/types/client/markdown/parse.d.ts +25 -0
  110. package/lib/types/client/markdown/parse.d.ts.map +1 -0
  111. package/lib/types/client/markdown/parse.js +42 -0
  112. package/lib/types/client/markdown/parse.js.map +1 -0
  113. package/lib/types/client/markdown/render.d.ts +119 -0
  114. package/lib/types/client/markdown/render.d.ts.map +1 -0
  115. package/lib/types/client/markdown/render.js +435 -0
  116. package/lib/types/client/markdown/render.js.map +1 -0
  117. package/lib/types/client/mcp-app.d.ts +50 -0
  118. package/lib/types/client/mcp-app.d.ts.map +1 -0
  119. package/lib/types/client/mcp-app.js +328 -0
  120. package/lib/types/client/mcp-app.js.map +1 -0
  121. package/lib/types/client/message-chrome.d.ts +19 -0
  122. package/lib/types/client/message-chrome.d.ts.map +1 -0
  123. package/lib/types/client/message-chrome.js +42 -0
  124. package/lib/types/client/message-chrome.js.map +1 -0
  125. package/lib/types/client/motion.d.ts +38 -0
  126. package/lib/types/client/motion.d.ts.map +1 -0
  127. package/lib/types/client/motion.js +367 -0
  128. package/lib/types/client/motion.js.map +1 -0
  129. package/lib/types/client/native/ContextBody.d.ts +130 -0
  130. package/lib/types/client/native/ContextBody.d.ts.map +1 -0
  131. package/lib/types/client/native/ContextBody.js +398 -0
  132. package/lib/types/client/native/ContextBody.js.map +1 -0
  133. package/lib/types/client/native/ContextInjectionRow.d.ts +26 -0
  134. package/lib/types/client/native/ContextInjectionRow.d.ts.map +1 -0
  135. package/lib/types/client/native/ContextInjectionRow.js +27 -0
  136. package/lib/types/client/native/ContextInjectionRow.js.map +1 -0
  137. package/lib/types/client/native/ReferenceIcon.d.ts +16 -0
  138. package/lib/types/client/native/ReferenceIcon.d.ts.map +1 -0
  139. package/lib/types/client/native/ReferenceIcon.js +16 -0
  140. package/lib/types/client/native/ReferenceIcon.js.map +1 -0
  141. package/lib/types/client/native/tool-call-model.d.ts +58 -0
  142. package/lib/types/client/native/tool-call-model.d.ts.map +1 -0
  143. package/lib/types/client/native/tool-call-model.js +219 -0
  144. package/lib/types/client/native/tool-call-model.js.map +1 -0
  145. package/lib/types/client/open-file.d.ts +24 -0
  146. package/lib/types/client/primitive-labels.d.ts +10 -0
  147. package/lib/types/client/primitive-labels.d.ts.map +1 -0
  148. package/lib/types/client/primitive-labels.js +37 -0
  149. package/lib/types/client/primitive-labels.js.map +1 -0
  150. package/lib/types/client/projection.d.ts +41 -0
  151. package/lib/types/client/projection.d.ts.map +1 -0
  152. package/lib/types/client/projection.js +112 -0
  153. package/lib/types/client/projection.js.map +1 -0
  154. package/lib/types/client/reasoning-follow.d.ts +6 -0
  155. package/lib/types/client/reasoning-follow.d.ts.map +1 -0
  156. package/lib/types/client/reasoning-follow.js +12 -0
  157. package/lib/types/client/reasoning-follow.js.map +1 -0
  158. package/lib/types/client/settings-copy.d.ts +6 -0
  159. package/lib/types/client/settings-slots.d.ts +16 -0
  160. package/lib/types/client/store.d.ts +17 -0
  161. package/lib/types/client/store.d.ts.map +1 -0
  162. package/lib/types/client/store.js +13 -0
  163. package/lib/types/client/store.js.map +1 -0
  164. package/lib/types/client/stream-buffer.d.ts +29 -0
  165. package/lib/types/client/stream-buffer.d.ts.map +1 -0
  166. package/lib/types/client/stream-buffer.js +113 -0
  167. package/lib/types/client/stream-buffer.js.map +1 -0
  168. package/lib/types/client/streaming.d.ts +18 -0
  169. package/lib/types/client/streaming.d.ts.map +1 -0
  170. package/lib/types/client/streaming.js +77 -0
  171. package/lib/types/client/streaming.js.map +1 -0
  172. package/lib/types/client/timeline.d.ts +26 -0
  173. package/lib/types/client/timeline.d.ts.map +1 -0
  174. package/lib/types/client/timeline.js +48 -0
  175. package/lib/types/client/timeline.js.map +1 -0
  176. package/lib/types/client/tool-activity.d.ts +52 -0
  177. package/lib/types/client/tool-activity.d.ts.map +1 -0
  178. package/lib/types/client/tool-activity.js +178 -0
  179. package/lib/types/client/tool-activity.js.map +1 -0
  180. package/lib/types/client/types.d.ts +66 -0
  181. package/lib/types/client/types.d.ts.map +1 -0
  182. package/lib/types/client/types.js +2 -0
  183. package/lib/types/client/types.js.map +1 -0
  184. package/lib/types/client/waiting-clock.d.ts +17 -0
  185. package/lib/types/client/waiting-clock.d.ts.map +1 -0
  186. package/lib/types/client/waiting-clock.js +24 -0
  187. package/lib/types/client/waiting-clock.js.map +1 -0
  188. package/lib/types/client/word-motion.d.ts +16 -0
  189. package/lib/types/client/word-motion.d.ts.map +1 -0
  190. package/lib/types/client/word-motion.js +89 -0
  191. package/lib/types/client/word-motion.js.map +1 -0
  192. package/lib/types/client/word-timeline.d.ts +28 -0
  193. package/lib/types/client/word-timeline.d.ts.map +1 -0
  194. package/lib/types/client/word-timeline.js +100 -0
  195. package/lib/types/client/word-timeline.js.map +1 -0
  196. package/lib/types/dsh-better-display.d.ts +17 -0
  197. package/lib/types/dsh-better-display.d.ts.map +1 -0
  198. package/lib/types/dsh-better-display.js +53 -0
  199. package/lib/types/dsh-better-display.js.map +1 -0
  200. package/package.json +121 -0
  201. package/scripts/build-motion-fixture.mjs +26 -0
  202. package/scripts/link-harness-dependencies.mjs +51 -0
  203. package/skills/generative-mcpapps/SKILL.md +47 -0
  204. package/skills/generative-mcpapps/examples/interactive_quiz.html +153 -0
  205. package/skills/generative-mcpapps/references/html_boilerplate.md +122 -0
  206. package/skills/generative-mcpapps/references/sep1865_protocol.md +54 -0
  207. package/src/client/Blocks.tsx +205 -0
  208. package/src/client/ChoreographedFlow.tsx +182 -0
  209. package/src/client/ClosedProcessSummary.tsx +19 -0
  210. package/src/client/LiveFold.tsx +43 -0
  211. package/src/client/McpAppFrame.module.css +210 -0
  212. package/src/client/McpAppFrame.tsx +317 -0
  213. package/src/client/Reader.module.css +329 -0
  214. package/src/client/Reader.tsx +814 -0
  215. package/src/client/ReasoningCard.tsx +285 -0
  216. package/src/client/SettingsSection.module.css +147 -0
  217. package/src/client/SettingsSection.tsx +117 -0
  218. package/src/client/StickyLane.tsx +24 -0
  219. package/src/client/TimelineRail.module.css +170 -0
  220. package/src/client/TimelineRail.tsx +262 -0
  221. package/src/client/ToolActivity.tsx +214 -0
  222. package/src/client/TurnMetrics.module.css +139 -0
  223. package/src/client/TurnMetrics.tsx +160 -0
  224. package/src/client/WaitingStatus.tsx +22 -0
  225. package/src/client/conversation-scroll.ts +28 -0
  226. package/src/client/deliverables.ts +122 -0
  227. package/src/client/entry-policy.ts +20 -0
  228. package/src/client/entry.tsx +40 -0
  229. package/src/client/fold-choreography.ts +38 -0
  230. package/src/client/index.tsx +198 -0
  231. package/src/client/live-turn.ts +155 -0
  232. package/src/client/markdown/MarkdownText.module.css +304 -0
  233. package/src/client/markdown/MarkdownText.tsx +187 -0
  234. package/src/client/markdown/cjkFriendlyStrong.ts +84 -0
  235. package/src/client/markdown/incremental.ts +131 -0
  236. package/src/client/markdown/katex.tsx +91 -0
  237. package/src/client/markdown/mathCompatibility.ts +350 -0
  238. package/src/client/markdown/parse.ts +45 -0
  239. package/src/client/markdown/render.tsx +630 -0
  240. package/src/client/markdown/upstream.json +14 -0
  241. package/src/client/mcp-app.ts +323 -0
  242. package/src/client/message-chrome.ts +47 -0
  243. package/src/client/motion.tsx +338 -0
  244. package/src/client/native/ContextBody.module.css +161 -0
  245. package/src/client/native/ContextBody.tsx +591 -0
  246. package/src/client/native/ContextInjectionRow.module.css +62 -0
  247. package/src/client/native/ContextInjectionRow.tsx +72 -0
  248. package/src/client/native/ReferenceIcon.tsx +35 -0
  249. package/src/client/native/tool-call-model.ts +248 -0
  250. package/src/client/native/upstream.json +41 -0
  251. package/src/client/open-file.ts +94 -0
  252. package/src/client/pending-submission.ts +49 -0
  253. package/src/client/primitive-labels.ts +53 -0
  254. package/src/client/projection.ts +118 -0
  255. package/src/client/reasoning-follow.ts +12 -0
  256. package/src/client/settings-copy.ts +53 -0
  257. package/src/client/settings-slots.ts +20 -0
  258. package/src/client/settings.tsx +73 -0
  259. package/src/client/skill-status.ts +78 -0
  260. package/src/client/store.ts +30 -0
  261. package/src/client/stream-buffer.ts +100 -0
  262. package/src/client/streaming.tsx +62 -0
  263. package/src/client/style.d.ts +4 -0
  264. package/src/client/timeline.ts +77 -0
  265. package/src/client/tool-activity.ts +152 -0
  266. package/src/client/types.ts +66 -0
  267. package/src/client/waiting-clock.ts +25 -0
  268. package/src/client/word-motion.tsx +91 -0
  269. package/src/client/word-timeline.ts +96 -0
  270. package/src/dsh-better-display.ts +108 -0
  271. package/src/skill-roots.ts +138 -0
  272. package/src/skill-status.ts +81 -0
  273. package/tests/browser-closed-gap.tsx +20 -0
  274. package/tests/browser-motion.tsx +65 -0
  275. package/tests/browser-sticky-lanes.tsx +22 -0
  276. package/tests/browser-waiting-clock.tsx +14 -0
  277. package/tests/chat-flow-hook.test.ts +66 -0
  278. package/tests/cloud-gate.test.ts +34 -0
  279. package/tests/conversation-scroll.test.ts +47 -0
  280. package/tests/deliverables.test.ts +128 -0
  281. package/tests/entry.test.ts +42 -0
  282. package/tests/fixtures/maid-composer-hide.html +31 -0
  283. package/tests/fold-choreography.test.ts +38 -0
  284. package/tests/history-word-regression.test.ts +16 -0
  285. package/tests/live-turn.test.ts +218 -0
  286. package/tests/mcp-apps.test.ts +157 -0
  287. package/tests/message-chrome.test.ts +29 -0
  288. package/tests/open-file.test.ts +103 -0
  289. package/tests/pending-submission.test.ts +45 -0
  290. package/tests/projection.test.ts +184 -0
  291. package/tests/reasoning-follow.test.ts +34 -0
  292. package/tests/settings-copy.test.ts +63 -0
  293. package/tests/skill-status.test.ts +137 -0
  294. package/tests/stock-install.test.ts +50 -0
  295. package/tests/stream-buffer.test.ts +97 -0
  296. package/tests/timeline.test.ts +59 -0
  297. package/tests/waiting-clock.test.ts +24 -0
  298. package/tests/word-timeline.test.ts +136 -0
  299. package/tsconfig.json +11 -0
  300. 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":"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"}
@@ -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"}