tldraw 3.16.0-canary.f60032f16651 → 3.16.0-canary.fa03b5a9ad13

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 (533) hide show
  1. package/dist-cjs/index.d.ts +412 -112
  2. package/dist-cjs/index.js +49 -14
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/Tldraw.js +12 -2
  5. package/dist-cjs/lib/Tldraw.js.map +2 -2
  6. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  7. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  8. package/dist-cjs/lib/defaultExternalContentHandlers.js +15 -4
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  10. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -3
  11. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  12. package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
  13. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +6 -0
  14. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
  15. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +3 -2
  16. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  17. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  18. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  19. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +1 -1
  20. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  21. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +4 -4
  22. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
  23. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  24. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  25. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  26. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  27. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +20 -13
  28. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  29. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  30. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  31. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js +8 -2
  32. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js.map +2 -2
  33. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +3 -2
  34. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  35. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  36. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  37. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  38. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  39. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  40. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  41. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
  42. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  43. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -5
  44. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  45. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +4 -4
  46. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
  47. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -3
  48. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  49. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  50. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  51. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  52. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +3 -5
  53. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  54. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +0 -2
  55. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
  56. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  57. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  58. package/dist-cjs/lib/shapes/text/PlainTextArea.js +3 -2
  59. package/dist-cjs/lib/shapes/text/PlainTextArea.js.map +2 -2
  60. package/dist-cjs/lib/shapes/text/RichTextArea.js +3 -3
  61. package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
  62. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  63. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  64. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  65. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  66. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  67. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  68. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  69. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  70. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +3 -1
  71. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  72. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  73. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  74. package/dist-cjs/lib/ui/assetUrls.js +13 -10
  75. package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
  76. package/dist-cjs/lib/ui/components/A11y.js +1 -1
  77. package/dist-cjs/lib/ui/components/A11y.js.map +2 -2
  78. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  79. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  80. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  81. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  82. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  83. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  84. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  85. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  86. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +6 -6
  87. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
  88. package/dist-cjs/lib/ui/components/LanguageMenu.js +1 -0
  89. package/dist-cjs/lib/ui/components/LanguageMenu.js.map +2 -2
  90. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  91. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  92. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +2 -1
  93. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
  94. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  95. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  96. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  97. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  98. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  99. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  100. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +3 -2
  101. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  102. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  103. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  104. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  105. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  106. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +11 -4
  107. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  108. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +249 -279
  109. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  110. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js +147 -0
  111. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +7 -0
  112. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +68 -0
  113. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +7 -0
  114. package/dist-cjs/lib/ui/components/StylePanel/{DoubleDropdownPicker.js → StylePanelDoubleDropdownPicker.js} +26 -25
  115. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +7 -0
  116. package/dist-cjs/lib/ui/components/StylePanel/{DropdownPicker.js → StylePanelDropdownPicker.js} +47 -43
  117. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +7 -0
  118. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js +28 -0
  119. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js.map +7 -0
  120. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +2 -0
  121. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  122. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +39 -10
  123. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  124. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  125. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  126. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js +15 -3
  127. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js.map +2 -2
  128. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +2 -1
  129. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  130. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  131. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  132. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +10 -5
  133. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  134. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  135. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  136. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +11 -2
  137. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  138. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js +5 -3
  139. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js.map +2 -2
  140. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  141. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  142. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +18 -5
  143. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  144. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +33 -7
  145. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  146. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +306 -0
  147. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  148. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  149. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  150. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js +3 -0
  151. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js.map +2 -2
  152. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  153. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  154. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  155. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +19 -33
  156. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  157. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  158. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  159. package/dist-cjs/lib/ui/context/actions.js +44 -10
  160. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  161. package/dist-cjs/lib/ui/context/components.js +2 -0
  162. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  163. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  164. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +1 -1
  165. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
  166. package/dist-cjs/lib/ui/hooks/useExportAs.js +3 -2
  167. package/dist-cjs/lib/ui/hooks/useExportAs.js.map +2 -2
  168. package/dist-cjs/lib/ui/hooks/useTools.js +22 -4
  169. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  170. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  171. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +8 -1
  172. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  173. package/dist-cjs/lib/ui/kbd-utils.js +9 -3
  174. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  175. package/dist-cjs/lib/ui/version.js +3 -3
  176. package/dist-cjs/lib/ui/version.js.map +1 -1
  177. package/dist-cjs/lib/utils/export/copyAs.js +1 -2
  178. package/dist-cjs/lib/utils/export/copyAs.js.map +2 -2
  179. package/dist-cjs/lib/utils/export/export.js +0 -20
  180. package/dist-cjs/lib/utils/export/export.js.map +2 -2
  181. package/dist-cjs/lib/utils/export/exportAs.js +1 -2
  182. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  183. package/dist-esm/index.d.mts +412 -112
  184. package/dist-esm/index.mjs +91 -29
  185. package/dist-esm/index.mjs.map +2 -2
  186. package/dist-esm/lib/Tldraw.mjs +14 -4
  187. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  188. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  189. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  190. package/dist-esm/lib/defaultExternalContentHandlers.mjs +15 -4
  191. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  192. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
  193. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  194. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
  195. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
  196. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +3 -2
  197. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  198. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  199. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  200. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +1 -1
  201. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  202. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +4 -5
  203. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  204. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  205. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  206. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  207. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  208. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +21 -13
  209. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  210. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  211. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  212. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs +9 -3
  213. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs.map +2 -2
  214. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +4 -2
  215. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  216. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  217. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  218. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  219. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  220. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  221. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  222. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  223. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  224. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -5
  225. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  226. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +5 -5
  227. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
  228. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -3
  229. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  230. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  231. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  232. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  233. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +3 -6
  234. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  235. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +0 -2
  236. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
  237. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  238. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  239. package/dist-esm/lib/shapes/text/PlainTextArea.mjs +4 -3
  240. package/dist-esm/lib/shapes/text/PlainTextArea.mjs.map +2 -2
  241. package/dist-esm/lib/shapes/text/RichTextArea.mjs +3 -4
  242. package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
  243. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  244. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  245. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  246. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  247. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  248. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  249. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  250. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  251. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +3 -1
  252. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  253. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  254. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  255. package/dist-esm/lib/ui/assetUrls.mjs +13 -10
  256. package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
  257. package/dist-esm/lib/ui/components/A11y.mjs +1 -2
  258. package/dist-esm/lib/ui/components/A11y.mjs.map +2 -2
  259. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  260. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  261. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  262. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  263. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  264. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  265. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  266. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  267. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +6 -6
  268. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
  269. package/dist-esm/lib/ui/components/LanguageMenu.mjs +1 -0
  270. package/dist-esm/lib/ui/components/LanguageMenu.mjs.map +2 -2
  271. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  272. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  273. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +2 -1
  274. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
  275. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  276. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  277. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  278. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  279. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  280. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  281. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +3 -3
  282. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  283. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  284. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  285. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  286. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  287. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +16 -5
  288. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  289. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +251 -283
  290. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  291. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +135 -0
  292. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +7 -0
  293. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +48 -0
  294. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +7 -0
  295. package/dist-esm/lib/ui/components/StylePanel/{DoubleDropdownPicker.mjs → StylePanelDoubleDropdownPicker.mjs} +23 -22
  296. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +7 -0
  297. package/dist-esm/lib/ui/components/StylePanel/{DropdownPicker.mjs → StylePanelDropdownPicker.mjs} +44 -40
  298. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +7 -0
  299. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs +8 -0
  300. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs.map +7 -0
  301. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +2 -0
  302. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  303. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +39 -10
  304. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  305. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  306. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  307. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs +15 -3
  308. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs.map +2 -2
  309. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +2 -1
  310. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  311. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  312. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  313. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +10 -5
  314. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  315. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  316. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  317. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +11 -3
  318. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  319. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs +6 -4
  320. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs.map +2 -2
  321. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  322. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  323. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +18 -5
  324. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  325. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +33 -7
  326. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  327. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +284 -0
  328. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  329. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  330. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  331. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs +3 -0
  332. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs.map +2 -2
  333. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  334. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  335. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  336. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +19 -33
  337. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  338. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  339. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  340. package/dist-esm/lib/ui/context/actions.mjs +44 -10
  341. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  342. package/dist-esm/lib/ui/context/components.mjs +2 -0
  343. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  344. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  345. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +1 -2
  346. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
  347. package/dist-esm/lib/ui/hooks/useExportAs.mjs +3 -2
  348. package/dist-esm/lib/ui/hooks/useExportAs.mjs.map +2 -2
  349. package/dist-esm/lib/ui/hooks/useTools.mjs +23 -4
  350. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  351. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +8 -1
  352. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  353. package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
  354. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  355. package/dist-esm/lib/ui/version.mjs +3 -3
  356. package/dist-esm/lib/ui/version.mjs.map +1 -1
  357. package/dist-esm/lib/utils/export/copyAs.mjs +1 -2
  358. package/dist-esm/lib/utils/export/copyAs.mjs.map +2 -2
  359. package/dist-esm/lib/utils/export/export.mjs +0 -20
  360. package/dist-esm/lib/utils/export/export.mjs.map +2 -2
  361. package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
  362. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  363. package/package.json +11 -34
  364. package/src/index.ts +69 -22
  365. package/src/lib/Tldraw.tsx +15 -2
  366. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  367. package/src/lib/defaultExternalContentHandlers.ts +26 -4
  368. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +85 -14
  369. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +103 -8
  370. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +48 -6
  371. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
  372. package/src/lib/shapes/arrow/arrow-types.ts +3 -5
  373. package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
  374. package/src/lib/shapes/arrow/arrowTargetState.ts +34 -3
  375. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  376. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +1 -1
  377. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +4 -5
  378. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  379. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  380. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  381. package/src/lib/shapes/frame/FrameShapeUtil.tsx +30 -14
  382. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  383. package/src/lib/shapes/frame/components/FrameLabelInput.tsx +10 -3
  384. package/src/lib/shapes/geo/GeoShapeUtil.tsx +4 -2
  385. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  386. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  387. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  388. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  389. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  390. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  391. package/src/lib/shapes/note/NoteShapeUtil.tsx +10 -4
  392. package/src/lib/shapes/shared/HyperlinkButton.tsx +5 -5
  393. package/src/lib/shapes/shared/PlainTextLabel.tsx +0 -6
  394. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  395. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  396. package/src/lib/shapes/shared/useEditablePlainText.ts +3 -10
  397. package/src/lib/shapes/shared/useImageOrVideoAsset.ts +0 -7
  398. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  399. package/src/lib/shapes/text/PlainTextArea.tsx +4 -3
  400. package/src/lib/shapes/text/RichTextArea.tsx +3 -4
  401. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  402. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  403. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  404. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  405. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  406. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +6 -2
  407. package/src/lib/ui/TldrawUi.tsx +33 -12
  408. package/src/lib/ui/assetUrls.ts +13 -10
  409. package/src/lib/ui/components/A11y.tsx +1 -2
  410. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  411. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  412. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  413. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  414. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
  415. package/src/lib/ui/components/LanguageMenu.tsx +1 -0
  416. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  417. package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +2 -1
  418. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  419. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  420. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  421. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +4 -4
  422. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  423. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  424. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +28 -12
  425. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +261 -343
  426. package/src/lib/ui/components/{primitives/TldrawUiButtonPicker.tsx → StylePanel/StylePanelButtonPicker.tsx} +73 -50
  427. package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +63 -0
  428. package/src/lib/ui/components/StylePanel/{DoubleDropdownPicker.tsx → StylePanelDoubleDropdownPicker.tsx} +31 -22
  429. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +119 -0
  430. package/src/lib/ui/components/StylePanel/StylePanelSubheading.tsx +9 -0
  431. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +2 -0
  432. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +33 -16
  433. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  434. package/src/lib/ui/components/Toolbar/DefaultVideoToolbarContent.tsx +12 -4
  435. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +1 -0
  436. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  437. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +21 -11
  438. package/src/lib/ui/components/menu-items.tsx +8 -0
  439. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +7 -3
  440. package/src/lib/ui/components/primitives/TldrawUiInput.tsx +6 -3
  441. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  442. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +52 -32
  443. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +55 -12
  444. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +379 -0
  445. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  446. package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +4 -0
  447. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  448. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  449. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +27 -36
  450. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  451. package/src/lib/ui/context/actions.tsx +51 -10
  452. package/src/lib/ui/context/components.tsx +3 -0
  453. package/src/lib/ui/context/events.tsx +2 -1
  454. package/src/lib/ui/hooks/useClipboardEvents.ts +1 -2
  455. package/src/lib/ui/hooks/useExportAs.ts +3 -2
  456. package/src/lib/ui/hooks/useTools.tsx +26 -4
  457. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +7 -0
  458. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +8 -1
  459. package/src/lib/ui/kbd-utils.ts +10 -3
  460. package/src/lib/ui/version.ts +3 -3
  461. package/src/lib/ui.css +448 -294
  462. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
  463. package/src/lib/utils/export/copyAs.ts +1 -24
  464. package/src/lib/utils/export/export.ts +0 -36
  465. package/src/lib/utils/export/exportAs.ts +1 -32
  466. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
  467. package/src/test/A11y.test.tsx +3 -2
  468. package/src/test/ClickManager.test.ts +7 -6
  469. package/src/test/Editor.test.tsx +20 -19
  470. package/src/test/EraserTool.test.ts +184 -13
  471. package/src/test/HandTool.test.ts +10 -9
  472. package/src/test/HighlightShape.test.ts +2 -1
  473. package/src/test/SelectTool.test.ts +3 -2
  474. package/src/test/TLUserPreferences.test.ts +4 -3
  475. package/src/test/TestEditor.ts +21 -17
  476. package/src/test/TldrawEditor.test.tsx +11 -10
  477. package/src/test/ZoomTool.test.ts +7 -6
  478. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  479. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  480. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  481. package/src/test/arrows-megabus.test.tsx +5 -4
  482. package/src/test/bindings.test.tsx +24 -37
  483. package/src/test/bookmark-shapes.test.ts +1 -8
  484. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  485. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  486. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  487. package/src/test/commands/alignShapes.test.tsx +25 -24
  488. package/src/test/commands/animationSpeed.test.ts +2 -1
  489. package/src/test/commands/centerOnPoint.test.ts +3 -2
  490. package/src/test/commands/clipboard.test.ts +3 -2
  491. package/src/test/commands/createShapes.test.ts +2 -1
  492. package/src/test/commands/deleteShapes.test.ts +2 -1
  493. package/src/test/commands/distributeShapes.test.tsx +11 -10
  494. package/src/test/commands/getSvgString.test.ts +2 -1
  495. package/src/test/commands/packShapes.test.ts +5 -4
  496. package/src/test/commands/resizeShape.test.ts +2 -1
  497. package/src/test/commands/rotateShapes.test.ts +7 -6
  498. package/src/test/commands/setCamera.test.ts +4 -3
  499. package/src/test/commands/setCurrentPage.test.ts +3 -2
  500. package/src/test/commands/stackShapes.test.ts +11 -10
  501. package/src/test/commands/stretch.test.tsx +13 -12
  502. package/src/test/createDeepLink.test.tsx +2 -1
  503. package/src/test/cropping.test.ts +3 -2
  504. package/src/test/custom-clipping.test.ts +436 -0
  505. package/src/test/drawing.test.ts +2 -1
  506. package/src/test/flipShapes.test.ts +4 -3
  507. package/src/test/frames.test.ts +40 -24
  508. package/src/test/getCulledShapes.test.tsx +74 -4
  509. package/src/test/groups.test.tsx +1 -1
  510. package/src/test/handleDeepLink.test.tsx +2 -1
  511. package/src/test/maxShapes.test.ts +3 -2
  512. package/src/test/modifiers.test.ts +5 -4
  513. package/src/test/navigation.test.ts +12 -11
  514. package/src/test/panning.test.ts +2 -1
  515. package/src/test/perf/perf.test.ts +2 -1
  516. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  517. package/src/test/resizing.test.ts +39 -38
  518. package/src/test/select.test.tsx +4 -3
  519. package/src/test/selection-omnibus.test.ts +11 -10
  520. package/src/test/shapeutils.test.ts +4 -3
  521. package/src/test/translating.test.ts +9 -8
  522. package/tldraw.css +756 -584
  523. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  524. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +0 -7
  525. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +0 -7
  526. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +0 -142
  527. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +0 -7
  528. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
  529. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +0 -7
  530. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +0 -7
  531. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +0 -115
  532. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +0 -7
  533. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +0 -109
