feat(new-tool): html wysiwyg editor
This commit is contained in:
		
							parent
							
								
									8787ce72ab
								
							
						
					
					
						commit
						2850647e8b
					
				| @ -34,6 +34,9 @@ | ||||
|     "@it-tools/bip39": "^0.0.4", | ||||
|     "@it-tools/oggen": "^1.3.0", | ||||
|     "@sindresorhus/slugify": "^2.2.0", | ||||
|     "@tiptap/pm": "2.0.0-beta.220", | ||||
|     "@tiptap/starter-kit": "2.0.0-beta.220", | ||||
|     "@tiptap/vue-3": "2.0.0-beta.220", | ||||
|     "@vicons/material": "^0.12.0", | ||||
|     "@vicons/tabler": "^0.12.0", | ||||
|     "@vueuse/core": "^8.9.4", | ||||
| @ -75,6 +78,7 @@ | ||||
|     "@types/mime-types": "^2.1.1", | ||||
|     "@types/node": "^16.18.16", | ||||
|     "@types/node-forge": "^1.3.1", | ||||
|     "@types/prettier": "^2.7.2", | ||||
|     "@types/qrcode": "^1.5.0", | ||||
|     "@types/randombytes": "^2.0.0", | ||||
|     "@types/uuid": "^8.3.4", | ||||
|  | ||||
							
								
								
									
										555
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										555
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @ -5,6 +5,9 @@ specifiers: | ||||
|   '@it-tools/oggen': ^1.3.0 | ||||
|   '@rushstack/eslint-patch': ^1.2.0 | ||||
|   '@sindresorhus/slugify': ^2.2.0 | ||||
|   '@tiptap/pm': 2.0.0-beta.220 | ||||
|   '@tiptap/starter-kit': 2.0.0-beta.220 | ||||
|   '@tiptap/vue-3': 2.0.0-beta.220 | ||||
|   '@types/bcryptjs': ^2.4.2 | ||||
|   '@types/crypto-js': ^4.1.1 | ||||
|   '@types/jsdom': ^16.2.15 | ||||
| @ -12,6 +15,7 @@ specifiers: | ||||
|   '@types/mime-types': ^2.1.1 | ||||
|   '@types/node': ^16.18.16 | ||||
|   '@types/node-forge': ^1.3.1 | ||||
|   '@types/prettier': ^2.7.2 | ||||
|   '@types/qrcode': ^1.5.0 | ||||
|   '@types/randombytes': ^2.0.0 | ||||
|   '@types/uuid': ^8.3.4 | ||||
| @ -77,6 +81,9 @@ dependencies: | ||||
|   '@it-tools/bip39': 0.0.4 | ||||
|   '@it-tools/oggen': 1.3.0 | ||||
|   '@sindresorhus/slugify': 2.2.0 | ||||
|   '@tiptap/pm': 2.0.0-beta.220 | ||||
|   '@tiptap/starter-kit': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|   '@tiptap/vue-3': 2.0.0-beta.220_htj2fswe27wsqb7rziordzcpiq | ||||
|   '@vicons/material': 0.12.0 | ||||
|   '@vicons/tabler': 0.12.0 | ||||
|   '@vueuse/core': 8.9.4_vue@3.2.47 | ||||
| @ -118,6 +125,7 @@ devDependencies: | ||||
|   '@types/mime-types': 2.1.1 | ||||
|   '@types/node': 16.18.16 | ||||
|   '@types/node-forge': 1.3.1 | ||||
|   '@types/prettier': 2.7.2 | ||||
|   '@types/qrcode': 1.5.0 | ||||
|   '@types/randombytes': 2.0.0 | ||||
|   '@types/uuid': 8.3.4 | ||||
| @ -1545,6 +1553,10 @@ packages: | ||||
|     resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@linaria/core/3.0.0-beta.13: | ||||
|     resolution: {integrity: sha512-3zEi5plBCOsEzUneRVuQb+2SAx3qaC1dj0FfFAI6zIJQoDWu0dlSwKijMRack7oO9tUWrchfj3OkKQAd1LBdVg==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@nodelib/fs.scandir/2.1.5: | ||||
|     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} | ||||
|     engines: {node: '>= 8'} | ||||
| @ -1578,6 +1590,42 @@ packages: | ||||
|       tslib: 2.5.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /@popperjs/core/2.11.7: | ||||
|     resolution: {integrity: sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@remirror/core-constants/2.0.0: | ||||
|     resolution: {integrity: sha512-vpePPMecHJllBqCWXl6+FIcZqS+tRUM2kSCCKFeEo1H3XUEv3ocijBIPhnlSAa7g6maX+12ATTgxrOsLpWVr2g==} | ||||
|     dependencies: | ||||
|       '@babel/runtime': 7.21.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@remirror/core-helpers/2.0.1: | ||||
|     resolution: {integrity: sha512-s8M1pn33aBUhduvD1QR02uUQMegnFkGaTr4c1iBzxTTyg0rbQstzuQ7Q8TkL6n64JtgCdJS9jLz2dONb2meBKQ==} | ||||
|     dependencies: | ||||
|       '@babel/runtime': 7.21.0 | ||||
|       '@linaria/core': 3.0.0-beta.13 | ||||
|       '@remirror/core-constants': 2.0.0 | ||||
|       '@remirror/types': 1.0.0 | ||||
|       '@types/object.omit': 3.0.0 | ||||
|       '@types/object.pick': 1.3.2 | ||||
|       '@types/throttle-debounce': 2.1.0 | ||||
|       case-anything: 2.1.10 | ||||
|       dash-get: 1.0.2 | ||||
|       deepmerge: 4.3.1 | ||||
|       fast-deep-equal: 3.1.3 | ||||
|       make-error: 1.3.6 | ||||
|       object.omit: 3.0.0 | ||||
|       object.pick: 1.3.0 | ||||
|       throttle-debounce: 3.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@remirror/types/1.0.0: | ||||
|     resolution: {integrity: sha512-7HQbW7k8VxrAtfzs9FxwO6XSDabn8tSFDi1wwzShOnU+cvaYpfxu0ygyTk3TpXsag1hgFKY3ZIlAfB4WVz2LkQ==} | ||||
|     dependencies: | ||||
|       type-fest: 2.19.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@rollup/plugin-babel/5.3.1_hqhlikriuul7byjexqnpgcmenu: | ||||
|     resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} | ||||
|     engines: {node: '>= 10.0.0'} | ||||
| @ -1682,6 +1730,253 @@ packages: | ||||
|       string.prototype.matchall: 4.0.8 | ||||
|     dev: true | ||||
| 
 | ||||
