diff --git a/docs/design.md b/docs/design.md index 7b4eab8..c7d8860 100644 --- a/docs/design.md +++ b/docs/design.md @@ -8,7 +8,7 @@ Design goal: focused, cinematic, and modern. ## Color and Surfaces -Space is defined by light and depth, not lines. +Space is defined by light and depth, and subtle lines. No gradients. - **No-Line Rule:** Do not use 1px solid borders for sectioning. Separate regions by stepping between surface tokens (for example, `surface` to `surface_container_low`). - **Surface hierarchy:** @@ -16,7 +16,7 @@ Space is defined by light and depth, not lines. - **Primary work surface:** `surface` (`#0e0e0e`) for the default content canvas. - **Elevated containers:** `surface_container` (`#191919`) and `surface_container_high` (`#1f1f1f`) for cards and interactive panels. - **Glass overlays:** Floating modals and high-priority overlays use `surface_container_highest` at 70% opacity with `backdrop-blur: 20px` for an obsidian-glass effect. -- **Primary CTA texture:** Use a linear gradient (135deg) from `primary` (`#7dafff`) to `primary_dim` (`#0073de`), not a flat fill. +- **Primary CTA texture:** Use a properly contrasted background ## Typography @@ -45,7 +45,7 @@ In a black UI, conventional drop shadows are low impact. Depth is created throug ### Buttons -- **Primary:** Gradient fill (`primary` to `primary_dim`), text color `on_primary_fixed` (black), radius `full`. +- **Primary:** Solid fill (`primary` to `primary_dim`), text color `on_primary_fixed` (black), small radius (`sm`, 0.375rem). - **Secondary:** Fill `surface_container_highest`, text `on_surface`, no border, radius `md` (0.75rem). - **Tertiary:** Transparent background, text `primary`; use for low-emphasis actions (for example, Cancel). diff --git a/public/lazurite.svg b/public/lazurite.svg index 17f6c9d..2c10d27 100644 --- a/public/lazurite.svg +++ b/public/lazurite.svg @@ -1,3 +1,3 @@ - + diff --git a/public/tray-icon.png b/public/tray-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb269279c144861cc0f7e0d0d9b94292a2b0544 GIT binary patch literal 131935 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℘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 e%X7Z?gSRy!hv?}`8g(f`Z29*Y?< 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 z zfQZE|&IboB@Itz|U>AaYKSik^f%!m)S0B=?&|uq4Ib?3K1UUbLjn91(-SNhH&P9mM zMk$sc<^zm{eILttrZXQiMU3Er-JTJppm(|5~1=`StBp(5dkc8|N^2&RbUJz)7Ch8ES1;5u%Y86rgn|~uX;kY$} z&PLCPW*RmS7lFk=f!8R@@@SSVs8&f_QU7RGEN=q82V`|uV;5*HY|&96NSe~{NeKI+ zpW_O;_7tw0k?AUT&h=ZxUppa{Ad=xHlqbAn`0yzCl<>+(Bw7Q?S;lOcx`fcy$}_6wH>C)pYn3d?08H(nbU8W*uVvZ||i7PW7M3JcQm zU$A*H${!vqJ7}6~A|u=xh?N$o+W7bEz>UKT9_3w6N*F2pJ%NZ>cBv%Je>sz{1hj&9Lb&Oa9z46aV=M>$H+p~0b_$=;OlONJ84 zQN98S7v>%?=Vb^kmk@$9&q2`!_L3-f&2^T5!YC(b4+UZ|s1_C7ago8`PW3*tBNG`K zi&!36)&F=EwSNwWD_R!hkWu@P8T??D85iH|Gtho7I4(f$Kk$(0g2;;y{ru}71Ny!iXWVnEx1`!5pf1@gJ{m=FK^}oMMU4{<6fyF__IvixW?RFrf zpaZcI3z}}`iFCaFry2X(zH--PxW6Eb##tq84BB)5R< zgj-HF0WqP_ehKz>QXuV0>#=`+=j^8=|zopr0IK}+fdBvi literal 0 HcmV?d00001 diff --git a/src/App.tsx b/src/App.tsx index 614cf1f..5c854fb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,7 @@ import { invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; -import { createMemo, createSignal, onCleanup, onMount, Show, startTransition } from "solid-js"; +import { createEffect, createMemo, type JSX, onCleanup, onMount, Show, startTransition } from "solid-js"; +import { createStore } from "solid-js/store"; import "@fontsource-variable/google-sans"; import "./App.css"; import { AccountLedger } from "./components/AccountLedger"; @@ -11,33 +12,64 @@ import { HeaderPanel } from "./components/panels/Header"; import { RailButton } from "./components/RailButton"; import { SessionSpotlight } from "./components/Session"; import { ErrorToast } from "./components/shared/ErrorToast"; +import { ArrowIcon } from "./components/shared/Icon"; import { Wordmark } from "./components/Wordmark"; import type { AccountSummary, ActiveSession, AppBootstrap } from "./lib/types"; +import { AppRouter } from "./router"; const ACCOUNT_SWITCH_EVENT = "auth:account-switched"; +const RAIL_COLLAPSED_STORAGE_KEY = "lazurite:rail-collapsed"; + +type AppState = { + accounts: AccountSummary[]; + activeSession: ActiveSession | null; + bootstrapping: boolean; + errorMessage: string | null; + loggingIn: boolean; + loginValue: string; + logoutDid: string | null; + narrowViewport: boolean; + railCollapsed: boolean; + reauthNeeded: boolean; + shakeCount: number; + showSwitcher: boolean; + switchingDid: string | null; +}; + +function createInitialAppState(): AppState { + return { + accounts: [], + activeSession: null, + bootstrapping: true, + errorMessage: null, + loggingIn: false, + loginValue: "", + logoutDid: null, + narrowViewport: false, + railCollapsed: false, + reauthNeeded: false, + shakeCount: 0, + showSwitcher: false, + switchingDid: null, + }; +} function App() { - const [bootstrapping, setBootstrapping] = createSignal(true); - const [activeSession, setActiveSession] = createSignal(null); - const [accounts, setAccounts] = createSignal([]); - const [loginValue, setLoginValue] = createSignal(""); - const [loggingIn, setLoggingIn] = createSignal(false); - const [switchingDid, setSwitchingDid] = createSignal(null); - const [logoutDid, setLogoutDid] = createSignal(null); - const [showSwitcher, setShowSwitcher] = createSignal(false); - const [errorMessage, setErrorMessage] = createSignal(null); - const [shakeCount, setShakeCount] = createSignal(0); - const [reauthNeeded, setReauthNeeded] = createSignal(false); - - const activeAccount = createMemo(() => accounts().find((account) => account.did === activeSession()?.did) ?? null); - const primaryAccount = createMemo(() => activeAccount() ?? accounts()[0] ?? null); - const hasSession = createMemo(() => !!activeSession()); + const [app, setApp] = createStore(createInitialAppState()); + + const activeAccount = createMemo(() => + app.accounts.find((account) => account.did === app.activeSession?.did) ?? null + ); + const primaryAccount = createMemo(() => activeAccount() ?? app.accounts[0] ?? null); + const hasSession = createMemo(() => !!app.activeSession); + const railCompact = createMemo(() => app.railCollapsed && !app.narrowViewport); + const railColumns = createMemo(() => (railCompact() ? "5.75rem minmax(0,1fr)" : "16rem minmax(0,1fr)")); const metaLabel = createMemo(() => { - if (bootstrapping()) { + if (app.bootstrapping) { return "signing you back in"; } - if (activeSession()) { + if (app.activeSession) { return "signed in"; } @@ -45,86 +77,86 @@ function App() { }); async function loadBootstrap() { - setBootstrapping(true); + setApp("bootstrapping", true); try { const payload = await invoke("get_app_bootstrap"); startTransition(() => { - setActiveSession(payload.activeSession); - setAccounts(payload.accountList); - setReauthNeeded(payload.accountList.length > 0 && !payload.activeSession); + setApp("activeSession", payload.activeSession); + setApp("accounts", payload.accountList); + setApp("reauthNeeded", payload.accountList.length > 0 && !payload.activeSession); }); } catch (error) { - setErrorMessage(`Failed to load app bootstrap: ${String(error)}`); + setApp("errorMessage", `Failed to load app bootstrap: ${String(error)}`); } finally { - setBootstrapping(false); + setApp("bootstrapping", false); } } function closeSwitcher() { - if (showSwitcher()) { - setShowSwitcher(false); + if (app.showSwitcher) { + setApp("showSwitcher", false); } } function triggerShake() { - setShakeCount((count) => count + 1); + setApp("shakeCount", (count) => count + 1); } function markPotentialExpiry(error: unknown) { const message = String(error).toLowerCase(); if (message.includes("refresh failed") || message.includes("session does not exist")) { - setReauthNeeded(true); + setApp("reauthNeeded", true); } } - async function submitLogin(identifier = loginValue()) { + async function submitLogin(identifier = app.loginValue) { const trimmed = identifier.trim(); if (!validateIdentifier(trimmed)) { triggerShake(); - setErrorMessage("Enter a valid Bluesky handle, DID, or PDS URL."); + setApp("errorMessage", "Enter a valid Bluesky handle, DID, or PDS URL."); return; } - setLoggingIn(true); + setApp("loggingIn", true); try { await invoke("login", { handle: trimmed }); - setLoginValue(""); + setApp("loginValue", ""); closeSwitcher(); await loadBootstrap(); } catch (error) { markPotentialExpiry(error); - setErrorMessage(`Authentication failed: ${String(error)}`); + setApp("errorMessage", `Authentication failed: ${String(error)}`); } finally { - setLoggingIn(false); + setApp("loggingIn", false); } } async function switchAccount(did: string) { - setSwitchingDid(did); + setApp("switchingDid", did); try { await invoke("switch_account", { did }); closeSwitcher(); await loadBootstrap(); } catch (error) { markPotentialExpiry(error); - setErrorMessage(`Failed to switch account: ${String(error)}`); + setApp("errorMessage", `Failed to switch account: ${String(error)}`); } finally { - setSwitchingDid(null); + setApp("switchingDid", null); } } async function logout(did: string) { - setLogoutDid(did); + setApp("logoutDid", did); try { await invoke("logout", { did }); closeSwitcher(); await loadBootstrap(); } catch (error) { markPotentialExpiry(error); - setErrorMessage(`Failed to logout account: ${String(error)}`); + setApp("errorMessage", `Failed to logout account: ${String(error)}`); } finally { - setLogoutDid(null); + setApp("logoutDid", null); } } @@ -139,6 +171,16 @@ function App() { onMount(() => { let unlisten: (() => void) | undefined; + const media = globalThis.matchMedia("(max-width: 1180px)"); + const syncViewport = () => setApp("narrowViewport", media.matches); + + const stored = globalThis.localStorage.getItem(RAIL_COLLAPSED_STORAGE_KEY); + if (stored === "true") { + setApp("railCollapsed", true); + } + + syncViewport(); + media.addEventListener("change", syncViewport); void loadBootstrap(); @@ -148,72 +190,144 @@ function App() { unlisten = dispose; }); - onCleanup(() => unlisten?.()); + onCleanup(() => { + unlisten?.(); + media.removeEventListener("change", syncViewport); + }); }); - return ( - <> -
- - -
- void logout(did)} - onReauth={() => void reauthorizePrimaryAccount()} - onSubmit={() => void submitLogin()} - onSwitch={(did) => void switchAccount(did)} /> - }> - {(session) => } - -
-
- - setErrorMessage(null)} /> - + onToggleCollapse={() => setApp("railCollapsed", (collapsed) => !collapsed)} + onToggleSwitcher={() => setApp("showSwitcher", (open) => !open)} /> + +
+ {props.children} +
+ + + setApp("errorMessage", null)} /> + + ); + } + + return ( + setApp("showSwitcher", false)} + renderAuth={() => ( + setApp("loginValue", value)} + onLogout={(did) => void logout(did)} + onReauth={() => void reauthorizePrimaryAccount()} + onSubmit={() => void submitLogin()} + onSwitch={(did) => void switchAccount(did)} /> + )} + renderShell={AppShell} + renderTimeline={(session) => ( + setApp("errorMessage", message)} /> + )} /> + ); +} + +function AppRail( + props: { + activeSession: ActiveSession | null; + accounts: AccountSummary[]; + collapsed: boolean; + hasSession: boolean; + logoutDid: string | null; + openSwitcher: boolean; + switchingDid: string | null; + onLogout: (did: string) => void; + onSwitch: (did: string) => void; + onToggleCollapse: () => void; + onToggleSwitcher: () => void; + }, +) { + return ( + + ); +} + +function RailHeader(props: { collapsed: boolean; onToggleCollapse: () => void }) { + return ( +
+ + +
); } function RailNavigation(props: { hasSession: boolean }) { return (
- }> + }> <> - - - - + + + +
diff --git a/src/components/AccountSwitcher.tsx b/src/components/AccountSwitcher.tsx index ceca29f..fc824df 100644 --- a/src/components/AccountSwitcher.tsx +++ b/src/components/AccountSwitcher.tsx @@ -9,6 +9,7 @@ type AccountSwitcherProps = { activeSession: ActiveSession | null; accounts: AccountSummary[]; busyDid: string | null; + compact?: boolean; logoutDid: string | null; open: boolean; onToggle: () => void; @@ -23,7 +24,7 @@ export function AccountSwitcher(props: AccountSwitcherProps) { onMount(() => { const pointerListener = { handleEvent(event: Event) { - if (!isOpen) { + if (!isOpen()) { return; } @@ -41,28 +42,51 @@ export function AccountSwitcher(props: AccountSwitcherProps) { return (
{ container = element; }}> + ); } diff --git a/src/components/Wordmark.tsx b/src/components/Wordmark.tsx index 4de9cfb..ea92baf 100644 --- a/src/components/Wordmark.tsx +++ b/src/components/Wordmark.tsx @@ -1,13 +1,22 @@ -export function Wordmark() { +import { Show } from "solid-js"; + +export function Wordmark(props: { class?: string; compact?: boolean; iconClass?: string }) { return ( -
+
+ +
+

Lazurite

+

Desktop

+
+
); } diff --git a/src/components/feeds/FeedWorkspace.tsx b/src/components/feeds/FeedWorkspace.tsx index f283475..3d921de 100644 --- a/src/components/feeds/FeedWorkspace.tsx +++ b/src/components/feeds/FeedWorkspace.tsx @@ -967,7 +967,7 @@ function FeedStatus(props: { activeFeedState: FeedState | undefined; visibleItem {(message) => ( -
+
{message()}
)} diff --git a/src/components/feeds/ThreadPanel.tsx b/src/components/feeds/ThreadPanel.tsx index d4155b3..d201403 100644 --- a/src/components/feeds/ThreadPanel.tsx +++ b/src/components/feeds/ThreadPanel.tsx @@ -35,7 +35,7 @@ export function ThreadPanel(props: ThreadPanelProps) { {(message) => ( -
+
{message()}
)} @@ -64,7 +64,7 @@ export function ThreadPanel(props: ThreadPanelProps) { function ThreadPanelHeader(props: { onClose: () => void }) { return ( -
+

Thread

Nested replies

@@ -175,7 +175,7 @@ function StateCard(props: { label: string; meta: string }) { function SkeletonThreadCard() { return ( -
+
diff --git a/src/components/shared/ErrorToast.tsx b/src/components/shared/ErrorToast.tsx index 50e226c..bee0dc5 100644 --- a/src/components/shared/ErrorToast.tsx +++ b/src/components/shared/ErrorToast.tsx @@ -1,35 +1,37 @@ -import type { Accessor } from "solid-js"; +import { Show } from "solid-js"; import { Motion, Presence } from "solid-motionone"; -type ErrorToastProps = { message: Accessor; onDismiss: () => void }; +type ErrorToastProps = { message: string | null; onDismiss: () => void }; export function ErrorToast(props: ErrorToastProps) { return ( - {props.message() && ( - - -

{props.message()}

- -
- )} +

{message()}

+ + + )} +
); } diff --git a/src/router.tsx b/src/router.tsx new file mode 100644 index 0000000..4208ecf --- /dev/null +++ b/src/router.tsx @@ -0,0 +1,147 @@ +import { HashRouter, Navigate, Route, type RouteSectionProps, useLocation } from "@solidjs/router"; +import { type Component, createEffect, type JSX, Show } from "solid-js"; +import type { ActiveSession } from "./lib/types"; + +type AppRouterProps = { + bootstrapping: boolean; + hasSession: boolean; + onLocationChange?: () => void; + renderAuth: () => JSX.Element; + renderShell: Component<{ children: JSX.Element }>; + renderTimeline: (session: ActiveSession) => JSX.Element; + session: ActiveSession | null; +}; + +export function AppRouter(props: AppRouterProps) { + const RouterFrame: Component = (routeProps) => { + const location = useLocation(); + let previousPath = location.pathname; + + createEffect(() => { + const nextPath = location.pathname; + if (nextPath !== previousPath) { + props.onLocationChange?.(); + previousPath = nextPath; + } + }); + + return {routeProps.children}; + }; + + const IndexRoute = () => ( + }> + + + ); + + const AuthRoute = () => ( + + {props.renderAuth()} + + ); + + const TimelineRoute = () => ( + + {(session) => props.renderTimeline(session)} + + ); + + const SearchRoute = () => ( + + {() => ( + + )} + + ); + + const NotificationsRoute = () => ( + + {() => ( + + )} + + ); + + const ExplorerRoute = () => ( + + {() => ( + + )} + + ); + + const NotFoundRoute = () => ( + }> + + + ); + + return ( + + + + + + + + + + ); +} + +function PublicOnlyRoute( + props: { bootstrapping: boolean; when: boolean; redirectHref: string; children: JSX.Element }, +) { + return ( + }> + {props.children} + + ); +} + +function ProtectedRouteView( + props: { bootstrapping: boolean; session: ActiveSession | null; children: (session: ActiveSession) => JSX.Element }, +) { + return ( + }> + }> + {(session) => props.children(session)} + + + ); +} + +function RouteLoadingState() { + return ( +
+
+

Loading

+

Restoring your workspace.

+
+
+ ); +} + +function FeaturePlaceholder(props: { description: string; eyebrow: string; title: string }) { + return ( +
+
+

{props.eyebrow}

+

Authenticated route

+
+
+

{props.title}

+

{props.description}

+
+
+ ); +}