Skip to content

Commit

Permalink
feat(list): add new extension-list package which packages all the l…
Browse files Browse the repository at this point in the history
…ist packages into a single package

This maintains backwards-compatibility with the existing packages by making them into re-exports
  • Loading branch information
nperez0111 committed Jan 27, 2025
1 parent a0e0dc7 commit 263d7a6
Show file tree
Hide file tree
Showing 43 changed files with 296 additions and 56 deletions.
4 changes: 2 additions & 2 deletions packages/extension-bullet-list/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@
"dist"
],
"devDependencies": {
"@tiptap/core": "^3.0.0-next.4"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"peerDependencies": {
"@tiptap/core": "^3.0.0-next.1"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions packages/extension-bullet-list/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { BulletList } from './bullet-list.js'
import { BulletList } from '@tiptap/extension-list'

export * from './bullet-list.js'
export { BulletList, BulletListOptions } from '@tiptap/extension-list'

export default BulletList
4 changes: 2 additions & 2 deletions packages/extension-list-item/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@
"dist"
],
"devDependencies": {
"@tiptap/core": "^3.0.0-next.4"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"peerDependencies": {
"@tiptap/core": "^3.0.0-next.1"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions packages/extension-list-item/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ListItem } from './list-item.js'
import { ListItem } from '@tiptap/extension-list'

export * from './list-item.js'
export { ListItem, ListItemOptions } from '@tiptap/extension-list'

export default ListItem
6 changes: 2 additions & 4 deletions packages/extension-list-keymap/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,10 @@
"dist"
],
"devDependencies": {
"@tiptap/core": "^3.0.0-next.4",
"@tiptap/pm": "^3.0.0-next.4"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"peerDependencies": {
"@tiptap/core": "^3.0.0-next.3",
"@tiptap/pm": "^3.0.0-next.3"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"repository": {
"type": "git",
Expand Down
5 changes: 2 additions & 3 deletions packages/extension-list-keymap/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { ListKeymap } from './list-keymap.js'
import { ListKeymap } from '@tiptap/extension-list'

export * from './list-keymap.js'
export * as listHelpers from './listHelpers/index.js'
export { listHelpers, ListKeymap, ListKeymapOptions } from '@tiptap/extension-list'

export default ListKeymap
1 change: 1 addition & 0 deletions packages/extension-list/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Change Log
18 changes: 18 additions & 0 deletions packages/extension-list/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# @tiptap/extension-list

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

## Official 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/blob/main/LICENSE.md).
106 changes: 106 additions & 0 deletions packages/extension-list/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
{
"name": "@tiptap/extension-list",
"description": "List extension for tiptap",
"version": "3.0.0-next.4",
"homepage": "https://tiptap.dev",
"keywords": [
"tiptap",
"tiptap extension"
],
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"type": "module",
"exports": {
".": {
"types": {
"import": "./dist/index.d.ts",
"require": "./dist/index.d.cts"
},
"import": "./dist/index.js",
"require": "./dist/index.cjs"
},
"./bullet-list": {
"types": {
"import": "./dist/bullet-list/index.d.ts",
"require": "./dist/bullet-list/index.d.cts"
},
"import": "./dist/bullet-list/index.js",
"require": "./dist/bullet-list/index.cjs"
},
"./item": {
"types": {
"import": "./dist/item/index.d.ts",
"require": "./dist/item/index.d.cts"
},
"import": "./dist/item/index.js",
"require": "./dist/item/index.cjs"
},
"./keymap": {
"types": {
"import": "./dist/keymap/index.d.ts",
"require": "./dist/keymap/index.d.cts"
},
"import": "./dist/keymap/index.js",
"require": "./dist/keymap/index.cjs"
},
"./kit": {
"types": {
"import": "./dist/kit/index.d.ts",
"require": "./dist/kit/index.d.cts"
},
"import": "./dist/kit/index.js",
"require": "./dist/kit/index.cjs"
},
"./ordered-list": {
"types": {
"import": "./dist/ordered-list/index.d.ts",
"require": "./dist/ordered-list/index.d.cts"
},
"import": "./dist/ordered-list/index.js",
"require": "./dist/ordered-list/index.cjs"
},
"./task-item": {
"types": {
"import": "./dist/task-item/index.d.ts",
"require": "./dist/task-item/index.d.cts"
},
"import": "./dist/task-item/index.js",
"require": "./dist/task-item/index.cjs"
},
"./task-list": {
"types": {
"import": "./dist/task-list/index.d.ts",
"require": "./dist/task-list/index.d.cts"
},
"import": "./dist/task-list/index.js",
"require": "./dist/task-list/index.cjs"
}
},
"main": "dist/index.cjs",
"module": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"src",
"dist"
],
"devDependencies": {
"@tiptap/core": "^3.0.0-next.4",
"@tiptap/pm": "^3.0.0-next.4"
},
"peerDependencies": {
"@tiptap/core": "^3.0.0-next.4",
"@tiptap/pm": "^3.0.0-next.4"
},
"repository": {
"type": "git",
"url": "https://github.com/ueberdosis/tiptap",
"directory": "packages/extension-list"
},
"scripts": {
"build": "tsup",
"lint": "prettier ./src/ --check && eslint --cache --quiet --no-error-on-unmatched-pattern ./src/"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ declare module '@tiptap/core' {
/**
* Matches a bullet list to a dash or asterisk.
*/
export const inputRegex = /^\s*([-+*])\s$/
export const bulletListInputRegex = /^\s*([-+*])\s$/

/**
* This extension allows you to create bullet lists.
Expand Down Expand Up @@ -105,13 +105,13 @@ export const BulletList = Node.create<BulletListOptions>({

addInputRules() {
let inputRule = wrappingInputRule({
find: inputRegex,
find: bulletListInputRegex,
type: this.type,
})

if (this.options.keepMarks || this.options.keepAttributes) {
inputRule = wrappingInputRule({
find: inputRegex,
find: bulletListInputRegex,
type: this.type,
keepMarks: this.options.keepMarks,
keepAttributes: this.options.keepAttributes,
Expand Down
1 change: 1 addition & 0 deletions packages/extension-list/src/bullet-list/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './bullet-list.js'
7 changes: 7 additions & 0 deletions packages/extension-list/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export * from './bullet-list/index.js'
export * from './item/index.js'
export * from './keymap/index.js'
export * from './kit/index.js'
export * from './ordered-list/index.js'
export * from './task-item/index.js'
export * from './task-list/index.js'
1 change: 1 addition & 0 deletions packages/extension-list/src/item/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './list-item.js'
2 changes: 2 additions & 0 deletions packages/extension-list/src/keymap/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './list-keymap.js'
export * as listHelpers from './listHelpers/index.js'
75 changes: 75 additions & 0 deletions packages/extension-list/src/kit/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import { Extension } from '@tiptap/core'

import { BulletList, BulletListOptions } from '../bullet-list/index.js'
import { ListItem, ListItemOptions } from '../item/index.js'
import { ListKeymap, ListKeymapOptions } from '../keymap/index.js'
import { OrderedList, OrderedListOptions } from '../ordered-list/index.js'
import { TaskItem, TaskItemOptions } from '../task-item/index.js'
import { TaskList, TaskListOptions } from '../task-list/index.js'

export interface ListKitOptions {
/**
* If set to false, the bulletList extension will not be registered
* @example table: false
*/
bulletList: Partial<BulletListOptions> | false
/**
* If set to false, the listItem extension will not be registered
*/
listItem: Partial<ListItemOptions> | false
/**
* If set to false, the listKeymap extension will not be registered
*/
listKeymap: Partial<ListKeymapOptions> | false
/**
* If set to false, the orderedList extension will not be registered
*/
orderedList: Partial<OrderedListOptions> | false
/**
* If set to false, the taskItem extension will not be registered
*/
taskItem: Partial<TaskItemOptions> | false
/**
* If set to false, the taskList extension will not be registered
*/
taskList: Partial<TaskListOptions> | false
}

/**
* The table kit is a collection of table editor extensions.
*
* It’s a good starting point for building your own table in Tiptap.
*/
export const ListKit = Extension.create<ListKitOptions>({
name: 'listKit',

addExtensions() {
const extensions = []

if (this.options.bulletList !== false) {
extensions.push(BulletList.configure(this.options.bulletList))
}

if (this.options.listItem !== false) {
extensions.push(ListItem.configure(this.options.listItem))
}

if (this.options.listKeymap !== false) {
extensions.push(ListKeymap.configure(this.options.listKeymap))
}

if (this.options.orderedList !== false) {
extensions.push(OrderedList.configure(this.options.orderedList))
}

if (this.options.taskItem !== false) {
extensions.push(TaskItem.configure(this.options.taskItem))
}

if (this.options.taskList !== false) {
extensions.push(TaskList.configure(this.options.taskList))
}

return extensions
},
})
1 change: 1 addition & 0 deletions packages/extension-list/src/ordered-list/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './ordered-list.js'
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ declare module '@tiptap/core' {
/**
* Matches an ordered list to a 1. on input (or any number followed by a dot).
*/
export const inputRegex = /^(\d+)\.\s$/
export const orderedListInputRegex = /^(\d+)\.\s$/

/**
* This extension allows you to create ordered lists.
Expand Down Expand Up @@ -129,15 +129,15 @@ export const OrderedList = Node.create<OrderedListOptions>({

addInputRules() {
let inputRule = wrappingInputRule({
find: inputRegex,
find: orderedListInputRegex,
type: this.type,
getAttributes: match => ({ start: +match[1] }),
joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],
})

if (this.options.keepMarks || this.options.keepAttributes) {
inputRule = wrappingInputRule({
find: inputRegex,
find: orderedListInputRegex,
type: this.type,
keepMarks: this.options.keepMarks,
keepAttributes: this.options.keepAttributes,
Expand Down
1 change: 1 addition & 0 deletions packages/extension-list/src/task-item/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './task-item.js'
1 change: 1 addition & 0 deletions packages/extension-list/src/task-list/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './task-list.js'
22 changes: 22 additions & 0 deletions packages/extension-list/tsup.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { defineConfig } from 'tsup'

export default defineConfig(
[
'src/bullet-list/index.ts',
'src/item/index.ts',
'src/keymap/index.ts',
'src/kit/index.ts',
'src/ordered-list/index.ts',
'src/task-item/index.ts',
'src/task-list/index.ts',
'src/index.ts',
].map(entry => ({
entry: [entry],
tsconfig: '../../tsconfig.build.json',
outDir: `dist${entry.replace('src', '').split('/').slice(0, -1).join('/')}`,
dts: true,
sourcemap: true,
format: ['esm', 'cjs'],
external: [/^[^./]/],
})),
)
4 changes: 2 additions & 2 deletions packages/extension-ordered-list/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@
"dist"
],
"devDependencies": {
"@tiptap/core": "^3.0.0-next.4"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"peerDependencies": {
"@tiptap/core": "^3.0.0-next.1"
"@tiptap/extension-list": "^3.0.0-next.4"
},
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions packages/extension-ordered-list/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { OrderedList } from './ordered-list.js'
import { OrderedList } from '@tiptap/extension-list'

export * from './ordered-list.js'
export { OrderedList, OrderedListOptions } from '@tiptap/extension-list'

export default OrderedList
Loading

0 comments on commit 263d7a6

Please sign in to comment.