"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { Logo } from "@/components/Logo"; import { Button } from "@/components/ui/button"; import { Spinner } from "@/components/ui/spinner"; type PermissionStatus = "authorized" | "denied" | "not determined" | "restricted" | "limited"; interface PermissionsStatus { accessibility: PermissionStatus; } function StatusBadge({ status }: { status: PermissionStatus }) { if (status === "authorized") { return ( Granted ); } if (status === "denied") { return ( Denied ); } return ( Pending ); } export default function DesktopPermissionsPage() { const router = useRouter(); const [permissions, setPermissions] = useState(null); const [isElectron, setIsElectron] = useState(false); useEffect(() => { if (!window.electronAPI) return; setIsElectron(true); let interval: ReturnType | null = null; const poll = async () => { const status = await window.electronAPI!.getPermissionsStatus(); setPermissions(status); if (status.accessibility === "authorized" || status.accessibility === "restricted") { if (interval) clearInterval(interval); } }; poll(); interval = setInterval(poll, 2000); return () => { if (interval) clearInterval(interval); }; }, []); if (!isElectron) { return (

This page is only available in the desktop app.

); } if (!permissions) { return (
); } const allGranted = permissions.accessibility === "authorized"; const handleRequest = async () => { await window.electronAPI!.requestAccessibility(); }; const handleContinue = () => { if (allGranted) { window.electronAPI!.restartApp(); } }; const handleSkip = () => { router.push("/dashboard"); }; return (
{/* Header */}

System Permissions

SurfSense needs Accessibility permission to insert suggestions into the active application.

{/* Permission card */}
{allGranted ? "\u2713" : "1"}

Accessibility

Lets SurfSense insert suggestions seamlessly, right where you're typing.

{!allGranted && (
{permissions.accessibility === "denied" && (

Toggle SurfSense on in System Settings to continue.

)}

If SurfSense doesn't appear in the list, click + and select it from Applications.

)}
{/* Footer */}
{allGranted ? ( <>

A restart is needed for permissions to take effect.

) : ( <> )}
); }