@fulate/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ import type { Tween } from "@tweenjs/tween.js";
2
+ type TweenState = Record<string, any>;
3
+ export type TweenPromise<T extends TweenState = TweenState> = Promise<void> & {
4
+ tween: Tween<T>;
5
+ };
6
+ export interface TweenTask<T extends TweenState = TweenState> {
7
+ readonly tween: Tween<T>;
8
+ readonly promise: TweenPromise<T>;
9
+ run<R>(callback: () => R, fallback: R): R;
10
+ complete(): void;
11
+ start(schedule: () => void): void;
12
+ end(): void;
13
+ }
14
+ export declare function createTweenTask<T extends TweenState>(tween: Tween<T>, onSettled: () => void): TweenTask<T>;
15
+ export {};
@@ -0,0 +1,156 @@
1
+ import type { MutablePointView } from "@fulate/share";
2
+ /** Core 内置输入事件名。 */
3
+ export declare const EVENT_NAMES: readonly ["pointermove", "click", "dblclick", "pointerdown", "pointerup", "pointercancel", "contextmenu", "mouseenter", "mouseleave", "wheel", "scroll", "scrollend"];
4
+ /** Core 内置输入事件名联合类型。 */
5
+ export type EventName = (typeof EVENT_NAMES)[number];
6
+ /** 公开 option handler 与内部事件名的唯一映射。 */
7
+ export declare const EVENT_OPTION_KEYS: {
8
+ readonly pointermove: "onPointerMove";
9
+ readonly click: "onClick";
10
+ readonly dblclick: "onDblClick";
11
+ readonly pointerdown: "onPointerDown";
12
+ readonly pointerup: "onPointerUp";
13
+ readonly pointercancel: "onPointerCancel";
14
+ readonly contextmenu: "onContextMenu";
15
+ readonly mouseenter: "onMouseEnter";
16
+ readonly mouseleave: "onMouseLeave";
17
+ readonly wheel: "onWheel";
18
+ readonly scroll: "onScroll";
19
+ readonly scrollend: "onScrollEnd";
20
+ };
21
+ /** Element options 使用的事件 handler key。 */
22
+ export type EventOptionKey = (typeof EVENT_OPTION_KEYS)[EventName];
23
+ /** @internal 实际公开事件 option keys。 */
24
+ export declare const EVENT_OPTION_KEY_SET: ReadonlySet<string>;
25
+ /** @internal 把公开 option key 映射到唯一内部事件名。 */
26
+ export declare function getEventNameForOptionKey(key: EventOptionKey): EventName;
27
+ /** 返回字符串派发时该事件是否默认冒泡。 */
28
+ export declare function eventBubblesByDefault(eventName: string): boolean;
29
+ /** 可通过 module augmentation 扩展的强类型事件表。 */
30
+ export interface FulateEventMap {
31
+ }
32
+ /** Core 输入事件携带的逻辑坐标和原始输入状态。 */
33
+ export interface FulateEventDetail<T = any> extends MutablePointView {
34
+ /** 命中或手动指定的逻辑目标。 */
35
+ target: T;
36
+ /** DOM PointerEvent buttons 位掩码。 */
37
+ buttons: number;
38
+ /** 横向 wheel 增量。 */
39
+ deltaX: number;
40
+ /** 纵向 wheel 增量。 */
41
+ deltaY: number;
42
+ /** 调用方附加数据。 */
43
+ data?: any;
44
+ /** Ctrl 键是否按下。 */
45
+ ctrlKey?: boolean;
46
+ /** Shift 键是否按下。 */
47
+ shiftKey?: boolean;
48
+ /** Alt 键是否按下。 */
49
+ altKey?: boolean;
50
+ /** Meta 键是否按下。 */
51
+ metaKey?: boolean;
52
+ /** 触发此次派发的原始 DOM 事件。 */
53
+ originalEvent?: Event;
54
+ }
55
+ /** `CustomEvent` 的构造选项。 */
56
+ export interface CustomEventInit<T = any> {
57
+ /** 事件携带的数据。 */
58
+ detail?: T;
59
+ /** 是否沿 EventEmitter parent 链冒泡。 */
60
+ bubbles?: boolean;
61
+ }
62
+ /** Fulate 的同步事件对象。 */
63
+ export declare class CustomEvent<T = any> {
64
+ /** 事件名称。 */
65
+ readonly type: string;
66
+ /** 事件数据。 */
67
+ readonly detail: T;
68
+ /** 是否沿 EventEmitter parent 链冒泡。 */
69
+ readonly bubbles: boolean;
70
+ /** 当前正在执行监听器的 EventEmitter。 */
71
+ currentTarget: EventEmitter | null;
72
+ /** 是否已经停止后续 parent 传播。 */
73
+ private propagationStopped;
74
+ /** 是否停止当前节点剩余监听器。 @internal */
75
+ immediatePropagationStopped: boolean;
76
+ /** `preventDefault()` 写入的内部状态。 */
77
+ private defaultPreventedState;
78
+ /** 返回 `detail.target`;没有该字段时为 `undefined`。 */
79
+ get target(): T extends {
80
+ /** detail 中的逻辑目标。 */
81
+ target: infer U;
82
+ } ? U : undefined;
83
+ /** 是否已经停止后续冒泡;写入 `false` 不会恢复传播。 */
84
+ get cancelBubble(): boolean;
85
+ /** 写入 `true` 等同于 `stopPropagation()`。 */
86
+ set cancelBubble(value: boolean);
87
+ /** 停止向后续 parent 传播。 */
88
+ stopPropagation(): void;
89
+ /** 同时停止当前节点剩余监听器和后续传播。 */
90
+ stopImmediatePropagation(): void;
91
+ /** 是否已调用 `preventDefault()`。 */
92
+ get defaultPrevented(): boolean;
93
+ /** 标记默认行为已取消;不会自动调用原始 DOM 事件。 */
94
+ preventDefault(): void;
95
+ /**
96
+ * 创建指定类型、detail 和冒泡策略的事件。
97
+ * @param type 监听和派发使用的事件名。
98
+ * @param eventInitDict 事件数据及是否沿 parent 链冒泡。
99
+ */
100
+ constructor(type: string, eventInitDict?: CustomEventInit<T>);
101
+ }
102
+ /** 使用标准输入 detail 的 Fulate 事件。 */
103
+ export type FulateEvent<T = any> = CustomEvent<FulateEventDetail<T>>;
104
+ /** 事件监听回调。 */
105
+ export type EventCallback<T = any> = (data: T) => void;
106
+ /** 事件监听选项。 */
107
+ export interface AddEventListenerOptions {
108
+ /** 首次调用后自动移除。 */
109
+ once?: boolean;
110
+ }
111
+ /** 支持 parent 冒泡链的同步事件发布器。 */
112
+ export declare class EventEmitter {
113
+ /** 冒泡使用的 parent,由场景树维护。 */
114
+ parent?: EventEmitter;
115
+ /** 首次注册监听器时才创建的事件映射。 */
116
+ private events?;
117
+ /** 当前是否注册了任意监听器。 */
118
+ get isSubscribed(): boolean;
119
+ /** 判断指定事件是否有监听器。 */
120
+ hasEventListener(eventName: string): boolean;
121
+ /**
122
+ * 注册监听器并返回取消函数;相同事件和回调不会重复添加。
123
+ *
124
+ * 监听器在 `dispatchEvent()` 的当前调用栈中同步执行。监听器修改当前生命周期或
125
+ * 结构操作涉及的对象会重入该操作;需要等当前调用结束时由监听器自行使用
126
+ * `queueMicrotask()`,需要读取帧提交后的派生状态时等待对应 Root 的 `nextTick()`。
127
+ * 返回的 Promise 不会被派发器等待,异步错误也不会由派发器处理。
128
+ *
129
+ * @param eventName 要监听的事件名。
130
+ * @param callback 同步监听器;`this` 和 `currentTarget` 均为当前 emitter。
131
+ * @param options `once: true` 表示首次调用后自动移除。
132
+ */
133
+ addEventListener<K extends keyof FulateEventMap>(eventName: K, callback: EventCallback<FulateEventMap[K]>, options?: AddEventListenerOptions): () => void;
134
+ addEventListener<T = FulateEvent>(eventName: string, callback: EventCallback<T>, options?: AddEventListenerOptions): () => void;
135
+ /**
136
+ * 移除指定回调;省略回调时移除该事件的全部监听器。
137
+ * @param eventName 要移除的事件名。
138
+ * @param callback 注册时使用的函数;省略时移除该事件的全部监听器。
139
+ */
140
+ removeEventListener(eventName: string, callback?: EventCallback): void;
141
+ /**
142
+ * 同步派发已有事件对象;监听器异常以原始 identity 直接传播。
143
+ * @param event 要派发的 `CustomEvent`。
144
+ */
145
+ dispatchEvent(event: CustomEvent): void;
146
+ /**
147
+ * 按名称创建并同步派发 Fulate 事件。
148
+ * @param eventName 事件名;除 enter/leave 外默认冒泡。
149
+ * @param detail world 坐标、目标和原始 DOM 输入;缺省字段使用默认值。
150
+ */
151
+ dispatchEvent(eventName: string, detail?: Partial<FulateEventDetail>): void;
152
+ /** 派发当前节点的监听器,供自定义事件桥接覆盖。 */
153
+ protected fireCallbacks(event: CustomEvent): void;
154
+ /** 移除当前对象的全部监听器。 */
155
+ clearEventListener(): void;
156
+ }
@@ -0,0 +1,62 @@
1
+ import type { PointView } from "@fulate/share";
2
+ declare const subpathIdBrand: unique symbol;
3
+ declare const anchorIdBrand: unique symbol;
4
+ declare const segmentIdBrand: unique symbol;
5
+ /** 一个 authored owner 内稳定的 subpath 身份。 */
6
+ export type SubpathId = string & {
7
+ readonly [subpathIdBrand]: "SubpathId";
8
+ };
9
+ /** 一个 authored owner 内稳定的 path anchor 身份。 */
10
+ export type AnchorId = string & {
11
+ readonly [anchorIdBrand]: "AnchorId";
12
+ };
13
+ /** 一个 authored owner 内稳定的相邻 segment 身份。 */
14
+ export type SegmentId = string & {
15
+ readonly [segmentIdBrand]: "SegmentId";
16
+ };
17
+ /** open subpath 的末 anchor;它没有 outgoing segment。 */
18
+ export interface AuthoredTerminalAnchor {
19
+ readonly anchorId: AnchorId;
20
+ readonly point: PointView;
21
+ readonly kind?: undefined;
22
+ readonly segmentId?: undefined;
23
+ }
24
+ /** 直接共置在起始 anchor record 上的 straight outgoing segment。 */
25
+ export interface AuthoredLineAnchor {
26
+ readonly anchorId: AnchorId;
27
+ readonly point: PointView;
28
+ readonly kind: "line";
29
+ readonly segmentId: SegmentId;
30
+ }
31
+ /** 只在真实 cubic 存在时共置的 outgoing segment 与控制点。 */
32
+ export interface AuthoredCubicAnchor {
33
+ readonly anchorId: AnchorId;
34
+ readonly point: PointView;
35
+ readonly kind: "cubic";
36
+ readonly segmentId: SegmentId;
37
+ readonly control1: PointView;
38
+ readonly control2: PointView;
39
+ }
40
+ /** ordered anchor record 同时拥有 point、anchor ID 与 outgoing segment。 */
41
+ export type AuthoredPathAnchor = AuthoredTerminalAnchor | AuthoredLineAnchor | AuthoredCubicAnchor;
42
+ /** ordered anchors 是 open/closed authored topology 的唯一真源。 */
43
+ export interface AuthoredSubpath<Anchor extends AuthoredPathAnchor = AuthoredPathAnchor> {
44
+ readonly subpathId: SubpathId;
45
+ readonly closed: boolean;
46
+ readonly anchors: readonly Anchor[];
47
+ }
48
+ /** 跨领域定位只保存 owner-local ID,不保存数组 index。 */
49
+ export type StablePathTargetRef = {
50
+ readonly kind: "anchor";
51
+ readonly anchorId: AnchorId;
52
+ } | {
53
+ readonly kind: "segment";
54
+ readonly segmentId: SegmentId;
55
+ };
56
+ /** @internal framework 创建新 authored 对象时使用的唯一 local-ID primitive。 */
57
+ export declare function createPathLocalId(kind: "subpath"): SubpathId;
58
+ export declare function createPathLocalId(kind: "anchor"): AnchorId;
59
+ export declare function createPathLocalId(kind: "segment"): SegmentId;
60
+ /** @internal 从普通 point intent 创建紧凑 line-only canonical subpath。 */
61
+ export declare function createAuthoredLineSubpath(points: readonly PointView[], closed: boolean): AuthoredSubpath;
62
+ export {};
@@ -0,0 +1,133 @@
1
+ import type { PointView, Rect } from "@fulate/share";
2
+ import type { AnchorId, AuthoredSubpath, SegmentId, SubpathId } from "./authored";
3
+ /** 当前 resolved subpath 中的 local 顶点。 */
4
+ export interface ResolvedVertex {
5
+ readonly point: PointView;
6
+ /** 仅当该顶点直接对应 authored anchor 时存在。 */
7
+ readonly anchorId?: AnchorId;
8
+ }
9
+ /** 当前版本真实支持的 resolved line/cubic segment shape。 */
10
+ export type ResolvedSegmentShape = Readonly<{
11
+ kind: "line";
12
+ /** 仅当该 segment 直接对应 authored segment 时存在。 */
13
+ segmentId?: SegmentId;
14
+ }> | Readonly<{
15
+ kind: "cubic";
16
+ control1: PointView;
17
+ control2: PointView;
18
+ /** 仅当该 segment 直接对应 authored segment 时存在。 */
19
+ segmentId?: SegmentId;
20
+ }>;
21
+ /** 按绘制顺序排列的一个 open/closed resolved subpath。 */
22
+ export interface ResolvedSubpath {
23
+ /** 仅当 subpath 直接对应 authored owner-local branch 时存在。 */
24
+ readonly subpathId?: SubpathId;
25
+ readonly closed: boolean;
26
+ readonly vertices: readonly ResolvedVertex[];
27
+ /** open 时连接 `i → i + 1`;closed 时最后一项连接末点与首点。 */
28
+ readonly segmentShapes: readonly ResolvedSegmentShape[];
29
+ }
30
+ /** 一次 local geometry commit 产生的只读、可丢弃 canonical snapshot。 */
31
+ export interface GeometrySnapshot {
32
+ readonly elementKey: string;
33
+ /** 只在当前 element snapshot 序列内有意义。 */
34
+ readonly revision: number;
35
+ /** transform origin/reference bounds 的唯一几何来源。 */
36
+ readonly layoutReferenceBounds: Readonly<Rect>;
37
+ /** 保留 resolver 给出的稳定 subpath 顺序。 */
38
+ readonly subpaths: readonly ResolvedSubpath[];
39
+ }
40
+ /** `createGeometrySnapshot()` 直接采用的输入。 */
41
+ export interface GeometrySnapshotInput {
42
+ readonly elementKey: string;
43
+ readonly revision: number;
44
+ /** 省略时从 line/cubic 的真实 extrema 精确推导。 */
45
+ readonly layoutReferenceBounds?: Readonly<Rect>;
46
+ readonly subpaths: readonly ResolvedSubpath[];
47
+ }
48
+ /** snapshot revision 内的 segment-local 地址;不得跨 revision 持久化。 */
49
+ export interface GeometryPathPosition {
50
+ /** Must match the query snapshot that produced this address. */
51
+ readonly revision: number;
52
+ readonly subpathIndex: number;
53
+ readonly segmentIndex: number;
54
+ readonly t: number;
55
+ }
56
+ /** line/cubic 在一个 path position 的精确 local 求值。 */
57
+ export interface GeometryPathPoint {
58
+ readonly position: GeometryPathPosition;
59
+ readonly point: PointView;
60
+ /** 零长度 segment 没有定义方向。 */
61
+ readonly tangent?: PointView;
62
+ /** tangent 的有向左法线。 */
63
+ readonly normal?: PointView;
64
+ }
65
+ /** `nearest()` 返回的最近 path point。 */
66
+ export interface GeometryNearestPoint extends GeometryPathPoint {
67
+ readonly distance: number;
68
+ }
69
+ /** 针对一个 immutable snapshot 的统一 exact query。 */
70
+ export interface GeometryQuery {
71
+ readonly snapshot: GeometrySnapshot;
72
+ /** 返回所有 subpath line/cubic 的精确 local AABB;无顶点时为 `null`。 */
73
+ getBounds(): Readonly<Rect> | null;
74
+ /** 判断 local 点是否位于闭合 subpath 的指定填充内或边界上。 */
75
+ contains(point: PointView, fillRule?: CanvasFillRule): boolean;
76
+ /** 判断 local 点是否命中填充或距任一 segment 不超过 tolerance。 */
77
+ hit(point: PointView, tolerance?: number, fillRule?: CanvasFillRule): boolean;
78
+ /** 返回距 local 点最近的 line/cubic path position;无 segment 时为 `null`。 */
79
+ nearest(point: PointView): GeometryNearestPoint | null;
80
+ /** 求值 snapshot-local path position;地址或 `t` 越界时返回 `undefined`。 */
81
+ getPathPoint(position: GeometryPathPosition): GeometryPathPoint | undefined;
82
+ }
83
+ /** @internal 读取通用 snapshot 的非空元数据。 */
84
+ export declare function genericSnapshotHasGeometry(snapshot: GeometrySnapshot): boolean;
85
+ /** @internal 保持极大/极小坐标计算的共同缩放。 */
86
+ export declare function nonzeroScale(...values: number[]): number;
87
+ /** 从普通点建立无伪造 source identity 的 resolved line subpath。 */
88
+ export declare function createLineSubpath(points: readonly PointView[], closed?: boolean): ResolvedSubpath;
89
+ /**
90
+ * @internal 把 canonical anchor records 直接投影为 resolved subpath。
91
+ * vertex 与 segment shape 都复用同一 anchor record,不创建 source wrapper。
92
+ */
93
+ export declare function resolveAuthoredSubpath(subpath: AuthoredSubpath): ResolvedSubpath;
94
+ /** 在唯一 Core geometry owner 内求值一个 resolved line/cubic segment。 */
95
+ export declare function evaluatePathSegmentPoint(start: PointView, shape: ResolvedSegmentShape, end: PointView, t: number): PointView;
96
+ /** One de Casteljau split owned by the canonical line/cubic geometry module. */
97
+ export interface PathSegmentSplit {
98
+ readonly point: PointView;
99
+ readonly leading: ResolvedSegmentShape;
100
+ readonly trailing: ResolvedSegmentShape;
101
+ }
102
+ /** Split one canonical line/cubic segment at `t` without a second curve owner. */
103
+ export declare function splitPathSegment(start: PointView, shape: ResolvedSegmentShape, end: PointView, t: number): PathSegmentSplit;
104
+ /**
105
+ * 直接采用输入对象及其 subpath、point、control、标量 authored ID 和 bounds 引用。
106
+ * 省略 bounds 时在同一输入对象上安装一次派生结果;不创建 GeometryQuery index。
107
+ */
108
+ export declare function createGeometrySnapshot(input: GeometrySnapshotInput): GeometrySnapshot;
109
+ /** @internal 通用 line/cubic canonical query。 */
110
+ export declare class SnapshotGeometryQuery implements GeometryQuery {
111
+ readonly snapshot: GeometrySnapshot;
112
+ /** 第一次真实 query 前保持 `null`。 */
113
+ private index;
114
+ private debugStats;
115
+ constructor(snapshot: GeometrySnapshot);
116
+ private getIndex;
117
+ private getBoundsData;
118
+ private getSpatialIndex;
119
+ protected recordDebug(mode: "flat" | "spatial", visitedSegments: number): void;
120
+ /** @internal Test-only opt-in; normal queries do not retain counters. */
121
+ enableDebugForTest(): void;
122
+ /** @internal Read counters only after `enableDebugForTest()`. */
123
+ getDebugStatsForTest(): {
124
+ mode: "flat" | "spatial";
125
+ visitedSegments: number;
126
+ };
127
+ getBounds(): Readonly<Rect> | null;
128
+ getPathPoint(position: GeometryPathPosition): GeometryPathPoint | undefined;
129
+ nearest(point: PointView): GeometryNearestPoint | null;
130
+ private queryFillAndStroke;
131
+ contains(point: PointView, fillRule?: CanvasFillRule): boolean;
132
+ hit(point: PointView, tolerance?: number, fillRule?: CanvasFillRule): boolean;
133
+ }
@@ -0,0 +1,10 @@
1
+ import { type GeometryQuery, type GeometrySnapshot } from "./common";
2
+ export { createAuthoredLineSubpath, createPathLocalId } from "./authored";
3
+ export { createGeometrySnapshot, createLineSubpath, evaluatePathSegmentPoint, resolveAuthoredSubpath, splitPathSegment } from "./common";
4
+ export type { GeometryNearestPoint, GeometryPathPoint, GeometryPathPosition, GeometryQuery, GeometrySnapshot, GeometrySnapshotInput, PathSegmentSplit, ResolvedSegmentShape, ResolvedSubpath, ResolvedVertex } from "./common";
5
+ export type { AnchorId, AuthoredCubicAnchor, AuthoredLineAnchor, AuthoredPathAnchor, AuthoredSubpath, AuthoredTerminalAnchor, SegmentId, StablePathTargetRef, SubpathId } from "./authored";
6
+ export { createRectangleGeometrySnapshot, rectangleSubpathsMaterializedForTest } from "./rectangle";
7
+ /** @internal 读取 canonical snapshot 的非空元数据而不强制惰性矩形 subpaths。 */
8
+ export declare function geometrySnapshotHasGeometry(snapshot: GeometrySnapshot): boolean;
9
+ /** 创建尚未建立内部 index 的唯一 canonical snapshot query。 */
10
+ export declare function createGeometryQuery(snapshot: GeometrySnapshot): GeometryQuery;
@@ -0,0 +1,22 @@
1
+ import type { PointView, Rect } from "@fulate/share";
2
+ import { SnapshotGeometryQuery, type GeometrySnapshot, type ResolvedSubpath } from "./common";
3
+ /** @internal Core 普通矩形的惰性 canonical snapshot shell。 */
4
+ export declare class RectangleGeometrySnapshot implements GeometrySnapshot {
5
+ #private;
6
+ readonly elementKey: string;
7
+ readonly revision: number;
8
+ readonly layoutReferenceBounds: Readonly<Rect>;
9
+ constructor(elementKey: string, revision: number, layoutReferenceBounds: Readonly<Rect>);
10
+ get subpaths(): readonly ResolvedSubpath[];
11
+ subpathsMaterializedForTest(): boolean;
12
+ }
13
+ /** @internal Core 的普通 rectangle owner 直接建立一次 canonical 终态。 */
14
+ export declare function createRectangleGeometrySnapshot(elementKey: string, revision: number, layoutReferenceBounds: Readonly<Rect> | null): GeometrySnapshot;
15
+ /** @internal Performance contract inspection for the lazy rectangle shell. */
16
+ export declare function rectangleSubpathsMaterializedForTest(snapshot: GeometrySnapshot): boolean;
17
+ /** @internal 同一 canonical query 的普通矩形 O(1) 实现。 */
18
+ export declare class RectangleSnapshotGeometryQuery extends SnapshotGeometryQuery {
19
+ getBounds(): Readonly<Rect>;
20
+ contains(point: PointView): boolean;
21
+ hit(point: PointView, tolerance?: number): boolean;
22
+ }
@@ -0,0 +1,32 @@
1
+ export { EVENT_NAMES, CustomEvent, EventEmitter } from "./event";
2
+ export type { EventName, EventCallback, FulateEvent, FulateEventDetail, CustomEventInit, AddEventListenerOptions, FulateEventMap } from "./event";
3
+ export { Node, NodeLifecycleEvent } from "./node/node";
4
+ export type { NodeCreationOptions } from "./node/node";
5
+ export { ElementTransform } from "./node/element-transform";
6
+ export type { ElementTransformClass, ElementTransformConstructor, GeometryBoundsView } from "./node/element-transform";
7
+ export { ChangeImpact, NodeProperties, resolveOrigin, TransformProperties } from "./node/properties";
8
+ export type { OriginX, OriginY, PropertyChanges, PropertyUpdates, TransformableOptions } from "./node/properties";
9
+ export { Element, ElementProperties } from "./node/element";
10
+ export type { AnyElement, BaseElementOption, ElementJSON, ElementOptionPatch, AnimateOptions, AnimateTarget } from "./node/element";
11
+ export { isReparentTransformIntent, resolveReferenceTransform, resolveReferenceTransformTarget } from "./node/reference-transform";
12
+ export type { ElementTransformBaseline, ReferenceTransformBaseline, ReferenceTransformFrame, ReferenceTransformResolution, ReferenceTransformTarget, ReparentTransformIntent, TransformIntent } from "./node/reference-transform";
13
+ export { DEFAULT_CONNECTION_PORT_SCHEMA, getElementConnectionPort, getElementConnectionPortPoint, getElementConnectionPortPoints, projectConnectionPortPoint } from "./utils/connection-port";
14
+ export type { ConnectionPortId, ConnectionPortConfiguration, ConnectionPortDefinition, ConnectionPortLabelStyle, ConnectionPortDirection, ConnectionPortLimit, ConnectionPortLimits, ConnectionPortRef, DerivedConnectionPort, EdgeConnectionPortPosition, ResolvedConnectionPort, ResolvedConnectionPortSlot } from "./utils/connection-port";
15
+ export { Shape, ShapeProperties, ShapeTransform } from "./node/shape";
16
+ export type { ShapeOption, ShapeOptionPatch, BorderPosition, ShadowOption, Outset } from "./node/shape";
17
+ export { Skin, SKIN_DEFAULTS } from "./skin";
18
+ export type { SkinChange, SkinOptions, TextStyleConfig } from "./skin";
19
+ export { Root } from "./root/index";
20
+ export type { QueryAreaBounds, QueryAreaOptions, QueryAreaOrder, IteratePointOptions, PaintOrderKey } from "./root/index";
21
+ export { Viewport } from "./root/viewport";
22
+ export type { ViewportInsets, ViewportSnapshot } from "./root/viewport";
23
+ export { RootInputController, isFormControlTarget } from "./root/input-controller";
24
+ export { FrameStabilizationError, RootFrameRuntime } from "./root/frame-runtime";
25
+ export type { RootFrameCompletionWork, RootFrameLayoutOwner, RootFrameParticipant } from "./root/frame-runtime";
26
+ export { SceneRegistry } from "./root/scene-registry";
27
+ export type { NodeKeyObserver, NodeRegistrationObserver, SceneChangeObserver } from "./root/scene-registry";
28
+ export type { ChangeHistorySink, OwnerPropertyChange, StructureChange } from "./mutation/change-batch";
29
+ export { Layer, LayerProperties, LayerTransform } from "./layer/index";
30
+ export type { LayerFrameWork, LayerOption, LayerOptionPatch } from "./layer/index";
31
+ export { createAuthoredLineSubpath, createPathLocalId, createGeometryQuery, createGeometrySnapshot, createLineSubpath, evaluatePathSegmentPoint, resolveAuthoredSubpath, splitPathSegment } from "./geometry";
32
+ export type { AnchorId, AuthoredCubicAnchor, AuthoredLineAnchor, AuthoredPathAnchor, AuthoredSubpath, AuthoredTerminalAnchor, SegmentId, StablePathTargetRef, SubpathId, ResolvedVertex, ResolvedSegmentShape, ResolvedSubpath, GeometrySnapshot, GeometrySnapshotInput, GeometryPathPosition, GeometryPathPoint, GeometryNearestPoint, GeometryQuery, PathSegmentSplit } from "./geometry";