/* ObsiGate — Shared mutable application state. Use state.xxx to read/write any value. ES module imports are read-only, so we export a single mutable object instead of individual let bindings. */ export const state = { APP_VERSION: "1.5.0", // Core navigation currentVault: null, currentPath: null, allVaults: [], selectedContextVault: "all", // Search searchTimeout: null, searchAbortController: null, advancedSearchOffset: 0, advancedSearchTotal: 0, advancedSearchSort: "relevance", advancedSearchLastQuery: "", suggestAbortController: null, dropdownActiveIndex: -1, dropdownItems: [], currentSearchId: 0, selectedTags: [], searchCaseSensitive: false, searchWholeWord: false, searchRegex: false, searchFilterVisible: false, // Search constants SEARCH_HISTORY_KEY: "obsigate_search_history", MAX_HISTORY_ENTRIES: 50, SUGGEST_DEBOUNCE_MS: 150, ADVANCED_SEARCH_LIMIT: 50, MIN_SEARCH_LENGTH: 2, SEARCH_TIMEOUT_MS: 30000, // Viewer state showingSource: false, cachedRawSource: null, editorView: null, editorVault: null, editorPath: null, fallbackEditorEl: null, _iconDebounceTimer: null, // Outline/TOC outlineObserver: null, activeHeadingId: null, headingsCache: [], rightSidebarVisible: true, rightSidebarWidth: 280, // Sidebar sidebarFilterCaseSensitive: false, activeSidebarTab: "vaults", filterDebounce: null, vaultSettings: {}, };