├── .github └── kirby-extended-writer.png ├── .gitignore ├── LICENSE ├── README.md ├── composer.json ├── index.css ├── index.js ├── index.php ├── package.json ├── pnpm-lock.yaml └── src ├── Input └── ListInput.vue ├── Marks └── Highlight.js ├── Nodes ├── Doc.js ├── Heading.js ├── LargerParagraph.js └── ListDoc.js ├── Writer ├── Extension.js ├── Mark.js └── Node.js ├── index.js ├── index.scss └── plugins ├── listNodes.js ├── writerMarks.js ├── writerNodes.js └── writerTextAlign.js /.github/kirby-extended-writer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coralic/kirby-extended-writer/dcf9d58747cf4a7a8c8ee56e94a08682c44c507f/.github/kirby-extended-writer.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .pnpm-debug.log 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2022 Tobias Möritz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Preview of Kirby Extended Writer plugin](./.github/kirby-extended-writer.png) 2 | 3 | > Most features that this plugin provides or is meant to provide in the future will be added to [Kirby 4.0+.](https://kirby.nolt.io/roadmap) 4 | > It still works for Kirby 3.6-3.9+. Going forward, this plugin will be archived and not receive any more updates as our wishes have been fulfilled :) 5 | 6 | # Extended Writer 7 | 8 | Extended Writer supercharges Kirby's built-in Writer field and block with useful marks, nodes and features you wish were built-in. 9 | 10 | ## Features 11 | 12 | - New marks: 13 | - **Highlight**: Highlight text using the html `` tag 14 | - New nodes: 15 | - **Larger Paragraph**: A larger paragraph, e.g. for short introduction or highlighted passages. (`
`) 16 | - Enable & disable heading levels of the heading node with `h1`/`h2`/`h3`/`h4`/`h5`/`h6` 17 | - Node property support for the List field, to disable the default bullet list or ordered list nodes 18 | - Styling customizations via props (e.g. text-align) 19 | 20 | ## Requirements 21 | 22 | - `Kirby` >= 3.6.0 23 | - `php` >= 7.4 / 8.0 24 | 25 | ## Installation 26 | 27 | ### Download 28 | 29 | Download and copy this repository to `/site/plugins/kirby-extended-writer`. 30 | 31 | ### Git Submodule 32 | 33 | ``` 34 | git submodule add https://github.com/coralic/kirby-extended-writer.git site/plugins/kirby-extended-writer 35 | ``` 36 | 37 | ### Composer 38 | 39 | ``` 40 | composer require coralic/kirby-extended-writer 41 | ``` 42 | 43 | ## Usage 44 | 45 | This plugin adds the mark `highlight` and the nodes `largerParagraph`, `h1`, `h2`, `h3`, `h4`, `h5` and `h6`. 46 | You can activate them in the writer field like this: 47 | 48 | ```yaml 49 | text: 50 | label: Text 51 | type: writer 52 | marks: 53 | - bold 54 | - italic 55 | - link 56 | - email 57 | - highlight 58 | nodes: 59 | - h1 60 | - h2 61 | - h3 62 | - largerParagraph 63 | - bulletList 64 | - orderedList 65 | ``` 66 | 67 | ## Credits 68 | 69 | - [Johann Schopplich](https://github.com/johannschopplich) for his [Custom Writer field marks boilerplate](https://github.com/johannschopplich/kirby-writer-marks) and the wonderful [kirbyup](https://github.com/johannschopplich/kirbyup) bundler 70 | - [Roman Steiner](https://github.com/rasteiner) for his [Oh Hi Mark plugin](https://github.com/rasteiner/oh-hi-mark) 71 | 72 | ## License 73 | 74 | [MIT License](./LICENSE) © 2021-2022 [Tobias Möritz](https://github.com/tobimori) 75 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coralic/kirby-extended-writer", 3 | "description": "Supercharge Kirby's Writer field with new nodes, marks and features", 4 | "type": "kirby-plugin", 5 | "version": "1.1.1", 6 | "keywords": [ 7 | "kirby" 8 | ], 9 | "license": "MIT", 10 | "homepage": "https://github.com/coralic/kirby-extended-writer#readme", 11 | "authors": [ 12 | { 13 | "name": "Tobias Möritz", 14 | "email": "tobias@moeritz.io", 15 | "homepage": "https://moeritz.io" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=7.4.0", 20 | "getkirby/composer-installer": "^1.2" 21 | }, 22 | "require-dev": { 23 | "getkirby/cms": "^3.6" 24 | }, 25 | "scripts": { 26 | "dist": "composer install --no-dev --optimize-autoloader" 27 | }, 28 | "config": { 29 | "optimize-autoloader": true 30 | }, 31 | "extra": { 32 | "kirby-cms-path": false 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /index.css: -------------------------------------------------------------------------------- 1 | .k-list-input .ProseMirror{line-height:1.5em}.k-list-input .ProseMirror ol>li::marker{font-size:var(--text-sm);color:var(--color-gray-500)}.k-writer .ProseMirror div.-larger-paragraph{display:block;font-size:var(--text-xl);font-weight:500;line-height:1.25em}.k-writer.k-writer-text-align-center .ProseMirror{text-align:center}.k-writer.k-writer-text-align-left .ProseMirror{text-align:left}.k-writer.k-writer-text-align-right .ProseMirror{text-align:right} 2 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var j=Object.defineProperty,z=Object.defineProperties;var W=Object.getOwnPropertyDescriptors;var v=Object.getOwnPropertySymbols;var F=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var b=(u,o,d)=>o in u?j(u,o,{enumerable:!0,configurable:!0,writable:!0,value:d}):u[o]=d,g=(u,o)=>{for(var d in o||(o={}))F.call(o,d)&&b(u,d,o[d]);if(v)for(var d of v(o))H.call(o,d)&&b(u,d,o[d]);return u},f=(u,o)=>z(u,W(o));(function(){"use strict";class u{constructor(t={}){this.options=g(g({},this.defaults),t)}init(){return null}bindEditor(t=null){this.editor=t}get name(){return null}get type(){return"extension"}get defaults(){return{}}plugins(){return[]}inputRules(){return[]}pasteRules(){return[]}keys(){return{}}}class o extends u{constructor(t={}){super(t)}get type(){return"node"}get schema(){return null}commands(){return{}}}class d extends o{get button(){return this.options.levels.map(t=>({id:`h${t}`,command:`h${t}`,icon:`h${t}`,label:window.panel.$t("toolbar.button.heading."+t),attrs:{level:t},name:this.name,when:["heading","paragraph"]}))}commands({type:t,schema:n,utils:r}){let i={toggleHeading:h=>r.toggleBlockType(t,n.nodes.paragraph,h)};return this.options.levels.forEach(h=>{i[`h${h}`]=()=>r.toggleBlockType(t,n.nodes.paragraph,{level:h})}),i}get defaults(){return{levels:[1,2,3,4,5,6]}}inputRules({type:t,utils:n}){return this.options.levels.map(r=>n.textblockTypeInputRule(new RegExp(`^(#{1,${r}})\\s$`),t,()=>({level:r})))}keys({type:t,utils:n}){return this.options.levels.reduce((r,i)=>f(g({},r),{[`Shift-Ctrl-${i}`]:n.setBlockType(t,{level:i})}),{})}get name(){return"heading"}get schema(){return{attrs:{level:{default:1}},content:"inline*",group:"block",defining:!0,draggable:!1,parseDOM:this.options.levels.map(t=>({tag:`h${t}`,attrs:{level:t}})),toDOM:t=>[`h${t.attrs.level}`,0]}}}function y(e){const t=window.panel.plugins.thirdParty;if(t.__nodesInitialized)return;const n=t.nodes;if(!n)return;const r=e.component("k-writer");e.component("k-writer",{extends:r,methods:{createNodes(){const i=r.options.methods.createNodes.call(this).filter(({name:a})=>!Object.keys(n).includes(a)),h=this.filterExtensions(Object.entries(n).reduce((a,[c,s])=>(a[c]=new s,a),{}),this.nodes);if(this&&this.nodes&&!this.nodes.includes("heading")){const a=this.nodes.reduce((c,s)=>{var m;const l=(m=s.matchAll(/h([1-6])/gu))==null?void 0:m.next();return l&&l.value&&l.value.length>1&&!c.includes(l.value[1])&&c.push(l.value[1]),c},[]);a.length>0&&h.push(new d({levels:a}))}return[...i,...h]}}}),t.__nodesInitialized=!0}class x extends o{get button(){return{id:this.name,icon:"quote",label:window.panel.$t("coralic.extendedWriter.nodes.largerParagraph"),name:this.name}}commands({type:t,schema:n,utils:r}){return{largerParagraph:i=>r.toggleBlockType(t,n.nodes.paragraph,i)}}get name(){return"largerParagraph"}get schema(){return{content:"inline*",group:"block",draggable:!1,parseDOM:[{tag:"div",getAttrs:()=>({class:"-larger-paragraph"})}],toDOM:()=>["div",{class:"-larger-paragraph"},0]}}}function $(e){const t=window.panel.plugins.thirdParty;if(t.__marksInitialized)return;const n=t.marks;if(!n)return;const r=e.component("k-writer");e.component("k-writer",{extends:r,methods:{createMarks(){const i=r.options.methods.createMarks.call(this).filter(({name:a})=>!Object.keys(n).includes(a)),h=Object.entries(n).reduce((a,[c,s])=>(a[c]=new s,a),{});return[...i,...this.filterExtensions(h,this.marks)]}}}),t.__marksInitialized=!0}class M extends u{constructor(t={}){super(t)}command(){return()=>{}}remove(){this.editor.removeMark(this.name)}get schema(){return null}get type(){return"mark"}toggle(){return this.editor.toggleMark(this.name)}update(t){this.editor.updateMark(this.name,t)}}class L extends M{get button(){return{icon:"star",label:window.panel.$t("coralic.extendedWriter.nodes.highlight")}}commands(){return()=>this.toggle()}get name(){return"highlight"}get schema(){return{parseDOM:[{tag:"mark"}],toDOM:t=>["mark",g({},t.attrs),0]}}}class O extends o{get defaults(){return{inline:!1}}get name(){return"doc"}get schema(){return{content:this.options.inline?"paragraph+":"block+"}}}class P extends O{get defaults(){return{nodes:["bulletList","orderedList"]}}get schema(){return{content:this.options.nodes instanceof Array?this.options.nodes.join("|"):"bulletList|orderedList"}}}var C=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("k-writer",e._b({ref:"input",staticClass:"k-list-input",attrs:{extensions:e.extensions,nodes:e.toolbarNodes,value:e.list},on:{input:e.onInput}},"k-writer",e.$props,!1))},N=[],q="";function B(e,t,n,r,i,h,a,c){var s=typeof e=="function"?e.options:e;t&&(s.render=t,s.staticRenderFns=n,s._compiled=!0),r&&(s.functional=!0),h&&(s._scopeId="data-v-"+h);var l;if(a?(l=function(p){p=p||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!p&&typeof __VUE_SSR_CONTEXT__!="undefined"&&(p=__VUE_SSR_CONTEXT__),i&&i.call(this,p),p&&p._registeredComponents&&p._registeredComponents.add(a)},s._ssrRegister=l):i&&(l=c?function(){i.call(this,(s.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(s.functional){s._injectStyles=l;var m=s.render;s.render=function(S,w){return l.call(w),m(S,w)}}else{var _=s.beforeCreate;s.beforeCreate=_?[].concat(_,l):[l]}return{exports:e,options:s}}const R={inheritAttrs:!1,props:{autofocus:Boolean,marks:{type:[Array,Boolean],default:!0},nodes:{type:[Array,Boolean],default:!0},value:String},data(){return{list:this.value,html:this.value}},computed:{toolbarNodes(){return this.nodes===!1?["bulletList"]:this.nodes===!0?["bulletList","orderedList"]:this.nodes},extensions(){return[new P({nodes:this.toolbarNodes,inline:!0})]}},watch:{value(e){e!==this.html&&(this.list=e,this.html=e)}},methods:{focus(){this.$refs.input.focus()},onInput(e){let n=new DOMParser().parseFromString(e,"text/html").querySelector("ul, ol");if(!n){this.$emit("input",this.list="");return}if(n.textContent.trim().length===0){this.$emit("input",this.list="");return}this.list=e,this.html=e.replace(/(

|<\/p>)/gi,""),this.$emit("input",this.html)}}},k={};var T=B(R,C,N,!1,D,null,null,null);function D(e){for(let t in k)this[t]=k[t]}var I=function(){return T.exports}();function A(e){const t=e.component("k-writer");e.component("k-writer",{extends:t,components:{"k-writer-toolbar":{extends:t.component("k-writer-toolbar"),computed:{hasVisibleButtons(){const r=Object.keys(this.nodeButtons);return r.length>1||r.length===1&&!(r.includes("bulletList")||r.includes("paragraph")||r.includes("orderedList"))}}}}});const n=e.component("k-list-field");e.component("k-list-field",{extends:n,props:{nodes:[Array,Boolean]}})}var U="";function E(e){e.component("k-writer",{extends:e.component("k-writer"),props:{align:"left"|"center"|"right"},mounted(){this.$el.classList.add("k-writer-text-align-"+(this.align||"left"))}}),e.component("k-writer-field",{extends:e.component("k-writer-field"),props:{align:"left"|"center"|"right"}})}window.panel.plugin("coralic/frohberger-writer-nodes",{use:[y,$,A,E],thirdParty:{nodes:f(g({},window.panel.plugins.thirdParty.nodes||{}),{largerParagraph:x}),marks:f(g({},window.panel.plugins.thirdParty.marks||{}),{highlight:L})},components:{"k-list-input":I}})})(); 2 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | [ 12 | 'en' => [ 13 | 'coralic.extendedWriter.marks.highlight' => 'Highlight', 14 | 'coralic.extendedWriter.nodes.largerParagraph' => 'Larger Paragraph', 15 | ], 16 | 'de' => [ 17 | 'coralic.extendedWriter.marks.highlight' => 'Hervorheben', 18 | 'coralic.extendedWriter.nodes.largerParagraph' => 'Größerer Absatz' 19 | ] 20 | ], 21 | 'fields' => [ 22 | 'list' => [ 23 | 'props' => [ 24 | /** 25 | * Sets the allowed list types. Available formats: `bulletList`, `orderedList`. 26 | * Activate them all by passing `true`. Passing `false` will default to `bulletList`, otherwise default nodes are `bulletList` & `orderedList`. 27 | * @param array|bool|null $nodes 28 | */ 29 | 'nodes' => function ($nodes = true) { 30 | return $nodes; 31 | } 32 | ] 33 | ], 34 | 'writer' => [ 35 | 'props' => [ 36 | /** 37 | * Changes the text orientation of the Writer fields contents. Available formats: `left`, `center`, `right`. 38 | */ 39 | 'align' => function ($align = 'left') { 40 | return in_array($align, ['left', 'center', 'right']) ? $align : 'left'; 41 | }, 42 | ] 43 | ] 44 | ] 45 | ]); 46 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@coralic/kirby-extended-writer", 3 | "description": "Supercharge Kirby's Writer field with new nodes, marks and features", 4 | "version": "1.1.0", 5 | "private": true, 6 | "license": "MIT", 7 | "author": "Tobias Möritz", 8 | "scripts": { 9 | "dev": "kirbyup src/index.js --watch", 10 | "build": "kirbyup src/index.js" 11 | }, 12 | "devDependencies": { 13 | "kirbyup": "^0.21.1", 14 | "postcss": "^8.4.5", 15 | "sass": "^1.47.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | kirbyup: ^0.21.1 5 | postcss: ^8.4.5 6 | sass: ^1.47.0 7 | 8 | devDependencies: 9 | kirbyup: 0.21.1_postcss@8.4.5 10 | postcss: 8.4.5 11 | sass: 1.47.0 12 | 13 | packages: 14 | 15 | /@babel/code-frame/7.16.7: 16 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 17 | engines: {node: '>=6.9.0'} 18 | dependencies: 19 | '@babel/highlight': 7.16.7 20 | dev: true 21 | 22 | /@babel/compat-data/7.16.4: 23 | resolution: {integrity: sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==} 24 | engines: {node: '>=6.9.0'} 25 | dev: true 26 | 27 | /@babel/core/7.16.7: 28 | resolution: {integrity: sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==} 29 | engines: {node: '>=6.9.0'} 30 | dependencies: 31 | '@babel/code-frame': 7.16.7 32 | '@babel/generator': 7.16.7 33 | '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.16.7 34 | '@babel/helper-module-transforms': 7.16.7 35 | '@babel/helpers': 7.16.7 36 | '@babel/parser': 7.16.7 37 | '@babel/template': 7.16.7 38 | '@babel/traverse': 7.16.7 39 | '@babel/types': 7.16.7 40 | convert-source-map: 1.8.0 41 | debug: 4.3.3 42 | gensync: 1.0.0-beta.2 43 | json5: 2.2.0 44 | semver: 6.3.0 45 | source-map: 0.5.7 46 | transitivePeerDependencies: 47 | - supports-color 48 | dev: true 49 | 50 | /@babel/generator/7.16.7: 51 | resolution: {integrity: sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==} 52 | engines: {node: '>=6.9.0'} 53 | dependencies: 54 | '@babel/types': 7.16.7 55 | jsesc: 2.5.2 56 | source-map: 0.5.7 57 | dev: true 58 | 59 | /@babel/helper-annotate-as-pure/7.16.7: 60 | resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} 61 | engines: {node: '>=6.9.0'} 62 | dependencies: 63 | '@babel/types': 7.16.7 64 | dev: true 65 | 66 | /@babel/helper-compilation-targets/7.16.7_@babel+core@7.16.7: 67 | resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} 68 | engines: {node: '>=6.9.0'} 69 | peerDependencies: 70 | '@babel/core': ^7.0.0 71 | dependencies: 72 | '@babel/compat-data': 7.16.4 73 | '@babel/core': 7.16.7 74 | '@babel/helper-validator-option': 7.16.7 75 | browserslist: 4.19.1 76 | semver: 6.3.0 77 | dev: true 78 | 79 | /@babel/helper-create-class-features-plugin/7.16.7_@babel+core@7.16.7: 80 | resolution: {integrity: sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==} 81 | engines: {node: '>=6.9.0'} 82 | peerDependencies: 83 | '@babel/core': ^7.0.0 84 | dependencies: 85 | '@babel/core': 7.16.7 86 | '@babel/helper-annotate-as-pure': 7.16.7 87 | '@babel/helper-environment-visitor': 7.16.7 88 | '@babel/helper-function-name': 7.16.7 89 | '@babel/helper-member-expression-to-functions': 7.16.7 90 | '@babel/helper-optimise-call-expression': 7.16.7 91 | '@babel/helper-replace-supers': 7.16.7 92 | '@babel/helper-split-export-declaration': 7.16.7 93 | transitivePeerDependencies: 94 | - supports-color 95 | dev: true 96 | 97 | /@babel/helper-environment-visitor/7.16.7: 98 | resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} 99 | engines: {node: '>=6.9.0'} 100 | dependencies: 101 | '@babel/types': 7.16.7 102 | dev: true 103 | 104 | /@babel/helper-function-name/7.16.7: 105 | resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} 106 | engines: {node: '>=6.9.0'} 107 | dependencies: 108 | '@babel/helper-get-function-arity': 7.16.7 109 | '@babel/template': 7.16.7 110 | '@babel/types': 7.16.7 111 | dev: true 112 | 113 | /@babel/helper-get-function-arity/7.16.7: 114 | resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} 115 | engines: {node: '>=6.9.0'} 116 | dependencies: 117 | '@babel/types': 7.16.7 118 | dev: true 119 | 120 | /@babel/helper-hoist-variables/7.16.7: 121 | resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} 122 | engines: {node: '>=6.9.0'} 123 | dependencies: 124 | '@babel/types': 7.16.7 125 | dev: true 126 | 127 | /@babel/helper-member-expression-to-functions/7.16.7: 128 | resolution: {integrity: sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==} 129 | engines: {node: '>=6.9.0'} 130 | dependencies: 131 | '@babel/types': 7.16.7 132 | dev: true 133 | 134 | /@babel/helper-module-imports/7.16.7: 135 | resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} 136 | engines: {node: '>=6.9.0'} 137 | dependencies: 138 | '@babel/types': 7.16.7 139 | dev: true 140 | 141 | /@babel/helper-module-transforms/7.16.7: 142 | resolution: {integrity: sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==} 143 | engines: {node: '>=6.9.0'} 144 | dependencies: 145 | '@babel/helper-environment-visitor': 7.16.7 146 | '@babel/helper-module-imports': 7.16.7 147 | '@babel/helper-simple-access': 7.16.7 148 | '@babel/helper-split-export-declaration': 7.16.7 149 | '@babel/helper-validator-identifier': 7.16.7 150 | '@babel/template': 7.16.7 151 | '@babel/traverse': 7.16.7 152 | '@babel/types': 7.16.7 153 | transitivePeerDependencies: 154 | - supports-color 155 | dev: true 156 | 157 | /@babel/helper-optimise-call-expression/7.16.7: 158 | resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==} 159 | engines: {node: '>=6.9.0'} 160 | dependencies: 161 | '@babel/types': 7.16.7 162 | dev: true 163 | 164 | /@babel/helper-plugin-utils/7.16.7: 165 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} 166 | engines: {node: '>=6.9.0'} 167 | dev: true 168 | 169 | /@babel/helper-replace-supers/7.16.7: 170 | resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==} 171 | engines: {node: '>=6.9.0'} 172 | dependencies: 173 | '@babel/helper-environment-visitor': 7.16.7 174 | '@babel/helper-member-expression-to-functions': 7.16.7 175 | '@babel/helper-optimise-call-expression': 7.16.7 176 | '@babel/traverse': 7.16.7 177 | '@babel/types': 7.16.7 178 | transitivePeerDependencies: 179 | - supports-color 180 | dev: true 181 | 182 | /@babel/helper-simple-access/7.16.7: 183 | resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==} 184 | engines: {node: '>=6.9.0'} 185 | dependencies: 186 | '@babel/types': 7.16.7 187 | dev: true 188 | 189 | /@babel/helper-split-export-declaration/7.16.7: 190 | resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} 191 | engines: {node: '>=6.9.0'} 192 | dependencies: 193 | '@babel/types': 7.16.7 194 | dev: true 195 | 196 | /@babel/helper-validator-identifier/7.16.7: 197 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 198 | engines: {node: '>=6.9.0'} 199 | dev: true 200 | 201 | /@babel/helper-validator-option/7.16.7: 202 | resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} 203 | engines: {node: '>=6.9.0'} 204 | dev: true 205 | 206 | /@babel/helpers/7.16.7: 207 | resolution: {integrity: sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==} 208 | engines: {node: '>=6.9.0'} 209 | dependencies: 210 | '@babel/template': 7.16.7 211 | '@babel/traverse': 7.16.7 212 | '@babel/types': 7.16.7 213 | transitivePeerDependencies: 214 | - supports-color 215 | dev: true 216 | 217 | /@babel/highlight/7.16.7: 218 | resolution: {integrity: sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==} 219 | engines: {node: '>=6.9.0'} 220 | dependencies: 221 | '@babel/helper-validator-identifier': 7.16.7 222 | chalk: 2.4.2 223 | js-tokens: 4.0.0 224 | dev: true 225 | 226 | /@babel/parser/7.16.7: 227 | resolution: {integrity: sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==} 228 | engines: {node: '>=6.0.0'} 229 | hasBin: true 230 | dev: true 231 | 232 | /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.16.7: 233 | resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} 234 | engines: {node: '>=6.9.0'} 235 | peerDependencies: 236 | '@babel/core': ^7.0.0-0 237 | dependencies: 238 | '@babel/core': 7.16.7 239 | '@babel/helper-create-class-features-plugin': 7.16.7_@babel+core@7.16.7 240 | '@babel/helper-plugin-utils': 7.16.7 241 | transitivePeerDependencies: 242 | - supports-color 243 | dev: true 244 | 245 | /@babel/plugin-proposal-decorators/7.16.7_@babel+core@7.16.7: 246 | resolution: {integrity: sha512-DoEpnuXK14XV9btI1k8tzNGCutMclpj4yru8aXKoHlVmbO1s+2A+g2+h4JhcjrxkFJqzbymnLG6j/niOf3iFXQ==} 247 | engines: {node: '>=6.9.0'} 248 | peerDependencies: 249 | '@babel/core': ^7.0.0-0 250 | dependencies: 251 | '@babel/core': 7.16.7 252 | '@babel/helper-create-class-features-plugin': 7.16.7_@babel+core@7.16.7 253 | '@babel/helper-plugin-utils': 7.16.7 254 | '@babel/plugin-syntax-decorators': 7.16.7_@babel+core@7.16.7 255 | transitivePeerDependencies: 256 | - supports-color 257 | dev: true 258 | 259 | /@babel/plugin-syntax-decorators/7.16.7_@babel+core@7.16.7: 260 | resolution: {integrity: sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw==} 261 | engines: {node: '>=6.9.0'} 262 | peerDependencies: 263 | '@babel/core': ^7.0.0-0 264 | dependencies: 265 | '@babel/core': 7.16.7 266 | '@babel/helper-plugin-utils': 7.16.7 267 | dev: true 268 | 269 | /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.16.7: 270 | resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} 271 | engines: {node: '>=6.9.0'} 272 | peerDependencies: 273 | '@babel/core': ^7.0.0-0 274 | dependencies: 275 | '@babel/core': 7.16.7 276 | '@babel/helper-plugin-utils': 7.16.7 277 | dev: true 278 | 279 | /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.16.7: 280 | resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} 281 | engines: {node: '>=6.9.0'} 282 | peerDependencies: 283 | '@babel/core': ^7.0.0-0 284 | dependencies: 285 | '@babel/core': 7.16.7 286 | '@babel/helper-plugin-utils': 7.16.7 287 | dev: true 288 | 289 | /@babel/plugin-transform-typescript/7.16.7_@babel+core@7.16.7: 290 | resolution: {integrity: sha512-Hzx1lvBtOCWuCEwMmYOfpQpO7joFeXLgoPuzZZBtTxXqSqUGUubvFGZv2ygo1tB5Bp9q6PXV3H0E/kf7KM0RLA==} 291 | engines: {node: '>=6.9.0'} 292 | peerDependencies: 293 | '@babel/core': ^7.0.0-0 294 | dependencies: 295 | '@babel/core': 7.16.7 296 | '@babel/helper-create-class-features-plugin': 7.16.7_@babel+core@7.16.7 297 | '@babel/helper-plugin-utils': 7.16.7 298 | '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.16.7 299 | transitivePeerDependencies: 300 | - supports-color 301 | dev: true 302 | 303 | /@babel/template/7.16.7: 304 | resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} 305 | engines: {node: '>=6.9.0'} 306 | dependencies: 307 | '@babel/code-frame': 7.16.7 308 | '@babel/parser': 7.16.7 309 | '@babel/types': 7.16.7 310 | dev: true 311 | 312 | /@babel/traverse/7.16.7: 313 | resolution: {integrity: sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==} 314 | engines: {node: '>=6.9.0'} 315 | dependencies: 316 | '@babel/code-frame': 7.16.7 317 | '@babel/generator': 7.16.7 318 | '@babel/helper-environment-visitor': 7.16.7 319 | '@babel/helper-function-name': 7.16.7 320 | '@babel/helper-hoist-variables': 7.16.7 321 | '@babel/helper-split-export-declaration': 7.16.7 322 | '@babel/parser': 7.16.7 323 | '@babel/types': 7.16.7 324 | debug: 4.3.3 325 | globals: 11.12.0 326 | transitivePeerDependencies: 327 | - supports-color 328 | dev: true 329 | 330 | /@babel/types/7.16.7: 331 | resolution: {integrity: sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==} 332 | engines: {node: '>=6.9.0'} 333 | dependencies: 334 | '@babel/helper-validator-identifier': 7.16.7 335 | to-fast-properties: 2.0.0 336 | dev: true 337 | 338 | /@rollup/pluginutils/4.1.2: 339 | resolution: {integrity: sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==} 340 | engines: {node: '>= 8.0.0'} 341 | dependencies: 342 | estree-walker: 2.0.2 343 | picomatch: 2.3.0 344 | dev: true 345 | 346 | /@vue/babel-helper-vue-jsx-merge-props/1.2.1: 347 | resolution: {integrity: sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==} 348 | dev: true 349 | 350 | /@vue/babel-plugin-transform-vue-jsx/1.2.1_@babel+core@7.16.7: 351 | resolution: {integrity: sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==} 352 | peerDependencies: 353 | '@babel/core': ^7.0.0-0 354 | dependencies: 355 | '@babel/core': 7.16.7 356 | '@babel/helper-module-imports': 7.16.7 357 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7 358 | '@vue/babel-helper-vue-jsx-merge-props': 1.2.1 359 | html-tags: 2.0.0 360 | lodash.kebabcase: 4.1.1 361 | svg-tags: 1.0.0 362 | dev: true 363 | 364 | /@vue/babel-preset-jsx/1.2.4_@babel+core@7.16.7: 365 | resolution: {integrity: sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==} 366 | peerDependencies: 367 | '@babel/core': ^7.0.0-0 368 | dependencies: 369 | '@babel/core': 7.16.7 370 | '@vue/babel-helper-vue-jsx-merge-props': 1.2.1 371 | '@vue/babel-plugin-transform-vue-jsx': 1.2.1_@babel+core@7.16.7 372 | '@vue/babel-sugar-composition-api-inject-h': 1.2.1_@babel+core@7.16.7 373 | '@vue/babel-sugar-composition-api-render-instance': 1.2.4_@babel+core@7.16.7 374 | '@vue/babel-sugar-functional-vue': 1.2.2_@babel+core@7.16.7 375 | '@vue/babel-sugar-inject-h': 1.2.2_@babel+core@7.16.7 376 | '@vue/babel-sugar-v-model': 1.2.3_@babel+core@7.16.7 377 | '@vue/babel-sugar-v-on': 1.2.3_@babel+core@7.16.7 378 | dev: true 379 | 380 | /@vue/babel-sugar-composition-api-inject-h/1.2.1_@babel+core@7.16.7: 381 | resolution: {integrity: sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==} 382 | peerDependencies: 383 | '@babel/core': ^7.0.0-0 384 | dependencies: 385 | '@babel/core': 7.16.7 386 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7 387 | dev: true 388 | 389 | /@vue/babel-sugar-composition-api-render-instance/1.2.4_@babel+core@7.16.7: 390 | resolution: {integrity: sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==} 391 | peerDependencies: 392 | '@babel/core': ^7.0.0-0 393 | dependencies: 394 | '@babel/core': 7.16.7 395 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7 396 | dev: true 397 | 398 | /@vue/babel-sugar-functional-vue/1.2.2_@babel+core@7.16.7: 399 | resolution: {integrity: sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==} 400 | peerDependencies: 401 | '@babel/core': ^7.0.0-0 402 | dependencies: 403 | '@babel/core': 7.16.7 404 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7 405 | dev: true 406 | 407 | /@vue/babel-sugar-inject-h/1.2.2_@babel+core@7.16.7: 408 | resolution: {integrity: sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==} 409 | peerDependencies: 410 | '@babel/core': ^7.0.0-0 411 | dependencies: 412 | '@babel/core': 7.16.7 413 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7 414 | dev: true 415 | 416 | /@vue/babel-sugar-v-model/1.2.3_@babel+core@7.16.7: 417 | resolution: {integrity: sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==} 418 | peerDependencies: 419 | '@babel/core': ^7.0.0-0 420 | dependencies: 421 | '@babel/core': 7.16.7 422 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7 423 | '@vue/babel-helper-vue-jsx-merge-props': 1.2.1 424 | '@vue/babel-plugin-transform-vue-jsx': 1.2.1_@babel+core@7.16.7 425 | camelcase: 5.3.1 426 | html-tags: 2.0.0 427 | svg-tags: 1.0.0 428 | dev: true 429 | 430 | /@vue/babel-sugar-v-on/1.2.3_@babel+core@7.16.7: 431 | resolution: {integrity: sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==} 432 | peerDependencies: 433 | '@babel/core': ^7.0.0-0 434 | dependencies: 435 | '@babel/core': 7.16.7 436 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.16.7 437 | '@vue/babel-plugin-transform-vue-jsx': 1.2.1_@babel+core@7.16.7 438 | camelcase: 5.3.1 439 | dev: true 440 | 441 | /@vue/component-compiler-utils/3.3.0: 442 | resolution: {integrity: sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==} 443 | dependencies: 444 | consolidate: 0.15.1 445 | hash-sum: 1.0.2 446 | lru-cache: 4.1.5 447 | merge-source-map: 1.1.0 448 | postcss: 7.0.39 449 | postcss-selector-parser: 6.0.8 450 | source-map: 0.6.1 451 | vue-template-es2015-compiler: 1.9.1 452 | optionalDependencies: 453 | prettier: 2.5.1 454 | dev: true 455 | 456 | /ansi-regex/2.1.1: 457 | resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=} 458 | engines: {node: '>=0.10.0'} 459 | dev: true 460 | 461 | /ansi-styles/2.2.1: 462 | resolution: {integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=} 463 | engines: {node: '>=0.10.0'} 464 | dev: true 465 | 466 | /ansi-styles/3.2.1: 467 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 468 | engines: {node: '>=4'} 469 | dependencies: 470 | color-convert: 1.9.3 471 | dev: true 472 | 473 | /anymatch/3.1.2: 474 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 475 | engines: {node: '>= 8'} 476 | dependencies: 477 | normalize-path: 3.0.0 478 | picomatch: 2.3.0 479 | dev: true 480 | 481 | /at-least-node/1.0.0: 482 | resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} 483 | engines: {node: '>= 4.0.0'} 484 | dev: true 485 | 486 | /babel-code-frame/6.26.0: 487 | resolution: {integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=} 488 | dependencies: 489 | chalk: 1.1.3 490 | esutils: 2.0.3 491 | js-tokens: 3.0.2 492 | dev: true 493 | 494 | /babel-helper-builder-binary-assignment-operator-visitor/6.24.1: 495 | resolution: {integrity: sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=} 496 | dependencies: 497 | babel-helper-explode-assignable-expression: 6.24.1 498 | babel-runtime: 6.26.0 499 | babel-types: 6.26.0 500 | dev: true 501 | 502 | /babel-helper-call-delegate/6.24.1: 503 | resolution: {integrity: sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=} 504 | dependencies: 505 | babel-helper-hoist-variables: 6.24.1 506 | babel-runtime: 6.26.0 507 | babel-traverse: 6.26.0 508 | babel-types: 6.26.0 509 | dev: true 510 | 511 | /babel-helper-define-map/6.26.0: 512 | resolution: {integrity: sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=} 513 | dependencies: 514 | babel-helper-function-name: 6.24.1 515 | babel-runtime: 6.26.0 516 | babel-types: 6.26.0 517 | lodash: 4.17.21 518 | dev: true 519 | 520 | /babel-helper-explode-assignable-expression/6.24.1: 521 | resolution: {integrity: sha1-8luCz33BBDPFX3BZLVdGQArCLKo=} 522 | dependencies: 523 | babel-runtime: 6.26.0 524 | babel-traverse: 6.26.0 525 | babel-types: 6.26.0 526 | dev: true 527 | 528 | /babel-helper-function-name/6.24.1: 529 | resolution: {integrity: sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=} 530 | dependencies: 531 | babel-helper-get-function-arity: 6.24.1 532 | babel-runtime: 6.26.0 533 | babel-template: 6.26.0 534 | babel-traverse: 6.26.0 535 | babel-types: 6.26.0 536 | dev: true 537 | 538 | /babel-helper-get-function-arity/6.24.1: 539 | resolution: {integrity: sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=} 540 | dependencies: 541 | babel-runtime: 6.26.0 542 | babel-types: 6.26.0 543 | dev: true 544 | 545 | /babel-helper-hoist-variables/6.24.1: 546 | resolution: {integrity: sha1-HssnaJydJVE+rbyZFKc/VAi+enY=} 547 | dependencies: 548 | babel-runtime: 6.26.0 549 | babel-types: 6.26.0 550 | dev: true 551 | 552 | /babel-helper-optimise-call-expression/6.24.1: 553 | resolution: {integrity: sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=} 554 | dependencies: 555 | babel-runtime: 6.26.0 556 | babel-types: 6.26.0 557 | dev: true 558 | 559 | /babel-helper-regex/6.26.0: 560 | resolution: {integrity: sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=} 561 | dependencies: 562 | babel-runtime: 6.26.0 563 | babel-types: 6.26.0 564 | lodash: 4.17.21 565 | dev: true 566 | 567 | /babel-helper-remap-async-to-generator/6.24.1: 568 | resolution: {integrity: sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=} 569 | dependencies: 570 | babel-helper-function-name: 6.24.1 571 | babel-runtime: 6.26.0 572 | babel-template: 6.26.0 573 | babel-traverse: 6.26.0 574 | babel-types: 6.26.0 575 | dev: true 576 | 577 | /babel-helper-replace-supers/6.24.1: 578 | resolution: {integrity: sha1-v22/5Dk40XNpohPKiov3S2qQqxo=} 579 | dependencies: 580 | babel-helper-optimise-call-expression: 6.24.1 581 | babel-messages: 6.23.0 582 | babel-runtime: 6.26.0 583 | babel-template: 6.26.0 584 | babel-traverse: 6.26.0 585 | babel-types: 6.26.0 586 | dev: true 587 | 588 | /babel-messages/6.23.0: 589 | resolution: {integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=} 590 | dependencies: 591 | babel-runtime: 6.26.0 592 | dev: true 593 | 594 | /babel-plugin-check-es2015-constants/6.22.0: 595 | resolution: {integrity: sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=} 596 | dependencies: 597 | babel-runtime: 6.26.0 598 | dev: true 599 | 600 | /babel-plugin-syntax-async-functions/6.13.0: 601 | resolution: {integrity: sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=} 602 | dev: true 603 | 604 | /babel-plugin-syntax-exponentiation-operator/6.13.0: 605 | resolution: {integrity: sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=} 606 | dev: true 607 | 608 | /babel-plugin-syntax-trailing-function-commas/6.22.0: 609 | resolution: {integrity: sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=} 610 | dev: true 611 | 612 | /babel-plugin-transform-async-to-generator/6.24.1: 613 | resolution: {integrity: sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=} 614 | dependencies: 615 | babel-helper-remap-async-to-generator: 6.24.1 616 | babel-plugin-syntax-async-functions: 6.13.0 617 | babel-runtime: 6.26.0 618 | dev: true 619 | 620 | /babel-plugin-transform-es2015-arrow-functions/6.22.0: 621 | resolution: {integrity: sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=} 622 | dependencies: 623 | babel-runtime: 6.26.0 624 | dev: true 625 | 626 | /babel-plugin-transform-es2015-block-scoped-functions/6.22.0: 627 | resolution: {integrity: sha1-u8UbSflk1wy42OC5ToICRs46YUE=} 628 | dependencies: 629 | babel-runtime: 6.26.0 630 | dev: true 631 | 632 | /babel-plugin-transform-es2015-block-scoping/6.26.0: 633 | resolution: {integrity: sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=} 634 | dependencies: 635 | babel-runtime: 6.26.0 636 | babel-template: 6.26.0 637 | babel-traverse: 6.26.0 638 | babel-types: 6.26.0 639 | lodash: 4.17.21 640 | dev: true 641 | 642 | /babel-plugin-transform-es2015-classes/6.24.1: 643 | resolution: {integrity: sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=} 644 | dependencies: 645 | babel-helper-define-map: 6.26.0 646 | babel-helper-function-name: 6.24.1 647 | babel-helper-optimise-call-expression: 6.24.1 648 | babel-helper-replace-supers: 6.24.1 649 | babel-messages: 6.23.0 650 | babel-runtime: 6.26.0 651 | babel-template: 6.26.0 652 | babel-traverse: 6.26.0 653 | babel-types: 6.26.0 654 | dev: true 655 | 656 | /babel-plugin-transform-es2015-computed-properties/6.24.1: 657 | resolution: {integrity: sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=} 658 | dependencies: 659 | babel-runtime: 6.26.0 660 | babel-template: 6.26.0 661 | dev: true 662 | 663 | /babel-plugin-transform-es2015-destructuring/6.23.0: 664 | resolution: {integrity: sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=} 665 | dependencies: 666 | babel-runtime: 6.26.0 667 | dev: true 668 | 669 | /babel-plugin-transform-es2015-duplicate-keys/6.24.1: 670 | resolution: {integrity: sha1-c+s9MQypaePvnskcU3QabxV2Qj4=} 671 | dependencies: 672 | babel-runtime: 6.26.0 673 | babel-types: 6.26.0 674 | dev: true 675 | 676 | /babel-plugin-transform-es2015-for-of/6.23.0: 677 | resolution: {integrity: sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=} 678 | dependencies: 679 | babel-runtime: 6.26.0 680 | dev: true 681 | 682 | /babel-plugin-transform-es2015-function-name/6.24.1: 683 | resolution: {integrity: sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=} 684 | dependencies: 685 | babel-helper-function-name: 6.24.1 686 | babel-runtime: 6.26.0 687 | babel-types: 6.26.0 688 | dev: true 689 | 690 | /babel-plugin-transform-es2015-literals/6.22.0: 691 | resolution: {integrity: sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=} 692 | dependencies: 693 | babel-runtime: 6.26.0 694 | dev: true 695 | 696 | /babel-plugin-transform-es2015-modules-amd/6.24.1: 697 | resolution: {integrity: sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=} 698 | dependencies: 699 | babel-plugin-transform-es2015-modules-commonjs: 6.26.2 700 | babel-runtime: 6.26.0 701 | babel-template: 6.26.0 702 | dev: true 703 | 704 | /babel-plugin-transform-es2015-modules-commonjs/6.26.2: 705 | resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==} 706 | dependencies: 707 | babel-plugin-transform-strict-mode: 6.24.1 708 | babel-runtime: 6.26.0 709 | babel-template: 6.26.0 710 | babel-types: 6.26.0 711 | dev: true 712 | 713 | /babel-plugin-transform-es2015-modules-systemjs/6.24.1: 714 | resolution: {integrity: sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=} 715 | dependencies: 716 | babel-helper-hoist-variables: 6.24.1 717 | babel-runtime: 6.26.0 718 | babel-template: 6.26.0 719 | dev: true 720 | 721 | /babel-plugin-transform-es2015-modules-umd/6.24.1: 722 | resolution: {integrity: sha1-rJl+YoXNGO1hdq22B9YCNErThGg=} 723 | dependencies: 724 | babel-plugin-transform-es2015-modules-amd: 6.24.1 725 | babel-runtime: 6.26.0 726 | babel-template: 6.26.0 727 | dev: true 728 | 729 | /babel-plugin-transform-es2015-object-super/6.24.1: 730 | resolution: {integrity: sha1-JM72muIcuDp/hgPa0CH1cusnj40=} 731 | dependencies: 732 | babel-helper-replace-supers: 6.24.1 733 | babel-runtime: 6.26.0 734 | dev: true 735 | 736 | /babel-plugin-transform-es2015-parameters/6.24.1: 737 | resolution: {integrity: sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=} 738 | dependencies: 739 | babel-helper-call-delegate: 6.24.1 740 | babel-helper-get-function-arity: 6.24.1 741 | babel-runtime: 6.26.0 742 | babel-template: 6.26.0 743 | babel-traverse: 6.26.0 744 | babel-types: 6.26.0 745 | dev: true 746 | 747 | /babel-plugin-transform-es2015-shorthand-properties/6.24.1: 748 | resolution: {integrity: sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=} 749 | dependencies: 750 | babel-runtime: 6.26.0 751 | babel-types: 6.26.0 752 | dev: true 753 | 754 | /babel-plugin-transform-es2015-spread/6.22.0: 755 | resolution: {integrity: sha1-1taKmfia7cRTbIGlQujdnxdG+NE=} 756 | dependencies: 757 | babel-runtime: 6.26.0 758 | dev: true 759 | 760 | /babel-plugin-transform-es2015-sticky-regex/6.24.1: 761 | resolution: {integrity: sha1-AMHNsaynERLN8M9hJsLta0V8zbw=} 762 | dependencies: 763 | babel-helper-regex: 6.26.0 764 | babel-runtime: 6.26.0 765 | babel-types: 6.26.0 766 | dev: true 767 | 768 | /babel-plugin-transform-es2015-template-literals/6.22.0: 769 | resolution: {integrity: sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=} 770 | dependencies: 771 | babel-runtime: 6.26.0 772 | dev: true 773 | 774 | /babel-plugin-transform-es2015-typeof-symbol/6.23.0: 775 | resolution: {integrity: sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=} 776 | dependencies: 777 | babel-runtime: 6.26.0 778 | dev: true 779 | 780 | /babel-plugin-transform-es2015-unicode-regex/6.24.1: 781 | resolution: {integrity: sha1-04sS9C6nMj9yk4fxinxa4frrNek=} 782 | dependencies: 783 | babel-helper-regex: 6.26.0 784 | babel-runtime: 6.26.0 785 | regexpu-core: 2.0.0 786 | dev: true 787 | 788 | /babel-plugin-transform-exponentiation-operator/6.24.1: 789 | resolution: {integrity: sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=} 790 | dependencies: 791 | babel-helper-builder-binary-assignment-operator-visitor: 6.24.1 792 | babel-plugin-syntax-exponentiation-operator: 6.13.0 793 | babel-runtime: 6.26.0 794 | dev: true 795 | 796 | /babel-plugin-transform-regenerator/6.26.0: 797 | resolution: {integrity: sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=} 798 | dependencies: 799 | regenerator-transform: 0.10.1 800 | dev: true 801 | 802 | /babel-plugin-transform-strict-mode/6.24.1: 803 | resolution: {integrity: sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=} 804 | dependencies: 805 | babel-runtime: 6.26.0 806 | babel-types: 6.26.0 807 | dev: true 808 | 809 | /babel-preset-env/1.7.0: 810 | resolution: {integrity: sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==} 811 | dependencies: 812 | babel-plugin-check-es2015-constants: 6.22.0 813 | babel-plugin-syntax-trailing-function-commas: 6.22.0 814 | babel-plugin-transform-async-to-generator: 6.24.1 815 | babel-plugin-transform-es2015-arrow-functions: 6.22.0 816 | babel-plugin-transform-es2015-block-scoped-functions: 6.22.0 817 | babel-plugin-transform-es2015-block-scoping: 6.26.0 818 | babel-plugin-transform-es2015-classes: 6.24.1 819 | babel-plugin-transform-es2015-computed-properties: 6.24.1 820 | babel-plugin-transform-es2015-destructuring: 6.23.0 821 | babel-plugin-transform-es2015-duplicate-keys: 6.24.1 822 | babel-plugin-transform-es2015-for-of: 6.23.0 823 | babel-plugin-transform-es2015-function-name: 6.24.1 824 | babel-plugin-transform-es2015-literals: 6.22.0 825 | babel-plugin-transform-es2015-modules-amd: 6.24.1 826 | babel-plugin-transform-es2015-modules-commonjs: 6.26.2 827 | babel-plugin-transform-es2015-modules-systemjs: 6.24.1 828 | babel-plugin-transform-es2015-modules-umd: 6.24.1 829 | babel-plugin-transform-es2015-object-super: 6.24.1 830 | babel-plugin-transform-es2015-parameters: 6.24.1 831 | babel-plugin-transform-es2015-shorthand-properties: 6.24.1 832 | babel-plugin-transform-es2015-spread: 6.22.0 833 | babel-plugin-transform-es2015-sticky-regex: 6.24.1 834 | babel-plugin-transform-es2015-template-literals: 6.22.0 835 | babel-plugin-transform-es2015-typeof-symbol: 6.23.0 836 | babel-plugin-transform-es2015-unicode-regex: 6.24.1 837 | babel-plugin-transform-exponentiation-operator: 6.24.1 838 | babel-plugin-transform-regenerator: 6.26.0 839 | browserslist: 3.2.8 840 | invariant: 2.2.4 841 | semver: 5.7.1 842 | dev: true 843 | 844 | /babel-runtime/6.26.0: 845 | resolution: {integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4=} 846 | dependencies: 847 | core-js: 2.6.12 848 | regenerator-runtime: 0.11.1 849 | dev: true 850 | 851 | /babel-template/6.26.0: 852 | resolution: {integrity: sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=} 853 | dependencies: 854 | babel-runtime: 6.26.0 855 | babel-traverse: 6.26.0 856 | babel-types: 6.26.0 857 | babylon: 6.18.0 858 | lodash: 4.17.21 859 | dev: true 860 | 861 | /babel-traverse/6.26.0: 862 | resolution: {integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=} 863 | dependencies: 864 | babel-code-frame: 6.26.0 865 | babel-messages: 6.23.0 866 | babel-runtime: 6.26.0 867 | babel-types: 6.26.0 868 | babylon: 6.18.0 869 | debug: 2.6.9 870 | globals: 9.18.0 871 | invariant: 2.2.4 872 | lodash: 4.17.21 873 | dev: true 874 | 875 | /babel-types/6.26.0: 876 | resolution: {integrity: sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=} 877 | dependencies: 878 | babel-runtime: 6.26.0 879 | esutils: 2.0.3 880 | lodash: 4.17.21 881 | to-fast-properties: 1.0.3 882 | dev: true 883 | 884 | /babylon/6.18.0: 885 | resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} 886 | hasBin: true 887 | dev: true 888 | 889 | /binary-extensions/2.2.0: 890 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 891 | engines: {node: '>=8'} 892 | dev: true 893 | 894 | /bluebird/3.7.2: 895 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} 896 | dev: true 897 | 898 | /braces/3.0.2: 899 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 900 | engines: {node: '>=8'} 901 | dependencies: 902 | fill-range: 7.0.1 903 | dev: true 904 | 905 | /browserslist/3.2.8: 906 | resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} 907 | hasBin: true 908 | dependencies: 909 | caniuse-lite: 1.0.30001294 910 | electron-to-chromium: 1.4.30 911 | dev: true 912 | 913 | /browserslist/4.19.1: 914 | resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==} 915 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 916 | hasBin: true 917 | dependencies: 918 | caniuse-lite: 1.0.30001294 919 | electron-to-chromium: 1.4.30 920 | escalade: 3.1.1 921 | node-releases: 2.0.1 922 | picocolors: 1.0.0 923 | dev: true 924 | 925 | /cac/6.7.12: 926 | resolution: {integrity: sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA==} 927 | engines: {node: '>=8'} 928 | dev: true 929 | 930 | /camelcase/5.3.1: 931 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 932 | engines: {node: '>=6'} 933 | dev: true 934 | 935 | /caniuse-lite/1.0.30001294: 936 | resolution: {integrity: sha512-LiMlrs1nSKZ8qkNhpUf5KD0Al1KCBE3zaT7OLOwEkagXMEDij98SiOovn9wxVGQpklk9vVC/pUSqgYmkmKOS8g==} 937 | dev: true 938 | 939 | /chalk/1.1.3: 940 | resolution: {integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=} 941 | engines: {node: '>=0.10.0'} 942 | dependencies: 943 | ansi-styles: 2.2.1 944 | escape-string-regexp: 1.0.5 945 | has-ansi: 2.0.0 946 | strip-ansi: 3.0.1 947 | supports-color: 2.0.0 948 | dev: true 949 | 950 | /chalk/2.4.2: 951 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 952 | engines: {node: '>=4'} 953 | dependencies: 954 | ansi-styles: 3.2.1 955 | escape-string-regexp: 1.0.5 956 | supports-color: 5.5.0 957 | dev: true 958 | 959 | /chokidar/3.5.2: 960 | resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} 961 | engines: {node: '>= 8.10.0'} 962 | dependencies: 963 | anymatch: 3.1.2 964 | braces: 3.0.2 965 | glob-parent: 5.1.2 966 | is-binary-path: 2.1.0 967 | is-glob: 4.0.3 968 | normalize-path: 3.0.0 969 | readdirp: 3.6.0 970 | optionalDependencies: 971 | fsevents: 2.3.2 972 | dev: true 973 | 974 | /color-convert/1.9.3: 975 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 976 | dependencies: 977 | color-name: 1.1.3 978 | dev: true 979 | 980 | /color-name/1.1.3: 981 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 982 | dev: true 983 | 984 | /colorette/2.0.16: 985 | resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} 986 | dev: true 987 | 988 | /consola/2.15.3: 989 | resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} 990 | dev: true 991 | 992 | /consolidate/0.15.1: 993 | resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==} 994 | engines: {node: '>= 0.10.0'} 995 | dependencies: 996 | bluebird: 3.7.2 997 | dev: true 998 | 999 | /consolidate/0.16.0: 1000 | resolution: {integrity: sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==} 1001 | engines: {node: '>= 0.10.0'} 1002 | dependencies: 1003 | bluebird: 3.7.2 1004 | dev: true 1005 | 1006 | /convert-source-map/1.8.0: 1007 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 1008 | dependencies: 1009 | safe-buffer: 5.1.2 1010 | dev: true 1011 | 1012 | /core-js/2.6.12: 1013 | resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} 1014 | deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. 1015 | requiresBuild: true 1016 | dev: true 1017 | 1018 | /cssesc/3.0.0: 1019 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1020 | engines: {node: '>=4'} 1021 | hasBin: true 1022 | dev: true 1023 | 1024 | /de-indent/1.0.2: 1025 | resolution: {integrity: sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=} 1026 | dev: true 1027 | 1028 | /debug/2.6.9: 1029 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1030 | dependencies: 1031 | ms: 2.0.0 1032 | dev: true 1033 | 1034 | /debug/4.3.3: 1035 | resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} 1036 | engines: {node: '>=6.0'} 1037 | peerDependencies: 1038 | supports-color: '*' 1039 | peerDependenciesMeta: 1040 | supports-color: 1041 | optional: true 1042 | dependencies: 1043 | ms: 2.1.2 1044 | dev: true 1045 | 1046 | /electron-to-chromium/1.4.30: 1047 | resolution: {integrity: sha512-609z9sIMxDHg+TcR/VB3MXwH+uwtrYyeAwWc/orhnr90ixs6WVGSrt85CDLGUdNnLqCA7liv426V20EecjvflQ==} 1048 | dev: true 1049 | 1050 | /esbuild-android-arm64/0.13.15: 1051 | resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==} 1052 | cpu: [arm64] 1053 | os: [android] 1054 | requiresBuild: true 1055 | dev: true 1056 | optional: true 1057 | 1058 | /esbuild-darwin-64/0.13.15: 1059 | resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==} 1060 | cpu: [x64] 1061 | os: [darwin] 1062 | requiresBuild: true 1063 | dev: true 1064 | optional: true 1065 | 1066 | /esbuild-darwin-arm64/0.13.15: 1067 | resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==} 1068 | cpu: [arm64] 1069 | os: [darwin] 1070 | requiresBuild: true 1071 | dev: true 1072 | optional: true 1073 | 1074 | /esbuild-freebsd-64/0.13.15: 1075 | resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==} 1076 | cpu: [x64] 1077 | os: [freebsd] 1078 | requiresBuild: true 1079 | dev: true 1080 | optional: true 1081 | 1082 | /esbuild-freebsd-arm64/0.13.15: 1083 | resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==} 1084 | cpu: [arm64] 1085 | os: [freebsd] 1086 | requiresBuild: true 1087 | dev: true 1088 | optional: true 1089 | 1090 | /esbuild-linux-32/0.13.15: 1091 | resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==} 1092 | cpu: [ia32] 1093 | os: [linux] 1094 | requiresBuild: true 1095 | dev: true 1096 | optional: true 1097 | 1098 | /esbuild-linux-64/0.13.15: 1099 | resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==} 1100 | cpu: [x64] 1101 | os: [linux] 1102 | requiresBuild: true 1103 | dev: true 1104 | optional: true 1105 | 1106 | /esbuild-linux-arm/0.13.15: 1107 | resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==} 1108 | cpu: [arm] 1109 | os: [linux] 1110 | requiresBuild: true 1111 | dev: true 1112 | optional: true 1113 | 1114 | /esbuild-linux-arm64/0.13.15: 1115 | resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==} 1116 | cpu: [arm64] 1117 | os: [linux] 1118 | requiresBuild: true 1119 | dev: true 1120 | optional: true 1121 | 1122 | /esbuild-linux-mips64le/0.13.15: 1123 | resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==} 1124 | cpu: [mips64el] 1125 | os: [linux] 1126 | requiresBuild: true 1127 | dev: true 1128 | optional: true 1129 | 1130 | /esbuild-linux-ppc64le/0.13.15: 1131 | resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==} 1132 | cpu: [ppc64] 1133 | os: [linux] 1134 | requiresBuild: true 1135 | dev: true 1136 | optional: true 1137 | 1138 | /esbuild-netbsd-64/0.13.15: 1139 | resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==} 1140 | cpu: [x64] 1141 | os: [netbsd] 1142 | requiresBuild: true 1143 | dev: true 1144 | optional: true 1145 | 1146 | /esbuild-openbsd-64/0.13.15: 1147 | resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==} 1148 | cpu: [x64] 1149 | os: [openbsd] 1150 | requiresBuild: true 1151 | dev: true 1152 | optional: true 1153 | 1154 | /esbuild-sunos-64/0.13.15: 1155 | resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==} 1156 | cpu: [x64] 1157 | os: [sunos] 1158 | requiresBuild: true 1159 | dev: true 1160 | optional: true 1161 | 1162 | /esbuild-windows-32/0.13.15: 1163 | resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==} 1164 | cpu: [ia32] 1165 | os: [win32] 1166 | requiresBuild: true 1167 | dev: true 1168 | optional: true 1169 | 1170 | /esbuild-windows-64/0.13.15: 1171 | resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==} 1172 | cpu: [x64] 1173 | os: [win32] 1174 | requiresBuild: true 1175 | dev: true 1176 | optional: true 1177 | 1178 | /esbuild-windows-arm64/0.13.15: 1179 | resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==} 1180 | cpu: [arm64] 1181 | os: [win32] 1182 | requiresBuild: true 1183 | dev: true 1184 | optional: true 1185 | 1186 | /esbuild/0.13.15: 1187 | resolution: {integrity: sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==} 1188 | hasBin: true 1189 | requiresBuild: true 1190 | optionalDependencies: 1191 | esbuild-android-arm64: 0.13.15 1192 | esbuild-darwin-64: 0.13.15 1193 | esbuild-darwin-arm64: 0.13.15 1194 | esbuild-freebsd-64: 0.13.15 1195 | esbuild-freebsd-arm64: 0.13.15 1196 | esbuild-linux-32: 0.13.15 1197 | esbuild-linux-64: 0.13.15 1198 | esbuild-linux-arm: 0.13.15 1199 | esbuild-linux-arm64: 0.13.15 1200 | esbuild-linux-mips64le: 0.13.15 1201 | esbuild-linux-ppc64le: 0.13.15 1202 | esbuild-netbsd-64: 0.13.15 1203 | esbuild-openbsd-64: 0.13.15 1204 | esbuild-sunos-64: 0.13.15 1205 | esbuild-windows-32: 0.13.15 1206 | esbuild-windows-64: 0.13.15 1207 | esbuild-windows-arm64: 0.13.15 1208 | dev: true 1209 | 1210 | /escalade/3.1.1: 1211 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1212 | engines: {node: '>=6'} 1213 | dev: true 1214 | 1215 | /escape-string-regexp/1.0.5: 1216 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 1217 | engines: {node: '>=0.8.0'} 1218 | dev: true 1219 | 1220 | /estree-walker/2.0.2: 1221 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1222 | dev: true 1223 | 1224 | /esutils/2.0.3: 1225 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1226 | engines: {node: '>=0.10.0'} 1227 | dev: true 1228 | 1229 | /fill-range/7.0.1: 1230 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1231 | engines: {node: '>=8'} 1232 | dependencies: 1233 | to-regex-range: 5.0.1 1234 | dev: true 1235 | 1236 | /fs-extra/9.1.0: 1237 | resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} 1238 | engines: {node: '>=10'} 1239 | dependencies: 1240 | at-least-node: 1.0.0 1241 | graceful-fs: 4.2.8 1242 | jsonfile: 6.1.0 1243 | universalify: 2.0.0 1244 | dev: true 1245 | 1246 | /fsevents/2.3.2: 1247 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1248 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1249 | os: [darwin] 1250 | requiresBuild: true 1251 | dev: true 1252 | optional: true 1253 | 1254 | /function-bind/1.1.1: 1255 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1256 | dev: true 1257 | 1258 | /gensync/1.0.0-beta.2: 1259 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1260 | engines: {node: '>=6.9.0'} 1261 | dev: true 1262 | 1263 | /glob-parent/5.1.2: 1264 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1265 | engines: {node: '>= 6'} 1266 | dependencies: 1267 | is-glob: 4.0.3 1268 | dev: true 1269 | 1270 | /globals/11.12.0: 1271 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1272 | engines: {node: '>=4'} 1273 | dev: true 1274 | 1275 | /globals/9.18.0: 1276 | resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} 1277 | engines: {node: '>=0.10.0'} 1278 | dev: true 1279 | 1280 | /graceful-fs/4.2.8: 1281 | resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} 1282 | dev: true 1283 | 1284 | /has-ansi/2.0.0: 1285 | resolution: {integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=} 1286 | engines: {node: '>=0.10.0'} 1287 | dependencies: 1288 | ansi-regex: 2.1.1 1289 | dev: true 1290 | 1291 | /has-flag/3.0.0: 1292 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 1293 | engines: {node: '>=4'} 1294 | dev: true 1295 | 1296 | /has/1.0.3: 1297 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1298 | engines: {node: '>= 0.4.0'} 1299 | dependencies: 1300 | function-bind: 1.1.1 1301 | dev: true 1302 | 1303 | /hash-sum/1.0.2: 1304 | resolution: {integrity: sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=} 1305 | dev: true 1306 | 1307 | /hash-sum/2.0.0: 1308 | resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} 1309 | dev: true 1310 | 1311 | /he/1.2.0: 1312 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1313 | hasBin: true 1314 | dev: true 1315 | 1316 | /html-tags/2.0.0: 1317 | resolution: {integrity: sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=} 1318 | engines: {node: '>=4'} 1319 | dev: true 1320 | 1321 | /immutable/4.0.0: 1322 | resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==} 1323 | dev: true 1324 | 1325 | /invariant/2.2.4: 1326 | resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} 1327 | dependencies: 1328 | loose-envify: 1.4.0 1329 | dev: true 1330 | 1331 | /is-binary-path/2.1.0: 1332 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1333 | engines: {node: '>=8'} 1334 | dependencies: 1335 | binary-extensions: 2.2.0 1336 | dev: true 1337 | 1338 | /is-core-module/2.8.0: 1339 | resolution: {integrity: sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==} 1340 | dependencies: 1341 | has: 1.0.3 1342 | dev: true 1343 | 1344 | /is-extglob/2.1.1: 1345 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 1346 | engines: {node: '>=0.10.0'} 1347 | dev: true 1348 | 1349 | /is-glob/4.0.3: 1350 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1351 | engines: {node: '>=0.10.0'} 1352 | dependencies: 1353 | is-extglob: 2.1.1 1354 | dev: true 1355 | 1356 | /is-number/7.0.0: 1357 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1358 | engines: {node: '>=0.12.0'} 1359 | dev: true 1360 | 1361 | /js-tokens/3.0.2: 1362 | resolution: {integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls=} 1363 | dev: true 1364 | 1365 | /js-tokens/4.0.0: 1366 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1367 | dev: true 1368 | 1369 | /jsesc/0.5.0: 1370 | resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=} 1371 | hasBin: true 1372 | dev: true 1373 | 1374 | /jsesc/2.5.2: 1375 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1376 | engines: {node: '>=4'} 1377 | hasBin: true 1378 | dev: true 1379 | 1380 | /json5/2.2.0: 1381 | resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} 1382 | engines: {node: '>=6'} 1383 | hasBin: true 1384 | dependencies: 1385 | minimist: 1.2.5 1386 | dev: true 1387 | 1388 | /jsonfile/6.1.0: 1389 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1390 | dependencies: 1391 | universalify: 2.0.0 1392 | optionalDependencies: 1393 | graceful-fs: 4.2.8 1394 | dev: true 1395 | 1396 | /kirbyup/0.21.1_postcss@8.4.5: 1397 | resolution: {integrity: sha512-EPm7EoQMLhTSfm+WDGgVmHgFb8EDxVLrJf65IQgqz+S90G4GbSnTkyBShXzVTjfd2jbuN+JgEOaB/ahp9Jt4fg==} 1398 | engines: {node: '>=14'} 1399 | hasBin: true 1400 | dependencies: 1401 | cac: 6.7.12 1402 | chokidar: 3.5.2 1403 | colorette: 2.0.16 1404 | consola: 2.15.3 1405 | pathe: 0.2.0 1406 | postcss-dir-pseudo-class: 6.0.1_postcss@8.4.5 1407 | postcss-logical: 5.0.1_postcss@8.4.5 1408 | sass: 1.47.0 1409 | vite: 2.7.10_sass@1.47.0 1410 | vite-plugin-vue2: 1.9.0_0942e2da5dc468c8f4e6d1df85edc06f 1411 | vue: 2.6.14 1412 | vue-template-compiler: 2.6.14 1413 | transitivePeerDependencies: 1414 | - less 1415 | - postcss 1416 | - stylus 1417 | - supports-color 1418 | dev: true 1419 | 1420 | /lodash.kebabcase/4.1.1: 1421 | resolution: {integrity: sha1-hImxyw0p/4gZXM7KRI/21swpXDY=} 1422 | dev: true 1423 | 1424 | /lodash/4.17.21: 1425 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1426 | dev: true 1427 | 1428 | /loose-envify/1.4.0: 1429 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1430 | hasBin: true 1431 | dependencies: 1432 | js-tokens: 4.0.0 1433 | dev: true 1434 | 1435 | /lru-cache/4.1.5: 1436 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 1437 | dependencies: 1438 | pseudomap: 1.0.2 1439 | yallist: 2.1.2 1440 | dev: true 1441 | 1442 | /magic-string/0.25.7: 1443 | resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} 1444 | dependencies: 1445 | sourcemap-codec: 1.4.8 1446 | dev: true 1447 | 1448 | /merge-source-map/1.1.0: 1449 | resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==} 1450 | dependencies: 1451 | source-map: 0.6.1 1452 | dev: true 1453 | 1454 | /minimist/1.2.5: 1455 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} 1456 | dev: true 1457 | 1458 | /ms/2.0.0: 1459 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} 1460 | dev: true 1461 | 1462 | /ms/2.1.2: 1463 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1464 | dev: true 1465 | 1466 | /nanoid/3.1.30: 1467 | resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==} 1468 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1469 | hasBin: true 1470 | dev: true 1471 | 1472 | /node-releases/2.0.1: 1473 | resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} 1474 | dev: true 1475 | 1476 | /normalize-path/3.0.0: 1477 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1478 | engines: {node: '>=0.10.0'} 1479 | dev: true 1480 | 1481 | /path-parse/1.0.7: 1482 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1483 | dev: true 1484 | 1485 | /pathe/0.2.0: 1486 | resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} 1487 | dev: true 1488 | 1489 | /picocolors/0.2.1: 1490 | resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} 1491 | dev: true 1492 | 1493 | /picocolors/1.0.0: 1494 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1495 | dev: true 1496 | 1497 | /picomatch/2.3.0: 1498 | resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} 1499 | engines: {node: '>=8.6'} 1500 | dev: true 1501 | 1502 | /postcss-dir-pseudo-class/6.0.1_postcss@8.4.5: 1503 | resolution: {integrity: sha512-nA6+XVUc5VDe6LrJ5KWFqJ05dxZXzoYiUQJFZSuwLW/8aI462w7gCEhB+RnOA+N3dtrj8B2WTSfcjCac6RJW0A==} 1504 | engines: {node: ^12 || ^14 || >=16} 1505 | hasBin: true 1506 | peerDependencies: 1507 | postcss: ^8.3 1508 | dependencies: 1509 | postcss: 8.4.5 1510 | postcss-selector-parser: 6.0.8 1511 | dev: true 1512 | 1513 | /postcss-logical/5.0.1_postcss@8.4.5: 1514 | resolution: {integrity: sha512-cKekWCoZrxdQktbj8PyCOqQWxsYAPyHjoeBPedkQzfWuEqRm0KVFRHypsHAiH2dDVUae52yx8PBtWS+V3BqT5w==} 1515 | engines: {node: ^12 || ^14 || >=16} 1516 | hasBin: true 1517 | peerDependencies: 1518 | postcss: ^8.3 1519 | dependencies: 1520 | postcss: 8.4.5 1521 | dev: true 1522 | 1523 | /postcss-selector-parser/6.0.8: 1524 | resolution: {integrity: sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==} 1525 | engines: {node: '>=4'} 1526 | dependencies: 1527 | cssesc: 3.0.0 1528 | util-deprecate: 1.0.2 1529 | dev: true 1530 | 1531 | /postcss/7.0.39: 1532 | resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} 1533 | engines: {node: '>=6.0.0'} 1534 | dependencies: 1535 | picocolors: 0.2.1 1536 | source-map: 0.6.1 1537 | dev: true 1538 | 1539 | /postcss/8.4.5: 1540 | resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==} 1541 | engines: {node: ^10 || ^12 || >=14} 1542 | dependencies: 1543 | nanoid: 3.1.30 1544 | picocolors: 1.0.0 1545 | source-map-js: 1.0.1 1546 | dev: true 1547 | 1548 | /prettier/2.5.1: 1549 | resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==} 1550 | engines: {node: '>=10.13.0'} 1551 | hasBin: true 1552 | dev: true 1553 | 1554 | /private/0.1.8: 1555 | resolution: {integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==} 1556 | engines: {node: '>= 0.6'} 1557 | dev: true 1558 | 1559 | /pseudomap/1.0.2: 1560 | resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} 1561 | dev: true 1562 | 1563 | /querystring/0.2.1: 1564 | resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} 1565 | engines: {node: '>=0.4.x'} 1566 | deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. 1567 | dev: true 1568 | 1569 | /readdirp/3.6.0: 1570 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1571 | engines: {node: '>=8.10.0'} 1572 | dependencies: 1573 | picomatch: 2.3.0 1574 | dev: true 1575 | 1576 | /regenerate/1.4.2: 1577 | resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} 1578 | dev: true 1579 | 1580 | /regenerator-runtime/0.11.1: 1581 | resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} 1582 | dev: true 1583 | 1584 | /regenerator-transform/0.10.1: 1585 | resolution: {integrity: sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==} 1586 | dependencies: 1587 | babel-runtime: 6.26.0 1588 | babel-types: 6.26.0 1589 | private: 0.1.8 1590 | dev: true 1591 | 1592 | /regexpu-core/2.0.0: 1593 | resolution: {integrity: sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=} 1594 | dependencies: 1595 | regenerate: 1.4.2 1596 | regjsgen: 0.2.0 1597 | regjsparser: 0.1.5 1598 | dev: true 1599 | 1600 | /regjsgen/0.2.0: 1601 | resolution: {integrity: sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=} 1602 | dev: true 1603 | 1604 | /regjsparser/0.1.5: 1605 | resolution: {integrity: sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=} 1606 | hasBin: true 1607 | dependencies: 1608 | jsesc: 0.5.0 1609 | dev: true 1610 | 1611 | /resolve/1.20.0: 1612 | resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} 1613 | dependencies: 1614 | is-core-module: 2.8.0 1615 | path-parse: 1.0.7 1616 | dev: true 1617 | 1618 | /rollup/2.62.0: 1619 | resolution: {integrity: sha512-cJEQq2gwB0GWMD3rYImefQTSjrPYaC6s4J9pYqnstVLJ1CHa/aZNVkD4Epuvg4iLeMA4KRiq7UM7awKK6j7jcw==} 1620 | engines: {node: '>=10.0.0'} 1621 | hasBin: true 1622 | optionalDependencies: 1623 | fsevents: 2.3.2 1624 | dev: true 1625 | 1626 | /safe-buffer/5.1.2: 1627 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1628 | dev: true 1629 | 1630 | /sass/1.47.0: 1631 | resolution: {integrity: sha512-GtXwvwgD7/6MLUZPnlA5/8cdRgC9SzT5kAnnJMRmEZQFRE3J56Foswig4NyyyQGsnmNvg6EUM/FP0Pe9Y2zywQ==} 1632 | engines: {node: '>=8.9.0'} 1633 | hasBin: true 1634 | dependencies: 1635 | chokidar: 3.5.2 1636 | immutable: 4.0.0 1637 | source-map-js: 1.0.1 1638 | dev: true 1639 | 1640 | /semver/5.7.1: 1641 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 1642 | hasBin: true 1643 | dev: true 1644 | 1645 | /semver/6.3.0: 1646 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1647 | hasBin: true 1648 | dev: true 1649 | 1650 | /slash/3.0.0: 1651 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1652 | engines: {node: '>=8'} 1653 | dev: true 1654 | 1655 | /source-map-js/1.0.1: 1656 | resolution: {integrity: sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==} 1657 | engines: {node: '>=0.10.0'} 1658 | dev: true 1659 | 1660 | /source-map/0.5.7: 1661 | resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} 1662 | engines: {node: '>=0.10.0'} 1663 | dev: true 1664 | 1665 | /source-map/0.6.1: 1666 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1667 | engines: {node: '>=0.10.0'} 1668 | dev: true 1669 | 1670 | /source-map/0.7.3: 1671 | resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} 1672 | engines: {node: '>= 8'} 1673 | dev: true 1674 | 1675 | /sourcemap-codec/1.4.8: 1676 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1677 | dev: true 1678 | 1679 | /strip-ansi/3.0.1: 1680 | resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=} 1681 | engines: {node: '>=0.10.0'} 1682 | dependencies: 1683 | ansi-regex: 2.1.1 1684 | dev: true 1685 | 1686 | /supports-color/2.0.0: 1687 | resolution: {integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=} 1688 | engines: {node: '>=0.8.0'} 1689 | dev: true 1690 | 1691 | /supports-color/5.5.0: 1692 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1693 | engines: {node: '>=4'} 1694 | dependencies: 1695 | has-flag: 3.0.0 1696 | dev: true 1697 | 1698 | /svg-tags/1.0.0: 1699 | resolution: {integrity: sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=} 1700 | dev: true 1701 | 1702 | /to-fast-properties/1.0.3: 1703 | resolution: {integrity: sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=} 1704 | engines: {node: '>=0.10.0'} 1705 | dev: true 1706 | 1707 | /to-fast-properties/2.0.0: 1708 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} 1709 | engines: {node: '>=4'} 1710 | dev: true 1711 | 1712 | /to-regex-range/5.0.1: 1713 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1714 | engines: {node: '>=8.0'} 1715 | dependencies: 1716 | is-number: 7.0.0 1717 | dev: true 1718 | 1719 | /universalify/2.0.0: 1720 | resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} 1721 | engines: {node: '>= 10.0.0'} 1722 | dev: true 1723 | 1724 | /util-deprecate/1.0.2: 1725 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 1726 | dev: true 1727 | 1728 | /vite-plugin-vue2/1.9.0_0942e2da5dc468c8f4e6d1df85edc06f: 1729 | resolution: {integrity: sha512-4vmcoiOmOTGjRnA0hk8tHYqk96ZxRpe4AmeCqJJ8jQuNo+SDF1zXPyhxAUIK1tuK354No77WVHHIimVvZQuvIA==} 1730 | peerDependencies: 1731 | vite: ^2.0.0-beta.23 1732 | vue-template-compiler: ^2.2.0 1733 | dependencies: 1734 | '@babel/core': 7.16.7 1735 | '@babel/parser': 7.16.7 1736 | '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.16.7 1737 | '@babel/plugin-proposal-decorators': 7.16.7_@babel+core@7.16.7 1738 | '@babel/plugin-transform-typescript': 7.16.7_@babel+core@7.16.7 1739 | '@rollup/pluginutils': 4.1.2 1740 | '@vue/babel-helper-vue-jsx-merge-props': 1.2.1 1741 | '@vue/babel-preset-jsx': 1.2.4_@babel+core@7.16.7 1742 | '@vue/component-compiler-utils': 3.3.0 1743 | babel-preset-env: 1.7.0 1744 | consolidate: 0.16.0 1745 | debug: 4.3.3 1746 | fs-extra: 9.1.0 1747 | hash-sum: 2.0.0 1748 | magic-string: 0.25.7 1749 | prettier: 2.5.1 1750 | querystring: 0.2.1 1751 | rollup: 2.62.0 1752 | slash: 3.0.0 1753 | source-map: 0.7.3 1754 | vite: 2.7.10_sass@1.47.0 1755 | vue-template-compiler: 2.6.14 1756 | vue-template-es2015-compiler: 1.9.1 1757 | transitivePeerDependencies: 1758 | - supports-color 1759 | dev: true 1760 | 1761 | /vite/2.7.10_sass@1.47.0: 1762 | resolution: {integrity: sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==} 1763 | engines: {node: '>=12.2.0'} 1764 | hasBin: true 1765 | peerDependencies: 1766 | less: '*' 1767 | sass: '*' 1768 | stylus: '*' 1769 | peerDependenciesMeta: 1770 | less: 1771 | optional: true 1772 | sass: 1773 | optional: true 1774 | stylus: 1775 | optional: true 1776 | dependencies: 1777 | esbuild: 0.13.15 1778 | postcss: 8.4.5 1779 | resolve: 1.20.0 1780 | rollup: 2.62.0 1781 | sass: 1.47.0 1782 | optionalDependencies: 1783 | fsevents: 2.3.2 1784 | dev: true 1785 | 1786 | /vue-template-compiler/2.6.14: 1787 | resolution: {integrity: sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==} 1788 | dependencies: 1789 | de-indent: 1.0.2 1790 | he: 1.2.0 1791 | dev: true 1792 | 1793 | /vue-template-es2015-compiler/1.9.1: 1794 | resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==} 1795 | dev: true 1796 | 1797 | /vue/2.6.14: 1798 | resolution: {integrity: sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==} 1799 | dev: true 1800 | 1801 | /yallist/2.1.2: 1802 | resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=} 1803 | dev: true 1804 | -------------------------------------------------------------------------------- /src/Input/ListInput.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 90 | 91 | 101 | -------------------------------------------------------------------------------- /src/Marks/Highlight.js: -------------------------------------------------------------------------------- 1 | import Mark from '@/Writer/Mark' 2 | 3 | export default class Highlight extends Mark { 4 | get button() { 5 | return { 6 | icon: 'star', 7 | label: window.panel.$t('coralic.extendedWriter.nodes.highlight') 8 | } 9 | } 10 | 11 | commands() { 12 | return () => this.toggle() 13 | } 14 | 15 | get name() { 16 | return 'highlight' 17 | } 18 | 19 | get schema() { 20 | return { 21 | parseDOM: [{ tag: 'mark' }], 22 | toDOM: (node) => [ 23 | 'mark', 24 | { 25 | ...node.attrs 26 | }, 27 | 0 28 | ] 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Nodes/Doc.js: -------------------------------------------------------------------------------- 1 | import Node from '@/Writer/Node' 2 | 3 | export default class Doc extends Node { 4 | get defaults() { 5 | return { 6 | inline: false 7 | } 8 | } 9 | 10 | get name() { 11 | return 'doc' 12 | } 13 | 14 | get schema() { 15 | return { 16 | content: this.options.inline ? 'paragraph+' : 'block+' 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Nodes/Heading.js: -------------------------------------------------------------------------------- 1 | import Node from '@/Writer/Node' 2 | 3 | export default class Heading extends Node { 4 | get button() { 5 | return this.options.levels.map((level) => { 6 | return { 7 | id: `h${level}`, 8 | command: `h${level}`, 9 | icon: `h${level}`, 10 | label: window.panel.$t('toolbar.button.heading.' + level), 11 | attrs: { level }, 12 | name: this.name, 13 | when: ['heading', 'paragraph'] 14 | } 15 | }) 16 | } 17 | 18 | commands({ type, schema, utils }) { 19 | let commands = { 20 | toggleHeading: (attrs) => 21 | utils.toggleBlockType(type, schema.nodes.paragraph, attrs) 22 | } 23 | 24 | this.options.levels.forEach((level) => { 25 | commands[`h${level}`] = () => 26 | utils.toggleBlockType(type, schema.nodes.paragraph, { level }) 27 | }) 28 | 29 | return commands 30 | } 31 | 32 | get defaults() { 33 | return { 34 | levels: [1, 2, 3, 4, 5, 6] 35 | } 36 | } 37 | 38 | inputRules({ type, utils }) { 39 | return this.options.levels.map((level) => 40 | utils.textblockTypeInputRule( 41 | new RegExp(`^(#{1,${level}})\\s$`), 42 | type, 43 | () => ({ level }) 44 | ) 45 | ) 46 | } 47 | 48 | keys({ type, utils }) { 49 | return this.options.levels.reduce( 50 | (items, level) => ({ 51 | ...items, 52 | ...{ 53 | [`Shift-Ctrl-${level}`]: utils.setBlockType(type, { level }) 54 | } 55 | }), 56 | {} 57 | ) 58 | } 59 | 60 | get name() { 61 | return 'heading' 62 | } 63 | 64 | get schema() { 65 | return { 66 | attrs: { 67 | level: { 68 | default: 1 69 | } 70 | }, 71 | content: 'inline*', 72 | group: 'block', 73 | defining: true, 74 | draggable: false, 75 | parseDOM: this.options.levels.map((level) => ({ 76 | tag: `h${level}`, 77 | attrs: { level } 78 | })), 79 | toDOM: (node) => [`h${node.attrs.level}`, 0] 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/Nodes/LargerParagraph.js: -------------------------------------------------------------------------------- 1 | import Node from '@/Writer/Node' 2 | 3 | export default class largerParagraph extends Node { 4 | get button() { 5 | return { 6 | id: this.name, 7 | icon: 'quote', 8 | label: window.panel.$t('coralic.extendedWriter.nodes.largerParagraph'), 9 | name: this.name 10 | } 11 | } 12 | 13 | commands({ type, schema, utils }) { 14 | return { 15 | largerParagraph: attrs => utils.toggleBlockType(type, schema.nodes.paragraph, attrs) 16 | } 17 | } 18 | 19 | get name() { 20 | return 'largerParagraph' 21 | } 22 | 23 | get schema() { 24 | return { 25 | content: 'inline*', 26 | group: 'block', 27 | draggable: false, 28 | parseDOM: [ 29 | { 30 | tag: 'div', 31 | getAttrs: () => { 32 | return { class: '-larger-paragraph' } 33 | } 34 | } 35 | ], 36 | toDOM: () => ['div', { class: '-larger-paragraph' }, 0] 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/Nodes/ListDoc.js: -------------------------------------------------------------------------------- 1 | import Doc from '@/Nodes/Doc' 2 | 3 | export default class ListDoc extends Doc { 4 | get defaults() { 5 | return { 6 | nodes: ['bulletList', 'orderedList'] 7 | } 8 | } 9 | 10 | get schema() { 11 | return { 12 | content: 13 | this.options.nodes instanceof Array 14 | ? this.options.nodes.join('|') 15 | : 'bulletList|orderedList' 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Writer/Extension.js: -------------------------------------------------------------------------------- 1 | export default class Extension { 2 | constructor(options = {}) { 3 | this.options = { 4 | ...this.defaults, 5 | ...options, 6 | } 7 | } 8 | 9 | init() { 10 | return null 11 | } 12 | 13 | bindEditor(editor = null) { 14 | this.editor = editor 15 | } 16 | 17 | get name() { 18 | return null 19 | } 20 | 21 | get type() { 22 | return 'extension' 23 | } 24 | 25 | get defaults() { 26 | return {} 27 | } 28 | 29 | plugins() { 30 | return [] 31 | } 32 | 33 | inputRules() { 34 | return [] 35 | } 36 | 37 | pasteRules() { 38 | return [] 39 | } 40 | 41 | keys() { 42 | return {} 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Writer/Mark.js: -------------------------------------------------------------------------------- 1 | import Extension from './Extension' 2 | 3 | export default class Mark extends Extension { 4 | constructor(options = {}) { 5 | super(options) 6 | } 7 | 8 | command() { 9 | return () => {} 10 | } 11 | 12 | remove() { 13 | this.editor.removeMark(this.name) 14 | } 15 | 16 | get schema() { 17 | return null 18 | } 19 | 20 | get type() { 21 | return 'mark' 22 | } 23 | 24 | toggle() { 25 | return this.editor.toggleMark(this.name) 26 | } 27 | 28 | update(attrs) { 29 | this.editor.updateMark(this.name, attrs) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Writer/Node.js: -------------------------------------------------------------------------------- 1 | import Extension from './Extension' 2 | 3 | export default class Node extends Extension { 4 | constructor(options = {}) { 5 | super(options) 6 | } 7 | 8 | get type() { 9 | return 'node' 10 | } 11 | 12 | get schema() { 13 | return null 14 | } 15 | 16 | commands() { 17 | return {} 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | // Custom nodes 2 | import writerNodes from '@/plugins/writerNodes' 3 | import LargerParagraph from '@/Nodes/LargerParagraph' 4 | 5 | // Custom marks 6 | import writerMarks from '@/plugins/writerMarks' 7 | import Highlight from '@/Marks/Highlight' 8 | 9 | // List input with nodes 10 | import ListInput from '@/Input/ListInput.vue' 11 | import listNodes from '@/plugins/listNodes' 12 | 13 | // Styles 14 | import '@/index.scss' 15 | import writerTextAlign from './plugins/writerTextAlign' 16 | 17 | // Register plugin 18 | window.panel.plugin('coralic/frohberger-writer-nodes', { 19 | use: [writerNodes, writerMarks, listNodes, writerTextAlign], 20 | thirdParty: { 21 | nodes: { 22 | // Import custom nodes from other plugins 23 | ...(window.panel.plugins.thirdParty.nodes || {}), 24 | 25 | // Provide class, not an instance of it 26 | largerParagraph: LargerParagraph 27 | }, 28 | marks: { 29 | // Import custom marks from other plugins 30 | ...(window.panel.plugins.thirdParty.marks || {}), 31 | 32 | // Provide class, not an instance of it 33 | highlight: Highlight 34 | } 35 | }, 36 | components: { 37 | 'k-list-input': ListInput 38 | } 39 | }) 40 | -------------------------------------------------------------------------------- /src/index.scss: -------------------------------------------------------------------------------- 1 | .k-writer { // stylelint-disable-line selector-class-pattern 2 | .ProseMirror div.-larger-paragraph { // stylelint-disable-line selector-class-pattern 3 | display: block; 4 | font-size: var(--text-xl); 5 | font-weight: 500; 6 | line-height: 1.25em; 7 | } 8 | 9 | &.k-writer-text-align-center .ProseMirror { // stylelint-disable-line selector-class-pattern 10 | text-align: center; 11 | } 12 | 13 | &.k-writer-text-align-left .ProseMirror { // stylelint-disable-line selector-class-pattern 14 | text-align: left; 15 | } 16 | 17 | &.k-writer-text-align-right .ProseMirror { // stylelint-disable-line selector-class-pattern 18 | text-align: right; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/plugins/listNodes.js: -------------------------------------------------------------------------------- 1 | export default function (Vue) { 2 | const originalWriter = Vue.component('k-writer') 3 | 4 | Vue.component('k-writer', { 5 | extends: originalWriter, 6 | components: { 7 | 'k-writer-toolbar': { 8 | extends: originalWriter.component('k-writer-toolbar'), 9 | computed: { 10 | hasVisibleButtons() { 11 | const nodeButtons = Object.keys(this.nodeButtons) 12 | 13 | return ( 14 | nodeButtons.length > 1 || 15 | (nodeButtons.length === 1 && 16 | !( 17 | nodeButtons.includes('bulletList') || 18 | nodeButtons.includes('paragraph') || 19 | nodeButtons.includes('orderedList') 20 | )) 21 | ) 22 | } 23 | } 24 | } 25 | } 26 | }) 27 | 28 | const originalList = Vue.component('k-list-field') 29 | Vue.component('k-list-field', { 30 | extends: originalList, 31 | props: { 32 | nodes: [Array, Boolean] 33 | } 34 | }) 35 | } 36 | -------------------------------------------------------------------------------- /src/plugins/writerMarks.js: -------------------------------------------------------------------------------- 1 | export default function (Vue) { 2 | const thirdParty = window.panel.plugins.thirdParty 3 | if (thirdParty.__marksInitialized) return 4 | 5 | const customMarks = thirdParty.marks 6 | if (!customMarks) return 7 | 8 | const original = Vue.component('k-writer') 9 | 10 | Vue.component('k-writer', { 11 | extends: original, 12 | methods: { 13 | createMarks() { 14 | const originalMarks = original.options.methods.createMarks 15 | .call(this) 16 | .filter(({ name }) => !Object.keys(customMarks).includes(name)) 17 | 18 | const marks = Object.entries(customMarks).reduce( 19 | (acc, [key, Constructor]) => { 20 | acc[key] = new Constructor() 21 | return acc 22 | }, 23 | {} 24 | ) 25 | 26 | return [...originalMarks, ...this.filterExtensions(marks, this.marks)] 27 | }, 28 | }, 29 | }) 30 | 31 | thirdParty.__marksInitialized = true 32 | } 33 | -------------------------------------------------------------------------------- /src/plugins/writerNodes.js: -------------------------------------------------------------------------------- 1 | import Heading from '@/Nodes/Heading' 2 | 3 | export default function (Vue) { 4 | const thirdParty = window.panel.plugins.thirdParty 5 | if (thirdParty.__nodesInitialized) return 6 | 7 | const customNodes = thirdParty.nodes 8 | if (!customNodes) return 9 | 10 | const original = Vue.component('k-writer') 11 | 12 | Vue.component('k-writer', { 13 | extends: original, 14 | methods: { 15 | createNodes() { 16 | const originalNodes = original.options.methods.createNodes 17 | .call(this) 18 | .filter(({ name }) => !Object.keys(customNodes).includes(name)) 19 | 20 | const nodes = this.filterExtensions( 21 | Object.entries(customNodes).reduce((acc, [key, Constructor]) => { 22 | acc[key] = new Constructor() 23 | return acc 24 | }, {}), 25 | this.nodes 26 | ) 27 | 28 | // `heading` node serves as a wildcard for all headings 29 | // so there is no need to add the level-constrained heading node 30 | if (this && this.nodes && !this.nodes.includes('heading')) { 31 | // we check for all levels via regex 32 | // and add them to an array 33 | const levels = this.nodes.reduce((acc, node) => { 34 | const match = node.matchAll(/h([1-6])/gu)?.next() 35 | 36 | if ( 37 | match && 38 | match.value && 39 | match.value.length > 1 && 40 | !acc.includes(match.value[1]) 41 | ) 42 | acc.push(match.value[1]) 43 | 44 | return acc 45 | }, []) 46 | 47 | // if we do have more than one level, 48 | // push the heading node with the levels 49 | if (levels.length > 0) nodes.push(new Heading({ levels })) 50 | } 51 | 52 | return [...originalNodes, ...nodes] 53 | } 54 | } 55 | }) 56 | 57 | thirdParty.__nodesInitialized = true 58 | } 59 | -------------------------------------------------------------------------------- /src/plugins/writerTextAlign.js: -------------------------------------------------------------------------------- 1 | export default function (Vue) { 2 | Vue.component('k-writer', { 3 | extends: Vue.component('k-writer'), 4 | props: { 5 | align: 'left' | 'center' | 'right' 6 | }, 7 | mounted() { 8 | this.$el.classList.add('k-writer-text-align-' + (this.align || 'left')) 9 | } 10 | }) 11 | 12 | Vue.component('k-writer-field', { 13 | extends: Vue.component('k-writer-field'), 14 | props: { 15 | align: 'left' | 'center' | 'right' 16 | } 17 | }) 18 | } 19 | --------------------------------------------------------------------------------