view.d.ts

6.0 kB · typescript · 164 lines

1export type Color = [number, number, number, number];2export type Point = [number, number];3export type Box = [number, number, number, number];45export interface Pixels {6    shape: [number, number];7    colors: Uint8Array | Uint8ClampedArray;8}910export interface Frame {11    x: number;12    y: number;13    w: number;14    h: number;15    inset(px: number): Frame;16    cell(n: number): number;17    at(u: number, v: number): Point;18    center(): Point;19    square(): Frame;20    radius(): number;21    cols(n: number): Frame[];22    rows(n: number): Frame[];23}2425export function frame(x: number, y: number, w: number, h: number): Frame;2627export interface Pen {28    readonly width: number;29    readonly height: number;30    frame(margin: number): Frame;31    area(margin: number): Frame;32    rect(x: number, y: number, w: number, h: number, c: Color): void;33    round_rect(x: number, y: number, w: number, h: number, r: number, c: Color): void;34    disc(cx: number, cy: number, r: number, c: Color): void;35    ring(cx: number, cy: number, r: number, thick: number, c: Color): void;36    segment(a: Point, b: Point, thick: number, c: Color): void;37    polyline(pts: Point[], thick: number, c: Color): void;38    triangle(a: Point, b: Point, c: Point, color: Color): void;39    polygon(pts: Point[], c: Color): void;40    arc(center: Point, r: number, angles: [number, number], thick: number, c: Color): void;41    image(x: number, y: number, w: number, h: number, pixels: Pixels): void;42}4344export interface Raster extends Pen {45    pixels(): { shape: [number, number]; colors: Uint8ClampedArray };46}4748export type Png = (pixels: { shape: [number, number]; colors: Uint8Array }) => Uint8Array | ArrayBuffer | string | Promise<Uint8Array | ArrayBuffer | string>;4950export interface Svg extends Pen {51    text(options?: { png?: Png }): Promise<string>;52}5354export function raster(width: number, height: number, ground?: Color): Raster;55export function svg(width: number, height: number, ground?: Color): Svg;56export function canvas(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, width: number, height: number, ground?: Color): Pen;5758export type Swatch = string | ArrayLike<number> | { r: number; g: number; b: number; a?: number };59export type Palette = Record<string, Swatch> | object;6061export class Ramp {62    constructor(stops: Color[], ground?: Color);63    stops: Color[];64    ground: Color;65    at(t: number): Color;66}6768export interface Ramps {69    new (stops: Color[]): Ramp;70    heat(): Ramp;71    fire(): Ramp;72    diverge(): Ramp;73    tone(a: Color, b: Color): Ramp;74}7576export interface Ink {77    readonly ground: Color;78    readonly panel: Color;79    readonly line: Color;80    readonly fg: Color;81    readonly dim: Color;82    readonly red: Color;83    readonly orange: Color;84    readonly yellow: Color;85    readonly green: Color;86    readonly mint: Color;87    readonly teal: Color;88    readonly cyan: Color;89    readonly blue: Color;90    readonly indigo: Color;91    readonly purple: Color;92    readonly pink: Color;93    readonly brown: Color;94    readonly gray: Color;95    readonly inks: Color[];96    mix(a: Color, b: Color, t: number): Color;97    fade(c: Color, alpha: number): Color;98    Ramp: Ramps;99}100101export function ink(palette: Palette): Ink;102export function mix(a: Color, b: Color, t: number): Color;103export function fade(c: Color, alpha: number): Color;104105export interface Cell {106    shape: number[];107    types: ArrayLike<number>;108}109110export namespace grid {111    export class Grid {112        constructor(frame: Frame, cols: number, rows: number, gap: number);113        frame: Frame;114        cols: number;115        rows: number;116        gap: number;117        cell(col: number, row: number): Box;118        fill(pen: Pen, col: number, row: number, color: Color): void;119        paint(pen: Pen, cells: Cell, ink: (type: number) => Color | null | undefined): void;120        carpet(pen: Pen, mask: boolean[][], color: Color): void;121    }122    export const LOGO: readonly string[];123    export function mask(rows: readonly string[], level: number): boolean[][];124    export function carpet(pen: Pen, frame: Frame, mask: boolean[][], gap: number, color: Color): void;125}126127export import Grid = grid.Grid;128129export namespace hex {130    export function draw(pen: Pen, frame: Frame, cell: { cell: Cell; start: number }, gap: number, ink: (type: number) => Color | null | undefined): void;131    export function count(n: number): number;132    export function row_len(n: number, row: number): number;133    export function hexagon(pen: Pen, frame: Frame, n: number, gap: number, ink: (row: number, col: number, up: number) => Color | null | undefined): void;134}135136export namespace iso {137    export interface Vec3 {138        x: number;139        y: number;140        z: number;141    }142    export interface Quad {143        normal: Vec3;144        verts: Vec3[];145    }146    export function project(x: number, y: number, z: number): Point;147    export function draw(pen: Pen, frame: Frame, quads: Quad[], shade: [Color, Color, Color], edge?: Color | null): void;148}149150export namespace plot {151    export function bars(pen: Pen, frame: Frame, values: ArrayLike<number>, gap: number, color: Color): void;152    export function dots(pen: Pen, pts: Point[], r: number, color: Color): void;153    export function rings(pen: Pen, center: Point, radii: number[], thick: number, color: Color): void;154    export function staircase(pen: Pen, frame: Frame, values: ArrayLike<number>, thick: number, color: Color): void;155    export function curve(pen: Pen, frame: Frame, xs: ArrayLike<number>, ys: ArrayLike<number>, thick: number, color: Color): void;156    export function axis(pen: Pen, frame: Frame, color: Color): void;157    export function baseline(pen: Pen, frame: Frame, color: Color): void;158}159160export namespace field {161    export function draw(pen: Pen, frame: Frame, width: number, height: number, values: ArrayLike<number>, ramp: Ramp): void;162    export function draw_range(pen: Pen, frame: Frame, width: number, height: number, values: ArrayLike<number>, span: [number, number], ramp: Ramp): void;163    export function sample(pen: Pen, frame: Frame, resolution: number, f: (u: number, v: number) => number, ramp: Ramp): void;164}