@leafer-ui/core 1.0.0-rc.16 → 1.0.0-rc.18
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 +114 -77
- package/lib/core.esm.js +115 -78
- package/lib/core.esm.min.js +1 -1
- package/lib/core.min.cjs +1 -1
- package/package.json +7 -7
package/lib/core.cjs
CHANGED
|
@@ -358,17 +358,21 @@ exports.KeyEvent = __decorate([
|
|
|
358
358
|
function design(leafer) {
|
|
359
359
|
if (leafer.isApp)
|
|
360
360
|
return;
|
|
361
|
-
leafer.__eventIds.push(leafer.on_(exports.MoveEvent.BEFORE_MOVE, (e) =>
|
|
361
|
+
leafer.__eventIds.push(leafer.on_(exports.MoveEvent.BEFORE_MOVE, (e) => {
|
|
362
|
+
let { moveX, moveY } = e;
|
|
363
|
+
if (leafer.config.move.scroll) {
|
|
364
|
+
if (Math.abs(moveX) > Math.abs(moveY))
|
|
365
|
+
moveY = 0;
|
|
366
|
+
else
|
|
367
|
+
moveX = 0;
|
|
368
|
+
}
|
|
369
|
+
leafer.zoomLayer.move(moveX, moveY);
|
|
370
|
+
}), leafer.on_(exports.ZoomEvent.BEFORE_ZOOM, (e) => {
|
|
362
371
|
const { zoomLayer } = leafer;
|
|
363
|
-
const
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
scale =
|
|
367
|
-
else if (absScale > max)
|
|
368
|
-
scale = max / scaleX;
|
|
369
|
-
if (scale !== 1) {
|
|
370
|
-
core.PointHelper.scaleOf(zoomLayer, e, scale);
|
|
371
|
-
zoomLayer.scale = scaleX * scale;
|
|
372
|
+
const changeScale = leafer.validScale(e.scale);
|
|
373
|
+
if (changeScale !== 1) {
|
|
374
|
+
core.PointHelper.scaleOf(zoomLayer, e, changeScale);
|
|
375
|
+
zoomLayer.scale = zoomLayer.__.scaleX * changeScale;
|
|
372
376
|
}
|
|
373
377
|
}));
|
|
374
378
|
}
|
|
@@ -412,6 +416,7 @@ class Transformer {
|
|
|
412
416
|
const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
|
|
413
417
|
data.path = path;
|
|
414
418
|
this.moveData = Object.assign(Object.assign({}, data), { moveX: 0, moveY: 0 });
|
|
419
|
+
interaction.cancelHover();
|
|
415
420
|
interaction.emit(exports.MoveEvent.START, this.moveData);
|
|
416
421
|
}
|
|
417
422
|
data.path = this.moveData.path;
|
|
@@ -425,6 +430,7 @@ class Transformer {
|
|
|
425
430
|
const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
|
|
426
431
|
data.path = path;
|
|
427
432
|
this.zoomData = Object.assign(Object.assign({}, data), { scale: 1 });
|
|
433
|
+
interaction.cancelHover();
|
|
428
434
|
interaction.emit(exports.ZoomEvent.START, this.zoomData);
|
|
429
435
|
}
|
|
430
436
|
data.path = this.zoomData.path;
|
|
@@ -438,6 +444,7 @@ class Transformer {
|
|
|
438
444
|
const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
|
|
439
445
|
data.path = path;
|
|
440
446
|
this.rotateData = Object.assign(Object.assign({}, data), { rotation: 0 });
|
|
447
|
+
interaction.cancelHover();
|
|
441
448
|
interaction.emit(exports.RotateEvent.START, this.rotateData);
|
|
442
449
|
}
|
|
443
450
|
data.path = this.rotateData.path;
|
|
@@ -555,6 +562,7 @@ class Dragger {
|
|
|
555
562
|
this.dragEndReal();
|
|
556
563
|
this.downData = this.interaction.downData;
|
|
557
564
|
this.dragData = getDragEventData(data, data, data);
|
|
565
|
+
this.canAnimate = this.canDragOut = true;
|
|
558
566
|
}
|
|
559
567
|
getList() {
|
|
560
568
|
const { proxy } = this.interaction.selector;
|
|
@@ -567,9 +575,6 @@ class Dragger {
|
|
|
567
575
|
interaction.pointerCancel();
|
|
568
576
|
return;
|
|
569
577
|
}
|
|
570
|
-
else {
|
|
571
|
-
this.canAnimate = true;
|
|
572
|
-
}
|
|
573
578
|
if (!this.moving && canDrag) {
|
|
574
579
|
if (this.moving = interaction.moveMode || interaction.isHoldRightKey)
|
|
575
580
|
interaction.emit(exports.MoveEvent.START, this.dragData);
|
|
@@ -620,13 +625,14 @@ class Dragger {
|
|
|
620
625
|
const list = this.getList();
|
|
621
626
|
if (list.length && running) {
|
|
622
627
|
const { moveX, moveY } = this.dragData;
|
|
623
|
-
list.forEach(leaf =>
|
|
628
|
+
list.forEach(leaf => leaf.moveWorld(moveX, moveY));
|
|
624
629
|
}
|
|
625
630
|
}
|
|
626
631
|
dragOverOrOut(data) {
|
|
627
632
|
const { interaction } = this;
|
|
628
633
|
const { dragOverPath } = this;
|
|
629
634
|
const { path } = data;
|
|
635
|
+
this.dragOverPath = path;
|
|
630
636
|
if (dragOverPath) {
|
|
631
637
|
if (path.indexAt(0) !== dragOverPath.indexAt(0)) {
|
|
632
638
|
interaction.emit(exports.DragEvent.OUT, data, dragOverPath);
|
|
@@ -636,7 +642,6 @@ class Dragger {
|
|
|
636
642
|
else {
|
|
637
643
|
interaction.emit(exports.DragEvent.OVER, data, path);
|
|
638
644
|
}
|
|
639
|
-
this.dragOverPath = path;
|
|
640
645
|
}
|
|
641
646
|
dragEnterOrLeave(data) {
|
|
642
647
|
const { interaction } = this;
|
|
@@ -650,7 +655,7 @@ class Dragger {
|
|
|
650
655
|
if (!this.dragData)
|
|
651
656
|
return;
|
|
652
657
|
const { moveX, moveY } = this.dragData;
|
|
653
|
-
if (this.canAnimate && this.moving && (Math.abs(moveX) > 1 || Math.abs(moveY) > 1)) {
|
|
658
|
+
if (this.interaction.config.move.dragAnimate && this.canAnimate && this.moving && (Math.abs(moveX) > 1 || Math.abs(moveY) > 1)) {
|
|
654
659
|
data = Object.assign({}, data);
|
|
655
660
|
speed = (speed || (data.pointerType === 'touch' ? 2 : 1)) * 0.9;
|
|
656
661
|
core.PointHelper.move(data, moveX * speed, moveY * speed);
|
|
@@ -684,12 +689,11 @@ class Dragger {
|
|
|
684
689
|
animate(func, off) {
|
|
685
690
|
const animateWait = func || this.animateWait;
|
|
686
691
|
if (animateWait)
|
|
687
|
-
this.interaction.target.nextRender(animateWait, off);
|
|
692
|
+
this.interaction.target.nextRender(animateWait, null, off);
|
|
688
693
|
this.animateWait = func;
|
|
689
694
|
}
|
|
690
695
|
swipe(data, endDragData) {
|
|
691
|
-
const { interaction } = this;
|
|
692
|
-
const { downData } = interaction;
|
|
696
|
+
const { interaction, downData } = this;
|
|
693
697
|
if (core.PointHelper.getDistance(downData, data) > interaction.config.pointer.swipeDistance) {
|
|
694
698
|
const swipeData = getSwipeEventData(downData, this.dragData, endDragData);
|
|
695
699
|
this.interaction.emit(swipeData.type, swipeData);
|
|
@@ -712,9 +716,9 @@ class Dragger {
|
|
|
712
716
|
this.autoMoveOnDragOut(data);
|
|
713
717
|
}
|
|
714
718
|
autoMoveOnDragOut(data) {
|
|
715
|
-
const { interaction, downData } = this;
|
|
719
|
+
const { interaction, downData, canDragOut } = this;
|
|
716
720
|
const { autoDistance, dragOut } = interaction.config.move;
|
|
717
|
-
if (!dragOut || !autoDistance)
|
|
721
|
+
if (!dragOut || !canDragOut || !autoDistance)
|
|
718
722
|
return;
|
|
719
723
|
const bounds = interaction.shrinkCanvasBounds;
|
|
720
724
|
const { x, y } = bounds;
|
|
@@ -790,12 +794,16 @@ function emitAppChildren(leaf, type, data, capture, excludePath) {
|
|
|
790
794
|
function emitEvent(leaf, type, data, capture, excludePath) {
|
|
791
795
|
if (leaf.destroyed)
|
|
792
796
|
return true;
|
|
793
|
-
if (leaf.__.hitSelf &&
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
leaf.
|
|
797
|
-
|
|
798
|
-
|
|
797
|
+
if (leaf.__.hitSelf && !exclude(leaf, excludePath)) {
|
|
798
|
+
if (draw$1.State.updateEventStyle)
|
|
799
|
+
draw$1.State.updateEventStyle(leaf, type);
|
|
800
|
+
if (leaf.hasEvent(type, capture)) {
|
|
801
|
+
data.phase = capture ? 1 : ((leaf === data.target) ? 2 : 3);
|
|
802
|
+
const event = core.EventCreator.get(type, data);
|
|
803
|
+
leaf.emitEvent(event, capture);
|
|
804
|
+
if (event.isStop)
|
|
805
|
+
return true;
|
|
806
|
+
}
|
|
799
807
|
}
|
|
800
808
|
return false;
|
|
801
809
|
}
|
|
@@ -820,7 +828,6 @@ const MultiTouchHelper = {
|
|
|
820
828
|
|
|
821
829
|
const config = {
|
|
822
830
|
wheel: {
|
|
823
|
-
zoomMode: false,
|
|
824
831
|
zoomSpeed: 0.5,
|
|
825
832
|
moveSpeed: 0.5,
|
|
826
833
|
rotateSpeed: 0.5,
|
|
@@ -829,14 +836,12 @@ const config = {
|
|
|
829
836
|
},
|
|
830
837
|
pointer: {
|
|
831
838
|
hitRadius: 5,
|
|
832
|
-
through: false,
|
|
833
839
|
tapTime: 120,
|
|
834
840
|
longPressTime: 800,
|
|
835
841
|
transformTime: 500,
|
|
836
842
|
dragHover: true,
|
|
837
843
|
dragDistance: 2,
|
|
838
844
|
swipeDistance: 20,
|
|
839
|
-
ignoreMove: false,
|
|
840
845
|
preventDefaultMenu: true
|
|
841
846
|
},
|
|
842
847
|
cursor: {}
|
|
@@ -879,17 +884,19 @@ class InteractionBase {
|
|
|
879
884
|
this.updateDownData(data);
|
|
880
885
|
if (useDefaultPath)
|
|
881
886
|
data.path = this.defaultPath;
|
|
882
|
-
this.emit(exports.PointerEvent.BEFORE_DOWN, data);
|
|
883
|
-
this.emit(exports.PointerEvent.DOWN, data);
|
|
884
887
|
this.downTime = Date.now();
|
|
885
|
-
this.
|
|
886
|
-
|
|
887
|
-
this.
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
888
|
+
if (this.downed = !this.moveMode) {
|
|
889
|
+
this.emit(exports.PointerEvent.BEFORE_DOWN, data);
|
|
890
|
+
this.emit(exports.PointerEvent.DOWN, data);
|
|
891
|
+
if (PointerButton.left(data)) {
|
|
892
|
+
this.tapWait();
|
|
893
|
+
this.longPressWait(data);
|
|
894
|
+
}
|
|
895
|
+
else if (PointerButton.right(data)) {
|
|
896
|
+
this.waitMenuTap = true;
|
|
897
|
+
}
|
|
892
898
|
}
|
|
899
|
+
this.dragger.setDragData(data);
|
|
893
900
|
this.updateCursor(data);
|
|
894
901
|
}
|
|
895
902
|
pointerMove(data) {
|
|
@@ -897,14 +904,18 @@ class InteractionBase {
|
|
|
897
904
|
data = this.hoverData;
|
|
898
905
|
if (!data)
|
|
899
906
|
return;
|
|
900
|
-
|
|
907
|
+
const { downData } = this;
|
|
908
|
+
if (downData)
|
|
901
909
|
PointerButton.defaultLeft(data);
|
|
902
910
|
const hit = this.canvas.bounds.hitPoint(data);
|
|
903
|
-
if (hit ||
|
|
904
|
-
if (hit && !
|
|
911
|
+
if (hit || downData) {
|
|
912
|
+
if (hit && !downData && PointerButton.left(data)) {
|
|
905
913
|
this.pointerDown(data, true);
|
|
914
|
+
this.dragger.canDragOut = false;
|
|
915
|
+
}
|
|
906
916
|
this.pointerMoveReal(data);
|
|
907
|
-
|
|
917
|
+
if (downData)
|
|
918
|
+
this.dragger.checkDragOut(data);
|
|
908
919
|
}
|
|
909
920
|
}
|
|
910
921
|
pointerMoveReal(data) {
|
|
@@ -920,9 +931,11 @@ class InteractionBase {
|
|
|
920
931
|
}
|
|
921
932
|
if (!this.dragger.moving) {
|
|
922
933
|
this.updateHoverData(data);
|
|
934
|
+
if (this.moveMode)
|
|
935
|
+
data.path = this.defaultPath;
|
|
923
936
|
this.emit(exports.PointerEvent.MOVE, data);
|
|
924
|
-
this.
|
|
925
|
-
|
|
937
|
+
if (!(this.dragging && !this.config.pointer.dragHover))
|
|
938
|
+
this.pointerHover(data);
|
|
926
939
|
if (this.dragger.dragging) {
|
|
927
940
|
this.dragger.dragOverOrOut(data);
|
|
928
941
|
this.dragger.dragEnterOrLeave(data);
|
|
@@ -931,20 +944,24 @@ class InteractionBase {
|
|
|
931
944
|
this.updateCursor(this.downData || data);
|
|
932
945
|
}
|
|
933
946
|
pointerUp(data) {
|
|
947
|
+
const { downData, oldDownData } = this;
|
|
934
948
|
if (!data)
|
|
935
|
-
data =
|
|
936
|
-
if (!
|
|
949
|
+
data = downData;
|
|
950
|
+
if (!downData)
|
|
937
951
|
return;
|
|
938
952
|
PointerButton.defaultLeft(data);
|
|
939
953
|
this.findPath(data);
|
|
940
|
-
this.
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
this.emit(exports.PointerEvent.UP,
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
954
|
+
if (this.downed) {
|
|
955
|
+
this.downed = false;
|
|
956
|
+
this.emit(exports.PointerEvent.BEFORE_UP, data);
|
|
957
|
+
this.emit(exports.PointerEvent.UP, data);
|
|
958
|
+
if (oldDownData)
|
|
959
|
+
this.emit(exports.PointerEvent.UP, oldDownData, undefined, data.path);
|
|
960
|
+
this.emit(exports.PointerEvent.UP, downData, undefined, data.path);
|
|
961
|
+
this.touchLeave(data);
|
|
962
|
+
this.tap(data);
|
|
963
|
+
this.menuTap(data);
|
|
964
|
+
}
|
|
948
965
|
this.dragger.dragEnd(data);
|
|
949
966
|
this.downData = this.oldDownData = null;
|
|
950
967
|
this.updateCursor(data);
|
|
@@ -984,8 +1001,10 @@ class InteractionBase {
|
|
|
984
1001
|
this.downKeyMap[code] = true;
|
|
985
1002
|
Keyboard.setDownCode(code);
|
|
986
1003
|
this.emit(exports.KeyEvent.HOLD, data, this.defaultPath);
|
|
987
|
-
if (this.moveMode)
|
|
1004
|
+
if (this.moveMode) {
|
|
1005
|
+
this.cancelHover();
|
|
988
1006
|
this.updateCursor();
|
|
1007
|
+
}
|
|
989
1008
|
}
|
|
990
1009
|
this.emit(exports.KeyEvent.DOWN, data, this.defaultPath);
|
|
991
1010
|
}
|
|
@@ -997,32 +1016,34 @@ class InteractionBase {
|
|
|
997
1016
|
if (this.cursor === 'grab')
|
|
998
1017
|
this.updateCursor();
|
|
999
1018
|
}
|
|
1019
|
+
pointerHover(data) {
|
|
1020
|
+
this.pointerOverOrOut(data);
|
|
1021
|
+
this.pointerEnterOrLeave(data);
|
|
1022
|
+
}
|
|
1000
1023
|
pointerOverOrOut(data) {
|
|
1001
|
-
if (this.dragger.moving)
|
|
1002
|
-
return;
|
|
1003
|
-
if (this.dragging && !this.config.pointer.dragHover)
|
|
1004
|
-
return;
|
|
1005
1024
|
const { path } = data;
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1025
|
+
const { overPath } = this;
|
|
1026
|
+
this.overPath = path;
|
|
1027
|
+
if (overPath) {
|
|
1028
|
+
if (path.indexAt(0) !== overPath.indexAt(0)) {
|
|
1029
|
+
this.emit(exports.PointerEvent.OUT, data, overPath);
|
|
1009
1030
|
this.emit(exports.PointerEvent.OVER, data, path);
|
|
1010
1031
|
}
|
|
1011
1032
|
}
|
|
1012
1033
|
else {
|
|
1013
1034
|
this.emit(exports.PointerEvent.OVER, data, path);
|
|
1014
1035
|
}
|
|
1015
|
-
this.overPath = path;
|
|
1016
1036
|
}
|
|
1017
1037
|
pointerEnterOrLeave(data) {
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
this.emit(exports.PointerEvent.ENTER, data, path, this.enterPath);
|
|
1038
|
+
let { path } = data;
|
|
1039
|
+
if (this.downData && !this.moveMode) {
|
|
1040
|
+
path = path.clone();
|
|
1041
|
+
this.downData.path.forEach(leaf => path.add(leaf));
|
|
1042
|
+
}
|
|
1043
|
+
const { enterPath } = this;
|
|
1025
1044
|
this.enterPath = path;
|
|
1045
|
+
this.emit(exports.PointerEvent.LEAVE, data, enterPath, path);
|
|
1046
|
+
this.emit(exports.PointerEvent.ENTER, data, path, enterPath);
|
|
1026
1047
|
}
|
|
1027
1048
|
touchLeave(data) {
|
|
1028
1049
|
if (data.pointerType === 'touch') {
|
|
@@ -1078,6 +1099,23 @@ class InteractionBase {
|
|
|
1078
1099
|
isDrag(leaf) {
|
|
1079
1100
|
return this.dragger.getList().has(leaf);
|
|
1080
1101
|
}
|
|
1102
|
+
isPress(leaf) {
|
|
1103
|
+
const { downData, oldDownData } = this;
|
|
1104
|
+
return this.downed && ((downData && downData.path.has(leaf)) || (oldDownData && oldDownData.path.has(leaf)));
|
|
1105
|
+
}
|
|
1106
|
+
isHover(leaf) {
|
|
1107
|
+
return this.enterPath && this.enterPath.has(leaf);
|
|
1108
|
+
}
|
|
1109
|
+
isFocus(leaf) {
|
|
1110
|
+
return this.focusData === leaf;
|
|
1111
|
+
}
|
|
1112
|
+
cancelHover() {
|
|
1113
|
+
const { hoverData } = this;
|
|
1114
|
+
if (hoverData) {
|
|
1115
|
+
hoverData.path = this.defaultPath;
|
|
1116
|
+
this.pointerHover(hoverData);
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1081
1119
|
updateDownData(data, options) {
|
|
1082
1120
|
const { downData } = this;
|
|
1083
1121
|
if (!data && downData)
|
|
@@ -1111,8 +1149,7 @@ class InteractionBase {
|
|
|
1111
1149
|
}
|
|
1112
1150
|
else if (!data)
|
|
1113
1151
|
return;
|
|
1114
|
-
let leaf;
|
|
1115
|
-
let cursor;
|
|
1152
|
+
let leaf, cursor;
|
|
1116
1153
|
const { path } = data;
|
|
1117
1154
|
for (let i = 0, len = path.length; i < len; i++) {
|
|
1118
1155
|
leaf = path.list[i];
|
|
@@ -1242,9 +1279,9 @@ class HitCanvasManager extends core.CanvasManager {
|
|
|
1242
1279
|
}
|
|
1243
1280
|
}
|
|
1244
1281
|
|
|
1245
|
-
const { toInnerRadiusPointOf, copy, setRadius } =
|
|
1282
|
+
const { toInnerRadiusPointOf, copy, setRadius } = core.PointHelper;
|
|
1246
1283
|
const inner = {};
|
|
1247
|
-
|
|
1284
|
+
core.Leaf.prototype.__hitWorld = function (point) {
|
|
1248
1285
|
if (this.__layout.hitCanvasChanged || !this.__hitCanvas) {
|
|
1249
1286
|
this.__updateHitCanvas();
|
|
1250
1287
|
this.__layout.hitCanvasChanged = false;
|
|
@@ -1255,7 +1292,7 @@ draw$1.Leaf.prototype.__hitWorld = function (point) {
|
|
|
1255
1292
|
}
|
|
1256
1293
|
toInnerRadiusPointOf(point, this.__world, inner);
|
|
1257
1294
|
if (this.__.hitBox) {
|
|
1258
|
-
if (
|
|
1295
|
+
if (core.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner))
|
|
1259
1296
|
return true;
|
|
1260
1297
|
}
|
|
1261
1298
|
return this.__hit(inner);
|
|
@@ -1310,7 +1347,7 @@ draw$1.Rect.prototype.__updateHitCanvas = function () {
|
|
|
1310
1347
|
ui.__updateHitCanvas.call(this);
|
|
1311
1348
|
};
|
|
1312
1349
|
draw$1.Rect.prototype.__hitFill = function (inner, windingRule) {
|
|
1313
|
-
return this.__hitCanvas ? ui.__hitFill.call(this, inner, windingRule) :
|
|
1350
|
+
return this.__hitCanvas ? ui.__hitFill.call(this, inner, windingRule) : core.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner);
|
|
1314
1351
|
};
|
|
1315
1352
|
|
|
1316
1353
|
draw$1.UI.prototype.find = function (condition, options) {
|
package/lib/core.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Leafer,
|
|
1
|
+
import { Leafer, State, UI, 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, BoundsHelper, Bounds, ResizeEvent, LeaferEvent, CanvasManager, Leaf, Platform } from '@leafer/core';
|
|
4
4
|
|
|
5
5
|
/******************************************************************************
|
|
6
6
|
Copyright (c) Microsoft Corporation.
|
|
@@ -357,17 +357,21 @@ KeyEvent = __decorate([
|
|
|
357
357
|
function design(leafer) {
|
|
358
358
|
if (leafer.isApp)
|
|
359
359
|
return;
|
|
360
|
-
leafer.__eventIds.push(leafer.on_(MoveEvent.BEFORE_MOVE, (e) =>
|
|
360
|
+
leafer.__eventIds.push(leafer.on_(MoveEvent.BEFORE_MOVE, (e) => {
|
|
361
|
+
let { moveX, moveY } = e;
|
|
362
|
+
if (leafer.config.move.scroll) {
|
|
363
|
+
if (Math.abs(moveX) > Math.abs(moveY))
|
|
364
|
+
moveY = 0;
|
|
365
|
+
else
|
|
366
|
+
moveX = 0;
|
|
367
|
+
}
|
|
368
|
+
leafer.zoomLayer.move(moveX, moveY);
|
|
369
|
+
}), leafer.on_(ZoomEvent.BEFORE_ZOOM, (e) => {
|
|
361
370
|
const { zoomLayer } = leafer;
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
scale =
|
|
366
|
-
else if (absScale > max)
|
|
367
|
-
scale = max / scaleX;
|
|
368
|
-
if (scale !== 1) {
|
|
369
|
-
PointHelper.scaleOf(zoomLayer, e, scale);
|
|
370
|
-
zoomLayer.scale = scaleX * scale;
|
|
371
|
+
const changeScale = leafer.validScale(e.scale);
|
|
372
|
+
if (changeScale !== 1) {
|
|
373
|
+
PointHelper.scaleOf(zoomLayer, e, changeScale);
|
|
374
|
+
zoomLayer.scale = zoomLayer.__.scaleX * changeScale;
|
|
371
375
|
}
|
|
372
376
|
}));
|
|
373
377
|
}
|
|
@@ -411,6 +415,7 @@ class Transformer {
|
|
|
411
415
|
const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
|
|
412
416
|
data.path = path;
|
|
413
417
|
this.moveData = Object.assign(Object.assign({}, data), { moveX: 0, moveY: 0 });
|
|
418
|
+
interaction.cancelHover();
|
|
414
419
|
interaction.emit(MoveEvent.START, this.moveData);
|
|
415
420
|
}
|
|
416
421
|
data.path = this.moveData.path;
|
|
@@ -424,6 +429,7 @@ class Transformer {
|
|
|
424
429
|
const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
|
|
425
430
|
data.path = path;
|
|
426
431
|
this.zoomData = Object.assign(Object.assign({}, data), { scale: 1 });
|
|
432
|
+
interaction.cancelHover();
|
|
427
433
|
interaction.emit(ZoomEvent.START, this.zoomData);
|
|
428
434
|
}
|
|
429
435
|
data.path = this.zoomData.path;
|
|
@@ -437,6 +443,7 @@ class Transformer {
|
|
|
437
443
|
const { path } = interaction.selector.getByPoint(data, interaction.hitRadius);
|
|
438
444
|
data.path = path;
|
|
439
445
|
this.rotateData = Object.assign(Object.assign({}, data), { rotation: 0 });
|
|
446
|
+
interaction.cancelHover();
|
|
440
447
|
interaction.emit(RotateEvent.START, this.rotateData);
|
|
441
448
|
}
|
|
442
449
|
data.path = this.rotateData.path;
|
|
@@ -554,6 +561,7 @@ class Dragger {
|
|
|
554
561
|
this.dragEndReal();
|
|
555
562
|
this.downData = this.interaction.downData;
|
|
556
563
|
this.dragData = getDragEventData(data, data, data);
|
|
564
|
+
this.canAnimate = this.canDragOut = true;
|
|
557
565
|
}
|
|
558
566
|
getList() {
|
|
559
567
|
const { proxy } = this.interaction.selector;
|
|
@@ -566,9 +574,6 @@ class Dragger {
|
|
|
566
574
|
interaction.pointerCancel();
|
|
567
575
|
return;
|
|
568
576
|
}
|
|
569
|
-
else {
|
|
570
|
-
this.canAnimate = true;
|
|
571
|
-
}
|
|
572
577
|
if (!this.moving && canDrag) {
|
|
573
578
|
if (this.moving = interaction.moveMode || interaction.isHoldRightKey)
|
|
574
579
|
interaction.emit(MoveEvent.START, this.dragData);
|
|
@@ -619,13 +624,14 @@ class Dragger {
|
|
|
619
624
|
const list = this.getList();
|
|
620
625
|
if (list.length && running) {
|
|
621
626
|
const { moveX, moveY } = this.dragData;
|
|
622
|
-
list.forEach(leaf =>
|
|
627
|
+
list.forEach(leaf => leaf.moveWorld(moveX, moveY));
|
|
623
628
|
}
|
|
624
629
|
}
|
|
625
630
|
dragOverOrOut(data) {
|
|
626
631
|
const { interaction } = this;
|
|
627
632
|
const { dragOverPath } = this;
|
|
628
633
|
const { path } = data;
|
|
634
|
+
this.dragOverPath = path;
|
|
629
635
|
if (dragOverPath) {
|
|
630
636
|
if (path.indexAt(0) !== dragOverPath.indexAt(0)) {
|
|
631
637
|
interaction.emit(DragEvent.OUT, data, dragOverPath);
|
|
@@ -635,7 +641,6 @@ class Dragger {
|
|
|
635
641
|
else {
|
|
636
642
|
interaction.emit(DragEvent.OVER, data, path);
|
|
637
643
|
}
|
|
638
|
-
this.dragOverPath = path;
|
|
639
644
|
}
|
|
640
645
|
dragEnterOrLeave(data) {
|
|
641
646
|
const { interaction } = this;
|
|
@@ -649,7 +654,7 @@ class Dragger {
|
|
|
649
654
|
if (!this.dragData)
|
|
650
655
|
return;
|
|
651
656
|
const { moveX, moveY } = this.dragData;
|
|
652
|
-
if (this.canAnimate && this.moving && (Math.abs(moveX) > 1 || Math.abs(moveY) > 1)) {
|
|
657
|
+
if (this.interaction.config.move.dragAnimate && this.canAnimate && this.moving && (Math.abs(moveX) > 1 || Math.abs(moveY) > 1)) {
|
|
653
658
|
data = Object.assign({}, data);
|
|
654
659
|
speed = (speed || (data.pointerType === 'touch' ? 2 : 1)) * 0.9;
|
|
655
660
|
PointHelper.move(data, moveX * speed, moveY * speed);
|
|
@@ -683,12 +688,11 @@ class Dragger {
|
|
|
683
688
|
animate(func, off) {
|
|
684
689
|
const animateWait = func || this.animateWait;
|
|
685
690
|
if (animateWait)
|
|
686
|
-
this.interaction.target.nextRender(animateWait, off);
|
|
691
|
+
this.interaction.target.nextRender(animateWait, null, off);
|
|
687
692
|
this.animateWait = func;
|
|
688
693
|
}
|
|
689
694
|
swipe(data, endDragData) {
|
|
690
|
-
const { interaction } = this;
|
|
691
|
-
const { downData } = interaction;
|
|
695
|
+
const { interaction, downData } = this;
|
|
692
696
|
if (PointHelper.getDistance(downData, data) > interaction.config.pointer.swipeDistance) {
|
|
693
697
|
const swipeData = getSwipeEventData(downData, this.dragData, endDragData);
|
|
694
698
|
this.interaction.emit(swipeData.type, swipeData);
|
|
@@ -711,9 +715,9 @@ class Dragger {
|
|
|
711
715
|
this.autoMoveOnDragOut(data);
|
|
712
716
|
}
|
|
713
717
|
autoMoveOnDragOut(data) {
|
|
714
|
-
const { interaction, downData } = this;
|
|
718
|
+
const { interaction, downData, canDragOut } = this;
|
|
715
719
|
const { autoDistance, dragOut } = interaction.config.move;
|
|
716
|
-
if (!dragOut || !autoDistance)
|
|
720
|
+
if (!dragOut || !canDragOut || !autoDistance)
|
|
717
721
|
return;
|
|
718
722
|
const bounds = interaction.shrinkCanvasBounds;
|
|
719
723
|
const { x, y } = bounds;
|
|
@@ -789,12 +793,16 @@ function emitAppChildren(leaf, type, data, capture, excludePath) {
|
|
|
789
793
|
function emitEvent(leaf, type, data, capture, excludePath) {
|
|
790
794
|
if (leaf.destroyed)
|
|
791
795
|
return true;
|
|
792
|
-
if (leaf.__.hitSelf &&
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
leaf.
|
|
796
|
-
|
|
797
|
-
|
|
796
|
+
if (leaf.__.hitSelf && !exclude(leaf, excludePath)) {
|
|
797
|
+
if (State.updateEventStyle)
|
|
798
|
+
State.updateEventStyle(leaf, type);
|
|
799
|
+
if (leaf.hasEvent(type, capture)) {
|
|
800
|
+
data.phase = capture ? 1 : ((leaf === data.target) ? 2 : 3);
|
|
801
|
+
const event = EventCreator.get(type, data);
|
|
802
|
+
leaf.emitEvent(event, capture);
|
|
803
|
+
if (event.isStop)
|
|
804
|
+
return true;
|
|
805
|
+
}
|
|
798
806
|
}
|
|
799
807
|
return false;
|
|
800
808
|
}
|
|
@@ -819,7 +827,6 @@ const MultiTouchHelper = {
|
|
|
819
827
|
|
|
820
828
|
const config = {
|
|
821
829
|
wheel: {
|
|
822
|
-
zoomMode: false,
|
|
823
830
|
zoomSpeed: 0.5,
|
|
824
831
|
moveSpeed: 0.5,
|
|
825
832
|
rotateSpeed: 0.5,
|
|
@@ -828,14 +835,12 @@ const config = {
|
|
|
828
835
|
},
|
|
829
836
|
pointer: {
|
|
830
837
|
hitRadius: 5,
|
|
831
|
-
through: false,
|
|
832
838
|
tapTime: 120,
|
|
833
839
|
longPressTime: 800,
|
|
834
840
|
transformTime: 500,
|
|
835
841
|
dragHover: true,
|
|
836
842
|
dragDistance: 2,
|
|
837
843
|
swipeDistance: 20,
|
|
838
|
-
ignoreMove: false,
|
|
839
844
|
preventDefaultMenu: true
|
|
840
845
|
},
|
|
841
846
|
cursor: {}
|
|
@@ -878,17 +883,19 @@ class InteractionBase {
|
|
|
878
883
|
this.updateDownData(data);
|
|
879
884
|
if (useDefaultPath)
|
|
880
885
|
data.path = this.defaultPath;
|
|
881
|
-
this.emit(PointerEvent.BEFORE_DOWN, data);
|
|
882
|
-
this.emit(PointerEvent.DOWN, data);
|
|
883
886
|
this.downTime = Date.now();
|
|
884
|
-
this.
|
|
885
|
-
|
|
886
|
-
this.
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
887
|
+
if (this.downed = !this.moveMode) {
|
|
888
|
+
this.emit(PointerEvent.BEFORE_DOWN, data);
|
|
889
|
+
this.emit(PointerEvent.DOWN, data);
|
|
890
|
+
if (PointerButton.left(data)) {
|
|
891
|
+
this.tapWait();
|
|
892
|
+
this.longPressWait(data);
|
|
893
|
+
}
|
|
894
|
+
else if (PointerButton.right(data)) {
|
|
895
|
+
this.waitMenuTap = true;
|
|
896
|
+
}
|
|
891
897
|
}
|
|
898
|
+
this.dragger.setDragData(data);
|
|
892
899
|
this.updateCursor(data);
|
|
893
900
|
}
|
|
894
901
|
pointerMove(data) {
|
|
@@ -896,14 +903,18 @@ class InteractionBase {
|
|
|
896
903
|
data = this.hoverData;
|
|
897
904
|
if (!data)
|
|
898
905
|
return;
|
|
899
|
-
|
|
906
|
+
const { downData } = this;
|
|
907
|
+
if (downData)
|
|
900
908
|
PointerButton.defaultLeft(data);
|
|
901
909
|
const hit = this.canvas.bounds.hitPoint(data);
|
|
902
|
-
if (hit ||
|
|
903
|
-
if (hit && !
|
|
910
|
+
if (hit || downData) {
|
|
911
|
+
if (hit && !downData && PointerButton.left(data)) {
|
|
904
912
|
this.pointerDown(data, true);
|
|
913
|
+
this.dragger.canDragOut = false;
|
|
914
|
+
}
|
|
905
915
|
this.pointerMoveReal(data);
|
|
906
|
-
|
|
916
|
+
if (downData)
|
|
917
|
+
this.dragger.checkDragOut(data);
|
|
907
918
|
}
|
|
908
919
|
}
|
|
909
920
|
pointerMoveReal(data) {
|
|
@@ -919,9 +930,11 @@ class InteractionBase {
|
|
|
919
930
|
}
|
|
920
931
|
if (!this.dragger.moving) {
|
|
921
932
|
this.updateHoverData(data);
|
|
933
|
+
if (this.moveMode)
|
|
934
|
+
data.path = this.defaultPath;
|
|
922
935
|
this.emit(PointerEvent.MOVE, data);
|
|
923
|
-
this.
|
|
924
|
-
|
|
936
|
+
if (!(this.dragging && !this.config.pointer.dragHover))
|
|
937
|
+
this.pointerHover(data);
|
|
925
938
|
if (this.dragger.dragging) {
|
|
926
939
|
this.dragger.dragOverOrOut(data);
|
|
927
940
|
this.dragger.dragEnterOrLeave(data);
|
|
@@ -930,20 +943,24 @@ class InteractionBase {
|
|
|
930
943
|
this.updateCursor(this.downData || data);
|
|
931
944
|
}
|
|
932
945
|
pointerUp(data) {
|
|
946
|
+
const { downData, oldDownData } = this;
|
|
933
947
|
if (!data)
|
|
934
|
-
data =
|
|
935
|
-
if (!
|
|
948
|
+
data = downData;
|
|
949
|
+
if (!downData)
|
|
936
950
|
return;
|
|
937
951
|
PointerButton.defaultLeft(data);
|
|
938
952
|
this.findPath(data);
|
|
939
|
-
this.
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
this.emit(PointerEvent.UP,
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
953
|
+
if (this.downed) {
|
|
954
|
+
this.downed = false;
|
|
955
|
+
this.emit(PointerEvent.BEFORE_UP, data);
|
|
956
|
+
this.emit(PointerEvent.UP, data);
|
|
957
|
+
if (oldDownData)
|
|
958
|
+
this.emit(PointerEvent.UP, oldDownData, undefined, data.path);
|
|
959
|
+
this.emit(PointerEvent.UP, downData, undefined, data.path);
|
|
960
|
+
this.touchLeave(data);
|
|
961
|
+
this.tap(data);
|
|
962
|
+
this.menuTap(data);
|
|
963
|
+
}
|
|
947
964
|
this.dragger.dragEnd(data);
|
|
948
965
|
this.downData = this.oldDownData = null;
|
|
949
966
|
this.updateCursor(data);
|
|
@@ -983,8 +1000,10 @@ class InteractionBase {
|
|
|
983
1000
|
this.downKeyMap[code] = true;
|
|
984
1001
|
Keyboard.setDownCode(code);
|
|
985
1002
|
this.emit(KeyEvent.HOLD, data, this.defaultPath);
|
|
986
|
-
if (this.moveMode)
|
|
1003
|
+
if (this.moveMode) {
|
|
1004
|
+
this.cancelHover();
|
|
987
1005
|
this.updateCursor();
|
|
1006
|
+
}
|
|
988
1007
|
}
|
|
989
1008
|
this.emit(KeyEvent.DOWN, data, this.defaultPath);
|
|
990
1009
|
}
|
|
@@ -996,32 +1015,34 @@ class InteractionBase {
|
|
|
996
1015
|
if (this.cursor === 'grab')
|
|
997
1016
|
this.updateCursor();
|
|
998
1017
|
}
|
|
1018
|
+
pointerHover(data) {
|
|
1019
|
+
this.pointerOverOrOut(data);
|
|
1020
|
+
this.pointerEnterOrLeave(data);
|
|
1021
|
+
}
|
|
999
1022
|
pointerOverOrOut(data) {
|
|
1000
|
-
if (this.dragger.moving)
|
|
1001
|
-
return;
|
|
1002
|
-
if (this.dragging && !this.config.pointer.dragHover)
|
|
1003
|
-
return;
|
|
1004
1023
|
const { path } = data;
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1024
|
+
const { overPath } = this;
|
|
1025
|
+
this.overPath = path;
|
|
1026
|
+
if (overPath) {
|
|
1027
|
+
if (path.indexAt(0) !== overPath.indexAt(0)) {
|
|
1028
|
+
this.emit(PointerEvent.OUT, data, overPath);
|
|
1008
1029
|
this.emit(PointerEvent.OVER, data, path);
|
|
1009
1030
|
}
|
|
1010
1031
|
}
|
|
1011
1032
|
else {
|
|
1012
1033
|
this.emit(PointerEvent.OVER, data, path);
|
|
1013
1034
|
}
|
|
1014
|
-
this.overPath = path;
|
|
1015
1035
|
}
|
|
1016
1036
|
pointerEnterOrLeave(data) {
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
this.emit(PointerEvent.ENTER, data, path, this.enterPath);
|
|
1037
|
+
let { path } = data;
|
|
1038
|
+
if (this.downData && !this.moveMode) {
|
|
1039
|
+
path = path.clone();
|
|
1040
|
+
this.downData.path.forEach(leaf => path.add(leaf));
|
|
1041
|
+
}
|
|
1042
|
+
const { enterPath } = this;
|
|
1024
1043
|
this.enterPath = path;
|
|
1044
|
+
this.emit(PointerEvent.LEAVE, data, enterPath, path);
|
|
1045
|
+
this.emit(PointerEvent.ENTER, data, path, enterPath);
|
|
1025
1046
|
}
|
|
1026
1047
|
touchLeave(data) {
|
|
1027
1048
|
if (data.pointerType === 'touch') {
|
|
@@ -1077,6 +1098,23 @@ class InteractionBase {
|
|
|
1077
1098
|
isDrag(leaf) {
|
|
1078
1099
|
return this.dragger.getList().has(leaf);
|
|
1079
1100
|
}
|
|
1101
|
+
isPress(leaf) {
|
|
1102
|
+
const { downData, oldDownData } = this;
|
|
1103
|
+
return this.downed && ((downData && downData.path.has(leaf)) || (oldDownData && oldDownData.path.has(leaf)));
|
|
1104
|
+
}
|
|
1105
|
+
isHover(leaf) {
|
|
1106
|
+
return this.enterPath && this.enterPath.has(leaf);
|
|
1107
|
+
}
|
|
1108
|
+
isFocus(leaf) {
|
|
1109
|
+
return this.focusData === leaf;
|
|
1110
|
+
}
|
|
1111
|
+
cancelHover() {
|
|
1112
|
+
const { hoverData } = this;
|
|
1113
|
+
if (hoverData) {
|
|
1114
|
+
hoverData.path = this.defaultPath;
|
|
1115
|
+
this.pointerHover(hoverData);
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1080
1118
|
updateDownData(data, options) {
|
|
1081
1119
|
const { downData } = this;
|
|
1082
1120
|
if (!data && downData)
|
|
@@ -1110,8 +1148,7 @@ class InteractionBase {
|
|
|
1110
1148
|
}
|
|
1111
1149
|
else if (!data)
|
|
1112
1150
|
return;
|
|
1113
|
-
let leaf;
|
|
1114
|
-
let cursor;
|
|
1151
|
+
let leaf, cursor;
|
|
1115
1152
|
const { path } = data;
|
|
1116
1153
|
for (let i = 0, len = path.length; i < len; i++) {
|
|
1117
1154
|
leaf = path.list[i];
|
|
@@ -1241,7 +1278,7 @@ class HitCanvasManager extends CanvasManager {
|
|
|
1241
1278
|
}
|
|
1242
1279
|
}
|
|
1243
1280
|
|
|
1244
|
-
const { toInnerRadiusPointOf, copy, setRadius } = PointHelper
|
|
1281
|
+
const { toInnerRadiusPointOf, copy, setRadius } = PointHelper;
|
|
1245
1282
|
const inner = {};
|
|
1246
1283
|
Leaf.prototype.__hitWorld = function (point) {
|
|
1247
1284
|
if (this.__layout.hitCanvasChanged || !this.__hitCanvas) {
|
|
@@ -1254,7 +1291,7 @@ Leaf.prototype.__hitWorld = function (point) {
|
|
|
1254
1291
|
}
|
|
1255
1292
|
toInnerRadiusPointOf(point, this.__world, inner);
|
|
1256
1293
|
if (this.__.hitBox) {
|
|
1257
|
-
if (BoundsHelper
|
|
1294
|
+
if (BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner))
|
|
1258
1295
|
return true;
|
|
1259
1296
|
}
|
|
1260
1297
|
return this.__hit(inner);
|
|
@@ -1309,7 +1346,7 @@ Rect.prototype.__updateHitCanvas = function () {
|
|
|
1309
1346
|
ui.__updateHitCanvas.call(this);
|
|
1310
1347
|
};
|
|
1311
1348
|
Rect.prototype.__hitFill = function (inner, windingRule) {
|
|
1312
|
-
return this.__hitCanvas ? ui.__hitFill.call(this, inner, windingRule) : BoundsHelper
|
|
1349
|
+
return this.__hitCanvas ? ui.__hitFill.call(this, inner, windingRule) : BoundsHelper.hitRadiusPoint(this.__layout.boxBounds, inner);
|
|
1313
1350
|
};
|
|
1314
1351
|
|
|
1315
1352
|
UI.prototype.find = function (condition, options) {
|
package/lib/core.esm.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Leafer as t,Leaf as e,BoundsHelper as i,PointHelper as a,UI as s,Rect as r,Group as n}from"@leafer-ui/draw";export*from"@leafer-ui/draw";import{registerUI as o,Creator as h,PropertyEvent as d,Debug as g,DataHelper as c,canvasSizeAttrs as l,LayoutEvent as u,RenderEvent as p,Event as m,EventCreator as v,registerUIEvent as _,LeafList as f,PointHelper as D,LeafHelper as E,BoundsHelper as y,Bounds as O,ResizeEvent as T,LeaferEvent as R,CanvasManager as P,Platform as w}from"@leafer/core";function C(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 L=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=h.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_(d.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(){g.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&&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(u.END,(()=>this.__onReady())),t.once(p.START,(()=>this.__onCreated())),t.once(p.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(p.END,this.__onChildRenderEnd,this))}};L=C([o()],L);const b={},M={isHoldSpaceKey:()=>M.isHold("Space"),isHold:t=>b[t],setDownCode(t){b[t]||(b[t]=!0)},setUpCode(t){b[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 x extends m{get spaceKey(){return M.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){v.changeName(t,e)}}let B=class extends x{};B.POINTER="pointer",B.BEFORE_DOWN="pointer.before_down",B.BEFORE_MOVE="pointer.before_move",B.BEFORE_UP="pointer.before_up",B.DOWN="pointer.down",B.MOVE="pointer.move",B.UP="pointer.up",B.OVER="pointer.over",B.OUT="pointer.out",B.ENTER="pointer.enter",B.LEAVE="pointer.leave",B.TAP="tap",B.DOUBLE_TAP="double_tap",B.CLICK="click",B.DOUBLE_CLICK="double_click",B.LONG_PRESS="long_press",B.LONG_TAP="long_tap",B.MENU="pointer.menu",B.MENU_TAP="pointer.menu_tap",B=C([_()],B);const k={};let S=class extends B{static setList(t){this.list=t instanceof f?t:new f(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(k,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(k,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(k,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){k.x=t?this.totalX:this.moveX,k.y=t?this.totalY:this.moveY}};S.BEFORE_DRAG="drag.before_drag",S.START="drag.start",S.DRAG="drag",S.END="drag.end",S.OVER="drag.over",S.OUT="drag.out",S.ENTER="drag.enter",S.LEAVE="drag.leave",S=C([_()],S);let N=class extends B{static setList(t){S.setList(t)}static setData(t){S.setData(t)}};N.DROP="drop",N=C([_()],N);let W=class extends S{};W.BEFORE_MOVE="move.before_move",W.START="move.start",W.MOVE="move",W.END="move.end",W=C([_()],W);let j=class extends x{};j.BEFORE_ROTATE="rotate.before_rotate",j.START="rotate.start",j.ROTATE="rotate",j.END="rotate.end",j=C([_()],j);let z=class extends S{};z.SWIPE="swipe",z.LEFT="swipe.left",z.RIGHT="swipe.right",z.UP="swipe.up",z.DOWN="swipe.down",z=C([_()],z);let H=class extends x{};H.BEFORE_ZOOM="zoom.before_zoom",H.START="zoom.start",H.ZOOM="zoom",H.END="zoom.end",H=C([_()],H);let I=class extends x{};I.DOWN="key.down",I.HOLD="key.hold",I.UP="key.up",I=C([_()],I);const U=g.get("LeaferTypeCreator"),V={list:{},register(t,e){K[t]?U.repeat(t):K[t]=e},run(t,e){const i=K[t];i?i(e):U.error("no",t)}},{list:K,register:F}=V;F("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),F("design",(function(t){t.isApp||t.__eventIds.push(t.on_(W.BEFORE_MOVE,(e=>t.zoomLayer.move(e.moveX,e.moveY))),t.on_(H.BEFORE_ZOOM,(e=>{const{zoomLayer:i}=t,{scaleX:a}=i.__,{min:s,max:r}=t.app.config.zoom;let{scale:n}=e,o=Math.abs(a*n);o<s?n=s/a:o>r&&(n=r/a),1!==n&&(D.scaleOf(i,e,n),i.scale=a*n)})))})),t.prototype.initType=function(t){V.run(t,this)};class X{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.emit(W.START,this.moveData)}t.path=this.moveData.path,e.emit(W.BEFORE_MOVE,t),e.emit(W.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.emit(H.START,this.zoomData)}t.path=this.zoomData.path,e.emit(H.BEFORE_ZOOM,t),e.emit(H.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.emit(j.START,this.rotateData)}t.path=this.rotateData.path,e.emit(j.BEFORE_ROTATE,t),e.emit(j.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(W.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(H.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(j.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const Y={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?z.UP:t>45&&t<135?z.DOWN:t<=45&&t>=-45?z.RIGHT:z.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:G.getSwipeDirection(D.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 f,{list:a}=t;for(let t=0,s=a.length;t<s;t++)a[t].hasEvent(e)&&i.add(a[t]);return i}},G=Y,Z=new f,{getDragEventData:q,getDropEventData:J,getSwipeEventData:Q}=Y;class ${constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=q(t,t,t)}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?Z:S.list||this.dragableList||Z}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();this.canAnimate=!0,!this.moving&&e&&(this.moving=i.moveMode||i.isHoldRightKey)&&i.emit(W.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(S.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 f(e);break}}drag(t){const{interaction:e,dragData:i,downData:a}=this,{path:s,throughPath:r}=a;this.dragData=q(a,i,t),r&&(this.dragData.throughPath=r),this.dragData.path=s,this.moving?(e.emit(W.BEFORE_MOVE,this.dragData),e.emit(W.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(S.BEFORE_DRAG,this.dragData),e.emit(S.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(e,t,i)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:a}=t;i?a.indexAt(0)!==i.indexAt(0)&&(e.emit(S.OUT,t,i),e.emit(S.OVER,t,a)):e.emit(S.OVER,t,a),this.dragOverPath=a}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:a}=t;e.emit(S.LEAVE,t,i,a),e.emit(S.ENTER,t,a,i),this.dragEnterPath=a}dragEnd(t,e){if(!this.dragData)return;const{moveX:i,moveY:a}=this.dragData;this.canAnimate&&this.moving&&(Math.abs(i)>1||Math.abs(a)>1)?(t=Object.assign({},t),e=.9*(e||("touch"===t.pointerType?2:1)),D.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=q(i,t,t);r&&(n.throughPath=r),n.path=s,this.moving&&e.emit(W.END,n),this.dragging&&(e.emit(S.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,e),this.animateWait=t}swipe(t,e){const{interaction:i}=this,{downData:a}=i;if(D.getDistance(a,t)>i.config.pointer.swipeDistance){const t=Q(a,this.dragData,e);this.interaction.emit(t.type,t)}}drop(t){const e=J(t,this.getList(),S.data);e.path=this.dragEnterPath,this.interaction.emit(N.DROP,e),this.interaction.emit(S.LEAVE,t,this.dragEnterPath)}dragReset(){S.list=S.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}=this,{autoDistance:a,dragOut:s}=e.config.move;if(!s||!a)return;const r=e.shrinkCanvasBounds,{x:n,y:o}=r,h=y.maxX(r),d=y.maxY(r),g=t.x<n?a:h<t.x?-a:0,c=t.y<o?a:d<t.y?-a:0;let l=0,u=0;this.autoMoveTimer=setInterval((()=>{l+=g,u+=c,D.move(i,g,c),D.move(this.dragData,g,c),e.move(Object.assign(Object.assign({},t),{moveX:g,moveY:c,totalX:l,totalY:u})),e.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const tt=g.get("emit");const et=["move","zoom","rotate","key"];function it(t,e,i,a,s){if(et.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!st(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&&at(r,e,i,a,s)}}function at(t,e,i,a,s){if(t.destroyed)return!0;if(t.__.hitSelf&&t.hasEvent(e,a)&&!st(t,s)){i.phase=a?1:t===i.target?2:3;const s=v.get(e,i);if(t.emitEvent(s,a),s.isStop)return!0}return!1}function st(t,e){return e&&e.has(t)}const rt={getData(t){const e=t[0],i=t[1],a=D.getCenter(e.from,i.from),s=D.getCenter(e.to,i.to),r={x:s.x-a.x,y:s.y-a.y},n=D.getDistance(e.from,i.from);return{move:r,scale:D.getDistance(e.to,i.to)/n,angle:D.getRotation(e.from,i.from,e.to,i.to),center:s}}},nt={wheel:{zoomMode:!1,zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,through:!1,tapTime:120,longPressTime:800,transformTime:500,dragHover:!0,dragDistance:2,swipeDistance:20,ignoreMove:!1,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:ot,getMoveEventData:ht,getZoomEventData:dt,getRotateEventData:gt}=Y;class ct{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&A.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&M.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&A.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,e,i,a){this.config=nt,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=e,this.selector=i,this.defaultPath=new f(t),this.transformer=new X(this),this.dragger=new $(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),e&&(t.path=this.defaultPath),this.emit(B.BEFORE_DOWN,t),this.emit(B.DOWN,t),this.downTime=Date.now(),this.dragger.setDragData(t),A.left(t)?(this.tapWait(),this.longPressWait(t)):A.right(t)&&(this.waitMenuTap=!0),this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;this.downData&&A.defaultLeft(t);const e=this.canvas.bounds.hitPoint(t);(e||this.downData)&&(e&&!this.downData&&A.left(t)&&this.pointerDown(t,!0),this.pointerMoveReal(t),this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(B.BEFORE_MOVE,t,this.defaultPath),this.downData){const e=D.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.emit(B.MOVE,t),this.pointerOverOrOut(t),this.pointerEnterOrLeave(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){t||(t=this.downData),this.downData&&(A.defaultLeft(t),this.findPath(t),this.emit(B.BEFORE_UP,t),this.emit(B.UP,t),this.oldDownData&&this.emit(B.UP,this.oldDownData,void 0,t.path),this.emit(B.UP,this.downData,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:a,scale:s,center:r}=rt.getData(e);this.rotate(gt(r,a,t)),this.zoom(dt(r,s,t)),this.move(ht(r,i,t))}menu(t){this.findPath(t),this.emit(B.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(B.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,M.setDownCode(e),this.emit(I.HOLD,t,this.defaultPath),this.moveMode&&this.updateCursor()),this.emit(I.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,M.setUpCode(e),this.emit(I.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerOverOrOut(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.overPath?e.indexAt(0)!==this.overPath.indexAt(0)&&(this.emit(B.OUT,t,this.overPath),this.emit(B.OVER,t,e)):this.emit(B.OVER,t,e),this.overPath=e}pointerEnterOrLeave(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.emit(B.LEAVE,t,this.enterPath,e),this.emit(B.ENTER,t,e,this.enterPath),this.enterPath=e}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(B.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=[B.DOUBLE_TAP,B.DOUBLE_CLICK].some((e=>ot(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}isDrag(t){return this.dragger.getList().has(t)}updateDownData(t,e){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:B.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.moveMode)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(B.TAP,t),this.emit(B.CLICK,t)}emitDoubleTap(t){this.emit(B.DOUBLE_TAP,t),this.emit(B.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(B.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(B.LONG_TAP,t),ot(t.path,B.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new O(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(T.RESIZE,this.__onResize,this)],t.once(R.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],at(s,t,e,!0,a))return;s.isApp&&it(s,t,e,!0,a)}for(let r=0,n=i.length;r<n;r++)if(s=i.list[r],s.isApp&&it(s,t,e,!1,a),at(s,t,e,!1,a))return}catch(t){tt.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 lt{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}lt.custom={};class ut extends P{constructor(){super(...arguments),this.pathTypeList=new f,this.imageTypeList=new f}getImageType(t,e){return this.imageTypeList.add(t),h.hitCanvas(e)}getPathType(t){return this.pathTypeList.add(t),h.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:pt,copy:mt,setRadius:vt}=a,_t={};e.prototype.__hitWorld=function(t){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.hitCanvasChanged=!1),this.__.hitRadius&&(mt(_t,t),vt(t=_t,this.__.hitRadius)),pt(t,this.__world,_t),!(!this.__.hitBox||!i.hitRadiusPoint(this.__layout.boxBounds,_t))||this.__hit(_t)},s.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},s.prototype.__hit=function(t){"miniapp"===w.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.__,g=n&&"path"===o||"all"===o,c=2*t.radiusX;let l=c;if(g)switch(d){case"inside":if(l+=2*h,!s&&r&&this.__hitStroke(t,l))return!0;l=c;break;case"center":l+=h;break;case"outside":if(l+=2*h,!s){if(!r&&this.__hitStroke(t,l))return!0;l=c}}return!!l&&this.__hitStroke(t,l)};const ft=new s;r.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&ft.__updateHitCanvas.call(this)},r.prototype.__hitFill=function(t,e){return this.__hitCanvas?ft.__hitFill.call(this,t,e):i.hitRadiusPoint(this.__layout.boxBounds,t)},s.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},s.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{L as App,lt as Cursor,S as DragEvent,N as DropEvent,ut as HitCanvasManager,ct as InteractionBase,Y as InteractionHelper,I as KeyEvent,M as Keyboard,V as LeaferTypeCreator,W as MoveEvent,rt as MultiTouchHelper,A as PointerButton,B as PointerEvent,j as RotateEvent,z as SwipeEvent,x as UIEvent,H as ZoomEvent};
|
|
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 g,LayoutEvent as c,RenderEvent as l,Event as u,EventCreator as p,registerUIEvent as m,LeafList as v,PointHelper as _,BoundsHelper as f,Bounds as D,ResizeEvent as E,LeaferEvent as y,CanvasManager as O,Leaf as T,Platform as w}from"@leafer/core";function P(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 R=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,g),e.view=this.realCanvas?void 0:this.view,e.fill=void 0,e}__listenChildEvents(t){t.once(c.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))}};R=P([r()],R);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=P([m()],A);const x={};let S=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}};S.BEFORE_DRAG="drag.before_drag",S.START="drag.start",S.DRAG="drag",S.END="drag.end",S.OVER="drag.over",S.OUT="drag.out",S.ENTER="drag.enter",S.LEAVE="drag.leave",S=P([m()],S);let k=class extends A{static setList(t){S.setList(t)}static setData(t){S.setData(t)}};k.DROP="drop",k=P([m()],k);let B=class extends S{};B.BEFORE_MOVE="move.before_move",B.START="move.start",B.MOVE="move",B.END="move.end",B=P([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=P([m()],H);let N=class extends S{};N.SWIPE="swipe",N.LEFT="swipe.left",N.RIGHT="swipe.right",N.UP="swipe.up",N.DOWN="swipe.down",N=P([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=P([m()],W);let j=class extends M{};j.DOWN="key.down",j.HOLD="key.hold",j.UP="key.up",j=P([m()],j);const I=h.get("LeaferTypeCreator"),U={list:{},register(t,e){V[t]?I.repeat(t):V[t]=e},run(t,e){const i=V[t];i?i(e):I.error("no",t)}},{list:V,register:z}=U;z("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),z("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){U.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:S.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.moveMode||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(S.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(S.BEFORE_DRAG,this.dragData),e.emit(S.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(S.OUT,t,i),e.emit(S.OVER,t,a)):e.emit(S.OVER,t,a)}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:a}=t;e.emit(S.LEAVE,t,i,a),e.emit(S.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(S.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(),S.data);e.path=this.dragEnterPath,this.interaction.emit(k.DROP,e),this.interaction.emit(S.LEAVE,t,this.dragEnterPath)}dragReset(){S.list=S.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),g=f.maxY(n),c=t.x<o?s:d<t.x?-s:0,l=t.y<h?s:g<t.y?-s:0;let u=0,p=0;this.autoMoveTimer=setInterval((()=>{u+=c,p+=l,_.move(i,c,l),_.move(this.dragData,c,l),e.move(Object.assign(Object.assign({},t),{moveX:c,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.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}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),e&&(t.path=this.defaultPath),this.downTime=Date.now(),(this.downed=!this.moveMode)&&(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);const i=this.canvas.bounds.hitPoint(t);(i||e)&&(i&&!e&&b.left(t)&&(this.pointerDown(t,!0),this.dragger.canDragOut=!1),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.moveMode&&(t.path=this.defaultPath),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,oldDownData:i}=this;t||(t=e),e&&(b.defaultLeft(t),this.findPath(t),this.downed&&(this.downed=!1,this.emit(A.BEFORE_UP,t),this.emit(A.UP,t),i&&this.emit(A.UP,i,void 0,t.path),this.emit(A.UP,e,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t)),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,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(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,L.setUpCode(e),this.emit(j.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(k.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}isDrag(t){return this.dragger.getList().has(t)}isPress(t){const{downData:e,oldDownData:i}=this;return this.downed&&(e&&e.path.has(t)||i&&i.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){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),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.moveMode)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 D(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(E.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 gt{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}gt.custom={};class ct 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.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"===w.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.__,g=n&&"path"===o||"all"===o,c=2*t.radiusX;let l=c;if(g)switch(d){case"inside":if(l+=2*h,!s&&r&&this.__hitStroke(t,l))return!0;l=c;break;case"center":l+=h;break;case"outside":if(l+=2*h,!s){if(!r&&this.__hitStroke(t,l))return!0;l=c}}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{R as App,gt as Cursor,S as DragEvent,k as DropEvent,ct as HitCanvasManager,dt as InteractionBase,F as InteractionHelper,j as KeyEvent,L as Keyboard,U 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};
|
package/lib/core.min.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var t=require("@leafer-ui/draw"),e=require("@leafer/core");function i(t,e,i,s){var r,a=arguments.length,o=a<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,i,s);else for(var n=t.length-1;n>=0;n--)(r=t[n])&&(o=(a<3?r(o):a>3?r(e,i,o):r(e,i))||o);return a>3&&o&&Object.defineProperty(e,i,o),o}"function"==typeof SuppressedError&&SuppressedError,exports.App=class extends t.Leafer{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,i){if(super.init(t,i),t){const{ground:i,tree:s,sky:r,editor:a}=t;i&&(this.ground=this.addLeafer(i)),(s||a)&&(this.tree=this.addLeafer(s)),(r||a)&&(this.sky=this.addLeafer(r||{type:"draw",usePartRender:!1})),a&&(this.editor=e.Creator.editor(a),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:i,view:s}=this.config;i||s===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(e.PropertyEvent.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.Leafer(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(){e.Debug.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 i=Object.assign({},this.config);return i.hittable=i.realCanvas=void 0,t&&e.DataHelper.assign(i,t),this.autoLayout&&e.DataHelper.copyAttrs(i,this,e.canvasSizeAttrs),i.view=this.realCanvas?void 0:this.view,i.fill=void 0,i}__listenChildEvents(t){t.once(e.LayoutEvent.END,(()=>this.__onReady())),t.once(e.RenderEvent.START,(()=>this.__onCreated())),t.once(e.RenderEvent.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(e.RenderEvent.END,this.__onChildRenderEnd,this))}},exports.App=i([e.registerUI()],exports.App);const s={},r={isHoldSpaceKey:()=>r.isHold("Space"),isHold:t=>s[t],setDownCode(t){s[t]||(s[t]=!0)},setUpCode(t){s[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 o extends e.Event{get spaceKey(){return r.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,i){e.EventCreator.changeName(t,i)}}exports.PointerEvent=class extends o{},exports.PointerEvent.POINTER="pointer",exports.PointerEvent.BEFORE_DOWN="pointer.before_down",exports.PointerEvent.BEFORE_MOVE="pointer.before_move",exports.PointerEvent.BEFORE_UP="pointer.before_up",exports.PointerEvent.DOWN="pointer.down",exports.PointerEvent.MOVE="pointer.move",exports.PointerEvent.UP="pointer.up",exports.PointerEvent.OVER="pointer.over",exports.PointerEvent.OUT="pointer.out",exports.PointerEvent.ENTER="pointer.enter",exports.PointerEvent.LEAVE="pointer.leave",exports.PointerEvent.TAP="tap",exports.PointerEvent.DOUBLE_TAP="double_tap",exports.PointerEvent.CLICK="click",exports.PointerEvent.DOUBLE_CLICK="double_click",exports.PointerEvent.LONG_PRESS="long_press",exports.PointerEvent.LONG_TAP="long_tap",exports.PointerEvent.MENU="pointer.menu",exports.PointerEvent.MENU_TAP="pointer.menu_tap",exports.PointerEvent=i([e.registerUIEvent()],exports.PointerEvent);const n={};exports.DragEvent=class extends exports.PointerEvent{static setList(t){this.list=t instanceof e.LeafList?t:new e.LeafList(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(n,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(n,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(n,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){n.x=t?this.totalX:this.moveX,n.y=t?this.totalY:this.moveY}},exports.DragEvent.BEFORE_DRAG="drag.before_drag",exports.DragEvent.START="drag.start",exports.DragEvent.DRAG="drag",exports.DragEvent.END="drag.end",exports.DragEvent.OVER="drag.over",exports.DragEvent.OUT="drag.out",exports.DragEvent.ENTER="drag.enter",exports.DragEvent.LEAVE="drag.leave",exports.DragEvent=i([e.registerUIEvent()],exports.DragEvent),exports.DropEvent=class extends exports.PointerEvent{static setList(t){exports.DragEvent.setList(t)}static setData(t){exports.DragEvent.setData(t)}},exports.DropEvent.DROP="drop",exports.DropEvent=i([e.registerUIEvent()],exports.DropEvent),exports.MoveEvent=class extends exports.DragEvent{},exports.MoveEvent.BEFORE_MOVE="move.before_move",exports.MoveEvent.START="move.start",exports.MoveEvent.MOVE="move",exports.MoveEvent.END="move.end",exports.MoveEvent=i([e.registerUIEvent()],exports.MoveEvent),exports.RotateEvent=class extends o{},exports.RotateEvent.BEFORE_ROTATE="rotate.before_rotate",exports.RotateEvent.START="rotate.start",exports.RotateEvent.ROTATE="rotate",exports.RotateEvent.END="rotate.end",exports.RotateEvent=i([e.registerUIEvent()],exports.RotateEvent),exports.SwipeEvent=class extends exports.DragEvent{},exports.SwipeEvent.SWIPE="swipe",exports.SwipeEvent.LEFT="swipe.left",exports.SwipeEvent.RIGHT="swipe.right",exports.SwipeEvent.UP="swipe.up",exports.SwipeEvent.DOWN="swipe.down",exports.SwipeEvent=i([e.registerUIEvent()],exports.SwipeEvent),exports.ZoomEvent=class extends o{},exports.ZoomEvent.BEFORE_ZOOM="zoom.before_zoom",exports.ZoomEvent.START="zoom.start",exports.ZoomEvent.ZOOM="zoom",exports.ZoomEvent.END="zoom.end",exports.ZoomEvent=i([e.registerUIEvent()],exports.ZoomEvent),exports.KeyEvent=class extends o{},exports.KeyEvent.DOWN="key.down",exports.KeyEvent.HOLD="key.hold",exports.KeyEvent.UP="key.up",exports.KeyEvent=i([e.registerUIEvent()],exports.KeyEvent);const h=e.Debug.get("LeaferTypeCreator"),p={list:{},register(t,e){g[t]?h.repeat(t):g[t]=e},run(t,e){const i=g[t];i?i(e):h.error("no",t)}},{list:g,register:d}=p;d("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),d("design",(function(t){t.isApp||t.__eventIds.push(t.on_(exports.MoveEvent.BEFORE_MOVE,(e=>t.zoomLayer.move(e.moveX,e.moveY))),t.on_(exports.ZoomEvent.BEFORE_ZOOM,(i=>{const{zoomLayer:s}=t,{scaleX:r}=s.__,{min:a,max:o}=t.app.config.zoom;let{scale:n}=i,h=Math.abs(r*n);h<a?n=a/r:h>o&&(n=o/r),1!==n&&(e.PointHelper.scaleOf(s,i,n),s.scale=r*n)})))})),t.Leafer.prototype.initType=function(t){p.run(t,this)};class v{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.emit(exports.MoveEvent.START,this.moveData)}t.path=this.moveData.path,e.emit(exports.MoveEvent.BEFORE_MOVE,t),e.emit(exports.MoveEvent.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.emit(exports.ZoomEvent.START,this.zoomData)}t.path=this.zoomData.path,e.emit(exports.ZoomEvent.BEFORE_ZOOM,t),e.emit(exports.ZoomEvent.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.emit(exports.RotateEvent.START,this.rotateData)}t.path=this.rotateData.path,e.emit(exports.RotateEvent.BEFORE_ROTATE,t),e.emit(exports.RotateEvent.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(exports.MoveEvent.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(exports.ZoomEvent.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(exports.RotateEvent.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const c={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?exports.SwipeEvent.UP:t>45&&t<135?exports.SwipeEvent.DOWN:t<=45&&t>=-45?exports.SwipeEvent.RIGHT:exports.SwipeEvent.LEFT,getSwipeEventData:(t,i,s)=>Object.assign(Object.assign({},s),{moveX:i.moveX,moveY:i.moveY,totalX:s.x-t.x,totalY:s.y-t.y,type:l.getSwipeDirection(e.PointHelper.getAngle(t,s))}),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,s=i.length;t<s;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,i){const s=new e.LeafList,{list:r}=t;for(let t=0,e=r.length;t<e;t++)r[t].hasEvent(i)&&s.add(r[t]);return s}},l=c,E=new e.LeafList,{getDragEventData:u,getDropEventData:m,getSwipeEventData:D}=c;class f{constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=u(t,t,t)}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?E:exports.DragEvent.list||this.dragableList||E}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();this.canAnimate=!0,!this.moving&&e&&(this.moving=i.moveMode||i.isHoldRightKey)&&i.emit(exports.MoveEvent.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(exports.DragEvent.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let i;for(let s=0,r=t.length;s<r;s++)if(i=t.list[s],(i.__.draggable||i.__.editable)&&i.__.hitSelf&&!i.__.locked){this.dragableList=new e.LeafList(i);break}}drag(t){const{interaction:e,dragData:i,downData:s}=this,{path:r,throughPath:a}=s;this.dragData=u(s,i,t),a&&(this.dragData.throughPath=a),this.dragData.path=r,this.moving?(e.emit(exports.MoveEvent.BEFORE_MOVE,this.dragData),e.emit(exports.MoveEvent.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(exports.DragEvent.BEFORE_DRAG,this.dragData),e.emit(exports.DragEvent.DRAG,this.dragData))}dragReal(){const{running:t}=this.interaction,i=this.getList();if(i.length&&t){const{moveX:t,moveY:s}=this.dragData;i.forEach((i=>e.LeafHelper.moveWorld(i,t,s)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:s}=t;i?s.indexAt(0)!==i.indexAt(0)&&(e.emit(exports.DragEvent.OUT,t,i),e.emit(exports.DragEvent.OVER,t,s)):e.emit(exports.DragEvent.OVER,t,s),this.dragOverPath=s}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:s}=t;e.emit(exports.DragEvent.LEAVE,t,i,s),e.emit(exports.DragEvent.ENTER,t,s,i),this.dragEnterPath=s}dragEnd(t,i){if(!this.dragData)return;const{moveX:s,moveY:r}=this.dragData;this.canAnimate&&this.moving&&(Math.abs(s)>1||Math.abs(r)>1)?(t=Object.assign({},t),i=.9*(i||("touch"===t.pointerType?2:1)),e.PointHelper.move(t,s*i,r*i),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:s}=this;t||(t=s);const{path:r,throughPath:a}=i,o=u(i,t,t);a&&(o.throughPath=a),o.path=r,this.moving&&e.emit(exports.MoveEvent.END,o),this.dragging&&(e.emit(exports.DragEvent.END,o),this.swipe(t,o),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,e),this.animateWait=t}swipe(t,i){const{interaction:s}=this,{downData:r}=s;if(e.PointHelper.getDistance(r,t)>s.config.pointer.swipeDistance){const t=D(r,this.dragData,i);this.interaction.emit(t.type,t)}}drop(t){const e=m(t,this.getList(),exports.DragEvent.data);e.path=this.dragEnterPath,this.interaction.emit(exports.DropEvent.DROP,e),this.interaction.emit(exports.DragEvent.LEAVE,t,this.dragEnterPath)}dragReset(){exports.DragEvent.list=exports.DragEvent.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:i,downData:s}=this,{autoDistance:r,dragOut:a}=i.config.move;if(!a||!r)return;const o=i.shrinkCanvasBounds,{x:n,y:h}=o,p=e.BoundsHelper.maxX(o),g=e.BoundsHelper.maxY(o),d=t.x<n?r:p<t.x?-r:0,v=t.y<h?r:g<t.y?-r:0;let c=0,l=0;this.autoMoveTimer=setInterval((()=>{c+=d,l+=v,e.PointHelper.move(s,d,v),e.PointHelper.move(this.dragData,d,v),i.move(Object.assign(Object.assign({},t),{moveX:d,moveY:v,totalX:c,totalY:l})),i.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const _=e.Debug.get("emit");const x=["move","zoom","rotate","key"];function P(t,e,i,s,r){if(x.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!O(t,r)){let a;for(let o=0,n=t.children.length;o<n;o++)a=t.children[o],!i.path.has(a)&&a.__.hittable&&y(a,e,i,s,r)}}function y(t,i,s,r,a){if(t.destroyed)return!0;if(t.__.hitSelf&&t.hasEvent(i,r)&&!O(t,a)){s.phase=r?1:t===s.target?2:3;const a=e.EventCreator.get(i,s);if(t.emitEvent(a,r),a.isStop)return!0}return!1}function O(t,e){return e&&e.has(t)}const R={getData(t){const i=t[0],s=t[1],r=e.PointHelper.getCenter(i.from,s.from),a=e.PointHelper.getCenter(i.to,s.to),o={x:a.x-r.x,y:a.y-r.y},n=e.PointHelper.getDistance(i.from,s.from);return{move:o,scale:e.PointHelper.getDistance(i.to,s.to)/n,angle:e.PointHelper.getRotation(i.from,s.from,i.to,s.to),center:a}}},T={wheel:{zoomMode:!1,zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,through:!1,tapTime:120,longPressTime:800,transformTime:500,dragHover:!0,dragDistance:2,swipeDistance:20,ignoreMove:!1,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:w,getMoveEventData:L,getZoomEventData:C,getRotateEventData:b}=c;class M{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}M.custom={};class A extends e.CanvasManager{constructor(){super(...arguments),this.pathTypeList=new e.LeafList,this.imageTypeList=new e.LeafList}getImageType(t,i){return this.imageTypeList.add(t),e.Creator.hitCanvas(i)}getPathType(t){return this.pathTypeList.add(t),e.Creator.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:H,copy:S,setRadius:B}=t.PointHelper,I={};t.Leaf.prototype.__hitWorld=function(e){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.hitCanvasChanged=!1),this.__.hitRadius&&(S(I,e),B(e=I,this.__.hitRadius)),H(e,this.__world,I),!(!this.__.hitBox||!t.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,I))||this.__hit(I)},t.UI.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},t.UI.prototype.__hit=function(t){"miniapp"===e.Platform.name&&this.__drawHitPath(this.__hitCanvas);const{fill:i,hitFill:s,windingRule:r}=this.__,a=i&&"path"===s||"all"===s,o=this.__hitFill(t,r);if(a&&o)return!0;const{stroke:n,hitStroke:h,__strokeWidth:p,strokeAlign:g}=this.__,d=n&&"path"===h||"all"===h,v=2*t.radiusX;let c=v;if(d)switch(g){case"inside":if(c+=2*p,!a&&o&&this.__hitStroke(t,c))return!0;c=v;break;case"center":c+=p;break;case"outside":if(c+=2*p,!a){if(!o&&this.__hitStroke(t,c))return!0;c=v}}return!!c&&this.__hitStroke(t,c)};const U=new t.UI;t.Rect.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&U.__updateHitCanvas.call(this)},t.Rect.prototype.__hitFill=function(e,i){return this.__hitCanvas?U.__hitFill.call(this,e,i):t.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,e)},t.UI.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},t.UI.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},t.Group.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},exports.Cursor=M,exports.HitCanvasManager=A,exports.InteractionBase=class{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&a.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&r.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&a.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,i,s,r){this.config=T,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=i,this.selector=s,this.defaultPath=new e.LeafList(t),this.transformer=new v(this),this.dragger=new f(this),r&&(this.config=e.DataHelper.default(r,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),e&&(t.path=this.defaultPath),this.emit(exports.PointerEvent.BEFORE_DOWN,t),this.emit(exports.PointerEvent.DOWN,t),this.downTime=Date.now(),this.dragger.setDragData(t),a.left(t)?(this.tapWait(),this.longPressWait(t)):a.right(t)&&(this.waitMenuTap=!0),this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;this.downData&&a.defaultLeft(t);const e=this.canvas.bounds.hitPoint(t);(e||this.downData)&&(e&&!this.downData&&a.left(t)&&this.pointerDown(t,!0),this.pointerMoveReal(t),this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(exports.PointerEvent.BEFORE_MOVE,t,this.defaultPath),this.downData){const i=e.PointHelper.getDistance(this.downData,t)>this.config.pointer.dragDistance;i&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,i)}this.dragger.moving||(this.updateHoverData(t),this.emit(exports.PointerEvent.MOVE,t),this.pointerOverOrOut(t),this.pointerEnterOrLeave(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){t||(t=this.downData),this.downData&&(a.defaultLeft(t),this.findPath(t),this.emit(exports.PointerEvent.BEFORE_UP,t),this.emit(exports.PointerEvent.UP,t),this.oldDownData&&this.emit(exports.PointerEvent.UP,this.oldDownData,void 0,t.path),this.emit(exports.PointerEvent.UP,this.downData,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:s,scale:r,center:a}=R.getData(e);this.rotate(b(a,s,t)),this.zoom(C(a,r,t)),this.move(L(a,i,t))}menu(t){this.findPath(t),this.emit(exports.PointerEvent.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(exports.PointerEvent.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,r.setDownCode(e),this.emit(exports.KeyEvent.HOLD,t,this.defaultPath),this.moveMode&&this.updateCursor()),this.emit(exports.KeyEvent.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,r.setUpCode(e),this.emit(exports.KeyEvent.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerOverOrOut(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.overPath?e.indexAt(0)!==this.overPath.indexAt(0)&&(this.emit(exports.PointerEvent.OUT,t,this.overPath),this.emit(exports.PointerEvent.OVER,t,e)):this.emit(exports.PointerEvent.OVER,t,e),this.overPath=e}pointerEnterOrLeave(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.emit(exports.PointerEvent.LEAVE,t,this.enterPath,e),this.emit(exports.PointerEvent.ENTER,t,e,this.enterPath),this.enterPath=e}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(exports.PointerEvent.LEAVE,t),this.dragger.dragging&&this.emit(exports.DropEvent.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 s=Date.now()-this.downTime,r=[exports.PointerEvent.DOUBLE_TAP,exports.PointerEvent.DOUBLE_CLICK].some((e=>w(t.path,e)));s<e.tapTime+50&&r?(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:s}=this.config.pointer,r=this.selector.getByPoint(t,i,e||{through:s});return r.throughPath&&(t.throughPath=r.throughPath),t.path=r.path,r.path}isDrag(t){return this.dragger.getList().has(t)}updateDownData(t,e){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:exports.PointerEvent.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.moveMode)return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:s}=t;for(let t=0,r=s.length;t<r&&(e=s.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(exports.PointerEvent.TAP,t),this.emit(exports.PointerEvent.CLICK,t)}emitDoubleTap(t){this.emit(exports.PointerEvent.DOUBLE_TAP,t),this.emit(exports.PointerEvent.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(exports.PointerEvent.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(exports.PointerEvent.LONG_TAP,t),w(t.path,exports.PointerEvent.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new e.Bounds(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(e.ResizeEvent.RESIZE,this.__onResize,this)],t.once(e.LeaferEvent.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,s){this.running&&function(t,e,i,s){if(!i&&!e.path)return;let r;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let a=i.length-1;a>-1;a--){if(r=i.list[a],y(r,t,e,!0,s))return;r.isApp&&P(r,t,e,!0,s)}for(let a=0,o=i.length;a<o;a++)if(r=i.list[a],r.isApp&&P(r,t,e,!1,s),y(r,t,e,!1,s))return}catch(t){_.error(t)}}(t,e,i,s)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}},exports.InteractionHelper=c,exports.Keyboard=r,exports.LeaferTypeCreator=p,exports.MultiTouchHelper=R,exports.PointerButton=a,exports.UIEvent=o,Object.keys(t).forEach((function(e){"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
|
|
1
|
+
"use strict";var t=require("@leafer-ui/draw"),e=require("@leafer/core");function i(t,e,i,s){var r,a=arguments.length,o=a<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,i,s);else for(var n=t.length-1;n>=0;n--)(r=t[n])&&(o=(a<3?r(o):a>3?r(e,i,o):r(e,i))||o);return a>3&&o&&Object.defineProperty(e,i,o),o}"function"==typeof SuppressedError&&SuppressedError,exports.App=class extends t.Leafer{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,i){if(super.init(t,i),t){const{ground:i,tree:s,sky:r,editor:a}=t;i&&(this.ground=this.addLeafer(i)),(s||a)&&(this.tree=this.addLeafer(s)),(r||a)&&(this.sky=this.addLeafer(r||{type:"draw",usePartRender:!1})),a&&(this.editor=e.Creator.editor(a),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:i,view:s}=this.config;i||s===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(e.PropertyEvent.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.Leafer(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(){e.Debug.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 i=Object.assign({},this.config);return i.hittable=i.realCanvas=void 0,t&&e.DataHelper.assign(i,t),this.autoLayout&&e.DataHelper.copyAttrs(i,this,e.canvasSizeAttrs),i.view=this.realCanvas?void 0:this.view,i.fill=void 0,i}__listenChildEvents(t){t.once(e.LayoutEvent.END,(()=>this.__onReady())),t.once(e.RenderEvent.START,(()=>this.__onCreated())),t.once(e.RenderEvent.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(e.RenderEvent.END,this.__onChildRenderEnd,this))}},exports.App=i([e.registerUI()],exports.App);const s={},r={isHoldSpaceKey:()=>r.isHold("Space"),isHold:t=>s[t],setDownCode(t){s[t]||(s[t]=!0)},setUpCode(t){s[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 o extends e.Event{get spaceKey(){return r.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,i){e.EventCreator.changeName(t,i)}}exports.PointerEvent=class extends o{},exports.PointerEvent.POINTER="pointer",exports.PointerEvent.BEFORE_DOWN="pointer.before_down",exports.PointerEvent.BEFORE_MOVE="pointer.before_move",exports.PointerEvent.BEFORE_UP="pointer.before_up",exports.PointerEvent.DOWN="pointer.down",exports.PointerEvent.MOVE="pointer.move",exports.PointerEvent.UP="pointer.up",exports.PointerEvent.OVER="pointer.over",exports.PointerEvent.OUT="pointer.out",exports.PointerEvent.ENTER="pointer.enter",exports.PointerEvent.LEAVE="pointer.leave",exports.PointerEvent.TAP="tap",exports.PointerEvent.DOUBLE_TAP="double_tap",exports.PointerEvent.CLICK="click",exports.PointerEvent.DOUBLE_CLICK="double_click",exports.PointerEvent.LONG_PRESS="long_press",exports.PointerEvent.LONG_TAP="long_tap",exports.PointerEvent.MENU="pointer.menu",exports.PointerEvent.MENU_TAP="pointer.menu_tap",exports.PointerEvent=i([e.registerUIEvent()],exports.PointerEvent);const n={};exports.DragEvent=class extends exports.PointerEvent{static setList(t){this.list=t instanceof e.LeafList?t:new e.LeafList(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(n,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(n,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(n,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){n.x=t?this.totalX:this.moveX,n.y=t?this.totalY:this.moveY}},exports.DragEvent.BEFORE_DRAG="drag.before_drag",exports.DragEvent.START="drag.start",exports.DragEvent.DRAG="drag",exports.DragEvent.END="drag.end",exports.DragEvent.OVER="drag.over",exports.DragEvent.OUT="drag.out",exports.DragEvent.ENTER="drag.enter",exports.DragEvent.LEAVE="drag.leave",exports.DragEvent=i([e.registerUIEvent()],exports.DragEvent),exports.DropEvent=class extends exports.PointerEvent{static setList(t){exports.DragEvent.setList(t)}static setData(t){exports.DragEvent.setData(t)}},exports.DropEvent.DROP="drop",exports.DropEvent=i([e.registerUIEvent()],exports.DropEvent),exports.MoveEvent=class extends exports.DragEvent{},exports.MoveEvent.BEFORE_MOVE="move.before_move",exports.MoveEvent.START="move.start",exports.MoveEvent.MOVE="move",exports.MoveEvent.END="move.end",exports.MoveEvent=i([e.registerUIEvent()],exports.MoveEvent),exports.RotateEvent=class extends o{},exports.RotateEvent.BEFORE_ROTATE="rotate.before_rotate",exports.RotateEvent.START="rotate.start",exports.RotateEvent.ROTATE="rotate",exports.RotateEvent.END="rotate.end",exports.RotateEvent=i([e.registerUIEvent()],exports.RotateEvent),exports.SwipeEvent=class extends exports.DragEvent{},exports.SwipeEvent.SWIPE="swipe",exports.SwipeEvent.LEFT="swipe.left",exports.SwipeEvent.RIGHT="swipe.right",exports.SwipeEvent.UP="swipe.up",exports.SwipeEvent.DOWN="swipe.down",exports.SwipeEvent=i([e.registerUIEvent()],exports.SwipeEvent),exports.ZoomEvent=class extends o{},exports.ZoomEvent.BEFORE_ZOOM="zoom.before_zoom",exports.ZoomEvent.START="zoom.start",exports.ZoomEvent.ZOOM="zoom",exports.ZoomEvent.END="zoom.end",exports.ZoomEvent=i([e.registerUIEvent()],exports.ZoomEvent),exports.KeyEvent=class extends o{},exports.KeyEvent.DOWN="key.down",exports.KeyEvent.HOLD="key.hold",exports.KeyEvent.UP="key.up",exports.KeyEvent=i([e.registerUIEvent()],exports.KeyEvent);const h=e.Debug.get("LeaferTypeCreator"),p={list:{},register(t,e){g[t]?h.repeat(t):g[t]=e},run(t,e){const i=g[t];i?i(e):h.error("no",t)}},{list:g,register:d}=p;d("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),d("design",(function(t){t.isApp||t.__eventIds.push(t.on_(exports.MoveEvent.BEFORE_MOVE,(e=>{let{moveX:i,moveY:s}=e;t.config.move.scroll&&(Math.abs(i)>Math.abs(s)?s=0:i=0),t.zoomLayer.move(i,s)})),t.on_(exports.ZoomEvent.BEFORE_ZOOM,(i=>{const{zoomLayer:s}=t,r=t.validScale(i.scale);1!==r&&(e.PointHelper.scaleOf(s,i,r),s.scale=s.__.scaleX*r)})))})),t.Leafer.prototype.initType=function(t){p.run(t,this)};class v{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(exports.MoveEvent.START,this.moveData)}t.path=this.moveData.path,e.emit(exports.MoveEvent.BEFORE_MOVE,t),e.emit(exports.MoveEvent.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(exports.ZoomEvent.START,this.zoomData)}t.path=this.zoomData.path,e.emit(exports.ZoomEvent.BEFORE_ZOOM,t),e.emit(exports.ZoomEvent.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(exports.RotateEvent.START,this.rotateData)}t.path=this.rotateData.path,e.emit(exports.RotateEvent.BEFORE_ROTATE,t),e.emit(exports.RotateEvent.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(exports.MoveEvent.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(exports.ZoomEvent.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(exports.RotateEvent.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const c={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?exports.SwipeEvent.UP:t>45&&t<135?exports.SwipeEvent.DOWN:t<=45&&t>=-45?exports.SwipeEvent.RIGHT:exports.SwipeEvent.LEFT,getSwipeEventData:(t,i,s)=>Object.assign(Object.assign({},s),{moveX:i.moveX,moveY:i.moveY,totalX:s.x-t.x,totalY:s.y-t.y,type:l.getSwipeDirection(e.PointHelper.getAngle(t,s))}),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,s=i.length;t<s;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,i){const s=new e.LeafList,{list:r}=t;for(let t=0,e=r.length;t<e;t++)r[t].hasEvent(i)&&s.add(r[t]);return s}},l=c,E=new e.LeafList,{getDragEventData:u,getDropEventData:m,getSwipeEventData:D}=c;class f{constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=u(t,t,t),this.canAnimate=this.canDragOut=!0}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?E:exports.DragEvent.list||this.dragableList||E}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.moveMode||i.isHoldRightKey)&&i.emit(exports.MoveEvent.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(exports.DragEvent.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let i;for(let s=0,r=t.length;s<r;s++)if(i=t.list[s],(i.__.draggable||i.__.editable)&&i.__.hitSelf&&!i.__.locked){this.dragableList=new e.LeafList(i);break}}drag(t){const{interaction:e,dragData:i,downData:s}=this,{path:r,throughPath:a}=s;this.dragData=u(s,i,t),a&&(this.dragData.throughPath=a),this.dragData.path=r,this.moving?(e.emit(exports.MoveEvent.BEFORE_MOVE,this.dragData),e.emit(exports.MoveEvent.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(exports.DragEvent.BEFORE_DRAG,this.dragData),e.emit(exports.DragEvent.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:s}=t;this.dragOverPath=s,i?s.indexAt(0)!==i.indexAt(0)&&(e.emit(exports.DragEvent.OUT,t,i),e.emit(exports.DragEvent.OVER,t,s)):e.emit(exports.DragEvent.OVER,t,s)}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:s}=t;e.emit(exports.DragEvent.LEAVE,t,i,s),e.emit(exports.DragEvent.ENTER,t,s,i),this.dragEnterPath=s}dragEnd(t,i){if(!this.dragData)return;const{moveX:s,moveY:r}=this.dragData;this.interaction.config.move.dragAnimate&&this.canAnimate&&this.moving&&(Math.abs(s)>1||Math.abs(r)>1)?(t=Object.assign({},t),i=.9*(i||("touch"===t.pointerType?2:1)),e.PointHelper.move(t,s*i,r*i),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:s}=this;t||(t=s);const{path:r,throughPath:a}=i,o=u(i,t,t);a&&(o.throughPath=a),o.path=r,this.moving&&e.emit(exports.MoveEvent.END,o),this.dragging&&(e.emit(exports.DragEvent.END,o),this.swipe(t,o),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,i){const{interaction:s,downData:r}=this;if(e.PointHelper.getDistance(r,t)>s.config.pointer.swipeDistance){const t=D(r,this.dragData,i);this.interaction.emit(t.type,t)}}drop(t){const e=m(t,this.getList(),exports.DragEvent.data);e.path=this.dragEnterPath,this.interaction.emit(exports.DropEvent.DROP,e),this.interaction.emit(exports.DragEvent.LEAVE,t,this.dragEnterPath)}dragReset(){exports.DragEvent.list=exports.DragEvent.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:i,downData:s,canDragOut:r}=this,{autoDistance:a,dragOut:o}=i.config.move;if(!o||!r||!a)return;const n=i.shrinkCanvasBounds,{x:h,y:p}=n,g=e.BoundsHelper.maxX(n),d=e.BoundsHelper.maxY(n),v=t.x<h?a:g<t.x?-a:0,c=t.y<p?a:d<t.y?-a:0;let l=0,E=0;this.autoMoveTimer=setInterval((()=>{l+=v,E+=c,e.PointHelper.move(s,v,c),e.PointHelper.move(this.dragData,v,c),i.move(Object.assign(Object.assign({},t),{moveX:v,moveY:c,totalX:l,totalY:E})),i.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const _=e.Debug.get("emit");const x=["move","zoom","rotate","key"];function P(t,e,i,s,r){if(x.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!O(t,r)){let a;for(let o=0,n=t.children.length;o<n;o++)a=t.children[o],!i.path.has(a)&&a.__.hittable&&y(a,e,i,s,r)}}function y(i,s,r,a,o){if(i.destroyed)return!0;if(i.__.hitSelf&&!O(i,o)&&(t.State.updateEventStyle&&t.State.updateEventStyle(i,s),i.hasEvent(s,a))){r.phase=a?1:i===r.target?2:3;const t=e.EventCreator.get(s,r);if(i.emitEvent(t,a),t.isStop)return!0}return!1}function O(t,e){return e&&e.has(t)}const R={getData(t){const i=t[0],s=t[1],r=e.PointHelper.getCenter(i.from,s.from),a=e.PointHelper.getCenter(i.to,s.to),o={x:a.x-r.x,y:a.y-r.y},n=e.PointHelper.getDistance(i.from,s.from);return{move:o,scale:e.PointHelper.getDistance(i.to,s.to)/n,angle:e.PointHelper.getRotation(i.from,s.from,i.to,s.to),center:a}}},T={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:w,getMoveEventData:L,getZoomEventData:C,getRotateEventData:b}=c;class M{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}M.custom={};class H extends e.CanvasManager{constructor(){super(...arguments),this.pathTypeList=new e.LeafList,this.imageTypeList=new e.LeafList}getImageType(t,i){return this.imageTypeList.add(t),e.Creator.hitCanvas(i)}getPathType(t){return this.pathTypeList.add(t),e.Creator.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:A,copy:S,setRadius:B}=e.PointHelper,I={};e.Leaf.prototype.__hitWorld=function(t){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.hitCanvasChanged=!1),this.__.hitRadius&&(S(I,t),B(t=I,this.__.hitRadius)),A(t,this.__world,I),!(!this.__.hitBox||!e.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,I))||this.__hit(I)},t.UI.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},t.UI.prototype.__hit=function(t){"miniapp"===e.Platform.name&&this.__drawHitPath(this.__hitCanvas);const{fill:i,hitFill:s,windingRule:r}=this.__,a=i&&"path"===s||"all"===s,o=this.__hitFill(t,r);if(a&&o)return!0;const{stroke:n,hitStroke:h,__strokeWidth:p,strokeAlign:g}=this.__,d=n&&"path"===h||"all"===h,v=2*t.radiusX;let c=v;if(d)switch(g){case"inside":if(c+=2*p,!a&&o&&this.__hitStroke(t,c))return!0;c=v;break;case"center":c+=p;break;case"outside":if(c+=2*p,!a){if(!o&&this.__hitStroke(t,c))return!0;c=v}}return!!c&&this.__hitStroke(t,c)};const U=new t.UI;t.Rect.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&U.__updateHitCanvas.call(this)},t.Rect.prototype.__hitFill=function(t,i){return this.__hitCanvas?U.__hitFill.call(this,t,i):e.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,t)},t.UI.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},t.UI.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},t.Group.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},exports.Cursor=M,exports.HitCanvasManager=H,exports.InteractionBase=class{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&a.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&r.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&a.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,i,s,r){this.config=T,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=i,this.selector=s,this.defaultPath=new e.LeafList(t),this.transformer=new v(this),this.dragger=new f(this),r&&(this.config=e.DataHelper.default(r,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),e&&(t.path=this.defaultPath),this.downTime=Date.now(),(this.downed=!this.moveMode)&&(this.emit(exports.PointerEvent.BEFORE_DOWN,t),this.emit(exports.PointerEvent.DOWN,t),a.left(t)?(this.tapWait(),this.longPressWait(t)):a.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&&a.defaultLeft(t);const i=this.canvas.bounds.hitPoint(t);(i||e)&&(i&&!e&&a.left(t)&&(this.pointerDown(t,!0),this.dragger.canDragOut=!1),this.pointerMoveReal(t),e&&this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(exports.PointerEvent.BEFORE_MOVE,t,this.defaultPath),this.downData){const i=e.PointHelper.getDistance(this.downData,t)>this.config.pointer.dragDistance;i&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,i)}this.dragger.moving||(this.updateHoverData(t),this.moveMode&&(t.path=this.defaultPath),this.emit(exports.PointerEvent.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,oldDownData:i}=this;t||(t=e),e&&(a.defaultLeft(t),this.findPath(t),this.downed&&(this.downed=!1,this.emit(exports.PointerEvent.BEFORE_UP,t),this.emit(exports.PointerEvent.UP,t),i&&this.emit(exports.PointerEvent.UP,i,void 0,t.path),this.emit(exports.PointerEvent.UP,e,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t)),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:s,scale:r,center:a}=R.getData(e);this.rotate(b(a,s,t)),this.zoom(C(a,r,t)),this.move(L(a,i,t))}menu(t){this.findPath(t),this.emit(exports.PointerEvent.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(exports.PointerEvent.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,r.setDownCode(e),this.emit(exports.KeyEvent.HOLD,t,this.defaultPath),this.moveMode&&(this.cancelHover(),this.updateCursor())),this.emit(exports.KeyEvent.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,r.setUpCode(e),this.emit(exports.KeyEvent.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(exports.PointerEvent.OUT,t,i),this.emit(exports.PointerEvent.OVER,t,e)):this.emit(exports.PointerEvent.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(exports.PointerEvent.LEAVE,t,i,e),this.emit(exports.PointerEvent.ENTER,t,e,i)}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(exports.PointerEvent.LEAVE,t),this.dragger.dragging&&this.emit(exports.DropEvent.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 s=Date.now()-this.downTime,r=[exports.PointerEvent.DOUBLE_TAP,exports.PointerEvent.DOUBLE_CLICK].some((e=>w(t.path,e)));s<e.tapTime+50&&r?(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:s}=this.config.pointer,r=this.selector.getByPoint(t,i,e||{through:s});return r.throughPath&&(t.throughPath=r.throughPath),t.path=r.path,r.path}isDrag(t){return this.dragger.getList().has(t)}isPress(t){const{downData:e,oldDownData:i}=this;return this.downed&&(e&&e.path.has(t)||i&&i.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){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:exports.PointerEvent.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.moveMode)return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:s}=t;for(let t=0,r=s.length;t<r&&(e=s.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(exports.PointerEvent.TAP,t),this.emit(exports.PointerEvent.CLICK,t)}emitDoubleTap(t){this.emit(exports.PointerEvent.DOUBLE_TAP,t),this.emit(exports.PointerEvent.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(exports.PointerEvent.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(exports.PointerEvent.LONG_TAP,t),w(t.path,exports.PointerEvent.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new e.Bounds(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(e.ResizeEvent.RESIZE,this.__onResize,this)],t.once(e.LeaferEvent.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,s){this.running&&function(t,e,i,s){if(!i&&!e.path)return;let r;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let a=i.length-1;a>-1;a--){if(r=i.list[a],y(r,t,e,!0,s))return;r.isApp&&P(r,t,e,!0,s)}for(let a=0,o=i.length;a<o;a++)if(r=i.list[a],r.isApp&&P(r,t,e,!1,s),y(r,t,e,!1,s))return}catch(t){_.error(t)}}(t,e,i,s)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}},exports.InteractionHelper=c,exports.Keyboard=r,exports.LeaferTypeCreator=p,exports.MultiTouchHelper=R,exports.PointerButton=a,exports.UIEvent=o,Object.keys(t).forEach((function(e){"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leafer-ui/core",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.18",
|
|
4
4
|
"description": "@leafer-ui/core",
|
|
5
5
|
"author": "Chao (Leafer) Wan",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
"leaferjs"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@leafer-ui/draw": "1.0.0-rc.
|
|
33
|
-
"@leafer-ui/app": "1.0.0-rc.
|
|
34
|
-
"@leafer-ui/type": "1.0.0-rc.
|
|
35
|
-
"@leafer-ui/interaction": "1.0.0-rc.
|
|
36
|
-
"@leafer-ui/event": "1.0.0-rc.
|
|
37
|
-
"@leafer-ui/hit": "1.0.0-rc.
|
|
32
|
+
"@leafer-ui/draw": "1.0.0-rc.18",
|
|
33
|
+
"@leafer-ui/app": "1.0.0-rc.18",
|
|
34
|
+
"@leafer-ui/type": "1.0.0-rc.18",
|
|
35
|
+
"@leafer-ui/interaction": "1.0.0-rc.18",
|
|
36
|
+
"@leafer-ui/event": "1.0.0-rc.18",
|
|
37
|
+
"@leafer-ui/hit": "1.0.0-rc.18"
|
|
38
38
|
}
|
|
39
39
|
}
|