|   /@tiptap/core/2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220: | ||||
|     resolution: {integrity: sha512-F2Q666xJqijBU5o+GqekqseNgIEMTs6BhsLDaf9DwThhljGLS8RXKnSvQxrxLNrYEPpw39n/G3Qt8YAOk5qR6w==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-blockquote/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-uE1VRU/doQzXsfsZ/JqsbSbXeZYTJnyQkSfHYA2ZYhbEM2XqDEsYkgcmZEJgunUZJpERf+3ZTfTpqaHq29iMMg==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.1 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-bold/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-KcEuKI85Drug/cCWbDy+HxhYrD+rLXHEBG10DmKPvgPpKHG/2wOau6LwUwyV4muWR8CR2mIO+mEc3yVBD8nNwQ==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-bubble-menu/2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220: | ||||
|     resolution: {integrity: sha512-wthyec7s0vZlTSEAAZEgoFfx/1Arwg1zxDUrrE+YAost/Yn+w4xQksz/ts5Bx90iOk2qsJ+jzzttLRV17Ku7lA==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|       lodash: 4.17.21 | ||||
|       tippy.js: 6.3.7 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-bullet-list/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-QQ/0ZlYy6Hgb+UAc79V+fxvI+AaQf20cbKtBXaR8TIZ0x4FotSma89bKh+CIXMhFiBGXTcYBaYhl7OwACsKtxw==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-code-block/2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky: | ||||
|     resolution: {integrity: sha512-fgA7yTfHqhBtMJF7I9FPJ6UWuZPtxOQiN45Iv9LNmFIB6YRucdpmF+daZ27sElu0a+eICZyXwVn4w4iJphifuw==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-code/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-JKKDZoceagqVXeC1XF/gOkKhLtsbYJYV+MRDorLnQVz4tXcg/SMs5Ez7OM9MxSSior8fIbUFMNsj1/UNlG+tFw==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-document/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-2sja4ZvOb4iynHrzinnclCSFgLyo6fJc1fBV5fIYaOgZOYcvz9KK8fgKiq+wIpG58sJEmQ5kcwwBlkXv+NTK+g==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-dropcursor/2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky: | ||||
|     resolution: {integrity: sha512-BIaA4Lvb3xL9KFN+K6SO2IHqLO6hDmGN2/rGKHFaU3Eh+oiXM2G73KTSS5KIP1u872zY1RpAtswSc4kjv3cuVw==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-floating-menu/2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220: | ||||
|     resolution: {integrity: sha512-+WfcBEedm82ntaVIEQAGz0Om96Rpav7a+4f7e8N4PrLKm6nZ3gBaEkZVQ6vjJ6S/1htiWCv1XosYIwRboPBG0w==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|       tippy.js: 6.3.7 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-gapcursor/2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky: | ||||
|     resolution: {integrity: sha512-W5N2Ey+thufUOrs2TFGpEGBGue7ZEhcUXvxcsZlGbrjVa9Y+4rEp68Du4y7yM0hCeSj2GGwiV+uPzkc0CSDE/g==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-hard-break/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-oY3454o53YNFbuokzyGzG4PdMHkIYreY3nrALioZ0SwYeoFNcGA6Zcn4rDRfdp+QvbbiHfeBTR/CpWF13HZYTg==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-heading/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-7mrHRj++UaZ26C2Gjwb0WKWAzpiKb8TOYkVC2uMaCwaNhLDXpFEwZ7RtJRSTNBHkIGnMO46BH8Z0qlkFMmk9Jw==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-history/2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky: | ||||
|     resolution: {integrity: sha512-qNL2a9UhnlmCs4y2iQYrfeMB8vEX3bHozBJanHu0PWNQJcj90R5xqorBp/bRcqZdi0kuQfxcTnGHtLUpN/U0TA==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-horizontal-rule/2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky: | ||||
|     resolution: {integrity: sha512-XMIs4R+4BoH5LpIxey513mZuus0XLHqjVayqtf03enmjBTLWzkixvvWLPLw4a47FJL5Q8l4REFHxjNifRzOKkg==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-italic/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-aWAgqoR8fql9fJ7T/ZrEqovkEjZXbUpvlvWEvdBDMG3id8ZTGNDpdDKdvI6J/Rl5ZGPIg1TpHJtd+UixheWQsQ==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-list-item/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-+O0ivwxPP2l/m9PAowb2ytDT/cM5kwu0s1W5MUsHPIqf+M6ahnl4ESjhWZfDHUzvjqPq6MTbqoQLHbB1KS/N7w==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-ordered-list/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-j3DmxJfwmNxFfMnvO7glmGlhYeZSIUnRrKnZu2KkpD6OcGJSh9y/yfnYwcuK80XbzEG/jKKIw0M2yRveOvyVwA==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-paragraph/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-ZGCzNGFYV4wa3l1nXtDIaYp7O6f0DrGTSl3alKkDTQe3SOmzXS2HjgWl9yPw8VXpU9W5mMGhXd+nGn/jUk+f/A==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-strike/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-cIM2ma6mzk08pijOn+KS3ZoHWaUVsVT+OF3m6xewjwJdC0ILg9nApEOhPFrhbeDcxcPmJMlgBl/xeUrEu1HQMg==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/extension-text/2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q: | ||||
|     resolution: {integrity: sha512-3tnffc2YMjNyv7Lbad6fx9wYDE/Buz8vhx76M2AOSrjYbzmTJf7mLkgdlPM0VTy7FGZD5CGgHJAgYNt5HIqPkQ==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/pm/2.0.0-beta.220: | ||||
|     resolution: {integrity: sha512-O9mGcmwUpEr630HY9RylIyZJKnpXi3xWINWNiAEfRJ1br5j5pHRoVRJQ1HzU+6+Z+i/8qp3zRHGLTBqihaZETA==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|     dependencies: | ||||
|       prosemirror-changeset: 2.2.0 | ||||
|       prosemirror-collab: 1.3.0 | ||||
|       prosemirror-commands: 1.5.1 | ||||
|       prosemirror-dropcursor: 1.7.1 | ||||
|       prosemirror-gapcursor: 1.3.1 | ||||
|       prosemirror-history: 1.3.0 | ||||
|       prosemirror-inputrules: 1.2.0 | ||||
|       prosemirror-keymap: 1.2.1 | ||||
|       prosemirror-markdown: 1.10.1 | ||||
|       prosemirror-menu: 1.2.1 | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-schema-basic: 1.2.1 | ||||
|       prosemirror-schema-list: 1.2.2 | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-tables: 1.3.2 | ||||
|       prosemirror-trailing-node: 2.0.3_neynaodr6b5iulsm3pf65djexu | ||||
|       prosemirror-transform: 1.7.1 | ||||
|       prosemirror-view: 1.30.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/starter-kit/2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220: | ||||
|     resolution: {integrity: sha512-3992NxY5sEp5xmLE/qv/yt1YkgpSpJiUlDRj02isJ0Xsxa4G6bNq+N+tN2rHB0Y8dtYVBSX2vV/DZYVX8O+Gpg==} | ||||
|     dependencies: | ||||
|       '@tiptap/core': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/extension-blockquote': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-bold': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-bullet-list': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-code': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-code-block': 2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky | ||||
|       '@tiptap/extension-document': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-dropcursor': 2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky | ||||
|       '@tiptap/extension-gapcursor': 2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky | ||||
|       '@tiptap/extension-hard-break': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-heading': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-history': 2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky | ||||
|       '@tiptap/extension-horizontal-rule': 2.0.0-beta.220_ohumfzynigfck3hzagxvh2a4ky | ||||
|       '@tiptap/extension-italic': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-list-item': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-ordered-list': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-paragraph': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-strike': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|       '@tiptap/extension-text': 2.0.0-beta.220_7w7m52asdh3tod4ocz57yex63q | ||||
|     transitivePeerDependencies: | ||||
|       - '@tiptap/pm' | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tiptap/vue-3/2.0.0-beta.220_htj2fswe27wsqb7rziordzcpiq: | ||||
|     resolution: {integrity: sha512-rhSKUECLE6NOjTYZHheXAGpyIqruhxkU/9YfWNLWNFIHHW9wHO+t/B3XMJAWBwgkUvRRepU5JmBBIfYd8RgqTA==} | ||||
|     peerDependencies: | ||||
|       '@tiptap/core': ^2.0.0-beta.209 | ||||
|       '@tiptap/pm': ^2.0.0-beta.209 | ||||
|       vue: ^3.0.0 | ||||
|     dependencies: | ||||
|       '@tiptap/extension-bubble-menu': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/extension-floating-menu': 2.0.0-beta.220_@tiptap+pm@2.0.0-beta.220 | ||||
|       '@tiptap/pm': 2.0.0-beta.220 | ||||
|       vue: 3.2.47 | ||||
|     dev: false | ||||
| 
 | ||||
|   /@tootallnate/once/2.0.0: | ||||
|     resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} | ||||
|     engines: {node: '>= 10'} | ||||
| @ -1784,10 +2079,22 @@ packages: | ||||
|     resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/object.omit/3.0.0: | ||||
|     resolution: {integrity: sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@types/object.pick/1.3.2: | ||||
|     resolution: {integrity: sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@types/parse5/6.0.3: | ||||
|     resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/prettier/2.7.2: | ||||
|     resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/qrcode/1.5.0: | ||||
|     resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==} | ||||
|     dependencies: | ||||
| @ -1810,6 +2117,10 @@ packages: | ||||
|     resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /@types/throttle-debounce/2.1.0: | ||||
|     resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /@types/tough-cookie/4.0.2: | ||||
|     resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} | ||||
|     dev: true | ||||
| @ -2666,6 +2977,11 @@ packages: | ||||
|       upper-case-first: 2.0.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /case-anything/2.1.10: | ||||
|     resolution: {integrity: sha512-JczJwVrCP0jPKh05McyVsuOg6AYosrB9XWZKbQzXeDAm2ClE/PJE/BcrrQrVyGYH7Jg8V/LDupmyL4kFlVsVFQ==} | ||||
|     engines: {node: '>=12.13'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /chai/4.3.7: | ||||
|     resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} | ||||
|     engines: {node: '>=4'} | ||||
| @ -3020,6 +3336,10 @@ packages: | ||||
|     resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /crelt/1.0.5: | ||||
|     resolution: {integrity: sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /cron-validator/1.3.1: | ||||
|     resolution: {integrity: sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A==} | ||||
|     dev: false | ||||
| @ -3117,6 +3437,10 @@ packages: | ||||
|     engines: {node: '>=8'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /dash-get/1.0.2: | ||||
|     resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /data-urls/3.0.2: | ||||
|     resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} | ||||
|     engines: {node: '>=12'} | ||||
| @ -3195,7 +3519,6 @@ packages: | ||||
|   /deepmerge/4.3.1: | ||||
|     resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /define-lazy-prop/2.0.0: | ||||
|     resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} | ||||
| @ -3369,7 +3692,6 @@ packages: | ||||
|   /entities/3.0.1: | ||||
|     resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} | ||||
|     engines: {node: '>=0.12'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /errno/0.1.8: | ||||
|     resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} | ||||
| @ -3676,7 +3998,6 @@ packages: | ||||
|   /escape-string-regexp/4.0.0: | ||||
|     resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} | ||||
|     engines: {node: '>=10'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /escape-string-regexp/5.0.0: | ||||
|     resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} | ||||
| @ -4008,7 +4329,6 @@ packages: | ||||
| 
 | ||||
|   /fast-deep-equal/3.1.3: | ||||
|     resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /fast-diff/1.2.0: | ||||
|     resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} | ||||
| @ -4667,6 +4987,13 @@ packages: | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /is-extendable/1.0.1: | ||||
|     resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dependencies: | ||||
|       is-plain-object: 2.0.4 | ||||
|     dev: false | ||||
| 
 | ||||
|   /is-extglob/2.1.1: | ||||
|     resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
| @ -4724,6 +5051,13 @@ packages: | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /is-plain-object/2.0.4: | ||||
|     resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dependencies: | ||||
|       isobject: 3.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /is-potential-custom-element-name/1.0.1: | ||||
|     resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} | ||||
|     dev: true | ||||
| @ -4813,6 +5147,11 @@ packages: | ||||
|     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /isobject/3.0.1: | ||||
|     resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /istanbul-lib-coverage/3.2.0: | ||||
|     resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} | ||||
|     engines: {node: '>=8'} | ||||
| @ -5102,6 +5441,12 @@ packages: | ||||
|       uc.micro: 1.0.6 | ||||
|     dev: true | ||||
| 
 | ||||
|   /linkify-it/4.0.1: | ||||
|     resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} | ||||
|     dependencies: | ||||
|       uc.micro: 1.0.6 | ||||
|     dev: false | ||||
| 
 | ||||
|   /load-json-file/4.0.0: | ||||
|     resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} | ||||
|     engines: {node: '>=4'} | ||||
| @ -5223,6 +5568,10 @@ packages: | ||||
|       semver: 6.3.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /make-error/1.3.6: | ||||
|     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /map-obj/1.0.1: | ||||
|     resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
| @ -5248,6 +5597,17 @@ packages: | ||||
|       uc.micro: 1.0.6 | ||||
|     dev: true | ||||
| 
 | ||||
|   /markdown-it/13.0.1: | ||||
|     resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} | ||||
|     hasBin: true | ||||
|     dependencies: | ||||
|       argparse: 2.0.1 | ||||
|       entities: 3.0.1 | ||||
|       linkify-it: 4.0.1 | ||||
|       mdurl: 1.0.1 | ||||
|       uc.micro: 1.0.6 | ||||
|     dev: false | ||||
| 
 | ||||
|   /mathjs/10.6.4: | ||||
|     resolution: {integrity: sha512-omQyvRE1jIy+3k2qsqkWASOcd45aZguXZDckr3HtnTYyXk5+2xpVfC3kATgbO2Srjxlqww3TVdhD0oUdZ/hiFA==} | ||||
|     engines: {node: '>= 14'} | ||||
| @ -5270,7 +5630,6 @@ packages: | ||||
| 
 | ||||
|   /mdurl/1.0.1: | ||||
|     resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /meow/8.1.2: | ||||
|     resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} | ||||
| @ -5514,6 +5873,20 @@ packages: | ||||
|       object-keys: 1.1.1 | ||||
|     dev: true | ||||
| 
 | ||||
