@chaaskit/client 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.
- package/dist/favicon.svg +11 -0
- package/dist/index.html +17 -0
- package/dist/lib/LoadingSkeletons-IcIC2JPq.js +132 -0
- package/dist/lib/LoadingSkeletons-IcIC2JPq.js.map +1 -0
- package/dist/lib/ServerThemeProvider-DNF0LAyk.js +42 -0
- package/dist/lib/ServerThemeProvider-DNF0LAyk.js.map +1 -0
- package/dist/lib/extensions.js +10 -0
- package/dist/lib/extensions.js.map +1 -0
- package/dist/lib/favicon.svg +11 -0
- package/dist/lib/index.js +74126 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/logo.svg +12 -0
- package/dist/lib/routes/AcceptInviteRoute.js +19 -0
- package/dist/lib/routes/AcceptInviteRoute.js.map +1 -0
- package/dist/lib/routes/AdminDashboardRoute.js +19 -0
- package/dist/lib/routes/AdminDashboardRoute.js.map +1 -0
- package/dist/lib/routes/AdminTeamRoute.js +19 -0
- package/dist/lib/routes/AdminTeamRoute.js.map +1 -0
- package/dist/lib/routes/AdminTeamsRoute.js +19 -0
- package/dist/lib/routes/AdminTeamsRoute.js.map +1 -0
- package/dist/lib/routes/AdminUsersRoute.js +19 -0
- package/dist/lib/routes/AdminUsersRoute.js.map +1 -0
- package/dist/lib/routes/ApiKeysRoute.js +19 -0
- package/dist/lib/routes/ApiKeysRoute.js.map +1 -0
- package/dist/lib/routes/AutomationsRoute.js +19 -0
- package/dist/lib/routes/AutomationsRoute.js.map +1 -0
- package/dist/lib/routes/ChatRoute.js +19 -0
- package/dist/lib/routes/ChatRoute.js.map +1 -0
- package/dist/lib/routes/DocumentsRoute.js +19 -0
- package/dist/lib/routes/DocumentsRoute.js.map +1 -0
- package/dist/lib/routes/OAuthConsentRoute.js +19 -0
- package/dist/lib/routes/OAuthConsentRoute.js.map +1 -0
- package/dist/lib/routes/PricingRoute.js +19 -0
- package/dist/lib/routes/PricingRoute.js.map +1 -0
- package/dist/lib/routes/PrivacyRoute.js +19 -0
- package/dist/lib/routes/PrivacyRoute.js.map +1 -0
- package/dist/lib/routes/TeamSettingsRoute.js +19 -0
- package/dist/lib/routes/TeamSettingsRoute.js.map +1 -0
- package/dist/lib/routes/TermsRoute.js +19 -0
- package/dist/lib/routes/TermsRoute.js.map +1 -0
- package/dist/lib/routes/VerifyEmailRoute.js +19 -0
- package/dist/lib/routes/VerifyEmailRoute.js.map +1 -0
- package/dist/lib/routes.js +79 -0
- package/dist/lib/routes.js.map +1 -0
- package/dist/lib/ssr-utils.js +29 -0
- package/dist/lib/ssr-utils.js.map +1 -0
- package/dist/lib/ssr.js +60 -0
- package/dist/lib/ssr.js.map +1 -0
- package/dist/lib/styles.css +2410 -0
- package/dist/lib/useExtensions-B5nX_8XD.js +155 -0
- package/dist/lib/useExtensions-B5nX_8XD.js.map +1 -0
- package/dist/logo.svg +12 -0
- package/package.json +84 -0
- package/src/components/AgentSelector.tsx +90 -0
- package/src/components/BranchModal.tsx +129 -0
- package/src/components/ClientOnly.tsx +27 -0
- package/src/components/ExportMenu.tsx +122 -0
- package/src/components/LoadingSkeletons.tsx +110 -0
- package/src/components/MCPCredentialsSection.tsx +309 -0
- package/src/components/MentionChip.tsx +149 -0
- package/src/components/MentionDropdown.tsx +175 -0
- package/src/components/MentionInput.tsx +293 -0
- package/src/components/MessageItem.tsx +300 -0
- package/src/components/MessageList.tsx +159 -0
- package/src/components/OAuthAppsSection.tsx +124 -0
- package/src/components/ProjectFolder.tsx +141 -0
- package/src/components/ProjectModal.tsx +296 -0
- package/src/components/SSRMessageList.tsx +153 -0
- package/src/components/SearchModal.tsx +173 -0
- package/src/components/SettingsModal.tsx +412 -0
- package/src/components/ShareModal.tsx +280 -0
- package/src/components/Sidebar.tsx +491 -0
- package/src/components/TeamSwitcher.tsx +273 -0
- package/src/components/ToolCallDisplay.tsx +473 -0
- package/src/components/ToolConfirmationModal.tsx +130 -0
- package/src/components/UsageChart.tsx +177 -0
- package/src/components/content/CodeBlock.tsx +69 -0
- package/src/components/content/MarkdownRenderer.tsx +64 -0
- package/src/components/content/SSRMarkdownRenderer.tsx +158 -0
- package/src/contexts/AuthContext.tsx +119 -0
- package/src/contexts/ConfigContext.tsx +214 -0
- package/src/contexts/ProjectContext.tsx +167 -0
- package/src/contexts/ServerConfigProvider.tsx +41 -0
- package/src/contexts/ServerThemeProvider.tsx +47 -0
- package/src/contexts/TeamContext.tsx +255 -0
- package/src/contexts/ThemeContext.tsx +113 -0
- package/src/extensions/index.ts +15 -0
- package/src/extensions/registry.ts +187 -0
- package/src/extensions/useExtensions.ts +52 -0
- package/src/hooks/useAppPath.ts +34 -0
- package/src/hooks/useBasePath.ts +13 -0
- package/src/hooks/useKeyboardShortcuts.ts +50 -0
- package/src/hooks/useMentionSearch.ts +106 -0
- package/src/index.tsx +116 -0
- package/src/layouts/MainLayout.tsx +98 -0
- package/src/pages/AcceptInvitePage.tsx +175 -0
- package/src/pages/AdminDashboardPage.tsx +362 -0
- package/src/pages/AdminTeamPage.tsx +304 -0
- package/src/pages/AdminTeamsPage.tsx +242 -0
- package/src/pages/AdminUsersPage.tsx +385 -0
- package/src/pages/ApiKeysPage.tsx +449 -0
- package/src/pages/ChatPage.tsx +310 -0
- package/src/pages/DocumentsPage.tsx +577 -0
- package/src/pages/LoginPage.tsx +232 -0
- package/src/pages/OAuthConsentPage.tsx +234 -0
- package/src/pages/PricingPage.tsx +314 -0
- package/src/pages/PrivacyPage.tsx +65 -0
- package/src/pages/RegisterPage.tsx +153 -0
- package/src/pages/ScheduledPromptsPage.tsx +702 -0
- package/src/pages/SharedThreadPage.tsx +116 -0
- package/src/pages/TeamSettingsPage.tsx +1085 -0
- package/src/pages/TermsPage.tsx +82 -0
- package/src/pages/VerifyEmailPage.tsx +202 -0
- package/src/routes/AcceptInviteRoute.tsx +24 -0
- package/src/routes/AdminDashboardRoute.tsx +24 -0
- package/src/routes/AdminTeamRoute.tsx +24 -0
- package/src/routes/AdminTeamsRoute.tsx +24 -0
- package/src/routes/AdminUsersRoute.tsx +24 -0
- package/src/routes/ApiKeysRoute.tsx +24 -0
- package/src/routes/AutomationsRoute.tsx +24 -0
- package/src/routes/ChatRoute.tsx +28 -0
- package/src/routes/DocumentsRoute.tsx +24 -0
- package/src/routes/OAuthConsentRoute.tsx +24 -0
- package/src/routes/PricingRoute.tsx +24 -0
- package/src/routes/PrivacyRoute.tsx +24 -0
- package/src/routes/TeamSettingsRoute.tsx +24 -0
- package/src/routes/TermsRoute.tsx +24 -0
- package/src/routes/VerifyEmailRoute.tsx +24 -0
- package/src/routes/index.ts +57 -0
- package/src/ssr-utils.tsx +84 -0
- package/src/ssr.ts +123 -0
- package/src/stores/chatStore.ts +670 -0
- package/src/styles/index.css +254 -0
- package/src/utils/api.ts +78 -0
- package/src/vite-env.d.ts +13 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { useConfig } from '../contexts/ConfigContext';
|
|
2
|
+
|
|
3
|
+
export default function TermsPage() {
|
|
4
|
+
const config = useConfig();
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<div className="min-h-screen bg-background py-12">
|
|
8
|
+
<div className="mx-auto max-w-3xl px-4">
|
|
9
|
+
<h1 className="mb-8 text-3xl font-bold text-text-primary">
|
|
10
|
+
Terms of Service
|
|
11
|
+
</h1>
|
|
12
|
+
|
|
13
|
+
<div className="prose prose-gray dark:prose-invert">
|
|
14
|
+
<p className="text-text-secondary">
|
|
15
|
+
Last updated: {new Date().toLocaleDateString()}
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<h2 className="mt-8 text-xl font-semibold text-text-primary">
|
|
19
|
+
1. Acceptance of Terms
|
|
20
|
+
</h2>
|
|
21
|
+
<p className="text-text-secondary">
|
|
22
|
+
By accessing and using {config.app.name}, you accept and agree to be
|
|
23
|
+
bound by the terms and provision of this agreement.
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
<h2 className="mt-8 text-xl font-semibold text-text-primary">
|
|
27
|
+
2. Use of Service
|
|
28
|
+
</h2>
|
|
29
|
+
<p className="text-text-secondary">
|
|
30
|
+
You agree to use the service only for lawful purposes and in
|
|
31
|
+
accordance with these Terms. You agree not to use the service in any
|
|
32
|
+
way that could damage, disable, or impair the service.
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
<h2 className="mt-8 text-xl font-semibold text-text-primary">
|
|
36
|
+
3. User Accounts
|
|
37
|
+
</h2>
|
|
38
|
+
<p className="text-text-secondary">
|
|
39
|
+
When you create an account with us, you must provide accurate,
|
|
40
|
+
complete, and current information. You are responsible for
|
|
41
|
+
safeguarding the password and for all activities that occur under
|
|
42
|
+
your account.
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
<h2 className="mt-8 text-xl font-semibold text-text-primary">
|
|
46
|
+
4. Intellectual Property
|
|
47
|
+
</h2>
|
|
48
|
+
<p className="text-text-secondary">
|
|
49
|
+
The service and its original content, features, and functionality
|
|
50
|
+
are owned by {config.app.name} and are protected by international
|
|
51
|
+
copyright, trademark, and other intellectual property laws.
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
<h2 className="mt-8 text-xl font-semibold text-text-primary">
|
|
55
|
+
5. Limitation of Liability
|
|
56
|
+
</h2>
|
|
57
|
+
<p className="text-text-secondary">
|
|
58
|
+
In no event shall {config.app.name}, nor its directors, employees,
|
|
59
|
+
partners, agents, suppliers, or affiliates, be liable for any
|
|
60
|
+
indirect, incidental, special, consequential, or punitive damages.
|
|
61
|
+
</p>
|
|
62
|
+
|
|
63
|
+
<h2 className="mt-8 text-xl font-semibold text-text-primary">
|
|
64
|
+
6. Changes to Terms
|
|
65
|
+
</h2>
|
|
66
|
+
<p className="text-text-secondary">
|
|
67
|
+
We reserve the right to modify or replace these Terms at any time.
|
|
68
|
+
If a revision is material, we will try to provide at least 30 days
|
|
69
|
+
notice prior to any new terms taking effect.
|
|
70
|
+
</p>
|
|
71
|
+
|
|
72
|
+
<h2 className="mt-8 text-xl font-semibold text-text-primary">
|
|
73
|
+
7. Contact Us
|
|
74
|
+
</h2>
|
|
75
|
+
<p className="text-text-secondary">
|
|
76
|
+
If you have any questions about these Terms, please contact us.
|
|
77
|
+
</p>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { useNavigate } from 'react-router';
|
|
3
|
+
import { useAuth } from '../contexts/AuthContext';
|
|
4
|
+
import { useConfig } from '../contexts/ConfigContext';
|
|
5
|
+
import { useTheme } from '../contexts/ThemeContext';
|
|
6
|
+
import { useAppPath } from '../hooks/useAppPath';
|
|
7
|
+
|
|
8
|
+
export default function VerifyEmailPage() {
|
|
9
|
+
const navigate = useNavigate();
|
|
10
|
+
const appPath = useAppPath();
|
|
11
|
+
const { user, verifyEmail, resendVerification, logout } = useAuth();
|
|
12
|
+
const config = useConfig();
|
|
13
|
+
const { theme } = useTheme();
|
|
14
|
+
|
|
15
|
+
const [code, setCode] = useState('');
|
|
16
|
+
const [error, setError] = useState('');
|
|
17
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
18
|
+
const [isResending, setIsResending] = useState(false);
|
|
19
|
+
const [resendCooldown, setResendCooldown] = useState(0);
|
|
20
|
+
const [hasRequestedInitialCode, setHasRequestedInitialCode] = useState(false);
|
|
21
|
+
|
|
22
|
+
const inputRef = useRef<HTMLInputElement>(null);
|
|
23
|
+
|
|
24
|
+
// Focus input on mount
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
inputRef.current?.focus();
|
|
27
|
+
}, []);
|
|
28
|
+
|
|
29
|
+
// Request initial verification code for existing unverified users
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (user && !user.emailVerified && !hasRequestedInitialCode) {
|
|
32
|
+
setHasRequestedInitialCode(true);
|
|
33
|
+
// Send initial code on page load
|
|
34
|
+
handleResend(true);
|
|
35
|
+
}
|
|
36
|
+
}, [user, hasRequestedInitialCode]);
|
|
37
|
+
|
|
38
|
+
// Redirect if user is verified or not logged in
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if (!user) {
|
|
41
|
+
navigate('/login', { replace: true });
|
|
42
|
+
} else if (user.emailVerified) {
|
|
43
|
+
navigate(appPath('/'), { replace: true });
|
|
44
|
+
}
|
|
45
|
+
}, [user, navigate, appPath]);
|
|
46
|
+
|
|
47
|
+
// Countdown timer for resend cooldown
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (resendCooldown > 0) {
|
|
50
|
+
const timer = setTimeout(() => setResendCooldown(resendCooldown - 1), 1000);
|
|
51
|
+
return () => clearTimeout(timer);
|
|
52
|
+
}
|
|
53
|
+
}, [resendCooldown]);
|
|
54
|
+
|
|
55
|
+
async function handleSubmit(e: React.FormEvent) {
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
setError('');
|
|
58
|
+
|
|
59
|
+
if (code.length < 6) {
|
|
60
|
+
setError('Please enter the 6-digit code');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
setIsLoading(true);
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
await verifyEmail(code);
|
|
68
|
+
navigate(appPath('/'), { replace: true });
|
|
69
|
+
} catch (err) {
|
|
70
|
+
setError(err instanceof Error ? err.message : 'Verification failed');
|
|
71
|
+
} finally {
|
|
72
|
+
setIsLoading(false);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function handleResend(silent = false) {
|
|
77
|
+
if (resendCooldown > 0) return;
|
|
78
|
+
|
|
79
|
+
if (!silent) {
|
|
80
|
+
setError('');
|
|
81
|
+
setIsResending(true);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
await resendVerification();
|
|
86
|
+
setResendCooldown(60); // 60 second cooldown
|
|
87
|
+
if (!silent) {
|
|
88
|
+
setCode(''); // Clear the input for new code
|
|
89
|
+
}
|
|
90
|
+
} catch (err) {
|
|
91
|
+
if (!silent) {
|
|
92
|
+
setError(err instanceof Error ? err.message : 'Failed to resend code');
|
|
93
|
+
}
|
|
94
|
+
} finally {
|
|
95
|
+
if (!silent) {
|
|
96
|
+
setIsResending(false);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function handleLogout() {
|
|
102
|
+
await logout();
|
|
103
|
+
navigate('/login', { replace: true });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Handle input - only allow numeric characters
|
|
107
|
+
function handleCodeChange(e: React.ChangeEvent<HTMLInputElement>) {
|
|
108
|
+
const value = e.target.value.replace(/\D/g, '').slice(0, 6);
|
|
109
|
+
setCode(value);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!user) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<div className="flex min-h-screen items-center justify-center bg-background p-4">
|
|
118
|
+
<div className="w-full max-w-md">
|
|
119
|
+
<div className="mb-8 text-center">
|
|
120
|
+
{config.ui.logo && (
|
|
121
|
+
<img
|
|
122
|
+
src={typeof config.ui.logo === 'string' ? config.ui.logo : (theme === 'dark' ? config.ui.logo.dark : config.ui.logo.light)}
|
|
123
|
+
alt={config.app.name}
|
|
124
|
+
className="mx-auto mb-4 h-16 w-16 rounded-lg object-contain"
|
|
125
|
+
/>
|
|
126
|
+
)}
|
|
127
|
+
<h1 className="text-3xl font-bold text-text-primary">Verify your email</h1>
|
|
128
|
+
<p className="mt-2 text-text-secondary">
|
|
129
|
+
We sent a verification code to
|
|
130
|
+
</p>
|
|
131
|
+
<p className="mt-1 font-medium text-text-primary">{user.email}</p>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
{error && (
|
|
135
|
+
<div className="mb-4 rounded-lg bg-error/10 p-3 text-sm text-error">
|
|
136
|
+
{error}
|
|
137
|
+
</div>
|
|
138
|
+
)}
|
|
139
|
+
|
|
140
|
+
<form onSubmit={handleSubmit} className="space-y-6">
|
|
141
|
+
<div>
|
|
142
|
+
<label
|
|
143
|
+
htmlFor="code"
|
|
144
|
+
className="block text-sm font-medium text-text-primary text-center mb-2"
|
|
145
|
+
>
|
|
146
|
+
Enter 6-digit code
|
|
147
|
+
</label>
|
|
148
|
+
<input
|
|
149
|
+
ref={inputRef}
|
|
150
|
+
type="text"
|
|
151
|
+
id="code"
|
|
152
|
+
value={code}
|
|
153
|
+
onChange={handleCodeChange}
|
|
154
|
+
inputMode="numeric"
|
|
155
|
+
autoComplete="one-time-code"
|
|
156
|
+
placeholder="000000"
|
|
157
|
+
maxLength={6}
|
|
158
|
+
className="w-full rounded-lg border border-input-border bg-input-background px-4 py-4 text-center text-3xl font-bold tracking-[0.5em] text-text-primary focus:border-primary focus:outline-none"
|
|
159
|
+
style={{ letterSpacing: '0.5em' }}
|
|
160
|
+
/>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<button
|
|
164
|
+
type="submit"
|
|
165
|
+
disabled={isLoading || code.length < 6}
|
|
166
|
+
className="w-full rounded-lg bg-primary px-4 py-3 font-medium text-white hover:bg-primary-hover disabled:opacity-50"
|
|
167
|
+
>
|
|
168
|
+
{isLoading ? 'Verifying...' : 'Verify Email'}
|
|
169
|
+
</button>
|
|
170
|
+
</form>
|
|
171
|
+
|
|
172
|
+
<div className="mt-6 text-center">
|
|
173
|
+
<p className="text-sm text-text-secondary">
|
|
174
|
+
Didn't receive the code?{' '}
|
|
175
|
+
{resendCooldown > 0 ? (
|
|
176
|
+
<span className="text-text-muted">
|
|
177
|
+
Resend in {resendCooldown}s
|
|
178
|
+
</span>
|
|
179
|
+
) : (
|
|
180
|
+
<button
|
|
181
|
+
onClick={() => handleResend()}
|
|
182
|
+
disabled={isResending}
|
|
183
|
+
className="text-primary hover:underline disabled:opacity-50"
|
|
184
|
+
>
|
|
185
|
+
{isResending ? 'Sending...' : 'Resend code'}
|
|
186
|
+
</button>
|
|
187
|
+
)}
|
|
188
|
+
</p>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div className="mt-8 text-center">
|
|
192
|
+
<button
|
|
193
|
+
onClick={handleLogout}
|
|
194
|
+
className="text-sm text-text-muted hover:text-text-secondary"
|
|
195
|
+
>
|
|
196
|
+
Sign out and use a different email
|
|
197
|
+
</button>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
);
|
|
202
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accept Invite Route - Team invitation acceptance
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import AcceptInvitePage from '../pages/AcceptInvitePage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Accept Invitation' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function AcceptInviteRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<AcceptInvitePage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Dashboard Route - Admin overview
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import AdminDashboardPage from '../pages/AdminDashboardPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Admin Dashboard' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function AdminDashboardRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<AdminDashboardPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Team Route - Single team management
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import AdminTeamPage from '../pages/AdminTeamPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Admin - Team Details' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function AdminTeamRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<AdminTeamPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Teams Route - Team list management
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import AdminTeamsPage from '../pages/AdminTeamsPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Admin - Teams' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function AdminTeamsRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<AdminTeamsPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Users Route - User management
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import AdminUsersPage from '../pages/AdminUsersPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Admin - Users' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function AdminUsersRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<AdminUsersPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Keys Route - User API key management
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import ApiKeysPage from '../pages/ApiKeysPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'API Keys' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function ApiKeysRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<ApiKeysPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automations Route - Scheduled prompts management
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import ScheduledPromptsPage from '../pages/ScheduledPromptsPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Automations' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function AutomationsRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<ScheduledPromptsPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Route - Main chat interface with sidebar
|
|
3
|
+
* Wraps ChatPage with ChatProviders and MainLayout
|
|
4
|
+
*/
|
|
5
|
+
import { ChatProviders } from '../index';
|
|
6
|
+
import MainLayout from '../layouts/MainLayout';
|
|
7
|
+
import ChatPage from '../pages/ChatPage';
|
|
8
|
+
import { ChatLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
9
|
+
|
|
10
|
+
export function meta() {
|
|
11
|
+
return [{ title: 'Chat' }];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function links() {
|
|
15
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default function ChatRoute() {
|
|
19
|
+
return (
|
|
20
|
+
<ChatProviders>
|
|
21
|
+
<MainLayout>
|
|
22
|
+
<ChatPage />
|
|
23
|
+
</MainLayout>
|
|
24
|
+
</ChatProviders>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { ChatLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documents Route - Document management
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import DocumentsPage from '../pages/DocumentsPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Documents' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function DocumentsRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<DocumentsPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Consent Route - OAuth authorization consent
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import OAuthConsentPage from '../pages/OAuthConsentPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'OAuth Consent' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function OAuthConsentRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<OAuthConsentPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pricing Route - Pricing/plans page
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import PricingPage from '../pages/PricingPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Pricing' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function PricingRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<PricingPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Privacy Route - Privacy policy page
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import PrivacyPage from '../pages/PrivacyPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Privacy Policy' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function PrivacyRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<PrivacyPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team Settings Route - Team management
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import TeamSettingsPage from '../pages/TeamSettingsPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Team Settings' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function TeamSettingsRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<TeamSettingsPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terms Route - Terms of service page
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import TermsPage from '../pages/TermsPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Terms of Service' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function TermsRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<TermsPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Email Route - Email verification page
|
|
3
|
+
*/
|
|
4
|
+
import { ChatProviders } from '../index';
|
|
5
|
+
import VerifyEmailPage from '../pages/VerifyEmailPage';
|
|
6
|
+
import { SimpleLoadingSkeleton } from '../components/LoadingSkeletons';
|
|
7
|
+
|
|
8
|
+
export function meta() {
|
|
9
|
+
return [{ title: 'Verify Email' }];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function links() {
|
|
13
|
+
return [{ rel: 'stylesheet', href: '/node_modules/@chaaskit/client/dist/lib/styles.css' }];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default function VerifyEmailRoute() {
|
|
17
|
+
return (
|
|
18
|
+
<ChatProviders>
|
|
19
|
+
<VerifyEmailPage />
|
|
20
|
+
</ChatProviders>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { SimpleLoadingSkeleton as LoadingSkeleton };
|