Ver código fonte

chore: v2 and v3 interopability + various fixes

Nicolas Giard 3 anos atrás
pai
commit
d87e94abac

+ 1 - 0
.gitignore

@@ -18,6 +18,7 @@ npm-debug.log*
 
 # Generated assets
 /assets
+/assets-legacy
 server/views/master.pug
 server/views/legacy/master.pug
 server/views/setup.pug

+ 1 - 1
client/components/not-found.vue

@@ -2,7 +2,7 @@
   v-app
     .notfound
       .notfound-content
-        img.animated.fadeIn(src='/_assets/svg/icon-delete-file.svg', alt='Not Found')
+        img.animated.fadeIn(src='/_assets-legacy/svg/icon-delete-file.svg', alt='Not Found')
         .headline {{$t('notfound.title')}}
         .subheading.mt-3 {{$t('notfound.subtitle')}}
         v-btn.mt-5(color='red lighten-4', href='/', large, outlined)

+ 1 - 1
client/components/unauthorized.vue

@@ -2,7 +2,7 @@
   v-app
     .unauthorized
       .unauthorized-content
-        img.animated.fadeIn(src='/_assets/svg/icon-delete-shield.svg', alt='Unauthorized')
+        img.animated.fadeIn(src='/_assets-legacy/svg/icon-delete-shield.svg', alt='Unauthorized')
         .headline {{$t('unauthorized.title')}}
         .subtitle-1.mt-3 {{$t('unauthorized.action.' + action)}}
         v-btn.mt-5(href='/login', x-large)

+ 1 - 1
client/components/welcome.vue

@@ -2,7 +2,7 @@
   v-app
     .onboarding
       .onboarding-content
-        img.animated.fadeIn(src='/_assets/svg/logo-wikijs.svg', alt='Wiki.js')
+        img.animated.fadeIn(src='/_assets-legacy/svg/logo-wikijs.svg', alt='Wiki.js')
         .headline.animated.fadeInUp {{ $t('welcome.title') }}
         .subtitle-1.mt-3.animated.fadeInUp.wait-p1s {{ $t('welcome.subtitle') }}
         div

+ 3 - 3
dev/webpack/webpack.dev.js

@@ -19,7 +19,7 @@ const babelDir = path.join(process.cwd(), '.webpack-cache/babel')
 
 process.noDeprecation = true
 