|   /object.omit/3.0.0: | ||||
|     resolution: {integrity: sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dependencies: | ||||
|       is-extendable: 1.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /object.pick/1.3.0: | ||||
|     resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} | ||||
|     engines: {node: '>=0.10.0'} | ||||
|     dependencies: | ||||
|       isobject: 3.0.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /object.values/1.1.6: | ||||
|     resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} | ||||
|     engines: {node: '>= 0.4'} | ||||
| @ -5569,6 +5942,10 @@ packages: | ||||
|       word-wrap: 1.2.3 | ||||
|     dev: true | ||||
| 
 | ||||
|   /orderedmap/2.1.0: | ||||
|     resolution: {integrity: sha512-/pIFexOm6S70EPdznemIz3BQZoJ4VTFrhqzu0ACBqBgeLsLxq8e6Jim63ImIfwW/zAD1AlXpRMlOv3aghmo4dA==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /p-limit/1.3.0: | ||||
|     resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} | ||||
|     engines: {node: '>=4'} | ||||
| @ -5831,6 +6208,149 @@ packages: | ||||
|       asap: 2.0.6 | ||||
|     dev: true | ||||
| 
 | ||||
|   /prosemirror-changeset/2.2.0: | ||||
|     resolution: {integrity: sha512-QM7ohGtkpVpwVGmFb8wqVhaz9+6IUXcIQBGZ81YNAKYuHiFJ1ShvSzab4pKqTinJhwciZbrtBEk/2WsqSt2PYg==} | ||||
|     dependencies: | ||||
|       prosemirror-transform: 1.7.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-collab/1.3.0: | ||||
|     resolution: {integrity: sha512-+S/IJ69G2cUu2IM5b3PBekuxs94HO1CxJIWOFrLQXUaUDKL/JfBx+QcH31ldBlBXyDEUl+k3Vltfi1E1MKp2mA==} | ||||
|     dependencies: | ||||
|       prosemirror-state: 1.4.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-commands/1.5.1: | ||||
|     resolution: {integrity: sha512-ga1ga/RkbzxfAvb6iEXYmrEpekn5NCwTb8w1dr/gmhSoaGcQ0VPuCzOn5qDEpC45ql2oDkKoKQbRxLJwKLpMTQ==} | ||||
|     dependencies: | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-dropcursor/1.7.1: | ||||
|     resolution: {integrity: sha512-GmWk9bAwhfHwA8xmJhBFjPcebxUG9zAPYtqpIr7NTDigWZZEJCgUYyUQeqgyscLr8ZHoh9aeprX9kW7BihUT+w==} | ||||
|     dependencies: | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|       prosemirror-view: 1.30.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-gapcursor/1.3.1: | ||||
|     resolution: {integrity: sha512-GKTeE7ZoMsx5uVfc51/ouwMFPq0o8YrZ7Hx4jTF4EeGbXxBveUV8CGv46mSHuBBeXGmvu50guoV2kSnOeZZnUA==} | ||||
|     dependencies: | ||||
|       prosemirror-keymap: 1.2.1 | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-view: 1.30.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-history/1.3.0: | ||||
|     resolution: {integrity: sha512-qo/9Wn4B/Bq89/YD+eNWFbAytu6dmIM85EhID+fz9Jcl9+DfGEo8TTSrRhP15+fFEoaPqpHSxlvSzSEbmlxlUA==} | ||||
|     dependencies: | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|       rope-sequence: 1.3.3 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-inputrules/1.2.0: | ||||
|     resolution: {integrity: sha512-eAW/M/NTSSzpCOxfR8Abw6OagdG0MiDAiWHQMQveIsZtoKVYzm0AflSPq/ymqJd56/Su1YPbwy9lM13wgHOFmQ==} | ||||
|     dependencies: | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-keymap/1.2.1: | ||||
|     resolution: {integrity: sha512-kVK6WGC+83LZwuSJnuCb9PsADQnFZllt94qPP3Rx/vLcOUV65+IbBeH2nS5cFggPyEVJhGkGrgYFRrG250WhHQ==} | ||||
|     dependencies: | ||||
|       prosemirror-state: 1.4.2 | ||||
|       w3c-keyname: 2.2.6 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-markdown/1.10.1: | ||||
|     resolution: {integrity: sha512-s7iaTLiX+qO5z8kF2NcMmy2T7mIlxzkS4Sp3vTKSYChPtbMpg6YxFkU0Y06rUg2WtKlvBu7v1bXzlGBkfjUWAA==} | ||||
|     dependencies: | ||||
|       markdown-it: 13.0.1 | ||||
|       prosemirror-model: 1.19.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-menu/1.2.1: | ||||
|     resolution: {integrity: sha512-sBirXxVfHalZO4f1ZS63WzewINK4182+7dOmoMeBkqYO8wqMBvBS7wQuwVOHnkMWPEh0+N0LJ856KYUN+vFkmQ==} | ||||
|     dependencies: | ||||
|       crelt: 1.0.5 | ||||
|       prosemirror-commands: 1.5.1 | ||||
|       prosemirror-history: 1.3.0 | ||||
|       prosemirror-state: 1.4.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-model/1.19.0: | ||||
|     resolution: {integrity: sha512-/CvFGJnwc41EJSfDkQLly1cAJJJmBpZwwUJtwZPTjY2RqZJfM8HVbCreOY/jti8wTRbVyjagcylyGoeJH/g/3w==} | ||||
|     dependencies: | ||||
|       orderedmap: 2.1.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-schema-basic/1.2.1: | ||||
|     resolution: {integrity: sha512-vYBdIHsYKSDIqYmPBC7lnwk9DsKn8PnVqK97pMYP5MLEDFqWIX75JiaJTzndBii4bRuNqhC2UfDOfM3FKhlBHg==} | ||||
|     dependencies: | ||||
|       prosemirror-model: 1.19.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-schema-list/1.2.2: | ||||
|     resolution: {integrity: sha512-rd0pqSDp86p0MUMKG903g3I9VmElFkQpkZ2iOd3EOVg1vo5Cst51rAsoE+5IPy0LPXq64eGcCYlW1+JPNxOj2w==} | ||||
|     dependencies: | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-state/1.4.2: | ||||
|     resolution: {integrity: sha512-puuzLD2mz/oTdfgd8msFbe0A42j5eNudKAAPDB0+QJRw8cO1ygjLmhLrg9RvDpf87Dkd6D4t93qdef00KKNacQ==} | ||||
|     dependencies: | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|       prosemirror-view: 1.30.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-tables/1.3.2: | ||||
|     resolution: {integrity: sha512-/9JTeN6s58Zq66HXaxP6uf8PAmc7XXKZFPlOGVtLvxEd6xBP6WtzaJB9wBjiGUzwbdhdMEy7V62yuHqk/3VrnQ==} | ||||
|     dependencies: | ||||
|       prosemirror-keymap: 1.2.1 | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|       prosemirror-view: 1.30.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-trailing-node/2.0.3_neynaodr6b5iulsm3pf65djexu: | ||||
|     resolution: {integrity: sha512-lGrjMrn97KWkjQSW/FjdvnhJmqFACmQIyr6lKYApvHitDnKsCoZz6XzrHB7RZYHni/0NxQmZ01p/2vyK2SkvaA==} | ||||
|     peerDependencies: | ||||
|       prosemirror-model: ^1 | ||||
|       prosemirror-state: ^1 | ||||
|       prosemirror-view: ^1 | ||||
|     dependencies: | ||||
|       '@babel/runtime': 7.21.0 | ||||
|       '@remirror/core-constants': 2.0.0 | ||||
|       '@remirror/core-helpers': 2.0.1 | ||||
|       escape-string-regexp: 4.0.0 | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-view: 1.30.2 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-transform/1.7.1: | ||||
|     resolution: {integrity: sha512-VteoifAfpt46z0yEt6Fc73A5OID9t/y2QIeR5MgxEwTuitadEunD/V0c9jQW8ziT8pbFM54uTzRLJ/nLuQjMxg==} | ||||
|     dependencies: | ||||
|       prosemirror-model: 1.19.0 | ||||
|     dev: false | ||||
| 
 | ||||
