@pacem/pacem-2d 1.0.0-abel

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,613 @@
1
+ import { Components as Components_2 } from '@pacem/pacem-core';
2
+ import { CustomUIEvent } from '@pacem/pacem-core';
3
+ import { EventKeyModifier } from '@pacem/pacem-core';
4
+ import { Matrix2D } from '@pacem/pacem-foundation';
5
+ import { PacemEventTarget } from '@pacem/pacem-core';
6
+ import { Point } from '@pacem/pacem-foundation';
7
+ import { Rect } from '@pacem/pacem-foundation';
8
+ import { Size } from '@pacem/pacem-foundation';
9
+ import { UI } from '@pacem/pacem-core';
10
+
11
+ declare class AdapterUtils {
12
+ static stageDispatch(stage: Stage, type: 'down' | 'up' | 'click' | 'over' | 'out' | 'move', evt: MouseEvent | TouchEvent): void;
13
+ static isValidViewbox(viewbox: any): viewbox is Rect;
14
+ /**
15
+ * Dispatches a UI event related to a `Drawable` and returns a boolean that tells if the event was prevented (true) or not (false).
16
+ * @param target The `Drawable` instance.
17
+ * @param type Short event type name.
18
+ * @param evt The original event.
19
+ */
20
+ static itemDispatch(target: Drawable, type: 'down' | 'up' | 'click' | 'over' | 'out', evt: MouseEvent | TouchEvent): boolean;
21
+ /**
22
+ * Dispatches a drag event related to a `Drawable` and returns a boolean that tells if the event was prevented (true) or not (false).
23
+ * @param target The `Drawable` instance.
24
+ * @param evt The `DragDropEvent` instance.
25
+ * @param offset The tracked offset.
26
+ */
27
+ static itemDispatch(target: Drawable, evt: UI.DragDropEvent, offset: Point): boolean;
28
+ }
29
+
30
+ export declare namespace Components {
31
+ export {
32
+ Drawing_2 as Drawing
33
+ }
34
+ }
35
+
36
+ declare type CornerRadius = {
37
+ rx: CornerRadiusComponent;
38
+ ry: CornerRadiusComponent;
39
+ type: CornerType;
40
+ };
41
+
42
+ declare type CornerRadiusComponent = {
43
+ value: number;
44
+ unit?: 'pct' | 'u';
45
+ };
46
+
47
+ declare enum CornerType {
48
+ Rounded = "rounded",
49
+ Cut = "cut"
50
+ }
51
+
52
+ declare class DragEvent_2 extends UI2DEvent<DragEventArgs> {
53
+ }
54
+
55
+ declare interface DragEventArgs {
56
+ readonly offset: Point;
57
+ readonly item: Drawable;
58
+ }
59
+
60
+ declare interface Drawable {
61
+ stage?: Stage;
62
+ /** Gets or sets whether the drawable is hit-testable. */
63
+ inert?: boolean;
64
+ hide?: boolean;
65
+ /** @deprecated will be likely removed sooner or later to be handled outside the stage/adapter. */
66
+ draggable?: boolean;
67
+ tag?: any;
68
+ }
69
+
70
+ declare abstract class DrawableElement extends Components_2.PacemCrossItemsContainerElement<DrawableElement> implements Drawable {
71
+ validate(_: DrawableElement): boolean;
72
+ protected findContainer(): DrawableElement | Pacem2DElement;
73
+ get stage(): Pacem2DElement;
74
+ get parent(): DrawableElement;
75
+ tag: any;
76
+ inert: boolean;
77
+ disconnectedCallback(): void;
78
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
79
+ }
80
+
81
+ declare class DrawableEvent extends UI2DEvent<Drawable> {
82
+ constructor(type: string, args: Drawable, originalEvent: MouseEvent | TouchEvent | KeyboardEvent, m: Matrix2D);
83
+ }
84
+
85
+ export declare namespace Drawing {
86
+ export {
87
+ isDrawable,
88
+ isUiObject,
89
+ isLinearGradient,
90
+ isRadialGradient,
91
+ isPresentationObject,
92
+ isShape,
93
+ isGroup,
94
+ isText,
95
+ isImage,
96
+ ViewBoxAlignment,
97
+ ViewBoxAspectRatio,
98
+ Stage,
99
+ Drawable,
100
+ UiObject,
101
+ GradientStop,
102
+ Gradient,
103
+ LinearGradient,
104
+ RadialGradient,
105
+ PresentationState,
106
+ PresentationObject,
107
+ Marker,
108
+ ShapeGeometry,
109
+ Shape,
110
+ Group,
111
+ Text_2 as Text,
112
+ Image_2 as Image,
113
+ DragEventArgs,
114
+ UI2DEvent,
115
+ DragEvent_2 as DragEvent,
116
+ DrawableEvent,
117
+ StageEvent
118
+ }
119
+ }
120
+
121
+ export declare namespace Drawing_2 {
122
+ export {
123
+ DrawableElement,
124
+ Stage_2 as Stage,
125
+ StageOptions,
126
+ UiElement,
127
+ PresentationElement,
128
+ ShapeElement,
129
+ PacemGroupElement,
130
+ PacemEllipseElement,
131
+ PacemCircleElement,
132
+ CornerRadiusComponent,
133
+ CornerRadius,
134
+ CornerType,
135
+ PacemRectElement,
136
+ PacemLineElement,
137
+ PacemPathElement,
138
+ PacemPolygonElement,
139
+ PacemPolylineElement,
140
+ PacemImageElement,
141
+ PacemTextElement,
142
+ getStageOptions,
143
+ Pacem2DElement,
144
+ AdapterUtils,
145
+ PacemCanvasAdapterElement,
146
+ PacemSvgAdapterElement
147
+ }
148
+ }
149
+
150
+ declare function getStageOptions(stage: Stage): StageOptions;
151
+
152
+ declare interface Gradient {
153
+ stops: GradientStop[];
154
+ }
155
+
156
+ declare interface GradientStop {
157
+ offset: number;
158
+ color: string;
159
+ opacity?: number;
160
+ }
161
+
162
+ declare interface Group extends UiObject {
163
+ childDrawables: Drawable[];
164
+ }
165
+
166
+ declare interface Image_2 extends UiObject {
167
+ src: string;
168
+ x?: number;
169
+ y?: number;
170
+ width?: number;
171
+ height?: number;
172
+ }
173
+
174
+ declare function isDrawable(object: any): object is Drawable;
175
+
176
+ declare function isGroup(object: any): object is Group;
177
+
178
+ declare function isImage(object: any): object is Image_2;
179
+
180
+ declare function isLinearGradient(object: Gradient): object is LinearGradient;
181
+
182
+ declare function isPresentationObject(object: any): object is PresentationObject;
183
+
184
+ declare function isRadialGradient(object: Gradient): object is RadialGradient;
185
+
186
+ declare function isShape(object: any): object is Shape;
187
+
188
+ declare function isText(object: any): object is Text_2;
189
+
190
+ declare function isUiObject(object: any): object is UiObject;
191
+
192
+ declare interface LinearGradient extends Gradient {
193
+ start: Point;
194
+ end: Point;
195
+ }
196
+
197
+ declare type Marker = {
198
+ pathData: string;
199
+ stroke?: string;
200
+ fill?: string;
201
+ viewbox?: Rect;
202
+ ref?: Point;
203
+ width?: number;
204
+ height?: number;
205
+ };
206
+
207
+ declare abstract class Pacem2DAdapterElement extends PacemEventTarget {
208
+ protected DefaultShapeValues: {
209
+ stroke: string;
210
+ lineWidth: number;
211
+ fill: string;
212
+ };
213
+ /**
214
+ * Returns the transform matrix that projects page coords into stage coords.
215
+ * @param scene {Pacem2DElement} Container for the stage/scene
216
+ */
217
+ abstract getTransformMatrix(scene: Pacem2DElement): Matrix2D;
218
+ /**
219
+ * Updates the stage with the new size.
220
+ * @param scene {Pacem2DElement} Container for the stage/scene
221
+ * @param size {Size} New size
222
+ */
223
+ abstract invalidateSize(scene: Pacem2DElement, size: Size): any;
224
+ /**
225
+ * Initializes the 2d scene and returns its corresponding DOM element.
226
+ * @param scene {Pacem2DElement} Container for the stage/scene
227
+ */
228
+ abstract initialize(scene: Pacem2DElement): HTMLElement | SVGElement;
229
+ /**
230
+ * Disposes the 2d scene resources.
231
+ * @param scene {Pacem2DElement} Container for the stage/scene
232
+ */
233
+ abstract dispose(scene: Pacem2DElement): void;
234
+ /**
235
+ * Returns the foremost drawable element under the pointer.
236
+ * @param scene {Pacem2DElement} Container for the stage/scene
237
+ */
238
+ abstract getHitTarget(scene: Pacem2DElement): Drawable;
239
+ /**
240
+ * Draws the elements of provided the scene.
241
+ * @param scene {Pacem2DElement} Container for the stage/scene
242
+ * @param item {Drawable} If provided, tries to limit the drawing execution to the drawable itself
243
+ * @param forceGroupRedraw {Boolean} In case the item is a group, it forces the redraw of its content
244
+ */
245
+ abstract draw(scene: Pacem2DElement, item?: Drawable, forceGroupRedraw?: boolean): any;
246
+ /**
247
+ * Processes the stage content and returns an image accordingly.
248
+ * */
249
+ abstract snapshot(stage: Pacem2DElement, bgColor?: string, type?: string, quality?: number): PromiseLike<Blob>;
250
+ protected snapshotElement(element: HTMLElement | SVGElement, bgColor?: string, type?: string, quality?: number): PromiseLike<Blob>;
251
+ }
252
+
253
+ declare class Pacem2DElement extends Components_2.PacemItemsContainerElement<DrawableElement> implements Stage_2 {
254
+ #private;
255
+ get stage(): HTMLElement;
256
+ snapshot(bgColor?: string, type?: string, quality?: number): Promise<any> | PromiseLike<Blob>;
257
+ get transformMatrix(): Matrix2D;
258
+ private _transformMatrixScale;
259
+ validate(item: DrawableElement): boolean;
260
+ adapter: Pacem2DAdapterElement;
261
+ viewbox: Rect;
262
+ aspectRatio: ViewBoxAspectRatio;
263
+ datasource: Drawable[];
264
+ options: StageOptions;
265
+ zoom: number;
266
+ private _stage;
267
+ private _resize;
268
+ draw(item?: Drawable): any;
269
+ draw(item: Group, deepRedraw: boolean): any;
270
+ private _drawDebounced;
271
+ /** Debounced draw invocation. */
272
+ requestDraw(item?: Drawable): any;
273
+ requestDraw(item: Group, redrawContent: boolean): any;
274
+ private _buildUpDatasourceFromDOM;
275
+ private _resizeHandler;
276
+ private _getActualAspectRatio;
277
+ private _zoomFromValue;
278
+ private _zoom;
279
+ private _zoomHandler;
280
+ private _getPanPoint;
281
+ private _panHandler;
282
+ private _panStartHandler;
283
+ private _panEndHandler;
284
+ private _invalidateSize;
285
+ viewActivatedCallback(): void;
286
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
287
+ disconnectedCallback(): void;
288
+ }
289
+
290
+ /** Implementation postponed. Focus on SVG adapter. */
291
+ declare class PacemCanvasAdapterElement extends Pacem2DAdapterElement {
292
+ #private;
293
+ snapshot(stage: Pacem2DElement, backgroundColor?: string, type?: string, quality?: number): PromiseLike<Blob>;
294
+ getCanvas(stage: Pacem2DElement): HTMLCanvasElement;
295
+ private _getScreenInverseMatrix;
296
+ getTransformMatrix(scene: Pacem2DElement): Matrix2D;
297
+ viewActivatedCallback(): void;
298
+ disconnectedCallback(): void;
299
+ invalidateSize(scene: Pacem2DElement, size: Size): void;
300
+ getHitTarget(stage: Pacem2DElement): Drawable;
301
+ initialize(scene: Pacem2DElement): HTMLElement | SVGElement;
302
+ dispose(scene: Pacem2DElement): void;
303
+ private _requestDraw;
304
+ draw(scene: Pacem2DElement): void;
305
+ private _hitTarget;
306
+ private _pointer;
307
+ private _scopeEvent;
308
+ private _dragging;
309
+ private _dragInitHandler;
310
+ private _draggingHandler;
311
+ private _dragEndHandler;
312
+ private _mouseleaveHandler;
313
+ private _mousemoveHandler;
314
+ private _mouseDownUpHandler;
315
+ private _draw;
316
+ private _setPresentationState;
317
+ private _drawImage;
318
+ private _drawText;
319
+ private _drawShape;
320
+ private _drawMarker;
321
+ private _scenes;
322
+ private _handles;
323
+ }
324
+
325
+ declare class PacemCircleElement extends ShapeElement {
326
+ center: Point;
327
+ radius: number;
328
+ start: number;
329
+ end: number;
330
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
331
+ protected getPathData(): string;
332
+ protected getShapeGeometry(): ShapeGeometry;
333
+ static getPathData(c?: Point, r?: number, start?: number, end?: number): string;
334
+ }
335
+
336
+ declare class PacemEllipseElement extends ShapeElement {
337
+ center: Point;
338
+ rx: number;
339
+ ry: number;
340
+ start: number;
341
+ end: number;
342
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
343
+ protected getPathData(): string;
344
+ protected getShapeGeometry(): ShapeGeometry;
345
+ static getPathData(c?: Point, rx?: number, ry?: number, start?: number, end?: number): string;
346
+ }
347
+
348
+ declare class PacemGroupElement extends PresentationElement implements Group {
349
+ #private;
350
+ validate(item: DrawableElement): boolean;
351
+ datasource: Drawable[];
352
+ get childDrawables(): Drawable[];
353
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
354
+ }
355
+
356
+ declare class PacemImageElement extends UiElement implements Image_2 {
357
+ src: string;
358
+ x: number;
359
+ y: number;
360
+ width: number;
361
+ height: number;
362
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
363
+ }
364
+
365
+ declare class PacemLineElement extends ShapeElement {
366
+ from: Point;
367
+ to: Point;
368
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
369
+ protected getShapeGeometry(): ShapeGeometry;
370
+ protected getPathData(): string;
371
+ static getPathData(from?: Point, to?: Point): string;
372
+ }
373
+
374
+ declare class PacemPathElement extends ShapeElement {
375
+ d: string;
376
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
377
+ protected getPathData: () => string;
378
+ protected getShapeGeometry(): ShapeGeometry;
379
+ }
380
+
381
+ declare class PacemPolygonElement extends ShapeElement {
382
+ sides: number;
383
+ /** The circumradius of the polygon. */
384
+ radius: number;
385
+ center: Point;
386
+ starIndent: number;
387
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
388
+ protected getPathData(): string;
389
+ protected getShapeGeometry(): ShapeGeometry;
390
+ static getShapeGeometry(center: Point, radius: number, sides: number, starIndent?: number): ShapeGeometry;
391
+ static getPathData(center: Point, radius: number, sides: number, starIndent?: number): string;
392
+ }
393
+
394
+ declare class PacemPolylineElement extends ShapeElement {
395
+ points: Point[];
396
+ closed: boolean;
397
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
398
+ static getShapeGeometry(points: Point[], closed: boolean): ShapeGeometry;
399
+ protected getShapeGeometry(): ShapeGeometry;
400
+ protected getPathData(): string;
401
+ static getPathData(points: Point[], closed: boolean): string;
402
+ }
403
+
404
+ declare class PacemRectElement extends ShapeElement {
405
+ x: number;
406
+ y: number;
407
+ w: number;
408
+ h: number;
409
+ r: [CornerRadius, CornerRadius, CornerRadius, CornerRadius];
410
+ cornerType: CornerType;
411
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
412
+ protected getPathData(): string;
413
+ protected getShapeGeometry(): ShapeGeometry;
414
+ static getPathData(x: number, y: number, w: number, h: number): string;
415
+ static getPathData(x: number, y: number, w: number, h: number, r: CornerRadius): string;
416
+ static getPathData(x: number, y: number, w: number, h: number, r: [CornerRadius, CornerRadius, CornerRadius, CornerRadius]): string;
417
+ }
418
+
419
+ declare class PacemSvgAdapterElement extends Pacem2DAdapterElement {
420
+ #private;
421
+ snapshot(stage: Stage, background?: string, type?: string, quality?: number): PromiseLike<Blob>;
422
+ getTransformMatrix(scene: Pacem2DElement): Matrix2D;
423
+ viewActivatedCallback(): void;
424
+ disconnectedCallback(): void;
425
+ invalidateSize(scene: Pacem2DElement, size: Size): void;
426
+ initialize(scene: Pacem2DElement): HTMLElement | SVGElement;
427
+ dispose(scene: Pacem2DElement): void;
428
+ private _hitTarget;
429
+ getHitTarget(scene: Pacem2DElement): Drawable;
430
+ draw(scene: Pacem2DElement, item?: Drawable): any;
431
+ draw(scene: Pacem2DElement, item: Group, deepRedraw: boolean): any;
432
+ private _dragInitHandler;
433
+ private _draggingHandler;
434
+ private _dragEndHandler;
435
+ private _mouseleaveHandler;
436
+ private _mousemoveHandler;
437
+ private _mouseDownUpHandler;
438
+ private _hasItems;
439
+ private _disposeSvg;
440
+ private _draw;
441
+ private _buildSVGElement;
442
+ private _ensureGradient;
443
+ private _ensureMarker;
444
+ private _scenes;
445
+ private _markers;
446
+ private _gradients;
447
+ private _items;
448
+ }
449
+
450
+ declare class PacemTextElement extends UiElement implements Text_2 {
451
+ text: string;
452
+ color: string;
453
+ fontFamily: string;
454
+ fontSize: number;
455
+ fontWeight: string;
456
+ fontStyle: string;
457
+ anchor: Point;
458
+ textAnchor: 'start' | 'middle' | 'end';
459
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
460
+ }
461
+
462
+ declare abstract class PresentationElement extends UiElement implements PresentationObject {
463
+ stroke: string;
464
+ fill: string | Gradient;
465
+ dashArray?: number[];
466
+ lineWidth: number;
467
+ lineJoin?: CanvasLineJoin;
468
+ lineCap?: CanvasLineCap;
469
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
470
+ }
471
+
472
+ declare interface PresentationObject extends UiObject, PresentationState {
473
+ }
474
+
475
+ declare interface PresentationState {
476
+ stroke?: string;
477
+ lineWidth?: number;
478
+ fill?: string | Gradient;
479
+ dashArray?: number[];
480
+ lineJoin?: CanvasLineJoin;
481
+ lineCap?: CanvasLineCap;
482
+ readonly transformMatrix?: Matrix2D;
483
+ opacity?: number;
484
+ }
485
+
486
+ declare class PresentationState {
487
+ static combine(lhs: PresentationState, rhs: PresentationState, precomputedMatrix?: Matrix2D): PresentationState;
488
+ }
489
+
490
+ declare interface RadialGradient extends Gradient {
491
+ center: Point;
492
+ radius: number;
493
+ }
494
+
495
+ declare interface Shape extends PresentationObject {
496
+ pathData: string;
497
+ markerStart?: Marker;
498
+ markerEnd?: Marker;
499
+ markerMid?: Marker;
500
+ readonly vertices?: Point[];
501
+ readonly boundingRect?: Rect;
502
+ }
503
+
504
+ declare class Shape {
505
+ static empty(): ShapeGeometry;
506
+ }
507
+
508
+ declare abstract class ShapeElement extends PresentationElement implements Shape {
509
+ #private;
510
+ protected data: string;
511
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
512
+ viewActivatedCallback(): void;
513
+ protected recomputeShape(): void;
514
+ get pathData(): string;
515
+ get boundingRect(): Rect;
516
+ get vertices(): Point[];
517
+ protected abstract getShapeGeometry(): ShapeGeometry;
518
+ }
519
+
520
+ declare type ShapeGeometry = {
521
+ pathData: string;
522
+ vertices: Point[];
523
+ boundingRect: Rect;
524
+ };
525
+
526
+ declare interface Stage extends EventTarget {
527
+ draw(item?: Drawable): any;
528
+ viewbox: Rect;
529
+ aspectRatio?: ViewBoxAspectRatio;
530
+ readonly transformMatrix: Matrix2D;
531
+ readonly stage: HTMLElement;
532
+ }
533
+
534
+ declare interface Stage_2 extends Stage {
535
+ readonly adapter: Pacem2DAdapterElement;
536
+ }
537
+
538
+ declare class StageEvent extends UI2DEvent<Stage> {
539
+ constructor(type: string, args: Stage, originalEvent: MouseEvent | TouchEvent | KeyboardEvent, m?: Matrix2D);
540
+ }
541
+
542
+ declare type StageOptions = {
543
+ panControl: boolean;
544
+ zoomControl: boolean;
545
+ panModifiers: EventKeyModifier[];
546
+ zoomModifiers: EventKeyModifier[];
547
+ clickModifiers: EventKeyModifier[];
548
+ };
549
+
550
+ declare interface Text_2 extends UiObject {
551
+ text: string;
552
+ fontFamily?: string;
553
+ fontWeight?: string;
554
+ fontStyle?: string;
555
+ fontSize?: number;
556
+ color?: string;
557
+ anchor?: Point;
558
+ textAnchor?: 'start' | 'middle' | 'end';
559
+ }
560
+
561
+ declare abstract class UI2DEvent<T> extends CustomUIEvent<T> {
562
+ #private;
563
+ constructor(type: string, eventInit: CustomEventInit<T>, originalEvent: MouseEvent | TouchEvent | KeyboardEvent, transformMatrix: Matrix2D);
564
+ /** Gets the screen transform matrix. */
565
+ get transformMatrix(): Matrix2D;
566
+ project(pt?: Point): Point;
567
+ }
568
+
569
+ declare abstract class UiElement extends DrawableElement implements UiObject {
570
+ #private;
571
+ rotate: number;
572
+ scaleX: number;
573
+ scaleY: number;
574
+ translateX: number;
575
+ translateY: number;
576
+ opacity: number;
577
+ viewActivatedCallback(): void;
578
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
579
+ private _updateTransformMatrix;
580
+ /** @internal */
581
+ get transformMatrix(): {
582
+ a: number;
583
+ b: number;
584
+ c: number;
585
+ d: number;
586
+ e: number;
587
+ f: number;
588
+ };
589
+ }
590
+
591
+ declare interface UiObject extends Drawable {
592
+ opacity?: number;
593
+ readonly transformMatrix?: Matrix2D;
594
+ }
595
+
596
+ declare type ViewBoxAlignment = 'min' | 'mid' | 'max';
597
+
598
+ declare type ViewBoxAspectRatio = 'none' | {
599
+ x: ViewBoxAlignment;
600
+ y: ViewBoxAlignment;
601
+ slice?: boolean;
602
+ };
603
+
604
+
605
+
606
+ declare global {
607
+ namespace Pacem {
608
+ export {
609
+ Components,
610
+ Drawing
611
+ };
612
+ }
613
+ }