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);
},
});