uicore-ts
Version:
UICore is a library to build native-like user interfaces using pure Typescript. No HTML is needed at all. Components are described as TS classes and all user interactions are handled explicitly. This library is strongly inspired by the UIKit framework tha
165 lines (164 loc) • 10.9 kB
TypeScript
import { UIObject } from "./UIObject";
import { UIPoint } from "./UIPoint";
import { UIView } from "./UIView";
export type SizeNumberOrFunctionOrView = number | ((constrainingOrthogonalSize: number) => number) | UIView;
export declare class UIRectangle extends UIObject {
_isBeingUpdated: boolean;
rectanglePointDidChange?: (b: any) => void;
private _data;
private _isLazyCopy;
constructor(x?: number, y?: number, height?: number, width?: number);
private _setupPointCallbacks;
materialize(): void;
lazyCopy(): UIRectangle;
get min(): UIPoint;
set min(value: UIPoint);
get max(): UIPoint;
set max(value: UIPoint);
get minHeight(): number | undefined;
set minHeight(value: number | undefined);
get maxHeight(): number | undefined;
set maxHeight(value: number | undefined);
get minWidth(): number | undefined;
set minWidth(value: number | undefined);
get maxWidth(): number | undefined;
set maxWidth(value: number | undefined);
copy(): UIRectangle;
isEqualTo(rectangle: UIRectangle | null | undefined): boolean;
static zero(): UIRectangle;
containsPoint(point: UIPoint): boolean;
updateByAddingPoint(point: UIPoint): void;
scale(scale: number): void;
get height(): number;
set height(height: number);
get width(): number;
set width(width: number);
get x(): number;
set x(x: number);
get y(): number;
set y(y: number);
get topLeft(): UIPoint;
get topRight(): UIPoint;
get bottomLeft(): UIPoint;
get bottomRight(): UIPoint;
get center(): UIPoint;
set center(center: UIPoint);
offsetByPoint(offset: UIPoint): this;
concatenateWithRectangle(rectangle: UIRectangle): this;
rectangleByConcatenatingWithRectangle(rectangle: UIRectangle): UIRectangle;
intersectionRectangleWithRectangle(rectangle: UIRectangle): UIRectangle;
get area(): number;
intersectsWithRectangle(rectangle: UIRectangle): boolean;
rectangleWithInsets(left: number, right: number, bottom: number, top: number): UIRectangle;
rectangleWithInset(inset: number): UIRectangle;
rectangleWithHeight(height: SizeNumberOrFunctionOrView, centeredOnPosition?: number): UIRectangle;
rectangleWithWidth(width: SizeNumberOrFunctionOrView, centeredOnPosition?: number): UIRectangle;
rectangleWithHeightRelativeToWidth(heightRatio?: number, centeredOnPosition?: number): UIRectangle;
rectangleWithWidthRelativeToHeight(widthRatio?: number, centeredOnPosition?: number): UIRectangle;
rectangleWithX(x: number, centeredOnPosition?: number): UIRectangle;
rectangleWithY(y: number, centeredOnPosition?: number): UIRectangle;
rectangleByAddingX(x: number): UIRectangle;
rectangleByAddingY(y: number): UIRectangle;
rectangleByAddingWidth(widthToAdd: number, centeredOnPosition?: number): UIRectangle;
rectangleByAddingHeight(heightToAdd: number, centeredOnPosition?: number): UIRectangle;
rectangleWithRelativeValues(relativeXPosition: number, widthMultiplier: number, relativeYPosition: number, heightMultiplier: number): UIRectangle;
/**
* Returns a rectangle with a maximum width constraint
* If current width exceeds max, centers the constrained width
*/
rectangleWithMaxWidth(maxWidth: number, centeredOnPosition?: number): UIRectangle;
/**
* Returns a rectangle with a maximum height constraint
*/
rectangleWithMaxHeight(maxHeight: number, centeredOnPosition?: number): UIRectangle;
/**
* Returns a rectangle with minimum width constraint
*/
rectangleWithMinWidth(minWidth: number, centeredOnPosition?: number): UIRectangle;
/**
* Returns a rectangle with minimum height constraint
*/
rectangleWithMinHeight(minHeight: number, centeredOnPosition?: number): UIRectangle;
rectangleByCenteringInRectangle(referenceRectangle: UIRectangle, xPosition?: number, yPosition?: number): UIRectangle;
rectanglesBySplittingWidth(weights: SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteWidths?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[];
rectanglesBySplittingHeight(weights: SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[];
rectanglesByEquallySplittingWidth(numberOfFrames: number, padding?: number): UIRectangle[];
rectanglesByEquallySplittingHeight(numberOfFrames: number, padding?: number): UIRectangle[];
distributeViewsAlongWidth(views: UIView[], weights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteWidths?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): this;
distributeViewsAlongHeight(views: UIView[], weights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): this;
distributeViewsEquallyAlongWidth(views: UIView[], padding: number): this;
distributeViewsEquallyAlongHeight(views: UIView[], padding: number): this;
_heightNumberFromSizeNumberOrFunctionOrView(height: SizeNumberOrFunctionOrView): number;
_widthNumberFromSizeNumberOrFunctionOrView(width: SizeNumberOrFunctionOrView): number;
rectangleForNextRow(padding?: number, height?: SizeNumberOrFunctionOrView): UIRectangle;
rectangleForNextColumn(padding?: number, width?: SizeNumberOrFunctionOrView): UIRectangle;
rectangleForPreviousRow(padding?: number, height?: SizeNumberOrFunctionOrView): UIRectangle;
rectangleForPreviousColumn(padding?: number, width?: SizeNumberOrFunctionOrView): UIRectangle;
/**
* Distributes views vertically as a column, assigning frames and returning them.
* Each view is positioned below the previous one with optional padding between them.
* @param views - Array of views to distribute
* @param paddings - Padding between views (single value or array of values)
* @param absoluteHeights - Optional fixed heights for views (overrides intrinsic height)
* @returns Array of rectangles representing the frame for each view
*/
framesByDistributingViewsAsColumn(views: UIView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[];
/**
* Distributes views horizontally as a row, assigning frames and returning them.
* Each view is positioned to the right of the previous one with optional padding between them.
* @param views - Array of views to distribute
* @param paddings - Padding between views (single value or array of values)
* @param absoluteWidths - Optional fixed widths for views (overrides intrinsic width)
* @param centeredOnPosition - Horizontal alignment of the row within this rectangle: 0 = left (default), 0.5 =
* center, 1 = right
* @returns Array of rectangles representing the frame for each view
*/
framesByDistributingViewsAsRow(views: UIView[], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteWidths?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], centeredOnPosition?: number): UIRectangle[];
/**
* Distributes views as a grid (2D array), assigning frames and returning them.
* The first index represents rows (vertical), the second index represents columns (horizontal).
* Example: views[0] is the first row, views[0][0] is the first column in the first row.
* Each row is laid out horizontally, and rows are stacked vertically.
* @param views - 2D array where views[row][column] represents the grid structure
* @param paddings - Vertical padding between rows (single value or array of values)
* @param absoluteHeights - Optional fixed heights for each row (overrides intrinsic height)
* @returns 2D array of rectangles where frames[row][column] matches views[row][column]
*/
framesByDistributingViewsAsGrid(views: UIView[][], paddings?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[], absoluteHeights?: SizeNumberOrFunctionOrView | SizeNumberOrFunctionOrView[]): UIRectangle[][];
rectangleWithIntrinsicContentSizeForView(view: UIView, centeredOnXPosition?: number, centeredOnYPosition?: number): UIRectangle;
settingMinHeight(minHeight?: number): this;
settingMinWidth(minWidth?: number): this;
settingMaxHeight(maxHeight?: number): this;
settingMaxWidth(maxWidth?: number): this;
rectangleByEnforcingMinAndMaxSizes(centeredOnXPosition?: number, centeredOnYPosition?: number): UIRectangle;
assignedAsFrameOfView(view: UIView, isWeakFrame?: boolean): this;
toString(): string;
get [Symbol.toStringTag](): string;
IF(condition: boolean): UIRectangleConditionalChain<UIRectangle>;
ELSE_IF(condition: boolean): UIRectangle;
ELSE(): UIRectangle;
ENDIF(): this;
ENDIF<T, R>(performFunction: (result: T) => R): R;
static boundingBoxForPoints(points: UIPoint[]): UIRectangle;
static boundingBoxForRectanglesAndPoints(rectanglesAndPoints: (UIPoint | UIRectangle)[]): UIRectangle;
beginUpdates(): void;
finishUpdates(): void;
didChange(): void;
_rectanglePointDidChange(): void;
}
type RectangleChainMethods<TResult> = {
[K in keyof UIRectangle as (K extends 'IF' | 'ELSE' | 'ELSE_IF' | 'ENDIF' ? never : K)]: UIRectangle[K] extends (...args: infer Args) => infer R ? R extends UIRectangle | UIRectangle[] ? (...args: Args) => UIRectangleConditionalChain<R, TResult> : never : never;
};
type ArrayChainMethods<TResult> = {
[K in keyof UIRectangle[]]: UIRectangle[][K] extends UIRectangle ? UIRectangleConditionalChain<UIRectangle, TResult> : UIRectangle[][K] extends (...args: infer Args) => infer R ? R extends UIRectangle | UIRectangle[] ? (...args: Args) => UIRectangleConditionalChain<R, TResult> : never : never;
};
type SharedChainMethods<TCurrent, TResult> = {
IF(condition: boolean): UIRectangleConditionalChain<UIRectangle, TResult>;
TRANSFORM<R extends UIRectangle>(fn: (current: TCurrent) => R): UIRectangleConditionalChain<R, TResult>;
ELSE_IF(condition: boolean): UIRectangleConditionalChain<UIRectangle, TResult | TCurrent>;
ELSE(): UIRectangleConditionalChain<UIRectangle, TResult | TCurrent>;
ENDIF(): UIRectangle;
ENDIF<R>(performFunction: (result: TResult | TCurrent) => R): R;
};
type UIRectangleConditionalChain<TCurrent, TResult = TCurrent> = (TCurrent extends UIRectangle ? RectangleChainMethods<TResult> : {}) & (TCurrent extends UIRectangle[] ? ArrayChainMethods<TResult> : {}) & SharedChainMethods<TCurrent, TResult>;
export {};