@talk2view/sdk 0.15.0 → 0.16.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/README.md +47 -2
- package/dist/assistant-ui/index.d.ts +7 -1
- package/dist/assistant-ui/index.d.ts.map +1 -1
- package/dist/assistant-ui/index.js +6 -3
- package/dist/assistant-ui/index.js.map +1 -1
- package/dist/auth.d.ts +19 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +36 -13
- package/dist/auth.js.map +1 -1
- package/dist/chat/auth-gate.d.ts +42 -0
- package/dist/chat/auth-gate.d.ts.map +1 -0
- package/dist/chat/auth-gate.js +93 -0
- package/dist/chat/auth-gate.js.map +1 -0
- package/dist/chat/chat.d.ts +36 -0
- package/dist/chat/chat.d.ts.map +1 -0
- package/dist/chat/chat.js +124 -0
- package/dist/chat/chat.js.map +1 -0
- package/dist/chat/composer-extras.d.ts +23 -0
- package/dist/chat/composer-extras.d.ts.map +1 -0
- package/dist/chat/composer-extras.js +48 -0
- package/dist/chat/composer-extras.js.map +1 -0
- package/dist/chat/hooks/use-attachment-src.d.ts +2 -0
- package/dist/chat/hooks/use-attachment-src.d.ts.map +1 -0
- package/dist/chat/hooks/use-attachment-src.js +38 -0
- package/dist/chat/hooks/use-attachment-src.js.map +1 -0
- package/dist/chat/hooks/use-copy-to-clipboard.d.ts +8 -0
- package/dist/chat/hooks/use-copy-to-clipboard.d.ts.map +1 -0
- package/dist/chat/hooks/use-copy-to-clipboard.js +16 -0
- package/dist/chat/hooks/use-copy-to-clipboard.js.map +1 -0
- package/dist/chat/index.d.ts +32 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +35 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/inject-styles.d.ts +2 -0
- package/dist/chat/inject-styles.d.ts.map +1 -0
- package/dist/chat/inject-styles.js +23 -0
- package/dist/chat/inject-styles.js.map +1 -0
- package/dist/chat/launcher.d.ts +37 -0
- package/dist/chat/launcher.d.ts.map +1 -0
- package/dist/chat/launcher.js +343 -0
- package/dist/chat/launcher.js.map +1 -0
- package/dist/chat/lib/cn.d.ts +19 -0
- package/dist/chat/lib/cn.d.ts.map +1 -0
- package/dist/chat/lib/cn.js +20 -0
- package/dist/chat/lib/cn.js.map +1 -0
- package/dist/chat/lib/dictation-phase.d.ts +9 -0
- package/dist/chat/lib/dictation-phase.d.ts.map +1 -0
- package/dist/chat/lib/dictation-phase.js +33 -0
- package/dist/chat/lib/dictation-phase.js.map +1 -0
- package/dist/chat/lib/guard.d.ts +4 -0
- package/dist/chat/lib/guard.d.ts.map +1 -0
- package/dist/chat/lib/guard.js +41 -0
- package/dist/chat/lib/guard.js.map +1 -0
- package/dist/chat/lib/launcher-variant.d.ts +33 -0
- package/dist/chat/lib/launcher-variant.d.ts.map +1 -0
- package/dist/chat/lib/launcher-variant.js +109 -0
- package/dist/chat/lib/launcher-variant.js.map +1 -0
- package/dist/chat/lib/portal-host.d.ts +13 -0
- package/dist/chat/lib/portal-host.d.ts.map +1 -0
- package/dist/chat/lib/portal-host.js +58 -0
- package/dist/chat/lib/portal-host.js.map +1 -0
- package/dist/chat/markdown.d.ts +32 -0
- package/dist/chat/markdown.d.ts.map +1 -0
- package/dist/chat/markdown.js +18 -0
- package/dist/chat/markdown.js.map +1 -0
- package/dist/chat/provider.d.ts +113 -0
- package/dist/chat/provider.d.ts.map +1 -0
- package/dist/chat/provider.js +176 -0
- package/dist/chat/provider.js.map +1 -0
- package/dist/chat/tool-fallback.d.ts +39 -0
- package/dist/chat/tool-fallback.d.ts.map +1 -0
- package/dist/chat/tool-fallback.js +167 -0
- package/dist/chat/tool-fallback.js.map +1 -0
- package/dist/chat/ui/avatar.d.ts +12 -0
- package/dist/chat/ui/avatar.d.ts.map +1 -0
- package/dist/chat/ui/avatar.js +24 -0
- package/dist/chat/ui/avatar.js.map +1 -0
- package/dist/chat/ui/button.d.ts +9 -0
- package/dist/chat/ui/button.d.ts.map +1 -0
- package/dist/chat/ui/button.js +35 -0
- package/dist/chat/ui/button.js.map +1 -0
- package/dist/chat/ui/collapsible.d.ts +6 -0
- package/dist/chat/ui/collapsible.d.ts.map +1 -0
- package/dist/chat/ui/collapsible.js +13 -0
- package/dist/chat/ui/collapsible.js.map +1 -0
- package/dist/chat/ui/dialog.d.ts +18 -0
- package/dist/chat/ui/dialog.d.ts.map +1 -0
- package/dist/chat/ui/dialog.js +42 -0
- package/dist/chat/ui/dialog.js.map +1 -0
- package/dist/chat/ui/input.d.ts +4 -0
- package/dist/chat/ui/input.d.ts.map +1 -0
- package/dist/chat/ui/input.js +8 -0
- package/dist/chat/ui/input.js.map +1 -0
- package/dist/chat/ui/skeleton.d.ts +3 -0
- package/dist/chat/ui/skeleton.d.ts.map +1 -0
- package/dist/chat/ui/skeleton.js +7 -0
- package/dist/chat/ui/skeleton.js.map +1 -0
- package/dist/chat/ui/textarea.d.ts +4 -0
- package/dist/chat/ui/textarea.d.ts.map +1 -0
- package/dist/chat/ui/textarea.js +7 -0
- package/dist/chat/ui/textarea.js.map +1 -0
- package/dist/chat/ui/tooltip.d.ts +7 -0
- package/dist/chat/ui/tooltip.d.ts.map +1 -0
- package/dist/chat/ui/tooltip.js +22 -0
- package/dist/chat/ui/tooltip.js.map +1 -0
- package/dist/chat/vendor/attachment.aui.d.ts +5 -0
- package/dist/chat/vendor/attachment.aui.d.ts.map +1 -0
- package/dist/chat/vendor/attachment.aui.js +79 -0
- package/dist/chat/vendor/attachment.aui.js.map +1 -0
- package/dist/chat/vendor/file.d.ts +41 -0
- package/dist/chat/vendor/file.d.ts.map +1 -0
- package/dist/chat/vendor/file.js +137 -0
- package/dist/chat/vendor/file.js.map +1 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.d.ts +3 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.d.ts.map +1 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.js +45 -0
- package/dist/chat/vendor/follow-up-suggestions.aui.js.map +1 -0
- package/dist/chat/vendor/image.d.ts +47 -0
- package/dist/chat/vendor/image.d.ts.map +1 -0
- package/dist/chat/vendor/image.js +258 -0
- package/dist/chat/vendor/image.js.map +1 -0
- package/dist/chat/vendor/markdown-text.d.ts +8 -0
- package/dist/chat/vendor/markdown-text.d.ts.map +1 -0
- package/dist/chat/vendor/markdown-text.js +73 -0
- package/dist/chat/vendor/markdown-text.js.map +1 -0
- package/dist/chat/vendor/reasoning.aui.d.ts +22 -0
- package/dist/chat/vendor/reasoning.aui.d.ts.map +1 -0
- package/dist/chat/vendor/reasoning.aui.js +56 -0
- package/dist/chat/vendor/reasoning.aui.js.map +1 -0
- package/dist/chat/vendor/reasoning.d.ts +35 -0
- package/dist/chat/vendor/reasoning.d.ts.map +1 -0
- package/dist/chat/vendor/reasoning.js +112 -0
- package/dist/chat/vendor/reasoning.js.map +1 -0
- package/dist/chat/vendor/thread-list.aui.d.ts +37 -0
- package/dist/chat/vendor/thread-list.aui.d.ts.map +1 -0
- package/dist/chat/vendor/thread-list.aui.js +154 -0
- package/dist/chat/vendor/thread-list.aui.js.map +1 -0
- package/dist/chat/vendor/thread.aui.d.ts +47 -0
- package/dist/chat/vendor/thread.aui.d.ts.map +1 -0
- package/dist/chat/vendor/thread.aui.js +176 -0
- package/dist/chat/vendor/thread.aui.js.map +1 -0
- package/dist/chat/vendor/tool-fallback.aui.d.ts +39 -0
- package/dist/chat/vendor/tool-fallback.aui.d.ts.map +1 -0
- package/dist/chat/vendor/tool-fallback.aui.js +251 -0
- package/dist/chat/vendor/tool-fallback.aui.js.map +1 -0
- package/dist/chat/vendor/tool-group.aui.d.ts +34 -0
- package/dist/chat/vendor/tool-group.aui.d.ts.map +1 -0
- package/dist/chat/vendor/tool-group.aui.js +60 -0
- package/dist/chat/vendor/tool-group.aui.js.map +1 -0
- package/dist/chat/vendor/tooltip-icon-button.d.ts +8 -0
- package/dist/chat/vendor/tooltip-icon-button.d.ts.map +1 -0
- package/dist/chat/vendor/tooltip-icon-button.js +11 -0
- package/dist/chat/vendor/tooltip-icon-button.js.map +1 -0
- package/dist/chat/views/account.d.ts +6 -0
- package/dist/chat/views/account.d.ts.map +1 -0
- package/dist/chat/views/account.js +128 -0
- package/dist/chat/views/account.js.map +1 -0
- package/dist/chat/views/settings.d.ts +2 -0
- package/dist/chat/views/settings.d.ts.map +1 -0
- package/dist/chat/views/settings.js +104 -0
- package/dist/chat/views/settings.js.map +1 -0
- package/dist/chat/views/thread-list.d.ts +10 -0
- package/dist/chat/views/thread-list.d.ts.map +1 -0
- package/dist/chat/views/thread-list.js +21 -0
- package/dist/chat/views/thread-list.js.map +1 -0
- package/dist/chat/welcome.d.ts +10 -0
- package/dist/chat/welcome.d.ts.map +1 -0
- package/dist/chat/welcome.js +9 -0
- package/dist/chat/welcome.js.map +1 -0
- package/dist/chat-css.d.ts +1 -0
- package/dist/chat-css.js +1 -0
- package/dist/chat.css +2 -0
- package/dist/chat.isolated.css +3819 -0
- package/dist/chat.raw.css +3829 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +6 -2
- package/dist/sessions.js.map +1 -1
- package/package.json +46 -11
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* The Account view: sign in, create an account, continue with Apple or Google,
|
|
5
|
+
* sign out. It is the same engine auth the SDK's other surfaces use
|
|
6
|
+
* (`client.auth`), so an account made in one Talk2View app works in all of them.
|
|
7
|
+
*
|
|
8
|
+
* A visitor starts as a guest. Creating an account from a guest session converts
|
|
9
|
+
* it in place — same end-user, so the conversation so far is kept.
|
|
10
|
+
*
|
|
11
|
+
* Ported from the website's assistant modal. Two things are different here: the
|
|
12
|
+
* client comes from the chat's own context rather than the site's, and the
|
|
13
|
+
* "Forgot it?" link points at whatever page the integrator named, or is left out.
|
|
14
|
+
*/
|
|
15
|
+
import { useEffect, useId, useState } from 'react';
|
|
16
|
+
import { cn } from '../lib/cn.js';
|
|
17
|
+
import { useChatContext } from '../provider.js';
|
|
18
|
+
import { REASON_COPY, useAccount } from '../auth-gate.js';
|
|
19
|
+
const inputClass = 'border-input bg-background text-foreground placeholder:text-muted-foreground/70 focus-visible:ring-ring h-10 w-full border px-3 text-base outline-none focus-visible:ring-2 disabled:opacity-60';
|
|
20
|
+
const primaryClass = 'bg-primary text-primary-foreground focus-visible:ring-foreground h-10 w-full text-sm font-medium transition-[filter] hover:brightness-95 focus-visible:ring-2 focus-visible:outline-none disabled:opacity-60';
|
|
21
|
+
/* Apple's own black button, as their Sign in with Apple guidelines require; the
|
|
22
|
+
one place in the chat that does not follow the integrator's colour tokens. */
|
|
23
|
+
const appleClass = 'focus-visible:ring-primary flex h-10 w-full items-center justify-center gap-2.5 bg-black text-sm font-medium text-white outline-none hover:bg-black/85 focus-visible:ring-2 disabled:opacity-60';
|
|
24
|
+
const secondaryClass = 'border-input bg-background text-foreground hover:bg-foreground/[0.04] focus-visible:ring-ring flex h-10 w-full items-center justify-center gap-2.5 border text-sm font-medium outline-none focus-visible:ring-2 disabled:opacity-60';
|
|
25
|
+
export function AccountView({ reason, onSignedIn, }) {
|
|
26
|
+
const { client, behaviour } = useChatContext();
|
|
27
|
+
const account = useAccount(client);
|
|
28
|
+
return (_jsx("div", { className: "t2v-chat-account aui-modal-account bg-popover absolute inset-0 flex flex-col gap-5 overflow-y-auto p-4 text-sm", children: account.status === 'signed-in' ? (_jsx(SignedIn, { client: client, user: account.user })) : (_jsx(SignInForm, { client: client, guest: account.status === 'guest', reason: reason, resetPasswordUrl: behaviour.current.resetPasswordUrl, onSignedIn: onSignedIn })) }));
|
|
29
|
+
}
|
|
30
|
+
function SignedIn({ client, user }) {
|
|
31
|
+
const [busy, setBusy] = useState(false);
|
|
32
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("p", { className: "text-muted-foreground text-xs", children: "Signed in as" }), _jsx("p", { className: "truncate text-base font-medium", children: user.email })] }), _jsx("p", { className: "text-muted-foreground text-xs leading-relaxed", children: "Your conversations are saved to this account, and it works in every Talk2View app." }), _jsx("button", { type: "button", className: secondaryClass, disabled: busy, onClick: () => {
|
|
33
|
+
setBusy(true);
|
|
34
|
+
void client.auth.logout().finally(() => setBusy(false));
|
|
35
|
+
}, children: busy ? 'Signing out…' : 'Sign out' })] }));
|
|
36
|
+
}
|
|
37
|
+
function SignInForm({ client, guest, reason, resetPasswordUrl, onSignedIn, }) {
|
|
38
|
+
// Someone who ran out of guest allowance needs an account, not a password.
|
|
39
|
+
const [mode, setMode] = useState(reason === 'demo-limit' ? 'signup' : 'login');
|
|
40
|
+
const [email, setEmail] = useState('');
|
|
41
|
+
const [password, setPassword] = useState('');
|
|
42
|
+
const [busy, setBusy] = useState(null);
|
|
43
|
+
const [error, setError] = useState(null);
|
|
44
|
+
const [confirmSentTo, setConfirmSentTo] = useState(null);
|
|
45
|
+
const emailId = useId();
|
|
46
|
+
const passwordId = useId();
|
|
47
|
+
const errorId = useId();
|
|
48
|
+
// Which popup sign-ins work on THIS page — the engine decides (it has to be an
|
|
49
|
+
// https:// website that sends a Referer; never localhost). Null while asking: a
|
|
50
|
+
// form that grows a button is better than one that shows a button and takes
|
|
51
|
+
// it away.
|
|
52
|
+
const [providers, setProviders] = useState(null);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
let live = true;
|
|
55
|
+
void client.auth.getPopupProviders().then((list) => live && setProviders(list));
|
|
56
|
+
return () => {
|
|
57
|
+
live = false;
|
|
58
|
+
};
|
|
59
|
+
}, [client]);
|
|
60
|
+
const apple = providers?.includes('apple') ?? false;
|
|
61
|
+
const google = providers?.includes('google') ?? false;
|
|
62
|
+
const fail = (err, fallback) => setError(err instanceof Error && err.message ? err.message : fallback);
|
|
63
|
+
const submit = async (event) => {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
if (busy)
|
|
66
|
+
return;
|
|
67
|
+
setError(null);
|
|
68
|
+
setBusy('form');
|
|
69
|
+
try {
|
|
70
|
+
if (mode === 'signup') {
|
|
71
|
+
const outcome = await client.auth.signup(email.trim(), password);
|
|
72
|
+
if (outcome.confirmationRequired)
|
|
73
|
+
setConfirmSentTo(email.trim());
|
|
74
|
+
else
|
|
75
|
+
onSignedIn();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
await client.auth.login(email.trim(), password);
|
|
79
|
+
onSignedIn();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
fail(err, mode === 'signup' ? 'Couldn’t create the account.' : 'Couldn’t sign in.');
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
setBusy(null);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const popup = async (provider) => {
|
|
90
|
+
if (busy)
|
|
91
|
+
return;
|
|
92
|
+
setError(null);
|
|
93
|
+
setBusy(provider);
|
|
94
|
+
try {
|
|
95
|
+
await (provider === 'apple' ? client.auth.signInWithApple() : client.auth.signInWithGoogle());
|
|
96
|
+
onSignedIn();
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
fail(err, provider === 'apple' ? 'Apple sign-in didn’t finish.' : 'Google sign-in didn’t finish.');
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
setBusy(null);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
if (confirmSentTo) {
|
|
106
|
+
return (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("h2", { className: "text-base font-medium", children: "Check your email" }), _jsxs("p", { className: "text-muted-foreground leading-relaxed", children: ["We sent a confirmation link to ", _jsx("span", { className: "text-foreground", children: confirmSentTo }), ". You can keep chatting in the meantime \u2014 this conversation moves to your account once you confirm."] }), _jsx("button", { type: "button", className: secondaryClass, onClick: onSignedIn, children: "Back to the chat" })] }));
|
|
107
|
+
}
|
|
108
|
+
const signup = mode === 'signup';
|
|
109
|
+
return (_jsxs(_Fragment, { children: [reason ? (_jsx("p", { role: "status", className: "bg-muted text-foreground px-3 py-2.5 leading-relaxed", children: REASON_COPY[reason] })) : null, _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h2", { className: "text-base font-medium", children: signup ? 'Create your account' : 'Sign in' }), _jsx("p", { className: "text-muted-foreground text-xs leading-relaxed", children: !guest
|
|
110
|
+
? 'One account for every Talk2View app.'
|
|
111
|
+
: signup
|
|
112
|
+
? 'You’re chatting as a guest. Creating an account keeps this conversation and lifts the guest limits.'
|
|
113
|
+
: 'You’re chatting as a guest. Signing in starts a fresh chat under your account.' })] }), apple || google ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-col gap-2.5", children: [apple ? (_jsxs("button", { type: "button", className: appleClass, disabled: busy !== null, onClick: () => popup('apple'), children: [_jsx(AppleMark, {}), busy === 'apple' ? 'Waiting for Apple…' : 'Continue with Apple'] })) : null, google ? (_jsxs("button", { type: "button", className: secondaryClass, disabled: busy !== null, onClick: () => popup('google'), children: [_jsx(GoogleMark, {}), busy === 'google' ? 'Waiting for Google…' : 'Continue with Google'] })) : null] }), _jsxs("div", { className: "text-muted-foreground flex items-center gap-3 text-xs", "aria-hidden": "true", children: [_jsx("span", { className: "bg-foreground/10 h-px flex-1" }), "or", _jsx("span", { className: "bg-foreground/10 h-px flex-1" })] })] })) : null, _jsxs("form", { className: "flex flex-col gap-3", onSubmit: submit, children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { htmlFor: emailId, className: "font-medium", children: "Email" }), _jsx("input", { id: emailId, type: "email", required: true, autoComplete: "email", inputMode: "email", className: inputClass, value: email, disabled: busy !== null, "aria-describedby": error ? errorId : undefined, onChange: (e) => setEmail(e.target.value) })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex items-baseline justify-between", children: [_jsx("label", { htmlFor: passwordId, className: "font-medium", children: "Password" }), !signup && resetPasswordUrl ? (_jsx("a", { href: resetPasswordUrl, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground text-xs underline", children: "Forgot it?" })) : null] }), _jsx("input", { id: passwordId, type: "password", required: true, minLength: signup ? 8 : undefined, autoComplete: signup ? 'new-password' : 'current-password', className: inputClass, value: password, disabled: busy !== null, "aria-describedby": error ? errorId : undefined, onChange: (e) => setPassword(e.target.value) }), signup ? _jsx("p", { className: "text-muted-foreground text-xs", children: "At least 8 characters." }) : null] }), error ? (_jsx("p", { id: errorId, role: "alert", className: "text-destructive", children: error })) : null, _jsx("button", { type: "submit", className: primaryClass, disabled: busy !== null, children: busy === 'form'
|
|
114
|
+
? signup
|
|
115
|
+
? 'Creating account…'
|
|
116
|
+
: 'Signing in…'
|
|
117
|
+
: signup
|
|
118
|
+
? 'Create account'
|
|
119
|
+
: 'Sign in' })] }), _jsxs("p", { className: "text-muted-foreground text-xs", children: [signup ? 'Already have an account? ' : 'New to Talk2View? ', _jsx("button", { type: "button", className: cn('text-foreground underline', busy && 'pointer-events-none opacity-60'), onClick: () => {
|
|
120
|
+
setError(null);
|
|
121
|
+
setMode(signup ? 'login' : 'signup');
|
|
122
|
+
}, children: signup ? 'Sign in' : 'Create an account' })] })] }));
|
|
123
|
+
}
|
|
124
|
+
/** Apple's logo, white on black, per their Sign in with Apple guidelines. */
|
|
125
|
+
const AppleMark = () => (_jsx("svg", { viewBox: "0 0 14 17", "aria-hidden": "true", fill: "currentColor", className: "h-[17px] w-[14px] shrink-0", children: _jsx("path", { d: "M11.62 9.03c-.02-1.9 1.55-2.81 1.62-2.86-.88-1.29-2.26-1.47-2.75-1.49-1.17-.12-2.28.69-2.88.69-.59 0-1.51-.67-2.48-.65-1.28.02-2.45.74-3.11 1.88-1.33 2.3-.34 5.7.95 7.57.63.91 1.38 1.94 2.37 1.9.95-.04 1.31-.61 2.46-.61 1.15 0 1.47.61 2.48.59 1.02-.02 1.67-.93 2.3-1.85.72-1.06 1.02-2.08 1.04-2.13-.02-.01-1.99-.76-2.01-3.04zM9.73 3.43c.52-.64.88-1.52.78-2.4-.76.03-1.67.5-2.21 1.14-.49.56-.91 1.46-.8 2.32.84.07 1.71-.43 2.23-1.06z" }) }));
|
|
126
|
+
/** Google's "G", per their sign-in branding guidelines (standard colours). */
|
|
127
|
+
const GoogleMark = () => (_jsxs("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", className: "size-[18px] shrink-0", children: [_jsx("path", { fill: "#4285F4", d: "M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.8 2.72v2.26h2.92c1.7-1.57 2.68-3.88 2.68-6.62z" }), _jsx("path", { fill: "#34A853", d: "M9 18c2.43 0 4.47-.8 5.96-2.18l-2.92-2.26c-.8.54-1.84.86-3.04.86-2.34 0-4.32-1.58-5.03-3.7H.96v2.33A9 9 0 0 0 9 18z" }), _jsx("path", { fill: "#FBBC05", d: "M3.97 10.72A5.4 5.4 0 0 1 3.68 9c0-.6.1-1.18.29-1.72V4.95H.96A9 9 0 0 0 0 9c0 1.45.35 2.83.96 4.05l3.01-2.33z" }), _jsx("path", { fill: "#EA4335", d: "M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.59A9 9 0 0 0 .96 4.95l3.01 2.33C4.68 5.16 6.66 3.58 9 3.58z" })] }));
|
|
128
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/chat/views/account.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/chat/views/settings.tsx"],"names":[],"mappings":"AAoDA,wBAAgB,YAAY,4CAqG3B"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* The Settings view: which AI model answers, which voice model transcribes
|
|
5
|
+
* dictation, and which language it should expect. Choices are stored with the
|
|
6
|
+
* SDK's own preferences, so they carry between a partner's own UI and this chat,
|
|
7
|
+
* and across visits.
|
|
8
|
+
*/
|
|
9
|
+
import { useEffect, useId, useState } from 'react';
|
|
10
|
+
import { useUserPreferences } from '../../react/useUserPreferences.js';
|
|
11
|
+
import { useChatContext } from '../provider.js';
|
|
12
|
+
import { LAUNCHER_COLOURWAYS, LAUNCHER_COLOURWAY_LABELS, setLauncherColourway, useLauncherColourway, useLauncherOptions, } from '../lib/launcher-variant.js';
|
|
13
|
+
/* Offered when the voice model does not restrict its languages (the API sends
|
|
14
|
+
no `supported_languages`). */
|
|
15
|
+
const COMMON_LANGUAGES = ['en', 'vi', 'zh', 'ja', 'ko', 'fr', 'de', 'es'];
|
|
16
|
+
/* The engine's fallback voice model — DEFAULT_DICTATION_MODEL in the SDK. */
|
|
17
|
+
const FALLBACK_STT_MODEL = 'faster-whisper-base';
|
|
18
|
+
const languageNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl
|
|
19
|
+
? new Intl.DisplayNames(['en'], { type: 'language' })
|
|
20
|
+
: null;
|
|
21
|
+
/** "vi" → "Vietnamese". Falls back to the code for anything Intl does not know. */
|
|
22
|
+
const languageName = (code) => {
|
|
23
|
+
try {
|
|
24
|
+
return languageNames?.of(code) ?? code;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return code;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/** The languages to offer for a voice model, A–Z by name. */
|
|
31
|
+
const languagesFor = (model) => [...new Set(model?.supported_languages?.length ? model.supported_languages : COMMON_LANGUAGES)]
|
|
32
|
+
.map((code) => [code, languageName(code)])
|
|
33
|
+
.sort((x, y) => x[1].localeCompare(y[1]));
|
|
34
|
+
const label = (m) => m.name ?? m.id;
|
|
35
|
+
export function SettingsView() {
|
|
36
|
+
const { client, config: mountConfig } = useChatContext();
|
|
37
|
+
const launcher = useLauncherOptions();
|
|
38
|
+
const { preferences, updatePreferences } = useUserPreferences();
|
|
39
|
+
const [models, setModels] = useState({ state: 'loading' });
|
|
40
|
+
const [voices, setVoices] = useState({ state: 'loading' });
|
|
41
|
+
// A new visitor has no session when the chat mounts, so the provider's config
|
|
42
|
+
// fetch 401s. Listing the models starts the guest session; ask again after.
|
|
43
|
+
const [lateConfig, setLateConfig] = useState(null);
|
|
44
|
+
const partnerConfig = mountConfig ?? lateConfig;
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
let live = true;
|
|
47
|
+
client
|
|
48
|
+
.listModels()
|
|
49
|
+
.then((r) => live && setModels({ state: 'ready', items: r.data }))
|
|
50
|
+
.catch(() => live && setModels({ state: 'error' }));
|
|
51
|
+
client
|
|
52
|
+
.listAudioModels()
|
|
53
|
+
.then((r) => live && setVoices({ state: 'ready', items: r.data }))
|
|
54
|
+
.catch(() => live && setVoices({ state: 'error' }))
|
|
55
|
+
.then(() => client.getConfig())
|
|
56
|
+
.then((value) => live && value && setLateConfig(value))
|
|
57
|
+
.catch(() => { });
|
|
58
|
+
return () => {
|
|
59
|
+
live = false;
|
|
60
|
+
};
|
|
61
|
+
}, [client]);
|
|
62
|
+
// The voice model actually in use: the visitor's choice, else the partner's
|
|
63
|
+
// default, else the engine's. Its languages are the ones worth offering.
|
|
64
|
+
const voiceItems = voices.state === 'ready' ? voices.items : [];
|
|
65
|
+
const defaultSttId = partnerConfig?.default_stt_model || FALLBACK_STT_MODEL;
|
|
66
|
+
const activeVoice = voiceItems.find((m) => m.id === (preferences.sttModel || defaultSttId));
|
|
67
|
+
const languages = languagesFor(activeVoice);
|
|
68
|
+
const language = preferences.sttLanguage ?? '';
|
|
69
|
+
const languageOrphan = language !== '' && !languages.some(([code]) => code === language);
|
|
70
|
+
const voiceName = activeVoice ? label(activeVoice) : 'the voice model';
|
|
71
|
+
return (_jsxs("div", { className: "t2v-chat-settings aui-modal-settings bg-popover absolute inset-0 flex flex-col gap-6 overflow-y-auto p-4 text-sm", children: [_jsx(Picker, { title: "AI model", help: "Answers your next message. Switching keeps this conversation.", value: preferences.model ?? '', onChange: (model) => updatePreferences({ model: model || undefined }), load: models, defaultId: partnerConfig?.default_llm_model }), _jsx(Picker, { title: "Voice model", help: "Transcribes what you say when you use the mic.", value: preferences.sttModel ?? '', onChange: (sttModel) => {
|
|
72
|
+
// A language the new model cannot transcribe goes back to auto-detect.
|
|
73
|
+
const next = voiceItems.find((m) => m.id === (sttModel || defaultSttId));
|
|
74
|
+
const keep = !language || languagesFor(next).some(([code]) => code === language);
|
|
75
|
+
updatePreferences({
|
|
76
|
+
sttModel: sttModel || undefined,
|
|
77
|
+
...(keep ? {} : { sttLanguage: undefined }),
|
|
78
|
+
});
|
|
79
|
+
}, load: voices, defaultId: partnerConfig?.default_stt_model }), _jsx(Field, { title: "Spoken language", help: activeVoice?.supported_languages?.length
|
|
80
|
+
? languages.length === 1
|
|
81
|
+
? `${voiceName} transcribes ${languages[0][1]} only.`
|
|
82
|
+
: `The ${languages.length} languages ${voiceName} can transcribe.`
|
|
83
|
+
: 'A hint for the voice model.', children: (id) => (_jsxs("select", { id: id, className: selectClass, value: language, onChange: (e) => updatePreferences({ sttLanguage: e.target.value || undefined }), children: [_jsx("option", { value: "", children: "Detect automatically" }), languageOrphan ? (_jsxs("option", { value: language, children: [languageName(language), " (not supported by ", voiceName, ")"] })) : null, languages.map(([code, name]) => (_jsx("option", { value: code, children: name }, code)))] })) }), launcher.visitorColourway && _jsx(ColourwayField, { fallback: launcher.colourway })] }));
|
|
84
|
+
}
|
|
85
|
+
/** The launcher's colour, when the integrator lets the visitor pick it. */
|
|
86
|
+
function ColourwayField({ fallback }) {
|
|
87
|
+
const colourway = useLauncherColourway(fallback, true);
|
|
88
|
+
return (_jsx(Field, { title: "Launcher colour", help: "The floating button. Remembered on this device.", children: (id) => (_jsx("select", { id: id, className: selectClass, value: colourway, onChange: (e) => setLauncherColourway(e.target.value), children: LAUNCHER_COLOURWAYS.map((option) => (_jsx("option", { value: option, children: LAUNCHER_COLOURWAY_LABELS[option] }, option))) })) }));
|
|
89
|
+
}
|
|
90
|
+
const selectClass = 'border-input bg-background text-foreground focus-visible:ring-ring h-9 w-full border px-2.5 text-sm outline-none focus-visible:ring-2 disabled:opacity-60';
|
|
91
|
+
function Field({ title, help, children, }) {
|
|
92
|
+
const id = useId();
|
|
93
|
+
return (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { htmlFor: id, className: "font-medium", children: title }), children(id), _jsx("p", { className: "text-muted-foreground text-xs", children: help })] }));
|
|
94
|
+
}
|
|
95
|
+
function Picker({ title, help, value, onChange, load, defaultId, }) {
|
|
96
|
+
const items = load.state === 'ready' ? load.items : [];
|
|
97
|
+
const defaultModel = items.find((m) => m.id === defaultId);
|
|
98
|
+
const defaultLabel = defaultModel ? `Default — ${label(defaultModel)}` : 'Default';
|
|
99
|
+
// A saved choice the partner no longer offers still has to be shown, or the
|
|
100
|
+
// select would silently display something else.
|
|
101
|
+
const orphan = value && load.state === 'ready' && !items.some((m) => m.id === value);
|
|
102
|
+
return (_jsx(Field, { title: title, help: load.state === 'error' ? 'Couldn’t load the list — the default will be used.' : help, children: (id) => (_jsxs("select", { id: id, className: selectClass, value: value, disabled: load.state !== 'ready', onChange: (e) => onChange(e.target.value), children: [_jsx("option", { value: "", children: load.state === 'loading' ? 'Loading…' : defaultLabel }), orphan ? _jsxs("option", { value: value, children: [value, " (no longer offered)"] }) : null, items.map((m) => (_jsx("option", { value: m.id, children: label(m) }, m.id)))] })) }));
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/chat/views/settings.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAIpC;gCACgC;AAChC,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE1E,6EAA6E;AAC7E,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEjD,MAAM,aAAa,GACjB,OAAO,IAAI,KAAK,WAAW,IAAI,cAAc,IAAI,IAAI;IACnD,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACrD,CAAC,CAAC,IAAI,CAAC;AAEX,mFAAmF;AACnF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,OAAO,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,6DAA6D;AAC7D,MAAM,YAAY,GAAG,CAAC,KAA6B,EAAE,EAAE,CACrD,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;KAC5F,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAU,CAAC;KAClD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C,MAAM,KAAK,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;AAE3C,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAChE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,WAAW,IAAI,UAAU,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,MAAM;aACH,UAAU,EAAE;aACZ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aACjE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM;aACH,eAAe,EAAE;aACjB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aACjE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;aAClD,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;aAC9B,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;aACtD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,KAAK,CAAC;QACf,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,YAAY,GAAG,aAAa,EAAE,iBAAiB,IAAI,kBAAkB,CAAC;IAC5E,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,QAAQ,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAEvE,OAAO,CACL,eAAK,SAAS,EAAC,kHAAkH,aAC/H,KAAC,MAAM,IACL,KAAK,EAAC,UAAU,EAChB,IAAI,EAAC,+DAA+D,EACpE,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,EAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,EACrE,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,aAAa,EAAE,iBAAiB,GAC3C,EACF,KAAC,MAAM,IACL,KAAK,EAAC,aAAa,EACnB,IAAI,EAAC,gDAAgD,EACrD,KAAK,EAAE,WAAW,CAAC,QAAQ,IAAI,EAAE,EACjC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACrB,uEAAuE;oBACvE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC;oBACzE,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;oBACjF,iBAAiB,CAAC;wBAChB,QAAQ,EAAE,QAAQ,IAAI,SAAS;wBAC/B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;qBAC5C,CAAC,CAAC;gBACL,CAAC,EACD,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,aAAa,EAAE,iBAAiB,GAC3C,EACF,KAAC,KAAK,IACJ,KAAK,EAAC,iBAAiB,EACvB,IAAI,EACF,WAAW,EAAE,mBAAmB,EAAE,MAAM;oBACtC,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;wBACtB,CAAC,CAAC,GAAG,SAAS,gBAAgB,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,QAAQ;wBACtD,CAAC,CAAC,OAAO,SAAS,CAAC,MAAM,cAAc,SAAS,kBAAkB;oBACpE,CAAC,CAAC,6BAA6B,YAGlC,CAAC,EAAE,EAAE,EAAE,CAAC,CACP,kBACE,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,aAEhF,iBAAQ,KAAK,EAAC,EAAE,qCAA8B,EAC7C,cAAc,CAAC,CAAC,CAAC,CAChB,kBAAQ,KAAK,EAAE,QAAQ,aACpB,YAAY,CAAC,QAAQ,CAAC,yBAAqB,SAAS,SAC9C,CACV,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAC/B,iBAAmB,KAAK,EAAE,IAAI,YAC3B,IAAI,IADM,IAAI,CAER,CACV,CAAC,IACK,CACV,GACK,EAGP,QAAQ,CAAC,gBAAgB,IAAI,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,GAAI,IAC1E,CACP,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CAAC,EAAE,QAAQ,EAAmC;IACnE,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAC,iBAAiB,EAAC,IAAI,EAAC,iDAAiD,YAClF,CAAC,EAAE,EAAE,EAAE,CAAC,CACP,iBACE,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,KAA0B,CAAC,YAEzE,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACnC,iBAAqB,KAAK,EAAE,MAAM,YAC/B,yBAAyB,CAAC,MAAM,CAAC,IADvB,MAAM,CAEV,CACV,CAAC,GACK,CACV,GACK,CACT,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GACf,2JAA2J,CAAC;AAE9J,SAAS,KAAK,CAAC,EACb,KAAK,EACL,IAAI,EACJ,QAAQ,GAKT;IACC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,gBAAO,OAAO,EAAE,EAAE,EAAE,SAAS,EAAC,aAAa,YACxC,KAAK,GACA,EACP,QAAQ,CAAC,EAAE,CAAC,EACb,YAAG,SAAS,EAAC,+BAA+B,YAAE,IAAI,GAAK,IACnD,CACP,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,EACd,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,SAAS,GAQV;IACC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,4EAA4E;IAC5E,gDAAgD;IAChD,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IAErF,OAAO,CACL,KAAC,KAAK,IACJ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC,CAAC,IAAI,YAEzF,CAAC,EAAE,EAAE,EAAE,CAAC,CACP,kBACE,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,KAAK,KAAK,OAAO,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aAEzC,iBAAQ,KAAK,EAAC,EAAE,YAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,GAAU,EAC/E,MAAM,CAAC,CAAC,CAAC,kBAAQ,KAAK,EAAE,KAAK,aAAG,KAAK,4BAA8B,CAAC,CAAC,CAAC,IAAI,EAC1E,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,iBAAmB,KAAK,EAAE,CAAC,CAAC,EAAE,YAC3B,KAAK,CAAC,CAAC,CAAC,IADE,CAAC,CAAC,EAAE,CAER,CACV,CAAC,IACK,CACV,GACK,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Earlier conversations, over the thread. The list itself is assistant-ui's
|
|
3
|
+
* vendored one; this adds the search box (only once there is something to search)
|
|
4
|
+
* and closes the view when a conversation is picked.
|
|
5
|
+
*/
|
|
6
|
+
import { type FC } from 'react';
|
|
7
|
+
export declare const ThreadListView: FC<{
|
|
8
|
+
onSelect: () => void;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=thread-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-list.d.ts","sourceRoot":"","sources":["../../../src/chat/views/thread-list.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,OAAO,EAAY,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAQ1C,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAkBvD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Earlier conversations, over the thread. The list itself is assistant-ui's
|
|
5
|
+
* vendored one; this adds the search box (only once there is something to search)
|
|
6
|
+
* and closes the view when a conversation is picked.
|
|
7
|
+
*/
|
|
8
|
+
import { useState } from 'react';
|
|
9
|
+
import { useAuiState } from '@assistant-ui/react';
|
|
10
|
+
import { ThreadListItems, ThreadListRoot, ThreadListSearch, } from '../vendor/thread-list.aui.js';
|
|
11
|
+
export const ThreadListView = ({ onSelect }) => {
|
|
12
|
+
const [search, setSearch] = useState('');
|
|
13
|
+
const hasThreads = useAuiState((s) => s.threads.threadIds.length > 0);
|
|
14
|
+
return (_jsxs(ThreadListRoot, { className: "t2v-chat-thread-list aui-modal-thread-list bg-popover absolute inset-0 overflow-y-auto p-2", onClick: (event) => {
|
|
15
|
+
const target = event.target;
|
|
16
|
+
if (target.closest("[data-slot='aui_thread-list-item-trigger']")) {
|
|
17
|
+
onSelect();
|
|
18
|
+
}
|
|
19
|
+
}, children: [hasThreads && _jsx(ThreadListSearch, { value: search, onValueChange: setSearch }), _jsx(ThreadListItems, { searchQuery: hasThreads ? search : '' })] }));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=thread-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-list.js","sourceRoot":"","sources":["../../../src/chat/views/thread-list.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAW,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAiC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtE,OAAO,CACL,MAAC,cAAc,IACb,SAAS,EAAC,4FAA4F,EACtG,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiB,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO,CAAC,4CAA4C,CAAC,EAAE,CAAC;gBACjE,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC,aAEA,UAAU,IAAI,KAAC,gBAAgB,IAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,GAAI,EAC5E,KAAC,eAAe,IAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAI,IAC3C,CAClB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The opening screen. assistant-ui's `components={{ Welcome }}` slot replaces
|
|
3
|
+
* the whole section, which is how the heading is set without touching the
|
|
4
|
+
* vendored thread. The openers underneath it are not here: they come from the
|
|
5
|
+
* suggestion store the provider seeds, and the thread renders them itself.
|
|
6
|
+
*/
|
|
7
|
+
import type { FC } from 'react';
|
|
8
|
+
export declare const DEFAULT_WELCOME_HEADING = "How can I help you today?";
|
|
9
|
+
export declare const Welcome: FC;
|
|
10
|
+
//# sourceMappingURL=welcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/chat/welcome.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAEnE,eAAO,MAAM,OAAO,EAAE,EASrB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useChatContext } from './provider.js';
|
|
4
|
+
export const DEFAULT_WELCOME_HEADING = 'How can I help you today?';
|
|
5
|
+
export const Welcome = () => {
|
|
6
|
+
const { welcome } = useChatContext();
|
|
7
|
+
return (_jsx("div", { className: "aui-thread-welcome-root mb-6 flex flex-col px-2", children: _jsx("h1", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-2xl font-medium tracking-tight duration-200", children: welcome.heading ?? DEFAULT_WELCOME_HEADING }) }));
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=welcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/chat/welcome.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AASb,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAEnE,MAAM,CAAC,MAAM,OAAO,GAAO,GAAG,EAAE;IAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CACL,cAAK,SAAS,EAAC,iDAAiD,YAC9D,aAAI,SAAS,EAAC,4IAA4I,YACvJ,OAAO,CAAC,OAAO,IAAI,uBAAuB,GACxC,GACD,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const css: string;
|