tldraw 3.16.0-next.c30b1b5e551a → 3.16.0-next.e57e478c23e0

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 (469) hide show
  1. package/dist-cjs/index.d.ts +353 -105
  2. package/dist-cjs/index.js +46 -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 +5 -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/arrowLabel.js +6 -0
  13. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
  14. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  15. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  16. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  17. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  18. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  19. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  20. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  21. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  22. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +18 -12
  23. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  24. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  25. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  26. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  27. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  28. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  29. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  30. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  31. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  32. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  33. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  34. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
  35. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  36. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +4 -4
  37. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  38. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -3
  39. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  40. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  41. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  42. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  43. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +0 -2
  44. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  45. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +0 -2
  46. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
  47. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  48. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  49. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  50. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  51. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  52. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  53. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  54. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  55. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  56. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  57. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  58. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  59. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  60. package/dist-cjs/lib/ui/assetUrls.js +13 -10
  61. package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
  62. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  63. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  64. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  65. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  66. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  67. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  68. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  69. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  70. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +6 -6
  71. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
  72. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  73. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  74. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  75. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  76. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  77. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  78. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  79. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  80. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  81. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  82. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  83. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  84. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  85. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  86. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +11 -4
  87. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  88. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +249 -279
  89. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  90. package/dist-cjs/lib/ui/components/{primitives/TldrawUiButtonPicker.js → StylePanel/StylePanelButtonPicker.js} +52 -56
  91. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +7 -0
  92. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +68 -0
  93. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +7 -0
  94. package/dist-cjs/lib/ui/components/StylePanel/{DoubleDropdownPicker.js → StylePanelDoubleDropdownPicker.js} +26 -25
  95. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +7 -0
  96. package/dist-cjs/lib/ui/components/StylePanel/{DropdownPicker.js → StylePanelDropdownPicker.js} +47 -43
  97. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +7 -0
  98. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js +28 -0
  99. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js.map +7 -0
  100. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +3 -2
  101. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  102. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +39 -10
  103. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  104. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  105. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  106. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js +15 -3
  107. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js.map +2 -2
  108. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +3 -3
  109. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  110. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  111. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  112. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  113. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  114. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  115. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  116. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +10 -1
  117. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  118. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  119. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  120. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +17 -4
  121. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  122. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +32 -7
  123. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  124. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +269 -0
  125. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  126. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  127. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  128. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  129. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  130. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  131. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +154 -20
  132. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  133. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  134. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  135. package/dist-cjs/lib/ui/context/actions.js +38 -10
  136. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  137. package/dist-cjs/lib/ui/context/components.js +2 -0
  138. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  139. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  140. package/dist-cjs/lib/ui/hooks/useExportAs.js +3 -2
  141. package/dist-cjs/lib/ui/hooks/useExportAs.js.map +2 -2
  142. package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
  143. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  144. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  145. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +5 -0
  146. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  147. package/dist-cjs/lib/ui/kbd-utils.js +9 -3
  148. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  149. package/dist-cjs/lib/ui/version.js +3 -3
  150. package/dist-cjs/lib/ui/version.js.map +1 -1
  151. package/dist-cjs/lib/utils/export/copyAs.js +1 -2
  152. package/dist-cjs/lib/utils/export/copyAs.js.map +2 -2
  153. package/dist-cjs/lib/utils/export/export.js +0 -20
  154. package/dist-cjs/lib/utils/export/export.js.map +2 -2
  155. package/dist-cjs/lib/utils/export/exportAs.js +1 -2
  156. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  157. package/dist-esm/index.d.mts +353 -105
  158. package/dist-esm/index.mjs +85 -29
  159. package/dist-esm/index.mjs.map +2 -2
  160. package/dist-esm/lib/Tldraw.mjs +14 -4
  161. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  162. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  163. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  164. package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -4
  165. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  166. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
  167. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  168. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
  169. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
  170. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  171. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  172. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  173. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  174. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  175. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  176. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  177. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  178. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +19 -12
  179. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  180. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  181. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  182. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  183. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  184. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  185. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  186. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  187. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  188. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  189. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  190. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  191. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  192. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
  193. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  194. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -3
  195. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  196. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  197. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  198. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  199. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +0 -2
  200. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  201. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +0 -2
  202. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
  203. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  204. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  205. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  206. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  207. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  208. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  209. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  210. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  211. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  212. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  213. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  214. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  215. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  216. package/dist-esm/lib/ui/assetUrls.mjs +13 -10
  217. package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
  218. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  219. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  220. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  221. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  222. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  223. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  224. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  225. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  226. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +6 -6
  227. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
  228. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  229. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  230. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  231. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  232. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  233. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  234. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  235. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  236. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  237. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  238. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  239. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  240. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  241. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  242. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +16 -5
  243. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  244. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +251 -283
  245. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  246. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +126 -0
  247. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +7 -0
  248. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +48 -0
  249. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +7 -0
  250. package/dist-esm/lib/ui/components/StylePanel/{DoubleDropdownPicker.mjs → StylePanelDoubleDropdownPicker.mjs} +23 -22
  251. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +7 -0
  252. package/dist-esm/lib/ui/components/StylePanel/{DropdownPicker.mjs → StylePanelDropdownPicker.mjs} +44 -40
  253. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +7 -0
  254. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs +8 -0
  255. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs.map +7 -0
  256. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +3 -2
  257. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  258. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +39 -10
  259. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  260. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  261. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  262. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs +15 -3
  263. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs.map +2 -2
  264. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +3 -3
  265. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  266. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  267. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  268. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  269. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  270. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  271. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  272. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +10 -1
  273. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  274. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  275. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  276. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +17 -4
  277. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  278. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +32 -7
  279. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  280. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +246 -0
  281. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  282. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  283. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  284. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  285. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  286. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  287. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +162 -22
  288. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  289. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  290. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  291. package/dist-esm/lib/ui/context/actions.mjs +38 -10
  292. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  293. package/dist-esm/lib/ui/context/components.mjs +2 -0
  294. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  295. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  296. package/dist-esm/lib/ui/hooks/useExportAs.mjs +3 -2
  297. package/dist-esm/lib/ui/hooks/useExportAs.mjs.map +2 -2
  298. package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
  299. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  300. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +5 -0
  301. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  302. package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
  303. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  304. package/dist-esm/lib/ui/version.mjs +3 -3
  305. package/dist-esm/lib/ui/version.mjs.map +1 -1
  306. package/dist-esm/lib/utils/export/copyAs.mjs +1 -2
  307. package/dist-esm/lib/utils/export/copyAs.mjs.map +2 -2
  308. package/dist-esm/lib/utils/export/export.mjs +0 -20
  309. package/dist-esm/lib/utils/export/export.mjs.map +2 -2
  310. package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
  311. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  312. package/package.json +11 -34
  313. package/src/index.ts +64 -22
  314. package/src/lib/Tldraw.tsx +15 -2
  315. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  316. package/src/lib/defaultExternalContentHandlers.ts +12 -4
  317. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  318. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  319. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +7 -6
  320. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
  321. package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
  322. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  323. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  324. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  325. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  326. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  327. package/src/lib/shapes/frame/FrameShapeUtil.tsx +29 -14
  328. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  329. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  330. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  331. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  332. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  333. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  334. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  335. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  336. package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
  337. package/src/lib/shapes/shared/PlainTextLabel.tsx +0 -6
  338. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  339. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  340. package/src/lib/shapes/shared/useEditablePlainText.ts +0 -6
  341. package/src/lib/shapes/shared/useImageOrVideoAsset.ts +0 -7
  342. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  343. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  344. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  345. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  346. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  347. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  348. package/src/lib/tools/SelectTool/childStates/Translating.ts +0 -1
  349. package/src/lib/ui/TldrawUi.tsx +33 -12
  350. package/src/lib/ui/assetUrls.ts +13 -10
  351. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  352. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  353. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  354. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  355. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
  356. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  357. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  358. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  359. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  360. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  361. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  362. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  363. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +28 -12
  364. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +261 -343
  365. package/src/lib/ui/components/{primitives/TldrawUiButtonPicker.tsx → StylePanel/StylePanelButtonPicker.tsx} +66 -50
  366. package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +63 -0
  367. package/src/lib/ui/components/StylePanel/{DoubleDropdownPicker.tsx → StylePanelDoubleDropdownPicker.tsx} +31 -22
  368. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +119 -0
  369. package/src/lib/ui/components/StylePanel/StylePanelSubheading.tsx +9 -0
  370. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +4 -3
  371. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +33 -16
  372. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  373. package/src/lib/ui/components/Toolbar/DefaultVideoToolbarContent.tsx +12 -4
  374. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +5 -5
  375. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  376. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +14 -11
  377. package/src/lib/ui/components/menu-items.tsx +8 -0
  378. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +6 -1
  379. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  380. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +50 -30
  381. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +54 -12
  382. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +335 -0
  383. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  384. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  385. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  386. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +221 -19
  387. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  388. package/src/lib/ui/context/actions.tsx +38 -10
  389. package/src/lib/ui/context/components.tsx +3 -0
  390. package/src/lib/ui/context/events.tsx +3 -1
  391. package/src/lib/ui/hooks/useExportAs.ts +3 -2
  392. package/src/lib/ui/hooks/useTools.tsx +140 -10
  393. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +5 -0
  394. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +5 -0
  395. package/src/lib/ui/kbd-utils.ts +10 -3
  396. package/src/lib/ui/version.ts +3 -3
  397. package/src/lib/ui.css +424 -293
  398. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
  399. package/src/lib/utils/export/copyAs.ts +1 -24
  400. package/src/lib/utils/export/export.ts +0 -36
  401. package/src/lib/utils/export/exportAs.ts +1 -32
  402. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
  403. package/src/test/A11y.test.tsx +3 -2
  404. package/src/test/ClickManager.test.ts +7 -6
  405. package/src/test/Editor.test.tsx +20 -19
  406. package/src/test/EraserTool.test.ts +184 -13
  407. package/src/test/HandTool.test.ts +10 -9
  408. package/src/test/HighlightShape.test.ts +2 -1
  409. package/src/test/SelectTool.test.ts +3 -2
  410. package/src/test/TLUserPreferences.test.ts +4 -3
  411. package/src/test/TestEditor.ts +13 -15
  412. package/src/test/TldrawEditor.test.tsx +11 -10
  413. package/src/test/ZoomTool.test.ts +7 -6
  414. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  415. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  416. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  417. package/src/test/arrows-megabus.test.tsx +17 -10
  418. package/src/test/bindings.test.tsx +24 -37
  419. package/src/test/bookmark-shapes.test.ts +1 -8
  420. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  421. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  422. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  423. package/src/test/commands/alignShapes.test.tsx +25 -24
  424. package/src/test/commands/animationSpeed.test.ts +2 -1
  425. package/src/test/commands/centerOnPoint.test.ts +3 -2
  426. package/src/test/commands/clipboard.test.ts +3 -2
  427. package/src/test/commands/createShapes.test.ts +2 -1
  428. package/src/test/commands/deleteShapes.test.ts +2 -1
  429. package/src/test/commands/distributeShapes.test.tsx +11 -10
  430. package/src/test/commands/getSvgString.test.ts +2 -1
  431. package/src/test/commands/packShapes.test.ts +5 -4
  432. package/src/test/commands/resizeShape.test.ts +2 -1
  433. package/src/test/commands/rotateShapes.test.ts +7 -6
  434. package/src/test/commands/setCamera.test.ts +4 -3
  435. package/src/test/commands/setCurrentPage.test.ts +3 -2
  436. package/src/test/commands/stackShapes.test.ts +11 -10
  437. package/src/test/commands/stretch.test.tsx +13 -12
  438. package/src/test/createDeepLink.test.tsx +2 -1
  439. package/src/test/cropping.test.ts +3 -2
  440. package/src/test/custom-clipping.test.ts +436 -0
  441. package/src/test/drawing.test.ts +2 -1
  442. package/src/test/flipShapes.test.ts +4 -3
  443. package/src/test/frames.test.ts +25 -24
  444. package/src/test/getCulledShapes.test.tsx +3 -2
  445. package/src/test/groups.test.tsx +1 -1
  446. package/src/test/handleDeepLink.test.tsx +2 -1
  447. package/src/test/inner-outer-margin.test.ts +315 -0
  448. package/src/test/maxShapes.test.ts +3 -2
  449. package/src/test/modifiers.test.ts +5 -4
  450. package/src/test/navigation.test.ts +12 -11
  451. package/src/test/panning.test.ts +2 -1
  452. package/src/test/perf/perf.test.ts +2 -1
  453. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  454. package/src/test/resizing.test.ts +39 -38
  455. package/src/test/select.test.tsx +4 -3
  456. package/src/test/selection-omnibus.test.ts +11 -10
  457. package/src/test/shapeutils.test.ts +4 -3
  458. package/src/test/translating.test.ts +9 -8
  459. package/tldraw.css +725 -581
  460. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  461. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +0 -7
  462. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +0 -7
  463. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +0 -7
  464. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
  465. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +0 -7
  466. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +0 -7
  467. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +0 -115
  468. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +0 -7
  469. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +0 -109
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx"],
4
- "sourcesContent": ["import {\n\tArrowShapeArrowheadEndStyle,\n\tArrowShapeArrowheadStartStyle,\n\tArrowShapeKindStyle,\n\tDefaultColorStyle,\n\tDefaultDashStyle,\n\tDefaultFillStyle,\n\tDefaultFontStyle,\n\tDefaultHorizontalAlignStyle,\n\tDefaultSizeStyle,\n\tDefaultTextAlignStyle,\n\tDefaultVerticalAlignStyle,\n\tGeoShapeGeoStyle,\n\tLineShapeSplineStyle,\n\tReadonlySharedStyleMap,\n\tStyleProp,\n\tTLArrowShapeArrowheadStyle,\n\tTLDefaultColorTheme,\n\tgetDefaultColorTheme,\n\tkickoutOccludedShapes,\n\tminBy,\n\tuseEditor,\n\tuseIsDarkMode,\n\tuseValue,\n} from '@tldraw/editor'\nimport React, { useCallback } from 'react'\nimport { STYLES } from '../../../styles'\nimport { useUiEvents } from '../../context/events'\nimport { useRelevantStyles } from '../../hooks/useRelevantStyles'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonPicker } from '../primitives/TldrawUiButtonPicker'\nimport { TldrawUiSlider } from '../primitives/TldrawUiSlider'\nimport { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { DoubleDropdownPicker } from './DoubleDropdownPicker'\nimport { DropdownPicker } from './DropdownPicker'\n\n/** @public */\nexport interface TLUiStylePanelContentProps {\n\tstyles: ReturnType<typeof useRelevantStyles>\n}\n\n/** @public @react */\nexport function DefaultStylePanelContent({ styles }: TLUiStylePanelContentProps) {\n\tconst isDarkMode = useIsDarkMode()\n\n\tif (!styles) return null\n\n\tconst geo = styles.get(GeoShapeGeoStyle)\n\tconst arrowheadEnd = styles.get(ArrowShapeArrowheadEndStyle)\n\tconst arrowheadStart = styles.get(ArrowShapeArrowheadStartStyle)\n\tconst arrowKind = styles.get(ArrowShapeKindStyle)\n\tconst spline = styles.get(LineShapeSplineStyle)\n\tconst font = styles.get(DefaultFontStyle)\n\n\tconst hideGeo = geo === undefined\n\tconst hideArrowHeads = arrowheadEnd === undefined && arrowheadStart === undefined\n\tconst hideSpline = spline === undefined\n\tconst hideArrowKind = arrowKind === undefined\n\tconst hideText = font === undefined\n\n\tconst theme = getDefaultColorTheme({ isDarkMode: isDarkMode })\n\n\treturn (\n\t\t<>\n\t\t\t<CommonStylePickerSet theme={theme} styles={styles} />\n\t\t\t{!hideText && <TextStylePickerSet theme={theme} styles={styles} />}\n\t\t\t{!(hideGeo && hideArrowHeads && hideSpline && hideArrowKind) && (\n\t\t\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t\t\t<GeoStylePickerSet styles={styles} />\n\t\t\t\t\t<ArrowStylePickerSet styles={styles} />\n\t\t\t\t\t<ArrowheadStylePickerSet styles={styles} />\n\t\t\t\t\t<SplineStylePickerSet styles={styles} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\nfunction useStyleChangeCallback() {\n\tconst editor = useEditor()\n\tconst trackEvent = useUiEvents()\n\n\treturn React.useMemo(\n\t\t() =>\n\t\t\tfunction handleStyleChange<T>(style: StyleProp<T>, value: T) {\n\t\t\t\teditor.run(() => {\n\t\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\t\teditor.setStyleForSelectedShapes(style, value)\n\t\t\t\t\t}\n\t\t\t\t\teditor.setStyleForNextShapes(style, value)\n\t\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t\t})\n\n\t\t\t\ttrackEvent('set-style', { source: 'style-panel', id: style.id, value: value as string })\n\t\t\t},\n\t\t[editor, trackEvent]\n\t)\n}\n\n/** @public */\nexport interface ThemeStylePickerSetProps {\n\tstyles: ReadonlySharedStyleMap\n\ttheme: TLDefaultColorTheme\n}\n\n/** @public */\nexport interface StylePickerSetProps {\n\tstyles: ReadonlySharedStyleMap\n}\n\n/** @public @react */\nexport function CommonStylePickerSet({ styles, theme }: ThemeStylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst editor = useEditor()\n\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst color = styles.get(DefaultColorStyle)\n\tconst fill = styles.get(DefaultFillStyle)\n\tconst dash = styles.get(DefaultDashStyle)\n\tconst size = styles.get(DefaultSizeStyle)\n\n\tconst showPickers = fill !== undefined || dash !== undefined || size !== undefined\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"tlui-style-panel__section__common\" data-testid=\"style.panel\">\n\t\t\t\t{color === undefined ? null : (\n\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.color')}>\n\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\ttitle={msg('style-panel.color')}\n\t\t\t\t\t\t\tuiType=\"color\"\n\t\t\t\t\t\t\tstyle={DefaultColorStyle}\n\t\t\t\t\t\t\titems={STYLES.color}\n\t\t\t\t\t\t\tvalue={color}\n\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t)}\n\t\t\t\t<OpacitySlider />\n\t\t\t</div>\n\t\t\t{showPickers && (\n\t\t\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t\t\t{fill === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.fill')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.fill')}\n\t\t\t\t\t\t\t\tuiType=\"fill\"\n\t\t\t\t\t\t\t\tstyle={DefaultFillStyle}\n\t\t\t\t\t\t\t\titems={STYLES.fill}\n\t\t\t\t\t\t\t\tvalue={fill}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t\t{dash === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.dash')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.dash')}\n\t\t\t\t\t\t\t\tuiType=\"dash\"\n\t\t\t\t\t\t\t\tstyle={DefaultDashStyle}\n\t\t\t\t\t\t\t\titems={STYLES.dash}\n\t\t\t\t\t\t\t\tvalue={dash}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t\t{size === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.size')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.size')}\n\t\t\t\t\t\t\t\tuiType=\"size\"\n\t\t\t\t\t\t\t\tstyle={DefaultSizeStyle}\n\t\t\t\t\t\t\t\titems={STYLES.size}\n\t\t\t\t\t\t\t\tvalue={size}\n\t\t\t\t\t\t\t\tonValueChange={(style, value) => {\n\t\t\t\t\t\t\t\t\thandleValueChange(style, value)\n\t\t\t\t\t\t\t\t\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\t\t\t\t\t\t\t\t\tif (selectedShapeIds.length > 0) {\n\t\t\t\t\t\t\t\t\t\tkickoutOccludedShapes(editor, selectedShapeIds)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\n/** @public @react */\nexport function TextStylePickerSet({ theme, styles }: ThemeStylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst editor = useEditor()\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst font = styles.get(DefaultFontStyle)\n\tconst textAlign = styles.get(DefaultTextAlignStyle)\n\tconst labelAlign = styles.get(DefaultHorizontalAlignStyle)\n\tconst verticalLabelAlign = styles.get(DefaultVerticalAlignStyle)\n\tif (font === undefined && labelAlign === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t{font === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.font')}>\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.font')}\n\t\t\t\t\t\tuiType=\"font\"\n\t\t\t\t\t\tstyle={DefaultFontStyle}\n\t\t\t\t\t\titems={STYLES.font}\n\t\t\t\t\t\tvalue={font}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\n\t\t\t{textAlign === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.align')} className=\"tlui-style-panel__row\">\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.align')}\n\t\t\t\t\t\tuiType=\"align\"\n\t\t\t\t\t\tstyle={DefaultTextAlignStyle}\n\t\t\t\t\t\titems={STYLES.textAlign}\n\t\t\t\t\t\tvalue={textAlign}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"tlui-style-panel__row__extra-button\">\n\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t</div>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\n\t\t\t{labelAlign === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.label-align')} className=\"tlui-style-panel__row\">\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.label-align')}\n\t\t\t\t\t\tuiType=\"align\"\n\t\t\t\t\t\tstyle={DefaultHorizontalAlignStyle}\n\t\t\t\t\t\titems={STYLES.horizontalAlign}\n\t\t\t\t\t\tvalue={labelAlign}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"tlui-style-panel__row__extra-button\">\n\t\t\t\t\t\t{verticalLabelAlign === undefined ? (\n\t\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\t\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DropdownPicker\n\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\tid=\"geo-vertical-alignment\"\n\t\t\t\t\t\t\t\tuiType=\"verticalAlign\"\n\t\t\t\t\t\t\t\tstylePanelType=\"vertical-align\"\n\t\t\t\t\t\t\t\tstyle={DefaultVerticalAlignStyle}\n\t\t\t\t\t\t\t\titems={STYLES.verticalAlign}\n\t\t\t\t\t\t\t\tvalue={verticalLabelAlign}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n/** @public @react */\nexport function GeoStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst geo = styles.get(GeoShapeGeoStyle)\n\tif (geo === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.geo')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"geo\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.geo'}\n\t\t\t\tuiType=\"geo\"\n\t\t\t\tstylePanelType=\"geo\"\n\t\t\t\tstyle={GeoShapeGeoStyle}\n\t\t\t\titems={STYLES.geo}\n\t\t\t\tvalue={geo}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function SplineStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst spline = styles.get(LineShapeSplineStyle)\n\tif (spline === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.spline')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"spline\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.spline'}\n\t\t\t\tuiType=\"spline\"\n\t\t\t\tstylePanelType=\"spline\"\n\t\t\t\tstyle={LineShapeSplineStyle}\n\t\t\t\titems={STYLES.spline}\n\t\t\t\tvalue={spline}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function ArrowStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst arrowKind = styles.get(ArrowShapeKindStyle)\n\tif (arrowKind === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.arrow-kind')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"arrow-kind\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.arrow-kind'}\n\t\t\t\tuiType=\"arrow-kind\"\n\t\t\t\tstylePanelType=\"arrow-kind\"\n\t\t\t\tstyle={ArrowShapeKindStyle}\n\t\t\t\titems={STYLES.arrowKind}\n\t\t\t\tvalue={arrowKind}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function ArrowheadStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst arrowheadEnd = styles.get(ArrowShapeArrowheadEndStyle)\n\tconst arrowheadStart = styles.get(ArrowShapeArrowheadStartStyle)\n\tif (!arrowheadEnd || !arrowheadStart) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<DoubleDropdownPicker<TLArrowShapeArrowheadStyle>\n\t\t\tlabel={'style-panel.arrowheads'}\n\t\t\tuiTypeA=\"arrowheadStart\"\n\t\t\tstyleA={ArrowShapeArrowheadStartStyle}\n\t\t\titemsA={STYLES.arrowheadStart}\n\t\t\tvalueA={arrowheadStart}\n\t\t\tuiTypeB=\"arrowheadEnd\"\n\t\t\tstyleB={ArrowShapeArrowheadEndStyle}\n\t\t\titemsB={STYLES.arrowheadEnd}\n\t\t\tvalueB={arrowheadEnd}\n\t\t\tonValueChange={handleValueChange}\n\t\t\tlabelA=\"style-panel.arrowhead-start\"\n\t\t\tlabelB=\"style-panel.arrowhead-end\"\n\t\t/>\n\t)\n}\n\nconst tldrawSupportedOpacities = [0.1, 0.25, 0.5, 0.75, 1] as const\n/** @public @react */\nexport function OpacitySlider() {\n\tconst editor = useEditor()\n\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst opacity = useValue('opacity', () => editor.getSharedOpacity(), [editor])\n\tconst trackEvent = useUiEvents()\n\tconst msg = useTranslation()\n\n\tconst handleOpacityValueChange = React.useCallback(\n\t\t(value: number) => {\n\t\t\tconst item = tldrawSupportedOpacities[value]\n\t\t\teditor.run(() => {\n\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\teditor.setOpacityForSelectedShapes(item)\n\t\t\t\t}\n\t\t\t\teditor.setOpacityForNextShapes(item)\n\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t})\n\n\t\t\ttrackEvent('set-style', { source: 'style-panel', id: 'opacity', value })\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tif (opacity === undefined) return null\n\n\tconst opacityIndex =\n\t\topacity.type === 'mixed'\n\t\t\t? -1\n\t\t\t: tldrawSupportedOpacities.indexOf(\n\t\t\t\t\tminBy(tldrawSupportedOpacities, (supportedOpacity) =>\n\t\t\t\t\t\tMath.abs(supportedOpacity - opacity.value)\n\t\t\t\t\t)!\n\t\t\t\t)\n\n\treturn (\n\t\t<TldrawUiSlider\n\t\t\tdata-testid=\"style.opacity\"\n\t\t\tvalue={opacityIndex >= 0 ? opacityIndex : tldrawSupportedOpacities.length - 1}\n\t\t\tlabel={opacity.type === 'mixed' ? 'style-panel.mixed' : `opacity-style.${opacity.value}`}\n\t\t\tonValueChange={handleOpacityValueChange}\n\t\t\tsteps={tldrawSupportedOpacities.length - 1}\n\t\t\ttitle={msg('style-panel.opacity')}\n\t\t\tonHistoryMark={onHistoryMark}\n\t\t\tariaValueModifier={25}\n\t\t/>\n\t)\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tArrowShapeArrowheadEndStyle,\n\tArrowShapeArrowheadStartStyle,\n\tArrowShapeKindStyle,\n\tDefaultColorStyle,\n\tDefaultDashStyle,\n\tDefaultFillStyle,\n\tDefaultFontStyle,\n\tDefaultHorizontalAlignStyle,\n\tDefaultSizeStyle,\n\tDefaultTextAlignStyle,\n\tDefaultVerticalAlignStyle,\n\tGeoShapeGeoStyle,\n\tLineShapeSplineStyle,\n\tTLArrowShapeArrowheadStyle,\n\tkickoutOccludedShapes,\n\tminBy,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport React from 'react'\nimport { STYLES } from '../../../styles'\nimport { useUiEvents } from '../../context/events'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport { TldrawUiSlider } from '../primitives/TldrawUiSlider'\nimport { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { StylePanelButtonPicker } from './StylePanelButtonPicker'\nimport { useStylePanelContext } from './StylePanelContext'\nimport { StylePanelDoubleDropdownPicker } from './StylePanelDoubleDropdownPicker'\nimport { StylePanelDropdownPicker } from './StylePanelDropdownPicker'\nimport { StylePanelSubheading } from './StylePanelSubheading'\n\n/** @public @react */\nexport function DefaultStylePanelContent() {\n\treturn (\n\t\t<>\n\t\t\t<StylePanelSection>\n\t\t\t\t<StylePanelColorPicker />\n\t\t\t\t<StylePanelOpacityPicker />\n\t\t\t</StylePanelSection>\n\t\t\t<StylePanelSection>\n\t\t\t\t<StylePanelFillPicker />\n\t\t\t\t<StylePanelDashPicker />\n\t\t\t\t<StylePanelSizePicker />\n\t\t\t</StylePanelSection>\n\t\t\t<StylePanelSection>\n\t\t\t\t<StylePanelFontPicker />\n\t\t\t\t<StylePanelTextAlignPicker />\n\t\t\t\t<StylePanelLabelAlignPicker />\n\t\t\t</StylePanelSection>\n\t\t\t<StylePanelSection>\n\t\t\t\t<StylePanelGeoShapePicker />\n\t\t\t\t<StylePanelArrowKindPicker />\n\t\t\t\t<StylePanelArrowheadPicker />\n\t\t\t\t<StylePanelSplinePicker />\n\t\t\t</StylePanelSection>\n\t\t</>\n\t)\n}\n\n/** @public */\nexport interface StylePanelSectionProps {\n\tchildren: React.ReactNode\n}\n\n/** @public @react */\nexport function StylePanelSection({ children }: StylePanelSectionProps) {\n\treturn <div className=\"tlui-style-panel__section\">{children}</div>\n}\n\n/** @public @react */\nexport function StylePanelColorPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst msg = useTranslation()\n\tconst color = styles.get(DefaultColorStyle)\n\tif (color === undefined) return null\n\n\treturn (\n\t\t<StylePanelButtonPicker\n\t\t\ttitle={msg('style-panel.color')}\n\t\t\tuiType=\"color\"\n\t\t\tstyle={DefaultColorStyle}\n\t\t\titems={STYLES.color}\n\t\t\tvalue={color}\n\t\t/>\n\t)\n}\n\nconst tldrawSupportedOpacities = [0.1, 0.25, 0.5, 0.75, 1] as const\n/** @public @react */\nexport function StylePanelOpacityPicker() {\n\tconst editor = useEditor()\n\tconst { onHistoryMark, showUiLabels } = useStylePanelContext()\n\n\tconst opacity = useValue('opacity', () => editor.getSharedOpacity(), [editor])\n\tconst trackEvent = useUiEvents()\n\tconst msg = useTranslation()\n\n\tconst handleOpacityValueChange = React.useCallback(\n\t\t(value: number) => {\n\t\t\tconst item = tldrawSupportedOpacities[value]\n\t\t\teditor.run(() => {\n\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\teditor.setOpacityForSelectedShapes(item)\n\t\t\t\t}\n\t\t\t\teditor.setOpacityForNextShapes(item)\n\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t})\n\n\t\t\ttrackEvent('set-style', { source: 'style-panel', id: 'opacity', value })\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tif (opacity === undefined) return null\n\n\tconst opacityIndex =\n\t\topacity.type === 'mixed'\n\t\t\t? -1\n\t\t\t: tldrawSupportedOpacities.indexOf(\n\t\t\t\t\tminBy(tldrawSupportedOpacities, (supportedOpacity) =>\n\t\t\t\t\t\tMath.abs(supportedOpacity - opacity.value)\n\t\t\t\t\t)!\n\t\t\t\t)\n\n\treturn (\n\t\t<>\n\t\t\t{showUiLabels && <StylePanelSubheading>{msg('style-panel.opacity')}</StylePanelSubheading>}\n\t\t\t<TldrawUiSlider\n\t\t\t\tdata-testid=\"style.opacity\"\n\t\t\t\tvalue={opacityIndex >= 0 ? opacityIndex : tldrawSupportedOpacities.length - 1}\n\t\t\t\tlabel={opacity.type === 'mixed' ? 'style-panel.mixed' : `opacity-style.${opacity.value}`}\n\t\t\t\tonValueChange={handleOpacityValueChange}\n\t\t\t\tsteps={tldrawSupportedOpacities.length - 1}\n\t\t\t\ttitle={msg('style-panel.opacity')}\n\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\tariaValueModifier={25}\n\t\t\t/>\n\t\t</>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelFillPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst msg = useTranslation()\n\tconst fill = styles.get(DefaultFillStyle)\n\tif (fill === undefined) return null\n\n\treturn (\n\t\t<StylePanelButtonPicker\n\t\t\ttitle={msg('style-panel.fill')}\n\t\t\tuiType=\"fill\"\n\t\t\tstyle={DefaultFillStyle}\n\t\t\titems={STYLES.fill}\n\t\t\tvalue={fill}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelDashPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst msg = useTranslation()\n\tconst dash = styles.get(DefaultDashStyle)\n\tif (dash === undefined) return null\n\n\treturn (\n\t\t<StylePanelButtonPicker\n\t\t\ttitle={msg('style-panel.dash')}\n\t\t\tuiType=\"dash\"\n\t\t\tstyle={DefaultDashStyle}\n\t\t\titems={STYLES.dash}\n\t\t\tvalue={dash}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelSizePicker() {\n\tconst editor = useEditor()\n\tconst { styles, onValueChange } = useStylePanelContext()\n\tconst msg = useTranslation()\n\tconst size = styles.get(DefaultSizeStyle)\n\tif (size === undefined) return null\n\n\treturn (\n\t\t<StylePanelButtonPicker\n\t\t\ttitle={msg('style-panel.size')}\n\t\t\tuiType=\"size\"\n\t\t\tstyle={DefaultSizeStyle}\n\t\t\titems={STYLES.size}\n\t\t\tvalue={size}\n\t\t\tonValueChange={(style, value) => {\n\t\t\t\tonValueChange(style, value)\n\t\t\t\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\t\t\t\tif (selectedShapeIds.length > 0) {\n\t\t\t\t\tkickoutOccludedShapes(editor, selectedShapeIds)\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelFontPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst msg = useTranslation()\n\tconst font = styles.get(DefaultFontStyle)\n\tif (font === undefined) return null\n\n\treturn (\n\t\t<StylePanelButtonPicker\n\t\t\ttitle={msg('style-panel.font')}\n\t\t\tuiType=\"font\"\n\t\t\tstyle={DefaultFontStyle}\n\t\t\titems={STYLES.font}\n\t\t\tvalue={font}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelTextAlignPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst msg = useTranslation()\n\tconst textAlign = styles.get(DefaultTextAlignStyle)\n\tif (textAlign === undefined) return null\n\n\treturn (\n\t\t<TldrawUiToolbar orientation=\"horizontal\" label={msg('style-panel.align')}>\n\t\t\t<StylePanelButtonPicker\n\t\t\t\ttitle={msg('style-panel.align')}\n\t\t\t\tuiType=\"align\"\n\t\t\t\tstyle={DefaultTextAlignStyle}\n\t\t\t\titems={STYLES.textAlign}\n\t\t\t\tvalue={textAlign}\n\t\t\t/>\n\t\t\t<TldrawUiToolbarButton\n\t\t\t\ttype=\"icon\"\n\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\tdisabled\n\t\t\t>\n\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t</TldrawUiToolbarButton>\n\t\t</TldrawUiToolbar>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelLabelAlignPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst msg = useTranslation()\n\tconst labelAlign = styles.get(DefaultHorizontalAlignStyle)\n\tconst verticalLabelAlign = styles.get(DefaultVerticalAlignStyle)\n\tif (labelAlign === undefined) return null\n\n\treturn (\n\t\t<TldrawUiToolbar orientation=\"horizontal\" label={msg('style-panel.label-align')}>\n\t\t\t<StylePanelButtonPicker\n\t\t\t\ttitle={msg('style-panel.label-align')}\n\t\t\t\tuiType=\"align\"\n\t\t\t\tstyle={DefaultHorizontalAlignStyle}\n\t\t\t\titems={STYLES.horizontalAlign}\n\t\t\t\tvalue={labelAlign}\n\t\t\t/>\n\t\t\t{verticalLabelAlign === undefined ? (\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\t\tdisabled\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t) : (\n\t\t\t\t<StylePanelDropdownPicker\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\tid=\"geo-vertical-alignment\"\n\t\t\t\t\tuiType=\"verticalAlign\"\n\t\t\t\t\tstylePanelType=\"vertical-align\"\n\t\t\t\t\tstyle={DefaultVerticalAlignStyle}\n\t\t\t\t\titems={STYLES.verticalAlign}\n\t\t\t\t\tvalue={verticalLabelAlign}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</TldrawUiToolbar>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelGeoShapePicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst geo = styles.get(GeoShapeGeoStyle)\n\tif (geo === undefined) return null\n\n\treturn (\n\t\t<StylePanelDropdownPicker\n\t\t\tlabel=\"style-panel.geo\"\n\t\t\ttype=\"menu\"\n\t\t\tid=\"geo\"\n\t\t\tuiType=\"geo\"\n\t\t\tstylePanelType=\"geo\"\n\t\t\tstyle={GeoShapeGeoStyle}\n\t\t\titems={STYLES.geo}\n\t\t\tvalue={geo}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelArrowKindPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst arrowKind = styles.get(ArrowShapeKindStyle)\n\tif (arrowKind === undefined) return null\n\n\treturn (\n\t\t<StylePanelDropdownPicker\n\t\t\tid=\"arrow-kind\"\n\t\t\ttype=\"menu\"\n\t\t\tlabel={'style-panel.arrow-kind'}\n\t\t\tuiType=\"arrow-kind\"\n\t\t\tstylePanelType=\"arrow-kind\"\n\t\t\tstyle={ArrowShapeKindStyle}\n\t\t\titems={STYLES.arrowKind}\n\t\t\tvalue={arrowKind}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelArrowheadPicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst arrowheadEnd = styles.get(ArrowShapeArrowheadEndStyle)\n\tconst arrowheadStart = styles.get(ArrowShapeArrowheadStartStyle)\n\tif (arrowheadEnd === undefined || arrowheadStart === undefined) return null\n\n\treturn (\n\t\t<StylePanelDoubleDropdownPicker<TLArrowShapeArrowheadStyle>\n\t\t\tlabel={'style-panel.arrowheads'}\n\t\t\tuiTypeA=\"arrowheadStart\"\n\t\t\tstyleA={ArrowShapeArrowheadStartStyle}\n\t\t\titemsA={STYLES.arrowheadStart}\n\t\t\tvalueA={arrowheadStart}\n\t\t\tuiTypeB=\"arrowheadEnd\"\n\t\t\tstyleB={ArrowShapeArrowheadEndStyle}\n\t\t\titemsB={STYLES.arrowheadEnd}\n\t\t\tvalueB={arrowheadEnd}\n\t\t\tlabelA=\"style-panel.arrowhead-start\"\n\t\t\tlabelB=\"style-panel.arrowhead-end\"\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function StylePanelSplinePicker() {\n\tconst { styles } = useStylePanelContext()\n\tconst spline = styles.get(LineShapeSplineStyle)\n\tif (spline === undefined) return null\n\n\treturn (\n\t\t<StylePanelDropdownPicker\n\t\t\ttype=\"menu\"\n\t\t\tid=\"spline\"\n\t\t\tuiType=\"spline\"\n\t\t\tstylePanelType=\"spline\"\n\t\t\tlabel=\"style-panel.spline\"\n\t\t\tstyle={LineShapeSplineStyle}\n\t\t\titems={STYLES.spline}\n\t\t\tvalue={spline}\n\t\t/>\n\t)\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["React"]
7
7
  }
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,41 +15,36 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var TldrawUiButtonPicker_exports = {};
30
- __export(TldrawUiButtonPicker_exports, {
31
- TldrawUiButtonPicker: () => TldrawUiButtonPicker
19
+ var StylePanelButtonPicker_exports = {};
20
+ __export(StylePanelButtonPicker_exports, {
21
+ StylePanelButtonPicker: () => StylePanelButtonPicker
32
22
  });
33
- module.exports = __toCommonJS(TldrawUiButtonPicker_exports);
23
+ module.exports = __toCommonJS(StylePanelButtonPicker_exports);
34
24
  var import_jsx_runtime = require("react/jsx-runtime");
35
25
  var import_editor = require("@tldraw/editor");
36
- var import_classnames = __toESM(require("classnames"));
37
26
  var import_react = require("react");
27
+ var import_useDefaultColorTheme = require("../../../shapes/shared/useDefaultColorTheme");
38
28
  var import_constants = require("../../constants");
39
29
  var import_breakpoints = require("../../context/breakpoints");
40
30
  var import_useTranslation = require("../../hooks/useTranslation/useTranslation");
41
- var import_TldrawUiButtonIcon = require("./Button/TldrawUiButtonIcon");
42
- var import_TldrawUiToolbar = require("./TldrawUiToolbar");
43
- const TldrawUiButtonPicker = (0, import_react.memo)(function TldrawUiButtonPicker2(props) {
31
+ var import_TldrawUiButtonIcon = require("../primitives/Button/TldrawUiButtonIcon");
32
+ var import_TldrawUiToolbar = require("../primitives/TldrawUiToolbar");
33
+ var import_layout = require("../primitives/layout");
34
+ var import_StylePanelContext = require("./StylePanelContext");
35
+ var import_StylePanelSubheading = require("./StylePanelSubheading");
36
+ const StylePanelButtonPicker = (0, import_react.memo)(function StylePanelButtonPicker2(props) {
37
+ const ctx = (0, import_StylePanelContext.useStylePanelContext)();
44
38
  const {
45
39
  uiType,
46
40
  items,
47
41
  title,
48
42
  style,
49
43
  value,
50
- // columns = clamp(items.length, 2, 4),
51
- onValueChange,
52
- onHistoryMark,
53
- theme
44
+ onValueChange = ctx.onValueChange,
45
+ onHistoryMark = ctx.onHistoryMark
54
46
  } = props;
47
+ const theme = (0, import_useDefaultColorTheme.useDefaultColorTheme)();
55
48
  const editor = (0, import_editor.useEditor)();
56
49
  const msg = (0, import_useTranslation.useTranslation)();
57
50
  const breakpoint = (0, import_breakpoints.useBreakpoint)();
@@ -105,38 +98,41 @@ const TldrawUiButtonPicker = (0, import_react.memo)(function TldrawUiButtonPicke
105
98
  handleButtonPointerUp: handleButtonPointerUp2
106
99
  };
107
100
  }, [editor, breakpoint, value, onHistoryMark, onValueChange, style]);
108
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
109
- import_TldrawUiToolbar.TldrawUiToolbarToggleGroup,
110
- {
111
- "data-testid": `style.${uiType}`,
112
- type: "single",
113
- className: (0, import_classnames.default)("tlui-buttons__grid"),
114
- value: value.type === "shared" ? value.value : void 0,
115
- children: items.map((item) => {
116
- const label = title + " \u2014 " + msg(`${uiType}-style.${item.value}`);
117
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
118
- import_TldrawUiToolbar.TldrawUiToolbarToggleItem,
119
- {
120
- type: "icon",
121
- "data-id": item.value,
122
- "data-testid": `style.${uiType}.${item.value}`,
123
- "aria-label": label,
124
- value: item.value,
125
- "data-state": value.type === "shared" && value.value === item.value ? "on" : "off",
126
- "data-isactive": value.type === "shared" && value.value === item.value,
127
- title: label,
128
- className: (0, import_classnames.default)("tlui-button-grid__button"),
129
- style: style === import_editor.DefaultColorStyle ? { color: theme[item.value].solid } : void 0,
130
- onPointerEnter: handleButtonPointerEnter,
131
- onPointerDown: handleButtonPointerDown,
132
- onPointerUp: handleButtonPointerUp,
133
- onClick: handleButtonClick,
134
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon: item.icon })
135
- },
136
- item.value
137
- );
138
- })
139
- }
140
- );
101
+ const Layout = items.length > 4 ? import_layout.TldrawUiGrid : import_layout.TldrawUiRow;
102
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
103
+ ctx.showUiLabels && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_StylePanelSubheading.StylePanelSubheading, { children: title }),
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiToolbar.TldrawUiToolbar, { label: title, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
105
+ import_TldrawUiToolbar.TldrawUiToolbarToggleGroup,
106
+ {
107
+ "data-testid": `style.${uiType}`,
108
+ type: "single",
109
+ value: value.type === "shared" ? value.value : void 0,
110
+ asChild: true,
111
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Layout, { children: items.map((item) => {
112
+ const label = title + " \u2014 " + msg(`${uiType}-style.${item.value}`);
113
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
114
+ import_TldrawUiToolbar.TldrawUiToolbarToggleItem,
115
+ {
116
+ type: "icon",
117
+ "data-id": item.value,
118
+ "data-testid": `style.${uiType}.${item.value}`,
119
+ "aria-label": label,
120
+ value: item.value,
121
+ "data-state": value.type === "shared" && value.value === item.value ? "on" : "off",
122
+ "data-isactive": value.type === "shared" && value.value === item.value,
123
+ title: label,
124
+ style: style === import_editor.DefaultColorStyle ? { color: (0, import_editor.getColorValue)(theme, item.value, "solid") } : void 0,
125
+ onPointerEnter: handleButtonPointerEnter,
126
+ onPointerDown: handleButtonPointerDown,
127
+ onPointerUp: handleButtonPointerUp,
128
+ onClick: handleButtonClick,
129
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon: item.icon })
130
+ },
131
+ item.value
132
+ );
133
+ }) })
134
+ }
135
+ ) })
136
+ ] });
141
137
  });
