/** * ClipContextMenu - Контекстное меню для клипа на Timeline */ import { Copy, Film, Layers, Scissors, Settings2, Trash2, Volume2 } from "lucide-react" import { useTranslation } from "react-i18next" import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, } from "@/components/ui/context-menu" import { useTimeline } from "../hooks/use-timeline" import { TimelineClip } from "../types" interface ClipContextMenuProps { clip: TimelineClip children: React.ReactNode onShowEffects?: () => void onShowTransitions?: () => void onShowFilters?: () => void } export function ClipContextMenu({ clip, children, onShowEffects, onShowTransitions, onShowFilters, }: ClipContextMenuProps) { const { t } = useTranslation() const { send, copySelection, cutSelection } = useTimeline() const handleCopy = () => { // Выделяем клип если он не выделен if (!clip.isSelected) { send({ type: "SELECT_CLIPS", clipIds: [clip.id], addToSelection: false, }) } copySelection() } const handleCut = () => { // Выделяем клип если он не выделен if (!clip.isSelected) { send({ type: "SELECT_CLIPS", clipIds: [clip.id], addToSelection: false, }) } cutSelection() } const handleSplit = () => { // Разделяем клип в середине const splitTime = clip.startTime + clip.duration / 2 send({ type: "SPLIT_CLIP", clipId: clip.id, splitTime: splitTime, }) } const handleDelete = () => { send({ type: "DELETE_CLIP", clipId: clip.id, }) } return ( {children} {t("timeline.clip.copy", "Копировать")} Ctrl+C {t("timeline.clip.cut", "Вырезать")} Ctrl+X {t("timeline.clip.split", "Разделить")} S {t("timeline.clip.properties", "Свойства")} {t("timeline.clip.effects", "Эффекты")} {clip.effects && clip.effects.length > 0 && ( {clip.effects.length} )} {t("timeline.clip.transitions", "Переходы")} {clip.transitions && clip.transitions.length > 0 && ( {clip.transitions.length} )} {t("timeline.clip.filters", "Фильтры")} {clip.filters && clip.filters.length > 0 && ( {clip.filters.length} )} {t("timeline.clip.volume", "Громкость")} {t("timeline.clip.delete", "Удалить")} Delete ) }