locusing 0.1.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.
- package/LICENSE +21 -0
- package/README.md +147 -0
- package/dist/chunk-2THKOSBL.mjs +421 -0
- package/dist/index.d.mts +1411 -0
- package/dist/index.d.ts +1411 -0
- package/dist/index.js +4097 -0
- package/dist/index.mjs +3487 -0
- package/dist/transform-TMK5SL54.mjs +14 -0
- package/package.json +64 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,1411 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @locusing/math - 数学工具库
|
|
3
|
+
*
|
|
4
|
+
* 提供向量、矩阵、贝塞尔曲线等数学运算
|
|
5
|
+
*/
|
|
6
|
+
type Vector2 = [number, number];
|
|
7
|
+
type Vector3 = [number, number, number];
|
|
8
|
+
type Point = Vector2;
|
|
9
|
+
declare function V2(x: number, y: number): Vector2;
|
|
10
|
+
declare function V3(x: number, y: number, z: number): Vector3;
|
|
11
|
+
declare const ORIGIN: Vector2;
|
|
12
|
+
declare const UP: Vector2;
|
|
13
|
+
declare const DOWN: Vector2;
|
|
14
|
+
declare const LEFT: Vector2;
|
|
15
|
+
declare const RIGHT: Vector2;
|
|
16
|
+
declare const UL: Vector2;
|
|
17
|
+
declare const UR: Vector2;
|
|
18
|
+
declare const DL: Vector2;
|
|
19
|
+
declare const DR: Vector2;
|
|
20
|
+
declare function add(a: Vector2, b: Vector2): Vector2;
|
|
21
|
+
declare function sub(a: Vector2, b: Vector2): Vector2;
|
|
22
|
+
declare function mul(v: Vector2, scalar: number): Vector2;
|
|
23
|
+
declare function div(v: Vector2, scalar: number): Vector2;
|
|
24
|
+
declare function dot$1(a: Vector2, b: Vector2): number;
|
|
25
|
+
declare function cross(a: Vector2, b: Vector2): number;
|
|
26
|
+
declare function length(v: Vector2): number;
|
|
27
|
+
declare function normalize(v: Vector2): Vector2;
|
|
28
|
+
declare function distance(a: Vector2, b: Vector2): number;
|
|
29
|
+
declare function angle(v: Vector2): number;
|
|
30
|
+
declare function angleBetween(a: Vector2, b: Vector2): number;
|
|
31
|
+
declare function rotate(v: Vector2, radians: number): Vector2;
|
|
32
|
+
declare function lerp(a: Vector2, b: Vector2, t: number): Vector2;
|
|
33
|
+
declare function midpoint(a: Vector2, b: Vector2): Vector2;
|
|
34
|
+
declare function perpendicular(v: Vector2): Vector2;
|
|
35
|
+
declare function reflect(v: Vector2, normal: Vector2): Vector2;
|
|
36
|
+
type Matrix3 = [
|
|
37
|
+
number,
|
|
38
|
+
number,
|
|
39
|
+
number,
|
|
40
|
+
number,
|
|
41
|
+
number,
|
|
42
|
+
number,
|
|
43
|
+
number,
|
|
44
|
+
number,
|
|
45
|
+
number
|
|
46
|
+
];
|
|
47
|
+
declare const IDENTITY: Matrix3;
|
|
48
|
+
declare function matrixMultiply(a: Matrix3, b: Matrix3): Matrix3;
|
|
49
|
+
declare function applyMatrix(m: Matrix3, v: Vector2): Vector2;
|
|
50
|
+
declare function translationMatrix(tx: number, ty: number): Matrix3;
|
|
51
|
+
declare function rotationMatrix(radians: number): Matrix3;
|
|
52
|
+
declare function scaleMatrix(sx: number, sy?: number): Matrix3;
|
|
53
|
+
declare function quadraticBezier(p0: Vector2, p1: Vector2, p2: Vector2, t: number): Vector2;
|
|
54
|
+
declare function cubicBezier(p0: Vector2, p1: Vector2, p2: Vector2, p3: Vector2, t: number): Vector2;
|
|
55
|
+
declare function sampleParametric(fn: (t: number) => Vector2, start?: number, end?: number, segments?: number): Vector2[];
|
|
56
|
+
type EasingFunction = (t: number) => number;
|
|
57
|
+
declare const easing: {
|
|
58
|
+
linear: (t: number) => number;
|
|
59
|
+
easeInQuad: (t: number) => number;
|
|
60
|
+
easeOutQuad: (t: number) => number;
|
|
61
|
+
easeInOutQuad: (t: number) => number;
|
|
62
|
+
easeInCubic: (t: number) => number;
|
|
63
|
+
easeOutCubic: (t: number) => number;
|
|
64
|
+
easeInOutCubic: (t: number) => number;
|
|
65
|
+
easeInSine: (t: number) => number;
|
|
66
|
+
easeOutSine: (t: number) => number;
|
|
67
|
+
easeInOutSine: (t: number) => number;
|
|
68
|
+
easeInExpo: (t: number) => number;
|
|
69
|
+
easeOutExpo: (t: number) => number;
|
|
70
|
+
easeInOutExpo: (t: number) => number;
|
|
71
|
+
easeInBack: (t: number) => number;
|
|
72
|
+
easeOutBack: (t: number) => number;
|
|
73
|
+
easeInOutBack: (t: number) => number;
|
|
74
|
+
easeInElastic: (t: number) => number;
|
|
75
|
+
easeOutElastic: (t: number) => number;
|
|
76
|
+
easeInBounce: (t: number) => number;
|
|
77
|
+
easeOutBounce: (t: number) => number;
|
|
78
|
+
};
|
|
79
|
+
declare const PI: number;
|
|
80
|
+
declare const TAU: number;
|
|
81
|
+
declare const DEGREES: number;
|
|
82
|
+
declare function degToRad(degrees: number): number;
|
|
83
|
+
declare function radToDeg(radians: number): number;
|
|
84
|
+
declare function clamp(value: number, min: number, max: number): number;
|
|
85
|
+
declare function mapRange(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
86
|
+
declare function lerpNumber(a: number, b: number, t: number): number;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @locusing/core - 核心类型定义
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
interface Style {
|
|
93
|
+
fill?: string;
|
|
94
|
+
fillOpacity?: number;
|
|
95
|
+
stroke?: string;
|
|
96
|
+
strokeWidth?: number;
|
|
97
|
+
strokeOpacity?: number;
|
|
98
|
+
strokeDasharray?: string;
|
|
99
|
+
strokeLinecap?: 'butt' | 'round' | 'square';
|
|
100
|
+
strokeLinejoin?: 'miter' | 'round' | 'bevel';
|
|
101
|
+
opacity?: number;
|
|
102
|
+
}
|
|
103
|
+
interface TextStyle extends Style {
|
|
104
|
+
fontSize?: number;
|
|
105
|
+
fontFamily?: string;
|
|
106
|
+
fontWeight?: string | number;
|
|
107
|
+
fontStyle?: string;
|
|
108
|
+
textAnchor?: 'start' | 'middle' | 'end';
|
|
109
|
+
dominantBaseline?: 'auto' | 'middle' | 'hanging' | 'central';
|
|
110
|
+
}
|
|
111
|
+
type ShapeType = 'group' | 'path' | 'rect' | 'circle' | 'ellipse' | 'line' | 'polyline' | 'polygon' | 'text' | 'arc';
|
|
112
|
+
type PathCommand = {
|
|
113
|
+
type: 'M';
|
|
114
|
+
x: number;
|
|
115
|
+
y: number;
|
|
116
|
+
} | {
|
|
117
|
+
type: 'L';
|
|
118
|
+
x: number;
|
|
119
|
+
y: number;
|
|
120
|
+
} | {
|
|
121
|
+
type: 'H';
|
|
122
|
+
x: number;
|
|
123
|
+
} | {
|
|
124
|
+
type: 'V';
|
|
125
|
+
y: number;
|
|
126
|
+
} | {
|
|
127
|
+
type: 'C';
|
|
128
|
+
x1: number;
|
|
129
|
+
y1: number;
|
|
130
|
+
x2: number;
|
|
131
|
+
y2: number;
|
|
132
|
+
x: number;
|
|
133
|
+
y: number;
|
|
134
|
+
} | {
|
|
135
|
+
type: 'S';
|
|
136
|
+
x2: number;
|
|
137
|
+
y2: number;
|
|
138
|
+
x: number;
|
|
139
|
+
y: number;
|
|
140
|
+
} | {
|
|
141
|
+
type: 'Q';
|
|
142
|
+
x1: number;
|
|
143
|
+
y1: number;
|
|
144
|
+
x: number;
|
|
145
|
+
y: number;
|
|
146
|
+
} | {
|
|
147
|
+
type: 'T';
|
|
148
|
+
x: number;
|
|
149
|
+
y: number;
|
|
150
|
+
} | {
|
|
151
|
+
type: 'A';
|
|
152
|
+
rx: number;
|
|
153
|
+
ry: number;
|
|
154
|
+
angle: number;
|
|
155
|
+
largeArc: boolean;
|
|
156
|
+
sweep: boolean;
|
|
157
|
+
x: number;
|
|
158
|
+
y: number;
|
|
159
|
+
} | {
|
|
160
|
+
type: 'Z';
|
|
161
|
+
};
|
|
162
|
+
interface BaseShape {
|
|
163
|
+
id: string;
|
|
164
|
+
type: ShapeType;
|
|
165
|
+
style: Style;
|
|
166
|
+
transform: Matrix3;
|
|
167
|
+
_bounds?: {
|
|
168
|
+
x: number;
|
|
169
|
+
y: number;
|
|
170
|
+
width: number;
|
|
171
|
+
height: number;
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
interface GroupShape extends BaseShape {
|
|
175
|
+
type: 'group';
|
|
176
|
+
children: Shape[];
|
|
177
|
+
}
|
|
178
|
+
interface PathShape extends BaseShape {
|
|
179
|
+
type: 'path';
|
|
180
|
+
commands: PathCommand[];
|
|
181
|
+
}
|
|
182
|
+
interface RectShape extends BaseShape {
|
|
183
|
+
type: 'rect';
|
|
184
|
+
x: number;
|
|
185
|
+
y: number;
|
|
186
|
+
width: number;
|
|
187
|
+
height: number;
|
|
188
|
+
rx?: number;
|
|
189
|
+
ry?: number;
|
|
190
|
+
}
|
|
191
|
+
interface CircleShape extends BaseShape {
|
|
192
|
+
type: 'circle';
|
|
193
|
+
cx: number;
|
|
194
|
+
cy: number;
|
|
195
|
+
r: number;
|
|
196
|
+
}
|
|
197
|
+
interface EllipseShape extends BaseShape {
|
|
198
|
+
type: 'ellipse';
|
|
199
|
+
cx: number;
|
|
200
|
+
cy: number;
|
|
201
|
+
rx: number;
|
|
202
|
+
ry: number;
|
|
203
|
+
}
|
|
204
|
+
interface LineShape extends BaseShape {
|
|
205
|
+
type: 'line';
|
|
206
|
+
x1: number;
|
|
207
|
+
y1: number;
|
|
208
|
+
x2: number;
|
|
209
|
+
y2: number;
|
|
210
|
+
}
|
|
211
|
+
interface PolylineShape extends BaseShape {
|
|
212
|
+
type: 'polyline';
|
|
213
|
+
points: Vector2[];
|
|
214
|
+
}
|
|
215
|
+
interface PolygonShape extends BaseShape {
|
|
216
|
+
type: 'polygon';
|
|
217
|
+
points: Vector2[];
|
|
218
|
+
}
|
|
219
|
+
interface TextShape extends BaseShape {
|
|
220
|
+
type: 'text';
|
|
221
|
+
style: TextStyle;
|
|
222
|
+
x: number;
|
|
223
|
+
y: number;
|
|
224
|
+
content: string;
|
|
225
|
+
}
|
|
226
|
+
interface ArcShape extends BaseShape {
|
|
227
|
+
type: 'arc';
|
|
228
|
+
cx: number;
|
|
229
|
+
cy: number;
|
|
230
|
+
r: number;
|
|
231
|
+
startAngle: number;
|
|
232
|
+
endAngle: number;
|
|
233
|
+
}
|
|
234
|
+
type Shape = GroupShape | PathShape | RectShape | CircleShape | EllipseShape | LineShape | PolylineShape | PolygonShape | TextShape | ArcShape;
|
|
235
|
+
interface RenderOptions {
|
|
236
|
+
width?: number;
|
|
237
|
+
height?: number;
|
|
238
|
+
background?: string;
|
|
239
|
+
rough?: boolean;
|
|
240
|
+
roughness?: number;
|
|
241
|
+
bowing?: number;
|
|
242
|
+
seed?: number;
|
|
243
|
+
}
|
|
244
|
+
interface SliderOptions {
|
|
245
|
+
min: number;
|
|
246
|
+
max: number;
|
|
247
|
+
value?: number;
|
|
248
|
+
step?: number;
|
|
249
|
+
label?: string;
|
|
250
|
+
showPlayButton?: boolean;
|
|
251
|
+
playDuration?: number;
|
|
252
|
+
}
|
|
253
|
+
interface LocatorOptions {
|
|
254
|
+
x: number;
|
|
255
|
+
y: number;
|
|
256
|
+
radius?: number;
|
|
257
|
+
constraint?: (p: Vector2) => Vector2;
|
|
258
|
+
}
|
|
259
|
+
interface AnimationOptions {
|
|
260
|
+
duration?: number;
|
|
261
|
+
easing?: string;
|
|
262
|
+
delay?: number;
|
|
263
|
+
lagRatio?: number;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* @locusing/core - Diagram 不可变图形树
|
|
268
|
+
*
|
|
269
|
+
* 实现链式 API,支持声明式图形构造
|
|
270
|
+
*/
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Diagram 类 - 不可变图形树的包装器
|
|
274
|
+
*
|
|
275
|
+
* 每个方法返回新的 Diagram 实例,保证不可变性
|
|
276
|
+
*/
|
|
277
|
+
declare class Diagram {
|
|
278
|
+
readonly shape: Shape;
|
|
279
|
+
constructor(shape: Shape);
|
|
280
|
+
/** 设置填充颜色 */
|
|
281
|
+
fill(color: string): Diagram;
|
|
282
|
+
/** 设置描边颜色 */
|
|
283
|
+
stroke(color: string): Diagram;
|
|
284
|
+
/** 设置描边宽度 */
|
|
285
|
+
strokeWidth(width: number): Diagram;
|
|
286
|
+
/** 设置透明度 */
|
|
287
|
+
opacity(value: number): Diagram;
|
|
288
|
+
/** 设置虚线样式 */
|
|
289
|
+
dashed(dasharray?: string): Diagram;
|
|
290
|
+
/** 批量设置样式 */
|
|
291
|
+
style(newStyle: Partial<Style>): Diagram;
|
|
292
|
+
/** 平移 */
|
|
293
|
+
translate(x: number, y: number): Diagram;
|
|
294
|
+
translate(v: Vector2): Diagram;
|
|
295
|
+
/** 移动到指定位置 */
|
|
296
|
+
position(x: number, y: number): Diagram;
|
|
297
|
+
position(v: Vector2): Diagram;
|
|
298
|
+
/** 旋转(弧度) */
|
|
299
|
+
rotate(radians: number, center?: Vector2): Diagram;
|
|
300
|
+
/** 旋转(度数) */
|
|
301
|
+
rotateDeg(degrees: number, center?: Vector2): Diagram;
|
|
302
|
+
/** 缩放 */
|
|
303
|
+
scale(factor: number, center?: Vector2): Diagram;
|
|
304
|
+
scale(sx: number, sy: number, center?: Vector2): Diagram;
|
|
305
|
+
/** 应用变换矩阵 */
|
|
306
|
+
transform(matrix: Matrix3): Diagram;
|
|
307
|
+
/** 组合多个图形 */
|
|
308
|
+
combine(...others: Diagram[]): Diagram;
|
|
309
|
+
/** 添加子图形 */
|
|
310
|
+
add(...others: Diagram[]): Diagram;
|
|
311
|
+
/** 获取中心点 */
|
|
312
|
+
center(): Vector2;
|
|
313
|
+
/** 获取包围盒 */
|
|
314
|
+
bounds(): {
|
|
315
|
+
x: number;
|
|
316
|
+
y: number;
|
|
317
|
+
width: number;
|
|
318
|
+
height: number;
|
|
319
|
+
};
|
|
320
|
+
/** 获取指定方向的边缘点 */
|
|
321
|
+
edge(direction: Vector2): Vector2;
|
|
322
|
+
/** 获取相对于另一个图形的位置 */
|
|
323
|
+
nextTo(other: Diagram, direction: Vector2, buffer?: number): Diagram;
|
|
324
|
+
/** 克隆图形 */
|
|
325
|
+
clone(): Diagram;
|
|
326
|
+
/** 复制到指定位置 */
|
|
327
|
+
copy(): Diagram;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* @locusing/core - 基础图元工厂函数
|
|
332
|
+
*
|
|
333
|
+
* 提供 square, circle, line, polygon, text 等图元创建函数
|
|
334
|
+
*/
|
|
335
|
+
|
|
336
|
+
/** 创建矩形 */
|
|
337
|
+
declare function rect(width: number, height: number, options?: {
|
|
338
|
+
rx?: number;
|
|
339
|
+
ry?: number;
|
|
340
|
+
centered?: boolean;
|
|
341
|
+
}): Diagram;
|
|
342
|
+
/** 创建正方形 */
|
|
343
|
+
declare function square(size: number, options?: {
|
|
344
|
+
rx?: number;
|
|
345
|
+
centered?: boolean;
|
|
346
|
+
}): Diagram;
|
|
347
|
+
/** 创建圆形 */
|
|
348
|
+
declare function circle(radius: number): Diagram;
|
|
349
|
+
/** 创建椭圆 */
|
|
350
|
+
declare function ellipse(rx: number, ry: number): Diagram;
|
|
351
|
+
/** 创建点(小圆) */
|
|
352
|
+
declare function dot(position?: Vector2, radius?: number): Diagram;
|
|
353
|
+
/** 创建直线 */
|
|
354
|
+
declare function line(from: Vector2, to: Vector2): Diagram;
|
|
355
|
+
/** 创建箭头 */
|
|
356
|
+
declare function arrow(from: Vector2, to: Vector2, options?: {
|
|
357
|
+
headSize?: number;
|
|
358
|
+
headAngle?: number;
|
|
359
|
+
}): Diagram;
|
|
360
|
+
/** 创建双向箭头 */
|
|
361
|
+
declare function doubleArrow(from: Vector2, to: Vector2, options?: {
|
|
362
|
+
headSize?: number;
|
|
363
|
+
headAngle?: number;
|
|
364
|
+
}): Diagram;
|
|
365
|
+
/** 创建多边形 */
|
|
366
|
+
declare function polygon(...points: Vector2[]): Diagram;
|
|
367
|
+
/** 创建正多边形 */
|
|
368
|
+
declare function regularPolygon(sides: number, radius: number): Diagram;
|
|
369
|
+
/** 创建三角形 */
|
|
370
|
+
declare function triangle(width: number, height: number): Diagram;
|
|
371
|
+
/** 创建等边三角形 */
|
|
372
|
+
declare function equilateralTriangle(sideLength: number): Diagram;
|
|
373
|
+
/** 创建星形 */
|
|
374
|
+
declare function star(points: number, outerRadius: number, innerRadius?: number): Diagram;
|
|
375
|
+
/** 创建折线 */
|
|
376
|
+
declare function polyline(...points: Vector2[]): Diagram;
|
|
377
|
+
/** 创建圆弧 */
|
|
378
|
+
declare function arc(radius: number, startAngle: number, endAngle: number): Diagram;
|
|
379
|
+
/** 创建扇形 */
|
|
380
|
+
declare function sector(radius: number, startAngle: number, endAngle: number): Diagram;
|
|
381
|
+
/** 创建路径 */
|
|
382
|
+
declare function path(commands: PathCommand[]): Diagram;
|
|
383
|
+
/** 从 SVG 路径字符串创建 */
|
|
384
|
+
declare function pathFromString(d: string): Diagram;
|
|
385
|
+
/** 创建文本 */
|
|
386
|
+
declare function text(content: string, options?: {
|
|
387
|
+
fontSize?: number;
|
|
388
|
+
fontFamily?: string;
|
|
389
|
+
fontWeight?: string | number;
|
|
390
|
+
fontStyle?: string;
|
|
391
|
+
anchor?: 'start' | 'middle' | 'end';
|
|
392
|
+
}): Diagram;
|
|
393
|
+
/** 创建 LaTeX 公式(占位符,需要 MathJax 支持) */
|
|
394
|
+
declare function tex(latex: string, options?: {
|
|
395
|
+
fontSize?: number;
|
|
396
|
+
}): Diagram;
|
|
397
|
+
/** 组合多个图形 */
|
|
398
|
+
declare function combine(...diagrams: Diagram[]): Diagram;
|
|
399
|
+
/** 创建空组 */
|
|
400
|
+
declare function group(): Diagram;
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* @locusing/core - SVG 渲染器
|
|
404
|
+
*
|
|
405
|
+
* 将 Diagram 渲染为 SVG 元素
|
|
406
|
+
*/
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* 渲染 Diagram 到 SVG 元素
|
|
410
|
+
*/
|
|
411
|
+
declare function renderToSVG(diagram: Diagram, container: SVGSVGElement | HTMLElement, options?: RenderOptions): SVGSVGElement;
|
|
412
|
+
/**
|
|
413
|
+
* 将 Diagram 转换为 SVG 字符串
|
|
414
|
+
*/
|
|
415
|
+
declare function toSVGString(diagram: Diagram, options?: RenderOptions): string;
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* @locusing/core - Rough.js 渲染器
|
|
419
|
+
*
|
|
420
|
+
* 将 Diagram 渲染为手绘风格的 SVG
|
|
421
|
+
*/
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Rough.js 渲染选项
|
|
425
|
+
*/
|
|
426
|
+
interface RoughRenderOptions extends RenderOptions {
|
|
427
|
+
roughness?: number;
|
|
428
|
+
bowing?: number;
|
|
429
|
+
seed?: number;
|
|
430
|
+
fillStyle?: 'hachure' | 'solid' | 'zigzag' | 'cross-hatch' | 'dots' | 'dashed' | 'zigzag-line';
|
|
431
|
+
fillWeight?: number;
|
|
432
|
+
hachureAngle?: number;
|
|
433
|
+
hachureGap?: number;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* 渲染 Diagram 到 SVG(手绘风格)
|
|
437
|
+
*/
|
|
438
|
+
declare function renderToRough(diagram: Diagram, container: SVGSVGElement | HTMLElement, options?: RoughRenderOptions): SVGSVGElement;
|
|
439
|
+
declare const roughPresets: {
|
|
440
|
+
/** 默认手绘风格 */
|
|
441
|
+
default: {
|
|
442
|
+
roughness: number;
|
|
443
|
+
bowing: number;
|
|
444
|
+
fillStyle: "hachure";
|
|
445
|
+
};
|
|
446
|
+
/** 粉笔风格 */
|
|
447
|
+
chalk: {
|
|
448
|
+
roughness: number;
|
|
449
|
+
bowing: number;
|
|
450
|
+
fillStyle: "zigzag";
|
|
451
|
+
fillWeight: number;
|
|
452
|
+
};
|
|
453
|
+
/** 钢笔风格 */
|
|
454
|
+
pen: {
|
|
455
|
+
roughness: number;
|
|
456
|
+
bowing: number;
|
|
457
|
+
fillStyle: "cross-hatch";
|
|
458
|
+
};
|
|
459
|
+
/** 铅笔风格 */
|
|
460
|
+
pencil: {
|
|
461
|
+
roughness: number;
|
|
462
|
+
bowing: number;
|
|
463
|
+
fillStyle: "hachure";
|
|
464
|
+
fillWeight: number;
|
|
465
|
+
};
|
|
466
|
+
/** 马克笔风格 */
|
|
467
|
+
marker: {
|
|
468
|
+
roughness: number;
|
|
469
|
+
bowing: number;
|
|
470
|
+
fillStyle: "solid";
|
|
471
|
+
strokeWidth: number;
|
|
472
|
+
};
|
|
473
|
+
/** 涂鸦风格 */
|
|
474
|
+
doodle: {
|
|
475
|
+
roughness: number;
|
|
476
|
+
bowing: number;
|
|
477
|
+
fillStyle: "zigzag-line";
|
|
478
|
+
};
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* @locusing/animate - 时间线引擎
|
|
483
|
+
*
|
|
484
|
+
* 基于 GSAP 的动画时间线管理
|
|
485
|
+
*/
|
|
486
|
+
type AnimationStatus = 'pending' | 'running' | 'paused' | 'completed';
|
|
487
|
+
interface TimelineOptions {
|
|
488
|
+
duration?: number;
|
|
489
|
+
easing?: string;
|
|
490
|
+
delay?: number;
|
|
491
|
+
repeat?: number;
|
|
492
|
+
yoyo?: boolean;
|
|
493
|
+
onStart?: () => void;
|
|
494
|
+
onComplete?: () => void;
|
|
495
|
+
onUpdate?: (progress: number) => void;
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Timeline 类 - 动画时间线管理
|
|
499
|
+
*/
|
|
500
|
+
declare class Timeline {
|
|
501
|
+
private timeline;
|
|
502
|
+
private _status;
|
|
503
|
+
constructor(options?: TimelineOptions);
|
|
504
|
+
/** 当前状态 */
|
|
505
|
+
get status(): AnimationStatus;
|
|
506
|
+
/** 当前进度 (0-1) */
|
|
507
|
+
get progress(): number;
|
|
508
|
+
/** 总时长 */
|
|
509
|
+
get duration(): number;
|
|
510
|
+
/** 当前时间 */
|
|
511
|
+
get time(): number;
|
|
512
|
+
/**
|
|
513
|
+
* 添加动画到时间线
|
|
514
|
+
*/
|
|
515
|
+
add(target: object | string, vars: gsap.TweenVars, position?: gsap.Position): this;
|
|
516
|
+
/**
|
|
517
|
+
* 添加回调函数
|
|
518
|
+
*/
|
|
519
|
+
call(callback: () => void, position?: gsap.Position): this;
|
|
520
|
+
/**
|
|
521
|
+
* 添加延迟
|
|
522
|
+
*/
|
|
523
|
+
delay(seconds: number, position?: gsap.Position): this;
|
|
524
|
+
/**
|
|
525
|
+
* 添加标签
|
|
526
|
+
*/
|
|
527
|
+
label(name: string, position?: gsap.Position): this;
|
|
528
|
+
/**
|
|
529
|
+
* 播放
|
|
530
|
+
*/
|
|
531
|
+
play(): this;
|
|
532
|
+
/**
|
|
533
|
+
* 暂停
|
|
534
|
+
*/
|
|
535
|
+
pause(): this;
|
|
536
|
+
/**
|
|
537
|
+
* 恢复
|
|
538
|
+
*/
|
|
539
|
+
resume(): this;
|
|
540
|
+
/**
|
|
541
|
+
* 停止并重置
|
|
542
|
+
*/
|
|
543
|
+
restart(): this;
|
|
544
|
+
/**
|
|
545
|
+
* 跳转到指定时间
|
|
546
|
+
*/
|
|
547
|
+
seek(time: number | string): this;
|
|
548
|
+
/**
|
|
549
|
+
* 设置进度
|
|
550
|
+
*/
|
|
551
|
+
setProgress(progress: number): this;
|
|
552
|
+
/**
|
|
553
|
+
* 设置速度
|
|
554
|
+
*/
|
|
555
|
+
setSpeed(speed: number): this;
|
|
556
|
+
/**
|
|
557
|
+
* 反向播放
|
|
558
|
+
*/
|
|
559
|
+
reverse(): this;
|
|
560
|
+
/**
|
|
561
|
+
* 销毁
|
|
562
|
+
*/
|
|
563
|
+
kill(): void;
|
|
564
|
+
/**
|
|
565
|
+
* 等待完成
|
|
566
|
+
*/
|
|
567
|
+
finished(): Promise<void>;
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* 创建时间线
|
|
571
|
+
*/
|
|
572
|
+
declare function createTimeline(options?: TimelineOptions): Timeline;
|
|
573
|
+
/**
|
|
574
|
+
* GSAP 缓动函数映射
|
|
575
|
+
*/
|
|
576
|
+
declare const easingMap: Record<string, string>;
|
|
577
|
+
/**
|
|
578
|
+
* 获取 GSAP 缓动字符串
|
|
579
|
+
*/
|
|
580
|
+
declare function getGSAPEasing(easing: string): string;
|
|
581
|
+
|
|
582
|
+
/**
|
|
583
|
+
* @locusing/animate - Scene 场景管理
|
|
584
|
+
*
|
|
585
|
+
* Manim 风格的场景类
|
|
586
|
+
*/
|
|
587
|
+
|
|
588
|
+
interface SceneConfig {
|
|
589
|
+
width?: number;
|
|
590
|
+
height?: number;
|
|
591
|
+
background?: string;
|
|
592
|
+
fps?: number;
|
|
593
|
+
rough?: boolean;
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* Scene 类 - Manim 风格的场景管理
|
|
597
|
+
*
|
|
598
|
+
* 使用方式:
|
|
599
|
+
* ```typescript
|
|
600
|
+
* class MyScene extends Scene {
|
|
601
|
+
* construct() {
|
|
602
|
+
* const sq = square(100).fill('#EA580C');
|
|
603
|
+
* this.play(Create(sq));
|
|
604
|
+
* this.wait(1);
|
|
605
|
+
* this.play(FadeOut(sq));
|
|
606
|
+
* }
|
|
607
|
+
* }
|
|
608
|
+
* ```
|
|
609
|
+
*/
|
|
610
|
+
declare abstract class Scene {
|
|
611
|
+
protected container: HTMLElement;
|
|
612
|
+
protected svg: SVGSVGElement;
|
|
613
|
+
protected config: Required<SceneConfig>;
|
|
614
|
+
protected timeline: Timeline;
|
|
615
|
+
protected objects: Map<string, Diagram>;
|
|
616
|
+
protected currentTime: number;
|
|
617
|
+
constructor(container: HTMLElement, config?: SceneConfig);
|
|
618
|
+
/** 子类实现此方法来构建动画 */
|
|
619
|
+
abstract construct(): void;
|
|
620
|
+
/**
|
|
621
|
+
* 添加图形到场景(不带动画)
|
|
622
|
+
*/
|
|
623
|
+
add(...diagrams: Diagram[]): void;
|
|
624
|
+
/**
|
|
625
|
+
* 从场景移除图形
|
|
626
|
+
*/
|
|
627
|
+
remove(...diagrams: Diagram[]): void;
|
|
628
|
+
/**
|
|
629
|
+
* 播放动画
|
|
630
|
+
*
|
|
631
|
+
* @param animations - 要播放的动画
|
|
632
|
+
* @param config - 动画配置
|
|
633
|
+
*/
|
|
634
|
+
play(...args: (Animation | AnimationConfig)[]): void;
|
|
635
|
+
/**
|
|
636
|
+
* 等待指定时间
|
|
637
|
+
*/
|
|
638
|
+
wait(seconds?: number): void;
|
|
639
|
+
/**
|
|
640
|
+
* 运行场景
|
|
641
|
+
*/
|
|
642
|
+
render(): Promise<void>;
|
|
643
|
+
/**
|
|
644
|
+
* 渲染单个图形到 SVG
|
|
645
|
+
*/
|
|
646
|
+
protected renderDiagram(diagram: Diagram): SVGElement | null;
|
|
647
|
+
/**
|
|
648
|
+
* 获取图形对应的 SVG 元素
|
|
649
|
+
*/
|
|
650
|
+
getElement(diagram: Diagram): SVGElement | null;
|
|
651
|
+
/**
|
|
652
|
+
* 获取或创建图形元素
|
|
653
|
+
*/
|
|
654
|
+
getOrCreateElement(diagram: Diagram): SVGElement;
|
|
655
|
+
/**
|
|
656
|
+
* 获取 SVG 容器
|
|
657
|
+
*/
|
|
658
|
+
getSVG(): SVGSVGElement;
|
|
659
|
+
/**
|
|
660
|
+
* 获取配置
|
|
661
|
+
*/
|
|
662
|
+
getConfig(): Required<SceneConfig>;
|
|
663
|
+
/**
|
|
664
|
+
* 导出为 SVG 字符串
|
|
665
|
+
*/
|
|
666
|
+
toSVGString(): string;
|
|
667
|
+
/**
|
|
668
|
+
* 暂停
|
|
669
|
+
*/
|
|
670
|
+
pause(): void;
|
|
671
|
+
/**
|
|
672
|
+
* 恢复
|
|
673
|
+
*/
|
|
674
|
+
resume(): void;
|
|
675
|
+
/**
|
|
676
|
+
* 重新开始
|
|
677
|
+
*/
|
|
678
|
+
restart(): void;
|
|
679
|
+
/**
|
|
680
|
+
* 销毁场景
|
|
681
|
+
*/
|
|
682
|
+
destroy(): void;
|
|
683
|
+
}
|
|
684
|
+
/**
|
|
685
|
+
* 创建简单场景(不需要继承)
|
|
686
|
+
*/
|
|
687
|
+
declare function createScene(container: HTMLElement, buildFn: (scene: SimpleScene) => void, config?: SceneConfig): SimpleScene;
|
|
688
|
+
declare class SimpleScene extends Scene {
|
|
689
|
+
private buildFn;
|
|
690
|
+
constructor(container: HTMLElement, buildFn: (scene: SimpleScene) => void, config?: SceneConfig);
|
|
691
|
+
construct(): void;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
/**
|
|
695
|
+
* @locusing/animate - 动画类型定义
|
|
696
|
+
*/
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* 动画配置
|
|
700
|
+
*/
|
|
701
|
+
interface AnimationConfig {
|
|
702
|
+
duration?: number;
|
|
703
|
+
easing?: string;
|
|
704
|
+
delay?: number;
|
|
705
|
+
lagRatio?: number;
|
|
706
|
+
runTime?: number;
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* 动画接口
|
|
710
|
+
*/
|
|
711
|
+
interface Animation {
|
|
712
|
+
/** 动画时长 */
|
|
713
|
+
duration: number;
|
|
714
|
+
/** 目标图形 */
|
|
715
|
+
target: Diagram;
|
|
716
|
+
/** 执行动画 */
|
|
717
|
+
execute(scene: Scene, timeline: Timeline, startTime: number): void;
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* 创建动画选项
|
|
721
|
+
*/
|
|
722
|
+
interface CreateOptions extends AnimationConfig {
|
|
723
|
+
/** 是否先描边再填充 */
|
|
724
|
+
drawBorderThenFill?: boolean;
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* 淡入淡出选项
|
|
728
|
+
*/
|
|
729
|
+
interface FadeOptions extends AnimationConfig {
|
|
730
|
+
/** 方向 */
|
|
731
|
+
direction?: Vector2 | 'UP' | 'DOWN' | 'LEFT' | 'RIGHT';
|
|
732
|
+
/** 位移距离 */
|
|
733
|
+
shift?: number;
|
|
734
|
+
}
|
|
735
|
+
/**
|
|
736
|
+
* 变换选项
|
|
737
|
+
*/
|
|
738
|
+
interface TransformOptions extends AnimationConfig {
|
|
739
|
+
/** 路径函数 */
|
|
740
|
+
pathFunc?: (t: number) => Vector2;
|
|
741
|
+
/** 是否替换原对象 */
|
|
742
|
+
replace?: boolean;
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* 移动选项
|
|
746
|
+
*/
|
|
747
|
+
interface MoveOptions extends AnimationConfig {
|
|
748
|
+
/** 路径 */
|
|
749
|
+
path?: Diagram;
|
|
750
|
+
/** 是否旋转跟随路径 */
|
|
751
|
+
rotateAlongPath?: boolean;
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* 旋转选项
|
|
755
|
+
*/
|
|
756
|
+
interface RotateOptions extends AnimationConfig {
|
|
757
|
+
/** 旋转中心 */
|
|
758
|
+
aboutPoint?: Vector2;
|
|
759
|
+
/** 旋转角度(弧度) */
|
|
760
|
+
angle?: number;
|
|
761
|
+
}
|
|
762
|
+
/**
|
|
763
|
+
* 缩放选项
|
|
764
|
+
*/
|
|
765
|
+
interface ScaleOptions extends AnimationConfig {
|
|
766
|
+
/** 缩放中心 */
|
|
767
|
+
aboutPoint?: Vector2;
|
|
768
|
+
/** 缩放因子 */
|
|
769
|
+
factor?: number;
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* 指示动画选项
|
|
773
|
+
*/
|
|
774
|
+
interface IndicateOptions extends AnimationConfig {
|
|
775
|
+
/** 高亮颜色 */
|
|
776
|
+
color?: string;
|
|
777
|
+
/** 缩放因子 */
|
|
778
|
+
scaleFactor?: number;
|
|
779
|
+
}
|
|
780
|
+
/**
|
|
781
|
+
* 圈出选项
|
|
782
|
+
*/
|
|
783
|
+
interface CircumscribeOptions extends AnimationConfig {
|
|
784
|
+
/** 形状:圆形或矩形 */
|
|
785
|
+
shape?: 'circle' | 'rectangle';
|
|
786
|
+
/** 颜色 */
|
|
787
|
+
color?: string;
|
|
788
|
+
/** 线条宽度 */
|
|
789
|
+
strokeWidth?: number;
|
|
790
|
+
/** 填充 */
|
|
791
|
+
fill?: boolean;
|
|
792
|
+
/** 填充透明度 */
|
|
793
|
+
fillOpacity?: number;
|
|
794
|
+
}
|
|
795
|
+
/**
|
|
796
|
+
* 闪光选项
|
|
797
|
+
*/
|
|
798
|
+
interface FlashOptions extends AnimationConfig {
|
|
799
|
+
/** 颜色 */
|
|
800
|
+
color?: string;
|
|
801
|
+
/** 线条数量 */
|
|
802
|
+
lineLength?: number;
|
|
803
|
+
/** 线条数量 */
|
|
804
|
+
numLines?: number;
|
|
805
|
+
}
|
|
806
|
+
/**
|
|
807
|
+
* 抖动选项
|
|
808
|
+
*/
|
|
809
|
+
interface WiggleOptions extends AnimationConfig {
|
|
810
|
+
/** 抖动次数 */
|
|
811
|
+
nWiggles?: number;
|
|
812
|
+
/** 抖动幅度 */
|
|
813
|
+
scaleValue?: number;
|
|
814
|
+
/** 旋转角度 */
|
|
815
|
+
rotationAngle?: number;
|
|
816
|
+
}
|
|
817
|
+
/**
|
|
818
|
+
* 动画组选项
|
|
819
|
+
*/
|
|
820
|
+
interface AnimationGroupOptions extends AnimationConfig {
|
|
821
|
+
/** 错开比例 */
|
|
822
|
+
lagRatio?: number;
|
|
823
|
+
}
|
|
824
|
+
/**
|
|
825
|
+
* ValueTracker - 用于跟踪数值变化
|
|
826
|
+
*/
|
|
827
|
+
declare class ValueTracker {
|
|
828
|
+
private _value;
|
|
829
|
+
private listeners;
|
|
830
|
+
constructor(initialValue?: number);
|
|
831
|
+
get value(): number;
|
|
832
|
+
set value(newValue: number);
|
|
833
|
+
/** 添加变化监听器 */
|
|
834
|
+
addListener(listener: (value: number) => void): () => void;
|
|
835
|
+
/** 创建动画目标对象 */
|
|
836
|
+
animate(targetValue: number): {
|
|
837
|
+
value: number;
|
|
838
|
+
};
|
|
839
|
+
/** 获取当前值的普通对象(用于 GSAP) */
|
|
840
|
+
toObject(): {
|
|
841
|
+
value: number;
|
|
842
|
+
};
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* 创建类动画 - Create, Write, DrawBorderThenFill
|
|
847
|
+
*/
|
|
848
|
+
|
|
849
|
+
/**
|
|
850
|
+
* Create - 描边绘制动画
|
|
851
|
+
*
|
|
852
|
+
* 模拟手绘效果,从路径起点到终点绘制
|
|
853
|
+
*/
|
|
854
|
+
declare function Create(target: Diagram, options?: CreateOptions): Animation;
|
|
855
|
+
/**
|
|
856
|
+
* Write - 文字书写效果
|
|
857
|
+
*
|
|
858
|
+
* 逐字显示文本
|
|
859
|
+
*/
|
|
860
|
+
declare function Write(target: Diagram, options?: CreateOptions): Animation;
|
|
861
|
+
/**
|
|
862
|
+
* DrawBorderThenFill - 先描边再填充
|
|
863
|
+
*/
|
|
864
|
+
declare function DrawBorderThenFill(target: Diagram, options?: CreateOptions): Animation;
|
|
865
|
+
/**
|
|
866
|
+
* GrowFromCenter - 从中心放大出现
|
|
867
|
+
*/
|
|
868
|
+
declare function GrowFromCenter(target: Diagram, options?: CreateOptions): Animation;
|
|
869
|
+
/**
|
|
870
|
+
* GrowFromPoint - 从指定点放大
|
|
871
|
+
*/
|
|
872
|
+
declare function GrowFromPoint(target: Diagram, point: [number, number], options?: CreateOptions): Animation;
|
|
873
|
+
/**
|
|
874
|
+
* GrowFromEdge - 从边缘生长
|
|
875
|
+
*/
|
|
876
|
+
declare function GrowFromEdge(target: Diagram, edge?: 'LEFT' | 'RIGHT' | 'TOP' | 'BOTTOM', options?: CreateOptions): Animation;
|
|
877
|
+
/**
|
|
878
|
+
* SpinInFromNothing - 旋转出现
|
|
879
|
+
*/
|
|
880
|
+
declare function SpinInFromNothing(target: Diagram, options?: CreateOptions): Animation;
|
|
881
|
+
|
|
882
|
+
/**
|
|
883
|
+
* 淡入淡出动画 - FadeIn, FadeOut
|
|
884
|
+
*/
|
|
885
|
+
|
|
886
|
+
/**
|
|
887
|
+
* FadeIn - 淡入动画
|
|
888
|
+
*/
|
|
889
|
+
declare function FadeIn(target: Diagram, options?: FadeOptions): Animation;
|
|
890
|
+
/**
|
|
891
|
+
* FadeOut - 淡出动画
|
|
892
|
+
*/
|
|
893
|
+
declare function FadeOut(target: Diagram, options?: FadeOptions): Animation;
|
|
894
|
+
/**
|
|
895
|
+
* FadeInFrom - 从指定方向淡入
|
|
896
|
+
*/
|
|
897
|
+
declare function FadeInFrom(target: Diagram, direction: Vector2 | 'UP' | 'DOWN' | 'LEFT' | 'RIGHT', options?: Omit<FadeOptions, 'direction'>): Animation;
|
|
898
|
+
/**
|
|
899
|
+
* FadeOutTo - 向指定方向淡出
|
|
900
|
+
*/
|
|
901
|
+
declare function FadeOutTo(target: Diagram, direction: Vector2 | 'UP' | 'DOWN' | 'LEFT' | 'RIGHT', options?: Omit<FadeOptions, 'direction'>): Animation;
|
|
902
|
+
/**
|
|
903
|
+
* FadeInFromDown - 从下方淡入
|
|
904
|
+
*/
|
|
905
|
+
declare function FadeInFromDown(target: Diagram, options?: Omit<FadeOptions, 'direction'>): Animation;
|
|
906
|
+
/**
|
|
907
|
+
* FadeInFromUp - 从上方淡入
|
|
908
|
+
*/
|
|
909
|
+
declare function FadeInFromUp(target: Diagram, options?: Omit<FadeOptions, 'direction'>): Animation;
|
|
910
|
+
/**
|
|
911
|
+
* FadeInFromLeft - 从左侧淡入
|
|
912
|
+
*/
|
|
913
|
+
declare function FadeInFromLeft(target: Diagram, options?: Omit<FadeOptions, 'direction'>): Animation;
|
|
914
|
+
/**
|
|
915
|
+
* FadeInFromRight - 从右侧淡入
|
|
916
|
+
*/
|
|
917
|
+
declare function FadeInFromRight(target: Diagram, options?: Omit<FadeOptions, 'direction'>): Animation;
|
|
918
|
+
/**
|
|
919
|
+
* FadeTransform - 淡入淡出变换(一个淡出同时另一个淡入)
|
|
920
|
+
*/
|
|
921
|
+
declare function FadeTransform(source: Diagram, target: Diagram, options?: FadeOptions): Animation;
|
|
922
|
+
|
|
923
|
+
/**
|
|
924
|
+
* 变换动画 - Transform, ReplacementTransform, Morphing
|
|
925
|
+
*/
|
|
926
|
+
|
|
927
|
+
/**
|
|
928
|
+
* Transform - 形变动画(保留原对象)
|
|
929
|
+
*
|
|
930
|
+
* 将源图形变换为目标图形的形状
|
|
931
|
+
*/
|
|
932
|
+
declare function Transform(source: Diagram, target: Diagram, options?: TransformOptions): Animation;
|
|
933
|
+
/**
|
|
934
|
+
* ReplacementTransform - 替换变形
|
|
935
|
+
*
|
|
936
|
+
* 与 Transform 类似,但直接替换元素
|
|
937
|
+
*/
|
|
938
|
+
declare function ReplacementTransform(source: Diagram, target: Diagram, options?: TransformOptions): Animation;
|
|
939
|
+
/**
|
|
940
|
+
* MoveToTarget - 移动到目标状态
|
|
941
|
+
*
|
|
942
|
+
* 将图形移动到其目标副本的位置
|
|
943
|
+
*/
|
|
944
|
+
declare function MoveToTarget(target: Diagram, options?: TransformOptions): Animation;
|
|
945
|
+
/**
|
|
946
|
+
* Morphing - 路径变形动画
|
|
947
|
+
*
|
|
948
|
+
* 平滑地将一个路径变形为另一个路径
|
|
949
|
+
*/
|
|
950
|
+
declare function Morphing(source: Diagram, target: Diagram, options?: TransformOptions): Animation;
|
|
951
|
+
/**
|
|
952
|
+
* TransformMatchingShapes - 匹配形状变换
|
|
953
|
+
*
|
|
954
|
+
* 智能匹配源和目标中的相似形状进行变换
|
|
955
|
+
*/
|
|
956
|
+
declare function TransformMatchingShapes(source: Diagram, target: Diagram, options?: TransformOptions): Animation;
|
|
957
|
+
|
|
958
|
+
/**
|
|
959
|
+
* 移动动画 - Shift, MoveTo, MoveAlongPath
|
|
960
|
+
*/
|
|
961
|
+
|
|
962
|
+
/**
|
|
963
|
+
* Shift - 平移动画
|
|
964
|
+
*/
|
|
965
|
+
declare function Shift(target: Diagram, offset: Vector2, options?: AnimationConfig): Animation;
|
|
966
|
+
/**
|
|
967
|
+
* MoveTo - 移动到指定位置
|
|
968
|
+
*/
|
|
969
|
+
declare function MoveTo(target: Diagram, position: Vector2, options?: AnimationConfig): Animation;
|
|
970
|
+
/**
|
|
971
|
+
* MoveAlongPath - 沿路径移动
|
|
972
|
+
*/
|
|
973
|
+
declare function MoveAlongPath(target: Diagram, path: Diagram | string, options?: MoveOptions): Animation;
|
|
974
|
+
/**
|
|
975
|
+
* Rotate - 旋转动画
|
|
976
|
+
*/
|
|
977
|
+
declare function Rotate(target: Diagram, angle: number, options?: AnimationConfig & {
|
|
978
|
+
aboutPoint?: Vector2;
|
|
979
|
+
}): Animation;
|
|
980
|
+
/**
|
|
981
|
+
* Rotating - 持续旋转
|
|
982
|
+
*/
|
|
983
|
+
declare function Rotating(target: Diagram, options?: AnimationConfig & {
|
|
984
|
+
angularVelocity?: number;
|
|
985
|
+
aboutPoint?: Vector2;
|
|
986
|
+
}): Animation;
|
|
987
|
+
/**
|
|
988
|
+
* Scale - 缩放动画
|
|
989
|
+
*/
|
|
990
|
+
declare function Scale(target: Diagram, factor: number | [number, number], options?: AnimationConfig & {
|
|
991
|
+
aboutPoint?: Vector2;
|
|
992
|
+
}): Animation;
|
|
993
|
+
/**
|
|
994
|
+
* ScaleInPlace - 原地缩放
|
|
995
|
+
*/
|
|
996
|
+
declare function ScaleInPlace(target: Diagram, factor: number, options?: AnimationConfig): Animation;
|
|
997
|
+
|
|
998
|
+
/**
|
|
999
|
+
* 指示动画 - Indicate, Circumscribe, Wiggle, Flash
|
|
1000
|
+
*/
|
|
1001
|
+
|
|
1002
|
+
/**
|
|
1003
|
+
* Indicate - 闪烁高亮动画
|
|
1004
|
+
*
|
|
1005
|
+
* 让图形闪烁变色以吸引注意力
|
|
1006
|
+
*/
|
|
1007
|
+
declare function Indicate(target: Diagram, options?: IndicateOptions): Animation;
|
|
1008
|
+
/**
|
|
1009
|
+
* Circumscribe - 圈出强调动画
|
|
1010
|
+
*
|
|
1011
|
+
* 在图形周围画一个圈或框来强调
|
|
1012
|
+
*/
|
|
1013
|
+
declare function Circumscribe(target: Diagram, options?: CircumscribeOptions): Animation;
|
|
1014
|
+
/**
|
|
1015
|
+
* Wiggle - 抖动动画
|
|
1016
|
+
*/
|
|
1017
|
+
declare function Wiggle(target: Diagram, options?: WiggleOptions): Animation;
|
|
1018
|
+
/**
|
|
1019
|
+
* Flash - 闪光动画
|
|
1020
|
+
*
|
|
1021
|
+
* 在图形位置产生放射状闪光效果
|
|
1022
|
+
*/
|
|
1023
|
+
declare function Flash(target: Diagram, options?: FlashOptions): Animation;
|
|
1024
|
+
/**
|
|
1025
|
+
* ShowPassingFlash - 流光效果
|
|
1026
|
+
*
|
|
1027
|
+
* 沿路径移动的高亮效果
|
|
1028
|
+
*/
|
|
1029
|
+
declare function ShowPassingFlash(target: Diagram, options?: IndicateOptions): Animation;
|
|
1030
|
+
/**
|
|
1031
|
+
* Blink - 闪烁动画
|
|
1032
|
+
*/
|
|
1033
|
+
declare function Blink(target: Diagram, options?: IndicateOptions & {
|
|
1034
|
+
times?: number;
|
|
1035
|
+
}): Animation;
|
|
1036
|
+
|
|
1037
|
+
/**
|
|
1038
|
+
* 组合动画 - AnimationGroup, Succession, LaggedStart
|
|
1039
|
+
*/
|
|
1040
|
+
|
|
1041
|
+
/**
|
|
1042
|
+
* AnimationGroup - 同时播放多个动画
|
|
1043
|
+
*/
|
|
1044
|
+
declare function AnimationGroup(animations: Animation[], options?: AnimationGroupOptions): Animation;
|
|
1045
|
+
/**
|
|
1046
|
+
* Succession - 依次播放动画
|
|
1047
|
+
*/
|
|
1048
|
+
declare function Succession(animations: Animation[], options?: AnimationConfig): Animation;
|
|
1049
|
+
/**
|
|
1050
|
+
* LaggedStart - 错开播放动画
|
|
1051
|
+
*
|
|
1052
|
+
* 类似于 AnimationGroup,但使用固定的延迟比例
|
|
1053
|
+
*/
|
|
1054
|
+
declare function LaggedStart(animations: Animation[], options?: AnimationGroupOptions): Animation;
|
|
1055
|
+
/**
|
|
1056
|
+
* LaggedStartMap - 对多个目标应用相同动画
|
|
1057
|
+
*
|
|
1058
|
+
* @param animationFn - 动画工厂函数
|
|
1059
|
+
* @param targets - 目标图形数组
|
|
1060
|
+
* @param options - 选项
|
|
1061
|
+
*/
|
|
1062
|
+
declare function LaggedStartMap<T extends Animation>(animationFn: (target: Diagram, options?: AnimationConfig) => T, targets: Diagram[], options?: AnimationGroupOptions & {
|
|
1063
|
+
animationOptions?: AnimationConfig;
|
|
1064
|
+
}): Animation;
|
|
1065
|
+
/**
|
|
1066
|
+
* Wait - 等待动画(占位符)
|
|
1067
|
+
*/
|
|
1068
|
+
declare function Wait(duration?: number): Animation;
|
|
1069
|
+
/**
|
|
1070
|
+
* ApplyMethod - 应用方法动画
|
|
1071
|
+
*
|
|
1072
|
+
* 对 Diagram 应用一个方法并动画化变化
|
|
1073
|
+
*/
|
|
1074
|
+
declare function ApplyMethod(target: Diagram, method: (d: Diagram) => Diagram, options?: AnimationConfig): Animation;
|
|
1075
|
+
/**
|
|
1076
|
+
* UpdateFromFunc - 基于函数更新
|
|
1077
|
+
*
|
|
1078
|
+
* 每帧调用函数来更新图形状态
|
|
1079
|
+
*/
|
|
1080
|
+
declare function UpdateFromFunc(target: Diagram, updateFn: (diagram: Diagram, t: number) => void, options?: AnimationConfig): Animation;
|
|
1081
|
+
/**
|
|
1082
|
+
* UpdateFromAlphaFunc - 基于 Alpha 值更新
|
|
1083
|
+
*
|
|
1084
|
+
* 类似于 UpdateFromFunc,但专门用于透明度动画
|
|
1085
|
+
*/
|
|
1086
|
+
declare function UpdateFromAlphaFunc(target: Diagram, updateFn: (diagram: Diagram, alpha: number) => void, options?: AnimationConfig): Animation;
|
|
1087
|
+
/**
|
|
1088
|
+
* Homotopy - 同伦动画
|
|
1089
|
+
*
|
|
1090
|
+
* 对路径进行平滑变换
|
|
1091
|
+
*/
|
|
1092
|
+
declare function Homotopy(target: Diagram, homotopyFn: (x: number, y: number, t: number) => [number, number], options?: AnimationConfig): Animation;
|
|
1093
|
+
|
|
1094
|
+
/**
|
|
1095
|
+
* @locusing/geometry - 坐标系
|
|
1096
|
+
*
|
|
1097
|
+
* 实现 Axes、NumberLine、NumberPlane 等
|
|
1098
|
+
*/
|
|
1099
|
+
|
|
1100
|
+
interface AxesConfig {
|
|
1101
|
+
xRange?: [number, number, number?];
|
|
1102
|
+
yRange?: [number, number, number?];
|
|
1103
|
+
xLength?: number;
|
|
1104
|
+
yLength?: number;
|
|
1105
|
+
origin?: Vector2;
|
|
1106
|
+
showTicks?: boolean;
|
|
1107
|
+
showLabels?: boolean;
|
|
1108
|
+
showGrid?: boolean;
|
|
1109
|
+
axisColor?: string;
|
|
1110
|
+
gridColor?: string;
|
|
1111
|
+
labelSize?: number;
|
|
1112
|
+
}
|
|
1113
|
+
/**
|
|
1114
|
+
* Axes - 二维坐标系
|
|
1115
|
+
*/
|
|
1116
|
+
declare class Axes {
|
|
1117
|
+
private config;
|
|
1118
|
+
private diagram;
|
|
1119
|
+
constructor(config?: AxesConfig);
|
|
1120
|
+
/** 构建坐标系图形 */
|
|
1121
|
+
private build;
|
|
1122
|
+
/** 坐标转像素 */
|
|
1123
|
+
c2p(x: number, y: number): Vector2;
|
|
1124
|
+
c2p(point: Vector2): Vector2;
|
|
1125
|
+
/** 像素转坐标 */
|
|
1126
|
+
p2c(px: number, py: number): Vector2;
|
|
1127
|
+
p2c(point: Vector2): Vector2;
|
|
1128
|
+
/** 绑制函数图像 */
|
|
1129
|
+
plot(fn: (x: number) => number, options?: {
|
|
1130
|
+
xRange?: [number, number];
|
|
1131
|
+
color?: string;
|
|
1132
|
+
strokeWidth?: number;
|
|
1133
|
+
samples?: number;
|
|
1134
|
+
}): Diagram;
|
|
1135
|
+
/** 绘制参数曲线 */
|
|
1136
|
+
plotParametric(fn: (t: number) => Vector2, options?: {
|
|
1137
|
+
tRange?: [number, number];
|
|
1138
|
+
color?: string;
|
|
1139
|
+
strokeWidth?: number;
|
|
1140
|
+
samples?: number;
|
|
1141
|
+
}): Diagram;
|
|
1142
|
+
/** 获取函数图像下方区域 */
|
|
1143
|
+
getArea(graph: Diagram, options?: {
|
|
1144
|
+
xRange?: [number, number];
|
|
1145
|
+
color?: string;
|
|
1146
|
+
opacity?: number;
|
|
1147
|
+
}): Diagram;
|
|
1148
|
+
/** 获取图形标签 */
|
|
1149
|
+
getGraphLabel(graph: Diagram, label: string, options?: {
|
|
1150
|
+
position?: 'end' | 'start' | 'center';
|
|
1151
|
+
direction?: Vector2;
|
|
1152
|
+
fontSize?: number;
|
|
1153
|
+
}): Diagram;
|
|
1154
|
+
/** 获取 Diagram */
|
|
1155
|
+
toDiagram(): Diagram;
|
|
1156
|
+
}
|
|
1157
|
+
/**
|
|
1158
|
+
* NumberLine - 数轴
|
|
1159
|
+
*/
|
|
1160
|
+
declare class NumberLine {
|
|
1161
|
+
private config;
|
|
1162
|
+
private diagram;
|
|
1163
|
+
constructor(config?: {
|
|
1164
|
+
range?: [number, number, number?];
|
|
1165
|
+
length?: number;
|
|
1166
|
+
origin?: Vector2;
|
|
1167
|
+
showTicks?: boolean;
|
|
1168
|
+
showLabels?: boolean;
|
|
1169
|
+
color?: string;
|
|
1170
|
+
});
|
|
1171
|
+
private build;
|
|
1172
|
+
n2p(n: number): Vector2;
|
|
1173
|
+
p2n(p: Vector2): number;
|
|
1174
|
+
toDiagram(): Diagram;
|
|
1175
|
+
}
|
|
1176
|
+
/**
|
|
1177
|
+
* NumberPlane - 数平面(带网格的坐标系)
|
|
1178
|
+
*/
|
|
1179
|
+
declare function NumberPlane(config?: AxesConfig): Axes;
|
|
1180
|
+
/**
|
|
1181
|
+
* 创建极坐标系
|
|
1182
|
+
*/
|
|
1183
|
+
declare function PolarAxes(config?: {
|
|
1184
|
+
maxRadius?: number;
|
|
1185
|
+
origin?: Vector2;
|
|
1186
|
+
divisions?: number;
|
|
1187
|
+
color?: string;
|
|
1188
|
+
}): Diagram;
|
|
1189
|
+
|
|
1190
|
+
/**
|
|
1191
|
+
* @locusing/geometry - 几何构造
|
|
1192
|
+
*
|
|
1193
|
+
* 尺规作图、几何变换等
|
|
1194
|
+
*/
|
|
1195
|
+
|
|
1196
|
+
/**
|
|
1197
|
+
* 线段垂直平分线
|
|
1198
|
+
*/
|
|
1199
|
+
declare function perpendicularBisector(a: Vector2, b: Vector2, length?: number): Diagram;
|
|
1200
|
+
/**
|
|
1201
|
+
* 过点作垂线
|
|
1202
|
+
*/
|
|
1203
|
+
declare function perpendicularLine(point: Vector2, lineStart: Vector2, lineEnd: Vector2, length?: number): Diagram;
|
|
1204
|
+
/**
|
|
1205
|
+
* 点到直线的垂足
|
|
1206
|
+
*/
|
|
1207
|
+
declare function footOfPerpendicular(point: Vector2, lineStart: Vector2, lineEnd: Vector2): Vector2;
|
|
1208
|
+
/**
|
|
1209
|
+
* 过一点作平行线
|
|
1210
|
+
*/
|
|
1211
|
+
declare function parallelLine(point: Vector2, lineStart: Vector2, lineEnd: Vector2, length?: number): Diagram;
|
|
1212
|
+
/**
|
|
1213
|
+
* 角度标记
|
|
1214
|
+
*/
|
|
1215
|
+
declare function angleMarker(vertex: Vector2, a: Vector2, b: Vector2, options?: {
|
|
1216
|
+
radius?: number;
|
|
1217
|
+
color?: string;
|
|
1218
|
+
label?: string;
|
|
1219
|
+
}): Diagram;
|
|
1220
|
+
/**
|
|
1221
|
+
* 直角标记
|
|
1222
|
+
*/
|
|
1223
|
+
declare function rightAngleMarker(vertex: Vector2, a: Vector2, b: Vector2, size?: number): Diagram;
|
|
1224
|
+
/**
|
|
1225
|
+
* 过三点的圆
|
|
1226
|
+
*/
|
|
1227
|
+
declare function circumscribedCircle(a: Vector2, b: Vector2, c: Vector2): {
|
|
1228
|
+
center: Vector2;
|
|
1229
|
+
radius: number;
|
|
1230
|
+
diagram: Diagram;
|
|
1231
|
+
};
|
|
1232
|
+
/**
|
|
1233
|
+
* 内切圆
|
|
1234
|
+
*/
|
|
1235
|
+
declare function inscribedCircle(a: Vector2, b: Vector2, c: Vector2): {
|
|
1236
|
+
center: Vector2;
|
|
1237
|
+
radius: number;
|
|
1238
|
+
diagram: Diagram;
|
|
1239
|
+
};
|
|
1240
|
+
/**
|
|
1241
|
+
* 两圆的交点
|
|
1242
|
+
*/
|
|
1243
|
+
declare function circleIntersections(c1: Vector2, r1: number, c2: Vector2, r2: number): Vector2[];
|
|
1244
|
+
/**
|
|
1245
|
+
* 重心
|
|
1246
|
+
*/
|
|
1247
|
+
declare function centroid(a: Vector2, b: Vector2, c: Vector2): Vector2;
|
|
1248
|
+
/**
|
|
1249
|
+
* 垂心
|
|
1250
|
+
*/
|
|
1251
|
+
declare function orthocenter(a: Vector2, b: Vector2, c: Vector2): Vector2;
|
|
1252
|
+
/**
|
|
1253
|
+
* 中线
|
|
1254
|
+
*/
|
|
1255
|
+
declare function median(vertex: Vector2, opposite1: Vector2, opposite2: Vector2): Diagram;
|
|
1256
|
+
/**
|
|
1257
|
+
* 角平分线
|
|
1258
|
+
*/
|
|
1259
|
+
declare function angleBisector(vertex: Vector2, a: Vector2, b: Vector2, length?: number): Diagram;
|
|
1260
|
+
/**
|
|
1261
|
+
* 高
|
|
1262
|
+
*/
|
|
1263
|
+
declare function altitude(vertex: Vector2, opposite1: Vector2, opposite2: Vector2): Diagram;
|
|
1264
|
+
/**
|
|
1265
|
+
* 点关于点的对称
|
|
1266
|
+
*/
|
|
1267
|
+
declare function reflectPoint(point: Vector2, center: Vector2): Vector2;
|
|
1268
|
+
/**
|
|
1269
|
+
* 点关于直线的对称
|
|
1270
|
+
*/
|
|
1271
|
+
declare function reflectPointOverLine(point: Vector2, lineStart: Vector2, lineEnd: Vector2): Vector2;
|
|
1272
|
+
/**
|
|
1273
|
+
* 图形关于点对称
|
|
1274
|
+
*/
|
|
1275
|
+
declare function reflectOverPoint(diagram: Diagram, center: Vector2): Diagram;
|
|
1276
|
+
/**
|
|
1277
|
+
* 两直线交点
|
|
1278
|
+
*/
|
|
1279
|
+
declare function lineIntersection(l1Start: Vector2, l1End: Vector2, l2Start: Vector2, l2End: Vector2): Vector2 | null;
|
|
1280
|
+
|
|
1281
|
+
/**
|
|
1282
|
+
* @locusing/interactive - Interactive 控制器
|
|
1283
|
+
*
|
|
1284
|
+
* Diagramatics 风格的交互系统
|
|
1285
|
+
*/
|
|
1286
|
+
|
|
1287
|
+
interface InteractiveOptions {
|
|
1288
|
+
width?: number;
|
|
1289
|
+
height?: number;
|
|
1290
|
+
background?: string;
|
|
1291
|
+
/** 控件面板位置 */
|
|
1292
|
+
controlsPosition?: 'top' | 'bottom' | 'left' | 'right';
|
|
1293
|
+
/** 控件面板样式 */
|
|
1294
|
+
controlsStyle?: Partial<CSSStyleDeclaration>;
|
|
1295
|
+
/** 是否使用手绘风格 */
|
|
1296
|
+
rough?: boolean;
|
|
1297
|
+
}
|
|
1298
|
+
interface SliderConfig {
|
|
1299
|
+
min: number;
|
|
1300
|
+
max: number;
|
|
1301
|
+
value?: number;
|
|
1302
|
+
step?: number;
|
|
1303
|
+
label?: string;
|
|
1304
|
+
showPlayButton?: boolean;
|
|
1305
|
+
playDuration?: number;
|
|
1306
|
+
loop?: boolean;
|
|
1307
|
+
}
|
|
1308
|
+
interface LocatorConfig {
|
|
1309
|
+
x: number;
|
|
1310
|
+
y: number;
|
|
1311
|
+
radius?: number;
|
|
1312
|
+
color?: string;
|
|
1313
|
+
constraint?: (p: Vector2) => Vector2;
|
|
1314
|
+
}
|
|
1315
|
+
interface ButtonConfig {
|
|
1316
|
+
label: string;
|
|
1317
|
+
onClick: () => void;
|
|
1318
|
+
}
|
|
1319
|
+
type ControlValue = number | Vector2 | boolean;
|
|
1320
|
+
type ControlValues = Record<string, ControlValue>;
|
|
1321
|
+
/**
|
|
1322
|
+
* Interactive 类 - 交互控制器
|
|
1323
|
+
*
|
|
1324
|
+
* 使用方式:
|
|
1325
|
+
* ```typescript
|
|
1326
|
+
* const int = new Interactive(container);
|
|
1327
|
+
* int.slider('angle', { min: 0, max: 360, value: 0 });
|
|
1328
|
+
* int.locator('point', { x: 100, y: 100 });
|
|
1329
|
+
* int.draw((v) => {
|
|
1330
|
+
* return square(100).rotate(v.angle).position(v.point);
|
|
1331
|
+
* });
|
|
1332
|
+
* ```
|
|
1333
|
+
*/
|
|
1334
|
+
declare class Interactive {
|
|
1335
|
+
private container;
|
|
1336
|
+
private svgContainer;
|
|
1337
|
+
private controlsContainer;
|
|
1338
|
+
private svg;
|
|
1339
|
+
private options;
|
|
1340
|
+
private values;
|
|
1341
|
+
private controls;
|
|
1342
|
+
private locators;
|
|
1343
|
+
private drawFn;
|
|
1344
|
+
private animationId;
|
|
1345
|
+
private playingSliders;
|
|
1346
|
+
constructor(container: HTMLElement, options?: InteractiveOptions);
|
|
1347
|
+
/** 设置布局 */
|
|
1348
|
+
private setupLayout;
|
|
1349
|
+
/** 创建 SVG */
|
|
1350
|
+
private createSVG;
|
|
1351
|
+
/** 添加滑块控件 */
|
|
1352
|
+
slider(name: string, config: SliderConfig): this;
|
|
1353
|
+
/** 添加可拖拽点 */
|
|
1354
|
+
locator(name: string, config: LocatorConfig): this;
|
|
1355
|
+
/** 添加按钮 */
|
|
1356
|
+
button(config: ButtonConfig): this;
|
|
1357
|
+
/** 添加复选框 */
|
|
1358
|
+
checkbox(name: string, config?: {
|
|
1359
|
+
label?: string;
|
|
1360
|
+
value?: boolean;
|
|
1361
|
+
}): this;
|
|
1362
|
+
/** 设置绘制函数 */
|
|
1363
|
+
draw(fn: (values: ControlValues) => Diagram): this;
|
|
1364
|
+
/** 重新绘制 */
|
|
1365
|
+
private redraw;
|
|
1366
|
+
/** 启动动画循环 */
|
|
1367
|
+
private startAnimationLoop;
|
|
1368
|
+
/** 获取当前值 */
|
|
1369
|
+
getValue<T extends ControlValue>(name: string): T;
|
|
1370
|
+
/** 设置值 */
|
|
1371
|
+
setValue(name: string, value: ControlValue): this;
|
|
1372
|
+
/** 销毁 */
|
|
1373
|
+
destroy(): void;
|
|
1374
|
+
}
|
|
1375
|
+
/**
|
|
1376
|
+
* 创建交互实例
|
|
1377
|
+
*/
|
|
1378
|
+
declare function createInteractive(container: HTMLElement, options?: InteractiveOptions): Interactive;
|
|
1379
|
+
|
|
1380
|
+
/**
|
|
1381
|
+
* @locusing/interactive
|
|
1382
|
+
*
|
|
1383
|
+
* 交互系统 - Diagramatics 风格的交互控件
|
|
1384
|
+
*/
|
|
1385
|
+
|
|
1386
|
+
/**
|
|
1387
|
+
* 圆形约束 - 将点约束到圆周上
|
|
1388
|
+
*/
|
|
1389
|
+
declare function circleConstraint(cx: number, cy: number, radius: number): (p: Vector2) => Vector2;
|
|
1390
|
+
/**
|
|
1391
|
+
* 线段约束 - 将点约束到线段上
|
|
1392
|
+
*/
|
|
1393
|
+
declare function lineConstraint(x1: number, y1: number, x2: number, y2: number): (p: Vector2) => Vector2;
|
|
1394
|
+
/**
|
|
1395
|
+
* 矩形约束 - 将点约束到矩形内
|
|
1396
|
+
*/
|
|
1397
|
+
declare function rectConstraint(x: number, y: number, width: number, height: number): (p: Vector2) => Vector2;
|
|
1398
|
+
/**
|
|
1399
|
+
* 网格约束 - 将点吸附到网格
|
|
1400
|
+
*/
|
|
1401
|
+
declare function gridConstraint(gridSize: number, offsetX?: number, offsetY?: number): (p: Vector2) => Vector2;
|
|
1402
|
+
/**
|
|
1403
|
+
* 极坐标约束 - 将点约束到极坐标系
|
|
1404
|
+
*/
|
|
1405
|
+
declare function polarConstraint(cx: number, cy: number, minRadius: number, maxRadius: number): (p: Vector2) => Vector2;
|
|
1406
|
+
/**
|
|
1407
|
+
* 函数曲线约束 - 将点约束到函数曲线上
|
|
1408
|
+
*/
|
|
1409
|
+
declare function functionConstraint(fn: (x: number) => number, minX: number, maxX: number): (p: Vector2) => Vector2;
|
|
1410
|
+
|
|
1411
|
+
export { type Animation, type AnimationConfig, AnimationGroup, type AnimationGroupOptions, type AnimationOptions, type AnimationStatus, ApplyMethod, type ArcShape, Axes, type AxesConfig, type BaseShape, Blink, type ButtonConfig, type CircleShape, Circumscribe, type CircumscribeOptions, Create, type CreateOptions, DEGREES, DL, DOWN, DR, Diagram, DrawBorderThenFill, type EasingFunction, type EllipseShape, FadeIn, FadeInFrom, FadeInFromDown, FadeInFromLeft, FadeInFromRight, FadeInFromUp, type FadeOptions, FadeOut, FadeOutTo, FadeTransform, Flash, type FlashOptions, type GroupShape, GrowFromCenter, GrowFromEdge, GrowFromPoint, Homotopy, IDENTITY, Indicate, type IndicateOptions, Interactive, type InteractiveOptions, LEFT, LaggedStart, LaggedStartMap, type LineShape, type LocatorConfig, type LocatorOptions, type Matrix3, Morphing, MoveAlongPath, type MoveOptions, MoveTo, MoveToTarget, NumberLine, NumberPlane, ORIGIN, PI, type PathCommand, type PathShape, type Point, PolarAxes, type PolygonShape, type PolylineShape, RIGHT, type RectShape, type RenderOptions, ReplacementTransform, Rotate, type RotateOptions, Rotating, type RoughRenderOptions, Scale, ScaleInPlace, type ScaleOptions, Scene, type SceneConfig, type Shape, type ShapeType, Shift, ShowPassingFlash, type SliderConfig, type SliderOptions, SpinInFromNothing, type Style, Succession, TAU, type TextShape, type TextStyle, Timeline, type TimelineOptions, Transform, TransformMatchingShapes, type TransformOptions, UL, UP, UR, UpdateFromAlphaFunc, UpdateFromFunc, V2, V3, ValueTracker, type Vector2, type Vector3, Wait, Wiggle, type WiggleOptions, Write, add, altitude, angle, angleBetween, angleBisector, angleMarker, applyMatrix, arc, arrow, centroid, circle, circleConstraint, circleIntersections, circumscribedCircle, clamp, combine, createInteractive, createScene, createTimeline, cross, cubicBezier, degToRad, distance, div, dot, doubleArrow, easing, easingMap, ellipse, equilateralTriangle, footOfPerpendicular, functionConstraint, getGSAPEasing, gridConstraint, group, inscribedCircle, length, lerp, lerpNumber, line, lineConstraint, lineIntersection, mapRange, matrixMultiply, median, midpoint, mul, normalize, orthocenter, parallelLine, path, pathFromString, perpendicular, perpendicularBisector, perpendicularLine, polarConstraint, polygon, polyline, quadraticBezier, radToDeg, rect, rectConstraint, reflect, reflectOverPoint, reflectPoint, reflectPointOverLine, regularPolygon, renderToRough, renderToSVG, rightAngleMarker, rotate, rotationMatrix, roughPresets, sampleParametric, scaleMatrix, sector, square, star, sub, tex, text, toSVGString, translationMatrix, triangle, dot$1 as vectorDot };
|