├── .npmignore
├── .gitignore
├── src
├── types
│ └── icons.d.ts
├── utils
│ └── makeFragment.ts
├── index.css
└── index.ts
├── .editorconfig
├── dist
├── utils
│ └── makeFragment.d.ts
├── paragraph.umd.js
├── index.d.ts
└── paragraph.mjs
├── .github
└── workflows
│ └── npm-publish.yml
├── tsconfig.json
├── vite.config.js
├── LICENSE
├── package.json
├── README.md
└── yarn.lock
/.npmignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | src/
3 | vite.config.js
4 | yarn.lock
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/*
2 | npm-debug.log
3 | .idea/
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/src/types/icons.d.ts:
--------------------------------------------------------------------------------
1 | // temporary fix for the missing types
2 | declare module "@codexteam/icons" {
3 | export const IconText: string;
4 | }
5 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = false
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 | quote_type = single
11 |
--------------------------------------------------------------------------------
/dist/utils/makeFragment.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Create a DocumentFragment and fill it with HTML from a string
3 | *
4 | * @param {string} htmlString - A string of valid HTML
5 | * @returns {DocumentFragment}
6 | */
7 | export default function makeFragment(htmlString: string): DocumentFragment;
8 |
--------------------------------------------------------------------------------
/.github/workflows/npm-publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish package to NPM
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 |
8 | jobs:
9 | publish-and-notify:
10 | uses: codex-team/github-workflows/.github/workflows/npm-publish-and-notify-reusable.yml@main
11 | secrets:
12 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
13 | CODEX_BOT_NOTIFY_EDITORJS_PUBLIC_CHAT: ${{ secrets.CODEX_BOT_NOTIFY_EDITORJS_PUBLIC_CHAT }}
14 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2016",
4 | "module": "commonjs",
5 | "lib": ["dom", "es2015"],
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "strict": true,
9 | "skipLibCheck": true,
10 | "outDir": "./dist",
11 | "declaration": true,
12 | "declarationDir": "./dist/types",
13 | "isolatedModules": true
14 | },
15 | "include": ["src"],
16 | "exclude": ["node_modules", "**/*.spec.ts"]
17 | }
18 |
--------------------------------------------------------------------------------
/src/utils/makeFragment.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Create a DocumentFragment and fill it with HTML from a string
3 | *
4 | * @param {string} htmlString - A string of valid HTML
5 | * @returns {DocumentFragment}
6 | */
7 | export default function makeFragment(htmlString: string): DocumentFragment {
8 | const tempDiv = document.createElement('div');
9 |
10 | tempDiv.innerHTML = htmlString.trim();
11 |
12 | const fragment = document.createDocumentFragment();
13 |
14 | fragment.append(...Array.from(tempDiv.childNodes));
15 |
16 | return fragment;
17 | }
18 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";
3 | import * as pkg from "./package.json";
4 | import dts from "vite-plugin-dts";
5 |
6 | const NODE_ENV = process.argv.mode || "development";
7 | const VERSION = pkg.version;
8 |
9 | export default {
10 | build: {
11 | copyPublicDir: false,
12 | lib: {
13 | entry: path.resolve(__dirname, "src", "index.ts"),
14 | name: "Paragraph",
15 | fileName: "paragraph",
16 | },
17 | },
18 | define: {
19 | NODE_ENV: JSON.stringify(NODE_ENV),
20 | VERSION: JSON.stringify(VERSION),
21 | },
22 |
23 | plugins: [cssInjectedByJsPlugin(), dts()],
24 | };
25 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | .ce-paragraph {
2 | line-height: 1.6em;
3 | outline: none;
4 | }
5 |
6 | /**
7 | * Normally paragraph placeholder is shown only for the focused block (thanks to "data-placeholder-active").
8 | *
9 | * But there is a special case when the paragraph is the only block in the empty editor.
10 | * When editor autofocus=false, there will be no focus. We need to show the placeholder anyway.
11 | */
12 | .ce-block:only-of-type .ce-paragraph[data-placeholder-active]:empty::before,
13 | .ce-block:only-of-type .ce-paragraph[data-placeholder-active][data-empty="true"]::before {
14 | content: attr(data-placeholder-active);
15 | }
16 |
17 | .ce-paragraph p:first-of-type{
18 | margin-top: 0;
19 | }
20 |
21 | .ce-paragraph p:last-of-type{
22 | margin-bottom: 0;
23 | }
24 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 CodeX
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@editorjs/paragraph",
3 | "version": "2.11.7",
4 | "keywords": [
5 | "codex editor",
6 | "paragraph",
7 | "editor.js",
8 | "editorjs"
9 | ],
10 | "description": "Paragraph Tool for Editor.js",
11 | "license": "MIT",
12 | "repository": "https://github.com/editor-js/paragraph",
13 | "files": [
14 | "dist"
15 | ],
16 | "main": "./dist/paragraph.umd.js",
17 | "module": "./dist/paragraph.mjs",
18 | "exports": {
19 | ".": {
20 | "import": {
21 | "types": "./dist/index.d.ts",
22 | "default": "./dist/paragraph.mjs"
23 | },
24 | "require": {
25 | "types": "./dist/index.d.ts",
26 | "default": "./dist/paragraph.umd.js"
27 | }
28 | }
29 | },
30 | "types": "./dist/index.d.ts",
31 | "scripts": {
32 | "dev": "vite",
33 | "build": "vite build",
34 | "preview": "vite preview"
35 | },
36 | "author": {
37 | "name": "CodeX",
38 | "email": "team@codex.so"
39 | },
40 | "devDependencies": {
41 | "@editorjs/editorjs": "^2.29.1",
42 | "typescript": "^5.4.5",
43 | "vite": "^4.4.11",
44 | "vite-plugin-css-injected-by-js": "^3.3.0",
45 | "vite-plugin-dts": "^3.9.1"
46 | },
47 | "dependencies": {
48 | "@codexteam/icons": "^0.0.4"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # Paragraph Tool for Editor.js
4 |
5 | Basic text Tool for the [Editor.js](https://ifmo.su/editor).
6 |
7 | ## Installation
8 |
9 | Get the package
10 |
11 | ```shell
12 | yarn add @editorjs/paragraph
13 | ```
14 |
15 | Include module at your application
16 |
17 | ```javascript
18 | import Paragraph from '@editorjs/paragraph';
19 | ```
20 |
21 | ## Usage
22 |
23 | The Paragraph tool is included at editor.js by default. So you don't need to connect it manually.
24 | If you want to connect your customized version of this tool, do not forget to use the [`defaultBlock`](https://editorjs.io/configuration#change-the-default-block)
25 | option of the editor config.
26 |
27 | Add a new Tool to the `tools` property of the Editor.js initial config.
28 |
29 | ```javascript
30 | var editor = new EditorJS({
31 | ...
32 |
33 | tools: {
34 | ...
35 | paragraph: {
36 | class: Paragraph,
37 | inlineToolbar: true,
38 | },
39 | }
40 |
41 | ...
42 | });
43 | ```
44 |
45 | ## Config Params
46 |
47 | The Paragraph Tool supports these configuration parameters:
48 |
49 | | Field | Type | Description |
50 | | ----- | -------- | ------------------ |
51 | | placeholder | `string` | The placeholder. Will be shown only in the first paragraph when the whole editor is empty. |
52 | | preserveBlank | `boolean` | (default: `false`) Whether or not to keep blank paragraphs when saving editor data |
53 |
54 | ## Output data
55 |
56 | | Field | Type | Description |
57 | | ------ | -------- | ---------------- |
58 | | text | `string` | paragraph's text |
59 |
60 |
61 | ```json
62 | {
63 | "type" : "paragraph",
64 | "data" : {
65 | "text" : "Check out our projects on a GitHub page.",
66 | }
67 | }
68 | ```
69 |
70 |
--------------------------------------------------------------------------------
/dist/paragraph.umd.js:
--------------------------------------------------------------------------------
1 | (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".ce-paragraph{line-height:1.6em;outline:none}.ce-block:only-of-type .ce-paragraph[data-placeholder-active]:empty:before,.ce-block:only-of-type .ce-paragraph[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active)}.ce-paragraph p:first-of-type{margin-top:0}.ce-paragraph p:last-of-type{margin-bottom:0}")),document.head.appendChild(e)}}catch(a){console.error("vite-plugin-css-injected-by-js",a)}})();
2 | (function(i,n){typeof exports=="object"&&typeof module<"u"?module.exports=n():typeof define=="function"&&define.amd?define(n):(i=typeof globalThis<"u"?globalThis:i||self,i.Paragraph=n())})(this,function(){"use strict";const i="",n='';function s(a){const e=document.createElement("div");e.innerHTML=a.trim();const t=document.createDocumentFragment();return t.append(...Array.from(e.childNodes)),t}/**
3 | * Base Paragraph Block for the Editor.js.
4 | * Represents a regular text block
5 | *
6 | * @author CodeX (team@codex.so)
7 | * @copyright CodeX 2018
8 | * @license The MIT License (MIT)
9 | */class r{static get DEFAULT_PLACEHOLDER(){return""}constructor({data:e,config:t,api:o,readOnly:l}){this.api=o,this.readOnly=l,this._CSS={block:this.api.styles.block,wrapper:"ce-paragraph"},this.readOnly||(this.onKeyUp=this.onKeyUp.bind(this)),this._placeholder=t.placeholder?t.placeholder:r.DEFAULT_PLACEHOLDER,this._data=e??{},this._element=null,this._preserveBlank=t.preserveBlank??!1}onKeyUp(e){if(e.code!=="Backspace"&&e.code!=="Delete"||!this._element)return;const{textContent:t}=this._element;t===""&&(this._element.innerHTML="")}drawView(){const e=document.createElement("DIV");return e.classList.add(this._CSS.wrapper,this._CSS.block),e.contentEditable="false",e.dataset.placeholderActive=this.api.i18n.t(this._placeholder),this._data.text&&(e.innerHTML=this._data.text),this.readOnly||(e.contentEditable="true",e.addEventListener("keyup",this.onKeyUp)),e}render(){return this._element=this.drawView(),this._element}merge(e){if(!this._element)return;this._data.text+=e.text;const t=s(e.text);this._element.appendChild(t),this._element.normalize()}validate(e){return!(e.text.trim()===""&&!this._preserveBlank)}save(e){return{text:e.innerHTML}}onPaste(e){const t={text:e.detail.data.innerHTML};this._data=t,window.requestAnimationFrame(()=>{this._element&&(this._element.innerHTML=this._data.text||"")})}static get conversionConfig(){return{export:"text",import:"text"}}static get sanitize(){return{text:{br:!0}}}static get isReadOnlySupported(){return!0}static get pasteConfig(){return{tags:["P"]}}static get toolbox(){return{icon:n,title:"Text"}}}return r});
10 |
--------------------------------------------------------------------------------
/dist/index.d.ts:
--------------------------------------------------------------------------------
1 | import { API, ConversionConfig, HTMLPasteEvent, PasteConfig, SanitizerConfig, ToolConfig, ToolboxConfig } from '@editorjs/editorjs';
2 |
3 | /**
4 | * Base Paragraph Block for the Editor.js.
5 | * Represents a regular text block
6 | *
7 | * @author CodeX (team@codex.so)
8 | * @copyright CodeX 2018
9 | * @license The MIT License (MIT)
10 | */
11 | /**
12 | * @typedef {object} ParagraphConfig
13 | * @property {string} placeholder - placeholder for the empty paragraph
14 | * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data
15 | */
16 | export interface ParagraphConfig extends ToolConfig {
17 | /**
18 | * Placeholder for the empty paragraph
19 | */
20 | placeholder?: string;
21 | /**
22 | * Whether or not to keep blank paragraphs when saving editor data
23 | */
24 | preserveBlank?: boolean;
25 | }
26 | /**
27 | * @typedef {object} ParagraphData
28 | * @description Tool's input and output data format
29 | * @property {string} text — Paragraph's content. Can include HTML tags:
30 | */
31 | export interface ParagraphData {
32 | /**
33 | * Paragraph's content
34 | */
35 | text: string;
36 | }
37 | /**
38 | * @typedef {object} ParagraphParams
39 | * @description Constructor params for the Paragraph tool, use to pass initial data and settings
40 | * @property {ParagraphData} data - Preload data for the paragraph.
41 | * @property {ParagraphConfig} config - The configuration for the paragraph.
42 | * @property {API} api - The Editor.js API.
43 | * @property {boolean} readOnly - Is paragraph is read-only.
44 | */
45 | interface ParagraphParams {
46 | /**
47 | * Initial data for the paragraph
48 | */
49 | data: ParagraphData;
50 | /**
51 | * Paragraph tool configuration
52 | */
53 | config: ParagraphConfig;
54 | /**
55 | * Editor.js API
56 | */
57 | api: API;
58 | /**
59 | * Is paragraph read-only.
60 | */
61 | readOnly: boolean;
62 | }
63 | export default class Paragraph {
64 | /**
65 | * Default placeholder for Paragraph Tool
66 | *
67 | * @returns {string}
68 | * @class
69 | */
70 | static get DEFAULT_PLACEHOLDER(): string;
71 | /**
72 | * The Editor.js API
73 | */
74 | api: API;
75 | /**
76 | * Is Paragraph Tool read-only
77 | */
78 | readOnly: boolean;
79 | /**
80 | * Paragraph Tool's CSS classes
81 | */
82 | private _CSS;
83 | /**
84 | * Placeholder for Paragraph Tool
85 | */
86 | private _placeholder;
87 | /**
88 | * Paragraph's data
89 | */
90 | private _data;
91 | /**
92 | * Paragraph's main Element
93 | */
94 | private _element;
95 | /**
96 | * Whether or not to keep blank paragraphs when saving editor data
97 | */
98 | private _preserveBlank;
99 | /**
100 | * Render plugin`s main Element and fill it with saved data
101 | *
102 | * @param {object} params - constructor params
103 | * @param {ParagraphData} params.data - previously saved data
104 | * @param {ParagraphConfig} params.config - user config for Tool
105 | * @param {object} params.api - editor.js api
106 | * @param {boolean} readOnly - read only mode flag
107 | */
108 | constructor({ data, config, api, readOnly }: ParagraphParams);
109 | /**
110 | * Check if text content is empty and set empty string to inner html.
111 | * We need this because some browsers (e.g. Safari) insert
into empty contenteditanle elements
112 | *
113 | * @param {KeyboardEvent} e - key up event
114 | */
115 | onKeyUp(e: KeyboardEvent): void;
116 | /**
117 | * Create Tool's view
118 | *
119 | * @returns {HTMLDivElement}
120 | * @private
121 | */
122 | drawView(): HTMLDivElement;
123 | /**
124 | * Return Tool's view
125 | *
126 | * @returns {HTMLDivElement}
127 | */
128 | render(): HTMLDivElement;
129 | /**
130 | * Method that specified how to merge two Text blocks.
131 | * Called by Editor.js by backspace at the beginning of the Block
132 | *
133 | * @param {ParagraphData} data
134 | * @public
135 | */
136 | merge(data: ParagraphData): void;
137 | /**
138 | * Validate Paragraph block data:
139 | * - check for emptiness
140 | *
141 | * @param {ParagraphData} savedData — data received after saving
142 | * @returns {boolean} false if saved data is not correct, otherwise true
143 | * @public
144 | */
145 | validate(savedData: ParagraphData): boolean;
146 | /**
147 | * Extract Tool's data from the view
148 | *
149 | * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view
150 | * @returns {ParagraphData} - saved data
151 | * @public
152 | */
153 | save(toolsContent: HTMLDivElement): ParagraphData;
154 | /**
155 | * On paste callback fired from Editor.
156 | *
157 | * @param {HTMLPasteEvent} event - event with pasted data
158 | */
159 | onPaste(event: HTMLPasteEvent): void;
160 | /**
161 | * Enable Conversion Toolbar. Paragraph can be converted to/from other tools
162 | * @returns {ConversionConfig}
163 | */
164 | static get conversionConfig(): ConversionConfig;
165 | /**
166 | * Sanitizer rules
167 | * @returns {SanitizerConfig} - Edtior.js sanitizer config
168 | */
169 | static get sanitize(): SanitizerConfig;
170 | /**
171 | * Returns true to notify the core that read-only mode is supported
172 | *
173 | * @returns {boolean}
174 | */
175 | static get isReadOnlySupported(): boolean;
176 | /**
177 | * Used by Editor paste handling API.
178 | * Provides configuration to handle P tags.
179 | *
180 | * @returns {PasteConfig} - Paragraph Paste Setting
181 | */
182 | static get pasteConfig(): PasteConfig;
183 | /**
184 | * Icon and title for displaying at the Toolbox
185 | *
186 | * @returns {ToolboxConfig} - Paragraph Toolbox Setting
187 | */
188 | static get toolbox(): ToolboxConfig;
189 | }
190 | export {};
191 |
--------------------------------------------------------------------------------
/dist/paragraph.mjs:
--------------------------------------------------------------------------------
1 | (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".ce-paragraph{line-height:1.6em;outline:none}.ce-block:only-of-type .ce-paragraph[data-placeholder-active]:empty:before,.ce-block:only-of-type .ce-paragraph[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active)}.ce-paragraph p:first-of-type{margin-top:0}.ce-paragraph p:last-of-type{margin-bottom:0}")),document.head.appendChild(e)}}catch(a){console.error("vite-plugin-css-injected-by-js",a)}})();
2 | const a = '';
3 | function l(r) {
4 | const t = document.createElement("div");
5 | t.innerHTML = r.trim();
6 | const e = document.createDocumentFragment();
7 | return e.append(...Array.from(t.childNodes)), e;
8 | }
9 | /**
10 | * Base Paragraph Block for the Editor.js.
11 | * Represents a regular text block
12 | *
13 | * @author CodeX (team@codex.so)
14 | * @copyright CodeX 2018
15 | * @license The MIT License (MIT)
16 | */
17 | class n {
18 | /**
19 | * Default placeholder for Paragraph Tool
20 | *
21 | * @returns {string}
22 | * @class
23 | */
24 | static get DEFAULT_PLACEHOLDER() {
25 | return "";
26 | }
27 | /**
28 | * Render plugin`s main Element and fill it with saved data
29 | *
30 | * @param {object} params - constructor params
31 | * @param {ParagraphData} params.data - previously saved data
32 | * @param {ParagraphConfig} params.config - user config for Tool
33 | * @param {object} params.api - editor.js api
34 | * @param {boolean} readOnly - read only mode flag
35 | */
36 | constructor({ data: t, config: e, api: i, readOnly: s }) {
37 | this.api = i, this.readOnly = s, this._CSS = {
38 | block: this.api.styles.block,
39 | wrapper: "ce-paragraph"
40 | }, this.readOnly || (this.onKeyUp = this.onKeyUp.bind(this)), this._placeholder = e.placeholder ? e.placeholder : n.DEFAULT_PLACEHOLDER, this._data = t ?? {}, this._element = null, this._preserveBlank = e.preserveBlank ?? !1;
41 | }
42 | /**
43 | * Check if text content is empty and set empty string to inner html.
44 | * We need this because some browsers (e.g. Safari) insert
into empty contenteditanle elements
45 | *
46 | * @param {KeyboardEvent} e - key up event
47 | */
48 | onKeyUp(t) {
49 | if (t.code !== "Backspace" && t.code !== "Delete" || !this._element)
50 | return;
51 | const { textContent: e } = this._element;
52 | e === "" && (this._element.innerHTML = "");
53 | }
54 | /**
55 | * Create Tool's view
56 | *
57 | * @returns {HTMLDivElement}
58 | * @private
59 | */
60 | drawView() {
61 | const t = document.createElement("DIV");
62 | return t.classList.add(this._CSS.wrapper, this._CSS.block), t.contentEditable = "false", t.dataset.placeholderActive = this.api.i18n.t(this._placeholder), this._data.text && (t.innerHTML = this._data.text), this.readOnly || (t.contentEditable = "true", t.addEventListener("keyup", this.onKeyUp)), t;
63 | }
64 | /**
65 | * Return Tool's view
66 | *
67 | * @returns {HTMLDivElement}
68 | */
69 | render() {
70 | return this._element = this.drawView(), this._element;
71 | }
72 | /**
73 | * Method that specified how to merge two Text blocks.
74 | * Called by Editor.js by backspace at the beginning of the Block
75 | *
76 | * @param {ParagraphData} data
77 | * @public
78 | */
79 | merge(t) {
80 | if (!this._element)
81 | return;
82 | this._data.text += t.text;
83 | const e = l(t.text);
84 | this._element.appendChild(e), this._element.normalize();
85 | }
86 | /**
87 | * Validate Paragraph block data:
88 | * - check for emptiness
89 | *
90 | * @param {ParagraphData} savedData — data received after saving
91 | * @returns {boolean} false if saved data is not correct, otherwise true
92 | * @public
93 | */
94 | validate(t) {
95 | return !(t.text.trim() === "" && !this._preserveBlank);
96 | }
97 | /**
98 | * Extract Tool's data from the view
99 | *
100 | * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view
101 | * @returns {ParagraphData} - saved data
102 | * @public
103 | */
104 | save(t) {
105 | return {
106 | text: t.innerHTML
107 | };
108 | }
109 | /**
110 | * On paste callback fired from Editor.
111 | *
112 | * @param {HTMLPasteEvent} event - event with pasted data
113 | */
114 | onPaste(t) {
115 | const e = {
116 | text: t.detail.data.innerHTML
117 | };
118 | this._data = e, window.requestAnimationFrame(() => {
119 | this._element && (this._element.innerHTML = this._data.text || "");
120 | });
121 | }
122 | /**
123 | * Enable Conversion Toolbar. Paragraph can be converted to/from other tools
124 | * @returns {ConversionConfig}
125 | */
126 | static get conversionConfig() {
127 | return {
128 | export: "text",
129 | // to convert Paragraph to other block, use 'text' property of saved data
130 | import: "text"
131 | // to covert other block's exported string to Paragraph, fill 'text' property of tool data
132 | };
133 | }
134 | /**
135 | * Sanitizer rules
136 | * @returns {SanitizerConfig} - Edtior.js sanitizer config
137 | */
138 | static get sanitize() {
139 | return {
140 | text: {
141 | br: !0
142 | }
143 | };
144 | }
145 | /**
146 | * Returns true to notify the core that read-only mode is supported
147 | *
148 | * @returns {boolean}
149 | */
150 | static get isReadOnlySupported() {
151 | return !0;
152 | }
153 | /**
154 | * Used by Editor paste handling API.
155 | * Provides configuration to handle P tags.
156 | *
157 | * @returns {PasteConfig} - Paragraph Paste Setting
158 | */
159 | static get pasteConfig() {
160 | return {
161 | tags: ["P"]
162 | };
163 | }
164 | /**
165 | * Icon and title for displaying at the Toolbox
166 | *
167 | * @returns {ToolboxConfig} - Paragraph Toolbox Setting
168 | */
169 | static get toolbox() {
170 | return {
171 | icon: a,
172 | title: "Text"
173 | };
174 | }
175 | }
176 | export {
177 | n as default
178 | };
179 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Build styles
3 | */
4 | import './index.css';
5 |
6 | import { IconText } from '@codexteam/icons';
7 | import makeFragment from './utils/makeFragment';
8 |
9 | import type {
10 | API,
11 | ConversionConfig,
12 | HTMLPasteEvent,
13 | PasteConfig,
14 | SanitizerConfig,
15 | ToolConfig,
16 | ToolboxConfig,
17 | } from '@editorjs/editorjs';
18 |
19 | /**
20 | * Base Paragraph Block for the Editor.js.
21 | * Represents a regular text block
22 | *
23 | * @author CodeX (team@codex.so)
24 | * @copyright CodeX 2018
25 | * @license The MIT License (MIT)
26 | */
27 |
28 | /**
29 | * @typedef {object} ParagraphConfig
30 | * @property {string} placeholder - placeholder for the empty paragraph
31 | * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data
32 | */
33 | export interface ParagraphConfig extends ToolConfig {
34 | /**
35 | * Placeholder for the empty paragraph
36 | */
37 | placeholder?: string;
38 |
39 | /**
40 | * Whether or not to keep blank paragraphs when saving editor data
41 | */
42 | preserveBlank?: boolean;
43 | }
44 |
45 | /**
46 | * @typedef {object} ParagraphData
47 | * @description Tool's input and output data format
48 | * @property {string} text — Paragraph's content. Can include HTML tags:
49 | */
50 | export interface ParagraphData {
51 | /**
52 | * Paragraph's content
53 | */
54 | text: string;
55 | }
56 |
57 | /**
58 | * @typedef {object} ParagraphParams
59 | * @description Constructor params for the Paragraph tool, use to pass initial data and settings
60 | * @property {ParagraphData} data - Preload data for the paragraph.
61 | * @property {ParagraphConfig} config - The configuration for the paragraph.
62 | * @property {API} api - The Editor.js API.
63 | * @property {boolean} readOnly - Is paragraph is read-only.
64 | */
65 | interface ParagraphParams {
66 | /**
67 | * Initial data for the paragraph
68 | */
69 | data: ParagraphData;
70 | /**
71 | * Paragraph tool configuration
72 | */
73 | config: ParagraphConfig;
74 | /**
75 | * Editor.js API
76 | */
77 | api: API;
78 | /**
79 | * Is paragraph read-only.
80 | */
81 | readOnly: boolean;
82 | }
83 |
84 | /**
85 | * @typedef {object} ParagraphCSS
86 | * @description CSS classes names
87 | * @property {string} block - Editor.js CSS Class for block
88 | * @property {string} wrapper - Paragraph CSS Class
89 | */
90 | interface ParagraphCSS {
91 | /**
92 | * Editor.js CSS Class for block
93 | */
94 | block: string;
95 | /**
96 | * Paragraph CSS Class
97 | */
98 | wrapper: string;
99 | }
100 |
101 | export default class Paragraph {
102 | /**
103 | * Default placeholder for Paragraph Tool
104 | *
105 | * @returns {string}
106 | * @class
107 | */
108 | static get DEFAULT_PLACEHOLDER() {
109 | return '';
110 | }
111 |
112 | /**
113 | * The Editor.js API
114 | */
115 | api: API;
116 |
117 | /**
118 | * Is Paragraph Tool read-only
119 | */
120 | readOnly: boolean;
121 |
122 | /**
123 | * Paragraph Tool's CSS classes
124 | */
125 | private _CSS: ParagraphCSS;
126 |
127 | /**
128 | * Placeholder for Paragraph Tool
129 | */
130 | private _placeholder: string;
131 |
132 | /**
133 | * Paragraph's data
134 | */
135 | private _data: ParagraphData;
136 |
137 | /**
138 | * Paragraph's main Element
139 | */
140 | private _element: HTMLDivElement | null;
141 |
142 | /**
143 | * Whether or not to keep blank paragraphs when saving editor data
144 | */
145 | private _preserveBlank: boolean;
146 |
147 | /**
148 | * Render plugin`s main Element and fill it with saved data
149 | *
150 | * @param {object} params - constructor params
151 | * @param {ParagraphData} params.data - previously saved data
152 | * @param {ParagraphConfig} params.config - user config for Tool
153 | * @param {object} params.api - editor.js api
154 | * @param {boolean} readOnly - read only mode flag
155 | */
156 | constructor({ data, config, api, readOnly }: ParagraphParams) {
157 | this.api = api;
158 | this.readOnly = readOnly;
159 |
160 | this._CSS = {
161 | block: this.api.styles.block,
162 | wrapper: 'ce-paragraph',
163 | };
164 |
165 | if (!this.readOnly) {
166 | this.onKeyUp = this.onKeyUp.bind(this);
167 | }
168 |
169 | /**
170 | * Placeholder for paragraph if it is first Block
171 | *
172 | * @type {string}
173 | */
174 | this._placeholder = config.placeholder
175 | ? config.placeholder
176 | : Paragraph.DEFAULT_PLACEHOLDER;
177 | this._data = data ?? {};
178 | this._element = null;
179 | this._preserveBlank = config.preserveBlank ?? false;
180 | }
181 |
182 | /**
183 | * Check if text content is empty and set empty string to inner html.
184 | * We need this because some browsers (e.g. Safari) insert
into empty contenteditanle elements
185 | *
186 | * @param {KeyboardEvent} e - key up event
187 | */
188 | onKeyUp(e: KeyboardEvent): void {
189 | if (e.code !== 'Backspace' && e.code !== 'Delete') {
190 | return;
191 | }
192 |
193 | if (!this._element) {
194 | return;
195 | }
196 |
197 | const { textContent } = this._element;
198 |
199 | if (textContent === '') {
200 | this._element.innerHTML = '';
201 | }
202 | }
203 |
204 | /**
205 | * Create Tool's view
206 | *
207 | * @returns {HTMLDivElement}
208 | * @private
209 | */
210 | drawView(): HTMLDivElement {
211 | const div = document.createElement('DIV');
212 |
213 | div.classList.add(this._CSS.wrapper, this._CSS.block);
214 | div.contentEditable = 'false';
215 | div.dataset.placeholderActive = this.api.i18n.t(this._placeholder);
216 |
217 | if (this._data.text) {
218 | div.innerHTML = this._data.text;
219 | }
220 |
221 | if (!this.readOnly) {
222 | div.contentEditable = 'true';
223 | div.addEventListener('keyup', this.onKeyUp);
224 | }
225 |
226 | /**
227 | * bypass property 'align' required in html div element
228 | */
229 | return div as HTMLDivElement;
230 | }
231 |
232 | /**
233 | * Return Tool's view
234 | *
235 | * @returns {HTMLDivElement}
236 | */
237 | render(): HTMLDivElement {
238 | this._element = this.drawView();
239 |
240 | return this._element;
241 | }
242 |
243 | /**
244 | * Method that specified how to merge two Text blocks.
245 | * Called by Editor.js by backspace at the beginning of the Block
246 | *
247 | * @param {ParagraphData} data
248 | * @public
249 | */
250 | merge(data: ParagraphData): void {
251 | if (!this._element) {
252 | return;
253 | }
254 |
255 | this._data.text += data.text;
256 |
257 | /**
258 | * We use appendChild instead of innerHTML to keep the links of the existing nodes
259 | * (for example, shadow caret)
260 | */
261 | const fragment = makeFragment(data.text);
262 |
263 | this._element.appendChild(fragment);
264 |
265 | this._element.normalize();
266 | }
267 |
268 | /**
269 | * Validate Paragraph block data:
270 | * - check for emptiness
271 | *
272 | * @param {ParagraphData} savedData — data received after saving
273 | * @returns {boolean} false if saved data is not correct, otherwise true
274 | * @public
275 | */
276 | validate(savedData: ParagraphData): boolean {
277 | if (savedData.text.trim() === '' && !this._preserveBlank) {
278 | return false;
279 | }
280 |
281 | return true;
282 | }
283 |
284 | /**
285 | * Extract Tool's data from the view
286 | *
287 | * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view
288 | * @returns {ParagraphData} - saved data
289 | * @public
290 | */
291 | save(toolsContent: HTMLDivElement): ParagraphData {
292 | return {
293 | text: toolsContent.innerHTML,
294 | };
295 | }
296 |
297 | /**
298 | * On paste callback fired from Editor.
299 | *
300 | * @param {HTMLPasteEvent} event - event with pasted data
301 | */
302 | onPaste(event: HTMLPasteEvent): void {
303 | const data = {
304 | text: event.detail.data.innerHTML,
305 | };
306 |
307 | this._data = data;
308 |
309 | /**
310 | * We use requestAnimationFrame for performance purposes
311 | */
312 | window.requestAnimationFrame(() => {
313 | if (!this._element) {
314 | return;
315 | }
316 | this._element.innerHTML = this._data.text || '';
317 | });
318 | }
319 |
320 | /**
321 | * Enable Conversion Toolbar. Paragraph can be converted to/from other tools
322 | * @returns {ConversionConfig}
323 | */
324 | static get conversionConfig(): ConversionConfig {
325 | return {
326 | export: 'text', // to convert Paragraph to other block, use 'text' property of saved data
327 | import: 'text', // to covert other block's exported string to Paragraph, fill 'text' property of tool data
328 | };
329 | }
330 |
331 | /**
332 | * Sanitizer rules
333 | * @returns {SanitizerConfig} - Edtior.js sanitizer config
334 | */
335 | static get sanitize(): SanitizerConfig {
336 | return {
337 | text: {
338 | br: true,
339 | },
340 | };
341 | }
342 |
343 | /**
344 | * Returns true to notify the core that read-only mode is supported
345 | *
346 | * @returns {boolean}
347 | */
348 | static get isReadOnlySupported(): boolean {
349 | return true;
350 | }
351 |
352 | /**
353 | * Used by Editor paste handling API.
354 | * Provides configuration to handle P tags.
355 | *
356 | * @returns {PasteConfig} - Paragraph Paste Setting
357 | */
358 | static get pasteConfig(): PasteConfig {
359 | return {
360 | tags: ['P'],
361 | };
362 | }
363 |
364 | /**
365 | * Icon and title for displaying at the Toolbox
366 | *
367 | * @returns {ToolboxConfig} - Paragraph Toolbox Setting
368 | */
369 | static get toolbox(): ToolboxConfig {
370 | return {
371 | icon: IconText,
372 | title: 'Text',
373 | };
374 | }
375 | }
376 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/parser@^7.24.4":
6 | version "7.24.6"
7 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz"
8 | integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==
9 |
10 | "@codexteam/icons@^0.0.4":
11 | version "0.0.4"
12 | resolved "https://registry.npmjs.org/@codexteam/icons/-/icons-0.0.4.tgz"
13 | integrity sha512-V8N/TY2TGyas4wLrPIFq7bcow68b3gu8DfDt1+rrHPtXxcexadKauRJL6eQgfG7Z0LCrN4boLRawR4S9gjIh/Q==
14 |
15 | "@editorjs/editorjs@^2.29.1":
16 | version "2.29.1"
17 | resolved "https://registry.npmjs.org/@editorjs/editorjs/-/editorjs-2.29.1.tgz"
18 | integrity sha512-WRT2pCfikMsvySQJqpCU21LfTZaPuxUWsDO8aFGrPx4MKzOR9D+Ur4mNb3jq0FXx2EMqvIWfTyFixJxtjGHTyQ==
19 |
20 | "@esbuild/android-arm64@0.18.20":
21 | version "0.18.20"
22 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
23 | integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
24 |
25 | "@esbuild/android-arm@0.18.20":
26 | version "0.18.20"
27 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
28 | integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
29 |
30 | "@esbuild/android-x64@0.18.20":
31 | version "0.18.20"
32 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
33 | integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
34 |
35 | "@esbuild/darwin-arm64@0.18.20":
36 | version "0.18.20"
37 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
38 | integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
39 |
40 | "@esbuild/darwin-x64@0.18.20":
41 | version "0.18.20"
42 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
43 | integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
44 |
45 | "@esbuild/freebsd-arm64@0.18.20":
46 | version "0.18.20"
47 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
48 | integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
49 |
50 | "@esbuild/freebsd-x64@0.18.20":
51 | version "0.18.20"
52 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
53 | integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
54 |
55 | "@esbuild/linux-arm64@0.18.20":
56 | version "0.18.20"
57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
58 | integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
59 |
60 | "@esbuild/linux-arm@0.18.20":
61 | version "0.18.20"
62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
63 | integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
64 |
65 | "@esbuild/linux-ia32@0.18.20":
66 | version "0.18.20"
67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
68 | integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
69 |
70 | "@esbuild/linux-loong64@0.18.20":
71 | version "0.18.20"
72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
73 | integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
74 |
75 | "@esbuild/linux-mips64el@0.18.20":
76 | version "0.18.20"
77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
78 | integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
79 |
80 | "@esbuild/linux-ppc64@0.18.20":
81 | version "0.18.20"
82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
83 | integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
84 |
85 | "@esbuild/linux-riscv64@0.18.20":
86 | version "0.18.20"
87 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
88 | integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
89 |
90 | "@esbuild/linux-s390x@0.18.20":
91 | version "0.18.20"
92 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
93 | integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
94 |
95 | "@esbuild/linux-x64@0.18.20":
96 | version "0.18.20"
97 | resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz"
98 | integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
99 |
100 | "@esbuild/netbsd-x64@0.18.20":
101 | version "0.18.20"
102 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
103 | integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
104 |
105 | "@esbuild/openbsd-x64@0.18.20":
106 | version "0.18.20"
107 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
108 | integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
109 |
110 | "@esbuild/sunos-x64@0.18.20":
111 | version "0.18.20"
112 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
113 | integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
114 |
115 | "@esbuild/win32-arm64@0.18.20":
116 | version "0.18.20"
117 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
118 | integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
119 |
120 | "@esbuild/win32-ia32@0.18.20":
121 | version "0.18.20"
122 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
123 | integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
124 |
125 | "@esbuild/win32-x64@0.18.20":
126 | version "0.18.20"
127 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
128 | integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
129 |
130 | "@jridgewell/sourcemap-codec@^1.4.15":
131 | version "1.4.15"
132 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
133 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
134 |
135 | "@microsoft/api-extractor-model@7.28.13":
136 | version "7.28.13"
137 | resolved "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz"
138 | integrity sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==
139 | dependencies:
140 | "@microsoft/tsdoc" "0.14.2"
141 | "@microsoft/tsdoc-config" "~0.16.1"
142 | "@rushstack/node-core-library" "4.0.2"
143 |
144 | "@microsoft/api-extractor@7.43.0":
145 | version "7.43.0"
146 | resolved "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.0.tgz"
147 | integrity sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==
148 | dependencies:
149 | "@microsoft/api-extractor-model" "7.28.13"
150 | "@microsoft/tsdoc" "0.14.2"
151 | "@microsoft/tsdoc-config" "~0.16.1"
152 | "@rushstack/node-core-library" "4.0.2"
153 | "@rushstack/rig-package" "0.5.2"
154 | "@rushstack/terminal" "0.10.0"
155 | "@rushstack/ts-command-line" "4.19.1"
156 | lodash "~4.17.15"
157 | minimatch "~3.0.3"
158 | resolve "~1.22.1"
159 | semver "~7.5.4"
160 | source-map "~0.6.1"
161 | typescript "5.4.2"
162 |
163 | "@microsoft/tsdoc-config@~0.16.1":
164 | version "0.16.2"
165 | resolved "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz"
166 | integrity sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==
167 | dependencies:
168 | "@microsoft/tsdoc" "0.14.2"
169 | ajv "~6.12.6"
170 | jju "~1.4.0"
171 | resolve "~1.19.0"
172 |
173 | "@microsoft/tsdoc@0.14.2":
174 | version "0.14.2"
175 | resolved "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz"
176 | integrity sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==
177 |
178 | "@rollup/pluginutils@^5.1.0":
179 | version "5.1.0"
180 | resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz"
181 | integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==
182 | dependencies:
183 | "@types/estree" "^1.0.0"
184 | estree-walker "^2.0.2"
185 | picomatch "^2.3.1"
186 |
187 | "@rushstack/node-core-library@4.0.2":
188 | version "4.0.2"
189 | resolved "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz"
190 | integrity sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==
191 | dependencies:
192 | fs-extra "~7.0.1"
193 | import-lazy "~4.0.0"
194 | jju "~1.4.0"
195 | resolve "~1.22.1"
196 | semver "~7.5.4"
197 | z-schema "~5.0.2"
198 |
199 | "@rushstack/rig-package@0.5.2":
200 | version "0.5.2"
201 | resolved "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.2.tgz"
202 | integrity sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==
203 | dependencies:
204 | resolve "~1.22.1"
205 | strip-json-comments "~3.1.1"
206 |
207 | "@rushstack/terminal@0.10.0":
208 | version "0.10.0"
209 | resolved "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz"
210 | integrity sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==
211 | dependencies:
212 | "@rushstack/node-core-library" "4.0.2"
213 | supports-color "~8.1.1"
214 |
215 | "@rushstack/ts-command-line@4.19.1":
216 | version "4.19.1"
217 | resolved "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.1.tgz"
218 | integrity sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==
219 | dependencies:
220 | "@rushstack/terminal" "0.10.0"
221 | "@types/argparse" "1.0.38"
222 | argparse "~1.0.9"
223 | string-argv "~0.3.1"
224 |
225 | "@types/argparse@1.0.38":
226 | version "1.0.38"
227 | resolved "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz"
228 | integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==
229 |
230 | "@types/estree@^1.0.0":
231 | version "1.0.5"
232 | resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
233 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
234 |
235 | "@volar/language-core@1.11.1", "@volar/language-core@~1.11.1":
236 | version "1.11.1"
237 | resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz"
238 | integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==
239 | dependencies:
240 | "@volar/source-map" "1.11.1"
241 |
242 | "@volar/source-map@1.11.1", "@volar/source-map@~1.11.1":
243 | version "1.11.1"
244 | resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz"
245 | integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==
246 | dependencies:
247 | muggle-string "^0.3.1"
248 |
249 | "@volar/typescript@~1.11.1":
250 | version "1.11.1"
251 | resolved "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz"
252 | integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==
253 | dependencies:
254 | "@volar/language-core" "1.11.1"
255 | path-browserify "^1.0.1"
256 |
257 | "@vue/compiler-core@3.4.27":
258 | version "3.4.27"
259 | resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz"
260 | integrity sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==
261 | dependencies:
262 | "@babel/parser" "^7.24.4"
263 | "@vue/shared" "3.4.27"
264 | entities "^4.5.0"
265 | estree-walker "^2.0.2"
266 | source-map-js "^1.2.0"
267 |
268 | "@vue/compiler-dom@^3.3.0":
269 | version "3.4.27"
270 | resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz"
271 | integrity sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==
272 | dependencies:
273 | "@vue/compiler-core" "3.4.27"
274 | "@vue/shared" "3.4.27"
275 |
276 | "@vue/language-core@1.8.27", "@vue/language-core@^1.8.27":
277 | version "1.8.27"
278 | resolved "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz"
279 | integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==
280 | dependencies:
281 | "@volar/language-core" "~1.11.1"
282 | "@volar/source-map" "~1.11.1"
283 | "@vue/compiler-dom" "^3.3.0"
284 | "@vue/shared" "^3.3.0"
285 | computeds "^0.0.1"
286 | minimatch "^9.0.3"
287 | muggle-string "^0.3.1"
288 | path-browserify "^1.0.1"
289 | vue-template-compiler "^2.7.14"
290 |
291 | "@vue/shared@3.4.27", "@vue/shared@^3.3.0":
292 | version "3.4.27"
293 | resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz"
294 | integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==
295 |
296 | ajv@~6.12.6:
297 | version "6.12.6"
298 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
299 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
300 | dependencies:
301 | fast-deep-equal "^3.1.1"
302 | fast-json-stable-stringify "^2.0.0"
303 | json-schema-traverse "^0.4.1"
304 | uri-js "^4.2.2"
305 |
306 | argparse@~1.0.9:
307 | version "1.0.10"
308 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz"
309 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
310 | dependencies:
311 | sprintf-js "~1.0.2"
312 |
313 | balanced-match@^1.0.0:
314 | version "1.0.2"
315 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
316 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
317 |
318 | brace-expansion@^1.1.7:
319 | version "1.1.11"
320 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
321 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
322 | dependencies:
323 | balanced-match "^1.0.0"
324 | concat-map "0.0.1"
325 |
326 | brace-expansion@^2.0.1:
327 | version "2.0.1"
328 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
329 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
330 | dependencies:
331 | balanced-match "^1.0.0"
332 |
333 | commander@^9.4.1:
334 | version "9.5.0"
335 | resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz"
336 | integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
337 |
338 | computeds@^0.0.1:
339 | version "0.0.1"
340 | resolved "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz"
341 | integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==
342 |
343 | concat-map@0.0.1:
344 | version "0.0.1"
345 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
346 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
347 |
348 | de-indent@^1.0.2:
349 | version "1.0.2"
350 | resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz"
351 | integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==
352 |
353 | debug@^4.3.4:
354 | version "4.3.5"
355 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz"
356 | integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
357 | dependencies:
358 | ms "2.1.2"
359 |
360 | entities@^4.5.0:
361 | version "4.5.0"
362 | resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
363 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
364 |
365 | esbuild@^0.18.10:
366 | version "0.18.20"
367 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz"
368 | integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
369 | optionalDependencies:
370 | "@esbuild/android-arm" "0.18.20"
371 | "@esbuild/android-arm64" "0.18.20"
372 | "@esbuild/android-x64" "0.18.20"
373 | "@esbuild/darwin-arm64" "0.18.20"
374 | "@esbuild/darwin-x64" "0.18.20"
375 | "@esbuild/freebsd-arm64" "0.18.20"
376 | "@esbuild/freebsd-x64" "0.18.20"
377 | "@esbuild/linux-arm" "0.18.20"
378 | "@esbuild/linux-arm64" "0.18.20"
379 | "@esbuild/linux-ia32" "0.18.20"
380 | "@esbuild/linux-loong64" "0.18.20"
381 | "@esbuild/linux-mips64el" "0.18.20"
382 | "@esbuild/linux-ppc64" "0.18.20"
383 | "@esbuild/linux-riscv64" "0.18.20"
384 | "@esbuild/linux-s390x" "0.18.20"
385 | "@esbuild/linux-x64" "0.18.20"
386 | "@esbuild/netbsd-x64" "0.18.20"
387 | "@esbuild/openbsd-x64" "0.18.20"
388 | "@esbuild/sunos-x64" "0.18.20"
389 | "@esbuild/win32-arm64" "0.18.20"
390 | "@esbuild/win32-ia32" "0.18.20"
391 | "@esbuild/win32-x64" "0.18.20"
392 |
393 | estree-walker@^2.0.2:
394 | version "2.0.2"
395 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
396 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
397 |
398 | fast-deep-equal@^3.1.1:
399 | version "3.1.3"
400 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
401 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
402 |
403 | fast-json-stable-stringify@^2.0.0:
404 | version "2.1.0"
405 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
406 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
407 |
408 | fs-extra@~7.0.1:
409 | version "7.0.1"
410 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz"
411 | integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
412 | dependencies:
413 | graceful-fs "^4.1.2"
414 | jsonfile "^4.0.0"
415 | universalify "^0.1.0"
416 |
417 | fsevents@~2.3.2:
418 | version "2.3.3"
419 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
420 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
421 |
422 | function-bind@^1.1.2:
423 | version "1.1.2"
424 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
425 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
426 |
427 | graceful-fs@^4.1.2, graceful-fs@^4.1.6:
428 | version "4.2.11"
429 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
430 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
431 |
432 | has-flag@^4.0.0:
433 | version "4.0.0"
434 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
435 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
436 |
437 | hasown@^2.0.0:
438 | version "2.0.2"
439 | resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
440 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
441 | dependencies:
442 | function-bind "^1.1.2"
443 |
444 | he@^1.2.0:
445 | version "1.2.0"
446 | resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
447 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
448 |
449 | import-lazy@~4.0.0:
450 | version "4.0.0"
451 | resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz"
452 | integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
453 |
454 | is-core-module@^2.1.0, is-core-module@^2.13.0:
455 | version "2.13.1"
456 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz"
457 | integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
458 | dependencies:
459 | hasown "^2.0.0"
460 |
461 | jju@~1.4.0:
462 | version "1.4.0"
463 | resolved "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz"
464 | integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==
465 |
466 | json-schema-traverse@^0.4.1:
467 | version "0.4.1"
468 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
469 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
470 |
471 | jsonfile@^4.0.0:
472 | version "4.0.0"
473 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz"
474 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
475 | optionalDependencies:
476 | graceful-fs "^4.1.6"
477 |
478 | kolorist@^1.8.0:
479 | version "1.8.0"
480 | resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz"
481 | integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==
482 |
483 | lodash.get@^4.4.2:
484 | version "4.4.2"
485 | resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz"
486 | integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==
487 |
488 | lodash.isequal@^4.5.0:
489 | version "4.5.0"
490 | resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz"
491 | integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
492 |
493 | lodash@~4.17.15:
494 | version "4.17.21"
495 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
496 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
497 |
498 | lru-cache@^6.0.0:
499 | version "6.0.0"
500 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
501 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
502 | dependencies:
503 | yallist "^4.0.0"
504 |
505 | magic-string@^0.30.8:
506 | version "0.30.10"
507 | resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz"
508 | integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==
509 | dependencies:
510 | "@jridgewell/sourcemap-codec" "^1.4.15"
511 |
512 | minimatch@^9.0.3:
513 | version "9.0.4"
514 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz"
515 | integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
516 | dependencies:
517 | brace-expansion "^2.0.1"
518 |
519 | minimatch@~3.0.3:
520 | version "3.0.8"
521 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz"
522 | integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
523 | dependencies:
524 | brace-expansion "^1.1.7"
525 |
526 | ms@2.1.2:
527 | version "2.1.2"
528 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
529 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
530 |
531 | muggle-string@^0.3.1:
532 | version "0.3.1"
533 | resolved "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz"
534 | integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==
535 |
536 | nanoid@^3.3.6:
537 | version "3.3.6"
538 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
539 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
540 |
541 | path-browserify@^1.0.1:
542 | version "1.0.1"
543 | resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz"
544 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
545 |
546 | path-parse@^1.0.6, path-parse@^1.0.7:
547 | version "1.0.7"
548 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
549 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
550 |
551 | picocolors@^1.0.0:
552 | version "1.0.0"
553 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
554 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
555 |
556 | picomatch@^2.3.1:
557 | version "2.3.1"
558 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
559 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
560 |
561 | postcss@^8.4.27:
562 | version "8.4.31"
563 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz"
564 | integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
565 | dependencies:
566 | nanoid "^3.3.6"
567 | picocolors "^1.0.0"
568 | source-map-js "^1.0.2"
569 |
570 | punycode@^2.1.0:
571 | version "2.3.1"
572 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
573 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
574 |
575 | resolve@~1.19.0:
576 | version "1.19.0"
577 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz"
578 | integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==
579 | dependencies:
580 | is-core-module "^2.1.0"
581 | path-parse "^1.0.6"
582 |
583 | resolve@~1.22.1:
584 | version "1.22.8"
585 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
586 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
587 | dependencies:
588 | is-core-module "^2.13.0"
589 | path-parse "^1.0.7"
590 | supports-preserve-symlinks-flag "^1.0.0"
591 |
592 | rollup@^3.27.1:
593 | version "3.29.4"
594 | resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz"
595 | integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
596 | optionalDependencies:
597 | fsevents "~2.3.2"
598 |
599 | semver@^7.5.4, semver@~7.5.4:
600 | version "7.5.4"
601 | resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz"
602 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
603 | dependencies:
604 | lru-cache "^6.0.0"
605 |
606 | source-map-js@^1.0.2, source-map-js@^1.2.0:
607 | version "1.2.0"
608 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
609 | integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
610 |
611 | source-map@~0.6.1:
612 | version "0.6.1"
613 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
614 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
615 |
616 | sprintf-js@~1.0.2:
617 | version "1.0.3"
618 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
619 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
620 |
621 | string-argv@~0.3.1:
622 | version "0.3.2"
623 | resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz"
624 | integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
625 |
626 | strip-json-comments@~3.1.1:
627 | version "3.1.1"
628 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
629 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
630 |
631 | supports-color@~8.1.1:
632 | version "8.1.1"
633 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
634 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
635 | dependencies:
636 | has-flag "^4.0.0"
637 |
638 | supports-preserve-symlinks-flag@^1.0.0:
639 | version "1.0.0"
640 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
641 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
642 |
643 | typescript@5.4.2:
644 | version "5.4.2"
645 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz"
646 | integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==
647 |
648 | typescript@^5.4.5:
649 | version "5.4.5"
650 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz"
651 | integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
652 |
653 | universalify@^0.1.0:
654 | version "0.1.2"
655 | resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
656 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
657 |
658 | uri-js@^4.2.2:
659 | version "4.4.1"
660 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
661 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
662 | dependencies:
663 | punycode "^2.1.0"
664 |
665 | validator@^13.7.0:
666 | version "13.12.0"
667 | resolved "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz"
668 | integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==
669 |
670 | vite-plugin-css-injected-by-js@^3.3.0:
671 | version "3.3.0"
672 | resolved "https://registry.npmjs.org/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.3.0.tgz"
673 | integrity sha512-xG+jyHNCmUqi/TXp6q88wTJGeAOrNLSyUUTp4qEQ9QZLGcHWQQsCsSSKa59rPMQr8sOzfzmWDd8enGqfH/dBew==
674 |
675 | vite-plugin-dts@^3.9.1:
676 | version "3.9.1"
677 | resolved "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.9.1.tgz"
678 | integrity sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg==
679 | dependencies:
680 | "@microsoft/api-extractor" "7.43.0"
681 | "@rollup/pluginutils" "^5.1.0"
682 | "@vue/language-core" "^1.8.27"
683 | debug "^4.3.4"
684 | kolorist "^1.8.0"
685 | magic-string "^0.30.8"
686 | vue-tsc "^1.8.27"
687 |
688 | vite@^4.4.11:
689 | version "4.4.11"
690 | resolved "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz"
691 | integrity sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==
692 | dependencies:
693 | esbuild "^0.18.10"
694 | postcss "^8.4.27"
695 | rollup "^3.27.1"
696 | optionalDependencies:
697 | fsevents "~2.3.2"
698 |
699 | vue-template-compiler@^2.7.14:
700 | version "2.7.16"
701 | resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz"
702 | integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==
703 | dependencies:
704 | de-indent "^1.0.2"
705 | he "^1.2.0"
706 |
707 | vue-tsc@^1.8.27:
708 | version "1.8.27"
709 | resolved "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz"
710 | integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==
711 | dependencies:
712 | "@volar/typescript" "~1.11.1"
713 | "@vue/language-core" "1.8.27"
714 | semver "^7.5.4"
715 |
716 | yallist@^4.0.0:
717 | version "4.0.0"
718 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
719 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
720 |
721 | z-schema@~5.0.2:
722 | version "5.0.5"
723 | resolved "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz"
724 | integrity sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==
725 | dependencies:
726 | lodash.get "^4.4.2"
727 | lodash.isequal "^4.5.0"
728 | validator "^13.7.0"
729 | optionalDependencies:
730 | commander "^9.4.1"
731 |
--------------------------------------------------------------------------------