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>
51 lines
1.9 KiB
TypeScript
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
|