declare global { function GM_addValueChangeListener(name: string, valueChangeListener: (name: string, oldValue: any, newValue: any, remote: boolean) => void): number; function GM_setClipboard(data: any, info: string | { type?: string, mimetype?: string }): void; function GM_setValue(name: string, value: any): void; function GM_getValue(name: string, defaultValue?: T): T; interface MonkeyXhrResponse { finalUrl: string readyState: number status: number statusText: string responseHeaders: any response: any responseXML: Document responseText: string } interface MonkeyXhrBasicDetails { method: 'GET' | 'POST' | 'HEAD' url: string headers?: { [name: string]: string }, data?: string binary?: boolean timeout?: number context?: any responseType?: 'arraybuffer' | 'blob' | 'json' overrideMimeType?: string anonymous?: boolean fetch?: boolean username?: string password?: string } interface MonkeyXhrDetails extends MonkeyXhrBasicDetails { onabort?: (response: MonkeyXhrResponse) => void onerror?: (response: MonkeyXhrResponse) => void onloadstart?: (response: MonkeyXhrResponse) => void onprogress?: (response: MonkeyXhrResponse) => void onreadystatechange?: (response: MonkeyXhrResponse) => void ontimeout?: (response: MonkeyXhrResponse) => void onload?: (response: MonkeyXhrResponse) => void } function GM_xmlhttpRequest(details: MonkeyXhrDetails): { abort: () => void }; type RunAtOptions = "document-start" | "document-end" | "document-idle" | "document-body" | "context-menu"; type DanmakuOption = '无' | 'XML' | 'ASS' interface RpcOption { secretKey: string dir: string host: string port: string method: 'get' | 'post' skipByDefault: boolean maxDownloadLimit: string } interface RpcOptionProfile extends RpcOption { name: string } interface SearchHistoryItem { keyword: string count: number } interface MonkeyInfo { script: { author: string; copyright: string; description: string; excludes: string[]; homepage: string; icon: string; icon64: string; includes: string[]; lastUpdated: number; matches: string[]; downloadMode: string; name: string; namespace: string; options: { awareOfChrome: boolean; compat_arrayleft: boolean; compat_foreach: boolean; compat_forvarin: boolean; compat_metadata: boolean; compat_prototypes: boolean; compat_uW_gmonkey: boolean; noframes: boolean; override: { excludes: false; includes: false; orig_excludes: string[]; orig_includes: string[]; use_excludes: string[]; use_includes: string[]; }; run_at: RunAtOptions; }; position: number; resources: string[]; "run-at": RunAtOptions; system: boolean; unwrap: boolean; version: string; } scriptMetaStr: string; scriptSource: string; scriptUpdateURL: string; scriptWillUpdate: boolean; scriptHandler: string; isIncognito: boolean; version: string; } interface CustomNavbarComponents { blank1: number; logo: number; category: number; rankingLink: number; drawingLink: number; musicLink: number; gamesIframe: number; livesIframe: number; shopLink: number; mangaLink: number; blank2: number; search: number; userInfo: number; messages: number; activities: number; bangumi: number; watchlaterList: number; favoritesList: number; historyList: number; upload: number; blank3: number; } type CustomNavbarOrders = { [key in keyof CustomNavbarComponents]: number }; const GM_info: MonkeyInfo; const unsafeWindow: Window; const UserAgent: string const EmptyImageUrl: string interface Window { aid: string | undefined cid: string | undefined pageno: string | number | undefined $: JQueryStatic } class SpinQuery { static condition(query: () => T, condition: (queryResult: T) => boolean, success: (queryResult: T) => void, failed?: () => void): void; static condition(query: () => T, condition: (queryResult: T) => boolean): Promise; static select(query: () => T, action: (queryResult: T) => void, failed?: () => void): void; static select(query: () => T): Promise; static select(query: string): Promise; static any(query: () => T, action: (queryResult: T) => void, failed?: () => void): void; static any(query: () => T): Promise; static any(query: string): Promise; static count(query: () => T, count: number, success: (queryResult: T) => void, failed?: () => void): void; static count(query: () => T, count: number): Promise; static count(query: string, count: number): Promise>; static unsafeJquery(action: () => void, failed?: () => void): void; static unsafeJquery(): Promise; } class Toast { show(): void; dismiss(): void; static show(message: string, title: string, duration?: number): Toast; static info(message: string, title: string, duration?: number): Toast; static success(message: string, title: string, duration?: number): Toast; static error(message: string, title: string, duration?: number): Toast; } class Resource { text: string; key: string; dependencies: Array; styles: Array; displayName: string; dropdown: object; downloaded: boolean; constructor(url: string, styles?: Resource[]); download(): Promise; getStyle(id: string): string; getPriorStyle(): any; applyStyle(id: string, important: boolean): void; static all: object; static displayNames: object; static manifest: object; static root: string; } class ResourceManager { import(compnentName: string): any; getDefaultStyleId(key: string): string; applyStyle(key: string, id?: string): void; removeStyle(key: string): void; applyImportantStyle(key: string, id?: string): void; applyStyleFromText(text: string, id: string): void; applyImportantStyleFromText(text: string, id: string): void; getStyle(key: string, id?: string): void; toggleStyle(content: string, id: string): void; toggleStyle(key: string): void; applyDropdownOptions(): Promise; } const resources: ResourceManager; class DoubleClickEvent { constructor(handler: (e: MouseEvent) => void, singleClickHandler: (e: MouseEvent) => void); bind(element: Element): void; unbind(element: Element): void; } class Ajax { static send(xhr: XMLHttpRequest, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream): Promise; static getText(url: string): Promise; static getTextWithCredentials(url: string): Promise; static getJson(url: string): Promise; static getJsonWithCredentials(url: string): Promise; static getBlob(url: string): Promise; static getBlobWithCredentials(url: string): Promise; static postText(url: string, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream): Promise; static postTextWithCredentials(url: string, body: string | Document | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | ReadableStream): Promise; static postJson(url: string, json: any): Promise; static postJsonWithCredentials(url: string, json: any): Promise; static monkey(details: MonkeyXhrBasicDetails): Promise; } type Observable = string | Node | Node[] | NodeList; class Observer { constructor(element: Element, callback: MutationCallback); start(): Observer; stop(): Observer; options: MutationObserverInit; static observe(observable: Observable, callback: MutationCallback, options: MutationObserverInit): Observer[]; static childList(observable: Observable, callback: MutationCallback): Observer[]; static childListSubtree(observable: Observable, callback: MutationCallback): Observer[]; static attributes(observable: Observable, callback: MutationCallback): Observer[]; static attributesSubtree(observable: Observable, callback: MutationCallback): Observer[]; static all(observable: Observable, callback: MutationCallback): Observer[]; static videoChange(callback: MutationCallback): Promise; } interface BilibiliEvolvedSettings { useDarkStyle: boolean, useNewStyle: boolean, compactLayout: boolean, hideBanner: boolean, overrideNavBar: boolean, expandDanmakuList: boolean, expandDescription: boolean, watchLaterRedirect: boolean, touchNavBar: boolean, touchVideoPlayer: boolean, customControlBackgroundOpacity: number, customControlBackground: boolean, darkScheduleStart: string, darkScheduleEnd: string, darkSchedule: boolean, blurVideoControl: boolean, toast: boolean, fullTweetsTitle: boolean, fullPageTitle: boolean, removeVideoTopMask: boolean, removeLiveWatermark: boolean, harunaScale: boolean, removeAds: boolean, showBlockedAdsTip: boolean, hideTopSearch: boolean, touchVideoPlayerDoubleTapControl: boolean, touchVideoPlayerAnimation: boolean, customStyleColor: string, preserveRank: boolean, blurBackgroundOpacity: number, useDefaultPlayerMode: boolean, applyPlayerModeOnPlay: boolean, defaultPlayerMode: string, useDefaultVideoQuality: boolean, defaultVideoQuality: string, useDefaultDanmakuSettings: boolean, enableDanmaku: boolean, rememberDanmakuSettings: boolean, danmakuSettings: { subtitlesPreserve: boolean, smartMask: boolean, }, defaultPlayerLayout: string, defaultBangumiLayout: string, useDefaultPlayerLayout: boolean, skipChargeList: boolean, comboLike: boolean, autoLightOff: boolean, useCache: boolean, autoContinue: boolean, allowJumpContinue: boolean, autoPlay: boolean, showDeadVideoTitle: boolean, deadVideoTitleProvider: '稍后再看' | 'BiliPlus', useBiliplusRedirect: boolean, biliplusRedirect: boolean, framePlayback: boolean, useCommentStyle: boolean, imageResolution: boolean, imageResolutionScale: string, toastInternalError: boolean, i18n: boolean, i18nLanguage: string, playerFocus: boolean, playerFocusOffset: number, oldTweets: boolean, simplifyLiveroom: boolean, simplifyLiveroomSettings: { vip: boolean, fansMedal: boolean, title: boolean, userLevel: boolean, guard: boolean, systemMessage: boolean, welcomeMessage: boolean, giftMessage: boolean, guardPurchase: boolean, popup: boolean, skin: boolean, }, customNavbar: boolean, customNavbarFill: boolean, allNavbarFill: boolean, customNavbarShadow: boolean, customNavbarCompact: boolean, customNavbarBlur: boolean, customNavbarBlurOpacity: number, customNavbarOrder: CustomNavbarOrders, customNavbarHidden: Array, customNavbarBoundsPadding: number, playerShadow: boolean, narrowDanmaku: boolean, favoritesRedirect: boolean, outerWatchlater: boolean, hideOldEntry: boolean, hideBangumiReviews: boolean, videoScreenshot: boolean, cache: {} | { version: string } | undefined, filenameFormat: string, sideBarOffset: number, noLiveAutoplay: boolean, hideHomeLive: boolean, noMiniVideoAutoplay: boolean, useDefaultVideoSpeed: boolean, defaultVideoSpeed: string, hideCategory: boolean, foldComment: boolean, downloadVideoDefaultDanmaku: '无' | 'XML' | 'ASS', aria2RpcOption: RpcOption, aria2RpcOptionProfiles: RpcOptionProfile[], searchHistory: SearchHistoryItem[], seedsToCoins: boolean, autoSeedsToCoins: boolean, lastSeedsToCoinsDate: number, autoDraw: boolean, keymap: boolean, doubleClickFullscreen: boolean, doubleClickFullscreenPreventSingleClick: boolean simplifyHome: boolean, simplifyHomeStyle: '清爽' | '极简', ajaxHook: boolean, scriptLoadingMode: '同时' | '延后' | '同时(自动)' | '延后(自动)' | '自动', scriptDownloadMode: 'bundle' | 'legacy' guiSettingsDockSide: '左侧' | '右侧' latestVersionLink: string, currentVersion: string, } const settings: BilibiliEvolvedSettings; const customNavbarDefaultOrders: CustomNavbarOrders; const aria2RpcDefaultOption: RpcOption; const languageNameToCode: { [key: string]: string }; const languageCodeToName: { [key: string]: string }; function logError(message: Error | string): void; function loadSettings(): void function saveSettings(newSettings: BilibiliEvolvedSettings): void; function addSettingsListener(key: keyof BilibiliEvolvedSettings, handler: (newValue: any, oldValue: any) => void, initCall?: boolean): void; function removeSettingsListener(key: keyof BilibiliEvolvedSettings, handler: (newValue: any, oldValue: any) => void): void; function onSettingsChange(change: (key: string, oldValue: any, newValue: any) => void): void; function raiseEvent(element: Element, eventName: string): void; function loadLazyPanel(selector: string): Promise; function loadDanmakuSettingsPanel(): Promise; function contentLoaded(callback: () => void): void; function fullyLoaded(callback: () => void): void; function fixed(number: number, precision?: number): string; function isEmbeddedPlayer(): boolean; function isIframe(): boolean; function getI18nKey(): string; const dq: (selector: string) => Element | null; const dqa: (selector: string) => Element[]; const formatFileSize: (bytes: number, fixed?: number) => string const formatDuration: (time: number, fixed?: number) => string const ascendingSort: (itemProp: (item: T) => number) => (a: T, b: T) => number const descendingSort: (itemProp: (item: T) => number) => (a: T, b: T) => number const getDpiSourceSet: (src: string, baseSize: number | string | { width?: number | string, height?: number | string }, extension?: string) => string const isOffline: () => boolean const getUID: () => string const getCsrf: () => string const formatCount: (count: number | string) => string type ScriptVersion = 'Stable' | 'Preview' | 'Offline' | 'Preview Offline' | 'Local' | 'Local preview' | 'Local stable' | 'Local offline' | 'Local preview offline' const scriptVersion: ScriptVersion } export { };