2025-12-22 22:47:28 +00:00
|
|
|
import { Note, NoteRead } from "@/api/notes";
|
2025-11-30 20:32:22 +00:00
|
|
|
import { create } from "zustand";
|
2025-12-08 22:08:30 +00:00
|
|
|
import { persist } from "zustand/middleware";
|
2026-01-15 22:26:08 +00:00
|
|
|
import { Login } from "@/pages/Login";
|
|
|
|
|
|
|
|
|
|
interface HSL {
|
|
|
|
|
H: Number;
|
|
|
|
|
S: Number;
|
|
|
|
|
L: Number;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface ColourState {
|
|
|
|
|
base: string;
|
|
|
|
|
surface0: string;
|
|
|
|
|
surface1: string;
|
|
|
|
|
overlay0: string;
|
|
|
|
|
overlay1: string;
|
|
|
|
|
text: string;
|
|
|
|
|
subtext: string;
|
|
|
|
|
accent: string;
|
|
|
|
|
warn: string;
|
|
|
|
|
success: string;
|
|
|
|
|
danger: string;
|
|
|
|
|
}
|
2025-11-30 20:32:22 +00:00
|
|
|
|
|
|
|
|
interface UIState {
|
|
|
|
|
updating: boolean;
|
|
|
|
|
setUpdating: (update: boolean) => void;
|
2025-12-08 22:08:30 +00:00
|
|
|
|
|
|
|
|
showModal: boolean;
|
|
|
|
|
setShowModal: (show: boolean) => void;
|
|
|
|
|
|
2026-01-15 22:26:08 +00:00
|
|
|
modalContent: React.ComponentType | null;
|
|
|
|
|
setModalContent: (content: React.ComponentType) => void;
|
|
|
|
|
|
2025-12-08 22:08:30 +00:00
|
|
|
sideBarResize: number;
|
|
|
|
|
setSideBarResize: (size: number) => void;
|
2025-12-18 18:12:23 +00:00
|
|
|
|
|
|
|
|
sideBarView: string;
|
|
|
|
|
setSideBarView: (view: string) => void;
|
2025-12-22 15:23:40 +00:00
|
|
|
|
2026-01-15 22:26:08 +00:00
|
|
|
editorView: string;
|
|
|
|
|
setEditorView: (view: string) => void;
|
|
|
|
|
|
2025-12-22 22:47:28 +00:00
|
|
|
selectedNote: NoteRead | null;
|
|
|
|
|
setSelectedNote: (note: NoteRead | null) => void;
|
2025-12-22 15:23:40 +00:00
|
|
|
|
|
|
|
|
selectedFolder: number | null;
|
|
|
|
|
setSelectedFolder: (id: number | null) => void;
|
2026-01-15 22:26:08 +00:00
|
|
|
|
|
|
|
|
colourScheme: ColourState;
|
|
|
|
|
setColourScheme: (colors: ColourState) => void;
|
2025-11-30 20:32:22 +00:00
|
|
|
}
|
|
|
|
|
|
2025-12-08 22:08:30 +00:00
|
|
|
export const useUIStore = create<UIState>()(
|
|
|
|
|
persist(
|
|
|
|
|
(set, get) => ({
|
|
|
|
|
updating: false,
|
|
|
|
|
setUpdating: (update) => {
|
|
|
|
|
set({ updating: update });
|
|
|
|
|
},
|
2025-12-15 21:33:00 +00:00
|
|
|
showModal: true,
|
2025-12-08 22:08:30 +00:00
|
|
|
setShowModal: (show) => {
|
|
|
|
|
set({ showModal: show });
|
|
|
|
|
},
|
2026-01-15 22:26:08 +00:00
|
|
|
modalContent: null,
|
|
|
|
|
setModalContent: (content) => {
|
|
|
|
|
set({ modalContent: content });
|
|
|
|
|
},
|
2025-12-08 22:08:30 +00:00
|
|
|
sideBarResize: 300,
|
|
|
|
|
setSideBarResize: (size) => {
|
|
|
|
|
set({ sideBarResize: size });
|
|
|
|
|
},
|
2025-12-18 18:12:23 +00:00
|
|
|
sideBarView: "folders",
|
|
|
|
|
setSideBarView: (view) => {
|
|
|
|
|
set({ sideBarView: view });
|
|
|
|
|
},
|
2026-01-15 22:26:08 +00:00
|
|
|
editorView: "parsed",
|
|
|
|
|
setEditorView: (view) => {
|
|
|
|
|
set({ editorView: view });
|
|
|
|
|
},
|
2025-12-22 15:23:40 +00:00
|
|
|
selectedNote: null,
|
|
|
|
|
|
2025-12-22 22:47:28 +00:00
|
|
|
setSelectedNote: (id: NoteRead | null) => {
|
2025-12-22 15:23:40 +00:00
|
|
|
set({ selectedNote: id });
|
|
|
|
|
},
|
|
|
|
|
selectedFolder: null,
|
|
|
|
|
|
|
|
|
|
setSelectedFolder: (id: number | null) => {
|
|
|
|
|
set({ selectedFolder: id });
|
|
|
|
|
},
|
2026-01-15 22:26:08 +00:00
|
|
|
|
|
|
|
|
colourScheme: {
|
|
|
|
|
base: "#24273a",
|
|
|
|
|
surface0: "#1e2030",
|
|
|
|
|
surface1: "#181926",
|
|
|
|
|
overlay0: "#363a4f",
|
|
|
|
|
overlay1: "#494d64",
|
|
|
|
|
text: "#cad3f5",
|
|
|
|
|
subtext: "#b8c0e0",
|
|
|
|
|
accent: "#e2a16f",
|
|
|
|
|
danger: "#e26f6f",
|
|
|
|
|
success: "#6fe29b",
|
|
|
|
|
warn: "#e2c56f",
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
setColourScheme: (colors: ColourState) => {
|
|
|
|
|
set({ colourScheme: colors });
|
|
|
|
|
|
|
|
|
|
Object.entries(colors).forEach(([key, value]) => {
|
|
|
|
|
document.documentElement.style.setProperty(`--color-${key}`, value);
|
|
|
|
|
});
|
|
|
|
|
},
|
2025-12-08 22:08:30 +00:00
|
|
|
}),
|
2025-12-22 15:23:40 +00:00
|
|
|
|
2025-12-08 22:08:30 +00:00
|
|
|
{
|
|
|
|
|
name: "ui-store",
|
|
|
|
|
partialize: (state) => {
|
|
|
|
|
return {
|
|
|
|
|
sideBarResize: state.sideBarResize,
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
);
|