kopia lustrzana https://github.com/Tldraw/Tldraw
204 wiersze
4.8 KiB
TypeScript
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>
|
|
)
|
|
}
|