add the character count extension

This commit is contained in:
Hans Pagel
2021-01-25 23:40:15 +01:00
parent 2f192700b2
commit 26fb84fe27
10 changed files with 95 additions and 27 deletions

View File

@@ -0,0 +1,14 @@
# @tiptap/extension-character-count
[![Version](https://img.shields.io/npm/v/@tiptap/extension-character-count.svg?label=version)](https://www.npmjs.com/package/@tiptap/extension-character-count)
[![Downloads](https://img.shields.io/npm/dm/@tiptap/extension-character-count.svg)](https://npmcharts.com/compare/tiptap?minimal=true)
[![License](https://img.shields.io/npm/l/@tiptap/extension-character-count.svg)](https://www.npmjs.com/package/@tiptap/extension-character-count)
[![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).

View File

@@ -0,0 +1,28 @@
{
"name": "@tiptap/extension-character-count",
"description": "font family extension for tiptap",
"version": "2.0.0-alpha.5",
"homepage": "https://tiptap.dev",
"keywords": [
"tiptap",
"tiptap extension"
],
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"main": "dist/tiptap-extension-character-count.cjs.js",
"umd": "dist/tiptap-extension-character-count.umd.js",
"module": "dist/tiptap-extension-character-count.esm.js",
"unpkg": "dist/tiptap-extension-character-count.bundle.umd.min.js",
"types": "dist/packages/extension-character-count/src/index.d.ts",
"files": [
"src",
"dist"
],
"peerDependencies": {
"@tiptap/core": "^2.0.0-alpha.6",
"@tiptap/extension-text-style": "^2.0.0-alpha.0"
}
}

View File

@@ -0,0 +1,41 @@
import { Extension } from '@tiptap/core'
import { Plugin, PluginKey } from 'prosemirror-state'
export const pluginKey = new PluginKey('characterLimit')
export interface CharacterCountOptions {
limit?: number,
}
export const CharacterCount = Extension.create({
name: 'characterCount',
defaultOptions: <CharacterCountOptions>{
limit: 0,
},
addProseMirrorPlugins() {
const { options } = this
return [
new Plugin({
key: pluginKey,
appendTransaction: (transactions, oldState, newState) => {
const length = newState.doc.content.size
if (options.limit && length > options.limit) {
return newState.tr.insertText('', options.limit + 1, length)
}
},
}),
]
},
})
declare module '@tiptap/core' {
interface AllExtensions {
CharacterCount: typeof CharacterCount,
}
}

View File

@@ -0,0 +1,5 @@
import { CharacterCount } from './character-count'
export * from './character-count'
export default CharacterCount