tldraw 4.1.0-next.542f014c3fac → 4.1.0-next.74327a60f18a

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 (129) hide show
  1. package/dist-cjs/index.d.ts +21 -0
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/lib/canvas/TldrawCropHandles.js +1 -1
  4. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  5. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +1 -1
  6. package/dist-cjs/lib/defaultEmbedDefinitions.js +24 -6
  7. package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
  8. package/dist-cjs/lib/defaultExternalContentHandlers.js +2 -2
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  10. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -0
  11. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  12. package/dist-cjs/lib/shapes/arrow/curved-arrow.js +8 -2
  13. package/dist-cjs/lib/shapes/arrow/curved-arrow.js.map +2 -2
  14. package/dist-cjs/lib/shapes/arrow/straight-arrow.js +4 -1
  15. package/dist-cjs/lib/shapes/arrow/straight-arrow.js.map +2 -2
  16. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +14 -2
  17. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
  18. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +1 -1
  19. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +1 -1
  20. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +3 -0
  21. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  22. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +1 -1
  23. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -1
  24. package/dist-cjs/lib/shapes/shared/RichTextLabel.js +2 -2
  25. package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +2 -2
  26. package/dist-cjs/lib/shapes/shared/ShapeFill.js +1 -1
  27. package/dist-cjs/lib/shapes/text/PlainTextArea.js +1 -1
  28. package/dist-cjs/lib/shapes/text/RichTextArea.js +1 -1
  29. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +1 -1
  30. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
  31. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
  32. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +9 -1
  33. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  34. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +1 -1
  35. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  36. package/dist-cjs/lib/ui/TldrawUi.js +2 -2
  37. package/dist-cjs/lib/ui/components/DebugMenu/DefaultDebugMenuContent.js +1 -1
  38. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialog.js +1 -1
  39. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +1 -1
  40. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
  41. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +1 -1
  42. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +5 -0
  43. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  44. package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js +1 -1
  45. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +6 -2
  46. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js.map +2 -2
  47. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +1 -1
  48. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +1 -1
  49. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +1 -1
  50. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js +1 -1
  51. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js +1 -1
  52. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +1 -1
  53. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +1 -1
  54. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +1 -1
  55. package/dist-cjs/lib/ui/components/primitives/Button/TldrawUiButton.js +2 -2
  56. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  57. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js +1 -1
  58. package/dist-cjs/lib/ui/components/primitives/TldrawUiDropdownMenu.js +1 -1
  59. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js +1 -1
  60. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js +2 -2
  61. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +2 -2
  62. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
  63. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +2 -2
  64. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +1 -1
  65. package/dist-cjs/lib/ui/components/primitives/layout.js +1 -1
  66. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +1 -1
  67. package/dist-cjs/lib/ui/context/actions.js +1 -1
  68. package/dist-cjs/lib/ui/context/breakpoints.js +1 -1
  69. package/dist-cjs/lib/ui/context/events.js +1 -1
  70. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +1 -1
  71. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +1 -1
  72. package/dist-cjs/lib/ui/hooks/useLocalStorageState.js +1 -1
  73. package/dist-cjs/lib/ui/hooks/useTools.js +1 -1
  74. package/dist-cjs/lib/ui/hooks/useTranslation/useTranslation.js +1 -1
  75. package/dist-cjs/lib/ui/version.js +4 -4
  76. package/dist-cjs/lib/ui/version.js.map +1 -1
  77. package/dist-cjs/lib/utils/text/richText.js +4 -4
  78. package/dist-esm/index.d.mts +21 -0
  79. package/dist-esm/index.mjs +1 -1
  80. package/dist-esm/lib/defaultEmbedDefinitions.mjs +24 -6
  81. package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
  82. package/dist-esm/lib/defaultExternalContentHandlers.mjs +2 -2
  83. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  84. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +3 -0
  85. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  86. package/dist-esm/lib/shapes/arrow/curved-arrow.mjs +8 -2
  87. package/dist-esm/lib/shapes/arrow/curved-arrow.mjs.map +2 -2
  88. package/dist-esm/lib/shapes/arrow/straight-arrow.mjs +4 -1
  89. package/dist-esm/lib/shapes/arrow/straight-arrow.mjs.map +2 -2
  90. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +13 -1
  91. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  92. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +3 -0
  93. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  94. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +1 -1
  95. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
  96. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
  97. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
  98. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +11 -2
  99. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  100. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +1 -1
  101. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  102. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +1 -1
  103. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
  104. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +5 -0
  105. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  106. package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +6 -2
  107. package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs.map +2 -2
  108. package/dist-esm/lib/ui/version.mjs +4 -4
  109. package/dist-esm/lib/ui/version.mjs.map +1 -1
  110. package/package.json +11 -11
  111. package/src/lib/defaultEmbedDefinitions.ts +19 -0
  112. package/src/lib/defaultExternalContentHandlers.ts +2 -2
  113. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +211 -1
  114. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +3 -0
  115. package/src/lib/shapes/arrow/curved-arrow.ts +8 -2
  116. package/src/lib/shapes/arrow/straight-arrow.ts +5 -1
  117. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +13 -3
  118. package/src/lib/shapes/line/LineShapeUtil.tsx +3 -0
  119. package/src/lib/shapes/shared/RichTextLabel.tsx +1 -1
  120. package/src/lib/shapes/text/TextShapeTool.test.ts +74 -0
  121. package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +1 -1
  122. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +13 -1
  123. package/src/lib/tools/SelectTool/childStates/Idle.ts +1 -1
  124. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +1 -1
  125. package/src/lib/ui/components/Minimap/MinimapManager.ts +6 -0
  126. package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +6 -2
  127. package/src/lib/ui/version.ts +4 -4
  128. package/src/test/customSnapping.test.tsx +55 -11
  129. package/tldraw.css +7 -2
