modern-canvas 0.7.9 → 0.7.11

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/dist/index.cjs CHANGED
@@ -338,76 +338,59 @@ class RawWeakMap {
338
338
  }
339
339
 
340
340
  class InputEvent {
341
- bubbles = true;
341
+ cursor;
342
+ // Event
343
+ bubbles = false;
344
+ cancelBubble = false;
342
345
  cancelable = false;
343
- which;
344
- cancelBubble = true;
345
- returnValue;
346
- srcElement;
347
346
  composed = false;
348
- currentTarget;
349
347
  defaultPrevented = false;
350
348
  eventPhase = InputEvent.prototype.NONE;
351
- isTrusted;
352
- target;
353
- timeStamp;
354
- type;
355
- nativeEvent;
356
- originalEvent;
357
- propagationStopped = false;
358
- propagationImmediatelyStopped = false;
359
- path;
360
- detail;
361
- view;
362
- layer = { x: 0, y: 0 };
363
- get layerX() {
364
- return this.layer.x;
365
- }
366
- get layerY() {
367
- return this.layer.y;
368
- }
369
- page = { x: 0, y: 0 };
370
- get pageX() {
371
- return this.page.x;
372
- }
373
- get pageY() {
374
- return this.page.y;
349
+ isTrusted = false;
350
+ timeStamp = 0;
351
+ type = "";
352
+ composedPath() {
353
+ return this.path;
375
354
  }
376
355
  initEvent(..._args) {
377
356
  throw new Error("initEvent() is a legacy DOM API. It is not implemented in the Federated Events API.");
378
357
  }
379
- initUIEvent(..._args) {
380
- throw new Error("initUIEvent() is a legacy DOM API. It is not implemented in the Federated Events API.");
381
- }
382
- composedPath() {
383
- return this.path;
384
- }
385
358
  preventDefault() {
386
- if (this.nativeEvent instanceof Event && this.nativeEvent.cancelable) {
359
+ if ("preventDefault" in this.nativeEvent && this.nativeEvent.cancelable) {
387
360
  this.nativeEvent.preventDefault();
388
361
  }
389
362
  this.defaultPrevented = true;
390
363
  }
364
+ propagationImmediatelyStopped = false;
391
365
  stopImmediatePropagation() {
392
366
  this.propagationImmediatelyStopped = true;
393
367
  }
368
+ propagationStopped = false;
394
369
  stopPropagation() {
370
+ if ("stopPropagation" in this.nativeEvent) {
371
+ this.nativeEvent.stopPropagation();
372
+ }
395
373
  this.propagationStopped = true;
396
374
  }
397
375
  NONE = 0;
398
376
  CAPTURING_PHASE = 1;
399
377
  AT_TARGET = 2;
400
378
  BUBBLING_PHASE = 3;
379
+ initUIEvent(..._args) {
380
+ throw new Error("initUIEvent() is a legacy DOM API. It is not implemented in the Federated Events API.");
381
+ }
382
+ }
383
+
384
+ class KeyboardInputEvent extends InputEvent {
385
+ getModifierState(..._args) {
386
+ throw new Error("getModifierState() is a legacy DOM API. It is not implemented in the Federated Events API.");
387
+ }
388
+ initKeyboardEvent(..._args) {
389
+ throw new Error("initKeyboardEvent() is a legacy DOM API. It is not implemented in the Federated Events API.");
390
+ }
401
391
  }
402
392
 
403
393
  class MouseInputEvent extends InputEvent {
404
- altKey;
405
- button;
406
- buttons;
407
- ctrlKey;
408
- metaKey;
409
- relatedTarget;
410
- shiftKey;
411
394
  client = { x: 0, y: 0 };
412
395
  get clientX() {
413
396
  return this.client.x;
@@ -415,11 +398,12 @@ class MouseInputEvent extends InputEvent {
415
398
  get clientY() {
416
399
  return this.client.y;
417
400
  }
418
- get x() {
419
- return this.clientX;
401
+ layer = { x: 0, y: 0 };
402
+ get layerX() {
403
+ return this.layer.x;
420
404
  }
421
- get y() {
422
- return this.clientY;
405
+ get layerY() {
406
+ return this.layer.y;
423
407
  }
424
408
  movement = { x: 0, y: 0 };
425
409
  get movementX() {
@@ -435,12 +419,12 @@ class MouseInputEvent extends InputEvent {
435
419
  get offsetY() {
436
420
  return this.offset.y;
437
421
  }
438
- global = { x: 0, y: 0 };
439
- get globalX() {
440
- return this.global.x;
422
+ page = { x: 0, y: 0 };
423
+ get pageX() {
424
+ return this.page.x;
441
425
  }
442
- get globalY() {
443
- return this.global.y;
426
+ get pageY() {
427
+ return this.page.y;
444
428
  }
445
429
  screen = { x: 0, y: 0 };
446
430
  get screenX() {
@@ -449,24 +433,31 @@ class MouseInputEvent extends InputEvent {
449
433
  get screenY() {
450
434
  return this.screen.y;
451
435
  }
436
+ get x() {
437
+ return this.clientX;
438
+ }
439
+ get y() {
440
+ return this.clientY;
441
+ }
452
442
  getModifierState(key) {
453
443
  return "getModifierState" in this.nativeEvent && this.nativeEvent.getModifierState(key);
454
444
  }
455
445
  initMouseEvent(..._args) {
456
446
  throw new Error("Method not implemented.");
457
447
  }
448
+ global = { x: 0, y: 0 };
449
+ get globalX() {
450
+ return this.global.x;
451
+ }
452
+ get globalY() {
453
+ return this.global.y;
454
+ }
458
455
  }
459
456
 
460
457
  class PointerInputEvent extends MouseInputEvent {
461
458
  width = 0;
462
459
  height = 0;
463
460
  isPrimary = false;
464
- pointerType;
465
- pressure;
466
- tangentialPressure;
467
- tiltX;
468
- tiltY;
469
- twist;
470
461
  getCoalescedEvents() {
471
462
  if (this.type === "pointermove" || this.type === "mousemove" || this.type === "touchmove") {
472
463
  return [this];
@@ -479,10 +470,6 @@ class PointerInputEvent extends MouseInputEvent {
479
470
  }
480
471
 
481
472
  class WheelInputEvent extends MouseInputEvent {
482
- deltaMode;
483
- deltaX;
484
- deltaY;
485
- deltaZ;
486
473
  static DOM_DELTA_PIXEL = 0;
487
474
  DOM_DELTA_PIXEL = 0;
488
475
  static DOM_DELTA_LINE = 1;
@@ -499,6 +486,10 @@ const TOUCH_TO_POINTER = {
499
486
  touchcancel: "pointercancel"
500
487
  };
501
488
  class Input extends modernIdoc.EventEmitter {
489
+ /**
490
+ * Current event
491
+ */
492
+ event;
502
493
  target;
503
494
  cursor = "default";
504
495
  cursorStyles = {
@@ -506,10 +497,6 @@ class Input extends modernIdoc.EventEmitter {
506
497
  pointer: "pointer"
507
498
  };
508
499
  setuped = false;
509
- /**
510
- * Current event
511
- */
512
- event;
513
500
  enableMoveEvent = true;
514
501
  enableWheelEvent = true;
515
502
  enableClickEvent = true;
@@ -530,24 +517,27 @@ class Input extends modernIdoc.EventEmitter {
530
517
  style.touchAction = "";
531
518
  }
532
519
  if (SUPPORTS_POINTER_EVENTS) {
533
- this.target.removeEventListener("pointerdown", this.onPointerDown);
534
- this.target.removeEventListener("pointerleave", this.onPointerOver);
535
- this.target.removeEventListener("pointerover", this.onPointerOver);
536
- this.target.removeEventListener("pointermove", this.onPointerMove);
537
- this.target.removeEventListener("pointerup", this.onPointerUp);
520
+ this.target.removeEventListener("pointerdown", this._onPointerDown);
521
+ this.target.removeEventListener("pointerleave", this._onPointerOver);
522
+ this.target.removeEventListener("pointerover", this._onPointerOver);
523
+ this.target.removeEventListener("pointermove", this._onPointerMove);
524
+ this.target.removeEventListener("pointerup", this._onPointerUp);
538
525
  } else {
539
- this.target.removeEventListener("mousedown", this.onPointerDown);
540
- this.target.removeEventListener("mouseout", this.onPointerOver);
541
- this.target.removeEventListener("mouseover", this.onPointerOver);
542
- this.target.removeEventListener("mousemove", this.onPointerMove);
543
- this.target.removeEventListener("mouseup", this.onPointerUp);
526
+ this.target.removeEventListener("mousedown", this._onPointerDown);
527
+ this.target.removeEventListener("mouseout", this._onPointerOver);
528
+ this.target.removeEventListener("mouseover", this._onPointerOver);
529
+ this.target.removeEventListener("mousemove", this._onPointerMove);
530
+ this.target.removeEventListener("mouseup", this._onPointerUp);
544
531
  }
545
532
  if (SUPPORTS_TOUCH_EVENTS) {
546
- this.target.removeEventListener("touchstart", this.onPointerDown);
547
- this.target.removeEventListener("touchmove", this.onPointerMove);
548
- this.target.removeEventListener("touchend", this.onPointerUp);
549
- }
550
- this.target.removeEventListener("wheel", this.onWheel);
533
+ this.target.removeEventListener("touchstart", this._onPointerDown);
534
+ this.target.removeEventListener("touchmove", this._onPointerMove);
535
+ this.target.removeEventListener("touchend", this._onPointerUp);
536
+ }
537
+ this.target.removeEventListener("wheel", this._onWheel);
538
+ document.removeEventListener("keydown", this._onKeyDown);
539
+ document.removeEventListener("keypress", this._onKeyPress);
540
+ document.removeEventListener("keyup", this._onKeyUp);
551
541
  this.target = void 0;
552
542
  this.setuped = false;
553
543
  }
@@ -565,24 +555,27 @@ class Input extends modernIdoc.EventEmitter {
565
555
  }
566
556
  }
567
557
  if (SUPPORTS_POINTER_EVENTS) {
568
- this.target.addEventListener("pointerdown", this.onPointerDown);
569
- this.target.addEventListener("pointerleave", this.onPointerOver);
570
- this.target.addEventListener("pointerover", this.onPointerOver);
571
- this.target.addEventListener("pointermove", this.onPointerMove);
572
- this.target.addEventListener("pointerup", this.onPointerUp);
558
+ this.target.addEventListener("pointerdown", this._onPointerDown);
559
+ this.target.addEventListener("pointerleave", this._onPointerOver);
560
+ this.target.addEventListener("pointerover", this._onPointerOver);
561
+ this.target.addEventListener("pointermove", this._onPointerMove);
562
+ this.target.addEventListener("pointerup", this._onPointerUp);
573
563
  } else {
574
- this.target.addEventListener("mousedown", this.onPointerDown);
575
- this.target.addEventListener("mouseout", this.onPointerOver);
576
- this.target.addEventListener("mouseover", this.onPointerOver);
577
- this.target.addEventListener("mousemove", this.onPointerMove);
578
- this.target.addEventListener("mouseup", this.onPointerUp);
564
+ this.target.addEventListener("mousedown", this._onPointerDown);
565
+ this.target.addEventListener("mouseout", this._onPointerOver);
566
+ this.target.addEventListener("mouseover", this._onPointerOver);
567
+ this.target.addEventListener("mousemove", this._onPointerMove);
568
+ this.target.addEventListener("mouseup", this._onPointerUp);
579
569
  }
580
570
  if (SUPPORTS_TOUCH_EVENTS) {
581
- this.target.addEventListener("touchstart", this.onPointerDown);
582
- this.target.addEventListener("touchmove", this.onPointerMove);
583
- this.target.addEventListener("touchend", this.onPointerUp);
584
- }
585
- this.target.addEventListener("wheel", this.onWheel);
571
+ this.target.addEventListener("touchstart", this._onPointerDown);
572
+ this.target.addEventListener("touchmove", this._onPointerMove);
573
+ this.target.addEventListener("touchend", this._onPointerUp);
574
+ }
575
+ this.target.addEventListener("wheel", this._onWheel);
576
+ document.addEventListener("keydown", this._onKeyDown);
577
+ document.addEventListener("keypress", this._onKeyPress);
578
+ document.addEventListener("keyup", this._onKeyUp);
586
579
  this.setuped = true;
587
580
  }
588
581
  normalize(event) {
@@ -652,26 +645,8 @@ class Input extends modernIdoc.EventEmitter {
652
645
  }
653
646
  return events;
654
647
  }
655
- cloneWheelEvent(nativeEvent) {
656
- const event = new WheelInputEvent();
657
- this.copyMouseEvent(event, nativeEvent);
658
- event.wheelDeltaY = nativeEvent.wheelDeltaY;
659
- event.deltaX = nativeEvent.deltaX;
660
- event.deltaY = nativeEvent.deltaY;
661
- event.deltaZ = nativeEvent.deltaZ;
662
- event.deltaMode = nativeEvent.deltaMode;
663
- this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);
664
- event.global.x = event.screen.x;
665
- event.global.y = event.screen.y;
666
- event.offset.x = event.screen.x;
667
- event.offset.y = event.screen.y;
668
- event.nativeEvent = nativeEvent;
669
- event.type = nativeEvent.type;
670
- return event;
671
- }
672
- clonePointerEvent(nativeEvent) {
648
+ _clonePointerEvent(nativeEvent) {
673
649
  const event = new PointerInputEvent();
674
- event.originalEvent = null;
675
650
  event.nativeEvent = nativeEvent;
676
651
  event.pointerId = nativeEvent.pointerId;
677
652
  event.width = nativeEvent.width;
@@ -684,7 +659,7 @@ class Input extends modernIdoc.EventEmitter {
684
659
  event.tiltY = nativeEvent.tiltY;
685
660
  event.twist = nativeEvent.twist;
686
661
  event.isTrusted = nativeEvent.isTrusted;
687
- this.copyMouseEvent(event, nativeEvent);
662
+ this._copyMouseEvent(event, nativeEvent);
688
663
  this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);
689
664
  event.global.x = event.screen.x;
690
665
  event.global.y = event.screen.y;
@@ -699,12 +674,23 @@ class Input extends modernIdoc.EventEmitter {
699
674
  }
700
675
  return event;
701
676
  }
702
- copyMouseEvent(event, nativeEvent) {
703
- event.preventDefault = nativeEvent.preventDefault.bind(nativeEvent);
704
- event.stopPropagation = nativeEvent.stopPropagation.bind(nativeEvent);
677
+ _copyInputEvent(event, nativeEvent) {
678
+ event.nativeEvent = nativeEvent;
679
+ event.bubbles = nativeEvent.bubbles;
680
+ event.cancelBubble = nativeEvent.cancelBubble;
681
+ event.cancelable = nativeEvent.cancelable;
682
+ event.composed = nativeEvent.composed;
683
+ event.currentTarget = nativeEvent.currentTarget;
684
+ event.defaultPrevented = nativeEvent.defaultPrevented;
685
+ event.eventPhase = nativeEvent.eventPhase;
705
686
  event.isTrusted = nativeEvent.isTrusted;
706
- event.timeStamp = performance.now();
687
+ event.returnValue = nativeEvent.returnValue;
688
+ event.srcElement = nativeEvent.srcElement;
689
+ event.timeStamp = nativeEvent.timeStamp;
707
690
  event.type = nativeEvent.type;
691
+ }
692
+ _copyMouseEvent(event, nativeEvent) {
693
+ this._copyInputEvent(event, nativeEvent);
708
694
  event.altKey = nativeEvent.altKey;
709
695
  event.button = nativeEvent.button;
710
696
  event.buttons = nativeEvent.buttons;
@@ -719,10 +705,40 @@ class Input extends modernIdoc.EventEmitter {
719
705
  event.relatedTarget = null;
720
706
  event.shiftKey = nativeEvent.shiftKey;
721
707
  }
722
- setCursor(mode) {
708
+ _cloneWheelEvent(nativeEvent) {
709
+ const event = new WheelInputEvent();
710
+ this._copyMouseEvent(event, nativeEvent);
711
+ event.wheelDeltaY = nativeEvent.wheelDeltaY;
712
+ event.deltaX = nativeEvent.deltaX;
713
+ event.deltaY = nativeEvent.deltaY;
714
+ event.deltaZ = nativeEvent.deltaZ;
715
+ event.deltaMode = nativeEvent.deltaMode;
716
+ this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);
717
+ event.global.x = event.screen.x;
718
+ event.global.y = event.screen.y;
719
+ event.offset.x = event.screen.x;
720
+ event.offset.y = event.screen.y;
721
+ return event;
722
+ }
723
+ _cloneKeyboardEvent(nativeEvent) {
724
+ const event = new KeyboardInputEvent();
725
+ this._copyInputEvent(event, nativeEvent);
726
+ event.altKey = nativeEvent.altKey;
727
+ event.charCode = nativeEvent.charCode;
728
+ event.code = nativeEvent.code;
729
+ event.ctrlKey = nativeEvent.ctrlKey;
730
+ event.isComposing = nativeEvent.isComposing;
731
+ event.key = nativeEvent.key;
732
+ event.keyCode = nativeEvent.keyCode;
733
+ event.location = nativeEvent.location;
734
+ event.metaKey = nativeEvent.metaKey;
735
+ event.repeat = nativeEvent.repeat;
736
+ event.shiftKey = nativeEvent.shiftKey;
737
+ return event;
738
+ }
739
+ setCursor(mode = "default") {
723
740
  if (!this.target)
724
741
  return;
725
- mode = mode || "default";
726
742
  if (this.cursor === mode) {
727
743
  return;
728
744
  }
@@ -761,36 +777,71 @@ class Input extends modernIdoc.EventEmitter {
761
777
  point.x = (x - rect.left) * (width / rect.width) * multiplier;
762
778
  point.y = (y - rect.top) * (height / rect.height) * multiplier;
763
779
  }
764
- onPointerDown = (nativeEvent) => {
780
+ _onKeyDown = (nativeEvent) => {
781
+ const events = this.normalize(nativeEvent);
782
+ for (let i = 0, len = events.length; i < len; i++) {
783
+ this.emit("keydown", this.event = this._cloneKeyboardEvent(events[i]));
784
+ }
785
+ if (this.event?.cursor) {
786
+ this.setCursor(this.event.cursor);
787
+ }
788
+ };
789
+ _onKeyPress = (nativeEvent) => {
790
+ const events = this.normalize(nativeEvent);
791
+ for (let i = 0, len = events.length; i < len; i++) {
792
+ this.emit("keypress", this.event = this._cloneKeyboardEvent(events[i]));
793
+ }
794
+ if (this.event?.cursor) {
795
+ this.setCursor(this.event.cursor);
796
+ }
797
+ };
798
+ _onKeyUp = (nativeEvent) => {
799
+ const events = this.normalize(nativeEvent);
800
+ for (let i = 0, len = events.length; i < len; i++) {
801
+ this.emit("keyup", this.event = this._cloneKeyboardEvent(events[i]));
802
+ }
803
+ if (this.event?.cursor) {
804
+ this.setCursor(this.event.cursor);
805
+ }
806
+ };
807
+ _onPointerDown = (nativeEvent) => {
765
808
  if (SUPPORTS_TOUCH_EVENTS && nativeEvent.pointerType === "touch")
766
809
  return;
767
810
  const events = this.normalize(nativeEvent);
768
811
  for (let i = 0, len = events.length; i < len; i++) {
769
- this.emit("pointerdown", this.event = this.clonePointerEvent(events[i]));
812
+ this.emit("pointerdown", this.event = this._clonePointerEvent(events[i]));
813
+ }
814
+ if (this.event?.cursor) {
815
+ this.setCursor(this.event.cursor);
770
816
  }
771
- this.setCursor(this.cursor);
772
817
  };
773
- onPointerOver = (nativeEvent) => {
818
+ _onPointerOver = (nativeEvent) => {
774
819
  if (!this.enableClickEvent)
775
820
  return;
776
821
  if (SUPPORTS_TOUCH_EVENTS && nativeEvent.pointerType === "touch")
777
822
  return;
778
823
  const events = this.normalize(nativeEvent);
779
824
  for (let i = 0, len = events.length; i < len; i++) {
780
- this.emit("pointerover", this.event = this.clonePointerEvent(events[i]));
825
+ this.emit("pointerover", this.event = this._clonePointerEvent(events[i]));
826
+ }
827
+ if (this.event?.cursor) {
828
+ this.setCursor(this.event.cursor);
781
829
  }
782
830
  };
783
- onPointerMove = (nativeEvent) => {
831
+ _onPointerMove = (nativeEvent) => {
784
832
  if (!this.enableMoveEvent)
785
833
  return;
786
834
  if (SUPPORTS_TOUCH_EVENTS && nativeEvent.pointerType === "touch")
787
835
  return;
788
836
  const events = this.normalize(nativeEvent);
789
837
  for (let i = 0, len = events.length; i < len; i++) {
790
- this.emit("pointermove", this.event = this.clonePointerEvent(events[i]));
838
+ this.emit("pointermove", this.event = this._clonePointerEvent(events[i]));
839
+ }
840
+ if (this.event?.cursor) {
841
+ this.setCursor(this.event.cursor);
791
842
  }
792
843
  };
793
- onPointerUp = (nativeEvent) => {
844
+ _onPointerUp = (nativeEvent) => {
794
845
  if (!this.enableClickEvent)
795
846
  return;
796
847
  if (SUPPORTS_TOUCH_EVENTS && nativeEvent.pointerType === "touch")
@@ -802,17 +853,23 @@ class Input extends modernIdoc.EventEmitter {
802
853
  const outside = target !== this.target ? "outside" : "";
803
854
  const events = this.normalize(nativeEvent);
804
855
  for (let i = 0, len = events.length; i < len; i++) {
805
- const event = this.clonePointerEvent(events[i]);
856
+ const event = this._clonePointerEvent(events[i]);
806
857
  event.type += outside;
807
858
  this.emit("pointerup", this.event = event);
808
859
  }
860
+ if (this.event?.cursor) {
861
+ this.setCursor(this.event.cursor);
862
+ }
809
863
  };
810
- onWheel = (nativeEvent) => {
864
+ _onWheel = (nativeEvent) => {
811
865
  if (!this.enableWheelEvent)
812
866
  return;
813
867
  const events = this.normalize(nativeEvent);
814
868
  for (let i = 0, len = events.length; i < len; i++) {
815
- this.emit("wheel", this.event = this.cloneWheelEvent(events[i]));
869
+ this.emit("wheel", this.event = this._cloneWheelEvent(events[i]));
870
+ }
871
+ if (this.event?.cursor) {
872
+ this.setCursor(this.event.cursor);
816
873
  }
817
874
  };
818
875
  }
@@ -2103,13 +2160,13 @@ class Vector3 extends Vector {
2103
2160
  }
2104
2161
  }
2105
2162
 
2106
- var __defProp$P = Object.defineProperty;
2163
+ var __defProp$Q = Object.defineProperty;
2107
2164
  var __decorateClass$Z = (decorators, target, key, kind) => {
2108
2165
  var result = void 0 ;
2109
2166
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
2110
2167
  if (decorator = decorators[i])
2111
2168
  result = (decorator(target, key, result) ) || result;
2112
- if (result) __defProp$P(target, key, result);
2169
+ if (result) __defProp$Q(target, key, result);
2113
2170
  return result;
2114
2171
  };
2115
2172
  class MainLoop extends CoreObject {
@@ -4304,13 +4361,13 @@ class Geometry extends Resource {
4304
4361
  }
4305
4362
  }
4306
4363
 
4307
- var __defProp$O = Object.defineProperty;
4364
+ var __defProp$P = Object.defineProperty;
4308
4365
  var __decorateClass$Y = (decorators, target, key, kind) => {
4309
4366
  var result = void 0 ;
4310
4367
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4311
4368
  if (decorator = decorators[i])
4312
4369
  result = (decorator(target, key, result) ) || result;
4313
- if (result) __defProp$O(target, key, result);
4370
+ if (result) __defProp$P(target, key, result);
4314
4371
  return result;
4315
4372
  };
4316
4373
  class IndexBuffer extends Resource {
@@ -4361,13 +4418,13 @@ __decorateClass$Y([
4361
4418
  modernIdoc.property({ protected: true, fallback: false })
4362
4419
  ], IndexBuffer.prototype, "dynamic");
4363
4420
 
4364
- var __defProp$N = Object.defineProperty;
4421
+ var __defProp$O = Object.defineProperty;
4365
4422
  var __decorateClass$X = (decorators, target, key, kind) => {
4366
4423
  var result = void 0 ;
4367
4424
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4368
4425
  if (decorator = decorators[i])
4369
4426
  result = (decorator(target, key, result) ) || result;
4370
- if (result) __defProp$N(target, key, result);
4427
+ if (result) __defProp$O(target, key, result);
4371
4428
  return result;
4372
4429
  };
4373
4430
  class VertexBuffer extends Resource {
@@ -4418,13 +4475,13 @@ __decorateClass$X([
4418
4475
  modernIdoc.property({ protected: true, fallback: false })
4419
4476
  ], VertexBuffer.prototype, "dynamic");
4420
4477
 
4421
- var __defProp$M = Object.defineProperty;
4478
+ var __defProp$N = Object.defineProperty;
4422
4479
  var __decorateClass$W = (decorators, target, key, kind) => {
4423
4480
  var result = void 0 ;
4424
4481
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4425
4482
  if (decorator = decorators[i])
4426
4483
  result = (decorator(target, key, result) ) || result;
4427
- if (result) __defProp$M(target, key, result);
4484
+ if (result) __defProp$N(target, key, result);
4428
4485
  return result;
4429
4486
  };
4430
4487
  class VertexAttribute extends Resource {
@@ -4720,13 +4777,13 @@ class UvGeometry extends Geometry {
4720
4777
  }
4721
4778
  }
4722
4779
 
4723
- var __defProp$L = Object.defineProperty;
4780
+ var __defProp$M = Object.defineProperty;
4724
4781
  var __decorateClass$V = (decorators, target, key, kind) => {
4725
4782
  var result = void 0 ;
4726
4783
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4727
4784
  if (decorator = decorators[i])
4728
4785
  result = (decorator(target, key, result) ) || result;
4729
- if (result) __defProp$L(target, key, result);
4786
+ if (result) __defProp$M(target, key, result);
4730
4787
  return result;
4731
4788
  };
4732
4789
  class Texture2D extends Resource {
@@ -4897,13 +4954,13 @@ class AnimatedTexture extends Resource {
4897
4954
  }
4898
4955
  }
4899
4956
 
4900
- var __defProp$K = Object.defineProperty;
4957
+ var __defProp$L = Object.defineProperty;
4901
4958
  var __decorateClass$U = (decorators, target, key, kind) => {
4902
4959
  var result = void 0 ;
4903
4960
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4904
4961
  if (decorator = decorators[i])
4905
4962
  result = (decorator(target, key, result) ) || result;
4906
- if (result) __defProp$K(target, key, result);
4963
+ if (result) __defProp$L(target, key, result);
4907
4964
  return result;
4908
4965
  };
4909
4966
  class CanvasTexture extends Texture2D {
@@ -5142,13 +5199,13 @@ class PixelsTexture extends Texture2D {
5142
5199
  }
5143
5200
  }
5144
5201
 
5145
- var __defProp$J = Object.defineProperty;
5202
+ var __defProp$K = Object.defineProperty;
5146
5203
  var __decorateClass$T = (decorators, target, key, kind) => {
5147
5204
  var result = void 0 ;
5148
5205
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
5149
5206
  if (decorator = decorators[i])
5150
5207
  result = (decorator(target, key, result) ) || result;
5151
- if (result) __defProp$J(target, key, result);
5208
+ if (result) __defProp$K(target, key, result);
5152
5209
  return result;
5153
5210
  };
5154
5211
  function resolveOptions(options) {
@@ -5631,14 +5688,14 @@ class Children extends Array {
5631
5688
  }
5632
5689
  }
5633
5690
 
5634
- var __defProp$I = Object.defineProperty;
5691
+ var __defProp$J = Object.defineProperty;
5635
5692
  var __getOwnPropDesc$J = Object.getOwnPropertyDescriptor;
5636
5693
  var __decorateClass$S = (decorators, target, key, kind) => {
5637
5694
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$J(target, key) : target;
5638
5695
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
5639
5696
  if (decorator = decorators[i])
5640
5697
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
5641
- if (kind && result) __defProp$I(target, key, result);
5698
+ if (kind && result) __defProp$J(target, key, result);
5642
5699
  return result;
5643
5700
  };
5644
5701
  const iidMap = {};
@@ -5912,10 +5969,16 @@ exports.Node = class Node extends CoreObject {
5912
5969
  }
5913
5970
  }
5914
5971
  input(event, key) {
5972
+ if (event.propagationStopped) {
5973
+ return;
5974
+ }
5915
5975
  const array = this._children.internal;
5916
5976
  for (let i = array.length - 1; i >= 0; i--) {
5917
5977
  array[i].input(event, key);
5918
5978
  }
5979
+ if (event.propagationStopped) {
5980
+ return;
5981
+ }
5919
5982
  this._input(event, key);
5920
5983
  }
5921
5984
  getIndex() {
@@ -6150,14 +6213,14 @@ exports.Node = __decorateClass$S([
6150
6213
  customNode("Node")
6151
6214
  ], exports.Node);
6152
6215
 
6153
- var __defProp$H = Object.defineProperty;
6216
+ var __defProp$I = Object.defineProperty;
6154
6217
  var __getOwnPropDesc$I = Object.getOwnPropertyDescriptor;
6155
6218
  var __decorateClass$R = (decorators, target, key, kind) => {
6156
6219
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$I(target, key) : target;
6157
6220
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6158
6221
  if (decorator = decorators[i])
6159
6222
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
6160
- if (kind && result) __defProp$H(target, key, result);
6223
+ if (kind && result) __defProp$I(target, key, result);
6161
6224
  return result;
6162
6225
  };
6163
6226
  exports.TimelineNode = class TimelineNode extends exports.Node {
@@ -6233,14 +6296,14 @@ exports.TimelineNode = __decorateClass$R([
6233
6296
  customNode("TimelineNode")
6234
6297
  ], exports.TimelineNode);
6235
6298
 
6236
- var __defProp$G = Object.defineProperty;
6299
+ var __defProp$H = Object.defineProperty;
6237
6300
  var __getOwnPropDesc$H = Object.getOwnPropertyDescriptor;
6238
6301
  var __decorateClass$Q = (decorators, target, key, kind) => {
6239
6302
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$H(target, key) : target;
6240
6303
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6241
6304
  if (decorator = decorators[i])
6242
6305
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
6243
- if (kind && result) __defProp$G(target, key, result);
6306
+ if (kind && result) __defProp$H(target, key, result);
6244
6307
  return result;
6245
6308
  };
6246
6309
  exports.CanvasItem = class CanvasItem extends exports.TimelineNode {
@@ -6408,14 +6471,14 @@ exports.CanvasItem = __decorateClass$Q([
6408
6471
  customNode("CanvasItem")
6409
6472
  ], exports.CanvasItem);
6410
6473
 
6411
- var __defProp$F = Object.defineProperty;
6474
+ var __defProp$G = Object.defineProperty;
6412
6475
  var __getOwnPropDesc$G = Object.getOwnPropertyDescriptor;
6413
6476
  var __decorateClass$P = (decorators, target, key, kind) => {
6414
6477
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$G(target, key) : target;
6415
6478
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6416
6479
  if (decorator = decorators[i])
6417
6480
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
6418
- if (kind && result) __defProp$F(target, key, result);
6481
+ if (kind && result) __defProp$G(target, key, result);
6419
6482
  return result;
6420
6483
  };
6421
6484
  exports.Viewport = class Viewport extends exports.Node {
@@ -6572,14 +6635,14 @@ exports.Viewport = __decorateClass$P([
6572
6635
  customNode("Viewport")
6573
6636
  ], exports.Viewport);
6574
6637
 
6575
- var __defProp$E = Object.defineProperty;
6638
+ var __defProp$F = Object.defineProperty;
6576
6639
  var __getOwnPropDesc$F = Object.getOwnPropertyDescriptor;
6577
6640
  var __decorateClass$O = (decorators, target, key, kind) => {
6578
6641
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$F(target, key) : target;
6579
6642
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6580
6643
  if (decorator = decorators[i])
6581
6644
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
6582
- if (kind && result) __defProp$E(target, key, result);
6645
+ if (kind && result) __defProp$F(target, key, result);
6583
6646
  return result;
6584
6647
  };
6585
6648
  exports.Effect = class Effect extends exports.TimelineNode {
@@ -6863,14 +6926,14 @@ class RenderStack {
6863
6926
  }
6864
6927
  }
6865
6928
 
6866
- var __defProp$D = Object.defineProperty;
6929
+ var __defProp$E = Object.defineProperty;
6867
6930
  var __getOwnPropDesc$E = Object.getOwnPropertyDescriptor;
6868
6931
  var __decorateClass$N = (decorators, target, key, kind) => {
6869
6932
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$E(target, key) : target;
6870
6933
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6871
6934
  if (decorator = decorators[i])
6872
6935
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
6873
- if (kind && result) __defProp$D(target, key, result);
6936
+ if (kind && result) __defProp$E(target, key, result);
6874
6937
  return result;
6875
6938
  };
6876
6939
  exports.Timeline = class Timeline extends exports.Node {
@@ -6946,13 +7009,13 @@ exports.Window = __decorateClass$M([
6946
7009
  customNode("Window")
6947
7010
  ], exports.Window);
6948
7011
 
6949
- var __defProp$C = Object.defineProperty;
7012
+ var __defProp$D = Object.defineProperty;
6950
7013
  var __decorateClass$L = (decorators, target, key, kind) => {
6951
7014
  var result = void 0 ;
6952
7015
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6953
7016
  if (decorator = decorators[i])
6954
7017
  result = (decorator(target, key, result) ) || result;
6955
- if (result) __defProp$C(target, key, result);
7018
+ if (result) __defProp$D(target, key, result);
6956
7019
  return result;
6957
7020
  };
6958
7021
  class SceneTree extends MainLoop {
@@ -7056,14 +7119,14 @@ exports.Transition = __decorateClass$K([
7056
7119
  })
7057
7120
  ], exports.Transition);
7058
7121
 
7059
- var __defProp$B = Object.defineProperty;
7122
+ var __defProp$C = Object.defineProperty;
7060
7123
  var __getOwnPropDesc$B = Object.getOwnPropertyDescriptor;
7061
7124
  var __decorateClass$J = (decorators, target, key, kind) => {
7062
7125
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$B(target, key) : target;
7063
7126
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
7064
7127
  if (decorator = decorators[i])
7065
7128
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
7066
- if (kind && result) __defProp$B(target, key, result);
7129
+ if (kind && result) __defProp$C(target, key, result);
7067
7130
  return result;
7068
7131
  };
7069
7132
  exports.Node2D = class Node2D extends exports.CanvasItem {
@@ -7176,18 +7239,21 @@ exports.Node2D = __decorateClass$J([
7176
7239
  customNode("Node2D")
7177
7240
  ], exports.Node2D);
7178
7241
 
7242
+ var __defProp$B = Object.defineProperty;
7179
7243
  var __getOwnPropDesc$A = Object.getOwnPropertyDescriptor;
7180
7244
  var __decorateClass$I = (decorators, target, key, kind) => {
7181
7245
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$A(target, key) : target;
7182
7246
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
7183
7247
  if (decorator = decorators[i])
7184
- result = (decorator(result)) || result;
7248
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
7249
+ if (kind && result) __defProp$B(target, key, result);
7185
7250
  return result;
7186
7251
  };
7187
7252
  exports.Camera2D = class Camera2D extends exports.Node2D {
7188
7253
  zoom = new Vector2(1, 1).on("update", () => this.updateCanvasTransform());
7189
7254
  maxZoom = new Vector2(6, 6);
7190
7255
  minZoom = new Vector2(0.1, 0.1);
7256
+ _screenOffset = { x: 0, y: 0 };
7191
7257
  constructor(properties, nodes = []) {
7192
7258
  super();
7193
7259
  this.setProperties(properties).append(nodes);
@@ -7208,24 +7274,61 @@ exports.Camera2D = class Camera2D extends exports.Node2D {
7208
7274
  }
7209
7275
  _input(event, key) {
7210
7276
  super._input(event, key);
7211
- if (key === "wheel") {
7277
+ if (key === "keydown") {
7212
7278
  const e = event;
7213
- if (e.ctrlKey) {
7214
- const isTouchPad = e.wheelDeltaY ? Math.abs(Math.abs(e.wheelDeltaY) - Math.abs(3 * e.deltaY)) < 3 : e.deltaMode === 0;
7215
- if (!isTouchPad) {
7216
- e.preventDefault();
7217
- const oldZoom = this.zoom.x;
7218
- this.addZoom(e.deltaY * -0.015);
7219
- const ratio = 1 - this.zoom.x / oldZoom;
7220
- this.position.add(
7221
- (e.screenX - this.position.x) * ratio,
7222
- (e.screenY - this.position.y) * ratio
7223
- );
7224
- }
7225
- } else {
7279
+ if (!this.spaceKey && e.code === "Space") {
7280
+ e.cursor = "grab";
7281
+ this.spaceKey = true;
7282
+ }
7283
+ } else if (key === "keyup") {
7284
+ const e = event;
7285
+ if (e.code === "Space") {
7286
+ e.cursor = "default";
7287
+ this.spaceKey = false;
7288
+ this.grabbing = false;
7289
+ }
7290
+ } else if (key === "pointerdown") {
7291
+ const e = event;
7292
+ if (!this.grabbing && this.spaceKey) {
7293
+ this.grabbing = true;
7294
+ e.cursor = "grabbing";
7295
+ this._screenOffset = { x: e.screenX, y: e.screenY };
7296
+ }
7297
+ } else if (key === "pointermove") {
7298
+ const e = event;
7299
+ if (this.grabbing) {
7300
+ this.position.add(
7301
+ -(this._screenOffset.x - e.screenX),
7302
+ -(this._screenOffset.y - e.screenY)
7303
+ );
7304
+ this._screenOffset = { x: e.screenX, y: e.screenY };
7305
+ }
7306
+ } else if (key === "pointerup") {
7307
+ const e = event;
7308
+ if (this.grabbing) {
7309
+ this.grabbing = false;
7310
+ e.cursor = "grab";
7311
+ }
7312
+ } else if (key === "wheel") {
7313
+ this._onWheel(event);
7314
+ }
7315
+ }
7316
+ _onWheel(e) {
7317
+ if (e.ctrlKey) {
7318
+ const isTouchPad = e.wheelDeltaY ? Math.abs(Math.abs(e.wheelDeltaY) - Math.abs(3 * e.deltaY)) < 3 : e.deltaMode === 0;
7319
+ if (!isTouchPad) {
7226
7320
  e.preventDefault();
7227
- this.position.add(-e.deltaX, -e.deltaY);
7321
+ const oldZoom = this.zoom.x;
7322
+ this.addZoom(e.deltaY * -0.015);
7323
+ const ratio = 1 - this.zoom.x / oldZoom;
7324
+ this.position.add(
7325
+ (e.screenX - this.position.x) * ratio,
7326
+ (e.screenY - this.position.y) * ratio
7327
+ );
7228
7328
  }
7329
+ } else {
7330
+ e.preventDefault();
7331
+ this.position.add(-e.deltaX, -e.deltaY);
7229
7332
  }
7230
7333
  }
7231
7334
  updateTransform() {
@@ -7240,6 +7343,12 @@ exports.Camera2D = class Camera2D extends exports.Node2D {
7240
7343
  this.emit("updateCanvasTransform");
7241
7344
  }
7242
7345
  };
7346
+ __decorateClass$I([
7347
+ modernIdoc.property({ protected: true, fallback: false })
7348
+ ], exports.Camera2D.prototype, "spaceKey", 2);
7349
+ __decorateClass$I([
7350
+ modernIdoc.property({ protected: true, fallback: false })
7351
+ ], exports.Camera2D.prototype, "grabbing", 2);
7243
7352
  exports.Camera2D = __decorateClass$I([
7244
7353
  customNode("Camera2D", {
7245
7354
  processMode: "disabled",
@@ -9337,6 +9446,8 @@ class BaseElement2DOutline extends BaseElement2DFill {
9337
9446
  switch (key) {
9338
9447
  case "width":
9339
9448
  case "style":
9449
+ case "lineCap":
9450
+ case "lineJoin":
9340
9451
  case "enabled":
9341
9452
  this.parent.requestRedraw();
9342
9453
  break;
@@ -9353,7 +9464,8 @@ class BaseElement2DOutline extends BaseElement2DFill {
9353
9464
  ctx.lineWidth = this.width || 1;
9354
9465
  ctx.uvTransform = uvTransform;
9355
9466
  ctx.strokeStyle = this._texture ?? this.color;
9356
- ctx.strokeAlignment = 0;
9467
+ ctx.lineCap = this.lineCap;
9468
+ ctx.lineJoin = this.lineJoin;
9357
9469
  ctx.stroke({ disableWrapMode });
9358
9470
  }
9359
9471
  }
@@ -9366,6 +9478,12 @@ __decorateClass$p([
9366
9478
  __decorateClass$p([
9367
9479
  modernIdoc.property({ fallback: "solid" })
9368
9480
  ], BaseElement2DOutline.prototype, "style");
9481
+ __decorateClass$p([
9482
+ modernIdoc.property({ fallback: "butt" })
9483
+ ], BaseElement2DOutline.prototype, "lineCap");
9484
+ __decorateClass$p([
9485
+ modernIdoc.property({ fallback: "miter" })
9486
+ ], BaseElement2DOutline.prototype, "lineJoin");
9369
9487
 
9370
9488
  var __defProp$h = Object.defineProperty;
9371
9489
  var __decorateClass$o = (decorators, target, key, kind) => {
@@ -9782,9 +9900,6 @@ exports.BaseElement2D = class BaseElement2D extends exports.Node2D {
9782
9900
  case "maskImage":
9783
9901
  this._updateMaskImage();
9784
9902
  break;
9785
- case "borderRadius":
9786
- this.requestRedraw();
9787
- break;
9788
9903
  case "backgroundColor":
9789
9904
  this.background.color = this.style.backgroundColor;
9790
9905
  break;
@@ -9803,6 +9918,10 @@ exports.BaseElement2D = class BaseElement2D extends exports.Node2D {
9803
9918
  case "outlineColor":
9804
9919
  this.outline.color = value;
9805
9920
  break;
9921
+ case "borderRadius":
9922
+ default:
9923
+ this.requestRedraw();
9924
+ break;
9806
9925
  }
9807
9926
  }
9808
9927
  _updateMaskImage() {
@@ -13853,7 +13972,10 @@ class Engine extends SceneTree {
13853
13972
  "pointerover",
13854
13973
  "pointermove",
13855
13974
  "pointerup",
13856
- "wheel"
13975
+ "wheel",
13976
+ "keydown",
13977
+ "keypress",
13978
+ "keyup"
13857
13979
  ].forEach((key) => {
13858
13980
  this.input.on(key, (event) => {
13859
13981
  this.root.input(event, key);
@@ -14031,6 +14153,7 @@ exports.IndexBuffer = IndexBuffer;
14031
14153
  exports.Input = Input;
14032
14154
  exports.InputEvent = InputEvent;
14033
14155
  exports.JSONLoader = JSONLoader;
14156
+ exports.KeyboardInputEvent = KeyboardInputEvent;
14034
14157
  exports.Loader = Loader;
14035
14158
  exports.LottieLoader = LottieLoader;
14036
14159
  exports.MainLoop = MainLoop;