|   /prosemirror-view/1.30.2: | ||||
|     resolution: {integrity: sha512-nTNzZvalQf9kHeEyO407LiV6DoOs/pXsid88UqW9Vvybo4ozJW2PJhkfZUxCUF1hR/9vJLdhxX84wuw9P9HsXA==} | ||||
|     dependencies: | ||||
|       prosemirror-model: 1.19.0 | ||||
|       prosemirror-state: 1.4.2 | ||||
|       prosemirror-transform: 1.7.1 | ||||
|     dev: false | ||||
| 
 | ||||
|   /proto-list/1.2.4: | ||||
|     resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} | ||||
|     dev: true | ||||
| @ -6171,6 +6691,10 @@ packages: | ||||
|       fsevents: 2.3.2 | ||||
|     dev: true | ||||
| 
 | ||||
|   /rope-sequence/1.3.3: | ||||
|     resolution: {integrity: sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /run-parallel/1.2.0: | ||||
|     resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} | ||||
|     dependencies: | ||||
| @ -6645,6 +7169,11 @@ packages: | ||||
|     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /throttle-debounce/3.0.1: | ||||
|     resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} | ||||
|     engines: {node: '>=10'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /through/2.3.8: | ||||
|     resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} | ||||
|     dev: true | ||||
| @ -6683,6 +7212,12 @@ packages: | ||||
|     engines: {node: '>=14.0.0'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /tippy.js/6.3.7: | ||||
|     resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} | ||||
|     dependencies: | ||||
|       '@popperjs/core': 2.11.7 | ||||
|     dev: false | ||||
| 
 | ||||