@@ -0,0 +1,379 @@
1
+ import { assert, Atom, atom, Editor, uniqueId, useMaybeEditor, useValue } from '@tldraw/editor'
2
+ import { Tooltip as _Tooltip } from 'radix-ui'
3
+ import React, {
4
+ createContext,
5
+ forwardRef,
6
+ ReactNode,
7
+ useContext,
8
+ useEffect,
9
+ useLayoutEffect,
10
+ useRef,
11
+ useState,
12
+ } from 'react'
13
+ import { useTldrawUiOrientation } from './layout'
14
+
15
+ const DEFAULT_TOOLTIP_DELAY_MS = 700
16
+
17
+ /** @public */
18
+ export interface TldrawUiTooltipProps {
19
+ children: React.ReactNode
20
+ content?: string | React.ReactNode
21
+ side?: 'top' | 'right' | 'bottom' | 'left'
22
+ sideOffset?: number
23
+ disabled?: boolean
24
+ showOnMobile?: boolean
25
+ delayDuration?: number
26
+ }
27
+
28
+ interface CurrentTooltip {
29
+ id: string
30
+ content: ReactNode
31
+ side: 'top' | 'right' | 'bottom' | 'left'
32
+ sideOffset: number
33
+ showOnMobile: boolean
34
+ targetElement: HTMLElement
35
+ delayDuration: number
36
+ }
37
+
38
+ // Singleton tooltip manager
39
+ class TooltipManager {
40
+ private static instance: TooltipManager | null = null
41
+ private currentTooltip = atom<CurrentTooltip | null>('current tooltip', null)
42
+ private destroyTimeoutId: number | null = null
43
+
44
+ static getInstance(): TooltipManager {
45
+ if (!TooltipManager.instance) {
46
+ TooltipManager.instance = new TooltipManager()
47
+ }
48
+ return TooltipManager.instance
49
+ }
50
+
51
+ showTooltip(
52
+ tooltipId: string,
53
+ content: string | React.ReactNode,
54
+ targetElement: HTMLElement,
55
+ side: 'top' | 'right' | 'bottom' | 'left',
56
+ sideOffset: number,
57
+ showOnMobile: boolean,
58
+ delayDuration: number
59
+ ) {
60
+ // Clear any existing destroy timeout
61
+ if (this.destroyTimeoutId) {
62
+ clearTimeout(this.destroyTimeoutId)
63
+ this.destroyTimeoutId = null
64
+ }
65
+
66
+ // Update current tooltip
67
+ this.currentTooltip.set({
68
+ id: tooltipId,
69
+ content,
70
+ side,
71
+ sideOffset,
72
+ showOnMobile,
73
+ targetElement,
74
+ delayDuration,
75
+ })
76
+ }
77
+
78
+ updateCurrentTooltip(tooltipId: string, update: (tooltip: CurrentTooltip) => CurrentTooltip) {
79
+ this.currentTooltip.update((tooltip) => {
80
+ if (tooltip?.id === tooltipId) {
81
+ return update(tooltip)
82
+ }
83
+ return tooltip
84
+ })
85
+ }
86
+
87
+ hideTooltip(editor: Editor | null, tooltipId: string, instant: boolean = false) {
88
+ const hide = () => {
89
+ // Only hide if this is the current tooltip
90
+ if (this.currentTooltip.get()?.id === tooltipId) {
91
+ this.currentTooltip.set(null)
92
+ this.destroyTimeoutId = null
93
+ }
94
+ }
95
+
96
+ if (editor && !instant) {
97
+ // Start destroy timeout (1 second)
98
+ this.destroyTimeoutId = editor.timers.setTimeout(hide, 300)
99
+ } else {
100
+ hide()
101
+ }
102
+ }
103
+
104
+ hideAllTooltips() {
105
+ this.currentTooltip.set(null)
106
+ this.destroyTimeoutId = null
107
+ }
108
+
109
+ getCurrentTooltipData() {
110
+ const currentTooltip = this.currentTooltip.get()
111
+ if (!currentTooltip) return null
112
+ if (!this.supportsHover() && !currentTooltip.showOnMobile) return null
113
+ return currentTooltip
114
+ }
115
+
116
+ private supportsHoverAtom: Atom<boolean> | null = null
117
+ supportsHover() {
118
+ if (!this.supportsHoverAtom) {
119
+ const mediaQuery = window.matchMedia('(hover: hover)')
120
+ const supportsHover = atom('has hover', mediaQuery.matches)
121
+ this.supportsHoverAtom = supportsHover
122
+ mediaQuery.addEventListener('change', (e) => {
123
+ supportsHover.set(e.matches)
124
+ })
125
+ }
126
+ return this.supportsHoverAtom.get()
127
+ }
128
+ }
129
+
130
+ export const tooltipManager = TooltipManager.getInstance()
131
+
132
+ // Context for the tooltip singleton
133
+ const TooltipSingletonContext = createContext<boolean>(false)
134
+
135
+ /** @public */
136
+ export interface TldrawUiTooltipProviderProps {
137
+ children: React.ReactNode
138
+ }
139
+
140
+ /** @public @react */
141
+ export function TldrawUiTooltipProvider({ children }: TldrawUiTooltipProviderProps) {
142
+ return (
143
+ <_Tooltip.Provider skipDelayDuration={700}>
144
+ <TooltipSingletonContext.Provider value={true}>
145
+ {children}
146
+ <TooltipSingleton />
147
+ </TooltipSingletonContext.Provider>
148
+ </_Tooltip.Provider>
149
+ )
150
+ }
151
+
152
+ // The singleton tooltip component that renders once
153
+ function TooltipSingleton() {
154
+ const [isOpen, setIsOpen] = useState(false)
155
+ const triggerRef = useRef<HTMLDivElement>(null)
156
+ const isFirstShowRef = useRef(true)
157
+ const editor = useMaybeEditor()
158
+
159
+ const currentTooltip = useValue(
160
+ 'current tooltip',
161
+ () => tooltipManager.getCurrentTooltipData(),
162
+ []
163
+ )
164
+
165
+ const cameraState = useValue('camera state', () => editor?.getCameraState(), [editor])
166
+
167
+ // Hide tooltip when camera is moving (panning/zooming)
168
+ useEffect(() => {
169
+ if (cameraState === 'moving' && isOpen && currentTooltip) {
170
+ tooltipManager.hideTooltip(editor, currentTooltip.id, true)
171
+ }
172
+ }, [cameraState, isOpen, currentTooltip, editor])
173
+
174
+ useEffect(() => {
175
+ function handleKeyDown(event: KeyboardEvent) {
176
+ if (event.key === 'Escape' && currentTooltip && isOpen) {
177
+ tooltipManager.hideTooltip(editor, currentTooltip.id)
178
+ event.stopPropagation()
179
+ }
180
+ }
181
+
182
+ document.addEventListener('keydown', handleKeyDown, { capture: true })
183
+ return () => {
184
+ document.removeEventListener('keydown', handleKeyDown, { capture: true })
185
+ }
186
+ }, [editor, currentTooltip, isOpen])
187
+
188
+ // Update open state and trigger position
189
+ useEffect(() => {
190
+ let timer: ReturnType<typeof setTimeout> | null = null
191
+ if (currentTooltip && triggerRef.current) {
192
+ // Position the invisible trigger element over the active element
193
+ const activeRect = currentTooltip.targetElement.getBoundingClientRect()
194
+ const trigger = triggerRef.current
195
+
196
+ trigger.style.position = 'fixed'
197
+ trigger.style.left = `${activeRect.left}px`
198
+ trigger.style.top = `${activeRect.top}px`
199
+ trigger.style.width = `${activeRect.width}px`
200
+ trigger.style.height = `${activeRect.height}px`
201
+ trigger.style.pointerEvents = 'none'
202
+ trigger.style.zIndex = '9999'
203
+
204
+ // Handle delay for first show
205
+ if (isFirstShowRef.current) {
206
+ // eslint-disable-next-line no-restricted-globals
207
+ timer = setTimeout(() => {
208
+ setIsOpen(true)
209
+ isFirstShowRef.current = false
210
+ }, currentTooltip.delayDuration)
211
+ } else {
212
+ // Subsequent tooltips show immediately
213
+ setIsOpen(true)
214
+ }
215
+ } else {
216
+ // Hide tooltip immediately
217
+ setIsOpen(false)
218
+ // Reset first show state after tooltip is hidden
219
+ isFirstShowRef.current = true
220
+ }
221
+
222
+ return () => {
223
+ if (timer !== null) {
224
+ clearTimeout(timer)
225
+ }
226
+ }
227
+ }, [currentTooltip])
228
+
229
+ if (!currentTooltip) {
230
+ return null
231
+ }
232
+
233
+ return (
234
+ <_Tooltip.Root open={isOpen} delayDuration={0}>
235
+ <_Tooltip.Trigger asChild>
236
+ <div ref={triggerRef} />
237
+ </_Tooltip.Trigger>
238
+ <_Tooltip.Content
239
+ className="tlui-tooltip"
240
+ side={currentTooltip.side}
241
+ sideOffset={currentTooltip.sideOffset}
242
+ avoidCollisions
243
+ collisionPadding={8}
244
+ dir="ltr"
245
+ >
246
+ {currentTooltip.content}
247
+ <_Tooltip.Arrow className="tlui-tooltip__arrow" />
248
+ </_Tooltip.Content>
249
+ </_Tooltip.Root>
250
+ )
251
+ }
252
+
253
+ /** @public @react */
254
+ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProps>(
255
+ (
256
+ {
257
+ children,
258
+ content,
259
+ side,
260
+ sideOffset = 5,
261
+ disabled = false,
262
+ showOnMobile = false,
263
+ delayDuration,
264
+ },
265
+ ref
266
+ ) => {
267
+ const editor = useMaybeEditor()
268
+ const tooltipId = useRef<string>(uniqueId())
269
+ const hasProvider = useContext(TooltipSingletonContext)
270
+ const showUiLabels = useValue('showUiLabels', () => editor?.user.getShowUiLabels(), [editor])
271
+
272
+ const orientationCtx = useTldrawUiOrientation()
273
+ const sideToUse = side ?? orientationCtx.tooltipSide
274
+
275
+ useEffect(() => {
276
+ const currentTooltipId = tooltipId.current
277
+ return () => {
278
+ if (hasProvider) {
279
+ tooltipManager.hideTooltip(editor, currentTooltipId, true)
280
+ }
281
+ }
282
+ }, [editor, hasProvider])
283
+
284
+ useLayoutEffect(() => {
285
+ if (hasProvider && tooltipManager.getCurrentTooltipData()?.id === tooltipId.current) {
286
+ tooltipManager.updateCurrentTooltip(tooltipId.current, (tooltip) => ({
287
+ ...tooltip,
288
+ content,
289
+ side: sideToUse,
290
+ sideOffset,
291
+ showOnMobile,
292
+ }))
293
+ }
294
+ }, [content, sideToUse, sideOffset, showOnMobile, hasProvider])
295
+
296
+ // Don't show tooltip if disabled, no content, or UI labels are disabled
297
+ if (disabled || !content) {
298
+ return <>{children}</>
299
+ }
300
+
301
+ let delayDurationToUse
302
+ if (showUiLabels) {
303
+ delayDurationToUse = 0
304
+ } else {
305
+ delayDurationToUse =
306
+ delayDuration ?? (editor?.options.tooltipDelayMs || DEFAULT_TOOLTIP_DELAY_MS)
307
+ }
308
+
309
+ // Fallback to old behavior if no provider
310
+ if (!hasProvider || showUiLabels) {
311
+ return (
312
+ <_Tooltip.Root delayDuration={delayDurationToUse} disableHoverableContent={!showUiLabels}>
313
+ <_Tooltip.Trigger asChild ref={ref}>
314
+ {children}
315
+ </_Tooltip.Trigger>
316
+ <_Tooltip.Content
317
+ className="tlui-tooltip"
318
+ side={sideToUse}
319
+ sideOffset={sideOffset}
320
+ avoidCollisions
321
+ collisionPadding={8}
322
+ dir="ltr"
323
+ >
324
+ {content}
325
+ <_Tooltip.Arrow className="tlui-tooltip__arrow" />
326
+ </_Tooltip.Content>
327
+ </_Tooltip.Root>
328
+ )
329
+ }
330
+
331
+ const child = React.Children.only(children)
332
+ assert(React.isValidElement(child), 'TldrawUiTooltip children must be a single element')
333
+
334
+ const handleMouseEnter = (event: React.MouseEvent<HTMLElement>) => {
335
+ child.props.onMouseEnter?.(event)
336
+ tooltipManager.showTooltip(
337
+ tooltipId.current,
338
+ content,
339
+ event.currentTarget as HTMLElement,
340
+ sideToUse,
341
+ sideOffset,
342
+ showOnMobile,
343
+ delayDurationToUse
344
+ )
345
+ }
346
+
347
+ const handleMouseLeave = (event: React.MouseEvent<HTMLElement>) => {
348
+ child.props.onMouseLeave?.(event)
349
+ tooltipManager.hideTooltip(editor, tooltipId.current)
350
+ }
351
+
352
+ const handleFocus = (event: React.FocusEvent<HTMLElement>) => {
353
+ child.props.onFocus?.(event)
354
+ tooltipManager.showTooltip(
355
+ tooltipId.current,
356
+ content,
357
+ event.currentTarget as HTMLElement,
358
+ sideToUse,
359
+ sideOffset,
360
+ showOnMobile,
361
+ delayDurationToUse
362
+ )
363
+ }
364
+
365
+ const handleBlur = (event: React.FocusEvent<HTMLElement>) => {
366
+ child.props.onBlur?.(event)
367
+ tooltipManager.hideTooltip(editor, tooltipId.current)
368
+ }
369
+
370
+ const childrenWithHandlers = React.cloneElement(children as React.ReactElement, {
371
+ onMouseEnter: handleMouseEnter,
372
+ onMouseLeave: handleMouseLeave,
373
+ onFocus: handleFocus,
374
+ onBlur: handleBlur,
375
+ })
376
+
377
+ return childrenWithHandlers
378
+ }
379
+ )
@@ -0,0 +1,107 @@
1
+ import classNames from 'classnames'
2
+ import { Slot } from 'radix-ui'
3
+ import { HTMLAttributes, ReactNode, createContext, forwardRef, useContext } from 'react'
4
+
5
+ /** @public */
6
+ export interface TldrawUiOrientationContext {
7
+ orientation: 'horizontal' | 'vertical'
8
+ tooltipSide: 'top' | 'right' | 'bottom' | 'left'
9
+ }
10
+
11
+ const TldrawUiOrientationContext = createContext<TldrawUiOrientationContext>({
12
+ orientation: 'horizontal',
13
+ tooltipSide: 'bottom',
14
+ })
15
+
16
+ /** @public */
17
+ export interface TldrawUiOrientationProviderProps {
18
+ children: ReactNode
19
+ orientation: 'horizontal' | 'vertical'
20
+ tooltipSide?: 'top' | 'right' | 'bottom' | 'left'
21
+ }
22
+ /** @public @react */
23
+ export function TldrawUiOrientationProvider({
24
+ children,
25
+ orientation,
26
+ tooltipSide,
27
+ }: TldrawUiOrientationProviderProps) {
28
+ const prevContext = useTldrawUiOrientation()
29
+ // generally, we want tooltip side to cascade down through the layout - apart from when the
30
+ // orientation changes. If the tooltip side is "bottom", and then I include some vertical layout
31
+ // elements, keeping the tooltip side as bottom will cause the tooltip to overlap elements
32
+ // stacked on top of each other. In the absence of a tooltip side, we pick a default side based
33
+ // on the orientation whenever the orientation changes.
34
+ const tooltipSideToUse =
35
+ tooltipSide ??
36
+ (orientation === prevContext.orientation
37
+ ? prevContext.tooltipSide
38
+ : orientation === 'horizontal'
39
+ ? 'bottom'
40
+ : 'right')
41
+
42
+ return (
43
+ <TldrawUiOrientationContext.Provider value={{ orientation, tooltipSide: tooltipSideToUse }}>
44
+ {children}
45
+ </TldrawUiOrientationContext.Provider>
46
+ )
47
+ }
48
+
49
+ /** @public */
50
+ export function useTldrawUiOrientation() {
51
+ return useContext(TldrawUiOrientationContext)
52
+ }
53
+
54
+ /** @public */
55
+ export interface TLUiLayoutProps extends HTMLAttributes<HTMLDivElement> {
56
+ children: ReactNode
57
+ tooltipSide?: 'top' | 'right' | 'bottom' | 'left'
58
+ asChild?: boolean
59
+ }
60
+
61
+ /**
62
+ * A row, usually of UI controls like buttons, select dropdown, checkboxes, etc.
63
+ *
64
+ * @public @react
65
+ */
66
+ export const TldrawUiRow = forwardRef<HTMLDivElement, TLUiLayoutProps>(
67
+ ({ asChild, className, tooltipSide, ...props }, ref) => {
68
+ const Component = asChild ? Slot.Root : 'div'
69
+ return (
70
+ <TldrawUiOrientationProvider orientation="horizontal" tooltipSide={tooltipSide}>
71
+ <Component ref={ref} className={classNames('tlui-row', className)} {...props} />
72
+ </TldrawUiOrientationProvider>
73
+ )
74
+ }
75
+ )
76
+
77
+ /**
78
+ * A column, usually of UI controls like buttons, select dropdown, checkboxes, etc.
79
+ *
80
+ * @public @react
81
+ */
82
+ export const TldrawUiColumn = forwardRef<HTMLDivElement, TLUiLayoutProps>(
83
+ ({ asChild, className, tooltipSide, ...props }, ref) => {
84
+ const Component = asChild ? Slot.Root : 'div'
85
+ return (
86
+ <TldrawUiOrientationProvider orientation="vertical" tooltipSide={tooltipSide}>
87
+ <Component ref={ref} className={classNames('tlui-column', className)} {...props} />
88
+ </TldrawUiOrientationProvider>
89
+ )
90
+ }
91
+ )
92
+
93
+ /**
94
+ * A tight grid 4 elements wide, usually of UI controls like buttons, select dropdown, checkboxes,
95
+ * etc.
96
+ *
97
+ * @public @react */
98
+ export const TldrawUiGrid = forwardRef<HTMLDivElement, TLUiLayoutProps>(
99
+ ({ asChild, className, tooltipSide, ...props }, ref) => {
100
+ const Component = asChild ? Slot.Root : 'div'
101
+ return (
102
+ <TldrawUiOrientationProvider orientation="horizontal" tooltipSide={tooltipSide}>
103
+ <Component ref={ref} className={classNames('tlui-grid', className)} {...props} />
104
+ </TldrawUiOrientationProvider>
105
+ )
106
+ }
107
+ )
@@ -19,6 +19,7 @@ export interface TLUiMenuCheckboxItemProps<
19
19
  kbd?: string
