@jcy2387/dsh-conversation-ui 0.1.0-rc.12

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 (40) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +123 -0
  3. package/README.md +123 -0
  4. package/conversation-ui-off.yml +3 -0
  5. package/cordis.patch.yml +10 -0
  6. package/lib/client.js +3672 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/index.js +302 -0
  9. package/package.json +182 -0
  10. package/src/boot-config.ts +28 -0
  11. package/src/client/AnimatedDisclosure.tsx +89 -0
  12. package/src/client/ConversationCard.module.css +253 -0
  13. package/src/client/ConversationCard.tsx +122 -0
  14. package/src/client/DeliverablesCard.module.css +187 -0
  15. package/src/client/DeliverablesCard.tsx +142 -0
  16. package/src/client/FollowHost.tsx +25 -0
  17. package/src/client/ToolActivityGroup.tsx +341 -0
  18. package/src/client/TurnPreludeUserNodeView.tsx +258 -0
  19. package/src/client/TurnProcessMember.tsx +92 -0
  20. package/src/client/TypewriterAssistantNodeView.module.css +1260 -0
  21. package/src/client/TypewriterAssistantNodeView.tsx +390 -0
  22. package/src/client/TypewriterToolNodeView.tsx +916 -0
  23. package/src/client/conversation-ui-card-controller.ts +162 -0
  24. package/src/client/conversation-ui-settings-api.ts +65 -0
  25. package/src/client/deliverables.ts +263 -0
  26. package/src/client/index.ts +242 -0
  27. package/src/client/locales.ts +74 -0
  28. package/src/client/teleprompterGlide.ts +590 -0
  29. package/src/client/turnElapsed.ts +27 -0
  30. package/src/client/turnProcessFold.ts +224 -0
  31. package/src/client/useConversationContent.ts +471 -0
  32. package/src/client/useFpsGuard.ts +84 -0
  33. package/src/config.ts +44 -0
  34. package/src/css-modules.d.ts +9 -0
  35. package/src/index.ts +2 -0
  36. package/src/package-meta.ts +39 -0
  37. package/src/plugin.ts +155 -0
  38. package/src/profile-installation.ts +121 -0
  39. package/src/settings-api.ts +33 -0
  40. package/src/settings.ts +30 -0
@@ -0,0 +1,92 @@
1
+ import { useEffect, useState, type HTMLAttributes, type ReactNode, type Ref } from 'react'
2
+ import {
3
+ IconChevronDownOutline14,
4
+ IconChevronRightOutline14,
5
+ } from '@deepseek-ai/dsh-client-ui-primitives'
6
+ import {
7
+ useTurnProcessFold,
8
+ type TurnFoldAddress,
9
+ } from './turnProcessFold.ts'
10
+ import css from './TypewriterAssistantNodeView.module.css'
11
+
12
+ interface TurnProcessMemberProps extends Omit<HTMLAttributes<HTMLDivElement>, 'hidden' | 'id'> {
13
+ readonly address: TurnFoldAddress
14
+ readonly memberId: string
15
+ readonly memberOrder: number
16
+ readonly memberRef?: Ref<HTMLDivElement> | undefined
17
+ readonly turnStartTime?: number | undefined
18
+ readonly formatRunningElapsed?: ((ms: number) => string) | undefined
19
+ readonly children: ReactNode
20
+ }
21
+
22
+ function useElapsedNow(active: boolean): number {
23
+ const [now, setNow] = useState(() => Date.now())
24
+ useEffect(() => {
25
+ if (!active) return
26
+ setNow(Date.now())
27
+ const timer = window.setInterval(() => setNow(Date.now()), 1_000)
28
+ return () => window.clearInterval(timer)
29
+ }, [active])
30
+ return now
31
+ }
32
+
33
+ /**
34
+ * One process row in a flat Harness Turn. The earliest registered row owns the
35
+ * Turn disclosure, while this row's own content participates in the shared
36
+ * collapsed state.
37
+ */
38
+ export function TurnProcessMember({
39
+ address,
40
+ memberId,
41
+ memberOrder,
42
+ memberRef,
43
+ turnStartTime,
44
+ formatRunningElapsed,
45
+ children,
46
+ ...attributes
47
+ }: TurnProcessMemberProps) {
48
+ const fold = useTurnProcessFold(address, { memberId, memberOrder })
49
+ const running = fold.boundary
50
+ && !fold.completed
51
+ && turnStartTime !== undefined
52
+ && formatRunningElapsed !== undefined
53
+ const now = useElapsedNow(running)
54
+ const label = fold.completed
55
+ ? fold.label
56
+ : running ? formatRunningElapsed(now - turnStartTime) : undefined
57
+ return (
58
+ <>
59
+ {fold.boundary && label !== undefined && (
60
+ <div
61
+ className={css.turnFoldRow}
62
+ data-turn-fold-row=""
63
+ data-turn-fold-state={fold.completed ? 'completed' : 'running'}
64
+ >
65
+ {fold.completed ? (
66
+ <button
67
+ type="button"
68
+ className={css.turnFoldButton}
69
+ aria-expanded={!fold.collapsed}
70
+ aria-controls={fold.controls}
71
+ onClick={fold.toggle}
72
+ >
73
+ <span>{label}</span>
74
+ {fold.collapsed ? <IconChevronRightOutline14 /> : <IconChevronDownOutline14 />}
75
+ </button>
76
+ ) : (
77
+ <span className={css.turnFoldLabel} aria-live="off">{label}</span>
78
+ )}
79
+ </div>
80
+ )}
81
+ <div
82
+ {...attributes}
83
+ ref={memberRef}
84
+ id={memberId}
85
+ data-turn-process=""
86
+ hidden={fold.collapsed}
87
+ >
88
+ {children}
89
+ </div>
90
+ </>
91
+ )
92
+ }