|   /to-fast-properties/2.0.0: | ||||
|     resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} | ||||
|     engines: {node: '>=4'} | ||||
| @ -6804,6 +7339,11 @@ packages: | ||||
|     engines: {node: '>=8'} | ||||
|     dev: true | ||||
| 
 | ||||
|   /type-fest/2.19.0: | ||||
|     resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} | ||||
|     engines: {node: '>=12.20'} | ||||
|     dev: false | ||||
| 
 | ||||
|   /typed-array-length/1.0.4: | ||||
|     resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} | ||||
|     dependencies: | ||||
| @ -6828,7 +7368,6 @@ packages: | ||||
| 
 | ||||
|   /uc.micro/1.0.6: | ||||
|     resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} | ||||
|     dev: true | ||||
| 
 | ||||
|   /uglify-js/3.17.4: | ||||
|     resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} | ||||
| @ -7274,6 +7813,10 @@ packages: | ||||
|       browser-process-hrtime: 1.0.0 | ||||
|     dev: true | ||||
| 
 | ||||
|   /w3c-keyname/2.2.6: | ||||
|     resolution: {integrity: sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==} | ||||
|     dev: false | ||||
| 
 | ||||
|   /w3c-xmlserializer/3.0.0: | ||||
|     resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} | ||||
|     engines: {node: '>=12'} | ||||
|  | ||||
							
								
								
									
										135
									
								
								src/tools/html-wysiwyg-editor/editor/editor.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								src/tools/html-wysiwyg-editor/editor/editor.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,135 @@ | ||||