20
20
  title?: string
21
21
  label?: TranslationKey | { [key: string]: TranslationKey }
22
+ lang?: string
22
23
  readonlyOk?: boolean
23
24
  onSelect(source: TLUiEventSource): Promise<void> | void
24
25
  toggle?: boolean
@@ -34,6 +35,7 @@ export function TldrawUiMenuCheckboxItem<
34
35
  id,
35
36
  kbd,
36
37
  label,
38
+ lang,
37
39
  readonlyOk,
38
40
  onSelect,
39
41
  toggle = false,
@@ -55,6 +57,7 @@ export function TldrawUiMenuCheckboxItem<
55
57
  return (
56
58
  <_DropdownMenu.CheckboxItem
57
59
  dir="ltr"
60
+ lang={lang}
58
61
  className="tlui-button tlui-button__menu tlui-button__checkbox"
59
62
  title={labelStr}
60
63
  onSelect={(e) => {
@@ -84,6 +87,7 @@ export function TldrawUiMenuCheckboxItem<
84
87
  key={id}
85
88
  className="tlui-button tlui-button__menu tlui-button__checkbox"
86
89
  dir="ltr"
90
+ lang={lang}
87
91
  title={labelStr}
88
92
  onSelect={(e) => {
89
93
  onSelect(sourceId)
@@ -3,7 +3,6 @@ import { TLUiEventSource } from '../../../context/events'
3
3
 
4
4
  /** @public */
5
5
  export type TLUiMenuContextType =
6
- | 'panel'
7
6
  | 'menu'
8
7
  | 'small-icons'
9
8
  | 'context-menu'
@@ -3,6 +3,7 @@ import { ReactNode } from 'react'
3
3
  import { unwrapLabel } from '../../../context/actions'
4
4
  import { TLUiTranslationKey } from '../../../hooks/useTranslation/TLUiTranslationKey'
5
5
  import { useTranslation } from '../../../hooks/useTranslation/useTranslation'
6
+ import { TldrawUiColumn, TldrawUiGrid, TldrawUiRow, useTldrawUiOrientation } from '../layout'
6
7
  import { TldrawUiDropdownMenuGroup } from '../TldrawUiDropdownMenu'
7
8
  import { useTldrawUiMenuContext } from './TldrawUiMenuContext'
8
9
 
@@ -19,25 +20,19 @@ export interface TLUiMenuGroupProps<TranslationKey extends string = string> {
19
20
 
20
21
  /** @public @react */
21
22
  export function TldrawUiMenuGroup({ id, label, className, children }: TLUiMenuGroupProps) {
22
- const { type: menuType, sourceId } = useTldrawUiMenuContext()
23
+ const menu = useTldrawUiMenuContext()
24
+ const { orientation } = useTldrawUiOrientation()
23
25
  const msg = useTranslation()
24
- const labelToUse = unwrapLabel(label, menuType)
26
+ const labelToUse = unwrapLabel(label, menu.type)
25
27
  const labelStr = labelToUse ? msg(labelToUse as TLUiTranslationKey) : undefined
26
28
 
27
- switch (menuType) {
28
- case 'panel': {
29
- return (
30
- <div
31
- className={classNames('tlui-menu__group', className)}
32
- data-testid={`${sourceId}-group.${id}`}
33
- >
34
- {children}
35
- </div>
36
- )
37
- }
29
+ switch (menu.type) {
38
30
  case 'menu': {
39
31
  return (
40
- <TldrawUiDropdownMenuGroup className={className} data-testid={`${sourceId}-group.${id}`}>
32
+ <TldrawUiDropdownMenuGroup
33
+ className={className}
34
+ data-testid={`${menu.sourceId}-group.${id}`}
35
+ >
41
36
  {children}
42
37
  </TldrawUiDropdownMenuGroup>
43
38
  )
@@ -47,7 +42,7 @@ export function TldrawUiMenuGroup({ id, label, className, children }: TLUiMenuGr
47
42
  <div
48
43
  dir="ltr"
49
44
  className={classNames('tlui-menu__group', className)}
50
- data-testid={`${sourceId}-group.${id}`}
45
+ data-testid={`${menu.sourceId}-group.${id}`}
51
46
  >
52
47
  {children}
53
48
  </div>
@@ -56,12 +51,30 @@ export function TldrawUiMenuGroup({ id, label, className, children }: TLUiMenuGr
56
51
  case 'keyboard-shortcuts': {
57
52
  // todo: if groups need a label, let's give em a label
58
53
  return (
59
- <div className="tlui-shortcuts-dialog__group" data-testid={`${sourceId}-group.${id}`}>
54
+ <div className="tlui-shortcuts-dialog__group" data-testid={`${menu.sourceId}-group.${id}`}>
60
55
  <h2 className="tlui-shortcuts-dialog__group__title">{labelStr}</h2>
61
56
  <div className="tlui-shortcuts-dialog__group__content">{children}</div>
62
57
  </div>
63
58
  )
64
59
  }
60
+ case 'toolbar': {
61
+ const Layout = orientation === 'horizontal' ? TldrawUiRow : TldrawUiColumn
62
+ return (
63
+ <Layout className="tlui-main-toolbar__group" data-testid={`${menu.sourceId}-group.${id}`}>
64
+ {children}
65
+ </Layout>
66
+ )
67
+ }
68
+ case 'toolbar-overflow': {
69
+ return (
70
+ <TldrawUiGrid
71
+ className="tlui-main-toolbar__group"
72
+ data-testid={`${menu.sourceId}-group.${id}`}
73
+ >
74
+ {children}
75
+ </TldrawUiGrid>
76
+ )
77
+ }
65
78
  default: {
66
79
  return children
67
80
  }