@pmndrs/uikit
Version:
Build performant 3D user interfaces with Three.js and yoga.
90 lines (89 loc) • 5.23 kB
TypeScript
import { Signal } from '@preact/signals-core';
import { Group, Mesh, Object3D, Vector3 } from 'three';
import { Listeners } from '../index.js';
import { ParentContext, RootContext } from '../context.js';
import { YogaProperties } from '../flex/index.js';
import { OrderInfo, ZIndexProperties } from '../order.js';
import { PanelProperties } from '../panel/instanced-panel.js';
import { WithAllAliases } from '../properties/alias.js';
import { AllOptionalProperties, WithClasses, WithReactive } from '../properties/default.js';
import { ScrollbarProperties } from '../scroll.js';
import { TransformProperties } from '../transform.js';
import { VisibilityProperties, WithConditionals } from './utils.js';
import { ColorRepresentation } from '../utils.js';
import { PointerEventsProperties } from '../panel/interaction-panel-mesh.js';
import { ClippingRect } from '../clipping.js';
import { PanelGroupProperties } from '../panel/index.js';
import { KeepAspectRatioProperties } from './image.js';
import { EventHandlers, ThreeEventMap } from '../internals.js';
export type InheritableSvgProperties = WithClasses<WithConditionals<WithAllAliases<WithReactive<YogaProperties & ZIndexProperties & PanelProperties & AppearanceProperties & KeepAspectRatioProperties & TransformProperties & PanelGroupProperties & ScrollbarProperties & VisibilityProperties & PointerEventsProperties>>>>;
export type AppearanceProperties = {
opacity?: number;
color?: ColorRepresentation;
};
export type SvgProperties<EM extends ThreeEventMap = ThreeEventMap> = InheritableSvgProperties & Listeners & {
src?: Signal<string> | string;
keepAspectRatio?: boolean;
} & EventHandlers<EM>;
export declare function createSvgState<EM extends ThreeEventMap = ThreeEventMap>(parentCtx: ParentContext, objectRef: {
current?: Object3D | null;
}, style: Signal<SvgProperties<EM> | undefined>, properties: Signal<SvgProperties<EM> | undefined>, defaultProperties: Signal<AllOptionalProperties | undefined>): {
node: Signal<import("../internals.js").FlexNode | undefined>;
size: Signal<import("three").Vector2Tuple | undefined>;
relativeCenter: Signal<import("three").Vector2Tuple | undefined>;
borderInset: Signal<import("../internals.js").Inset | undefined>;
overflow: Signal<import("yoga-layout/load").Overflow>;
displayed: Signal<boolean>;
scrollable: Signal<[boolean, boolean]>;
paddingInset: Signal<import("../internals.js").Inset | undefined>;
maxScrollPosition: Signal<[(number | undefined)?, (number | undefined)?]>;
} & {
centerGroup: Group<import("three").Object3DEventMap>;
interactionPanel: Mesh<import("three").PlaneGeometry, import("three").Material | import("three").Material[], import("three").Object3DEventMap> & {
boundingSphere: import("three").Sphere;
};
scrollState: {
downPointerMap: Map<number, {
type: "scroll-bar";
localPoint: Vector3;
axisIndex: number;
} | {
type: "scroll-panel";
localPoint: Vector3;
timestamp: number;
}>;
scrollVelocity: import("three").Vector2;
};
hoveredSignal: Signal<number[]>;
activeSignal: Signal<number[]>;
aspectRatio: Signal<number | undefined>;
svgObject: Signal<Object3D<import("three").Object3DEventMap> | undefined>;
mergedProperties: import("@preact/signals-core").ReadonlySignal<import("../internals.js").MergedProperties>;
transformMatrix: Signal<import("three").Matrix4 | undefined>;
globalMatrix: Signal<import("three").Matrix4 | undefined>;
isClipped: Signal<boolean>;
isVisible: import("@preact/signals-core").ReadonlySignal<boolean>;
groupDeps: import("@preact/signals-core").ReadonlySignal<Required<PanelGroupProperties>>;
backgroundOrderInfo: Signal<OrderInfo | undefined>;
orderInfo: Signal<OrderInfo | undefined>;
src: import("@preact/signals-core").ReadonlySignal<string | undefined>;
scrollPosition: Signal<import("three").Vector2Tuple>;
scrollbarWidth: Signal<number>;
childrenMatrix: import("@preact/signals-core").ReadonlySignal<import("three").Matrix4 | undefined>;
updateMatrixWorld: Signal<boolean>;
clippingRect: Signal<ClippingRect | undefined>;
defaultProperties: {
pointerEvents: Signal<"auto" | "none" | "listener" | undefined>;
pointerEventsOrder: Signal<number | undefined>;
pointerEventsType: Signal<import("../internals.js").AllowedPointerEventsType | undefined>;
renderOrder: Signal<number>;
depthTest: Signal<boolean>;
depthWrite: Signal<boolean>;
};
anyAncestorScrollable: import("@preact/signals-core").ReadonlySignal<readonly [boolean, boolean]>;
root: RootContext;
} & {
handlers: import("@preact/signals-core").ReadonlySignal<EventHandlers>;
ancestorsHaveListeners: import("@preact/signals-core").ReadonlySignal<boolean>;
};
export declare function setupSvg<EM extends ThreeEventMap = ThreeEventMap>(state: ReturnType<typeof createSvgState>, parentCtx: ParentContext, style: Signal<SvgProperties<EM> | undefined>, properties: Signal<SvgProperties<EM> | undefined>, object: Object3D, childrenContainer: Object3D, abortSignal: AbortSignal): void;