UNPKG

@typed-tabletop-simulator/ui

Version:
63 lines (62 loc) 2.04 kB
/** @noSelfInFile */ import { ArrayOrSingle } from "../core"; import { ConvertResult, Converters } from "./convert"; export type Tag = keyof JSX.IntrinsicElements; export type Vector2Prop = [number, number]; export type VectorProp = VectorShape; export type ScaleProp = VectorShape | number; export type ShadowProp = number | Vector2Prop; export type OffsetProp = Vector2Prop | Alignment | [number, number, Alignment]; export type ElementProps<T, A, C = ArrayOrSingle<JSX.Element | JSX.Element[]>> = A & { ref?: Ref<T>; } & { children?: C; }; export interface Ref<T> { current?: T; } export type HandlerFunction = (this: void, player: Player, value: any) => unknown; export interface BaseProps extends UIElementProps { visibleTo?: (PlayerColor | PlayerTeam | "Host" | "Admin")[]; position?: VectorProp; rotation?: VectorProp; scale?: ScaleProp; } export interface UIElementProps { active?: boolean; offset?: OffsetProp; width?: number | `${number}%`; height?: number | `${number}%`; } export interface TextLikeProps { text?: string; textSize?: number; font?: string; alignment?: Alignment; } export interface ColorLikeProps { color?: string; } export declare abstract class BaseUIElement<Props extends BaseProps> { protected id?: string; private tag; private props; private parent?; private children?; private converters; private handlers; constructor(tag: Tag, props: Props, options?: { children?: JSX.Element[]; converters?: Converters; }); setActive: (active: boolean) => void; setOffset: (offset: OffsetProp) => void; setAttribute: <K extends keyof Props>(attribute: K, value: Props[K]) => void; protected setHandler: (name: UIAttributeName, handler?: HandlerFunction) => void; protected convertProp(name: keyof Props, value: any): ConvertResult; private convertProps; private isSingleResult; private createHandlers; render: (parent: TTSObject) => UIElement; private needsId; }