@tldraw/editor 4.3.0-canary.bf87ebaf143a → 4.3.0-canary.c08047039e53

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 (156) hide show
  1. package/README.md +1 -1
  2. package/dist-cjs/index.d.ts +392 -118
  3. package/dist-cjs/index.js +7 -1
  4. package/dist-cjs/index.js.map +2 -2
  5. package/dist-cjs/lib/components/ErrorBoundary.js.map +1 -1
  6. package/dist-cjs/lib/components/GeometryDebuggingView.js +1 -17
  7. package/dist-cjs/lib/components/GeometryDebuggingView.js.map +2 -2
  8. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -2
  9. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  10. package/dist-cjs/lib/constants.js +1 -3
  11. package/dist-cjs/lib/constants.js.map +2 -2
  12. package/dist-cjs/lib/editor/Editor.js +301 -278
  13. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  14. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +16 -23
  15. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +3 -3
  16. package/dist-cjs/lib/editor/derivations/parentsToChildren.js +12 -3
  17. package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
  18. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js +1 -1
  19. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +2 -2
  20. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +5 -6
  21. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
  22. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +591 -0
  23. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +7 -0
  24. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +1 -1
  25. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
  26. package/dist-cjs/lib/editor/managers/SpatialIndexManager/RBushIndex.js +144 -0
  27. package/dist-cjs/lib/editor/managers/SpatialIndexManager/RBushIndex.js.map +7 -0
  28. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +181 -0
  29. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +7 -0
  30. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +1 -22
  31. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +2 -2
  32. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +31 -23
  33. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  34. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js +3 -3
  35. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js.map +2 -2
  36. package/dist-cjs/lib/exports/parseCss.js +1 -1
  37. package/dist-cjs/lib/exports/parseCss.js.map +2 -2
  38. package/dist-cjs/lib/hooks/useEvent.js +1 -1
  39. package/dist-cjs/lib/hooks/useEvent.js.map +2 -2
  40. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  41. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  42. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  43. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
  44. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
  45. package/dist-cjs/lib/hooks/useScreenBounds.js.map +2 -2
  46. package/dist-cjs/lib/hooks/useStateAttribute.js +4 -1
  47. package/dist-cjs/lib/hooks/useStateAttribute.js.map +2 -2
  48. package/dist-cjs/lib/hooks/useTransform.js.map +1 -1
  49. package/dist-cjs/lib/options.js +4 -1
  50. package/dist-cjs/lib/options.js.map +2 -2
  51. package/dist-cjs/lib/primitives/Box.js +3 -0
  52. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  53. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +1 -0
  54. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  55. package/dist-cjs/lib/utils/rotation.js +1 -1
  56. package/dist-cjs/lib/utils/rotation.js.map +2 -2
  57. package/dist-cjs/version.js +3 -3
  58. package/dist-cjs/version.js.map +1 -1
  59. package/dist-esm/index.d.mts +392 -118
  60. package/dist-esm/index.mjs +7 -1
  61. package/dist-esm/index.mjs.map +2 -2
  62. package/dist-esm/lib/components/ErrorBoundary.mjs.map +1 -1
  63. package/dist-esm/lib/components/GeometryDebuggingView.mjs +1 -17
  64. package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +2 -2
  65. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -2
  66. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  67. package/dist-esm/lib/constants.mjs +1 -3
  68. package/dist-esm/lib/constants.mjs.map +2 -2
  69. package/dist-esm/lib/editor/Editor.mjs +302 -281
  70. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  71. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +16 -23
  72. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +3 -3
  73. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs +13 -4
  74. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
  75. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs +1 -1
  76. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +2 -2
  77. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +5 -6
  78. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
  79. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +573 -0
  80. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +7 -0
  81. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +1 -1
  82. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
  83. package/dist-esm/lib/editor/managers/SpatialIndexManager/RBushIndex.mjs +114 -0
  84. package/dist-esm/lib/editor/managers/SpatialIndexManager/RBushIndex.mjs.map +7 -0
  85. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +161 -0
  86. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +7 -0
  87. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +1 -22
  88. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +2 -2
  89. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +31 -23
  90. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  91. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs +3 -3
  92. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs.map +2 -2
  93. package/dist-esm/lib/exports/parseCss.mjs +1 -1
  94. package/dist-esm/lib/exports/parseCss.mjs.map +2 -2
  95. package/dist-esm/lib/hooks/useEvent.mjs +1 -1
  96. package/dist-esm/lib/hooks/useEvent.mjs.map +2 -2
  97. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  98. package/dist-esm/lib/hooks/useGestureEvents.mjs +1 -1
  99. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  100. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
  101. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
  102. package/dist-esm/lib/hooks/useScreenBounds.mjs.map +2 -2
  103. package/dist-esm/lib/hooks/useStateAttribute.mjs +4 -1
  104. package/dist-esm/lib/hooks/useStateAttribute.mjs.map +2 -2
  105. package/dist-esm/lib/hooks/useTransform.mjs.map +1 -1
  106. package/dist-esm/lib/options.mjs +4 -1
  107. package/dist-esm/lib/options.mjs.map +2 -2
  108. package/dist-esm/lib/primitives/Box.mjs +3 -0
  109. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  110. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +1 -0
  111. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  112. package/dist-esm/lib/utils/rotation.mjs +1 -1
  113. package/dist-esm/lib/utils/rotation.mjs.map +2 -2
  114. package/dist-esm/version.mjs +3 -3
  115. package/dist-esm/version.mjs.map +1 -1
  116. package/editor.css +6 -8
  117. package/package.json +21 -17
  118. package/src/index.ts +4 -0
  119. package/src/lib/components/ErrorBoundary.tsx +1 -1
  120. package/src/lib/components/GeometryDebuggingView.tsx +1 -19
  121. package/src/lib/components/default-components/DefaultCanvas.tsx +1 -5
  122. package/src/lib/config/TLUserPreferences.test.ts +40 -0
  123. package/src/lib/constants.ts +0 -2
  124. package/src/lib/editor/Editor.test.ts +140 -0
  125. package/src/lib/editor/Editor.ts +374 -321
  126. package/src/lib/editor/derivations/notVisibleShapes.ts +21 -33
  127. package/src/lib/editor/derivations/parentsToChildren.ts +18 -7
  128. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +17 -31
  129. package/src/lib/editor/managers/ClickManager/ClickManager.ts +1 -1
  130. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +129 -79
  131. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +10 -6
  132. package/src/lib/editor/managers/InputsManager/InputsManager.ts +566 -0
  133. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +0 -4
  134. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +12 -0
  135. package/src/lib/editor/managers/SnapManager/SnapManager.ts +1 -1
  136. package/src/lib/editor/managers/SpatialIndexManager/RBushIndex.ts +144 -0
  137. package/src/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.ts +215 -0
  138. package/src/lib/editor/managers/TickManager/TickManager.test.ts +40 -107
  139. package/src/lib/editor/managers/TickManager/TickManager.ts +2 -32
  140. package/src/lib/editor/shapes/ShapeUtil.ts +67 -24
  141. package/src/lib/editor/tools/BaseBoxShapeTool/children/Pointing.ts +3 -3
  142. package/src/lib/exports/parseCss.test.ts +1 -0
  143. package/src/lib/exports/parseCss.ts +1 -1
  144. package/src/lib/hooks/useEvent.tsx +1 -1
  145. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
  146. package/src/lib/hooks/useGestureEvents.ts +2 -2
  147. package/src/lib/hooks/usePassThroughMouseOverEvents.ts +1 -1
  148. package/src/lib/hooks/usePassThroughWheelEvents.ts +1 -1
  149. package/src/lib/hooks/useScreenBounds.ts +1 -1
  150. package/src/lib/hooks/useStateAttribute.ts +4 -1
  151. package/src/lib/hooks/useTransform.ts +1 -1
  152. package/src/lib/options.ts +19 -0
  153. package/src/lib/primitives/Box.ts +9 -0
  154. package/src/lib/primitives/geometry/Geometry2d.ts +1 -0
  155. package/src/lib/utils/rotation.ts +1 -1
  156. package/src/version.ts +3 -3
