@pmndrs/uikit
Version:
Build performant 3D user interfaces with Three.js and yoga.
66 lines (65 loc) • 3.76 kB
TypeScript
import { ReadonlySignal, Signal } from '@preact/signals-core';
import { Matrix4, Object3D, Vector2, Vector2Tuple, Vector3 } from 'three';
import { FlexNodeState } from './flex/node.js';
import { ColorRepresentation } from './utils.js';
import { ClippingRect } from './clipping.js';
import { PanelProperties } from './panel/instanced-panel.js';
import { OrderInfo, ZIndexOffset } from './order.js';
import { MergedProperties } from './properties/merged.js';
import { PanelGroupManager, PanelGroupProperties } from './panel/instanced-panel-group.js';
import { ParentContext } from './context.js';
import { ScrollListeners } from './listeners.js';
import { EventHandlers } from './events.js';
export type ScrollEventHandlers = Pick<EventHandlers, 'onPointerDown' | 'onPointerUp' | 'onPointerMove' | 'onWheel' | 'onPointerLeave' | 'onPointerCancel'>;
export declare function createScrollPosition(): Signal<Vector2Tuple>;
export declare function computedGlobalScrollMatrix(scrollPosition: Signal<Vector2Tuple>, globalMatrix: Signal<Matrix4 | undefined>, pixelSizeSignal: Signal<number>): ReadonlySignal<Matrix4 | undefined>;
export declare function computedAnyAncestorScrollable(scrollable: Signal<[boolean, boolean]>, anyAncestorScrollable: Signal<readonly [boolean, boolean]> | undefined): ReadonlySignal<readonly [boolean, boolean]>;
export declare function createScrollState(): {
downPointerMap: Map<number, {
type: "scroll-bar";
localPoint: Vector3;
axisIndex: number;
} | {
type: "scroll-panel";
localPoint: Vector3;
timestamp: number;
}>;
scrollVelocity: Vector2;
};
export type ScrollableComponentState = {
scrollPosition: ReturnType<typeof createScrollPosition>;
anyAncestorScrollable: ParentContext['anyAncestorScrollable'];
root: ParentContext['root'];
maxScrollPosition: FlexNodeState['maxScrollPosition'];
scrollable: FlexNodeState['scrollable'];
size: FlexNodeState['size'];
borderInset: FlexNodeState['borderInset'];
scrollbarWidth: ReadonlySignal<number>;
scrollState: ReturnType<typeof createScrollState>;
};
export declare function computedScrollHandlers(state: ScrollableComponentState, listeners: Signal<ScrollListeners | undefined>, objectRef: {
current?: Object3D | null;
}): ReadonlySignal<ScrollEventHandlers | undefined>;
export declare function setupScroll(state: ScrollableComponentState, listeners: Signal<ScrollListeners | undefined>, pixelSizeSignal: Signal<number>, object: Object3D, abortSignal: AbortSignal): void;
/**
* true = positivie
* false = negative
*/
export type Sign = boolean;
export type ScrollbarWidthProperties = {
scrollbarWidth?: number;
};
export type ScrollbarBorderSizeProperties = {
scrollbarBorderRightWidth?: number;
scrollbarBorderTopWidth?: number;
scrollbarBorderLeftWidth?: number;
scrollbarBorderBottomWidth?: number;
};
export type ScrollbarProperties = {
scrollbarOpacity?: number;
scrollbarColor?: ColorRepresentation;
scrollbarZIndexOffset?: ZIndexOffset;
} & ScrollbarWidthProperties & ScrollbarBorderSizeProperties & {
[Key in Exclude<keyof PanelProperties, 'backgroundColor' | 'backgroundOpacity'> as `scrollbar${Capitalize<Key>}`]: PanelProperties[Key];
};
export declare function setupScrollbars(propertiesSignal: Signal<MergedProperties>, scrollPosition: Signal<Vector2Tuple>, flexState: FlexNodeState, globalMatrix: Signal<Matrix4 | undefined>, isVisible: Signal<boolean>, parentClippingRect: Signal<ClippingRect | undefined> | undefined, prevOrderInfo: Signal<OrderInfo | undefined>, prevPanelDeps: ReadonlySignal<Required<PanelGroupProperties>>, panelGroupManager: PanelGroupManager, scrollbarWidth: Signal<number>, abortSignal: AbortSignal): void;