tldraw 3.16.0-canary.67f438ba104b → 3.16.0-canary.7f4043b128a3

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 (227) hide show
  1. package/dist-cjs/index.d.ts +97 -4
  2. package/dist-cjs/index.js +13 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -3
  5. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  6. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  7. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  8. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  9. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  10. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +12 -12
  11. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  12. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  13. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  14. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  15. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  16. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  17. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  18. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
  19. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  20. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +4 -4
  21. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  22. package/dist-cjs/lib/shapes/shared/ShapeFill.js +5 -5
  23. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  24. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  25. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  26. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  27. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  28. package/dist-cjs/lib/ui/TldrawUi.js +14 -0
  29. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  30. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  31. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  32. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  33. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  34. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  35. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  36. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  37. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  38. package/dist-cjs/lib/ui/components/MobileStylePanel.js +4 -2
  39. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  40. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  41. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  42. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  43. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  44. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  45. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  46. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  47. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  48. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  49. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  50. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -140
  51. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  52. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
  53. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
  54. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
  55. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
  56. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  57. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  58. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  59. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  60. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  61. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  62. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  63. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  64. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +5 -16
  65. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
  66. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  67. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  68. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  69. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  70. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +30 -7
  71. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  72. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +291 -0
  73. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  74. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  75. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  76. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +30 -7
  77. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  78. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +10 -8
  79. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  80. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  81. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  82. package/dist-cjs/lib/ui/context/actions.js +15 -0
  83. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  84. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  85. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  86. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +3 -0
  87. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  88. package/dist-cjs/lib/ui/version.js +3 -3
  89. package/dist-cjs/lib/ui/version.js.map +1 -1
  90. package/dist-esm/index.d.mts +97 -4
  91. package/dist-esm/index.mjs +23 -1
  92. package/dist-esm/index.mjs.map +2 -2
  93. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
  94. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  95. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  96. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  97. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  98. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  99. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +13 -12
  100. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  101. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  102. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  103. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  104. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  105. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  106. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  107. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  108. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  109. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
  110. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  111. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +6 -5
  112. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  113. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  114. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  115. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  116. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  117. package/dist-esm/lib/ui/TldrawUi.mjs +16 -2
  118. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  119. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  120. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  121. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  122. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  123. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  124. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  125. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  126. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  127. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +5 -2
  128. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  129. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  130. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  131. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  132. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  133. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  134. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  135. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  136. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  137. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  138. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  139. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -140
  140. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  141. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
  142. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
  143. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
  144. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
  145. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  146. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  147. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  148. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  149. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  150. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  151. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  152. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  153. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +6 -6
  154. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
  155. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
  156. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  157. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  158. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  159. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +30 -7
  160. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  161. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +261 -0
  162. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  163. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  164. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  165. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +30 -7
  166. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  167. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +10 -8
  168. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  169. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  170. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  171. package/dist-esm/lib/ui/context/actions.mjs +15 -0
  172. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  173. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  174. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +3 -0
  175. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  176. package/dist-esm/lib/ui/version.mjs +3 -3
  177. package/dist-esm/lib/ui/version.mjs.map +1 -1
  178. package/package.json +3 -3
  179. package/src/index.ts +18 -0
  180. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
  181. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  182. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  183. package/src/lib/shapes/frame/FrameShapeUtil.tsx +13 -14
  184. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  185. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  186. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  187. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  188. package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
  189. package/src/lib/shapes/shared/ShapeFill.tsx +6 -5
  190. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  191. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  192. package/src/lib/ui/TldrawUi.tsx +17 -2
  193. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  194. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  195. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  196. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  197. package/src/lib/ui/components/MobileStylePanel.tsx +8 -5
  198. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  199. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  200. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  201. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  202. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  203. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -107
  204. package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
  205. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
  206. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  207. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  208. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +14 -11
  209. package/src/lib/ui/components/menu-items.tsx +8 -0
  210. package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -37
  211. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
  212. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  213. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +51 -12
  214. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +343 -0
  215. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  216. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +30 -7
  217. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +13 -9
  218. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  219. package/src/lib/ui/context/actions.tsx +15 -0
  220. package/src/lib/ui/context/events.tsx +1 -0
  221. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +3 -0
  222. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +3 -0
  223. package/src/lib/ui/version.ts +3 -3
  224. package/src/lib/ui.css +199 -84
  225. package/src/test/arrows-megabus.test.tsx +12 -6
  226. package/src/test/inner-outer-margin.test.ts +315 -0
  227. package/tldraw.css +201 -84
@@ -33,7 +33,6 @@ __export(DropdownPicker_exports, {
33
33
  module.exports = __toCommonJS(DropdownPicker_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var import_editor = require("@tldraw/editor");
36
- var import_classnames = __toESM(require("classnames"));
37
36
  var React = __toESM(require("react"));
38
37
  var import_useTranslation = require("../../hooks/useTranslation/useTranslation");
39
38
  var import_TldrawUiButtonIcon = require("../primitives/Button/TldrawUiButtonIcon");
@@ -63,26 +62,28 @@ function DropdownPickerInner({
63
62
  const titleStr = value.type === "mixed" ? msg("style-panel.mixed") : stylePanelName + " \u2014 " + msg(`${uiType}-style.${value.value}`);
64
63
  const labelStr = label ? msg(label) : "";
65
64
  const popoverId = `style panel ${id}`;
66
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiPopover.TldrawUiPopover, { id: popoverId, open: isOpen, onOpenChange: setIsOpen, children: [
67
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
68
- import_TldrawUiToolbar.TldrawUiToolbarButton,
69
- {
70
- type,
71
- "data-testid": `style.${uiType}`,
72
- "data-direction": "left",
73
- title: titleStr,
74
- children: [
75
- labelStr && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonLabel.TldrawUiButtonLabel, { children: labelStr }),
76
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon: icon ?? "mixed" })
77
- ]
78
- }
79
- ) }),
80
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverContent, { side: "left", align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
81
- import_TldrawUiToolbar.TldrawUiToolbar,
82
- {
83
- label: labelStr,
84
- className: (0, import_classnames.default)("tlui-buttons__grid", `tlui-buttons__${stylePanelType}`),
85
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "icons", sourceId: "style-panel", children: items.map((item) => {
65
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
66
+ import_TldrawUiPopover.TldrawUiPopover,
67
+ {
68
+ id: popoverId,
69
+ open: isOpen,
70
+ onOpenChange: setIsOpen,
71
+ className: "tlui-style-panel__dropdown-picker",
72
+ children: [
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
74
+ import_TldrawUiToolbar.TldrawUiToolbarButton,
75
+ {
76
+ type,
77
+ "data-testid": `style.${uiType}`,
78
+ "data-direction": "left",
79
+ title: titleStr,
80
+ children: [
81
+ labelStr && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonLabel.TldrawUiButtonLabel, { children: labelStr }),
82
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon: icon ?? "mixed" })
83
+ ]
84
+ }
85
+ ) }),
86
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverContent, { side: "left", align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiToolbar.TldrawUiToolbar, { orientation: "grid", label: labelStr, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "icons", sourceId: "style-panel", children: items.map((item) => {
86
87
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
87
88
  import_TldrawUiToolbar.TldrawUiToolbarButton,
88
89
  {
@@ -100,10 +101,10 @@ function DropdownPickerInner({
100
101
  },
101
102
  item.value
102
103
  );
103
- }) })
104
- }
105
- ) })
106
- ] });
104
+ }) }) }) })
105
+ ]
106
+ }
107
+ );
107
108
  }
