import { IconFile, IconFolder, IconFileText, IconCheckbox, IconMail, IconUser, IconPresentation, IconStack2, IconMessageChatbot, } from "@tabler/icons-react"; import { mergeAttributes, Node } from "@tiptap/core"; import { NodeViewWrapper, ReactNodeViewRenderer } from "@tiptap/react"; const iconProps = { size: 14, className: "shrink-0 text-muted-foreground" }; function MentionIcon({ icon }: { icon?: string }) { switch (icon) { case "folder": return ; case "document": return ; case "form": return ; case "email": return ; case "user": return ; case "deck": return ; case "agent": return ; case "file": return ; default: return ; } } const MentionReferenceComponent = ({ node }: { node: any }) => { return ( {node.attrs.label} ); }; export const MentionReference = Node.create({ name: "mentionReference", group: "inline", inline: true, selectable: true, atom: true, addAttributes() { return { label: { default: null }, icon: { default: "file" }, source: { default: "" }, refType: { default: "file" }, refId: { default: null }, refPath: { default: null }, slotKey: { default: null }, slotLabel: { default: null }, metadata: { default: null }, }; }, parseHTML() { return [{ tag: 'span[data-type="mention-reference"]' }]; }, renderHTML({ HTMLAttributes }) { return [ "span", mergeAttributes({ "data-type": "mention-reference" }, HTMLAttributes), ]; }, renderText({ node }) { return `@${node.attrs.label}`; }, addNodeView() { return ReactNodeViewRenderer(MentionReferenceComponent); }, });