@@ -173,6 +173,7 @@ describe('custom handle snapping', () => {
173
173
  handlePoints: VecModel[] | 'default'
174
174
  selfSnapOutline: VecModel[] | 'default'
175
175
  selfSnapPoints: VecModel[] | 'default'
176
+ handleSnapType?: 'point' | 'align'
176
177
  }
177
178
  >
178
179
  class TestShapeUtil extends BaseBoxShapeUtil<TestShape> {
@@ -213,17 +214,23 @@ describe('custom handle snapping', () => {
213
214
  }
214
215
  }
215
216
  override getHandles(shape: TestShape): TLHandle[] {
216
- return [
217
- {
218
- id: 'handle',
219
- label: 'handle',
220
- type: 'vertex',
221
- x: shape.props.ownHandle.x,
222
- y: shape.props.ownHandle.y,
223
- index: ZERO_INDEX_KEY,
224
- canSnap: true,
225
- },
226
- ]
217
+ const handle: TLHandle = {
218
+ id: 'handle',
219
+ label: 'handle',
220
+ type: 'vertex',
221
+ x: shape.props.ownHandle.x,
222
+ y: shape.props.ownHandle.y,
223
+ index: ZERO_INDEX_KEY,
224
+ }
225
+
226
+ if (shape.props.handleSnapType) {
227
+ handle.snapType = shape.props.handleSnapType
228
+ } else {
229
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
230
+ handle.canSnap = true
231
+ }
232
+
233
+ return [handle]
227
234
  }
228
235
  override onHandleDrag(shape: TestShape, { handle }: TLHandleDragInfo<TestShape>) {
229
236
  return { ...shape, props: { ...shape.props, ownHandle: { x: handle.x, y: handle.y } } }
@@ -495,5 +502,42 @@ describe('custom handle snapping', () => {
495
502
  expect(ownHandlePosition()).toMatchObject({ x: 20, y: 50 })
496
503
  })
497
504
  })
505
+
506
+ describe('with snapType set to align', () => {
507
+ beforeEach(() => {
508
+ editor.updateShape<TestShape>({
509
+ id: ids.test,
510
+ type: 'test',
511
+ props: {
512
+ selfSnapPoints: [
513
+ { x: 20, y: 50 },
514
+ { x: 60, y: 10 },
515
+ ],
516
+ handleSnapType: 'align',
517
+ },
518
+ })
519
+ })
520
+
521
+ test('snaps to the y axis', () => {
522
+ startDraggingOwnHandle()
523
+ editor.pointerMove(18, 0, undefined, { ctrlKey: true })
524
+ expect(editor.snaps.getIndicators()).toHaveLength(1)
525
+ expect(ownHandlePosition()).toMatchObject({ x: 20, y: 0 })
526
+ })
527
+
528
+ test('snaps to the x axis', () => {
529
+ startDraggingOwnHandle()
530
+ editor.pointerMove(0, 48, undefined, { ctrlKey: true })
531
+ expect(editor.snaps.getIndicators()).toHaveLength(1)
532
+ expect(ownHandlePosition()).toMatchObject({ x: 0, y: 50 })
533
+ })
534
+
535
+ test('snaps to both axes', () => {
536
+ startDraggingOwnHandle()
537
+ editor.pointerMove(18, 9, undefined, { ctrlKey: true })
538
+ expect(editor.snaps.getIndicators()).toHaveLength(2)
539
+ expect(ownHandlePosition()).toMatchObject({ x: 20, y: 10 })
540
+ })
541
+ })
498
542
  })
499
543
  })
package/tldraw.css CHANGED
@@ -1325,6 +1325,10 @@ input,
1325
1325
  flex: 1;
1326
1326
  }
1327
1327
 
1328
+ .tl-bookmark__copy_container:has(.tl-bookmark__link:only-child) {
1329
+ justify-content: center;
1330
+ }
1331
+
1328
1332
  .tl-bookmark__heading,
1329
1333
  .tl-bookmark__description,
1330
1334
  .tl-bookmark__link {
@@ -1357,7 +1361,7 @@ input,
1357
1361
  line-clamp: 3;
1358
1362
  text-overflow: ellipsis;
1359
1363
  display: -webkit-box;
1360
- color: var(--tl-color-text-2);
1364
+ color: var(--tl-color-text-1);
1361
1365
  margin: var(--tl-space-2) 0px;
1362
1366
  }
1363
1367
 
@@ -1369,11 +1373,12 @@ input,
1369
1373
  font-size: 12px;
1370
1374
  pointer-events: all;
1371
1375
  display: flex;
1372
- color: var(--tl-color-text-2);
1376
+ color: var(--tl-color-text-1);
1373
1377
  align-items: center;
1374
1378
  cursor: var(--tl-cursor-pointer);
1375
1379
  width: fit-content;
1376
1380
  max-width: 100%;
1381
+ text-decoration: none;
1377
1382
  }
1378
1383
 
1379
1384
  .tl-bookmark__link > span {