108
109
  const DropdownPicker = React.memo(DropdownPickerInner);
109
110
  //# sourceMappingURL=DropdownPicker.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/StylePanel/DropdownPicker.tsx"],
4
- "sourcesContent": ["import { SharedStyle, StyleProp, tlmenus, useEditor } from '@tldraw/editor'\nimport classNames from 'classnames'\nimport * as React from 'react'\nimport { StyleValuesForUi } from '../../../styles'\nimport { TLUiTranslationKey } from '../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TLUiIconType } from '../../icon-types'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonLabel } from '../primitives/Button/TldrawUiButtonLabel'\nimport {\n\tTldrawUiPopover,\n\tTldrawUiPopoverContent,\n\tTldrawUiPopoverTrigger,\n} from '../primitives/TldrawUiPopover'\nimport { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext'\n\ninterface DropdownPickerProps<T extends string> {\n\tid: string\n\tlabel?: TLUiTranslationKey | Exclude<string, TLUiTranslationKey>\n\tuiType: string\n\tstylePanelType: string\n\tstyle: StyleProp<T>\n\tvalue: SharedStyle<T>\n\titems: StyleValuesForUi<T>\n\ttype: 'icon' | 'tool' | 'menu'\n\tonValueChange(style: StyleProp<T>, value: T): void\n}\n\nfunction DropdownPickerInner<T extends string>({\n\tid,\n\tlabel,\n\tuiType,\n\tstylePanelType,\n\tstyle,\n\titems,\n\ttype,\n\tvalue,\n\tonValueChange,\n}: DropdownPickerProps<T>) {\n\tconst msg = useTranslation()\n\tconst editor = useEditor()\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst icon = React.useMemo(\n\t\t() => items.find((item) => value.type === 'shared' && item.value === value.value)?.icon,\n\t\t[items, value]\n\t)\n\n\tconst stylePanelName = msg(`style-panel.${stylePanelType}` as TLUiTranslationKey)\n\n\tconst titleStr =\n\t\tvalue.type === 'mixed'\n\t\t\t? msg('style-panel.mixed')\n\t\t\t: stylePanelName + ' \u2014 ' + msg(`${uiType}-style.${value.value}` as TLUiTranslationKey)\n\tconst labelStr = label ? msg(label) : ''\n\n\tconst popoverId = `style panel ${id}`\n\treturn (\n\t\t<TldrawUiPopover id={popoverId} open={isOpen} onOpenChange={setIsOpen}>\n\t\t\t<TldrawUiPopoverTrigger>\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\ttype={type}\n\t\t\t\t\tdata-testid={`style.${uiType}`}\n\t\t\t\t\tdata-direction=\"left\"\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t>\n\t\t\t\t\t{labelStr && <TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>}\n\t\t\t\t\t<TldrawUiButtonIcon icon={(icon as TLUiIconType) ?? 'mixed'} />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t</TldrawUiPopoverTrigger>\n\t\t\t<TldrawUiPopoverContent side=\"left\" align=\"center\">\n\t\t\t\t<TldrawUiToolbar\n\t\t\t\t\tlabel={labelStr}\n\t\t\t\t\tclassName={classNames('tlui-buttons__grid', `tlui-buttons__${stylePanelType}`)}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiMenuContextProvider type=\"icons\" sourceId=\"style-panel\">\n\t\t\t\t\t\t{items.map((item) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\t\tdata-testid={`style.${uiType}.${item.value}`}\n\t\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\t\tstylePanelName +\n\t\t\t\t\t\t\t\t\t\t' \u2014 ' +\n\t\t\t\t\t\t\t\t\t\tmsg(`${uiType}-style.${item.value}` as TLUiTranslationKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tisActive={icon === item.icon}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\teditor.markHistoryStoppingPoint('select style dropdown item')\n\t\t\t\t\t\t\t\t\t\tonValueChange(style, item.value)\n\t\t\t\t\t\t\t\t\t\ttlmenus.deleteOpenMenu(popoverId, editor.contextId)\n\t\t\t\t\t\t\t\t\t\tsetIsOpen(false)\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\t\t<TldrawUiButtonIcon icon={item.icon} />\n\t\t\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t</TldrawUiMenuContextProvider>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t</TldrawUiPopoverContent>\n\t\t</TldrawUiPopover>\n\t)\n}\n\n// need to export like this to get generics\nexport const DropdownPicker = React.memo(DropdownPickerInner) as typeof DropdownPickerInner\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6DI;AA7DJ,oBAA2D;AAC3D,wBAAuB;AACvB,YAAuB;AAGvB,4BAA+B;AAE/B,gCAAmC;AACnC,iCAAoC;AACpC,6BAIO;AACP,6BAAuD;AACvD,iCAA4C;AAc5C,SAAS,oBAAsC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA2B;AAC1B,QAAM,UAAM,sCAAe;AAC3B,QAAM,aAAS,yBAAU;AACzB,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,KAAK;AAEhD,QAAM,OAAO,MAAM;AAAA,IAClB,MAAM,MAAM,KAAK,CAAC,SAAS,MAAM,SAAS,YAAY,KAAK,UAAU,MAAM,KAAK,GAAG;AAAA,IACnF,CAAC,OAAO,KAAK;AAAA,EACd;AAEA,QAAM,iBAAiB,IAAI,eAAe,cAAc,EAAwB;AAEhF,QAAM,WACL,MAAM,SAAS,UACZ,IAAI,mBAAmB,IACvB,iBAAiB,aAAQ,IAAI,GAAG,MAAM,UAAU,MAAM,KAAK,EAAwB;AACvF,QAAM,WAAW,QAAQ,IAAI,KAAK,IAAI;AAEtC,QAAM,YAAY,eAAe,EAAE;AACnC,SACC,6CAAC,0CAAgB,IAAI,WAAW,MAAM,QAAQ,cAAc,WAC3D;AAAA,gDAAC,iDACA;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,eAAa,SAAS,MAAM;AAAA,QAC5B,kBAAe;AAAA,QACf,OAAO;AAAA,QAEN;AAAA,sBAAY,4CAAC,kDAAqB,oBAAS;AAAA,UAC5C,4CAAC,gDAAmB,MAAO,QAAyB,SAAS;AAAA;AAAA;AAAA,IAC9D,GACD;AAAA,IACA,4CAAC,iDAAuB,MAAK,QAAO,OAAM,UACzC;AAAA,MAAC;AAAA;AAAA,QACA,OAAO;AAAA,QACP,eAAW,kBAAAA,SAAW,sBAAsB,iBAAiB,cAAc,EAAE;AAAA,QAE7E,sDAAC,0DAA4B,MAAK,SAAQ,UAAS,eACjD,gBAAM,IAAI,CAAC,SAAS;AACpB,iBACC;AAAA,YAAC;AAAA;AAAA,cAEA,MAAK;AAAA,cACL,eAAa,SAAS,MAAM,IAAI,KAAK,KAAK;AAAA,cAC1C,OACC,iBACA,aACA,IAAI,GAAG,MAAM,UAAU,KAAK,KAAK,EAAwB;AAAA,cAE1D,UAAU,SAAS,KAAK;AAAA,cACxB,SAAS,MAAM;AACd,uBAAO,yBAAyB,4BAA4B;AAC5D,8BAAc,OAAO,KAAK,KAAK;AAC/B,sCAAQ,eAAe,WAAW,OAAO,SAAS;AAClD,0BAAU,KAAK;AAAA,cAChB;AAAA,cAEA,sDAAC,gDAAmB,MAAM,KAAK,MAAM;AAAA;AAAA,YAhBhC,KAAK;AAAA,UAiBX;AAAA,QAEF,CAAC,GACF;AAAA;AAAA,IACD,GACD;AAAA,KACD;AAEF;AAGO,MAAM,iBAAiB,MAAM,KAAK,mBAAmB;",
6
- "names": ["classNames"]
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 { TLUiIconType } from '../../icon-types'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonLabel } from '../primitives/Button/TldrawUiButtonLabel'\nimport {\n\tTldrawUiPopover,\n\tTldrawUiPopoverContent,\n\tTldrawUiPopoverTrigger,\n} from '../primitives/TldrawUiPopover'\nimport { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext'\n\ninterface DropdownPickerProps<T extends string> {\n\tid: string\n\tlabel?: TLUiTranslationKey | Exclude<string, TLUiTranslationKey>\n\tuiType: string\n\tstylePanelType: string\n\tstyle: StyleProp<T>\n\tvalue: SharedStyle<T>\n\titems: StyleValuesForUi<T>\n\ttype: 'icon' | 'tool' | 'menu'\n\tonValueChange(style: StyleProp<T>, value: T): void\n}\n\nfunction DropdownPickerInner<T extends string>({\n\tid,\n\tlabel,\n\tuiType,\n\tstylePanelType,\n\tstyle,\n\titems,\n\ttype,\n\tvalue,\n\tonValueChange,\n}: DropdownPickerProps<T>) {\n\tconst msg = useTranslation()\n\tconst editor = useEditor()\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst icon = React.useMemo(\n\t\t() => items.find((item) => value.type === 'shared' && item.value === value.value)?.icon,\n\t\t[items, value]\n\t)\n\n\tconst stylePanelName = msg(`style-panel.${stylePanelType}` as TLUiTranslationKey)\n\n\tconst titleStr =\n\t\tvalue.type === 'mixed'\n\t\t\t? msg('style-panel.mixed')\n\t\t\t: stylePanelName + ' \u2014 ' + msg(`${uiType}-style.${value.value}` as TLUiTranslationKey)\n\tconst labelStr = label ? msg(label) : ''\n\n\tconst popoverId = `style panel ${id}`\n\treturn (\n\t\t<TldrawUiPopover\n\t\t\tid={popoverId}\n\t\t\topen={isOpen}\n\t\t\tonOpenChange={setIsOpen}\n\t\t\tclassName=\"tlui-style-panel__dropdown-picker\"\n\t\t>\n\t\t\t<TldrawUiPopoverTrigger>\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\ttype={type}\n\t\t\t\t\tdata-testid={`style.${uiType}`}\n\t\t\t\t\tdata-direction=\"left\"\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t>\n\t\t\t\t\t{labelStr && <TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>}\n\t\t\t\t\t<TldrawUiButtonIcon icon={(icon as TLUiIconType) ?? 'mixed'} />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t</TldrawUiPopoverTrigger>\n\t\t\t<TldrawUiPopoverContent side=\"left\" align=\"center\">\n\t\t\t\t<TldrawUiToolbar orientation=\"grid\" label={labelStr}>\n\t\t\t\t\t<TldrawUiMenuContextProvider type=\"icons\" sourceId=\"style-panel\">\n\t\t\t\t\t\t{items.map((item) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\t\tdata-testid={`style.${uiType}.${item.value}`}\n\t\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\t\tstylePanelName +\n\t\t\t\t\t\t\t\t\t\t' \u2014 ' +\n\t\t\t\t\t\t\t\t\t\tmsg(`${uiType}-style.${item.value}` as TLUiTranslationKey)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tisActive={icon === item.icon}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\teditor.markHistoryStoppingPoint('select style dropdown item')\n\t\t\t\t\t\t\t\t\t\tonValueChange(style, item.value)\n\t\t\t\t\t\t\t\t\t\ttlmenus.deleteOpenMenu(popoverId, editor.contextId)\n\t\t\t\t\t\t\t\t\t\tsetIsOpen(false)\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\t\t<TldrawUiButtonIcon icon={item.icon} />\n\t\t\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t</TldrawUiMenuContextProvider>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t</TldrawUiPopoverContent>\n\t\t</TldrawUiPopover>\n\t)\n}\n\n// need to export like this to get generics\nexport const DropdownPicker = React.memo(DropdownPickerInner) as typeof DropdownPickerInner\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiEI;AAjEJ,oBAA2D;AAC3D,YAAuB;AAGvB,4BAA+B;AAE/B,gCAAmC;AACnC,iCAAoC;AACpC,6BAIO;AACP,6BAAuD;AACvD,iCAA4C;AAc5C,SAAS,oBAAsC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA2B;AAC1B,QAAM,UAAM,sCAAe;AAC3B,QAAM,aAAS,yBAAU;AACzB,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,KAAK;AAEhD,QAAM,OAAO,MAAM;AAAA,IAClB,MAAM,MAAM,KAAK,CAAC,SAAS,MAAM,SAAS,YAAY,KAAK,UAAU,MAAM,KAAK,GAAG;AAAA,IACnF,CAAC,OAAO,KAAK;AAAA,EACd;AAEA,QAAM,iBAAiB,IAAI,eAAe,cAAc,EAAwB;AAEhF,QAAM,WACL,MAAM,SAAS,UACZ,IAAI,mBAAmB,IACvB,iBAAiB,aAAQ,IAAI,GAAG,MAAM,UAAU,MAAM,KAAK,EAAwB;AACvF,QAAM,WAAW,QAAQ,IAAI,KAAK,IAAI;AAEtC,QAAM,YAAY,eAAe,EAAE;AACnC,SACC;AAAA,IAAC;AAAA;AAAA,MACA,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,cAAc;AAAA,MACd,WAAU;AAAA,MAEV;AAAA,oDAAC,iDACA;AAAA,UAAC;AAAA;AAAA,YACA;AAAA,YACA,eAAa,SAAS,MAAM;AAAA,YAC5B,kBAAe;AAAA,YACf,OAAO;AAAA,YAEN;AAAA,0BAAY,4CAAC,kDAAqB,oBAAS;AAAA,cAC5C,4CAAC,gDAAmB,MAAO,QAAyB,SAAS;AAAA;AAAA;AAAA,QAC9D,GACD;AAAA,QACA,4CAAC,iDAAuB,MAAK,QAAO,OAAM,UACzC,sDAAC,0CAAgB,aAAY,QAAO,OAAO,UAC1C,sDAAC,0DAA4B,MAAK,SAAQ,UAAS,eACjD,gBAAM,IAAI,CAAC,SAAS;AACpB,iBACC;AAAA,YAAC;AAAA;AAAA,cAEA,MAAK;AAAA,cACL,eAAa,SAAS,MAAM,IAAI,KAAK,KAAK;AAAA,cAC1C,OACC,iBACA,aACA,IAAI,GAAG,MAAM,UAAU,KAAK,KAAK,EAAwB;AAAA,cAE1D,UAAU,SAAS,KAAK;AAAA,cACxB,SAAS,MAAM;AACd,uBAAO,yBAAyB,4BAA4B;AAC5D,8BAAc,OAAO,KAAK,KAAK;AAC/B,sCAAQ,eAAe,WAAW,OAAO,SAAS;AAClD,0BAAU,KAAK;AAAA,cAChB;AAAA,cAEA,sDAAC,gDAAmB,MAAM,KAAK,MAAM;AAAA;AAAA,YAhBhC,KAAK;AAAA,UAiBX;AAAA,QAEF,CAAC,GACF,GACD,GACD;AAAA;AAAA;AAAA,EACD;AAEF;AAGO,MAAM,iBAAiB,MAAM,KAAK,mBAAmB;",
6
+ "names": []
7
7
  }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
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
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var DefaultToolbar_exports = {};
20
30
  __export(DefaultToolbar_exports, {
@@ -23,6 +33,7 @@ __export(DefaultToolbar_exports, {
23
33
  module.exports = __toCommonJS(DefaultToolbar_exports);
24
34
  var import_jsx_runtime = require("react/jsx-runtime");
25
35
  var import_editor = require("@tldraw/editor");
36
+ var import_classnames = __toESM(require("classnames"));
26
37
  var import_react = require("react");
27
38
  var import_constants = require("../../constants");
28
39
  var import_breakpoints = require("../../context/breakpoints");
@@ -30,11 +41,19 @@ var import_components = require("../../context/components");
30
41
  var import_useReadonly = require("../../hooks/useReadonly");
31
42
  var import_useTranslation = require("../../hooks/useTranslation/useTranslation");
32
43
  var import_MobileStylePanel = require("../MobileStylePanel");
44
+ var import_layout = require("../primitives/layout");
33
45
  var import_TldrawUiToolbar = require("../primitives/TldrawUiToolbar");
34
46
  var import_DefaultToolbarContent = require("./DefaultToolbarContent");
35
47
  var import_OverflowingToolbar = require("./OverflowingToolbar");
36
48
  var import_ToggleToolLockedButton = require("./ToggleToolLockedButton");
37
- const DefaultToolbar = (0, import_react.memo)(function DefaultToolbar2({ children }) {
49
+ const DefaultToolbar = (0, import_react.memo)(function DefaultToolbar2({
50
+ children,
51
+ orientation = "horizontal",
52
+ minItems = 4,
53
+ minSizePx = 310,
54
+ maxItems = 8,
55
+ maxSizePx = 470
56
+ }) {
38
57
  const editor = (0, import_editor.useEditor)();
39
58
  const msg = (0, import_useTranslation.useTranslation)();
40
59
  const breakpoint = (0, import_breakpoints.useBreakpoint)();
@@ -44,25 +63,51 @@ const DefaultToolbar = (0, import_react.memo)(function DefaultToolbar2({ childre
44
63
  (0, import_editor.usePassThroughWheelEvents)(ref);
45
64
  const { ActionsMenu, QuickActions } = (0, import_components.useTldrawUiComponents)();
46
65
  const showQuickActions = editor.options.actionShortcutsLocation === "menu" ? false : editor.options.actionShortcutsLocation === "toolbar" ? true : breakpoint < import_constants.PORTRAIT_BREAKPOINT.TABLET;
47
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref, className: "tlui-toolbar", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-toolbar__inner", children: [
48
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-toolbar__left", children: [
49
- !isReadonlyMode && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-toolbar__extras", children: [
50
- showQuickActions && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
51
- import_TldrawUiToolbar.TldrawUiToolbar,
52
- {
53
- className: "tlui-toolbar__extras__controls tlui-buttons__horizontal",
54
- label: msg("actions-menu.title"),
55
- children: [
56
- QuickActions && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QuickActions, {}),
57
- ActionsMenu && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ActionsMenu, {})
58
- ]
59
- }
60
- ),
61
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ToggleToolLockedButton.ToggleToolLockedButton, { activeToolId })
62
- ] }),
63
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_OverflowingToolbar.OverflowingToolbar, { children: children ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DefaultToolbarContent.DefaultToolbarContent, {}) })
64
- ] }),
65
- breakpoint < import_constants.PORTRAIT_BREAKPOINT.TABLET_SM && !isReadonlyMode && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-toolbar__tools", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_MobileStylePanel.MobileStylePanel, {}) })
66
- ] }) });
66
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
67
+ import_layout.TldrawUiOrientationProvider,
68
+ {
69
+ orientation,
70
+ tooltipSide: orientation === "horizontal" ? "top" : "right",
71
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
72
+ "div",
73
+ {
74
+ ref,
75
+ className: (0, import_classnames.default)("tlui-main-toolbar", `tlui-main-toolbar--${orientation}`),
76
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-main-toolbar__inner", children: [
77
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-main-toolbar__left", children: [
78
+ !isReadonlyMode && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-main-toolbar__extras", children: [
79
+ showQuickActions && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
80
+ import_TldrawUiToolbar.TldrawUiToolbar,
81
+ {
82
+ orientation,
83
+ className: "tlui-main-toolbar__extras__controls",
84
+ label: msg("actions-menu.title"),
85
+ children: [
86
+ QuickActions && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QuickActions, {}),
87
+ ActionsMenu && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ActionsMenu, {})
88
+ ]
89
+ }
90
+ ),
91
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ToggleToolLockedButton.ToggleToolLockedButton, { activeToolId })
92
+ ] }),
93
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
94
+ import_OverflowingToolbar.OverflowingToolbar,
95
+ {
96
+ orientation,
97
+ sizingParentClassName: "tlui-main-toolbar",
98
+ minItems,
99
+ maxItems,
100
+ minSizePx,
101
+ maxSizePx,
102
+ children: children ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DefaultToolbarContent.DefaultToolbarContent, {})
103
+ }
104
+ )
105
+ ] }),
106
+ breakpoint < import_constants.PORTRAIT_BREAKPOINT.TABLET_SM && !isReadonlyMode && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-main-toolbar__tools tlui-main-toolbar__mobile-style-panel", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_MobileStylePanel.MobileStylePanel, {}) })
107
+ ] })
108
+ }
109
+ )
110
+ }
111
+ );
67
112
  });
