import { zodResolver } from '@hookform/resolvers/zod' import { X } from 'lucide-react' import { useForm } from 'react-hook-form' import { toast } from 'sonner' import * as z from 'zod' import { useConsentState } from 'common' import { LOCAL_STORAGE_KEYS } from 'common/constants/local-storage' import { useSendResetMutation } from 'data/telemetry/send-reset-mutation' import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Badge } from 'ui' import { ButtonTooltip } from 'components/ui/ButtonTooltip' import { Card, CardContent, FormControl_Shadcn_, FormField_Shadcn_, Form_Shadcn_, Switch } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { PageSection, PageSectionContent, PageSectionDescription, PageSectionMeta, PageSectionSummary, PageSectionTitle, } from 'ui-patterns/PageSection' export const PrivacyUpdateBanner = () => { const [privacyUpdateAcknowledged, setPrivacyUpdateAcknowledged] = useLocalStorageQuery( LOCAL_STORAGE_KEYS.PRIVACY_NOTICE_ACKNOWLEDGED, false ) if (privacyUpdateAcknowledged) return null return ( NOTICE Privacy Policy Update – Effective March 16, 2026 We've updated our{' '} Privacy Policy {' '} to clarify our use of analytics, cookies, and advertising audience management tools. By continuing to use Supabase after March 16, you agree to the new terms. Questions? Contact{' '} our team . } className="absolute top-2 right-2 px-1" onClick={() => setPrivacyUpdateAcknowledged(true)} tooltip={{ content: { side: 'bottom', text: 'Dismiss' } }} /> ) } const AnalyticsSchema = z.object({ telemetryEnabled: z.boolean(), }) export const AnalyticsSettings = () => { const { hasAccepted, acceptAll, denyAll, categories } = useConsentState() const hasLoaded = categories !== null const { mutate: sendReset } = useSendResetMutation() const form = useForm>({ resolver: zodResolver(AnalyticsSchema), values: { telemetryEnabled: hasAccepted }, }) const handleToggle = (value: boolean) => { if (!hasLoaded) { toast.error( "We couldn't load the privacy settings due to an ad blocker or network error. Please disable any ad blockers and try again. If the problem persists, please contact support." ) form.setValue('telemetryEnabled', !value) return } if (value) { acceptAll() } else { denyAll() sendReset() } form.setValue('telemetryEnabled', value) } return ( Analytics and Marketing Control whether telemetry and marketing data is sent from Supabase services. ( { field.onChange(value) handleToggle(value) }} /> )} /> ) }