Shell polish: storage line, status pill, footer strip, sidebar
Backend: - apps.core with GET /api/status/ (env, git hash, OS, watched folder, worker counts) and a TimingMiddleware adding X-Server-Time-Ms - status endpoint reports its own server-side assembly time Frontend: - top bar shows the storage line (watched folder) and a status pill with ENV, git hash, host OS, server time (e621 time once it exists) - fixed 32px footer strip: storage path, active workers, build version - collapsible filter sidebar: closed by default, Ctrl/Cmd+B toggle, overlay drawer with backdrop blur under 1024px - rating filters, per-page and sidebar state persist in localStorage
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import { create } from "zustand";
|
||||
import { persist } from "zustand/middleware";
|
||||
|
||||
interface UiState {
|
||||
sidebarOpen: boolean;
|
||||
setSidebarOpen: (open: boolean) => void;
|
||||
toggleSidebar: () => void;
|
||||
ratings: string[];
|
||||
setRatings: (ratings: string[]) => void;
|
||||
perPage: number;
|
||||
setPerPage: (perPage: number) => void;
|
||||
}
|
||||
|
||||
export const useUi = create<UiState>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
sidebarOpen: false,
|
||||
setSidebarOpen: (sidebarOpen) => set({ sidebarOpen }),
|
||||
toggleSidebar: () => set((state) => ({ sidebarOpen: !state.sidebarOpen })),
|
||||
|
||||
ratings: [],
|
||||
setRatings: (ratings) => set({ ratings }),
|
||||
|
||||
perPage: 48,
|
||||
setPerPage: (perPage) => set({ perPage }),
|
||||
}),
|
||||
{ name: "j621.ui" },
|
||||
),
|
||||
);
|
||||
Reference in New Issue
Block a user