68
113
  //# sourceMappingURL=DefaultToolbar.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/Toolbar/DefaultToolbar.tsx"],
4
- "sourcesContent": ["import { useEditor, usePassThroughWheelEvents, useValue } from '@tldraw/editor'\nimport { ReactNode, memo, useRef } from 'react'\nimport { PORTRAIT_BREAKPOINT } from '../../constants'\nimport { useBreakpoint } from '../../context/breakpoints'\nimport { useTldrawUiComponents } from '../../context/components'\nimport { useReadonly } from '../../hooks/useReadonly'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { MobileStylePanel } from '../MobileStylePanel'\nimport { TldrawUiToolbar } from '../primitives/TldrawUiToolbar'\nimport { DefaultToolbarContent } from './DefaultToolbarContent'\nimport { OverflowingToolbar } from './OverflowingToolbar'\nimport { ToggleToolLockedButton } from './ToggleToolLockedButton'\n\n/** @public */\nexport interface DefaultToolbarProps {\n\tchildren?: ReactNode\n}\n\n/**\n * The default toolbar for the editor. `children` defaults to the `DefaultToolbarContent` component.\n * Depending on the screen size, the children will overflow into a drop-down menu, with the most\n * recently active item from the overflow being shown in the main toolbar.\n *\n * @public\n * @react\n */\nexport const DefaultToolbar = memo(function DefaultToolbar({ children }: DefaultToolbarProps) {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst breakpoint = useBreakpoint()\n\tconst isReadonlyMode = useReadonly()\n\tconst activeToolId = useValue('current tool id', () => editor.getCurrentToolId(), [editor])\n\n\tconst ref = useRef<HTMLDivElement>(null)\n\tusePassThroughWheelEvents(ref)\n\n\tconst { ActionsMenu, QuickActions } = useTldrawUiComponents()\n\n\tconst showQuickActions =\n\t\teditor.options.actionShortcutsLocation === 'menu'\n\t\t\t? false\n\t\t\t: editor.options.actionShortcutsLocation === 'toolbar'\n\t\t\t\t? true\n\t\t\t\t: breakpoint < PORTRAIT_BREAKPOINT.TABLET\n\n\treturn (\n\t\t<div ref={ref} className=\"tlui-toolbar\">\n\t\t\t<div className=\"tlui-toolbar__inner\">\n\t\t\t\t<div className=\"tlui-toolbar__left\">\n\t\t\t\t\t{!isReadonlyMode && (\n\t\t\t\t\t\t<div className=\"tlui-toolbar__extras\">\n\t\t\t\t\t\t\t{showQuickActions && (\n\t\t\t\t\t\t\t\t<TldrawUiToolbar\n\t\t\t\t\t\t\t\t\tclassName=\"tlui-toolbar__extras__controls tlui-buttons__horizontal\"\n\t\t\t\t\t\t\t\t\tlabel={msg('actions-menu.title')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{QuickActions && <QuickActions />}\n\t\t\t\t\t\t\t\t\t{ActionsMenu && <ActionsMenu />}\n\t\t\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ToggleToolLockedButton activeToolId={activeToolId} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<OverflowingToolbar>{children ?? <DefaultToolbarContent />}</OverflowingToolbar>\n\t\t\t\t</div>\n\t\t\t\t{breakpoint < PORTRAIT_BREAKPOINT.TABLET_SM && !isReadonlyMode && (\n\t\t\t\t\t<div className=\"tlui-toolbar__tools\">\n\t\t\t\t\t\t<MobileStylePanel />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDQ;AApDR,oBAA+D;AAC/D,mBAAwC;AACxC,uBAAoC;AACpC,yBAA8B;AAC9B,wBAAsC;AACtC,yBAA4B;AAC5B,4BAA+B;AAC/B,8BAAiC;AACjC,6BAAgC;AAChC,mCAAsC;AACtC,gCAAmC;AACnC,oCAAuC;AAehC,MAAM,qBAAiB,mBAAK,SAASA,gBAAe,EAAE,SAAS,GAAwB;AAC7F,QAAM,aAAS,yBAAU;AACzB,QAAM,UAAM,sCAAe;AAC3B,QAAM,iBAAa,kCAAc;AACjC,QAAM,qBAAiB,gCAAY;AACnC,QAAM,mBAAe,wBAAS,mBAAmB,MAAM,OAAO,iBAAiB,GAAG,CAAC,MAAM,CAAC;AAE1F,QAAM,UAAM,qBAAuB,IAAI;AACvC,+CAA0B,GAAG;AAE7B,QAAM,EAAE,aAAa,aAAa,QAAI,yCAAsB;AAE5D,QAAM,mBACL,OAAO,QAAQ,4BAA4B,SACxC,QACA,OAAO,QAAQ,4BAA4B,YAC1C,OACA,aAAa,qCAAoB;AAEtC,SACC,4CAAC,SAAI,KAAU,WAAU,gBACxB,uDAAC,SAAI,WAAU,uBACd;AAAA,iDAAC,SAAI,WAAU,sBACb;AAAA,OAAC,kBACD,6CAAC,SAAI,WAAU,wBACb;AAAA,4BACA;AAAA,UAAC;AAAA;AAAA,YACA,WAAU;AAAA,YACV,OAAO,IAAI,oBAAoB;AAAA,YAE9B;AAAA,8BAAgB,4CAAC,gBAAa;AAAA,cAC9B,eAAe,4CAAC,eAAY;AAAA;AAAA;AAAA,QAC9B;AAAA,QAED,4CAAC,wDAAuB,cAA4B;AAAA,SACrD;AAAA,MAED,4CAAC,gDAAoB,sBAAY,4CAAC,sDAAsB,GAAG;AAAA,OAC5D;AAAA,IACC,aAAa,qCAAoB,aAAa,CAAC,kBAC/C,4CAAC,SAAI,WAAU,uBACd,sDAAC,4CAAiB,GACnB;AAAA,KAEF,GACD;AAEF,CAAC;",
6
- "names": ["DefaultToolbar"]
4
+ "sourcesContent": ["import { useEditor, usePassThroughWheelEvents, useValue } from '@tldraw/editor'\nimport classNames from 'classnames'\nimport { ReactNode, memo, useRef } from 'react'\nimport { PORTRAIT_BREAKPOINT } from '../../constants'\nimport { useBreakpoint } from '../../context/breakpoints'\nimport { useTldrawUiComponents } from '../../context/components'\nimport { useReadonly } from '../../hooks/useReadonly'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { MobileStylePanel } from '../MobileStylePanel'\nimport { TldrawUiOrientationProvider } from '../primitives/layout'\nimport { TldrawUiToolbar } from '../primitives/TldrawUiToolbar'\nimport { DefaultToolbarContent } from './DefaultToolbarContent'\nimport { OverflowingToolbar } from './OverflowingToolbar'\nimport { ToggleToolLockedButton } from './ToggleToolLockedButton'\n\n/** @public */\nexport interface DefaultToolbarProps {\n\tchildren?: ReactNode\n\torientation?: 'horizontal' | 'vertical'\n\tminItems?: number\n\tminSizePx?: number\n\tmaxItems?: number\n\tmaxSizePx?: number\n}\n\n/**\n * The default toolbar for the editor. `children` defaults to the `DefaultToolbarContent` component.\n * Depending on the screen size, the children will overflow into a drop-down menu, with the most\n * recently active item from the overflow being shown in the main toolbar.\n *\n * @public\n * @react\n */\nexport const DefaultToolbar = memo(function DefaultToolbar({\n\tchildren,\n\torientation = 'horizontal',\n\tminItems = 4,\n\tminSizePx = 310,\n\tmaxItems = 8,\n\tmaxSizePx = 470,\n}: DefaultToolbarProps) {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst breakpoint = useBreakpoint()\n\tconst isReadonlyMode = useReadonly()\n\tconst activeToolId = useValue('current tool id', () => editor.getCurrentToolId(), [editor])\n\n\tconst ref = useRef<HTMLDivElement>(null)\n\tusePassThroughWheelEvents(ref)\n\n\tconst { ActionsMenu, QuickActions } = useTldrawUiComponents()\n\n\tconst showQuickActions =\n\t\teditor.options.actionShortcutsLocation === 'menu'\n\t\t\t? false\n\t\t\t: editor.options.actionShortcutsLocation === 'toolbar'\n\t\t\t\t? true\n\t\t\t\t: breakpoint < PORTRAIT_BREAKPOINT.TABLET\n\n\treturn (\n\t\t<TldrawUiOrientationProvider\n\t\t\torientation={orientation}\n\t\t\ttooltipSide={orientation === 'horizontal' ? 'top' : 'right'}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={classNames('tlui-main-toolbar', `tlui-main-toolbar--${orientation}`)}\n\t\t\t>\n\t\t\t\t<div className=\"tlui-main-toolbar__inner\">\n\t\t\t\t\t<div className=\"tlui-main-toolbar__left\">\n\t\t\t\t\t\t{!isReadonlyMode && (\n\t\t\t\t\t\t\t<div className=\"tlui-main-toolbar__extras\">\n\t\t\t\t\t\t\t\t{showQuickActions && (\n\t\t\t\t\t\t\t\t\t<TldrawUiToolbar\n\t\t\t\t\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\t\t\t\t\tclassName=\"tlui-main-toolbar__extras__controls\"\n\t\t\t\t\t\t\t\t\t\tlabel={msg('actions-menu.title')}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{QuickActions && <QuickActions />}\n\t\t\t\t\t\t\t\t\t\t{ActionsMenu && <ActionsMenu />}\n\t\t\t\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<ToggleToolLockedButton activeToolId={activeToolId} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<OverflowingToolbar\n\t\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\t\tsizingParentClassName=\"tlui-main-toolbar\"\n\t\t\t\t\t\t\tminItems={minItems}\n\t\t\t\t\t\t\tmaxItems={maxItems}\n\t\t\t\t\t\t\tminSizePx={minSizePx}\n\t\t\t\t\t\t\tmaxSizePx={maxSizePx}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children ?? <DefaultToolbarContent />}\n\t\t\t\t\t\t</OverflowingToolbar>\n\t\t\t\t\t</div>\n\t\t\t\t\t{breakpoint < PORTRAIT_BREAKPOINT.TABLET_SM && !isReadonlyMode && (\n\t\t\t\t\t\t<div className=\"tlui-main-toolbar__tools tlui-main-toolbar__mobile-style-panel\">\n\t\t\t\t\t\t\t<MobileStylePanel />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</TldrawUiOrientationProvider>\n\t)\n})\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAyES;AAzET,oBAA+D;AAC/D,wBAAuB;AACvB,mBAAwC;AACxC,uBAAoC;AACpC,yBAA8B;AAC9B,wBAAsC;AACtC,yBAA4B;AAC5B,4BAA+B;AAC/B,8BAAiC;AACjC,oBAA4C;AAC5C,6BAAgC;AAChC,mCAAsC;AACtC,gCAAmC;AACnC,oCAAuC;AAoBhC,MAAM,qBAAiB,mBAAK,SAASA,gBAAe;AAAA,EAC1D;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY;AACb,GAAwB;AACvB,QAAM,aAAS,yBAAU;AACzB,QAAM,UAAM,sCAAe;AAC3B,QAAM,iBAAa,kCAAc;AACjC,QAAM,qBAAiB,gCAAY;AACnC,QAAM,mBAAe,wBAAS,mBAAmB,MAAM,OAAO,iBAAiB,GAAG,CAAC,MAAM,CAAC;AAE1F,QAAM,UAAM,qBAAuB,IAAI;AACvC,+CAA0B,GAAG;AAE7B,QAAM,EAAE,aAAa,aAAa,QAAI,yCAAsB;AAE5D,QAAM,mBACL,OAAO,QAAQ,4BAA4B,SACxC,QACA,OAAO,QAAQ,4BAA4B,YAC1C,OACA,aAAa,qCAAoB;AAEtC,SACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,aAAa,gBAAgB,eAAe,QAAQ;AAAA,MAEpD;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA,eAAW,kBAAAC,SAAW,qBAAqB,sBAAsB,WAAW,EAAE;AAAA,UAE9E,uDAAC,SAAI,WAAU,4BACd;AAAA,yDAAC,SAAI,WAAU,2BACb;AAAA,eAAC,kBACD,6CAAC,SAAI,WAAU,6BACb;AAAA,oCACA;AAAA,kBAAC;AAAA;AAAA,oBACA;AAAA,oBACA,WAAU;AAAA,oBACV,OAAO,IAAI,oBAAoB;AAAA,oBAE9B;AAAA,sCAAgB,4CAAC,gBAAa;AAAA,sBAC9B,eAAe,4CAAC,eAAY;AAAA;AAAA;AAAA,gBAC9B;AAAA,gBAED,4CAAC,wDAAuB,cAA4B;AAAA,iBACrD;AAAA,cAED;AAAA,gBAAC;AAAA;AAAA,kBACA;AAAA,kBACA,uBAAsB;AAAA,kBACtB;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBAEC,sBAAY,4CAAC,sDAAsB;AAAA;AAAA,cACrC;AAAA,eACD;AAAA,YACC,aAAa,qCAAoB,aAAa,CAAC,kBAC/C,4CAAC,SAAI,WAAU,kEACd,sDAAC,4CAAiB,GACnB;AAAA,aAEF;AAAA;AAAA,MACD;AAAA;AAAA,EACD;AAEF,CAAC;",
6
+ "names": ["DefaultToolbar", "classNames"]
7
7
  }
@@ -44,6 +44,7 @@ var import_useTranslation = require("../../hooks/useTranslation/useTranslation")
44
44
  var import_TldrawUiButtonIcon = require("../primitives/Button/TldrawUiButtonIcon");
45
45
  var import_TldrawUiPopover = require("../primitives/TldrawUiPopover");
46
46
  var import_TldrawUiToolbar = require("../primitives/TldrawUiToolbar");
47
+ var import_layout = require("../primitives/layout");
47
48
  var import_TldrawUiMenuContext = require("../primitives/menus/TldrawUiMenuContext");
48
49
  const IsInOverflowContext = (0, import_react.createContext)(false);
49
50
  const NUMBERED_SHORTCUT_KEYS = {
@@ -58,55 +59,130 @@ const NUMBERED_SHORTCUT_KEYS = {
58
59
  "9": 8,
59
60
  "0": 9
60
61
  };
61
- function OverflowingToolbar({ children }) {
62
+ function OverflowingToolbar({
63
+ children,
64
+ orientation,
65
+ sizingParentClassName,
66
+ minItems,
67
+ minSizePx,
68
+ maxItems,
69
+ maxSizePx
70
+ }) {
62
71
  const editor = (0, import_editor.useEditor)();
63
72
  const id = (0, import_editor.useUniqueSafeId)();
64
73
  const breakpoint = (0, import_breakpoints.useBreakpoint)();
65
74
  const msg = (0, import_useTranslation.useTranslation)();
66
75
  const rButtons = (0, import_react.useRef)([]);
67
76
  const [isOpen, setIsOpen] = (0, import_react.useState)(false);
68
- const overflowIndex = Math.min(8, 5 + breakpoint);
69
- const [totalItems, setTotalItems] = (0, import_react.useState)(0);
70
77
  const mainToolsRef = (0, import_react.useRef)(null);
78
+ const [overflowTools, setOverflowTools] = (0, import_react.useState)(null);
71
79
  const [lastActiveOverflowItem, setLastActiveOverflowItem] = (0, import_react.useState)(null);
72
- const css = (0, import_react.useMemo)(() => {
73
- const activeCss = lastActiveOverflowItem ? `:not([data-value="${lastActiveOverflowItem}"])` : "";
74
- return `
75
- #${id}_main > *:nth-child(n + ${overflowIndex + (lastActiveOverflowItem ? 1 : 2)})${activeCss} {
76
- display: none;
77
- }
78
- #${id}_more > *:nth-child(-n + ${overflowIndex}) {
79
- display: none;
80
- }
81
- #${id}_more > *:nth-child(-n + ${overflowIndex + 4}) {
82
- margin-top: 0;
83
- }
84
- `;
85
- }, [lastActiveOverflowItem, id, overflowIndex]);
80
+ const [shouldShowOverflow, setShouldShowOverflow] = (0, import_react.useState)(false);
86
81
  const onDomUpdate = (0, import_editor.useEvent)(() => {
87
82
  if (!mainToolsRef.current) return;
88
- const children2 = Array.from(mainToolsRef.current.children);
89
- setTotalItems(children2.length);
90
- const lastActiveElementIdx = children2.findIndex(
91
- (el) => el.getAttribute("data-value") === lastActiveOverflowItem
92
- );
93
- if (lastActiveElementIdx <= overflowIndex) {
94
- setLastActiveOverflowItem(null);
83
+ const sizeProp = orientation === "horizontal" ? "offsetWidth" : "offsetHeight";
84
+ const mainItems = collectItems(mainToolsRef.current.children);
85
+ const overflowItems = overflowTools ? collectItems(overflowTools.children) : null;
86
+ function collectItems(collection) {
87
+ const items = [];
88
+ for (const child of collection) {
89
+ if (child.classList.contains("tlui-main-toolbar__group")) {
90
+ items.push({
91
+ type: "group",
92
+ items: collectItems(child.children),
93
+ element: child
94
+ });
95
+ } else {
96
+ items.push({ type: "item", element: child });
97
+ }
98
+ }
99
+ return items;
95
100
  }
96
- const activeElementIdx = Array.from(mainToolsRef.current.children).findIndex(
97
- (el) => el.getAttribute("aria-pressed") === "true"
101
+ const sizingParent = findParentWithClassName(mainToolsRef.current, sizingParentClassName);
102
+ const size = sizingParent[sizeProp];
103
+ const itemsToShow = Math.floor(
104
+ (0, import_editor.modulate)(size, [minSizePx, maxSizePx], [minItems, maxItems], true)
98
105
  );
99
- if (activeElementIdx === -1) return;
100
- if (activeElementIdx >= overflowIndex) {
101
- setLastActiveOverflowItem(children2[activeElementIdx].getAttribute("data-value"));
102
- }
103
- rButtons.current = Array.from(mainToolsRef.current?.children ?? []).filter(
104
- (el) => {
105
- if (!(el instanceof HTMLElement)) return false;
106
- if (el.tagName.toLowerCase() !== "button") return false;
107
- return !!(el.offsetWidth || el.offsetHeight);
106
+ let mainItemCount = 0;
107
+ let newActiveOverflowItem = null;
108
+ let shouldInvalidateLastActiveOverflowItem = false;
109
+ const numberedButtons = [];
110
+ function visitItems(mainItems2, overflowItems2) {
111
+ if (overflowItems2) (0, import_editor.assert)(mainItems2.length === overflowItems2.length);
112
+ let didShowAnyInMain = false;
113
+ let didShowAnyInOverflow2 = false;
114
+ for (let i = 0; i < mainItems2.length; i++) {
115
+ const mainItem = mainItems2[i];
116
+ const overflowItem = overflowItems2?.[i];
117
+ if (mainItem.type === "item") {
118
+ const isLastActiveOverflowItem = mainItem.element.getAttribute("data-value") === lastActiveOverflowItem;
119
+ let shouldShowInMain;
120
+ if (lastActiveOverflowItem) {
121
+ shouldShowInMain = mainItemCount < itemsToShow || isLastActiveOverflowItem;
122
+ } else {
123
+ shouldShowInMain = mainItemCount <= itemsToShow;
124
+ }
125
+ const shouldShowInOverflow = mainItemCount >= itemsToShow;
126
+ didShowAnyInMain ||= shouldShowInMain;
127
+ didShowAnyInOverflow2 ||= shouldShowInOverflow;
128
+ setAttribute(
129
+ mainItem.element,
130
+ "data-toolbar-visible",
131
+ shouldShowInMain ? "true" : "false"
132
+ );
133
+ if (overflowItem) {
134
+ (0, import_editor.assert)(overflowItem.type === "item");
135
+ setAttribute(
136
+ overflowItem.element,
137
+ "data-toolbar-visible",
138
+ shouldShowInOverflow ? "true" : "false"
139
+ );
140
+ }
141
+ if (shouldShowInOverflow && mainItem.element.getAttribute("aria-pressed") === "true") {
142
+ newActiveOverflowItem = mainItem.element.getAttribute("data-value");
143
+ }
144
+ if (shouldShowInMain && mainItem.element.tagName === "BUTTON") {
145
+ numberedButtons.push(mainItem.element);
146
+ }
147
+ if (!shouldShowInOverflow && isLastActiveOverflowItem) {
148
+ shouldInvalidateLastActiveOverflowItem = true;
149
+ }
150
+ mainItemCount++;
151
+ } else {
152
+ let result, overflowGroup;
153
+ if (overflowItem) {
154
+ (0, import_editor.assert)(overflowItem.type === "group");
155
+ overflowGroup = overflowItem;
156
+ result = visitItems(mainItem.items, overflowGroup.items);
157
+ } else {
158
+ result = visitItems(mainItem.items, null);
159
+ }
160
+ didShowAnyInMain ||= result.didShowAnyInMain;
161
+ didShowAnyInOverflow2 ||= result.didShowAnyInOverflow;
162
+ setAttribute(
163
+ mainItem.element,
164
+ "data-toolbar-visible",
165
+ result.didShowAnyInMain ? "true" : "false"
166
+ );
167
+ if (overflowGroup) {
168
+ setAttribute(
169
+ overflowGroup.element,
170
+ "data-toolbar-visible",
171
+ result.didShowAnyInOverflow ? "true" : "false"
172
+ );
173
+ }
174
+ }
108
175
  }
109
- );
176
+ return { didShowAnyInMain, didShowAnyInOverflow: didShowAnyInOverflow2 };
177
+ }
178
+ const { didShowAnyInOverflow } = visitItems(mainItems, overflowItems);
179
+ setShouldShowOverflow(didShowAnyInOverflow);
180
+ if (newActiveOverflowItem) {
181
+ setLastActiveOverflowItem(newActiveOverflowItem);
182
+ } else if (shouldInvalidateLastActiveOverflowItem) {
183
+ setLastActiveOverflowItem(null);
184
+ }
185
+ rButtons.current = numberedButtons;
110
186
  });
111
187
  (0, import_react.useLayoutEffect)(() => {
112
188
  onDomUpdate();
@@ -117,20 +193,26 @@ function OverflowingToolbar({ children }) {
117
193
  mutationObserver.observe(mainToolsRef.current, {
118
194
  childList: true,
119
195
  subtree: true,
120
- attributeFilter: ["data-value", "aria-pressed"]
196
+ attributes: true,
197
+ characterData: true
121
198
  });
199
+ const sizingParent = findParentWithClassName(mainToolsRef.current, sizingParentClassName);
200
+ const resizeObserver = new ResizeObserver(onDomUpdate);
201
+ resizeObserver.observe(sizingParent);
122
202
  return () => {
123
203
  mutationObserver.disconnect();
204
+ resizeObserver.disconnect();
124
205
  };
125
- }, [onDomUpdate]);
206
+ }, [onDomUpdate, sizingParentClassName]);
126
207
  (0, import_react.useEffect)(() => {
127
208
  if (!editor.options.enableToolbarKeyboardShortcuts) return;
128
209
  function handleKeyDown(event) {
129
210
  if ((0, import_useKeyboardShortcuts.areShortcutsDisabled)(editor) || (0, import_editor.activeElementShouldCaptureKeys)(
130
211
  true
131
212
  /* allow buttons */
132
- ))
213
+ )) {
133
214
  return;
215
+ }
134
216
  if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;
135
217
  const index = NUMBERED_SHORTCUT_KEYS[event.key];
136
218
  if (typeof index === "number") {
@@ -144,49 +226,76 @@ function OverflowingToolbar({ children }) {
144
226
  };
145
227
  }, [editor]);
146
228
  const popoverId = "toolbar overflow";
147
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
148
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("style", { nonce: editor.options.nonce, children: css }),
149
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
150
- import_TldrawUiToolbar.TldrawUiToolbar,
151
- {
152
- className: (0, import_classnames.default)("tlui-toolbar__tools", {
153
- "tlui-toolbar__tools__mobile": breakpoint < import_constants.PORTRAIT_BREAKPOINT.TABLET_SM
154
- }),
155
- label: msg("tool-panel.title"),
156
- children: [
157
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: `${id}_main`, ref: mainToolsRef, className: "tlui-toolbar__tools__list", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "toolbar", sourceId: "toolbar", children }) }),
158
- totalItems > overflowIndex + 1 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(IsInOverflowContext.Provider, { value: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiPopover.TldrawUiPopover, { id: popoverId, open: isOpen, onOpenChange: setIsOpen, children: [
159
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
160
- import_TldrawUiToolbar.TldrawUiToolbarButton,
161
- {
162
- title: msg("tool-panel.more"),
163
- type: "tool",
164
- className: "tlui-toolbar__overflow",
165
- "data-testid": "tools.more-button",
166
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon: "chevron-up" })
167
- }
168
- ) }),
169
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverContent, { side: "top", align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
170
- import_TldrawUiToolbar.TldrawUiToolbar,
171
- {
172
- className: "tlui-buttons__grid",
173
- "data-testid": "tools.more-content",
174
- label: msg("tool-panel.more"),
175
- id: `${id}_more`,
176
- onClick: () => {
177
- import_editor.tlmenus.deleteOpenMenu(popoverId, editor.contextId);
178
- setIsOpen(false);
179
- },
180
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "toolbar-overflow", sourceId: "toolbar", children })
181
- }
182
- ) })
183
- ] }) })
184
- ]
185
- }
186
- )
187
- ] });
229
+ const Layout = orientation === "horizontal" ? import_layout.TldrawUiRow : import_layout.TldrawUiColumn;
230
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
231
+ import_TldrawUiToolbar.TldrawUiToolbar,
232
+ {
233
+ orientation,
234
+ className: (0, import_classnames.default)("tlui-main-toolbar__tools", {
235
+ "tlui-main-toolbar__tools__mobile": breakpoint < import_constants.PORTRAIT_BREAKPOINT.TABLET_SM
236
+ }),
237
+ label: msg("tool-panel.title"),
238
+ children: [
239
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Layout, { id: `${id}_main`, ref: mainToolsRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "toolbar", sourceId: "toolbar", children }) }),
240
+ shouldShowOverflow && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(IsInOverflowContext.Provider, { value: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiPopover.TldrawUiPopover, { id: popoverId, open: isOpen, onOpenChange: setIsOpen, children: [
241
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiPopover.TldrawUiPopoverTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
242
+ import_TldrawUiToolbar.TldrawUiToolbarButton,
243
+ {
244
+ title: msg("tool-panel.more"),
245
+ type: "tool",
246
+ className: "tlui-main-toolbar__overflow",
247
+ "data-testid": "tools.more-button",
248
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
249
+ import_TldrawUiButtonIcon.TldrawUiButtonIcon,
250
+ {
251
+ icon: orientation === "horizontal" ? "chevron-up" : "chevron-right"
252
+ }
253
+ )
254
+ }
255
+ ) }),
256
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
257
+ import_TldrawUiPopover.TldrawUiPopoverContent,
258
+ {
259
+ side: orientation === "horizontal" ? "top" : "right",
260
+ align: orientation === "horizontal" ? "center" : "end",
261
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
262
+ import_TldrawUiToolbar.TldrawUiToolbar,
263
+ {
264
+ orientation: "grid",
265
+ className: "tlui-main-toolbar__overflow-content",
266
+ ref: setOverflowTools,
267
+ "data-testid": "tools.more-content",
268
+ label: msg("tool-panel.more"),
269
+ id: `${id}_more`,
270
+ onClick: () => {
271
+ import_editor.tlmenus.deleteOpenMenu(popoverId, editor.contextId);
272
+ setIsOpen(false);
273
+ },
274
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuContext.TldrawUiMenuContextProvider, { type: "toolbar-overflow", sourceId: "toolbar", children })
275
+ }
276
+ )
277
+ }
278
+ )
279
+ ] }) })
280
+ ]
281
+ }
282
+ ) });
188
283
  }
189
284
  const isActiveTLUiToolItem = (item, activeToolId, geoState) => {
190
285
  return item.meta?.geo ? activeToolId === "geo" && geoState === item.meta?.geo : activeToolId === item.id;
191
286
  };
287
+ function findParentWithClassName(startingElement, className) {
288
+ let element = startingElement;
289
+ while (element) {
290
+ if (element.classList.contains(className)) {
291
+ return element;
292
+ }
293
+ element = element.parentElement;
294
+ }
295
+ throw new Error("Could not find parent with class name " + className);
296
+ }
297
+ function setAttribute(element, name, value) {
298
+ if (element.getAttribute(name) === value) return;
299
+ element.setAttribute(name, value);
300
+ }
192
301
  //# sourceMappingURL=OverflowingToolbar.js.map