Tldraw/packages/tldraw/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx

204 wiersze
4.8 KiB
TypeScript

import { useEditor, useValue } from '@tldraw/editor'
import { useActions } from '../../context/actions'
import { useCanRedo, useCanUndo } from '../../hooks/menu-hooks'
import { LanguageMenu } from '../LanguageMenu'
import {
ClipboardMenuGroup,
ConversionsMenuGroup,
EditLinkMenuItem,
EmbedsGroup,
FitFrameToContentMenuItem,
GroupMenuItem,
RemoveFrameMenuItem,
SetSelectionGroup,
ToggleAutoSizeMenuItem,
ToggleDarkModeItem,
ToggleDebugModeItem,
ToggleEdgeScrollingItem,
ToggleFocusModeItem,
ToggleGridItem,
ToggleLockMenuItem,
ToggleReduceMotionItem,
ToggleSnapModeItem,
ToggleToolLockItem,
ToggleTransparentBgMenuItem,
ToggleWrapModeItem,
UngroupMenuItem,
UnlockAllMenuItem,
ZoomTo100MenuItem,
ZoomToFitMenuItem,
ZoomToSelectionMenuItem,
} from '../menu-items'
import { TldrawUiMenuGroup } from '../primitives/menus/TldrawUiMenuGroup'
import { TldrawUiMenuItem } from '../primitives/menus/TldrawUiMenuItem'
import { TldrawUiMenuSubmenu } from '../primitives/menus/TldrawUiMenuSubmenu'
/** @public */
export function DefaultMainMenuContent() {
return (
<>
<EditSubmenu />
<ShapeSubmenu />
<ViewSubmenu />
<ExtrasGroup />
<PreferencesGroup />
</>
)
}
/** @public */
export function ExportFileContentSubMenu() {
const actions = useActions()
return (
<TldrawUiMenuSubmenu id="export-all-as" label="context-menu.export-all-as" size="small">
<TldrawUiMenuGroup id="export-all-as-group">
<TldrawUiMenuItem {...actions['export-all-as-svg']} />
<TldrawUiMenuItem {...actions['export-all-as-png']} />
<TldrawUiMenuItem {...actions['export-all-as-json']} />
</TldrawUiMenuGroup>
<TldrawUiMenuGroup id="export-all-as-bg">
<ToggleTransparentBgMenuItem />
</TldrawUiMenuGroup>
</TldrawUiMenuSubmenu>
)
}
/** @public */
export function EditSubmenu() {
const editor = useEditor()
const selectToolActive = useValue(
'isSelectToolActive',
() => editor.getCurrentToolId() === 'select',
[editor]
)
return (
<TldrawUiMenuSubmenu id="edit" label="menu.edit" disabled={!selectToolActive}>
<UndoRedoGroup />
<ClipboardMenuGroup />
<SetSelectionGroup />
</TldrawUiMenuSubmenu>
)
}
/** @public */
export function ShapeSubmenu() {
const editor = useEditor()
const selectToolActive = useValue(
'isSelectToolActive',
() => editor.getCurrentToolId() === 'select',
[editor]
)
return (
<TldrawUiMenuSubmenu id="shape" label="menu.shape" disabled={!selectToolActive}>
<ConversionsMenuGroup />
<MultiShapeMenuGroup />
<MiscMenuGroup />
<EmbedsGroup />
<LockGroup />
</TldrawUiMenuSubmenu>
)
}
/** @public */
export function MiscMenuGroup() {
return (
<TldrawUiMenuGroup id="misc">
<ToggleAutoSizeMenuItem />
<EditLinkMenuItem />
</TldrawUiMenuGroup>
)
}
/** @public */
export function LockGroup() {
return (
<TldrawUiMenuGroup id="lock">
<ToggleLockMenuItem />
<UnlockAllMenuItem />
</TldrawUiMenuGroup>
)
}
/** @public */
export function MultiShapeMenuGroup() {
return (
<TldrawUiMenuGroup id="multi-shape">
<GroupMenuItem />
<UngroupMenuItem />
<RemoveFrameMenuItem />
<FitFrameToContentMenuItem />
</TldrawUiMenuGroup>
)
}
/** @public */
export function UndoRedoGroup() {
const actions = useActions()
const canUndo = useCanUndo()
const canRedo = useCanRedo()
return (
<TldrawUiMenuGroup id="undo-redo">
<TldrawUiMenuItem {...actions['undo']} disabled={!canUndo} />
<TldrawUiMenuItem {...actions['redo']} disabled={!canRedo} />
</TldrawUiMenuGroup>
)
}
/** @public */
export function ViewSubmenu() {
const actions = useActions()
return (
<TldrawUiMenuSubmenu id="view" label="menu.view">
<TldrawUiMenuGroup id="view-actions">
<TldrawUiMenuItem {...actions['zoom-in']} />
<TldrawUiMenuItem {...actions['zoom-out']} />
<ZoomTo100MenuItem />
<ZoomToFitMenuItem />
<ZoomToSelectionMenuItem />
</TldrawUiMenuGroup>
</TldrawUiMenuSubmenu>
)
}
/** @public */
export function ExtrasGroup() {
const actions = useActions()
return (
<TldrawUiMenuGroup id="extras">
<TldrawUiMenuItem {...actions['insert-embed']} />
<TldrawUiMenuItem {...actions['insert-media']} />
</TldrawUiMenuGroup>
)
}
/* ------------------- Preferences ------------------ */
/** @public */
export function PreferencesGroup() {
return (
<TldrawUiMenuGroup id="preferences">
<TldrawUiMenuSubmenu id="preferences" label="menu.preferences">
<TldrawUiMenuGroup id="preferences-actions">
<ToggleSnapModeItem />
<ToggleToolLockItem />
<ToggleGridItem />
<ToggleWrapModeItem />
<ToggleDarkModeItem />
<ToggleFocusModeItem />
<ToggleEdgeScrollingItem />
<ToggleReduceMotionItem />
<ToggleDebugModeItem />
</TldrawUiMenuGroup>
<TldrawUiMenuGroup id="language">
<LanguageMenu />
</TldrawUiMenuGroup>
</TldrawUiMenuSubmenu>
</TldrawUiMenuGroup>
)
}