@talk2view/sdk 0.1.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.
Files changed (87) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +594 -0
  3. package/dist/auth.d.ts +39 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +102 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +27 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +195 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/errors.d.ts +21 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +38 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/index.d.ts +80 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +115 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/react/ChatInput.d.ts +13 -0
  20. package/dist/react/ChatInput.d.ts.map +1 -0
  21. package/dist/react/ChatInput.js +163 -0
  22. package/dist/react/ChatInput.js.map +1 -0
  23. package/dist/react/ChatMessage.d.ts +10 -0
  24. package/dist/react/ChatMessage.d.ts.map +1 -0
  25. package/dist/react/ChatMessage.js +53 -0
  26. package/dist/react/ChatMessage.js.map +1 -0
  27. package/dist/react/ChatPanel.d.ts +17 -0
  28. package/dist/react/ChatPanel.d.ts.map +1 -0
  29. package/dist/react/ChatPanel.js +385 -0
  30. package/dist/react/ChatPanel.js.map +1 -0
  31. package/dist/react/LoginModal.d.ts +10 -0
  32. package/dist/react/LoginModal.d.ts.map +1 -0
  33. package/dist/react/LoginModal.js +135 -0
  34. package/dist/react/LoginModal.js.map +1 -0
  35. package/dist/react/SettingsView.d.ts +9 -0
  36. package/dist/react/SettingsView.d.ts.map +1 -0
  37. package/dist/react/SettingsView.js +190 -0
  38. package/dist/react/SettingsView.js.map +1 -0
  39. package/dist/react/T2VProvider.d.ts +25 -0
  40. package/dist/react/T2VProvider.d.ts.map +1 -0
  41. package/dist/react/T2VProvider.js +38 -0
  42. package/dist/react/T2VProvider.js.map +1 -0
  43. package/dist/react/index.d.ts +38 -0
  44. package/dist/react/index.d.ts.map +1 -0
  45. package/dist/react/index.js +28 -0
  46. package/dist/react/index.js.map +1 -0
  47. package/dist/react/theme.d.ts +32 -0
  48. package/dist/react/theme.d.ts.map +1 -0
  49. package/dist/react/theme.js +131 -0
  50. package/dist/react/theme.js.map +1 -0
  51. package/dist/react/useT2VAuth.d.ts +16 -0
  52. package/dist/react/useT2VAuth.d.ts.map +1 -0
  53. package/dist/react/useT2VAuth.js +52 -0
  54. package/dist/react/useT2VAuth.js.map +1 -0
  55. package/dist/react/useT2VChat.d.ts +28 -0
  56. package/dist/react/useT2VChat.d.ts.map +1 -0
  57. package/dist/react/useT2VChat.js +103 -0
  58. package/dist/react/useT2VChat.js.map +1 -0
  59. package/dist/react/useT2VTools.d.ts +11 -0
  60. package/dist/react/useT2VTools.d.ts.map +1 -0
  61. package/dist/react/useT2VTools.js +29 -0
  62. package/dist/react/useT2VTools.js.map +1 -0
  63. package/dist/react/useUserPreferences.d.ts +13 -0
  64. package/dist/react/useUserPreferences.d.ts.map +1 -0
  65. package/dist/react/useUserPreferences.js +40 -0
  66. package/dist/react/useUserPreferences.js.map +1 -0
  67. package/dist/sessions.d.ts +34 -0
  68. package/dist/sessions.d.ts.map +1 -0
  69. package/dist/sessions.js +95 -0
  70. package/dist/sessions.js.map +1 -0
  71. package/dist/storage.d.ts +16 -0
  72. package/dist/storage.d.ts.map +1 -0
  73. package/dist/storage.js +84 -0
  74. package/dist/storage.js.map +1 -0
  75. package/dist/streaming.d.ts +9 -0
  76. package/dist/streaming.d.ts.map +1 -0
  77. package/dist/streaming.js +45 -0
  78. package/dist/streaming.js.map +1 -0
  79. package/dist/tools.d.ts +40 -0
  80. package/dist/tools.d.ts.map +1 -0
  81. package/dist/tools.js +83 -0
  82. package/dist/tools.js.map +1 -0
  83. package/dist/types.d.ts +153 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +3 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +74 -0
