Redesign the frontend UI on twui
Rebuild every page on a shared set of twui-based primitives with a dense ops-console look, WireGuard red accent and light/dark/system theming. - Add design tokens (WireGuard red accent, zinc neutrals, theme-flipping semantic colours) and a no-flash theme cookie + toggle - Add shared components: page header, panel, sub-nav, data table with mobile card list, stat tile, status dot, key-value list, copy button, inline alert, empty state, form section/actions, confirm dialog and toast providers - New admin shell (sidebar, sticky header, mobile drawer) and a centered shell for auth and 404; strip the public template pages - Unify adding clients at /admin/clients/add with a host picker; tabbed client detail (Overview / Rules / Config & QR) with config copy/download - Re-run client setup after rule changes on the detail page so the firewall matches the DB - Split Setup into status/maintenance/firewall and Settings into profile/password subpages - Replace window.confirm/alert and page reloads with in-app dialogs, toasts and in-place list updates - Fix nested rule form submitting the client form, prefilled signup passwords, hidden submit buttons, fields not updating after "next free" lookups, and TinyMCE white-on-white in dark mode Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
+2
-25
@@ -9,8 +9,8 @@ import type {
|
||||
BUN_SQLITE_WGUI_VARIABLES,
|
||||
BunSQLiteTables,
|
||||
} from "@/db/types/db";
|
||||
import type { SBFSusidiaries } from "../dict/subsidiaries-dict";
|
||||
import type { UserTypes } from "../dict/user-types-dict";
|
||||
import type { ThemeMode } from "../dict/theme-dict";
|
||||
import type { MediaParadigms, MediaTypes } from "../dict/media-dict";
|
||||
import type {
|
||||
ClientRuleProtocols,
|
||||
@@ -74,39 +74,17 @@ export type PagePropsType = {
|
||||
next_available_client_ip?: string | null;
|
||||
is_local_ip?: boolean | null;
|
||||
setup_status?: ReturnType<typeof grabSystemSetupStatus> | null;
|
||||
theme?: ThemeMode | null;
|
||||
};
|
||||
|
||||
export type AppContextObject = {
|
||||
user: User | null;
|
||||
appState: AppStateObject;
|
||||
setAppState: React.Dispatch<React.SetStateAction<AppStateObject>>;
|
||||
refresh?: number;
|
||||
setRefresh?: React.Dispatch<React.SetStateAction<number>>;
|
||||
pageData?: any;
|
||||
pageProps?: PagePropsType;
|
||||
query?: PageQueryObject | null;
|
||||
};
|
||||
|
||||
export type AppDataObject = {};
|
||||
|
||||
export type AppStateObject = {
|
||||
data?: AppDataObject;
|
||||
likes?: string[] | null;
|
||||
currency?: CurrencyObjectType;
|
||||
fonts?: any;
|
||||
setOpenLoginModal?: React.Dispatch<React.SetStateAction<boolean>>;
|
||||
setOpenSignUpModal?: React.Dispatch<React.SetStateAction<boolean>>;
|
||||
};
|
||||
|
||||
export type CurrencyObjectType = {
|
||||
symbol: string;
|
||||
code: string;
|
||||
multiplier?: number;
|
||||
icon?: string;
|
||||
country?: string;
|
||||
countryCode?: string;
|
||||
} | null;
|
||||
|
||||
export type DSQL_RESPONSE = {
|
||||
success: boolean;
|
||||
payload?: Object[] | string | any[] | { error: string } | null;
|
||||
@@ -185,7 +163,6 @@ export type FileBase64Object = {
|
||||
fileType: string;
|
||||
};
|
||||
|
||||
export type SubsidiaryType = (typeof SBFSusidiaries)[number];
|
||||
|
||||
export type UserType = (typeof UserTypes)[number]["value"];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user