@leafer-ui/core 1.0.0-rc.19 → 1.0.0-rc.20
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/lib/core.cjs +211 -89
- package/lib/core.esm.js +200 -78
- package/lib/core.esm.min.js +1 -1
- package/lib/core.min.cjs +1 -1
- package/package.json +7 -7
package/lib/core.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Leafer, State, UI, Rect, Group } from '@leafer-ui/draw';
|
|
1
|
+
import { Leafer, State, UI, ImageManager, Rect, Group } from '@leafer-ui/draw';
|
|
2
2
|
export * from '@leafer-ui/draw';
|
|
3
|
-
import { registerUI, Creator, PropertyEvent, Debug, DataHelper, canvasSizeAttrs, LayoutEvent, RenderEvent, Event, EventCreator, registerUIEvent, LeafList, PointHelper,
|
|
3
|
+
import { registerUI, Creator, PropertyEvent, Debug, DataHelper, canvasSizeAttrs, LayoutEvent, RenderEvent, Event, EventCreator, registerUIEvent, LeafList, PointHelper, Bounds, BoundsHelper, ResizeEvent, LeaferEvent, CanvasManager, LeaferCanvasBase, tempBounds, Leaf, Matrix, Platform } from '@leafer/core';
|
|
4
4
|
|
|
5
5
|
/******************************************************************************
|
|
6
6
|
Copyright (c) Microsoft Corporation.
|
|
@@ -122,7 +122,8 @@ let App = class App extends Leafer {
|
|
|
122
122
|
if (this.viewReady)
|
|
123
123
|
this.renderer.update();
|
|
124
124
|
}
|
|
125
|
-
__render(canvas,
|
|
125
|
+
__render(canvas, options) {
|
|
126
|
+
canvas.setWorld(options.matrix || this.__world);
|
|
126
127
|
this.children.forEach(leafer => canvas.copyWorld(leafer.canvas));
|
|
127
128
|
}
|
|
128
129
|
__onResize(event) {
|
|
@@ -155,11 +156,6 @@ App = __decorate([
|
|
|
155
156
|
registerUI()
|
|
156
157
|
], App);
|
|
157
158
|
|
|
158
|
-
function draw(leafer) {
|
|
159
|
-
const { config } = leafer;
|
|
160
|
-
config.move.dragOut = false;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
159
|
const downKeyMap = {};
|
|
164
160
|
const Keyboard = {
|
|
165
161
|
isHoldSpaceKey() {
|
|
@@ -354,21 +350,16 @@ KeyEvent = __decorate([
|
|
|
354
350
|
registerUIEvent()
|
|
355
351
|
], KeyEvent);
|
|
356
352
|
|
|
357
|
-
function
|
|
353
|
+
function addInteractionWindow(leafer) {
|
|
358
354
|
if (leafer.isApp)
|
|
359
355
|
return;
|
|
360
356
|
leafer.__eventIds.push(leafer.on_(MoveEvent.BEFORE_MOVE, (e) => {
|
|
361
|
-
|
|
362
|
-
if (
|
|
363
|
-
|
|
364
|
-
moveY = 0;
|
|
365
|
-
else
|
|
366
|
-
moveX = 0;
|
|
367
|
-
}
|
|
368
|
-
leafer.zoomLayer.move(moveX, moveY);
|
|
357
|
+
const { x, y } = leafer.getValidMove(e.moveX, e.moveY);
|
|
358
|
+
if (x || y)
|
|
359
|
+
leafer.zoomLayer.move(x, y);
|
|
369
360
|
}), leafer.on_(ZoomEvent.BEFORE_ZOOM, (e) => {
|
|
370
361
|
const { zoomLayer } = leafer;
|
|
371
|
-
const changeScale = leafer.
|
|
362
|
+
const changeScale = leafer.getValidScale(e.scale);
|
|
372
363
|
if (changeScale !== 1) {
|
|
373
364
|
PointHelper.scaleOf(zoomLayer, e, changeScale);
|
|
374
365
|
zoomLayer.scale = zoomLayer.__.scaleX * changeScale;
|
|
@@ -376,6 +367,12 @@ function design(leafer) {
|
|
|
376
367
|
}));
|
|
377
368
|
}
|
|
378
369
|
|
|
370
|
+
function document(leafer) {
|
|
371
|
+
addInteractionWindow(leafer);
|
|
372
|
+
leafer.config.move.scroll = 'limit';
|
|
373
|
+
leafer.config.zoom.min = 1;
|
|
374
|
+
}
|
|
375
|
+
|
|
379
376
|
const debug$1 = Debug.get('LeaferTypeCreator');
|
|
380
377
|
const LeaferTypeCreator = {
|
|
381
378
|
list: {},
|
|
@@ -398,12 +395,51 @@ const LeaferTypeCreator = {
|
|
|
398
395
|
}
|
|
399
396
|
};
|
|
400
397
|
const { list, register } = LeaferTypeCreator;
|
|
401
|
-
register('draw',
|
|
402
|
-
register('design',
|
|
398
|
+
register('draw', () => { });
|
|
399
|
+
register('design', addInteractionWindow);
|
|
400
|
+
register('document', document);
|
|
403
401
|
|
|
404
402
|
Leafer.prototype.initType = function (type) {
|
|
405
403
|
LeaferTypeCreator.run(type, this);
|
|
406
404
|
};
|
|
405
|
+
Leafer.prototype.getValidMove = function (moveX, moveY) {
|
|
406
|
+
const { scroll, disabled } = this.app.config.move;
|
|
407
|
+
if (scroll) {
|
|
408
|
+
if (Math.abs(moveX) > Math.abs(moveY))
|
|
409
|
+
moveY = 0;
|
|
410
|
+
else
|
|
411
|
+
moveX = 0;
|
|
412
|
+
if (scroll === 'limit') {
|
|
413
|
+
const { x, y, width, height } = new Bounds(this.__world).addPoint(this.zoomLayer);
|
|
414
|
+
const right = x + width - this.width, bottom = y + height - this.height;
|
|
415
|
+
if (x >= 0 && right <= 0)
|
|
416
|
+
moveX = 0;
|
|
417
|
+
else if (moveX > 0) {
|
|
418
|
+
if (x + moveX > 0)
|
|
419
|
+
moveX = -x;
|
|
420
|
+
}
|
|
421
|
+
else if (moveX < 0 && right + moveX < 0)
|
|
422
|
+
moveX = -right;
|
|
423
|
+
if (y >= 0 && bottom <= 0)
|
|
424
|
+
moveY = 0;
|
|
425
|
+
else if (moveY > 0) {
|
|
426
|
+
if (y + moveY > 0)
|
|
427
|
+
moveY = -y;
|
|
428
|
+
}
|
|
429
|
+
else if (moveY < 0 && bottom + moveY < 0)
|
|
430
|
+
moveY = -bottom;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
return { x: disabled ? 0 : moveX, y: disabled ? 0 : moveY };
|
|
434
|
+
};
|
|
435
|
+
Leafer.prototype.getValidScale = function (changeScale) {
|
|
436
|
+
const { scaleX } = this.zoomLayer.__, { min, max, disabled } = this.app.config.zoom, absScale = Math.abs(scaleX * changeScale);
|
|
437
|
+
if (absScale < min)
|
|
438
|
+
changeScale = min / scaleX;
|
|
439
|
+
else if (absScale > max)
|
|
440
|
+
changeScale = max / scaleX;
|
|
441
|
+
return disabled ? 1 : changeScale;
|
|
442
|
+
};
|
|
407
443
|
|
|
408
444
|
class Transformer {
|
|
409
445
|
constructor(interaction) {
|
|
@@ -575,7 +611,7 @@ class Dragger {
|
|
|
575
611
|
return;
|
|
576
612
|
}
|
|
577
613
|
if (!this.moving && canDrag) {
|
|
578
|
-
if (this.moving = interaction.canMove(this.downData) || interaction.isHoldRightKey)
|
|
614
|
+
if (this.moving = interaction.canMove(this.downData) || interaction.isHoldRightKey || interaction.isMobileDragEmpty)
|
|
579
615
|
interaction.emit(MoveEvent.START, this.dragData);
|
|
580
616
|
}
|
|
581
617
|
if (!this.moving) {
|
|
@@ -624,7 +660,7 @@ class Dragger {
|
|
|
624
660
|
const list = this.getList();
|
|
625
661
|
if (list.length && running) {
|
|
626
662
|
const { moveX, moveY } = this.dragData;
|
|
627
|
-
list.forEach(leaf => leaf.moveWorld(moveX, moveY));
|
|
663
|
+
list.forEach(leaf => leaf.draggable && leaf.moveWorld(moveX, moveY));
|
|
628
664
|
}
|
|
629
665
|
}
|
|
630
666
|
dragOverOrOut(data) {
|
|
@@ -651,7 +687,7 @@ class Dragger {
|
|
|
651
687
|
this.dragEnterPath = path;
|
|
652
688
|
}
|
|
653
689
|
dragEnd(data, speed) {
|
|
654
|
-
if (!this.
|
|
690
|
+
if (!this.dragging && !this.moving)
|
|
655
691
|
return;
|
|
656
692
|
const { moveX, moveY } = this.dragData;
|
|
657
693
|
if (this.interaction.config.move.dragAnimate && this.canAnimate && this.moving && (Math.abs(moveX) > 1 || Math.abs(moveY) > 1)) {
|
|
@@ -674,12 +710,16 @@ class Dragger {
|
|
|
674
710
|
if (throughPath)
|
|
675
711
|
endDragData.throughPath = throughPath;
|
|
676
712
|
endDragData.path = path;
|
|
677
|
-
if (this.moving)
|
|
713
|
+
if (this.moving) {
|
|
714
|
+
this.moving = false;
|
|
678
715
|
interaction.emit(MoveEvent.END, endDragData);
|
|
716
|
+
}
|
|
679
717
|
if (this.dragging) {
|
|
718
|
+
const dropList = this.getList();
|
|
719
|
+
this.dragging = false;
|
|
680
720
|
interaction.emit(DragEvent.END, endDragData);
|
|
681
|
-
this.swipe(data, endDragData);
|
|
682
|
-
this.drop(data);
|
|
721
|
+
this.swipe(data, downData, dragData, endDragData);
|
|
722
|
+
this.drop(data, dropList, this.dragEnterPath);
|
|
683
723
|
}
|
|
684
724
|
this.autoMoveCancel();
|
|
685
725
|
this.dragReset();
|
|
@@ -691,22 +731,21 @@ class Dragger {
|
|
|
691
731
|
this.interaction.target.nextRender(animateWait, null, off);
|
|
692
732
|
this.animateWait = func;
|
|
693
733
|
}
|
|
694
|
-
swipe(data, endDragData) {
|
|
695
|
-
const { interaction
|
|
734
|
+
swipe(data, downData, dragData, endDragData) {
|
|
735
|
+
const { interaction } = this;
|
|
696
736
|
if (PointHelper.getDistance(downData, data) > interaction.config.pointer.swipeDistance) {
|
|
697
|
-
const swipeData = getSwipeEventData(downData,
|
|
737
|
+
const swipeData = getSwipeEventData(downData, dragData, endDragData);
|
|
698
738
|
this.interaction.emit(swipeData.type, swipeData);
|
|
699
739
|
}
|
|
700
740
|
}
|
|
701
|
-
drop(data) {
|
|
702
|
-
const dropData = getDropEventData(data,
|
|
703
|
-
dropData.path =
|
|
741
|
+
drop(data, dropList, dragEnterPath) {
|
|
742
|
+
const dropData = getDropEventData(data, dropList, DragEvent.data);
|
|
743
|
+
dropData.path = dragEnterPath;
|
|
704
744
|
this.interaction.emit(DropEvent.DROP, dropData);
|
|
705
|
-
this.interaction.emit(DragEvent.LEAVE, data,
|
|
745
|
+
this.interaction.emit(DragEvent.LEAVE, data, dragEnterPath);
|
|
706
746
|
}
|
|
707
747
|
dragReset() {
|
|
708
748
|
DragEvent.list = DragEvent.data = this.dragableList = this.dragData = this.downData = this.dragOverPath = this.dragEnterPath = null;
|
|
709
|
-
this.dragging = this.moving = false;
|
|
710
749
|
}
|
|
711
750
|
checkDragOut(data) {
|
|
712
751
|
const { interaction } = this;
|
|
@@ -838,6 +877,7 @@ const config = {
|
|
|
838
877
|
tapTime: 120,
|
|
839
878
|
longPressTime: 800,
|
|
840
879
|
transformTime: 500,
|
|
880
|
+
hover: true,
|
|
841
881
|
dragHover: true,
|
|
842
882
|
dragDistance: 2,
|
|
843
883
|
swipeDistance: 20,
|
|
@@ -849,9 +889,12 @@ const config = {
|
|
|
849
889
|
const { pathHasEventType, getMoveEventData, getZoomEventData, getRotateEventData } = InteractionHelper;
|
|
850
890
|
class InteractionBase {
|
|
851
891
|
get dragging() { return this.dragger.dragging; }
|
|
892
|
+
get moveMode() { return this.config.move.drag || this.isHoldSpaceKey || this.isHoldMiddleKey || (this.isHoldRightKey && this.dragger.moving) || this.isDragEmpty; }
|
|
852
893
|
get isDragEmpty() { return this.config.move.dragEmpty && this.isRootPath(this.hoverData) && (!this.downData || this.isRootPath(this.downData)); }
|
|
894
|
+
get isMobileDragEmpty() { return this.config.move.dragEmpty && !this.config.pointer.hover && this.downData && this.isTreePath(this.downData); }
|
|
895
|
+
get isHoldMiddleKey() { return this.config.move.holdMiddleKey && this.downData && PointerButton.middle(this.downData); }
|
|
853
896
|
get isHoldRightKey() { return this.config.move.holdRightKey && this.downData && PointerButton.right(this.downData); }
|
|
854
|
-
get
|
|
897
|
+
get isHoldSpaceKey() { return this.config.move.holdSpaceKey && Keyboard.isHoldSpaceKey(); }
|
|
855
898
|
get hitRadius() { return this.config.pointer.hitRadius; }
|
|
856
899
|
constructor(target, canvas, selector, userConfig) {
|
|
857
900
|
this.config = config;
|
|
@@ -893,7 +936,8 @@ class InteractionBase {
|
|
|
893
936
|
this.waitMenuTap = true;
|
|
894
937
|
}
|
|
895
938
|
this.dragger.setDragData(data);
|
|
896
|
-
this.
|
|
939
|
+
if (!this.isHoldRightKey)
|
|
940
|
+
this.updateCursor(data);
|
|
897
941
|
}
|
|
898
942
|
pointerMove(data) {
|
|
899
943
|
if (!data)
|
|
@@ -911,9 +955,10 @@ class InteractionBase {
|
|
|
911
955
|
}
|
|
912
956
|
}
|
|
913
957
|
pointerMoveReal(data) {
|
|
958
|
+
const { dragHover, dragDistance } = this.config.pointer;
|
|
914
959
|
this.emit(PointerEvent.BEFORE_MOVE, data, this.defaultPath);
|
|
915
960
|
if (this.downData) {
|
|
916
|
-
const canDrag = PointHelper.getDistance(this.downData, data) >
|
|
961
|
+
const canDrag = PointHelper.getDistance(this.downData, data) > dragDistance;
|
|
917
962
|
if (canDrag) {
|
|
918
963
|
if (this.waitTap)
|
|
919
964
|
this.pointerWaitCancel();
|
|
@@ -925,7 +970,7 @@ class InteractionBase {
|
|
|
925
970
|
this.updateHoverData(data);
|
|
926
971
|
this.checkPath(data);
|
|
927
972
|
this.emit(PointerEvent.MOVE, data);
|
|
928
|
-
if (!(this.dragging && !
|
|
973
|
+
if (!(this.dragging && !dragHover))
|
|
929
974
|
this.pointerHover(data);
|
|
930
975
|
if (this.dragger.dragging) {
|
|
931
976
|
this.dragger.dragOverOrOut(data);
|
|
@@ -941,20 +986,25 @@ class InteractionBase {
|
|
|
941
986
|
if (!downData)
|
|
942
987
|
return;
|
|
943
988
|
PointerButton.defaultLeft(data);
|
|
944
|
-
this.downData = null;
|
|
945
989
|
this.findPath(data);
|
|
990
|
+
const upData = Object.assign(Object.assign({}, data), { path: data.path.clone() });
|
|
946
991
|
data.path.addList(downData.path.list);
|
|
947
992
|
this.checkPath(data);
|
|
993
|
+
this.downData = null;
|
|
948
994
|
this.emit(PointerEvent.BEFORE_UP, data);
|
|
949
995
|
this.emit(PointerEvent.UP, data);
|
|
950
996
|
this.touchLeave(data);
|
|
951
|
-
|
|
952
|
-
|
|
997
|
+
if (!data.isCancel) {
|
|
998
|
+
this.tap(data);
|
|
999
|
+
this.menuTap(data);
|
|
1000
|
+
}
|
|
953
1001
|
this.dragger.dragEnd(data);
|
|
954
|
-
this.updateCursor(
|
|
1002
|
+
this.updateCursor(upData);
|
|
955
1003
|
}
|
|
956
1004
|
pointerCancel() {
|
|
957
|
-
|
|
1005
|
+
const data = Object.assign({}, this.dragger.dragData);
|
|
1006
|
+
data.isCancel = true;
|
|
1007
|
+
this.pointerUp(data);
|
|
958
1008
|
}
|
|
959
1009
|
multiTouch(data, list) {
|
|
960
1010
|
const { move, angle, scale, center } = MultiTouchHelper.getData(list);
|
|
@@ -1004,8 +1054,10 @@ class InteractionBase {
|
|
|
1004
1054
|
this.updateCursor();
|
|
1005
1055
|
}
|
|
1006
1056
|
pointerHover(data) {
|
|
1007
|
-
this.
|
|
1008
|
-
|
|
1057
|
+
if (this.config.pointer.hover) {
|
|
1058
|
+
this.pointerOverOrOut(data);
|
|
1059
|
+
this.pointerEnterOrLeave(data);
|
|
1060
|
+
}
|
|
1009
1061
|
}
|
|
1010
1062
|
pointerOverOrOut(data) {
|
|
1011
1063
|
const { path } = data;
|
|
@@ -1086,6 +1138,12 @@ class InteractionBase {
|
|
|
1086
1138
|
isRootPath(data) {
|
|
1087
1139
|
return data && data.path.list[0].isLeafer;
|
|
1088
1140
|
}
|
|
1141
|
+
isTreePath(data) {
|
|
1142
|
+
const app = this.target.app;
|
|
1143
|
+
if (!app || !app.isApp)
|
|
1144
|
+
return false;
|
|
1145
|
+
return app.editor && (!data.path.has(app.editor) && data.path.has(app.tree));
|
|
1146
|
+
}
|
|
1089
1147
|
checkPath(data, useDefaultPath) {
|
|
1090
1148
|
if (useDefaultPath || this.canMove(data))
|
|
1091
1149
|
data.path = this.defaultPath;
|
|
@@ -1132,7 +1190,7 @@ class InteractionBase {
|
|
|
1132
1190
|
this.hoverData = data;
|
|
1133
1191
|
}
|
|
1134
1192
|
updateCursor(data) {
|
|
1135
|
-
if (this.config.cursor.stop)
|
|
1193
|
+
if (this.config.cursor.stop || !this.config.pointer.hover)
|
|
1136
1194
|
return;
|
|
1137
1195
|
if (!data) {
|
|
1138
1196
|
this.updateHoverData();
|
|
@@ -1242,22 +1300,25 @@ Cursor.custom = {};
|
|
|
1242
1300
|
class HitCanvasManager extends CanvasManager {
|
|
1243
1301
|
constructor() {
|
|
1244
1302
|
super(...arguments);
|
|
1245
|
-
this.
|
|
1246
|
-
this.
|
|
1303
|
+
this.maxTotal = 1000;
|
|
1304
|
+
this.pathList = new LeafList();
|
|
1305
|
+
this.pixelList = new LeafList();
|
|
1247
1306
|
}
|
|
1248
|
-
|
|
1249
|
-
this.
|
|
1250
|
-
|
|
1307
|
+
getPixelType(leaf, config) {
|
|
1308
|
+
this.__autoClear();
|
|
1309
|
+
this.pixelList.add(leaf);
|
|
1310
|
+
return Creator.hitCanvas(config);
|
|
1251
1311
|
}
|
|
1252
1312
|
getPathType(leaf) {
|
|
1253
|
-
this.
|
|
1313
|
+
this.__autoClear();
|
|
1314
|
+
this.pathList.add(leaf);
|
|
1254
1315
|
return Creator.hitCanvas();
|
|
1255
1316
|
}
|
|
1256
1317
|
clearImageType() {
|
|
1257
|
-
this.__clearLeafList(this.
|
|
1318
|
+
this.__clearLeafList(this.pixelList);
|
|
1258
1319
|
}
|
|
1259
1320
|
clearPathType() {
|
|
1260
|
-
this.__clearLeafList(this.
|
|
1321
|
+
this.__clearLeafList(this.pathList);
|
|
1261
1322
|
}
|
|
1262
1323
|
__clearLeafList(leafList) {
|
|
1263
1324
|
if (leafList.length) {
|
|
@@ -1270,56 +1331,117 @@ class HitCanvasManager extends CanvasManager {
|
|
|
1270
1331
|
leafList.reset();
|
|
1271
1332
|
}
|
|
1272
1333
|
}
|
|
1334
|
+
__autoClear() {
|
|
1335
|
+
if (this.pathList.length + this.pixelList.length > this.maxTotal)
|
|
1336
|
+
this.clear();
|
|
1337
|
+
}
|
|
1273
1338
|
clear() {
|
|
1274
1339
|
this.clearPathType();
|
|
1275
1340
|
this.clearImageType();
|
|
1276
1341
|
}
|
|
1277
1342
|
}
|
|
1278
1343
|
|
|
1344
|
+
const canvas = LeaferCanvasBase.prototype;
|
|
1345
|
+
canvas.hitFill = function (point, fillRule) {
|
|
1346
|
+
return fillRule ? this.context.isPointInPath(point.x, point.y, fillRule) : this.context.isPointInPath(point.x, point.y);
|
|
1347
|
+
};
|
|
1348
|
+
canvas.hitStroke = function (point, strokeWidth) {
|
|
1349
|
+
this.strokeWidth = strokeWidth;
|
|
1350
|
+
return this.context.isPointInStroke(point.x, point.y);
|
|
1351
|
+
};
|
|
1352
|
+
canvas.hitPixel = function (radiusPoint, offset, scale = 1) {
|
|
1353
|
+
let { x, y, radiusX, radiusY } = radiusPoint;
|
|
1354
|
+
if (offset)
|
|
1355
|
+
x -= offset.x, y -= offset.y;
|
|
1356
|
+
tempBounds.set(x - radiusX, y - radiusY, radiusX * 2, radiusY * 2).scale(scale).ceil();
|
|
1357
|
+
const { data } = this.context.getImageData(tempBounds.x, tempBounds.y, tempBounds.width, tempBounds.height);
|
|
1358
|
+
for (let i = 0, len = data.length; i < len; i += 4) {
|
|
1359
|
+
if (data[i + 3] > 0)
|
|
1360
|
+
return true;
|
|
1361
|
+
}
|
|
1362
|
+
return data[3] > 0;
|
|
1363
|
+
};
|
|
1364
|
+
|
|
1279
1365
|
const { toInnerRadiusPointOf, copy, setRadius } = PointHelper;
|
|
1280
1366
|
const inner = {};
|
|
1281
|
-
Leaf.prototype
|
|
1282
|
-
|
|
1283
|
-
this.__updateHitCanvas();
|
|
1284
|
-
if (!this.__layout.boundsChanged)
|
|
1285
|
-
this.__layout.hitCanvasChanged = false;
|
|
1286
|
-
}
|
|
1367
|
+
const leaf = Leaf.prototype;
|
|
1368
|
+
leaf.__hitWorld = function (point) {
|
|
1287
1369
|
if (this.__.hitRadius) {
|
|
1288
1370
|
copy(inner, point), point = inner;
|
|
1289
1371
|
setRadius(point, this.__.hitRadius);
|
|
1290
1372
|
}
|
|
1291
1373
|
toInnerRadiusPointOf(point, this.__world, inner);
|
|
1292
|
-
|
|
1374
|
+
const { width, height } = this.__world;
|
|
1375
|
+
const isSmall = width < 10 && height < 10;
|
|
1376
|
+
if (this.__.hitBox || isSmall) {
|
|
1293
1377
|
if (BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner))
|
|
1294
1378
|
return true;
|
|
1379
|
+
if (isSmall)
|
|
1380
|
+
return false;
|
|
1381
|
+
}
|
|
1382
|
+
if (this.__layout.hitCanvasChanged || !this.__hitCanvas) {
|
|
1383
|
+
this.__updateHitCanvas();
|
|
1384
|
+
if (!this.__layout.boundsChanged)
|
|
1385
|
+
this.__layout.hitCanvasChanged = false;
|
|
1295
1386
|
}
|
|
1296
1387
|
return this.__hit(inner);
|
|
1297
1388
|
};
|
|
1389
|
+
leaf.__hitFill = function (inner) { var _a; return (_a = this.__hitCanvas) === null || _a === void 0 ? void 0 : _a.hitFill(inner, this.__.windingRule); };
|
|
1390
|
+
leaf.__hitStroke = function (inner, strokeWidth) { var _a; return (_a = this.__hitCanvas) === null || _a === void 0 ? void 0 : _a.hitStroke(inner, strokeWidth); };
|
|
1391
|
+
leaf.__hitPixel = function (inner) { var _a; return (_a = this.__hitCanvas) === null || _a === void 0 ? void 0 : _a.hitPixel(inner, this.__layout.renderBounds, this.__hitCanvas.hitScale); };
|
|
1392
|
+
leaf.__drawHitPath = function (canvas) { if (canvas)
|
|
1393
|
+
this.__drawRenderPath(canvas); };
|
|
1298
1394
|
|
|
1299
|
-
|
|
1395
|
+
const matrix = new Matrix();
|
|
1396
|
+
const ui$1 = UI.prototype;
|
|
1397
|
+
ui$1.__updateHitCanvas = function () {
|
|
1398
|
+
const data = this.__, { hitCanvasManager } = this.leafer;
|
|
1399
|
+
const isHitPixelFill = data.__pixelFill && data.hitFill === 'pixel';
|
|
1400
|
+
const isHitPixelStroke = data.__pixelStroke && data.hitStroke === 'pixel';
|
|
1401
|
+
const isHitPixel = isHitPixelFill || isHitPixelStroke;
|
|
1300
1402
|
if (!this.__hitCanvas)
|
|
1301
|
-
this.__hitCanvas = this
|
|
1403
|
+
this.__hitCanvas = isHitPixel ? hitCanvasManager.getPixelType(this, { contextSettings: { willReadFrequently: true } }) : hitCanvasManager.getPathType(this);
|
|
1302
1404
|
const h = this.__hitCanvas;
|
|
1405
|
+
if (isHitPixel) {
|
|
1406
|
+
const { renderBounds } = this.__layout;
|
|
1407
|
+
const size = Platform.image.hitCanvasSize;
|
|
1408
|
+
const scale = h.hitScale = tempBounds.set(0, 0, size, size).getFitMatrix(renderBounds, 0.5).a;
|
|
1409
|
+
const { x, y, width, height } = tempBounds.set(renderBounds).scale(scale);
|
|
1410
|
+
h.resize({ width, height, pixelRatio: 1 });
|
|
1411
|
+
h.clear();
|
|
1412
|
+
ImageManager.patternLocked = true;
|
|
1413
|
+
this.__renderShape(h, { matrix: matrix.setWith(this.__world).scaleWith(1 / scale).invertWith().translate(-x, -y) }, !isHitPixelFill, !isHitPixelStroke);
|
|
1414
|
+
ImageManager.patternLocked = false;
|
|
1415
|
+
h.resetTransform();
|
|
1416
|
+
data.__isHitPixel = true;
|
|
1417
|
+
}
|
|
1418
|
+
else {
|
|
1419
|
+
data.__isHitPixel && (data.__isHitPixel = false);
|
|
1420
|
+
}
|
|
1303
1421
|
this.__drawHitPath(h);
|
|
1304
|
-
h.setStrokeOptions(
|
|
1422
|
+
h.setStrokeOptions(data);
|
|
1305
1423
|
};
|
|
1306
|
-
|
|
1424
|
+
ui$1.__hit = function (inner) {
|
|
1307
1425
|
if (Platform.name === 'miniapp')
|
|
1308
1426
|
this.__drawHitPath(this.__hitCanvas);
|
|
1309
|
-
const
|
|
1310
|
-
|
|
1311
|
-
const isHitFill = this.__hitFill(inner, windingRule);
|
|
1312
|
-
if (needHitFill && isHitFill)
|
|
1427
|
+
const data = this.__;
|
|
1428
|
+
if (data.__isHitPixel && this.__hitPixel(inner))
|
|
1313
1429
|
return true;
|
|
1314
|
-
const {
|
|
1315
|
-
const
|
|
1430
|
+
const { hitFill } = data;
|
|
1431
|
+
const needHitFillPath = ((data.fill && hitFill == 'path') || hitFill === 'all');
|
|
1432
|
+
if (needHitFillPath && this.__hitFill(inner))
|
|
1433
|
+
return true;
|
|
1434
|
+
const { hitStroke, __strokeWidth } = data;
|
|
1435
|
+
const needHitStrokePath = ((data.stroke && hitStroke == 'path') || hitStroke === 'all');
|
|
1436
|
+
if (!needHitFillPath && !needHitStrokePath)
|
|
1437
|
+
return false;
|
|
1316
1438
|
const radiusWidth = inner.radiusX * 2;
|
|
1317
1439
|
let hitWidth = radiusWidth;
|
|
1318
|
-
if (
|
|
1319
|
-
switch (strokeAlign) {
|
|
1440
|
+
if (needHitStrokePath) {
|
|
1441
|
+
switch (data.strokeAlign) {
|
|
1320
1442
|
case 'inside':
|
|
1321
1443
|
hitWidth += __strokeWidth * 2;
|
|
1322
|
-
if (!
|
|
1444
|
+
if (!needHitFillPath && this.__hitFill(inner) && this.__hitStroke(inner, hitWidth))
|
|
1323
1445
|
return true;
|
|
1324
1446
|
hitWidth = radiusWidth;
|
|
1325
1447
|
break;
|
|
@@ -1328,8 +1450,8 @@ UI.prototype.__hit = function (inner) {
|
|
|
1328
1450
|
break;
|
|
1329
1451
|
case 'outside':
|
|
1330
1452
|
hitWidth += __strokeWidth * 2;
|
|
1331
|
-
if (!
|
|
1332
|
-
if (!
|
|
1453
|
+
if (!needHitFillPath) {
|
|
1454
|
+
if (!this.__hitFill(inner) && this.__hitStroke(inner, hitWidth))
|
|
1333
1455
|
return true;
|
|
1334
1456
|
hitWidth = radiusWidth;
|
|
1335
1457
|
}
|
|
@@ -1344,8 +1466,8 @@ Rect.prototype.__updateHitCanvas = function () {
|
|
|
1344
1466
|
if (this.stroke || this.cornerRadius)
|
|
1345
1467
|
ui.__updateHitCanvas.call(this);
|
|
1346
1468
|
};
|
|
1347
|
-
Rect.prototype.__hitFill = function (inner
|
|
1348
|
-
return this.__hitCanvas ? ui.__hitFill.call(this, inner
|
|
1469
|
+
Rect.prototype.__hitFill = function (inner) {
|
|
1470
|
+
return this.__hitCanvas ? ui.__hitFill.call(this, inner) : BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner);
|
|
1349
1471
|
};
|
|
1350
1472
|
|
|
1351
1473
|
UI.prototype.find = function (condition, options) {
|
package/lib/core.esm.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Leafer as t,State as e,UI as i,Rect as a,Group as s}from"@leafer-ui/draw";export*from"@leafer-ui/draw";import{registerUI as r,Creator as n,PropertyEvent as o,Debug as h,DataHelper as d,canvasSizeAttrs as c,LayoutEvent as g,RenderEvent as l,Event as u,EventCreator as p,registerUIEvent as m,LeafList as v,PointHelper as _,BoundsHelper as f,Bounds as E,ResizeEvent as D,LeaferEvent as y,CanvasManager as O,Leaf as T,Platform as P}from"@leafer/core";function R(t,e,i,a){var s,r=arguments.length,n=r<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,a);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(n=(r<3?s(n):r>3?s(e,i,n):s(e,i))||n);return r>3&&n&&Object.defineProperty(e,i,n),n}"function"==typeof SuppressedError&&SuppressedError;let w=class extends t{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,e){if(super.init(t,e),t){const{ground:e,tree:i,sky:a,editor:s}=t;e&&(this.ground=this.addLeafer(e)),(i||s)&&(this.tree=this.addLeafer(i)),(a||s)&&(this.sky=this.addLeafer(a||{type:"draw",usePartRender:!1})),s&&(this.editor=n.editor(s),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:e,view:i}=this.config;e||i===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(o.CHANGE,this.__onPropertyChange,this))}start(){super.start(),this.children.forEach((t=>t.start()))}stop(){this.children.forEach((t=>t.stop())),super.stop()}unlockLayout(){super.unlockLayout(),this.children.forEach((t=>t.unlockLayout()))}lockLayout(){super.lockLayout(),this.children.forEach((t=>t.lockLayout()))}forceRender(t){this.children.forEach((e=>e.forceRender(t)))}addLeafer(e){const i=new t(e);return this.add(i),i}add(t){if(!t.view){if(this.realCanvas&&!this.canvas.bounds)return void setTimeout((()=>this.add(t)),10);t.init(this.__getChildConfig(t.userConfig),this)}super.add(t),this.__listenChildEvents(t)}__onPropertyChange(){h.showHitView&&this.children.forEach((t=>t.forceUpdate("surface")))}__onCreated(){this.created=this.children.every((t=>t.created))}__onReady(){this.children.every((t=>t.ready))&&super.__onReady()}__onViewReady(){this.children.every((t=>t.viewReady))&&super.__onViewReady()}__onChildRenderEnd(t){this.renderer.addBlock(t.renderBounds),this.viewReady&&this.renderer.update()}__render(t,e){this.children.forEach((e=>t.copyWorld(e.canvas)))}__onResize(t){this.children.forEach((e=>e.resize(t))),super.__onResize(t)}__checkUpdateLayout(){this.children.forEach((t=>t.__layout.update()))}__getChildConfig(t){let e=Object.assign({},this.config);return e.hittable=e.realCanvas=void 0,t&&d.assign(e,t),this.autoLayout&&d.copyAttrs(e,this,c),e.view=this.realCanvas?void 0:this.view,e.fill=void 0,e}__listenChildEvents(t){t.once(g.END,(()=>this.__onReady())),t.once(l.START,(()=>this.__onCreated())),t.once(l.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(l.END,this.__onChildRenderEnd,this))}};w=R([r()],w);const C={},L={isHoldSpaceKey:()=>L.isHold("Space"),isHold:t=>C[t],setDownCode(t){C[t]||(C[t]=!0)},setUpCode(t){C[t]=!1}},b={LEFT:1,RIGHT:2,MIDDLE:4,defaultLeft(t){t.buttons||(t.buttons=1)},left:t=>1===t.buttons,right:t=>2===t.buttons,middle:t=>4===t.buttons};class M extends u{get spaceKey(){return L.isHoldSpaceKey()}get left(){return b.left(this)}get right(){return b.right(this)}get middle(){return b.middle(this)}constructor(t){super(t.type),this.bubbles=!0,Object.assign(this,t)}getPage(){return this.current.getPagePoint(this)}getInner(t){return t||(t=this.current),t.getInnerPoint(this)}getLocal(t){return t||(t=this.current),t.getLocalPoint(this)}static changeName(t,e){p.changeName(t,e)}}let A=class extends M{};A.POINTER="pointer",A.BEFORE_DOWN="pointer.before_down",A.BEFORE_MOVE="pointer.before_move",A.BEFORE_UP="pointer.before_up",A.DOWN="pointer.down",A.MOVE="pointer.move",A.UP="pointer.up",A.OVER="pointer.over",A.OUT="pointer.out",A.ENTER="pointer.enter",A.LEAVE="pointer.leave",A.TAP="tap",A.DOUBLE_TAP="double_tap",A.CLICK="click",A.DOUBLE_CLICK="double_click",A.LONG_PRESS="long_press",A.LONG_TAP="long_tap",A.MENU="pointer.menu",A.MENU_TAP="pointer.menu_tap",A=R([m()],A);const x={};let k=class extends A{static setList(t){this.list=t instanceof v?t:new v(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(x,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(x,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(x,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){x.x=t?this.totalX:this.moveX,x.y=t?this.totalY:this.moveY}};k.BEFORE_DRAG="drag.before_drag",k.START="drag.start",k.DRAG="drag",k.END="drag.end",k.OVER="drag.over",k.OUT="drag.out",k.ENTER="drag.enter",k.LEAVE="drag.leave",k=R([m()],k);let S=class extends A{static setList(t){k.setList(t)}static setData(t){k.setData(t)}};S.DROP="drop",S=R([m()],S);let B=class extends k{};B.BEFORE_MOVE="move.before_move",B.START="move.start",B.MOVE="move",B.END="move.end",B=R([m()],B);let H=class extends M{};H.BEFORE_ROTATE="rotate.before_rotate",H.START="rotate.start",H.ROTATE="rotate",H.END="rotate.end",H=R([m()],H);let N=class extends k{};N.SWIPE="swipe",N.LEFT="swipe.left",N.RIGHT="swipe.right",N.UP="swipe.up",N.DOWN="swipe.down",N=R([m()],N);let W=class extends M{};W.BEFORE_ZOOM="zoom.before_zoom",W.START="zoom.start",W.ZOOM="zoom",W.END="zoom.end",W=R([m()],W);let I=class extends M{};I.DOWN="key.down",I.HOLD="key.hold",I.UP="key.up",I=R([m()],I);const j=h.get("LeaferTypeCreator"),V={list:{},register(t,e){z[t]?j.repeat(t):z[t]=e},run(t,e){const i=z[t];i?i(e):j.error("no",t)}},{list:z,register:U}=V;U("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),U("design",(function(t){t.isApp||t.__eventIds.push(t.on_(B.BEFORE_MOVE,(e=>{let{moveX:i,moveY:a}=e;t.config.move.scroll&&(Math.abs(i)>Math.abs(a)?a=0:i=0),t.zoomLayer.move(i,a)})),t.on_(W.BEFORE_ZOOM,(e=>{const{zoomLayer:i}=t,a=t.validScale(e.scale);1!==a&&(_.scaleOf(i,e,a),i.scale=i.__.scaleX*a)})))})),t.prototype.initType=function(t){V.run(t,this)};class K{constructor(t){this.interaction=t}move(t){const{interaction:e}=this;if(!this.moveData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.moveData=Object.assign(Object.assign({},t),{moveX:0,moveY:0}),e.cancelHover(),e.emit(B.START,this.moveData)}t.path=this.moveData.path,e.emit(B.BEFORE_MOVE,t),e.emit(B.MOVE,t),this.transformEndWait()}zoom(t){const{interaction:e}=this;if(!this.zoomData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.zoomData=Object.assign(Object.assign({},t),{scale:1}),e.cancelHover(),e.emit(W.START,this.zoomData)}t.path=this.zoomData.path,e.emit(W.BEFORE_ZOOM,t),e.emit(W.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:e}=this;if(!this.rotateData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.rotateData=Object.assign(Object.assign({},t),{rotation:0}),e.cancelHover(),e.emit(H.START,this.rotateData)}t.path=this.rotateData.path,e.emit(H.BEFORE_ROTATE,t),e.emit(H.ROTATE,t),this.transformEndWait()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout((()=>{this.transformEnd()}),this.interaction.config.pointer.transformTime)}transformEnd(){this.moveEnd(),this.zoomEnd(),this.rotateEnd()}moveEnd(){this.moveData&&(this.interaction.emit(B.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(W.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(H.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const F={getMoveEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,moveX:e.x,moveY:e.y}),getRotateEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,rotation:e}),getZoomEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,scale:e}),getDragEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:i.x,y:i.y,moveX:i.x-e.x,moveY:i.y-e.y,totalX:i.x-t.x,totalY:i.y-t.y}),getDropEventData:(t,e,i)=>Object.assign(Object.assign({},t),{list:e,data:i}),getSwipeDirection:t=>t<-45&&t>-135?N.UP:t>45&&t<135?N.DOWN:t<=45&&t>=-45?N.RIGHT:N.LEFT,getSwipeEventData:(t,e,i)=>Object.assign(Object.assign({},i),{moveX:e.moveX,moveY:e.moveY,totalX:i.x-t.x,totalY:i.y-t.y,type:X.getSwipeDirection(_.getAngle(t,i))}),getBase(t){const e=1===t.button?4:t.button;return{altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,buttons:void 0===t.buttons?1:0===t.buttons?e:t.buttons,origin:t}},pathHasEventType(t,e){const{list:i}=t;for(let t=0,a=i.length;t<a;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,e){const i=new v,{list:a}=t;for(let t=0,s=a.length;t<s;t++)a[t].hasEvent(e)&&i.add(a[t]);return i}},X=F,Y=new v,{getDragEventData:G,getDropEventData:Z,getSwipeEventData:q}=F;class J{constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=G(t,t,t),this.canAnimate=this.canDragOut=!0}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?Y:k.list||this.dragableList||Y}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();!this.moving&&e&&(this.moving=i.canMove(this.downData)||i.isHoldRightKey)&&i.emit(B.START,this.dragData),this.moving||this.dragStart(t,e),this.drag(t)}dragStart(t,e){this.dragging||(this.dragging=e&&b.left(t),this.dragging&&(this.interaction.emit(k.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let e;for(let i=0,a=t.length;i<a;i++)if(e=t.list[i],(e.__.draggable||e.__.editable)&&e.__.hitSelf&&!e.__.locked){this.dragableList=new v(e);break}}drag(t){const{interaction:e,dragData:i,downData:a}=this,{path:s,throughPath:r}=a;this.dragData=G(a,i,t),r&&(this.dragData.throughPath=r),this.dragData.path=s,this.moving?(e.emit(B.BEFORE_MOVE,this.dragData),e.emit(B.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(k.BEFORE_DRAG,this.dragData),e.emit(k.DRAG,this.dragData))}dragReal(){const{running:t}=this.interaction,e=this.getList();if(e.length&&t){const{moveX:t,moveY:i}=this.dragData;e.forEach((e=>e.moveWorld(t,i)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:a}=t;this.dragOverPath=a,i?a.indexAt(0)!==i.indexAt(0)&&(e.emit(k.OUT,t,i),e.emit(k.OVER,t,a)):e.emit(k.OVER,t,a)}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:a}=t;e.emit(k.LEAVE,t,i,a),e.emit(k.ENTER,t,a,i),this.dragEnterPath=a}dragEnd(t,e){if(!this.dragData)return;const{moveX:i,moveY:a}=this.dragData;this.interaction.config.move.dragAnimate&&this.canAnimate&&this.moving&&(Math.abs(i)>1||Math.abs(a)>1)?(t=Object.assign({},t),e=.9*(e||("touch"===t.pointerType?2:1)),_.move(t,i*e,a*e),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:a}=this;t||(t=a);const{path:s,throughPath:r}=i,n=G(i,t,t);r&&(n.throughPath=r),n.path=s,this.moving&&e.emit(B.END,n),this.dragging&&(e.emit(k.END,n),this.swipe(t,n),this.drop(t)),this.autoMoveCancel(),this.dragReset(),this.animate(null,"off")}animate(t,e){const i=t||this.animateWait;i&&this.interaction.target.nextRender(i,null,e),this.animateWait=t}swipe(t,e){const{interaction:i,downData:a}=this;if(_.getDistance(a,t)>i.config.pointer.swipeDistance){const t=q(a,this.dragData,e);this.interaction.emit(t.type,t)}}drop(t){const e=Z(t,this.getList(),k.data);e.path=this.dragEnterPath,this.interaction.emit(S.DROP,e),this.interaction.emit(k.LEAVE,t,this.dragEnterPath)}dragReset(){k.list=k.data=this.dragableList=this.dragData=this.downData=this.dragOverPath=this.dragEnterPath=null,this.dragging=this.moving=!1}checkDragOut(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)}autoMoveOnDragOut(t){const{interaction:e,downData:i,canDragOut:a}=this,{autoDistance:s,dragOut:r}=e.config.move;if(!r||!a||!s)return;const n=e.shrinkCanvasBounds,{x:o,y:h}=n,d=f.maxX(n),c=f.maxY(n),g=t.x<o?s:d<t.x?-s:0,l=t.y<h?s:c<t.y?-s:0;let u=0,p=0;this.autoMoveTimer=setInterval((()=>{u+=g,p+=l,_.move(i,g,l),_.move(this.dragData,g,l),e.move(Object.assign(Object.assign({},t),{moveX:g,moveY:l,totalX:u,totalY:p})),e.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const Q=h.get("emit");const $=["move","zoom","rotate","key"];function tt(t,e,i,a,s){if($.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!it(t,s)){let r;for(let n=0,o=t.children.length;n<o;n++)r=t.children[n],!i.path.has(r)&&r.__.hittable&&et(r,e,i,a,s)}}function et(t,i,a,s,r){if(t.destroyed)return!0;if(t.__.hitSelf&&!it(t,r)&&(e.updateEventStyle&&e.updateEventStyle(t,i),t.hasEvent(i,s))){a.phase=s?1:t===a.target?2:3;const e=p.get(i,a);if(t.emitEvent(e,s),e.isStop)return!0}return!1}function it(t,e){return e&&e.has(t)}const at={getData(t){const e=t[0],i=t[1],a=_.getCenter(e.from,i.from),s=_.getCenter(e.to,i.to),r={x:s.x-a.x,y:s.y-a.y},n=_.getDistance(e.from,i.from);return{move:r,scale:_.getDistance(e.to,i.to)/n,angle:_.getRotation(e.from,i.from,e.to,i.to),center:s}}},st={wheel:{zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,tapTime:120,longPressTime:800,transformTime:500,dragHover:!0,dragDistance:2,swipeDistance:20,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:rt,getMoveEventData:nt,getZoomEventData:ot,getRotateEventData:ht}=F;class dt{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.isRootPath(this.hoverData)&&(!this.downData||this.isRootPath(this.downData))}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&b.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&L.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&b.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,e,i,a){this.config=st,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=e,this.selector=i,this.defaultPath=new v(t),this.transformer=new K(this),this.dragger=new J(this),a&&(this.config=d.default(a,this.config)),this.__listenEvents()}start(){this.running=!0}stop(){this.running=!1}receive(t){}pointerDown(t,e){t||(t=this.hoverData),t&&(b.defaultLeft(t),this.updateDownData(t),this.checkPath(t,e),this.downTime=Date.now(),this.emit(A.BEFORE_DOWN,t),this.emit(A.DOWN,t),b.left(t)?(this.tapWait(),this.longPressWait(t)):b.right(t)&&(this.waitMenuTap=!0),this.dragger.setDragData(t),this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;const{downData:e}=this;e&&b.defaultLeft(t);(this.canvas.bounds.hitPoint(t)||e)&&(this.pointerMoveReal(t),e&&this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(A.BEFORE_MOVE,t,this.defaultPath),this.downData){const e=_.getDistance(this.downData,t)>this.config.pointer.dragDistance;e&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,e)}this.dragger.moving||(this.updateHoverData(t),this.checkPath(t),this.emit(A.MOVE,t),this.dragging&&!this.config.pointer.dragHover||this.pointerHover(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){const{downData:e}=this;t||(t=e),e&&(b.defaultLeft(t),this.downData=null,this.findPath(t),t.path.addList(e.path.list),this.checkPath(t),this.emit(A.BEFORE_UP,t),this.emit(A.UP,t),this.touchLeave(t),this.tap(t),this.menuTap(t),this.dragger.dragEnd(t),this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:a,scale:s,center:r}=at.getData(e);this.rotate(ht(r,a,t)),this.zoom(ot(r,s,t)),this.move(nt(r,i,t))}menu(t){this.findPath(t),this.emit(A.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(A.MENU_TAP,t)}move(t){this.transformer.move(t)}zoom(t){this.transformer.zoom(t)}rotate(t){this.transformer.rotate(t)}transformEnd(){this.transformer.transformEnd()}keyDown(t){const{code:e}=t;this.downKeyMap[e]||(this.downKeyMap[e]=!0,L.setDownCode(e),this.emit(I.HOLD,t,this.defaultPath),this.moveMode&&(this.cancelHover(),this.updateCursor())),this.emit(I.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,L.setUpCode(e),this.emit(I.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerHover(t){this.pointerOverOrOut(t),this.pointerEnterOrLeave(t)}pointerOverOrOut(t){const{path:e}=t,{overPath:i}=this;this.overPath=e,i?e.indexAt(0)!==i.indexAt(0)&&(this.emit(A.OUT,t,i),this.emit(A.OVER,t,e)):this.emit(A.OVER,t,e)}pointerEnterOrLeave(t){let{path:e}=t;this.downData&&!this.moveMode&&(e=e.clone(),this.downData.path.forEach((t=>e.add(t))));const{enterPath:i}=this;this.enterPath=e,this.emit(A.LEAVE,t,i,e),this.emit(A.ENTER,t,e,i)}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(A.LEAVE,t),this.dragger.dragging&&this.emit(S.LEAVE,t))}tap(t){const{pointer:e}=this.config,i=this.longTap(t);if(!e.tapMore&&i)return;if(!this.waitTap)return;e.tapMore&&this.emitTap(t);const a=Date.now()-this.downTime,s=[A.DOUBLE_TAP,A.DOUBLE_CLICK].some((e=>rt(t.path,e)));a<e.tapTime+50&&s?(this.tapCount++,2===this.tapCount?(this.tapWaitCancel(),this.emitDoubleTap(t)):(clearTimeout(this.tapTimer),this.tapTimer=setTimeout((()=>{e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}),e.tapTime))):e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}findPath(t,e){const{hitRadius:i,through:a}=this.config.pointer,s=this.selector.getByPoint(t,i,e||{through:a});return s.throughPath&&(t.throughPath=s.throughPath),t.path=s.path,s.path}isRootPath(t){return t&&t.path.list[0].isLeafer}checkPath(t,e){(e||this.canMove(t))&&(t.path=this.defaultPath)}canMove(t){return this.moveMode&&t&&t.path.list.every((t=>!t.isOutside))}isDrag(t){return this.dragger.getList().has(t)}isPress(t){return this.downData&&this.downData.path.has(t)}isHover(t){return this.enterPath&&this.enterPath.has(t)}isFocus(t){return this.focusData===t}cancelHover(){const{hoverData:t}=this;t&&(t.path=this.defaultPath,this.pointerHover(t))}updateDownData(t,e,i){const{downData:a}=this;!t&&a&&(t=a),t&&(this.findPath(t,e),i&&a&&t.path.addList(a.path.list),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:A.MOVE}),this.hoverData=t)}updateCursor(t){if(this.config.cursor.stop)return;if(t||(this.updateHoverData(),t=this.downData||this.hoverData),this.dragger.moving)return this.setCursor("grabbing");if(this.canMove(t))return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:a}=t;for(let t=0,s=a.length;t<s&&(e=a.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(A.TAP,t),this.emit(A.CLICK,t)}emitDoubleTap(t){this.emit(A.DOUBLE_TAP,t),this.emit(A.DOUBLE_CLICK,t)}pointerWaitCancel(){this.tapWaitCancel(),this.longPressWaitCancel()}tapWait(){clearTimeout(this.tapTimer),this.waitTap=!0}tapWaitCancel(){clearTimeout(this.tapTimer),this.waitTap=!1,this.tapCount=0}longPressWait(t){clearTimeout(this.longPressTimer),this.longPressTimer=setTimeout((()=>{this.longPressed=!0,this.emit(A.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(A.LONG_TAP,t),rt(t.path,A.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new E(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(D.RESIZE,this.__onResize,this)],t.once(y.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,a){this.running&&function(t,e,i,a){if(!i&&!e.path)return;let s;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let r=i.length-1;r>-1;r--){if(s=i.list[r],et(s,t,e,!0,a))return;s.isApp&&tt(s,t,e,!0,a)}for(let r=0,n=i.length;r<n;r++)if(s=i.list[r],s.isApp&&tt(s,t,e,!1,a),et(s,t,e,!1,a))return}catch(t){Q.error(t)}}(t,e,i,a)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}}class ct{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}ct.custom={};class gt extends O{constructor(){super(...arguments),this.pathTypeList=new v,this.imageTypeList=new v}getImageType(t,e){return this.imageTypeList.add(t),n.hitCanvas(e)}getPathType(t){return this.pathTypeList.add(t),n.hitCanvas()}clearImageType(){this.__clearLeafList(this.imageTypeList)}clearPathType(){this.__clearLeafList(this.pathTypeList)}__clearLeafList(t){t.length&&(t.forEach((t=>{t.__hitCanvas&&(t.__hitCanvas.destroy(),t.__hitCanvas=null)})),t.reset())}clear(){this.clearPathType(),this.clearImageType()}}const{toInnerRadiusPointOf:lt,copy:ut,setRadius:pt}=_,mt={};T.prototype.__hitWorld=function(t){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.boundsChanged||(this.__layout.hitCanvasChanged=!1)),this.__.hitRadius&&(ut(mt,t),pt(t=mt,this.__.hitRadius)),lt(t,this.__world,mt),!(!this.__.hitBox||!f.hitRadiusPoint(this.__layout.boxBounds,mt))||this.__hit(mt)},i.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},i.prototype.__hit=function(t){"miniapp"===P.name&&this.__drawHitPath(this.__hitCanvas);const{fill:e,hitFill:i,windingRule:a}=this.__,s=e&&"path"===i||"all"===i,r=this.__hitFill(t,a);if(s&&r)return!0;const{stroke:n,hitStroke:o,__strokeWidth:h,strokeAlign:d}=this.__,c=n&&"path"===o||"all"===o,g=2*t.radiusX;let l=g;if(c)switch(d){case"inside":if(l+=2*h,!s&&r&&this.__hitStroke(t,l))return!0;l=g;break;case"center":l+=h;break;case"outside":if(l+=2*h,!s){if(!r&&this.__hitStroke(t,l))return!0;l=g}}return!!l&&this.__hitStroke(t,l)};const vt=new i;a.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&vt.__updateHitCanvas.call(this)},a.prototype.__hitFill=function(t,e){return this.__hitCanvas?vt.__hitFill.call(this,t,e):f.hitRadiusPoint(this.__layout.boxBounds,t)},i.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},i.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},s.prototype.pick=function(t,e){return this.__layout.update(),e||(e={}),this.leafer?this.leafer.selector.getByPoint(t,e.hitRadius||0,Object.assign(Object.assign({},e),{target:this})):null};export{w as App,ct as Cursor,k as DragEvent,S as DropEvent,gt as HitCanvasManager,dt as InteractionBase,F as InteractionHelper,I as KeyEvent,L as Keyboard,V as LeaferTypeCreator,B as MoveEvent,at as MultiTouchHelper,b as PointerButton,A as PointerEvent,H as RotateEvent,N as SwipeEvent,M as UIEvent,W as ZoomEvent};
|
|
1
|
+
import{Leafer as t,State as e,UI as i,ImageManager as a,Rect as s,Group as n}from"@leafer-ui/draw";export*from"@leafer-ui/draw";import{registerUI as r,Creator as o,PropertyEvent as h,Debug as d,DataHelper as c,canvasSizeAttrs as l,LayoutEvent as g,RenderEvent as u,Event as p,EventCreator as m,registerUIEvent as _,LeafList as v,PointHelper as f,Bounds as E,BoundsHelper as D,ResizeEvent as y,LeaferEvent as O,CanvasManager as P,LeaferCanvasBase as T,tempBounds as w,Leaf as R,Matrix as C,Platform as L}from"@leafer/core";function b(t,e,i,a){var s,n=arguments.length,r=n<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,i,a);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(r=(n<3?s(r):n>3?s(e,i,r):s(e,i))||r);return n>3&&r&&Object.defineProperty(e,i,r),r}"function"==typeof SuppressedError&&SuppressedError;let x=class extends t{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,e){if(super.init(t,e),t){const{ground:e,tree:i,sky:a,editor:s}=t;e&&(this.ground=this.addLeafer(e)),(i||s)&&(this.tree=this.addLeafer(i)),(a||s)&&(this.sky=this.addLeafer(a||{type:"draw",usePartRender:!1})),s&&(this.editor=o.editor(s),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:e,view:i}=this.config;e||i===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(h.CHANGE,this.__onPropertyChange,this))}start(){super.start(),this.children.forEach((t=>t.start()))}stop(){this.children.forEach((t=>t.stop())),super.stop()}unlockLayout(){super.unlockLayout(),this.children.forEach((t=>t.unlockLayout()))}lockLayout(){super.lockLayout(),this.children.forEach((t=>t.lockLayout()))}forceRender(t){this.children.forEach((e=>e.forceRender(t)))}addLeafer(e){const i=new t(e);return this.add(i),i}add(t){if(!t.view){if(this.realCanvas&&!this.canvas.bounds)return void setTimeout((()=>this.add(t)),10);t.init(this.__getChildConfig(t.userConfig),this)}super.add(t),this.__listenChildEvents(t)}__onPropertyChange(){d.showHitView&&this.children.forEach((t=>t.forceUpdate("surface")))}__onCreated(){this.created=this.children.every((t=>t.created))}__onReady(){this.children.every((t=>t.ready))&&super.__onReady()}__onViewReady(){this.children.every((t=>t.viewReady))&&super.__onViewReady()}__onChildRenderEnd(t){this.renderer.addBlock(t.renderBounds),this.viewReady&&this.renderer.update()}__render(t,e){t.setWorld(e.matrix||this.__world),this.children.forEach((e=>t.copyWorld(e.canvas)))}__onResize(t){this.children.forEach((e=>e.resize(t))),super.__onResize(t)}__checkUpdateLayout(){this.children.forEach((t=>t.__layout.update()))}__getChildConfig(t){let e=Object.assign({},this.config);return e.hittable=e.realCanvas=void 0,t&&c.assign(e,t),this.autoLayout&&c.copyAttrs(e,this,l),e.view=this.realCanvas?void 0:this.view,e.fill=void 0,e}__listenChildEvents(t){t.once(g.END,(()=>this.__onReady())),t.once(u.START,(()=>this.__onCreated())),t.once(u.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(u.END,this.__onChildRenderEnd,this))}};x=b([r()],x);const M={},S={isHoldSpaceKey:()=>S.isHold("Space"),isHold:t=>M[t],setDownCode(t){M[t]||(M[t]=!0)},setUpCode(t){M[t]=!1}},A={LEFT:1,RIGHT:2,MIDDLE:4,defaultLeft(t){t.buttons||(t.buttons=1)},left:t=>1===t.buttons,right:t=>2===t.buttons,middle:t=>4===t.buttons};class k extends p{get spaceKey(){return S.isHoldSpaceKey()}get left(){return A.left(this)}get right(){return A.right(this)}get middle(){return A.middle(this)}constructor(t){super(t.type),this.bubbles=!0,Object.assign(this,t)}getPage(){return this.current.getPagePoint(this)}getInner(t){return t||(t=this.current),t.getInnerPoint(this)}getLocal(t){return t||(t=this.current),t.getLocalPoint(this)}static changeName(t,e){m.changeName(t,e)}}let H=class extends k{};H.POINTER="pointer",H.BEFORE_DOWN="pointer.before_down",H.BEFORE_MOVE="pointer.before_move",H.BEFORE_UP="pointer.before_up",H.DOWN="pointer.down",H.MOVE="pointer.move",H.UP="pointer.up",H.OVER="pointer.over",H.OUT="pointer.out",H.ENTER="pointer.enter",H.LEAVE="pointer.leave",H.TAP="tap",H.DOUBLE_TAP="double_tap",H.CLICK="click",H.DOUBLE_CLICK="double_click",H.LONG_PRESS="long_press",H.LONG_TAP="long_tap",H.MENU="pointer.menu",H.MENU_TAP="pointer.menu_tap",H=b([_()],H);const B={};let W=class extends H{static setList(t){this.list=t instanceof v?t:new v(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(B,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(B,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(B,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){B.x=t?this.totalX:this.moveX,B.y=t?this.totalY:this.moveY}};W.BEFORE_DRAG="drag.before_drag",W.START="drag.start",W.DRAG="drag",W.END="drag.end",W.OVER="drag.over",W.OUT="drag.out",W.ENTER="drag.enter",W.LEAVE="drag.leave",W=b([_()],W);let N=class extends H{static setList(t){W.setList(t)}static setData(t){W.setData(t)}};N.DROP="drop",N=b([_()],N);let z=class extends W{};z.BEFORE_MOVE="move.before_move",z.START="move.start",z.MOVE="move",z.END="move.end",z=b([_()],z);let F=class extends k{};F.BEFORE_ROTATE="rotate.before_rotate",F.START="rotate.start",F.ROTATE="rotate",F.END="rotate.end",F=b([_()],F);let I=class extends W{};I.SWIPE="swipe",I.LEFT="swipe.left",I.RIGHT="swipe.right",I.UP="swipe.up",I.DOWN="swipe.down",I=b([_()],I);let V=class extends k{};V.BEFORE_ZOOM="zoom.before_zoom",V.START="zoom.start",V.ZOOM="zoom",V.END="zoom.end",V=b([_()],V);let j=class extends k{};function K(t){t.isApp||t.__eventIds.push(t.on_(z.BEFORE_MOVE,(e=>{const{x:i,y:a}=t.getValidMove(e.moveX,e.moveY);(i||a)&&t.zoomLayer.move(i,a)})),t.on_(V.BEFORE_ZOOM,(e=>{const{zoomLayer:i}=t,a=t.getValidScale(e.scale);1!==a&&(f.scaleOf(i,e,a),i.scale=i.__.scaleX*a)})))}j.DOWN="key.down",j.HOLD="key.hold",j.UP="key.up",j=b([_()],j);const U=d.get("LeaferTypeCreator"),X={list:{},register(t,e){Y[t]?U.repeat(t):Y[t]=e},run(t,e){const i=Y[t];i?i(e):U.error("no",t)}},{list:Y,register:G}=X;G("draw",(()=>{})),G("design",K),G("document",(function(t){K(t),t.config.move.scroll="limit",t.config.zoom.min=1})),t.prototype.initType=function(t){X.run(t,this)},t.prototype.getValidMove=function(t,e){const{scroll:i,disabled:a}=this.app.config.move;if(i&&(Math.abs(t)>Math.abs(e)?e=0:t=0,"limit"===i)){const{x:i,y:a,width:s,height:n}=new E(this.__world).addPoint(this.zoomLayer),r=i+s-this.width,o=a+n-this.height;i>=0&&r<=0?t=0:t>0?i+t>0&&(t=-i):t<0&&r+t<0&&(t=-r),a>=0&&o<=0?e=0:e>0?a+e>0&&(e=-a):e<0&&o+e<0&&(e=-o)}return{x:a?0:t,y:a?0:e}},t.prototype.getValidScale=function(t){const{scaleX:e}=this.zoomLayer.__,{min:i,max:a,disabled:s}=this.app.config.zoom,n=Math.abs(e*t);return n<i?t=i/e:n>a&&(t=a/e),s?1:t};class Z{constructor(t){this.interaction=t}move(t){const{interaction:e}=this;if(!this.moveData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.moveData=Object.assign(Object.assign({},t),{moveX:0,moveY:0}),e.cancelHover(),e.emit(z.START,this.moveData)}t.path=this.moveData.path,e.emit(z.BEFORE_MOVE,t),e.emit(z.MOVE,t),this.transformEndWait()}zoom(t){const{interaction:e}=this;if(!this.zoomData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.zoomData=Object.assign(Object.assign({},t),{scale:1}),e.cancelHover(),e.emit(V.START,this.zoomData)}t.path=this.zoomData.path,e.emit(V.BEFORE_ZOOM,t),e.emit(V.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:e}=this;if(!this.rotateData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.rotateData=Object.assign(Object.assign({},t),{rotation:0}),e.cancelHover(),e.emit(F.START,this.rotateData)}t.path=this.rotateData.path,e.emit(F.BEFORE_ROTATE,t),e.emit(F.ROTATE,t),this.transformEndWait()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout((()=>{this.transformEnd()}),this.interaction.config.pointer.transformTime)}transformEnd(){this.moveEnd(),this.zoomEnd(),this.rotateEnd()}moveEnd(){this.moveData&&(this.interaction.emit(z.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(V.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(F.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const q={getMoveEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,moveX:e.x,moveY:e.y}),getRotateEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,rotation:e}),getZoomEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,scale:e}),getDragEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:i.x,y:i.y,moveX:i.x-e.x,moveY:i.y-e.y,totalX:i.x-t.x,totalY:i.y-t.y}),getDropEventData:(t,e,i)=>Object.assign(Object.assign({},t),{list:e,data:i}),getSwipeDirection:t=>t<-45&&t>-135?I.UP:t>45&&t<135?I.DOWN:t<=45&&t>=-45?I.RIGHT:I.LEFT,getSwipeEventData:(t,e,i)=>Object.assign(Object.assign({},i),{moveX:e.moveX,moveY:e.moveY,totalX:i.x-t.x,totalY:i.y-t.y,type:J.getSwipeDirection(f.getAngle(t,i))}),getBase(t){const e=1===t.button?4:t.button;return{altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,buttons:void 0===t.buttons?1:0===t.buttons?e:t.buttons,origin:t}},pathHasEventType(t,e){const{list:i}=t;for(let t=0,a=i.length;t<a;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,e){const i=new v,{list:a}=t;for(let t=0,s=a.length;t<s;t++)a[t].hasEvent(e)&&i.add(a[t]);return i}},J=q,Q=new v,{getDragEventData:$,getDropEventData:tt,getSwipeEventData:et}=q;class it{constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=$(t,t,t),this.canAnimate=this.canDragOut=!0}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?Q:W.list||this.dragableList||Q}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();!this.moving&&e&&(this.moving=i.canMove(this.downData)||i.isHoldRightKey||i.isMobileDragEmpty)&&i.emit(z.START,this.dragData),this.moving||this.dragStart(t,e),this.drag(t)}dragStart(t,e){this.dragging||(this.dragging=e&&A.left(t),this.dragging&&(this.interaction.emit(W.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let e;for(let i=0,a=t.length;i<a;i++)if(e=t.list[i],(e.__.draggable||e.__.editable)&&e.__.hitSelf&&!e.__.locked){this.dragableList=new v(e);break}}drag(t){const{interaction:e,dragData:i,downData:a}=this,{path:s,throughPath:n}=a;this.dragData=$(a,i,t),n&&(this.dragData.throughPath=n),this.dragData.path=s,this.moving?(e.emit(z.BEFORE_MOVE,this.dragData),e.emit(z.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(W.BEFORE_DRAG,this.dragData),e.emit(W.DRAG,this.dragData))}dragReal(){const{running:t}=this.interaction,e=this.getList();if(e.length&&t){const{moveX:t,moveY:i}=this.dragData;e.forEach((e=>e.draggable&&e.moveWorld(t,i)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:a}=t;this.dragOverPath=a,i?a.indexAt(0)!==i.indexAt(0)&&(e.emit(W.OUT,t,i),e.emit(W.OVER,t,a)):e.emit(W.OVER,t,a)}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:a}=t;e.emit(W.LEAVE,t,i,a),e.emit(W.ENTER,t,a,i),this.dragEnterPath=a}dragEnd(t,e){if(!this.dragging&&!this.moving)return;const{moveX:i,moveY:a}=this.dragData;this.interaction.config.move.dragAnimate&&this.canAnimate&&this.moving&&(Math.abs(i)>1||Math.abs(a)>1)?(t=Object.assign({},t),e=.9*(e||("touch"===t.pointerType?2:1)),f.move(t,i*e,a*e),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:a}=this;t||(t=a);const{path:s,throughPath:n}=i,r=$(i,t,t);if(n&&(r.throughPath=n),r.path=s,this.moving&&(this.moving=!1,e.emit(z.END,r)),this.dragging){const s=this.getList();this.dragging=!1,e.emit(W.END,r),this.swipe(t,i,a,r),this.drop(t,s,this.dragEnterPath)}this.autoMoveCancel(),this.dragReset(),this.animate(null,"off")}animate(t,e){const i=t||this.animateWait;i&&this.interaction.target.nextRender(i,null,e),this.animateWait=t}swipe(t,e,i,a){const{interaction:s}=this;if(f.getDistance(e,t)>s.config.pointer.swipeDistance){const t=et(e,i,a);this.interaction.emit(t.type,t)}}drop(t,e,i){const a=tt(t,e,W.data);a.path=i,this.interaction.emit(N.DROP,a),this.interaction.emit(W.LEAVE,t,i)}dragReset(){W.list=W.data=this.dragableList=this.dragData=this.downData=this.dragOverPath=this.dragEnterPath=null}checkDragOut(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)}autoMoveOnDragOut(t){const{interaction:e,downData:i,canDragOut:a}=this,{autoDistance:s,dragOut:n}=e.config.move;if(!n||!a||!s)return;const r=e.shrinkCanvasBounds,{x:o,y:h}=r,d=D.maxX(r),c=D.maxY(r),l=t.x<o?s:d<t.x?-s:0,g=t.y<h?s:c<t.y?-s:0;let u=0,p=0;this.autoMoveTimer=setInterval((()=>{u+=l,p+=g,f.move(i,l,g),f.move(this.dragData,l,g),e.move(Object.assign(Object.assign({},t),{moveX:l,moveY:g,totalX:u,totalY:p})),e.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const at=d.get("emit");const st=["move","zoom","rotate","key"];function nt(t,e,i,a,s){if(st.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!ot(t,s)){let n;for(let r=0,o=t.children.length;r<o;r++)n=t.children[r],!i.path.has(n)&&n.__.hittable&&rt(n,e,i,a,s)}}function rt(t,i,a,s,n){if(t.destroyed)return!0;if(t.__.hitSelf&&!ot(t,n)&&(e.updateEventStyle&&e.updateEventStyle(t,i),t.hasEvent(i,s))){a.phase=s?1:t===a.target?2:3;const e=m.get(i,a);if(t.emitEvent(e,s),e.isStop)return!0}return!1}function ot(t,e){return e&&e.has(t)}const ht={getData(t){const e=t[0],i=t[1],a=f.getCenter(e.from,i.from),s=f.getCenter(e.to,i.to),n={x:s.x-a.x,y:s.y-a.y},r=f.getDistance(e.from,i.from);return{move:n,scale:f.getDistance(e.to,i.to)/r,angle:f.getRotation(e.from,i.from,e.to,i.to),center:s}}},dt={wheel:{zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,tapTime:120,longPressTime:800,transformTime:500,hover:!0,dragHover:!0,dragDistance:2,swipeDistance:20,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:ct,getMoveEventData:lt,getZoomEventData:gt,getRotateEventData:ut}=q;class pt{get dragging(){return this.dragger.dragging}get moveMode(){return this.config.move.drag||this.isHoldSpaceKey||this.isHoldMiddleKey||this.isHoldRightKey&&this.dragger.moving||this.isDragEmpty}get isDragEmpty(){return this.config.move.dragEmpty&&this.isRootPath(this.hoverData)&&(!this.downData||this.isRootPath(this.downData))}get isMobileDragEmpty(){return this.config.move.dragEmpty&&!this.config.pointer.hover&&this.downData&&this.isTreePath(this.downData)}get isHoldMiddleKey(){return this.config.move.holdMiddleKey&&this.downData&&A.middle(this.downData)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&A.right(this.downData)}get isHoldSpaceKey(){return this.config.move.holdSpaceKey&&S.isHoldSpaceKey()}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,e,i,a){this.config=dt,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=e,this.selector=i,this.defaultPath=new v(t),this.transformer=new Z(this),this.dragger=new it(this),a&&(this.config=c.default(a,this.config)),this.__listenEvents()}start(){this.running=!0}stop(){this.running=!1}receive(t){}pointerDown(t,e){t||(t=this.hoverData),t&&(A.defaultLeft(t),this.updateDownData(t),this.checkPath(t,e),this.downTime=Date.now(),this.emit(H.BEFORE_DOWN,t),this.emit(H.DOWN,t),A.left(t)?(this.tapWait(),this.longPressWait(t)):A.right(t)&&(this.waitMenuTap=!0),this.dragger.setDragData(t),this.isHoldRightKey||this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;const{downData:e}=this;e&&A.defaultLeft(t);(this.canvas.bounds.hitPoint(t)||e)&&(this.pointerMoveReal(t),e&&this.dragger.checkDragOut(t))}pointerMoveReal(t){const{dragHover:e,dragDistance:i}=this.config.pointer;if(this.emit(H.BEFORE_MOVE,t,this.defaultPath),this.downData){const e=f.getDistance(this.downData,t)>i;e&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,e)}this.dragger.moving||(this.updateHoverData(t),this.checkPath(t),this.emit(H.MOVE,t),this.dragging&&!e||this.pointerHover(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){const{downData:e}=this;if(t||(t=e),!e)return;A.defaultLeft(t),this.findPath(t);const i=Object.assign(Object.assign({},t),{path:t.path.clone()});t.path.addList(e.path.list),this.checkPath(t),this.downData=null,this.emit(H.BEFORE_UP,t),this.emit(H.UP,t),this.touchLeave(t),t.isCancel||(this.tap(t),this.menuTap(t)),this.dragger.dragEnd(t),this.updateCursor(i)}pointerCancel(){const t=Object.assign({},this.dragger.dragData);t.isCancel=!0,this.pointerUp(t)}multiTouch(t,e){const{move:i,angle:a,scale:s,center:n}=ht.getData(e);this.rotate(ut(n,a,t)),this.zoom(gt(n,s,t)),this.move(lt(n,i,t))}menu(t){this.findPath(t),this.emit(H.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(H.MENU_TAP,t)}move(t){this.transformer.move(t)}zoom(t){this.transformer.zoom(t)}rotate(t){this.transformer.rotate(t)}transformEnd(){this.transformer.transformEnd()}keyDown(t){const{code:e}=t;this.downKeyMap[e]||(this.downKeyMap[e]=!0,S.setDownCode(e),this.emit(j.HOLD,t,this.defaultPath),this.moveMode&&(this.cancelHover(),this.updateCursor())),this.emit(j.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,S.setUpCode(e),this.emit(j.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerHover(t){this.config.pointer.hover&&(this.pointerOverOrOut(t),this.pointerEnterOrLeave(t))}pointerOverOrOut(t){const{path:e}=t,{overPath:i}=this;this.overPath=e,i?e.indexAt(0)!==i.indexAt(0)&&(this.emit(H.OUT,t,i),this.emit(H.OVER,t,e)):this.emit(H.OVER,t,e)}pointerEnterOrLeave(t){let{path:e}=t;this.downData&&!this.moveMode&&(e=e.clone(),this.downData.path.forEach((t=>e.add(t))));const{enterPath:i}=this;this.enterPath=e,this.emit(H.LEAVE,t,i,e),this.emit(H.ENTER,t,e,i)}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(H.LEAVE,t),this.dragger.dragging&&this.emit(N.LEAVE,t))}tap(t){const{pointer:e}=this.config,i=this.longTap(t);if(!e.tapMore&&i)return;if(!this.waitTap)return;e.tapMore&&this.emitTap(t);const a=Date.now()-this.downTime,s=[H.DOUBLE_TAP,H.DOUBLE_CLICK].some((e=>ct(t.path,e)));a<e.tapTime+50&&s?(this.tapCount++,2===this.tapCount?(this.tapWaitCancel(),this.emitDoubleTap(t)):(clearTimeout(this.tapTimer),this.tapTimer=setTimeout((()=>{e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}),e.tapTime))):e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}findPath(t,e){const{hitRadius:i,through:a}=this.config.pointer,s=this.selector.getByPoint(t,i,e||{through:a});return s.throughPath&&(t.throughPath=s.throughPath),t.path=s.path,s.path}isRootPath(t){return t&&t.path.list[0].isLeafer}isTreePath(t){const e=this.target.app;return!(!e||!e.isApp)&&(e.editor&&!t.path.has(e.editor)&&t.path.has(e.tree))}checkPath(t,e){(e||this.canMove(t))&&(t.path=this.defaultPath)}canMove(t){return this.moveMode&&t&&t.path.list.every((t=>!t.isOutside))}isDrag(t){return this.dragger.getList().has(t)}isPress(t){return this.downData&&this.downData.path.has(t)}isHover(t){return this.enterPath&&this.enterPath.has(t)}isFocus(t){return this.focusData===t}cancelHover(){const{hoverData:t}=this;t&&(t.path=this.defaultPath,this.pointerHover(t))}updateDownData(t,e,i){const{downData:a}=this;!t&&a&&(t=a),t&&(this.findPath(t,e),i&&a&&t.path.addList(a.path.list),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:H.MOVE}),this.hoverData=t)}updateCursor(t){if(this.config.cursor.stop||!this.config.pointer.hover)return;if(t||(this.updateHoverData(),t=this.downData||this.hoverData),this.dragger.moving)return this.setCursor("grabbing");if(this.canMove(t))return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:a}=t;for(let t=0,s=a.length;t<s&&(e=a.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(H.TAP,t),this.emit(H.CLICK,t)}emitDoubleTap(t){this.emit(H.DOUBLE_TAP,t),this.emit(H.DOUBLE_CLICK,t)}pointerWaitCancel(){this.tapWaitCancel(),this.longPressWaitCancel()}tapWait(){clearTimeout(this.tapTimer),this.waitTap=!0}tapWaitCancel(){clearTimeout(this.tapTimer),this.waitTap=!1,this.tapCount=0}longPressWait(t){clearTimeout(this.longPressTimer),this.longPressTimer=setTimeout((()=>{this.longPressed=!0,this.emit(H.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(H.LONG_TAP,t),ct(t.path,H.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new E(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(y.RESIZE,this.__onResize,this)],t.once(O.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,a){this.running&&function(t,e,i,a){if(!i&&!e.path)return;let s;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let n=i.length-1;n>-1;n--){if(s=i.list[n],rt(s,t,e,!0,a))return;s.isApp&&nt(s,t,e,!0,a)}for(let n=0,r=i.length;n<r;n++)if(s=i.list[n],s.isApp&&nt(s,t,e,!1,a),rt(s,t,e,!1,a))return}catch(t){at.error(t)}}(t,e,i,a)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}}class mt{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}mt.custom={};class _t extends P{constructor(){super(...arguments),this.maxTotal=1e3,this.pathList=new v,this.pixelList=new v}getPixelType(t,e){return this.__autoClear(),this.pixelList.add(t),o.hitCanvas(e)}getPathType(t){return this.__autoClear(),this.pathList.add(t),o.hitCanvas()}clearImageType(){this.__clearLeafList(this.pixelList)}clearPathType(){this.__clearLeafList(this.pathList)}__clearLeafList(t){t.length&&(t.forEach((t=>{t.__hitCanvas&&(t.__hitCanvas.destroy(),t.__hitCanvas=null)})),t.reset())}__autoClear(){this.pathList.length+this.pixelList.length>this.maxTotal&&this.clear()}clear(){this.clearPathType(),this.clearImageType()}}const vt=T.prototype;vt.hitFill=function(t,e){return e?this.context.isPointInPath(t.x,t.y,e):this.context.isPointInPath(t.x,t.y)},vt.hitStroke=function(t,e){return this.strokeWidth=e,this.context.isPointInStroke(t.x,t.y)},vt.hitPixel=function(t,e,i=1){let{x:a,y:s,radiusX:n,radiusY:r}=t;e&&(a-=e.x,s-=e.y),w.set(a-n,s-r,2*n,2*r).scale(i).ceil();const{data:o}=this.context.getImageData(w.x,w.y,w.width,w.height);for(let t=0,e=o.length;t<e;t+=4)if(o[t+3]>0)return!0;return o[3]>0};const{toInnerRadiusPointOf:ft,copy:Et,setRadius:Dt}=f,yt={},Ot=R.prototype;Ot.__hitWorld=function(t){this.__.hitRadius&&(Et(yt,t),Dt(t=yt,this.__.hitRadius)),ft(t,this.__world,yt);const{width:e,height:i}=this.__world,a=e<10&&i<10;if(this.__.hitBox||a){if(D.hitRadiusPoint(this.__layout.boxBounds,yt))return!0;if(a)return!1}return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.boundsChanged||(this.__layout.hitCanvasChanged=!1)),this.__hit(yt)},Ot.__hitFill=function(t){var e;return null===(e=this.__hitCanvas)||void 0===e?void 0:e.hitFill(t,this.__.windingRule)},Ot.__hitStroke=function(t,e){var i;return null===(i=this.__hitCanvas)||void 0===i?void 0:i.hitStroke(t,e)},Ot.__hitPixel=function(t){var e;return null===(e=this.__hitCanvas)||void 0===e?void 0:e.hitPixel(t,this.__layout.renderBounds,this.__hitCanvas.hitScale)},Ot.__drawHitPath=function(t){t&&this.__drawRenderPath(t)};const Pt=new C,Tt=i.prototype;Tt.__updateHitCanvas=function(){const t=this.__,{hitCanvasManager:e}=this.leafer,i=t.__pixelFill&&"pixel"===t.hitFill,s=t.__pixelStroke&&"pixel"===t.hitStroke,n=i||s;this.__hitCanvas||(this.__hitCanvas=n?e.getPixelType(this,{contextSettings:{willReadFrequently:!0}}):e.getPathType(this));const r=this.__hitCanvas;if(n){const{renderBounds:e}=this.__layout,n=L.image.hitCanvasSize,o=r.hitScale=w.set(0,0,n,n).getFitMatrix(e,.5).a,{x:h,y:d,width:c,height:l}=w.set(e).scale(o);r.resize({width:c,height:l,pixelRatio:1}),r.clear(),a.patternLocked=!0,this.__renderShape(r,{matrix:Pt.setWith(this.__world).scaleWith(1/o).invertWith().translate(-h,-d)},!i,!s),a.patternLocked=!1,r.resetTransform(),t.__isHitPixel=!0}else t.__isHitPixel&&(t.__isHitPixel=!1);this.__drawHitPath(r),r.setStrokeOptions(t)},Tt.__hit=function(t){"miniapp"===L.name&&this.__drawHitPath(this.__hitCanvas);const e=this.__;if(e.__isHitPixel&&this.__hitPixel(t))return!0;const{hitFill:i}=e,a=e.fill&&"path"==i||"all"===i;if(a&&this.__hitFill(t))return!0;const{hitStroke:s,__strokeWidth:n}=e,r=e.stroke&&"path"==s||"all"===s;if(!a&&!r)return!1;const o=2*t.radiusX;let h=o;if(r)switch(e.strokeAlign){case"inside":if(h+=2*n,!a&&this.__hitFill(t)&&this.__hitStroke(t,h))return!0;h=o;break;case"center":h+=n;break;case"outside":if(h+=2*n,!a){if(!this.__hitFill(t)&&this.__hitStroke(t,h))return!0;h=o}}return!!h&&this.__hitStroke(t,h)};const wt=new i;s.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&wt.__updateHitCanvas.call(this)},s.prototype.__hitFill=function(t){return this.__hitCanvas?wt.__hitFill.call(this,t):D.hitRadiusPoint(this.__layout.boxBounds,t)},i.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},i.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},n.prototype.pick=function(t,e){return this.__layout.update(),e||(e={}),this.leafer?this.leafer.selector.getByPoint(t,e.hitRadius||0,Object.assign(Object.assign({},e),{target:this})):null};export{x as App,mt as Cursor,W as DragEvent,N as DropEvent,_t as HitCanvasManager,pt as InteractionBase,q as InteractionHelper,j as KeyEvent,S as Keyboard,X as LeaferTypeCreator,z as MoveEvent,ht as MultiTouchHelper,A as PointerButton,H as PointerEvent,F as RotateEvent,I as SwipeEvent,k as UIEvent,V as ZoomEvent};
|