UNPKG

@pmndrs/uikit

Version:

Build performant 3D user interfaces with Three.js and yoga.

56 lines (55 loc) 2.25 kB
import { Object3D, Vector2Tuple } from 'three'; import { Signal } from '@preact/signals-core'; import { FlexDirection, MeasureFunction, Node, Overflow } from 'yoga-layout/load'; import { setter } from './setter.js'; import { MergedProperties } from '../properties/merged.js'; export type YogaProperties = { [Key in keyof typeof setter]?: Parameters<(typeof setter)[Key]>[1]; }; export type Inset = [top: number, right: number, bottom: number, left: number]; export type CustomLayouting = { minWidth: number; minHeight: number; measure: MeasureFunction; }; export type FlexNodeState = ReturnType<typeof createFlexNodeState>; export declare function createFlexNodeState(): { node: Signal<FlexNode | undefined>; size: Signal<Vector2Tuple | undefined>; relativeCenter: Signal<Vector2Tuple | undefined>; borderInset: Signal<Inset | undefined>; overflow: Signal<Overflow>; displayed: Signal<boolean>; scrollable: Signal<[boolean, boolean]>; paddingInset: Signal<Inset | undefined>; maxScrollPosition: Signal<[(number | undefined)?, (number | undefined)?]>; }; export declare class FlexNode { private state; private readonly propertiesSignal; private object; private objectVisibileDefault; private children; private yogaNode; private layoutChangeListeners; private customLayouting?; private active; private objectVisible; constructor(state: FlexNodeState & { root: { requestCalculateLayout(): void; }; }, propertiesSignal: Signal<MergedProperties>, object: Object3D, objectVisibileDefault: boolean, abortSignal: AbortSignal); setCustomLayouting(layouting: CustomLayouting | undefined): void; private updateMeasureFunction; /** * use requestCalculateLayout instead */ calculateLayout(): void; addChild(node: FlexNode): void; removeChild(node: FlexNode): void; commit(parentDirection: FlexDirection): void; updateMeasurements(displayed: boolean, parentWidth: number | undefined, parentHeight: number | undefined): Vector2Tuple; addLayoutChangeListener(listener: () => void): () => undefined; } export declare function setMeasureFunc(node: Node, func: MeasureFunction | undefined): void;