| <template> | ||||
|   <n-card v-if="editor" class="editor"> | ||||
|     <template #header> | ||||
|       <menu-bar class="editor-header" :editor="editor" /> | ||||
|       <n-divider style="margin-top: 0" /> | ||||
|     </template> | ||||
| 
 | ||||
|     <editor-content class="editor-content" :editor="editor" /> | ||||
|   </n-card> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import { tryOnBeforeUnmount, useVModel } from '@vueuse/core'; | ||||
| import { Editor, EditorContent } from '@tiptap/vue-3'; | ||||
| import StarterKit from '@tiptap/starter-kit'; | ||||
| import { useThemeVars } from 'naive-ui'; | ||||
| import MenuBar from './menu-bar.vue'; | ||||
| 
 | ||||
| const themeVars = useThemeVars(); | ||||
| const props = defineProps<{ html: string }>(); | ||||
| const emit = defineEmits(['update:html']); | ||||
| const html = useVModel(props, 'html', emit); | ||||
| 
 | ||||
| const editor = new Editor({ | ||||
|   content: html.value, | ||||
|   extensions: [StarterKit], | ||||
| }); | ||||
| 
 | ||||
| editor.on('update', ({ editor }) => emit('update:html', editor.getHTML())); | ||||
| 
 | ||||
| tryOnBeforeUnmount(() => { | ||||
|   editor.destroy(); | ||||
| }); | ||||
| </script> | ||||
| 
 | ||||
| <style scoped lang="less"> | ||||
| ::v-deep(.n-card-header) { | ||||
|   padding: 0; | ||||
| } | ||||
| 
 | ||||
| ::v-deep(.ProseMirror-focused) { | ||||
|   outline: none; | ||||
| } | ||||
| </style> | ||||
| 
 | ||||
