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