tldraw 3.16.0-canary.e5e61b17cef3 → 3.16.0-canary.e618c2fbc95d

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 (202) hide show
  1. package/dist-cjs/index.d.ts +99 -13
  2. package/dist-cjs/index.js +6 -2
  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/arrowTargetState.js +3 -2
  8. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  9. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +1 -1
  10. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.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/components/FrameLabelInput.js +8 -2
  14. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js.map +2 -2
  15. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +4 -4
  16. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
  17. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +3 -3
  18. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  19. package/dist-cjs/lib/shapes/text/PlainTextArea.js +3 -2
  20. package/dist-cjs/lib/shapes/text/PlainTextArea.js.map +2 -2
  21. package/dist-cjs/lib/shapes/text/RichTextArea.js +3 -3
  22. package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
  23. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +3 -1
  24. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  25. package/dist-cjs/lib/ui/components/A11y.js +1 -1
  26. package/dist-cjs/lib/ui/components/A11y.js.map +2 -2
  27. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +1 -1
  28. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +2 -2
  29. package/dist-cjs/lib/ui/components/InputModeMenu.js +77 -0
  30. package/dist-cjs/lib/ui/components/InputModeMenu.js.map +7 -0
  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/MainMenu/DefaultMainMenuContent.js +2 -0
  34. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  35. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +2 -1
  36. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
  37. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +1 -1
  38. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  39. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +4 -2
  40. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  41. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +2 -2
  42. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  43. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js +12 -3
  44. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +2 -2
  45. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +4 -2
  46. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +2 -2
  47. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +3 -2
  48. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  49. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +5 -4
  50. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  51. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +1 -1
  52. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +2 -2
  53. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +6 -2
  54. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  55. package/dist-cjs/lib/ui/components/menu-items.js +6 -4
  56. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  57. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  58. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  59. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js +5 -3
  60. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js.map +2 -2
  61. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +1 -0
  62. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  63. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +44 -21
  64. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
  65. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js +3 -0
  66. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js.map +2 -2
  67. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +3 -3
  68. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  69. package/dist-cjs/lib/ui/context/actions.js +11 -25
  70. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  71. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  72. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +1 -1
  73. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
  74. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  75. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +10 -2
  76. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  77. package/dist-cjs/lib/ui/version.js +3 -3
  78. package/dist-cjs/lib/ui/version.js.map +1 -1
  79. package/dist-esm/index.d.mts +99 -13
  80. package/dist-esm/index.mjs +11 -3
  81. package/dist-esm/index.mjs.map +2 -2
  82. package/dist-esm/lib/defaultExternalContentHandlers.mjs +10 -0
  83. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  84. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +3 -2
  85. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  86. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +1 -1
  87. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  88. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +4 -5
  89. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  90. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs +9 -3
  91. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs.map +2 -2
  92. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +5 -5
  93. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
  94. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +3 -4
  95. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  96. package/dist-esm/lib/shapes/text/PlainTextArea.mjs +4 -3
  97. package/dist-esm/lib/shapes/text/PlainTextArea.mjs.map +2 -2
  98. package/dist-esm/lib/shapes/text/RichTextArea.mjs +3 -4
  99. package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
  100. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +3 -1
  101. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  102. package/dist-esm/lib/ui/components/A11y.mjs +1 -2
  103. package/dist-esm/lib/ui/components/A11y.mjs.map +2 -2
  104. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +3 -3
  105. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +2 -2
  106. package/dist-esm/lib/ui/components/InputModeMenu.mjs +57 -0
  107. package/dist-esm/lib/ui/components/InputModeMenu.mjs.map +7 -0
  108. package/dist-esm/lib/ui/components/LanguageMenu.mjs +1 -0
  109. package/dist-esm/lib/ui/components/LanguageMenu.mjs.map +2 -2
  110. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +2 -0
  111. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  112. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +2 -1
  113. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
  114. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +1 -2
  115. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  116. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +4 -2
  117. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  118. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +2 -2
  119. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  120. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +12 -3
  121. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +2 -2
  122. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +4 -2
  123. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +2 -2
  124. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +3 -2
  125. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  126. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +5 -4
  127. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  128. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +1 -1
  129. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +2 -2
  130. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +6 -2
  131. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  132. package/dist-esm/lib/ui/components/menu-items.mjs +6 -4
  133. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  134. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -2
  135. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  136. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs +6 -4
  137. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs.map +2 -2
  138. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +1 -0
  139. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  140. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +44 -21
  141. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
  142. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs +3 -0
  143. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs.map +2 -2
  144. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +3 -3
  145. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  146. package/dist-esm/lib/ui/context/actions.mjs +11 -25
  147. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  148. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  149. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +1 -2
  150. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
  151. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +10 -2
  152. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  153. package/dist-esm/lib/ui/version.mjs +3 -3
  154. package/dist-esm/lib/ui/version.mjs.map +1 -1
  155. package/package.json +3 -3
  156. package/src/index.ts +8 -1
  157. package/src/lib/defaultExternalContentHandlers.ts +14 -0
  158. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +83 -13
  159. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +97 -3
  160. package/src/lib/shapes/arrow/arrow-types.ts +3 -5
  161. package/src/lib/shapes/arrow/arrowTargetState.ts +34 -3
  162. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +1 -1
  163. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +4 -5
  164. package/src/lib/shapes/frame/components/FrameLabelInput.tsx +10 -3
  165. package/src/lib/shapes/shared/HyperlinkButton.tsx +5 -5
  166. package/src/lib/shapes/shared/useEditablePlainText.ts +3 -4
  167. package/src/lib/shapes/text/PlainTextArea.tsx +4 -3
  168. package/src/lib/shapes/text/RichTextArea.tsx +3 -4
  169. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +6 -2
  170. package/src/lib/ui/components/A11y.tsx +1 -2
  171. package/src/lib/ui/components/AccessibilityMenu.tsx +2 -2
  172. package/src/lib/ui/components/InputModeMenu.tsx +65 -0
  173. package/src/lib/ui/components/LanguageMenu.tsx +1 -0
  174. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -0
  175. package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +2 -1
  176. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +1 -2
  177. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +4 -2
  178. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +4 -2
  179. package/src/lib/ui/components/StylePanel/StylePanelButtonPicker.tsx +10 -3
  180. package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +5 -3
  181. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +4 -3
  182. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +6 -5
  183. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +1 -1
  184. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +9 -2
  185. package/src/lib/ui/components/menu-items.tsx +5 -3
  186. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -2
  187. package/src/lib/ui/components/primitives/TldrawUiInput.tsx +6 -3
  188. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +2 -1
  189. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +26 -5
  190. package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +4 -0
  191. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +3 -3
  192. package/src/lib/ui/context/actions.tsx +18 -27
  193. package/src/lib/ui/context/events.tsx +2 -1
  194. package/src/lib/ui/hooks/useClipboardEvents.ts +1 -2
  195. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +10 -2
  196. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +10 -2
  197. package/src/lib/ui/version.ts +3 -3
  198. package/src/lib/ui.css +25 -2
  199. package/src/test/TestEditor.ts +8 -2
  200. package/src/test/commands/setCamera.test.ts +13 -0
  201. package/src/test/frames.test.ts +15 -0
  202. package/tldraw.css +25 -2
