Files
resolutionflow/frontend/src/store/userPreferencesStore.ts
Michael Chihlas 8efc443949 refactor: implement icon rail sidebar for Design System v4
72px icon rail with hover flyouts, pin-to-expand toggle (260px),
keyboard accessible, mobile hamburger overlay. Flat TopBar styling
(no blur/glass). New BrandLogo mark (gradient square + lightning bolt).
BrandWordmark uses solid text color instead of gradient.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 00:26:19 -04:00

51 lines
1.9 KiB
TypeScript

import { create } from 'zustand'
import { persist } from 'zustand/middleware'
type ExportFormat = 'markdown' | 'text' | 'html' | 'psa'
type TreeLibraryView = 'grid' | 'list' | 'table'
type TreeSortBy = 'usage_count' | 'updated_at' | 'created_at' | 'name' | 'name_desc' | 'version'
type EditorMode = 'form' | 'code'
interface UserPreferencesState {
defaultExportFormat: ExportFormat
setDefaultExportFormat: (format: ExportFormat) => void
treeLibraryView: TreeLibraryView
setTreeLibraryView: (view: TreeLibraryView) => void
treeLibrarySortBy: TreeSortBy
setTreeLibrarySortBy: (sortBy: TreeSortBy) => void
preferredEditorMode: EditorMode
setPreferredEditorMode: (mode: EditorMode) => void
sidebarCollapsed: boolean
toggleSidebar: () => void
sidebarPinned: boolean
toggleSidebarPinned: () => void
dashboardMyFlowsView: TreeLibraryView
setDashboardMyFlowsView: (view: TreeLibraryView) => void
}
export const useUserPreferencesStore = create<UserPreferencesState>()(
persist(
(set, get) => ({
defaultExportFormat: 'markdown',
setDefaultExportFormat: (format) => set({ defaultExportFormat: format }),
treeLibraryView: 'grid',
setTreeLibraryView: (view) => set({ treeLibraryView: view }),
treeLibrarySortBy: 'usage_count',
setTreeLibrarySortBy: (sortBy) => set({ treeLibrarySortBy: sortBy }),
preferredEditorMode: 'form',
setPreferredEditorMode: (mode) => set({ preferredEditorMode: mode }),
sidebarCollapsed: false,
toggleSidebar: () => set({ sidebarCollapsed: !get().sidebarCollapsed }),
sidebarPinned: false,
toggleSidebarPinned: () => set({ sidebarPinned: !get().sidebarPinned }),
dashboardMyFlowsView: 'grid',
setDashboardMyFlowsView: (view) => set({ dashboardMyFlowsView: view }),
}),
{
name: 'user-preferences-storage',
}
)
)
export default useUserPreferencesStore