tldraw 3.16.0-canary.ca33603d9bda → 3.16.0-canary.cb18f446a36f

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 (183) hide show
  1. package/dist-cjs/index.d.ts +92 -9
  2. package/dist-cjs/index.js +5 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/defaultExternalContentHandlers.js +10 -0
  5. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  6. package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
  7. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +6 -0
  8. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
  9. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +3 -2
  10. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  11. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +4 -4
  12. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
  13. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +2 -1
  14. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  15. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js +8 -2
  16. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js.map +2 -2
  17. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +1 -0
  18. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  19. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +2 -1
  20. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  21. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +4 -4
  22. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
  23. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +3 -3
  24. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  25. package/dist-cjs/lib/shapes/text/PlainTextArea.js +3 -2
  26. package/dist-cjs/lib/shapes/text/PlainTextArea.js.map +2 -2
  27. package/dist-cjs/lib/shapes/text/RichTextArea.js +3 -3
  28. package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
  29. package/dist-cjs/lib/ui/components/A11y.js +1 -1
  30. package/dist-cjs/lib/ui/components/A11y.js.map +2 -2
  31. package/dist-cjs/lib/ui/components/LanguageMenu.js +1 -0
  32. package/dist-cjs/lib/ui/components/LanguageMenu.js.map +2 -2
  33. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +2 -1
  34. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
  35. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +1 -1
  36. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  37. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js +11 -2
  38. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +2 -2
  39. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +3 -2
  40. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  41. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +5 -4
  42. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  43. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +1 -1
  44. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +2 -2
  45. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +6 -2
  46. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  47. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  48. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  49. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js +5 -3
  50. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js.map +2 -2
  51. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
  52. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  53. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +1 -0
  54. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  55. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +40 -3
  56. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
  57. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js +3 -0
  58. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js.map +2 -2
  59. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +8 -8
  60. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  61. package/dist-cjs/lib/ui/context/actions.js +6 -0
  62. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  63. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +1 -1
  64. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
  65. package/dist-cjs/lib/ui/hooks/useTools.js +1 -1
  66. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  67. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  68. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +4 -2
  69. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  70. package/dist-cjs/lib/ui/version.js +3 -3
  71. package/dist-cjs/lib/ui/version.js.map +1 -1
  72. package/dist-esm/index.d.mts +92 -9
  73. package/dist-esm/index.mjs +9 -1
  74. package/dist-esm/index.mjs.map +2 -2
  75. package/dist-esm/lib/defaultExternalContentHandlers.mjs +10 -0
  76. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  77. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
  78. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
  79. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +3 -2
  80. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  81. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +4 -5
  82. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  83. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +2 -1
  84. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  85. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs +9 -3
  86. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs.map +2 -2
  87. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +1 -0
  88. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  89. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +2 -1
  90. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  91. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +5 -5
  92. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
  93. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +3 -4
  94. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  95. package/dist-esm/lib/shapes/text/PlainTextArea.mjs +4 -3
  96. package/dist-esm/lib/shapes/text/PlainTextArea.mjs.map +2 -2
  97. package/dist-esm/lib/shapes/text/RichTextArea.mjs +3 -4
  98. package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
  99. package/dist-esm/lib/ui/components/A11y.mjs +1 -2
  100. package/dist-esm/lib/ui/components/A11y.mjs.map +2 -2
  101. package/dist-esm/lib/ui/components/LanguageMenu.mjs +1 -0
  102. package/dist-esm/lib/ui/components/LanguageMenu.mjs.map +2 -2
  103. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +2 -1
  104. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
  105. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +1 -2
  106. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  107. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +11 -2
  108. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +2 -2
  109. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +3 -2
  110. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  111. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +5 -4
  112. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  113. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +1 -1
  114. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +2 -2
  115. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +6 -2
  116. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  117. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -2
  118. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  119. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs +6 -4
  120. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs.map +2 -2
  121. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +1 -1
  122. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  123. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +1 -0
  124. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  125. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +41 -3
  126. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
  127. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs +3 -0
  128. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs.map +2 -2
  129. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +8 -8
  130. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  131. package/dist-esm/lib/ui/context/actions.mjs +6 -0
  132. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  133. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +1 -2
  134. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
  135. package/dist-esm/lib/ui/hooks/useTools.mjs +1 -1
  136. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  137. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +4 -2
  138. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  139. package/dist-esm/lib/ui/version.mjs +3 -3
  140. package/dist-esm/lib/ui/version.mjs.map +1 -1
  141. package/package.json +3 -3
  142. package/src/index.ts +7 -0
  143. package/src/lib/defaultExternalContentHandlers.ts +14 -0
  144. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +83 -13
  145. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +2 -2
  146. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +41 -0
  147. package/src/lib/shapes/arrow/arrow-types.ts +3 -5
  148. package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
  149. package/src/lib/shapes/arrow/arrowTargetState.ts +34 -3
  150. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +4 -5
  151. package/src/lib/shapes/frame/FrameShapeUtil.tsx +1 -0
  152. package/src/lib/shapes/frame/components/FrameLabelInput.tsx +10 -3
  153. package/src/lib/shapes/geo/GeoShapeUtil.tsx +1 -0
  154. package/src/lib/shapes/note/NoteShapeUtil.tsx +1 -0
  155. package/src/lib/shapes/shared/HyperlinkButton.tsx +5 -5
  156. package/src/lib/shapes/shared/useEditablePlainText.ts +3 -4
  157. package/src/lib/shapes/text/PlainTextArea.tsx +4 -3
  158. package/src/lib/shapes/text/RichTextArea.tsx +3 -4
  159. package/src/lib/ui/components/A11y.tsx +1 -2
  160. package/src/lib/ui/components/LanguageMenu.tsx +1 -0
  161. package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +2 -1
  162. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +1 -2
  163. package/src/lib/ui/components/StylePanel/StylePanelButtonPicker.tsx +9 -2
  164. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +4 -3
  165. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +6 -5
  166. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +1 -1
  167. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +9 -2
  168. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -2
  169. package/src/lib/ui/components/primitives/TldrawUiInput.tsx +6 -3
  170. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +2 -2
  171. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +2 -1
  172. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +57 -13
  173. package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +4 -0
  174. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +9 -9
  175. package/src/lib/ui/context/actions.tsx +13 -0
  176. package/src/lib/ui/hooks/useClipboardEvents.ts +1 -2
  177. package/src/lib/ui/hooks/useTools.tsx +1 -1
  178. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +2 -0
  179. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +4 -2
  180. package/src/lib/ui/version.ts +3 -3
  181. package/src/lib/ui.css +14 -0
  182. package/src/test/getCulledShapes.test.tsx +71 -2
  183. package/tldraw.css +22 -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;
