tldraw 4.1.0-canary.e2133d922c9e → 4.1.0-canary.e259b517a450

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 (128) hide show
  1. package/dist-cjs/index.d.ts +37 -2
  2. package/dist-cjs/index.js +3 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/canvas/TldrawCropHandles.js +1 -1
  5. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  6. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +1 -1
  7. package/dist-cjs/lib/defaultEmbedDefinitions.js +26 -7
  8. package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js +9 -32
  10. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  11. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -0
  12. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  13. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +22 -84
  14. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
  15. package/dist-cjs/lib/shapes/bookmark/bookmarks.js +137 -0
  16. package/dist-cjs/lib/shapes/bookmark/bookmarks.js.map +7 -0
  17. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +1 -1
  18. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +1 -1
  19. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +3 -0
  20. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  21. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +1 -1
  22. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -1
  23. package/dist-cjs/lib/shapes/shared/RichTextLabel.js +1 -1
  24. package/dist-cjs/lib/shapes/shared/ShapeFill.js +1 -1
  25. package/dist-cjs/lib/shapes/text/PlainTextArea.js +1 -1
  26. package/dist-cjs/lib/shapes/text/RichTextArea.js +1 -1
  27. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +1 -1
  28. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
  29. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
  30. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +9 -1
  31. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  32. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +1 -1
  33. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  34. package/dist-cjs/lib/ui/TldrawUi.js +2 -2
  35. package/dist-cjs/lib/ui/components/DebugMenu/DefaultDebugMenuContent.js +1 -1
  36. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialog.js +1 -1
  37. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +1 -1
  38. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +5 -0
  39. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  40. package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js +1 -1
  41. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +6 -2
  42. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js.map +2 -2
  43. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +1 -1
  44. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +1 -1
  45. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +1 -1
  46. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js +1 -1
  47. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +1 -1
  48. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js +1 -1
  49. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js +1 -1
  50. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +1 -1
  51. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +1 -1
  52. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +1 -1
  53. package/dist-cjs/lib/ui/components/primitives/Button/TldrawUiButton.js +2 -2
  54. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  55. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js +1 -1
  56. package/dist-cjs/lib/ui/components/primitives/TldrawUiDropdownMenu.js +1 -1
  57. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js +1 -1
  58. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js +2 -2
  59. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +2 -2
  60. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
  61. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +2 -2
  62. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +1 -1
  63. package/dist-cjs/lib/ui/components/primitives/layout.js +1 -1
  64. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +1 -1
  65. package/dist-cjs/lib/ui/context/actions.js +24 -30
  66. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  67. package/dist-cjs/lib/ui/context/breakpoints.js +1 -1
  68. package/dist-cjs/lib/ui/context/events.js +1 -1
  69. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +1 -1
  70. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +1 -1
  71. package/dist-cjs/lib/ui/hooks/useLocalStorageState.js +1 -1
  72. package/dist-cjs/lib/ui/hooks/useTools.js +1 -1
  73. package/dist-cjs/lib/ui/hooks/useTranslation/useTranslation.js +1 -1
  74. package/dist-cjs/lib/ui/version.js +3 -3
  75. package/dist-cjs/lib/ui/version.js.map +1 -1
  76. package/dist-cjs/lib/utils/text/richText.js +4 -4
  77. package/dist-esm/index.d.mts +37 -2
  78. package/dist-esm/index.mjs +3 -1
  79. package/dist-esm/index.mjs.map +2 -2
  80. package/dist-esm/lib/defaultEmbedDefinitions.mjs +26 -7
  81. package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
  82. package/dist-esm/lib/defaultExternalContentHandlers.mjs +9 -32
  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/bookmark/BookmarkShapeUtil.mjs +23 -82
  87. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  88. package/dist-esm/lib/shapes/bookmark/bookmarks.mjs +123 -0
  89. package/dist-esm/lib/shapes/bookmark/bookmarks.mjs.map +7 -0
  90. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +3 -0
  91. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  92. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
  93. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
  94. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +11 -2
  95. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  96. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +1 -1
  97. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  98. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +5 -0
  99. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  100. package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +6 -2
  101. package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs.map +2 -2
  102. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +1 -1
  103. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +1 -1
  104. package/dist-esm/lib/ui/context/actions.mjs +23 -29
  105. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  106. package/dist-esm/lib/ui/version.mjs +3 -3
  107. package/dist-esm/lib/ui/version.mjs.map +1 -1
  108. package/package.json +11 -11
  109. package/src/index.ts +1 -0
  110. package/src/lib/defaultEmbedDefinitions.ts +21 -1
  111. package/src/lib/defaultExternalContentHandlers.ts +11 -36
  112. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +3 -0
  113. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +22 -115
  114. package/src/lib/shapes/bookmark/bookmarks.ts +170 -0
  115. package/src/lib/shapes/line/LineShapeUtil.tsx +3 -0
  116. package/src/lib/shapes/text/TextShapeTool.test.ts +74 -0
  117. package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +1 -1
  118. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +13 -1
  119. package/src/lib/tools/SelectTool/childStates/Idle.ts +1 -1
  120. package/src/lib/ui/components/Minimap/MinimapManager.ts +6 -0
  121. package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +6 -2
  122. package/src/lib/ui/components/StylePanel/StylePanelButtonPicker.tsx +1 -1
  123. package/src/lib/ui/context/actions.tsx +27 -31
  124. package/src/lib/ui/version.ts +3 -3
  125. package/src/lib/utils/embeds/embeds.test.ts +16 -0
  126. package/src/test/bookmark-shapes.test.ts +123 -1
  127. package/src/test/customSnapping.test.tsx +55 -11
  128. package/tldraw.css +7 -2
