/** @jsxImportSource react */ import { VDOM } from "../ui/Widget"; import { debug } from "../util/Debug"; import { Config } from "../ui/Prop"; export type ShapeRender = ( cx: number, cy: number, size: number, props?: Config, options?: Config ) => React.ReactElement; var shapes: { [key: string]: ShapeRender } = {}; var warnings: { [key: string]: boolean } = {}; export function registerShape(name: string, callback: ShapeRender): void { shapes[name] = callback; } export function getShape(shapeName: string): ShapeRender { if (shapes[shapeName]) return shapes[shapeName]; if (!warnings[shapeName]) { warnings[shapeName] = true; debug(`Unknown shape '${shapeName}'. Using square instead.`); } return shapes["square"]; } export function getAvailableShapes(): string[] { return Object.keys(shapes); } export function circle(cx: number, cy: number, size: number, props?: Config, options?: Config): React.ReactElement { const { key, ...rest } = props ?? {}; return ; } registerShape("circle", circle); export function square(cx: number, cy: number, size: number, props?: Config, options?: Config): React.ReactElement { size *= 0.9; const { key, ...rest } = props ?? {}; return ; } registerShape("square", square); registerShape("rect", square); export function bar(cx: number, cy: number, size: number, props?: Config, options?: Config): React.ReactElement { size *= 0.9; const { key, ...rest } = props ?? {}; return ; } registerShape("bar", bar); export function column(cx: number, cy: number, size: number, props?: Config, options?: Config): React.ReactElement { size *= 0.9; const { key, ...rest } = props ?? {}; return ; } registerShape("column", column); export function line(cx: number, cy: number, size: number, props?: Config, options?: Config): React.ReactElement { size *= 0.9; const { key, ...rest } = props ?? {}; return ; } registerShape("line", line); registerShape("hline", line); export function vline(cx: number, cy: number, size: number, props?: Config, options?: Config): React.ReactElement { size *= 0.9; const { key, ...rest } = props ?? {}; return ; } registerShape("vline", vline); export function triangle(cx: number, cy: number, size: number, props?: Config, options?: Config): React.ReactElement { size *= 1.29; var d = ""; var cos = Math.cos(Math.PI / 6); var sin = Math.sin(Math.PI / 6); d += `M ${cx} ${cy - size / 2} `; d += `L ${cx + (cos * size) / 2} ${cy + (sin * size) / 2} `; d += `L ${cx - (cos * size) / 2} ${cy + (sin * size) / 2} `; d += `Z`; const { key, ...rest } = props ?? {}; return ; } registerShape("triangle", triangle);