type UIObjectProps = ObjProps & {
	// Layout Props
	anchors: Anchors;
	backColor: Obj;
	padding: Padding;
	margin: Margin;
	maxSize: MAUISize;
	minSize: MAUISize;
	h: Height;
	w: Width;
	x: number;
	y: number;
	contentDriven: YesNo;
	contentWidth: YesNo;
	contentHeight: YesNo;
	forceContentMin: YesNo;
	separator: YesNo;

	// Appearance Props
	focus: Focus;
	hasFocus: YesNo;
	hideFocusFrame: YesNo;
	interactive: YesNo;
	visible: BooleanString;
	mixInBackColor: Obj;

	// Text Props
	alignmentH: AlignmentH;
	alignmentV: AlignmentV;
	font: Font;
	hasHover: YesNo;
	icon: string;
	iconAlignmentH: AlignmentH;
	iconAlignmentV: AlignmentV;
	text: string;
	textAlignmentH: AlignmentH;
	textColor: Obj;
	textShadow: number;
	textShadowColor: Obj;
	/**
	 * Scales down the text to fit the box. Also enabled text wrapping.
	 */
	textAutoAdjust: YesNo;
	texture: string;
	transparent: YesNo;
};

type UIObjectSignals = {
	onLoad: SignalId;
	onVisible: SignalId;
	keyDown: SignalId;
	keyUp: SignalId;
	doubleClicked: SignalId;
	execute: SignalId;
	clicked: SignalId;
	focusGet: SignalId;
	focusLost: SignalId;
};
type UIObject = Obj &
	UIObjectProps &
	UIObjectSignals & {
		readonly absRect: Rect;
		readonly absClientRect: Rect;
		GetOverlay(): Popup;
	};
