/// declare const process: NodeJS.Process; declare module '*.module.scss'; declare const APP_VERSION: string; declare const APP_REVISION: string; declare const CHANGELOG_DATETIME: number | undefined; declare namespace React { interface HTMLAttributes { // Optimization for DOM nodes prepends and inserts teactFastList?: boolean; teactExperimentControlled?: boolean; } // Teact features // eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/no-wrapper-object-types interface CSSProperties extends String {} interface ClassAttributes extends RefAttributes { ref?: ((instance: T | undefined) => void) | React.RefObject | undefined; // Teact ref } interface Attributes { // Optimization for DOM nodes reordering. Requires `teactFastList` for parent teactOrderKey?: number; } interface VideoHTMLAttributes { srcObject?: MediaStream; defaultMuted?: boolean; } interface MouseEvent { offsetX: number; offsetY: number; } interface KeyboardEvent { isComposing: boolean; } } type AnyLiteral = Record; type AnyClass = new (...args: any[]) => any; type AnyFunction = (...args: any[]) => any; type AnyToVoidFunction = (...args: any[]) => void; type BooleanToVoidFunction = (value: boolean) => void; type NoneToVoidFunction = () => void; type StringAutocomplete = T | (string & {}); type Complete = { [P in keyof Required]: Pick extends Required> ? T[P] : (T[P] | undefined); }; type EmojiCategory = { id: string; name: string; emojis: string[]; }; type Emoji = { id: string; names: string[]; native: string; image: string; skin?: number; }; type EmojiWithSkins = Record; type AllEmojis = Record; // Declare supported formats as modules declare module '*.png' { const url: string; export default url; } declare module '*.jpg' { const url: string; export default url; } declare module '*.webp' { const url: string; export default url; } declare module '*.svg' { const url: string; export default url; } declare module '*.txt' { const url: string; export default url; } declare module '*.tgs' { const url: string; export default url; } declare module '*.wasm' { const url: string; export default url; } declare module '*.strings' { const url: string; export default url; } declare module 'opus-recorder' { export interface IOpusRecorder extends Omit { // eslint-disable-next-line @typescript-eslint/no-misused-new new(options: AnyLiteral): IOpusRecorder; start(stream?: MediaStreamAudioSourceNode): Promise; sourceNode: MediaStreamAudioSourceNode; ondataavailable: (typedArray: Uint8Array) => void; } const recorder: IOpusRecorder; export default recorder; } interface TEncodedImage { result: Uint8ClampedArray; width: number; height: number; } interface IWebpWorker extends Worker { wasmReady?: boolean; requests: Map) => void>; } interface Document { mozFullScreenElement: HTMLElement; webkitFullscreenElement: HTMLElement; mozCancelFullScreen?: () => Promise; webkitCancelFullScreen?: () => Promise; webkitExitFullscreen?: () => Promise; } interface HTMLElement { mozRequestFullScreen?: () => Promise; webkitEnterFullscreen?: () => Promise; webkitRequestFullscreen?: () => Promise; } interface Navigator { // PWA badging extensions https://w3c.github.io/badging/ setAppBadge?(count: number): Promise; } type Undefined = { [K in keyof T]: undefined; }; type OptionalCombine = (A & B) | (A & Undefined); type CommonProperties = { [K in keyof T & keyof U]: T[K] & U[K]; }; // Fix to make Boolean() work as !! // https://github.com/microsoft/TypeScript/issues/16655 type Falsy = false | 0 | '' | null | undefined; interface BooleanConstructor { new(value: T | Falsy): value is T; (value: T | Falsy): value is T; // eslint-disable-next-line @typescript-eslint/no-wrapper-object-types readonly prototype: Boolean; } interface Array { filter(predicate: BooleanConstructor, thisArg?: unknown): Exclude[]; } interface ReadonlyArray { filter(predicate: BooleanConstructor, thisArg?: unknown): Exclude[]; } // Missing type definitions for OPFS (Origin Private File System) API // https://github.com/WICG/file-system-access/blob/main/AccessHandle.md#accesshandle-idl interface FileSystemFileHandle extends FileSystemHandle { readonly kind: 'file'; getFile(): Promise; createSyncAccessHandle(): Promise; } interface FileSystemSyncAccessHandle { read: (buffer: BufferSource, options: FilesystemReadWriteOptions) => number; write: (buffer: BufferSource, options: FilesystemReadWriteOptions) => number; truncate: (size: number) => Promise; getSize: () => Promise; flush: () => Promise; close: () => Promise; } type FilesystemReadWriteOptions = { at: number; };