@tldraw/editor 4.3.0-next.f4772c19540d → 4.4.0-canary.29afdff6bb04

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 (206) hide show
  1. package/README.md +1 -1
  2. package/dist-cjs/index.d.ts +503 -155
  3. package/dist-cjs/index.js +8 -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 +4 -5
  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 +346 -291
  13. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  14. package/dist-cjs/lib/editor/bindings/BindingUtil.js.map +2 -2
  15. package/dist-cjs/lib/editor/derivations/bindingsIndex.js.map +2 -2
  16. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +16 -23
  17. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +3 -3
  18. package/dist-cjs/lib/editor/derivations/parentsToChildren.js +12 -3
  19. package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
  20. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js +1 -1
  21. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +2 -2
  22. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +5 -6
  23. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
  24. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +591 -0
  25. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +7 -0
  26. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +1 -1
  27. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
  28. package/dist-cjs/lib/editor/managers/SpatialIndexManager/RBushIndex.js +144 -0
  29. package/dist-cjs/lib/editor/managers/SpatialIndexManager/RBushIndex.js.map +7 -0
  30. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +181 -0
  31. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +7 -0
  32. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +1 -22
  33. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +2 -2
  34. package/dist-cjs/lib/editor/shapes/BaseBoxShapeUtil.js.map +1 -1
  35. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +31 -23
  36. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  37. package/dist-cjs/lib/editor/shapes/group/DashedOutlineBox.js +1 -1
  38. package/dist-cjs/lib/editor/shapes/group/DashedOutlineBox.js.map +2 -2
  39. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
  40. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.js.map +2 -2
  41. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js +3 -3
  42. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js.map +2 -2
  43. package/dist-cjs/lib/editor/types/emit-types.js.map +1 -1
  44. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  45. package/dist-cjs/lib/exports/parseCss.js +1 -1
  46. package/dist-cjs/lib/exports/parseCss.js.map +2 -2
  47. package/dist-cjs/lib/globals/environment.js +45 -9
  48. package/dist-cjs/lib/globals/environment.js.map +2 -2
  49. package/dist-cjs/lib/globals/menus.js +1 -1
  50. package/dist-cjs/lib/globals/menus.js.map +2 -2
  51. package/dist-cjs/lib/hooks/useCoarsePointer.js +14 -29
  52. package/dist-cjs/lib/hooks/useCoarsePointer.js.map +2 -2
  53. package/dist-cjs/lib/hooks/useEvent.js +1 -1
  54. package/dist-cjs/lib/hooks/useEvent.js.map +2 -2
  55. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  56. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  57. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  58. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
  59. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
  60. package/dist-cjs/lib/hooks/useScreenBounds.js.map +2 -2
  61. package/dist-cjs/lib/hooks/useStateAttribute.js +4 -1
  62. package/dist-cjs/lib/hooks/useStateAttribute.js.map +2 -2
  63. package/dist-cjs/lib/hooks/useTransform.js.map +1 -1
  64. package/dist-cjs/lib/hooks/useZoomCss.js +4 -8
  65. package/dist-cjs/lib/hooks/useZoomCss.js.map +2 -2
  66. package/dist-cjs/lib/options.js +6 -1
  67. package/dist-cjs/lib/options.js.map +2 -2
  68. package/dist-cjs/lib/primitives/Box.js +3 -0
  69. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  70. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +1 -0
  71. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  72. package/dist-cjs/lib/utils/reparenting.js.map +2 -2
  73. package/dist-cjs/lib/utils/rotation.js +1 -1
  74. package/dist-cjs/lib/utils/rotation.js.map +2 -2
  75. package/dist-cjs/version.js +3 -3
  76. package/dist-cjs/version.js.map +1 -1
  77. package/dist-esm/index.d.mts +503 -155
  78. package/dist-esm/index.mjs +9 -2
  79. package/dist-esm/index.mjs.map +2 -2
  80. package/dist-esm/lib/components/ErrorBoundary.mjs.map +1 -1
  81. package/dist-esm/lib/components/GeometryDebuggingView.mjs +1 -17
  82. package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +2 -2
  83. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +4 -5
  84. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  85. package/dist-esm/lib/constants.mjs +1 -3
  86. package/dist-esm/lib/constants.mjs.map +2 -2
  87. package/dist-esm/lib/editor/Editor.mjs +347 -294
  88. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  89. package/dist-esm/lib/editor/bindings/BindingUtil.mjs.map +2 -2
  90. package/dist-esm/lib/editor/derivations/bindingsIndex.mjs.map +2 -2
  91. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +16 -23
  92. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +3 -3
  93. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs +13 -4
  94. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
  95. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs +1 -1
  96. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +2 -2
  97. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +5 -6
  98. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
  99. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +573 -0
  100. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +7 -0
  101. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +1 -1
  102. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
  103. package/dist-esm/lib/editor/managers/SpatialIndexManager/RBushIndex.mjs +114 -0
  104. package/dist-esm/lib/editor/managers/SpatialIndexManager/RBushIndex.mjs.map +7 -0
  105. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +161 -0
  106. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +7 -0
  107. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +1 -22
  108. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +2 -2
  109. package/dist-esm/lib/editor/shapes/BaseBoxShapeUtil.mjs.map +1 -1
  110. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +31 -23
  111. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  112. package/dist-esm/lib/editor/shapes/group/DashedOutlineBox.mjs +1 -1
  113. package/dist-esm/lib/editor/shapes/group/DashedOutlineBox.mjs.map +2 -2
  114. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
  115. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.mjs.map +2 -2
  116. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs +3 -3
  117. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs.map +2 -2
  118. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  119. package/dist-esm/lib/exports/parseCss.mjs +1 -1
  120. package/dist-esm/lib/exports/parseCss.mjs.map +2 -2
  121. package/dist-esm/lib/globals/environment.mjs +45 -9
  122. package/dist-esm/lib/globals/environment.mjs.map +2 -2
  123. package/dist-esm/lib/globals/menus.mjs +1 -1
  124. package/dist-esm/lib/globals/menus.mjs.map +2 -2
  125. package/dist-esm/lib/hooks/useCoarsePointer.mjs +15 -30
  126. package/dist-esm/lib/hooks/useCoarsePointer.mjs.map +2 -2
  127. package/dist-esm/lib/hooks/useEvent.mjs +1 -1
  128. package/dist-esm/lib/hooks/useEvent.mjs.map +2 -2
  129. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  130. package/dist-esm/lib/hooks/useGestureEvents.mjs +1 -1
  131. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  132. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
  133. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
  134. package/dist-esm/lib/hooks/useScreenBounds.mjs.map +2 -2
  135. package/dist-esm/lib/hooks/useStateAttribute.mjs +4 -1
  136. package/dist-esm/lib/hooks/useStateAttribute.mjs.map +2 -2
  137. package/dist-esm/lib/hooks/useTransform.mjs.map +1 -1
  138. package/dist-esm/lib/hooks/useZoomCss.mjs +4 -8
  139. package/dist-esm/lib/hooks/useZoomCss.mjs.map +2 -2
  140. package/dist-esm/lib/options.mjs +6 -1
  141. package/dist-esm/lib/options.mjs.map +2 -2
  142. package/dist-esm/lib/primitives/Box.mjs +3 -0
  143. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  144. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +1 -0
  145. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  146. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  147. package/dist-esm/lib/utils/rotation.mjs +1 -1
  148. package/dist-esm/lib/utils/rotation.mjs.map +2 -2
  149. package/dist-esm/version.mjs +3 -3
  150. package/dist-esm/version.mjs.map +1 -1
  151. package/editor.css +14 -12
  152. package/package.json +21 -17
  153. package/src/index.ts +5 -1
  154. package/src/lib/components/ErrorBoundary.tsx +1 -1
  155. package/src/lib/components/GeometryDebuggingView.tsx +1 -19
  156. package/src/lib/components/default-components/DefaultCanvas.tsx +5 -8
  157. package/src/lib/config/TLUserPreferences.test.ts +40 -0
  158. package/src/lib/constants.ts +0 -2
  159. package/src/lib/editor/Editor.test.ts +150 -10
  160. package/src/lib/editor/Editor.ts +533 -384
  161. package/src/lib/editor/bindings/BindingUtil.ts +15 -9
  162. package/src/lib/editor/derivations/bindingsIndex.ts +2 -2
  163. package/src/lib/editor/derivations/notVisibleShapes.ts +21 -33
  164. package/src/lib/editor/derivations/parentsToChildren.ts +18 -7
  165. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +17 -31
  166. package/src/lib/editor/managers/ClickManager/ClickManager.ts +1 -1
  167. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +129 -79
  168. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +10 -6
  169. package/src/lib/editor/managers/FontManager/FontManager.test.ts +14 -4
  170. package/src/lib/editor/managers/InputsManager/InputsManager.ts +566 -0
  171. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +0 -4
  172. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +12 -0
  173. package/src/lib/editor/managers/SnapManager/SnapManager.ts +4 -4
  174. package/src/lib/editor/managers/SpatialIndexManager/RBushIndex.ts +144 -0
  175. package/src/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.ts +215 -0
  176. package/src/lib/editor/managers/TickManager/TickManager.test.ts +40 -107
  177. package/src/lib/editor/managers/TickManager/TickManager.ts +2 -32
  178. package/src/lib/editor/shapes/BaseBoxShapeUtil.tsx +2 -2
  179. package/src/lib/editor/shapes/ShapeUtil.ts +72 -32
  180. package/src/lib/editor/shapes/group/DashedOutlineBox.tsx +1 -1
  181. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +1 -3
  182. package/src/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.ts +2 -1
  183. package/src/lib/editor/tools/BaseBoxShapeTool/children/Pointing.ts +6 -6
  184. package/src/lib/editor/types/emit-types.ts +3 -1
  185. package/src/lib/exports/getSvgJsx.test.ts +10 -19
  186. package/src/lib/exports/getSvgJsx.tsx +2 -5
  187. package/src/lib/exports/parseCss.test.ts +1 -0
  188. package/src/lib/exports/parseCss.ts +1 -1
  189. package/src/lib/globals/environment.ts +65 -10
  190. package/src/lib/globals/menus.ts +1 -1
  191. package/src/lib/hooks/useCoarsePointer.ts +16 -59
  192. package/src/lib/hooks/useEvent.tsx +1 -1
  193. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
  194. package/src/lib/hooks/useGestureEvents.ts +2 -2
  195. package/src/lib/hooks/usePassThroughMouseOverEvents.ts +1 -1
  196. package/src/lib/hooks/usePassThroughWheelEvents.ts +1 -1
  197. package/src/lib/hooks/useScreenBounds.ts +1 -1
  198. package/src/lib/hooks/useStateAttribute.ts +4 -1
  199. package/src/lib/hooks/useTransform.ts +1 -1
  200. package/src/lib/hooks/useZoomCss.ts +3 -8
  201. package/src/lib/options.ts +32 -0
  202. package/src/lib/primitives/Box.ts +9 -0
  203. package/src/lib/primitives/geometry/Geometry2d.ts +1 -0
  204. package/src/lib/utils/reparenting.ts +5 -5
  205. package/src/lib/utils/rotation.ts +1 -1
  206. package/src/version.ts +3 -3
