@tldraw/editor 3.16.0-canary.cc5427cdff41 → 3.16.0-canary.cd822ae4ebee

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 (108) hide show
  1. package/dist-cjs/index.d.ts +57 -4
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/lib/TldrawEditor.js +1 -3
  4. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  5. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +11 -1
  6. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  7. package/dist-cjs/lib/editor/Editor.js +38 -4
  8. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  9. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +4 -0
  10. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +2 -2
  11. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +4 -2
  12. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +2 -2
  13. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +10 -0
  14. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  15. package/dist-cjs/lib/hooks/useCanvasEvents.js +19 -16
  16. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  17. package/dist-cjs/lib/hooks/useDocumentEvents.js +5 -5
  18. package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
  19. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +1 -2
  20. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  21. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  22. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  23. package/dist-cjs/lib/hooks/useHandleEvents.js +6 -6
  24. package/dist-cjs/lib/hooks/useHandleEvents.js.map +2 -2
  25. package/dist-cjs/lib/hooks/useSelectionEvents.js +8 -8
  26. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +2 -2
  27. package/dist-cjs/lib/license/LicenseManager.js +24 -4
  28. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  29. package/dist-cjs/lib/license/LicenseProvider.js +17 -1
  30. package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
  31. package/dist-cjs/lib/license/Watermark.js +97 -90
  32. package/dist-cjs/lib/license/Watermark.js.map +2 -2
  33. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +24 -2
  34. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  35. package/dist-cjs/lib/primitives/geometry/Group2d.js +5 -1
  36. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  37. package/dist-cjs/lib/utils/dom.js.map +2 -2
  38. package/dist-cjs/lib/utils/getPointerInfo.js +2 -3
  39. package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
  40. package/dist-cjs/version.js +3 -3
  41. package/dist-cjs/version.js.map +1 -1
  42. package/dist-esm/index.d.mts +57 -4
  43. package/dist-esm/index.mjs +1 -1
  44. package/dist-esm/lib/TldrawEditor.mjs +1 -3
  45. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  46. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +11 -1
  47. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  48. package/dist-esm/lib/editor/Editor.mjs +38 -4
  49. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  50. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +4 -0
  51. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +2 -2
  52. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +4 -2
  53. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +2 -2
  54. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +10 -0
  55. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  56. package/dist-esm/lib/hooks/useCanvasEvents.mjs +20 -22
  57. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  58. package/dist-esm/lib/hooks/useDocumentEvents.mjs +6 -6
  59. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  60. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +1 -2
  61. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  62. package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
  63. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  64. package/dist-esm/lib/hooks/useHandleEvents.mjs +6 -6
  65. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
  66. package/dist-esm/lib/hooks/useSelectionEvents.mjs +9 -14
  67. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
  68. package/dist-esm/lib/license/LicenseManager.mjs +24 -4
  69. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  70. package/dist-esm/lib/license/LicenseProvider.mjs +16 -1
  71. package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
  72. package/dist-esm/lib/license/Watermark.mjs +98 -91
  73. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  74. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +24 -2
  75. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  76. package/dist-esm/lib/primitives/geometry/Group2d.mjs +5 -1
  77. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  78. package/dist-esm/lib/utils/dom.mjs.map +2 -2
  79. package/dist-esm/lib/utils/getPointerInfo.mjs +2 -3
  80. package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
  81. package/dist-esm/version.mjs +3 -3
  82. package/dist-esm/version.mjs.map +1 -1
  83. package/package.json +7 -7
  84. package/src/lib/TldrawEditor.tsx +1 -4
  85. package/src/lib/components/default-components/DefaultCanvas.tsx +7 -1
  86. package/src/lib/editor/Editor.test.ts +90 -0
  87. package/src/lib/editor/Editor.ts +49 -4
  88. package/src/lib/editor/derivations/notVisibleShapes.ts +6 -0
  89. package/src/lib/editor/managers/FocusManager/FocusManager.ts +6 -2
  90. package/src/lib/editor/shapes/ShapeUtil.ts +11 -0
  91. package/src/lib/hooks/useCanvasEvents.ts +20 -20
  92. package/src/lib/hooks/useDocumentEvents.ts +6 -6
  93. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
  94. package/src/lib/hooks/useGestureEvents.ts +2 -2
  95. package/src/lib/hooks/useHandleEvents.ts +6 -6
  96. package/src/lib/hooks/useSelectionEvents.ts +9 -14
  97. package/src/lib/license/LicenseManager.test.ts +78 -2
  98. package/src/lib/license/LicenseManager.ts +31 -5
  99. package/src/lib/license/LicenseProvider.tsx +40 -1
  100. package/src/lib/license/Watermark.tsx +100 -92
  101. package/src/lib/primitives/geometry/Geometry2d.test.ts +420 -0
  102. package/src/lib/primitives/geometry/Geometry2d.ts +29 -2
  103. package/src/lib/primitives/geometry/Group2d.ts +6 -1
  104. package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
  105. package/src/lib/utils/dom.test.ts +103 -0
  106. package/src/lib/utils/dom.ts +8 -1
  107. package/src/lib/utils/getPointerInfo.ts +3 -2
  108. package/src/version.ts +3 -3
