///
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;
};