@@ -2285,6 +2290,10 @@ it from receiving any pointer events or affecting the cursor. */
2285
2290
  -webkit-user-select: auto !important;
2286
2291
  }
2287
2292
 
2293
+ .tlui-input::placeholder {
2294
+ color: var(--tl-color-text-3);
2295
+ }
2296
+
2288
2297
  .tlui-input__wrapper {
2289
2298
  width: 100%;
2290
2299
  height: 44px;
@@ -2369,6 +2378,12 @@ it from receiving any pointer events or affecting the cursor. */
2369
2378
  box-shadow: var(--tl-shadow-3);
2370
2379
  }
2371
2380
 
2381
+ @media (max-height: 600px) {
2382
+ .tlui-menu {
2383
+ max-height: 70vh;
2384
+ }
2385
+ }
2386
+
2372
2387
  .tlui-menu::-webkit-scrollbar {
2373
2388
  display: none;
2374
2389
  }
@@ -2820,6 +2835,10 @@ tldraw? probably.
2820
2835
  display: none;
2821
2836
  }
2822
2837
 
2838
+ .tlui-style-panel[data-ismobile='true'] .tlui-style-panel__section .tlui-row.tlui-toolbar {
2839
+ flex-wrap: wrap;
2840
+ }
2841
+
2823
2842
  .tlui-style-panel__section__common:not(:only-child) {
2824
2843
  margin-bottom: 7px;
2825
2844
  border-bottom: 1px solid var(--tl-color-divider);