Files
kandev/apps/web/components/task/chat/slash-command-menu.tsx
T
2026-02-01 01:20:13 +00:00

55 lines
1.3 KiB
TypeScript

'use client';
import { IconRobot } from '@tabler/icons-react';
import type { SlashCommand } from '@/hooks/use-inline-slash';
import { PopupMenu, PopupMenuItem, useMenuItemRefs } from './popup-menu';
type SlashCommandMenuProps = {
isOpen: boolean;
position: { x: number; y: number } | null;
commands: SlashCommand[];
selectedIndex: number;
onSelect: (command: SlashCommand) => void;
onClose: () => void;
setSelectedIndex: (index: number) => void;
};
export function SlashCommandMenu({
isOpen,
position,
commands,
selectedIndex,
onSelect,
onClose,
setSelectedIndex,
}: SlashCommandMenuProps) {
const { setItemRef } = useMenuItemRefs(selectedIndex);
if (commands.length === 0) {
return null;
}
return (
<PopupMenu
isOpen={isOpen}
position={position}
title="Commands"
selectedIndex={selectedIndex}
onClose={onClose}
>
{commands.map((command, index) => (
<PopupMenuItem
key={command.id}
icon={<IconRobot className="h-4 w-4" />}
label={command.label}
description={command.description}
isSelected={selectedIndex === index}
onClick={() => onSelect(command)}
onMouseEnter={() => setSelectedIndex(index)}
itemRef={setItemRef(index)}
/>
))}
</PopupMenu>
);
}