@@ -75,7 +75,7 @@ const isWheelEndEvent = (time: number) => {
75
75
  return false
76
76
  }
77
77
 
78
- export function useGestureEvents(ref: React.RefObject<HTMLDivElement>) {
78
+ export function useGestureEvents(ref: React.RefObject<HTMLDivElement | null>) {
79
79
  const editor = useEditor()
80
80
 
81
81
  const events = React.useMemo(() => {
@@ -105,7 +105,7 @@ export function useGestureEvents(ref: React.RefObject<HTMLDivElement>) {
105
105
  const util = editor.getShapeUtil(shape)
106
106
  if (util.canScroll(shape)) {
107
107
  const bounds = editor.getShapePageBounds(editingShapeId)
108
- if (bounds?.containsPoint(editor.inputs.currentPagePoint)) {
108
+ if (bounds?.containsPoint(editor.inputs.getCurrentPagePoint())) {
109
109
  return
110
110
  }
111
111
  }
@@ -4,7 +4,7 @@ import { useContainer } from './useContainer'
4
4
  import { useMaybeEditor } from './useEditor'
5
5
 
6
6
  /** @public */
7
- export function usePassThroughMouseOverEvents(ref: RefObject<HTMLElement>) {
7
+ export function usePassThroughMouseOverEvents(ref: RefObject<HTMLElement | null>) {
8
8
  if (!ref) throw Error('usePassThroughWheelEvents must be passed a ref')
9
9
  const container = useContainer()
10
10
  const editor = useMaybeEditor()
@@ -4,7 +4,7 @@ import { useContainer } from './useContainer'
4
4
  import { useMaybeEditor } from './useEditor'
5
5
 
6
6
  /** @public */
7
- export function usePassThroughWheelEvents(ref: RefObject<HTMLElement>) {
7
+ export function usePassThroughWheelEvents(ref: RefObject<HTMLElement | null>) {
8
8
  if (!ref) throw Error('usePassThroughWheelEvents must be passed a ref')
9
9
  const container = useContainer()
10
10
  const editor = useMaybeEditor()
@@ -2,7 +2,7 @@ import { throttle } from '@tldraw/utils'
2
2
  import { useLayoutEffect } from 'react'
3
3
  import { useEditor } from './useEditor'
4
4
 
5
- export function useScreenBounds(ref: React.RefObject<HTMLElement>) {
5
+ export function useScreenBounds(ref: React.RefObject<HTMLElement | null>) {
6
6
  const editor = useEditor()
7
7
 
8
8
  useLayoutEffect(() => {
@@ -9,7 +9,10 @@ export function useStateAttribute() {
9
9
  // editor mounting and this attribute being applied, because styles may depend on it:
10
10
  useLayoutEffect(() => {
11
11
  return react('stateAttribute', () => {
12
- editor.getContainer().setAttribute('data-state', editor.getPath())
12
+ const container = editor.getContainer()
13
+ const instanceState = editor.getInstanceState()
14
+ container.setAttribute('data-state', editor.getPath())
15
+ container.setAttribute('data-coarse', String(instanceState.isCoarsePointer))
13
16
  })
14
17
  }, [editor])
15
18
  }
@@ -3,7 +3,7 @@ import { VecLike } from '../primitives/Vec'
3
3
 
4
4
  /** @public */
5
5
  export function useTransform(
6
- ref: React.RefObject<HTMLElement | SVGElement>,
6
+ ref: React.RefObject<HTMLElement | SVGElement | null>,
7
7
  x?: number,
8
8
  y?: number,
9
9
  scale?: number,
@@ -12,14 +12,9 @@ export function useZoomCss() {
12
12
  const setScale = (s: number) => container.style.setProperty('--tl-zoom', s.toString())
13
13
  const setScaleDebounced = debounce(setScale, 100)
14
14
 
15
- const scheduler = new EffectScheduler('useZoomCss', () => {
16
- const numShapes = editor.getCurrentPageShapeIds().size
17
- if (numShapes < 300) {
18
- setScale(editor.getZoomLevel())
19
- } else {
20
- setScaleDebounced(editor.getZoomLevel())
21
- }
22
- })
15
+ const scheduler = new EffectScheduler('useZoomCss', () =>
16
+ setScale(editor.getEfficientZoomLevel())
17
+ )
23
18
 
24
19
  scheduler.attach()
25
20
  scheduler.execute()
@@ -87,6 +87,33 @@ export interface TldrawOptions {
87
87
  * Branding name of the app, currently only used for adding aria-label for the application.
88
88
  */
89
89
  readonly branding?: string
90
+ /**
91
+ * Whether to use debounced zoom level for certain rendering optimizations. When true,
92
+ * `editor.getDebouncedZoomLevel()` returns a cached zoom value while the camera is moving,
93
+ * reducing re-renders. When false, it always returns the current zoom level.
94
+ */
95
+ readonly debouncedZoom: boolean
96
+ /**
97
+ * The number of shapes that must be on the page for the debounced zoom level to be used.
98
+ * Defaults to 300 shapes.
99
+ */
100
+ readonly debouncedZoomThreshold: number
101
+ /**
102
+ * Whether to allow spacebar panning. When true, the spacebar will pan the camera when held down.
103
+ * When false, the spacebar will not pan the camera.
104
+ */
105
+ readonly spacebarPanning: boolean
106
+ /**
107
+ * The default padding (in pixels) used when zooming to fit content in the viewport.
108
+ * This affects methods like `zoomToFit()`, `zoomToSelection()`, and `zoomToBounds()`.
109
+ * The actual padding used is the minimum of this value and 28% of the viewport width.
110
+ * Defaults to 128 pixels.
111
+ */
112
+ readonly zoomToFitPadding: number
113
+ /**
114
+ * The distance (in screen pixels) at which shapes snap to guides and other shapes.
115
+ */
116
+ readonly snapThreshold: number
90
117
  }
91
118
 
92
119
  /** @public */
@@ -139,4 +166,9 @@ export const defaultTldrawOptions = {
139
166
  enableToolbarKeyboardShortcuts: true,
140
167
  maxFontsToLoadBeforeRender: Infinity,
141
168
  nonce: undefined,
169
+ debouncedZoom: true,
170
+ debouncedZoomThreshold: 500,
171
+ spacebarPanning: true,
172
+ zoomToFitPadding: 128,
173
+ snapThreshold: 8,
142
174
  } as const satisfies TldrawOptions
@@ -180,6 +180,15 @@ export class Box {
180
180
  return new Vec(this.w, this.h)
181
181
  }
182
182
 
183
+ isValid() {
184
+ return (
185
+ Number.isFinite(this.x) &&
186
+ Number.isFinite(this.y) &&
187
+ Number.isFinite(this.w) &&
188
+ Number.isFinite(this.h)
189
+ )
190
+ }
191
+
183
192
  toFixed() {
184
193
  this.x = toPrecision(this.x)
185
194
  this.y = toPrecision(this.y)
@@ -140,6 +140,7 @@ export abstract class Geometry2d {
140
140
  }
141
141
  }
142
142
  if (!nearest) throw Error('nearest point not found')
143
+ dist = Math.sqrt(dist) // return the actual distance, not the squared distance
143
144
  return this.isClosed && this.isFilled && pointInPolygon(nearest, this.vertices) ? -dist : dist
144
145
  }
145
146
 
@@ -95,8 +95,8 @@ export function kickoutOccludedShapes(
95
95
  if (remainingShapesToReparent.size > 0) {
96
96
  // The remaining shapes are going to be reparented to the old parent's containing group, if there was one, or else to the page
97
97
  const newParentId =
98
- editor.findShapeAncestor(prevParent, (s) => editor.isShapeOfType<TLGroupShape>(s, 'group'))
99
- ?.id ?? editor.getCurrentPageId()
98
+ editor.findShapeAncestor(prevParent, (s) => editor.isShapeOfType(s, 'group'))?.id ??
99
+ editor.getCurrentPageId()
100
100
 
101
101
  remainingShapesToReparent.forEach((shape) => {
102
102
  if (!parentsToNewChildren[newParentId]) {
@@ -211,7 +211,7 @@ export function getDroppedShapesToNewParents(
211
211
 
212
212
  for (const shape of shapes) {
213
213
  const parent = editor.getShapeParent(shape)
214
- if (parent && editor.isShapeOfType<TLGroupShape>(parent, 'group')) {
214
+ if (parent && editor.isShapeOfType(parent, 'group')) {
215
215
  if (!movingGroups.has(parent)) {
216
216
  movingGroups.add(parent)
217
217
  }
@@ -248,7 +248,7 @@ export function getDroppedShapesToNewParents(
248
248
  parentCheck: for (let i = potentialParentShapes.length - 1; i >= 0; i--) {
249
249
  const parentShape = potentialParentShapes[i]
250
250
  const parentShapeContainingGroupId = editor.findShapeAncestor(parentShape, (s) =>
251
- editor.isShapeOfType<TLGroupShape>(s, 'group')
251
+ editor.isShapeOfType(s, 'group')
252
252
  )?.id
253
253
 
254
254
  const parentGeometry = editor.getShapeGeometry(parentShape)
@@ -274,7 +274,7 @@ export function getDroppedShapesToNewParents(
274
274
  if (!shapeGroupIds.has(shape.id)) {
275
275
  shapeGroupIds.set(
276
276
  shape.id,
277
- editor.findShapeAncestor(shape, (s) => editor.isShapeOfType<TLGroupShape>(s, 'group'))?.id
277
+ editor.findShapeAncestor(shape, (s) => editor.isShapeOfType(s, 'group'))?.id
278
278
  )
279
279
  }
280
280
 
@@ -32,7 +32,7 @@ export function getRotationSnapshot({
32
32
 
33
33
  return {
34
34
  initialPageCenter,
35
- initialCursorAngle: initialPageCenter.angle(editor.inputs.originPagePoint),
35
+ initialCursorAngle: initialPageCenter.angle(editor.inputs.getOriginPagePoint()),
36
36
  initialShapesRotation: rotation,
37
37
  shapeSnapshots: shapes.map((shape) => ({
38
38
  shape,
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 = '4.3.0-next.f4772c19540d'
4
+ export const version = '4.4.0-canary.29afdff6bb04'
5
5
  export const publishDates = {
6
6
  major: '2025-09-18T14:39:22.803Z',
7
- minor: '2025-11-25T09:10:05.987Z',
8
- patch: '2025-11-25T09:10:05.987Z',
7
+ minor: '2026-01-21T13:27:27.357Z',
8
+ patch: '2026-01-21T13:27:27.357Z',
9
9
  }