export type Variant = 'shuuro' | 'standard'; export type Color = (typeof colors)[number]; export type PieceSide = (typeof pieceSides)[number]; export type Letter = (typeof letters)[number]; export type PieceLetter = `${'' | '+'}${Letter | Uppercase}`; export type Role = `${'' | 'p'}${Letter}-piece`; export type File = (typeof files)[number]; export type Rank = (typeof ranks)[number]; export type Key = 'a0' | `${File}${Rank}`; export type DropOrig = `${PieceLetter}@`; export type Orig = DropOrig | Key; export type FEN = string; export type Pos = [number, number]; export interface Piece { role: Role; color: Color; promoted?: boolean; } export interface Drop { role: Role; key: Key; } export type Pieces = Map; export type Plinths = Map; export type PiecesDiff = Map; export type KeyPair = [Key, Key]; export type NumberPair = [number, number]; export type NumberQuad = [number, number, number, number]; export interface Rect { left: number; top: number; width: number; height: number; } export type DropDests = Map; export type Dests = Map; export interface Elements { board: HTMLElement; pocketTop?: HTMLElement; pocketBottom?: HTMLElement; wrap: HTMLElement; container: HTMLElement; ghost?: HTMLElement; svg?: SVGElement; customSvg?: SVGElement; } export interface Dom { elements: Elements; bounds: Memo; redraw: () => void; redrawNow: (skipSvg?: boolean) => void; unbind?: Unbind; destroyed?: boolean; } export interface Exploding { stage: number; keys: readonly Key[]; } export interface MoveMetadata { premove: boolean; ctrlKey?: boolean; holdTime?: number; captured?: Piece; predrop?: boolean; } export interface SetPremoveMetadata { ctrlKey?: boolean; } export type MouchEvent = Event & Partial; export interface KeyedNode extends HTMLElement { cgKey: Key; } export interface PieceNode extends KeyedNode { tagName: 'PIECE'; cgPiece: string; cgAnimating?: boolean; cgFading?: boolean; cgDragging?: boolean; } export interface SquareNode extends KeyedNode { tagName: 'SQUARE'; } export interface Memo { (): A; clear: () => void; } export interface Timer { start: () => void; cancel: () => void; stop: () => number; } export type Redraw = () => void; export type Unbind = () => void; export type Milliseconds = number; export type KHz = number; export declare const colors: readonly ["white", "black", "none"]; export declare const pieceSides: readonly ["ally", "enemy"]; export declare const files: readonly ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"]; export declare const ranks: readonly ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; export declare const letters: readonly ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; export interface BoardDimensions { width: number; height: number; } export declare enum Geometry { dim12x12 = 0, dim8x8 = 1, dim6x6 = 2 } export declare const enum Notation { ALGEBRAIC = 0 } export declare const dimensions: BoardDimensions[]; export type PocketPosition = 'top' | 'bottom'; export type Pocket = Partial>; export type Pockets = Partial>; export type PocketRoles = (color: Color) => PieceLetter[] | undefined; export declare const eventsDragging: string[]; export declare const eventsClicking: string[];