@neuronection/assistant-ui 0.23.0 → 0.25.0
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 +92 -0
- package/README.md +9 -0
- package/dist/about.js +1 -1
- package/dist/ai-magic-fill.js +1 -1
- package/dist/chat-branch-tree.d.ts +45 -0
- package/dist/chat-branch-tree.js +3 -0
- package/dist/chat-branch-tree.js.map +1 -0
- package/dist/chat-composer.d.ts +50 -0
- package/dist/chat-composer.js +3 -0
- package/dist/chat-composer.js.map +1 -0
- package/dist/chat-core.d.ts +154 -0
- package/dist/chat-core.js +4 -0
- package/dist/chat-core.js.map +1 -0
- package/dist/chat-drawer.d.ts +32 -0
- package/dist/chat-drawer.js +3 -0
- package/dist/chat-drawer.js.map +1 -0
- package/dist/chat-launcher.d.ts +28 -0
- package/dist/chat-launcher.js +3 -0
- package/dist/chat-launcher.js.map +1 -0
- package/dist/chat-markdown.d.ts +64 -0
- package/dist/chat-markdown.js +3 -0
- package/dist/chat-markdown.js.map +1 -0
- package/dist/chat-message.d.ts +108 -0
- package/dist/chat-message.js +3 -0
- package/dist/chat-message.js.map +1 -0
- package/dist/chat-panel.d.ts +28 -0
- package/dist/chat-panel.js +3 -0
- package/dist/chat-panel.js.map +1 -0
- package/dist/chat-reasoning.d.ts +27 -0
- package/dist/chat-reasoning.js +3 -0
- package/dist/chat-reasoning.js.map +1 -0
- package/dist/chat-session-list.d.ts +51 -0
- package/dist/chat-session-list.js +3 -0
- package/dist/chat-session-list.js.map +1 -0
- package/dist/chat-tool-card.d.ts +43 -0
- package/dist/chat-tool-card.js +3 -0
- package/dist/chat-tool-card.js.map +1 -0
- package/dist/chat-transcript.d.ts +33 -0
- package/dist/chat-transcript.js +3 -0
- package/dist/chat-transcript.js.map +1 -0
- package/dist/chat-turn-status.d.ts +26 -0
- package/dist/chat-turn-status.js +3 -0
- package/dist/chat-turn-status.js.map +1 -0
- package/dist/{chunk-CZ2BL2ZL.js → chunk-3JJ2WCPN.js} +2 -2
- package/dist/{chunk-CZ2BL2ZL.js.map → chunk-3JJ2WCPN.js.map} +1 -1
- package/dist/chunk-5IOLDMDY.js +3 -0
- package/dist/chunk-5IOLDMDY.js.map +1 -0
- package/dist/{chunk-EODV6JK7.js → chunk-5QTHDB3D.js} +3 -3
- package/dist/{chunk-EODV6JK7.js.map → chunk-5QTHDB3D.js.map} +1 -1
- package/dist/chunk-6E6RRLKU.js +3 -0
- package/dist/chunk-6E6RRLKU.js.map +1 -0
- package/dist/chunk-6GNLY2EB.js +272 -0
- package/dist/chunk-6GNLY2EB.js.map +1 -0
- package/dist/chunk-743FJDRA.js +184 -0
- package/dist/chunk-743FJDRA.js.map +1 -0
- package/dist/chunk-BSIWLVDX.js +217 -0
- package/dist/chunk-BSIWLVDX.js.map +1 -0
- package/dist/chunk-BVJT67B5.js +134 -0
- package/dist/chunk-BVJT67B5.js.map +1 -0
- package/dist/chunk-DZBTJZZV.js +201 -0
- package/dist/chunk-DZBTJZZV.js.map +1 -0
- package/dist/chunk-HQIYSW2D.js +131 -0
- package/dist/chunk-HQIYSW2D.js.map +1 -0
- package/dist/chunk-LSCWBNG3.js +3 -0
- package/dist/chunk-LSCWBNG3.js.map +1 -0
- package/dist/chunk-NBT7NLNU.js +120 -0
- package/dist/chunk-NBT7NLNU.js.map +1 -0
- package/dist/chunk-NKYPNEOX.js +198 -0
- package/dist/chunk-NKYPNEOX.js.map +1 -0
- package/dist/{chunk-INMAUGBK.js → chunk-OH7AJ3WY.js} +3 -3
- package/dist/{chunk-INMAUGBK.js.map → chunk-OH7AJ3WY.js.map} +1 -1
- package/dist/chunk-P75QKU5J.js +57 -0
- package/dist/chunk-P75QKU5J.js.map +1 -0
- package/dist/chunk-PAQ6YQ7Y.js +3 -0
- package/dist/chunk-PAQ6YQ7Y.js.map +1 -0
- package/dist/chunk-QVDCFZSE.js +72 -0
- package/dist/chunk-QVDCFZSE.js.map +1 -0
- package/dist/chunk-RPLEI6LQ.js +102 -0
- package/dist/chunk-RPLEI6LQ.js.map +1 -0
- package/dist/chunk-S62VJVWB.js +36 -0
- package/dist/chunk-S62VJVWB.js.map +1 -0
- package/dist/chunk-X3C2FBMR.js +141 -0
- package/dist/chunk-X3C2FBMR.js.map +1 -0
- package/dist/{chunk-7YLR4AGA.js → chunk-XZWLTTHA.js} +2 -2
- package/dist/{chunk-7YLR4AGA.js.map → chunk-XZWLTTHA.js.map} +1 -1
- package/dist/chunk-Z4IBQ53C.js +75 -0
- package/dist/chunk-Z4IBQ53C.js.map +1 -0
- package/dist/{chunk-7KD4MG75.js → chunk-ZK2V2LPA.js} +3 -3
- package/dist/chunk-ZK2V2LPA.js.map +1 -0
- package/dist/copy-button.js +1 -1
- package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +37 -23
- package/dist/index.js.map +1 -1
- package/dist/portal.js +1 -1
- package/dist/settings-shell.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/tree-YaIz73vo.d.ts +54 -0
- package/dist/types-DZwzmyKE.d.ts +44 -0
- package/package.json +60 -2
- package/dist/chunk-7KD4MG75.js.map +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
|
+
import { d as ChatMessageVariants, C as ChatRole, b as ChatError } from './types-DZwzmyKE.js';
|
|
4
|
+
|
|
5
|
+
interface ChatMessageEditorLabels {
|
|
6
|
+
save: string;
|
|
7
|
+
cancel: string;
|
|
8
|
+
ariaLabel: string;
|
|
9
|
+
}
|
|
10
|
+
interface ChatMessageEditorProps {
|
|
11
|
+
value: string;
|
|
12
|
+
onValueChange: (value: string) => void;
|
|
13
|
+
/** Save & resend — branches the tree (family `edit` endpoint) and reruns the turn. */
|
|
14
|
+
onSubmit: () => void;
|
|
15
|
+
onCancel: () => void;
|
|
16
|
+
submitDisabled?: boolean;
|
|
17
|
+
rows?: number;
|
|
18
|
+
labels?: Partial<ChatMessageEditorLabels>;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Inline user-prompt editor for the edit-and-resend flow (study pattern):
|
|
23
|
+
* controlled textarea, Cmd/Ctrl+Enter saves, Escape cancels.
|
|
24
|
+
*/
|
|
25
|
+
declare const ChatMessageEditor: React.ForwardRefExoticComponent<ChatMessageEditorProps & React.RefAttributes<HTMLDivElement>>;
|
|
26
|
+
|
|
27
|
+
interface MessageVariantSwitcherLabels {
|
|
28
|
+
group: string;
|
|
29
|
+
variantOf: (index: number, count: number) => string;
|
|
30
|
+
previous: string;
|
|
31
|
+
next: string;
|
|
32
|
+
}
|
|
33
|
+
interface MessageVariantSwitcherProps {
|
|
34
|
+
variants: ChatMessageVariants;
|
|
35
|
+
/** Flip the parent's active-child pointer to the sibling id (family `select` endpoint). */
|
|
36
|
+
onSelect: (messageId: string) => void;
|
|
37
|
+
labels?: Partial<MessageVariantSwitcherLabels>;
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The `‹ n/N ›` sibling-variant switcher under a branched message
|
|
42
|
+
* (study's inline switcher, family branching contract).
|
|
43
|
+
*/
|
|
44
|
+
declare const MessageVariantSwitcher: React.ForwardRefExoticComponent<MessageVariantSwitcherProps & React.RefAttributes<HTMLDivElement>>;
|
|
45
|
+
|
|
46
|
+
interface ChatMessageAction {
|
|
47
|
+
key: string;
|
|
48
|
+
label: string;
|
|
49
|
+
icon?: LucideIcon;
|
|
50
|
+
onClick: () => void;
|
|
51
|
+
danger?: boolean;
|
|
52
|
+
}
|
|
53
|
+
interface ChatMessageActions {
|
|
54
|
+
onCopy?: () => void;
|
|
55
|
+
onEdit?: () => void;
|
|
56
|
+
onRegenerate?: () => void;
|
|
57
|
+
onRetry?: () => void;
|
|
58
|
+
/** Extra icon actions (app-specific). */
|
|
59
|
+
extras?: ChatMessageAction[];
|
|
60
|
+
}
|
|
61
|
+
interface ChatMessageLabels {
|
|
62
|
+
copy: string;
|
|
63
|
+
edit: string;
|
|
64
|
+
regenerate: string;
|
|
65
|
+
retry: string;
|
|
66
|
+
interrupted: string;
|
|
67
|
+
error: string;
|
|
68
|
+
}
|
|
69
|
+
interface ChatMessageProps {
|
|
70
|
+
role: ChatRole;
|
|
71
|
+
/** Usually a `MarkdownSurface`; any node graph renders here. */
|
|
72
|
+
content: React.ReactNode;
|
|
73
|
+
/** Thinking block slot (usually `ChatReasoning`). */
|
|
74
|
+
reasoning?: React.ReactNode;
|
|
75
|
+
/** Tool cards / HITL cards below the content. */
|
|
76
|
+
children?: React.ReactNode;
|
|
77
|
+
status?: 'streaming' | 'done' | 'error' | 'interrupted';
|
|
78
|
+
error?: ChatError;
|
|
79
|
+
actions?: ChatMessageActions;
|
|
80
|
+
/** Edit-and-resend mode for user messages (renders `ChatMessageEditor`). */
|
|
81
|
+
editing?: false | {
|
|
82
|
+
value: string;
|
|
83
|
+
onValueChange: (value: string) => void;
|
|
84
|
+
onSubmit: () => void;
|
|
85
|
+
onCancel: () => void;
|
|
86
|
+
submitDisabled?: boolean;
|
|
87
|
+
};
|
|
88
|
+
variants?: ChatMessageVariants;
|
|
89
|
+
onSelectVariant?: (messageId: string) => void;
|
|
90
|
+
/** Badge row (model, latency, tokens — app-defined). */
|
|
91
|
+
meta?: React.ReactNode;
|
|
92
|
+
/** Deep-link chip row (career references, health citations). */
|
|
93
|
+
chips?: React.ReactNode;
|
|
94
|
+
/** Attachment rail above the content. */
|
|
95
|
+
attachments?: React.ReactNode;
|
|
96
|
+
labels?: Partial<ChatMessageLabels & ChatMessageEditorLabels & MessageVariantSwitcherLabels>;
|
|
97
|
+
compact?: boolean;
|
|
98
|
+
className?: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The family chat bubble: role-aligned, hover action row (copy / edit /
|
|
102
|
+
* regenerate + app extras), variant switcher under branched messages,
|
|
103
|
+
* reasoning and below-content slots, inline edit-and-resend, error +
|
|
104
|
+
* interrupted states. Presentational — state lives app-side.
|
|
105
|
+
*/
|
|
106
|
+
declare const ChatMessage: React.ForwardRefExoticComponent<ChatMessageProps & React.RefAttributes<HTMLDivElement>>;
|
|
107
|
+
|
|
108
|
+
export { ChatMessage, type ChatMessageAction, type ChatMessageActions, ChatMessageEditor, type ChatMessageEditorLabels, type ChatMessageEditorProps, type ChatMessageLabels, type ChatMessageProps, MessageVariantSwitcher, type MessageVariantSwitcherLabels, type MessageVariantSwitcherProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-message.js"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
type ChatPanelVariant = 'page' | 'sidebar' | 'bubble';
|
|
4
|
+
interface ChatPanelProps {
|
|
5
|
+
/** Layout tier: full page (centered, wide), sidebar (dense column), bubble (compact widget body). */
|
|
6
|
+
variant: ChatPanelVariant;
|
|
7
|
+
/** Header row: title node + action nodes (session list, branch tree, expand, close). */
|
|
8
|
+
title?: React.ReactNode;
|
|
9
|
+
actions?: React.ReactNode;
|
|
10
|
+
/** Status strip under the header (connection warnings, context summary). */
|
|
11
|
+
banner?: React.ReactNode;
|
|
12
|
+
/** Usually `<ChatTranscript …/>`. */
|
|
13
|
+
transcript: React.ReactNode;
|
|
14
|
+
/** Usually `<ChatComposer …/>`. */
|
|
15
|
+
composer?: React.ReactNode;
|
|
16
|
+
/** Disclaimer row under the composer (health guidance, etc.). */
|
|
17
|
+
footer?: React.ReactNode;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The composed chat host — the one uniform surface assembly behind the
|
|
22
|
+
* family's three shapes (full page / sidepanel / bubble). Owns layout
|
|
23
|
+
* only; transcript, composer and every feature slot stay app-composed
|
|
24
|
+
* (ADR-006 tier 3, `RichTextEditor` precedent).
|
|
25
|
+
*/
|
|
26
|
+
declare const ChatPanel: React.ForwardRefExoticComponent<ChatPanelProps & React.RefAttributes<HTMLDivElement>>;
|
|
27
|
+
|
|
28
|
+
export { ChatPanel, type ChatPanelProps, type ChatPanelVariant };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-panel.js"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
interface ChatReasoningLabels {
|
|
5
|
+
title: string;
|
|
6
|
+
streaming: string;
|
|
7
|
+
}
|
|
8
|
+
interface ChatReasoningProps {
|
|
9
|
+
/** Accumulated reasoning text (family `delta kind="reasoning"`). */
|
|
10
|
+
text: string;
|
|
11
|
+
/** Live reasoning stream — spinner + streaming label while on. */
|
|
12
|
+
streaming?: boolean;
|
|
13
|
+
open?: boolean;
|
|
14
|
+
defaultOpen?: boolean;
|
|
15
|
+
onOpenChange?: (open: boolean) => void;
|
|
16
|
+
labels?: Partial<ChatReasoningLabels>;
|
|
17
|
+
icon?: LucideIcon;
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Collapsible thinking block for reasoning models (study's
|
|
22
|
+
* `ReasoningBubble`, family-standard): streams live while the model
|
|
23
|
+
* reasons, collapses to a summary row when done. Controlled-first.
|
|
24
|
+
*/
|
|
25
|
+
declare const ChatReasoning: React.ForwardRefExoticComponent<ChatReasoningProps & React.RefAttributes<HTMLDivElement>>;
|
|
26
|
+
|
|
27
|
+
export { ChatReasoning, type ChatReasoningLabels, type ChatReasoningProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-reasoning.js"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
interface ChatSessionView {
|
|
5
|
+
id: string;
|
|
6
|
+
title: string;
|
|
7
|
+
updatedAt?: string | number | Date;
|
|
8
|
+
meta?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
interface ChatSessionListLabels {
|
|
11
|
+
search: string;
|
|
12
|
+
searchPlaceholder: string;
|
|
13
|
+
newChat: string;
|
|
14
|
+
rename: string;
|
|
15
|
+
delete: string;
|
|
16
|
+
export: string;
|
|
17
|
+
today: string;
|
|
18
|
+
yesterday: string;
|
|
19
|
+
earlier: string;
|
|
20
|
+
empty: string;
|
|
21
|
+
noResults: string;
|
|
22
|
+
}
|
|
23
|
+
interface ChatSessionListIcons {
|
|
24
|
+
newChat: LucideIcon;
|
|
25
|
+
rename: LucideIcon;
|
|
26
|
+
delete: LucideIcon;
|
|
27
|
+
export: LucideIcon;
|
|
28
|
+
}
|
|
29
|
+
interface ChatSessionListProps {
|
|
30
|
+
sessions: ChatSessionView[];
|
|
31
|
+
activeId?: string | null;
|
|
32
|
+
onSelect: (id: string) => void;
|
|
33
|
+
onNew?: () => void;
|
|
34
|
+
onRename?: (id: string) => void;
|
|
35
|
+
onDelete?: (id: string) => void;
|
|
36
|
+
onExport?: (id: string) => void;
|
|
37
|
+
searchable?: boolean;
|
|
38
|
+
groupByDate?: boolean;
|
|
39
|
+
labels?: Partial<ChatSessionListLabels>;
|
|
40
|
+
icons?: Partial<ChatSessionListIcons>;
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The session list beside a full-page chat (study's `ChatSessionList` +
|
|
45
|
+
* health's history overlay, generalized): fuzzy search, date grouping,
|
|
46
|
+
* active marking, per-session actions (rename/delete/export) via the
|
|
47
|
+
* menu when handlers are provided. All actions stay app-side.
|
|
48
|
+
*/
|
|
49
|
+
declare const ChatSessionList: React.ForwardRefExoticComponent<ChatSessionListProps & React.RefAttributes<HTMLDivElement>>;
|
|
50
|
+
|
|
51
|
+
export { ChatSessionList, type ChatSessionListIcons, type ChatSessionListLabels, type ChatSessionListProps, type ChatSessionView };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-session-list.js"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
interface ChatToolCardLabels {
|
|
5
|
+
running: string;
|
|
6
|
+
done: string;
|
|
7
|
+
failed: string;
|
|
8
|
+
args: string;
|
|
9
|
+
result: string;
|
|
10
|
+
details: string;
|
|
11
|
+
}
|
|
12
|
+
interface ChatToolCardProps {
|
|
13
|
+
name: string;
|
|
14
|
+
/** Human title, e.g. "Searching the job catalog". */
|
|
15
|
+
title?: string;
|
|
16
|
+
status: 'running' | 'done' | 'failed';
|
|
17
|
+
/** Serialized arguments (JSON string or formatted text). */
|
|
18
|
+
args?: string;
|
|
19
|
+
/** Serialized result. */
|
|
20
|
+
result?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Custom result view (study's per-tool views, family plan 12 L2).
|
|
23
|
+
* Called with the result string (possibly empty when the tool has no
|
|
24
|
+
* serialized output); when absent the default `<pre>` pane renders.
|
|
25
|
+
*/
|
|
26
|
+
renderResult?: (result: string) => React.ReactNode;
|
|
27
|
+
durationMs?: number;
|
|
28
|
+
open?: boolean;
|
|
29
|
+
defaultOpen?: boolean;
|
|
30
|
+
onOpenChange?: (open: boolean) => void;
|
|
31
|
+
labels?: Partial<ChatToolCardLabels>;
|
|
32
|
+
icon?: LucideIcon;
|
|
33
|
+
className?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Inline tool-call observation card (study's `ToolCallCard` + health's tool
|
|
37
|
+
* chips, generalized): status, duration, expandable args/result. The
|
|
38
|
+
* inspector stays app-side (health opens its own modal from `onOpenChange`
|
|
39
|
+
* or wrapping markup).
|
|
40
|
+
*/
|
|
41
|
+
declare const ChatToolCard: React.ForwardRefExoticComponent<ChatToolCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
42
|
+
|
|
43
|
+
export { ChatToolCard, type ChatToolCardLabels, type ChatToolCardProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-tool-card.js"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { e as ChatMessageView } from './types-DZwzmyKE.js';
|
|
3
|
+
|
|
4
|
+
interface ChatTranscriptLabels {
|
|
5
|
+
log: string;
|
|
6
|
+
scrollToBottom: string;
|
|
7
|
+
empty: string;
|
|
8
|
+
replied: string;
|
|
9
|
+
}
|
|
10
|
+
interface ChatTranscriptProps {
|
|
11
|
+
items: ChatMessageView[];
|
|
12
|
+
/** Override the default `ChatMessage` + `MarkdownSurface` rendering. */
|
|
13
|
+
renderItem?: (message: ChatMessageView, index: number) => React.ReactNode;
|
|
14
|
+
/** Streaming tail — the live turn bubble (or any node). */
|
|
15
|
+
live?: React.ReactNode;
|
|
16
|
+
emptyState?: React.ReactNode;
|
|
17
|
+
/** Stick to bottom while the user hasn't scrolled away. Default true. */
|
|
18
|
+
autoScroll?: boolean;
|
|
19
|
+
/** Distance from the bottom that still counts as "at the bottom". Default 120 px. */
|
|
20
|
+
scrollThresholdPx?: number;
|
|
21
|
+
/** Virtualize long transcripts (dynamic row measurement). Default false. */
|
|
22
|
+
virtualized?: boolean;
|
|
23
|
+
labels?: Partial<ChatTranscriptLabels>;
|
|
24
|
+
className?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The conversation list: `role="log"` with polite turn-completion
|
|
28
|
+
* announcements, stick-to-bottom auto-scroll with a jump-to-latest pill,
|
|
29
|
+
* optional virtualization for thousand-message threads.
|
|
30
|
+
*/
|
|
31
|
+
declare const ChatTranscript: React.ForwardRefExoticComponent<ChatTranscriptProps & React.RefAttributes<HTMLDivElement>>;
|
|
32
|
+
|
|
33
|
+
export { ChatTranscript, type ChatTranscriptLabels, type ChatTranscriptProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-transcript.js"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface ChatTurnStatusLabels {
|
|
4
|
+
timer: string;
|
|
5
|
+
}
|
|
6
|
+
interface ChatTurnStatusProps {
|
|
7
|
+
/** Current turn phase, e.g. "searching the catalog". */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Turn start timestamp (ms). Presence enables the elapsed timer. */
|
|
10
|
+
startedAt?: number;
|
|
11
|
+
/** `row` = inline pre-text line; `card` = soft surface block. */
|
|
12
|
+
variant?: 'row' | 'card';
|
|
13
|
+
/** Elapsed-timer refresh interval. Default 100 ms (study-proven). */
|
|
14
|
+
tickMs?: number;
|
|
15
|
+
labels?: Partial<ChatTurnStatusLabels>;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Live pre-text turn status (study's `TurnTraceStatus` + `ThinkingDots`,
|
|
20
|
+
* generalized for family plan 12 L1): animated dots + phase label, with
|
|
21
|
+
* an optional elapsed timer. Presentational and controlled — the turn
|
|
22
|
+
* state itself lives in `useChatStream`; this only narrates it.
|
|
23
|
+
*/
|
|
24
|
+
declare const ChatTurnStatus: React.ForwardRefExoticComponent<ChatTurnStatusProps & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
+
|
|
26
|
+
export { ChatTurnStatus, type ChatTurnStatusLabels, type ChatTurnStatusProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chat-turn-status.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/copy-button/CopyButton.tsx"],"names":["CopyButton"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/copy-button/CopyButton.tsx"],"names":["CopyButton"],"mappings":"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","file":"chunk-3JJ2WCPN.js","sourcesContent":["import * as React from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface CopyButtonProps\n extends Omit<React.ComponentProps<'button'>, 'value' | 'children'> {\n value: string\n label?: string\n size?: number\n hideWhenEmpty?: boolean\n copiedDuration?: number\n onCopied?: () => void\n onCopyError?: (error: unknown) => void\n}\n\nfunction writeClipboard(value: string): Promise<void> {\n if (navigator?.clipboard?.writeText) {\n return navigator.clipboard.writeText(value)\n }\n return new Promise((resolve, reject) => {\n try {\n const textarea = document.createElement('textarea')\n textarea.value = value\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n resolve()\n } catch (error) {\n reject(error)\n }\n })\n}\n\nexport const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n function CopyButton(\n {\n value,\n label = 'Copy',\n size = 14,\n hideWhenEmpty = true,\n copiedDuration = 1500,\n onCopied,\n onCopyError,\n className,\n onClick,\n ...props\n },\n ref,\n ) {\n const [copied, setCopied] = React.useState(false)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n React.useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n [],\n )\n\n if (hideWhenEmpty && !value) return null\n\n const Icon = copied ? Check : Copy\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-as=\"copy-button\"\n data-copied={copied || undefined}\n aria-label={label}\n title={label}\n onClick={(event) => {\n onClick?.(event)\n if (event.defaultPrevented || !value) return\n event.preventDefault()\n event.stopPropagation()\n writeClipboard(value).then(\n () => {\n setCopied(true)\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => setCopied(false), copiedDuration)\n onCopied?.()\n },\n (error) => {\n onCopyError?.(error)\n },\n )\n }}\n className={cn(\n 'inline-flex cursor-pointer items-center justify-center rounded-[var(--as-radius-sm)] p-0.5 text-[var(--as-muted-fg)] transition-colors hover:text-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n copied && 'text-[var(--as-success)] hover:text-[var(--as-success)]',\n className,\n )}\n {...props}\n >\n <Icon style={{ width: size, height: size }} aria-hidden />\n </button>\n )\n },\n)\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-5IOLDMDY.js"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FormModal } from './chunk-62GIJMWT.js';
|
|
2
1
|
import { Textarea } from './chunk-C74WWM23.js';
|
|
2
|
+
import { FormModal } from './chunk-62GIJMWT.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { Sparkles } from 'lucide-react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -70,5 +70,5 @@ function AiMagicFill({
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export { AiMagicFill };
|
|
73
|
-
//# sourceMappingURL=chunk-
|
|
74
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-5QTHDB3D.js.map
|
|
74
|
+
//# sourceMappingURL=chunk-5QTHDB3D.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ai-magic-fill/AiMagicFill.tsx"],"names":[],"mappings":";;;;;;AAqBO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,KAAA;AAAA,EACA,KAAA,GAAQ,YAAA;AAAA,EACR,QAAA,GAAW,4BAAA;AAAA,EACX,WAAA;AAAA,EACA,WAAA,GAAc,kBAAA;AAAA,EACd,WAAA,GAAc,8BAAA;AAAA,EACd,WAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,eAAS,EAAE,CAAA;AAE7C,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,IAAA,IAAI,CAAC,WAAW,IAAA,EAAM;AACtB,IAAA,QAAA,CAAS,OAAO,CAAA;AAChB,IAAA,SAAA,CAAU,EAAE,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA,EAAa,QAAA;AAAA,MACb,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAa,WAAA,IAAe,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA;AAAA,MAC1C,WAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,cAAA,EAAgB,CAAC,MAAA,CAAO,IAAA,EAAK;AAAA,MAC7B,QAAA,EAAU,MAAA;AAAA,MACV,gBAAA,EAAkB,SAAA;AAAA,MAElB,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAQ,eAAA,EAAgB,WAAU,qBAAA,EACrC,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,sBAAA;AAAA,cACR,SAAA,EAAU,6EAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,sBAAA;AAAA,cACH,IAAA,EAAM,CAAA;AAAA,cACN,KAAA,EAAO,MAAA;AAAA,cACP,UAAU,CAAC,KAAA,KACT,SAAA,CAAU,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cAE9B,WAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,QACC,8BACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4MAAA,EACV,uBACH,CAAA,GACE,IAAA;AAAA,QACH,KAAA,uBACE,GAAA,EAAA,EAAE,IAAA,EAAK,SAAQ,SAAA,EAAU,+CAAA,EACvB,iBACH,CAAA,GACE;AAAA,OAAA,EACN;AAAA;AAAA,GACF;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/ai-magic-fill/AiMagicFill.tsx"],"names":[],"mappings":";;;;;;AAqBO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,KAAA;AAAA,EACA,KAAA,GAAQ,YAAA;AAAA,EACR,QAAA,GAAW,4BAAA;AAAA,EACX,WAAA;AAAA,EACA,WAAA,GAAc,kBAAA;AAAA,EACd,WAAA,GAAc,8BAAA;AAAA,EACd,WAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAU,eAAS,EAAE,CAAA;AAE7C,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,IAAA,IAAI,CAAC,WAAW,IAAA,EAAM;AACtB,IAAA,QAAA,CAAS,OAAO,CAAA;AAChB,IAAA,SAAA,CAAU,EAAE,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA,EAAa,QAAA;AAAA,MACb,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAa,WAAA,IAAe,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA;AAAA,MAC1C,WAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,cAAA,EAAgB,CAAC,MAAA,CAAO,IAAA,EAAK;AAAA,MAC7B,QAAA,EAAU,MAAA;AAAA,MACV,gBAAA,EAAkB,SAAA;AAAA,MAElB,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAQ,eAAA,EAAgB,WAAU,qBAAA,EACrC,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,sBAAA;AAAA,cACR,SAAA,EAAU,6EAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,sBAAA;AAAA,cACH,IAAA,EAAM,CAAA;AAAA,cACN,KAAA,EAAO,MAAA;AAAA,cACP,UAAU,CAAC,KAAA,KACT,SAAA,CAAU,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cAE9B,WAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,QACC,8BACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4MAAA,EACV,uBACH,CAAA,GACE,IAAA;AAAA,QACH,KAAA,uBACE,GAAA,EAAA,EAAE,IAAA,EAAK,SAAQ,SAAA,EAAU,+CAAA,EACvB,iBACH,CAAA,GACE;AAAA,OAAA,EACN;AAAA;AAAA,GACF;AAEJ","file":"chunk-5QTHDB3D.js","sourcesContent":["import * as React from 'react'\nimport { Sparkles } from 'lucide-react'\nimport { FormModal } from '../form-modal/FormModal'\nimport { Textarea } from '../textarea/Textarea'\n\nexport interface AiMagicFillProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n onSubmit: (prompt: string) => void\n busy?: boolean\n error?: string | null\n title?: string\n subtitle?: string\n description?: string\n promptLabel?: string\n placeholder?: string\n submitLabel?: string\n cancelLabel?: string\n className?: string\n}\n\nexport function AiMagicFill({\n open,\n onOpenChange,\n onSubmit,\n busy = false,\n error,\n title = 'Magic Fill',\n subtitle = 'AI-powered data extraction',\n description,\n promptLabel = 'Describe details',\n placeholder = 'Describe the data here…',\n submitLabel,\n cancelLabel = 'Cancel',\n className,\n}: AiMagicFillProps) {\n const [prompt, setPrompt] = React.useState('')\n\n const submit = () => {\n const trimmed = prompt.trim()\n if (!trimmed || busy) return\n onSubmit(trimmed)\n setPrompt('')\n }\n\n return (\n <FormModal\n open={open}\n onOpenChange={onOpenChange}\n title={title}\n description={subtitle}\n icon={Sparkles}\n submitLabel={submitLabel ?? `Apply ${title}`}\n cancelLabel={cancelLabel}\n submitting={busy}\n submitDisabled={!prompt.trim()}\n onSubmit={submit}\n contentClassName={className}\n >\n <div data-as=\"ai-magic-fill\" className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n <label\n htmlFor=\"ai-magic-fill-prompt\"\n className=\"text-[11px] font-bold uppercase tracking-[0.18em] text-[var(--as-muted-fg)]\"\n >\n {promptLabel}\n </label>\n <Textarea\n id=\"ai-magic-fill-prompt\"\n rows={5}\n value={prompt}\n onChange={(event: React.ChangeEvent<HTMLTextAreaElement>) =>\n setPrompt(event.target.value)\n }\n placeholder={placeholder}\n className=\"resize-none leading-relaxed\"\n />\n </div>\n {description ? (\n <p className=\"rounded-[var(--as-radius)] border border-[color-mix(in_srgb,var(--as-ai)_25%,transparent)] bg-[color-mix(in_srgb,var(--as-ai)_8%,transparent)] p-3 text-xs font-medium leading-relaxed text-[var(--as-fg)]\">\n {description}\n </p>\n ) : null}\n {error ? (\n <p role=\"alert\" className=\"text-xs font-semibold text-[var(--as-danger)]\">\n {error}\n </p>\n ) : null}\n </div>\n </FormModal>\n )\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-6E6RRLKU.js"}
|