142
- //# sourceMappingURL=TldrawUiButtonPicker.js.map
138
+ //# sourceMappingURL=StylePanelButtonPicker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/lib/ui/components/StylePanel/StylePanelButtonPicker.tsx"],
4
+ "sourcesContent": ["import {\n\tDefaultColorStyle,\n\tgetColorValue,\n\tSharedStyle,\n\tStyleProp,\n\tTLDefaultColorStyle,\n\tuseEditor,\n} from '@tldraw/editor'\nimport { memo, ReactElement, useMemo, useRef } from 'react'\nimport { useDefaultColorTheme } from '../../../shapes/shared/useDefaultColorTheme'\nimport { StyleValuesForUi } from '../../../styles'\nimport { PORTRAIT_BREAKPOINT } from '../../constants'\nimport { useBreakpoint } from '../../context/breakpoints'\nimport { TLUiTranslationKey } from '../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport {\n\tTldrawUiToolbar,\n\tTldrawUiToolbarToggleGroup,\n\tTldrawUiToolbarToggleItem,\n} from '../primitives/TldrawUiToolbar'\nimport { TldrawUiGrid, TldrawUiRow } from '../primitives/layout'\nimport { useStylePanelContext } from './StylePanelContext'\nimport { StylePanelSubheading } from './StylePanelSubheading'\n\n/** @public */\nexport interface StylePanelButtonPickerProps<T extends string> {\n\ttitle: string\n\tuiType: string\n\tstyle: StyleProp<T>\n\tvalue: SharedStyle<T>\n\titems: StyleValuesForUi<T>\n\tonValueChange?(style: StyleProp<T>, value: T): void\n\tonHistoryMark?(id: string): void\n}\n\n/** @public */\nexport const StylePanelButtonPicker = memo(function StylePanelButtonPicker<T extends string>(\n\tprops: StylePanelButtonPickerProps<T>\n) {\n\tconst ctx = useStylePanelContext()\n\n\tconst {\n\t\tuiType,\n\t\titems,\n\t\ttitle,\n\t\tstyle,\n\t\tvalue,\n\t\tonValueChange = ctx.onValueChange,\n\t\tonHistoryMark = ctx.onHistoryMark,\n\t} = props\n\tconst theme = useDefaultColorTheme()\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst breakpoint = useBreakpoint()\n\n\tconst rPointing = useRef(false)\n\tconst rPointingOriginalActiveElement = useRef<HTMLElement | null>(null)\n\n\tconst {\n\t\thandleButtonClick,\n\t\thandleButtonPointerDown,\n\t\thandleButtonPointerEnter,\n\t\thandleButtonPointerUp,\n\t} = useMemo(() => {\n\t\tconst handlePointerUp = () => {\n\t\t\trPointing.current = false\n\t\t\twindow.removeEventListener('pointerup', handlePointerUp)\n\n\t\t\t// This is fun little micro-optimization to make sure that the focus\n\t\t\t// is retained on a text label. That way, you can continue typing\n\t\t\t// after selecting a style.\n\t\t\tconst origActiveEl = rPointingOriginalActiveElement.current\n\t\t\tif (\n\t\t\t\torigActiveEl &&\n\t\t\t\t(['TEXTAREA', 'INPUT'].includes(origActiveEl.nodeName) || origActiveEl.isContentEditable)\n\t\t\t) {\n\t\t\t\torigActiveEl.focus()\n\t\t\t} else if (breakpoint >= PORTRAIT_BREAKPOINT.TABLET_SM) {\n\t\t\t\teditor.getContainer().focus()\n\t\t\t}\n\t\t\trPointingOriginalActiveElement.current = null\n\t\t}\n\n\t\tconst handleButtonClick = (e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\tconst { id } = e.currentTarget.dataset\n\t\t\tif (value.type === 'shared' && value.value === id) return\n\n\t\t\tonHistoryMark?.('point picker item')\n\t\t\tonValueChange(style, id as T)\n\t\t}\n\n\t\tconst handleButtonPointerDown = (e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\tconst { id } = e.currentTarget.dataset\n\n\t\t\tonHistoryMark?.('point picker item')\n\t\t\tonValueChange(style, id as T)\n\n\t\t\trPointing.current = true\n\t\t\trPointingOriginalActiveElement.current = document.activeElement as HTMLElement\n\t\t\twindow.addEventListener('pointerup', handlePointerUp) // see TLD-658\n\t\t}\n\n\t\tconst handleButtonPointerEnter = (e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\tif (!rPointing.current) return\n\n\t\t\tconst { id } = e.currentTarget.dataset\n\t\t\tonValueChange(style, id as T)\n\t\t}\n\n\t\tconst handleButtonPointerUp = (e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\tconst { id } = e.currentTarget.dataset\n\t\t\tif (value.type === 'shared' && value.value === id) return\n\n\t\t\tonValueChange(style, id as T)\n\t\t}\n\n\t\treturn {\n\t\t\thandleButtonClick,\n\t\t\thandleButtonPointerDown,\n\t\t\thandleButtonPointerEnter,\n\t\t\thandleButtonPointerUp,\n\t\t}\n\t}, [editor, breakpoint, value, onHistoryMark, onValueChange, style])\n\n\tconst Layout = items.length > 4 ? TldrawUiGrid : TldrawUiRow\n\n\treturn (\n\t\t<>\n\t\t\t{ctx.showUiLabels && <StylePanelSubheading>{title}</StylePanelSubheading>}\n\t\t\t<TldrawUiToolbar label={title}>\n\t\t\t\t<TldrawUiToolbarToggleGroup\n\t\t\t\t\tdata-testid={`style.${uiType}`}\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvalue={value.type === 'shared' ? value.value : undefined}\n\t\t\t\t\tasChild\n\t\t\t\t>\n\t\t\t\t\t<Layout>\n\t\t\t\t\t\t{items.map((item) => {\n\t\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\t\ttitle + ' \u2014 ' + msg(`${uiType}-style.${item.value}` as TLUiTranslationKey)\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<TldrawUiToolbarToggleItem\n\t\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\tdata-id={item.value}\n\t\t\t\t\t\t\t\t\tdata-testid={`style.${uiType}.${item.value}`}\n\t\t\t\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\t\t\t\tvalue={item.value}\n\t\t\t\t\t\t\t\t\tdata-state={value.type === 'shared' && value.value === item.value ? 'on' : 'off'}\n\t\t\t\t\t\t\t\t\tdata-isactive={value.type === 'shared' && value.value === item.value}\n\t\t\t\t\t\t\t\t\ttitle={label}\n\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\tstyle === (DefaultColorStyle as StyleProp<unknown>)\n\t\t\t\t\t\t\t\t\t\t\t? { color: getColorValue(theme, item.value as TLDefaultColorStyle, 'solid') }\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonPointerEnter={handleButtonPointerEnter}\n\t\t\t\t\t\t\t\t\tonPointerDown={handleButtonPointerDown}\n\t\t\t\t\t\t\t\t\tonPointerUp={handleButtonPointerUp}\n\t\t\t\t\t\t\t\t\tonClick={handleButtonClick}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<TldrawUiButtonIcon icon={item.icon} />\n\t\t\t\t\t\t\t\t</TldrawUiToolbarToggleItem>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t</Layout>\n\t\t\t\t</TldrawUiToolbarToggleGroup>\n\t\t\t</TldrawUiToolbar>\n\t\t</>\n\t)\n}) as <T extends string>(props: StylePanelButtonPickerProps<T>) => ReactElement\n"],
5
+ "mappings": "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",
6
+ "names": ["StylePanelButtonPicker", "handleButtonClick", "handleButtonPointerDown", "handleButtonPointerEnter", "handleButtonPointerUp"]
7
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var StylePanelContext_exports = {};
20
+ __export(StylePanelContext_exports, {
21
+ StylePanelContextProvider: () => StylePanelContextProvider,
22
+ useStylePanelContext: () => useStylePanelContext
23
+ });
24
+ module.exports = __toCommonJS(StylePanelContext_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_editor = require("@tldraw/editor");
27
+ var import_react = require("react");
28
+ var import_events = require("../../context/events");
29
+ const StylePanelContext = (0, import_react.createContext)(null);
30
+ function StylePanelContextProvider({ children, styles }) {
31
+ const editor = (0, import_editor.useEditor)();
32
+ const trackEvent = (0, import_events.useUiEvents)();
33
+ const onHistoryMark = (0, import_react.useCallback)((id) => editor.markHistoryStoppingPoint(id), [editor]);
34
+ const showUiLabels = (0, import_editor.useValue)("showUiLabels", () => editor.user.getShowUiLabels(), [editor]);
35
+ const onValueChange = (0, import_react.useCallback)(
36
+ function(style, value) {
37
+ editor.run(() => {
38
+ if (editor.isIn("select")) {
39
+ editor.setStyleForSelectedShapes(style, value);
40
+ }
41
+ editor.setStyleForNextShapes(style, value);
42
+ editor.updateInstanceState({ isChangingStyle: true });
43
+ });
44
+ trackEvent("set-style", { source: "style-panel", id: style.id, value });
45
+ },
46
+ [editor, trackEvent]
47
+ );
48
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
49
+ StylePanelContext.Provider,
50
+ {
51
+ value: {
52
+ styles,
53
+ showUiLabels,
54
+ onHistoryMark,
55
+ onValueChange
56
+ },
57
+ children
58
+ }
59
+ );
60
+ }
61
+ function useStylePanelContext() {
62
+ const context = (0, import_react.useContext)(StylePanelContext);
63
+ if (!context) {
64
+ throw new Error("useStylePanelContext must be used within a StylePanelContextProvider");
65
+ }
66
+ return context;
67
+ }
68
+ //# sourceMappingURL=StylePanelContext.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/lib/ui/components/StylePanel/StylePanelContext.tsx"],
4
+ "sourcesContent": ["import { ReadonlySharedStyleMap, StyleProp, useEditor, useValue } from '@tldraw/editor'\nimport { createContext, useCallback, useContext } from 'react'\nimport { useUiEvents } from '../../context/events'\n\n/** @public */\nexport interface StylePanelContext {\n\tstyles: ReadonlySharedStyleMap\n\tshowUiLabels: boolean\n\tonHistoryMark(id: string): void\n\tonValueChange<T>(style: StyleProp<T>, value: T): void\n}\nconst StylePanelContext = createContext<null | StylePanelContext>(null)\n\n/** @public */\nexport interface StylePanelContextProviderProps {\n\tchildren: React.ReactNode\n\tstyles: ReadonlySharedStyleMap\n}\n\n/** @public @react */\nexport function StylePanelContextProvider({ children, styles }: StylePanelContextProviderProps) {\n\tconst editor = useEditor()\n\tconst trackEvent = useUiEvents()\n\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\tconst showUiLabels = useValue('showUiLabels', () => editor.user.getShowUiLabels(), [editor])\n\tconst onValueChange = useCallback(\n\t\tfunction <T>(style: StyleProp<T>, value: T) {\n\t\t\teditor.run(() => {\n\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\teditor.setStyleForSelectedShapes(style, value)\n\t\t\t\t}\n\t\t\t\teditor.setStyleForNextShapes(style, value)\n\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t})\n\n\t\t\ttrackEvent('set-style', { source: 'style-panel', id: style.id, value: value as string })\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\treturn (\n\t\t<StylePanelContext.Provider\n\t\t\tvalue={{\n\t\t\t\tstyles: styles,\n\t\t\t\tshowUiLabels,\n\t\t\t\tonHistoryMark,\n\t\t\t\tonValueChange,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</StylePanelContext.Provider>\n\t)\n}\n\n/** @public */\nexport function useStylePanelContext() {\n\tconst context = useContext(StylePanelContext)\n\tif (!context) {\n\t\tthrow new Error('useStylePanelContext must be used within a StylePanelContextProvider')\n\t}\n\treturn context\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CE;AA1CF,oBAAuE;AACvE,mBAAuD;AACvD,oBAA4B;AAS5B,MAAM,wBAAoB,4BAAwC,IAAI;AAS/D,SAAS,0BAA0B,EAAE,UAAU,OAAO,GAAmC;AAC/F,QAAM,aAAS,yBAAU;AACzB,QAAM,iBAAa,2BAAY;AAE/B,QAAM,oBAAgB,0BAAY,CAAC,OAAe,OAAO,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC;AAC/F,QAAM,mBAAe,wBAAS,gBAAgB,MAAM,OAAO,KAAK,gBAAgB,GAAG,CAAC,MAAM,CAAC;AAC3F,QAAM,oBAAgB;AAAA,IACrB,SAAa,OAAqB,OAAU;AAC3C,aAAO,IAAI,MAAM;AAChB,YAAI,OAAO,KAAK,QAAQ,GAAG;AAC1B,iBAAO,0BAA0B,OAAO,KAAK;AAAA,QAC9C;AACA,eAAO,sBAAsB,OAAO,KAAK;AACzC,eAAO,oBAAoB,EAAE,iBAAiB,KAAK,CAAC;AAAA,MACrD,CAAC;AAED,iBAAW,aAAa,EAAE,QAAQ,eAAe,IAAI,MAAM,IAAI,MAAuB,CAAC;AAAA,IACxF;AAAA,IACA,CAAC,QAAQ,UAAU;AAAA,EACpB;AAEA,SACC;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACA,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;AAGO,SAAS,uBAAuB;AACtC,QAAM,cAAU,yBAAW,iBAAiB;AAC5C,MAAI,CAAC,SAAS;AACb,UAAM,IAAI,MAAM,sEAAsE;AAAA,EACvF;AACA,SAAO;AACR;",
6
+ "names": []
7
+ }
@@ -26,11 +26,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var DoubleDropdownPicker_exports = {};
30
- __export(DoubleDropdownPicker_exports, {
31
- DoubleDropdownPicker: () => DoubleDropdownPicker
29
+ var StylePanelDoubleDropdownPicker_exports = {};
30
+ __export(StylePanelDoubleDropdownPicker_exports, {
31
+ StylePanelDoubleDropdownPicker: () => StylePanelDoubleDropdownPicker
32
32
  });
33
- module.exports = __toCommonJS(DoubleDropdownPicker_exports);
33
+ module.exports = __toCommonJS(StylePanelDoubleDropdownPicker_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var import_editor = require("@tldraw/editor");
36
36
  var React = __toESM(require("react"));
@@ -39,20 +39,23 @@ var import_TldrawUiButtonIcon = require("../primitives/Button/TldrawUiButtonIcon
39
39
  var import_TldrawUiPopover = require("../primitives/TldrawUiPopover");
40
40
  var import_TldrawUiToolbar = require("../primitives/TldrawUiToolbar");
41
41
  var import_TldrawUiMenuContext = require("../primitives/menus/TldrawUiMenuContext");
42
- function DoubleDropdownPickerInner({
43
- label,
44
- uiTypeA,
45
- uiTypeB,
46
- labelA,
47
- labelB,
48
- itemsA,
49
- itemsB,
50
- styleA,
51
- styleB,
52
- valueA,
53
- valueB,
54
- onValueChange
55
- }) {
42
+ var import_StylePanelContext = require("./StylePanelContext");
43
+ function DoubleDropdownPickerInner(props) {
44
+ const ctx = (0, import_StylePanelContext.useStylePanelContext)();
45
+ const {
46
+ label,
47
+ uiTypeA,
48
+ uiTypeB,
49
+ labelA,
50
+ labelB,
51
+ itemsA,
52
+ itemsB,
53
+ styleA,
54
+ styleB,
55
+ valueA,
56
+ valueB,
57
+ onValueChange = ctx.onValueChange
58
+ } = props;
56
59
  const editor = (0, import_editor.useEditor)();
57
60
  const msg = (0, import_useTranslation.useTranslation)();
58
61
  const [isOpenA, setIsOpenA] = React.useState(false);
@@ -70,7 +73,7 @@ function DoubleDropdownPickerInner({
70
73
  const idB = `style panel ${uiTypeB} B`;
71
74
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-style-panel__double-select-picker", children: [
72
75
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { title: msg(label), className: "tlui-style-panel__double-select-picker-label", children: msg(label) }),
73
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiToolbar.TldrawUiToolbar, { label: msg(label), className: "tlui-buttons__horizontal", children: [
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiToolbar.TldrawUiToolbar, { orientation: "horizontal", label: msg(label), children: [
74
77
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiPopover.TldrawUiPopover, { id: idA, open: isOpenA, onOpenChange: setIsOpenA, children: [
75
78
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
76
79
  import_TldrawUiToolbar.TldrawUiToolbarButton,
@@ -81,7 +84,7 @@ function DoubleDropdownPickerInner({
81
84
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon: iconA, small: true, invertIcon: true })
82
85
  }
83
86
  ) }),
84
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverContent, { side: "left", align: "center", sideOffset: 80, alignOffset: 0, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiToolbar.TldrawUiToolbar, { label: msg(labelA), className: "tlui-buttons__grid", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "icons", sourceId: "style-panel", children: itemsA.map((item) => {
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverContent, { side: "left", align: "center", sideOffset: 80, alignOffset: 0, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiToolbar.TldrawUiToolbar, { orientation: "grid", label: msg(labelA), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "icons", sourceId: "style-panel", children: itemsA.map((item) => {
85
88
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
86
89
  import_TldrawUiToolbar.TldrawUiToolbarButton,
87
90
  {
@@ -109,7 +112,7 @@ function DoubleDropdownPickerInner({
109
112
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon: iconB, small: true })
110
113
  }
111
114
  ) }),
112
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverContent, { side: "left", align: "center", sideOffset: 116, alignOffset: 0, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiToolbar.TldrawUiToolbar, { label: msg(labelB), className: "tlui-buttons__grid", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "icons", sourceId: "style-panel", children: itemsB.map((item) => {
115
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverContent, { side: "left", align: "center", sideOffset: 116, alignOffset: 0, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiToolbar.TldrawUiToolbar, { orientation: "grid", label: msg(labelB), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "icons", sourceId: "style-panel", children: itemsB.map((item) => {
113
116
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
114
117
  import_TldrawUiToolbar.TldrawUiToolbarButton,
115
118
  {
@@ -130,7 +133,5 @@ function DoubleDropdownPickerInner({
130
133
  ] })
131
134
  ] });
132
135
  }
133
- const DoubleDropdownPicker = React.memo(
134
- DoubleDropdownPickerInner
135
- );
136
- //# sourceMappingURL=DoubleDropdownPicker.js.map
136
+ const StylePanelDoubleDropdownPicker = React.memo(DoubleDropdownPickerInner);
137
+ //# sourceMappingURL=StylePanelDoubleDropdownPicker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.tsx"],
4
+ "sourcesContent": ["import { SharedStyle, StyleProp, tlmenus, useEditor } from '@tldraw/editor'\nimport * as React from 'react'\nimport { StyleValuesForUi } from '../../../styles'\nimport { TLUiTranslationKey } from '../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport {\n\tTldrawUiPopover,\n\tTldrawUiPopoverContent,\n\tTldrawUiPopoverTrigger,\n} from '../primitives/TldrawUiPopover'\nimport { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext'\nimport { useStylePanelContext } from './StylePanelContext'\n\n/** @public */\nexport interface StylePanelDoubleDropdownPickerProps<T extends string> {\n\tuiTypeA: string\n\tuiTypeB: string\n\tlabel: TLUiTranslationKey | Exclude<string, TLUiTranslationKey>\n\tlabelA: TLUiTranslationKey | Exclude<string, TLUiTranslationKey>\n\tlabelB: TLUiTranslationKey | Exclude<string, TLUiTranslationKey>\n\titemsA: StyleValuesForUi<T>\n\titemsB: StyleValuesForUi<T>\n\tstyleA: StyleProp<T>\n\tstyleB: StyleProp<T>\n\tvalueA: SharedStyle<T>\n\tvalueB: SharedStyle<T>\n\tonValueChange?(style: StyleProp<T>, value: T): void\n}\n\nfunction DoubleDropdownPickerInner<T extends string>(\n\tprops: StylePanelDoubleDropdownPickerProps<T>\n) {\n\tconst ctx = useStylePanelContext()\n\tconst {\n\t\tlabel,\n\t\tuiTypeA,\n\t\tuiTypeB,\n\t\tlabelA,\n\t\tlabelB,\n\t\titemsA,\n\t\titemsB,\n\t\tstyleA,\n\t\tstyleB,\n\t\tvalueA,\n\t\tvalueB,\n\t\tonValueChange = ctx.onValueChange,\n\t} = props\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst [isOpenA, setIsOpenA] = React.useState(false)\n\tconst [isOpenB, setIsOpenB] = React.useState(false)\n\n\tconst iconA = React.useMemo(\n\t\t() =>\n\t\t\titemsA.find((item) => valueA.type === 'shared' && valueA.value === item.value)?.icon ??\n\t\t\t'mixed',\n\t\t[itemsA, valueA]\n\t)\n\tconst iconB = React.useMemo(\n\t\t() =>\n\t\t\titemsB.find((item) => valueB.type === 'shared' && valueB.value === item.value)?.icon ??\n\t\t\t'mixed',\n\t\t[itemsB, valueB]\n\t)\n\n\tif (valueA === undefined && valueB === undefined) return null\n\n\tconst idA = `style panel ${uiTypeA} A`\n\tconst idB = `style panel ${uiTypeB} B`\n\treturn (\n\t\t<div className=\"tlui-style-panel__double-select-picker\">\n\t\t\t<div title={msg(label)} className=\"tlui-style-panel__double-select-picker-label\">\n\t\t\t\t{msg(label)}\n\t\t\t</div>\n\t\t\t<TldrawUiToolbar orientation=\"horizontal\" label={msg(label)}>\n\t\t\t\t<TldrawUiPopover id={idA} open={isOpenA} onOpenChange={setIsOpenA}>\n\t\t\t\t\t<TldrawUiPopoverTrigger>\n\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\tdata-testid={`style.${uiTypeA}`}\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\tmsg(labelA) +\n\t\t\t\t\t\t\t\t' \u2014 ' +\n\t\t\t\t\t\t\t\t(valueA === null || valueA.type === 'mixed'\n\t\t\t\t\t\t\t\t\t? msg('style-panel.mixed')\n\t\t\t\t\t\t\t\t\t: msg(`${uiTypeA}-style.${valueA.value}` as TLUiTranslationKey))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TldrawUiButtonIcon icon={iconA} small invertIcon />\n\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t</TldrawUiPopoverTrigger>\n\t\t\t\t\t<TldrawUiPopoverContent side=\"left\" align=\"center\" sideOffset={80} alignOffset={0}>\n\t\t\t\t\t\t<TldrawUiToolbar orientation=\"grid\" label={msg(labelA)}>\n\t\t\t\t\t\t\t<TldrawUiMenuContextProvider type=\"icons\" sourceId=\"style-panel\">\n\t\t\t\t\t\t\t\t{itemsA.map((item) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\t\t\t\t\tdata-testid={`style.${uiTypeA}.${item.value}`}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange(styleA, item.value)\n\t\t\t\t\t\t\t\t\t\t\t\ttlmenus.deleteOpenMenu(idA, editor.contextId)\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsOpenA(false)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\ttitle={`${msg(labelA)} \u2014 ${msg(`${uiTypeA}-style.${item.value}`)}`}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<TldrawUiButtonIcon icon={item.icon} invertIcon />\n\t\t\t\t\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</TldrawUiMenuContextProvider>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t</TldrawUiPopoverContent>\n\t\t\t\t</TldrawUiPopover>\n\t\t\t\t<TldrawUiPopover id={idB} open={isOpenB} onOpenChange={setIsOpenB}>\n\t\t\t\t\t<TldrawUiPopoverTrigger>\n\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\tdata-testid={`style.${uiTypeB}`}\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\tmsg(labelB) +\n\t\t\t\t\t\t\t\t' \u2014 ' +\n\t\t\t\t\t\t\t\t(valueB === null || valueB.type === 'mixed'\n\t\t\t\t\t\t\t\t\t? msg('style-panel.mixed')\n\t\t\t\t\t\t\t\t\t: msg(`${uiTypeB}-style.${valueB.value}` as TLUiTranslationKey))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TldrawUiButtonIcon icon={iconB} small />\n\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t</TldrawUiPopoverTrigger>\n\t\t\t\t\t<TldrawUiPopoverContent side=\"left\" align=\"center\" sideOffset={116} alignOffset={0}>\n\t\t\t\t\t\t<TldrawUiToolbar orientation=\"grid\" label={msg(labelB)}>\n\t\t\t\t\t\t\t<TldrawUiMenuContextProvider type=\"icons\" sourceId=\"style-panel\">\n\t\t\t\t\t\t\t\t{itemsB.map((item) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\ttitle={`${msg(labelB)} \u2014 ${msg(`${uiTypeB}-style.${item.value}` as TLUiTranslationKey)}`}\n\t\t\t\t\t\t\t\t\t\t\tdata-testid={`style.${uiTypeB}.${item.value}`}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange(styleB, item.value)\n\t\t\t\t\t\t\t\t\t\t\t\ttlmenus.deleteOpenMenu(idB, editor.contextId)\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsOpenB(false)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<TldrawUiButtonIcon icon={item.icon} />\n\t\t\t\t\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</TldrawUiMenuContextProvider>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t</TldrawUiPopoverContent>\n\t\t\t\t</TldrawUiPopover>\n\t\t\t</TldrawUiToolbar>\n\t\t</div>\n\t)\n}\n\n// need to memo like this to get generics\n/** @public @react */\nexport const StylePanelDoubleDropdownPicker = React.memo(DoubleDropdownPickerInner) as <\n\tT extends string,\n>(\n\tprops: StylePanelDoubleDropdownPickerProps<T>\n) => React.JSX.Element\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }