@digilogiclabs/create-saas-app 2.8.0 → 2.9.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/.tsbuildinfo +1 -1
- package/dist/generators/template-generator.js +8 -8
- package/dist/generators/template-generator.js.map +1 -1
- package/dist/templates/shared/quality/web/src/__tests__/accessibility.test.tsx +3 -3
- package/dist/templates/web/ai-platform/template/src/app/page.tsx +207 -207
- package/dist/templates/web/base/template/package.json +1 -3
- package/dist/templates/web/base/template/src/app/auth/callback/route.ts +32 -18
- package/dist/templates/web/base/template/src/app/dashboard/page.tsx +6 -43
- package/dist/templates/web/base/template/src/app/globals.css +158 -157
- package/dist/templates/web/base/template/src/app/page.tsx +2 -2
- package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +800 -800
- package/dist/templates/web/ui-auth/template/src/app/globals.css +96 -95
- package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +109 -109
- package/dist/templates/web/ui-auth/template/src/app/page.tsx +4 -3
- package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -128
- package/dist/templates/web/ui-auth-ai/template/src/app/globals.css +35 -40
- package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +1 -0
- package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +3 -3
- package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +10 -49
- package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +800 -800
- package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +212 -211
- package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -109
- package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +350 -350
- package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +506 -506
- package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -128
- package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +143 -143
- package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +184 -184
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +143 -233
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +10 -50
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +800 -800
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +97 -96
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +325 -364
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +1 -1
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +389 -532
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +644 -644
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +119 -163
- package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +158 -201
- package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +1 -2
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +10 -51
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +97 -96
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +402 -403
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +143 -143
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +184 -184
- package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +229 -228
- package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +1 -1
- package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +4 -7
- package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +1 -1
- package/dist/templates/web/ui-only/template/src/app/globals.css +43 -42
- package/package.json +1 -1
- package/src/templates/shared/quality/web/src/__tests__/accessibility.test.tsx +3 -3
- package/src/templates/web/ai-platform/template/src/app/page.tsx +207 -207
- package/src/templates/web/base/template/package.json +1 -3
- package/src/templates/web/base/template/src/app/auth/callback/route.ts +32 -18
- package/src/templates/web/base/template/src/app/dashboard/page.tsx +6 -43
- package/src/templates/web/base/template/src/app/globals.css +158 -157
- package/src/templates/web/base/template/src/app/page.tsx +2 -2
- package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +800 -800
- package/src/templates/web/ui-auth/template/src/app/globals.css +96 -95
- package/src/templates/web/ui-auth/template/src/app/login/page.tsx +109 -109
- package/src/templates/web/ui-auth/template/src/app/page.tsx +4 -3
- package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -128
- package/src/templates/web/ui-auth-ai/template/src/app/globals.css +35 -40
- package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +1 -0
- package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +3 -3
- package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +10 -49
- package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +800 -800
- package/src/templates/web/ui-auth-payments/template/src/app/globals.css +212 -211
- package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -109
- package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +350 -350
- package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +506 -506
- package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -128
- package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +143 -143
- package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +184 -184
- package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +143 -233
- package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +10 -50
- package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +800 -800
- package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +97 -96
- package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +325 -364
- package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +1 -1
- package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +389 -532
- package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +644 -644
- package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +119 -163
- package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +158 -201
- package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +1 -2
- package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +10 -51
- package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +97 -96
- package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +402 -403
- package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +143 -143
- package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +184 -184
- package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +229 -228
- package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +1 -1
- package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +4 -7
- package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +1 -1
- package/src/templates/web/ui-only/template/src/app/globals.css +43 -42
|
@@ -1,532 +1,389 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import React, { useState } from 'react'
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
placeholder="Enter your
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
label
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
</
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
<
|
|
261
|
-
|
|
262
|
-
type="
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
<
|
|
282
|
-
|
|
283
|
-
type="
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
</
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
className="
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
{
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
label="Enable Content Filters"
|
|
391
|
-
options={[
|
|
392
|
-
{ value: 'violence', label: 'Violence & Gore' },
|
|
393
|
-
{ value: 'adult', label: 'Adult Content' },
|
|
394
|
-
{ value: 'hate', label: 'Hate Speech' },
|
|
395
|
-
{ value: 'harmful', label: 'Harmful Instructions' },
|
|
396
|
-
{ value: 'personal', label: 'Personal Information' }
|
|
397
|
-
]}
|
|
398
|
-
defaultValue={['violence', 'adult', 'hate', 'harmful', 'personal']}
|
|
399
|
-
helpText="These filters help ensure generated content meets community standards"
|
|
400
|
-
/>
|
|
401
|
-
|
|
402
|
-
<FormField
|
|
403
|
-
name="allowCodeGeneration"
|
|
404
|
-
type="checkbox"
|
|
405
|
-
label="Allow Code Generation"
|
|
406
|
-
defaultValue={true}
|
|
407
|
-
helpText="Enable AI to generate code snippets and programming examples"
|
|
408
|
-
/>
|
|
409
|
-
</FormSection>
|
|
410
|
-
|
|
411
|
-
<FormSection
|
|
412
|
-
title="Usage & Limits"
|
|
413
|
-
description="Manage your AI usage preferences"
|
|
414
|
-
collapsible={true}
|
|
415
|
-
>
|
|
416
|
-
<FormField
|
|
417
|
-
name="monthlyLimit"
|
|
418
|
-
type="number"
|
|
419
|
-
label="Monthly Request Limit"
|
|
420
|
-
placeholder="Enter limit (0 for unlimited)"
|
|
421
|
-
min={0}
|
|
422
|
-
defaultValue={0}
|
|
423
|
-
helpText="Set a limit to control your usage and costs"
|
|
424
|
-
/>
|
|
425
|
-
|
|
426
|
-
<FormField
|
|
427
|
-
name="lowUsageAlerts"
|
|
428
|
-
type="checkbox"
|
|
429
|
-
label="Low Usage Alerts"
|
|
430
|
-
defaultValue={true}
|
|
431
|
-
helpText="Get notified when you're approaching your usage limits"
|
|
432
|
-
/>
|
|
433
|
-
</FormSection>
|
|
434
|
-
|
|
435
|
-
<div className="flex justify-end">
|
|
436
|
-
<Button type="submit" disabled={isLoading} className="flex items-center gap-2">
|
|
437
|
-
<Brain className="w-4 h-4" />
|
|
438
|
-
{isLoading ? 'Saving...' : 'Save AI Preferences'}
|
|
439
|
-
</Button>
|
|
440
|
-
</div>
|
|
441
|
-
</FormBuilder>
|
|
442
|
-
</FormProvider>
|
|
443
|
-
</TabsContent>
|
|
444
|
-
|
|
445
|
-
{/* Notification Settings */}
|
|
446
|
-
<TabsContent value="notifications" className="space-y-6">
|
|
447
|
-
<FormProvider>
|
|
448
|
-
<FormBuilder
|
|
449
|
-
onSubmit={(formData) => handleSaveSettings(formData, 'notifications')}
|
|
450
|
-
autoSave={true}
|
|
451
|
-
className="space-y-6"
|
|
452
|
-
>
|
|
453
|
-
<FormSection
|
|
454
|
-
title="Email Notifications"
|
|
455
|
-
description="Choose what emails you want to receive"
|
|
456
|
-
collapsible={false}
|
|
457
|
-
>
|
|
458
|
-
<FormField
|
|
459
|
-
name="emailNotifications"
|
|
460
|
-
type="multiSelect"
|
|
461
|
-
label="Email Preferences"
|
|
462
|
-
options={[
|
|
463
|
-
{ value: 'account', label: 'Account & Security Updates' },
|
|
464
|
-
{ value: 'billing', label: 'Billing & Payment Notifications' },
|
|
465
|
-
{ value: 'features', label: 'New Features & Updates' },
|
|
466
|
-
{ value: 'tips', label: 'Tips & Best Practices' },
|
|
467
|
-
{ value: 'marketing', label: 'Marketing & Promotional Emails' }
|
|
468
|
-
]}
|
|
469
|
-
defaultValue={['account', 'billing', 'features']}
|
|
470
|
-
/>
|
|
471
|
-
|
|
472
|
-
<FormField
|
|
473
|
-
name="emailFrequency"
|
|
474
|
-
type="select"
|
|
475
|
-
label="Email Frequency"
|
|
476
|
-
options={[
|
|
477
|
-
{ value: 'immediate', label: 'Immediate' },
|
|
478
|
-
{ value: 'daily', label: 'Daily Digest' },
|
|
479
|
-
{ value: 'weekly', label: 'Weekly Summary' },
|
|
480
|
-
{ value: 'never', label: 'Never (Critical only)' }
|
|
481
|
-
]}
|
|
482
|
-
defaultValue="daily"
|
|
483
|
-
validation={['required']}
|
|
484
|
-
/>
|
|
485
|
-
</FormSection>
|
|
486
|
-
|
|
487
|
-
<FormSection
|
|
488
|
-
title="Push Notifications"
|
|
489
|
-
description="Browser and mobile push notifications"
|
|
490
|
-
collapsible={true}
|
|
491
|
-
>
|
|
492
|
-
<FormField
|
|
493
|
-
name="pushNotifications"
|
|
494
|
-
type="checkbox"
|
|
495
|
-
label="Enable Push Notifications"
|
|
496
|
-
defaultValue={true}
|
|
497
|
-
helpText="Receive real-time notifications in your browser"
|
|
498
|
-
/>
|
|
499
|
-
|
|
500
|
-
<FormField
|
|
501
|
-
name="pushTypes"
|
|
502
|
-
type="multiSelect"
|
|
503
|
-
label="Push Notification Types"
|
|
504
|
-
options={[
|
|
505
|
-
{ value: 'generation-complete', label: 'AI Generation Complete' },
|
|
506
|
-
{ value: 'usage-alerts', label: 'Usage Limit Alerts' },
|
|
507
|
-
{ value: 'team-invites', label: 'Team Invitations' },
|
|
508
|
-
{ value: 'system-maintenance', label: 'System Maintenance' }
|
|
509
|
-
]}
|
|
510
|
-
defaultValue={['generation-complete', 'usage-alerts']}
|
|
511
|
-
dependsOn="pushNotifications"
|
|
512
|
-
/>
|
|
513
|
-
</FormSection>
|
|
514
|
-
|
|
515
|
-
<div className="flex justify-end">
|
|
516
|
-
<Button type="submit" disabled={isLoading} className="flex items-center gap-2">
|
|
517
|
-
<Bell className="w-4 h-4" />
|
|
518
|
-
{isLoading ? 'Saving...' : 'Save Notification Preferences'}
|
|
519
|
-
</Button>
|
|
520
|
-
</div>
|
|
521
|
-
</FormBuilder>
|
|
522
|
-
</FormProvider>
|
|
523
|
-
</TabsContent>
|
|
524
|
-
|
|
525
|
-
{/* More tabs would continue here... */}
|
|
526
|
-
</Tabs>
|
|
527
|
-
</Card>
|
|
528
|
-
</MobileContainer>
|
|
529
|
-
</main>
|
|
530
|
-
</PageTransition>
|
|
531
|
-
)
|
|
532
|
-
}
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import React, { useState } from 'react'
|
|
4
|
+
import {
|
|
5
|
+
Button,
|
|
6
|
+
Card,
|
|
7
|
+
Input,
|
|
8
|
+
Label,
|
|
9
|
+
MobileContainer,
|
|
10
|
+
PageTransition,
|
|
11
|
+
Tabs,
|
|
12
|
+
TabsList,
|
|
13
|
+
TabsTrigger,
|
|
14
|
+
TabsContent
|
|
15
|
+
} from '@digilogiclabs/saas-factory-ui'
|
|
16
|
+
import { useAuth } from '@digilogiclabs/app-sdk'
|
|
17
|
+
import { useRouter } from 'next/navigation'
|
|
18
|
+
import {
|
|
19
|
+
User,
|
|
20
|
+
Shield,
|
|
21
|
+
Brain,
|
|
22
|
+
Bell,
|
|
23
|
+
Palette,
|
|
24
|
+
Users,
|
|
25
|
+
ArrowLeft,
|
|
26
|
+
Save
|
|
27
|
+
} from 'lucide-react'
|
|
28
|
+
import Link from 'next/link'
|
|
29
|
+
|
|
30
|
+
export default function SettingsPage() {
|
|
31
|
+
const { user } = useAuth()
|
|
32
|
+
const router = useRouter()
|
|
33
|
+
const [activeTab, setActiveTab] = useState('profile')
|
|
34
|
+
const [isLoading, setIsLoading] = useState(false)
|
|
35
|
+
|
|
36
|
+
if (!user) {
|
|
37
|
+
router.push('/login')
|
|
38
|
+
return null
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const handleSaveSettings = async (e: React.FormEvent, section: string) => {
|
|
42
|
+
e.preventDefault()
|
|
43
|
+
setIsLoading(true)
|
|
44
|
+
const formData = new FormData(e.target as HTMLFormElement)
|
|
45
|
+
console.log(`Saving ${section} settings:`, Object.fromEntries(formData))
|
|
46
|
+
await new Promise(resolve => setTimeout(resolve, 1000))
|
|
47
|
+
setIsLoading(false)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<PageTransition type="slide" direction="up" duration={300}>
|
|
52
|
+
<main className="min-h-screen bg-gradient-to-br from-primary/5 via-background to-secondary/5">
|
|
53
|
+
<MobileContainer className="py-8">
|
|
54
|
+
{/* Header */}
|
|
55
|
+
<div className="flex items-center justify-between mb-8">
|
|
56
|
+
<div className="flex items-center gap-4">
|
|
57
|
+
<Link href="/dashboard" className="p-2 rounded-xl bg-white/10 backdrop-blur-md border border-white/20 hover:scale-105 transition-transform">
|
|
58
|
+
<ArrowLeft className="w-5 h-5" />
|
|
59
|
+
</Link>
|
|
60
|
+
<div>
|
|
61
|
+
<h1 className="text-2xl font-bold">Settings</h1>
|
|
62
|
+
<p className="text-gray-600 dark:text-gray-300">Manage your account and preferences</p>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<Card className="max-w-6xl mx-auto">
|
|
68
|
+
<Tabs value={activeTab} onValueChange={setActiveTab} className="w-full">
|
|
69
|
+
<TabsList className="grid w-full grid-cols-6 mb-8">
|
|
70
|
+
<TabsTrigger value="profile" className="flex items-center gap-2">
|
|
71
|
+
<User className="w-4 h-4" />
|
|
72
|
+
<span className="hidden sm:inline">Profile</span>
|
|
73
|
+
</TabsTrigger>
|
|
74
|
+
<TabsTrigger value="security" className="flex items-center gap-2">
|
|
75
|
+
<Shield className="w-4 h-4" />
|
|
76
|
+
<span className="hidden sm:inline">Security</span>
|
|
77
|
+
</TabsTrigger>
|
|
78
|
+
<TabsTrigger value="ai" className="flex items-center gap-2">
|
|
79
|
+
<Brain className="w-4 h-4" />
|
|
80
|
+
<span className="hidden sm:inline">AI</span>
|
|
81
|
+
</TabsTrigger>
|
|
82
|
+
<TabsTrigger value="notifications" className="flex items-center gap-2">
|
|
83
|
+
<Bell className="w-4 h-4" />
|
|
84
|
+
<span className="hidden sm:inline">Alerts</span>
|
|
85
|
+
</TabsTrigger>
|
|
86
|
+
<TabsTrigger value="appearance" className="flex items-center gap-2">
|
|
87
|
+
<Palette className="w-4 h-4" />
|
|
88
|
+
<span className="hidden sm:inline">Theme</span>
|
|
89
|
+
</TabsTrigger>
|
|
90
|
+
<TabsTrigger value="team" className="flex items-center gap-2">
|
|
91
|
+
<Users className="w-4 h-4" />
|
|
92
|
+
<span className="hidden sm:inline">Team</span>
|
|
93
|
+
</TabsTrigger>
|
|
94
|
+
</TabsList>
|
|
95
|
+
|
|
96
|
+
{/* Profile Settings */}
|
|
97
|
+
<TabsContent value="profile" className="space-y-6 p-6">
|
|
98
|
+
<form onSubmit={(e) => handleSaveSettings(e, 'profile')} className="space-y-6">
|
|
99
|
+
<div>
|
|
100
|
+
<h3 className="text-lg font-semibold mb-1">Personal Information</h3>
|
|
101
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Update your basic profile information</p>
|
|
102
|
+
<div className="space-y-4">
|
|
103
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
104
|
+
<div>
|
|
105
|
+
<Label htmlFor="firstName">First Name</Label>
|
|
106
|
+
<Input id="firstName" name="firstName" placeholder="Enter your first name" required />
|
|
107
|
+
</div>
|
|
108
|
+
<div>
|
|
109
|
+
<Label htmlFor="lastName">Last Name</Label>
|
|
110
|
+
<Input id="lastName" name="lastName" placeholder="Enter your last name" required />
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
<div>
|
|
114
|
+
<Label htmlFor="email">Email Address</Label>
|
|
115
|
+
<Input id="email" name="email" type="email" placeholder="Enter your email" defaultValue={user.email || ''} required />
|
|
116
|
+
<p className="text-xs text-gray-500 mt-1">Changing your email will require verification</p>
|
|
117
|
+
</div>
|
|
118
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
119
|
+
<div>
|
|
120
|
+
<Label htmlFor="company">Company</Label>
|
|
121
|
+
<Input id="company" name="company" placeholder="Enter your company name" />
|
|
122
|
+
</div>
|
|
123
|
+
<div>
|
|
124
|
+
<Label htmlFor="jobTitle">Job Title</Label>
|
|
125
|
+
<Input id="jobTitle" name="jobTitle" placeholder="Enter your job title" />
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
<div>
|
|
129
|
+
<Label htmlFor="bio">Bio</Label>
|
|
130
|
+
<textarea id="bio" name="bio" placeholder="Tell us about yourself..." rows={4} className="w-full p-3 border rounded-lg bg-background" />
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
<div>
|
|
136
|
+
<h3 className="text-lg font-semibold mb-1">Contact Information</h3>
|
|
137
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">How we can reach you</p>
|
|
138
|
+
<div className="space-y-4">
|
|
139
|
+
<div>
|
|
140
|
+
<Label htmlFor="phone">Phone Number</Label>
|
|
141
|
+
<Input id="phone" name="phone" type="tel" placeholder="+1 (555) 123-4567" />
|
|
142
|
+
</div>
|
|
143
|
+
<div>
|
|
144
|
+
<Label htmlFor="timezone">Timezone</Label>
|
|
145
|
+
<select id="timezone" name="timezone" className="w-full p-3 border rounded-lg bg-background">
|
|
146
|
+
<option value="America/New_York">Eastern Time (ET)</option>
|
|
147
|
+
<option value="America/Chicago">Central Time (CT)</option>
|
|
148
|
+
<option value="America/Denver">Mountain Time (MT)</option>
|
|
149
|
+
<option value="America/Los_Angeles">Pacific Time (PT)</option>
|
|
150
|
+
<option value="Europe/London">London (GMT)</option>
|
|
151
|
+
<option value="Europe/Paris">Paris (CET)</option>
|
|
152
|
+
<option value="Asia/Tokyo">Tokyo (JST)</option>
|
|
153
|
+
<option value="Australia/Sydney">Sydney (AEST)</option>
|
|
154
|
+
</select>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div className="flex justify-end">
|
|
160
|
+
<Button type="submit" disabled={isLoading} className="flex items-center gap-2">
|
|
161
|
+
<Save className="w-4 h-4" />
|
|
162
|
+
{isLoading ? 'Saving...' : 'Save Changes'}
|
|
163
|
+
</Button>
|
|
164
|
+
</div>
|
|
165
|
+
</form>
|
|
166
|
+
</TabsContent>
|
|
167
|
+
|
|
168
|
+
{/* Security Settings */}
|
|
169
|
+
<TabsContent value="security" className="space-y-6 p-6">
|
|
170
|
+
<form onSubmit={(e) => handleSaveSettings(e, 'security')} className="space-y-6">
|
|
171
|
+
<div>
|
|
172
|
+
<h3 className="text-lg font-semibold mb-1">Password & Authentication</h3>
|
|
173
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Manage your login credentials</p>
|
|
174
|
+
<div className="space-y-4">
|
|
175
|
+
<div>
|
|
176
|
+
<Label htmlFor="currentPassword">Current Password</Label>
|
|
177
|
+
<Input id="currentPassword" name="currentPassword" type="password" placeholder="Enter your current password" required />
|
|
178
|
+
</div>
|
|
179
|
+
<div>
|
|
180
|
+
<Label htmlFor="newPassword">New Password</Label>
|
|
181
|
+
<Input id="newPassword" name="newPassword" type="password" placeholder="Enter a new password" />
|
|
182
|
+
<p className="text-xs text-gray-500 mt-1">Password must be at least 8 characters with uppercase, lowercase, and number</p>
|
|
183
|
+
</div>
|
|
184
|
+
<div>
|
|
185
|
+
<Label htmlFor="confirmNewPassword">Confirm New Password</Label>
|
|
186
|
+
<Input id="confirmNewPassword" name="confirmNewPassword" type="password" placeholder="Confirm your new password" />
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div>
|
|
192
|
+
<h3 className="text-lg font-semibold mb-1">Two-Factor Authentication</h3>
|
|
193
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Add an extra layer of security</p>
|
|
194
|
+
<div className="space-y-3">
|
|
195
|
+
<label className="flex items-center gap-2">
|
|
196
|
+
<input type="checkbox" name="enableTwoFactor" className="rounded" />
|
|
197
|
+
<span className="text-sm">Enable Two-Factor Authentication</span>
|
|
198
|
+
</label>
|
|
199
|
+
<div className="space-y-2 ml-6">
|
|
200
|
+
<label className="flex items-center gap-2">
|
|
201
|
+
<input type="radio" name="twoFactorMethod" value="sms" />
|
|
202
|
+
<span className="text-sm">SMS Text Message</span>
|
|
203
|
+
</label>
|
|
204
|
+
<label className="flex items-center gap-2">
|
|
205
|
+
<input type="radio" name="twoFactorMethod" value="app" defaultChecked />
|
|
206
|
+
<span className="text-sm">Authenticator App (Recommended)</span>
|
|
207
|
+
</label>
|
|
208
|
+
<label className="flex items-center gap-2">
|
|
209
|
+
<input type="radio" name="twoFactorMethod" value="email" />
|
|
210
|
+
<span className="text-sm">Email</span>
|
|
211
|
+
</label>
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
<div>
|
|
217
|
+
<h3 className="text-lg font-semibold mb-1">Login Sessions</h3>
|
|
218
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Manage your active sessions</p>
|
|
219
|
+
<div className="p-4 border rounded-lg mb-4">
|
|
220
|
+
<div className="flex justify-between items-start">
|
|
221
|
+
<div>
|
|
222
|
+
<div className="font-medium">Current Session</div>
|
|
223
|
+
<div className="text-sm text-gray-600 dark:text-gray-300">
|
|
224
|
+
Chrome on Mac • Active now
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
<span className="text-xs bg-green-100 text-green-800 px-2 py-1 rounded">Current</span>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
<Button variant="outline" size="sm" type="button">
|
|
231
|
+
Sign Out All Other Sessions
|
|
232
|
+
</Button>
|
|
233
|
+
</div>
|
|
234
|
+
|
|
235
|
+
<div className="flex justify-end">
|
|
236
|
+
<Button type="submit" disabled={isLoading} className="flex items-center gap-2">
|
|
237
|
+
<Shield className="w-4 h-4" />
|
|
238
|
+
{isLoading ? 'Updating...' : 'Update Security'}
|
|
239
|
+
</Button>
|
|
240
|
+
</div>
|
|
241
|
+
</form>
|
|
242
|
+
</TabsContent>
|
|
243
|
+
|
|
244
|
+
{/* AI Preferences */}
|
|
245
|
+
<TabsContent value="ai" className="space-y-6 p-6">
|
|
246
|
+
<form onSubmit={(e) => handleSaveSettings(e, 'ai')} className="space-y-6">
|
|
247
|
+
<div>
|
|
248
|
+
<h3 className="text-lg font-semibold mb-1">AI Model Preferences</h3>
|
|
249
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Configure your preferred AI models and behavior</p>
|
|
250
|
+
<div className="space-y-4">
|
|
251
|
+
<div>
|
|
252
|
+
<Label htmlFor="defaultTextModel">Default Text Model</Label>
|
|
253
|
+
<select id="defaultTextModel" name="defaultTextModel" className="w-full p-3 border rounded-lg bg-background" defaultValue="gpt-4">
|
|
254
|
+
<option value="gpt-4">GPT-4 (Most capable)</option>
|
|
255
|
+
<option value="gpt-4-turbo">GPT-4 Turbo (Faster)</option>
|
|
256
|
+
<option value="gpt-3.5-turbo">GPT-3.5 Turbo (Cost-effective)</option>
|
|
257
|
+
<option value="claude-3">Claude 3 (Great for analysis)</option>
|
|
258
|
+
</select>
|
|
259
|
+
</div>
|
|
260
|
+
<div>
|
|
261
|
+
<Label htmlFor="creativityLevel">Creativity Level</Label>
|
|
262
|
+
<input type="range" id="creativityLevel" name="creativityLevel" min={0} max={100} defaultValue={70} className="w-full" />
|
|
263
|
+
<p className="text-xs text-gray-500 mt-1">Lower values are more conservative, higher values are more creative</p>
|
|
264
|
+
</div>
|
|
265
|
+
<div>
|
|
266
|
+
<Label htmlFor="responseLength">Default Response Length</Label>
|
|
267
|
+
<select id="responseLength" name="responseLength" className="w-full p-3 border rounded-lg bg-background" defaultValue="medium">
|
|
268
|
+
<option value="short">Short (1-2 paragraphs)</option>
|
|
269
|
+
<option value="medium">Medium (3-5 paragraphs)</option>
|
|
270
|
+
<option value="long">Long (6+ paragraphs)</option>
|
|
271
|
+
<option value="auto">Auto (context-dependent)</option>
|
|
272
|
+
</select>
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
|
|
277
|
+
<div>
|
|
278
|
+
<h3 className="text-lg font-semibold mb-1">Usage & Limits</h3>
|
|
279
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Manage your AI usage preferences</p>
|
|
280
|
+
<div className="space-y-4">
|
|
281
|
+
<div>
|
|
282
|
+
<Label htmlFor="monthlyLimit">Monthly Request Limit</Label>
|
|
283
|
+
<Input id="monthlyLimit" name="monthlyLimit" type="number" min={0} defaultValue={0} placeholder="Enter limit (0 for unlimited)" />
|
|
284
|
+
<p className="text-xs text-gray-500 mt-1">Set a limit to control your usage and costs</p>
|
|
285
|
+
</div>
|
|
286
|
+
<label className="flex items-center gap-2">
|
|
287
|
+
<input type="checkbox" name="lowUsageAlerts" defaultChecked className="rounded" />
|
|
288
|
+
<span className="text-sm">Get notified when approaching usage limits</span>
|
|
289
|
+
</label>
|
|
290
|
+
</div>
|
|
291
|
+
</div>
|
|
292
|
+
|
|
293
|
+
<div className="flex justify-end">
|
|
294
|
+
<Button type="submit" disabled={isLoading} className="flex items-center gap-2">
|
|
295
|
+
<Brain className="w-4 h-4" />
|
|
296
|
+
{isLoading ? 'Saving...' : 'Save AI Preferences'}
|
|
297
|
+
</Button>
|
|
298
|
+
</div>
|
|
299
|
+
</form>
|
|
300
|
+
</TabsContent>
|
|
301
|
+
|
|
302
|
+
{/* Notification Settings */}
|
|
303
|
+
<TabsContent value="notifications" className="space-y-6 p-6">
|
|
304
|
+
<form onSubmit={(e) => handleSaveSettings(e, 'notifications')} className="space-y-6">
|
|
305
|
+
<div>
|
|
306
|
+
<h3 className="text-lg font-semibold mb-1">Email Notifications</h3>
|
|
307
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Choose what emails you want to receive</p>
|
|
308
|
+
<div className="space-y-3">
|
|
309
|
+
{[
|
|
310
|
+
{ value: 'account', label: 'Account & Security Updates', checked: true },
|
|
311
|
+
{ value: 'billing', label: 'Billing & Payment Notifications', checked: true },
|
|
312
|
+
{ value: 'features', label: 'New Features & Updates', checked: true },
|
|
313
|
+
{ value: 'tips', label: 'Tips & Best Practices', checked: false },
|
|
314
|
+
{ value: 'marketing', label: 'Marketing & Promotional Emails', checked: false },
|
|
315
|
+
].map(opt => (
|
|
316
|
+
<label key={opt.value} className="flex items-center gap-2">
|
|
317
|
+
<input type="checkbox" name="emailNotifications" value={opt.value} defaultChecked={opt.checked} className="rounded" />
|
|
318
|
+
<span className="text-sm">{opt.label}</span>
|
|
319
|
+
</label>
|
|
320
|
+
))}
|
|
321
|
+
</div>
|
|
322
|
+
<div className="mt-4">
|
|
323
|
+
<Label htmlFor="emailFrequency">Email Frequency</Label>
|
|
324
|
+
<select id="emailFrequency" name="emailFrequency" className="w-full p-3 border rounded-lg bg-background" defaultValue="daily">
|
|
325
|
+
<option value="immediate">Immediate</option>
|
|
326
|
+
<option value="daily">Daily Digest</option>
|
|
327
|
+
<option value="weekly">Weekly Summary</option>
|
|
328
|
+
<option value="never">Never (Critical only)</option>
|
|
329
|
+
</select>
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
332
|
+
|
|
333
|
+
<div>
|
|
334
|
+
<h3 className="text-lg font-semibold mb-1">Push Notifications</h3>
|
|
335
|
+
<p className="text-sm text-gray-600 dark:text-gray-400 mb-4">Browser and mobile push notifications</p>
|
|
336
|
+
<div className="space-y-3">
|
|
337
|
+
<label className="flex items-center gap-2">
|
|
338
|
+
<input type="checkbox" name="pushNotifications" defaultChecked className="rounded" />
|
|
339
|
+
<span className="text-sm">Enable Push Notifications</span>
|
|
340
|
+
</label>
|
|
341
|
+
<div className="ml-6 space-y-2">
|
|
342
|
+
{[
|
|
343
|
+
{ value: 'generation-complete', label: 'AI Generation Complete', checked: true },
|
|
344
|
+
{ value: 'usage-alerts', label: 'Usage Limit Alerts', checked: true },
|
|
345
|
+
{ value: 'team-invites', label: 'Team Invitations', checked: false },
|
|
346
|
+
{ value: 'system-maintenance', label: 'System Maintenance', checked: false },
|
|
347
|
+
].map(opt => (
|
|
348
|
+
<label key={opt.value} className="flex items-center gap-2">
|
|
349
|
+
<input type="checkbox" name="pushTypes" value={opt.value} defaultChecked={opt.checked} className="rounded" />
|
|
350
|
+
<span className="text-sm">{opt.label}</span>
|
|
351
|
+
</label>
|
|
352
|
+
))}
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
|
|
357
|
+
<div className="flex justify-end">
|
|
358
|
+
<Button type="submit" disabled={isLoading} className="flex items-center gap-2">
|
|
359
|
+
<Bell className="w-4 h-4" />
|
|
360
|
+
{isLoading ? 'Saving...' : 'Save Notification Preferences'}
|
|
361
|
+
</Button>
|
|
362
|
+
</div>
|
|
363
|
+
</form>
|
|
364
|
+
</TabsContent>
|
|
365
|
+
|
|
366
|
+
{/* Appearance placeholder */}
|
|
367
|
+
<TabsContent value="appearance" className="p-6">
|
|
368
|
+
<div className="text-center py-12 text-gray-500">
|
|
369
|
+
<Palette className="w-12 h-12 mx-auto mb-4 opacity-50" />
|
|
370
|
+
<h3 className="text-lg font-semibold mb-2">Appearance Settings</h3>
|
|
371
|
+
<p>Theme and display preferences coming soon.</p>
|
|
372
|
+
</div>
|
|
373
|
+
</TabsContent>
|
|
374
|
+
|
|
375
|
+
{/* Team placeholder */}
|
|
376
|
+
<TabsContent value="team" className="p-6">
|
|
377
|
+
<div className="text-center py-12 text-gray-500">
|
|
378
|
+
<Users className="w-12 h-12 mx-auto mb-4 opacity-50" />
|
|
379
|
+
<h3 className="text-lg font-semibold mb-2">Team Settings</h3>
|
|
380
|
+
<p>Team management and collaboration settings coming soon.</p>
|
|
381
|
+
</div>
|
|
382
|
+
</TabsContent>
|
|
383
|
+
</Tabs>
|
|
384
|
+
</Card>
|
|
385
|
+
</MobileContainer>
|
|
386
|
+
</main>
|
|
387
|
+
</PageTransition>
|
|
388
|
+
)
|
|
389
|
+
}
|