Przeglądaj źródła

:art: Improve the type definition of `siyuan.config` (#10697)

Yingyi / 颖逸 1 rok temu
rodzic
commit
f5043a8c46
2 zmienionych plików z 1765 dodań i 1 usunięć
  1. 1764 0
      app/src/types/config.d.ts
  2. 1 1
      app/src/types/index.d.ts

+ 1764 - 0
app/src/types/config.d.ts

@@ -0,0 +1,1764 @@
+/**
+ * Copyright (C) 2023 SiYuan Community
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+declare namespace Config {
+
+    /**
+     * Configuration object
+     */
+    export interface IConf {
+        /**
+         * Access authorization code
+         */
+        accessAuthCode: AccessAuthCode;
+        account: IAccount;
+        ai: IAI;
+        api: IAPI;
+        appearance: IAppearance;
+        bazaar: IBazaar;
+        /**
+         * Cloud Service Provider Region
+         * - `0`: Chinese mainland
+         * - `1`: North America
+         */
+        cloudRegion: number;
+        editor: IEditor;
+        export: IExport;
+        fileTree: IFileTree;
+        flashcard: IFlashCard;
+        graph: IGraph;
+        keymap: IKeymap;
+        /**
+         * User interface language
+         * Same as {@link IAppearance.lang}
+         */
+        lang: TLang;
+        /**
+         * List of supported languages
+         */
+        langs: ILang[];
+        /**
+         * A list of the IP addresses of the devices on which the kernel resides
+         */
+        localIPs: string[];
+        /**
+         * Log level
+         */
+        logLevel: TLogLevel;
+        /**
+         * Whether to open the user guide after startup
+         */
+        openHelp: boolean;
+        /**
+         * Whether it is running in read-only mode
+         */
+        readonly: boolean;
+        repo: IRepo;
+        search: ISearch;
+        /**
+         * Whether to display the changelog for this release version
+         */
+        showChangelog: boolean;
+        snippet: ISnippet;
+        stat: IStat;
+        sync: ISync;
+        system: ISystem;
+        tag: ITag;
+        uiLayout: IiLayout;
+        /**
+         * Community user data (Encrypted)
+         */
+        userData: string;
+    }
+
+    /**
+     * Access authorization code
+     */
+    export type AccessAuthCode = "" | "*******";
+
+    /**
+     * Account configuration
+     */
+    export interface IAccount {
+        /**
+         * Display the title icon
+         */
+        displayTitle: boolean;
+        /**
+         * Display the VIP icon
+         */
+        displayVIP: boolean;
+    }
+
+    /**
+     * Artificial Intelligence (AI) related configuration
+     */
+    export interface IAI {
+        openAI: IOpenAI;
+    }
+
+    /**
+     * Open AI related configuration
+     */
+    export interface IOpenAI {
+        /**
+         * API base URL
+         */
+        apiBaseURL: string;
+        /**
+         * API key
+         */
+        apiKey: string;
+        /**
+         * Maximum number of tokens (0 means no limit)
+         */
+        apiMaxTokens: number;
+        /**
+         * The model name called by the API
+         */
+        apiModel: TOpenAIModel;
+        /**
+         * API Provider
+         */
+        apiProvider: APIProvider;
+        /**
+         * API request proxy address
+         */
+        apiProxy: string;
+        /**
+         * API request timeout (unit: seconds)
+         */
+        apiTimeout: number;
+        /**
+         * API request additional user agent field
+         */
+        apiUserAgent: string;
+        /**
+         * API version number
+         */
+        apiVersion: string;
+    }
+
+    /**
+     * The model name called by the API
+     */
+    export type TOpenAIModel = "gpt-4" | "gpt-4-32k" | "gpt-3.5-turbo" | "gpt-3.5-turbo-16k";
+
+    /**
+     * API Provider
+     */
+    export type APIProvider = "OpenAI" | "Azure";
+
+    /**
+     * SiYuan API related configuration
+     */
+    export interface IAPI {
+        /**
+         * API Token
+         */
+        token: string;
+    }
+
+    /**
+     * SiYuan appearance related configuration
+     */
+    export interface IAppearance {
+        /**
+         * Close button behavior
+         * - `0`: Exit application
+         * - `1`: Minimize to pallets
+         */
+        closeButtonBehavior: number;
+        /**
+         * Dark code block theme
+         */
+        codeBlockThemeDark: string;
+        /**
+         * Light code block theme
+         */
+        codeBlockThemeLight: string;
+        /**
+         * List of installed dark themes
+         */
+        darkThemes: string[];
+        /**
+         * Whether to hide status bar
+         */
+        hideStatusBar: boolean;
+        /**
+         * The name of the icon currently in use
+         */
+        icon: string;
+        /**
+         * List of installed icon names
+         */
+        icons: string[];
+        /**
+         * The version number of the icon currently in use
+         */
+        iconVer: string;
+        /**
+         * The language used by the current user
+         */
+        lang: TLang;
+        /**
+         * List of installed light themes
+         */
+        lightThemes: string[];
+        /**
+         * The current theme mode
+         * - `0`: Light theme
+         * - `1`: Dark theme
+         */
+        mode: number;
+        /**
+         * Whether the theme mode follows the system theme
+         */
+        modeOS: boolean;
+        /**
+         * The name of the dark theme currently in use
+         */
+        themeDark: string;
+        /**
+         * Whether the current theme has enabled theme JavaScript
+         */
+        themeJS: boolean;
+        /**
+         * The name of the light theme currently in use
+         */
+        themeLight: string;
+        /**
+         * The version number of the theme currently in use
+         */
+        themeVer: string;
+    }
+
+    /**
+     * The language used by the current user
+     *
+     * User interface language
+     * Same as {@link IAppearance.lang}
+     */
+    export type TLang = "en_US" | "es_ES" | "fr_FR" | "zh_CHT" | "zh_CN";
+
+    /**
+     * SiYuan bazaar related configuration
+     */
+    export interface IBazaar {
+        /**
+         * Whether to disable all plug-ins
+         */
+        petalDisabled: boolean;
+        /**
+         * Whether to trust (enable) the resources for the bazaar
+         */
+        trust: boolean;
+    }
+
+    /**
+     * SiYuan editor related configuration
+     */
+    export interface IEditor {
+        /**
+         * The default number of backlinks to expand
+         */
+        backlinkExpandCount: number;
+        /**
+         * The default number of backlinks to mention
+         */
+        backmentionExpandCount: number;
+        /**
+         * The maximum length of the dynamic anchor text for block references
+         */
+        blockRefDynamicAnchorTextMaxLen: number;
+        /**
+         * Whether the code block has enabled ligatures
+         */
+        codeLigatures: boolean;
+        /**
+         * Whether the code block is automatically wrapped
+         */
+        codeLineWrap: boolean;
+        /**
+         * Whether the code block displays line numbers
+         */
+        codeSyntaxHighlightLineNum: boolean;
+        /**
+         * The number of spaces generated by the Tab key in the code block, configured as 0 means no
+         * conversion to spaces
+         */
+        codeTabSpaces: number;
+        /**
+         * Whether to display the bookmark icon
+         */
+        displayBookmarkIcon: boolean;
+        /**
+         * Whether to display the network image mark
+         */
+        displayNetImgMark: boolean;
+        /**
+         * The number of blocks loaded each time they are dynamically loaded
+         */
+        dynamicLoadBlocks: number;
+        /**
+         * Whether the embedded block displays breadcrumbs
+         */
+        embedBlockBreadcrumb: boolean;
+        /**
+         * Common emoji icons
+         */
+        emoji: string[];
+        /**
+         * The trigger mode of the preview window
+         * - `0`: Hover over the cursor
+         * - `1`: Hover over the cursor while holding down Ctrl
+         * - `2`: Do not trigger the floating window
+         */
+        floatWindowMode: number;
+        /**
+         * The font used in the editor
+         */
+        fontFamily: string;
+        /**
+         * The font size used in the editor
+         */
+        fontSize: number;
+        /**
+         * Whether to enable the use of the mouse wheel to adjust the font size of the editor
+         */
+        fontSizeScrollZoom: boolean;
+        /**
+         * Whether the editor uses maximum width
+         */
+        fullWidth: boolean;
+        /**
+         * The time interval for generating document history, set to 0 to disable document history
+         * (unit: minutes)
+         */
+        generateHistoryInterval: number;
+        /**
+         * History retention days
+         */
+        historyRetentionDays: number;
+        /**
+         * Whether to enable text justification
+         */
+        justify: boolean;
+        /**
+         * KeTex macro definition (JSON string)
+         */
+        katexMacros: string;
+        /**
+         * Whether to enable single-click list item mark focus
+         */
+        listItemDotNumberClickFocus: boolean;
+        /**
+         * Whether to enable the list logical reverse indentation scheme
+         */
+        listLogicalOutdent: boolean;
+        /**
+         * Whether to enable the `[[` symbol to search only for document blocks
+         */
+        onlySearchForDoc: boolean;
+        /**
+         * PlantUML rendering service address
+         */
+        plantUMLServePath: string;
+        /**
+         * Whether to enable read-only mode
+         */
+        readOnly: boolean;
+        /**
+         * Whether to enable RTL (left-to-right chirography) mode
+         */
+        rtl: boolean;
+        /**
+         * Whether to enable spell checking
+         */
+        spellcheck: boolean;
+        /**
+         * Whether to enable virtual references
+         */
+        virtualBlockRef: boolean;
+        /**
+         * Virtual reference keyword exclusion list (separated by commas `,`)
+         */
+        virtualBlockRefExclude: string;
+        /**
+         * Virtual reference keyword inclusion list (separated by commas `,`)
+         */
+        virtualBlockRefInclude: string;
+    }
+
+    /**
+     * SiYuan export related configuration
+     */
+    export interface IExport {
+        /**
+         * Add article title (insert the article title as a first-level title at the beginning of
+         * the document)
+         */
+        addTitle: boolean;
+        /**
+         * Embedded block export mode
+         * - `0`: Original block content
+         * - `1`: Quotation block
+         */
+        blockEmbedMode: number;
+        /**
+         * Content block reference export mode
+         * - `0`: Original text (deprecated)
+         * - `1`: Quotation block (deprecated)
+         * - `2`: Anchor text block link
+         * - `3`: Anchor text only
+         * - `4`: Footnote
+         * - `5`: Anchor hash
+         */
+        blockRefMode: number;
+        /**
+         * The symbol on the left side of the block reference anchor text during export
+         */
+        blockRefTextLeft: string;
+        /**
+         * The symbol on the right side of the block reference anchor text during export
+         */
+        blockRefTextRight: string;
+        /**
+         * The path of the template file used when exporting to Docx
+         */
+        docxTemplate: string;
+        /**
+         * File annotation reference export mode
+         * - `0`: File name - page number - anchor text
+         * - `1`: Anchor text only
+         */
+        fileAnnotationRefMode: number;
+        /**
+         * Custom watermark position, size, style, etc. when exporting to an image
+         */
+        imageWatermarkDesc: string;
+        /**
+         * The watermark text or watermark file path used when exporting to an image
+         */
+        imageWatermarkStr: string;
+        /**
+         * Whether to add YAML Front Matter when exporting to Markdown
+         */
+        markdownYFM: boolean;
+        /**
+         * Pandoc executable file path
+         */
+        pandocBin: string;
+        /**
+         * Whether the beginning of the paragraph is empty two spaces.
+         * Insert two full-width spaces `U+3000` at the beginning of the paragraph.
+         */
+        paragraphBeginningSpace: boolean;
+        /**
+         * Custom footer content when exporting to PDF
+         */
+        pdfFooter: string;
+        /**
+         * Custom watermark position, size, style, etc. when exporting to PDF
+         */
+        pdfWatermarkDesc: string;
+        /**
+         * The watermark text or watermark file path used when exporting to PDF
+         */
+        pdfWatermarkStr: string;
+        /**
+         * Tag close marker symbol
+         */
+        tagCloseMarker: string;
+        /**
+         * Tag start marker symbol
+         */
+        tagOpenMarker: string;
+    }
+
+    /**
+     * Document tree related configuration
+     */
+    export interface IFileTree {
+        /**
+         * Whether to allow the creation of sub-documents deeper than 7 levels
+         */
+        allowCreateDeeper: boolean;
+        /**
+         * Whether to automatically locate the currently open document in the document tree
+         */
+        alwaysSelectOpenedFile: boolean;
+        /**
+         * Whether to close all tabs when starting
+         */
+        closeTabsOnStart: boolean;
+        /**
+         * The storage path of the new document
+         */
+        docCreateSavePath: string;
+        /**
+         * The maximum number of documents listed
+         */
+        maxListCount: number;
+        /**
+         * The maximum number of open tabs
+         */
+        maxOpenTabCount: number;
+        /**
+         * Whether to open the file in the current tab
+         */
+        openFilesUseCurrentTab: boolean;
+        /**
+         * The storage path of the new document created using block references
+         */
+        refCreateSavePath: string;
+        /**
+         * Close the secondary confirmation when deleting a document
+         */
+        removeDocWithoutConfirm: boolean;
+        /**
+         * Document sorting method
+         * - `0`: File name ascending
+         * - `1`: File name descending
+         * - `2`: File update time ascending
+         * - `3`: File update time descending
+         * - `4`: File name natural number ascending
+         * - `5`: File name natural number descending
+         * - `6`: Custom sorting
+         * - `7`: Reference count ascending
+         * - `8`: Reference count descending
+         * - `9`: File creation time ascending
+         * - `10`: File creation time descending
+         * - `11`: File size ascending
+         * - `12`: File size descending
+         * - `13`: Sub-document count ascending
+         * - `14`: Sub-document count descending
+         * - `15`: Use document tree sorting rules
+         * - `256`: Unspecified sorting rules, according to the notebook priority over the document
+         * tree to obtain sorting rules
+         */
+        sort: number;
+        /**
+         * Whether to save the content of the .sy file as a single-line JSON object
+         */
+        useSingleLineSave: boolean;
+    }
+
+    /**
+     * Flashcard related configuration
+     */
+    export interface IFlashCard {
+        /**
+         * Whether to enable deck card making
+         */
+        deck: boolean;
+        /**
+         * Whether to enable heading block card making
+         */
+        heading: boolean;
+        /**
+         * Whether to enable list block card making
+         */
+        list: boolean;
+        /**
+         * Whether to enable mark element card making
+         */
+        mark: boolean;
+        /**
+         * Maximum interval days
+         */
+        maximumInterval: number;
+        /**
+         * New card limit
+         */
+        newCardLimit: number;
+        /**
+         * FSRS request retention parameter
+         */
+        requestRetention: number;
+        /**
+         * Review card limit
+         */
+        reviewCardLimit: number;
+        /**
+         * Review mode
+         * - `0`: New and old mixed
+         * - `1`: New card priority
+         * - `2`: Old card priority
+         */
+        reviewMode: number;
+        /**
+         * Whether to enable super block card making
+         */
+        superBlock: boolean;
+        /**
+         * FSRS weight parameter list
+         */
+        weights: string;
+    }
+
+    /**
+     * SiYuan graph related configuration
+     */
+    export interface IGraph {
+        global: IGraphGlobal;
+        local: IGraphLocal;
+        /**
+         * Maximum number of content blocks displayed
+         */
+        maxBlocks: number;
+    }
+
+    /**
+     * Global graph configuration
+     */
+    export interface IGraphGlobal {
+        d3: IGraphD3;
+        /**
+         * Whether to display nodes in daily notes
+         */
+        dailyNote: boolean;
+        /**
+         * The minimum number of references to the displayed node
+         */
+        minRefs: number;
+        type: IGraphType;
+    }
+
+    /**
+     * d3.js graph configuration
+     */
+    export interface IGraphD3 {
+        /**
+         * Whether to display the arrow
+         */
+        arrow: boolean;
+        /**
+         * Central gravity intensity
+         */
+        centerStrength: number;
+        /**
+         * Repulsion radius
+         */
+        collideRadius: number;
+        /**
+         * Repulsion intensity
+         */
+        collideStrength: number;
+        /**
+         * Line opacity
+         */
+        lineOpacity: number;
+        /**
+         * Link distance
+         */
+        linkDistance: number;
+        /**
+         * Line width
+         */
+        linkWidth: number;
+        /**
+         * Node size
+         */
+        nodeSize: number;
+    }
+
+    /**
+     * SiYuan node type filter
+     */
+    export interface IGraphType {
+        /**
+         * Display quote block
+         */
+        blockquote: boolean;
+        /**
+         * Display code block
+         */
+        code: boolean;
+        /**
+         * Display heading block
+         */
+        heading: boolean;
+        /**
+         * Display list block
+         */
+        list: boolean;
+        /**
+         * Display list item
+         */
+        listItem: boolean;
+        /**
+         * Display formula block
+         */
+        math: boolean;
+        /**
+         * Display paragraph block
+         */
+        paragraph: boolean;
+        /**
+         * Display super block
+         */
+        super: boolean;
+        /**
+         * Display table block
+         */
+        table: boolean;
+        /**
+         * Display tag
+         */
+        tag: boolean;
+    }
+
+    /**
+     * Local graph configuration
+     */
+    export interface IGraphLocal {
+        d3: IGraphD3;
+        /**
+         * Whether to display nodes in daily notes
+         */
+        dailyNote: boolean;
+        type: IGraphType;
+    }
+
+    /**
+     * SiYuan keymap related configuration
+     */
+    export interface IKeymap {
+        editor: IKeymapEditor;
+        general: IKeymapGeneral;
+        plugin: { [key: string]: { [key: string]: IKey } };
+    }
+
+    /**
+     * SiYuan editor shortcut keys
+     */
+    export interface IKeymapEditor {
+        general: IKeymapEditorGeneral;
+        heading: IKeymapEditorHeading;
+        insert: IKeymapEditorInsert;
+        list: IKeymapEditorList;
+        table: IKeymapEditorTable;
+    }
+
+    /**
+     * SiYuan editor general shortcut keys
+     */
+    export interface IKeymapEditorGeneral {
+        ai: IKey;
+        alignCenter: IKey;
+        alignLeft: IKey;
+        alignRight: IKey;
+        attr: IKey;
+        backlinks: IKey;
+        collapse: IKey;
+        copyBlockEmbed: IKey;
+        copyBlockRef: IKey;
+        copyHPath: IKey;
+        copyID: IKey;
+        copyPlainText: IKey;
+        copyProtocol: IKey;
+        copyProtocolInMd: IKey;
+        copyText: IKey;
+        duplicate: IKey;
+        exitFocus: IKey;
+        expand: IKey;
+        expandDown: IKey;
+        expandUp: IKey;
+        fullscreen: IKey;
+        graphView: IKey;
+        hLayout: IKey;
+        insertAfter: IKey;
+        insertBefore: IKey;
+        insertBottom: IKey;
+        insertRight: IKey;
+        jumpToParentNext: IKey;
+        moveToDown: IKey;
+        moveToUp: IKey;
+        netAssets2LocalAssets: IKey;
+        netImg2LocalAsset: IKey;
+        newContentFile: IKey;
+        newNameFile: IKey;
+        newNameSettingFile: IKey;
+        openBy: IKey;
+        optimizeTypography: IKey;
+        outline: IKey;
+        preview: IKey;
+        quickMakeCard: IKey;
+        redo: IKey;
+        refPopover: IKey;
+        refresh: IKey;
+        refTab: IKey;
+        rename: IKey;
+        showInFolder: IKey;
+        spaceRepetition: IKey;
+        switchReadonly: IKey;
+        undo: IKey;
+        vLayout: IKey;
+        wysiwyg: IKey;
+    }
+
+    /**
+     * SiYuan shortcut key
+     */
+    export interface IKey {
+        /**
+         * Custom shortcut key
+         */
+        custom: string;
+        /**
+         * Default shortcut key
+         */
+        default: string;
+    }
+
+    /**
+     * SiYuan editor heading shortcut keys
+     */
+    export interface IKeymapEditorHeading {
+        heading1: IKey;
+        heading2: IKey;
+        heading3: IKey;
+        heading4: IKey;
+        heading5: IKey;
+        heading6: IKey;
+        paragraph: IKey;
+    }
+
+    /**
+     * SiYuan editor insert shortcut keys
+     */
+    export interface IKeymapEditorInsert {
+        appearance: IKey;
+        bold: IKey;
+        check: IKey;
+        clearInline: IKey;
+        code: IKey;
+        "inline-code": IKey;
+        "inline-math": IKey;
+        italic: IKey;
+        kbd: IKey;
+        lastUsed: IKey;
+        link: IKey;
+        mark: IKey;
+        memo: IKey;
+        ref: IKey;
+        strike: IKey;
+        sub: IKey;
+        sup: IKey;
+        table: IKey;
+        tag: IKey;
+        underline: IKey;
+    }
+
+    /**
+     * SiYuan editor list shortcut keys
+     */
+    export interface IKeymapEditorList {
+        checkToggle: IKey;
+        indent: IKey;
+        outdent: IKey;
+    }
+
+    /**
+     * SiYuan editor table shortcut keys
+     */
+    export interface IKeymapEditorTable {
+        "delete-column": IKey;
+        "delete-row": IKey;
+        insertColumnLeft: IKey;
+        insertColumnRight: IKey;
+        insertRowAbove: IKey;
+        insertRowBelow: IKey;
+        moveToDown: IKey;
+        moveToLeft: IKey;
+        moveToRight: IKey;
+        moveToUp: IKey;
+    }
+
+    /**
+     * SiYuan general shortcut keys
+     */
+    export interface IKeymapGeneral {
+        addToDatabase: IKey;
+        backlinks: IKey;
+        bookmark: IKey;
+        closeAll: IKey;
+        closeLeft: IKey;
+        closeOthers: IKey;
+        closeRight: IKey;
+        closeTab: IKey;
+        closeUnmodified: IKey;
+        commandPanel: IKey;
+        config: IKey;
+        dailyNote: IKey;
+        dataHistory: IKey;
+        editReadonly: IKey;
+        enter: IKey;
+        enterBack: IKey;
+        fileTree: IKey;
+        globalGraph: IKey;
+        globalSearch: IKey;
+        goBack: IKey;
+        goForward: IKey;
+        goToEditTabNext: IKey;
+        goToEditTabPrev: IKey;
+        goToTab1: IKey;
+        goToTab2: IKey;
+        goToTab3: IKey;
+        goToTab4: IKey;
+        goToTab5: IKey;
+        goToTab6: IKey;
+        goToTab7: IKey;
+        goToTab8: IKey;
+        goToTab9: IKey;
+        goToTabNext: IKey;
+        goToTabPrev: IKey;
+        graphView: IKey;
+        inbox: IKey;
+        lockScreen: IKey;
+        mainMenu: IKey;
+        move: IKey;
+        newFile: IKey;
+        outline: IKey;
+        recentDocs: IKey;
+        replace: IKey;
+        riffCard: IKey;
+        search: IKey;
+        selectOpen1: IKey;
+        splitLR: IKey;
+        splitMoveB: IKey;
+        splitMoveR: IKey;
+        splitTB: IKey;
+        stickSearch: IKey;
+        syncNow: IKey;
+        tabToWindow: IKey;
+        tag: IKey;
+        toggleDock: IKey;
+        toggleWin: IKey;
+    }
+
+    /**
+     * Supported language
+     */
+    export interface ILang {
+        /**
+         * Language name
+         */
+        label: string;
+        /**
+         * Language identifier
+         */
+        name: string;
+    }
+
+    /**
+     * Log level
+     */
+    export type TLogLevel = "off" | "trace" | "debug" | "info" | "warn" | "error" | "fatal";
+
+    /**
+     * Snapshot repository related configuration
+     */
+    export interface IRepo {
+        /**
+         * Snapshot encryption key (base64 encoded 256-bit key)
+         */
+        key: string;
+        /**
+         * Synchronous index timing, if it exceeds this time, the user is prompted that the index
+         * performance is degraded (unit: milliseconds)
+         */
+        syncIndexTiming: number;
+    }
+
+    /**
+     * SiYuan search related configuration
+     */
+    export interface ISearch {
+        /**
+         * Whether to search in block aliases
+         */
+        alias: boolean;
+        /**
+         * Extract backlink mention keywords from block aliases
+         */
+        backlinkMentionAlias: boolean;
+        /**
+         * Extract backlink mention keywords from block reference anchor text
+         */
+        backlinkMentionAnchor: boolean;
+        /**
+         * Extract backlink mention keywords from document names
+         */
+        backlinkMentionDoc: boolean;
+        /**
+         * Maximum number of backlink mention keywords
+         */
+        backlinkMentionKeywordsLimit: number;
+        /**
+         * Extract backlink mention keywords from block names
+         */
+        backlinkMentionName: boolean;
+        /**
+         * Whether to search quote blocks
+         */
+        blockquote: boolean;
+        /**
+         * Whether to distinguish between uppercase and lowercase letters when searching
+         */
+        caseSensitive: boolean;
+        /**
+         * Whether to search code blocks
+         */
+        codeBlock: boolean;
+        /**
+         * Whether to search database blocks
+         */
+        databaseBlock: boolean;
+        /**
+         * Whether to search document blocks
+         */
+        document: boolean;
+        /**
+         * Whether to search embedded blocks
+         */
+        embedBlock: boolean;
+        /**
+         * Whether to search heading blocks
+         */
+        heading: boolean;
+        /**
+         * Whether to search HTML blocks
+         */
+        htmlBlock: boolean;
+        /**
+         * Whether to search block attributes
+         */
+        ial: boolean;
+        /**
+         * Whether to search resource file paths
+         */
+        indexAssetPath: boolean;
+        /**
+         * Number of search results displayed
+         */
+        limit: number;
+        /**
+         * Whether to search list blocks
+         */
+        list: boolean;
+        /**
+         * Whether to search list items
+         */
+        listItem: boolean;
+        /**
+         * Whether to search formula blocks
+         */
+        mathBlock: boolean;
+        /**
+         * Whether to search block notes
+         */
+        memo: boolean;
+        /**
+         * Whether to search block names
+         */
+        name: boolean;
+        /**
+         * Whether to search paragraph blocks
+         */
+        paragraph: boolean;
+        /**
+         * Whether to search super blocks
+         */
+        superBlock: boolean;
+        /**
+         * Whether to search table blocks
+         */
+        table: boolean;
+        /**
+         * Whether to get virtual reference keywords from block aliases
+         */
+        virtualRefAlias: boolean;
+        /**
+         * Whether to get virtual reference keywords from block reference anchor text
+         */
+        virtualRefAnchor: boolean;
+        /**
+         * Whether to get virtual reference keywords from document names
+         */
+        virtualRefDoc: boolean;
+        /**
+         * Whether to get virtual reference keywords from block names
+         */
+        virtualRefName: boolean;
+    }
+
+    /**
+     * SiYuan code snippets related configuration
+     */
+    export interface ISnippet {
+        /**
+         * Whether to enable CSS code snippets
+         */
+        enabledCSS: boolean;
+        /**
+         * Whether to enable JavaScript code snippets
+         */
+        enabledJS: boolean;
+    }
+
+    /**
+     * SiYuan workspace content statistics
+     */
+    export interface IStat {
+        /**
+         * Asset file size (unit: bytes)
+         */
+        assetsSize: number;
+        /**
+         * Number of content blocks
+         */
+        blockCount: number;
+        /**
+         * Size of resource files after chunk encryption (unit: bytes)
+         */
+        cAssetsSize: number;
+        /**
+         * Number of content blocks after chunk encryption
+         */
+        cBlockCount: number;
+        /**
+         * Size of the data directory after chunk encryption (unit: bytes)
+         */
+        cDataSize: number;
+        /**
+         * Number of content block trees after chunk encryption (number of documents)
+         */
+        cTreeCount: number;
+        /**
+         * Data directory size (unit: bytes)
+         */
+        dataSize: number;
+        /**
+         * Number of content block trees (number of documents)
+         */
+        treeCount: number;
+    }
+
+    /**
+     * SiYuan synchronization related configuration
+     */
+    export interface ISync {
+        /**
+         * Cloud workspace name
+         */
+        cloudName: string;
+        /**
+         * Whether to enable synchronization
+         */
+        enabled: boolean;
+        /**
+         * Whether to create a conflict document when a conflict occurs during synchronization
+         */
+        generateConflictDoc: boolean;
+        /**
+         * Synchronization mode
+         * - `0`: Not set
+         * - `1`: Automatic synchronization
+         * - `2`: Manual synchronization
+         * - `3`: Completely manual synchronization
+         */
+        mode: number;
+        /**
+         * Whether to enable synchronization perception
+         */
+        perception: boolean;
+        /**
+         * Cloud storage service provider
+         * - `0`: SiYuan official cloud storage service
+         * - `1`: Object storage service compatible with S3 protocol
+         * - `2`: Network storage service using WebDAV protocol
+         */
+        provider: number;
+        s3: ISyncS3;
+        /**
+         * The prompt information of the last synchronization
+         */
+        stat: string;
+        /**
+         * The time of the last synchronization (Unix timestamp)
+         */
+        synced: number;
+        webdav: ISyncWebDAV;
+    }
+
+    /**
+     * S3 compatible object storage related configuration
+     */
+    export interface ISyncS3 {
+        /**
+         * Access key
+         */
+        accessKey: string;
+        /**
+         * Bucket name
+         */
+        bucket: string;
+        /**
+         * Service endpoint address
+         */
+        endpoint: string;
+        /**
+         * Whether to use path-style URLs
+         */
+        pathStyle: boolean;
+        /**
+         * Storage region
+         */
+        region: string;
+        /**
+         * Security key
+         */
+        secretKey: string;
+        /**
+         * Whether to skip TLS verification
+         */
+        skipTlsVerify: boolean;
+        /**
+         * Timeout (unit: seconds)
+         */
+        timeout: number;
+    }
+
+    /**
+     * WebDAV related configuration
+     */
+    export interface ISyncWebDAV {
+        /**
+         * Service endpoint
+         */
+        endpoint: string;
+        /**
+         * Password
+         */
+        password: string;
+        /**
+         * Whether to skip TLS verification
+         */
+        skipTlsVerify: boolean;
+        /**
+         * Timeout (unit: seconds)
+         */
+        timeout: number;
+        /**
+         * Username
+         */
+        username: string;
+    }
+
+    /**
+     * System related information
+     */
+    export interface ISystem {
+        /**
+         * The absolute path of the `resources` directory under the SiYuan installation directory
+         */
+        appDir: string;
+        /**
+         * Boot automatically
+         */
+        autoLaunch: boolean;
+        /**
+         * The absolute path of the `conf` directory of the current workspace
+         */
+        confDir: string;
+        /**
+         * Kernel operating environment
+         * - `docker`: Docker container
+         * - `android`: Android device
+         * - `ios`: iOS device
+         * - `std`: Desktop Electron environment
+         */
+        container: Container;
+        /**
+         * The absolute path of the `data` directory of the current workspace
+         */
+        dataDir: string;
+        /**
+         * Whether to disable Google Analytics
+         */
+        disableGoogleAnalytics: boolean;
+        /**
+         * Whether to automatically download the installation package for the new version
+         */
+        downloadInstallPkg: boolean;
+        /**
+         * The absolute path of the user's home directory for the current operating system user
+         */
+        homeDir: string;
+        /**
+         * The UUID of the current session
+         */
+        id: string;
+        /**
+         * Whether the current version is an internal test version
+         */
+        isInsider: boolean;
+        /**
+         * Whether the current version is a Microsoft Store version
+         */
+        isMicrosoftStore: boolean;
+        /**
+         * Kernel version number
+         */
+        kernelVersion: string;
+        /**
+         * Lock screen mode
+         * - `0`: Manual
+         * - `1`: Manual + Follow the operating system
+         */
+        lockScreenMode: number;
+        /**
+         * The name of the current device
+         */
+        name: string;
+        networkProxy: INetworkProxy;
+        /**
+         * Whether to enable network serve (whether to allow connections from other devices)
+         */
+        networkServe: boolean;
+        /**
+         * The operating system name determined at compile time (obtained using the command `go tool
+         * dist list`)
+         * - `android`: Android
+         * - `darwin`: macOS
+         * - `ios`: iOS
+         * - `linux`: Linux
+         * - `windows`: Windows
+         */
+        os: OS;
+        /**
+         * Operating system platform name
+         */
+        osPlatform: string;
+        /**
+         * Whether to upload error logs
+         */
+        uploadErrLog: boolean;
+        /**
+         * The absolute path of the workspace directory
+         */
+        workspaceDir: string;
+    }
+
+    /**
+     * Kernel operating environment
+     * - `docker`: Docker container
+     * - `android`: Android device
+     * - `ios`: iOS device
+     * - `std`: Desktop Electron environment
+     */
+    export type Container = "docker" | "android" | "ios" | "std";
+
+    /**
+     * SiYuan Network proxy configuration
+     */
+    export interface INetworkProxy {
+        /**
+         * Host name or host address
+         */
+        host: string;
+        /**
+         * Proxy server port number
+         */
+        port: string;
+        /**
+         * The protocol used by the proxy server
+         * - Empty String: Use the system proxy settings
+         * - `http`: HTTP
+         * - `https`: HTTPS
+         * - `socks5`: SOCKS5
+         */
+        scheme: Scheme;
+    }
+
+    /**
+     * The protocol used by the proxy server
+     * - Empty String: Use the system proxy settings
+     * - `http`: HTTP
+     * - `https`: HTTPS
+     * - `socks5`: SOCKS5
+     */
+    export type Scheme = "" | "http" | "https" | "socks5";
+
+    /**
+     * The operating system name determined at compile time (obtained using the command `go tool
+     * dist list`)
+     * - `android`: Android
+     * - `darwin`: macOS
+     * - `ios`: iOS
+     * - `linux`: Linux
+     * - `windows`: Windows
+     */
+    export type OS = "android" | "darwin" | "ios" | "linux" | "windows";
+
+    /**
+     * SiYuan tag dock related configuration
+     */
+    export interface ITag {
+        /**
+         * Tag sorting scheme
+         * - `0`: Name alphabetically ascending
+         * - `1`: Name alphabetically descending
+         * - `4`: Name natural ascending
+         * - `5`: Name natural descending
+         * - `7`: Reference count ascending
+         * - `8`: Reference count descending
+         */
+        sort: number;
+    }
+
+    /**
+     * SiYuan UI layout related configuration
+     */
+    export interface IiLayout {
+        bottom: IUILayoutDock;
+        /**
+         * Whether to hide the sidebar
+         */
+        hideDock: boolean;
+        layout: IUILayoutLayout;
+        left: IUILayoutDock;
+        right: IUILayoutDock;
+    }
+
+    /**
+     * SiYuan dock related configuration
+     */
+    export interface IUILayoutDock {
+        /**
+         * Dock area list
+         */
+        data: Array<IUILayoutDockPanel[]>;
+        /**
+         * Whether to pin the dock
+         */
+        pin: boolean;
+    }
+
+    /**
+     * Dock panel list
+     *
+     * SiYuan dock panel data
+     */
+    export interface IUILayoutDockPanel {
+        /**
+         * Panel hotkey
+         */
+        hotkey: string;
+        /**
+         * Hotkey description ID
+         */
+        hotkeyLangId: string;
+        /**
+         * Panel icon ID
+         */
+        icon: string;
+        /**
+         * Whether to display the panel
+         */
+        show: boolean;
+        size: IUILayoutDockPanelSize;
+        /**
+         * Panel title
+         */
+        title: string;
+        /**
+         * Panel type
+         */
+        type: string;
+    }
+
+    /**
+     * SiYuan dock panel size
+     */
+    export interface IUILayoutDockPanelSize {
+        /**
+         * Panel height (unit: px)
+         */
+        height: number | null;
+        /**
+         * Panel width (unit: px)
+         */
+        width: number | null;
+    }
+
+    /**
+     * SiYuan panel layout
+     */
+    export interface IUILayoutLayout {
+        /**
+         * Internal elements
+         */
+        children: IUILayoutLayoutChild[];
+        /**
+         * Panel content layout direction
+         * - `tb`: Top and bottom layout
+         * - `lr`: Left and right layout
+         */
+        direction?: Direction;
+        /**
+         * Object name
+         */
+        instance: LayoutInstance;
+        /**
+         * The direction in which the size can be adjusted
+         * - `tb`: Can adjust the size up and down
+         * - `lr`: Can adjust the size left and right
+         */
+        resize?: Direction;
+        /**
+         * Panel size
+         */
+        size?: string;
+        /**
+         * Layout type
+         * - `normal`: Normal panel
+         * - `center`: Center panel
+         * - `top`: Top panel
+         * - `bottom`: Bottom panel
+         * - `left`: Left panel
+         * - `right`: Right panel
+         */
+        type?: Type;
+    }
+
+    /**
+     * SiYuan panel layout
+     *
+     * SiYuan window layout
+     */
+    export interface IUILayoutLayoutChild {
+        /**
+         * Internal elements
+         */
+        children: ChildElement[];
+        /**
+         * Panel content layout direction
+         * - `tb`: Top and bottom layout
+         * - `lr`: Left and right layout
+         */
+        direction?: Direction;
+        /**
+         * Object name
+         */
+        instance: IUILayoutLayoutChildInstance;
+        /**
+         * The direction in which the size can be adjusted
+         * - `tb`: Can adjust the size up and down
+         * - `lr`: Can adjust the size left and right
+         */
+        resize?: Direction;
+        /**
+         * Panel size
+         */
+        size?: string;
+        /**
+         * Layout type
+         * - `normal`: Normal panel
+         * - `center`: Center panel
+         * - `top`: Top panel
+         * - `bottom`: Bottom panel
+         * - `left`: Left panel
+         * - `right`: Right panel
+         */
+        type?: Type;
+        /**
+         * Panel height
+         */
+        height?: string;
+        /**
+         * Panel width
+         */
+        width?: string;
+    }
+
+    export type Children = ChildElement[] | IUILayoutTabContent;
+
+    /**
+     * SiYuan panel layout
+     *
+     * SiYuan window layout
+     *
+     * SiYuan tab
+     */
+    export interface ChildElement {
+        /**
+         * Internal elements
+         *
+         * Tab content
+         */
+        children: Children;
+        /**
+         * Panel content layout direction
+         * - `tb`: Top and bottom layout
+         * - `lr`: Left and right layout
+         */
+        direction?: Direction;
+        /**
+         * Object name
+         */
+        instance: ChildInstance;
+        /**
+         * The direction in which the size can be adjusted
+         * - `tb`: Can adjust the size up and down
+         * - `lr`: Can adjust the size left and right
+         */
+        resize?: Direction;
+        /**
+         * Panel size
+         */
+        size?: string;
+        /**
+         * Layout type
+         * - `normal`: Normal panel
+         * - `center`: Center panel
+         * - `top`: Top panel
+         * - `bottom`: Bottom panel
+         * - `left`: Left panel
+         * - `right`: Right panel
+         */
+        type?: Type;
+        /**
+         * Panel height
+         */
+        height?: string;
+        /**
+         * Panel width
+         */
+        width?: string;
+        /**
+         * Whether the tab is active
+         */
+        active?: boolean;
+        /**
+         * Tab icon
+         */
+        docIcon?: string;
+        /**
+         * Whether the tab is pinned
+         */
+        pin?: boolean;
+        /**
+         * Tab title
+         */
+        title?: string;
+    }
+
+    /**
+     * Tab content
+     *
+     * SiYuan editor tab
+     *
+     * SiYuan asset file tab
+     *
+     * SiYuan custom tab
+     */
+    export interface IUILayoutTabContent {
+        /**
+         * (Editor) Actions to be performed after the tab is loaded
+         */
+        action?: string;
+        /**
+         * (Editor) Block ID
+         */
+        blockId?: string;
+        /**
+         * Object name
+         */
+        instance: IUILayoutTabContentInstance;
+        /**
+         * (Editor) Editor mode
+         * - `wysiwyg`: WYSIWYG mode
+         * - `preview`: Export preview mode
+         */
+        mode?: Mode;
+        /**
+         * (Editor) Notebook ID
+         */
+        notebookId?: string;
+        /**
+         * (Editor) Document block ID
+         */
+        rootId?: string;
+        /**
+         * (Asset) PDF file page number
+         */
+        page?: number;
+        /**
+         * (Asset) Asset reference path
+         */
+        path?: string;
+        /**
+         * (Custom) Data of the custom tab
+         */
+        customModelData?: any;
+        /**
+         * (Custom) Type of the custom tab
+         */
+        customModelType?: string;
+    }
+
+    export type IUILayoutTabContentInstance = "Editor" | "Asset" | "Custom";
+
+    /**
+     * (Editor) Editor mode
+     * - `wysiwyg`: WYSIWYG mode
+     * - `preview`: Export preview mode
+     */
+    export type Mode = "wysiwyg" | "preview";
+
+    /**
+     * Panel content layout direction
+     * - `tb`: Top and bottom layout
+     * - `lr`: Left and right layout
+     *
+     * The direction in which the size can be adjusted
+     * - `tb`: Can adjust the size up and down
+     * - `lr`: Can adjust the size left and right
+     */
+    export type Direction = "tb" | "lr";
+
+    export type ChildInstance = "Layout" | "Wnd" | "Tab";
+
+    /**
+     * Layout type
+     * - `normal`: Normal panel
+     * - `center`: Center panel
+     * - `top`: Top panel
+     * - `bottom`: Bottom panel
+     * - `left`: Left panel
+     * - `right`: Right panel
+     */
+    export type Type = "normal" | "center" | "top" | "bottom" | "left" | "right";
+
+    export type IUILayoutLayoutChildInstance = "Layout" | "Wnd";
+
+    export type LayoutInstance = "Layout";
+
+}

+ 1 - 1
app/src/types/index.d.ts

@@ -427,7 +427,7 @@ interface ISiyuan {
         rightDock?: import("../layout/dock").Dock,
         bottomDock?: import("../layout/dock").Dock,
     }
-    config?: IConfig;
+    config?: Config.IConf;
     ws: import("../layout/Model").Model,
     ctrlIsPressed?: boolean,
     altIsPressed?: boolean,