diff --git a/docs/src/demos/Nodes/Mention/index.spec.js b/docs/src/demos/Nodes/Mention/index.spec.js
new file mode 100644
index 00000000..773694f9
--- /dev/null
+++ b/docs/src/demos/Nodes/Mention/index.spec.js
@@ -0,0 +1,5 @@
+context('/api/nodes/mention', () => {
+ before(() => {
+ cy.visit('/api/nodes/mention')
+ })
+})
diff --git a/docs/src/demos/Nodes/Mention/index.vue b/docs/src/demos/Nodes/Mention/index.vue
new file mode 100644
index 00000000..a13fd656
--- /dev/null
+++ b/docs/src/demos/Nodes/Mention/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
diff --git a/docs/src/docPages/api/nodes/mention.md b/docs/src/docPages/api/nodes/mention.md
new file mode 100644
index 00000000..3d15ae56
--- /dev/null
+++ b/docs/src/docPages/api/nodes/mention.md
@@ -0,0 +1,16 @@
+# Mention
+
+## Installation
+```bash
+# with npm
+npm install @tiptap/extension-mention
+
+# with Yarn
+yarn add @tiptap/extension-mention
+```
+
+## Source code
+[packages/extension-mention/](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-mention/)
+
+## Usage
+
diff --git a/docs/src/links.yaml b/docs/src/links.yaml
index 44c3b57d..c61c1d4f 100644
--- a/docs/src/links.yaml
+++ b/docs/src/links.yaml
@@ -91,6 +91,9 @@
link: /api/nodes/image
- title: ListItem
link: /api/nodes/list-item
+ - title: Mention
+ link: /api/nodes/mention
+ draft: true
- title: OrderedList
link: /api/nodes/ordered-list
- title: Paragraph
diff --git a/packages/extension-mention/README.md b/packages/extension-mention/README.md
new file mode 100644
index 00000000..e4452298
--- /dev/null
+++ b/packages/extension-mention/README.md
@@ -0,0 +1,14 @@
+# @tiptap/extension-mention
+[](https://www.npmjs.com/package/@tiptap/extension-mention)
+[](https://npmcharts.com/compare/tiptap?minimal=true)
+[](https://www.npmjs.com/package/@tiptap/extension-mention)
+[](https://github.com/sponsors/ueberdosis)
+
+## Introduction
+tiptap is a headless wrapper around [ProseMirror](https://ProseMirror.net) – a toolkit for building rich text WYSIWYG editors, which is already in use at many well-known companies such as *New York Times*, *The Guardian* or *Atlassian*.
+
+## Offical Documentation
+Documentation can be found on the [tiptap website](https://tiptap.dev).
+
+## License
+tiptap is open-sourced software licensed under the [MIT license](https://github.com/ueberdosis/tiptap-next/blob/main/LICENSE.md).
diff --git a/packages/extension-mention/package.json b/packages/extension-mention/package.json
new file mode 100644
index 00000000..355fb52f
--- /dev/null
+++ b/packages/extension-mention/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "@tiptap/extension-mention",
+ "description": "mention extension for tiptap",
+ "version": "2.0.0-alpha.0",
+ "homepage": "https://tiptap.dev",
+ "keywords": [
+ "tiptap",
+ "tiptap extension"
+ ],
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "main": "dist/tiptap-extension-mention.cjs.js",
+ "umd": "dist/tiptap-extension-mention.umd.js",
+ "module": "dist/tiptap-extension-mention.esm.js",
+ "unpkg": "dist/tiptap-extension-mention.bundle.umd.min.js",
+ "types": "dist/packages/extension-mention/src/index.d.ts",
+ "files": [
+ "src",
+ "dist"
+ ],
+ "peerDependencies": {
+ "@tiptap/core": "^2.0.0-alpha.6"
+ },
+ "dependencies": {
+ "@tiptap/suggestion": "^2.0.0-alpha.0"
+ }
+}
diff --git a/packages/extension-mention/src/index.ts b/packages/extension-mention/src/index.ts
new file mode 100644
index 00000000..0c1654ac
--- /dev/null
+++ b/packages/extension-mention/src/index.ts
@@ -0,0 +1,5 @@
+import { Mention } from './mention'
+
+export * from './mention'
+
+export default Mention
diff --git a/packages/extension-mention/src/mention.ts b/packages/extension-mention/src/mention.ts
new file mode 100644
index 00000000..ae4add0b
--- /dev/null
+++ b/packages/extension-mention/src/mention.ts
@@ -0,0 +1,49 @@
+import { Node } from '@tiptap/core'
+import Suggestion from '@tiptap/suggestion'
+
+export const Mention = Node.create({
+ name: 'mention',
+
+ group: 'inline',
+
+ inline: true,
+
+ selectable: false,
+
+ atom: true,
+
+ addAttributes() {
+ return {
+ id: {
+ default: null,
+ },
+ label: {
+ default: null,
+ },
+ }
+ },
+
+ parseHTML() {
+ return [
+ {
+ tag: 'span[data-mention]',
+ },
+ ]
+ },
+
+ renderHTML({ node, HTMLAttributes }) {
+ return ['span', HTMLAttributes, `@${node.attrs.label}`]
+ },
+
+ addProseMirrorPlugins() {
+ return [
+ Suggestion({}),
+ ]
+ },
+})
+
+declare module '@tiptap/core' {
+ interface AllExtensions {
+ Mention: typeof Mention,
+ }
+}
diff --git a/packages/suggestions/README.md b/packages/suggestion/README.md
similarity index 100%
rename from packages/suggestions/README.md
rename to packages/suggestion/README.md
diff --git a/packages/suggestions/package.json b/packages/suggestion/package.json
similarity index 58%
rename from packages/suggestions/package.json
rename to packages/suggestion/package.json
index 2f7b0f62..a47cccf6 100644
--- a/packages/suggestions/package.json
+++ b/packages/suggestion/package.json
@@ -1,6 +1,6 @@
{
- "name": "@tiptap/suggestions",
- "description": "suggestions",
+ "name": "@tiptap/suggestion",
+ "description": "suggestion plugin for tiptap",
"version": "2.0.0-alpha.0",
"homepage": "https://tiptap.dev",
"keywords": [
@@ -12,11 +12,11 @@
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
- "main": "dist/tiptap-suggestions.cjs.js",
- "umd": "dist/tiptap-suggestions.umd.js",
- "module": "dist/tiptap-suggestions.esm.js",
- "unpkg": "dist/tiptap-suggestions.bundle.umd.min.js",
- "types": "dist/packages/suggestions/src/index.d.ts",
+ "main": "dist/tiptap-suggestion.cjs.js",
+ "umd": "dist/tiptap-suggestion.umd.js",
+ "module": "dist/tiptap-suggestion.esm.js",
+ "unpkg": "dist/tiptap-suggestion.bundle.umd.min.js",
+ "types": "dist/packages/suggestion/src/index.d.ts",
"files": [
"src",
"dist"
diff --git a/packages/suggestion/src/index.ts b/packages/suggestion/src/index.ts
new file mode 100644
index 00000000..43cdefd6
--- /dev/null
+++ b/packages/suggestion/src/index.ts
@@ -0,0 +1,5 @@
+import { Suggestion } from './suggestion'
+
+export * from './suggestion'
+
+export default Suggestion
diff --git a/packages/suggestions/src/suggestions.ts b/packages/suggestion/src/suggestion.ts
similarity index 99%
rename from packages/suggestions/src/suggestions.ts
rename to packages/suggestion/src/suggestion.ts
index 7577673c..142aa97d 100644
--- a/packages/suggestions/src/suggestions.ts
+++ b/packages/suggestion/src/suggestion.ts
@@ -68,7 +68,7 @@ function triggerCharacter({
}
}
-export function Suggestions({
+export function Suggestion({
matcher = {
char: '@',
allowSpaces: false,
diff --git a/packages/suggestions/src/index.ts b/packages/suggestions/src/index.ts
deleted file mode 100644
index 69d382d8..00000000
--- a/packages/suggestions/src/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Suggestions } from './suggestions'
-
-export * from './suggestions'
-
-export default Suggestions