tldraw 3.16.0-canary.6f3aedaa1c01 → 3.16.0-canary.7cd3b8a5bfd6
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.
- package/dist-cjs/index.d.ts +45 -4
- package/dist-cjs/index.js +4 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
- package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
- package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +4 -4
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
- package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
- package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +3 -3
- package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +1 -1
- package/dist-cjs/lib/shapes/shared/ShapeFill.js +1 -1
- package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
- package/dist-cjs/lib/ui/TldrawUi.js +14 -0
- package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +10 -2
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
- package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
- package/dist-cjs/lib/ui/components/MobileStylePanel.js +4 -2
- package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -22
- package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
- package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +188 -78
- package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +15 -3
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +144 -160
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/layout.js +30 -5
- package/dist-cjs/lib/ui/components/primitives/layout.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +1 -18
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +21 -3
- package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
- package/dist-cjs/lib/ui/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-esm/index.d.mts +45 -4
- package/dist-esm/index.mjs +8 -2
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
- package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
- package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +4 -4
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
- package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
- package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -3
- package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs +1 -1
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/ui/TldrawUi.mjs +16 -2
- package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +10 -2
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
- package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
- package/dist-esm/lib/ui/components/MobileStylePanel.mjs +4 -2
- package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -22
- package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -80
- package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +16 -4
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +153 -162
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/layout.mjs +31 -6
- package/dist-esm/lib/ui/components/primitives/layout.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +1 -18
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +22 -3
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +5 -0
- package/src/lib/canvas/TldrawScribble.tsx +1 -1
- package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +12 -4
- package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
- package/src/lib/shapes/image/ImageShapeUtil.tsx +3 -3
- package/src/lib/shapes/shared/ShapeFill.tsx +1 -1
- package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
- package/src/lib/ui/TldrawUi.tsx +17 -2
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +13 -2
- package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
- package/src/lib/ui/components/MobileStylePanel.tsx +4 -3
- package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
- package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -24
- package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +208 -56
- package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +22 -5
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +175 -180
- package/src/lib/ui/components/primitives/layout.tsx +79 -5
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +2 -16
- package/src/lib/ui/hooks/useTools.tsx +25 -3
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +346 -243
- package/tldraw.css +639 -533
|
@@ -224,8 +224,12 @@ export class FrameShapeUtil extends BaseBoxShapeUtil<TLFrameShape> {
|
|
|
224
224
|
const colorToUse = showFrameColors ? shape.props.color : 'black'
|
|
225
225
|
const frameFill = getColorValue(theme, colorToUse, 'frameFill')
|
|
226
226
|
const frameStroke = getColorValue(theme, colorToUse, 'frameStroke')
|
|
227
|
-
const frameHeadingStroke =
|
|
228
|
-
|
|
227
|
+
const frameHeadingStroke = showFrameColors
|
|
228
|
+
? getColorValue(theme, colorToUse, 'frameHeadingStroke')
|
|
229
|
+
: theme.background
|
|
230
|
+
const frameHeadingFill = showFrameColors
|
|
231
|
+
? getColorValue(theme, colorToUse, 'frameHeadingFill')
|
|
232
|
+
: theme.background
|
|
229
233
|
const frameHeadingText = getColorValue(theme, colorToUse, 'frameText')
|
|
230
234
|
|
|
231
235
|
return (
|
|
@@ -280,8 +284,12 @@ export class FrameShapeUtil extends BaseBoxShapeUtil<TLFrameShape> {
|
|
|
280
284
|
const colorToUse = showFrameColors ? shape.props.color : 'black'
|
|
281
285
|
const frameFill = getColorValue(theme, colorToUse, 'frameFill')
|
|
282
286
|
const frameStroke = getColorValue(theme, colorToUse, 'frameStroke')
|
|
283
|
-
const frameHeadingStroke =
|
|
284
|
-
|
|
287
|
+
const frameHeadingStroke = showFrameColors
|
|
288
|
+
? getColorValue(theme, colorToUse, 'frameHeadingStroke')
|
|
289
|
+
: theme.background
|
|
290
|
+
const frameHeadingFill = showFrameColors
|
|
291
|
+
? getColorValue(theme, colorToUse, 'frameHeadingFill')
|
|
292
|
+
: theme.background
|
|
285
293
|
const frameHeadingText = getColorValue(theme, colorToUse, 'frameText')
|
|
286
294
|
|
|
287
295
|
return (
|
|
@@ -64,7 +64,7 @@ export const FrameHeading = memo(function FrameHeading({
|
|
|
64
64
|
overflow: isEditing ? 'visible' : 'hidden',
|
|
65
65
|
maxWidth: `calc(var(--tl-zoom) * ${
|
|
66
66
|
side === 0 || side === 2 ? Math.ceil(width) : Math.ceil(height)
|
|
67
|
-
}px + ${showColors ? '0px' : 'var(--frame-offset-width)'})`,
|
|
67
|
+
}px + ${showColors ? '0px' : 'var(--tl-frame-offset-width)'})`,
|
|
68
68
|
bottom: '100%',
|
|
69
69
|
transform: `${translation} scale(var(--tl-scale)) translateX(${offsetX}px)`,
|
|
70
70
|
}}
|
|
@@ -314,9 +314,9 @@ const ImageShape = memo(function ImageShape({ shape }: { shape: TLImageShape })
|
|
|
314
314
|
overflow: 'hidden',
|
|
315
315
|
width: shape.props.w,
|
|
316
316
|
height: shape.props.h,
|
|
317
|
-
color: 'var(--color-text-3)',
|
|
318
|
-
backgroundColor: 'var(--color-low)',
|
|
319
|
-
border: '1px solid var(--color-low-border)',
|
|
317
|
+
color: 'var(--tl-color-text-3)',
|
|
318
|
+
backgroundColor: 'var(--tl-color-low)',
|
|
319
|
+
border: '1px solid var(--tl-color-low-border)',
|
|
320
320
|
}}
|
|
321
321
|
>
|
|
322
322
|
<div
|
|
@@ -33,7 +33,7 @@ export const ShapeFill = React.memo(function ShapeFill({
|
|
|
33
33
|
return <path fill={getColorValue(theme, color, 'semi')} d={d} />
|
|
34
34
|
}
|
|
35
35
|
case 'semi': {
|
|
36
|
-
return <path fill={
|
|
36
|
+
return <path fill={theme.solid} d={d} />
|
|
37
37
|
}
|
|
38
38
|
case 'fill': {
|
|
39
39
|
return <path fill={getColorValue(theme, color, 'fill')} d={d} />
|
|
@@ -142,9 +142,9 @@ const VideoShape = memo(function VideoShape({ shape }: { shape: TLVideoShape })
|
|
|
142
142
|
<HTMLContainer
|
|
143
143
|
id={shape.id}
|
|
144
144
|
style={{
|
|
145
|
-
color: 'var(--color-text-3)',
|
|
146
|
-
backgroundColor: asset ? 'transparent' : 'var(--color-low)',
|
|
147
|
-
border: asset ? 'none' : '1px solid var(--color-low-border)',
|
|
145
|
+
color: 'var(--tl-color-text-3)',
|
|
146
|
+
backgroundColor: asset ? 'transparent' : 'var(--tl-color-low)',
|
|
147
|
+
border: asset ? 'none' : '1px solid var(--tl-color-low-border)',
|
|
148
148
|
}}
|
|
149
149
|
>
|
|
150
150
|
<div className="tl-counter-scaled">
|
package/src/lib/ui/TldrawUi.tsx
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { tlenv, useEditor, useReactor, useValue } from '@tldraw/editor'
|
|
2
2
|
import classNames from 'classnames'
|
|
3
|
-
import React, { ReactNode, useRef, useState } from 'react'
|
|
3
|
+
import React, { ReactNode, useMemo, useRef, useState } from 'react'
|
|
4
4
|
import { TLUiAssetUrlOverrides } from './assetUrls'
|
|
5
5
|
import { SkipToMainContent } from './components/A11y'
|
|
6
6
|
import { FollowingIndicator } from './components/FollowingIndicator'
|
|
7
7
|
import { TldrawUiButton } from './components/primitives/Button/TldrawUiButton'
|
|
8
8
|
import { TldrawUiButtonIcon } from './components/primitives/Button/TldrawUiButtonIcon'
|
|
9
|
-
import { PORTRAIT_BREAKPOINT } from './constants'
|
|
9
|
+
import { PORTRAIT_BREAKPOINT, PORTRAIT_BREAKPOINTS } from './constants'
|
|
10
10
|
import {
|
|
11
11
|
TLUiContextProviderProps,
|
|
12
12
|
TldrawUiContextProvider,
|
|
@@ -160,6 +160,19 @@ const TldrawUiContent = React.memo(function TldrawUI() {
|
|
|
160
160
|
|
|
161
161
|
const { 'toggle-focus-mode': toggleFocus } = useActions()
|
|
162
162
|
|
|
163
|
+
const { breakpointsAbove, breakpointsBelow } = useMemo(() => {
|
|
164
|
+
const breakpointsAbove = []
|
|
165
|
+
const breakpointsBelow = []
|
|
166
|
+
for (let bp = 0; bp < PORTRAIT_BREAKPOINTS.length; bp++) {
|
|
167
|
+
if (bp <= breakpoint) {
|
|
168
|
+
breakpointsAbove.push(bp)
|
|
169
|
+
} else {
|
|
170
|
+
breakpointsBelow.push(bp)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { breakpointsAbove, breakpointsBelow }
|
|
174
|
+
}, [breakpoint])
|
|
175
|
+
|
|
163
176
|
return (
|
|
164
177
|
<div
|
|
165
178
|
className={classNames('tlui-layout', {
|
|
@@ -169,6 +182,8 @@ const TldrawUiContent = React.memo(function TldrawUI() {
|
|
|
169
182
|
// But when the virtual keyboard is closing we want to wait a bit before showing it again.
|
|
170
183
|
data-iseditinganything={hideToolbarWhileEditing}
|
|
171
184
|
data-breakpoint={breakpoint}
|
|
185
|
+
data-breakpoints-above={breakpointsAbove.join(' ')}
|
|
186
|
+
data-breakpoints-below={breakpointsBelow.join(' ')}
|
|
172
187
|
>
|
|
173
188
|
<SkipToMainContent />
|
|
174
189
|
{isFocusMode ? (
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
TldrawUiPopoverTrigger,
|
|
12
12
|
} from '../primitives/TldrawUiPopover'
|
|
13
13
|
import { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'
|
|
14
|
+
import { useTldrawUiOrientation } from '../primitives/layout'
|
|
14
15
|
import { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext'
|
|
15
16
|
import { DefaultActionsMenuContent } from './DefaultActionsMenuContent'
|
|
16
17
|
|
|
@@ -26,6 +27,7 @@ export const DefaultActionsMenu = memo(function DefaultActionsMenu({
|
|
|
26
27
|
const msg = useTranslation()
|
|
27
28
|
const breakpoint = useBreakpoint()
|
|
28
29
|
const isReadonlyMode = useReadonly()
|
|
30
|
+
const { orientation } = useTldrawUiOrientation()
|
|
29
31
|
|
|
30
32
|
const ref = useRef<HTMLDivElement>(null)
|
|
31
33
|
usePassThroughWheelEvents(ref)
|
|
@@ -52,11 +54,20 @@ export const DefaultActionsMenu = memo(function DefaultActionsMenu({
|
|
|
52
54
|
data-testid="actions-menu.button"
|
|
53
55
|
title={msg('actions-menu.title')}
|
|
54
56
|
>
|
|
55
|
-
<TldrawUiButtonIcon
|
|
57
|
+
<TldrawUiButtonIcon
|
|
58
|
+
icon={orientation === 'horizontal' ? 'dots-vertical' : 'dots-horizontal'}
|
|
59
|
+
small
|
|
60
|
+
/>
|
|
56
61
|
</TldrawUiToolbarButton>
|
|
57
62
|
</TldrawUiPopoverTrigger>
|
|
58
63
|
<TldrawUiPopoverContent
|
|
59
|
-
side={
|
|
64
|
+
side={
|
|
65
|
+
orientation === 'horizontal'
|
|
66
|
+
? breakpoint >= PORTRAIT_BREAKPOINT.TABLET
|
|
67
|
+
? 'bottom'
|
|
68
|
+
: 'top'
|
|
69
|
+
: 'right'
|
|
70
|
+
}
|
|
60
71
|
sideOffset={6}
|
|
61
72
|
>
|
|
62
73
|
<TldrawUiToolbar
|
|
@@ -46,10 +46,10 @@ export class MinimapManager {
|
|
|
46
46
|
const style = getComputedStyle(this.editor.getContainer())
|
|
47
47
|
|
|
48
48
|
return {
|
|
49
|
-
shapeFill: getRgba(style.getPropertyValue('--color-text-3').trim()),
|
|
50
|
-
selectFill: getRgba(style.getPropertyValue('--color-selected').trim()),
|
|
51
|
-
viewportFill: getRgba(style.getPropertyValue('--color-muted-1').trim()),
|
|
52
|
-
background: getRgba(style.getPropertyValue('--color-low').trim()),
|
|
49
|
+
shapeFill: getRgba(style.getPropertyValue('--tl-color-text-3').trim()),
|
|
50
|
+
selectFill: getRgba(style.getPropertyValue('--tl-color-selected').trim()),
|
|
51
|
+
viewportFill: getRgba(style.getPropertyValue('--tl-color-muted-1').trim()),
|
|
52
|
+
background: getRgba(style.getPropertyValue('--tl-color-low').trim()),
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -17,12 +17,13 @@ import {
|
|
|
17
17
|
TldrawUiPopoverContent,
|
|
18
18
|
TldrawUiPopoverTrigger,
|
|
19
19
|
} from './primitives/TldrawUiPopover'
|
|
20
|
+
import { useTldrawUiOrientation } from './primitives/layout'
|
|
20
21
|
|
|
21
22
|
/** @public @react */
|
|
22
23
|
export function MobileStylePanel() {
|
|
23
24
|
const editor = useEditor()
|
|
24
25
|
const msg = useTranslation()
|
|
25
|
-
|
|
26
|
+
const { orientation } = useTldrawUiOrientation()
|
|
26
27
|
const relevantStyles = useRelevantStyles()
|
|
27
28
|
const color = relevantStyles?.get(DefaultColorStyle)
|
|
28
29
|
const theme = getDefaultColorTheme({ isDarkMode: editor.user.getIsDarkMode() })
|
|
@@ -56,7 +57,7 @@ export function MobileStylePanel() {
|
|
|
56
57
|
type="tool"
|
|
57
58
|
data-testid="mobile-styles.button"
|
|
58
59
|
style={{
|
|
59
|
-
color: disableStylePanel ? 'var(--color-muted-1)' : currentColor,
|
|
60
|
+
color: disableStylePanel ? 'var(--tl-color-muted-1)' : currentColor,
|
|
60
61
|
}}
|
|
61
62
|
title={msg('style-panel.title')}
|
|
62
63
|
disabled={disableStylePanel}
|
|
@@ -66,7 +67,7 @@ export function MobileStylePanel() {
|
|
|
66
67
|
/>
|
|
67
68
|
</TldrawUiButton>
|
|
68
69
|
</TldrawUiPopoverTrigger>
|
|
69
|
-
<TldrawUiPopoverContent side=
|
|
70
|
+
<TldrawUiPopoverContent side={orientation === 'horizontal' ? 'top' : 'right'} align="end">
|
|
70
71
|
{StylePanel && <StylePanel isMobile />}
|
|
71
72
|
</TldrawUiPopoverContent>
|
|
72
73
|
</TldrawUiPopover>
|
|
@@ -272,7 +272,7 @@ export const DefaultImageToolbarContent = track(function DefaultImageToolbarCont
|
|
|
272
272
|
type="icon"
|
|
273
273
|
onClick={onManipulatingEnd}
|
|
274
274
|
data-testid="tool.image-confirm"
|
|
275
|
-
style={{ borderLeft: '1px solid var(--color-divider)', marginLeft: '2px' }}
|
|
275
|
+
style={{ borderLeft: '1px solid var(--tl-color-divider)', marginLeft: '2px' }}
|
|
276
276
|
>
|
|
277
277
|
<TldrawUiButtonIcon small icon="check" />
|
|
278
278
|
</TldrawUiButton>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useEditor, usePassThroughWheelEvents, useValue } from '@tldraw/editor'
|
|
2
|
+
import classNames from 'classnames'
|
|
2
3
|
import { ReactNode, memo, useRef } from 'react'
|
|
3
4
|
import { PORTRAIT_BREAKPOINT } from '../../constants'
|
|
4
5
|
import { useBreakpoint } from '../../context/breakpoints'
|
|
@@ -6,6 +7,7 @@ import { useTldrawUiComponents } from '../../context/components'
|
|
|
6
7
|
import { useReadonly } from '../../hooks/useReadonly'
|
|
7
8
|
import { useTranslation } from '../../hooks/useTranslation/useTranslation'
|
|
8
9
|
import { MobileStylePanel } from '../MobileStylePanel'
|
|
10
|
+
import { TldrawUiOrientationProvider } from '../primitives/layout'
|
|
9
11
|
import { TldrawUiToolbar } from '../primitives/TldrawUiToolbar'
|
|
10
12
|
import { DefaultToolbarContent } from './DefaultToolbarContent'
|
|
11
13
|
import { OverflowingToolbar } from './OverflowingToolbar'
|
|
@@ -14,6 +16,11 @@ import { ToggleToolLockedButton } from './ToggleToolLockedButton'
|
|
|
14
16
|
/** @public */
|
|
15
17
|
export interface DefaultToolbarProps {
|
|
16
18
|
children?: ReactNode
|
|
19
|
+
orientation?: 'horizontal' | 'vertical'
|
|
20
|
+
minItems?: number
|
|
21
|
+
minSizePx?: number
|
|
22
|
+
maxItems?: number
|
|
23
|
+
maxSizePx?: number
|
|
17
24
|
}
|
|
18
25
|
|
|
19
26
|
/**
|
|
@@ -24,7 +31,14 @@ export interface DefaultToolbarProps {
|
|
|
24
31
|
* @public
|
|
25
32
|
* @react
|
|
26
33
|
*/
|
|
27
|
-
export const DefaultToolbar = memo(function DefaultToolbar({
|
|
34
|
+
export const DefaultToolbar = memo(function DefaultToolbar({
|
|
35
|
+
children,
|
|
36
|
+
orientation = 'horizontal',
|
|
37
|
+
minItems = 4,
|
|
38
|
+
minSizePx = 310,
|
|
39
|
+
maxItems = 8,
|
|
40
|
+
maxSizePx = 470,
|
|
41
|
+
}: DefaultToolbarProps) {
|
|
28
42
|
const editor = useEditor()
|
|
29
43
|
const msg = useTranslation()
|
|
30
44
|
const breakpoint = useBreakpoint()
|
|
@@ -44,32 +58,49 @@ export const DefaultToolbar = memo(function DefaultToolbar({ children }: Default
|
|
|
44
58
|
: breakpoint < PORTRAIT_BREAKPOINT.TABLET
|
|
45
59
|
|
|
46
60
|
return (
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
<TldrawUiOrientationProvider
|
|
62
|
+
orientation={orientation}
|
|
63
|
+
tooltipSide={orientation === 'horizontal' ? 'top' : 'right'}
|
|
64
|
+
>
|
|
65
|
+
<div
|
|
66
|
+
ref={ref}
|
|
67
|
+
className={classNames('tlui-main-toolbar', `tlui-main-toolbar--${orientation}`)}
|
|
68
|
+
>
|
|
69
|
+
<div className="tlui-main-toolbar__inner">
|
|
70
|
+
<div className="tlui-main-toolbar__left">
|
|
71
|
+
{!isReadonlyMode && (
|
|
72
|
+
<div className="tlui-main-toolbar__extras">
|
|
73
|
+
{showQuickActions && (
|
|
74
|
+
<TldrawUiToolbar
|
|
75
|
+
orientation={orientation}
|
|
76
|
+
className="tlui-main-toolbar__extras__controls"
|
|
77
|
+
label={msg('actions-menu.title')}
|
|
78
|
+
>
|
|
79
|
+
{QuickActions && <QuickActions />}
|
|
80
|
+
{ActionsMenu && <ActionsMenu />}
|
|
81
|
+
</TldrawUiToolbar>
|
|
82
|
+
)}
|
|
83
|
+
<ToggleToolLockedButton activeToolId={activeToolId} />
|
|
84
|
+
</div>
|
|
85
|
+
)}
|
|
86
|
+
<OverflowingToolbar
|
|
87
|
+
orientation={orientation}
|
|
88
|
+
sizingParentClassName="tlui-main-toolbar"
|
|
89
|
+
minItems={minItems}
|
|
90
|
+
maxItems={maxItems}
|
|
91
|
+
minSizePx={minSizePx}
|
|
92
|
+
maxSizePx={maxSizePx}
|
|
93
|
+
>
|
|
94
|
+
{children ?? <DefaultToolbarContent />}
|
|
95
|
+
</OverflowingToolbar>
|
|
96
|
+
</div>
|
|
97
|
+
{breakpoint < PORTRAIT_BREAKPOINT.TABLET_SM && !isReadonlyMode && (
|
|
98
|
+
<div className="tlui-main-toolbar__tools tlui-main-toolbar__mobile-style-panel">
|
|
99
|
+
<MobileStylePanel />
|
|
63
100
|
</div>
|
|
64
101
|
)}
|
|
65
|
-
<OverflowingToolbar>{children ?? <DefaultToolbarContent />}</OverflowingToolbar>
|
|
66
102
|
</div>
|
|
67
|
-
{breakpoint < PORTRAIT_BREAKPOINT.TABLET_SM && !isReadonlyMode && (
|
|
68
|
-
<div className="tlui-main-toolbar__tools">
|
|
69
|
-
<MobileStylePanel />
|
|
70
|
-
</div>
|
|
71
|
-
)}
|
|
72
103
|
</div>
|
|
73
|
-
</
|
|
104
|
+
</TldrawUiOrientationProvider>
|
|
74
105
|
)
|
|
75
106
|
})
|