@@ -925,6 +925,146 @@ describe('replaceExternalContent', () => {
925
925
  })
926
926
  })
927
927
 
928
+ describe('dispatch event emission', () => {
929
+ let testEditor: Editor
930
+
931
+ beforeEach(() => {
932
+ testEditor = new Editor({
933
+ shapeUtils: [CustomShape],
934
+ bindingUtils: [],
935
+ tools: [],
936
+ store: createTLStore({ shapeUtils: [CustomShape], bindingUtils: [] }),
937
+ getContainer: () => document.body,
938
+ })
939
+ // Ensure camera is unlocked so events are processed
940
+ testEditor.setCameraOptions({ isLocked: false })
941
+ })
942
+
943
+ it('emits wheel events through the event emitter', () => {
944
+ const eventHandler = vi.fn()
945
+ testEditor.on('event', eventHandler)
946
+
947
+ const wheelEvent = {
948
+ type: 'wheel' as const,
949
+ name: 'wheel' as const,
950
+ delta: { x: 0, y: 10, z: 0 },
951
+ point: { x: 100, y: 100, z: 1 },
952
+ shiftKey: false,
953
+ altKey: false,
954
+ ctrlKey: false,
955
+ metaKey: false,
956
+ accelKey: false,
957
+ }
958
+
959
+ testEditor.dispatch(wheelEvent)
960
+ // Wheel events are batched for the next tick, so emit a tick to flush them
961
+ testEditor.emit('tick', 16)
962
+
963
+ expect(eventHandler).toHaveBeenCalledWith(wheelEvent)
964
+ })
965
+
966
+ it('emits pinch_start events through the event emitter', () => {
967
+ const eventHandler = vi.fn()
968
+ testEditor.on('event', eventHandler)
969
+
970
+ const pinchStartEvent = {
971
+ type: 'pinch' as const,
972
+ name: 'pinch_start' as const,
973
+ point: { x: 100, y: 100, z: 1 },
974
+ delta: { x: 0, y: 0, z: 0 },
975
+ shiftKey: false,
976
+ altKey: false,
977
+ ctrlKey: false,
978
+ metaKey: false,
979
+ accelKey: false,
980
+ }
981
+
982
+ testEditor.dispatch(pinchStartEvent)
983
+ // Pinch events are batched for the next tick, so emit a tick to flush them
984
+ testEditor.emit('tick', 16)
985
+
986
+ expect(eventHandler).toHaveBeenCalledWith(pinchStartEvent)
987
+ })
988
+
989
+ it('emits pinch events through the event emitter', () => {
990
+ const eventHandler = vi.fn()
991
+ testEditor.on('event', eventHandler)
992
+
993
+ // First dispatch pinch_start to set isPinching
994
+ const pinchStartEvent = {
995
+ type: 'pinch' as const,
996
+ name: 'pinch_start' as const,
997
+ point: { x: 100, y: 100, z: 1 },
998
+ delta: { x: 0, y: 0, z: 0 },
999
+ shiftKey: false,
1000
+ altKey: false,
1001
+ ctrlKey: false,
1002
+ metaKey: false,
1003
+ accelKey: false,
1004
+ }
1005
+ testEditor.dispatch(pinchStartEvent)
1006
+ testEditor.emit('tick', 16)
1007
+
1008
+ eventHandler.mockClear()
1009
+
1010
+ const pinchEvent = {
1011
+ type: 'pinch' as const,
1012
+ name: 'pinch' as const,
1013
+ point: { x: 100, y: 100, z: 1.5 },
1014
+ delta: { x: 10, y: 10, z: 0 },
1015
+ shiftKey: false,
1016
+ altKey: false,
1017
+ ctrlKey: false,
1018
+ metaKey: false,
1019
+ accelKey: false,
1020
+ }
1021
+
1022
+ testEditor.dispatch(pinchEvent)
1023
+ testEditor.emit('tick', 16)
1024
+
1025
+ expect(eventHandler).toHaveBeenCalledWith(pinchEvent)
1026
+ })
1027
+
1028
+ it('emits pinch_end events through the event emitter', () => {
1029
+ const eventHandler = vi.fn()
1030
+ testEditor.on('event', eventHandler)
1031
+
1032
+ // First dispatch pinch_start to set isPinching
1033
+ const pinchStartEvent = {
1034
+ type: 'pinch' as const,
1035
+ name: 'pinch_start' as const,
1036
+ point: { x: 100, y: 100, z: 1 },
1037
+ delta: { x: 0, y: 0, z: 0 },
1038
+ shiftKey: false,
1039
+ altKey: false,
1040
+ ctrlKey: false,
1041
+ metaKey: false,
1042
+ accelKey: false,
1043
+ }
1044
+ testEditor.dispatch(pinchStartEvent)
1045
+ testEditor.emit('tick', 16)
1046
+
1047
+ eventHandler.mockClear()
1048
+
1049
+ const pinchEndEvent = {
1050
+ type: 'pinch' as const,
1051
+ name: 'pinch_end' as const,
1052
+ point: { x: 100, y: 100, z: 1.5 },
1053
+ delta: { x: 0, y: 0, z: 0 },
1054
+ shiftKey: false,
1055
+ altKey: false,
1056
+ ctrlKey: false,
1057
+ metaKey: false,
1058
+ accelKey: false,
1059
+ }
1060
+
1061
+ testEditor.dispatch(pinchEndEvent)
1062
+ testEditor.emit('tick', 16)
1063
+
1064
+ expect(eventHandler).toHaveBeenCalledWith(pinchEndEvent)
1065
+ })
1066
+ })
1067
+
928
1068
  describe('setTool', () => {
929
1069
  class CustomToolA extends StateNode {
930
1070
  static override id = 'custom-tool-a'