59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
/* 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: {},
|
|
}; |