From eb695878a0a2b706298c3311f10b2fa2efb9177c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Thu, 17 Dec 2020 17:13:35 +0100 Subject: [PATCH] add basic mention extension --- docs/src/demos/Nodes/Mention/index.spec.js | 5 ++ docs/src/demos/Nodes/Mention/index.vue | 44 +++++++++++++++++ docs/src/docPages/api/nodes/mention.md | 17 +++++-- packages/extension-mention/README.md | 14 ++++++ packages/extension-mention/package.json | 30 ++++++++++++ packages/extension-mention/src/index.ts | 5 ++ packages/extension-mention/src/mention.ts | 49 +++++++++++++++++++ .../{suggestions => suggestion}/README.md | 0 .../{suggestions => suggestion}/package.json | 14 +++--- packages/suggestion/src/index.ts | 5 ++ .../src/suggestion.ts} | 2 +- packages/suggestions/src/index.ts | 5 -- 12 files changed, 173 insertions(+), 17 deletions(-) create mode 100644 docs/src/demos/Nodes/Mention/index.spec.js create mode 100644 docs/src/demos/Nodes/Mention/index.vue create mode 100644 packages/extension-mention/README.md create mode 100644 packages/extension-mention/package.json create mode 100644 packages/extension-mention/src/index.ts create mode 100644 packages/extension-mention/src/mention.ts rename packages/{suggestions => suggestion}/README.md (100%) rename packages/{suggestions => suggestion}/package.json (58%) create mode 100644 packages/suggestion/src/index.ts rename packages/{suggestions/src/suggestions.ts => suggestion/src/suggestion.ts} (99%) delete mode 100644 packages/suggestions/src/index.ts 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 index e74457ea..3d15ae56 100644 --- a/docs/src/docPages/api/nodes/mention.md +++ b/docs/src/docPages/api/nodes/mention.md @@ -1,7 +1,16 @@ # Mention -:::pro Fund the development 💖 -We need your support to maintain, update, support and develop tiptap 2. If you’re waiting for this extension, [become a sponsor and fund open source](/sponsor). -::: +## Installation +```bash +# with npm +npm install @tiptap/extension-mention -TODO +# 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/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 +[![Version](https://img.shields.io/npm/v/@tiptap/extension-mention.svg?label=version)](https://www.npmjs.com/package/@tiptap/extension-mention) +[![Downloads](https://img.shields.io/npm/dm/@tiptap/extension-mention.svg)](https://npmcharts.com/compare/tiptap?minimal=true) +[![License](https://img.shields.io/npm/l/@tiptap/extension-mention.svg)](https://www.npmjs.com/package/@tiptap/extension-mention) +[![Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub)](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