tldraw 3.16.0-canary.9d418d03374a → 3.16.0-canary.a01bee214e16

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 (48) hide show
  1. package/dist-cjs/index.d.ts +1 -1
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +2 -1
  4. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  5. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +1 -0
  6. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  7. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +2 -1
  8. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  9. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
  10. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  11. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +26 -1
  12. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
  13. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +5 -5
  14. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +1 -1
  15. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +2 -2
  16. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +1 -1
  17. package/dist-cjs/lib/ui/version.js +3 -3
  18. package/dist-cjs/lib/ui/version.js.map +1 -1
  19. package/dist-esm/index.d.mts +1 -1
  20. package/dist-esm/index.mjs +1 -1
  21. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +2 -1
  22. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  23. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +1 -0
  24. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  25. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +2 -1
  26. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  27. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +1 -1
  28. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  29. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +27 -1
  30. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
  31. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +5 -5
  32. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +1 -1
  33. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +2 -2
  34. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +1 -1
  35. package/dist-esm/lib/ui/version.mjs +3 -3
  36. package/dist-esm/lib/ui/version.mjs.map +1 -1
  37. package/package.json +3 -3
  38. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +41 -0
  39. package/src/lib/shapes/frame/FrameShapeUtil.tsx +1 -0
  40. package/src/lib/shapes/geo/GeoShapeUtil.tsx +1 -0
  41. package/src/lib/shapes/note/NoteShapeUtil.tsx +1 -0
  42. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +2 -2
  43. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +41 -11
  44. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +6 -6
  45. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +2 -2
  46. package/src/lib/ui/version.ts +3 -3
  47. package/src/test/getCulledShapes.test.tsx +71 -2
  48. package/tldraw.css +8 -3
@@ -1,12 +1,50 @@
1
- import { Box, TLShapeId, createShapeId } from '@tldraw/editor'
1
+ import {
2
+ BaseBoxShapeUtil,
3
+ Box,
4
+ RecordProps,
5
+ T,
6
+ TLBaseShape,
7
+ TLShapeId,
8
+ createShapeId,
9
+ } from '@tldraw/editor'
2
10
  import { vi } from 'vitest'
3
11
  import { TestEditor } from './TestEditor'
4
12
  import { TL } from './test-jsx'
5
13
 
14
+ // Custom uncullable shape type for testing canCull override
15
+ type UncullableShape = TLBaseShape<'uncullable', { w: number; h: number }>
16
+
17
+ class UncullableShapeUtil extends BaseBoxShapeUtil<UncullableShape> {
18
+ static override type = 'uncullable' as const
19
+ static override props: RecordProps<UncullableShape> = {
20
+ w: T.number,
21
+ h: T.number,
22
+ }
23
+
24
+ override canCull() {
25
+ return false
26
+ }
27
+
28
+ override getDefaultProps(): UncullableShape['props'] {
29
+ return {
30
+ w: 100,
31
+ h: 100,
32
+ }
33
+ }
34
+
35
+ override component() {
36
+ return <div>Uncullable shape</div>
37
+ }
38
+
39
+ override indicator() {
40
+ return <div>Uncullable shape</div>
41
+ }
42
+ }
43
+
6
44
  let editor: TestEditor
7
45
 
8
46
  beforeEach(() => {
9
- editor = new TestEditor()
47
+ editor = new TestEditor({ shapeUtils: [UncullableShapeUtil] })
10
48
  editor.setScreenBounds({ x: 0, y: 0, w: 1800, h: 900 })
11
49
  })
12
50
 
@@ -203,3 +241,34 @@ it('works for shapes that are outside of the viewport, but are then moved inside
203
241
  // Arrow should also not be culled
204
242
  expect(editor.getCulledShapes()).toEqual(new Set())
205
243
  })
244
+
245
+ it('respects canCull override - shapes that cannot be culled are never culled', () => {
246
+ const cullableShapeId = createShapeId()
247
+ const uncullableShapeId = createShapeId()
248
+
249
+ // Create both shapes outside the viewport
250
+ editor.createShapes([
251
+ {
252
+ id: cullableShapeId,
253
+ type: 'geo',
254
+ x: -2000, // Way outside viewport
255
+ y: -2000,
256
+ props: { w: 100, h: 100 },
257
+ },
258
+ {
259
+ id: uncullableShapeId,
260
+ type: 'uncullable',
261
+ x: -2000, // Way outside viewport
262
+ y: -2000,
263
+ props: { w: 100, h: 100 },
264
+ },
265
+ ])
266
+
267
+ const culledShapes = editor.getCulledShapes()
268
+
269
+ // The regular geo shape should be culled since it's outside the viewport
270
+ expect(culledShapes).toContain(cullableShapeId)
271
+
272
+ // The uncullable shape should NOT be culled even though it's outside the viewport
273
+ expect(culledShapes).not.toContain(uncullableShapeId)
274
+ })
package/tldraw.css CHANGED
@@ -693,11 +693,17 @@ input,
693
693
  }
694
694
 
695
695
  .tl-text-measure {
696
- position: absolute;
697
696
  z-index: var(--tl-layer-canvas-hidden);
697
+ opacity: 0;
698
+ visibility: hidden;
699
+
700
+ /* pointer-events: all; */
701
+ /* opacity: 1; */
702
+ /* z-index: 99999; */
703
+
704
+ position: absolute;
698
705
  top: 0px;
699
706
  left: 0px;
700
- opacity: 0;
701
707
  width: max-content;
702
708
  box-sizing: border-box;
703
709
  pointer-events: none;
@@ -708,7 +714,6 @@ input,
708
714
  border: none;
709
715
  user-select: none;
710
716
  contain: style paint;
711
- visibility: hidden;
712
717
  /* N.B. This property, while discouraged ("intended for Document Type Definition (DTD) designers") is necessary for ensuring correct mixed RTL/LTR behavior when exporting SVGs. */
713
718
  unicode-bidi: plaintext;
714
719
  -webkit-user-select: none;