-fs.emptyDirSync(path.join(process.cwd(), 'assets'))
+fs.emptyDirSync(path.join(process.cwd(), 'assets-legacy'))
 
 module.exports = {
   mode: 'development',
@@ -29,8 +29,8 @@ module.exports = {
     setup: ['./client/index-setup.js', 'webpack-hot-middleware/client']
   },
   output: {
-    path: path.join(process.cwd(), 'assets'),
-    publicPath: '/_assets/',
+    path: path.join(process.cwd(), 'assets-legacy'),
+    publicPath: '/_assets-legacy/',
     filename: 'js/[name].js',
     chunkFilename: 'js/[name].js',
     globalObject: 'this',

+ 3 - 3
dev/webpack/webpack.prod.js

@@ -24,7 +24,7 @@ const babelDir = path.join(process.cwd(), '.webpack-cache/babel')
 
 process.noDeprecation = true
 
-fs.emptyDirSync(path.join(process.cwd(), 'assets'))
+fs.emptyDirSync(path.join(process.cwd(), 'assets-legacy'))
 
 module.exports = {
   mode: 'production',
@@ -34,8 +34,8 @@ module.exports = {
     setup: './client/index-setup.js'
   },
   output: {
-    path: path.join(process.cwd(), 'assets'),
-    publicPath: '/_assets/',
+    path: path.join(process.cwd(), 'assets-legacy'),
+    publicPath: '/_assets-legacy/',
     filename: `js/[name].js?${now}`,
     chunkFilename: `js/[name].js?${now}`,
     globalObject: 'this',

+ 1 - 1
package.json

@@ -9,7 +9,7 @@
     "start": "node server",
     "dev": "nodemon server",
     "legacy:dev": "node dev",
-    "legacy:build": "webpack --profile --config dev/webpack/webpack.prod.js",
+    "legacy:build": "NODE_OPTIONS=--openssl-legacy-provider webpack --profile --config dev/webpack/webpack.prod.js",
     "test": "eslint --format codeframe --ext .js,.vue . && pug-lint server/views && jest",
     "cypress:open": "cypress open"
   },

+ 22 - 17
server/controllers/common.js

@@ -4,6 +4,7 @@ const pageHelper = require('../helpers/page')
 const _ = require('lodash')
 const CleanCSS = require('clean-css')
 const moment = require('moment')
+const path = require('path')
 
 /* global WIKI */
 
@@ -35,24 +36,28 @@ router.get('/healthz', (req, res, next) => {
 /**
  * Administration
  */
-router.get(['/a', '/a/*'], (req, res, next) => {
-  if (!WIKI.auth.checkAccess(req.user, [
-    'manage:system',
-    'write:users',
-    'manage:users',
-    'write:groups',
-    'manage:groups',
-    'manage:navigation',
-    'manage:theme',
-    'manage:api'
-  ])) {
-    _.set(res.locals, 'pageMeta.title', 'Unauthorized')
-    return res.status(403).render('unauthorized', { action: 'view' })
-  }
-
-  _.set(res.locals, 'pageMeta.title', 'Admin')
-  res.render('admin')
+router.get(['/_admin', '/_admin/*'], (req, res, next) => {
+  res.sendFile(path.join(WIKI.ROOTPATH, 'assets/index.html'))
 })
+// router.get(['/_admin', '/_admin/*'], (req, res, next) => {
+//   if (!WIKI.auth.checkAccess(req.user, [
+//     'manage:system',
+//     'write:users',
+//     'manage:users',
+//     'write:groups',
+//     'manage:groups',
+//     'manage:navigation',
+//     'manage:theme',
+//     'manage:api'
+//   ])) {
+//     _.set(res.locals, 'pageMeta.title', 'Unauthorized')
+//     return res.status(403).render('unauthorized', { action: 'view' })
+//   }
+
+//   _.set(res.locals, 'pageMeta.title', 'Admin')
+//   res.render('admin')
+
+// })
 
 /**
  * Download Page / Version

+ 1 - 1
server/core/servers.js

@@ -134,7 +134,7 @@ module.exports = {
       ]
     })
     await this.servers.graph.start()
-    this.servers.graph.applyMiddleware({ app: WIKI.app, cors: false })
+    this.servers.graph.applyMiddleware({ app: WIKI.app, cors: false, path: '/_graphql' })
   },
   /**
    * Close all active connections

+ 7 - 3
server/master.js

@@ -53,14 +53,18 @@ module.exports = async () => {
   // ----------------------------------------
 
   app.use(favicon(path.join(WIKI.ROOTPATH, 'assets', 'favicon.ico')))
-  app.use('/_assets/svg/twemoji', async (req, res, next) => {
+  app.use('/_assets', express.static(path.join(WIKI.ROOTPATH, 'assets/_assets'), {
+    index: false,
+    maxAge: '7d'
+  }))
+  app.use('/_assets-legacy/svg/twemoji', async (req, res, next) => {
     try {
       WIKI.asar.serve('twemoji', req, res, next)
     } catch (err) {
       res.sendStatus(404)
     }
   })
-  app.use('/_assets', express.static(path.join(WIKI.ROOTPATH, 'assets'), {
+  app.use('/_assets-legacy', express.static(path.join(WIKI.ROOTPATH, 'assets-legacy'), {
     index: false,
     maxAge: '7d'
   }))
@@ -175,7 +179,7 @@ module.exports = async () => {
   })
 
   app.use((err, req, res, next) => {
-    if (req.path === '/graphql') {
+    if (req.path === '/_graphql') {
       res.status(err.status || 500).json({
         data: {},
         errors: [{

+ 0 - 1
ux/index.html

@@ -69,6 +69,5 @@
   <body>
     <div class="init-loading"></div>
     <div id="app"><!-- quasar:entry-point --></div>
-    <script type="module" src="/entry-client.js"></script>
   </body>
 </html>

+ 4 - 4
ux/package.json

@@ -71,11 +71,11 @@
     "luxon": "2.4.0",
     "pinia": "2.0.14",
     "pug": "3.0.2",
-    "quasar": "2.7.1",
+    "quasar": "2.7.2",
     "tippy.js": "6.3.7",
     "uuid": "8.3.2",
     "v-network-graph": "0.5.19",
-    "vue": "3.2.31",
+    "vue": "3.2.37",
     "vue-codemirror": "5.1.0",
     "vue-i18n": "9.1.10",
     "vue-router": "4.0.16",
@@ -84,10 +84,10 @@
   },
   "devDependencies": {
     "@intlify/vite-plugin-vue-i18n": "3.4.0",
-    "@quasar/app-vite": "1.0.1",
+    "@quasar/app-vite": "1.0.2",
     "@types/lodash": "4.14.182",
     "autoprefixer": "10.4.7",
-    "eslint": "8.17.0",
+    "eslint": "8.18.0",
     "eslint-config-standard": "17.0.0",
     "eslint-plugin-import": "2.26.0",
     "eslint-plugin-n": "15.2.3",

+ 50 - 0
ux/public/_assets/icons/fluent-message-settings-animated.svg

@@ -0,0 +1,50 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px">
+  <linearGradient id="SVGID_1_" x1="18.921" x2="25.143" y1="-472.285" y2="-451.285" gradientTransform="translate(0 478)" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#0078d3" />
+    <stop offset="1" stop-color="#0858a1" />
+  </linearGradient>
+  <path fill="url(#SVGID_1_)" d="M43,29.5H5V16.6c0-0.7,0.4-1.3,0.9-1.7L22.4,4.5c1-0.6,2.2-0.6,3.2,0l16.5,10.4c0.6,0.4,0.9,1,0.9,1.7V29.5z" />
+  <linearGradient id="SVGID_2_" x1="24" x2="24" y1="-464.584" y2="-450.767" gradientTransform="translate(0 478)" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#fff" />
+    <stop offset=".24" stop-color="#f8f8f7" />
+    <stop offset="1" stop-color="#e3e3e1" />
+  </linearGradient>
+  <path fill="url(#SVGID_2_)" d="M38,32H10V14c0-0.6,0.4-1,1-1h26c0.6,0,1,0.4,1,1V32z" />
+  <linearGradient id="SVGID_3_" x1="25.886" x2="37.997" y1="-450.064" y2="-432.731" gradientTransform="translate(0 478)" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#3ccbf4" />
+    <stop offset="1" stop-color="#1fa0e5" />
+  </linearGradient>
+  <path fill="url(#SVGID_3_)" d="M43,17v21.3c0,1-0.8,1.7-1.8,1.7H9.6l4.8-6.3L43,17z" />
+  <linearGradient id="SVGID_4_" x1="3.074" x2="39.962" y1="-450.764" y2="-432.875" gradientTransform="translate(0 478)" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#28afea" />
+    <stop offset="1" stop-color="#0b88da" />
+  </linearGradient>
+  <path fill="url(#SVGID_4_)" d="M5,17v21.3c0,1,0.8,1.7,1.8,1.7h34.5c0.6,0,1.1-0.3,1.4-0.7L5,17z" />
+  <radialGradient id="SVGID_5_" cx="36.373" cy="37.908" r="11.628" gradientUnits="userSpaceOnUse">
+    <stop offset="0" />
+    <stop offset="1" stop-opacity="0" />
+  </radialGradient>
+  <path fill="url(#SVGID_5_)" d="M37,26c-6.6,0-12,5.4-12,12c0,0.7,0.1,1.3,0.2,2h16c1,0,1.8-0.8,1.8-1.7V27.6C41.2,26.6,39.2,26,37,26z" />
+  <linearGradient id="SVGID_6_" x1="30.189" x2="44.426" y1="1537.189" y2="1551.426" gradientTransform="translate(0 -1506)" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#889097" />
+    <stop offset=".331" stop-color="#848c94" />
+    <stop offset=".669" stop-color="#78828b" />
+    <stop offset="1" stop-color="#64717c" />
+  </linearGradient>
+  <path fill="url(#SVGID_6_)" d="M46.7,35.7c-1.2,0.2-2.4-0.4-3.1-1.5c-0.6-1.1-0.5-2.4,0.2-3.4c-1.1-1.1-2.5-1.9-4-2.3	c-0.5,1.1-1.6,1.9-2.8,1.9s-2.4-0.8-2.8-1.9c-1.5,0.5-2.9,1.3-4,2.3c0.7,1,0.9,2.3,0.2,3.4c-0.6,1.1-1.9,1.7-3.1,1.5	C27.1,36.4,27,37.2,27,38s0.1,1.6,0.3,2.3c1.2-0.2,2.4,0.4,3.1,1.5c0.6,1.1,0.5,2.4-0.2,3.4c1.1,1.1,2.5,1.9,4,2.3	c0.5-1.1,1.6-1.9,2.8-1.9s2.4,0.8,2.8,1.9c1.5-0.5,2.9-1.3,4-2.3c-0.7-1-0.9-2.3-0.2-3.4c0.6-1.1,1.9-1.7,3.1-1.5	c0.2-0.7,0.3-1.5,0.3-2.3S46.9,36.4,46.7,35.7z">
+    <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="-360 37 38" to="0 37 38" dur="7s" additive="sum" repeatCount="indefinite" />
+  </path>
+  <linearGradient id="SVGID_7_" x1="40.484" x2="33.47" y1="1547.484" y2="1540.47" gradientTransform="translate(0 -1506)" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#fff" />
+    <stop offset=".242" stop-color="#f2f2f2" />
+    <stop offset="1" stop-color="#ccc" />
+  </linearGradient>
+  <circle cx="37" cy="38" r="5" fill="url(#SVGID_7_)" />
+  <linearGradient id="SVGID_8_" x1="34.193" x2="39.117" y1="1541.193" y2="1546.117" gradientTransform="translate(0 -1506)" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#0d61a9" />
+    <stop offset=".363" stop-color="#0e5fa4" />
+    <stop offset=".78" stop-color="#135796" />
+    <stop offset="1" stop-color="#16528c" />
+  </linearGradient>
+  <circle cx="37" cy="38" r="3" fill="url(#SVGID_8_)" />
+</svg>

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
ux/public/_assets/icons/fluent-message-settings.svg


+ 76 - 0
ux/public/_assets/icons/fluent-ssd-animated.svg

@@ -0,0 +1,76 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="96px" height="96px">
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEa" x1="26.5" x2="26.5" y1="42.5" y2="35.874" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#737b80"/>
+    <stop offset="1" stop-color="#575c61"/>
+  </linearGradient>
+  <rect width="25" height="7" x="14" y="34" fill="url(#71jOKMe3jIEN7vuoamoZEa)"/>
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEb" x1="18" x2="18" y1="38.094" y2="35.749" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#ffd869"/>
+    <stop offset="1" stop-color="#fec52b"/>
+  </linearGradient>
+  <path fill="url(#71jOKMe3jIEN7vuoamoZEb)" d="M18.5,39h-1c-0.276,0-0.5-0.224-0.5-0.5v-5c0-0.276,0.224-0.5,0.5-0.5h1 c0.276,0,0.5,0.224,0.5,0.5v5C19,38.776,18.776,39,18.5,39z"/>
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEc" x1="22" x2="22" y1="38.094" y2="35.749" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#ffd869"/>
+    <stop offset="1" stop-color="#fec52b"/>
+  </linearGradient>
+  <path fill="url(#71jOKMe3jIEN7vuoamoZEc)" d="M22.5,39h-1c-0.276,0-0.5-0.224-0.5-0.5v-5c0-0.276,0.224-0.5,0.5-0.5h1 c0.276,0,0.5,0.224,0.5,0.5v5C23,38.776,22.776,39,22.5,39z"/>
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEd" x1="27" x2="27" y1="38.094" y2="35.749" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#ffd869"/>
+    <stop offset="1" stop-color="#fec52b"/>
+  </linearGradient>
+  <path fill="url(#71jOKMe3jIEN7vuoamoZEd)" d="M27.5,39h-1c-0.276,0-0.5-0.224-0.5-0.5v-5c0-0.276,0.224-0.5,0.5-0.5h1 c0.276,0,0.5,0.224,0.5,0.5v5C28,38.776,27.776,39,27.5,39z"/>
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEe" x1="31" x2="31" y1="38.094" y2="35.749" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#ffd869"/>
+    <stop offset="1" stop-color="#fec52b"/>
+  </linearGradient>
+  <path fill="url(#71jOKMe3jIEN7vuoamoZEe)" d="M31.5,39h-1c-0.276,0-0.5-0.224-0.5-0.5v-5c0-0.276,0.224-0.5,0.5-0.5h1 c0.276,0,0.5,0.224,0.5,0.5v5C32,38.776,31.776,39,31.5,39z"/>
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEf" x1="35" x2="35" y1="38.094" y2="35.749" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#ffd869"/>
+    <stop offset="1" stop-color="#fec52b"/>
+  </linearGradient>
+  <path fill="url(#71jOKMe3jIEN7vuoamoZEf)" d="M35.5,39h-1c-0.276,0-0.5-0.224-0.5-0.5v-5c0-0.276,0.224-0.5,0.5-0.5h1 c0.276,0,0.5,0.224,0.5,0.5v5C36,38.776,35.776,39,35.5,39z"/>
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEg" x1="24" x2="24" y1="30.333" y2="42.75" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#c3cdd9"/>
+    <stop offset="1" stop-color="#9fa7b0"/>
+  </linearGradient>
+  <path fill="url(#71jOKMe3jIEN7vuoamoZEg)" d="M42,30v10c0,1.1-0.9,2-2,2h-1.25c-0.44,0-0.83-0.3-0.96-0.73L37.71,41l-1.3-4.55	C36.17,35.59,35.38,35,34.49,35H18.51c-0.89,0-1.68,0.59-1.92,1.45L15.29,41l-0.08,0.27C15.08,41.7,14.69,42,14.25,42H8	c-1.1,0-2-0.9-2-2V30H42z"/>
+  <g>
+    <path d="M42,30v10c0,1.1-0.9,2-2,2h-1.25c-0.44,0-0.83-0.3-0.96-0.73L37.71,41h-1.04l-1.22-4.27 C35.33,36.3,34.94,36,34.49,36H18.51c-0.45,0-0.84,0.3-0.96,0.73L16.33,41h-1.04l-0.08,0.27C15.08,41.7,14.69,42,14.25,42H8 c-1.1,0-2-0.9-2-2V30H42z" opacity=".05"/>
+    <path d="M42,30v10c0,1.1-0.9,2-2,2h-1.25c-0.44,0-0.83-0.3-0.96-0.73L37.71,41h-0.52l-1.26-4.41 c-0.18-0.64-0.77-1.09-1.44-1.09H18.51c-0.67,0-1.26,0.45-1.44,1.09L15.81,41h-0.52l-0.08,0.27C15.08,41.7,14.69,42,14.25,42H8 c-1.1,0-2-0.9-2-2V30H42z" opacity=".07"/>
+  </g>
+  <linearGradient id="71jOKMe3jIEN7vuoamoZEh" x1="24" x2="24" y1="6.417" y2="31.933" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#737b80"/>
+    <stop offset="1" stop-color="#575c61"/>
+  </linearGradient>
+  <path fill="url(#71jOKMe3jIEN7vuoamoZEh)" d="M10.764,6h26.471c1.008,0,1.859,0.75,1.984,1.751l2.767,22.02C42.124,30.958,41.195,32,40,32	H8c-1.195,0-2.124-1.042-1.987-2.229L8.78,7.751C8.906,6.75,9.756,6,10.764,6z"/>
+  <g>
+    <path d="M11,35c1.105,0,2,0.895,2,2s-0.895,2-2,2s-2-0.895-2-2S9.895,35,11,35 M11,34c-1.654,0-3,1.346-3,3s1.346,3,3,3 s3-1.346,3-3S12.654,34,11,34L11,34z" opacity=".05"/>
+    <path d="M11,35c1.105,0,2,0.895,2,2s-0.895,2-2,2s-2-0.895-2-2S9.895,35,11,35 M11,34.5c-1.379,0-2.5,1.121-2.5,2.5 s1.121,2.5,2.5,2.5s2.5-1.121,2.5-2.5S12.379,34.5,11,34.5L11,34.5z" opacity=".07"/>
+    <linearGradient id="71jOKMe3jIEN7vuoamoZEi" x1="11" x2="11" y1="34.958" y2="39.052" gradientUnits="userSpaceOnUse">
+      <stop offset="0" stop-color="#75ff8a"/>
+      <stop offset="1" stop-color="#1ee446"/>
+    </linearGradient>
+    <circle cx="11" cy="37" r="2" fill="#666666" />
+    <circle cx="11" cy="37" r="2" fill="url(#71jOKMe3jIEN7vuoamoZEi)">
+      <animate attributeName="opacity" dur="2s" values="0;1;0" repeatCount="indefinite" begin="0.1" />
+    </circle>
+  </g>
+  <g>
+    <g opacity=".05">
+      <path d="M10.5,28c0.828,0,1.5,0.448,1.5,1s-0.672,1-1.5,1S9,29.552,9,29S9.672,28,10.5,28 M10.5,27C9.098,27,8,27.878,8,29 s1.098,2,2.5,2s2.5-0.878,2.5-2S11.902,27,10.5,27L10.5,27z"/>
+      <path d="M37.5,28c0.828,0,1.5,0.448,1.5,1s-0.672,1-1.5,1S36,29.552,36,29S36.672,28,37.5,28 M37.5,27c-1.402,0-2.5,0.878-2.5,2 s1.098,2,2.5,2s2.5-0.878,2.5-2S38.902,27,37.5,27L37.5,27z"/>
+      <path d="M12.5,8C13.328,8,14,8.448,14,9s-0.672,1-1.5,1S11,9.552,11,9S11.672,8,12.5,8 M12.5,7C11.098,7,10,7.878,10,9 s1.098,2,2.5,2S15,10.122,15,9S13.902,7,12.5,7L12.5,7z"/>
+      <path d="M35.5,8C36.328,8,37,8.448,37,9s-0.672,1-1.5,1S34,9.552,34,9S34.672,8,35.5,8 M35.5,7C34.098,7,33,7.878,33,9 s1.098,2,2.5,2S38,10.122,38,9S36.902,7,35.5,7L35.5,7z"/>
+    </g>
+    <g opacity=".07">
+      <path d="M10.5,28c0.828,0,1.5,0.448,1.5,1s-0.672,1-1.5,1S9,29.552,9,29S9.672,28,10.5,28 M10.5,27.5c-1.121,0-2,0.659-2,1.5 s0.879,1.5,2,1.5s2-0.659,2-1.5S11.621,27.5,10.5,27.5L10.5,27.5z"/>
+      <path d="M37.5,28c0.828,0,1.5,0.448,1.5,1s-0.672,1-1.5,1S36,29.552,36,29S36.672,28,37.5,28 M37.5,27.5c-1.121,0-2,0.659-2,1.5 s0.879,1.5,2,1.5s2-0.659,2-1.5S38.621,27.5,37.5,27.5L37.5,27.5z"/>
+      <path d="M12.5,8C13.328,8,14,8.448,14,9s-0.672,1-1.5,1S11,9.552,11,9S11.672,8,12.5,8 M12.5,7.5c-1.121,0-2,0.659-2,1.5 s0.879,1.5,2,1.5s2-0.659,2-1.5S13.621,7.5,12.5,7.5L12.5,7.5z"/>
+      <path d="M35.5,8C36.328,8,37,8.448,37,9s-0.672,1-1.5,1S34,9.552,34,9S34.672,8,35.5,8 M35.5,7.5c-1.121,0-2,0.659-2,1.5 s0.879,1.5,2,1.5s2-0.659,2-1.5S36.621,7.5,35.5,7.5L35.5,7.5z"/>
+    </g>
+    <ellipse cx="10.5" cy="29" fill="#ccc" rx="1.5" ry="1"/>
+    <ellipse cx="37.5" cy="29" fill="#ccc" rx="1.5" ry="1"/>
+    <ellipse cx="12.5" cy="9" fill="#ccc" rx="1.5" ry="1"/>
+    <ellipse cx="35.5" cy="9" fill="#ccc" rx="1.5" ry="1"/>
+  </g>
+</svg>

+ 1 - 3
ux/public/_assets/icons/fluent-ssd.svg

@@ -51,9 +51,7 @@
       <stop offset="1" stop-color="#1ee446"/>
     </linearGradient>
     <circle cx="11" cy="37" r="2" fill="#666666" />
-    <circle cx="11" cy="37" r="2" fill="url(#71jOKMe3jIEN7vuoamoZEi)">
-      <animate attributeName="opacity" dur="2s" values="0;1;0" repeatCount="indefinite" begin="0.1" />
-    </circle>
+    <circle cx="11" cy="37" r="2" fill="url(#71jOKMe3jIEN7vuoamoZEi)" />
   </g>
   <g>
     <g opacity=".05">

BIN
ux/public/favicon.ico


BIN
ux/public/icons/favicon-128x128.png


BIN
ux/public/icons/favicon-16x16.png


BIN
ux/public/icons/favicon-32x32.png


BIN
ux/public/icons/favicon-96x96.png


+ 6 - 4
ux/quasar.config.js

@@ -57,7 +57,7 @@ module.exports = configure(function (/* ctx */) {
     build: {
       target: {
         browser: ['es2019', 'edge88', 'firefox78', 'chrome87', 'safari13.1'],
-        node: 'node16'
+        node: 'node18'
       },
 
       vueRouterMode: 'history', // available values: 'hash', 'history'
@@ -74,9 +74,11 @@ module.exports = configure(function (/* ctx */) {
       // ignorePublicFolder: true,
       // minify: false,
       // polyfillModulePreload: true,
-      // distDir
+      distDir: '../assets',
 
-      // extendViteConf (viteConf) {},
+      extendViteConf (viteConf) {
+        viteConf.build.assetsDir = '_assets'
+      },
       // viteVuePluginOptions: {},
 
       vitePlugins: [
@@ -96,7 +98,7 @@ module.exports = configure(function (/* ctx */) {
       open: false, // opens browser window automatically
       port: 3001,
       proxy: {
-        '/_graphql': 'http://localhost:3000/graphql'
+        '/_graphql': 'http://localhost:3000/_graphql'
       }
     },
 

+ 14 - 17
ux/src/components/AccountMenu.vue

@@ -1,13 +1,13 @@
 <template lang='pug'>
 q-btn.q-ml-md(flat, round, dense, color='grey')
-  q-icon(v-if='!user.picture', name='las la-user-circle')
+  q-icon(v-if='!state.user.picture', name='las la-user-circle')
   q-avatar(v-else)
-    img(:src='user.picture')
+    img(:src='state.user.picture')
   q-menu(auto-close)
     q-card(flat, style='width: 300px;', :dark='false')
       q-card-section(align='center')
-        .text-subtitle1.text-grey-7 {{user.name}}
-        .text-caption.text-grey-8 {{user.email}}
+        .text-subtitle1.text-grey-7 {{state.user.name}}
+        .text-caption.text-grey-8 {{state.user.email}}
       q-separator(:dark='false')
       q-card-actions(align='center')
         q-btn(
@@ -15,7 +15,7 @@ q-btn.q-ml-md(flat, round, dense, color='grey')
           label='Profile'
           icon='las la-user-alt'
           color='primary'
-          to='/p'
+          href='/_profile'
           no-caps
           )
         q-btn(flat
@@ -28,17 +28,14 @@ q-btn.q-ml-md(flat, round, dense, color='grey')
   q-tooltip Account
 </template>
 
-<script>
-export default {
-  name: 'AccountMenu',
-  data () {
-    return {
-      user: {
-        name: 'John Doe',
-        email: 'test@example.com',
-        picture: null
-      }
-    }
+<script setup>
+import { reactive } from 'vue'
+
+const state = reactive({
+  user: {
+    name: 'John Doe',
+    email: 'test@example.com',
+    picture: null
   }
-}
+})
 </script>

+ 1 - 0
ux/src/components/UserCreateDialog.vue

@@ -178,6 +178,7 @@ defineEmits([
 
 const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()
 const $q = useQuasar()
+defineExpose({ $q })
 
 // I18N
 

+ 1 - 0
ux/src/components/UserEditOverlay.vue

@@ -510,6 +510,7 @@ import UtilCodeEditor from './UtilCodeEditor.vue'
 // QUASAR
 
 const $q = useQuasar()
+defineExpose({ $q })
 
 // STORES
 

+ 1 - 0
ux/src/components/WebhookEditDialog.vue

@@ -218,6 +218,7 @@ defineEmits([
 
 const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()
 const $q = useQuasar()
+defineExpose({ $q })
 
 // I18N
 

+ 7 - 2
ux/src/layouts/AdminLayout.vue

@@ -3,7 +3,7 @@ q-layout.admin(view='hHh Lpr lff')
   q-header.bg-black.text-white
     .row.no-wrap
       q-toolbar(style='height: 64px;', dark)
-        q-btn(dense, flat, to='/')
+        q-btn(dense, flat, href='/')
           q-avatar(size='34px', square)
             img(src='/_assets/logo-wikijs.svg')
         q-toolbar-title.text-h6.font-poppins Wiki.js
@@ -184,7 +184,7 @@ q-layout.admin(view='hHh Lpr lff')
 </template>
 
 <script setup>
-import { useMeta, setCssVar } from 'quasar'
+import { useMeta, useQuasar, setCssVar } from 'quasar'
 import { defineAsyncComponent, onMounted, reactive, ref, watch } from 'vue'
 import { useRouter, useRoute } from 'vue-router'
 import { useI18n } from 'vue-i18n'
@@ -200,6 +200,11 @@ const overlays = {
   UserEditOverlay: defineAsyncComponent(() => import('../components/UserEditOverlay.vue'))
 }
 
+// QUASAR
+
+const $q = useQuasar()
+defineExpose({ $q })
+
 // STORES
 
 const adminStore = useAdminStore()

+ 1 - 1
ux/src/pages/AdminMail.vue

@@ -2,7 +2,7 @@
 q-page.admin-mail
   .row.q-pa-md.items-center
     .col-auto
-      img.admin-icon.animated.fadeInLeft(src='/_assets/icons/fluent-message-settings.svg')
+      img.admin-icon.animated.fadeInLeft(src='/_assets/icons/fluent-message-settings-animated.svg')
     .col.q-pl-md
       .text-h5.text-primary.animated.fadeInLeft {{ t('admin.mail.title') }}
       .text-subtitle1.text-grey.animated.fadeInLeft.wait-p2s {{ t('admin.mail.subtitle') }}

+ 1 - 1
ux/src/pages/AdminStorage.vue

@@ -2,7 +2,7 @@
 q-page.admin-storage
   .row.q-pa-md.items-center
     .col-auto
-      img.admin-icon.animated.fadeInLeft(src='/_assets/icons/fluent-ssd.svg')
+      img.admin-icon.animated.fadeInLeft(src='/_assets/icons/fluent-ssd-animated.svg')
     .col.q-pl-md
       .text-h5.text-primary.animated.fadeInLeft {{ t('admin.storage.title') }}
       .text-subtitle1.text-grey.animated.fadeInLeft.wait-p2s {{ t('admin.storage.subtitle') }}

+ 109 - 86
ux/yarn.lock

@@ -881,13 +881,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@quasar/app-vite@npm:1.0.1":
-  version: 1.0.1
-  resolution: "@quasar/app-vite@npm:1.0.1"
+"@quasar/app-vite@npm:1.0.2":
+  version: 1.0.2
+  resolution: "@quasar/app-vite@npm:1.0.2"
   dependencies:
     "@quasar/fastclick": 1.1.5
     "@quasar/vite-plugin": ^1.0.9
     "@rollup/pluginutils": ^4.1.2
+    "@types/compression": ^1.7.2
     "@types/cordova": 0.0.34
     "@types/express": ^4.17.13
     "@vitejs/plugin-vue": ^2.2.0
@@ -923,16 +924,29 @@ __metadata:
   peerDependencies:
     electron-builder: ^22.0.0
     electron-packager: ^15.0.0
+    eslint: ^8.11.0
+    pinia: ^2.0.0
+    quasar: ^2.6.0
     vue: ^3.2.29
     vue-router: ^4.0.12
+    vuex: ^4.0.0
+    workbox-build: ^6.5.0
   peerDependenciesMeta:
     electron-builder:
       optional: true
     electron-packager:
       optional: true
+    eslint:
+      optional: true
+    pinia:
+      optional: true
+    vuex:
+      optional: true
+    workbox-build:
+      optional: true
   bin:
     quasar: bin/quasar
-  checksum: d8c5be6c6d63458877883caaa1a2ae1753a3c6dc5a6ff62d2eda547f4d4c84452478dcd0daba2f2c69b1ef07dc0ad148885eef93ef7bc0e0fb6d3d7ccce49ac6
+  checksum: b6fac0061299605f9c77a0ab683298e476c4b606bdafe87ca3db871e88a65017e8079703df0300191b4f7a9b5b067cde7935913041ac546c98b1dc0309d3fec9
   languageName: node
   linkType: hard
 
@@ -1434,6 +1448,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@types/compression@npm:^1.7.2":
+  version: 1.7.2
+  resolution: "@types/compression@npm:1.7.2"
+  dependencies:
+    "@types/express": "*"
+  checksum: 3457f9d39ed73d58387bccf15bcfe8e140298c5d6e90fe354dfeb24ec7828432658caebee8ab6f4e4ac39a7d03bc0a6a52686d7fb2fe405fbdefede41d6b5834
+  languageName: node
+  linkType: hard
+
 "@types/connect@npm:*":
   version: 3.4.35
   resolution: "@types/connect@npm:3.4.35"
@@ -1461,7 +1484,7 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@types/express@npm:^4.17.13":
+"@types/express@npm:*, @types/express@npm:^4.17.13":
   version: 4.17.13
   resolution: "@types/express@npm:4.17.13"
   dependencies:
@@ -1664,53 +1687,53 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@vue/compiler-core@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/compiler-core@npm:3.2.31"
+"@vue/compiler-core@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/compiler-core@npm:3.2.37"
   dependencies:
     "@babel/parser": ^7.16.4
-    "@vue/shared": 3.2.31
+    "@vue/shared": 3.2.37
     estree-walker: ^2.0.2
     source-map: ^0.6.1
-  checksum: 61ae042cbf2708fbf7374c9b34d005063856224b888a2e8d8520da9cd449f6ccc7a36cfae8c2121f064a3f0ae01a4ab414c471388d27d5258d9d378e72aefb14
+  checksum: 5642e20813352f7ed57ef0eec0fb8a075d6485c91548555b435e8163e62a5e03402c26944bfa2486d6cc4c992f2649478f887478bcd23c8ad9036636f2dcff6a
   languageName: node
   linkType: hard
 
-"@vue/compiler-dom@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/compiler-dom@npm:3.2.31"
+"@vue/compiler-dom@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/compiler-dom@npm:3.2.37"
   dependencies:
-    "@vue/compiler-core": 3.2.31
-    "@vue/shared": 3.2.31
-  checksum: bf08990a67b6ee751fe149c4bbec9b8473b16100c1525c048587a4709c68d1ef787722e2966b14bc5297ba8032e6fad996c604e6074e74070cecad117709a5f6
+    "@vue/compiler-core": 3.2.37
+    "@vue/shared": 3.2.37
+  checksum: 6cfa9d2ee123339549ba005fa61b2cd5ccf079ba8d8d797f0075e7054c2766744029cb0997341bcb6a51e129ae43489263aa7d8500b262ef7b81c63c2b0c4576
   languageName: node
   linkType: hard
 
-"@vue/compiler-sfc@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/compiler-sfc@npm:3.2.31"
+"@vue/compiler-sfc@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/compiler-sfc@npm:3.2.37"
   dependencies:
     "@babel/parser": ^7.16.4
-    "@vue/compiler-core": 3.2.31
-    "@vue/compiler-dom": 3.2.31
-    "@vue/compiler-ssr": 3.2.31
-    "@vue/reactivity-transform": 3.2.31
-    "@vue/shared": 3.2.31
+    "@vue/compiler-core": 3.2.37
+    "@vue/compiler-dom": 3.2.37
+    "@vue/compiler-ssr": 3.2.37
+    "@vue/reactivity-transform": 3.2.37
+    "@vue/shared": 3.2.37
     estree-walker: ^2.0.2
     magic-string: ^0.25.7
     postcss: ^8.1.10
     source-map: ^0.6.1
-  checksum: a99ea2c17eb761926ee164fdbc1c30e959026b237d56faa3c1c2313f0b73efd0cd177c9fea37352d53aa0304af0ac58c35fe9e193f742804f87cd9af64610a39
+  checksum: 9f9067d79f40b0016e4063c180f5417e893f820b970ee291050cad8e19d9258f70a128e5de862e484bfb15572d335c8d5881c95e6b6a3032cb1a94829e8694cb
   languageName: node
   linkType: hard
 
-"@vue/compiler-ssr@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/compiler-ssr@npm:3.2.31"
+"@vue/compiler-ssr@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/compiler-ssr@npm:3.2.37"
   dependencies:
-    "@vue/compiler-dom": 3.2.31
-    "@vue/shared": 3.2.31
-  checksum: 39d07986a269d639c7514a0dac8b750731da48381cdaa844cf12d20e53f8e2d47911bd5da4a5c561e134cd3582717ac497762f758b27977993eb83fbe9cceb1c
+    "@vue/compiler-dom": 3.2.37
+    "@vue/shared": 3.2.37
+  checksum: e137462340c220ef7891d0b40f11124e7d5311e760fdb0de1748c046481505aecd5be8ec8f7b25ac6fc26d2393cbcc267f258d2d26742a50cb9abaf828c28839
   languageName: node
   linkType: hard
 
@@ -1721,65 +1744,65 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@vue/reactivity-transform@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/reactivity-transform@npm:3.2.31"
+"@vue/reactivity-transform@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/reactivity-transform@npm:3.2.37"
   dependencies:
     "@babel/parser": ^7.16.4
-    "@vue/compiler-core": 3.2.31
-    "@vue/shared": 3.2.31
+    "@vue/compiler-core": 3.2.37
+    "@vue/shared": 3.2.37
     estree-walker: ^2.0.2
     magic-string: ^0.25.7
-  checksum: fc3c5390888c7b12622cf98c6873bbcb8a4d717fc1f5888c5e83bd911deb11402e9d5e59aae85edd756406ea9859dfe7c51c759284cd668e38e236b2a89ce997
+  checksum: d9e7c353e2bd3a62a9bbb7498ae231f5194428da003672daadb3e7af50c7839e10fb0ac68252852be353138428d1a36f3b8c7815f9c15499d46e7edaf3730c7e
   languageName: node
   linkType: hard
 
-"@vue/reactivity@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/reactivity@npm:3.2.31"
+"@vue/reactivity@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/reactivity@npm:3.2.37"
   dependencies:
-    "@vue/shared": 3.2.31
-  checksum: acef40b4fff4ca7c1409a2c25a9449f122621d19e0efa5a25dfac2625e420ea899a31dd714c4923868e739318cf2ec8212ed6a80a36c127d84803caa3f72010c
+    "@vue/shared": 3.2.37
+  checksum: 94e353f8b8a9301cae15c9366f2fec6a163efb7293e9fe5d1da3ed647f1859139b7b321451db56fb5e3141192c0f0755f74ca9c4bcd30ec44372e45def61d69f
   languageName: node
   linkType: hard
 
-"@vue/runtime-core@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/runtime-core@npm:3.2.31"
+"@vue/runtime-core@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/runtime-core@npm:3.2.37"
   dependencies:
-    "@vue/reactivity": 3.2.31
-    "@vue/shared": 3.2.31
-  checksum: c3e2a34d7e96fb05921d6af7ad4ad5f5e183eb78ed159f62cecc406b2d2b05a0c35cea680db6ff4f390a589d7e6d295908456a92137546b870e0f35b9219dc3c
+    "@vue/reactivity": 3.2.37
+    "@vue/shared": 3.2.37
+  checksum: 8dbf4e1f973335f5089d6b5965c2756a47589009956f883adb47036315a6d5701ef9d23d52456a6272673bc6f0bcee4f096826b5eae3fec65274e24e9f722a9b
   languageName: node
   linkType: hard
 
-"@vue/runtime-dom@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/runtime-dom@npm:3.2.31"
+"@vue/runtime-dom@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/runtime-dom@npm:3.2.37"
   dependencies:
-    "@vue/runtime-core": 3.2.31
-    "@vue/shared": 3.2.31
+    "@vue/runtime-core": 3.2.37
+    "@vue/shared": 3.2.37
     csstype: ^2.6.8
-  checksum: c4b3b64434221002536b6f1e54a717eeac4bdacfa220909080a9298467810b4280ee1235b6ea0258383d4206fb6352fdb3a60d2848b51d008dc4d6c9bea682ad
+  checksum: 36dddfd56161c94a9a483903a570897e1ee46a95126d54f7948bc184d5d333c9f0c1a9c4cee90ddec63baf4ea2e35be9d0d678108427aba907b0adf0800c75a5
   languageName: node
   linkType: hard
 
-"@vue/server-renderer@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/server-renderer@npm:3.2.31"
+"@vue/server-renderer@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/server-renderer@npm:3.2.37"
   dependencies:
-    "@vue/compiler-ssr": 3.2.31
-    "@vue/shared": 3.2.31
+    "@vue/compiler-ssr": 3.2.37
+    "@vue/shared": 3.2.37
   peerDependencies:
-    vue: 3.2.31
-  checksum: 9ac41a1ae9e004f1500c430b3d4b62552e6ecac7bb4370d9da2b3027d57ac8b9af51dff7ef8cd9aea93c511d2c293fe89960e5dd07d926136ad65efec1921bd2
+    vue: 3.2.37
+  checksum: 634d43cd21ed902ef3d1d710db2065c4d47402c979914325494f73e2cd37545d809e665c3aace1a02b32c3332a9ad7e772a00159f42e63abb8b73b0fef27a102
   languageName: node
   linkType: hard
 
-"@vue/shared@npm:3.2.31":
-  version: 3.2.31
-  resolution: "@vue/shared@npm:3.2.31"
-  checksum: bf614d9d06f7c01fbe3f5f50d8f7621fffd83d2eebd6c2ccf540c59754283d3b659aa93f7d610ed4c16284a4d5208ef5aec12337f2d4d0ab05e9a271cd4a2051
+"@vue/shared@npm:3.2.37":
+  version: 3.2.37
+  resolution: "@vue/shared@npm:3.2.37"
+  checksum: 999ab8baeb13de190d07536e7dd0e74ab9354a864d8d903850a2127ae1a2aa2713a9edc0d957620ebf91165d6603d0cd2b0e8ee0db6cbaf8d57a6a0f912af810
   languageName: node
   linkType: hard
 
@@ -3530,9 +3553,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"eslint@npm:8.17.0":
-  version: 8.17.0
-  resolution: "eslint@npm:8.17.0"
+"eslint@npm:8.18.0":
+  version: 8.18.0
+  resolution: "eslint@npm:8.18.0"
   dependencies:
     "@eslint/eslintrc": ^1.3.0
     "@humanwhocodes/config-array": ^0.9.2
@@ -3571,7 +3594,7 @@ __metadata:
     v8-compile-cache: ^2.0.3
   bin:
     eslint: bin/eslint.js
-  checksum: b484c96681c6b19f5b437f664623f1cd310d3ee9be88400d8450e086e664cd968a9dc202f0b0678578fd50e7a445b92586efe8c787de5073ff2f83213b00bb7b
+  checksum: d9b4b7488a9cee97608343cbb5ac652d3f316436f95ef0800cd9497c1c6f877b655a3275817989c02f1ff0d5dfd1959c5092af9251c7e3fcf60659da37752a10
   languageName: node
   linkType: hard
 
@@ -5891,10 +5914,10 @@ __metadata:
   languageName: node
   linkType: hard
 
-"quasar@npm:2.7.1":
-  version: 2.7.1
-  resolution: "quasar@npm:2.7.1"
-  checksum: c87a96f3e69c7d80ccbd07acb3b637b6aa35ea876ba224edaa97ea108e0e17aa0e997ac9f31800ee3d5345ded5ab5877ba4e5a9b3b9bc28bfa383a2d369c78b4
+"quasar@npm:2.7.2":
+  version: 2.7.2
+  resolution: "quasar@npm:2.7.2"
+  checksum: 6f1bbed4bf9b5df0067581dd81f1ec751dfed776a6c50394821169825a281d1e9598aa8aa447c48fdae12a9cba8989b1831e72cf8e28128f95cd4c9f2af0c176
   languageName: node
   linkType: hard
 
@@ -6826,7 +6849,7 @@ __metadata:
     "@codemirror/view": 0.20.7
     "@intlify/vite-plugin-vue-i18n": 3.4.0
     "@lezer/common": 0.16.1
-    "@quasar/app-vite": 1.0.1
+    "@quasar/app-vite": 1.0.2
     "@quasar/extras": 1.14.0
     "@tiptap/core": 2.0.0-beta.176
     "@tiptap/extension-code-block": 2.0.0-beta.37
@@ -6858,7 +6881,7 @@ __metadata:
     autoprefixer: 10.4.7
     browser-fs-access: 0.29.6
     clipboard: 2.0.11
-    eslint: 8.17.0
+    eslint: 8.18.0
     eslint-config-standard: 17.0.0
     eslint-plugin-import: 2.26.0
     eslint-plugin-n: 15.2.3
@@ -6874,11 +6897,11 @@ __metadata:
     luxon: 2.4.0
     pinia: 2.0.14
     pug: 3.0.2
-    quasar: 2.7.1
+    quasar: 2.7.2
     tippy.js: 6.3.7
     uuid: 8.3.2
     v-network-graph: 0.5.19
-    vue: 3.2.31
+    vue: 3.2.37
     vue-codemirror: 5.1.0
     vue-i18n: 9.1.10
     vue-router: 4.0.16
@@ -7053,16 +7076,16 @@ __metadata:
   languageName: node
   linkType: hard
 
-"vue@npm:3.2.31":
-  version: 3.2.31
-  resolution: "vue@npm:3.2.31"
+"vue@npm:3.2.37":
+  version: 3.2.37
+  resolution: "vue@npm:3.2.37"
   dependencies:
-    "@vue/compiler-dom": 3.2.31
-    "@vue/compiler-sfc": 3.2.31
-    "@vue/runtime-dom": 3.2.31
-    "@vue/server-renderer": 3.2.31
-    "@vue/shared": 3.2.31
-  checksum: 2d66b563e60ce01ff4872f425b1acaf9a9f9d36f48eb986c89962d9b324c6bf566868503811462317052273b53056bbc58be3ceb06ea39dff174bb0fa62db3a2
+    "@vue/compiler-dom": 3.2.37
+    "@vue/compiler-sfc": 3.2.37
+    "@vue/runtime-dom": 3.2.37
+    "@vue/server-renderer": 3.2.37
+    "@vue/shared": 3.2.37
+  checksum: cd20069c311e1de54b7d9b5d9c6021f1a6a70b0cf05cf7fc36b59c02623cbdc7c0075fb2c9e17859c77c86b15c596a447ee16c70064e9f2feba2df27139260b9
   languageName: node
   linkType: hard
 

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff