@nativescript/canvas 2.0.0-rc.0 → 2.0.0-rc.10

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.
Files changed (63) hide show
  1. package/Canvas/common.d.ts +8 -6
  2. package/Canvas/common.js +252 -205
  3. package/Canvas/common.js.map +1 -1
  4. package/Canvas/index.android.d.ts +2 -0
  5. package/Canvas/index.android.js +11 -0
  6. package/Canvas/index.android.js.map +1 -1
  7. package/Canvas/index.d.ts +1 -0
  8. package/Canvas/index.ios.d.ts +2 -0
  9. package/Canvas/index.ios.js +6 -0
  10. package/Canvas/index.ios.js.map +1 -1
  11. package/TextDecoder/index.d.ts +1 -0
  12. package/TextDecoder/index.js +17 -0
  13. package/TextDecoder/index.js.map +1 -1
  14. package/WebGPU/GPUQueue.js +1 -1
  15. package/WebGPU/GPUQueue.js.map +1 -1
  16. package/angular/esm2022/index.mjs +4 -4
  17. package/angular/fesm2022/nativescript-canvas-angular.mjs +4 -4
  18. package/helpers.d.ts +3 -0
  19. package/helpers.js +9 -0
  20. package/helpers.js.map +1 -1
  21. package/package.json +1 -1
  22. package/platforms/android/canvas-release.aar +0 -0
  23. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/CanvasNative +0 -0
  24. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_ios.h +14 -0
  25. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Headers/canvas_native.h +10 -0
  26. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo +0 -0
  27. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios.abi.json +18 -18
  28. package/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
  29. package/platforms/ios/CanvasNative.xcframework/ios-arm64/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +994 -994
  30. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/CanvasNative +0 -0
  31. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_ios.h +14 -0
  32. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Headers/canvas_native.h +10 -0
  33. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo +0 -0
  34. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo +0 -0
  35. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/arm64-apple-ios-simulator.abi.json +20 -20
  36. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/Modules/CanvasNative.swiftmodule/x86_64-apple-ios-simulator.abi.json +20 -20
  37. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/_CodeSignature/CodeResources +16 -16
  38. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/DWARF/CanvasNative +0 -0
  39. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/aarch64/CanvasNative.yml +989 -989
  40. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/CanvasNative.framework.dSYM/Contents/Resources/Relocations/x86_64/CanvasNative.yml +1037 -1037
  41. package/platforms/ios/src/cpp/CanvasJSIModule.cpp +172 -2
  42. package/platforms/ios/src/cpp/CanvasJSIModule.h +6 -0
  43. package/platforms/ios/src/cpp/Helpers.h +44 -0
  44. package/platforms/ios/src/cpp/PromiseCallback.h +42 -20
  45. package/platforms/ios/src/cpp/TextDecoderImpl.cpp +142 -0
  46. package/platforms/ios/src/cpp/TextDecoderImpl.h +2 -0
  47. package/platforms/ios/src/cpp/webgpu/GPUQueueImpl.cpp +1 -0
  48. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Black.ttf +0 -0
  49. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Bold.ttf +0 -0
  50. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-ExtraBold.ttf +0 -0
  51. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-ExtraLight.ttf +0 -0
  52. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Light.ttf +0 -0
  53. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Medium.ttf +0 -0
  54. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Regular.ttf +0 -0
  55. package/platforms/ios/CanvasNative.xcframework/ios-arm64/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-SemiBold.ttf +0 -0
  56. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Black.ttf +0 -0
  57. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Bold.ttf +0 -0
  58. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-ExtraBold.ttf +0 -0
  59. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-ExtraLight.ttf +0 -0
  60. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Light.ttf +0 -0
  61. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Medium.ttf +0 -0
  62. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-Regular.ttf +0 -0
  63. package/platforms/ios/CanvasNative.xcframework/ios-arm64_x86_64-simulator/CanvasNative.framework/fonts/Noto_Serif_CJK/NotoSerifTC-SemiBold.ttf +0 -0
package/Canvas/common.js CHANGED
@@ -34,11 +34,17 @@ export class Event {
34
34
  this.type = type;
35
35
  this.bubbles = options?.bubbles ?? false;
36
36
  this.cancelable = options?.cancelable ?? false;
37
- this.cancelable = options?.cancelable ?? false;
38
37
  this.composed = options?.composed ?? false;
38
+ this.target = options?.target ?? null;
39
+ this._preventDefault = options?.preventDefault;
40
+ this._stopPropagation = options?.stopPropagation;
41
+ }
42
+ preventDefault() {
43
+ this._preventDefault?.();
44
+ }
45
+ stopPropagation() {
46
+ this._stopPropagation?.();
39
47
  }
40
- preventDefault() { }
41
- stopPropagation() { }
42
48
  }
43
49
  export class UIEvent extends Event {
44
50
  constructor(type, options) {
@@ -84,8 +90,6 @@ export class PointerEvent extends MouseEvent {
84
90
  this.twist = options?.twist ?? 0;
85
91
  this.isPrimary = options?.isPrimary ?? false;
86
92
  }
87
- preventDefault() { }
88
- stopPropagation() { }
89
93
  }
90
94
  export class Touch {
91
95
  constructor(options) {
@@ -132,8 +136,6 @@ export class TouchEvent extends UIEvent {
132
136
  this.ctrlKey = options?.ctrlKey ?? false;
133
137
  this.shiftKey = options?.shiftKey ?? false;
134
138
  }
135
- preventDefault() { }
136
- stopPropagation() { }
137
139
  }
138
140
  export class WheelEvent extends UIEvent {
139
141
  constructor(type, options) {
@@ -187,7 +189,7 @@ let CanvasBase = class CanvasBase extends View {
187
189
  this._touchCancelCallbacks = new Array();
188
190
  this._touches = [];
189
191
  this._touchesById = [];
190
- this._lastPointerEventById = [];
192
+ this._lastPointerEventById = new Map();
191
193
  this.__target = null;
192
194
  this._classList = new Set();
193
195
  this.style.width = { unit: '%', value: 1 };
@@ -326,19 +328,13 @@ let CanvasBase = class CanvasBase extends View {
326
328
  _moveCallback(pointers) {
327
329
  const hasPointerCallbacks = this._pointerMoveCallbacks.length > 0;
328
330
  const hasMouseCallbacks = this._mouseMoveCallbacks.length > 0;
329
- if (hasPointerCallbacks || hasMouseCallbacks) {
331
+ const hasTouchCallbacks = this._touchMoveCallbacks.length > 0;
332
+ if (hasPointerCallbacks || hasMouseCallbacks || hasTouchCallbacks) {
333
+ let preventDefault = false;
334
+ const changedTouches = hasTouchCallbacks ? TouchList.empty() : null;
330
335
  for (const pointer of pointers) {
331
336
  const pointerId = pointer.ptrId;
332
- const index = this._lastPointerEventById.findIndex((item) => {
333
- return item?.pointerId === pointerId;
334
- });
335
- let previousEvent;
336
- if (index > -1) {
337
- previousEvent = this._lastPointerEventById[index];
338
- }
339
- else {
340
- previousEvent = { pointerId, x: 0, y: 0 };
341
- }
337
+ const previousEvent = this._lastPointerEventById.get(pointerId) ?? { pointerId, x: 0, y: 0 };
342
338
  if (hasPointerCallbacks) {
343
339
  const event = new PointerEvent('pointermove', {
344
340
  pointerType: 'touch',
@@ -354,12 +350,49 @@ let CanvasBase = class CanvasBase extends View {
354
350
  isPrimary: pointer.isPrimary,
355
351
  button: -1,
356
352
  target: this.__target ?? this,
353
+ cancelable: true,
354
+ preventDefault: () => {
355
+ preventDefault = true;
356
+ },
357
357
  });
358
358
  for (const callback of this._pointerMoveCallbacks) {
359
359
  callback(event);
360
360
  }
361
361
  }
362
- if (hasMouseCallbacks) {
362
+ if (!preventDefault && hasTouchCallbacks) {
363
+ changedTouches.push(new Touch({
364
+ identifier: pointer.ptrId,
365
+ target: this.__target ?? this,
366
+ clientX: pointer.x,
367
+ clientY: pointer.y,
368
+ screenX: pointer.x,
369
+ screenY: pointer.y,
370
+ pageX: pointer.x,
371
+ pageY: pointer.y,
372
+ }));
373
+ }
374
+ this._lastPointerEventById.set(pointerId, { pointerId, x: pointer.x, y: pointer.y });
375
+ }
376
+ if ((changedTouches?.length ?? 0) > 0) {
377
+ const touches = TouchList.fromList(this._touches);
378
+ const event = new TouchEvent('touchmove', {
379
+ touches,
380
+ targetTouches: touches,
381
+ changedTouches,
382
+ target: this.__target ?? this,
383
+ cancelable: true,
384
+ preventDefault: () => {
385
+ preventDefault = true;
386
+ },
387
+ });
388
+ for (const callback of this._touchMoveCallbacks) {
389
+ callback(event);
390
+ }
391
+ }
392
+ if (!preventDefault && hasMouseCallbacks) {
393
+ for (const pointer of pointers) {
394
+ const pointerId = pointer.ptrId;
395
+ const previousEvent = this._lastPointerEventById.get(pointerId) ?? { pointerId, x: 0, y: 0 };
363
396
  const event = new MouseEvent('mousemove', {
364
397
  clientX: pointer.x,
365
398
  clientY: pointer.y,
@@ -371,48 +404,24 @@ let CanvasBase = class CanvasBase extends View {
371
404
  movementY: pointer.y - previousEvent.y,
372
405
  button: -1,
373
406
  target: this.__target ?? this,
407
+ preventDefault: () => {
408
+ preventDefault = true;
409
+ },
374
410
  });
375
- // todo emit mousemove when desktop is supported
376
- // for (const callback of this._mouseMoveCallbacks) {
377
- // callback(event);
378
- // }
379
- }
380
- if (index > -1) {
381
- this._lastPointerEventById[index] = { pointerId, x: pointer.x, y: pointer.y };
411
+ for (const callback of this._mouseMoveCallbacks) {
412
+ callback(event);
413
+ }
382
414
  }
383
415
  }
384
416
  }
385
- if (this._touchMoveCallbacks.length > 0) {
386
- const changedTouches = TouchList.empty();
387
- for (const pointer of pointers) {
388
- changedTouches.push(new Touch({
389
- identifier: pointer.ptrId,
390
- target: this.__target ?? this,
391
- clientX: pointer.x,
392
- clientY: pointer.y,
393
- screenX: pointer.x,
394
- screenY: pointer.y,
395
- pageX: pointer.x,
396
- pageY: pointer.y,
397
- }));
398
- }
399
- const touches = TouchList.fromList(this._touches);
400
- const event = new TouchEvent('touchmove', {
401
- touches,
402
- targetTouches: touches,
403
- changedTouches,
404
- target: this.__target ?? this,
405
- });
406
- for (const callback of this._touchMoveCallbacks) {
407
- callback(event);
408
- }
409
- }
410
417
  }
411
418
  _upCallback(ptrId, x, y, isPrimary = false) {
412
419
  const hasPointerCallbacks = this._pointerUpCallbacks.length > 0 || this._pointerOutCallbacks.length > 0 || this._pointerLeaveCallbacks.length > 0;
413
420
  const hasMouseCallbacks = this._mouseUpCallbacks.length > 0;
414
- if (hasPointerCallbacks || hasMouseCallbacks) {
415
- const pointerId = ptrId;
421
+ const hasTouchCallbacks = this._touchEndCallbacks.length > 0;
422
+ const pointerId = ptrId;
423
+ if (hasPointerCallbacks || hasMouseCallbacks || hasTouchCallbacks) {
424
+ let preventDefault = false;
416
425
  if (hasPointerCallbacks) {
417
426
  const up = new PointerEvent('pointerup', {
418
427
  pointerType: 'touch',
@@ -425,6 +434,10 @@ let CanvasBase = class CanvasBase extends View {
425
434
  pageX: x,
426
435
  pageY: y,
427
436
  target: this.__target ?? this,
437
+ cancelable: true,
438
+ preventDefault: () => {
439
+ preventDefault = true;
440
+ },
428
441
  });
429
442
  const out = new PointerEvent('pointerout', {
430
443
  pointerType: 'touch',
@@ -460,7 +473,35 @@ let CanvasBase = class CanvasBase extends View {
460
473
  callback(leave);
461
474
  }
462
475
  }
463
- if (hasMouseCallbacks) {
476
+ if (hasTouchCallbacks && !preventDefault) {
477
+ const touches = TouchList.fromList(this._touches);
478
+ const changedTouches = TouchList.fromList([
479
+ new Touch({
480
+ identifier: ptrId,
481
+ target: this.__target ?? this,
482
+ clientX: x,
483
+ clientY: y,
484
+ screenX: x,
485
+ screenY: y,
486
+ pageX: x,
487
+ pageY: y,
488
+ }),
489
+ ]);
490
+ const event = new TouchEvent('touchend', {
491
+ touches,
492
+ targetTouches: touches,
493
+ changedTouches,
494
+ target: this.__target ?? this,
495
+ cancelable: true,
496
+ preventDefault: () => {
497
+ preventDefault = true;
498
+ },
499
+ });
500
+ for (const callback of this._touchEndCallbacks) {
501
+ callback(event);
502
+ }
503
+ }
504
+ if (hasMouseCallbacks && !preventDefault) {
464
505
  const event = new MouseEvent('mouseup', {
465
506
  clientX: x,
466
507
  clientY: y,
@@ -469,17 +510,13 @@ let CanvasBase = class CanvasBase extends View {
469
510
  pageX: x,
470
511
  pageY: y,
471
512
  target: this.__target ?? this,
513
+ preventDefault: () => {
514
+ preventDefault = true;
515
+ },
472
516
  });
473
- // todo emit mouseup when desktop is supported
474
- // for (const callback of this._mouseUpCallbacks) {
475
- // callback(event);
476
- // }
477
- }
478
- const index = this._lastPointerEventById.findIndex((item) => {
479
- return item?.pointerId === pointerId;
480
- });
481
- if (index > -1) {
482
- this._lastPointerEventById.splice(index, 1);
517
+ for (const callback of this._mouseUpCallbacks) {
518
+ callback(event);
519
+ }
483
520
  }
484
521
  }
485
522
  const length = this._touches.length;
@@ -489,34 +526,14 @@ let CanvasBase = class CanvasBase extends View {
489
526
  break;
490
527
  }
491
528
  }
492
- if (this._touchEndCallbacks.length > 0) {
493
- const touches = TouchList.fromList(this._touches);
494
- const changedTouches = TouchList.fromList([
495
- new Touch({
496
- identifier: ptrId,
497
- target: this.__target ?? this,
498
- clientX: x,
499
- clientY: y,
500
- screenX: x,
501
- screenY: y,
502
- pageX: x,
503
- pageY: y,
504
- }),
505
- ]);
506
- const event = new TouchEvent('touchend', {
507
- touches,
508
- targetTouches: touches,
509
- changedTouches,
510
- });
511
- for (const callback of this._touchEndCallbacks) {
512
- callback(event);
513
- }
514
- }
529
+ this._lastPointerEventById.delete(pointerId);
515
530
  }
516
531
  _downCallback(ptrId, x, y, isPrimary = false) {
517
532
  const hasPointerCallbacks = this._pointerDownCallbacks.length > 0;
518
533
  const hasMouseCallbacks = this._mouseDownCallbacks.length > 0;
519
- if (hasPointerCallbacks || hasMouseCallbacks) {
534
+ const hasTouchCallbacks = this._touchStartCallbacks.length > 0;
535
+ if (hasPointerCallbacks || hasMouseCallbacks || hasTouchCallbacks) {
536
+ let preventDefault = false;
520
537
  const pointerId = ptrId;
521
538
  if (hasPointerCallbacks) {
522
539
  const event = new PointerEvent('pointerdown', {
@@ -530,57 +547,69 @@ let CanvasBase = class CanvasBase extends View {
530
547
  pageX: x,
531
548
  pageY: y,
532
549
  target: this.__target ?? this,
550
+ cancelable: true,
551
+ preventDefault: () => {
552
+ preventDefault = true;
553
+ },
533
554
  });
534
555
  for (const callback of this._pointerDownCallbacks) {
535
556
  callback(event);
536
557
  }
537
558
  }
538
- if (hasMouseCallbacks) {
539
- const event = new MouseEvent('mousedown', {
559
+ if (hasTouchCallbacks && !preventDefault) {
560
+ const touch = new Touch({
561
+ identifier: ptrId,
562
+ target: this.__target ?? this,
540
563
  clientX: x,
541
564
  clientY: y,
542
565
  screenX: x,
543
566
  screenY: y,
544
567
  pageX: x,
545
568
  pageY: y,
569
+ });
570
+ this._touches.push(touch);
571
+ this._touchesById[ptrId] = touch;
572
+ const touches = TouchList.fromList(this._touches);
573
+ const touchEvent = new TouchEvent('touchstart', {
574
+ touches,
575
+ targetTouches: touches,
576
+ changedTouches: this._touches,
546
577
  target: this.__target ?? this,
578
+ cancelable: true,
579
+ preventDefault: () => {
580
+ preventDefault = true;
581
+ },
547
582
  });
548
- // todo emit mousedown when desktop is supported
549
- // for (const callback of this._mouseDownCallbacks) {
550
- // callback(event);
551
- // }
583
+ for (const callback of this._touchStartCallbacks) {
584
+ callback(touchEvent);
585
+ }
552
586
  }
553
- this._lastPointerEventById.push({ pointerId, x, y });
554
- }
555
- if (this._touchStartCallbacks.length > 0) {
556
- const touch = new Touch({
557
- identifier: ptrId,
558
- target: this.__target ?? this,
559
- clientX: x,
560
- clientY: y,
561
- screenX: x,
562
- screenY: y,
563
- pageX: x,
564
- pageY: y,
565
- });
566
- this._touches.push(touch);
567
- this._touchesById[ptrId] = touch;
568
- const touches = TouchList.fromList(this._touches);
569
- const touchEvent = new TouchEvent('touchstart', {
570
- touches,
571
- targetTouches: touches,
572
- changedTouches: this._touches,
573
- target: this.__target ?? this,
574
- });
575
- for (const callback of this._touchStartCallbacks) {
576
- callback(touchEvent);
587
+ if (hasMouseCallbacks && !preventDefault) {
588
+ const event = new MouseEvent('mousedown', {
589
+ clientX: x,
590
+ clientY: y,
591
+ screenX: x,
592
+ screenY: y,
593
+ pageX: x,
594
+ pageY: y,
595
+ target: this.__target ?? this,
596
+ preventDefault: () => {
597
+ preventDefault = true;
598
+ },
599
+ });
600
+ for (const callback of this._mouseDownCallbacks) {
601
+ callback(event);
602
+ }
577
603
  }
604
+ this._lastPointerEventById.set(pointerId, { pointerId, x, y });
578
605
  }
579
606
  }
580
607
  _cancelCallback(ptrId, x, y, isPrimary = false) {
581
608
  const hasPointerCallbacks = this._pointerCancelCallbacks.length > 0;
582
609
  const hasMouseCallbacks = this._mouseCancelCallbacks.length > 0;
583
- if (hasPointerCallbacks || hasMouseCallbacks) {
610
+ const hasTouchCallbacks = this._touchCancelCallbacks.length > 0;
611
+ if (hasPointerCallbacks || hasMouseCallbacks || hasTouchCallbacks) {
612
+ let preventDefault = false;
584
613
  const pointerId = ptrId;
585
614
  if (hasPointerCallbacks) {
586
615
  const event = new PointerEvent('pointercancel', {
@@ -594,51 +623,62 @@ let CanvasBase = class CanvasBase extends View {
594
623
  pageY: y,
595
624
  isPrimary,
596
625
  target: this.__target ?? this,
626
+ cancelable: true,
627
+ preventDefault: () => {
628
+ preventDefault = true;
629
+ },
597
630
  });
598
631
  for (const callback of this._pointerCancelCallbacks) {
599
632
  callback(event);
600
633
  }
601
634
  }
602
- if (hasMouseCallbacks) {
603
- const event = new MouseEvent('mouseout', {
635
+ if (hasTouchCallbacks && !preventDefault) {
636
+ const touch = new Touch({
637
+ identifier: ptrId,
638
+ target: this.__target ?? this,
604
639
  clientX: x,
605
640
  clientY: y,
606
641
  screenX: x,
607
642
  screenY: y,
608
643
  pageX: x,
609
644
  pageY: y,
645
+ });
646
+ const touchesList = [touch];
647
+ const touchesById = [];
648
+ touchesById[ptrId] = touch;
649
+ const touches = TouchList.fromList(touchesList);
650
+ const touchEvent = new TouchEvent('touchcancel', {
651
+ touches,
652
+ targetTouches: touches,
653
+ changedTouches: touchesList,
610
654
  target: this.__target ?? this,
655
+ cancelable: true,
656
+ preventDefault: () => {
657
+ preventDefault = true;
658
+ },
611
659
  });
612
- // todo emit mouseout when desktop is supported
613
- // for (const callback of this._mouseCancelCallbacks) {
614
- // callback(event);
615
- // }
660
+ for (const callback of this._touchCancelCallbacks) {
661
+ callback(touchEvent);
662
+ }
616
663
  }
617
- }
618
- if (this._touchCancelCallbacks.length > 0) {
619
- const touch = new Touch({
620
- identifier: ptrId,
621
- target: this.__target ?? this,
622
- clientX: x,
623
- clientY: y,
624
- screenX: x,
625
- screenY: y,
626
- pageX: x,
627
- pageY: y,
628
- });
629
- const touchesList = [touch];
630
- const touchesById = [];
631
- touchesById[ptrId] = touch;
632
- const touches = TouchList.fromList(touchesList);
633
- const touchEvent = new TouchEvent('touchcancel', {
634
- touches,
635
- targetTouches: touches,
636
- changedTouches: touchesList,
637
- target: this.__target ?? this,
638
- });
639
- for (const callback of this._touchCancelCallbacks) {
640
- callback(touchEvent);
664
+ if (hasMouseCallbacks && !preventDefault) {
665
+ const event = new MouseEvent('mouseout', {
666
+ clientX: x,
667
+ clientY: y,
668
+ screenX: x,
669
+ screenY: y,
670
+ pageX: x,
671
+ pageY: y,
672
+ target: this.__target ?? this,
673
+ preventDefault: () => {
674
+ preventDefault = true;
675
+ },
676
+ });
677
+ for (const callback of this._mouseCancelCallbacks) {
678
+ callback(event);
679
+ }
641
680
  }
681
+ this._lastPointerEventById.set(pointerId, { pointerId, x, y });
642
682
  }
643
683
  }
644
684
  _pinchCallback(data) {
@@ -646,19 +686,13 @@ let CanvasBase = class CanvasBase extends View {
646
686
  const hasPointerCallbacks = this._pointerMoveCallbacks.length > 0;
647
687
  const hasMouseCallbacks = this._mouseMoveCallbacks.length > 0;
648
688
  const hasMouseWheel = this._mouseWheelCallbacks.length > 0;
649
- if (hasPointerCallbacks || hasMouseCallbacks || hasMouseWheel) {
689
+ const hasTouchCallbacks = this._touchMoveCallbacks.length > 0;
690
+ if (hasPointerCallbacks || hasMouseCallbacks || hasMouseWheel || hasTouchCallbacks) {
691
+ const changedTouches = hasTouchCallbacks ? TouchList.empty() : null;
692
+ let preventDefault = false;
650
693
  for (const pointer of data.pointers) {
651
694
  const pointerId = pointer.ptrId;
652
- const index = this._lastPointerEventById.findIndex((item) => {
653
- return item?.pointerId === pointerId;
654
- });
655
- let previousEvent;
656
- if (index > -1) {
657
- previousEvent = this._lastPointerEventById[index];
658
- }
659
- else {
660
- previousEvent = { pointerId, x: 0, y: 0 };
661
- }
695
+ const previousEvent = this._lastPointerEventById.get(pointerId) ?? { pointerId, x: 0, y: 0 };
662
696
  if (hasPointerCallbacks) {
663
697
  const event = new PointerEvent('pointermove', {
664
698
  pointerType: 'touch',
@@ -673,12 +707,49 @@ let CanvasBase = class CanvasBase extends View {
673
707
  movementY: pointer.y - previousEvent.y,
674
708
  button: -1,
675
709
  target: this.__target ?? this,
710
+ cancelable: true,
711
+ preventDefault: () => {
712
+ preventDefault = true;
713
+ },
676
714
  });
677
715
  for (const callback of this._pointerMoveCallbacks) {
678
716
  callback(event);
679
717
  }
680
718
  }
681
- if (hasMouseCallbacks) {
719
+ if (hasTouchCallbacks && !preventDefault) {
720
+ changedTouches.push(new Touch({
721
+ identifier: pointer.ptrId,
722
+ target: this.__target ?? this,
723
+ clientX: pointer.x,
724
+ clientY: pointer.y,
725
+ screenX: pointer.x,
726
+ screenY: pointer.y,
727
+ pageX: pointer.x,
728
+ pageY: pointer.y,
729
+ }));
730
+ }
731
+ this._lastPointerEventById.set(pointerId, { pointerId, x: pointer.x, y: pointer.y });
732
+ }
733
+ if ((changedTouches?.length ?? 0) > 0) {
734
+ const touches = TouchList.fromList(this._touches);
735
+ const event = new TouchEvent('touchmove', {
736
+ touches,
737
+ targetTouches: touches,
738
+ changedTouches,
739
+ target: this.__target ?? this,
740
+ cancelable: true,
741
+ preventDefault: () => {
742
+ preventDefault = true;
743
+ },
744
+ });
745
+ for (const callback of this._touchMoveCallbacks) {
746
+ callback(event);
747
+ }
748
+ }
749
+ if (!preventDefault && hasMouseCallbacks) {
750
+ for (const pointer of data.pointers) {
751
+ const pointerId = pointer.ptrId;
752
+ const previousEvent = this._lastPointerEventById.get(pointerId) ?? { pointerId, x: 0, y: 0 };
682
753
  const event = new MouseEvent('mousemove', {
683
754
  clientX: pointer.x,
684
755
  clientY: pointer.y,
@@ -690,53 +761,26 @@ let CanvasBase = class CanvasBase extends View {
690
761
  movementY: pointer.y - previousEvent.y,
691
762
  button: -1,
692
763
  target: this.__target ?? this,
764
+ preventDefault: () => {
765
+ preventDefault = true;
766
+ },
693
767
  });
694
- // todo emit mousemove when desktop is supported
695
- // for (const callback of this._mouseMoveCallbacks) {
696
- // callback(event);
697
- // }
698
- }
699
- if (hasMouseWheel) {
700
- const event = new WheelEvent('wheel', {
701
- deltaX: data.deltaX,
702
- deltaY: data.deltaY,
703
- deltaZ: 0,
704
- deltaMode: data.deltaMode,
705
- target: this.__target ?? this,
706
- });
707
- // todo emit wheel when desktop is supported
708
- // for (const callback of this._mouseWheelCallbacks) {
709
- // callback(event);
710
- // }
711
- }
712
- if (index > -1) {
713
- this._lastPointerEventById[index] = { pointerId, x: pointer.x, y: pointer.y };
768
+ for (const callback of this._mouseMoveCallbacks) {
769
+ callback(event);
770
+ }
714
771
  }
715
772
  }
716
- }
717
- if (this._touchMoveCallbacks.length > 0) {
718
- const changedTouches = [];
719
- for (const pointer of data.pointers) {
720
- changedTouches.push(new Touch({
721
- identifier: pointer.ptrId,
773
+ if (hasMouseWheel) {
774
+ const event = new WheelEvent('wheel', {
775
+ deltaX: data.deltaX,
776
+ deltaY: data.deltaY,
777
+ deltaZ: 0,
778
+ deltaMode: data.deltaMode,
722
779
  target: this.__target ?? this,
723
- clientX: pointer.x,
724
- clientY: pointer.y,
725
- screenX: pointer.x,
726
- screenY: pointer.y,
727
- pageX: pointer.x,
728
- pageY: pointer.y,
729
- }));
730
- }
731
- const touches = TouchList.fromList(this._touches);
732
- const event = new TouchEvent('touchmove', {
733
- touches,
734
- targetTouches: touches,
735
- changedTouches,
736
- target: this.__target ?? this,
737
- });
738
- for (const callback of this._touchMoveCallbacks) {
739
- callback(event);
780
+ });
781
+ for (const callback of this._mouseWheelCallbacks) {
782
+ callback(event);
783
+ }
740
784
  }
741
785
  }
742
786
  }
@@ -782,6 +826,9 @@ let CanvasBase = class CanvasBase extends View {
782
826
  }
783
827
  setPointerCapture(id) { }
784
828
  releasePointerCapture(id) { }
829
+ getRootNode() {
830
+ return this;
831
+ }
785
832
  };
786
833
  CanvasBase.readyEvent = 'ready';
787
834
  CanvasBase = __decorate([