├── package ├── src │ ├── vite-env.d.ts │ ├── styles │ │ ├── tailwind.css │ │ ├── index.css │ │ └── Prosemirror.css │ ├── main.ts │ ├── components │ │ ├── extensions │ │ │ ├── updated-image.ts │ │ │ ├── index.ts │ │ │ ├── slashCommandList.vue │ │ │ └── slashExtension.ts │ │ ├── icons │ │ │ └── loadingCircle.vue │ │ ├── BubbleMenu │ │ │ ├── LinkSelector.vue │ │ │ ├── index.vue │ │ │ ├── NodeSelector.vue │ │ │ └── ColorSelector.vue │ │ ├── plugins │ │ │ └── upload-images.ts │ │ └── Editor.vue │ ├── lib │ │ ├── editor.ts │ │ ├── props.ts │ │ └── default-content.ts │ └── App.vue ├── postcss.config.js ├── index.ts ├── tsconfig.node.json ├── .gitignore ├── index.html ├── tsconfig.json ├── vite.config.ts ├── tailwind.config.js ├── public │ └── vite.svg ├── package.json ├── README.md └── pnpm-lock.yaml ├── nuxt-server ├── .npmrc ├── server │ ├── tsconfig.json │ └── api │ │ ├── upload.ts │ │ └── generate.ts ├── public │ └── favicon.ico ├── tsconfig.json ├── app.vue ├── nuxt.config.ts ├── .gitignore ├── package.json └── README.md ├── .vscode └── extensions.json └── README.md /package/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /nuxt-server/.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /nuxt-server/server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../.nuxt/tsconfig.server.json" 3 | } 4 | -------------------------------------------------------------------------------- /package/src/styles/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /nuxt-server/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naveennaidu/novel-vue/HEAD/nuxt-server/public/favicon.ico -------------------------------------------------------------------------------- /nuxt-server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /nuxt-server/app.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /package/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | "postcss-import": {}, 4 | "tailwindcss/nesting": {}, 5 | tailwindcss: {}, 6 | autoprefixer: {}, 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /package/index.ts: -------------------------------------------------------------------------------- 1 | import "./src/styles/index.css"; 2 | import "./src/styles/tailwind.css"; 3 | import "./src/styles/Prosemirror.css"; 4 | 5 | import Editor from "./src/components/Editor.vue"; 6 | 7 | export { Editor }; 8 | -------------------------------------------------------------------------------- /package/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import "./styles/index.css"; 3 | import "./styles/tailwind.css"; 4 | import "./styles/Prosemirror.css"; 5 | import App from "./App.vue"; 6 | 7 | createApp(App).mount("#app"); 8 | -------------------------------------------------------------------------------- /nuxt-server/nuxt.config.ts: -------------------------------------------------------------------------------- 1 | // https://nuxt.com/docs/api/configuration/nuxt-config 2 | export default defineNuxtConfig({ 3 | devtools: { enabled: true }, 4 | runtimeConfig: { 5 | openaiApiKey: "", 6 | BLOB_READ_WRITE_TOKEN: "", 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /package/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /nuxt-server/.gitignore: -------------------------------------------------------------------------------- 1 | # Nuxt dev/build outputs 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist 8 | 9 | # Node dependencies 10 | node_modules 11 | 12 | # Logs 13 | logs 14 | *.log 15 | 16 | # Misc 17 | .DS_Store 18 | .fleet 19 | .idea 20 | 21 | # Local env files 22 | .env 23 | .env.* 24 | !.env.example 25 | -------------------------------------------------------------------------------- /package/.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 | -------------------------------------------------------------------------------- /package/src/components/extensions/updated-image.ts: -------------------------------------------------------------------------------- 1 | import Image from "@tiptap/extension-image"; 2 | 3 | const UpdatedImage = Image.extend({ 4 | addAttributes() { 5 | return { 6 | ...this.parent?.(), 7 | width: { 8 | default: null, 9 | }, 10 | height: { 11 | default: null, 12 | }, 13 | }; 14 | }, 15 | }); 16 | 17 | export default UpdatedImage; -------------------------------------------------------------------------------- /package/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + Vue + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /nuxt-server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nuxt-app", 3 | "private": true, 4 | "scripts": { 5 | "build": "nuxt build", 6 | "dev": "nuxt dev", 7 | "generate": "nuxt generate", 8 | "preview": "nuxt preview", 9 | "postinstall": "nuxt prepare" 10 | }, 11 | "devDependencies": { 12 | "@nuxt/devtools": "latest", 13 | "nuxt": "^3.7.0" 14 | }, 15 | "dependencies": { 16 | "@vercel/blob": "^0.15.1", 17 | "ai": "^2.2.11", 18 | "novel-vue": "^0.0.3", 19 | "openai": "^4.4.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /package/src/lib/editor.ts: -------------------------------------------------------------------------------- 1 | import { Editor } from "@tiptap/core"; 2 | 3 | export const getPrevText = ( 4 | editor: Editor, 5 | { 6 | chars, 7 | offset = 0, 8 | }: { 9 | chars: number; 10 | offset?: number; 11 | } 12 | ) => { 13 | // for now, we're using textBetween for now until we can figure out a way to stream markdown text 14 | // with proper formatting: https://github.com/steven-tey/novel/discussions/7 15 | return editor.state.doc.textBetween( 16 | Math.max(0, editor.state.selection.from - chars), 17 | editor.state.selection.from - offset, 18 | "\n" 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /package/src/lib/props.ts: -------------------------------------------------------------------------------- 1 | import { EditorProps } from "@tiptap/pm/view"; 2 | 3 | export const defaultEditorProps: EditorProps = { 4 | attributes: { 5 | class: `prose-lg prose-stone dark:prose-invert prose-headings:font-title font-default focus:outline-none max-w-full`, 6 | }, 7 | handleDOMEvents: { 8 | keydown: (_view, event) => { 9 | // prevent default event listeners from firing when slash command is active 10 | if (["ArrowUp", "ArrowDown", "Enter"].includes(event.key)) { 11 | const slashCommand = document.querySelector("#slash-command"); 12 | if (slashCommand) { 13 | return true; 14 | } 15 | } 16 | }, 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /package/src/App.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /package/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | // "noEmit": true, 15 | "jsx": "preserve", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true, 22 | 23 | "outDir": "dist", 24 | "declaration": true 25 | }, 26 | "include": [ 27 | "index.ts", 28 | "src/**/*.ts", 29 | "src/**/*.d.ts", 30 | "src/**/*.tsx", 31 | "src/**/*.vue" 32 | ], 33 | "exclude": ["src/App.vue", "src/main.ts"], 34 | "references": [{ "path": "./tsconfig.node.json" }] 35 | } 36 | -------------------------------------------------------------------------------- /package/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import { resolve } from "path"; 3 | import vue from "@vitejs/plugin-vue"; 4 | import dts from "vite-plugin-dts"; 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [ 9 | vue(), 10 | dts({ 11 | rollupTypes: true, 12 | }), 13 | ], 14 | build: { 15 | lib: { 16 | // Could also be a dictionary or array of multiple entry points 17 | entry: resolve(__dirname, "index.ts"), 18 | name: "Novel Vue", 19 | // the proper extensions will be added 20 | fileName: "novel-vue", 21 | }, 22 | rollupOptions: { 23 | // make sure to externalize deps that shouldn't be bundled 24 | // into your library 25 | external: ["vue"], 26 | output: { 27 | // Provide global variables to use in the UMD build 28 | // for externalized deps 29 | globals: { 30 | vue: "Vue", 31 | }, 32 | }, 33 | }, 34 | }, 35 | }); 36 | -------------------------------------------------------------------------------- /nuxt-server/README.md: -------------------------------------------------------------------------------- 1 | # Nuxt 3 Minimal Starter 2 | 3 | Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install the dependencies: 8 | 9 | ```bash 10 | # npm 11 | npm install 12 | 13 | # pnpm 14 | pnpm install 15 | 16 | # yarn 17 | yarn install 18 | ``` 19 | 20 | ## Development Server 21 | 22 | Start the development server on `http://localhost:3000`: 23 | 24 | ```bash 25 | # npm 26 | npm run dev 27 | 28 | # pnpm 29 | pnpm run dev 30 | 31 | # yarn 32 | yarn dev 33 | ``` 34 | 35 | ## Production 36 | 37 | Build the application for production: 38 | 39 | ```bash 40 | # npm 41 | npm run build 42 | 43 | # pnpm 44 | pnpm run build 45 | 46 | # yarn 47 | yarn build 48 | ``` 49 | 50 | Locally preview production build: 51 | 52 | ```bash 53 | # npm 54 | npm run preview 55 | 56 | # pnpm 57 | pnpm run preview 58 | 59 | # yarn 60 | yarn preview 61 | ``` 62 | 63 | Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. 64 | -------------------------------------------------------------------------------- /nuxt-server/server/api/upload.ts: -------------------------------------------------------------------------------- 1 | import { put } from "@vercel/blob"; 2 | 3 | export default defineLazyEventHandler(async () => { 4 | const BLOB_READ_WRITE_TOKEN = useRuntimeConfig().BLOB_READ_WRITE_TOKEN; 5 | if (!BLOB_READ_WRITE_TOKEN) { 6 | throw new Error( 7 | "Missing BLOB_READ_WRITE_TOKEN" 8 | ); 9 | } 10 | 11 | return defineEventHandler(async (event) => { 12 | // Extract the `prompt` from the body of the request 13 | const body = event.node.req 14 | const file = body || ""; 15 | const filename = event.headers.get("x-vercel-filename") || "file.txt"; 16 | const contentType = event.headers.get("content-type") || "text/plain"; 17 | const fileType = `.${contentType.split("/")[1]}`; 18 | 19 | // construct final filename based on content-type if not provided 20 | const finalName = filename.includes(fileType) 21 | ? filename 22 | : `${filename}${fileType}`; 23 | const blob = await put(finalName, file, { 24 | contentType, 25 | access: "public", 26 | }); 27 | 28 | return blob; 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /package/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], 4 | theme: { 5 | theme: { 6 | extend: { 7 | fontFamily: { 8 | title: ["var(--font-title)", "system-ui", "sans-serif"], 9 | default: ["var(--font-default)", "system-ui", "sans-serif"], 10 | }, 11 | colors: { 12 | white: "var(--novel-white)", 13 | stone: { 14 | 50: "var(--novel-stone-50)", 15 | 100: "var(--novel-stone-100)", 16 | 200: "var(--novel-stone-200)", 17 | 300: "var(--novel-stone-300)", 18 | 400: "var(--novel-stone-400)", 19 | 500: "var(--novel-stone-500)", 20 | 600: "var(--novel-stone-600)", 21 | 700: "var(--novel-stone-700)", 22 | 800: "var(--novel-stone-800)", 23 | 900: "var(--novel-stone-900)", 24 | }, 25 | }, 26 | }, 27 | }, 28 | }, 29 | plugins: [require("@tailwindcss/typography"), require("tailwindcss-animate")], 30 | }; 31 | -------------------------------------------------------------------------------- /nuxt-server/server/api/generate.ts: -------------------------------------------------------------------------------- 1 | import OpenAI from "openai"; 2 | import { OpenAIStream } from "ai"; 3 | 4 | export default defineLazyEventHandler(async () => { 5 | const apiKey = useRuntimeConfig().openaiApiKey; 6 | if (!apiKey) throw new Error("Missing OpenAI API key"); 7 | const openai = new OpenAI({ 8 | apiKey: apiKey, 9 | }); 10 | 11 | return defineEventHandler(async (event) => { 12 | // Extract the `prompt` from the body of the request 13 | const body = await readBody(event); 14 | const { prompt } = JSON.parse(body); 15 | 16 | const response = await openai.chat.completions.create({ 17 | model: "gpt-3.5-turbo", 18 | messages: [ 19 | { 20 | role: "system", 21 | content: 22 | "You are an AI writing assistant that continues existing text based on context from prior text. " + 23 | "Give more weight/priority to the later characters than the beginning ones. " + 24 | "Limit your response to no more than 200 characters, but make sure to construct complete sentences.", 25 | }, 26 | { 27 | role: "user", 28 | content: prompt, 29 | }, 30 | ], 31 | temperature: 0.7, 32 | top_p: 1, 33 | frequency_penalty: 0, 34 | presence_penalty: 0, 35 | stream: true, 36 | n: 1, 37 | }); 38 | 39 | // Convert the response into a friendly text-stream 40 | return OpenAIStream(response); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /package/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /package/src/components/icons/loadingCircle.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /package/src/styles/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --novel-black: rgb(0 0 0); 3 | --novel-white: rgb(255 255 255); 4 | --novel-stone-50: rgb(250 250 249); 5 | --novel-stone-100: rgb(245 245 244); 6 | --novel-stone-200: rgb(231 229 228); 7 | --novel-stone-300: rgb(214 211 209); 8 | --novel-stone-400: rgb(168 162 158); 9 | --novel-stone-500: rgb(120 113 108); 10 | --novel-stone-600: rgb(87 83 78); 11 | --novel-stone-700: rgb(68 64 60); 12 | --novel-stone-800: rgb(41 37 36); 13 | --novel-stone-900: rgb(28 25 23); 14 | 15 | --novel-highlight-default: #ffffff; 16 | --novel-highlight-purple: #f6f3f8; 17 | --novel-highlight-red: #fdebeb; 18 | --novel-highlight-yellow: #fbf4a2; 19 | --novel-highlight-blue: #c1ecf9; 20 | --novel-highlight-green: #acf79f; 21 | --novel-highlight-orange: #faebdd; 22 | --novel-highlight-pink: #faf1f5; 23 | --novel-highlight-gray: #f1f1ef; 24 | 25 | --font-title: "Cal Sans", sans-serif; 26 | } 27 | 28 | .dark-theme { 29 | --novel-black: rgb(255 255 255); 30 | --novel-white: rgb(25 25 25); 31 | --novel-stone-50: rgb(35 35 34); 32 | --novel-stone-100: rgb(41 37 36); 33 | --novel-stone-200: rgb(66 69 71); 34 | --novel-stone-300: rgb(112 118 123); 35 | --novel-stone-400: rgb(160 167 173); 36 | --novel-stone-500: rgb(193 199 204); 37 | --novel-stone-600: rgb(212 217 221); 38 | --novel-stone-700: rgb(229 232 235); 39 | --novel-stone-800: rgb(232 234 235); 40 | --novel-stone-900: rgb(240, 240, 241); 41 | 42 | --novel-highlight-default: #000000; 43 | --novel-highlight-purple: #3f2c4b; 44 | --novel-highlight-red: #5c1a1a; 45 | --novel-highlight-yellow: #5c4b1a; 46 | --novel-highlight-blue: #1a3d5c; 47 | --novel-highlight-green: #1a5c20; 48 | --novel-highlight-orange: #5c3a1a; 49 | --novel-highlight-pink: #5c1a3a; 50 | --novel-highlight-gray: #3a3a3a; 51 | } 52 | 53 | @font-face { 54 | font-family: "Cal Sans"; 55 | src: local("Cal Sans"), url(CalSans-SemiBold.otf) format("otf"); 56 | } 57 | -------------------------------------------------------------------------------- /package/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "novel-vue", 3 | "version": "0.0.4", 4 | "author": "Naveen Naidu ", 5 | "description": "A Vue 3 component for the novel editor", 6 | "type": "module", 7 | "files": [ 8 | "dist" 9 | ], 10 | "main": "./dist/novel-vue.umd.cjs", 11 | "module": "./dist/novel-vue.js", 12 | "exports": { 13 | ".": { 14 | "import": "./dist/novel-vue.js", 15 | "require": "./dist/novel-vue.umd.cjs" 16 | }, 17 | "./dist/style.css": "./dist/style.css" 18 | }, 19 | "types": "./dist/index.d.ts", 20 | "scripts": { 21 | "dev": "vite", 22 | "build": "vite build && vue-tsc --emitDeclarationOnly", 23 | "preview": "vite preview" 24 | }, 25 | "dependencies": { 26 | "@headlessui/vue": "^1.7.16", 27 | "@tiptap/extension-color": "^2.1.7", 28 | "@tiptap/extension-highlight": "^2.1.7", 29 | "@tiptap/extension-horizontal-rule": "^2.1.7", 30 | "@tiptap/extension-image": "^2.1.7", 31 | "@tiptap/extension-link": "^2.1.7", 32 | "@tiptap/extension-placeholder": "^2.1.7", 33 | "@tiptap/extension-task-item": "^2.1.7", 34 | "@tiptap/extension-task-list": "^2.1.7", 35 | "@tiptap/extension-text-style": "^2.1.7", 36 | "@tiptap/extension-underline": "^2.1.7", 37 | "@tiptap/pm": "^2.1.7", 38 | "@tiptap/starter-kit": "^2.1.7", 39 | "@tiptap/suggestion": "^2.1.7", 40 | "@tiptap/vue-3": "^2.1.7", 41 | "@vercel/blob": "^0.9.3", 42 | "@vueuse/core": "^10.4.1", 43 | "ai": "^2.2.11", 44 | "lucide-vue-next": "^0.274.0", 45 | "sonner": "npm:vue-sonner@1.0.2", 46 | "tailwindcss-animate": "^1.0.7", 47 | "tippy.js": "^6.3.7", 48 | "tiptap-markdown": "^0.8.2", 49 | "vue": "^3.3.4" 50 | }, 51 | "devDependencies": { 52 | "@tailwindcss/typography": "^0.5.9", 53 | "@tiptap/core": "^2.1.12", 54 | "@vitejs/plugin-vue": "^4.2.3", 55 | "autoprefixer": "^10.4.15", 56 | "postcss": "^8.4.29", 57 | "tailwindcss": "^3.3.3", 58 | "typescript": "^5.0.2", 59 | "vite": "^4.4.5", 60 | "vite-plugin-dts": "^3.5.3", 61 | "vue-tsc": "^1.8.5" 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /package/src/components/BubbleMenu/LinkSelector.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /package/src/components/BubbleMenu/index.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /package/src/styles/Prosemirror.css: -------------------------------------------------------------------------------- 1 | .ProseMirror .is-editor-empty:first-child::before { 2 | content: attr(data-placeholder); 3 | float: left; 4 | color: var(--novel-stone-400); 5 | pointer-events: none; 6 | height: 0; 7 | } 8 | .ProseMirror .is-empty::before { 9 | content: attr(data-placeholder); 10 | float: left; 11 | color: var(--novel-stone-400); 12 | pointer-events: none; 13 | height: 0; 14 | } 15 | 16 | /* Custom image styles */ 17 | 18 | .ProseMirror img { 19 | transition: filter 0.1s ease-in-out; 20 | 21 | &:hover { 22 | cursor: pointer; 23 | filter: brightness(90%); 24 | } 25 | 26 | &.ProseMirror-selectednode { 27 | outline: 3px solid #5abbf7; 28 | filter: brightness(90%); 29 | } 30 | } 31 | 32 | .img-placeholder { 33 | position: relative; 34 | 35 | &:before { 36 | content: ""; 37 | box-sizing: border-box; 38 | position: absolute; 39 | top: 50%; 40 | left: 50%; 41 | width: 36px; 42 | height: 36px; 43 | border-radius: 50%; 44 | border: 3px solid var(--novel-stone-200); 45 | border-top-color: var(--novel-stone-800); 46 | animation: spinning 0.6s linear infinite; 47 | } 48 | } 49 | 50 | @keyframes spinning { 51 | to { 52 | transform: rotate(360deg); 53 | } 54 | } 55 | 56 | /* Custom TODO list checkboxes – shoutout to this awesome tutorial: https://moderncss.dev/pure-css-custom-checkbox-style/ */ 57 | 58 | ul[data-type="taskList"] li > label { 59 | margin-right: 0.2rem; 60 | user-select: none; 61 | } 62 | 63 | @media screen and (max-width: 768px) { 64 | ul[data-type="taskList"] li > label { 65 | margin-right: 0.5rem; 66 | } 67 | } 68 | 69 | ul[data-type="taskList"] li > label input[type="checkbox"] { 70 | -webkit-appearance: none; 71 | appearance: none; 72 | background-color: var(--novel-white); 73 | margin: 0; 74 | cursor: pointer; 75 | width: 1.2em; 76 | height: 1.2em; 77 | position: relative; 78 | top: 5px; 79 | border: 2px solid var(--novel-stone-900); 80 | margin-right: 0.3rem; 81 | display: grid; 82 | place-content: center; 83 | 84 | &:hover { 85 | background-color: var(--novel-stone-50); 86 | } 87 | 88 | &:active { 89 | background-color: var(--novel-stone-200); 90 | } 91 | 92 | &::before { 93 | content: ""; 94 | width: 0.65em; 95 | height: 0.65em; 96 | transform: scale(0); 97 | transition: 120ms transform ease-in-out; 98 | box-shadow: inset 1em 1em; 99 | transform-origin: center; 100 | clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); 101 | } 102 | 103 | &:checked::before { 104 | transform: scale(1); 105 | } 106 | } 107 | 108 | ul[data-type="taskList"] li[data-checked="true"] > div > p { 109 | color: var(--novel-stone-400); 110 | text-decoration: line-through; 111 | text-decoration-thickness: 2px; 112 | } 113 | -------------------------------------------------------------------------------- /package/README.md: -------------------------------------------------------------------------------- 1 | # Novel Vue 2 | 3 | Novel Vue is port of [Novel](https://github.com/steven-tey/novel) 4 | 5 | ## Introduction 6 | 7 | [Novel](https://novel.sh/) is a Notion-style WYSIWYG editor with AI-powered autocompletions. 8 | 9 | ## Installation 10 | 11 | To use Novel Vue in a project, you can run the following command to install the `novel-vue` [NPM package](https://www.npmjs.com/package/novel-vue): 12 | 13 | ``` 14 | npm i novel-vue 15 | ``` 16 | 17 | Then, you can use it in your code like this: 18 | 19 | ```vue 20 | 23 | 24 | 28 | ``` 29 | 30 | | Prop | Type | Description | Default | 31 | | ----------------- | ----------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | 32 | | completionApi | String | The API route to use for the OpenAI completion API. | "/api/generate" | 33 | | className | String | Additional classes to add to the editor container. | "relative min-h-500px] w-full mx-auto max-w-screen-lg border-stone-200 bg-white p-12 px-8 sm:mb-[calc(20vh)] sm:rounded-lg sm:border sm:px-12 sm:shadow-lg" | 34 | | defaultValue | JSONContent | The default value to use for the editor. | defaultEditorContent | 35 | | extensions | Extension[] | A list of extensions to use for the editor, in addition to the default Novel extensions. | [] | 36 | | editorProps | EditorProps | Props to pass to the underlying Tiptap editor, in addition to the default Novel editor props. | {} | 37 | | onUpdate | Function | A callback function that is called whenever the editor is updated. | () => {} | 38 | | onDebouncedUpdate | Function | A callback function that is called whenever the editor is updated, but only after the defined debounce duration. | () => {} | 39 | | debounceDuration | Number | The duration (in milliseconds) to debounce the onDebouncedUpdate callback. | 750 | 40 | | storageKey | String | The key to use for storing the editor's value in local storage. | "novel\_\_content" | 41 | 42 | > **Note**: Make sure to define an API endpoint that matches the `completionApi` prop (default is `/api/generate`). This is needed for the AI autocompletions to work. Here's an example: https://github.com/naveennaidu/novel-vue/blob/main/nuxt-server/server/api/generate.ts 43 | -------------------------------------------------------------------------------- /package/src/components/extensions/index.ts: -------------------------------------------------------------------------------- 1 | import StarterKit from "@tiptap/starter-kit"; 2 | import HorizontalRule from "@tiptap/extension-horizontal-rule"; 3 | import TiptapLink from "@tiptap/extension-link"; 4 | import TiptapImage from "@tiptap/extension-image"; 5 | import Placeholder from "@tiptap/extension-placeholder"; 6 | import TiptapUnderline from "@tiptap/extension-underline"; 7 | import TextStyle from "@tiptap/extension-text-style"; 8 | import { Color } from "@tiptap/extension-color"; 9 | import TaskItem from "@tiptap/extension-task-item"; 10 | import TaskList from "@tiptap/extension-task-list"; 11 | import { Markdown } from "tiptap-markdown"; 12 | import Highlight from "@tiptap/extension-highlight"; 13 | import { InputRule } from "@tiptap/core"; 14 | import SlashCommand from "./slashExtension"; 15 | import UploadImagesPlugin from "../plugins/upload-images"; 16 | import UpdatedImage from "./updated-image"; 17 | 18 | export const defaultExtensions = [ 19 | StarterKit.configure({ 20 | bulletList: { 21 | HTMLAttributes: { 22 | class: "list-disc list-outside leading-3 -mt-2", 23 | }, 24 | }, 25 | orderedList: { 26 | HTMLAttributes: { 27 | class: "list-decimal list-outside leading-3 -mt-2", 28 | }, 29 | }, 30 | listItem: { 31 | HTMLAttributes: { 32 | class: "leading-normal -mb-2", 33 | }, 34 | }, 35 | blockquote: { 36 | HTMLAttributes: { 37 | class: "border-l-4 border-stone-700", 38 | }, 39 | }, 40 | codeBlock: { 41 | HTMLAttributes: { 42 | class: 43 | "rounded-sm bg-stone-100 p-5 font-mono font-medium text-stone-800", 44 | }, 45 | }, 46 | code: { 47 | HTMLAttributes: { 48 | class: 49 | "rounded-md bg-stone-200 px-1.5 py-1 font-mono font-medium text-stone-900", 50 | spellcheck: "false", 51 | }, 52 | }, 53 | horizontalRule: false, 54 | dropcursor: { 55 | color: "#DBEAFE", 56 | width: 4, 57 | }, 58 | gapcursor: false, 59 | }), 60 | // patch to fix horizontal rule bug: https://github.com/ueberdosis/tiptap/pull/3859#issuecomment-1536799740 61 | HorizontalRule.extend({ 62 | addInputRules() { 63 | return [ 64 | new InputRule({ 65 | find: /^(?:---|—-|___\s|\*\*\*\s)$/, 66 | handler: ({ state, range }) => { 67 | const attributes = {}; 68 | 69 | const { tr } = state; 70 | const start = range.from; 71 | let end = range.to; 72 | 73 | tr.insert(start - 1, this.type.create(attributes)).delete( 74 | tr.mapping.map(start), 75 | tr.mapping.map(end) 76 | ); 77 | }, 78 | }), 79 | ]; 80 | }, 81 | }).configure({ 82 | HTMLAttributes: { 83 | class: "mt-4 mb-6 border-t border-stone-300", 84 | }, 85 | }), 86 | TiptapLink.configure({ 87 | HTMLAttributes: { 88 | class: 89 | "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", 90 | }, 91 | }), 92 | TiptapImage.extend({ 93 | addProseMirrorPlugins() { 94 | return [UploadImagesPlugin()]; 95 | }, 96 | }).configure({ 97 | allowBase64: true, 98 | HTMLAttributes: { 99 | class: "rounded-lg border border-stone-200", 100 | }, 101 | }), 102 | UpdatedImage.configure({ 103 | HTMLAttributes: { 104 | class: "rounded-lg border border-stone-200", 105 | }, 106 | }), 107 | Placeholder.configure({ 108 | placeholder: ({ node }) => { 109 | if (node.type.name === "heading") { 110 | return `Heading ${node.attrs.level}`; 111 | } 112 | return "Press '/' for commands, or '++' for AI autocomplete..."; 113 | }, 114 | includeChildren: true, 115 | }), 116 | TiptapUnderline, 117 | TextStyle, 118 | Color, 119 | Highlight.configure({ 120 | multicolor: true, 121 | }), 122 | TaskList.configure({ 123 | HTMLAttributes: { 124 | class: "not-prose pl-2", 125 | }, 126 | }), 127 | TaskItem.configure({ 128 | HTMLAttributes: { 129 | class: "flex items-start my-4", 130 | }, 131 | nested: true, 132 | }), 133 | Markdown.configure({ 134 | html: false, 135 | transformCopiedText: true, 136 | }), 137 | SlashCommand, 138 | ]; 139 | -------------------------------------------------------------------------------- /package/src/components/BubbleMenu/NodeSelector.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /package/src/components/extensions/slashCommandList.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 153 | -------------------------------------------------------------------------------- /package/src/components/plugins/upload-images.ts: -------------------------------------------------------------------------------- 1 | import { BlobResult } from "@vercel/blob"; 2 | import { useStorage } from "@vueuse/core"; 3 | import { toast } from "sonner"; 4 | import { EditorState, Plugin, PluginKey } from "@tiptap/pm/state"; 5 | import { Decoration, DecorationSet, EditorView } from "@tiptap/pm/view"; 6 | 7 | const uploadKey = new PluginKey("upload-image"); 8 | 9 | const UploadImagesPlugin = () => 10 | new Plugin({ 11 | key: uploadKey, 12 | state: { 13 | init() { 14 | return DecorationSet.empty; 15 | }, 16 | apply(tr, set) { 17 | set = set.map(tr.mapping, tr.doc); 18 | // See if the transaction adds or removes any placeholders 19 | const action = tr.getMeta(this as any); 20 | if (action && action.add) { 21 | const { id, pos, src } = action.add; 22 | 23 | const placeholder = document.createElement("div"); 24 | placeholder.setAttribute("class", "img-placeholder"); 25 | const image = document.createElement("img"); 26 | image.setAttribute( 27 | "class", 28 | "opacity-40 rounded-lg border border-stone-200" 29 | ); 30 | image.src = src; 31 | placeholder.appendChild(image); 32 | const deco = Decoration.widget(pos + 1, placeholder, { 33 | id, 34 | }); 35 | set = set.add(tr.doc, [deco]); 36 | } else if (action && action.remove) { 37 | set = set.remove( 38 | set.find(undefined, undefined, (spec) => spec.id == action.remove.id) 39 | ); 40 | } 41 | return set; 42 | }, 43 | }, 44 | props: { 45 | decorations(state) { 46 | return this.getState(state); 47 | }, 48 | }, 49 | }); 50 | 51 | export default UploadImagesPlugin; 52 | 53 | function findPlaceholder(state: EditorState, id: {}) { 54 | const decos = uploadKey.getState(state); 55 | const found = decos.find(null, null, (spec: any) => spec.id == id); 56 | return found.length ? found[0].from : null; 57 | } 58 | 59 | export function startImageUpload(file: File, view: EditorView, pos: number) { 60 | // check if the file is an image 61 | if (!file.type.includes("image/")) { 62 | toast.error("File type not supported."); 63 | return; 64 | 65 | // check if the file size is less than 20MB 66 | } else if (file.size / 1024 / 1024 > 20) { 67 | toast.error("File size too big (max 20MB)."); 68 | return; 69 | } 70 | 71 | // A fresh object to act as the ID for this upload 72 | const id = {}; 73 | 74 | // Replace the selection with a placeholder 75 | const tr = view.state.tr; 76 | if (!tr.selection.empty) tr.deleteSelection(); 77 | 78 | const reader = new FileReader(); 79 | reader.readAsDataURL(file); 80 | reader.onload = () => { 81 | tr.setMeta(uploadKey, { 82 | add: { 83 | id, 84 | pos, 85 | src: reader.result, 86 | }, 87 | }); 88 | view.dispatch(tr); 89 | }; 90 | 91 | handleImageUpload(file).then((src) => { 92 | const { schema } = view.state; 93 | 94 | let pos = findPlaceholder(view.state, id); 95 | // If the content around the placeholder has been deleted, drop 96 | // the image 97 | if (pos == null) return; 98 | 99 | // Otherwise, insert it at the placeholder's position, and remove 100 | // the placeholder 101 | 102 | // When BLOB_READ_WRITE_TOKEN is not valid or unavailable, read 103 | // the image locally 104 | const imageSrc = typeof src === "object" ? reader.result : src; 105 | 106 | const node = schema.nodes.image.create({ src: imageSrc }); 107 | const transaction = view.state.tr 108 | .replaceWith(pos, pos, node) 109 | .setMeta(uploadKey, { remove: { id } }); 110 | view.dispatch(transaction); 111 | }); 112 | } 113 | 114 | export const handleImageUpload = (file: File) => { 115 | // upload to Vercel Blob 116 | return new Promise((resolve) => { 117 | toast.promise( 118 | fetch(useStorage('blobApi', '/api/upload').value, { 119 | method: "POST", 120 | headers: { 121 | "content-type": file?.type || "application/octet-stream", 122 | "x-vercel-filename": encodeURIComponent(file?.name || "image.png"), 123 | }, 124 | body: file, 125 | }).then(async (res) => { 126 | // Successfully uploaded image 127 | if (res.status === 200) { 128 | const { url } = (await res.json()) as BlobResult; 129 | // preload the image 130 | let image = new Image(); 131 | image.src = url; 132 | image.onload = () => { 133 | resolve(url); 134 | }; 135 | // No blob store configured 136 | } else if (res.status === 401) { 137 | resolve(file); 138 | 139 | throw new Error( 140 | "`BLOB_READ_WRITE_TOKEN` environment variable not found, reading image locally instead." 141 | ); 142 | // Unknown error 143 | } else { 144 | throw new Error(`Error uploading image. Please try again.`); 145 | } 146 | }), 147 | { 148 | loading: "Uploading image...", 149 | success: () => "Image uploaded successfully.", 150 | error: () => "Image uploaded failed.", 151 | } 152 | ); 153 | }); 154 | }; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Novel Vue 2 | 3 | Novel Vue is port of [Novel](https://github.com/steven-tey/novel) 4 | 5 | ## Introduction 6 | 7 | [Novel](https://novel.sh/) is a Notion-style WYSIWYG editor with AI-powered autocompletions. 8 | 9 | ## Installation 10 | 11 | To use Novel Vue in a project, you can run the following command to install the `novel-vue` [NPM package](https://www.npmjs.com/package/novel-vue): 12 | 13 | ``` 14 | npm i novel-vue 15 | ``` 16 | 17 | Then, you can use it in your code like this: 18 | 19 | ```vue 20 | 23 | 24 | 28 | ``` 29 | 30 | | Prop | Type | Description | Default | 31 | | ----------------- | ----------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | 32 | | blobApi | String | The API route to use for the Vercel Blob API. | "/api/upload" | 33 | | completionApi | String | The API route to use for the OpenAI completion API. | "/api/generate" | 34 | | className | String | Additional classes to add to the editor container. | "relative min-h-500px] w-full mx-auto max-w-screen-lg border-stone-200 bg-white p-12 px-8 sm:mb-[calc(20vh)] sm:rounded-lg sm:border sm:px-12 sm:shadow-lg" | 35 | | defaultValue | JSONContent | The default value to use for the editor. | defaultEditorContent | 36 | | extensions | Extension[] | A list of extensions to use for the editor, in addition to the default Novel extensions. | [] | 37 | | editorProps | EditorProps | Props to pass to the underlying Tiptap editor, in addition to the default Novel editor props. | {} | 38 | | onUpdate | Function | A callback function that is called whenever the editor is updated. | () => {} | 39 | | onDebouncedUpdate | Function | A callback function that is called whenever the editor is updated, but only after the defined debounce duration. | () => {} | 40 | | debounceDuration | Number | The duration (in milliseconds) to debounce the onDebouncedUpdate callback. | 750 | 41 | | storageKey | String | The key to use for storing the editor's value in local storage. | "novel\_\_content" | 42 | 43 | > **Note**: Make sure to define an API endpoint that matches the `completionApi` prop (default is `/api/generate`). This is needed for the AI autocompletions to work. Here's an example: https://github.com/naveennaidu/novel-vue/blob/main/nuxt-server/server/api/generate.ts 44 | 45 | You can get the editor instance of tiptap by using the `editor` ref. 46 | 47 | For example, to set the content of the editor manually, you can do something like this: 48 | 49 | ```vue 50 | 54 | 55 | 81 | ``` 82 | 83 | ## Projects using Novel Vue 84 | 85 | [Novuel](https://github.com/naveennaidu/novuel): Open Source AI Writing App built with [Nuxt 3](https://nuxt.com/) and [Nuxt UI](https://ui.nuxt.com/) 86 | -------------------------------------------------------------------------------- /package/src/components/BubbleMenu/ColorSelector.vue: -------------------------------------------------------------------------------- 1 | 92 | 93 | 193 | 194 | 195 | -------------------------------------------------------------------------------- /package/src/components/Editor.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 231 | 232 | 233 | -------------------------------------------------------------------------------- /package/src/lib/default-content.ts: -------------------------------------------------------------------------------- 1 | export const defaultEditorContent = { 2 | type: "doc", 3 | content: [ 4 | { 5 | type: "heading", 6 | attrs: { level: 2 }, 7 | content: [{ type: "text", text: "Introducing Novel" }], 8 | }, 9 | { 10 | type: "paragraph", 11 | content: [ 12 | { 13 | type: "text", 14 | marks: [ 15 | { 16 | type: "link", 17 | attrs: { 18 | href: "https://github.com/steven-tey/novel", 19 | target: "_blank", 20 | class: 21 | "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", 22 | }, 23 | }, 24 | ], 25 | text: "Novel", 26 | }, 27 | { 28 | type: "text", 29 | text: " is a Notion-style WYSIWYG editor with AI-powered autocompletion. Built with ", 30 | }, 31 | { 32 | type: "text", 33 | marks: [ 34 | { 35 | type: "link", 36 | attrs: { 37 | href: "https://tiptap.dev/", 38 | target: "_blank", 39 | class: 40 | "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", 41 | }, 42 | }, 43 | ], 44 | text: "Tiptap", 45 | }, 46 | { type: "text", text: " + " }, 47 | { 48 | type: "text", 49 | marks: [ 50 | { 51 | type: "link", 52 | attrs: { 53 | href: "https://sdk.vercel.ai/docs", 54 | target: "_blank", 55 | class: 56 | "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", 57 | }, 58 | }, 59 | ], 60 | text: "Vercel AI SDK", 61 | }, 62 | { type: "text", text: "." }, 63 | ], 64 | }, 65 | { 66 | type: "heading", 67 | attrs: { level: 3 }, 68 | content: [{ type: "text", text: "Installation" }], 69 | }, 70 | { 71 | type: "codeBlock", 72 | attrs: { language: null }, 73 | content: [{ type: "text", text: "npm i novel" }], 74 | }, 75 | { 76 | type: "heading", 77 | attrs: { level: 3 }, 78 | content: [{ type: "text", text: "Usage" }], 79 | }, 80 | { 81 | type: "codeBlock", 82 | attrs: { language: null }, 83 | content: [ 84 | { 85 | type: "text", 86 | text: 'import { Editor } from "novel";\n\nexport default function App() {\n return (\n \n )\n}', 87 | }, 88 | ], 89 | }, 90 | { 91 | type: "heading", 92 | attrs: { level: 3 }, 93 | content: [{ type: "text", text: "Features" }], 94 | }, 95 | { 96 | type: "orderedList", 97 | attrs: { tight: true, start: 1 }, 98 | content: [ 99 | { 100 | type: "listItem", 101 | content: [ 102 | { 103 | type: "paragraph", 104 | content: [{ type: "text", text: "Slash menu & bubble menu" }], 105 | }, 106 | ], 107 | }, 108 | { 109 | type: "listItem", 110 | content: [ 111 | { 112 | type: "paragraph", 113 | content: [ 114 | { type: "text", text: "AI autocomplete (type " }, 115 | { type: "text", marks: [{ type: "code" }], text: "++" }, 116 | { 117 | type: "text", 118 | text: " to activate, or select from slash menu)", 119 | }, 120 | ], 121 | }, 122 | ], 123 | }, 124 | { 125 | type: "listItem", 126 | content: [ 127 | { 128 | type: "paragraph", 129 | content: [ 130 | { 131 | type: "text", 132 | text: "Image uploads (drag & drop / copy & paste, or select from slash menu) ", 133 | }, 134 | ], 135 | }, 136 | ], 137 | }, 138 | ], 139 | }, 140 | // { 141 | // type: "image", 142 | // attrs: { 143 | // src: "https://public.blob.vercel-storage.com/pJrjXbdONOnAeZAZ/banner-2wQk82qTwyVgvlhTW21GIkWgqPGD2C.png", 144 | // alt: "banner.png", 145 | // title: "banner.png", 146 | // width: null, 147 | // height: null, 148 | // }, 149 | // }, 150 | { type: "horizontalRule" }, 151 | { 152 | type: "heading", 153 | attrs: { level: 3 }, 154 | content: [{ type: "text", text: "Learn more" }], 155 | }, 156 | { 157 | type: "taskList", 158 | content: [ 159 | { 160 | type: "taskItem", 161 | attrs: { checked: false }, 162 | content: [ 163 | { 164 | type: "paragraph", 165 | content: [ 166 | { type: "text", text: "Star us on " }, 167 | { 168 | type: "text", 169 | marks: [ 170 | { 171 | type: "link", 172 | attrs: { 173 | href: "https://github.com/steven-tey/novel", 174 | target: "_blank", 175 | class: 176 | "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", 177 | }, 178 | }, 179 | ], 180 | text: "GitHub", 181 | }, 182 | ], 183 | }, 184 | ], 185 | }, 186 | { 187 | type: "taskItem", 188 | attrs: { checked: false }, 189 | content: [ 190 | { 191 | type: "paragraph", 192 | content: [ 193 | { type: "text", text: "Install the " }, 194 | { 195 | type: "text", 196 | marks: [ 197 | { 198 | type: "link", 199 | attrs: { 200 | href: "https://www.npmjs.com/package/novel", 201 | target: "_blank", 202 | class: 203 | "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", 204 | }, 205 | }, 206 | ], 207 | text: "NPM package", 208 | }, 209 | ], 210 | }, 211 | ], 212 | }, 213 | { 214 | type: "taskItem", 215 | attrs: { checked: false }, 216 | content: [ 217 | { 218 | type: "paragraph", 219 | content: [ 220 | { 221 | type: "text", 222 | marks: [ 223 | { 224 | type: "link", 225 | attrs: { 226 | href: "https://vercel.com/templates/next.js/novel", 227 | target: "_blank", 228 | class: 229 | "text-stone-400 underline underline-offset-[3px] hover:text-stone-600 transition-colors cursor-pointer", 230 | }, 231 | }, 232 | ], 233 | text: "Deploy your own", 234 | }, 235 | { type: "text", text: " to Vercel" }, 236 | ], 237 | }, 238 | ], 239 | }, 240 | ], 241 | }, 242 | ], 243 | }; 244 | -------------------------------------------------------------------------------- /package/src/components/extensions/slashExtension.ts: -------------------------------------------------------------------------------- 1 | import { Editor, Range, Extension } from "@tiptap/core"; 2 | import { VueRenderer } from "@tiptap/vue-3"; 3 | import tippy from "tippy.js"; 4 | import Suggestion from "@tiptap/suggestion"; 5 | import { 6 | Heading1, 7 | Heading2, 8 | Heading3, 9 | List, 10 | ListOrdered, 11 | MessageSquarePlus, 12 | Text, 13 | TextQuote, 14 | Code, 15 | CheckSquare, 16 | Sparkles, 17 | Image, 18 | } from "lucide-vue-next"; 19 | import SlashCommandList from "./slashCommandList.vue"; 20 | import { startImageUpload } from "../plugins/upload-images"; 21 | // import Magic from "../icons/magic.vue"; 22 | 23 | const Command = Extension.create({ 24 | name: "slash-command", 25 | addOptions() { 26 | return { 27 | suggestion: { 28 | char: "/", 29 | command: ({ 30 | editor, 31 | range, 32 | props, 33 | }: { 34 | editor: Editor; 35 | range: Range; 36 | props: any; 37 | }) => { 38 | props.command({ editor, range }); 39 | }, 40 | }, 41 | }; 42 | }, 43 | addProseMirrorPlugins() { 44 | return [ 45 | Suggestion({ 46 | editor: this.editor, 47 | ...this.options.suggestion, 48 | }), 49 | ]; 50 | }, 51 | }); 52 | 53 | interface CommandProps { 54 | editor: Editor; 55 | range: Range; 56 | } 57 | 58 | export interface SuggestionItem { 59 | title: string; 60 | description: string; 61 | icon: any; 62 | } 63 | 64 | const getSuggestionItems = ({ query }: { query: string }) => { 65 | return [ 66 | { 67 | title: "Continue writing", 68 | description: "Use AI to expand your thoughts.", 69 | searchTerms: ["gpt"], 70 | icon: Sparkles, 71 | }, 72 | { 73 | title: "Send Feedback", 74 | description: "Let us know how we can improve.", 75 | icon: MessageSquarePlus, 76 | command: ({ editor, range }: CommandProps) => { 77 | editor.chain().focus().deleteRange(range).run(); 78 | window.open("/feedback", "_blank"); 79 | }, 80 | }, 81 | { 82 | title: "Text", 83 | description: "Just start typing with plain text.", 84 | searchTerms: ["p", "paragraph"], 85 | icon: Text, 86 | command: ({ editor, range }: CommandProps) => { 87 | editor 88 | .chain() 89 | .focus() 90 | .deleteRange(range) 91 | .toggleNode("paragraph", "paragraph") 92 | .run(); 93 | }, 94 | }, 95 | { 96 | title: "To-do List", 97 | description: "Track tasks with a to-do list.", 98 | searchTerms: ["todo", "task", "list", "check", "checkbox"], 99 | icon: CheckSquare, 100 | command: ({ editor, range }: CommandProps) => { 101 | editor.chain().focus().deleteRange(range).toggleTaskList().run(); 102 | }, 103 | }, 104 | { 105 | title: "Heading 1", 106 | description: "Big section heading.", 107 | searchTerms: ["title", "big", "large"], 108 | icon: Heading1, 109 | command: ({ editor, range }: CommandProps) => { 110 | editor 111 | .chain() 112 | .focus() 113 | .deleteRange(range) 114 | .setNode("heading", { level: 1 }) 115 | .run(); 116 | }, 117 | }, 118 | { 119 | title: "Heading 2", 120 | description: "Medium section heading.", 121 | searchTerms: ["subtitle", "medium"], 122 | icon: Heading2, 123 | command: ({ editor, range }: CommandProps) => { 124 | editor 125 | .chain() 126 | .focus() 127 | .deleteRange(range) 128 | .setNode("heading", { level: 2 }) 129 | .run(); 130 | }, 131 | }, 132 | { 133 | title: "Heading 3", 134 | description: "Small section heading.", 135 | searchTerms: ["subtitle", "small"], 136 | icon: Heading3, 137 | command: ({ editor, range }: CommandProps) => { 138 | editor 139 | .chain() 140 | .focus() 141 | .deleteRange(range) 142 | .setNode("heading", { level: 3 }) 143 | .run(); 144 | }, 145 | }, 146 | { 147 | title: "Bullet List", 148 | description: "Create a simple bullet list.", 149 | searchTerms: ["unordered", "point"], 150 | icon: List, 151 | command: ({ editor, range }: CommandProps) => { 152 | editor.chain().focus().deleteRange(range).toggleBulletList().run(); 153 | }, 154 | }, 155 | { 156 | title: "Numbered List", 157 | description: "Create a list with numbering.", 158 | searchTerms: ["ordered"], 159 | icon: ListOrdered, 160 | command: ({ editor, range }: CommandProps) => { 161 | editor.chain().focus().deleteRange(range).toggleOrderedList().run(); 162 | }, 163 | }, 164 | { 165 | title: "Quote", 166 | description: "Capture a quote.", 167 | searchTerms: ["blockquote"], 168 | icon: TextQuote, 169 | command: ({ editor, range }: CommandProps) => 170 | editor 171 | .chain() 172 | .focus() 173 | .deleteRange(range) 174 | .toggleNode("paragraph", "paragraph") 175 | .toggleBlockquote() 176 | .run(), 177 | }, 178 | { 179 | title: "Code", 180 | description: "Capture a code snippet.", 181 | searchTerms: ["codeblock"], 182 | icon: Code, 183 | command: ({ editor, range }: CommandProps) => 184 | editor.chain().focus().deleteRange(range).toggleCodeBlock().run(), 185 | }, 186 | { 187 | title: "Image", 188 | description: "Upload an image from your computer.", 189 | searchTerms: ["photo", "picture", "media"], 190 | icon: Image, 191 | command: ({ editor, range }: CommandProps) => { 192 | editor.chain().focus().deleteRange(range).run(); 193 | // upload image 194 | const input = document.createElement("input"); 195 | input.type = "file"; 196 | input.accept = "image/*"; 197 | input.onchange = async () => { 198 | if (input.files?.length) { 199 | const file = input.files[0]; 200 | const pos = editor.view.state.selection.from; 201 | startImageUpload(file, editor.view, pos); 202 | } 203 | }; 204 | input.click(); 205 | }, 206 | }, 207 | ].filter((item) => { 208 | if (typeof query === "string" && query.length > 0) { 209 | const search = query.toLowerCase(); 210 | return ( 211 | item.title.toLowerCase().includes(search) || 212 | item.description.toLowerCase().includes(search) || 213 | (item.searchTerms && 214 | item.searchTerms.some((term: string) => term.includes(search))) 215 | ); 216 | } 217 | return true; 218 | }); 219 | }; 220 | 221 | const renderItems = () => { 222 | let component: VueRenderer | null = null; 223 | let popup: any | null = null; 224 | 225 | return { 226 | onStart: (props: { editor: Editor; clientRect: DOMRect }) => { 227 | component = new VueRenderer(SlashCommandList, { 228 | props, 229 | editor: props.editor, 230 | }); 231 | 232 | if (!props.clientRect) { 233 | return; 234 | } 235 | 236 | // @ts-ignore 237 | popup = tippy("body", { 238 | getReferenceClientRect: props.clientRect, 239 | appendTo: () => document.body, 240 | content: component.element, 241 | showOnCreate: true, 242 | interactive: true, 243 | trigger: "manual", 244 | placement: "bottom-start", 245 | }); 246 | }, 247 | onUpdate: (props: { editor: Editor; clientRect: DOMRect }) => { 248 | component?.updateProps(props); 249 | 250 | popup && 251 | popup[0].setProps({ 252 | getReferenceClientRect: props.clientRect, 253 | }); 254 | }, 255 | onKeyDown: (props: { event: KeyboardEvent }) => { 256 | if (props.event.key === "Escape") { 257 | popup?.[0].hide(); 258 | 259 | return true; 260 | } 261 | 262 | return component?.ref?.onKeyDown(props.event); 263 | }, 264 | onExit: () => { 265 | popup?.[0].destroy(); 266 | component?.destroy(); 267 | }, 268 | }; 269 | }; 270 | 271 | const SlashCommand = Command.configure({ 272 | suggestion: { 273 | items: getSuggestionItems, 274 | render: renderItems, 275 | }, 276 | }); 277 | 278 | export default SlashCommand; 279 | -------------------------------------------------------------------------------- /package/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@headlessui/vue': 9 | specifier: ^1.7.16 10 | version: 1.7.16(vue@3.3.4) 11 | '@tiptap/extension-color': 12 | specifier: ^2.1.7 13 | version: 2.1.7(@tiptap/core@2.1.12)(@tiptap/extension-text-style@2.1.7) 14 | '@tiptap/extension-highlight': 15 | specifier: ^2.1.7 16 | version: 2.1.7(@tiptap/core@2.1.12) 17 | '@tiptap/extension-horizontal-rule': 18 | specifier: ^2.1.7 19 | version: 2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 20 | '@tiptap/extension-image': 21 | specifier: ^2.1.7 22 | version: 2.1.7(@tiptap/core@2.1.12) 23 | '@tiptap/extension-link': 24 | specifier: ^2.1.7 25 | version: 2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 26 | '@tiptap/extension-placeholder': 27 | specifier: ^2.1.7 28 | version: 2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 29 | '@tiptap/extension-task-item': 30 | specifier: ^2.1.7 31 | version: 2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 32 | '@tiptap/extension-task-list': 33 | specifier: ^2.1.7 34 | version: 2.1.7(@tiptap/core@2.1.12) 35 | '@tiptap/extension-text-style': 36 | specifier: ^2.1.7 37 | version: 2.1.7(@tiptap/core@2.1.12) 38 | '@tiptap/extension-underline': 39 | specifier: ^2.1.7 40 | version: 2.1.7(@tiptap/core@2.1.12) 41 | '@tiptap/pm': 42 | specifier: ^2.1.7 43 | version: 2.1.7 44 | '@tiptap/starter-kit': 45 | specifier: ^2.1.7 46 | version: 2.1.7(@tiptap/pm@2.1.7) 47 | '@tiptap/suggestion': 48 | specifier: ^2.1.7 49 | version: 2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 50 | '@tiptap/vue-3': 51 | specifier: ^2.1.7 52 | version: 2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7)(vue@3.3.4) 53 | '@vercel/blob': 54 | specifier: ^0.15.1 55 | version: 0.15.1 56 | '@vueuse/core': 57 | specifier: ^10.4.1 58 | version: 10.4.1(vue@3.3.4) 59 | ai: 60 | specifier: ^2.2.11 61 | version: 2.2.11(react@18.2.0)(solid-js@1.8.5)(svelte@4.2.3)(vue@3.3.4) 62 | lucide-vue-next: 63 | specifier: ^0.274.0 64 | version: 0.274.0(vue@3.3.4) 65 | sonner: 66 | specifier: ^1.2.0 67 | version: 1.2.0(react-dom@18.2.0)(react@18.2.0) 68 | tailwindcss-animate: 69 | specifier: ^1.0.7 70 | version: 1.0.7(tailwindcss@3.3.3) 71 | tippy.js: 72 | specifier: ^6.3.7 73 | version: 6.3.7 74 | tiptap-markdown: 75 | specifier: ^0.8.2 76 | version: 0.8.2(@tiptap/core@2.1.12) 77 | vue: 78 | specifier: ^3.3.4 79 | version: 3.3.4 80 | 81 | devDependencies: 82 | '@tailwindcss/typography': 83 | specifier: ^0.5.9 84 | version: 0.5.9(tailwindcss@3.3.3) 85 | '@tiptap/core': 86 | specifier: ^2.1.12 87 | version: 2.1.12(@tiptap/pm@2.1.7) 88 | '@vitejs/plugin-vue': 89 | specifier: ^4.2.3 90 | version: 4.2.3(vite@4.4.5)(vue@3.3.4) 91 | autoprefixer: 92 | specifier: ^10.4.15 93 | version: 10.4.15(postcss@8.4.29) 94 | postcss: 95 | specifier: ^8.4.29 96 | version: 8.4.29 97 | tailwindcss: 98 | specifier: ^3.3.3 99 | version: 3.3.3 100 | typescript: 101 | specifier: ^5.0.2 102 | version: 5.0.2 103 | vite: 104 | specifier: ^4.4.5 105 | version: 4.4.5 106 | vite-plugin-dts: 107 | specifier: ^3.5.3 108 | version: 3.5.3(typescript@5.0.2)(vite@4.4.5) 109 | vue-tsc: 110 | specifier: ^1.8.5 111 | version: 1.8.5(typescript@5.0.2) 112 | 113 | packages: 114 | 115 | /@alloc/quick-lru@5.2.0: 116 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 117 | engines: {node: '>=10'} 118 | 119 | /@ampproject/remapping@2.2.1: 120 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 121 | engines: {node: '>=6.0.0'} 122 | dependencies: 123 | '@jridgewell/gen-mapping': 0.3.3 124 | '@jridgewell/trace-mapping': 0.3.20 125 | dev: false 126 | 127 | /@babel/code-frame@7.22.13: 128 | resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} 129 | engines: {node: '>=6.9.0'} 130 | dependencies: 131 | '@babel/highlight': 7.22.20 132 | chalk: 2.4.2 133 | dev: false 134 | 135 | /@babel/helper-string-parser@7.22.5: 136 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 137 | engines: {node: '>=6.9.0'} 138 | 139 | /@babel/helper-validator-identifier@7.22.20: 140 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 141 | engines: {node: '>=6.9.0'} 142 | 143 | /@babel/highlight@7.22.20: 144 | resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} 145 | engines: {node: '>=6.9.0'} 146 | dependencies: 147 | '@babel/helper-validator-identifier': 7.22.20 148 | chalk: 2.4.2 149 | js-tokens: 4.0.0 150 | dev: false 151 | 152 | /@babel/parser@7.23.3: 153 | resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} 154 | engines: {node: '>=6.0.0'} 155 | hasBin: true 156 | dependencies: 157 | '@babel/types': 7.23.3 158 | 159 | /@babel/types@7.23.3: 160 | resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} 161 | engines: {node: '>=6.9.0'} 162 | dependencies: 163 | '@babel/helper-string-parser': 7.22.5 164 | '@babel/helper-validator-identifier': 7.22.20 165 | to-fast-properties: 2.0.0 166 | 167 | /@esbuild/android-arm64@0.18.20: 168 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 169 | engines: {node: '>=12'} 170 | cpu: [arm64] 171 | os: [android] 172 | requiresBuild: true 173 | dev: true 174 | optional: true 175 | 176 | /@esbuild/android-arm@0.18.20: 177 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 178 | engines: {node: '>=12'} 179 | cpu: [arm] 180 | os: [android] 181 | requiresBuild: true 182 | dev: true 183 | optional: true 184 | 185 | /@esbuild/android-x64@0.18.20: 186 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 187 | engines: {node: '>=12'} 188 | cpu: [x64] 189 | os: [android] 190 | requiresBuild: true 191 | dev: true 192 | optional: true 193 | 194 | /@esbuild/darwin-arm64@0.18.20: 195 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 196 | engines: {node: '>=12'} 197 | cpu: [arm64] 198 | os: [darwin] 199 | requiresBuild: true 200 | dev: true 201 | optional: true 202 | 203 | /@esbuild/darwin-x64@0.18.20: 204 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 205 | engines: {node: '>=12'} 206 | cpu: [x64] 207 | os: [darwin] 208 | requiresBuild: true 209 | dev: true 210 | optional: true 211 | 212 | /@esbuild/freebsd-arm64@0.18.20: 213 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 214 | engines: {node: '>=12'} 215 | cpu: [arm64] 216 | os: [freebsd] 217 | requiresBuild: true 218 | dev: true 219 | optional: true 220 | 221 | /@esbuild/freebsd-x64@0.18.20: 222 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 223 | engines: {node: '>=12'} 224 | cpu: [x64] 225 | os: [freebsd] 226 | requiresBuild: true 227 | dev: true 228 | optional: true 229 | 230 | /@esbuild/linux-arm64@0.18.20: 231 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 232 | engines: {node: '>=12'} 233 | cpu: [arm64] 234 | os: [linux] 235 | requiresBuild: true 236 | dev: true 237 | optional: true 238 | 239 | /@esbuild/linux-arm@0.18.20: 240 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 241 | engines: {node: '>=12'} 242 | cpu: [arm] 243 | os: [linux] 244 | requiresBuild: true 245 | dev: true 246 | optional: true 247 | 248 | /@esbuild/linux-ia32@0.18.20: 249 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 250 | engines: {node: '>=12'} 251 | cpu: [ia32] 252 | os: [linux] 253 | requiresBuild: true 254 | dev: true 255 | optional: true 256 | 257 | /@esbuild/linux-loong64@0.18.20: 258 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 259 | engines: {node: '>=12'} 260 | cpu: [loong64] 261 | os: [linux] 262 | requiresBuild: true 263 | dev: true 264 | optional: true 265 | 266 | /@esbuild/linux-mips64el@0.18.20: 267 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 268 | engines: {node: '>=12'} 269 | cpu: [mips64el] 270 | os: [linux] 271 | requiresBuild: true 272 | dev: true 273 | optional: true 274 | 275 | /@esbuild/linux-ppc64@0.18.20: 276 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 277 | engines: {node: '>=12'} 278 | cpu: [ppc64] 279 | os: [linux] 280 | requiresBuild: true 281 | dev: true 282 | optional: true 283 | 284 | /@esbuild/linux-riscv64@0.18.20: 285 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 286 | engines: {node: '>=12'} 287 | cpu: [riscv64] 288 | os: [linux] 289 | requiresBuild: true 290 | dev: true 291 | optional: true 292 | 293 | /@esbuild/linux-s390x@0.18.20: 294 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 295 | engines: {node: '>=12'} 296 | cpu: [s390x] 297 | os: [linux] 298 | requiresBuild: true 299 | dev: true 300 | optional: true 301 | 302 | /@esbuild/linux-x64@0.18.20: 303 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 304 | engines: {node: '>=12'} 305 | cpu: [x64] 306 | os: [linux] 307 | requiresBuild: true 308 | dev: true 309 | optional: true 310 | 311 | /@esbuild/netbsd-x64@0.18.20: 312 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 313 | engines: {node: '>=12'} 314 | cpu: [x64] 315 | os: [netbsd] 316 | requiresBuild: true 317 | dev: true 318 | optional: true 319 | 320 | /@esbuild/openbsd-x64@0.18.20: 321 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 322 | engines: {node: '>=12'} 323 | cpu: [x64] 324 | os: [openbsd] 325 | requiresBuild: true 326 | dev: true 327 | optional: true 328 | 329 | /@esbuild/sunos-x64@0.18.20: 330 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 331 | engines: {node: '>=12'} 332 | cpu: [x64] 333 | os: [sunos] 334 | requiresBuild: true 335 | dev: true 336 | optional: true 337 | 338 | /@esbuild/win32-arm64@0.18.20: 339 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 340 | engines: {node: '>=12'} 341 | cpu: [arm64] 342 | os: [win32] 343 | requiresBuild: true 344 | dev: true 345 | optional: true 346 | 347 | /@esbuild/win32-ia32@0.18.20: 348 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 349 | engines: {node: '>=12'} 350 | cpu: [ia32] 351 | os: [win32] 352 | requiresBuild: true 353 | dev: true 354 | optional: true 355 | 356 | /@esbuild/win32-x64@0.18.20: 357 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 358 | engines: {node: '>=12'} 359 | cpu: [x64] 360 | os: [win32] 361 | requiresBuild: true 362 | dev: true 363 | optional: true 364 | 365 | /@fastify/busboy@2.1.0: 366 | resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} 367 | engines: {node: '>=14'} 368 | dev: false 369 | 370 | /@headlessui/vue@1.7.16(vue@3.3.4): 371 | resolution: {integrity: sha512-nKT+nf/q6x198SsyK54mSszaQl/z+QxtASmgMEJtpxSX2Q0OPJX0upS/9daDyiECpeAsvjkoOrm2O/6PyBQ+Qg==} 372 | engines: {node: '>=10'} 373 | peerDependencies: 374 | vue: ^3.2.0 375 | dependencies: 376 | vue: 3.3.4 377 | dev: false 378 | 379 | /@jest/environment@29.7.0: 380 | resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} 381 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 382 | dependencies: 383 | '@jest/fake-timers': 29.7.0 384 | '@jest/types': 29.6.3 385 | '@types/node': 20.9.0 386 | jest-mock: 29.7.0 387 | dev: false 388 | 389 | /@jest/fake-timers@29.7.0: 390 | resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} 391 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 392 | dependencies: 393 | '@jest/types': 29.6.3 394 | '@sinonjs/fake-timers': 10.3.0 395 | '@types/node': 20.9.0 396 | jest-message-util: 29.7.0 397 | jest-mock: 29.7.0 398 | jest-util: 29.7.0 399 | dev: false 400 | 401 | /@jest/schemas@29.6.3: 402 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 403 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 404 | dependencies: 405 | '@sinclair/typebox': 0.27.8 406 | dev: false 407 | 408 | /@jest/types@29.6.3: 409 | resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} 410 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 411 | dependencies: 412 | '@jest/schemas': 29.6.3 413 | '@types/istanbul-lib-coverage': 2.0.6 414 | '@types/istanbul-reports': 3.0.4 415 | '@types/node': 20.9.0 416 | '@types/yargs': 17.0.31 417 | chalk: 4.1.2 418 | dev: false 419 | 420 | /@jridgewell/gen-mapping@0.3.3: 421 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 422 | engines: {node: '>=6.0.0'} 423 | dependencies: 424 | '@jridgewell/set-array': 1.1.2 425 | '@jridgewell/sourcemap-codec': 1.4.15 426 | '@jridgewell/trace-mapping': 0.3.20 427 | 428 | /@jridgewell/resolve-uri@3.1.1: 429 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 430 | engines: {node: '>=6.0.0'} 431 | 432 | /@jridgewell/set-array@1.1.2: 433 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 434 | engines: {node: '>=6.0.0'} 435 | 436 | /@jridgewell/sourcemap-codec@1.4.15: 437 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 438 | 439 | /@jridgewell/trace-mapping@0.3.20: 440 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 441 | dependencies: 442 | '@jridgewell/resolve-uri': 3.1.1 443 | '@jridgewell/sourcemap-codec': 1.4.15 444 | 445 | /@microsoft/api-extractor-model@7.28.2: 446 | resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==} 447 | dependencies: 448 | '@microsoft/tsdoc': 0.14.2 449 | '@microsoft/tsdoc-config': 0.16.2 450 | '@rushstack/node-core-library': 3.61.0 451 | transitivePeerDependencies: 452 | - '@types/node' 453 | dev: true 454 | 455 | /@microsoft/api-extractor@7.38.3: 456 | resolution: {integrity: sha512-xt9iYyC5f39281j77JTA9C3ISJpW1XWkCcnw+2vM78CPnro6KhPfwQdPDfwS5JCPNuq0grm8cMdPUOPvrchDWw==} 457 | hasBin: true 458 | dependencies: 459 | '@microsoft/api-extractor-model': 7.28.2 460 | '@microsoft/tsdoc': 0.14.2 461 | '@microsoft/tsdoc-config': 0.16.2 462 | '@rushstack/node-core-library': 3.61.0 463 | '@rushstack/rig-package': 0.5.1 464 | '@rushstack/ts-command-line': 4.17.1 465 | colors: 1.2.5 466 | lodash: 4.17.21 467 | resolve: 1.22.8 468 | semver: 7.5.4 469 | source-map: 0.6.1 470 | typescript: 5.0.4 471 | transitivePeerDependencies: 472 | - '@types/node' 473 | dev: true 474 | 475 | /@microsoft/tsdoc-config@0.16.2: 476 | resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} 477 | dependencies: 478 | '@microsoft/tsdoc': 0.14.2 479 | ajv: 6.12.6 480 | jju: 1.4.0 481 | resolve: 1.19.0 482 | dev: true 483 | 484 | /@microsoft/tsdoc@0.14.2: 485 | resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} 486 | dev: true 487 | 488 | /@nodelib/fs.scandir@2.1.5: 489 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 490 | engines: {node: '>= 8'} 491 | dependencies: 492 | '@nodelib/fs.stat': 2.0.5 493 | run-parallel: 1.2.0 494 | 495 | /@nodelib/fs.stat@2.0.5: 496 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 497 | engines: {node: '>= 8'} 498 | 499 | /@nodelib/fs.walk@1.2.8: 500 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 501 | engines: {node: '>= 8'} 502 | dependencies: 503 | '@nodelib/fs.scandir': 2.1.5 504 | fastq: 1.15.0 505 | 506 | /@popperjs/core@2.11.8: 507 | resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} 508 | dev: false 509 | 510 | /@remirror/core-constants@2.0.2: 511 | resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} 512 | 513 | /@remirror/core-helpers@3.0.0: 514 | resolution: {integrity: sha512-tusEgQJIqg4qKj6HSBUFcyRnWnziw3neh4T9wOmsPGHFC3w9kl5KSrDb9UAgE8uX6y32FnS7vJ955mWOl3n50A==} 515 | dependencies: 516 | '@remirror/core-constants': 2.0.2 517 | '@remirror/types': 1.0.1 518 | '@types/object.omit': 3.0.3 519 | '@types/object.pick': 1.3.4 520 | '@types/throttle-debounce': 2.1.0 521 | case-anything: 2.1.13 522 | dash-get: 1.0.2 523 | deepmerge: 4.3.1 524 | fast-deep-equal: 3.1.3 525 | make-error: 1.3.6 526 | object.omit: 3.0.0 527 | object.pick: 1.3.0 528 | throttle-debounce: 3.0.1 529 | 530 | /@remirror/types@1.0.1: 531 | resolution: {integrity: sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==} 532 | dependencies: 533 | type-fest: 2.19.0 534 | 535 | /@rollup/pluginutils@5.0.5: 536 | resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} 537 | engines: {node: '>=14.0.0'} 538 | peerDependencies: 539 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 540 | peerDependenciesMeta: 541 | rollup: 542 | optional: true 543 | dependencies: 544 | '@types/estree': 1.0.5 545 | estree-walker: 2.0.2 546 | picomatch: 2.3.1 547 | dev: true 548 | 549 | /@rushstack/node-core-library@3.61.0: 550 | resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==} 551 | peerDependencies: 552 | '@types/node': '*' 553 | peerDependenciesMeta: 554 | '@types/node': 555 | optional: true 556 | dependencies: 557 | colors: 1.2.5 558 | fs-extra: 7.0.1 559 | import-lazy: 4.0.0 560 | jju: 1.4.0 561 | resolve: 1.22.8 562 | semver: 7.5.4 563 | z-schema: 5.0.5 564 | dev: true 565 | 566 | /@rushstack/rig-package@0.5.1: 567 | resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} 568 | dependencies: 569 | resolve: 1.22.8 570 | strip-json-comments: 3.1.1 571 | dev: true 572 | 573 | /@rushstack/ts-command-line@4.17.1: 574 | resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} 575 | dependencies: 576 | '@types/argparse': 1.0.38 577 | argparse: 1.0.10 578 | colors: 1.2.5 579 | string-argv: 0.3.2 580 | dev: true 581 | 582 | /@sinclair/typebox@0.27.8: 583 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 584 | dev: false 585 | 586 | /@sinonjs/commons@3.0.0: 587 | resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} 588 | dependencies: 589 | type-detect: 4.0.8 590 | dev: false 591 | 592 | /@sinonjs/fake-timers@10.3.0: 593 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} 594 | dependencies: 595 | '@sinonjs/commons': 3.0.0 596 | dev: false 597 | 598 | /@tailwindcss/typography@0.5.9(tailwindcss@3.3.3): 599 | resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} 600 | peerDependencies: 601 | tailwindcss: '>=3.0.0 || insiders' 602 | dependencies: 603 | lodash.castarray: 4.4.0 604 | lodash.isplainobject: 4.0.6 605 | lodash.merge: 4.6.2 606 | postcss-selector-parser: 6.0.10 607 | tailwindcss: 3.3.3 608 | dev: true 609 | 610 | /@tiptap/core@2.1.12(@tiptap/pm@2.1.7): 611 | resolution: {integrity: sha512-ZGc3xrBJA9KY8kln5AYTj8y+GDrKxi7u95xIl2eccrqTY5CQeRu6HRNM1yT4mAjuSaG9jmazyjGRlQuhyxCKxQ==} 612 | peerDependencies: 613 | '@tiptap/pm': ^2.0.0 614 | dependencies: 615 | '@tiptap/pm': 2.1.7 616 | 617 | /@tiptap/extension-blockquote@2.1.12(@tiptap/core@2.1.12): 618 | resolution: {integrity: sha512-Qb3YRlCfugx9pw7VgLTb+jY37OY4aBJeZnqHzx4QThSm13edNYjasokbX0nTwL1Up4NPTcY19JUeHt6fVaVVGg==} 619 | peerDependencies: 620 | '@tiptap/core': ^2.0.0 621 | dependencies: 622 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 623 | dev: false 624 | 625 | /@tiptap/extension-bold@2.1.12(@tiptap/core@2.1.12): 626 | resolution: {integrity: sha512-AZGxIxcGU1/y6V2YEbKsq6BAibL8yQrbRm6EdcBnby41vj1WziewEKswhLGmZx5IKM2r2ldxld03KlfSIlKQZg==} 627 | peerDependencies: 628 | '@tiptap/core': ^2.0.0 629 | dependencies: 630 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 631 | dev: false 632 | 633 | /@tiptap/extension-bubble-menu@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 634 | resolution: {integrity: sha512-gAGi21EQ4wvLmT7klgariAc2Hf+cIjaNU2NWze3ut6Ku9gUo5ZLqj1t9SKHmNf4d5JG63O8GxpErqpA7lHlRtw==} 635 | peerDependencies: 636 | '@tiptap/core': ^2.0.0 637 | '@tiptap/pm': ^2.0.0 638 | dependencies: 639 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 640 | '@tiptap/pm': 2.1.7 641 | tippy.js: 6.3.7 642 | dev: false 643 | 644 | /@tiptap/extension-bullet-list@2.1.12(@tiptap/core@2.1.12): 645 | resolution: {integrity: sha512-vtD8vWtNlmAZX8LYqt2yU9w3mU9rPCiHmbp4hDXJs2kBnI0Ju/qAyXFx6iJ3C3XyuMnMbJdDI9ee0spAvFz7cQ==} 646 | peerDependencies: 647 | '@tiptap/core': ^2.0.0 648 | dependencies: 649 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 650 | dev: false 651 | 652 | /@tiptap/extension-code-block@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 653 | resolution: {integrity: sha512-RXtSYCVsnk8D+K80uNZShClfZjvv1EgO42JlXLVGWQdIgaNyuOv/6I/Jdf+ZzhnpsBnHufW+6TJjwP5vJPSPHA==} 654 | peerDependencies: 655 | '@tiptap/core': ^2.0.0 656 | '@tiptap/pm': ^2.0.0 657 | dependencies: 658 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 659 | '@tiptap/pm': 2.1.7 660 | dev: false 661 | 662 | /@tiptap/extension-code@2.1.12(@tiptap/core@2.1.12): 663 | resolution: {integrity: sha512-CRiRq5OTC1lFgSx6IMrECqmtb93a0ZZKujEnaRhzWliPBjLIi66va05f/P1vnV6/tHaC3yfXys6dxB5A4J8jxw==} 664 | peerDependencies: 665 | '@tiptap/core': ^2.0.0 666 | dependencies: 667 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 668 | dev: false 669 | 670 | /@tiptap/extension-color@2.1.7(@tiptap/core@2.1.12)(@tiptap/extension-text-style@2.1.7): 671 | resolution: {integrity: sha512-NLspH5taSpZP60rXJjDKu8AP9VDd+dlqz4guxvijtuPEePw87Fzidxx9w6X0uYQfx1O0xdPFq3UodlDz591scA==} 672 | peerDependencies: 673 | '@tiptap/core': ^2.0.0 674 | '@tiptap/extension-text-style': ^2.0.0 675 | dependencies: 676 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 677 | '@tiptap/extension-text-style': 2.1.7(@tiptap/core@2.1.12) 678 | dev: false 679 | 680 | /@tiptap/extension-document@2.1.12(@tiptap/core@2.1.12): 681 | resolution: {integrity: sha512-0QNfAkCcFlB9O8cUNSwTSIQMV9TmoEhfEaLz/GvbjwEq4skXK3bU+OQX7Ih07waCDVXIGAZ7YAZogbvrn/WbOw==} 682 | peerDependencies: 683 | '@tiptap/core': ^2.0.0 684 | dependencies: 685 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 686 | dev: false 687 | 688 | /@tiptap/extension-dropcursor@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 689 | resolution: {integrity: sha512-0tT/q8nL4NBCYPxr9T0Brck+RQbWuczm9nV0bnxgt0IiQXoRHutfPWdS7GA65PTuVRBS/3LOco30fbjFhkfz/A==} 690 | peerDependencies: 691 | '@tiptap/core': ^2.0.0 692 | '@tiptap/pm': ^2.0.0 693 | dependencies: 694 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 695 | '@tiptap/pm': 2.1.7 696 | dev: false 697 | 698 | /@tiptap/extension-floating-menu@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 699 | resolution: {integrity: sha512-uo0ydCJNg6AWwLT6cMUJYVChfvw2PY9ZfvKRhh9YJlGfM02jS4RUG/bJBts6R37f+a5FsOvAVwg8EvqPlNND1A==} 700 | peerDependencies: 701 | '@tiptap/core': ^2.0.0 702 | '@tiptap/pm': ^2.0.0 703 | dependencies: 704 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 705 | '@tiptap/pm': 2.1.7 706 | tippy.js: 6.3.7 707 | dev: false 708 | 709 | /@tiptap/extension-gapcursor@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 710 | resolution: {integrity: sha512-zFYdZCqPgpwoB7whyuwpc8EYLYjUE5QYKb8vICvc+FraBUDM51ujYhFSgJC3rhs8EjI+8GcK8ShLbSMIn49YOQ==} 711 | peerDependencies: 712 | '@tiptap/core': ^2.0.0 713 | '@tiptap/pm': ^2.0.0 714 | dependencies: 715 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 716 | '@tiptap/pm': 2.1.7 717 | dev: false 718 | 719 | /@tiptap/extension-hard-break@2.1.12(@tiptap/core@2.1.12): 720 | resolution: {integrity: sha512-nqKcAYGEOafg9D+2cy1E4gHNGuL12LerVa0eS2SQOb+PT8vSel9OTKU1RyZldsWSQJ5rq/w4uIjmLnrSR2w6Yw==} 721 | peerDependencies: 722 | '@tiptap/core': ^2.0.0 723 | dependencies: 724 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 725 | dev: false 726 | 727 | /@tiptap/extension-heading@2.1.12(@tiptap/core@2.1.12): 728 | resolution: {integrity: sha512-MoANP3POAP68Ko9YXarfDKLM/kXtscgp6m+xRagPAghRNujVY88nK1qBMZ3JdvTVN6b/ATJhp8UdrZX96TLV2w==} 729 | peerDependencies: 730 | '@tiptap/core': ^2.0.0 731 | dependencies: 732 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 733 | dev: false 734 | 735 | /@tiptap/extension-highlight@2.1.7(@tiptap/core@2.1.12): 736 | resolution: {integrity: sha512-3EXrnf1BQSdOe/iqzcTIr5Tf0NOhPQ+y1B9nMi/40v3MD8WzRBLaqj0lvpwO7xMAdgxm6IiL/XFYU41n9yFl/Q==} 737 | peerDependencies: 738 | '@tiptap/core': ^2.0.0 739 | dependencies: 740 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 741 | dev: false 742 | 743 | /@tiptap/extension-history@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 744 | resolution: {integrity: sha512-6b7UFVkvPjq3LVoCTrYZAczt5sQrQUaoDWAieVClVZoFLfjga2Fwjcfgcie8IjdPt8YO2hG/sar/c07i9vM0Sg==} 745 | peerDependencies: 746 | '@tiptap/core': ^2.0.0 747 | '@tiptap/pm': ^2.0.0 748 | dependencies: 749 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 750 | '@tiptap/pm': 2.1.7 751 | dev: false 752 | 753 | /@tiptap/extension-horizontal-rule@2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 754 | resolution: {integrity: sha512-hJupsDxDVmjmKI/Ewl/gtiyUx52Y3wRUhT8dCXNOA5eldmPXN23E2Fa2BC8XB47dyc5pubyNcLuqaLeaZ5hedw==} 755 | peerDependencies: 756 | '@tiptap/core': ^2.0.0 757 | '@tiptap/pm': ^2.0.0 758 | dependencies: 759 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 760 | '@tiptap/pm': 2.1.7 761 | dev: false 762 | 763 | /@tiptap/extension-image@2.1.7(@tiptap/core@2.1.12): 764 | resolution: {integrity: sha512-aWa/NPMc1U9Z6xuV0gk1O1nk4H7BAwQMwqXWdvUQCJhmW5+LJPdEiKvt3P6j+ClIN7sdyokZCgr6eGr817qTLA==} 765 | peerDependencies: 766 | '@tiptap/core': ^2.0.0 767 | dependencies: 768 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 769 | dev: false 770 | 771 | /@tiptap/extension-italic@2.1.12(@tiptap/core@2.1.12): 772 | resolution: {integrity: sha512-/XYrW4ZEWyqDvnXVKbgTXItpJOp2ycswk+fJ3vuexyolO6NSs0UuYC6X4f+FbHYL5VuWqVBv7EavGa+tB6sl3A==} 773 | peerDependencies: 774 | '@tiptap/core': ^2.0.0 775 | dependencies: 776 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 777 | dev: false 778 | 779 | /@tiptap/extension-link@2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 780 | resolution: {integrity: sha512-NDfoMCkThng1B530pMg5y69+eWoghZXK2uCntrJH7Rs8jNeGMyt9wGIOd7N8ZYz0oJ2ZYKzZjS0RANdBDS17DA==} 781 | peerDependencies: 782 | '@tiptap/core': ^2.0.0 783 | '@tiptap/pm': ^2.0.0 784 | dependencies: 785 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 786 | '@tiptap/pm': 2.1.7 787 | linkifyjs: 4.1.2 788 | dev: false 789 | 790 | /@tiptap/extension-list-item@2.1.12(@tiptap/core@2.1.12): 791 | resolution: {integrity: sha512-Gk7hBFofAPmNQ8+uw8w5QSsZOMEGf7KQXJnx5B022YAUJTYYxO3jYVuzp34Drk9p+zNNIcXD4kc7ff5+nFOTrg==} 792 | peerDependencies: 793 | '@tiptap/core': ^2.0.0 794 | dependencies: 795 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 796 | dev: false 797 | 798 | /@tiptap/extension-ordered-list@2.1.12(@tiptap/core@2.1.12): 799 | resolution: {integrity: sha512-tF6VGl+D2avCgn9U/2YLJ8qVmV6sPE/iEzVAFZuOSe6L0Pj7SQw4K6AO640QBob/d8VrqqJFHCb6l10amJOnXA==} 800 | peerDependencies: 801 | '@tiptap/core': ^2.0.0 802 | dependencies: 803 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 804 | dev: false 805 | 806 | /@tiptap/extension-paragraph@2.1.12(@tiptap/core@2.1.12): 807 | resolution: {integrity: sha512-hoH/uWPX+KKnNAZagudlsrr4Xu57nusGekkJWBcrb5MCDE91BS+DN2xifuhwXiTHxnwOMVFjluc0bPzQbkArsw==} 808 | peerDependencies: 809 | '@tiptap/core': ^2.0.0 810 | dependencies: 811 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 812 | dev: false 813 | 814 | /@tiptap/extension-placeholder@2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 815 | resolution: {integrity: sha512-IiBoItYYNS7hb/zmPitw3w6Cylmp9qX+zW+QKe3lDkCNPeKxyQr86AnVLcQYOuXg62cLV9dp+4azZzHoz9SOcg==} 816 | peerDependencies: 817 | '@tiptap/core': ^2.0.0 818 | '@tiptap/pm': ^2.0.0 819 | dependencies: 820 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 821 | '@tiptap/pm': 2.1.7 822 | dev: false 823 | 824 | /@tiptap/extension-strike@2.1.12(@tiptap/core@2.1.12): 825 | resolution: {integrity: sha512-HlhrzIjYUT8oCH9nYzEL2QTTn8d1ECnVhKvzAe6x41xk31PjLMHTUy8aYjeQEkWZOWZ34tiTmslV1ce6R3Dt8g==} 826 | peerDependencies: 827 | '@tiptap/core': ^2.0.0 828 | dependencies: 829 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 830 | dev: false 831 | 832 | /@tiptap/extension-task-item@2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 833 | resolution: {integrity: sha512-4wFLZmhYqr87SEI/Qgk3FiH+qfp6IOmuYVhpL5zGLa6p+ytUdmPH3+zOaD1rthn5JiRU9KwYWFvTo2f+/O0NAg==} 834 | peerDependencies: 835 | '@tiptap/core': ^2.0.0 836 | '@tiptap/pm': ^2.0.0 837 | dependencies: 838 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 839 | '@tiptap/pm': 2.1.7 840 | dev: false 841 | 842 | /@tiptap/extension-task-list@2.1.7(@tiptap/core@2.1.12): 843 | resolution: {integrity: sha512-eerV8pbGuYoFji6arWk+LBsIfURXPWNSLi1ZCuPfXP6N8sAV3fNT+VDm6RlGQwadQNae7rnibNClk67+55h9Zg==} 844 | peerDependencies: 845 | '@tiptap/core': ^2.0.0 846 | dependencies: 847 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 848 | dev: false 849 | 850 | /@tiptap/extension-text-style@2.1.7(@tiptap/core@2.1.12): 851 | resolution: {integrity: sha512-0QhEMDiDqMpyBGRt6o4GvbN9cUibZe4LT9e0ujarT6ElSe2fbtwGPnXSXApUtgHDDwHw95M5ZVxX/H5cjyjw1g==} 852 | peerDependencies: 853 | '@tiptap/core': ^2.0.0 854 | dependencies: 855 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 856 | dev: false 857 | 858 | /@tiptap/extension-text@2.1.12(@tiptap/core@2.1.12): 859 | resolution: {integrity: sha512-rCNUd505p/PXwU9Jgxo4ZJv4A3cIBAyAqlx/dtcY6cjztCQuXJhuQILPhjGhBTOLEEL4kW2wQtqzCmb7O8i2jg==} 860 | peerDependencies: 861 | '@tiptap/core': ^2.0.0 862 | dependencies: 863 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 864 | dev: false 865 | 866 | /@tiptap/extension-underline@2.1.7(@tiptap/core@2.1.12): 867 | resolution: {integrity: sha512-mL95afyEJvg+C2yrTVn7QltfyE9ja1+94+OUkRBbB8PN3N6HvfSL4K/QSqecOLQ38bSQm/6ZGPkBLDkDGhGPdw==} 868 | peerDependencies: 869 | '@tiptap/core': ^2.0.0 870 | dependencies: 871 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 872 | dev: false 873 | 874 | /@tiptap/pm@2.1.7: 875 | resolution: {integrity: sha512-RBVb/k9OjmClwdVl7fpekFgUsLAm1U+5I4w1qA2tj7L/hSPOuPzaEHwCqDYe0b2PR5dd8h0nylS9qXuXVlfwfQ==} 876 | dependencies: 877 | prosemirror-changeset: 2.2.1 878 | prosemirror-collab: 1.3.1 879 | prosemirror-commands: 1.5.2 880 | prosemirror-dropcursor: 1.8.1 881 | prosemirror-gapcursor: 1.3.2 882 | prosemirror-history: 1.3.2 883 | prosemirror-inputrules: 1.2.1 884 | prosemirror-keymap: 1.2.2 885 | prosemirror-markdown: 1.11.2 886 | prosemirror-menu: 1.2.4 887 | prosemirror-model: 1.19.3 888 | prosemirror-schema-basic: 1.2.2 889 | prosemirror-schema-list: 1.3.0 890 | prosemirror-state: 1.4.3 891 | prosemirror-tables: 1.3.4 892 | prosemirror-trailing-node: 2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.4) 893 | prosemirror-transform: 1.8.0 894 | prosemirror-view: 1.32.4 895 | 896 | /@tiptap/starter-kit@2.1.7(@tiptap/pm@2.1.7): 897 | resolution: {integrity: sha512-z2cmJRSC7ImaTGWrHv+xws9y1wIG0OCPosBYpmpwlEfA3JG3axWFmVRJlWnsQV4eSMi3QY3vaPgBAnrR4IxRhQ==} 898 | dependencies: 899 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 900 | '@tiptap/extension-blockquote': 2.1.12(@tiptap/core@2.1.12) 901 | '@tiptap/extension-bold': 2.1.12(@tiptap/core@2.1.12) 902 | '@tiptap/extension-bullet-list': 2.1.12(@tiptap/core@2.1.12) 903 | '@tiptap/extension-code': 2.1.12(@tiptap/core@2.1.12) 904 | '@tiptap/extension-code-block': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 905 | '@tiptap/extension-document': 2.1.12(@tiptap/core@2.1.12) 906 | '@tiptap/extension-dropcursor': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 907 | '@tiptap/extension-gapcursor': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 908 | '@tiptap/extension-hard-break': 2.1.12(@tiptap/core@2.1.12) 909 | '@tiptap/extension-heading': 2.1.12(@tiptap/core@2.1.12) 910 | '@tiptap/extension-history': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 911 | '@tiptap/extension-horizontal-rule': 2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 912 | '@tiptap/extension-italic': 2.1.12(@tiptap/core@2.1.12) 913 | '@tiptap/extension-list-item': 2.1.12(@tiptap/core@2.1.12) 914 | '@tiptap/extension-ordered-list': 2.1.12(@tiptap/core@2.1.12) 915 | '@tiptap/extension-paragraph': 2.1.12(@tiptap/core@2.1.12) 916 | '@tiptap/extension-strike': 2.1.12(@tiptap/core@2.1.12) 917 | '@tiptap/extension-text': 2.1.12(@tiptap/core@2.1.12) 918 | transitivePeerDependencies: 919 | - '@tiptap/pm' 920 | dev: false 921 | 922 | /@tiptap/suggestion@2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7): 923 | resolution: {integrity: sha512-FKlXFMWf9rCnNJQsUfeX6WpS2VUs2O98ENkyhfV8ehCB7X5+57mkkxJxl/88SMbjZL+FbWPBKLaiOvsXfIUoww==} 924 | peerDependencies: 925 | '@tiptap/core': ^2.0.0 926 | '@tiptap/pm': ^2.0.0 927 | dependencies: 928 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 929 | '@tiptap/pm': 2.1.7 930 | dev: false 931 | 932 | /@tiptap/vue-3@2.1.7(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7)(vue@3.3.4): 933 | resolution: {integrity: sha512-JJRXWKLJ8mopb0uZV4JXyOW6vKQnarYoCj0hsy9ZT2LhSuLlPXY0D40NAbFVMMbQssewUtgPUFgVZ/TusMEysQ==} 934 | peerDependencies: 935 | '@tiptap/core': ^2.0.0 936 | '@tiptap/pm': ^2.0.0 937 | vue: ^3.0.0 938 | dependencies: 939 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 940 | '@tiptap/extension-bubble-menu': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 941 | '@tiptap/extension-floating-menu': 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.7) 942 | '@tiptap/pm': 2.1.7 943 | vue: 3.3.4 944 | dev: false 945 | 946 | /@tootallnate/once@2.0.0: 947 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} 948 | engines: {node: '>= 10'} 949 | dev: false 950 | 951 | /@types/argparse@1.0.38: 952 | resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} 953 | dev: true 954 | 955 | /@types/estree@1.0.5: 956 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 957 | 958 | /@types/istanbul-lib-coverage@2.0.6: 959 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 960 | dev: false 961 | 962 | /@types/istanbul-lib-report@3.0.3: 963 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 964 | dependencies: 965 | '@types/istanbul-lib-coverage': 2.0.6 966 | dev: false 967 | 968 | /@types/istanbul-reports@3.0.4: 969 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 970 | dependencies: 971 | '@types/istanbul-lib-report': 3.0.3 972 | dev: false 973 | 974 | /@types/jsdom@20.0.1: 975 | resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} 976 | dependencies: 977 | '@types/node': 20.9.0 978 | '@types/tough-cookie': 4.0.5 979 | parse5: 7.1.2 980 | dev: false 981 | 982 | /@types/linkify-it@3.0.5: 983 | resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} 984 | dev: false 985 | 986 | /@types/markdown-it@12.2.3: 987 | resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} 988 | dependencies: 989 | '@types/linkify-it': 3.0.5 990 | '@types/mdurl': 1.0.5 991 | dev: false 992 | 993 | /@types/mdurl@1.0.5: 994 | resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} 995 | dev: false 996 | 997 | /@types/node-fetch@2.6.9: 998 | resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} 999 | dependencies: 1000 | '@types/node': 18.18.9 1001 | form-data: 4.0.0 1002 | dev: false 1003 | 1004 | /@types/node@18.18.9: 1005 | resolution: {integrity: sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==} 1006 | dependencies: 1007 | undici-types: 5.26.5 1008 | dev: false 1009 | 1010 | /@types/node@20.9.0: 1011 | resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} 1012 | dependencies: 1013 | undici-types: 5.26.5 1014 | dev: false 1015 | 1016 | /@types/object.omit@3.0.3: 1017 | resolution: {integrity: sha512-xrq4bQTBGYY2cw+gV4PzoG2Lv3L0pjZ1uXStRRDQoATOYW1lCsFQHhQ+OkPhIcQoqLjAq7gYif7D14Qaa6Zbew==} 1018 | 1019 | /@types/object.pick@1.3.4: 1020 | resolution: {integrity: sha512-5PjwB0uP2XDp3nt5u5NJAG2DORHIRClPzWT/TTZhJ2Ekwe8M5bA9tvPdi9NO/n2uvu2/ictat8kgqvLfcIE1SA==} 1021 | 1022 | /@types/stack-utils@2.0.3: 1023 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 1024 | dev: false 1025 | 1026 | /@types/throttle-debounce@2.1.0: 1027 | resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} 1028 | 1029 | /@types/tough-cookie@4.0.5: 1030 | resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} 1031 | dev: false 1032 | 1033 | /@types/web-bluetooth@0.0.17: 1034 | resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} 1035 | dev: false 1036 | 1037 | /@types/yargs-parser@21.0.3: 1038 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 1039 | dev: false 1040 | 1041 | /@types/yargs@17.0.31: 1042 | resolution: {integrity: sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==} 1043 | dependencies: 1044 | '@types/yargs-parser': 21.0.3 1045 | dev: false 1046 | 1047 | /@vercel/blob@0.15.1: 1048 | resolution: {integrity: sha512-Wo7VU9/tM8kkv7krvxGoDeu/Li0h7PYR/TB1TEiyJZzACruA0jWqj44OGokJQCYN3ZvV5tXHpTAN6pImIBCrUw==} 1049 | engines: {node: '>=16.14'} 1050 | dependencies: 1051 | jest-environment-jsdom: 29.7.0 1052 | undici: 5.27.0 1053 | transitivePeerDependencies: 1054 | - bufferutil 1055 | - canvas 1056 | - supports-color 1057 | - utf-8-validate 1058 | dev: false 1059 | 1060 | /@vitejs/plugin-vue@4.2.3(vite@4.4.5)(vue@3.3.4): 1061 | resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} 1062 | engines: {node: ^14.18.0 || >=16.0.0} 1063 | peerDependencies: 1064 | vite: ^4.0.0 1065 | vue: ^3.2.25 1066 | dependencies: 1067 | vite: 4.4.5 1068 | vue: 3.3.4 1069 | dev: true 1070 | 1071 | /@volar/language-core@1.10.10: 1072 | resolution: {integrity: sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==} 1073 | dependencies: 1074 | '@volar/source-map': 1.10.10 1075 | dev: true 1076 | 1077 | /@volar/language-core@1.9.2: 1078 | resolution: {integrity: sha512-9GTes/IUPOl0YoV5RQWhCP5a4EDFFfJZGwZn1xA5ug1FO0G6GOVoJI6tQatujtcQmDOQlOM5/0NewnlumygPkQ==} 1079 | dependencies: 1080 | '@volar/source-map': 1.9.2 1081 | dev: true 1082 | 1083 | /@volar/source-map@1.10.10: 1084 | resolution: {integrity: sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==} 1085 | dependencies: 1086 | muggle-string: 0.3.1 1087 | dev: true 1088 | 1089 | /@volar/source-map@1.9.2: 1090 | resolution: {integrity: sha512-rYTvV/HMf2CSRkd6oiVxcjX4rnSxEsVfJmw1KTmD4VTBXlz1+b16VIysQX4+1p/eZd2TyCeFblyylIxbZ+YOGg==} 1091 | dependencies: 1092 | muggle-string: 0.3.1 1093 | dev: true 1094 | 1095 | /@volar/typescript@1.10.10: 1096 | resolution: {integrity: sha512-4a2r5bdUub2m+mYVnLu2wt59fuoYWe7nf0uXtGHU8QQ5LDNfzAR0wK7NgDiQ9rcl2WT3fxT2AA9AylAwFtj50A==} 1097 | dependencies: 1098 | '@volar/language-core': 1.10.10 1099 | path-browserify: 1.0.1 1100 | dev: true 1101 | 1102 | /@volar/typescript@1.9.2: 1103 | resolution: {integrity: sha512-l4DA+S3ZVOWGACDdRNVSYZ41nuTWOH8OMS/yVeFV2fTmr/IuD37+3wzzGnjIPwCUa0w+fpg8vJPalzYetmlFTQ==} 1104 | dependencies: 1105 | '@volar/language-core': 1.9.2 1106 | dev: true 1107 | 1108 | /@vue/compiler-core@3.3.4: 1109 | resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} 1110 | dependencies: 1111 | '@babel/parser': 7.23.3 1112 | '@vue/shared': 3.3.4 1113 | estree-walker: 2.0.2 1114 | source-map-js: 1.0.2 1115 | 1116 | /@vue/compiler-core@3.3.8: 1117 | resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==} 1118 | dependencies: 1119 | '@babel/parser': 7.23.3 1120 | '@vue/shared': 3.3.8 1121 | estree-walker: 2.0.2 1122 | source-map-js: 1.0.2 1123 | dev: true 1124 | 1125 | /@vue/compiler-dom@3.3.4: 1126 | resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} 1127 | dependencies: 1128 | '@vue/compiler-core': 3.3.4 1129 | '@vue/shared': 3.3.4 1130 | 1131 | /@vue/compiler-dom@3.3.8: 1132 | resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==} 1133 | dependencies: 1134 | '@vue/compiler-core': 3.3.8 1135 | '@vue/shared': 3.3.8 1136 | dev: true 1137 | 1138 | /@vue/compiler-sfc@3.3.4: 1139 | resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} 1140 | dependencies: 1141 | '@babel/parser': 7.23.3 1142 | '@vue/compiler-core': 3.3.4 1143 | '@vue/compiler-dom': 3.3.4 1144 | '@vue/compiler-ssr': 3.3.4 1145 | '@vue/reactivity-transform': 3.3.4 1146 | '@vue/shared': 3.3.4 1147 | estree-walker: 2.0.2 1148 | magic-string: 0.30.5 1149 | postcss: 8.4.29 1150 | source-map-js: 1.0.2 1151 | 1152 | /@vue/compiler-ssr@3.3.4: 1153 | resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} 1154 | dependencies: 1155 | '@vue/compiler-dom': 3.3.4 1156 | '@vue/shared': 3.3.4 1157 | 1158 | /@vue/language-core@1.8.22(typescript@5.0.2): 1159 | resolution: {integrity: sha512-bsMoJzCrXZqGsxawtUea1cLjUT9dZnDsy5TuZ+l1fxRMzUGQUG9+Ypq4w//CqpWmrx7nIAJpw2JVF/t258miRw==} 1160 | peerDependencies: 1161 | typescript: '*' 1162 | peerDependenciesMeta: 1163 | typescript: 1164 | optional: true 1165 | dependencies: 1166 | '@volar/language-core': 1.10.10 1167 | '@volar/source-map': 1.10.10 1168 | '@vue/compiler-dom': 3.3.8 1169 | '@vue/shared': 3.3.8 1170 | computeds: 0.0.1 1171 | minimatch: 9.0.3 1172 | muggle-string: 0.3.1 1173 | typescript: 5.0.2 1174 | vue-template-compiler: 2.7.15 1175 | dev: true 1176 | 1177 | /@vue/language-core@1.8.5(typescript@5.0.2): 1178 | resolution: {integrity: sha512-DKQNiNQzNV7nrkZQujvjfX73zqKdj2+KoM4YeKl+ft3f+crO3JB4ycPnmgaRMNX/ULJootdQPGHKFRl5cXxwaw==} 1179 | peerDependencies: 1180 | typescript: '*' 1181 | peerDependenciesMeta: 1182 | typescript: 1183 | optional: true 1184 | dependencies: 1185 | '@volar/language-core': 1.9.2 1186 | '@volar/source-map': 1.9.2 1187 | '@vue/compiler-dom': 3.3.8 1188 | '@vue/reactivity': 3.3.8 1189 | '@vue/shared': 3.3.8 1190 | minimatch: 9.0.3 1191 | muggle-string: 0.3.1 1192 | typescript: 5.0.2 1193 | vue-template-compiler: 2.7.15 1194 | dev: true 1195 | 1196 | /@vue/reactivity-transform@3.3.4: 1197 | resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} 1198 | dependencies: 1199 | '@babel/parser': 7.23.3 1200 | '@vue/compiler-core': 3.3.4 1201 | '@vue/shared': 3.3.4 1202 | estree-walker: 2.0.2 1203 | magic-string: 0.30.5 1204 | 1205 | /@vue/reactivity@3.3.4: 1206 | resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} 1207 | dependencies: 1208 | '@vue/shared': 3.3.4 1209 | 1210 | /@vue/reactivity@3.3.8: 1211 | resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==} 1212 | dependencies: 1213 | '@vue/shared': 3.3.8 1214 | dev: true 1215 | 1216 | /@vue/runtime-core@3.3.4: 1217 | resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} 1218 | dependencies: 1219 | '@vue/reactivity': 3.3.4 1220 | '@vue/shared': 3.3.4 1221 | 1222 | /@vue/runtime-dom@3.3.4: 1223 | resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} 1224 | dependencies: 1225 | '@vue/runtime-core': 3.3.4 1226 | '@vue/shared': 3.3.4 1227 | csstype: 3.1.2 1228 | 1229 | /@vue/server-renderer@3.3.4(vue@3.3.4): 1230 | resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} 1231 | peerDependencies: 1232 | vue: 3.3.4 1233 | dependencies: 1234 | '@vue/compiler-ssr': 3.3.4 1235 | '@vue/shared': 3.3.4 1236 | vue: 3.3.4 1237 | 1238 | /@vue/shared@3.3.4: 1239 | resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} 1240 | 1241 | /@vue/shared@3.3.8: 1242 | resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} 1243 | dev: true 1244 | 1245 | /@vue/typescript@1.8.5(typescript@5.0.2): 1246 | resolution: {integrity: sha512-domFBbNr3PEcjGBeB+cmgUM3cI6pJsJezguIUKZ1rphkfIkICyoMjCd3TitoP32yo2KABLiaXcGFzgFfQf6B3w==} 1247 | dependencies: 1248 | '@volar/typescript': 1.9.2 1249 | '@vue/language-core': 1.8.5(typescript@5.0.2) 1250 | transitivePeerDependencies: 1251 | - typescript 1252 | dev: true 1253 | 1254 | /@vueuse/core@10.4.1(vue@3.3.4): 1255 | resolution: {integrity: sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==} 1256 | dependencies: 1257 | '@types/web-bluetooth': 0.0.17 1258 | '@vueuse/metadata': 10.4.1 1259 | '@vueuse/shared': 10.4.1(vue@3.3.4) 1260 | vue-demi: 0.14.6(vue@3.3.4) 1261 | transitivePeerDependencies: 1262 | - '@vue/composition-api' 1263 | - vue 1264 | dev: false 1265 | 1266 | /@vueuse/metadata@10.4.1: 1267 | resolution: {integrity: sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==} 1268 | dev: false 1269 | 1270 | /@vueuse/shared@10.4.1(vue@3.3.4): 1271 | resolution: {integrity: sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==} 1272 | dependencies: 1273 | vue-demi: 0.14.6(vue@3.3.4) 1274 | transitivePeerDependencies: 1275 | - '@vue/composition-api' 1276 | - vue 1277 | dev: false 1278 | 1279 | /abab@2.0.6: 1280 | resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} 1281 | dev: false 1282 | 1283 | /abort-controller@3.0.0: 1284 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 1285 | engines: {node: '>=6.5'} 1286 | dependencies: 1287 | event-target-shim: 5.0.1 1288 | dev: false 1289 | 1290 | /acorn-globals@7.0.1: 1291 | resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} 1292 | dependencies: 1293 | acorn: 8.11.2 1294 | acorn-walk: 8.3.0 1295 | dev: false 1296 | 1297 | /acorn-walk@8.3.0: 1298 | resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} 1299 | engines: {node: '>=0.4.0'} 1300 | dev: false 1301 | 1302 | /acorn@8.11.2: 1303 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 1304 | engines: {node: '>=0.4.0'} 1305 | hasBin: true 1306 | dev: false 1307 | 1308 | /agent-base@6.0.2: 1309 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 1310 | engines: {node: '>= 6.0.0'} 1311 | dependencies: 1312 | debug: 4.3.4 1313 | transitivePeerDependencies: 1314 | - supports-color 1315 | dev: false 1316 | 1317 | /agentkeepalive@4.5.0: 1318 | resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} 1319 | engines: {node: '>= 8.0.0'} 1320 | dependencies: 1321 | humanize-ms: 1.2.1 1322 | dev: false 1323 | 1324 | /ai@2.2.11(react@18.2.0)(solid-js@1.8.5)(svelte@4.2.3)(vue@3.3.4): 1325 | resolution: {integrity: sha512-thZxrZCfXpOFVR2zSwuZYvTlKZF6H1z9z45VCPgm+VOWHvqUWgINCHWjklCHhCkVV+Abc9w7zelQAN3lcGmrgw==} 1326 | engines: {node: '>=14.6'} 1327 | peerDependencies: 1328 | react: ^18.2.0 1329 | solid-js: ^1.7.7 1330 | svelte: ^3.0.0 || ^4.0.0 1331 | vue: ^3.3.4 1332 | peerDependenciesMeta: 1333 | react: 1334 | optional: true 1335 | solid-js: 1336 | optional: true 1337 | svelte: 1338 | optional: true 1339 | vue: 1340 | optional: true 1341 | dependencies: 1342 | eventsource-parser: 1.0.0 1343 | nanoid: 3.3.6 1344 | openai: 4.2.0 1345 | react: 18.2.0 1346 | solid-js: 1.8.5 1347 | solid-swr-store: 0.10.7(solid-js@1.8.5)(swr-store@0.10.6) 1348 | sswr: 2.0.0(svelte@4.2.3) 1349 | svelte: 4.2.3 1350 | swr: 2.2.0(react@18.2.0) 1351 | swr-store: 0.10.6 1352 | swrv: 1.0.4(vue@3.3.4) 1353 | vue: 3.3.4 1354 | transitivePeerDependencies: 1355 | - encoding 1356 | dev: false 1357 | 1358 | /ajv@6.12.6: 1359 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1360 | dependencies: 1361 | fast-deep-equal: 3.1.3 1362 | fast-json-stable-stringify: 2.1.0 1363 | json-schema-traverse: 0.4.1 1364 | uri-js: 4.4.1 1365 | dev: true 1366 | 1367 | /ansi-styles@3.2.1: 1368 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 1369 | engines: {node: '>=4'} 1370 | dependencies: 1371 | color-convert: 1.9.3 1372 | dev: false 1373 | 1374 | /ansi-styles@4.3.0: 1375 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1376 | engines: {node: '>=8'} 1377 | dependencies: 1378 | color-convert: 2.0.1 1379 | dev: false 1380 | 1381 | /ansi-styles@5.2.0: 1382 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 1383 | engines: {node: '>=10'} 1384 | dev: false 1385 | 1386 | /any-promise@1.3.0: 1387 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 1388 | 1389 | /anymatch@3.1.3: 1390 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1391 | engines: {node: '>= 8'} 1392 | dependencies: 1393 | normalize-path: 3.0.0 1394 | picomatch: 2.3.1 1395 | 1396 | /arg@5.0.2: 1397 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 1398 | 1399 | /argparse@1.0.10: 1400 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 1401 | dependencies: 1402 | sprintf-js: 1.0.3 1403 | dev: true 1404 | 1405 | /argparse@2.0.1: 1406 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1407 | 1408 | /aria-query@5.3.0: 1409 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 1410 | dependencies: 1411 | dequal: 2.0.3 1412 | dev: false 1413 | 1414 | /asynckit@0.4.0: 1415 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1416 | dev: false 1417 | 1418 | /autoprefixer@10.4.15(postcss@8.4.29): 1419 | resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} 1420 | engines: {node: ^10 || ^12 || >=14} 1421 | hasBin: true 1422 | peerDependencies: 1423 | postcss: ^8.1.0 1424 | dependencies: 1425 | browserslist: 4.22.1 1426 | caniuse-lite: 1.0.30001562 1427 | fraction.js: 4.3.7 1428 | normalize-range: 0.1.2 1429 | picocolors: 1.0.0 1430 | postcss: 8.4.29 1431 | postcss-value-parser: 4.2.0 1432 | dev: true 1433 | 1434 | /axobject-query@3.2.1: 1435 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} 1436 | dependencies: 1437 | dequal: 2.0.3 1438 | dev: false 1439 | 1440 | /balanced-match@1.0.2: 1441 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1442 | 1443 | /base-64@0.1.0: 1444 | resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} 1445 | dev: false 1446 | 1447 | /binary-extensions@2.2.0: 1448 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 1449 | engines: {node: '>=8'} 1450 | 1451 | /brace-expansion@1.1.11: 1452 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1453 | dependencies: 1454 | balanced-match: 1.0.2 1455 | concat-map: 0.0.1 1456 | 1457 | /brace-expansion@2.0.1: 1458 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1459 | dependencies: 1460 | balanced-match: 1.0.2 1461 | dev: true 1462 | 1463 | /braces@3.0.2: 1464 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1465 | engines: {node: '>=8'} 1466 | dependencies: 1467 | fill-range: 7.0.1 1468 | 1469 | /browserslist@4.22.1: 1470 | resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} 1471 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1472 | hasBin: true 1473 | dependencies: 1474 | caniuse-lite: 1.0.30001562 1475 | electron-to-chromium: 1.4.583 1476 | node-releases: 2.0.13 1477 | update-browserslist-db: 1.0.13(browserslist@4.22.1) 1478 | dev: true 1479 | 1480 | /camelcase-css@2.0.1: 1481 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 1482 | engines: {node: '>= 6'} 1483 | 1484 | /caniuse-lite@1.0.30001562: 1485 | resolution: {integrity: sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==} 1486 | dev: true 1487 | 1488 | /case-anything@2.1.13: 1489 | resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} 1490 | engines: {node: '>=12.13'} 1491 | 1492 | /chalk@2.4.2: 1493 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1494 | engines: {node: '>=4'} 1495 | dependencies: 1496 | ansi-styles: 3.2.1 1497 | escape-string-regexp: 1.0.5 1498 | supports-color: 5.5.0 1499 | dev: false 1500 | 1501 | /chalk@4.1.2: 1502 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1503 | engines: {node: '>=10'} 1504 | dependencies: 1505 | ansi-styles: 4.3.0 1506 | supports-color: 7.2.0 1507 | dev: false 1508 | 1509 | /charenc@0.0.2: 1510 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} 1511 | dev: false 1512 | 1513 | /chokidar@3.5.3: 1514 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1515 | engines: {node: '>= 8.10.0'} 1516 | dependencies: 1517 | anymatch: 3.1.3 1518 | braces: 3.0.2 1519 | glob-parent: 5.1.2 1520 | is-binary-path: 2.1.0 1521 | is-glob: 4.0.3 1522 | normalize-path: 3.0.0 1523 | readdirp: 3.6.0 1524 | optionalDependencies: 1525 | fsevents: 2.3.3 1526 | 1527 | /ci-info@3.9.0: 1528 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 1529 | engines: {node: '>=8'} 1530 | dev: false 1531 | 1532 | /code-red@1.0.4: 1533 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} 1534 | dependencies: 1535 | '@jridgewell/sourcemap-codec': 1.4.15 1536 | '@types/estree': 1.0.5 1537 | acorn: 8.11.2 1538 | estree-walker: 3.0.3 1539 | periscopic: 3.1.0 1540 | dev: false 1541 | 1542 | /color-convert@1.9.3: 1543 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1544 | dependencies: 1545 | color-name: 1.1.3 1546 | dev: false 1547 | 1548 | /color-convert@2.0.1: 1549 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1550 | engines: {node: '>=7.0.0'} 1551 | dependencies: 1552 | color-name: 1.1.4 1553 | dev: false 1554 | 1555 | /color-name@1.1.3: 1556 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1557 | dev: false 1558 | 1559 | /color-name@1.1.4: 1560 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1561 | dev: false 1562 | 1563 | /colors@1.2.5: 1564 | resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} 1565 | engines: {node: '>=0.1.90'} 1566 | dev: true 1567 | 1568 | /combined-stream@1.0.8: 1569 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1570 | engines: {node: '>= 0.8'} 1571 | dependencies: 1572 | delayed-stream: 1.0.0 1573 | dev: false 1574 | 1575 | /commander@4.1.1: 1576 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1577 | engines: {node: '>= 6'} 1578 | 1579 | /commander@9.5.0: 1580 | resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} 1581 | engines: {node: ^12.20.0 || >=14} 1582 | requiresBuild: true 1583 | dev: true 1584 | optional: true 1585 | 1586 | /computeds@0.0.1: 1587 | resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} 1588 | dev: true 1589 | 1590 | /concat-map@0.0.1: 1591 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1592 | 1593 | /crelt@1.0.6: 1594 | resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} 1595 | 1596 | /crypt@0.0.2: 1597 | resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} 1598 | dev: false 1599 | 1600 | /css-tree@2.3.1: 1601 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 1602 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 1603 | dependencies: 1604 | mdn-data: 2.0.30 1605 | source-map-js: 1.0.2 1606 | dev: false 1607 | 1608 | /cssesc@3.0.0: 1609 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1610 | engines: {node: '>=4'} 1611 | hasBin: true 1612 | 1613 | /cssom@0.3.8: 1614 | resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} 1615 | dev: false 1616 | 1617 | /cssom@0.5.0: 1618 | resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} 1619 | dev: false 1620 | 1621 | /cssstyle@2.3.0: 1622 | resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} 1623 | engines: {node: '>=8'} 1624 | dependencies: 1625 | cssom: 0.3.8 1626 | dev: false 1627 | 1628 | /csstype@3.1.2: 1629 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 1630 | 1631 | /dash-get@1.0.2: 1632 | resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} 1633 | 1634 | /data-urls@3.0.2: 1635 | resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} 1636 | engines: {node: '>=12'} 1637 | dependencies: 1638 | abab: 2.0.6 1639 | whatwg-mimetype: 3.0.0 1640 | whatwg-url: 11.0.0 1641 | dev: false 1642 | 1643 | /de-indent@1.0.2: 1644 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} 1645 | dev: true 1646 | 1647 | /debug@4.3.4: 1648 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1649 | engines: {node: '>=6.0'} 1650 | peerDependencies: 1651 | supports-color: '*' 1652 | peerDependenciesMeta: 1653 | supports-color: 1654 | optional: true 1655 | dependencies: 1656 | ms: 2.1.2 1657 | 1658 | /decimal.js@10.4.3: 1659 | resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} 1660 | dev: false 1661 | 1662 | /deepmerge@4.3.1: 1663 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1664 | engines: {node: '>=0.10.0'} 1665 | 1666 | /delayed-stream@1.0.0: 1667 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1668 | engines: {node: '>=0.4.0'} 1669 | dev: false 1670 | 1671 | /dequal@2.0.3: 1672 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 1673 | engines: {node: '>=6'} 1674 | dev: false 1675 | 1676 | /didyoumean@1.2.2: 1677 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 1678 | 1679 | /digest-fetch@1.3.0: 1680 | resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} 1681 | dependencies: 1682 | base-64: 0.1.0 1683 | md5: 2.3.0 1684 | dev: false 1685 | 1686 | /dlv@1.1.3: 1687 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 1688 | 1689 | /domexception@4.0.0: 1690 | resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} 1691 | engines: {node: '>=12'} 1692 | dependencies: 1693 | webidl-conversions: 7.0.0 1694 | dev: false 1695 | 1696 | /electron-to-chromium@1.4.583: 1697 | resolution: {integrity: sha512-93y1gcONABZ7uqYe/JWDVQP/Pj/sQSunF0HVAPdlg/pfBnOyBMLlQUxWvkqcljJg1+W6cjvPuYD+r1Th9Tn8mA==} 1698 | dev: true 1699 | 1700 | /entities@3.0.1: 1701 | resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} 1702 | engines: {node: '>=0.12'} 1703 | 1704 | /entities@4.5.0: 1705 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1706 | engines: {node: '>=0.12'} 1707 | dev: false 1708 | 1709 | /esbuild@0.18.20: 1710 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 1711 | engines: {node: '>=12'} 1712 | hasBin: true 1713 | requiresBuild: true 1714 | optionalDependencies: 1715 | '@esbuild/android-arm': 0.18.20 1716 | '@esbuild/android-arm64': 0.18.20 1717 | '@esbuild/android-x64': 0.18.20 1718 | '@esbuild/darwin-arm64': 0.18.20 1719 | '@esbuild/darwin-x64': 0.18.20 1720 | '@esbuild/freebsd-arm64': 0.18.20 1721 | '@esbuild/freebsd-x64': 0.18.20 1722 | '@esbuild/linux-arm': 0.18.20 1723 | '@esbuild/linux-arm64': 0.18.20 1724 | '@esbuild/linux-ia32': 0.18.20 1725 | '@esbuild/linux-loong64': 0.18.20 1726 | '@esbuild/linux-mips64el': 0.18.20 1727 | '@esbuild/linux-ppc64': 0.18.20 1728 | '@esbuild/linux-riscv64': 0.18.20 1729 | '@esbuild/linux-s390x': 0.18.20 1730 | '@esbuild/linux-x64': 0.18.20 1731 | '@esbuild/netbsd-x64': 0.18.20 1732 | '@esbuild/openbsd-x64': 0.18.20 1733 | '@esbuild/sunos-x64': 0.18.20 1734 | '@esbuild/win32-arm64': 0.18.20 1735 | '@esbuild/win32-ia32': 0.18.20 1736 | '@esbuild/win32-x64': 0.18.20 1737 | dev: true 1738 | 1739 | /escalade@3.1.1: 1740 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1741 | engines: {node: '>=6'} 1742 | dev: true 1743 | 1744 | /escape-string-regexp@1.0.5: 1745 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1746 | engines: {node: '>=0.8.0'} 1747 | dev: false 1748 | 1749 | /escape-string-regexp@2.0.0: 1750 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1751 | engines: {node: '>=8'} 1752 | dev: false 1753 | 1754 | /escape-string-regexp@4.0.0: 1755 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1756 | engines: {node: '>=10'} 1757 | 1758 | /escodegen@2.1.0: 1759 | resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} 1760 | engines: {node: '>=6.0'} 1761 | hasBin: true 1762 | dependencies: 1763 | esprima: 4.0.1 1764 | estraverse: 5.3.0 1765 | esutils: 2.0.3 1766 | optionalDependencies: 1767 | source-map: 0.6.1 1768 | dev: false 1769 | 1770 | /esprima@4.0.1: 1771 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1772 | engines: {node: '>=4'} 1773 | hasBin: true 1774 | dev: false 1775 | 1776 | /estraverse@5.3.0: 1777 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1778 | engines: {node: '>=4.0'} 1779 | dev: false 1780 | 1781 | /estree-walker@2.0.2: 1782 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1783 | 1784 | /estree-walker@3.0.3: 1785 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1786 | dependencies: 1787 | '@types/estree': 1.0.5 1788 | dev: false 1789 | 1790 | /esutils@2.0.3: 1791 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1792 | engines: {node: '>=0.10.0'} 1793 | dev: false 1794 | 1795 | /event-target-shim@5.0.1: 1796 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 1797 | engines: {node: '>=6'} 1798 | dev: false 1799 | 1800 | /eventsource-parser@1.0.0: 1801 | resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==} 1802 | engines: {node: '>=14.18'} 1803 | dev: false 1804 | 1805 | /fast-deep-equal@3.1.3: 1806 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1807 | 1808 | /fast-glob@3.3.2: 1809 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1810 | engines: {node: '>=8.6.0'} 1811 | dependencies: 1812 | '@nodelib/fs.stat': 2.0.5 1813 | '@nodelib/fs.walk': 1.2.8 1814 | glob-parent: 5.1.2 1815 | merge2: 1.4.1 1816 | micromatch: 4.0.5 1817 | 1818 | /fast-json-stable-stringify@2.1.0: 1819 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1820 | dev: true 1821 | 1822 | /fastq@1.15.0: 1823 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1824 | dependencies: 1825 | reusify: 1.0.4 1826 | 1827 | /fill-range@7.0.1: 1828 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1829 | engines: {node: '>=8'} 1830 | dependencies: 1831 | to-regex-range: 5.0.1 1832 | 1833 | /form-data-encoder@1.7.2: 1834 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} 1835 | dev: false 1836 | 1837 | /form-data@4.0.0: 1838 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1839 | engines: {node: '>= 6'} 1840 | dependencies: 1841 | asynckit: 0.4.0 1842 | combined-stream: 1.0.8 1843 | mime-types: 2.1.35 1844 | dev: false 1845 | 1846 | /formdata-node@4.4.1: 1847 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} 1848 | engines: {node: '>= 12.20'} 1849 | dependencies: 1850 | node-domexception: 1.0.0 1851 | web-streams-polyfill: 4.0.0-beta.3 1852 | dev: false 1853 | 1854 | /fraction.js@4.3.7: 1855 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 1856 | dev: true 1857 | 1858 | /fs-extra@7.0.1: 1859 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1860 | engines: {node: '>=6 <7 || >=8'} 1861 | dependencies: 1862 | graceful-fs: 4.2.11 1863 | jsonfile: 4.0.0 1864 | universalify: 0.1.2 1865 | dev: true 1866 | 1867 | /fs.realpath@1.0.0: 1868 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1869 | 1870 | /fsevents@2.3.3: 1871 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1872 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1873 | os: [darwin] 1874 | requiresBuild: true 1875 | optional: true 1876 | 1877 | /function-bind@1.1.2: 1878 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1879 | 1880 | /glob-parent@5.1.2: 1881 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1882 | engines: {node: '>= 6'} 1883 | dependencies: 1884 | is-glob: 4.0.3 1885 | 1886 | /glob-parent@6.0.2: 1887 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1888 | engines: {node: '>=10.13.0'} 1889 | dependencies: 1890 | is-glob: 4.0.3 1891 | 1892 | /glob@7.1.6: 1893 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1894 | dependencies: 1895 | fs.realpath: 1.0.0 1896 | inflight: 1.0.6 1897 | inherits: 2.0.4 1898 | minimatch: 3.1.2 1899 | once: 1.4.0 1900 | path-is-absolute: 1.0.1 1901 | 1902 | /graceful-fs@4.2.11: 1903 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1904 | 1905 | /has-flag@3.0.0: 1906 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1907 | engines: {node: '>=4'} 1908 | dev: false 1909 | 1910 | /has-flag@4.0.0: 1911 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1912 | engines: {node: '>=8'} 1913 | dev: false 1914 | 1915 | /hasown@2.0.0: 1916 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1917 | engines: {node: '>= 0.4'} 1918 | dependencies: 1919 | function-bind: 1.1.2 1920 | 1921 | /he@1.2.0: 1922 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1923 | hasBin: true 1924 | dev: true 1925 | 1926 | /html-encoding-sniffer@3.0.0: 1927 | resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} 1928 | engines: {node: '>=12'} 1929 | dependencies: 1930 | whatwg-encoding: 2.0.0 1931 | dev: false 1932 | 1933 | /http-proxy-agent@5.0.0: 1934 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} 1935 | engines: {node: '>= 6'} 1936 | dependencies: 1937 | '@tootallnate/once': 2.0.0 1938 | agent-base: 6.0.2 1939 | debug: 4.3.4 1940 | transitivePeerDependencies: 1941 | - supports-color 1942 | dev: false 1943 | 1944 | /https-proxy-agent@5.0.1: 1945 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1946 | engines: {node: '>= 6'} 1947 | dependencies: 1948 | agent-base: 6.0.2 1949 | debug: 4.3.4 1950 | transitivePeerDependencies: 1951 | - supports-color 1952 | dev: false 1953 | 1954 | /humanize-ms@1.2.1: 1955 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} 1956 | dependencies: 1957 | ms: 2.1.3 1958 | dev: false 1959 | 1960 | /iconv-lite@0.6.3: 1961 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1962 | engines: {node: '>=0.10.0'} 1963 | dependencies: 1964 | safer-buffer: 2.1.2 1965 | dev: false 1966 | 1967 | /import-lazy@4.0.0: 1968 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} 1969 | engines: {node: '>=8'} 1970 | dev: true 1971 | 1972 | /inflight@1.0.6: 1973 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1974 | dependencies: 1975 | once: 1.4.0 1976 | wrappy: 1.0.2 1977 | 1978 | /inherits@2.0.4: 1979 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1980 | 1981 | /is-binary-path@2.1.0: 1982 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1983 | engines: {node: '>=8'} 1984 | dependencies: 1985 | binary-extensions: 2.2.0 1986 | 1987 | /is-buffer@1.1.6: 1988 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} 1989 | dev: false 1990 | 1991 | /is-core-module@2.13.1: 1992 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1993 | dependencies: 1994 | hasown: 2.0.0 1995 | 1996 | /is-extendable@1.0.1: 1997 | resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} 1998 | engines: {node: '>=0.10.0'} 1999 | dependencies: 2000 | is-plain-object: 2.0.4 2001 | 2002 | /is-extglob@2.1.1: 2003 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2004 | engines: {node: '>=0.10.0'} 2005 | 2006 | /is-glob@4.0.3: 2007 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2008 | engines: {node: '>=0.10.0'} 2009 | dependencies: 2010 | is-extglob: 2.1.1 2011 | 2012 | /is-number@7.0.0: 2013 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2014 | engines: {node: '>=0.12.0'} 2015 | 2016 | /is-plain-object@2.0.4: 2017 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 2018 | engines: {node: '>=0.10.0'} 2019 | dependencies: 2020 | isobject: 3.0.1 2021 | 2022 | /is-potential-custom-element-name@1.0.1: 2023 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 2024 | dev: false 2025 | 2026 | /is-reference@3.0.2: 2027 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} 2028 | dependencies: 2029 | '@types/estree': 1.0.5 2030 | dev: false 2031 | 2032 | /isobject@3.0.1: 2033 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} 2034 | engines: {node: '>=0.10.0'} 2035 | 2036 | /jest-environment-jsdom@29.7.0: 2037 | resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} 2038 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2039 | peerDependencies: 2040 | canvas: ^2.5.0 2041 | peerDependenciesMeta: 2042 | canvas: 2043 | optional: true 2044 | dependencies: 2045 | '@jest/environment': 29.7.0 2046 | '@jest/fake-timers': 29.7.0 2047 | '@jest/types': 29.6.3 2048 | '@types/jsdom': 20.0.1 2049 | '@types/node': 20.9.0 2050 | jest-mock: 29.7.0 2051 | jest-util: 29.7.0 2052 | jsdom: 20.0.3 2053 | transitivePeerDependencies: 2054 | - bufferutil 2055 | - supports-color 2056 | - utf-8-validate 2057 | dev: false 2058 | 2059 | /jest-message-util@29.7.0: 2060 | resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} 2061 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2062 | dependencies: 2063 | '@babel/code-frame': 7.22.13 2064 | '@jest/types': 29.6.3 2065 | '@types/stack-utils': 2.0.3 2066 | chalk: 4.1.2 2067 | graceful-fs: 4.2.11 2068 | micromatch: 4.0.5 2069 | pretty-format: 29.7.0 2070 | slash: 3.0.0 2071 | stack-utils: 2.0.6 2072 | dev: false 2073 | 2074 | /jest-mock@29.7.0: 2075 | resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} 2076 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2077 | dependencies: 2078 | '@jest/types': 29.6.3 2079 | '@types/node': 20.9.0 2080 | jest-util: 29.7.0 2081 | dev: false 2082 | 2083 | /jest-util@29.7.0: 2084 | resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} 2085 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2086 | dependencies: 2087 | '@jest/types': 29.6.3 2088 | '@types/node': 20.9.0 2089 | chalk: 4.1.2 2090 | ci-info: 3.9.0 2091 | graceful-fs: 4.2.11 2092 | picomatch: 2.3.1 2093 | dev: false 2094 | 2095 | /jiti@1.21.0: 2096 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 2097 | hasBin: true 2098 | 2099 | /jju@1.4.0: 2100 | resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} 2101 | dev: true 2102 | 2103 | /js-tokens@4.0.0: 2104 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2105 | dev: false 2106 | 2107 | /jsdom@20.0.3: 2108 | resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} 2109 | engines: {node: '>=14'} 2110 | peerDependencies: 2111 | canvas: ^2.5.0 2112 | peerDependenciesMeta: 2113 | canvas: 2114 | optional: true 2115 | dependencies: 2116 | abab: 2.0.6 2117 | acorn: 8.11.2 2118 | acorn-globals: 7.0.1 2119 | cssom: 0.5.0 2120 | cssstyle: 2.3.0 2121 | data-urls: 3.0.2 2122 | decimal.js: 10.4.3 2123 | domexception: 4.0.0 2124 | escodegen: 2.1.0 2125 | form-data: 4.0.0 2126 | html-encoding-sniffer: 3.0.0 2127 | http-proxy-agent: 5.0.0 2128 | https-proxy-agent: 5.0.1 2129 | is-potential-custom-element-name: 1.0.1 2130 | nwsapi: 2.2.7 2131 | parse5: 7.1.2 2132 | saxes: 6.0.0 2133 | symbol-tree: 3.2.4 2134 | tough-cookie: 4.1.3 2135 | w3c-xmlserializer: 4.0.0 2136 | webidl-conversions: 7.0.0 2137 | whatwg-encoding: 2.0.0 2138 | whatwg-mimetype: 3.0.0 2139 | whatwg-url: 11.0.0 2140 | ws: 8.14.2 2141 | xml-name-validator: 4.0.0 2142 | transitivePeerDependencies: 2143 | - bufferutil 2144 | - supports-color 2145 | - utf-8-validate 2146 | dev: false 2147 | 2148 | /json-schema-traverse@0.4.1: 2149 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2150 | dev: true 2151 | 2152 | /jsonfile@4.0.0: 2153 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 2154 | optionalDependencies: 2155 | graceful-fs: 4.2.11 2156 | dev: true 2157 | 2158 | /kolorist@1.8.0: 2159 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} 2160 | dev: true 2161 | 2162 | /lilconfig@2.1.0: 2163 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 2164 | engines: {node: '>=10'} 2165 | 2166 | /lines-and-columns@1.2.4: 2167 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2168 | 2169 | /linkify-it@4.0.1: 2170 | resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} 2171 | dependencies: 2172 | uc.micro: 1.0.6 2173 | 2174 | /linkifyjs@4.1.2: 2175 | resolution: {integrity: sha512-1elJrH8MwUgr77Rgmx4JgB/nBgISYVoGossH6pAfCeHG+07TblTn6RWKx0MKozEMJU6NCFYHRih9M8ZtV3YZ+Q==} 2176 | dev: false 2177 | 2178 | /locate-character@3.0.0: 2179 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 2180 | dev: false 2181 | 2182 | /lodash.castarray@4.4.0: 2183 | resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} 2184 | dev: true 2185 | 2186 | /lodash.get@4.4.2: 2187 | resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} 2188 | dev: true 2189 | 2190 | /lodash.isequal@4.5.0: 2191 | resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 2192 | dev: true 2193 | 2194 | /lodash.isplainobject@4.0.6: 2195 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} 2196 | dev: true 2197 | 2198 | /lodash.merge@4.6.2: 2199 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2200 | dev: true 2201 | 2202 | /lodash@4.17.21: 2203 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 2204 | dev: true 2205 | 2206 | /loose-envify@1.4.0: 2207 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 2208 | hasBin: true 2209 | dependencies: 2210 | js-tokens: 4.0.0 2211 | dev: false 2212 | 2213 | /lru-cache@6.0.0: 2214 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2215 | engines: {node: '>=10'} 2216 | dependencies: 2217 | yallist: 4.0.0 2218 | dev: true 2219 | 2220 | /lucide-vue-next@0.274.0(vue@3.3.4): 2221 | resolution: {integrity: sha512-n8qfl0mM1meFt5l/CiBdoLAzl47Zq6kZVQYLQH7LYtAOHab5bFbzmT52OeaBH4G+2LMWHiNlenUHaf9M+y3TFA==} 2222 | peerDependencies: 2223 | vue: '>=3.0.1' 2224 | dependencies: 2225 | vue: 3.3.4 2226 | dev: false 2227 | 2228 | /magic-string@0.30.5: 2229 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} 2230 | engines: {node: '>=12'} 2231 | dependencies: 2232 | '@jridgewell/sourcemap-codec': 1.4.15 2233 | 2234 | /make-error@1.3.6: 2235 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 2236 | 2237 | /markdown-it-task-lists@2.1.1: 2238 | resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==} 2239 | dev: false 2240 | 2241 | /markdown-it@13.0.2: 2242 | resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} 2243 | hasBin: true 2244 | dependencies: 2245 | argparse: 2.0.1 2246 | entities: 3.0.1 2247 | linkify-it: 4.0.1 2248 | mdurl: 1.0.1 2249 | uc.micro: 1.0.6 2250 | 2251 | /md5@2.3.0: 2252 | resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} 2253 | dependencies: 2254 | charenc: 0.0.2 2255 | crypt: 0.0.2 2256 | is-buffer: 1.1.6 2257 | dev: false 2258 | 2259 | /mdn-data@2.0.30: 2260 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 2261 | dev: false 2262 | 2263 | /mdurl@1.0.1: 2264 | resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} 2265 | 2266 | /merge2@1.4.1: 2267 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2268 | engines: {node: '>= 8'} 2269 | 2270 | /micromatch@4.0.5: 2271 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2272 | engines: {node: '>=8.6'} 2273 | dependencies: 2274 | braces: 3.0.2 2275 | picomatch: 2.3.1 2276 | 2277 | /mime-db@1.52.0: 2278 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2279 | engines: {node: '>= 0.6'} 2280 | dev: false 2281 | 2282 | /mime-types@2.1.35: 2283 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2284 | engines: {node: '>= 0.6'} 2285 | dependencies: 2286 | mime-db: 1.52.0 2287 | dev: false 2288 | 2289 | /minimatch@3.1.2: 2290 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2291 | dependencies: 2292 | brace-expansion: 1.1.11 2293 | 2294 | /minimatch@9.0.3: 2295 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 2296 | engines: {node: '>=16 || 14 >=14.17'} 2297 | dependencies: 2298 | brace-expansion: 2.0.1 2299 | dev: true 2300 | 2301 | /ms@2.1.2: 2302 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2303 | 2304 | /ms@2.1.3: 2305 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2306 | dev: false 2307 | 2308 | /muggle-string@0.3.1: 2309 | resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} 2310 | dev: true 2311 | 2312 | /mz@2.7.0: 2313 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 2314 | dependencies: 2315 | any-promise: 1.3.0 2316 | object-assign: 4.1.1 2317 | thenify-all: 1.6.0 2318 | 2319 | /nanoid@3.3.6: 2320 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2321 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2322 | hasBin: true 2323 | dev: false 2324 | 2325 | /nanoid@3.3.7: 2326 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 2327 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2328 | hasBin: true 2329 | 2330 | /node-domexception@1.0.0: 2331 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 2332 | engines: {node: '>=10.5.0'} 2333 | dev: false 2334 | 2335 | /node-fetch@2.7.0: 2336 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 2337 | engines: {node: 4.x || >=6.0.0} 2338 | peerDependencies: 2339 | encoding: ^0.1.0 2340 | peerDependenciesMeta: 2341 | encoding: 2342 | optional: true 2343 | dependencies: 2344 | whatwg-url: 5.0.0 2345 | dev: false 2346 | 2347 | /node-releases@2.0.13: 2348 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 2349 | dev: true 2350 | 2351 | /normalize-path@3.0.0: 2352 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2353 | engines: {node: '>=0.10.0'} 2354 | 2355 | /normalize-range@0.1.2: 2356 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 2357 | engines: {node: '>=0.10.0'} 2358 | dev: true 2359 | 2360 | /nwsapi@2.2.7: 2361 | resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} 2362 | dev: false 2363 | 2364 | /object-assign@4.1.1: 2365 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2366 | engines: {node: '>=0.10.0'} 2367 | 2368 | /object-hash@3.0.0: 2369 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 2370 | engines: {node: '>= 6'} 2371 | 2372 | /object.omit@3.0.0: 2373 | resolution: {integrity: sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==} 2374 | engines: {node: '>=0.10.0'} 2375 | dependencies: 2376 | is-extendable: 1.0.1 2377 | 2378 | /object.pick@1.3.0: 2379 | resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} 2380 | engines: {node: '>=0.10.0'} 2381 | dependencies: 2382 | isobject: 3.0.1 2383 | 2384 | /once@1.4.0: 2385 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2386 | dependencies: 2387 | wrappy: 1.0.2 2388 | 2389 | /openai@4.2.0: 2390 | resolution: {integrity: sha512-zfvpO2eITIxIjTG8T6Cek7NB2dMvP/LW0TRUJ4P9E8+qbBNKw00DrtfF64b+fAV2+wUYCVyynT6iSycJ//TtbA==} 2391 | hasBin: true 2392 | dependencies: 2393 | '@types/node': 18.18.9 2394 | '@types/node-fetch': 2.6.9 2395 | abort-controller: 3.0.0 2396 | agentkeepalive: 4.5.0 2397 | digest-fetch: 1.3.0 2398 | form-data-encoder: 1.7.2 2399 | formdata-node: 4.4.1 2400 | node-fetch: 2.7.0 2401 | transitivePeerDependencies: 2402 | - encoding 2403 | dev: false 2404 | 2405 | /orderedmap@2.1.1: 2406 | resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} 2407 | 2408 | /parse5@7.1.2: 2409 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} 2410 | dependencies: 2411 | entities: 4.5.0 2412 | dev: false 2413 | 2414 | /path-browserify@1.0.1: 2415 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 2416 | dev: true 2417 | 2418 | /path-is-absolute@1.0.1: 2419 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2420 | engines: {node: '>=0.10.0'} 2421 | 2422 | /path-parse@1.0.7: 2423 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2424 | 2425 | /periscopic@3.1.0: 2426 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} 2427 | dependencies: 2428 | '@types/estree': 1.0.5 2429 | estree-walker: 3.0.3 2430 | is-reference: 3.0.2 2431 | dev: false 2432 | 2433 | /picocolors@1.0.0: 2434 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2435 | 2436 | /picomatch@2.3.1: 2437 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2438 | engines: {node: '>=8.6'} 2439 | 2440 | /pify@2.3.0: 2441 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2442 | engines: {node: '>=0.10.0'} 2443 | 2444 | /pirates@4.0.6: 2445 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2446 | engines: {node: '>= 6'} 2447 | 2448 | /postcss-import@15.1.0(postcss@8.4.29): 2449 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2450 | engines: {node: '>=14.0.0'} 2451 | peerDependencies: 2452 | postcss: ^8.0.0 2453 | dependencies: 2454 | postcss: 8.4.29 2455 | postcss-value-parser: 4.2.0 2456 | read-cache: 1.0.0 2457 | resolve: 1.22.8 2458 | 2459 | /postcss-js@4.0.1(postcss@8.4.29): 2460 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2461 | engines: {node: ^12 || ^14 || >= 16} 2462 | peerDependencies: 2463 | postcss: ^8.4.21 2464 | dependencies: 2465 | camelcase-css: 2.0.1 2466 | postcss: 8.4.29 2467 | 2468 | /postcss-load-config@4.0.1(postcss@8.4.29): 2469 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2470 | engines: {node: '>= 14'} 2471 | peerDependencies: 2472 | postcss: '>=8.0.9' 2473 | ts-node: '>=9.0.0' 2474 | peerDependenciesMeta: 2475 | postcss: 2476 | optional: true 2477 | ts-node: 2478 | optional: true 2479 | dependencies: 2480 | lilconfig: 2.1.0 2481 | postcss: 8.4.29 2482 | yaml: 2.3.4 2483 | 2484 | /postcss-nested@6.0.1(postcss@8.4.29): 2485 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2486 | engines: {node: '>=12.0'} 2487 | peerDependencies: 2488 | postcss: ^8.2.14 2489 | dependencies: 2490 | postcss: 8.4.29 2491 | postcss-selector-parser: 6.0.13 2492 | 2493 | /postcss-selector-parser@6.0.10: 2494 | resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} 2495 | engines: {node: '>=4'} 2496 | dependencies: 2497 | cssesc: 3.0.0 2498 | util-deprecate: 1.0.2 2499 | dev: true 2500 | 2501 | /postcss-selector-parser@6.0.13: 2502 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2503 | engines: {node: '>=4'} 2504 | dependencies: 2505 | cssesc: 3.0.0 2506 | util-deprecate: 1.0.2 2507 | 2508 | /postcss-value-parser@4.2.0: 2509 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2510 | 2511 | /postcss@8.4.29: 2512 | resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} 2513 | engines: {node: ^10 || ^12 || >=14} 2514 | dependencies: 2515 | nanoid: 3.3.7 2516 | picocolors: 1.0.0 2517 | source-map-js: 1.0.2 2518 | 2519 | /pretty-format@29.7.0: 2520 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 2521 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2522 | dependencies: 2523 | '@jest/schemas': 29.6.3 2524 | ansi-styles: 5.2.0 2525 | react-is: 18.2.0 2526 | dev: false 2527 | 2528 | /prosemirror-changeset@2.2.1: 2529 | resolution: {integrity: sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==} 2530 | dependencies: 2531 | prosemirror-transform: 1.8.0 2532 | 2533 | /prosemirror-collab@1.3.1: 2534 | resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} 2535 | dependencies: 2536 | prosemirror-state: 1.4.3 2537 | 2538 | /prosemirror-commands@1.5.2: 2539 | resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} 2540 | dependencies: 2541 | prosemirror-model: 1.19.3 2542 | prosemirror-state: 1.4.3 2543 | prosemirror-transform: 1.8.0 2544 | 2545 | /prosemirror-dropcursor@1.8.1: 2546 | resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} 2547 | dependencies: 2548 | prosemirror-state: 1.4.3 2549 | prosemirror-transform: 1.8.0 2550 | prosemirror-view: 1.32.4 2551 | 2552 | /prosemirror-gapcursor@1.3.2: 2553 | resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} 2554 | dependencies: 2555 | prosemirror-keymap: 1.2.2 2556 | prosemirror-model: 1.19.3 2557 | prosemirror-state: 1.4.3 2558 | prosemirror-view: 1.32.4 2559 | 2560 | /prosemirror-history@1.3.2: 2561 | resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==} 2562 | dependencies: 2563 | prosemirror-state: 1.4.3 2564 | prosemirror-transform: 1.8.0 2565 | prosemirror-view: 1.32.4 2566 | rope-sequence: 1.3.4 2567 | 2568 | /prosemirror-inputrules@1.2.1: 2569 | resolution: {integrity: sha512-3LrWJX1+ULRh5SZvbIQlwZafOXqp1XuV21MGBu/i5xsztd+9VD15x6OtN6mdqSFI7/8Y77gYUbQ6vwwJ4mr6QQ==} 2570 | dependencies: 2571 | prosemirror-state: 1.4.3 2572 | prosemirror-transform: 1.8.0 2573 | 2574 | /prosemirror-keymap@1.2.2: 2575 | resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} 2576 | dependencies: 2577 | prosemirror-state: 1.4.3 2578 | w3c-keyname: 2.2.8 2579 | 2580 | /prosemirror-markdown@1.11.2: 2581 | resolution: {integrity: sha512-Eu5g4WPiCdqDTGhdSsG9N6ZjACQRYrsAkrF9KYfdMaCmjIApH75aVncsWYOJvEk2i1B3i8jZppv3J/tnuHGiUQ==} 2582 | dependencies: 2583 | markdown-it: 13.0.2 2584 | prosemirror-model: 1.19.3 2585 | 2586 | /prosemirror-menu@1.2.4: 2587 | resolution: {integrity: sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==} 2588 | dependencies: 2589 | crelt: 1.0.6 2590 | prosemirror-commands: 1.5.2 2591 | prosemirror-history: 1.3.2 2592 | prosemirror-state: 1.4.3 2593 | 2594 | /prosemirror-model@1.19.3: 2595 | resolution: {integrity: sha512-tgSnwN7BS7/UM0sSARcW+IQryx2vODKX4MI7xpqY2X+iaepJdKBPc7I4aACIsDV/LTaTjt12Z56MhDr9LsyuZQ==} 2596 | dependencies: 2597 | orderedmap: 2.1.1 2598 | 2599 | /prosemirror-schema-basic@1.2.2: 2600 | resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} 2601 | dependencies: 2602 | prosemirror-model: 1.19.3 2603 | 2604 | /prosemirror-schema-list@1.3.0: 2605 | resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} 2606 | dependencies: 2607 | prosemirror-model: 1.19.3 2608 | prosemirror-state: 1.4.3 2609 | prosemirror-transform: 1.8.0 2610 | 2611 | /prosemirror-state@1.4.3: 2612 | resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} 2613 | dependencies: 2614 | prosemirror-model: 1.19.3 2615 | prosemirror-transform: 1.8.0 2616 | prosemirror-view: 1.32.4 2617 | 2618 | /prosemirror-tables@1.3.4: 2619 | resolution: {integrity: sha512-z6uLSQ1BLC3rgbGwZmpfb+xkdvD7W/UOsURDfognZFYaTtc0gsk7u/t71Yijp2eLflVpffMk6X0u0+u+MMDvIw==} 2620 | dependencies: 2621 | prosemirror-keymap: 1.2.2 2622 | prosemirror-model: 1.19.3 2623 | prosemirror-state: 1.4.3 2624 | prosemirror-transform: 1.8.0 2625 | prosemirror-view: 1.32.4 2626 | 2627 | /prosemirror-trailing-node@2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.4): 2628 | resolution: {integrity: sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==} 2629 | peerDependencies: 2630 | prosemirror-model: ^1.19.0 2631 | prosemirror-state: ^1.4.2 2632 | prosemirror-view: ^1.31.2 2633 | dependencies: 2634 | '@remirror/core-constants': 2.0.2 2635 | '@remirror/core-helpers': 3.0.0 2636 | escape-string-regexp: 4.0.0 2637 | prosemirror-model: 1.19.3 2638 | prosemirror-state: 1.4.3 2639 | prosemirror-view: 1.32.4 2640 | 2641 | /prosemirror-transform@1.8.0: 2642 | resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==} 2643 | dependencies: 2644 | prosemirror-model: 1.19.3 2645 | 2646 | /prosemirror-view@1.32.4: 2647 | resolution: {integrity: sha512-WoT+ZYePp0WQvp5coABAysheZg9WttW3TSEUNgsfDQXmVOJlnjkbFbXicKPvWFLiC0ZjKt1ykbyoVKqhVnCiSQ==} 2648 | dependencies: 2649 | prosemirror-model: 1.19.3 2650 | prosemirror-state: 1.4.3 2651 | prosemirror-transform: 1.8.0 2652 | 2653 | /psl@1.9.0: 2654 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} 2655 | dev: false 2656 | 2657 | /punycode@2.3.1: 2658 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2659 | engines: {node: '>=6'} 2660 | 2661 | /querystringify@2.2.0: 2662 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 2663 | dev: false 2664 | 2665 | /queue-microtask@1.2.3: 2666 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2667 | 2668 | /react-dom@18.2.0(react@18.2.0): 2669 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 2670 | peerDependencies: 2671 | react: ^18.2.0 2672 | dependencies: 2673 | loose-envify: 1.4.0 2674 | react: 18.2.0 2675 | scheduler: 0.23.0 2676 | dev: false 2677 | 2678 | /react-is@18.2.0: 2679 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 2680 | dev: false 2681 | 2682 | /react@18.2.0: 2683 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 2684 | engines: {node: '>=0.10.0'} 2685 | dependencies: 2686 | loose-envify: 1.4.0 2687 | dev: false 2688 | 2689 | /read-cache@1.0.0: 2690 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2691 | dependencies: 2692 | pify: 2.3.0 2693 | 2694 | /readdirp@3.6.0: 2695 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2696 | engines: {node: '>=8.10.0'} 2697 | dependencies: 2698 | picomatch: 2.3.1 2699 | 2700 | /requires-port@1.0.0: 2701 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} 2702 | dev: false 2703 | 2704 | /resolve@1.19.0: 2705 | resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} 2706 | dependencies: 2707 | is-core-module: 2.13.1 2708 | path-parse: 1.0.7 2709 | dev: true 2710 | 2711 | /resolve@1.22.8: 2712 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2713 | hasBin: true 2714 | dependencies: 2715 | is-core-module: 2.13.1 2716 | path-parse: 1.0.7 2717 | supports-preserve-symlinks-flag: 1.0.0 2718 | 2719 | /reusify@1.0.4: 2720 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2721 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2722 | 2723 | /rollup@3.29.4: 2724 | resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} 2725 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2726 | hasBin: true 2727 | optionalDependencies: 2728 | fsevents: 2.3.3 2729 | dev: true 2730 | 2731 | /rope-sequence@1.3.4: 2732 | resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} 2733 | 2734 | /run-parallel@1.2.0: 2735 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2736 | dependencies: 2737 | queue-microtask: 1.2.3 2738 | 2739 | /safer-buffer@2.1.2: 2740 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2741 | dev: false 2742 | 2743 | /saxes@6.0.0: 2744 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} 2745 | engines: {node: '>=v12.22.7'} 2746 | dependencies: 2747 | xmlchars: 2.2.0 2748 | dev: false 2749 | 2750 | /scheduler@0.23.0: 2751 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 2752 | dependencies: 2753 | loose-envify: 1.4.0 2754 | dev: false 2755 | 2756 | /semver@7.5.4: 2757 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2758 | engines: {node: '>=10'} 2759 | hasBin: true 2760 | dependencies: 2761 | lru-cache: 6.0.0 2762 | dev: true 2763 | 2764 | /seroval@0.12.3: 2765 | resolution: {integrity: sha512-5WDeMpv7rmEylsypRj1iwRVHE/QLsMLiZ+9savlNNQEVdgGia1iRMb7qyaAagY0wu/7+QTe6d2wldk/lgaLb6g==} 2766 | engines: {node: '>=10'} 2767 | dev: false 2768 | 2769 | /slash@3.0.0: 2770 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2771 | engines: {node: '>=8'} 2772 | dev: false 2773 | 2774 | /solid-js@1.8.5: 2775 | resolution: {integrity: sha512-xvtJvzJzWbsn35oKFhW9kNwaxG1Z/YLMsDp4tLVcYZTMPzvzQ8vEZuyDQ6nt7xDArVgZJ7TUFrJUwrui/oq53A==} 2776 | dependencies: 2777 | csstype: 3.1.2 2778 | seroval: 0.12.3 2779 | dev: false 2780 | 2781 | /solid-swr-store@0.10.7(solid-js@1.8.5)(swr-store@0.10.6): 2782 | resolution: {integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==} 2783 | engines: {node: '>=10'} 2784 | peerDependencies: 2785 | solid-js: ^1.2 2786 | swr-store: ^0.10 2787 | dependencies: 2788 | solid-js: 1.8.5 2789 | swr-store: 0.10.6 2790 | dev: false 2791 | 2792 | /sonner@1.2.0(react-dom@18.2.0)(react@18.2.0): 2793 | resolution: {integrity: sha512-4bIPKrhF+Z4yEC4EZvNBswcVzMrUhztOQXqyIoiZqiqN1TT39FeK+TgRsQidvvztnYgOn4+S3LdAsri61c7ATA==} 2794 | peerDependencies: 2795 | react: ^18.0.0 2796 | react-dom: ^18.0.0 2797 | dependencies: 2798 | react: 18.2.0 2799 | react-dom: 18.2.0(react@18.2.0) 2800 | dev: false 2801 | 2802 | /source-map-js@1.0.2: 2803 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2804 | engines: {node: '>=0.10.0'} 2805 | 2806 | /source-map@0.6.1: 2807 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2808 | engines: {node: '>=0.10.0'} 2809 | 2810 | /sprintf-js@1.0.3: 2811 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 2812 | dev: true 2813 | 2814 | /sswr@2.0.0(svelte@4.2.3): 2815 | resolution: {integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==} 2816 | peerDependencies: 2817 | svelte: ^4.0.0 2818 | dependencies: 2819 | svelte: 4.2.3 2820 | swrev: 4.0.0 2821 | dev: false 2822 | 2823 | /stack-utils@2.0.6: 2824 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 2825 | engines: {node: '>=10'} 2826 | dependencies: 2827 | escape-string-regexp: 2.0.0 2828 | dev: false 2829 | 2830 | /string-argv@0.3.2: 2831 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 2832 | engines: {node: '>=0.6.19'} 2833 | dev: true 2834 | 2835 | /strip-json-comments@3.1.1: 2836 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2837 | engines: {node: '>=8'} 2838 | dev: true 2839 | 2840 | /sucrase@3.34.0: 2841 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 2842 | engines: {node: '>=8'} 2843 | hasBin: true 2844 | dependencies: 2845 | '@jridgewell/gen-mapping': 0.3.3 2846 | commander: 4.1.1 2847 | glob: 7.1.6 2848 | lines-and-columns: 1.2.4 2849 | mz: 2.7.0 2850 | pirates: 4.0.6 2851 | ts-interface-checker: 0.1.13 2852 | 2853 | /supports-color@5.5.0: 2854 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2855 | engines: {node: '>=4'} 2856 | dependencies: 2857 | has-flag: 3.0.0 2858 | dev: false 2859 | 2860 | /supports-color@7.2.0: 2861 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2862 | engines: {node: '>=8'} 2863 | dependencies: 2864 | has-flag: 4.0.0 2865 | dev: false 2866 | 2867 | /supports-preserve-symlinks-flag@1.0.0: 2868 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2869 | engines: {node: '>= 0.4'} 2870 | 2871 | /svelte@4.2.3: 2872 | resolution: {integrity: sha512-sqmG9KC6uUc7fb3ZuWoxXvqk6MI9Uu4ABA1M0fYDgTlFYu1k02xp96u6U9+yJZiVm84m9zge7rrA/BNZdFpOKw==} 2873 | engines: {node: '>=16'} 2874 | dependencies: 2875 | '@ampproject/remapping': 2.2.1 2876 | '@jridgewell/sourcemap-codec': 1.4.15 2877 | '@jridgewell/trace-mapping': 0.3.20 2878 | acorn: 8.11.2 2879 | aria-query: 5.3.0 2880 | axobject-query: 3.2.1 2881 | code-red: 1.0.4 2882 | css-tree: 2.3.1 2883 | estree-walker: 3.0.3 2884 | is-reference: 3.0.2 2885 | locate-character: 3.0.0 2886 | magic-string: 0.30.5 2887 | periscopic: 3.1.0 2888 | dev: false 2889 | 2890 | /swr-store@0.10.6: 2891 | resolution: {integrity: sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw==} 2892 | engines: {node: '>=10'} 2893 | dependencies: 2894 | dequal: 2.0.3 2895 | dev: false 2896 | 2897 | /swr@2.2.0(react@18.2.0): 2898 | resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} 2899 | peerDependencies: 2900 | react: ^16.11.0 || ^17.0.0 || ^18.0.0 2901 | dependencies: 2902 | react: 18.2.0 2903 | use-sync-external-store: 1.2.0(react@18.2.0) 2904 | dev: false 2905 | 2906 | /swrev@4.0.0: 2907 | resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} 2908 | dev: false 2909 | 2910 | /swrv@1.0.4(vue@3.3.4): 2911 | resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} 2912 | peerDependencies: 2913 | vue: '>=3.2.26 < 4' 2914 | dependencies: 2915 | vue: 3.3.4 2916 | dev: false 2917 | 2918 | /symbol-tree@3.2.4: 2919 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 2920 | dev: false 2921 | 2922 | /tailwindcss-animate@1.0.7(tailwindcss@3.3.3): 2923 | resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} 2924 | peerDependencies: 2925 | tailwindcss: '>=3.0.0 || insiders' 2926 | dependencies: 2927 | tailwindcss: 3.3.3 2928 | dev: false 2929 | 2930 | /tailwindcss@3.3.3: 2931 | resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} 2932 | engines: {node: '>=14.0.0'} 2933 | hasBin: true 2934 | dependencies: 2935 | '@alloc/quick-lru': 5.2.0 2936 | arg: 5.0.2 2937 | chokidar: 3.5.3 2938 | didyoumean: 1.2.2 2939 | dlv: 1.1.3 2940 | fast-glob: 3.3.2 2941 | glob-parent: 6.0.2 2942 | is-glob: 4.0.3 2943 | jiti: 1.21.0 2944 | lilconfig: 2.1.0 2945 | micromatch: 4.0.5 2946 | normalize-path: 3.0.0 2947 | object-hash: 3.0.0 2948 | picocolors: 1.0.0 2949 | postcss: 8.4.29 2950 | postcss-import: 15.1.0(postcss@8.4.29) 2951 | postcss-js: 4.0.1(postcss@8.4.29) 2952 | postcss-load-config: 4.0.1(postcss@8.4.29) 2953 | postcss-nested: 6.0.1(postcss@8.4.29) 2954 | postcss-selector-parser: 6.0.13 2955 | resolve: 1.22.8 2956 | sucrase: 3.34.0 2957 | transitivePeerDependencies: 2958 | - ts-node 2959 | 2960 | /thenify-all@1.6.0: 2961 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2962 | engines: {node: '>=0.8'} 2963 | dependencies: 2964 | thenify: 3.3.1 2965 | 2966 | /thenify@3.3.1: 2967 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2968 | dependencies: 2969 | any-promise: 1.3.0 2970 | 2971 | /throttle-debounce@3.0.1: 2972 | resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} 2973 | engines: {node: '>=10'} 2974 | 2975 | /tippy.js@6.3.7: 2976 | resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} 2977 | dependencies: 2978 | '@popperjs/core': 2.11.8 2979 | dev: false 2980 | 2981 | /tiptap-markdown@0.8.2(@tiptap/core@2.1.12): 2982 | resolution: {integrity: sha512-RyfpnH475+FYVh1fCiWF9+wBvA8T6X3PqxZR1MApEewxkoQ5kREQFiVwjZiez9qUQk/Bxu3RerFSJot65V6cbQ==} 2983 | peerDependencies: 2984 | '@tiptap/core': ^2.0.3 2985 | dependencies: 2986 | '@tiptap/core': 2.1.12(@tiptap/pm@2.1.7) 2987 | '@types/markdown-it': 12.2.3 2988 | markdown-it: 13.0.2 2989 | markdown-it-task-lists: 2.1.1 2990 | prosemirror-markdown: 1.11.2 2991 | dev: false 2992 | 2993 | /to-fast-properties@2.0.0: 2994 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2995 | engines: {node: '>=4'} 2996 | 2997 | /to-regex-range@5.0.1: 2998 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2999 | engines: {node: '>=8.0'} 3000 | dependencies: 3001 | is-number: 7.0.0 3002 | 3003 | /tough-cookie@4.1.3: 3004 | resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} 3005 | engines: {node: '>=6'} 3006 | dependencies: 3007 | psl: 1.9.0 3008 | punycode: 2.3.1 3009 | universalify: 0.2.0 3010 | url-parse: 1.5.10 3011 | dev: false 3012 | 3013 | /tr46@0.0.3: 3014 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 3015 | dev: false 3016 | 3017 | /tr46@3.0.0: 3018 | resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} 3019 | engines: {node: '>=12'} 3020 | dependencies: 3021 | punycode: 2.3.1 3022 | dev: false 3023 | 3024 | /ts-interface-checker@0.1.13: 3025 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 3026 | 3027 | /type-detect@4.0.8: 3028 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 3029 | engines: {node: '>=4'} 3030 | dev: false 3031 | 3032 | /type-fest@2.19.0: 3033 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 3034 | engines: {node: '>=12.20'} 3035 | 3036 | /typescript@5.0.2: 3037 | resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} 3038 | engines: {node: '>=12.20'} 3039 | hasBin: true 3040 | dev: true 3041 | 3042 | /typescript@5.0.4: 3043 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} 3044 | engines: {node: '>=12.20'} 3045 | hasBin: true 3046 | dev: true 3047 | 3048 | /uc.micro@1.0.6: 3049 | resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} 3050 | 3051 | /undici-types@5.26.5: 3052 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 3053 | dev: false 3054 | 3055 | /undici@5.27.0: 3056 | resolution: {integrity: sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg==} 3057 | engines: {node: '>=14.0'} 3058 | dependencies: 3059 | '@fastify/busboy': 2.1.0 3060 | dev: false 3061 | 3062 | /universalify@0.1.2: 3063 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 3064 | engines: {node: '>= 4.0.0'} 3065 | dev: true 3066 | 3067 | /universalify@0.2.0: 3068 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} 3069 | engines: {node: '>= 4.0.0'} 3070 | dev: false 3071 | 3072 | /update-browserslist-db@1.0.13(browserslist@4.22.1): 3073 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 3074 | hasBin: true 3075 | peerDependencies: 3076 | browserslist: '>= 4.21.0' 3077 | dependencies: 3078 | browserslist: 4.22.1 3079 | escalade: 3.1.1 3080 | picocolors: 1.0.0 3081 | dev: true 3082 | 3083 | /uri-js@4.4.1: 3084 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3085 | dependencies: 3086 | punycode: 2.3.1 3087 | dev: true 3088 | 3089 | /url-parse@1.5.10: 3090 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} 3091 | dependencies: 3092 | querystringify: 2.2.0 3093 | requires-port: 1.0.0 3094 | dev: false 3095 | 3096 | /use-sync-external-store@1.2.0(react@18.2.0): 3097 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 3098 | peerDependencies: 3099 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 3100 | dependencies: 3101 | react: 18.2.0 3102 | dev: false 3103 | 3104 | /util-deprecate@1.0.2: 3105 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 3106 | 3107 | /validator@13.11.0: 3108 | resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} 3109 | engines: {node: '>= 0.10'} 3110 | dev: true 3111 | 3112 | /vite-plugin-dts@3.5.3(typescript@5.0.2)(vite@4.4.5): 3113 | resolution: {integrity: sha512-h94j/+SR1PhLR9jnEtcjZILagE2QZBAV8V1y3T2Ujcet1VI0Et4dZSU1W8fbnp6obB7B3/b8hArqdi2/9HuH+w==} 3114 | engines: {node: ^14.18.0 || >=16.0.0} 3115 | peerDependencies: 3116 | typescript: '*' 3117 | vite: '*' 3118 | peerDependenciesMeta: 3119 | vite: 3120 | optional: true 3121 | dependencies: 3122 | '@microsoft/api-extractor': 7.38.3 3123 | '@rollup/pluginutils': 5.0.5 3124 | '@vue/language-core': 1.8.22(typescript@5.0.2) 3125 | debug: 4.3.4 3126 | kolorist: 1.8.0 3127 | typescript: 5.0.2 3128 | vite: 4.4.5 3129 | vue-tsc: 1.8.22(typescript@5.0.2) 3130 | transitivePeerDependencies: 3131 | - '@types/node' 3132 | - rollup 3133 | - supports-color 3134 | dev: true 3135 | 3136 | /vite@4.4.5: 3137 | resolution: {integrity: sha512-4m5kEtAWHYr0O1Fu7rZp64CfO1PsRGZlD3TAB32UmQlpd7qg15VF7ROqGN5CyqN7HFuwr7ICNM2+fDWRqFEKaA==} 3138 | engines: {node: ^14.18.0 || >=16.0.0} 3139 | hasBin: true 3140 | peerDependencies: 3141 | '@types/node': '>= 14' 3142 | less: '*' 3143 | lightningcss: ^1.21.0 3144 | sass: '*' 3145 | stylus: '*' 3146 | sugarss: '*' 3147 | terser: ^5.4.0 3148 | peerDependenciesMeta: 3149 | '@types/node': 3150 | optional: true 3151 | less: 3152 | optional: true 3153 | lightningcss: 3154 | optional: true 3155 | sass: 3156 | optional: true 3157 | stylus: 3158 | optional: true 3159 | sugarss: 3160 | optional: true 3161 | terser: 3162 | optional: true 3163 | dependencies: 3164 | esbuild: 0.18.20 3165 | postcss: 8.4.29 3166 | rollup: 3.29.4 3167 | optionalDependencies: 3168 | fsevents: 2.3.3 3169 | dev: true 3170 | 3171 | /vue-demi@0.14.6(vue@3.3.4): 3172 | resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} 3173 | engines: {node: '>=12'} 3174 | hasBin: true 3175 | requiresBuild: true 3176 | peerDependencies: 3177 | '@vue/composition-api': ^1.0.0-rc.1 3178 | vue: ^3.0.0-0 || ^2.6.0 3179 | peerDependenciesMeta: 3180 | '@vue/composition-api': 3181 | optional: true 3182 | dependencies: 3183 | vue: 3.3.4 3184 | dev: false 3185 | 3186 | /vue-template-compiler@2.7.15: 3187 | resolution: {integrity: sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==} 3188 | dependencies: 3189 | de-indent: 1.0.2 3190 | he: 1.2.0 3191 | dev: true 3192 | 3193 | /vue-tsc@1.8.22(typescript@5.0.2): 3194 | resolution: {integrity: sha512-j9P4kHtW6eEE08aS5McFZE/ivmipXy0JzrnTgbomfABMaVKx37kNBw//irL3+LlE3kOo63XpnRigyPC3w7+z+A==} 3195 | hasBin: true 3196 | peerDependencies: 3197 | typescript: '*' 3198 | dependencies: 3199 | '@volar/typescript': 1.10.10 3200 | '@vue/language-core': 1.8.22(typescript@5.0.2) 3201 | semver: 7.5.4 3202 | typescript: 5.0.2 3203 | dev: true 3204 | 3205 | /vue-tsc@1.8.5(typescript@5.0.2): 3206 | resolution: {integrity: sha512-Jr8PTghJIwp69MFsEZoADDcv2l+lXA8juyN/5AYA5zxyZNvIHjSbgKgkYIYc1qnihrOyIG1VOnfk4ZE0jqn8bw==} 3207 | hasBin: true 3208 | peerDependencies: 3209 | typescript: '*' 3210 | dependencies: 3211 | '@vue/language-core': 1.8.5(typescript@5.0.2) 3212 | '@vue/typescript': 1.8.5(typescript@5.0.2) 3213 | semver: 7.5.4 3214 | typescript: 5.0.2 3215 | dev: true 3216 | 3217 | /vue@3.3.4: 3218 | resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} 3219 | dependencies: 3220 | '@vue/compiler-dom': 3.3.4 3221 | '@vue/compiler-sfc': 3.3.4 3222 | '@vue/runtime-dom': 3.3.4 3223 | '@vue/server-renderer': 3.3.4(vue@3.3.4) 3224 | '@vue/shared': 3.3.4 3225 | 3226 | /w3c-keyname@2.2.8: 3227 | resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} 3228 | 3229 | /w3c-xmlserializer@4.0.0: 3230 | resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} 3231 | engines: {node: '>=14'} 3232 | dependencies: 3233 | xml-name-validator: 4.0.0 3234 | dev: false 3235 | 3236 | /web-streams-polyfill@4.0.0-beta.3: 3237 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} 3238 | engines: {node: '>= 14'} 3239 | dev: false 3240 | 3241 | /webidl-conversions@3.0.1: 3242 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 3243 | dev: false 3244 | 3245 | /webidl-conversions@7.0.0: 3246 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 3247 | engines: {node: '>=12'} 3248 | dev: false 3249 | 3250 | /whatwg-encoding@2.0.0: 3251 | resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} 3252 | engines: {node: '>=12'} 3253 | dependencies: 3254 | iconv-lite: 0.6.3 3255 | dev: false 3256 | 3257 | /whatwg-mimetype@3.0.0: 3258 | resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} 3259 | engines: {node: '>=12'} 3260 | dev: false 3261 | 3262 | /whatwg-url@11.0.0: 3263 | resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} 3264 | engines: {node: '>=12'} 3265 | dependencies: 3266 | tr46: 3.0.0 3267 | webidl-conversions: 7.0.0 3268 | dev: false 3269 | 3270 | /whatwg-url@5.0.0: 3271 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 3272 | dependencies: 3273 | tr46: 0.0.3 3274 | webidl-conversions: 3.0.1 3275 | dev: false 3276 | 3277 | /wrappy@1.0.2: 3278 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3279 | 3280 | /ws@8.14.2: 3281 | resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} 3282 | engines: {node: '>=10.0.0'} 3283 | peerDependencies: 3284 | bufferutil: ^4.0.1 3285 | utf-8-validate: '>=5.0.2' 3286 | peerDependenciesMeta: 3287 | bufferutil: 3288 | optional: true 3289 | utf-8-validate: 3290 | optional: true 3291 | dev: false 3292 | 3293 | /xml-name-validator@4.0.0: 3294 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 3295 | engines: {node: '>=12'} 3296 | dev: false 3297 | 3298 | /xmlchars@2.2.0: 3299 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 3300 | dev: false 3301 | 3302 | /yallist@4.0.0: 3303 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3304 | dev: true 3305 | 3306 | /yaml@2.3.4: 3307 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 3308 | engines: {node: '>= 14'} 3309 | 3310 | /z-schema@5.0.5: 3311 | resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} 3312 | engines: {node: '>=8.0.0'} 3313 | hasBin: true 3314 | dependencies: 3315 | lodash.get: 4.4.2 3316 | lodash.isequal: 4.5.0 3317 | validator: 13.11.0 3318 | optionalDependencies: 3319 | commander: 9.5.0 3320 | dev: true 3321 | --------------------------------------------------------------------------------