@@ -388,7 +388,7 @@ export const Settings: React.FC<SettingsProps> = ({
388388 ) : (
389389 < div className = "flex-1 overflow-y-auto p-6" >
390390 < Tabs value = { activeTab } onValueChange = { setActiveTab } className = "w-full" >
391- < TabsList className = "grid grid-cols-9 w-full mb-6 h-auto p-1" >
391+ < TabsList className = "grid grid-cols-8 w-full mb-6 h-auto p-1" >
392392 < TabsTrigger value = "general" className = "py-2.5 px-3" > General</ TabsTrigger >
393393 < TabsTrigger value = "permissions" className = "py-2.5 px-3" > Permissions</ TabsTrigger >
394394 < TabsTrigger value = "environment" className = "py-2.5 px-3" > Environment</ TabsTrigger >
@@ -397,7 +397,6 @@ export const Settings: React.FC<SettingsProps> = ({
397397 < TabsTrigger value = "commands" className = "py-2.5 px-3" > Commands</ TabsTrigger >
398398 < TabsTrigger value = "storage" className = "py-2.5 px-3" > Storage</ TabsTrigger >
399399 < TabsTrigger value = "proxy" className = "py-2.5 px-3" > Proxy</ TabsTrigger >
400- < TabsTrigger value = "analytics" className = "py-2.5 px-3" > Analytics</ TabsTrigger >
401400 </ TabsList >
402401
403402 { /* General Settings */ }
@@ -662,6 +661,55 @@ export const Settings: React.FC<SettingsProps> = ({
662661 </ p >
663662 ) }
664663 </ div >
664+
665+ { /* Separator */ }
666+ < div className = "border-t border-border pt-4 mt-6" />
667+
668+ { /* Analytics Toggle */ }
669+ < div className = "flex items-center justify-between" >
670+ < div className = "space-y-1" >
671+ < Label htmlFor = "analytics-enabled" > Enable Analytics</ Label >
672+ < p className = "text-caption text-muted-foreground" >
673+ Help improve Claudia by sharing anonymous usage data
674+ </ p >
675+ </ div >
676+ < Switch
677+ id = "analytics-enabled"
678+ checked = { analyticsEnabled }
679+ onCheckedChange = { async ( checked ) => {
680+ if ( checked && ! analyticsConsented ) {
681+ setShowAnalyticsConsent ( true ) ;
682+ } else if ( checked ) {
683+ await analytics . enable ( ) ;
684+ setAnalyticsEnabled ( true ) ;
685+ trackEvent . settingsChanged ( 'analytics_enabled' , true ) ;
686+ setToast ( { message : "Analytics enabled" , type : "success" } ) ;
687+ } else {
688+ await analytics . disable ( ) ;
689+ setAnalyticsEnabled ( false ) ;
690+ trackEvent . settingsChanged ( 'analytics_enabled' , false ) ;
691+ setToast ( { message : "Analytics disabled" , type : "success" } ) ;
692+ }
693+ } }
694+ />
695+ </ div >
696+
697+ { /* Privacy Info */ }
698+ { analyticsEnabled && (
699+ < div className = "rounded-lg border border-blue-200 dark:border-blue-900 bg-blue-50 dark:bg-blue-950/20 p-3" >
700+ < div className = "flex gap-2" >
701+ < Shield className = "h-4 w-4 text-blue-600 dark:text-blue-400 flex-shrink-0 mt-0.5" />
702+ < div className = "space-y-1" >
703+ < p className = "text-xs font-medium text-blue-900 dark:text-blue-100" > Your privacy is protected</ p >
704+ < ul className = "text-xs text-blue-800 dark:text-blue-200 space-y-0.5" >
705+ < li > • No personal information or file contents collected</ li >
706+ < li > • All data is anonymous with random IDs</ li >
707+ < li > • You can disable analytics at any time</ li >
708+ </ ul >
709+ </ div >
710+ </ div >
711+ </ div >
712+ ) }
665713 </ div >
666714 </ div >
667715 </ Card >
@@ -952,96 +1000,6 @@ export const Settings: React.FC<SettingsProps> = ({
9521000 </ Card >
9531001 </ TabsContent >
9541002
955- { /* Analytics Settings */ }
956- < TabsContent value = "analytics" className = "space-y-6" >
957- < Card className = "p-6 space-y-6" >
958- < div >
959- < div className = "flex items-center gap-3 mb-4" >
960- < BarChart3 className = "h-5 w-5 text-purple-600 dark:text-purple-400" />
961- < h3 className = "text-base font-semibold" > Analytics Settings</ h3 >
962- </ div >
963-
964- < div className = "space-y-6" >
965- { /* Analytics Toggle */ }
966- < div className = "flex items-center justify-between" >
967- < div className = "space-y-1" >
968- < Label htmlFor = "analytics-enabled" className = "text-base" > Enable Analytics</ Label >
969- < p className = "text-sm text-muted-foreground" >
970- Help improve Claudia by sharing anonymous usage data
971- </ p >
972- </ div >
973- < Switch
974- id = "analytics-enabled"
975- checked = { analyticsEnabled }
976- onCheckedChange = { async ( checked ) => {
977- if ( checked && ! analyticsConsented ) {
978- setShowAnalyticsConsent ( true ) ;
979- } else if ( checked ) {
980- await analytics . enable ( ) ;
981- setAnalyticsEnabled ( true ) ;
982- trackEvent . settingsChanged ( 'analytics_enabled' , true ) ;
983- setToast ( { message : "Analytics enabled" , type : "success" } ) ;
984- } else {
985- await analytics . disable ( ) ;
986- setAnalyticsEnabled ( false ) ;
987- trackEvent . settingsChanged ( 'analytics_enabled' , false ) ;
988- setToast ( { message : "Analytics disabled" , type : "success" } ) ;
989- }
990- } }
991- />
992- </ div >
993-
994- { /* Privacy Info */ }
995- < div className = "rounded-lg border border-blue-200 dark:border-blue-900 bg-blue-50 dark:bg-blue-950/20 p-4" >
996- < div className = "flex gap-3" >
997- < Shield className = "h-5 w-5 text-blue-600 dark:text-blue-400 flex-shrink-0 mt-0.5" />
998- < div className = "space-y-2" >
999- < p className = "font-medium text-blue-900 dark:text-blue-100" > Your privacy is protected</ p >
1000- < ul className = "text-sm text-blue-800 dark:text-blue-200 space-y-1" >
1001- < li > • No personal information is collected</ li >
1002- < li > • No file contents, paths, or project names</ li >
1003- < li > • All data is anonymous with random IDs</ li >
1004- < li > • You can disable analytics at any time</ li >
1005- </ ul >
1006- </ div >
1007- </ div >
1008- </ div >
1009-
1010- { /* Data Collection Info */ }
1011- { analyticsEnabled && (
1012- < div className = "space-y-4" >
1013- < div >
1014- < h4 className = "text-sm font-medium mb-2" > What we collect:</ h4 >
1015- < ul className = "text-sm text-muted-foreground space-y-1" >
1016- < li > • Feature usage patterns</ li >
1017- < li > • Performance metrics</ li >
1018- < li > • Error reports (without sensitive data)</ li >
1019- < li > • Session frequency and duration</ li >
1020- </ ul >
1021- </ div >
1022-
1023- { /* Delete Data Button */ }
1024- < div className = "pt-4 border-t" >
1025- < Button
1026- variant = "destructive"
1027- size = "sm"
1028- onClick = { async ( ) => {
1029- await analytics . deleteAllData ( ) ;
1030- setAnalyticsEnabled ( false ) ;
1031- setAnalyticsConsented ( false ) ;
1032- setToast ( { message : "All analytics data deleted" , type : "success" } ) ;
1033- } }
1034- >
1035- < Trash className = "mr-2 h-4 w-4" />
1036- Delete All Analytics Data
1037- </ Button >
1038- </ div >
1039- </ div >
1040- ) }
1041- </ div >
1042- </ div >
1043- </ Card >
1044- </ TabsContent >
10451003 </ Tabs >
10461004 </ div >
10471005 ) }
0 commit comments