@@ -102,13 +102,14 @@ export interface TLUiEventMap {
102
102
  'toggle-grid-mode': null
103
103
  'toggle-wrap-mode': null
104
104
  'toggle-focus-mode': null
105
+ 'input-mode': { value: string }
105
106
  'toggle-debug-mode': null
106
107
  'toggle-dynamic-size-mode': null
107
108
  'toggle-paste-at-cursor': null
108
109
  'toggle-lock': null
109
110
  'toggle-reduce-motion': null
110
111
  'toggle-keyboard-shortcuts': null
111
- 'toggle-ui-labels': null
112
+ 'enhanced-a11y-mode': null
112
113
  'toggle-edge-scrolling': null
113
114
  'color-scheme': { value: string }
114
115
  'exit-pen-mode': null
@@ -8,7 +8,6 @@ import {
8
8
  compact,
9
9
  isDefined,
10
10
  preventDefault,
11
- stopEventPropagation,
12
11
  uniq,
13
12
  useEditor,
14
13
  useMaybeEditor,
@@ -763,7 +762,7 @@ export function useNativeClipboardEvents() {
763
762
 
764
763
  const paste = (e: ClipboardEvent) => {
765
764
  if (disablingMiddleClickPaste) {
766
- stopEventPropagation(e)
765
+ editor.markEventAsHandled(e)
767
766
  return
768
767
  }
769
768
 
@@ -3,6 +3,11 @@
3
3
 
4
4
  /** @public */
5
5
  export type TLUiTranslationKey =
6
+ | 'action.toggle-auto-pan'
7
+ | 'action.toggle-auto-zoom'
8
+ | 'action.toggle-auto-none'
9
+ | 'action.toggle-mouse'
10
+ | 'action.toggle-trackpad'
6
11
  | 'action.convert-to-bookmark'
7
12
  | 'action.convert-to-embed'
8
13
  | 'action.open-embed-link'
@@ -93,8 +98,8 @@ export type TLUiTranslationKey =
93
98
  | 'action.toggle-reduce-motion'
94
99
  | 'action.toggle-keyboard-shortcuts.menu'
95
100
  | 'action.toggle-keyboard-shortcuts'
96
- | 'action.toggle-ui-labels.menu'
97
- | 'action.toggle-ui-labels'
101
+ | 'action.enhanced-a11y-mode.menu'
102
+ | 'action.enhanced-a11y-mode'
98
103
  | 'action.toggle-edge-scrolling.menu'
99
104
  | 'action.toggle-edge-scrolling'
100
105
  | 'action.toggle-debug-mode.menu'
@@ -122,6 +127,7 @@ export type TLUiTranslationKey =
122
127
  | 'action.zoom-to-fit'
123
128
  | 'action.zoom-to-selection'
124
129
  | 'assets.files.size-too-big'
130
+ | 'assets.files.maximum-size'
125
131
  | 'assets.files.type-not-allowed'
126
132
  | 'assets.files.upload-failed'
127
133
  | 'assets.files.amount-too-many'
@@ -310,6 +316,7 @@ export type TLUiTranslationKey =
310
316
  | 'menu.language'
311
317
  | 'menu.preferences'
312
318
  | 'menu.view'
319
+ | 'menu.input-mode'
313
320
  | 'context-menu.title'
314
321
  | 'context-menu.edit'
315
322
  | 'context-menu.arrange'
@@ -411,6 +418,7 @@ export type TLUiTranslationKey =
411
418
  | 'style-panel.opacity'
412
419
  | 'style-panel.size'
413
420
  | 'style-panel.spline'
421
+ | 'style-panel.selected'
414
422
  | 'tool-panel.title'
415
423
  | 'tool-panel.more'
416
424
  | 'navigation-zone.title'
@@ -3,6 +3,11 @@
3
3
 
4
4
  /** @internal */
5
5
  export const DEFAULT_TRANSLATION = {
6
+ 'action.toggle-auto-pan': 'Auto (trackpad)',
7
+ 'action.toggle-auto-zoom': 'Auto (mouse)',
8
+ 'action.toggle-auto-none': 'Auto',
9
+ 'action.toggle-mouse': 'Mouse',
10
+ 'action.toggle-trackpad': 'Trackpad',
6
11
  'action.convert-to-bookmark': 'Convert to Bookmark',
7
12
  'action.convert-to-embed': 'Convert to Embed',
8
13
  'action.open-embed-link': 'Open link',
@@ -94,8 +99,8 @@ export const DEFAULT_TRANSLATION = {
94
99
  'action.toggle-reduce-motion': 'Toggle reduce motion',
95
100
  'action.toggle-keyboard-shortcuts.menu': 'Enable keyboard shortcuts',
96
101
  'action.toggle-keyboard-shortcuts': 'Toggle keyboard shortcuts',
97
- 'action.toggle-ui-labels.menu': 'Enable UI labels',
98
- 'action.toggle-ui-labels': 'Toggle UI labels',
102
+ 'action.enhanced-a11y-mode.menu': 'Enhanced accessibility mode',
103
+ 'action.enhanced-a11y-mode': 'Toggle enhanced accessibility mode',
99
104
  'action.toggle-edge-scrolling.menu': 'Edge scrolling',
100
105
  'action.toggle-edge-scrolling': 'Toggle edge scrolling',
101
106
  'action.toggle-debug-mode.menu': 'Debug mode',
@@ -123,6 +128,7 @@ export const DEFAULT_TRANSLATION = {
123
128
  'action.zoom-to-fit': 'Zoom to fit',
124
129
  'action.zoom-to-selection': 'Zoom to selection',
125
130
  'assets.files.size-too-big': 'File size is too big',
131
+ 'assets.files.maximum-size': 'Maximum file size is {size}',
126
132
  'assets.files.type-not-allowed': 'File type is not allowed',
127
133
  'assets.files.upload-failed': 'Upload failed',
128
134
  'assets.files.amount-too-many': 'Too many files',
@@ -311,6 +317,7 @@ export const DEFAULT_TRANSLATION = {
311
317
  'menu.language': 'Language',
312
318
  'menu.preferences': 'Preferences',
313
319
  'menu.view': 'View',
320
+ 'menu.input-mode': 'Input mode',
314
321
  'context-menu.title': 'Context menu',
315
322
  'context-menu.edit': 'Edit',
316
323
  'context-menu.arrange': 'Arrange',
@@ -414,6 +421,7 @@ export const DEFAULT_TRANSLATION = {
414
421
  'style-panel.opacity': 'Opacity',
415
422
  'style-panel.size': 'Size',
416
423
  'style-panel.spline': 'Spline',
424
+ 'style-panel.selected': 'selected',
417
425
  'tool-panel.title': 'Tools',
418
426
  'tool-panel.more': 'More',
419
427
  'navigation-zone.title': 'Navigation',
@@ -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 = '3.16.0-canary.e5e61b17cef3'
4
+ export const version = '3.16.0-canary.e618c2fbc95d'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-09-11T14:10:57.862Z',
8
- patch: '2025-09-11T14:10:57.862Z',
7
+ minor: '2025-09-18T14:34:09.025Z',
8
+ patch: '2025-09-18T14:34:09.025Z',
9
9
  }
package/src/lib/ui.css CHANGED
@@ -168,7 +168,7 @@
168
168
  min-height: 40px;
169
169
  width: 100%;
170
170
  gap: 8px;
171
- margin: -4px 0px;
171
+ margin-top: -4px;
172
172
  }
173
173
 
174
174
  .tlui-button__menu::after {
@@ -494,6 +494,10 @@
494
494
  -webkit-user-select: auto !important;
495
495
  }
496
496
 
497
+ .tlui-input::placeholder {
498
+ color: var(--tl-color-text-3);
499
+ }
500
+
497
501
  .tlui-input__wrapper {
498
502
  width: 100%;
499
503
  height: 44px;
@@ -578,6 +582,12 @@
578
582
  box-shadow: var(--tl-shadow-3);
579
583
  }
580
584
 
585
+ @media (max-height: 600px) {
586
+ .tlui-menu {
587
+ max-height: 70vh;
588
+ }
589
+ }
590
+
581
591
  .tlui-menu::-webkit-scrollbar {
582
592
  display: none;
583
593
  }
@@ -987,7 +997,7 @@
987
997
  max-width: 148px;
988
998
  }
989
999
 
990
- .tlui-style-panel[data-show-ui-labels='true'] .tlui-button[data-isactive='true'] {
1000
+ .tlui-style-panel[data-enhanced-a11y-mode='true'] .tlui-button[data-isactive='true'] {
991
1001
  border-radius: 10px;
992
1002
  outline: 2px solid var(--tl-color-text);
993
1003
  outline-offset: -5px;
@@ -1029,6 +1039,19 @@ tldraw? probably.
1029
1039
  display: none;
1030
1040
  }
1031
1041
 
1042
+ /*
1043
+ * This is used in a couple places, like Align and Vertical Align.
1044
+ * It's because we have a toolbar with a Toggle Group but then an adjacent button
1045
+ * next to it that opens a popup.
1046
+ */
1047
+ .tlui-style-panel__section .tlui-toolbar:has(.tlui-toolbar) {
1048
+ flex-wrap: wrap;
1049
+ }
1050
+
1051
+ .tlui-style-panel__section .tlui-toolbar:has(.tlui-toolbar) .tlui-style-panel__subheading {
1052
+ margin-left: -2px;
1053
+ }
1054
+
1032
1055
  .tlui-style-panel__section__common:not(:only-child) {
1033
1056
  margin-bottom: 7px;
1034
1057
  border-bottom: 1px solid var(--tl-color-divider);
@@ -86,8 +86,14 @@ export class TestEditor extends Editor {
86
86
  elm.tabIndex = 0
87
87
  elm.getBoundingClientRect = () => bounds as DOMRect
88
88
 
89
- const shapeUtilsWithDefaults = [...defaultShapeUtils, ...(options.shapeUtils ?? [])]
90
- const bindingUtilsWithDefaults = [...defaultBindingUtils, ...(options.bindingUtils ?? [])]
89
+ const shapeUtilsWithDefaults = [
90
+ ...defaultShapeUtils.filter((s) => !options.shapeUtils?.some((su) => su.type === s.type)),
91
+ ...(options.shapeUtils ?? []),
92
+ ]
93
+ const bindingUtilsWithDefaults = [
94
+ ...defaultBindingUtils.filter((b) => !options.bindingUtils?.some((bu) => bu.type === b.type)),
95
+ ...(options.bindingUtils ?? []),
96
+ ]
91
97
 
92
98
  super({
93
99
  ...options,
@@ -12,6 +12,7 @@ beforeEach(() => {
12
12
  },
13
13
  })
14
14
  editor.updateViewportScreenBounds(new Box(0, 0, 1600, 900))
15
+ editor.user.updateUserPreferences({ inputMode: null })
15
16
  })
16
17
 
17
18
  const wheelEvent = {
@@ -204,6 +205,18 @@ describe('CameraOptions.wheelBehavior', () => {
204
205
  .forceTick()
205
206
  expect(editor.getCamera()).toMatchObject({ x: 0, y: 5, z: 1 })
206
207
  })
208
+
209
+ it('When input mode is set, camera wheel behavior is ignored', () => {
210
+ editor.user.updateUserPreferences({ inputMode: 'trackpad' })
211
+ editor
212
+ .setCameraOptions({ ...DEFAULT_CAMERA_OPTIONS, wheelBehavior: 'zoom' })
213
+ .dispatch({
214
+ ...wheelEvent,
215
+ delta: new Vec(0, 5, 0.01),
216
+ })
217
+ .forceTick()
218
+ expect(editor.getCamera()).toMatchObject({ x: 0, y: 5, z: 1 })
219
+ })
207
220
  })
208
221
 
209
222
  describe('CameraOptions.panSpeed', () => {
@@ -1680,3 +1680,18 @@ it('drops into the top-most frame, if there is one', () => {
1680
1680
 
1681
1681
  expect(editor.getShape(rect)?.parentId).toBe(editor.getCurrentPageId())
1682
1682
  })
1683
+
1684
+ it('does not get drop children of nested frame if they are occluded from the outer frame', () => {
1685
+ const frame1Id = dragCreateFrame({ down: [100, 100], move: [300, 300], up: [300, 300] })
1686
+ const frame2Id = dragCreateFrame({ down: [150, 150], move: [290, 290], up: [290, 290] })
1687
+
1688
+ const rect1 = createRect({ pos: [280, 160], size: [10, 30] })
1689
+
1690
+ expect(editor.getShape(rect1)?.parentId).toBe(frame2Id)
1691
+ expect(editor.getShape(frame2Id)?.parentId).toBe(frame1Id)
1692
+
1693
+ editor.select(frame2Id)
1694
+ editor.translateSelection(30, 0)
1695
+
1696
+ expect(editor.getShape(rect1)?.parentId).toBe(frame2Id)
1697
+ })
package/tldraw.css CHANGED
@@ -1964,7 +1964,7 @@ it from receiving any pointer events or affecting the cursor. */
1964
1964
  min-height: 40px;
1965
1965
  width: 100%;
1966
1966
  gap: 8px;
1967
- margin: -4px 0px;
1967
+ margin-top: -4px;
1968
1968
  }
1969
1969
 
1970
1970
  .tlui-button__menu::after {
@@ -2290,6 +2290,10 @@ it from receiving any pointer events or affecting the cursor. */
2290
2290
  -webkit-user-select: auto !important;
2291
2291
  }
2292
2292
 
2293
+ .tlui-input::placeholder {
2294
+ color: var(--tl-color-text-3);
2295
+ }
2296
+
2293
2297
  .tlui-input__wrapper {
2294
2298
  width: 100%;
2295
2299
  height: 44px;
@@ -2374,6 +2378,12 @@ it from receiving any pointer events or affecting the cursor. */
2374
2378
  box-shadow: var(--tl-shadow-3);
2375
2379
  }
2376
2380
 
2381
+ @media (max-height: 600px) {
2382
+ .tlui-menu {
2383
+ max-height: 70vh;
2384
+ }
2385
+ }
2386
+
2377
2387
  .tlui-menu::-webkit-scrollbar {
2378
2388
  display: none;
2379
2389
  }
@@ -2783,7 +2793,7 @@ it from receiving any pointer events or affecting the cursor. */
2783
2793
  max-width: 148px;
2784
2794
  }
2785
2795
 
2786
- .tlui-style-panel[data-show-ui-labels='true'] .tlui-button[data-isactive='true'] {
2796
+ .tlui-style-panel[data-enhanced-a11y-mode='true'] .tlui-button[data-isactive='true'] {
2787
2797
  border-radius: 10px;
2788
2798
  outline: 2px solid var(--tl-color-text);
2789
2799
  outline-offset: -5px;
@@ -2825,6 +2835,19 @@ tldraw? probably.
2825
2835
  display: none;
2826
2836
  }
2827
2837
 
2838
+ /*
2839
+ * This is used in a couple places, like Align and Vertical Align.
2840
+ * It's because we have a toolbar with a Toggle Group but then an adjacent button
2841
+ * next to it that opens a popup.
2842
+ */
2843
+ .tlui-style-panel__section .tlui-toolbar:has(.tlui-toolbar) {
2844
+ flex-wrap: wrap;
2845
+ }
2846
+
2847
+ .tlui-style-panel__section .tlui-toolbar:has(.tlui-toolbar) .tlui-style-panel__subheading {
2848
+ margin-left: -2px;
2849
+ }
2850
+
2828
2851
  .tlui-style-panel__section__common:not(:only-child) {
2829
2852
  margin-bottom: 7px;
2830
2853
  border-bottom: 1px solid var(--tl-color-divider);