@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.
- package/LICENSE +21 -0
- package/README.en.md +123 -0
- package/README.md +123 -0
- package/conversation-ui-off.yml +3 -0
- package/cordis.patch.yml +10 -0
- package/lib/client.js +3672 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +302 -0
- package/package.json +182 -0
- package/src/boot-config.ts +28 -0
- package/src/client/AnimatedDisclosure.tsx +89 -0
- package/src/client/ConversationCard.module.css +253 -0
- package/src/client/ConversationCard.tsx +122 -0
- package/src/client/DeliverablesCard.module.css +187 -0
- package/src/client/DeliverablesCard.tsx +142 -0
- package/src/client/FollowHost.tsx +25 -0
- package/src/client/ToolActivityGroup.tsx +341 -0
- package/src/client/TurnPreludeUserNodeView.tsx +258 -0
- package/src/client/TurnProcessMember.tsx +92 -0
- package/src/client/TypewriterAssistantNodeView.module.css +1260 -0
- package/src/client/TypewriterAssistantNodeView.tsx +390 -0
- package/src/client/TypewriterToolNodeView.tsx +916 -0
- package/src/client/conversation-ui-card-controller.ts +162 -0
- package/src/client/conversation-ui-settings-api.ts +65 -0
- package/src/client/deliverables.ts +263 -0
- package/src/client/index.ts +242 -0
- package/src/client/locales.ts +74 -0
- package/src/client/teleprompterGlide.ts +590 -0
- package/src/client/turnElapsed.ts +27 -0
- package/src/client/turnProcessFold.ts +224 -0
- package/src/client/useConversationContent.ts +471 -0
- package/src/client/useFpsGuard.ts +84 -0
- package/src/config.ts +44 -0
- package/src/css-modules.d.ts +9 -0
- package/src/index.ts +2 -0
- package/src/package-meta.ts +39 -0
- package/src/plugin.ts +155 -0
- package/src/profile-installation.ts +121 -0
- package/src/settings-api.ts +33 -0
- 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
|
+
}
|