├── .gitignore
├── .npmrc
├── LICENSE
├── README.md
├── examples
└── react
│ ├── .gitignore
│ ├── README.md
│ ├── eslint.config.js
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── src
│ ├── App.tsx
│ ├── index.css
│ ├── main.tsx
│ └── vite-env.d.ts
│ ├── tailwind.config.js
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── package.json
├── package
├── README.md
├── package.json
├── pnpm-lock.yaml
├── src
│ ├── footnotes
│ │ ├── footnote.ts
│ │ ├── footnotes.ts
│ │ ├── reference.ts
│ │ ├── rules.ts
│ │ └── utils.ts
│ └── index.ts
├── tests
│ ├── index.test.ts
│ └── utils.ts
├── tsconfig.json
└── tsup.config.ts
├── pnpm-lock.yaml
└── pnpm-workspace.yaml
/.gitignore:
--------------------------------------------------------------------------------
1 | dist
2 | node_modules
3 | .DS_Store
4 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | link-workspace-packages=true
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Buttondown
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ./package/README.md
--------------------------------------------------------------------------------
/examples/react/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/react/README.md:
--------------------------------------------------------------------------------
1 | This is an example React project showcasing Tiptap Footnotes in action.
2 |
--------------------------------------------------------------------------------
/examples/react/eslint.config.js:
--------------------------------------------------------------------------------
1 | import js from "@eslint/js";
2 | import globals from "globals";
3 | import reactHooks from "eslint-plugin-react-hooks";
4 | import reactRefresh from "eslint-plugin-react-refresh";
5 | import tseslint from "typescript-eslint";
6 |
7 | export default tseslint.config(
8 | { ignores: ["dist"] },
9 | {
10 | extends: [js.configs.recommended, ...tseslint.configs.recommended],
11 | files: ["**/*.{ts,tsx}"],
12 | languageOptions: {
13 | ecmaVersion: 2020,
14 | globals: globals.browser,
15 | },
16 | plugins: {
17 | "react-hooks": reactHooks,
18 | "react-refresh": reactRefresh,
19 | },
20 | rules: {
21 | ...reactHooks.configs.recommended.rules,
22 | "react-refresh/only-export-components": [
23 | "warn",
24 | { allowConstantExport: true },
25 | ],
26 | },
27 | }
28 | );
29 |
--------------------------------------------------------------------------------
/examples/react/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/react/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tiptap-footnotes-react-example",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "tsc -b && vite build",
9 | "lint": "eslint .",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "@tiptap/core": "^2.10.0",
14 | "@tiptap/extension-document": "^2.10.0",
15 | "@tiptap/extension-list-item": "^2.10.0",
16 | "@tiptap/extension-ordered-list": "^2.10.0",
17 | "@tiptap/extension-placeholder": "^2.10.0",
18 | "@tiptap/pm": "^2.10.0",
19 | "@tiptap/react": "^2.10.0",
20 | "@tiptap/starter-kit": "^2.10.0",
21 | "react": "^18.3.1",
22 | "react-dom": "^18.3.1",
23 | "tiptap-footnotes": "^2.0.2"
24 | },
25 | "devDependencies": {
26 | "@eslint/js": "^9.15.0",
27 | "@types/react": "^18.3.12",
28 | "@types/react-dom": "^18.3.1",
29 | "@vitejs/plugin-react": "^4.3.3",
30 | "autoprefixer": "^10.4.20",
31 | "eslint": "^9.15.0",
32 | "eslint-plugin-react-hooks": "5.1.0-rc-fb9a90fa48-20240614",
33 | "eslint-plugin-react-refresh": "^0.4.14",
34 | "globals": "^15.12.0",
35 | "postcss": "^8.4.49",
36 | "tailwindcss": "^3.4.15",
37 | "typescript": "^5.6.3",
38 | "typescript-eslint": "^8.15.0",
39 | "vite": "^5.4.11"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/examples/react/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/react/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { useEditor, EditorContent } from "@tiptap/react";
2 | import StarterKit from "@tiptap/starter-kit";
3 | import Placeholder from "@tiptap/extension-placeholder";
4 | import { Footnotes, FootnoteReference, Footnote } from "tiptap-footnotes";
5 | import Document from "@tiptap/extension-document";
6 |
7 | const extensions = [
8 | StarterKit.configure({
9 | document: false,
10 | }),
11 | Document.extend({
12 | content: "block+ footnotes?",
13 | }),
14 | Placeholder.configure({
15 | placeholder: "Start typing here...",
16 | }),
17 | Footnotes,
18 | Footnote,
19 | FootnoteReference,
20 | ];
21 |
22 | const Tiptap = () => {
23 | const editor = useEditor({
24 | extensions,
25 | content: "Hello world",
26 | });
27 |
28 | return (
29 |
30 |
Footnotes Demo
31 |
32 |
33 | Click the "Add footnote" button below or type [^text]
to
34 | insert a footnote
35 |
36 |
37 |
43 |
44 |
45 |
46 | );
47 | };
48 |
49 | export default Tiptap;
50 |
--------------------------------------------------------------------------------
/examples/react/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | a {
6 | @apply text-sky-600;
7 | @apply font-bold;
8 |
9 | text-decoration: underline;
10 | }
11 | ol.footnotes:has(li) {
12 | border-top: 1px solid black;
13 | }
14 | ol {
15 | margin-top: 20px;
16 | padding: 20px 0;
17 | list-style-type: decimal;
18 | padding-left: 20px;
19 | }
20 | .tiptap p.is-empty:first-child::before {
21 | content: attr(data-placeholder);
22 | float: left;
23 | color: #ced3d9;
24 | pointer-events: none;
25 | height: 0;
26 | }
27 | .tiptap {
28 | width: 1000px;
29 | height: 500px;
30 | border: 1px solid black;
31 | border-radius: 5px;
32 | padding: 20px;
33 | overflow-y: auto;
34 | }
35 | .tiptap:focus {
36 | outline: none;
37 | }
38 | .ProseMirror-selectednode {
39 | outline: 2px solid #0069ff;
40 | }
41 |
--------------------------------------------------------------------------------
/examples/react/src/main.tsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from "react";
2 | import { createRoot } from "react-dom/client";
3 | import App from "./App.tsx";
4 | import "./index.css";
5 |
6 | createRoot(document.getElementById("root")!).render(
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/examples/react/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/react/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: ["index.html", "src/**/*.{js,jsx,ts,tsx}"],
4 | theme: {
5 | extend: {},
6 | },
7 | plugins: [],
8 | };
9 |
--------------------------------------------------------------------------------
/examples/react/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "isolatedModules": true,
13 | "moduleDetection": "force",
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true
22 | },
23 | "include": ["src"]
24 | }
25 |
--------------------------------------------------------------------------------
/examples/react/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/react/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "lib": ["ES2023"],
5 | "module": "ESNext",
6 | "skipLibCheck": true,
7 |
8 | /* Bundler mode */
9 | "moduleResolution": "bundler",
10 | "allowImportingTsExtensions": true,
11 | "isolatedModules": true,
12 | "moduleDetection": "force",
13 | "noEmit": true,
14 |
15 | /* Linting */
16 | "strict": true,
17 | "noUnusedLocals": true,
18 | "noUnusedParameters": true,
19 | "noFallthroughCasesInSwitch": true
20 | },
21 | "include": ["vite.config.ts"]
22 | }
23 |
--------------------------------------------------------------------------------
/examples/react/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import react from "@vitejs/plugin-react";
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "footnotes",
3 | "version": "1.1.0",
4 | "keywords": [],
5 | "author": ""
6 | }
7 |
--------------------------------------------------------------------------------
/package/README.md:
--------------------------------------------------------------------------------
1 | # tiptap-footnotes
2 |
3 | A footnotes extension for Tiptap
4 |
5 | [][demo]
6 |
7 | [demo]: https://stackblitz.com/github/buttondown/tiptap-footnotes/tree/main/examples/react?file=src%2FApp.tsx&title=tiptap-footnotes%20demo
8 |
9 | ## Getting Started
10 |
11 | ### Installation
12 |
13 | ```shell
14 | npm install tiptap-footnotes
15 | ```
16 |
17 | This extension requires the `@tiptap/extension-list-item`, `@tiptap/extension-ordered-list`, and the `@tiptap/pm` extensions, so you need to install them as well:
18 |
19 | ```shell
20 | npm install @tiptap/extension-list-item @tiptap/extension-ordered-list @tiptap/pm
21 | ```
22 |
23 | ### Usage
24 |
25 | This package is separated into 3 main extensions:
26 |
27 | - `Footnotes`: The footnotes ordered list extension
28 | - `Footnote`: The footnote list item extension
29 | - `FootnoteReference`: the footnote reference extension
30 |
31 | Typically, the footnotes should be placed at the bottom of the document, so you should adjust the topNode node (i.e. Document) to have the footnotes placed at the end (as shown below):
32 |
33 | ```typescript
34 | import { useEditor, EditorContent } from "@tiptap/react";
35 | import StarterKit from "@tiptap/starter-kit";
36 | import { Footnotes, FootnoteReference, Footnote } from "tiptap-footnotes";
37 | import Document from "@tiptap/extension-document";
38 |
39 | const Editor = () => {
40 | const editor = useEditor({
41 | extensions: [
42 | StarterKit.configure({
43 | document: false,
44 | }),
45 | Document.extend({
46 | content: "block+ footnotes?",
47 | }),
48 | Footnotes,
49 | Footnote,
50 | FootnoteReference,
51 | ],
52 | content: "Hello world",
53 | });
54 |
55 | return ;
56 | };
57 |
58 | export default Editor;
59 | ```
60 |
61 | If you want the footnotes to look like the example, you can add this CSS to your app:
62 |
63 | ```css
64 | ol.footnotes {
65 | margin-top: 20px;
66 | padding: 20px 0;
67 | list-style-type: decimal;
68 | padding-left: 20px;
69 | }
70 |
71 | ol.footnotes:has(li) {
72 | border-top: 1px solid black;
73 | }
74 | ```
75 |
--------------------------------------------------------------------------------
/package/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tiptap-footnotes",
3 | "version": "2.0.3",
4 | "description": "A footnotes extension for Tiptap",
5 | "main": "dist/index.js",
6 | "types": "dist/index.d.ts",
7 | "module": "dist/index.mjs",
8 | "scripts": {
9 | "build": "tsup",
10 | "dev": "tsup --watch",
11 | "prepack": "pnpm run build",
12 | "test": "vitest --environment=jsdom"
13 | },
14 | "exports": {
15 | "import": "./dist/index.mjs",
16 | "require": "./dist/index.js"
17 | },
18 | "keywords": [
19 | "tiptap",
20 | "tiptap extension",
21 | "tiptap footnotes",
22 | "footnotes"
23 | ],
24 | "author": "Turki Aloufi",
25 | "files": [
26 | "dist/"
27 | ],
28 | "license": "MIT",
29 | "devDependencies": {
30 | "@tiptap/core": "^2.10.0",
31 | "@tiptap/extension-document": "^2.10.0",
32 | "@tiptap/extension-list-item": "^2.10.0",
33 | "@tiptap/extension-ordered-list": "^2.10.0",
34 | "@tiptap/extension-paragraph": "^2.10.0",
35 | "@tiptap/extension-text": "^2.10.0",
36 | "@tiptap/pm": "^2.10.0",
37 | "@types/uuid": "^9.0.8",
38 | "esbuild": "^0.21.5",
39 | "jsdom": "^24.1.3",
40 | "tsup": "^8.3.5",
41 | "typescript": "^5.6.3",
42 | "vitest": "^2.1.5"
43 | },
44 | "peerDependencies": {
45 | "@tiptap/core": "^2.4.0",
46 | "@tiptap/extension-list-item": "^2.4.0",
47 | "@tiptap/extension-ordered-list": "^2.4.0",
48 | "@tiptap/pm": "^2.4.0"
49 | },
50 | "dependencies": {
51 | "uuid": "^9.0.1"
52 | },
53 | "repository": {
54 | "type": "git",
55 | "url": "https://github.com/buttondown/tiptap-footnotes",
56 | "directory": "package"
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/package/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | uuid:
12 | specifier: ^9.0.1
13 | version: 9.0.1
14 | devDependencies:
15 | '@tiptap/core':
16 | specifier: ^2.4.0
17 | version: 2.4.0(@tiptap/pm@2.4.0)
18 | '@tiptap/extension-list-item':
19 | specifier: ^2.4.0
20 | version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))
21 | '@tiptap/extension-ordered-list':
22 | specifier: ^2.4.0
23 | version: 2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))
24 | '@tiptap/pm':
25 | specifier: ^2.4.0
26 | version: 2.4.0
27 | '@types/uuid':
28 | specifier: ^9.0.8
29 | version: 9.0.8
30 | esbuild:
31 | specifier: ^0.21.4
32 | version: 0.21.4
33 | tsup:
34 | specifier: ^8.0.2
35 | version: 8.0.2(typescript@5.4.5)
36 | typescript:
37 | specifier: ^5.4.5
38 | version: 5.4.5
39 |
40 | packages:
41 |
42 | '@esbuild/aix-ppc64@0.19.12':
43 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
44 | engines: {node: '>=12'}
45 | cpu: [ppc64]
46 | os: [aix]
47 |
48 | '@esbuild/aix-ppc64@0.21.4':
49 | resolution: {integrity: sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==}
50 | engines: {node: '>=12'}
51 | cpu: [ppc64]
52 | os: [aix]
53 |
54 | '@esbuild/android-arm64@0.19.12':
55 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
56 | engines: {node: '>=12'}
57 | cpu: [arm64]
58 | os: [android]
59 |
60 | '@esbuild/android-arm64@0.21.4':
61 | resolution: {integrity: sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==}
62 | engines: {node: '>=12'}
63 | cpu: [arm64]
64 | os: [android]
65 |
66 | '@esbuild/android-arm@0.19.12':
67 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
68 | engines: {node: '>=12'}
69 | cpu: [arm]
70 | os: [android]
71 |
72 | '@esbuild/android-arm@0.21.4':
73 | resolution: {integrity: sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==}
74 | engines: {node: '>=12'}
75 | cpu: [arm]
76 | os: [android]
77 |
78 | '@esbuild/android-x64@0.19.12':
79 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
80 | engines: {node: '>=12'}
81 | cpu: [x64]
82 | os: [android]
83 |
84 | '@esbuild/android-x64@0.21.4':
85 | resolution: {integrity: sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==}
86 | engines: {node: '>=12'}
87 | cpu: [x64]
88 | os: [android]
89 |
90 | '@esbuild/darwin-arm64@0.19.12':
91 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
92 | engines: {node: '>=12'}
93 | cpu: [arm64]
94 | os: [darwin]
95 |
96 | '@esbuild/darwin-arm64@0.21.4':
97 | resolution: {integrity: sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==}
98 | engines: {node: '>=12'}
99 | cpu: [arm64]
100 | os: [darwin]
101 |
102 | '@esbuild/darwin-x64@0.19.12':
103 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
104 | engines: {node: '>=12'}
105 | cpu: [x64]
106 | os: [darwin]
107 |
108 | '@esbuild/darwin-x64@0.21.4':
109 | resolution: {integrity: sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==}
110 | engines: {node: '>=12'}
111 | cpu: [x64]
112 | os: [darwin]
113 |
114 | '@esbuild/freebsd-arm64@0.19.12':
115 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
116 | engines: {node: '>=12'}
117 | cpu: [arm64]
118 | os: [freebsd]
119 |
120 | '@esbuild/freebsd-arm64@0.21.4':
121 | resolution: {integrity: sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==}
122 | engines: {node: '>=12'}
123 | cpu: [arm64]
124 | os: [freebsd]
125 |
126 | '@esbuild/freebsd-x64@0.19.12':
127 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
128 | engines: {node: '>=12'}
129 | cpu: [x64]
130 | os: [freebsd]
131 |
132 | '@esbuild/freebsd-x64@0.21.4':
133 | resolution: {integrity: sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==}
134 | engines: {node: '>=12'}
135 | cpu: [x64]
136 | os: [freebsd]
137 |
138 | '@esbuild/linux-arm64@0.19.12':
139 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
140 | engines: {node: '>=12'}
141 | cpu: [arm64]
142 | os: [linux]
143 |
144 | '@esbuild/linux-arm64@0.21.4':
145 | resolution: {integrity: sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==}
146 | engines: {node: '>=12'}
147 | cpu: [arm64]
148 | os: [linux]
149 |
150 | '@esbuild/linux-arm@0.19.12':
151 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
152 | engines: {node: '>=12'}
153 | cpu: [arm]
154 | os: [linux]
155 |
156 | '@esbuild/linux-arm@0.21.4':
157 | resolution: {integrity: sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==}
158 | engines: {node: '>=12'}
159 | cpu: [arm]
160 | os: [linux]
161 |
162 | '@esbuild/linux-ia32@0.19.12':
163 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
164 | engines: {node: '>=12'}
165 | cpu: [ia32]
166 | os: [linux]
167 |
168 | '@esbuild/linux-ia32@0.21.4':
169 | resolution: {integrity: sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==}
170 | engines: {node: '>=12'}
171 | cpu: [ia32]
172 | os: [linux]
173 |
174 | '@esbuild/linux-loong64@0.19.12':
175 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
176 | engines: {node: '>=12'}
177 | cpu: [loong64]
178 | os: [linux]
179 |
180 | '@esbuild/linux-loong64@0.21.4':
181 | resolution: {integrity: sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==}
182 | engines: {node: '>=12'}
183 | cpu: [loong64]
184 | os: [linux]
185 |
186 | '@esbuild/linux-mips64el@0.19.12':
187 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
188 | engines: {node: '>=12'}
189 | cpu: [mips64el]
190 | os: [linux]
191 |
192 | '@esbuild/linux-mips64el@0.21.4':
193 | resolution: {integrity: sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==}
194 | engines: {node: '>=12'}
195 | cpu: [mips64el]
196 | os: [linux]
197 |
198 | '@esbuild/linux-ppc64@0.19.12':
199 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
200 | engines: {node: '>=12'}
201 | cpu: [ppc64]
202 | os: [linux]
203 |
204 | '@esbuild/linux-ppc64@0.21.4':
205 | resolution: {integrity: sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==}
206 | engines: {node: '>=12'}
207 | cpu: [ppc64]
208 | os: [linux]
209 |
210 | '@esbuild/linux-riscv64@0.19.12':
211 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
212 | engines: {node: '>=12'}
213 | cpu: [riscv64]
214 | os: [linux]
215 |
216 | '@esbuild/linux-riscv64@0.21.4':
217 | resolution: {integrity: sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==}
218 | engines: {node: '>=12'}
219 | cpu: [riscv64]
220 | os: [linux]
221 |
222 | '@esbuild/linux-s390x@0.19.12':
223 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
224 | engines: {node: '>=12'}
225 | cpu: [s390x]
226 | os: [linux]
227 |
228 | '@esbuild/linux-s390x@0.21.4':
229 | resolution: {integrity: sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==}
230 | engines: {node: '>=12'}
231 | cpu: [s390x]
232 | os: [linux]
233 |
234 | '@esbuild/linux-x64@0.19.12':
235 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
236 | engines: {node: '>=12'}
237 | cpu: [x64]
238 | os: [linux]
239 |
240 | '@esbuild/linux-x64@0.21.4':
241 | resolution: {integrity: sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==}
242 | engines: {node: '>=12'}
243 | cpu: [x64]
244 | os: [linux]
245 |
246 | '@esbuild/netbsd-x64@0.19.12':
247 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
248 | engines: {node: '>=12'}
249 | cpu: [x64]
250 | os: [netbsd]
251 |
252 | '@esbuild/netbsd-x64@0.21.4':
253 | resolution: {integrity: sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==}
254 | engines: {node: '>=12'}
255 | cpu: [x64]
256 | os: [netbsd]
257 |
258 | '@esbuild/openbsd-x64@0.19.12':
259 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
260 | engines: {node: '>=12'}
261 | cpu: [x64]
262 | os: [openbsd]
263 |
264 | '@esbuild/openbsd-x64@0.21.4':
265 | resolution: {integrity: sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==}
266 | engines: {node: '>=12'}
267 | cpu: [x64]
268 | os: [openbsd]
269 |
270 | '@esbuild/sunos-x64@0.19.12':
271 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
272 | engines: {node: '>=12'}
273 | cpu: [x64]
274 | os: [sunos]
275 |
276 | '@esbuild/sunos-x64@0.21.4':
277 | resolution: {integrity: sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==}
278 | engines: {node: '>=12'}
279 | cpu: [x64]
280 | os: [sunos]
281 |
282 | '@esbuild/win32-arm64@0.19.12':
283 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
284 | engines: {node: '>=12'}
285 | cpu: [arm64]
286 | os: [win32]
287 |
288 | '@esbuild/win32-arm64@0.21.4':
289 | resolution: {integrity: sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==}
290 | engines: {node: '>=12'}
291 | cpu: [arm64]
292 | os: [win32]
293 |
294 | '@esbuild/win32-ia32@0.19.12':
295 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
296 | engines: {node: '>=12'}
297 | cpu: [ia32]
298 | os: [win32]
299 |
300 | '@esbuild/win32-ia32@0.21.4':
301 | resolution: {integrity: sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==}
302 | engines: {node: '>=12'}
303 | cpu: [ia32]
304 | os: [win32]
305 |
306 | '@esbuild/win32-x64@0.19.12':
307 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
308 | engines: {node: '>=12'}
309 | cpu: [x64]
310 | os: [win32]
311 |
312 | '@esbuild/win32-x64@0.21.4':
313 | resolution: {integrity: sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==}
314 | engines: {node: '>=12'}
315 | cpu: [x64]
316 | os: [win32]
317 |
318 | '@isaacs/cliui@8.0.2':
319 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
320 | engines: {node: '>=12'}
321 |
322 | '@jridgewell/gen-mapping@0.3.5':
323 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
324 | engines: {node: '>=6.0.0'}
325 |
326 | '@jridgewell/resolve-uri@3.1.2':
327 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
328 | engines: {node: '>=6.0.0'}
329 |
330 | '@jridgewell/set-array@1.2.1':
331 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
332 | engines: {node: '>=6.0.0'}
333 |
334 | '@jridgewell/sourcemap-codec@1.4.15':
335 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
336 |
337 | '@jridgewell/trace-mapping@0.3.25':
338 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
339 |
340 | '@nodelib/fs.scandir@2.1.5':
341 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
342 | engines: {node: '>= 8'}
343 |
344 | '@nodelib/fs.stat@2.0.5':
345 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
346 | engines: {node: '>= 8'}
347 |
348 | '@nodelib/fs.walk@1.2.8':
349 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
350 | engines: {node: '>= 8'}
351 |
352 | '@pkgjs/parseargs@0.11.0':
353 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
354 | engines: {node: '>=14'}
355 |
356 | '@remirror/core-constants@2.0.2':
357 | resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==}
358 |
359 | '@rollup/rollup-android-arm-eabi@4.18.0':
360 | resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==}
361 | cpu: [arm]
362 | os: [android]
363 |
364 | '@rollup/rollup-android-arm64@4.18.0':
365 | resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==}
366 | cpu: [arm64]
367 | os: [android]
368 |
369 | '@rollup/rollup-darwin-arm64@4.18.0':
370 | resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==}
371 | cpu: [arm64]
372 | os: [darwin]
373 |
374 | '@rollup/rollup-darwin-x64@4.18.0':
375 | resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==}
376 | cpu: [x64]
377 | os: [darwin]
378 |
379 | '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
380 | resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==}
381 | cpu: [arm]
382 | os: [linux]
383 |
384 | '@rollup/rollup-linux-arm-musleabihf@4.18.0':
385 | resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==}
386 | cpu: [arm]
387 | os: [linux]
388 |
389 | '@rollup/rollup-linux-arm64-gnu@4.18.0':
390 | resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==}
391 | cpu: [arm64]
392 | os: [linux]
393 |
394 | '@rollup/rollup-linux-arm64-musl@4.18.0':
395 | resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==}
396 | cpu: [arm64]
397 | os: [linux]
398 |
399 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
400 | resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==}
401 | cpu: [ppc64]
402 | os: [linux]
403 |
404 | '@rollup/rollup-linux-riscv64-gnu@4.18.0':
405 | resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==}
406 | cpu: [riscv64]
407 | os: [linux]
408 |
409 | '@rollup/rollup-linux-s390x-gnu@4.18.0':
410 | resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==}
411 | cpu: [s390x]
412 | os: [linux]
413 |
414 | '@rollup/rollup-linux-x64-gnu@4.18.0':
415 | resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==}
416 | cpu: [x64]
417 | os: [linux]
418 |
419 | '@rollup/rollup-linux-x64-musl@4.18.0':
420 | resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==}
421 | cpu: [x64]
422 | os: [linux]
423 |
424 | '@rollup/rollup-win32-arm64-msvc@4.18.0':
425 | resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==}
426 | cpu: [arm64]
427 | os: [win32]
428 |
429 | '@rollup/rollup-win32-ia32-msvc@4.18.0':
430 | resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==}
431 | cpu: [ia32]
432 | os: [win32]
433 |
434 | '@rollup/rollup-win32-x64-msvc@4.18.0':
435 | resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==}
436 | cpu: [x64]
437 | os: [win32]
438 |
439 | '@tiptap/core@2.4.0':
440 | resolution: {integrity: sha512-YJSahk8pkxpCs8SflCZfTnJpE7IPyUWIylfgXM2DefjRQa5DZ+c6sNY0s/zbxKYFQ6AuHVX40r9pCfcqHChGxQ==}
441 | peerDependencies:
442 | '@tiptap/pm': ^2.0.0
443 |
444 | '@tiptap/extension-list-item@2.4.0':
445 | resolution: {integrity: sha512-reUVUx+2cI2NIAqMZhlJ9uK/+zvRzm1GTmlU2Wvzwc7AwLN4yemj6mBDsmBLEXAKPvitfLh6EkeHaruOGymQtg==}
446 | peerDependencies:
447 | '@tiptap/core': ^2.0.0
448 |
449 | '@tiptap/extension-ordered-list@2.4.0':
450 | resolution: {integrity: sha512-Zo0c9M0aowv+2+jExZiAvhCB83GZMjZsxywmuOrdUbq5EGYKb7q8hDyN3hkrktVHr9UPXdPAYTmLAHztTOHYRA==}
451 | peerDependencies:
452 | '@tiptap/core': ^2.0.0
453 |
454 | '@tiptap/pm@2.4.0':
455 | resolution: {integrity: sha512-B1HMEqGS4MzIVXnpgRZDLm30mxDWj51LkBT/if1XD+hj5gm8B9Q0c84bhvODX6KIs+c6z+zsY9VkVu8w9Yfgxg==}
456 |
457 | '@types/estree@1.0.5':
458 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
459 |
460 | '@types/uuid@9.0.8':
461 | resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
462 |
463 | ansi-regex@5.0.1:
464 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
465 | engines: {node: '>=8'}
466 |
467 | ansi-regex@6.0.1:
468 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
469 | engines: {node: '>=12'}
470 |
471 | ansi-styles@4.3.0:
472 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
473 | engines: {node: '>=8'}
474 |
475 | ansi-styles@6.2.1:
476 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
477 | engines: {node: '>=12'}
478 |
479 | any-promise@1.3.0:
480 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
481 |
482 | anymatch@3.1.3:
483 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
484 | engines: {node: '>= 8'}
485 |
486 | argparse@2.0.1:
487 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
488 |
489 | array-union@2.1.0:
490 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
491 | engines: {node: '>=8'}
492 |
493 | balanced-match@1.0.2:
494 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
495 |
496 | binary-extensions@2.3.0:
497 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
498 | engines: {node: '>=8'}
499 |
500 | brace-expansion@2.0.1:
501 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
502 |
503 | braces@3.0.3:
504 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
505 | engines: {node: '>=8'}
506 |
507 | bundle-require@4.1.0:
508 | resolution: {integrity: sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==}
509 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
510 | peerDependencies:
511 | esbuild: '>=0.17'
512 |
513 | cac@6.7.14:
514 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
515 | engines: {node: '>=8'}
516 |
517 | chokidar@3.6.0:
518 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
519 | engines: {node: '>= 8.10.0'}
520 |
521 | color-convert@2.0.1:
522 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
523 | engines: {node: '>=7.0.0'}
524 |
525 | color-name@1.1.4:
526 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
527 |
528 | commander@4.1.1:
529 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
530 | engines: {node: '>= 6'}
531 |
532 | crelt@1.0.6:
533 | resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
534 |
535 | cross-spawn@7.0.3:
536 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
537 | engines: {node: '>= 8'}
538 |
539 | debug@4.3.4:
540 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
541 | engines: {node: '>=6.0'}
542 | peerDependencies:
543 | supports-color: '*'
544 | peerDependenciesMeta:
545 | supports-color:
546 | optional: true
547 |
548 | dir-glob@3.0.1:
549 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
550 | engines: {node: '>=8'}
551 |
552 | eastasianwidth@0.2.0:
553 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
554 |
555 | emoji-regex@8.0.0:
556 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
557 |
558 | emoji-regex@9.2.2:
559 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
560 |
561 | entities@4.5.0:
562 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
563 | engines: {node: '>=0.12'}
564 |
565 | esbuild@0.19.12:
566 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
567 | engines: {node: '>=12'}
568 | hasBin: true
569 |
570 | esbuild@0.21.4:
571 | resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==}
572 | engines: {node: '>=12'}
573 | hasBin: true
574 |
575 | escape-string-regexp@4.0.0:
576 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
577 | engines: {node: '>=10'}
578 |
579 | execa@5.1.1:
580 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
581 | engines: {node: '>=10'}
582 |
583 | fast-glob@3.3.2:
584 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
585 | engines: {node: '>=8.6.0'}
586 |
587 | fastq@1.17.1:
588 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
589 |
590 | fill-range@7.1.1:
591 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
592 | engines: {node: '>=8'}
593 |
594 | foreground-child@3.1.1:
595 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
596 | engines: {node: '>=14'}
597 |
598 | fsevents@2.3.3:
599 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
600 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
601 | os: [darwin]
602 |
603 | get-stream@6.0.1:
604 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
605 | engines: {node: '>=10'}
606 |
607 | glob-parent@5.1.2:
608 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
609 | engines: {node: '>= 6'}
610 |
611 | glob@10.4.1:
612 | resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==}
613 | engines: {node: '>=16 || 14 >=14.18'}
614 | hasBin: true
615 |
616 | globby@11.1.0:
617 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
618 | engines: {node: '>=10'}
619 |
620 | human-signals@2.1.0:
621 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
622 | engines: {node: '>=10.17.0'}
623 |
624 | ignore@5.3.1:
625 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
626 | engines: {node: '>= 4'}
627 |
628 | is-binary-path@2.1.0:
629 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
630 | engines: {node: '>=8'}
631 |
632 | is-extglob@2.1.1:
633 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
634 | engines: {node: '>=0.10.0'}
635 |
636 | is-fullwidth-code-point@3.0.0:
637 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
638 | engines: {node: '>=8'}
639 |
640 | is-glob@4.0.3:
641 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
642 | engines: {node: '>=0.10.0'}
643 |
644 | is-number@7.0.0:
645 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
646 | engines: {node: '>=0.12.0'}
647 |
648 | is-stream@2.0.1:
649 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
650 | engines: {node: '>=8'}
651 |
652 | isexe@2.0.0:
653 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
654 |
655 | jackspeak@3.1.2:
656 | resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==}
657 | engines: {node: '>=14'}
658 |
659 | joycon@3.1.1:
660 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
661 | engines: {node: '>=10'}
662 |
663 | lilconfig@3.1.1:
664 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
665 | engines: {node: '>=14'}
666 |
667 | lines-and-columns@1.2.4:
668 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
669 |
670 | linkify-it@5.0.0:
671 | resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
672 |
673 | load-tsconfig@0.2.5:
674 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
675 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
676 |
677 | lodash.sortby@4.7.0:
678 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
679 |
680 | lru-cache@10.2.2:
681 | resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
682 | engines: {node: 14 || >=16.14}
683 |
684 | markdown-it@14.1.0:
685 | resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
686 | hasBin: true
687 |
688 | mdurl@2.0.0:
689 | resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
690 |
691 | merge-stream@2.0.0:
692 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
693 |
694 | merge2@1.4.1:
695 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
696 | engines: {node: '>= 8'}
697 |
698 | micromatch@4.0.7:
699 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
700 | engines: {node: '>=8.6'}
701 |
702 | mimic-fn@2.1.0:
703 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
704 | engines: {node: '>=6'}
705 |
706 | minimatch@9.0.4:
707 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
708 | engines: {node: '>=16 || 14 >=14.17'}
709 |
710 | minipass@7.1.2:
711 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
712 | engines: {node: '>=16 || 14 >=14.17'}
713 |
714 | ms@2.1.2:
715 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
716 |
717 | mz@2.7.0:
718 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
719 |
720 | normalize-path@3.0.0:
721 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
722 | engines: {node: '>=0.10.0'}
723 |
724 | npm-run-path@4.0.1:
725 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
726 | engines: {node: '>=8'}
727 |
728 | object-assign@4.1.1:
729 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
730 | engines: {node: '>=0.10.0'}
731 |
732 | onetime@5.1.2:
733 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
734 | engines: {node: '>=6'}
735 |
736 | orderedmap@2.1.1:
737 | resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
738 |
739 | path-key@3.1.1:
740 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
741 | engines: {node: '>=8'}
742 |
743 | path-scurry@1.11.1:
744 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
745 | engines: {node: '>=16 || 14 >=14.18'}
746 |
747 | path-type@4.0.0:
748 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
749 | engines: {node: '>=8'}
750 |
751 | picomatch@2.3.1:
752 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
753 | engines: {node: '>=8.6'}
754 |
755 | pirates@4.0.6:
756 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
757 | engines: {node: '>= 6'}
758 |
759 | postcss-load-config@4.0.2:
760 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
761 | engines: {node: '>= 14'}
762 | peerDependencies:
763 | postcss: '>=8.0.9'
764 | ts-node: '>=9.0.0'
765 | peerDependenciesMeta:
766 | postcss:
767 | optional: true
768 | ts-node:
769 | optional: true
770 |
771 | prosemirror-changeset@2.2.1:
772 | resolution: {integrity: sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==}
773 |
774 | prosemirror-collab@1.3.1:
775 | resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==}
776 |
777 | prosemirror-commands@1.5.2:
778 | resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==}
779 |
780 | prosemirror-dropcursor@1.8.1:
781 | resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==}
782 |
783 | prosemirror-gapcursor@1.3.2:
784 | resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==}
785 |
786 | prosemirror-history@1.4.0:
787 | resolution: {integrity: sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==}
788 |
789 | prosemirror-inputrules@1.4.0:
790 | resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==}
791 |
792 | prosemirror-keymap@1.2.2:
793 | resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==}
794 |
795 | prosemirror-markdown@1.13.0:
796 | resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==}
797 |
798 | prosemirror-menu@1.2.4:
799 | resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==}
800 |
801 | prosemirror-model@1.21.0:
802 | resolution: {integrity: sha512-zLpS1mVCZLA7VTp82P+BfMiYVPcX1/z0Mf3gsjKZtzMWubwn2pN7CceMV0DycjlgE5JeXPR7UF4hJPbBV98oWA==}
803 |
804 | prosemirror-schema-basic@1.2.2:
805 | resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==}
806 |
807 | prosemirror-schema-list@1.3.0:
808 | resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==}
809 |
810 | prosemirror-state@1.4.3:
811 | resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==}
812 |
813 | prosemirror-tables@1.3.7:
814 | resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==}
815 |
816 | prosemirror-trailing-node@2.0.8:
817 | resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==}
818 | peerDependencies:
819 | prosemirror-model: ^1.19.0
820 | prosemirror-state: ^1.4.2
821 | prosemirror-view: ^1.31.2
822 |
823 | prosemirror-transform@1.9.0:
824 | resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==}
825 |
826 | prosemirror-view@1.33.6:
827 | resolution: {integrity: sha512-zRLUNgLIQfd8IfGprsXxWTjdA8xEAFJe8cDNrOptj6Mop9sj+BMeVbJvceyAYCm5G2dOdT2prctH7K9dfnpIMw==}
828 |
829 | punycode.js@2.3.1:
830 | resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
831 | engines: {node: '>=6'}
832 |
833 | punycode@2.3.1:
834 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
835 | engines: {node: '>=6'}
836 |
837 | queue-microtask@1.2.3:
838 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
839 |
840 | readdirp@3.6.0:
841 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
842 | engines: {node: '>=8.10.0'}
843 |
844 | resolve-from@5.0.0:
845 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
846 | engines: {node: '>=8'}
847 |
848 | reusify@1.0.4:
849 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
850 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
851 |
852 | rollup@4.18.0:
853 | resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==}
854 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
855 | hasBin: true
856 |
857 | rope-sequence@1.3.4:
858 | resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
859 |
860 | run-parallel@1.2.0:
861 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
862 |
863 | shebang-command@2.0.0:
864 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
865 | engines: {node: '>=8'}
866 |
867 | shebang-regex@3.0.0:
868 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
869 | engines: {node: '>=8'}
870 |
871 | signal-exit@3.0.7:
872 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
873 |
874 | signal-exit@4.1.0:
875 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
876 | engines: {node: '>=14'}
877 |
878 | slash@3.0.0:
879 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
880 | engines: {node: '>=8'}
881 |
882 | source-map@0.8.0-beta.0:
883 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
884 | engines: {node: '>= 8'}
885 |
886 | string-width@4.2.3:
887 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
888 | engines: {node: '>=8'}
889 |
890 | string-width@5.1.2:
891 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
892 | engines: {node: '>=12'}
893 |
894 | strip-ansi@6.0.1:
895 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
896 | engines: {node: '>=8'}
897 |
898 | strip-ansi@7.1.0:
899 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
900 | engines: {node: '>=12'}
901 |
902 | strip-final-newline@2.0.0:
903 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
904 | engines: {node: '>=6'}
905 |
906 | sucrase@3.35.0:
907 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
908 | engines: {node: '>=16 || 14 >=14.17'}
909 | hasBin: true
910 |
911 | thenify-all@1.6.0:
912 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
913 | engines: {node: '>=0.8'}
914 |
915 | thenify@3.3.1:
916 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
917 |
918 | to-regex-range@5.0.1:
919 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
920 | engines: {node: '>=8.0'}
921 |
922 | tr46@1.0.1:
923 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
924 |
925 | tree-kill@1.2.2:
926 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
927 | hasBin: true
928 |
929 | ts-interface-checker@0.1.13:
930 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
931 |
932 | tsup@8.0.2:
933 | resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==}
934 | engines: {node: '>=18'}
935 | hasBin: true
936 | peerDependencies:
937 | '@microsoft/api-extractor': ^7.36.0
938 | '@swc/core': ^1
939 | postcss: ^8.4.12
940 | typescript: '>=4.5.0'
941 | peerDependenciesMeta:
942 | '@microsoft/api-extractor':
943 | optional: true
944 | '@swc/core':
945 | optional: true
946 | postcss:
947 | optional: true
948 | typescript:
949 | optional: true
950 |
951 | typescript@5.4.5:
952 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
953 | engines: {node: '>=14.17'}
954 | hasBin: true
955 |
956 | uc.micro@2.1.0:
957 | resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
958 |
959 | uuid@9.0.1:
960 | resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
961 | hasBin: true
962 |
963 | w3c-keyname@2.2.8:
964 | resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
965 |
966 | webidl-conversions@4.0.2:
967 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
968 |
969 | whatwg-url@7.1.0:
970 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
971 |
972 | which@2.0.2:
973 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
974 | engines: {node: '>= 8'}
975 | hasBin: true
976 |
977 | wrap-ansi@7.0.0:
978 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
979 | engines: {node: '>=10'}
980 |
981 | wrap-ansi@8.1.0:
982 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
983 | engines: {node: '>=12'}
984 |
985 | yaml@2.4.2:
986 | resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==}
987 | engines: {node: '>= 14'}
988 | hasBin: true
989 |
990 | snapshots:
991 |
992 | '@esbuild/aix-ppc64@0.19.12':
993 | optional: true
994 |
995 | '@esbuild/aix-ppc64@0.21.4':
996 | optional: true
997 |
998 | '@esbuild/android-arm64@0.19.12':
999 | optional: true
1000 |
1001 | '@esbuild/android-arm64@0.21.4':
1002 | optional: true
1003 |
1004 | '@esbuild/android-arm@0.19.12':
1005 | optional: true
1006 |
1007 | '@esbuild/android-arm@0.21.4':
1008 | optional: true
1009 |
1010 | '@esbuild/android-x64@0.19.12':
1011 | optional: true
1012 |
1013 | '@esbuild/android-x64@0.21.4':
1014 | optional: true
1015 |
1016 | '@esbuild/darwin-arm64@0.19.12':
1017 | optional: true
1018 |
1019 | '@esbuild/darwin-arm64@0.21.4':
1020 | optional: true
1021 |
1022 | '@esbuild/darwin-x64@0.19.12':
1023 | optional: true
1024 |
1025 | '@esbuild/darwin-x64@0.21.4':
1026 | optional: true
1027 |
1028 | '@esbuild/freebsd-arm64@0.19.12':
1029 | optional: true
1030 |
1031 | '@esbuild/freebsd-arm64@0.21.4':
1032 | optional: true
1033 |
1034 | '@esbuild/freebsd-x64@0.19.12':
1035 | optional: true
1036 |
1037 | '@esbuild/freebsd-x64@0.21.4':
1038 | optional: true
1039 |
1040 | '@esbuild/linux-arm64@0.19.12':
1041 | optional: true
1042 |
1043 | '@esbuild/linux-arm64@0.21.4':
1044 | optional: true
1045 |
1046 | '@esbuild/linux-arm@0.19.12':
1047 | optional: true
1048 |
1049 | '@esbuild/linux-arm@0.21.4':
1050 | optional: true
1051 |
1052 | '@esbuild/linux-ia32@0.19.12':
1053 | optional: true
1054 |
1055 | '@esbuild/linux-ia32@0.21.4':
1056 | optional: true
1057 |
1058 | '@esbuild/linux-loong64@0.19.12':
1059 | optional: true
1060 |
1061 | '@esbuild/linux-loong64@0.21.4':
1062 | optional: true
1063 |
1064 | '@esbuild/linux-mips64el@0.19.12':
1065 | optional: true
1066 |
1067 | '@esbuild/linux-mips64el@0.21.4':
1068 | optional: true
1069 |
1070 | '@esbuild/linux-ppc64@0.19.12':
1071 | optional: true
1072 |
1073 | '@esbuild/linux-ppc64@0.21.4':
1074 | optional: true
1075 |
1076 | '@esbuild/linux-riscv64@0.19.12':
1077 | optional: true
1078 |
1079 | '@esbuild/linux-riscv64@0.21.4':
1080 | optional: true
1081 |
1082 | '@esbuild/linux-s390x@0.19.12':
1083 | optional: true
1084 |
1085 | '@esbuild/linux-s390x@0.21.4':
1086 | optional: true
1087 |
1088 | '@esbuild/linux-x64@0.19.12':
1089 | optional: true
1090 |
1091 | '@esbuild/linux-x64@0.21.4':
1092 | optional: true
1093 |
1094 | '@esbuild/netbsd-x64@0.19.12':
1095 | optional: true
1096 |
1097 | '@esbuild/netbsd-x64@0.21.4':
1098 | optional: true
1099 |
1100 | '@esbuild/openbsd-x64@0.19.12':
1101 | optional: true
1102 |
1103 | '@esbuild/openbsd-x64@0.21.4':
1104 | optional: true
1105 |
1106 | '@esbuild/sunos-x64@0.19.12':
1107 | optional: true
1108 |
1109 | '@esbuild/sunos-x64@0.21.4':
1110 | optional: true
1111 |
1112 | '@esbuild/win32-arm64@0.19.12':
1113 | optional: true
1114 |
1115 | '@esbuild/win32-arm64@0.21.4':
1116 | optional: true
1117 |
1118 | '@esbuild/win32-ia32@0.19.12':
1119 | optional: true
1120 |
1121 | '@esbuild/win32-ia32@0.21.4':
1122 | optional: true
1123 |
1124 | '@esbuild/win32-x64@0.19.12':
1125 | optional: true
1126 |
1127 | '@esbuild/win32-x64@0.21.4':
1128 | optional: true
1129 |
1130 | '@isaacs/cliui@8.0.2':
1131 | dependencies:
1132 | string-width: 5.1.2
1133 | string-width-cjs: string-width@4.2.3
1134 | strip-ansi: 7.1.0
1135 | strip-ansi-cjs: strip-ansi@6.0.1
1136 | wrap-ansi: 8.1.0
1137 | wrap-ansi-cjs: wrap-ansi@7.0.0
1138 |
1139 | '@jridgewell/gen-mapping@0.3.5':
1140 | dependencies:
1141 | '@jridgewell/set-array': 1.2.1
1142 | '@jridgewell/sourcemap-codec': 1.4.15
1143 | '@jridgewell/trace-mapping': 0.3.25
1144 |
1145 | '@jridgewell/resolve-uri@3.1.2': {}
1146 |
1147 | '@jridgewell/set-array@1.2.1': {}
1148 |
1149 | '@jridgewell/sourcemap-codec@1.4.15': {}
1150 |
1151 | '@jridgewell/trace-mapping@0.3.25':
1152 | dependencies:
1153 | '@jridgewell/resolve-uri': 3.1.2
1154 | '@jridgewell/sourcemap-codec': 1.4.15
1155 |
1156 | '@nodelib/fs.scandir@2.1.5':
1157 | dependencies:
1158 | '@nodelib/fs.stat': 2.0.5
1159 | run-parallel: 1.2.0
1160 |
1161 | '@nodelib/fs.stat@2.0.5': {}
1162 |
1163 | '@nodelib/fs.walk@1.2.8':
1164 | dependencies:
1165 | '@nodelib/fs.scandir': 2.1.5
1166 | fastq: 1.17.1
1167 |
1168 | '@pkgjs/parseargs@0.11.0':
1169 | optional: true
1170 |
1171 | '@remirror/core-constants@2.0.2': {}
1172 |
1173 | '@rollup/rollup-android-arm-eabi@4.18.0':
1174 | optional: true
1175 |
1176 | '@rollup/rollup-android-arm64@4.18.0':
1177 | optional: true
1178 |
1179 | '@rollup/rollup-darwin-arm64@4.18.0':
1180 | optional: true
1181 |
1182 | '@rollup/rollup-darwin-x64@4.18.0':
1183 | optional: true
1184 |
1185 | '@rollup/rollup-linux-arm-gnueabihf@4.18.0':
1186 | optional: true
1187 |
1188 | '@rollup/rollup-linux-arm-musleabihf@4.18.0':
1189 | optional: true
1190 |
1191 | '@rollup/rollup-linux-arm64-gnu@4.18.0':
1192 | optional: true
1193 |
1194 | '@rollup/rollup-linux-arm64-musl@4.18.0':
1195 | optional: true
1196 |
1197 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.0':
1198 | optional: true
1199 |
1200 | '@rollup/rollup-linux-riscv64-gnu@4.18.0':
1201 | optional: true
1202 |
1203 | '@rollup/rollup-linux-s390x-gnu@4.18.0':
1204 | optional: true
1205 |
1206 | '@rollup/rollup-linux-x64-gnu@4.18.0':
1207 | optional: true
1208 |
1209 | '@rollup/rollup-linux-x64-musl@4.18.0':
1210 | optional: true
1211 |
1212 | '@rollup/rollup-win32-arm64-msvc@4.18.0':
1213 | optional: true
1214 |
1215 | '@rollup/rollup-win32-ia32-msvc@4.18.0':
1216 | optional: true
1217 |
1218 | '@rollup/rollup-win32-x64-msvc@4.18.0':
1219 | optional: true
1220 |
1221 | '@tiptap/core@2.4.0(@tiptap/pm@2.4.0)':
1222 | dependencies:
1223 | '@tiptap/pm': 2.4.0
1224 |
1225 | '@tiptap/extension-list-item@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))':
1226 | dependencies:
1227 | '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0)
1228 |
1229 | '@tiptap/extension-ordered-list@2.4.0(@tiptap/core@2.4.0(@tiptap/pm@2.4.0))':
1230 | dependencies:
1231 | '@tiptap/core': 2.4.0(@tiptap/pm@2.4.0)
1232 |
1233 | '@tiptap/pm@2.4.0':
1234 | dependencies:
1235 | prosemirror-changeset: 2.2.1
1236 | prosemirror-collab: 1.3.1
1237 | prosemirror-commands: 1.5.2
1238 | prosemirror-dropcursor: 1.8.1
1239 | prosemirror-gapcursor: 1.3.2
1240 | prosemirror-history: 1.4.0
1241 | prosemirror-inputrules: 1.4.0
1242 | prosemirror-keymap: 1.2.2
1243 | prosemirror-markdown: 1.13.0
1244 | prosemirror-menu: 1.2.4
1245 | prosemirror-model: 1.21.0
1246 | prosemirror-schema-basic: 1.2.2
1247 | prosemirror-schema-list: 1.3.0
1248 | prosemirror-state: 1.4.3
1249 | prosemirror-tables: 1.3.7
1250 | prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6)
1251 | prosemirror-transform: 1.9.0
1252 | prosemirror-view: 1.33.6
1253 |
1254 | '@types/estree@1.0.5': {}
1255 |
1256 | '@types/uuid@9.0.8': {}
1257 |
1258 | ansi-regex@5.0.1: {}
1259 |
1260 | ansi-regex@6.0.1: {}
1261 |
1262 | ansi-styles@4.3.0:
1263 | dependencies:
1264 | color-convert: 2.0.1
1265 |
1266 | ansi-styles@6.2.1: {}
1267 |
1268 | any-promise@1.3.0: {}
1269 |
1270 | anymatch@3.1.3:
1271 | dependencies:
1272 | normalize-path: 3.0.0
1273 | picomatch: 2.3.1
1274 |
1275 | argparse@2.0.1: {}
1276 |
1277 | array-union@2.1.0: {}
1278 |
1279 | balanced-match@1.0.2: {}
1280 |
1281 | binary-extensions@2.3.0: {}
1282 |
1283 | brace-expansion@2.0.1:
1284 | dependencies:
1285 | balanced-match: 1.0.2
1286 |
1287 | braces@3.0.3:
1288 | dependencies:
1289 | fill-range: 7.1.1
1290 |
1291 | bundle-require@4.1.0(esbuild@0.19.12):
1292 | dependencies:
1293 | esbuild: 0.19.12
1294 | load-tsconfig: 0.2.5
1295 |
1296 | cac@6.7.14: {}
1297 |
1298 | chokidar@3.6.0:
1299 | dependencies:
1300 | anymatch: 3.1.3
1301 | braces: 3.0.3
1302 | glob-parent: 5.1.2
1303 | is-binary-path: 2.1.0
1304 | is-glob: 4.0.3
1305 | normalize-path: 3.0.0
1306 | readdirp: 3.6.0
1307 | optionalDependencies:
1308 | fsevents: 2.3.3
1309 |
1310 | color-convert@2.0.1:
1311 | dependencies:
1312 | color-name: 1.1.4
1313 |
1314 | color-name@1.1.4: {}
1315 |
1316 | commander@4.1.1: {}
1317 |
1318 | crelt@1.0.6: {}
1319 |
1320 | cross-spawn@7.0.3:
1321 | dependencies:
1322 | path-key: 3.1.1
1323 | shebang-command: 2.0.0
1324 | which: 2.0.2
1325 |
1326 | debug@4.3.4:
1327 | dependencies:
1328 | ms: 2.1.2
1329 |
1330 | dir-glob@3.0.1:
1331 | dependencies:
1332 | path-type: 4.0.0
1333 |
1334 | eastasianwidth@0.2.0: {}
1335 |
1336 | emoji-regex@8.0.0: {}
1337 |
1338 | emoji-regex@9.2.2: {}
1339 |
1340 | entities@4.5.0: {}
1341 |
1342 | esbuild@0.19.12:
1343 | optionalDependencies:
1344 | '@esbuild/aix-ppc64': 0.19.12
1345 | '@esbuild/android-arm': 0.19.12
1346 | '@esbuild/android-arm64': 0.19.12
1347 | '@esbuild/android-x64': 0.19.12
1348 | '@esbuild/darwin-arm64': 0.19.12
1349 | '@esbuild/darwin-x64': 0.19.12
1350 | '@esbuild/freebsd-arm64': 0.19.12
1351 | '@esbuild/freebsd-x64': 0.19.12
1352 | '@esbuild/linux-arm': 0.19.12
1353 | '@esbuild/linux-arm64': 0.19.12
1354 | '@esbuild/linux-ia32': 0.19.12
1355 | '@esbuild/linux-loong64': 0.19.12
1356 | '@esbuild/linux-mips64el': 0.19.12
1357 | '@esbuild/linux-ppc64': 0.19.12
1358 | '@esbuild/linux-riscv64': 0.19.12
1359 | '@esbuild/linux-s390x': 0.19.12
1360 | '@esbuild/linux-x64': 0.19.12
1361 | '@esbuild/netbsd-x64': 0.19.12
1362 | '@esbuild/openbsd-x64': 0.19.12
1363 | '@esbuild/sunos-x64': 0.19.12
1364 | '@esbuild/win32-arm64': 0.19.12
1365 | '@esbuild/win32-ia32': 0.19.12
1366 | '@esbuild/win32-x64': 0.19.12
1367 |
1368 | esbuild@0.21.4:
1369 | optionalDependencies:
1370 | '@esbuild/aix-ppc64': 0.21.4
1371 | '@esbuild/android-arm': 0.21.4
1372 | '@esbuild/android-arm64': 0.21.4
1373 | '@esbuild/android-x64': 0.21.4
1374 | '@esbuild/darwin-arm64': 0.21.4
1375 | '@esbuild/darwin-x64': 0.21.4
1376 | '@esbuild/freebsd-arm64': 0.21.4
1377 | '@esbuild/freebsd-x64': 0.21.4
1378 | '@esbuild/linux-arm': 0.21.4
1379 | '@esbuild/linux-arm64': 0.21.4
1380 | '@esbuild/linux-ia32': 0.21.4
1381 | '@esbuild/linux-loong64': 0.21.4
1382 | '@esbuild/linux-mips64el': 0.21.4
1383 | '@esbuild/linux-ppc64': 0.21.4
1384 | '@esbuild/linux-riscv64': 0.21.4
1385 | '@esbuild/linux-s390x': 0.21.4
1386 | '@esbuild/linux-x64': 0.21.4
1387 | '@esbuild/netbsd-x64': 0.21.4
1388 | '@esbuild/openbsd-x64': 0.21.4
1389 | '@esbuild/sunos-x64': 0.21.4
1390 | '@esbuild/win32-arm64': 0.21.4
1391 | '@esbuild/win32-ia32': 0.21.4
1392 | '@esbuild/win32-x64': 0.21.4
1393 |
1394 | escape-string-regexp@4.0.0: {}
1395 |
1396 | execa@5.1.1:
1397 | dependencies:
1398 | cross-spawn: 7.0.3
1399 | get-stream: 6.0.1
1400 | human-signals: 2.1.0
1401 | is-stream: 2.0.1
1402 | merge-stream: 2.0.0
1403 | npm-run-path: 4.0.1
1404 | onetime: 5.1.2
1405 | signal-exit: 3.0.7
1406 | strip-final-newline: 2.0.0
1407 |
1408 | fast-glob@3.3.2:
1409 | dependencies:
1410 | '@nodelib/fs.stat': 2.0.5
1411 | '@nodelib/fs.walk': 1.2.8
1412 | glob-parent: 5.1.2
1413 | merge2: 1.4.1
1414 | micromatch: 4.0.7
1415 |
1416 | fastq@1.17.1:
1417 | dependencies:
1418 | reusify: 1.0.4
1419 |
1420 | fill-range@7.1.1:
1421 | dependencies:
1422 | to-regex-range: 5.0.1
1423 |
1424 | foreground-child@3.1.1:
1425 | dependencies:
1426 | cross-spawn: 7.0.3
1427 | signal-exit: 4.1.0
1428 |
1429 | fsevents@2.3.3:
1430 | optional: true
1431 |
1432 | get-stream@6.0.1: {}
1433 |
1434 | glob-parent@5.1.2:
1435 | dependencies:
1436 | is-glob: 4.0.3
1437 |
1438 | glob@10.4.1:
1439 | dependencies:
1440 | foreground-child: 3.1.1
1441 | jackspeak: 3.1.2
1442 | minimatch: 9.0.4
1443 | minipass: 7.1.2
1444 | path-scurry: 1.11.1
1445 |
1446 | globby@11.1.0:
1447 | dependencies:
1448 | array-union: 2.1.0
1449 | dir-glob: 3.0.1
1450 | fast-glob: 3.3.2
1451 | ignore: 5.3.1
1452 | merge2: 1.4.1
1453 | slash: 3.0.0
1454 |
1455 | human-signals@2.1.0: {}
1456 |
1457 | ignore@5.3.1: {}
1458 |
1459 | is-binary-path@2.1.0:
1460 | dependencies:
1461 | binary-extensions: 2.3.0
1462 |
1463 | is-extglob@2.1.1: {}
1464 |
1465 | is-fullwidth-code-point@3.0.0: {}
1466 |
1467 | is-glob@4.0.3:
1468 | dependencies:
1469 | is-extglob: 2.1.1
1470 |
1471 | is-number@7.0.0: {}
1472 |
1473 | is-stream@2.0.1: {}
1474 |
1475 | isexe@2.0.0: {}
1476 |
1477 | jackspeak@3.1.2:
1478 | dependencies:
1479 | '@isaacs/cliui': 8.0.2
1480 | optionalDependencies:
1481 | '@pkgjs/parseargs': 0.11.0
1482 |
1483 | joycon@3.1.1: {}
1484 |
1485 | lilconfig@3.1.1: {}
1486 |
1487 | lines-and-columns@1.2.4: {}
1488 |
1489 | linkify-it@5.0.0:
1490 | dependencies:
1491 | uc.micro: 2.1.0
1492 |
1493 | load-tsconfig@0.2.5: {}
1494 |
1495 | lodash.sortby@4.7.0: {}
1496 |
1497 | lru-cache@10.2.2: {}
1498 |
1499 | markdown-it@14.1.0:
1500 | dependencies:
1501 | argparse: 2.0.1
1502 | entities: 4.5.0
1503 | linkify-it: 5.0.0
1504 | mdurl: 2.0.0
1505 | punycode.js: 2.3.1
1506 | uc.micro: 2.1.0
1507 |
1508 | mdurl@2.0.0: {}
1509 |
1510 | merge-stream@2.0.0: {}
1511 |
1512 | merge2@1.4.1: {}
1513 |
1514 | micromatch@4.0.7:
1515 | dependencies:
1516 | braces: 3.0.3
1517 | picomatch: 2.3.1
1518 |
1519 | mimic-fn@2.1.0: {}
1520 |
1521 | minimatch@9.0.4:
1522 | dependencies:
1523 | brace-expansion: 2.0.1
1524 |
1525 | minipass@7.1.2: {}
1526 |
1527 | ms@2.1.2: {}
1528 |
1529 | mz@2.7.0:
1530 | dependencies:
1531 | any-promise: 1.3.0
1532 | object-assign: 4.1.1
1533 | thenify-all: 1.6.0
1534 |
1535 | normalize-path@3.0.0: {}
1536 |
1537 | npm-run-path@4.0.1:
1538 | dependencies:
1539 | path-key: 3.1.1
1540 |
1541 | object-assign@4.1.1: {}
1542 |
1543 | onetime@5.1.2:
1544 | dependencies:
1545 | mimic-fn: 2.1.0
1546 |
1547 | orderedmap@2.1.1: {}
1548 |
1549 | path-key@3.1.1: {}
1550 |
1551 | path-scurry@1.11.1:
1552 | dependencies:
1553 | lru-cache: 10.2.2
1554 | minipass: 7.1.2
1555 |
1556 | path-type@4.0.0: {}
1557 |
1558 | picomatch@2.3.1: {}
1559 |
1560 | pirates@4.0.6: {}
1561 |
1562 | postcss-load-config@4.0.2:
1563 | dependencies:
1564 | lilconfig: 3.1.1
1565 | yaml: 2.4.2
1566 |
1567 | prosemirror-changeset@2.2.1:
1568 | dependencies:
1569 | prosemirror-transform: 1.9.0
1570 |
1571 | prosemirror-collab@1.3.1:
1572 | dependencies:
1573 | prosemirror-state: 1.4.3
1574 |
1575 | prosemirror-commands@1.5.2:
1576 | dependencies:
1577 | prosemirror-model: 1.21.0
1578 | prosemirror-state: 1.4.3
1579 | prosemirror-transform: 1.9.0
1580 |
1581 | prosemirror-dropcursor@1.8.1:
1582 | dependencies:
1583 | prosemirror-state: 1.4.3
1584 | prosemirror-transform: 1.9.0
1585 | prosemirror-view: 1.33.6
1586 |
1587 | prosemirror-gapcursor@1.3.2:
1588 | dependencies:
1589 | prosemirror-keymap: 1.2.2
1590 | prosemirror-model: 1.21.0
1591 | prosemirror-state: 1.4.3
1592 | prosemirror-view: 1.33.6
1593 |
1594 | prosemirror-history@1.4.0:
1595 | dependencies:
1596 | prosemirror-state: 1.4.3
1597 | prosemirror-transform: 1.9.0
1598 | prosemirror-view: 1.33.6
1599 | rope-sequence: 1.3.4
1600 |
1601 | prosemirror-inputrules@1.4.0:
1602 | dependencies:
1603 | prosemirror-state: 1.4.3
1604 | prosemirror-transform: 1.9.0
1605 |
1606 | prosemirror-keymap@1.2.2:
1607 | dependencies:
1608 | prosemirror-state: 1.4.3
1609 | w3c-keyname: 2.2.8
1610 |
1611 | prosemirror-markdown@1.13.0:
1612 | dependencies:
1613 | markdown-it: 14.1.0
1614 | prosemirror-model: 1.21.0
1615 |
1616 | prosemirror-menu@1.2.4:
1617 | dependencies:
1618 | crelt: 1.0.6
1619 | prosemirror-commands: 1.5.2
1620 | prosemirror-history: 1.4.0
1621 | prosemirror-state: 1.4.3
1622 |
1623 | prosemirror-model@1.21.0:
1624 | dependencies:
1625 | orderedmap: 2.1.1
1626 |
1627 | prosemirror-schema-basic@1.2.2:
1628 | dependencies:
1629 | prosemirror-model: 1.21.0
1630 |
1631 | prosemirror-schema-list@1.3.0:
1632 | dependencies:
1633 | prosemirror-model: 1.21.0
1634 | prosemirror-state: 1.4.3
1635 | prosemirror-transform: 1.9.0
1636 |
1637 | prosemirror-state@1.4.3:
1638 | dependencies:
1639 | prosemirror-model: 1.21.0
1640 | prosemirror-transform: 1.9.0
1641 | prosemirror-view: 1.33.6
1642 |
1643 | prosemirror-tables@1.3.7:
1644 | dependencies:
1645 | prosemirror-keymap: 1.2.2
1646 | prosemirror-model: 1.21.0
1647 | prosemirror-state: 1.4.3
1648 | prosemirror-transform: 1.9.0
1649 | prosemirror-view: 1.33.6
1650 |
1651 | prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.6):
1652 | dependencies:
1653 | '@remirror/core-constants': 2.0.2
1654 | escape-string-regexp: 4.0.0
1655 | prosemirror-model: 1.21.0
1656 | prosemirror-state: 1.4.3
1657 | prosemirror-view: 1.33.6
1658 |
1659 | prosemirror-transform@1.9.0:
1660 | dependencies:
1661 | prosemirror-model: 1.21.0
1662 |
1663 | prosemirror-view@1.33.6:
1664 | dependencies:
1665 | prosemirror-model: 1.21.0
1666 | prosemirror-state: 1.4.3
1667 | prosemirror-transform: 1.9.0
1668 |
1669 | punycode.js@2.3.1: {}
1670 |
1671 | punycode@2.3.1: {}
1672 |
1673 | queue-microtask@1.2.3: {}
1674 |
1675 | readdirp@3.6.0:
1676 | dependencies:
1677 | picomatch: 2.3.1
1678 |
1679 | resolve-from@5.0.0: {}
1680 |
1681 | reusify@1.0.4: {}
1682 |
1683 | rollup@4.18.0:
1684 | dependencies:
1685 | '@types/estree': 1.0.5
1686 | optionalDependencies:
1687 | '@rollup/rollup-android-arm-eabi': 4.18.0
1688 | '@rollup/rollup-android-arm64': 4.18.0
1689 | '@rollup/rollup-darwin-arm64': 4.18.0
1690 | '@rollup/rollup-darwin-x64': 4.18.0
1691 | '@rollup/rollup-linux-arm-gnueabihf': 4.18.0
1692 | '@rollup/rollup-linux-arm-musleabihf': 4.18.0
1693 | '@rollup/rollup-linux-arm64-gnu': 4.18.0
1694 | '@rollup/rollup-linux-arm64-musl': 4.18.0
1695 | '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0
1696 | '@rollup/rollup-linux-riscv64-gnu': 4.18.0
1697 | '@rollup/rollup-linux-s390x-gnu': 4.18.0
1698 | '@rollup/rollup-linux-x64-gnu': 4.18.0
1699 | '@rollup/rollup-linux-x64-musl': 4.18.0
1700 | '@rollup/rollup-win32-arm64-msvc': 4.18.0
1701 | '@rollup/rollup-win32-ia32-msvc': 4.18.0
1702 | '@rollup/rollup-win32-x64-msvc': 4.18.0
1703 | fsevents: 2.3.3
1704 |
1705 | rope-sequence@1.3.4: {}
1706 |
1707 | run-parallel@1.2.0:
1708 | dependencies:
1709 | queue-microtask: 1.2.3
1710 |
1711 | shebang-command@2.0.0:
1712 | dependencies:
1713 | shebang-regex: 3.0.0
1714 |
1715 | shebang-regex@3.0.0: {}
1716 |
1717 | signal-exit@3.0.7: {}
1718 |
1719 | signal-exit@4.1.0: {}
1720 |
1721 | slash@3.0.0: {}
1722 |
1723 | source-map@0.8.0-beta.0:
1724 | dependencies:
1725 | whatwg-url: 7.1.0
1726 |
1727 | string-width@4.2.3:
1728 | dependencies:
1729 | emoji-regex: 8.0.0
1730 | is-fullwidth-code-point: 3.0.0
1731 | strip-ansi: 6.0.1
1732 |
1733 | string-width@5.1.2:
1734 | dependencies:
1735 | eastasianwidth: 0.2.0
1736 | emoji-regex: 9.2.2
1737 | strip-ansi: 7.1.0
1738 |
1739 | strip-ansi@6.0.1:
1740 | dependencies:
1741 | ansi-regex: 5.0.1
1742 |
1743 | strip-ansi@7.1.0:
1744 | dependencies:
1745 | ansi-regex: 6.0.1
1746 |
1747 | strip-final-newline@2.0.0: {}
1748 |
1749 | sucrase@3.35.0:
1750 | dependencies:
1751 | '@jridgewell/gen-mapping': 0.3.5
1752 | commander: 4.1.1
1753 | glob: 10.4.1
1754 | lines-and-columns: 1.2.4
1755 | mz: 2.7.0
1756 | pirates: 4.0.6
1757 | ts-interface-checker: 0.1.13
1758 |
1759 | thenify-all@1.6.0:
1760 | dependencies:
1761 | thenify: 3.3.1
1762 |
1763 | thenify@3.3.1:
1764 | dependencies:
1765 | any-promise: 1.3.0
1766 |
1767 | to-regex-range@5.0.1:
1768 | dependencies:
1769 | is-number: 7.0.0
1770 |
1771 | tr46@1.0.1:
1772 | dependencies:
1773 | punycode: 2.3.1
1774 |
1775 | tree-kill@1.2.2: {}
1776 |
1777 | ts-interface-checker@0.1.13: {}
1778 |
1779 | tsup@8.0.2(typescript@5.4.5):
1780 | dependencies:
1781 | bundle-require: 4.1.0(esbuild@0.19.12)
1782 | cac: 6.7.14
1783 | chokidar: 3.6.0
1784 | debug: 4.3.4
1785 | esbuild: 0.19.12
1786 | execa: 5.1.1
1787 | globby: 11.1.0
1788 | joycon: 3.1.1
1789 | postcss-load-config: 4.0.2
1790 | resolve-from: 5.0.0
1791 | rollup: 4.18.0
1792 | source-map: 0.8.0-beta.0
1793 | sucrase: 3.35.0
1794 | tree-kill: 1.2.2
1795 | optionalDependencies:
1796 | typescript: 5.4.5
1797 | transitivePeerDependencies:
1798 | - supports-color
1799 | - ts-node
1800 |
1801 | typescript@5.4.5: {}
1802 |
1803 | uc.micro@2.1.0: {}
1804 |
1805 | uuid@9.0.1: {}
1806 |
1807 | w3c-keyname@2.2.8: {}
1808 |
1809 | webidl-conversions@4.0.2: {}
1810 |
1811 | whatwg-url@7.1.0:
1812 | dependencies:
1813 | lodash.sortby: 4.7.0
1814 | tr46: 1.0.1
1815 | webidl-conversions: 4.0.2
1816 |
1817 | which@2.0.2:
1818 | dependencies:
1819 | isexe: 2.0.0
1820 |
1821 | wrap-ansi@7.0.0:
1822 | dependencies:
1823 | ansi-styles: 4.3.0
1824 | string-width: 4.2.3
1825 | strip-ansi: 6.0.1
1826 |
1827 | wrap-ansi@8.1.0:
1828 | dependencies:
1829 | ansi-styles: 6.2.1
1830 | string-width: 5.1.2
1831 | strip-ansi: 7.1.0
1832 |
1833 | yaml@2.4.2: {}
1834 |
--------------------------------------------------------------------------------
/package/src/footnotes/footnote.ts:
--------------------------------------------------------------------------------
1 | import { mergeAttributes } from "@tiptap/core";
2 | import ListItem, { ListItemOptions } from "@tiptap/extension-list-item";
3 |
4 | declare module "@tiptap/core" {
5 | interface Commands {
6 | footnote: {
7 | /**
8 | * scrolls to & sets the text selection at the end of the footnote with the given id
9 | * @param id the id of the footote (i.e. the `data-id` attribute value of the footnote)
10 | * @example editor.commands.focusFootnote("a43956c1-1ab8-462f-96e4-be3a4b27fd50")
11 | */
12 | focusFootnote: (id: string) => ReturnType;
13 | };
14 | }
15 | }
16 |
17 | export interface FootnoteOptions extends ListItemOptions {
18 | /**
19 | * Content expression for this node
20 | * @default "paragraph+"
21 | */
22 | content: string;
23 | }
24 |
25 | const Footnote = ListItem.extend({
26 | name: "footnote",
27 | content() {
28 | return this.options.content;
29 | },
30 | isolating: true,
31 | defining: true,
32 | draggable: false,
33 |
34 | // @ts-expect-error
35 | addOptions() {
36 | return {
37 | ...this.parent?.(),
38 | content: "paragraph+",
39 | };
40 | },
41 |
42 | addAttributes() {
43 | return {
44 | id: {
45 | isRequired: true,
46 | },
47 | // the data-id field should match the data-id field of a footnote reference.
48 | // it's used to link footnotes and references together.
49 | "data-id": {
50 | isRequired: true,
51 | },
52 | };
53 | },
54 | parseHTML() {
55 | return [
56 | {
57 | tag: "li",
58 | getAttrs(node) {
59 | const id = node.getAttribute("data-id");
60 | if (id) {
61 | return {
62 | "data-id": node.getAttribute("data-id"),
63 | };
64 | }
65 | return false;
66 | },
67 | priority: 1000,
68 | },
69 | ];
70 | },
71 | renderHTML({ HTMLAttributes }) {
72 | return [
73 | "li",
74 | mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),
75 | 0,
76 | ];
77 | },
78 |
79 | addCommands() {
80 | return {
81 | focusFootnote:
82 | (id: string) =>
83 | ({ editor, chain }) => {
84 | const matchedFootnote = editor.$node("footnote", {
85 | "data-id": id,
86 | });
87 | if (matchedFootnote) {
88 | // sets the text selection to the end of the footnote definition and scroll to it.
89 | chain()
90 | .focus()
91 | .setTextSelection(
92 | matchedFootnote.from + matchedFootnote.content.size
93 | )
94 | .run();
95 |
96 | matchedFootnote.element.scrollIntoView();
97 | return true;
98 | }
99 | return false;
100 | },
101 | };
102 | },
103 | addKeyboardShortcuts() {
104 | return {
105 | // when the user presses tab, adjust the text selection to be at the end of the next footnote
106 | Tab: ({ editor }) => {
107 | try {
108 | const { selection } = editor.state;
109 | const pos = editor.$pos(selection.anchor);
110 | if (!pos.after) return false;
111 | // if the next node is "footnotes", place the text selection at the end of the first footnote
112 | if (pos.after.node.type.name == "footnotes") {
113 | const firstChild = pos.after.node.child(0);
114 | editor
115 | .chain()
116 | .setTextSelection(pos.after.from + firstChild.content.size)
117 | .scrollIntoView()
118 | .run();
119 | return true;
120 | } else {
121 | const startPos = selection.$from.start(2);
122 | if (Number.isNaN(startPos)) return false;
123 | const parent = editor.$pos(startPos);
124 | if (parent.node.type.name != "footnote" || !parent.after) {
125 | return false;
126 | }
127 | // if the next node is a footnote, place the text selection at the end of it
128 | editor
129 | .chain()
130 | .setTextSelection(parent.after.to - 1)
131 | .scrollIntoView()
132 | .run();
133 | return true;
134 | }
135 | } catch {
136 | return false;
137 | }
138 | },
139 | // inverse of the tab command - place the text selection at the end of the previous footnote
140 | "Shift-Tab": ({ editor }) => {
141 | const { selection } = editor.state;
142 | const startPos = selection.$from.start(2);
143 | if (Number.isNaN(startPos)) return false;
144 | const parent = editor.$pos(startPos);
145 | if (parent.node.type.name != "footnote" || !parent.before) {
146 | return false;
147 | }
148 |
149 | editor
150 | .chain()
151 | .setTextSelection(parent.before.to - 1)
152 | .scrollIntoView()
153 | .run();
154 | return true;
155 | },
156 | };
157 | },
158 | });
159 |
160 | export default Footnote;
161 |
--------------------------------------------------------------------------------
/package/src/footnotes/footnotes.ts:
--------------------------------------------------------------------------------
1 | import OrderedList from "@tiptap/extension-ordered-list";
2 | import FootnoteRules from "./rules";
3 |
4 | const Footnotes = OrderedList.extend({
5 | name: "footnotes",
6 | group: "", // removed the default group of the ordered list extension
7 | isolating: true,
8 | defining: true,
9 | draggable: false,
10 |
11 | content() {
12 | return "footnote*";
13 | },
14 | addAttributes() {
15 | return {
16 | class: {
17 | default: "footnotes",
18 | },
19 | };
20 | },
21 | parseHTML() {
22 | return [
23 | {
24 | tag: "ol.footnotes",
25 | priority: 1000,
26 | },
27 | ];
28 | },
29 |
30 | addKeyboardShortcuts() {
31 | return {
32 | // override the default behavior of Mod-a:
33 | // rather than selecting the whole text content of the editor, only select the text inside the current footnote
34 | "Mod-a": ({ editor }) => {
35 | try {
36 | const { selection } = editor.state;
37 | const { $from } = selection;
38 | // footnote listItems are at depth 2, we are getting the start & end position of the parent list item from the current cursor position
39 | const start = $from.start(2);
40 | const startNode = editor.$pos(start);
41 |
42 | if (startNode.node.type.name != "footnote") return false;
43 |
44 | const end = $from.end(2);
45 |
46 | editor.commands.setTextSelection({
47 | from: start + 1,
48 | to: end - 1,
49 | });
50 | return true;
51 | } catch (e) {
52 | return false;
53 | }
54 | },
55 | };
56 | },
57 | addCommands() {
58 | return {};
59 | },
60 | addInputRules() {
61 | return [];
62 | },
63 |
64 | addExtensions() {
65 | return [FootnoteRules];
66 | },
67 | });
68 |
69 | export default Footnotes;
70 |
--------------------------------------------------------------------------------
/package/src/footnotes/reference.ts:
--------------------------------------------------------------------------------
1 | import { mergeAttributes, Node } from "@tiptap/core";
2 | import { NodeSelection, Plugin, PluginKey } from "@tiptap/pm/state";
3 |
4 | import { v4 as uuid } from "uuid";
5 |
6 | const REFNUM_ATTR = "data-reference-number";
7 | const REF_CLASS = "footnote-ref";
8 |
9 | declare module "@tiptap/core" {
10 | interface Commands {
11 | footnoteReference: {
12 | /**
13 | * add a new footnote reference
14 | * @example editor.commands.addFootnote()
15 | */
16 | addFootnote: () => ReturnType;
17 | };
18 | }
19 | }
20 |
21 | const FootnoteReference = Node.create({
22 | name: "footnoteReference",
23 | inline: true,
24 | content: "text*",
25 | group: "inline",
26 | atom: true,
27 | draggable: true,
28 |
29 | parseHTML() {
30 | return [
31 | {
32 | tag: `sup`,
33 | priority: 1000,
34 | getAttrs(node) {
35 | const anchor = node.querySelector(
36 | `a.${REF_CLASS}:first-child`
37 | );
38 |
39 | if (!anchor) {
40 | return false;
41 | }
42 |
43 | const id = anchor.getAttribute("data-id");
44 | const ref = anchor.getAttribute(REFNUM_ATTR);
45 |
46 | return {
47 | "data-id": id ?? uuid(),
48 | referenceNumber: ref ?? anchor.innerText,
49 | };
50 | },
51 | contentElement(node) {
52 | return node.firstChild as HTMLElement;
53 | },
54 | },
55 | ];
56 | },
57 |
58 | addAttributes() {
59 | return {
60 | class: {
61 | default: REF_CLASS,
62 | },
63 | "data-id": {
64 | renderHTML(attributes) {
65 | return {
66 | "data-id": attributes["data-id"] || uuid(),
67 | };
68 | },
69 | },
70 | referenceNumber: {},
71 |
72 | href: {
73 | renderHTML(attributes) {
74 | return {
75 | href: `#fn:${attributes["referenceNumber"]}`,
76 | };
77 | },
78 | },
79 | };
80 | },
81 |
82 | renderHTML({ HTMLAttributes }) {
83 | const { referenceNumber, ...attributes } = HTMLAttributes;
84 | const attrs = mergeAttributes(this.options.HTMLAttributes, attributes);
85 | attrs[REFNUM_ATTR] = referenceNumber;
86 |
87 | return [
88 | "sup",
89 | { id: `fnref:${referenceNumber}` },
90 | ["a", attrs, HTMLAttributes.referenceNumber],
91 | ];
92 | },
93 |
94 | addProseMirrorPlugins() {
95 | const { editor } = this;
96 | return [
97 | new Plugin({
98 | key: new PluginKey("footnoteRefClick"),
99 |
100 | props: {
101 | // on double-click, focus on the footnote
102 | handleDoubleClickOn(view, pos, node, nodePos, event) {
103 | if (node.type.name != "footnoteReference") return false;
104 | event.preventDefault();
105 | const id = node.attrs["data-id"];
106 | return editor.commands.focusFootnote(id);
107 | },
108 | // click the footnote reference once to get focus, click twice to scroll to the footnote
109 | handleClickOn(view, pos, node, nodePos, event) {
110 | if (node.type.name != "footnoteReference") return false;
111 | event.preventDefault();
112 | const { selection } = editor.state.tr;
113 | if (selection instanceof NodeSelection && selection.node.eq(node)) {
114 | const id = node.attrs["data-id"];
115 | return editor.commands.focusFootnote(id);
116 | } else {
117 | editor.chain().setNodeSelection(nodePos).run();
118 | return true;
119 | }
120 | },
121 | },
122 | }),
123 | ];
124 | },
125 |
126 | addCommands() {
127 | return {
128 | addFootnote:
129 | () =>
130 | ({ state, tr }) => {
131 | const node = this.type.create({
132 | "data-id": uuid(),
133 | });
134 | tr.insert(state.selection.anchor, node);
135 | return true;
136 | },
137 | };
138 | },
139 |
140 | addInputRules() {
141 | // when a user types [^text], add a new footnote
142 | return [
143 | {
144 | find: /\[\^(.*?)\]/,
145 | type: this.type,
146 | handler({ range, match, chain }) {
147 | const start = range.from;
148 | let end = range.to;
149 | if (match[1]) {
150 | chain().deleteRange({ from: start, to: end }).addFootnote().run();
151 | }
152 | },
153 | },
154 | ];
155 | },
156 | });
157 |
158 | export default FootnoteReference;
159 |
--------------------------------------------------------------------------------
/package/src/footnotes/rules.ts:
--------------------------------------------------------------------------------
1 | import { Plugin, PluginKey, TextSelection } from "@tiptap/pm/state";
2 | import { ReplaceStep } from "@tiptap/pm/transform";
3 | import { Extension, minMax } from "@tiptap/core";
4 | import { updateFootnotesList } from "./utils";
5 |
6 | const FootnoteRules = Extension.create({
7 | name: "footnoteRules",
8 | priority: 1000,
9 | addProseMirrorPlugins() {
10 | return [
11 | new Plugin({
12 | key: new PluginKey("footnoteRules"),
13 | filterTransaction(tr) {
14 | const { from, to } = tr.selection;
15 |
16 | // allow transactions on the whole document
17 | const minPos = TextSelection.atStart(tr.doc).from;
18 | const maxPos = TextSelection.atEnd(tr.doc).to;
19 | const resolvedFrom = minMax(0, minPos, maxPos);
20 | const resolvedEnd = minMax(tr.doc.content.size, minPos, maxPos);
21 | if (from == resolvedFrom && to == resolvedEnd) return true;
22 |
23 | let selectedFootnotes = false;
24 | let selectedContent = false;
25 | let footnoteCount = 0;
26 | tr.doc.nodesBetween(from, to, (node, _, parent) => {
27 | if (parent?.type.name == "doc" && node.type.name != "footnotes") {
28 | selectedContent = true;
29 | } else if (node.type.name == "footnote") {
30 | footnoteCount += 1;
31 | } else if (node.type.name == "footnotes") {
32 | selectedFootnotes = true;
33 | }
34 | });
35 | const overSelected = selectedContent && selectedFootnotes;
36 | /*
37 | * Here, we don't allow any transaction that spans between the "content" nodes and the "footnotes" node. This also rejects any transaction that spans between more than 1 footnote.
38 | */
39 | return !overSelected && footnoteCount <= 1;
40 | },
41 |
42 | // if there are some to the footnote references (added/deleted/dragged), append a transaction that updates the footnotes list accordingly
43 | appendTransaction(transactions, oldState, newState) {
44 | let newTr = newState.tr;
45 | let refsChanged = false; // true if the footnote references have been changed, false otherwise
46 | for (let tr of transactions) {
47 | if (!tr.docChanged) continue;
48 | if (refsChanged) break;
49 |
50 | for (let step of tr.steps) {
51 | if (!(step instanceof ReplaceStep)) continue;
52 | if (refsChanged) break;
53 |
54 | const isDelete = step.from != step.to; // the user deleted items from the document (from != to & the step is a replace step)
55 | const isInsert = step.slice.size > 0;
56 |
57 | // check if any footnote references have been inserted
58 | if (isInsert) {
59 | step.slice.content.descendants((node) => {
60 | if (node?.type.name == "footnoteReference") {
61 | refsChanged = true;
62 | return false;
63 | }
64 | });
65 | }
66 | if (isDelete && !refsChanged) {
67 | // check if any footnote references have been deleted
68 | tr.before.nodesBetween(
69 | step.from,
70 | Math.min(tr.before.content.size, step.to), // make sure to not go over the old document's limit
71 | (node) => {
72 | if (node.type.name == "footnoteReference") {
73 | refsChanged = true;
74 | return false;
75 | }
76 | },
77 | );
78 | }
79 | }
80 | }
81 |
82 | if (refsChanged) {
83 | updateFootnotesList(newTr, newState);
84 | return newTr;
85 | }
86 |
87 | return null;
88 | },
89 | }),
90 | ];
91 | },
92 | });
93 | export default FootnoteRules;
94 |
--------------------------------------------------------------------------------
/package/src/footnotes/utils.ts:
--------------------------------------------------------------------------------
1 | import { EditorState, Transaction } from "@tiptap/pm/state";
2 | import { Fragment, Node } from "@tiptap/pm/model";
3 |
4 | // update the reference number of all the footnote references in the document
5 | export function updateFootnoteReferences(tr: Transaction) {
6 | let count = 1;
7 |
8 | const nodes: any[] = [];
9 |
10 | tr.doc.descendants((node, pos) => {
11 | if (node.type.name == "footnoteReference") {
12 | tr.setNodeAttribute(pos, "referenceNumber", `${count}`);
13 |
14 | nodes.push(node);
15 | count += 1;
16 | }
17 | });
18 | // return the updated footnote references (in the order that they appear in the document)
19 | return nodes;
20 | }
21 |
22 | function getFootnotes(tr: Transaction) {
23 | let footnotesRange: { from: number; to: number } | undefined;
24 | const footnotes: Node[] = [];
25 | tr.doc.descendants((node, pos) => {
26 | if (node.type.name == "footnote") {
27 | footnotes.push(node);
28 | } else if (node.type.name == "footnotes") {
29 | footnotesRange = { from: pos, to: pos + node.nodeSize };
30 | } else {
31 | return false;
32 | }
33 | });
34 | return { footnotesRange, footnotes };
35 | }
36 |
37 | // update the "footnotes" ordered list based on the footnote references in the document
38 | export function updateFootnotesList(tr: Transaction, state: EditorState) {
39 | const footnoteReferences = updateFootnoteReferences(tr);
40 |
41 | const footnoteType = state.schema.nodes.footnote;
42 | const footnotesType = state.schema.nodes.footnotes;
43 |
44 | const emptyParagraph = state.schema.nodeFromJSON({
45 | type: "paragraph",
46 | content: [],
47 | });
48 |
49 | const { footnotesRange, footnotes } = getFootnotes(tr);
50 |
51 | // a mapping of footnote id -> footnote node
52 | const footnoteIds: { [key: string]: Node } = footnotes.reduce(
53 | (obj, footnote) => {
54 | obj[footnote.attrs["data-id"]] = footnote;
55 | return obj;
56 | },
57 | {} as any,
58 | );
59 |
60 | const newFootnotes: Node[] = [];
61 |
62 | let footnoteRefIds = new Set(
63 | footnoteReferences.map((ref) => ref.attrs["data-id"]),
64 | );
65 | const deleteFootnoteIds: Set = new Set();
66 | for (let footnote of footnotes) {
67 | const id = footnote.attrs["data-id"];
68 | if (!footnoteRefIds.has(id) || deleteFootnoteIds.has(id)) {
69 | deleteFootnoteIds.add(id);
70 | // we traverse through this footnote's content because it may contain footnote references.
71 | // we want to delete the footnotes associated with these references, so we add them to the delete set.
72 | footnote.content.descendants((node) => {
73 | if (node.type.name == "footnoteReference")
74 | deleteFootnoteIds.add(node.attrs["data-id"]);
75 | });
76 | }
77 | }
78 |
79 | for (let i = 0; i < footnoteReferences.length; i++) {
80 | let refId = footnoteReferences[i].attrs["data-id"];
81 |
82 | if (deleteFootnoteIds.has(refId)) continue;
83 | // if there is a footnote w/ the same id as this `ref`, we preserve its content and update its id attribute
84 | if (refId in footnoteIds) {
85 | let footnote = footnoteIds[refId];
86 | newFootnotes.push(
87 | footnoteType.create(
88 | { ...footnote.attrs, id: `fn:${i + 1}` },
89 | footnote.content,
90 | ),
91 | );
92 | } else {
93 | let newNode = footnoteType.create(
94 | {
95 | "data-id": refId,
96 | id: `fn:${i + 1}`,
97 | },
98 | [emptyParagraph],
99 | );
100 | newFootnotes.push(newNode);
101 | }
102 | }
103 |
104 | if (newFootnotes.length == 0) {
105 | // no footnotes in the doc, delete the "footnotes" node
106 | if (footnotesRange) {
107 | tr.delete(footnotesRange.from, footnotesRange.to);
108 | }
109 | } else if (!footnotesRange) {
110 | // there is no footnotes node present in the doc, add it
111 | tr.insert(
112 | tr.doc.content.size,
113 | footnotesType.create(undefined, Fragment.from(newFootnotes)),
114 | );
115 | } else {
116 | tr.replaceWith(
117 | footnotesRange!.from + 1, // add 1 to point at the position after the opening ol tag
118 | footnotesRange!.to - 1, // substract 1 to point to the position before the closing ol tag
119 | Fragment.from(newFootnotes),
120 | );
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/package/src/index.ts:
--------------------------------------------------------------------------------
1 | import Footnotes from "./footnotes/footnotes";
2 | import FootnoteReference from "./footnotes/reference";
3 | import Footnote from "./footnotes/footnote";
4 |
5 | export { Footnotes, Footnote, FootnoteReference };
6 |
--------------------------------------------------------------------------------
/package/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | import { Editor } from "@tiptap/core";
2 | import Document from "@tiptap/extension-document";
3 | import Paragraph from "@tiptap/extension-paragraph";
4 | import Text from "@tiptap/extension-text";
5 | import { expect, test } from "vitest";
6 |
7 | import { Footnote, FootnoteReference, Footnotes } from "../src";
8 | import { GatheredFootnotes, gatherFootnotes, newEditor } from "./utils";
9 |
10 | function testMatchingFootnotes(footnotes: GatheredFootnotes) {
11 | expect(footnotes.refs.length).toEqual(footnotes.footnotes.length);
12 |
13 | for (let i = 0; i < footnotes.refs.length; i++) {
14 | const ref = footnotes.refs[i];
15 | const footnote = footnotes.footnotes[i];
16 | let refNumber = String(i + 1);
17 |
18 | expect(ref.attrs!["data-id"]).toEqual(footnote.attrs!["data-id"]);
19 | expect(ref.attrs!["referenceNumber"]).toEqual(refNumber);
20 | expect(footnote.attrs!["id"]).toEqual(`fn:${refNumber}`);
21 | }
22 | }
23 |
24 | test("basic footnote reference insertion", () => {
25 | const editor = newEditor();
26 | editor.commands.addFootnote();
27 | const footnotes = gatherFootnotes(editor);
28 | testMatchingFootnotes(footnotes);
29 | });
30 |
31 | test("footnote insertion between two refs ", () => {
32 | const editor = newEditor();
33 | editor.commands.addFootnote();
34 | editor.commands.insertContent("-----------");
35 | editor.commands.addFootnote();
36 |
37 | // add footnote betwween refs 1 & 2
38 | editor.commands.setTextSelection(10);
39 | editor.commands.addFootnote();
40 |
41 | const footnotes = gatherFootnotes(editor);
42 |
43 | testMatchingFootnotes(footnotes);
44 | });
45 |
46 | test("footnote insertion between two refs (with chained command)", () => {
47 | const editor = newEditor();
48 | editor.commands.addFootnote();
49 | editor.commands.insertContent("-----------");
50 | editor.commands.addFootnote();
51 |
52 | // add footnote betwween refs 1 & 2
53 | editor.commands.setTextSelection(10);
54 |
55 | editor.chain().deleteRange({ from: 2, to: 5 }).addFootnote().run();
56 |
57 | const footnotes = gatherFootnotes(editor);
58 |
59 | testMatchingFootnotes(footnotes);
60 | });
61 |
62 | test("test footnote reference deletion", () => {
63 | const editor = newEditor();
64 | editor.commands.addFootnote();
65 | editor.commands.addFootnote();
66 | editor.commands.addFootnote();
67 |
68 | const prevFootnotes = gatherFootnotes(editor);
69 |
70 | // delete the first footnote ref
71 | editor.commands.deleteRange({ from: 1, to: 3 });
72 |
73 | const footnotes = gatherFootnotes(editor);
74 |
75 | expect(footnotes.refs.length).toEqual(2);
76 |
77 | expect(footnotes.refs[0].attrs["data-id"]).toEqual(
78 | prevFootnotes.refs[1].attrs["data-id"]
79 | );
80 | expect(footnotes.refs[1].attrs["data-id"]).toEqual(
81 | prevFootnotes.refs[2].attrs["data-id"]
82 | );
83 |
84 | testMatchingFootnotes(footnotes);
85 | });
86 |
87 | test("test footnote content options", () => {
88 | {
89 | const editor = new Editor({
90 | extensions: [
91 | Document.extend({
92 | content: "block+ footnotes?",
93 | }),
94 | Text,
95 | Paragraph,
96 | Footnotes,
97 | Footnote,
98 | FootnoteReference,
99 | ],
100 | });
101 |
102 | const spec = editor.state.schema.nodes.footnote.spec;
103 | expect(spec.content).toBe("paragraph+");
104 | }
105 |
106 | {
107 | const editor = new Editor({
108 | extensions: [
109 | Document.extend({
110 | content: "block+ footnotes?",
111 | }),
112 | Text,
113 | Paragraph,
114 | Footnotes,
115 | Footnote.configure({
116 | content: "paragraph block*",
117 | }),
118 | FootnoteReference,
119 | ],
120 | });
121 |
122 | const spec = editor.state.schema.nodes.footnote.spec;
123 | expect(spec.content).toBe("paragraph block*");
124 | }
125 | });
126 |
--------------------------------------------------------------------------------
/package/tests/utils.ts:
--------------------------------------------------------------------------------
1 | import { Editor } from "@tiptap/core";
2 | import { Node } from "@tiptap/pm/model";
3 | import Document from "@tiptap/extension-document";
4 | import Paragraph from "@tiptap/extension-paragraph";
5 | import Text from "@tiptap/extension-text";
6 | import { Footnote, Footnotes, FootnoteReference } from "../src/index";
7 |
8 | export type GatheredFootnotes = {
9 | refs: Node[];
10 | footnotes: Node[];
11 | };
12 | export function gatherFootnotes(editor: Editor) {
13 | const footnotes: GatheredFootnotes = { refs: [], footnotes: [] };
14 |
15 | editor.state.doc.descendants((node) => {
16 | if (node.type.name == "footnoteReference") {
17 | footnotes.refs.push(node);
18 | } else if (node.type.name == "footnote") {
19 | footnotes.footnotes.push(node);
20 | }
21 | });
22 | return footnotes;
23 | }
24 |
25 | const createEditorEl = () => {
26 | const editorEl = document.createElement("div");
27 |
28 | editorEl.classList.add("tiptap");
29 | document.body.appendChild(editorEl);
30 |
31 | return editorEl;
32 | };
33 | export function newEditor() {
34 | return new Editor({
35 | element: createEditorEl(),
36 | extensions: [
37 | Document.extend({
38 | content: "block+ footnotes?",
39 | }),
40 | Text,
41 | Paragraph,
42 | Footnotes,
43 | Footnote,
44 | FootnoteReference,
45 | ],
46 | });
47 | }
48 |
--------------------------------------------------------------------------------
/package/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2020",
4 | "module": "esnext",
5 | "strict": true,
6 | "importHelpers": true,
7 | "moduleResolution": "node",
8 | "esModuleInterop": true,
9 | "allowSyntheticDefaultImports": true,
10 | "sourceMap": true,
11 | "baseUrl": ".",
12 | "rootDir": ".",
13 | "lib": ["esnext", "dom", "dom.iterable"],
14 | "noEmit": true,
15 | "isolatedModules": true,
16 | "outDir": "./dist",
17 | "declaration": true
18 | },
19 | "include": ["src"],
20 | "exclude": ["**/node_modules", "**/dist"]
21 | }
22 |
--------------------------------------------------------------------------------
/package/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "tsup";
2 | import pkg from "./package.json";
3 |
4 | export default defineConfig({
5 | format: ["cjs", "esm"],
6 | entry: ["./src/index.ts"],
7 | dts: true,
8 | shims: true,
9 | skipNodeModulesBundle: true,
10 | clean: true,
11 | minify: false,
12 | sourcemap: true,
13 | external: [
14 | "@tiptap/*",
15 | ...Object.keys(pkg.dependencies),
16 | ...Object.keys(pkg.peerDependencies),
17 | ],
18 | });
19 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - package/
3 | - examples/react/
--------------------------------------------------------------------------------