import { getCurrentWindow } from "@tauri-apps/api/window"; import "@fontsource-variable/google-sans"; import { useNavigate } from "@solidjs/router"; import type { ParentProps } from "solid-js"; import { createEffect, onCleanup, Show } from "solid-js"; import "./App.css"; import { AccountLedger } from "./components/account/AccountLedger"; import { ComposerWindow } from "./components/feeds/ComposerWindow"; import { FeedWorkspace } from "./components/feeds/FeedWorkspace"; import { LoginPanel } from "./components/LoginPanel"; import { MessagesPanel } from "./components/messages/MessagesPanel"; import { NotificationsPanel } from "./components/notifications/NotificationsPanel"; import { HeaderPanel } from "./components/panels/Header"; import { PostEngagementPanel } from "./components/posts/PostEngagementPanel"; import { PostPanel } from "./components/posts/PostPanel"; import { ThreadDrawer } from "./components/posts/ThreadDrawer"; import { ProfilePanel } from "./components/profile/ProfilePanel"; import { AppRail } from "./components/rail/AppRail"; import { SessionSpotlight } from "./components/Session"; import { ErrorToast } from "./components/shared/ErrorToast"; import { ThemeController } from "./components/theme/ThemeController"; import { AppPreferencesProvider } from "./contexts/app-preferences"; import { AppSessionProvider, useAppSession } from "./contexts/app-session"; import { AppShellUiProvider, useAppShellUi } from "./contexts/app-shell-ui"; import { AppRouter } from "./router"; const COMPOSER_WINDOW_LABEL = "composer"; type AppShellProps = ParentProps<{ fullWidth?: boolean }>; function createSettingsShortcutHandler(hasSession: boolean, navigate: (path: string) => void) { return (e: KeyboardEvent) => { if (e.key === "," && !e.ctrlKey && !e.metaKey && !e.altKey) { const activeElement = document.activeElement; const isInputFocused = activeElement instanceof HTMLInputElement || activeElement instanceof HTMLTextAreaElement; if (!isInputFocused && hasSession) { navigate("/settings"); } } }; } function AppShell(props: AppShellProps) { const session = useAppSession(); const shell = useAppShellUi(); const navigate = useNavigate(); createEffect(() => { const handler = createSettingsShortcutHandler(session.hasSession, navigate); globalThis.addEventListener("keydown", handler); onCleanup(() => globalThis.removeEventListener("keydown", handler)); }); return ( <>
{props.children}
); } function AppContent() { const session = useAppSession(); const standaloneComposerWindow = isComposerWindow(); return ( } renderComposer={() => } renderMessages={(props) => } renderNotifications={() => } renderPostEngagement={(props) => } renderPost={(props) => } renderProfile={(props) => } renderShell={AppShell} renderTimeline={() => } /> }> <>
void session.submitLogin()} />
}>
}>
); } function App() { return ( ); } function isComposerWindow() { try { return getCurrentWindow().label === COMPOSER_WINDOW_LABEL; } catch { return false; } } function ComposerBootState() { return (

Loading

Restoring the composer.

); } function AuthWorkspace() { const session = useAppSession(); const hasAccounts = () => session.accounts.length > 0; return (
void session.submitLogin()} />
}> <>
); } export default App;