export const HIDEABLE_SIDEBAR_ITEM_IDS = [ "home", "endpoints", "api-manager", "providers", "combos", "batch", "costs", "analytics", "cache", "context-caveman", "context-rtk", "context-combos", "limits", "cli-tools", "agents", "memory", "skills", "translator", "playground", "media", "search-tools", "logs", "audit", "webhooks", "health", "proxy", "settings", "docs", "issues", "changelog", ] as const; export type HideableSidebarItemId = (typeof HIDEABLE_SIDEBAR_ITEM_IDS)[number]; export type SidebarSectionId = "primary" | "context" | "cli" | "debug" | "system" | "help"; export interface SidebarItemDefinition { id: HideableSidebarItemId; href: string; i18nKey: string; icon: string; exact?: boolean; external?: boolean; } export interface SidebarSectionDefinition { id: SidebarSectionId; titleKey: string; titleFallback: string; items: readonly SidebarItemDefinition[]; showTitleInSidebar?: boolean; visibility?: "always" | "debug"; } const PRIMARY_SIDEBAR_ITEMS: readonly SidebarItemDefinition[] = [ { id: "home", href: "/dashboard", i18nKey: "home", icon: "home", exact: true }, { id: "endpoints", href: "/dashboard/endpoint", i18nKey: "endpoints", icon: "api" }, { id: "api-manager", href: "/dashboard/api-manager", i18nKey: "apiManager", icon: "vpn_key" }, { id: "providers", href: "/dashboard/providers", i18nKey: "providers", icon: "dns" }, { id: "combos", href: "/dashboard/combos", i18nKey: "combos", icon: "layers" }, { id: "batch", href: "/dashboard/batch", i18nKey: "batch", icon: "view_list" }, { id: "costs", href: "/dashboard/costs", i18nKey: "costs", icon: "account_balance_wallet" }, { id: "analytics", href: "/dashboard/analytics", i18nKey: "analytics", icon: "analytics" }, { id: "cache", href: "/dashboard/cache", i18nKey: "cache", icon: "cached" }, { id: "limits", href: "/dashboard/limits", i18nKey: "limits", icon: "tune" }, { id: "media", href: "/dashboard/cache/media", i18nKey: "media", icon: "perm_media" }, ]; const CLI_SIDEBAR_ITEMS: readonly SidebarItemDefinition[] = [ { id: "cli-tools", href: "/dashboard/cli-tools", i18nKey: "cliToolsShort", icon: "terminal" }, { id: "agents", href: "/dashboard/agents", i18nKey: "agents", icon: "smart_toy" }, { id: "memory", href: "/dashboard/memory", i18nKey: "memory", icon: "psychology" }, { id: "skills", href: "/dashboard/skills", i18nKey: "skills", icon: "auto_fix_high" }, ]; const CONTEXT_SIDEBAR_ITEMS: readonly SidebarItemDefinition[] = [ { id: "context-caveman", href: "/dashboard/context/caveman", i18nKey: "contextCaveman", icon: "compress", }, { id: "context-rtk", href: "/dashboard/context/rtk", i18nKey: "contextRtk", icon: "filter_alt", }, { id: "context-combos", href: "/dashboard/context/combos", i18nKey: "contextCombos", icon: "hub", }, ]; const DEBUG_SIDEBAR_ITEMS: readonly SidebarItemDefinition[] = [ { id: "translator", href: "/dashboard/translator", i18nKey: "translator", icon: "translate" }, { id: "playground", href: "/dashboard/playground", i18nKey: "playground", icon: "science" }, { id: "search-tools", href: "/dashboard/search-tools", i18nKey: "searchTools", icon: "manage_search", }, ]; const SYSTEM_SIDEBAR_ITEMS: readonly SidebarItemDefinition[] = [ { id: "logs", href: "/dashboard/logs", i18nKey: "logs", icon: "description" }, { id: "audit", href: "/dashboard/audit", i18nKey: "auditLog", icon: "policy" }, { id: "webhooks", href: "/dashboard/webhooks", i18nKey: "webhooks", icon: "webhook" }, { id: "health", href: "/dashboard/health", i18nKey: "health", icon: "health_and_safety" }, { id: "proxy", href: "/dashboard/system/proxy", i18nKey: "proxy", icon: "dns" }, { id: "settings", href: "/dashboard/settings", i18nKey: "settings", icon: "settings" }, ]; const HELP_SIDEBAR_ITEMS: readonly SidebarItemDefinition[] = [ { id: "docs", href: "/docs", i18nKey: "docs", icon: "menu_book", external: true }, { id: "issues", href: "https://github.com/diegosouzapw/OmniRoute/issues", i18nKey: "issues", icon: "bug_report", external: true, }, { id: "changelog", href: "/dashboard/changelog", i18nKey: "changelog", icon: "campaign" }, ]; export const SIDEBAR_SECTIONS: readonly SidebarSectionDefinition[] = [ { id: "primary", titleKey: "primarySection", titleFallback: "Main", items: PRIMARY_SIDEBAR_ITEMS, showTitleInSidebar: false, }, { id: "context", titleKey: "contextSection", titleFallback: "Context & Cache", items: CONTEXT_SIDEBAR_ITEMS, }, { id: "cli", titleKey: "cliSection", titleFallback: "CLI", items: CLI_SIDEBAR_ITEMS, }, { id: "debug", titleKey: "debugSection", titleFallback: "Debug", items: DEBUG_SIDEBAR_ITEMS, visibility: "debug", }, { id: "system", titleKey: "systemSection", titleFallback: "System", items: SYSTEM_SIDEBAR_ITEMS, }, { id: "help", titleKey: "helpSection", titleFallback: "Help", items: HELP_SIDEBAR_ITEMS, }, ] as const; export const HIDDEN_SIDEBAR_ITEMS_SETTING_KEY = "hiddenSidebarItems"; export const SIDEBAR_SETTINGS_UPDATED_EVENT = "omniroute:settings-updated"; export function normalizeHiddenSidebarItems(value: unknown): HideableSidebarItemId[] { if (!Array.isArray(value)) return []; const hiddenItems = new Set(); for (const item of value) { if ( typeof item === "string" && HIDEABLE_SIDEBAR_ITEM_IDS.includes(item as HideableSidebarItemId) ) { hiddenItems.add(item as HideableSidebarItemId); } } return HIDEABLE_SIDEBAR_ITEM_IDS.filter((item) => hiddenItems.has(item)); }