@@ -0,0 +1,103 @@
1
+ import { TestEditor } from '../test/TestEditor'
2
+
3
+ describe('Event handling utilities', () => {
4
+ let editor: TestEditor
5
+
6
+ beforeEach(() => {
7
+ editor = new TestEditor()
8
+ })
9
+
10
+ afterEach(() => {
11
+ editor.dispose()
12
+ })
13
+ describe('markEventAsHandled and wasEventAlreadyHandled', () => {
14
+ it('should track events as handled', () => {
15
+ const mockEvent = new PointerEvent('pointerdown', { pointerId: 1 })
16
+
17
+ // Initially, event should not be marked as handled
18
+ expect(editor.wasEventAlreadyHandled(mockEvent)).toBe(false)
19
+
20
+ // Mark the event as handled
21
+ editor.markEventAsHandled(mockEvent)
22
+
23
+ // Now it should be marked as handled
24
+ expect(editor.wasEventAlreadyHandled(mockEvent)).toBe(true)
25
+ })
26
+
27
+ it('should work with React synthetic events', () => {
28
+ const nativeEvent = new PointerEvent('pointerdown', { pointerId: 1 })
29
+ const syntheticEvent = { nativeEvent }
30
+
31
+ // Initially not handled
32
+ expect(editor.wasEventAlreadyHandled(syntheticEvent)).toBe(false)
33
+ expect(editor.wasEventAlreadyHandled(nativeEvent)).toBe(false)
34
+
35
+ // Mark synthetic event as handled
36
+ editor.markEventAsHandled(syntheticEvent)
37
+
38
+ // Both synthetic and native should be marked as handled
39
+ expect(editor.wasEventAlreadyHandled(syntheticEvent)).toBe(true)
40
+ expect(editor.wasEventAlreadyHandled(nativeEvent)).toBe(true)
41
+ })
42
+
43
+ it('should handle multiple different events independently', () => {
44
+ const event1 = new PointerEvent('pointerdown', { pointerId: 1 })
45
+ const event2 = new PointerEvent('pointerup', { pointerId: 2 })
46
+ const event3 = new MouseEvent('click')
47
+
48
+ // Mark only event1 as handled
49
+ editor.markEventAsHandled(event1)
50
+
51
+ expect(editor.wasEventAlreadyHandled(event1)).toBe(true)
52
+ expect(editor.wasEventAlreadyHandled(event2)).toBe(false)
53
+ expect(editor.wasEventAlreadyHandled(event3)).toBe(false)
54
+
55
+ // Mark event2 as handled
56
+ editor.markEventAsHandled(event2)
57
+
58
+ expect(editor.wasEventAlreadyHandled(event1)).toBe(true)
59
+ expect(editor.wasEventAlreadyHandled(event2)).toBe(true)
60
+ expect(editor.wasEventAlreadyHandled(event3)).toBe(false)
61
+ })
62
+
63
+ it('should not interfere with event properties', () => {
64
+ const event = new PointerEvent('pointerdown', {
65
+ pointerId: 1,
66
+ clientX: 100,
67
+ clientY: 200,
68
+ })
69
+
70
+ // Mark as handled
71
+ editor.markEventAsHandled(event)
72
+
73
+ // Event properties should remain unchanged
74
+ expect(event.pointerId).toBe(1)
75
+ expect(event.clientX).toBe(100)
76
+ expect(event.clientY).toBe(200)
77
+ expect(event.type).toBe('pointerdown')
78
+ })
79
+
80
+ it('should work with touch events', () => {
81
+ const touchEvent = new TouchEvent('touchstart', {
82
+ touches: [
83
+ {
84
+ clientX: 50,
85
+ clientY: 60,
86
+ } as Touch,
87
+ ],
88
+ })
89
+
90
+ expect(editor.wasEventAlreadyHandled(touchEvent)).toBe(false)
91
+ editor.markEventAsHandled(touchEvent)
92
+ expect(editor.wasEventAlreadyHandled(touchEvent)).toBe(true)
93
+ })
94
+
95
+ it('should work with keyboard events', () => {
96
+ const keyEvent = new KeyboardEvent('keydown', { key: 'Enter' })
97
+
98
+ expect(editor.wasEventAlreadyHandled(keyEvent)).toBe(false)
99
+ editor.markEventAsHandled(keyEvent)
100
+ expect(editor.wasEventAlreadyHandled(keyEvent)).toBe(true)
101
+ })
102
+ })
103
+ })
@@ -78,7 +78,14 @@ export function releasePointerCapture(
78
78
  }
79
79
  }
80
80
 
81
- /** @public */
81
+ /**
82
+ * Calls `event.stopPropagation()`.
83
+ *
84
+ * @deprecated Use {@link Editor.markEventAsHandled} instead, or manually call `event.stopPropagation()` if
85
+ * that's what you really want.
86
+ *
87
+ * @public
88
+ */
82
89
  export const stopEventPropagation = (e: any) => e.stopPropagation()
83
90
 
84
91
  /** @internal */
@@ -1,8 +1,9 @@
1
+ import { Editor } from '../editor/Editor'
1
2
  import { isAccelKey } from './keyboard'
2
3
 
3
4
  /** @public */
4
- export function getPointerInfo(e: React.PointerEvent | PointerEvent) {
5
- ;(e as any).isKilled = true
5
+ export function getPointerInfo(editor: Editor, e: React.PointerEvent | PointerEvent) {
6
+ editor.markEventAsHandled(e)
6
7
 
7
8
  return {
8
9
  point: {
package/src/version.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  // This file is automatically generated by internal/scripts/refresh-assets.ts.
2
2
  // Do not edit manually. Or do, I'm a comment, not a cop.
3
3
 
4
- export const version = '3.16.0-canary.cc5427cdff41'
4
+ export const version = '3.16.0-canary.cd822ae4ebee'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-09-08T21:56:42.443Z',
8
- patch: '2025-09-08T21:56:42.443Z',
7
+ minor: '2025-09-18T10:46:54.006Z',
8
+ patch: '2025-09-18T10:46:54.006Z',
9
9
  }