import React from "react"; import ReactDOM from "react-dom/client"; import { ClerkProvider } from "@clerk/react"; import { passkeys as electronPasskeys } from "@clerk/electron/passkeys"; import { ClerkProvider as ElectronClerkProvider } from "@clerk/electron/react"; import { createHashHistory, createBrowserHistory } from "@tanstack/react-router"; import "./index.css"; import { isElectron } from "./env"; import { ManagedRelayAuthProvider } from "./cloud/managedAuth"; import { hasCloudPublicConfig } from "./cloud/publicConfig"; import { getRouter } from "./router"; import { syncDocumentElectronPlatformClasses, syncDocumentWindowControlsOverlayClass, } from "./lib/windowControlsOverlay"; import { AppRoot } from "./AppRoot"; import { clerkAppearance } from "./components/clerk/clerkAppearance"; // Electron loads the app from a file-backed shell, so hash history avoids path resolution issues. const history = isElectron ? createHashHistory() : createBrowserHistory(); const router = getRouter(history); if (isElectron) { syncDocumentElectronPlatformClasses(navigator.platform); syncDocumentWindowControlsOverlayClass(); } const clerkPublishableKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY as string | undefined; // @clerk/electron reports passkey autofill as supported but executes the // "quiet" autofill request as a modal prompt, so Clerk's sign-in form pops an // OS passkey dialog the moment it mounts. Report autofill as unsupported; the // explicit "Use passkey" button keeps working. // Upstream: https://github.com/clerk/javascript/issues/9496 const passkeys = { ...electronPasskeys, isAutoFillSupported: () => Promise.resolve(false), }; const app = ; ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( {clerkPublishableKey && hasCloudPublicConfig() ? ( isElectron ? ( {app} ) : ( {app} ) ) : ( app )} , );