import { EVENT } from "./constants"; import { FontFamilyValues, FontString } from "./element/types"; import { AppState, LastActiveToolBeforeEraser, Zoom } from "./types"; import { SHAPES } from "./shapes"; export declare const setDateTimeForTests: (dateTime: string) => void; export declare const getDateTime: () => string; export declare const capitalizeString: (str: string) => string; export declare const isToolIcon: (target: Element | EventTarget | null) => target is HTMLElement; export declare const isInputLike: (target: Element | EventTarget | null) => target is HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | HTMLBRElement | HTMLDivElement; export declare const isWritableElement: (target: Element | EventTarget | null) => target is HTMLInputElement | HTMLTextAreaElement | HTMLBRElement | HTMLDivElement; export declare const getFontFamilyString: ({ fontFamily, }: { fontFamily: FontFamilyValues; }) => string; /** returns fontSize+fontFamily string for assignment to DOM elements */ export declare const getFontString: ({ fontSize, fontFamily, }: { fontSize: number; fontFamily: FontFamilyValues; }) => FontString; export declare const debounce: (fn: (...args: T) => void, timeout: number) => { (...args: T): void; flush(): void; cancel(): void; }; export declare const throttleRAF: (fn: (...args: T) => void) => { (...args: T): void; flush(): void; cancel(): void; }; export declare const chunk: (array: readonly T[], size: number) => T[][]; export declare const selectNode: (node: Element) => void; export declare const removeSelection: () => void; export declare const distance: (x: number, y: number) => number; export declare const updateActiveTool: (appState: Pick, data: ({ type: typeof SHAPES[number]["value"] | "eraser"; } | { type: "custom"; customType: string; }) & { lastActiveToolBeforeEraser?: LastActiveToolBeforeEraser; }) => AppState["activeTool"]; export declare const resetCursor: (canvas: HTMLCanvasElement | null) => void; export declare const setCursor: (canvas: HTMLCanvasElement | null, cursor: string) => void; export declare const setEraserCursor: (canvas: HTMLCanvasElement | null, theme: AppState["theme"]) => void; export declare const setCursorForShape: (canvas: HTMLCanvasElement | null, appState: AppState) => void; export declare const isFullScreen: () => boolean; export declare const allowFullScreen: () => Promise; export declare const exitFullScreen: () => Promise; export declare const getShortcutKey: (shortcut: string) => string; export declare const viewportCoordsToSceneCoords: ({ clientX, clientY }: { clientX: number; clientY: number; }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }: { zoom: Zoom; offsetLeft: number; offsetTop: number; scrollX: number; scrollY: number; }) => { x: number; y: number; }; export declare const sceneCoordsToViewportCoords: ({ sceneX, sceneY }: { sceneX: number; sceneY: number; }, { zoom, offsetLeft, offsetTop, scrollX, scrollY, }: { zoom: Zoom; offsetLeft: number; offsetTop: number; scrollX: number; scrollY: number; }) => { x: number; y: number; }; export declare const getGlobalCSSVariable: (name: string) => string; /** * Checks whether first directional character is RTL. Meaning whether it starts * with RTL characters, or indeterminate (numbers etc.) characters followed by * RTL. * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171 */ export declare const isRTL: (text: string) => boolean; export declare const tupleToCoors: (xyTuple: readonly [number, number]) => { x: number; y: number; }; /** use as a rejectionHandler to mute filesystem Abort errors */ export declare const muteFSAbortError: (error?: Error | undefined) => void; export declare const findIndex: (array: readonly T[], cb: (element: T, index: number, array: readonly T[]) => boolean, fromIndex?: number) => number; export declare const findLastIndex: (array: readonly T[], cb: (element: T, index: number, array: readonly T[]) => boolean, fromIndex?: number) => number; export declare const isTransparent: (color: string) => boolean; export declare type ResolvablePromise = Promise & { resolve: [T] extends [undefined] ? (value?: T) => void : (value: T) => void; reject: (error: Error) => void; }; export declare const resolvablePromise: () => ResolvablePromise; /** * @param func handler taking at most single parameter (event). */ export declare const withBatchedUpdates: void) | (() => void)>(func: Parameters["length"] extends 0 | 1 ? TFunction : never) => TFunction; /** * barches React state updates and throttles the calls to a single call per * animation frame */ export declare const withBatchedUpdatesThrottled: void) | (() => void)>(func: Parameters["length"] extends 0 | 1 ? TFunction : never) => { (...args: Parameters): void; flush(): void; cancel(): void; }; export declare const nFormatter: (num: number, digits: number) => string; export declare const getVersion: () => string; export declare const supportsEmoji: () => boolean; export declare const getNearestScrollableContainer: (element: HTMLElement) => HTMLElement | Document; export declare const focusNearestParent: (element: HTMLInputElement) => void; export declare const preventUnload: (event: BeforeUnloadEvent) => void; export declare const bytesToHexString: (bytes: Uint8Array) => string; export declare const getUpdatedTimestamp: () => number; /** * Transforms array of objects containing `id` attribute, * or array of ids (strings), into a Map, keyd by `id`. */ export declare const arrayToMap: (items: readonly T[]) => Map; export declare const isTestEnv: () => boolean; export declare const isProdEnv: () => boolean; export declare const wrapEvent: (name: EVENT, nativeEvent: T) => CustomEvent<{ nativeEvent: T; }>; export declare const updateObject: >(obj: T, updates: Partial) => T; export declare const isPrimitive: (val: any) => boolean; export declare const getFrame: () => "top" | "iframe"; export declare const isPromiseLike: (value: any) => value is Promise; export declare const queryFocusableElements: (container: HTMLElement | null) => HTMLElement[];