| <style scoped lang="less"> | ||||
| ::v-deep(.ProseMirror) { | ||||
|   > * + * { | ||||
|     margin-top: 0.75em; | ||||
|   } | ||||
| 
 | ||||
|   p { | ||||
|     margin: 0; | ||||
|   } | ||||
| 
 | ||||
|   ul, | ||||
|   ol { | ||||
|     padding: 0 1rem; | ||||
|   } | ||||
| 
 | ||||
|   h1, | ||||
|   h2, | ||||
|   h3, | ||||
|   h4, | ||||
|   h5, | ||||
|   h6 { | ||||
|     line-height: 1.1; | ||||
|   } | ||||
| 
 | ||||
|   code { | ||||
|     background-color: v-bind('themeVars.codeColor'); | ||||
|     padding: 2px 4px; | ||||
|     border-radius: 5px; | ||||
|     font-size: 85%; | ||||
|   } | ||||
| 
 | ||||
|   pre { | ||||
|     background: v-bind('themeVars.codeColor'); | ||||
|     font-family: monospace; | ||||
|     padding: 0.75rem 1rem; | ||||
|     border-radius: 0.5rem; | ||||
| 
 | ||||
|     code { | ||||
|       color: inherit; | ||||
|       padding: 0; | ||||
|       background: none; | ||||
|       font-size: 0.8rem; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   mark { | ||||
|     background-color: #faf594; | ||||
|   } | ||||
| 
 | ||||
|   img { | ||||
|     max-width: 100%; | ||||
|     height: auto; | ||||
|   } | ||||
| 
 | ||||
|   hr { | ||||
|     margin: 1rem 0; | ||||
|   } | ||||
| 
 | ||||
|   blockquote { | ||||
|     padding-left: 1rem; | ||||
|     border-left: 2px solid rgba(#0d0d0d, 0.1); | ||||
|   } | ||||
| 
 | ||||
|   hr { | ||||
|     border: none; | ||||
|     border-top: 2px solid rgba(#0d0d0d, 0.1); | ||||
|     margin: 2rem 0; | ||||
|   } | ||||
| 
 | ||||
|   ul[data-type='taskList'] { | ||||
|     list-style: none; | ||||
|     padding: 0; | ||||
| 
 | ||||
|     li { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
| 
 | ||||
|       > label { | ||||
|         flex: 0 0 auto; | ||||
|         margin-right: 0.5rem; | ||||
|         user-select: none; | ||||
|       } | ||||
| 
 | ||||
|       > div { | ||||
|         flex: 1 1 auto; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										22
									
								
								src/tools/html-wysiwyg-editor/editor/menu-bar-item.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/tools/html-wysiwyg-editor/editor/menu-bar-item.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| <template> | ||||
|   <n-tooltip trigger="hover"> | ||||
|     <template #trigger> | ||||
|       <n-button circle quaternary :type="isActive?.() ? 'primary' : 'default'" @click="action"> | ||||
|         <template #icon> | ||||
|           <n-icon :component="icon" /> | ||||
|         </template> | ||||
|       </n-button> | ||||
|     </template> | ||||
| 
 | ||||
|     {{ title }} | ||||
|   </n-tooltip> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import { toRefs, type Component } from 'vue'; | ||||
| 
 | ||||
| const props = defineProps<{ icon: Component; title: string; action: () => void; isActive?: () => boolean }>(); | ||||
| const { icon, title, action, isActive } = toRefs(props); | ||||
| </script> | ||||
| 
 | ||||
| <style scoped></style> | ||||
							
								
								
									
										171
									
								
								src/tools/html-wysiwyg-editor/editor/menu-bar.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								src/tools/html-wysiwyg-editor/editor/menu-bar.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,171 @@ | ||||
| <template> | ||||
|   <n-space align="center" :size="0"> | ||||
|     <template v-for="(item, index) in items"> | ||||
|       <n-divider v-if="item.type === 'divider'" :key="`divider${index}`" vertical /> | ||||
|       <menu-bar-item v-else-if="item.type === 'button'" :key="index" v-bind="item" /> | ||||
|     </template> | ||||
|   </n-space> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import type { Editor } from '@tiptap/vue-3'; | ||||
| import { | ||||
|   ArrowBack, | ||||
|   ArrowForwardUp, | ||||
|   Blockquote, | ||||
|   Bold, | ||||
|   ClearFormatting, | ||||
|   Code, | ||||
|   CodePlus, | ||||
|   H1, | ||||
|   H2, | ||||
|   H3, | ||||
|   H4, | ||||
|   Italic, | ||||
|   Link, | ||||
|   List, | ||||
|   ListNumbers, | ||||
|   Separator, | ||||
|   Strikethrough, | ||||
|   TextWrap, | ||||
| } from '@vicons/tabler'; | ||||
| import { toRefs, type Component } from 'vue'; | ||||
| import MenuBarItem from './menu-bar-item.vue'; | ||||
| 
 | ||||
| const props = defineProps<{ editor: Editor }>(); | ||||
| const { editor } = toRefs(props); | ||||
| 
 | ||||
| type MenuItem = | ||||
|   | { | ||||
|       icon: Component; | ||||
|       title: string; | ||||
|       action: () => void; | ||||
|       isActive?: () => boolean; | ||||
|       type: 'button'; | ||||
|     } | ||||
|   | { type: 'divider' }; | ||||
| 
 | ||||
| const items: MenuItem[] = [ | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: Bold, | ||||
|     title: 'Bold', | ||||
|     action: () => editor.value.chain().focus().toggleBold().run(), | ||||
|     isActive: () => editor.value.isActive('bold'), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: Italic, | ||||
|     title: 'Italic', | ||||
|     action: () => editor.value.chain().focus().toggleItalic().run(), | ||||
|     isActive: () => editor.value.isActive('italic'), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: Strikethrough, | ||||
|     title: 'Strike', | ||||
|     action: () => editor.value.chain().focus().toggleStrike().run(), | ||||
|     isActive: () => editor.value.isActive('strike'), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: Code, | ||||
|     title: 'Inline code', | ||||
|     action: () => editor.value.chain().focus().toggleCode().run(), | ||||
|     isActive: () => editor.value.isActive('code'), | ||||
|   }, | ||||
|   { | ||||
|     type: 'divider', | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: H1, | ||||
|     title: 'Heading 1', | ||||
|     action: () => editor.value.chain().focus().toggleHeading({ level: 1 }).run(), | ||||
|     isActive: () => editor.value.isActive('heading', { level: 1 }), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: H2, | ||||
|     title: 'Heading 2', | ||||
|     action: () => editor.value.chain().focus().toggleHeading({ level: 2 }).run(), | ||||
|     isActive: () => editor.value.isActive('heading', { level: 2 }), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: H3, | ||||
|     title: 'Heading 3', | ||||
|     action: () => editor.value.chain().focus().toggleHeading({ level: 4 }).run(), | ||||
|     isActive: () => editor.value.isActive('heading', { level: 4 }), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: H4, | ||||
|     title: 'Heading 4', | ||||
|     action: () => editor.value.chain().focus().toggleHeading({ level: 4 }).run(), | ||||
|     isActive: () => editor.value.isActive('heading', { level: 4 }), | ||||
|   }, | ||||
|   { | ||||
|     type: 'divider', | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: List, | ||||
|     title: 'Bullet list', | ||||
|     action: () => editor.value.chain().focus().toggleBulletList().run(), | ||||
|     isActive: () => editor.value.isActive('bulletList'), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: ListNumbers, | ||||
|     title: 'Ordered list', | ||||
|     action: () => editor.value.chain().focus().toggleOrderedList().run(), | ||||
|     isActive: () => editor.value.isActive('orderedList'), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: CodePlus, | ||||
|     title: 'Code block', | ||||
|     action: () => editor.value.chain().focus().toggleCodeBlock().run(), | ||||
|     isActive: () => editor.value.isActive('codeBlock'), | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: Blockquote, | ||||
|     title: 'Blockquote', | ||||
|     action: () => editor.value.chain().focus().toggleBlockquote().run(), | ||||
|     isActive: () => editor.value.isActive('blockquote'), | ||||
|   }, | ||||
|   { | ||||
|     type: 'divider', | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: TextWrap, | ||||
|     title: 'Hard break', | ||||
|     action: () => editor.value.chain().focus().setHardBreak().run(), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: ClearFormatting, | ||||
|     title: 'Clear format', | ||||
|     action: () => editor.value.chain().focus().clearNodes().unsetAllMarks().run(), | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: ArrowBack, | ||||
|     title: 'Undo', | ||||
|     action: () => editor.value.chain().focus().undo().run(), | ||||
|   }, | ||||
|   { | ||||
|     type: 'button', | ||||
|     icon: ArrowForwardUp, | ||||
|     title: 'Redo', | ||||
|     action: () => editor.value.chain().focus().redo().run(), | ||||
|   }, | ||||
| ]; | ||||
| </script> | ||||
| 
 | ||||
| <style scoped></style> | ||||
							
								
								
									
										17
									
								
								src/tools/html-wysiwyg-editor/html-wysiwyg-editor.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/tools/html-wysiwyg-editor/html-wysiwyg-editor.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| <template> | ||||
|   <editor v-model:html="html" /> | ||||
|   <textarea-copyable :value="format(html, { parser: 'html', plugins: [htmlParser] })" language="html" /> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import TextareaCopyable from '@/components/TextareaCopyable.vue'; | ||||
| import { ref } from 'vue'; | ||||
| import { format } from 'prettier'; | ||||
| import htmlParser from 'prettier/parser-html'; | ||||
| import { useStorage } from '@vueuse/core'; | ||||
| import Editor from './editor/editor.vue'; | ||||
| 
 | ||||
| const html = useStorage('html-wysiwyg-editor--html', '<h1>Hey!</h1><p>Welcome to this html wysiwyg editor</p>'); | ||||
| </script> | ||||
| 
 | ||||
| <style lang="less" scoped></style> | ||||
							
								
								
									
										11
									
								
								src/tools/html-wysiwyg-editor/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/tools/html-wysiwyg-editor/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| import { Edit } from '@vicons/tabler'; | ||||
| import { defineTool } from '../tool'; | ||||
| 
 | ||||
| export const tool = defineTool({ | ||||
|   name: 'Html wysiwyg editor', | ||||
|   path: '/html-wysiwyg-editor', | ||||
|   description: 'Online HTML editor with feature-rich WYSIWYG editor, get the source code of the content immediately.', | ||||
|   keywords: ['html', 'wysiwyg', 'editor', 'p', 'ul', 'ol', 'converter', 'live'], | ||||
|   component: () => import('./html-wysiwyg-editor.vue'), | ||||
|   icon: Edit, | ||||
| }); | ||||
| @ -1,6 +1,7 @@ | ||||
| import { tool as base64FileConverter } from './base64-file-converter'; | ||||
| import { tool as base64StringConverter } from './base64-string-converter'; | ||||
| import { tool as basicAuthGenerator } from './basic-auth-generator'; | ||||
| import { tool as htmlWysiwygEditor } from './html-wysiwyg-editor'; | ||||
| import { tool as rsaKeyPairGenerator } from './rsa-key-pair-generator'; | ||||
| import { tool as textToNatoAlphabet } from './text-to-nato-alphabet'; | ||||
| import { tool as slugifyString } from './slugify-string'; | ||||
| @ -74,6 +75,7 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|       jwtParser, | ||||
|       keycodeInfo, | ||||
|       slugifyString, | ||||
|       htmlWysiwygEditor, | ||||
|     ], | ||||
|   }, | ||||
|   { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user