@@ -0,0 +1,385 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ChatPanel — self-contained, embeddable chat panel with tool support.
4
+ *
5
+ * Drop-in chat UI that handles authentication, tool registration,
6
+ * streaming, and the full interrupt/resume cycle.
7
+ */
8
+ import DOMPurify from 'dompurify';
9
+ import { marked } from 'marked';
10
+ import { useCallback, useEffect, useRef, useState } from 'react';
11
+ import { ChatInput } from './ChatInput';
12
+ /** Parse inline markdown (bold, italic, code, links) and sanitize. */
13
+ function renderInline(text) {
14
+ const raw = marked.parseInline(text);
15
+ return DOMPurify.sanitize(typeof raw === 'string' ? raw : '');
16
+ }
17
+ /** Parse block markdown and sanitize. */
18
+ function renderBlock(text) {
19
+ const raw = marked.parse(text);
20
+ return DOMPurify.sanitize(typeof raw === 'string' ? raw : '');
21
+ }
22
+ import { ChatMessage } from './ChatMessage';
23
+ import { LoginModal } from './LoginModal';
24
+ import { SettingsView } from './SettingsView';
25
+ import { useT2V } from './T2VProvider';
26
+ import { useT2VAuth } from './useT2VAuth';
27
+ import { useT2VChat } from './useT2VChat';
28
+ import { useT2VTools } from './useT2VTools';
29
+ import { useUserPreferences } from './useUserPreferences';
30
+ import { T2V_COLORS, T2V_FONTS, T2VLogo, injectT2VFonts, injectT2VStyles } from './theme';
31
+ const FONT_SCALE_MAP = { small: 0.9, medium: 1.0, large: 1.1 };
32
+ export function ChatPanel({ tools = [], systemPrompt, signupUrl, className = '', style, }) {
33
+ const { t2v } = useT2V();
34
+ const { isAuthenticated, user, logout } = useT2VAuth();
35
+ const { registerTools, registeredTools, isRegistered } = useT2VTools();
36
+ const { messages, isLoading, error, agentStatus, todos, sendMessage, clearMessages, clearError } = useT2VChat({
37
+ systemPrompt,
38
+ });
39
+ const { preferences } = useUserPreferences();
40
+ const messagesEndRef = useRef(null);
41
+ const [currentView, setCurrentView] = useState('chat');
42
+ const [clearHover, setClearHover] = useState(false);
43
+ const [profileOpen, setProfileOpen] = useState(false);
44
+ const [toolsOpen, setToolsOpen] = useState(false);
45
+ const toolsRef = useRef(null);
46
+ const [elapsed, setElapsed] = useState(0);
47
+ const [todosExpanded, setTodosExpanded] = useState(true);
48
+ const profileRef = useRef(null);
49
+ const fontScale = FONT_SCALE_MAP[preferences.fontSize || 'medium'];
50
+ // Restore saved model preference on mount
51
+ useEffect(() => {
52
+ if (preferences.model) {
53
+ t2v.config.model = preferences.model;
54
+ }
55
+ }, [t2v, preferences.model]);
56
+ const handleModelChange = useCallback((model) => {
57
+ t2v.config.model = model;
58
+ t2v.clearSession();
59
+ }, [t2v]);
60
+ // Thinking timer
61
+ useEffect(() => {
62
+ if (!isLoading) {
63
+ setElapsed(0);
64
+ return;
65
+ }
66
+ setElapsed(0);
67
+ const interval = setInterval(() => setElapsed((s) => s + 1), 1000);
68
+ return () => clearInterval(interval);
69
+ }, [isLoading]);
70
+ // Inject fonts and keyframes once
71
+ useEffect(() => {
72
+ injectT2VFonts();
73
+ injectT2VStyles();
74
+ }, []);
75
+ // Register tools when authenticated
76
+ useEffect(() => {
77
+ if (isAuthenticated && tools.length > 0 && !isRegistered) {
78
+ registerTools(tools).catch(console.error);
79
+ }
80
+ }, [isAuthenticated, tools, isRegistered, registerTools]);
81
+ // Close profile menu on outside click
82
+ useEffect(() => {
83
+ if (!profileOpen)
84
+ return;
85
+ const handleClick = (e) => {
86
+ if (profileRef.current && !profileRef.current.contains(e.target)) {
87
+ setProfileOpen(false);
88
+ }
89
+ };
90
+ document.addEventListener('mousedown', handleClick);
91
+ return () => document.removeEventListener('mousedown', handleClick);
92
+ }, [profileOpen]);
93
+ // Close tools popover on outside click
94
+ useEffect(() => {
95
+ if (!toolsOpen)
96
+ return;
97
+ const handleClick = (e) => {
98
+ if (toolsRef.current && !toolsRef.current.contains(e.target)) {
99
+ setToolsOpen(false);
100
+ }
101
+ };
102
+ document.addEventListener('mousedown', handleClick);
103
+ return () => document.removeEventListener('mousedown', handleClick);
104
+ }, [toolsOpen]);
105
+ // Auto-scroll to bottom
106
+ useEffect(() => {
107
+ messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
108
+ }, [messages]);
109
+ const handleSend = useCallback((content) => {
110
+ sendMessage(content).catch(console.error);
111
+ }, [sendMessage]);
112
+ const panelShell = {
113
+ display: 'flex',
114
+ flexDirection: 'column',
115
+ height: fontScale === 1 ? '100%' : `${100 / fontScale}%`,
116
+ width: fontScale === 1 ? '100%' : `${100 / fontScale}%`,
117
+ backgroundColor: T2V_COLORS.light,
118
+ borderRadius: '12px',
119
+ boxShadow: '0 4px 24px rgba(1, 22, 30, 0.10)',
120
+ overflow: 'hidden',
121
+ fontFamily: T2V_FONTS.body,
122
+ transform: fontScale === 1 ? undefined : `scale(${fontScale})`,
123
+ transformOrigin: fontScale === 1 ? undefined : 'top left',
124
+ ...style,
125
+ };
126
+ if (!isAuthenticated) {
127
+ return (_jsx("div", { className: `t2v-chat-panel ${className}`, style: panelShell, children: _jsx(LoginModal, { signupUrl: signupUrl }) }));
128
+ }
129
+ if (currentView === 'settings') {
130
+ return (_jsx("div", { className: `t2v-chat-panel ${className}`, style: panelShell, children: _jsx(SettingsView, { onBack: () => setCurrentView('chat'), onModelChange: handleModelChange }) }));
131
+ }
132
+ return (_jsxs("div", { className: `t2v-chat-panel ${className}`, style: panelShell, children: [_jsxs("div", { style: {
133
+ display: 'flex',
134
+ alignItems: 'center',
135
+ justifyContent: 'space-between',
136
+ padding: '12px 16px',
137
+ backgroundColor: T2V_COLORS.dark,
138
+ color: T2V_COLORS.light,
139
+ }, children: [_jsx(T2VLogo, { size: 22, variant: "horizontalDark" }), _jsxs("div", { style: { display: 'flex', gap: '10px', alignItems: 'center' }, children: [_jsx("button", { onClick: clearMessages, onMouseEnter: () => setClearHover(true), onMouseLeave: () => setClearHover(false), style: {
140
+ padding: '4px 10px',
141
+ borderRadius: '6px',
142
+ border: `1px solid ${clearHover ? T2V_COLORS.turquoise : 'rgba(248, 250, 252, 0.2)'}`,
143
+ backgroundColor: clearHover ? 'rgba(64, 212, 182, 0.1)' : 'transparent',
144
+ fontSize: '12px',
145
+ fontFamily: T2V_FONTS.heading,
146
+ cursor: 'pointer',
147
+ color: T2V_COLORS.light,
148
+ transition: 'all 0.15s ease',
149
+ }, children: "Clear" }), _jsxs("div", { ref: profileRef, style: { position: 'relative' }, children: [_jsx("button", { onClick: () => setProfileOpen((v) => !v), style: {
150
+ width: '30px',
151
+ height: '30px',
152
+ borderRadius: '50%',
153
+ border: `1.5px solid ${profileOpen ? T2V_COLORS.turquoise : 'rgba(248, 250, 252, 0.3)'}`,
154
+ backgroundColor: profileOpen ? 'rgba(64, 212, 182, 0.15)' : 'rgba(248, 250, 252, 0.1)',
155
+ cursor: 'pointer',
156
+ display: 'flex',
157
+ alignItems: 'center',
158
+ justifyContent: 'center',
159
+ padding: 0,
160
+ transition: 'all 0.15s ease',
161
+ }, title: user?.email ?? 'Profile', children: _jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: T2V_COLORS.light, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }), _jsx("circle", { cx: "12", cy: "7", r: "4" })] }) }), profileOpen && (_jsxs("div", { style: {
162
+ position: 'absolute',
163
+ top: '100%',
164
+ right: 0,
165
+ marginTop: '6px',
166
+ backgroundColor: T2V_COLORS.light,
167
+ borderRadius: '8px',
168
+ boxShadow: '0 4px 16px rgba(1, 22, 30, 0.15)',
169
+ minWidth: '180px',
170
+ zIndex: 100,
171
+ overflow: 'hidden',
172
+ border: `1px solid ${T2V_COLORS.lightGray}`,
173
+ }, children: [user?.email && (_jsx("div", { style: {
174
+ padding: '10px 14px',
175
+ fontSize: '12px',
176
+ fontFamily: T2V_FONTS.body,
177
+ color: T2V_COLORS.midGray,
178
+ borderBottom: `1px solid ${T2V_COLORS.lightGray}`,
179
+ overflow: 'hidden',
180
+ textOverflow: 'ellipsis',
181
+ whiteSpace: 'nowrap',
182
+ }, children: user.email })), _jsxs("button", { onClick: () => { setProfileOpen(false); setCurrentView('settings'); }, style: {
183
+ display: 'flex',
184
+ alignItems: 'center',
185
+ gap: '8px',
186
+ width: '100%',
187
+ padding: '10px 14px',
188
+ border: 'none',
189
+ backgroundColor: 'transparent',
190
+ cursor: 'pointer',
191
+ fontSize: '13px',
192
+ fontFamily: T2V_FONTS.heading,
193
+ color: T2V_COLORS.dark,
194
+ textAlign: 'left',
195
+ }, onMouseEnter: (e) => { e.currentTarget.style.backgroundColor = T2V_COLORS.lightGray; }, onMouseLeave: (e) => { e.currentTarget.style.backgroundColor = 'transparent'; }, children: [_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: T2V_COLORS.midGray, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "3" }), _jsx("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" })] }), "Settings"] }), _jsxs("button", { onClick: () => {
196
+ setProfileOpen(false);
197
+ logout().catch(console.error);
198
+ }, style: {
199
+ display: 'flex',
200
+ alignItems: 'center',
201
+ gap: '8px',
202
+ width: '100%',
203
+ padding: '10px 14px',
204
+ border: 'none',
205
+ backgroundColor: 'transparent',
206
+ cursor: 'pointer',
207
+ fontSize: '13px',
208
+ fontFamily: T2V_FONTS.heading,
209
+ color: T2V_COLORS.errorRed,
210
+ textAlign: 'left',
211
+ borderTop: `1px solid ${T2V_COLORS.lightGray}`,
212
+ }, onMouseEnter: (e) => { e.currentTarget.style.backgroundColor = T2V_COLORS.errorBg; }, onMouseLeave: (e) => { e.currentTarget.style.backgroundColor = 'transparent'; }, children: [_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: T2V_COLORS.errorRed, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }), _jsx("polyline", { points: "16 17 21 12 16 7" }), _jsx("line", { x1: "21", y1: "12", x2: "9", y2: "12" })] }), "Sign out"] })] }))] })] })] }), _jsxs("div", { style: {
213
+ flex: 1,
214
+ overflowY: 'auto',
215
+ padding: '16px',
216
+ }, children: [messages.length === 0 && (_jsxs("div", { style: {
217
+ display: 'flex',
218
+ flexDirection: 'column',
219
+ alignItems: 'center',
220
+ justifyContent: 'center',
221
+ height: '100%',
222
+ gap: '12px',
223
+ }, children: [_jsx(T2VLogo, { size: 40 }), _jsx("span", { style: {
224
+ color: T2V_COLORS.midGray,
225
+ fontSize: '15px',
226
+ fontFamily: T2V_FONTS.heading,
227
+ fontWeight: 500,
228
+ }, children: "How can I help you?" })] })), messages.map((msg) => (_jsx(ChatMessage, { message: msg }, msg.id))), isLoading && messages[messages.length - 1]?.content === '' && (_jsxs("div", { style: {
229
+ display: 'flex',
230
+ alignItems: 'center',
231
+ gap: '4px',
232
+ padding: '10px 14px',
233
+ color: T2V_COLORS.midGray,
234
+ fontSize: '13px',
235
+ fontFamily: T2V_FONTS.heading,
236
+ }, children: [_jsx("span", { children: agentStatus?.message ?? 'Thinking' }), [0, 1, 2].map((i) => (_jsx("span", { style: {
237
+ display: 'inline-block',
238
+ width: '4px',
239
+ height: '4px',
240
+ borderRadius: '50%',
241
+ backgroundColor: T2V_COLORS.turquoise,
242
+ animation: `t2v-dot-bounce 1.2s ease-in-out ${i * 0.15}s infinite`,
243
+ } }, i)))] })), _jsx("div", { ref: messagesEndRef })] }), todos && (_jsxs("div", { style: {
244
+ borderTop: `1px solid ${T2V_COLORS.lightGray}`,
245
+ backgroundColor: 'rgba(64, 212, 182, 0.06)',
246
+ }, children: [_jsxs("div", { onClick: () => setTodosExpanded((v) => !v), style: {
247
+ display: 'flex',
248
+ alignItems: 'center',
249
+ justifyContent: 'space-between',
250
+ padding: '8px 16px',
251
+ cursor: 'pointer',
252
+ userSelect: 'none',
253
+ }, children: [_jsx("span", { style: {
254
+ fontSize: '12px',
255
+ fontFamily: T2V_FONTS.heading,
256
+ fontWeight: 600,
257
+ color: T2V_COLORS.turquoise,
258
+ }, children: "Agent Plan" }), _jsx("span", { style: {
259
+ fontSize: '11px',
260
+ color: T2V_COLORS.midGray,
261
+ transform: todosExpanded ? 'rotate(180deg)' : 'rotate(0deg)',
262
+ transition: 'transform 0.15s ease',
263
+ }, children: "\u25BC" })] }), todosExpanded && (_jsx("div", { style: { padding: '0 16px 10px' }, children: todos.split('\n').map((line, i) => {
264
+ const unchecked = line.match(/^-\s*\[\s*\]\s*(.*)/);
265
+ const checked = line.match(/^-\s*\[x\]\s*(.*)/i);
266
+ if (checked) {
267
+ return (_jsxs("div", { style: {
268
+ display: 'flex',
269
+ alignItems: 'flex-start',
270
+ gap: '8px',
271
+ padding: '3px 0',
272
+ fontSize: '13px',
273
+ fontFamily: T2V_FONTS.body,
274
+ color: T2V_COLORS.midGray,
275
+ textDecoration: 'line-through',
276
+ }, children: [_jsx("span", { style: { color: T2V_COLORS.turquoise, flexShrink: 0 }, children: "\u2713" }), _jsx("span", { dangerouslySetInnerHTML: { __html: renderInline(checked[1] ?? '') } })] }, i));
277
+ }
278
+ if (unchecked) {
279
+ return (_jsxs("div", { style: {
280
+ display: 'flex',
281
+ alignItems: 'flex-start',
282
+ gap: '8px',
283
+ padding: '3px 0',
284
+ fontSize: '13px',
285
+ fontFamily: T2V_FONTS.body,
286
+ color: T2V_COLORS.dark,
287
+ }, children: [_jsx("span", { style: {
288
+ display: 'inline-block',
289
+ width: '14px',
290
+ height: '14px',
291
+ borderRadius: '3px',
292
+ border: `1.5px solid ${T2V_COLORS.turquoise}`,
293
+ flexShrink: 0,
294
+ marginTop: '2px',
295
+ } }), _jsx("span", { dangerouslySetInnerHTML: { __html: renderInline(unchecked[1] ?? '') } })] }, i));
296
+ }
297
+ if (line.trim()) {
298
+ return (_jsx("div", { className: "t2v-markdown", style: {
299
+ fontSize: '13px',
300
+ fontFamily: T2V_FONTS.body,
301
+ color: T2V_COLORS.dark,
302
+ padding: '2px 0',
303
+ }, dangerouslySetInnerHTML: { __html: renderInline(line) } }, i));
304
+ }
305
+ return null;
306
+ }) }))] })), error && (_jsxs("div", { onClick: clearError, style: {
307
+ display: 'flex',
308
+ alignItems: 'center',
309
+ gap: '8px',
310
+ padding: '10px 16px',
311
+ backgroundColor: T2V_COLORS.errorBg,
312
+ color: T2V_COLORS.errorRed,
313
+ fontSize: '13px',
314
+ fontFamily: T2V_FONTS.heading,
315
+ cursor: 'pointer',
316
+ borderLeft: `3px solid ${T2V_COLORS.errorRed}`,
317
+ }, children: [_jsx("span", { style: { fontWeight: 600 }, children: "Error" }), _jsx("span", { children: error })] })), (isLoading || registeredTools.length > 0) && (_jsxs("div", { style: {
318
+ display: 'flex',
319
+ alignItems: 'center',
320
+ justifyContent: 'space-between',
321
+ padding: '6px 16px',
322
+ borderTop: `1px solid ${T2V_COLORS.lightGray}`,
323
+ }, children: [_jsxs("span", { style: {
324
+ display: 'flex',
325
+ alignItems: 'center',
326
+ gap: '6px',
327
+ fontSize: '11px',
328
+ fontFamily: T2V_FONTS.heading,
329
+ color: T2V_COLORS.midGray,
330
+ visibility: isLoading ? 'visible' : 'hidden',
331
+ }, children: [_jsx("span", { style: {
332
+ display: 'inline-block',
333
+ width: '6px',
334
+ height: '6px',
335
+ borderRadius: '50%',
336
+ backgroundColor: T2V_COLORS.turquoise,
337
+ animation: 't2v-blink 1.2s ease-in-out infinite',
338
+ } }), agentStatus?.message ?? 'Thinking', " for ", elapsed < 60 ? `${elapsed}s` : `${Math.floor(elapsed / 60)}m ${elapsed % 60}s`] }), registeredTools.length > 0 && (_jsxs("div", { ref: toolsRef, style: { position: 'relative' }, children: [_jsxs("button", { onClick: () => setToolsOpen((v) => !v), style: {
339
+ fontSize: '11px',
340
+ fontFamily: T2V_FONTS.heading,
341
+ color: T2V_COLORS.turquoise,
342
+ backgroundColor: toolsOpen ? 'rgba(64, 212, 182, 0.2)' : 'rgba(64, 212, 182, 0.12)',
343
+ padding: '2px 8px',
344
+ borderRadius: '10px',
345
+ border: 'none',
346
+ cursor: 'pointer',
347
+ transition: 'background-color 0.15s ease',
348
+ }, children: [registeredTools.length, " tools"] }), toolsOpen && (_jsxs("div", { style: {
349
+ position: 'absolute',
350
+ bottom: '100%',
351
+ right: 0,
352
+ marginBottom: '6px',
353
+ backgroundColor: T2V_COLORS.light,
354
+ borderRadius: '8px',
355
+ boxShadow: '0 4px 16px rgba(1, 22, 30, 0.15)',
356
+ border: `1px solid ${T2V_COLORS.lightGray}`,
357
+ minWidth: '220px',
358
+ maxWidth: '300px',
359
+ maxHeight: '240px',
360
+ overflowY: 'auto',
361
+ zIndex: 100,
362
+ }, children: [_jsx("div", { style: {
363
+ padding: '8px 12px',
364
+ fontSize: '11px',
365
+ fontFamily: T2V_FONTS.heading,
366
+ fontWeight: 600,
367
+ color: T2V_COLORS.turquoise,
368
+ borderBottom: `1px solid ${T2V_COLORS.lightGray}`,
369
+ }, children: "Registered Tools" }), tools.filter((t) => registeredTools.includes(t.name)).map((tool) => (_jsxs("div", { style: {
370
+ padding: '8px 12px',
371
+ borderBottom: `1px solid ${T2V_COLORS.lightGray}`,
372
+ }, children: [_jsx("div", { style: {
373
+ fontSize: '12px',
374
+ fontFamily: T2V_FONTS.heading,
375
+ fontWeight: 600,
376
+ color: T2V_COLORS.dark,
377
+ }, children: tool.name }), _jsx("div", { style: {
378
+ fontSize: '11px',
379
+ fontFamily: T2V_FONTS.body,
380
+ color: T2V_COLORS.midGray,
381
+ marginTop: '2px',
382
+ lineHeight: '1.4',
383
+ }, children: tool.description })] }, tool.name)))] }))] }))] })), _jsx(ChatInput, { onSend: handleSend, disabled: isLoading })] }));
384
+ }
385
+ //# sourceMappingURL=ChatPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatPanel.js","sourceRoot":"","sources":["../../src/react/ChatPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * LoginModal — pre-built login/signup form.
3
+ */
4
+ export interface LoginModalProps {
5
+ signupUrl?: string;
6
+ className?: string;
7
+ onSuccess?: () => void;
8
+ }
9
+ export declare function LoginModal({ signupUrl, className, onSuccess, }: LoginModalProps): import("react/jsx-runtime").JSX.Element | null;
10
+ //# sourceMappingURL=LoginModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginModal.d.ts","sourceRoot":"","sources":["../../src/react/LoginModal.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,EACzB,SAA+C,EAC/C,SAAc,EACd,SAAS,GACV,EAAE,eAAe,kDAyOjB"}
@@ -0,0 +1,135 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * LoginModal — pre-built login/signup form.
4
+ */
5
+ import React, { useCallback, useState } from 'react';
6
+ import { useT2VAuth } from './useT2VAuth';
7
+ import { T2V_COLORS, T2V_FONTS, T2VLogo, injectT2VFonts, injectT2VStyles } from './theme';
8
+ export function LoginModal({ signupUrl = 'https://talk2view.com/auth?signup', className = '', onSuccess, }) {
9
+ const { login, isLoading, error, clearError, isAuthenticated } = useT2VAuth();
10
+ const [email, setEmail] = useState('');
11
+ const [password, setPassword] = useState('');
12
+ const [emailFocused, setEmailFocused] = useState(false);
13
+ const [passwordFocused, setPasswordFocused] = useState(false);
14
+ const [btnHover, setBtnHover] = useState(false);
15
+ const [linkHover, setLinkHover] = useState(false);
16
+ // Inject fonts and keyframes (idempotent)
17
+ React.useEffect(() => {
18
+ injectT2VFonts();
19
+ injectT2VStyles();
20
+ }, []);
21
+ const handleSubmit = useCallback(async (e) => {
22
+ e.preventDefault();
23
+ try {
24
+ await login(email, password);
25
+ onSuccess?.();
26
+ }
27
+ catch {
28
+ // Error is set by useT2VAuth
29
+ }
30
+ }, [email, password, login, onSuccess]);
31
+ if (isAuthenticated)
32
+ return null;
33
+ const inputStyle = (focused) => ({
34
+ width: '100%',
35
+ padding: '10px 12px',
36
+ borderRadius: '8px',
37
+ border: `1.5px solid ${focused ? T2V_COLORS.turquoise : T2V_COLORS.lightGray}`,
38
+ fontSize: '14px',
39
+ fontFamily: T2V_FONTS.body,
40
+ outline: 'none',
41
+ boxSizing: 'border-box',
42
+ color: T2V_COLORS.dark,
43
+ backgroundColor: '#ffffff',
44
+ boxShadow: focused ? '0 0 0 3px rgba(64, 212, 182, 0.15)' : 'none',
45
+ transition: 'border-color 0.15s ease, box-shadow 0.15s ease',
46
+ });
47
+ return (_jsxs("div", { className: `t2v-login-modal ${className}`, style: {
48
+ display: 'flex',
49
+ flexDirection: 'column',
50
+ alignItems: 'center',
51
+ justifyContent: 'center',
52
+ flex: 1,
53
+ minHeight: 0,
54
+ padding: '40px 32px',
55
+ maxWidth: '360px',
56
+ margin: '0 auto',
57
+ fontFamily: T2V_FONTS.body,
58
+ }, children: [_jsx(T2VLogo, { size: 64 }), _jsx("h2", { style: {
59
+ fontSize: '22px',
60
+ fontWeight: 600,
61
+ fontFamily: T2V_FONTS.heading,
62
+ marginTop: '16px',
63
+ marginBottom: '4px',
64
+ color: T2V_COLORS.dark,
65
+ }, children: "Welcome back" }), _jsx("p", { style: {
66
+ fontSize: '14px',
67
+ color: T2V_COLORS.midGray,
68
+ fontFamily: T2V_FONTS.heading,
69
+ marginTop: '0',
70
+ marginBottom: '28px',
71
+ }, children: "Sign in to Talk2View" }), _jsxs("form", { onSubmit: handleSubmit, style: { width: '100%' }, children: [_jsxs("div", { style: { marginBottom: '16px' }, children: [_jsx("label", { htmlFor: "t2v-email", style: {
72
+ display: 'block',
73
+ fontSize: '13px',
74
+ fontWeight: 500,
75
+ fontFamily: T2V_FONTS.heading,
76
+ marginBottom: '6px',
77
+ color: T2V_COLORS.dark,
78
+ }, children: "Email" }), _jsx("input", { id: "t2v-email", type: "email", value: email, onChange: (e) => { setEmail(e.target.value); clearError(); }, onFocus: () => setEmailFocused(true), onBlur: () => setEmailFocused(false), placeholder: "you@example.com", required: true, disabled: isLoading, style: inputStyle(emailFocused) })] }), _jsxs("div", { style: { marginBottom: '24px' }, children: [_jsx("label", { htmlFor: "t2v-password", style: {
79
+ display: 'block',
80
+ fontSize: '13px',
81
+ fontWeight: 500,
82
+ fontFamily: T2V_FONTS.heading,
83
+ marginBottom: '6px',
84
+ color: T2V_COLORS.dark,
85
+ }, children: "Password" }), _jsx("input", { id: "t2v-password", type: "password", value: password, onChange: (e) => { setPassword(e.target.value); clearError(); }, onFocus: () => setPasswordFocused(true), onBlur: () => setPasswordFocused(false), placeholder: "Password", required: true, disabled: isLoading, style: inputStyle(passwordFocused) })] }), error && (_jsx("div", { style: {
86
+ padding: '10px 12px',
87
+ borderRadius: '8px',
88
+ backgroundColor: T2V_COLORS.errorBg,
89
+ color: T2V_COLORS.errorRed,
90
+ fontSize: '13px',
91
+ fontFamily: T2V_FONTS.heading,
92
+ marginBottom: '16px',
93
+ borderLeft: `3px solid ${T2V_COLORS.errorRed}`,
94
+ }, children: error })), _jsxs("button", { type: "submit", disabled: isLoading, onMouseEnter: () => setBtnHover(true), onMouseLeave: () => setBtnHover(false), style: {
95
+ width: '100%',
96
+ padding: '11px',
97
+ borderRadius: '8px',
98
+ border: 'none',
99
+ backgroundColor: isLoading
100
+ ? T2V_COLORS.lightGray
101
+ : btnHover
102
+ ? T2V_COLORS.stormyTeal
103
+ : T2V_COLORS.accent,
104
+ color: isLoading ? T2V_COLORS.midGray : T2V_COLORS.dark,
105
+ fontSize: '15px',
106
+ fontWeight: 600,
107
+ fontFamily: T2V_FONTS.heading,
108
+ cursor: isLoading ? 'not-allowed' : 'pointer',
109
+ transition: 'background-color 0.15s ease, transform 0.15s ease',
110
+ transform: !isLoading && btnHover ? 'translateY(-1px)' : 'none',
111
+ display: 'flex',
112
+ alignItems: 'center',
113
+ justifyContent: 'center',
114
+ gap: '8px',
115
+ }, children: [isLoading && (_jsx("span", { style: {
116
+ display: 'inline-block',
117
+ width: '16px',
118
+ height: '16px',
119
+ border: `2px solid ${T2V_COLORS.midGray}`,
120
+ borderTopColor: 'transparent',
121
+ borderRadius: '50%',
122
+ animation: 't2v-spin 0.6s linear infinite',
123
+ } })), isLoading ? 'Signing in…' : 'Sign in'] })] }), _jsxs("p", { style: {
124
+ marginTop: '20px',
125
+ fontSize: '13px',
126
+ fontFamily: T2V_FONTS.heading,
127
+ color: T2V_COLORS.midGray,
128
+ }, children: ["Don't have an account?", ' ', _jsx("a", { href: signupUrl, target: "_blank", rel: "noopener noreferrer", onMouseEnter: () => setLinkHover(true), onMouseLeave: () => setLinkHover(false), style: {
129
+ color: linkHover ? T2V_COLORS.stormyTeal : T2V_COLORS.turquoise,
130
+ fontWeight: 500,
131
+ textDecoration: linkHover ? 'underline' : 'none',
132
+ transition: 'color 0.15s ease',
133
+ }, children: "Sign up" })] })] }));
134
+ }
135
+ //# sourceMappingURL=LoginModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginModal.js","sourceRoot":"","sources":["../../src/react/LoginModal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SettingsView — full-panel settings page for user preferences.
3
+ */
4
+ export interface SettingsViewProps {
5
+ onBack: () => void;
6
+ onModelChange?: (model: string) => void;
7
+ }
8
+ export declare function SettingsView({ onBack, onModelChange }: SettingsViewProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=SettingsView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsView.d.ts","sourceRoot":"","sources":["../../src/react/SettingsView.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAuDD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,iBAAiB,2CAwPxE"}