mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-10-06 02:47:54 +00:00
75 lines
1.7 KiB
TypeScript
75 lines
1.7 KiB
TypeScript
'use client';
|
|
|
|
import React from 'react';
|
|
|
|
import type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';
|
|
|
|
import {
|
|
useAlignDropdownMenu,
|
|
useAlignDropdownMenuState,
|
|
} from '@udecode/plate-alignment/react';
|
|
import {
|
|
AlignCenterIcon,
|
|
AlignJustifyIcon,
|
|
AlignLeftIcon,
|
|
AlignRightIcon,
|
|
} from 'lucide-react';
|
|
|
|
import {
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuRadioGroup,
|
|
DropdownMenuRadioItem,
|
|
DropdownMenuTrigger,
|
|
useOpenState,
|
|
} from './dropdown-menu';
|
|
import { ToolbarButton } from './toolbar';
|
|
|
|
const items = [
|
|
{
|
|
icon: AlignLeftIcon,
|
|
value: 'left',
|
|
},
|
|
{
|
|
icon: AlignCenterIcon,
|
|
value: 'center',
|
|
},
|
|
{
|
|
icon: AlignRightIcon,
|
|
value: 'right',
|
|
},
|
|
{
|
|
icon: AlignJustifyIcon,
|
|
value: 'justify',
|
|
},
|
|
];
|
|
|
|
export function AlignDropdownMenu({ children, ...props }: DropdownMenuProps) {
|
|
const state = useAlignDropdownMenuState();
|
|
const { radioGroupProps } = useAlignDropdownMenu(state);
|
|
|
|
const openState = useOpenState();
|
|
const IconValue =
|
|
items.find((item) => item.value === radioGroupProps.value)?.icon ??
|
|
AlignLeftIcon;
|
|
|
|
return (
|
|
<DropdownMenu modal={false} {...openState} {...props}>
|
|
<DropdownMenuTrigger asChild>
|
|
<ToolbarButton pressed={openState.open} tooltip="Align" isDropdown>
|
|
<IconValue />
|
|
</ToolbarButton>
|
|
</DropdownMenuTrigger>
|
|
|
|
<DropdownMenuContent className="min-w-0" align="start">
|
|
<DropdownMenuRadioGroup {...radioGroupProps}>
|
|
{items.map(({ icon: Icon, value: itemValue }) => (
|
|
<DropdownMenuRadioItem key={itemValue} value={itemValue} hideIcon>
|
|
<Icon />
|
|
</DropdownMenuRadioItem>
|
|
))}
|
|
</DropdownMenuRadioGroup>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
);
|
|
}
|