"use client"; import { Node, mergeAttributes } from "@tiptap/core"; import { NodeViewWrapper, ReactNodeViewRenderer, type ReactNodeViewProps } from "@tiptap/react"; import { IconX } from "@tabler/icons-react"; import { useTranslation } from "react-i18next"; import { PromptMentionChip } from "@/components/task/chat/messages/prompt-mention-components"; import { useTouchDrawer } from "@/hooks/use-compact-task-chrome"; import { useResponsiveBreakpoint } from "@/hooks/use-responsive-breakpoint"; import { cn } from "@/lib/utils"; export type TaskPromptReferenceAttrs = { name: string; value: string; }; export const TaskPromptReference = Node.create({ name: "promptReference", group: "inline", inline: true, atom: true, selectable: true, addAttributes() { return { name: { default: "" }, value: { default: "" }, }; }, parseHTML() { return [{ tag: "span[data-task-prompt-reference]" }]; }, renderHTML({ HTMLAttributes }) { return [ "span", mergeAttributes({ "data-task-prompt-reference": "" }, HTMLAttributes), HTMLAttributes.value || HTMLAttributes.name || "", ]; }, renderText({ node }) { return String(node.attrs.value || node.attrs.name || ""); }, addNodeView() { return ReactNodeViewRenderer(TaskPromptReferenceView); }, }); function TaskPromptReferenceView({ node, deleteNode }: ReactNodeViewProps) { const { t } = useTranslation(); const usesTouchDrawer = useTouchDrawer(); const { isMobile } = useResponsiveBreakpoint(); const usesTouchTarget = isMobile || usesTouchDrawer; const attrs = node.attrs as TaskPromptReferenceAttrs; const removeLabel = t("task:removeLabeled", { label: attrs.value }); return ( ); }