@@ -33,8 +33,8 @@ __export(TldrawUiInput_exports, {
33
33
  module.exports = __toCommonJS(TldrawUiInput_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var import_editor = require("@tldraw/editor");
36
- var import_classnames = __toESM(require("classnames"));
37
- var React = __toESM(require("react"));
36
+ var import_classnames = __toESM(require("classnames"), 1);
37
+ var React = __toESM(require("react"), 1);
38
38
  var import_useTranslation = require("../../hooks/useTranslation/useTranslation");
39
39
  var import_TldrawUiIcon = require("./TldrawUiIcon");
40
40
  const TldrawUiInput = React.forwardRef(
@@ -35,9 +35,9 @@ __export(TldrawUiPopover_exports, {
35
35
  module.exports = __toCommonJS(TldrawUiPopover_exports);
36
36
  var import_jsx_runtime = require("react/jsx-runtime");
37
37
  var import_editor = require("@tldraw/editor");
38
- var import_classnames = __toESM(require("classnames"));
38
+ var import_classnames = __toESM(require("classnames"), 1);
39
39
  var import_radix_ui = require("radix-ui");
40
- var import_react = __toESM(require("react"));
40
+ var import_react = __toESM(require("react"), 1);
41
41
  var import_useMenuIsOpen = require("../../hooks/useMenuIsOpen");
42
42
  function TldrawUiPopover({ id, children, onOpenChange, open, className }) {
43
43
  const [isOpen, handleOpenChange] = (0, import_useMenuIsOpen.useMenuIsOpen)(id, onOpenChange);
@@ -34,7 +34,7 @@ module.exports = __toCommonJS(TldrawUiSlider_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var import_editor = require("@tldraw/editor");
36
36
  var import_radix_ui = require("radix-ui");
37
- var import_react = __toESM(require("react"));
37
+ var import_react = __toESM(require("react"), 1);
38
38
  var import_useTranslation = require("../../hooks/useTranslation/useTranslation");
39
39
  var import_TldrawUiTooltip = require("./TldrawUiTooltip");
40
40
  const TldrawUiSlider = import_react.default.forwardRef(function Slider({
@@ -35,9 +35,9 @@ __export(TldrawUiToolbar_exports, {
35
35
  });
36
36
  module.exports = __toCommonJS(TldrawUiToolbar_exports);
37
37
  var import_jsx_runtime = require("react/jsx-runtime");
38
- var import_classnames = __toESM(require("classnames"));
38
+ var import_classnames = __toESM(require("classnames"), 1);
39
39
  var import_radix_ui = require("radix-ui");
40
- var import_react = __toESM(require("react"));
40
+ var import_react = __toESM(require("react"), 1);
41
41
  var import_layout = require("./layout");
42
42
  var import_TldrawUiTooltip = require("./TldrawUiTooltip");
43
43
  const LayoutByOrientation = {
@@ -36,7 +36,7 @@ module.exports = __toCommonJS(TldrawUiTooltip_exports);
36
36
  var import_jsx_runtime = require("react/jsx-runtime");
37
37
  var import_editor = require("@tldraw/editor");
38
38
  var import_radix_ui = require("radix-ui");
39
- var import_react = __toESM(require("react"));
39
+ var import_react = __toESM(require("react"), 1);
40
40
  var import_layout = require("./layout");
41
41
  const DEFAULT_TOOLTIP_DELAY_MS = 700;
42
42
  class TooltipManager {
@@ -36,7 +36,7 @@ __export(layout_exports, {
36
36
  });
37
37
  module.exports = __toCommonJS(layout_exports);
38
38
  var import_jsx_runtime = require("react/jsx-runtime");
39
- var import_classnames = __toESM(require("classnames"));
39
+ var import_classnames = __toESM(require("classnames"), 1);
40
40
  var import_radix_ui = require("radix-ui");
41
41
  var import_react = require("react");
42
42
  const TldrawUiOrientationContext = (0, import_react.createContext)({
@@ -32,7 +32,7 @@ __export(TldrawUiMenuGroup_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(TldrawUiMenuGroup_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
- var import_classnames = __toESM(require("classnames"));
35
+ var import_classnames = __toESM(require("classnames"), 1);
36
36
  var import_actions = require("../../../context/actions");
37
37
  var import_useTranslation = require("../../../hooks/useTranslation/useTranslation");
38
38
  var import_layout = require("../layout");
@@ -37,7 +37,8 @@ __export(actions_exports, {
37
37
  module.exports = __toCommonJS(actions_exports);
38
38
  var import_jsx_runtime = require("react/jsx-runtime");
39
39
  var import_editor = require("@tldraw/editor");
40
- var React = __toESM(require("react"));
40
+ var React = __toESM(require("react"), 1);
41
+ var import_bookmarks = require("../../shapes/bookmark/bookmarks");
41
42
  var import_frames = require("../../utils/frames/frames");
42
43
  var import_A11y = require("../components/A11y");
43
44
  var import_EditLinkDialog = require("../components/EditLinkDialog");
@@ -333,38 +334,31 @@ function ActionsProvider({ overrides, children }) {
333
334
  {
334
335
  id: "convert-to-bookmark",
335
336
  label: "action.convert-to-bookmark",
336
- onSelect(source) {
337
+ async onSelect(source) {
337
338
  if (!canApplySelectionAction()) return;
338
339
  if (mustGoBackToSelectToolFirst()) return;
339
- editor.run(() => {
340
- trackEvent("convert-to-bookmark", { source });
341
- const shapes = editor.getSelectedShapes();
342
- const createList = [];
343
- const deleteList = [];
344
- for (const shape of shapes) {
345
- if (!shape || !editor.isShapeOfType(shape, "embed") || !shape.props.url)
346
- continue;
347
- const newPos = new import_editor.Vec(shape.x, shape.y);
348
- newPos.rot(-shape.rotation);
349
- newPos.add(new import_editor.Vec(shape.props.w / 2 - 300 / 2, shape.props.h / 2 - 320 / 2));
350
- newPos.rot(shape.rotation);
351
- const partial = {
352
- id: (0, import_editor.createShapeId)(),
353
- type: "bookmark",
354
- rotation: shape.rotation,
355
- x: newPos.x,
356
- y: newPos.y,
357
- opacity: 1,
358
- props: {
359
- url: shape.props.url
340
+ trackEvent("convert-to-bookmark", { source });
341
+ const shapes = editor.getSelectedShapes();
342
+ const markId = editor.markHistoryStoppingPoint("convert shapes to bookmark");
343
+ const creationPromises = [];
344
+ for (const shape of shapes) {
345
+ if (!shape || !editor.isShapeOfType(shape, "embed") || !shape.props.url)
346
+ continue;
347
+ const center = editor.getShapePageBounds(shape)?.center;
348
+ if (!center) continue;
349
+ editor.deleteShapes([shape.id]);
350
+ creationPromises.push(
351
+ (0, import_bookmarks.createBookmarkFromUrl)(editor, { url: shape.props.url, center }).then((res) => {
352
+ if (!res.ok) {
353
+ throw new Error(res.error);
360
354
  }
361
- };
362
- createList.push(partial);
363
- deleteList.push(shape.id);
364
- }
365
- editor.markHistoryStoppingPoint("convert shapes to bookmark");
366
- editor.deleteShapes(deleteList);
367
- editor.createShapes(createList);
355
+ return res;
356
+ })
357
+ );
358
+ }
359
+ await Promise.all(creationPromises).catch((error) => {
360
+ editor.bailToMark(markId);
361
+ console.error(error);
368
362
  });
369
363
  }
370
364
  },