@typed-tabletop-simulator/ui
Version:
JSX wrapper and components for Tabletop Simulator UI
63 lines (62 loc) • 2.04 kB
TypeScript
/** @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;
}