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}