@opentui/core
Version:
OpenTUI is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)
108 lines (107 loc) • 3.68 kB
TypeScript
import { type ImageHandle } from "./zig.js";
export type ImageFormat = "png" | "raw-rgba" | "jpeg" | "webp" | "gif";
export type ImageColorStatus = "assumed-srgb" | "explicit-srgb";
export type ResizeKernel = "default" | "area" | "triangle" | "cubic-bspline" | "catmull-rom" | "mitchell" | "nearest";
export type BlendMode = "source-over" | "source" | "destination-over";
export type PixelFormat = "rgba8" | "bgra8";
export type ImageSource = string | URL | Uint8Array | ArrayBuffer | Blob | Response;
export type ImageLoadErrorCode = "file-read" | "network" | "http-status" | "unsupported-url-scheme";
export declare class ImageLoadError extends Error {
readonly code: ImageLoadErrorCode;
readonly source: string;
readonly status?: number;
constructor(code: ImageLoadErrorCode, source: string, message: string, options?: {
cause?: unknown;
status?: number;
});
}
export interface ImageLoadOptions {
signal?: AbortSignal;
fetch?: (input: URL, init?: RequestInit) => Promise<Response>;
}
export interface ImageInfo {
width: number;
height: number;
sourceWidth: number;
sourceHeight: number;
format: ImageFormat;
colorStatus: ImageColorStatus;
orientation: number;
hasAlpha: boolean;
}
export interface ResizeOptions {
width?: number;
height?: number;
kernel?: ResizeKernel;
}
export interface ExtractOptions {
left: number;
top: number;
width: number;
height: number;
}
export interface ExtendOptions {
top?: number;
right?: number;
bottom?: number;
left?: number;
background?: readonly [number, number, number, number];
}
export interface CompositeOptions {
left?: number;
top?: number;
blend?: BlendMode;
opacity?: number;
}
export interface RawImage {
data: Uint8Array;
width: number;
height: number;
stride: number;
format: PixelFormat;
colorSpace: "srgb";
alpha: "straight";
}
export interface OwnedRawImage extends RawImage {
dispose(): void;
}
export type ImageErrorCode = "invalid-handle" | "unsupported-format" | "unsupported-color-space" | "malformed-data" | "dimension-limit" | "memory-limit" | "invalid-argument" | "out-of-memory" | "output-too-small" | "internal-error" | "unsupported-feature";
export declare class ImageError extends Error {
readonly code: ImageErrorCode;
readonly status: number;
constructor(status: number);
}
export declare function imageInfo(data: Uint8Array | ArrayBuffer): ImageInfo;
export declare class NativeImage {
private readonly lib;
private handle;
private imageInfo;
private constructor();
static decode(data: Uint8Array | ArrayBuffer): NativeImage;
static load(source: ImageSource, options?: ImageLoadOptions): Promise<NativeImage>;
static fromRgba(pixels: Uint8Array, width: number, height: number, stride?: number): NativeImage;
private static fromHandle;
private guard;
get ptr(): ImageHandle;
private wrap;
info(): ImageInfo;
get width(): number;
get height(): number;
clone(): NativeImage;
retain(): NativeImage;
resize(options: ResizeOptions): NativeImage;
extract(options: ExtractOptions): NativeImage;
extend(options?: ExtendOptions): NativeImage;
rotate(angle: 90 | 180 | 270): NativeImage;
flip(): NativeImage;
flop(): NativeImage;
composite(overlay: NativeImage, options?: CompositeOptions): NativeImage;
ensureEncodedPng(): void;
raw(format?: PixelFormat): RawImage;
takeRaw(): OwnedRawImage;
copyTo(destination: Uint8Array, options?: {
stride?: number;
format?: PixelFormat;
}): void;
dispose(): void;
}