From 2fdeb4cc1565ac30fd4d2d4944fb523d0642069f Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Tue, 31 Oct 2023 11:09:52 +0900 Subject: [PATCH] feat: Nuxt Dev Tools integration --- .playground/nuxt.config.ts | 38 +- client/.nuxtrc | 1 + client/app.vue | 69 ++++ client/components/OCodeBlock.vue | 46 +++ client/composables/dialog.ts | 3 + client/composables/rpc.ts | 15 + client/composables/shiki.ts | 39 ++ client/composables/state.ts | 9 + client/nuxt.config.ts | 20 + client/package.json | 4 + package.json | 23 +- pnpm-lock.yaml | 625 ++++++++++++++++++++++++++----- src/devtools.ts | 54 +++ src/module.ts | 20 +- 14 files changed, 848 insertions(+), 118 deletions(-) create mode 100644 client/.nuxtrc create mode 100644 client/app.vue create mode 100644 client/components/OCodeBlock.vue create mode 100644 client/composables/dialog.ts create mode 100644 client/composables/rpc.ts create mode 100644 client/composables/shiki.ts create mode 100644 client/composables/state.ts create mode 100644 client/nuxt.config.ts create mode 100644 client/package.json create mode 100644 src/devtools.ts diff --git a/.playground/nuxt.config.ts b/.playground/nuxt.config.ts index c8dea33d..885e1387 100644 --- a/.playground/nuxt.config.ts +++ b/.playground/nuxt.config.ts @@ -1,4 +1,7 @@ +import { resolve } from 'node:path' import { defineNuxtConfig } from 'nuxt/config' +import { defineNuxtModule } from '@nuxt/kit' +import { startSubprocess } from '@nuxt/devtools-kit' import NuxtSimpleSitemap from '../src/module' export default defineNuxtConfig({ @@ -9,6 +12,39 @@ export default defineNuxtConfig({ '@nuxt/content', '@nuxt/ui', 'nuxt-icon', + /** + * Start a sub Nuxt Server for developing the client + * + * The terminal output can be found in the Terminals tab of the devtools. + */ + defineNuxtModule({ + setup(_, nuxt) { + if (!nuxt.options.dev) + return + + const subprocess = startSubprocess( + { + command: 'npx', + args: ['nuxi', 'dev', '--port', '3030'], + cwd: resolve(__dirname, '../client'), + }, + { + id: 'nuxt-simple-sitemap:client', + name: 'Nuxt Simple Sitemap Client Dev', + }, + ) + subprocess.getProcess().stdout?.on('data', (data) => { + console.log(` sub: ${data.toString()}`) + }) + + process.on('exit', () => { + subprocess.terminate() + }) + + // process.getProcess().stdout?.pipe(process.stdout) + // process.getProcess().stderr?.pipe(process.stderr) + }, + }), ], ignorePrefix: 'ignore-', i18n: { @@ -39,8 +75,6 @@ export default defineNuxtConfig({ // baseURL: '/base' // }, - devtools: true, - robots: { indexable: true, }, diff --git a/client/.nuxtrc b/client/.nuxtrc new file mode 100644 index 00000000..109361b8 --- /dev/null +++ b/client/.nuxtrc @@ -0,0 +1 @@ +imports.autoImport=true diff --git a/client/app.vue b/client/app.vue new file mode 100644 index 00000000..c8070cff --- /dev/null +++ b/client/app.vue @@ -0,0 +1,69 @@ + + + diff --git a/client/components/OCodeBlock.vue b/client/components/OCodeBlock.vue new file mode 100644 index 00000000..203a2cb9 --- /dev/null +++ b/client/components/OCodeBlock.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/client/composables/dialog.ts b/client/composables/dialog.ts new file mode 100644 index 00000000..52f683ae --- /dev/null +++ b/client/composables/dialog.ts @@ -0,0 +1,3 @@ +import { createTemplatePromise } from '@vueuse/core' + +export const FixDialog = createTemplatePromise() diff --git a/client/composables/rpc.ts b/client/composables/rpc.ts new file mode 100644 index 00000000..16bb6ab8 --- /dev/null +++ b/client/composables/rpc.ts @@ -0,0 +1,15 @@ +import { onDevtoolsClientConnected } from '@nuxt/devtools-kit/iframe-client' +import type { $Fetch } from 'nitropack' +import { ref } from 'vue' +import type { NuxtDevtoolsClient } from '@nuxt/devtools-kit/dist/types' +import { refreshSources } from './state' + +export const appFetch = ref<$Fetch>() + +export const devtools = ref() + +onDevtoolsClientConnected(async (client) => { + appFetch.value = client.host.app.$fetch + devtools.value = client.devtools + refreshSources() +}) diff --git a/client/composables/shiki.ts b/client/composables/shiki.ts new file mode 100644 index 00000000..9a31d33c --- /dev/null +++ b/client/composables/shiki.ts @@ -0,0 +1,39 @@ +import type { Highlighter, Lang } from 'shiki-es' +import { getHighlighter } from 'shiki-es' +import { computed, ref, unref } from 'vue' +import type { MaybeRef } from '@vueuse/core' +import { devtools } from './rpc' + +export const shiki = ref() + +export function loadShiki() { + // Only loading when needed + return getHighlighter({ + themes: [ + 'vitesse-dark', + 'vitesse-light', + ], + langs: [ + 'css', + 'javascript', + 'typescript', + 'html', + 'vue', + 'vue-html', + 'bash', + 'diff', + ], + }).then((i) => { + shiki.value = i + }) +} + +export function renderCodeHighlight(code: MaybeRef, lang?: Lang) { + return computed(() => { + const colorMode = devtools.value?.colorMode || 'light' + return shiki.value!.codeToHtml(unref(code), { + lang, + theme: colorMode === 'dark' ? 'vitesse-dark' : 'vitesse-light', + }) || '' + }) +} diff --git a/client/composables/state.ts b/client/composables/state.ts new file mode 100644 index 00000000..f5ed1343 --- /dev/null +++ b/client/composables/state.ts @@ -0,0 +1,9 @@ +import { ref } from 'vue' +import { appFetch } from './rpc' + +export const data = ref(null) + +export async function refreshSources() { + if (appFetch.value) + data.value = await appFetch.value('/api/__sitemap__/debug') +} diff --git a/client/nuxt.config.ts b/client/nuxt.config.ts new file mode 100644 index 00000000..d14c78c4 --- /dev/null +++ b/client/nuxt.config.ts @@ -0,0 +1,20 @@ +import { resolve } from 'pathe' +import DevtoolsUIKit from '@nuxt/devtools-ui-kit' + +export default defineNuxtConfig({ + ssr: false, + modules: [ + DevtoolsUIKit, + ], + devtools: { + enabled: false, + }, + nitro: { + output: { + publicDir: resolve(__dirname, '../dist/client'), + }, + }, + app: { + baseURL: '/__nuxt-simple-sitemap', + }, +}) diff --git a/client/package.json b/client/package.json new file mode 100644 index 00000000..7620f41c --- /dev/null +++ b/client/package.json @@ -0,0 +1,4 @@ +{ + "name": "nuxt-simple-sitemap-client", + "private": true +} diff --git a/package.json b/package.json index 2275b523..7330d3c6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "nuxt-simple-sitemap", "type": "module", "version": "3.4.1", - "packageManager": "pnpm@8.9.2", + "packageManager": "pnpm@8.10.0", "description": "Powerfully flexible XML Sitemaps that integrate seamlessly, for Nuxt.", "license": "MIT", "funding": "https://github.com/sponsors/harlan-zw", @@ -28,8 +28,11 @@ ], "scripts": { "lint": "eslint . --fix", - "build": "nuxt-module-build build --stub && nuxt-module-build prepare && nuxt-module-build build", + "client:build": "nuxi generate client", + "client:dev": "nuxi dev client --port 3300", + "build": "nuxt-module-build build --stub && nuxt-module-build prepare && nuxt-module-build build && npm run client:build", "dev": "nuxi dev .playground", + "dev:devtool": "nuxi dev .playground-devtools", "dev:build": "nuxi build .playground", "dev:prepare": "nuxt-module-build --stub && nuxi prepare .playground", "release": "bumpp package.json --commit --push --tag", @@ -40,20 +43,22 @@ "@nuxt/kit": "^3.8.0", "chalk": "^5.3.0", "defu": "^6.1.3", + "@nuxt/devtools-ui-kit": "^1.0.0", + "sirv": "^2.0.3", "escape-string-regexp": "^5.0.0", "fast-glob": "^3.3.1", "knitwork": "^1.0.0", - "nuxt-site-config": "^1.5.4", - "nuxt-site-config-kit": "^1.5.4", + "nuxt-site-config": "^1.5.5", + "nuxt-site-config-kit": "^1.5.5", "pathe": "^1.1.1", "radix3": "^1.1.0", "semver": "^7.5.4", - "site-config-stack": "^1.5.4", + "site-config-stack": "^1.5.5", "ufo": "^1.3.1" }, "devDependencies": { - "@antfu/eslint-config": "^1.0.0-beta.28", - "@nuxt/content": "^2.8.5", + "@antfu/eslint-config": "^1.0.0-beta.29", + "@nuxt/content": "^2.9.0", "@nuxt/kit": "^3.8.0", "@nuxt/module-builder": "^0.5.2", "@nuxt/test-utils": "^3.8.0", @@ -64,8 +69,8 @@ "eslint": "8.52.0", "execa": "^8.0.1", "nuxt": "^3.8.0", - "nuxt-icon": "^0.5.0", - "nuxt-simple-robots": "^3.1.6", + "nuxt-icon": "^0.6.1", + "nuxt-simple-robots": "^3.1.9", "vitest": "^0.34.6" }, "build": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 86eeb7d2..e3ab21c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@nuxt/devtools-kit': specifier: ^1.0.0 version: 1.0.0(nuxt@3.8.0)(rollup@3.29.4)(vite@4.5.0) + '@nuxt/devtools-ui-kit': + specifier: ^1.0.0 + version: 1.0.0(@nuxt/devtools@1.0.0)(nuxt@3.8.0)(postcss@8.4.31)(rollup@3.29.4)(vite@4.5.0)(vue@3.3.6)(webpack@5.89.0) '@nuxt/kit': specifier: ^3.8.0 version: 3.8.0(rollup@3.29.4) @@ -30,11 +33,11 @@ importers: specifier: ^1.0.0 version: 1.0.0 nuxt-site-config: - specifier: ^1.5.4 - version: 1.5.4(rollup@3.29.4)(vue@3.3.6) + specifier: ^1.5.5 + version: 1.5.5(rollup@3.29.4)(vue@3.3.6) nuxt-site-config-kit: - specifier: ^1.5.4 - version: 1.5.4(rollup@3.29.4)(vue@3.3.6) + specifier: ^1.5.5 + version: 1.5.5(rollup@3.29.4)(vue@3.3.6) pathe: specifier: ^1.1.1 version: 1.1.1 @@ -44,19 +47,22 @@ importers: semver: specifier: ^7.5.4 version: 7.5.4 + sirv: + specifier: ^2.0.3 + version: 2.0.3 site-config-stack: - specifier: ^1.5.4 - version: 1.5.4(vue@3.3.6) + specifier: ^1.5.5 + version: 1.5.5(vue@3.3.6) ufo: specifier: ^1.3.1 version: 1.3.1 devDependencies: '@antfu/eslint-config': - specifier: ^1.0.0-beta.28 - version: 1.0.0-beta.28(eslint@8.52.0)(typescript@5.2.2)(vitest@0.34.6) + specifier: ^1.0.0-beta.29 + version: 1.0.0-beta.29(eslint@8.52.0)(typescript@5.2.2)(vitest@0.34.6) '@nuxt/content': - specifier: ^2.8.5 - version: 2.8.5(rollup@3.29.4)(vue@3.3.6) + specifier: ^2.9.0 + version: 2.9.0(nuxt@3.8.0)(rollup@3.29.4)(vue@3.3.6) '@nuxt/module-builder': specifier: ^0.5.2 version: 0.5.2(@nuxt/kit@3.8.0)(nuxi@3.9.1)(typescript@5.2.2) @@ -85,11 +91,11 @@ importers: specifier: ^3.8.0 version: 3.8.0(eslint@8.52.0)(rollup@3.29.4)(typescript@5.2.2)(vite@4.5.0) nuxt-icon: - specifier: ^0.5.0 - version: 0.5.0(rollup@3.29.4)(vue@3.3.6) + specifier: ^0.6.1 + version: 0.6.1(rollup@3.29.4)(vue@3.3.6) nuxt-simple-robots: - specifier: ^3.1.6 - version: 3.1.6(rollup@3.29.4)(vue@3.3.6) + specifier: ^3.1.9 + version: 3.1.9(rollup@3.29.4)(vue@3.3.6) vitest: specifier: ^0.34.6 version: 0.34.6 @@ -114,8 +120,8 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 - /@antfu/eslint-config@1.0.0-beta.28(eslint@8.52.0)(typescript@5.2.2)(vitest@0.34.6): - resolution: {integrity: sha512-JhY4vmucBbJgISm04C5ze3T+amCrWWIdc3SUQ3+utLNLKT9PFJIJt5YIatZNRHxuR2/myMFBTlshgOepUmYwaA==} + /@antfu/eslint-config@1.0.0-beta.29(eslint@8.52.0)(typescript@5.2.2)(vitest@0.34.6): + resolution: {integrity: sha512-7Tp0JPAUCi3/mXQ0rtPi0txEK/HPNG7zRvNyEsYmJNB/tRTFA4FfCfy+t+TRuTQthBSpJBGl+vgNkuwphroV2w==} peerDependencies: eslint: '>=8.0.0' dependencies: @@ -162,7 +168,6 @@ packages: dependencies: execa: 5.1.1 find-up: 5.0.0 - dev: true /@antfu/utils@0.7.6: resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} @@ -950,15 +955,38 @@ packages: /@humanwhocodes/object-schema@2.0.1: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@iconify-json/carbon@1.1.21: + resolution: {integrity: sha512-bK2cMVM4noBU+FGlay433flpXLRzQu0ED095iAnoO6ka3yb4uz0lvb8acpN5gthyGLJ89C4HpfIbQZLQnMKQww==} + dependencies: + '@iconify/types': 2.0.0 + dev: false + /@iconify-json/heroicons@1.1.13: resolution: {integrity: sha512-WsRTTc0qGDreszIgL9uVpPSnRlM2bXaKmK3E0zpQZloUZQX3FokDqGFgc0UbJ+8np/ta571Ty+8n78mlMhEU8w==} dependencies: '@iconify/types': 2.0.0 dev: true + /@iconify-json/logos@1.1.37: + resolution: {integrity: sha512-H2S8frTEznk6paX2kMzeUGn4KSiykghvO0b8UvEDd1fFFzt0WxCXpP1tBv67XaWK99e6JgA34hhv4lRGAm1hJg==} + dependencies: + '@iconify/types': 2.0.0 + dev: false + + /@iconify-json/ri@1.1.12: + resolution: {integrity: sha512-s5VsyMWYuUuTB5bATJRoDQKGqo6W0dsxvOBrJI/P2H9QI7IAaAWl8zHxseSjoUGG6AwZwWwDMW9YPULPt+vA6w==} + dependencies: + '@iconify/types': 2.0.0 + dev: false + + /@iconify-json/tabler@1.1.96: + resolution: {integrity: sha512-BozRq6622JUEOBlZhF/l6UxqwHoWFiaLP6UCH9/mOvuek/tZureuQ2DSEaz5SdpKJamtBQjtJCH6zzsim6YKUQ==} + dependencies: + '@iconify/types': 2.0.0 + dev: false + /@iconify/types@2.0.0: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - dev: true /@iconify/utils@2.1.11: resolution: {integrity: sha512-M/w3PkN8zQYXi8N6qK/KhnYMfEbbb6Sk8RZVn8g+Pmmu5ybw177RpsaGwpziyHeUsu4etrexYSWq3rwnIqzYCg==} @@ -971,7 +999,6 @@ packages: local-pkg: 0.4.3 transitivePeerDependencies: - supports-color - dev: true /@iconify/vue@4.1.1(vue@3.3.6): resolution: {integrity: sha512-RL85Bm/DAe8y6rT6pux7D2FJSiUEM/TPfyK7GrbAOfTSwrhvwJW+S5yijdGcmtXouA8MtuH9C7l4hiSE4mLMjg==} @@ -1309,12 +1336,14 @@ packages: transitivePeerDependencies: - supports-color - /@nuxt/content@2.8.5(rollup@3.29.4)(vue@3.3.6): - resolution: {integrity: sha512-sWVGoZJOjwEd8v6XYTrHYtQ7c11HR6yK9dcqruf+7WM2WJmwTSeY8B1ir6+9mE1FPQAFnqg26qSkxwafpS9o+g==} + /@nuxt/content@2.9.0(nuxt@3.8.0)(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-//mt++/AgOmjT6TpanugNJpJfx6q8g7wV8/vnk7vSSrrgki8tG6jpupuJmxHHB8DcqqTJfuBWFIdaLhv/Z9Gzg==} dependencies: '@nuxt/kit': 3.8.0(rollup@3.29.4) - '@nuxtjs/mdc': 0.2.3(rollup@3.29.4) + '@nuxtjs/mdc': 0.2.6(rollup@3.29.4) + '@vueuse/core': 10.5.0(vue@3.3.6) '@vueuse/head': 2.0.0(vue@3.3.6) + '@vueuse/nuxt': 10.5.0(nuxt@3.8.0)(rollup@3.29.4)(vue@3.3.6) consola: 3.2.3 defu: 6.1.3 destr: 2.0.2 @@ -1326,6 +1355,7 @@ packages: micromark: 4.0.0 micromark-util-sanitize-uri: 2.0.0 micromark-util-types: 2.0.0 + minisearch: 6.2.0 ohash: 1.1.3 pathe: 1.1.1 scule: 1.0.0 @@ -1347,8 +1377,10 @@ packages: - '@planetscale/database' - '@upstash/redis' - '@vercel/kv' + - '@vue/composition-api' - bufferutil - idb-keyval + - nuxt - rollup - supports-color - utf-8-validate @@ -1373,6 +1405,56 @@ packages: - rollup - supports-color + /@nuxt/devtools-ui-kit@1.0.0(@nuxt/devtools@1.0.0)(nuxt@3.8.0)(postcss@8.4.31)(rollup@3.29.4)(vite@4.5.0)(vue@3.3.6)(webpack@5.89.0): + resolution: {integrity: sha512-uAIF9+8yYiMd/Fqh2KOqCX1ndqZWoFk9GQ9HQyY38BTVlttFk6c/GeCWKi5GaK93YzckJRfDOGhK/PcQmCNzIQ==} + peerDependencies: + '@nuxt/devtools': 1.0.0 + dependencies: + '@iconify-json/carbon': 1.1.21 + '@iconify-json/logos': 1.1.37 + '@iconify-json/ri': 1.1.12 + '@iconify-json/tabler': 1.1.96 + '@nuxt/devtools': 1.0.0(nuxt@3.8.0)(rollup@3.29.4)(vite@4.5.0) + '@nuxt/devtools-kit': 1.0.0(nuxt@3.8.0)(rollup@3.29.4)(vite@4.5.0) + '@nuxt/kit': 3.8.0(rollup@3.29.4) + '@nuxtjs/color-mode': 3.3.0(rollup@3.29.4) + '@unocss/core': 0.56.5 + '@unocss/nuxt': 0.56.5(postcss@8.4.31)(rollup@3.29.4)(vite@4.5.0)(webpack@5.89.0) + '@unocss/preset-attributify': 0.56.5 + '@unocss/preset-icons': 0.56.5 + '@unocss/preset-mini': 0.56.5 + '@unocss/reset': 0.56.5 + '@vueuse/core': 10.5.0(vue@3.3.6) + '@vueuse/integrations': 10.5.0(focus-trap@7.5.4)(vue@3.3.6) + '@vueuse/nuxt': 10.5.0(nuxt@3.8.0)(rollup@3.29.4)(vue@3.3.6) + defu: 6.1.3 + focus-trap: 7.5.4 + splitpanes: 3.1.5 + unocss: 0.56.5(@unocss/webpack@0.56.5)(postcss@8.4.31)(rollup@3.29.4)(vite@4.5.0) + v-lazy-show: 0.2.3 + transitivePeerDependencies: + - '@unocss/webpack' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - nprogress + - nuxt + - postcss + - qrcode + - rollup + - sortablejs + - supports-color + - universal-cookie + - vite + - vue + - webpack + dev: false + /@nuxt/devtools-wizard@1.0.0: resolution: {integrity: sha512-9OeZM2/Y4VuI06gdlDjmYM8yUzdfnywy4t2u2VAEfA2Lk7vk3U1lYn51IAqr+Gits9tp/Q9OiktMWmPLLNGgFw==} hasBin: true @@ -1711,7 +1793,6 @@ packages: transitivePeerDependencies: - rollup - supports-color - dev: true /@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-l2fLouDYwdAvCZEEw7wGxOBj+i8TQcHFu3zMPTLqKuv1qu6WcZIr0uztkbaa8ND1uKZ9YPqKx6UlSOjM4Le69Q==} @@ -1799,13 +1880,13 @@ packages: - vue-router dev: true - /@nuxtjs/mdc@0.2.3(rollup@3.29.4): - resolution: {integrity: sha512-tMCEs6CRskhicjx+WU9E3lLA8BWC4X++WSPzoSlYJzsiPadnW4f+Si7vIXtFRU8IKyBoxG+grCh6fS+gjDZIZA==} + /@nuxtjs/mdc@0.2.6(rollup@3.29.4): + resolution: {integrity: sha512-FDjJXfvFsNgtt3lm7mxjPymv5lovdOMS5bHxnAS/Vcoqd8qC4nkiSnKpZD2eLf4UGQKKNOMSn1mlC2viQHu2sg==} dependencies: '@nuxt/kit': 3.8.0(rollup@3.29.4) '@types/hast': 3.0.2 '@types/mdast': 4.0.2 - '@vue/compiler-core': 3.3.6 + '@vue/compiler-core': 3.3.7 consola: 3.2.3 defu: 6.1.3 destr: 2.0.2 @@ -1823,7 +1904,7 @@ packages: rehype-sort-attributes: 5.0.0 remark-emoji: 4.0.0 remark-gfm: 3.0.1 - remark-mdc: 2.0.0 + remark-mdc: 2.1.0 remark-parse: 10.0.2 remark-rehype: 10.1.0 scule: 1.0.0 @@ -2314,14 +2395,12 @@ packages: dependencies: '@types/eslint': 8.44.6 '@types/estree': 1.0.3 - dev: true /@types/eslint@8.44.6: resolution: {integrity: sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==} dependencies: '@types/estree': 1.0.3 '@types/json-schema': 7.0.14 - dev: true /@types/estree@1.0.3: resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==} @@ -2345,7 +2424,6 @@ packages: /@types/json-schema@7.0.14: resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} - dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -2401,7 +2479,6 @@ packages: /@types/web-bluetooth@0.0.18: resolution: {integrity: sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==} - dev: true /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2): resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} @@ -2578,6 +2655,257 @@ packages: unhead: 1.7.4 vue: 3.3.6(typescript@5.2.2) + /@unocss/astro@0.56.5(rollup@3.29.4)(vite@4.5.0): + resolution: {integrity: sha512-nkxyGV9mA7DZ5LEr4Gap/SggM60MFNUfn56ngpxCqjQHJOMRJrAcR99hCVn+78vZ9xuZl9HxdIwgZLzn41thMw==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@unocss/core': 0.56.5 + '@unocss/reset': 0.56.5 + '@unocss/vite': 0.56.5(rollup@3.29.4)(vite@4.5.0) + vite: 4.5.0(@types/node@20.8.8) + transitivePeerDependencies: + - rollup + dev: false + + /@unocss/cli@0.56.5(rollup@3.29.4): + resolution: {integrity: sha512-VYaqu7Dr1n9ebFFdQM+9Jyg/o9BVKRShlV8bQsBS58gkXiWsA/uAl1Uy2vzpLSrT0F6uGyDmYUF6p4DaUnUO+w==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@unocss/config': 0.56.5 + '@unocss/core': 0.56.5 + '@unocss/preset-uno': 0.56.5 + cac: 6.7.14 + chokidar: 3.5.3 + colorette: 2.0.20 + consola: 3.2.3 + fast-glob: 3.3.1 + magic-string: 0.30.5 + pathe: 1.1.1 + perfect-debounce: 1.0.0 + transitivePeerDependencies: + - rollup + dev: false + + /@unocss/config@0.56.5: + resolution: {integrity: sha512-rscnFIYgUlN/0hXHdhANyjFcDjDutt3JO0ZRITdNLzoglh7GVNiDTURBJwUZejF/vGJ7IkMd3qOdNhPFuRY1Bg==} + engines: {node: '>=14'} + dependencies: + '@unocss/core': 0.56.5 + unconfig: 0.3.11 + dev: false + + /@unocss/core@0.56.5: + resolution: {integrity: sha512-fx5VhOjSHn0HdV2D34pEwFMAHJcJQRTCp1xEE4GzxY1irXzaa+m2aYf5PZjmDxehiOC16IH7TO9FOWANXk1E0w==} + dev: false + + /@unocss/extractor-arbitrary-variants@0.56.5: + resolution: {integrity: sha512-p2pyzz/ONvc5CGcaB9OZvWE8qkRSgyuhaQqFQLdBFeUhveHC0CGP0iSnXwBgAFHWM7DJo4/JpWeZ+mBt0ogVLA==} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/inspector@0.56.5: + resolution: {integrity: sha512-UK/X2JyqxB1uueIFlffFsBioxMptanBbJYjrmOoLPdAFoOPp9o8IIFkFs3OKWc8imvyl3w+F0opncmdJnDMllw==} + dependencies: + '@unocss/rule-utils': 0.56.5 + gzip-size: 6.0.0 + sirv: 2.0.3 + dev: false + + /@unocss/nuxt@0.56.5(postcss@8.4.31)(rollup@3.29.4)(vite@4.5.0)(webpack@5.89.0): + resolution: {integrity: sha512-/JylTjoaG0cGtxTQJuvQEydARbjXTlH4SoTc/ynoxhESpjow+nZtZc6wjH1DNjCwjPY00GlBZQi1qLwzOo1AVg==} + dependencies: + '@nuxt/kit': 3.8.0(rollup@3.29.4) + '@unocss/config': 0.56.5 + '@unocss/core': 0.56.5 + '@unocss/preset-attributify': 0.56.5 + '@unocss/preset-icons': 0.56.5 + '@unocss/preset-tagify': 0.56.5 + '@unocss/preset-typography': 0.56.5 + '@unocss/preset-uno': 0.56.5 + '@unocss/preset-web-fonts': 0.56.5 + '@unocss/preset-wind': 0.56.5 + '@unocss/reset': 0.56.5 + '@unocss/vite': 0.56.5(rollup@3.29.4)(vite@4.5.0) + '@unocss/webpack': 0.56.5(rollup@3.29.4)(webpack@5.89.0) + unocss: 0.56.5(@unocss/webpack@0.56.5)(postcss@8.4.31)(rollup@3.29.4)(vite@4.5.0) + transitivePeerDependencies: + - postcss + - rollup + - supports-color + - vite + - webpack + dev: false + + /@unocss/postcss@0.56.5(postcss@8.4.31): + resolution: {integrity: sha512-oDY1vCdrCQZx/oxDkq3z77a0RoO+WVQT090oDZzLFO/cPWH3elSOHwnoJU/KzrpJLbUFpyTQKZ/k3VbBaEdGTA==} + engines: {node: '>=14'} + peerDependencies: + postcss: ^8.4.21 + dependencies: + '@unocss/config': 0.56.5 + '@unocss/core': 0.56.5 + '@unocss/rule-utils': 0.56.5 + css-tree: 2.3.1 + fast-glob: 3.3.1 + magic-string: 0.30.5 + postcss: 8.4.31 + dev: false + + /@unocss/preset-attributify@0.56.5: + resolution: {integrity: sha512-476NVv1kUmiD0ObtJceUB1ldiQvGStEUlwoHFOFl8srZbRuRlwq8Uz4sxCePf3sn2FP8UHw+By+nxwxMQuHpww==} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/preset-icons@0.56.5: + resolution: {integrity: sha512-Pc973z/M7+TsIPRli9xSE+rjzQnX9r0PppTOD5lrD8PqvNSGIrSWZUFDc5NqL09hKHkIdVrDLC+2ouLYqTI7iA==} + dependencies: + '@iconify/utils': 2.1.11 + '@unocss/core': 0.56.5 + ofetch: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@unocss/preset-mini@0.56.5: + resolution: {integrity: sha512-/KhlThhs1ilauM7MwRSpahLbIPZ5VGeGvaUsU8+ZlNT3sis4yoVYkPtR14tL2IT6jhOU05N/uu3aBj+1bP8GjQ==} + dependencies: + '@unocss/core': 0.56.5 + '@unocss/extractor-arbitrary-variants': 0.56.5 + '@unocss/rule-utils': 0.56.5 + dev: false + + /@unocss/preset-tagify@0.56.5: + resolution: {integrity: sha512-ANtI7E92fuzF40MD/3V72myNqrcGNXAD3TjXHIxAPQP2F+DcYIl2TBPHVsGUt2Rc5Kid2kvvsWan6sRAQVGPng==} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/preset-typography@0.56.5: + resolution: {integrity: sha512-fA/q5S+s7BV3TRWRvXqG7xpa8WNfG19uaZx288FcKauMR0TX4jUM0EkkngpwrTgeXXohh5awx4OEW3E1s1Q2oA==} + dependencies: + '@unocss/core': 0.56.5 + '@unocss/preset-mini': 0.56.5 + dev: false + + /@unocss/preset-uno@0.56.5: + resolution: {integrity: sha512-3hzE0X1oxMbHLvWyTj/4BrJQ7OAL428BpzEJos0RsxifM04vOJX4GC4khIbmTl8KIMECMtATK3ren3JqzD2bFw==} + dependencies: + '@unocss/core': 0.56.5 + '@unocss/preset-mini': 0.56.5 + '@unocss/preset-wind': 0.56.5 + '@unocss/rule-utils': 0.56.5 + dev: false + + /@unocss/preset-web-fonts@0.56.5: + resolution: {integrity: sha512-1YPbqpHK6NaXWHceNJTl2A+dNbliB6FeU5Tvkox1KOLTTwvzUF80uWHAE/l05Oc9EZyolZ8OsM37p2eJAb0wpw==} + dependencies: + '@unocss/core': 0.56.5 + ofetch: 1.3.3 + dev: false + + /@unocss/preset-wind@0.56.5: + resolution: {integrity: sha512-iyMPvCEZkrGLHFXXlcqxDo/UcSK7KWw4x7/QUz7irrvc78cxYVuPm98QZgpCRcCwKerKVyFLjGOtwQ0kmVSVsQ==} + dependencies: + '@unocss/core': 0.56.5 + '@unocss/preset-mini': 0.56.5 + '@unocss/rule-utils': 0.56.5 + dev: false + + /@unocss/reset@0.56.5: + resolution: {integrity: sha512-//Pv2ITAdnpWB9FIr0JiQVl1rL1XgISR8mu3OikhCfi6d/4OH+o6/WyE7evF1pOmk1JjsQlznOABIZXQlcpbHQ==} + dev: false + + /@unocss/rule-utils@0.56.5: + resolution: {integrity: sha512-CXIGHCIC9B8WUl9KbbFMSZHcsIgfmI/+X0bjBv6xrgBVC1EQ2Acq4PYnJIbaRGBRAhl9wYjNL7Zq2UWOdowHAw==} + engines: {node: '>=14'} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/scope@0.56.5: + resolution: {integrity: sha512-q2eHYLuqF7RZEVGti205X2JOKSH6lBJGoQIjPtWgodNTg3S7qmUinHG0XzikI30L3EF3VljIh5TbtwGPcvbNsA==} + dev: false + + /@unocss/transformer-attributify-jsx-babel@0.56.5: + resolution: {integrity: sha512-QUlbmWpdfzdgEXNcOJwSvKDHB/ID/X3zlpK+fXyCKTkqiYgCwMFmLXll2HtNhIgH2E1gWo/lDlwpiW/QjQb/rw==} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/transformer-attributify-jsx@0.56.5: + resolution: {integrity: sha512-SQW7t58s26qHYuD8v3covXtWoXlflw3FV5dlBCw/2iOfNo3OTVUWReAB5y0XQIT3828nHnPqeQq4IhmnuOENdw==} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/transformer-compile-class@0.56.5: + resolution: {integrity: sha512-uT/+bVDN26hJ4a5FtbOT4PxAVDUTxwZCEVCesPAE5RnGd7f+KYUnk3XdDa77xyklPQsxPhr4MEjA0HGPHtSH8Q==} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/transformer-directives@0.56.5: + resolution: {integrity: sha512-ykXbvG1LbqTqlYImMtkJUeH8BtuiE+8T/txUVyooUoVgr2qSELUu2FxC6rTX2EUx+F5BZhaQd6GsdzgaDwXgIg==} + dependencies: + '@unocss/core': 0.56.5 + '@unocss/rule-utils': 0.56.5 + css-tree: 2.3.1 + dev: false + + /@unocss/transformer-variant-group@0.56.5: + resolution: {integrity: sha512-e+7XtICuOtcOgGyxI06i0LK6R446KLFvzv+lw3WbwhD8OcsSFUAtCaAw0l+cyyiiZ/k2tLdUR0O4hYwQVa8f1A==} + dependencies: + '@unocss/core': 0.56.5 + dev: false + + /@unocss/vite@0.56.5(rollup@3.29.4)(vite@4.5.0): + resolution: {integrity: sha512-X4nvIukXTH//d+Oc97nJogK04sVGw4fc5LhVV1DjHQVmAOAmhTJCG6SxWGoSeqqUMx5X3gI9fVILK+5O8yl5EA==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@unocss/config': 0.56.5 + '@unocss/core': 0.56.5 + '@unocss/inspector': 0.56.5 + '@unocss/scope': 0.56.5 + '@unocss/transformer-directives': 0.56.5 + chokidar: 3.5.3 + fast-glob: 3.3.1 + magic-string: 0.30.5 + vite: 4.5.0(@types/node@20.8.8) + transitivePeerDependencies: + - rollup + dev: false + + /@unocss/webpack@0.56.5(rollup@3.29.4)(webpack@5.89.0): + resolution: {integrity: sha512-gdAHZny7LvASvlMp83BVj47vPpwvC4B1x0JeLN1U3nFwcMWkHzxfPlxmbUlIWcHFWUl2OqO/GH2A6llyKIg8sA==} + peerDependencies: + webpack: ^4 || ^5 + dependencies: + '@ampproject/remapping': 2.2.1 + '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@unocss/config': 0.56.5 + '@unocss/core': 0.56.5 + chokidar: 3.5.3 + fast-glob: 3.3.1 + magic-string: 0.30.5 + unplugin: 1.5.0 + webpack: 5.89.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - rollup + dev: false + /@vercel/nft@0.24.3: resolution: {integrity: sha512-IyBdIxmFAeGZnEfMgt4QrGK7XX4lWazlQj34HEi9dw04/WeDBJ7r1yaOIO5tTf9pbfvwUFodj9b0H+NDGGoOMg==} engines: {node: '>=16'} @@ -2709,6 +3037,14 @@ packages: estree-walker: 2.0.2 source-map-js: 1.0.2 + /@vue/compiler-core@3.3.7: + resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==} + dependencies: + '@babel/parser': 7.23.0 + '@vue/shared': 3.3.7 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + /@vue/compiler-dom@3.3.6: resolution: {integrity: sha512-1MxXcJYMHiTPexjLAJUkNs/Tw2eDf2tY3a0rL+LfuWyiKN2s6jvSwywH3PWD8bKICjfebX3GWx2Os8jkRDq3Ng==} dependencies: @@ -2777,6 +3113,9 @@ packages: /@vue/shared@3.3.6: resolution: {integrity: sha512-Xno5pEqg8SVhomD0kTSmfh30ZEmV/+jZtyh39q6QflrjdJCXah5lrnOLi9KB6a5k5aAHXMXjoMnxlzUkCNfWLQ==} + /@vue/shared@3.3.7: + resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==} + /@vueuse/core@10.5.0(vue@3.3.6): resolution: {integrity: sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==} dependencies: @@ -2787,7 +3126,6 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue - dev: true /@vueuse/head@2.0.0(vue@3.3.6): resolution: {integrity: sha512-ykdOxTGs95xjD4WXE4na/umxZea2Itl0GWBILas+O4oqS7eXIods38INvk3XkJKjqMdWPcpCyLX/DioLQxU1KA==} @@ -2801,6 +3139,56 @@ packages: vue: 3.3.6(typescript@5.2.2) dev: true + /@vueuse/integrations@10.5.0(focus-trap@7.5.4)(vue@3.3.6): + resolution: {integrity: sha512-fm5sXLCK0Ww3rRnzqnCQRmfjDURaI4xMsx+T+cec0ngQqHx/JgUtm8G0vRjwtonIeTBsH1Q8L3SucE+7K7upJQ==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.5.0(vue@3.3.6) + '@vueuse/shared': 10.5.0(vue@3.3.6) + focus-trap: 7.5.4 + vue-demi: 0.14.6(vue@3.3.6) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + /@vueuse/integrations@10.5.0(fuse.js@6.6.2)(vue@3.3.6): resolution: {integrity: sha512-fm5sXLCK0Ww3rRnzqnCQRmfjDURaI4xMsx+T+cec0ngQqHx/JgUtm8G0vRjwtonIeTBsH1Q8L3SucE+7K7upJQ==} peerDependencies: @@ -2863,7 +3251,23 @@ packages: /@vueuse/metadata@10.5.0: resolution: {integrity: sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==} - dev: true + + /@vueuse/nuxt@10.5.0(nuxt@3.8.0)(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-x1mpjwcPB5DGA3cTM29Hf3bralslrma3Jr0fXm3Js3dbUHdadC/iVMf831W+sKPjZBhiZxR0S94B8gmGlvZ/1Q==} + peerDependencies: + nuxt: ^3.0.0 + dependencies: + '@nuxt/kit': 3.8.0(rollup@3.29.4) + '@vueuse/core': 10.5.0(vue@3.3.6) + '@vueuse/metadata': 10.5.0 + local-pkg: 0.5.0 + nuxt: 3.8.0(eslint@8.52.0)(rollup@3.29.4)(typescript@5.2.2)(vite@4.5.0) + vue-demi: 0.14.6(vue@3.3.6) + transitivePeerDependencies: + - '@vue/composition-api' + - rollup + - supports-color + - vue /@vueuse/shared@10.5.0(vue@3.3.6): resolution: {integrity: sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==} @@ -2872,26 +3276,21 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue - dev: true /@webassemblyjs/ast@1.11.6: resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true /@webassemblyjs/floating-point-hex-parser@1.11.6: resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true /@webassemblyjs/helper-api-error@1.11.6: resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true /@webassemblyjs/helper-buffer@1.11.6: resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} - dev: true /@webassemblyjs/helper-numbers@1.11.6: resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} @@ -2899,11 +3298,9 @@ packages: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - dev: true /@webassemblyjs/helper-wasm-bytecode@1.11.6: resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true /@webassemblyjs/helper-wasm-section@1.11.6: resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} @@ -2912,23 +3309,19 @@ packages: '@webassemblyjs/helper-buffer': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/wasm-gen': 1.11.6 - dev: true /@webassemblyjs/ieee754@1.11.6: resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 - dev: true /@webassemblyjs/leb128@1.11.6: resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 - dev: true /@webassemblyjs/utf8@1.11.6: resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true /@webassemblyjs/wasm-edit@1.11.6: resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} @@ -2941,7 +3334,6 @@ packages: '@webassemblyjs/wasm-opt': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 '@webassemblyjs/wast-printer': 1.11.6 - dev: true /@webassemblyjs/wasm-gen@1.11.6: resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} @@ -2951,7 +3343,6 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true /@webassemblyjs/wasm-opt@1.11.6: resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} @@ -2960,7 +3351,6 @@ packages: '@webassemblyjs/helper-buffer': 1.11.6 '@webassemblyjs/wasm-gen': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 - dev: true /@webassemblyjs/wasm-parser@1.11.6: resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} @@ -2971,22 +3361,18 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true /@webassemblyjs/wast-printer@1.11.6: resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} dependencies: '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 - dev: true /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -3005,7 +3391,6 @@ packages: acorn: ^8 dependencies: acorn: 8.10.0 - dev: true /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -3059,7 +3444,6 @@ packages: ajv: ^6.9.1 dependencies: ajv: 6.12.6 - dev: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -3610,7 +3994,6 @@ packages: /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - dev: true /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} @@ -4311,7 +4694,6 @@ packages: /es-module-lexer@1.3.1: resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==} - dev: true /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} @@ -4875,7 +5257,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} @@ -4990,7 +5371,6 @@ packages: /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} - dev: true /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} @@ -5015,7 +5395,6 @@ packages: /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - dev: true /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -5146,6 +5525,12 @@ packages: /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + dependencies: + tabbable: 6.2.0 + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -5348,7 +5733,6 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true /glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} @@ -5449,6 +5833,13 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: false + /gzip-size@7.0.0: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6183,7 +6574,6 @@ packages: '@types/node': 20.8.8 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true /jiti@1.20.0: resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} @@ -6230,7 +6620,6 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true /json-parse-even-better-errors@3.0.0: resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} @@ -6435,7 +6824,6 @@ packages: /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} - dev: true /loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} @@ -6472,7 +6860,6 @@ packages: /lodash._reinterpolate@3.0.0: resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} - dev: true /lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} @@ -6505,13 +6892,11 @@ packages: dependencies: lodash._reinterpolate: 3.0.0 lodash.templatesettings: 4.2.0 - dev: true /lodash.templatesettings@4.2.0: resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} dependencies: lodash._reinterpolate: 3.0.0 - dev: true /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -7306,14 +7691,12 @@ packages: /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: true /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: true /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -7428,6 +7811,10 @@ packages: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} + /minisearch@6.2.0: + resolution: {integrity: sha512-BECkorDF1TY2rGKt9XHdSeP9TP29yUbrAaCh/C03wpyf1vx3uYcP/+8XlMcpTkgoU0rBVnHMAOaP83Rc9Tm+TQ==} + dev: true + /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -7526,7 +7913,6 @@ packages: /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true /nitropack@2.7.0: resolution: {integrity: sha512-U5/Uq0k4PO3/yDM1Sao6JZc/i1DhiI2Eq/AMm92idgQ6B3NbwD0A3u9SZNIHyqEyFogOgi3qsdnRo9KWc5jgVg==} @@ -7807,8 +8193,8 @@ packages: optionalDependencies: fsevents: 2.3.3 - /nuxt-icon@0.5.0(rollup@3.29.4)(vue@3.3.6): - resolution: {integrity: sha512-ND4yh8kW4VyIbORP3cWjgVrOAvy6QSDFDTJltakdqmxVfVysNIs/bx2NzlkHeR1EOS8E/jVcemfTPmRsJ7WUVw==} + /nuxt-icon@0.6.1(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-a4/MEmbP2hXB0sLWBqevC+569FADEMs+VfYJ6nzbktUSJY57/PoHyen0PtqAAkMjGGhHgDVHAcjy5RCJyYZRYg==} dependencies: '@iconify/vue': 4.1.1(vue@3.3.6) '@nuxt/kit': 3.8.0(rollup@3.29.4) @@ -7818,13 +8204,13 @@ packages: - vue dev: true - /nuxt-simple-robots@3.1.6(rollup@3.29.4)(vue@3.3.6): - resolution: {integrity: sha512-P7gocVzAjozWzRwwG2GlOte0y6Ni5brY1xyM5ehQTfDG9s1jWUfgTLgZPo1MFTFOxShknwdFyl5fS1iB032wVQ==} + /nuxt-simple-robots@3.1.9(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-JpXLbuPh3gXu7Sfy+6WJcDCaPpshFbn7aDQtfIOiuKXqxw2zY/BopBeJWQRzPBAcWc/R4S0yxRVFxK8BsbT5aA==} dependencies: '@nuxt/kit': 3.8.0(rollup@3.29.4) defu: 6.1.3 - nuxt-site-config: 1.5.4(rollup@3.29.4)(vue@3.3.6) - nuxt-site-config-kit: 1.5.4(rollup@3.29.4)(vue@3.3.6) + nuxt-site-config: 1.5.5(rollup@3.29.4)(vue@3.3.6) + nuxt-site-config-kit: 1.5.5(rollup@3.29.4)(vue@3.3.6) pathe: 1.1.1 ufo: 1.3.1 transitivePeerDependencies: @@ -7833,13 +8219,13 @@ packages: - vue dev: true - /nuxt-site-config-kit@1.5.4(rollup@3.29.4)(vue@3.3.6): - resolution: {integrity: sha512-anTcPXIb5/1S7BP9nce3BU/UgbX38A6mofZ0c+cvni4O512GOx07SWJCpq9GXlS5qInEbg8f5azIEupTD+d+iQ==} + /nuxt-site-config-kit@1.5.5(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-87mf+Ij5njs0qmSl/X/fUhfaSe9kf6feulZnrfGqI0yqk7XmcpdiDZl5xLOWaFQI5Ial+eMeIDz86hrKptiLrQ==} dependencies: '@nuxt/kit': 3.8.0(rollup@3.29.4) '@nuxt/schema': 3.8.0(rollup@3.29.4) pkg-types: 1.0.3 - site-config-stack: 1.5.4(vue@3.3.6) + site-config-stack: 1.5.5(vue@3.3.6) std-env: 3.4.3 ufo: 1.3.1 transitivePeerDependencies: @@ -7847,14 +8233,14 @@ packages: - supports-color - vue - /nuxt-site-config@1.5.4(rollup@3.29.4)(vue@3.3.6): - resolution: {integrity: sha512-u6N1D+2iAul5fHL0heeMMdvaa/TIqUXA9eNhwbGibc9Tiw+cOals4bFdQYFp6PXcRZrQC81dX27p87qgOa5q+g==} + /nuxt-site-config@1.5.5(rollup@3.29.4)(vue@3.3.6): + resolution: {integrity: sha512-L1mjCyFvIb0mp7WwTgGngGCN6xlIza52zL/84R7rqY8r6gMkUtcTHH7OUCMO9Sq9bGI70HZLl7hsLuIqle+cWw==} dependencies: '@nuxt/kit': 3.8.0(rollup@3.29.4) '@nuxt/schema': 3.8.0(rollup@3.29.4) - nuxt-site-config-kit: 1.5.4(rollup@3.29.4)(vue@3.3.6) + nuxt-site-config-kit: 1.5.5(rollup@3.29.4)(vue@3.3.6) pathe: 1.1.1 - site-config-stack: 1.5.4(vue@3.3.6) + site-config-stack: 1.5.5(vue@3.3.6) ufo: 1.3.1 transitivePeerDependencies: - rollup @@ -9048,8 +9434,8 @@ packages: - supports-color dev: true - /remark-mdc@2.0.0: - resolution: {integrity: sha512-zBonqJya1254h84GRLjJc1fU4aXng2cKaie5qk0T1edUIkP4lVY1kJD4TP+uoFaUziTeyR6LSvkmRcHDZiWtoA==} + /remark-mdc@2.1.0: + resolution: {integrity: sha512-N1jHp5fjzCvY6qXmhfoFOMjCauu6CfNz1q79vihtgwnUrp3/C0e6Nzkzm6QeoFLHhxrTRu0epWi6A3nQUUxOIA==} dependencies: '@types/mdast': 4.0.2 '@types/unist': 3.0.1 @@ -9245,7 +9631,6 @@ packages: '@types/json-schema': 7.0.14 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true /scule@1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} @@ -9409,8 +9794,8 @@ packages: /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - /site-config-stack@1.5.4(vue@3.3.6): - resolution: {integrity: sha512-VQUGuSSfaqBdaySLFKXj2YS9RCrbMjGcbXV06yOAJr9AygyzapSRNKjglolcRQVxdG8q+iQpW/qQQeN1IvHCeg==} + /site-config-stack@1.5.5(vue@3.3.6): + resolution: {integrity: sha512-aLSAUOC0RjDvA/EAG8TZUOEGRkgKj5EIUJAFCVViSLZwCQ2VCDCxTjWqdIULkhiB8y9NTGH4+M0iwiLbFfCP+g==} peerDependencies: vue: ^3 dependencies: @@ -9536,6 +9921,10 @@ packages: /spdx-license-ids@3.0.16: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /splitpanes@3.1.5: + resolution: {integrity: sha512-r3Mq2ITFQ5a2VXLOy4/Sb2Ptp7OfEO8YIbhVJqJXoFc9hc5nTXXkCvtVDjIGbvC0vdE7tse+xTM9BMjsszP6bw==} + dev: false + /ssri@10.0.5: resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9713,7 +10102,6 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@9.4.0: resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} @@ -9738,6 +10126,10 @@ packages: csso: 5.0.5 picocolors: 1.0.0 + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: false + /tailwind-config-viewer@1.7.2(tailwindcss@3.3.4): resolution: {integrity: sha512-3JJCeAAlvG+i/EBj+tQb0x4weo30QjdSAo4hlcnVbtD+CkpzHi/UwU9InbPMcYH+ESActoa2kCyjpLEyjEkn0Q==} engines: {node: '>=8'} @@ -9841,7 +10233,6 @@ packages: serialize-javascript: 6.0.1 terser: 5.22.0 webpack: 5.89.0 - dev: true /terser@5.22.0: resolution: {integrity: sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==} @@ -10094,6 +10485,15 @@ packages: - supports-color dev: true + /unconfig@0.3.11: + resolution: {integrity: sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==} + dependencies: + '@antfu/utils': 0.7.6 + defu: 6.1.3 + jiti: 1.20.0 + mlly: 1.4.2 + dev: false + /uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -10275,6 +10675,46 @@ packages: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} + /unocss@0.56.5(@unocss/webpack@0.56.5)(postcss@8.4.31)(rollup@3.29.4)(vite@4.5.0): + resolution: {integrity: sha512-tO+9St4CntSjHpLXZqBo0/etS06MtvFF1NEny/qFJCL9sCopWwmDKuzW6/LIb4wfqZLdMpVFoEACMNv8nP849A==} + engines: {node: '>=14'} + peerDependencies: + '@unocss/webpack': 0.56.5 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + vite: + optional: true + dependencies: + '@unocss/astro': 0.56.5(rollup@3.29.4)(vite@4.5.0) + '@unocss/cli': 0.56.5(rollup@3.29.4) + '@unocss/core': 0.56.5 + '@unocss/extractor-arbitrary-variants': 0.56.5 + '@unocss/postcss': 0.56.5(postcss@8.4.31) + '@unocss/preset-attributify': 0.56.5 + '@unocss/preset-icons': 0.56.5 + '@unocss/preset-mini': 0.56.5 + '@unocss/preset-tagify': 0.56.5 + '@unocss/preset-typography': 0.56.5 + '@unocss/preset-uno': 0.56.5 + '@unocss/preset-web-fonts': 0.56.5 + '@unocss/preset-wind': 0.56.5 + '@unocss/reset': 0.56.5 + '@unocss/transformer-attributify-jsx': 0.56.5 + '@unocss/transformer-attributify-jsx-babel': 0.56.5 + '@unocss/transformer-compile-class': 0.56.5 + '@unocss/transformer-directives': 0.56.5 + '@unocss/transformer-variant-group': 0.56.5 + '@unocss/vite': 0.56.5(rollup@3.29.4)(vite@4.5.0) + '@unocss/webpack': 0.56.5(rollup@3.29.4)(webpack@5.89.0) + vite: 4.5.0(@types/node@20.8.8) + transitivePeerDependencies: + - postcss + - rollup + - supports-color + dev: false + /unplugin-vue-router@0.7.0(rollup@3.29.4)(vue-router@4.2.5)(vue@3.3.6): resolution: {integrity: sha512-ddRreGq0t5vlSB7OMy4e4cfU1w2AwBQCwmvW3oP/0IHQiokzbx4hd3TpwBu3eIAFVuhX2cwNQwp1U32UybTVCw==} peerDependencies: @@ -10422,6 +10862,12 @@ packages: sade: 1.8.1 dev: true + /v-lazy-show@0.2.3: + resolution: {integrity: sha512-YvQ0zr/7x1eiIsCMBltVUgFCzzMyvBXT9Sv58mpcTbaTIBT+CNwOnrUqZdxKpmakqg1ro/6KztQKFkBKzeYN3g==} + dependencies: + '@vue/compiler-core': 3.3.7 + dev: false + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -10787,7 +11233,6 @@ packages: optional: true dependencies: vue: 3.3.6(typescript@5.2.2) - dev: true /vue-devtools-stub@0.1.0: resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==} @@ -10881,7 +11326,6 @@ packages: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true /web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -10935,7 +11379,6 @@ packages: - '@swc/core' - esbuild - uglify-js - dev: true /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} diff --git a/src/devtools.ts b/src/devtools.ts new file mode 100644 index 00000000..fd28863f --- /dev/null +++ b/src/devtools.ts @@ -0,0 +1,54 @@ +import { existsSync } from 'node:fs' +import type { Nuxt } from 'nuxt/schema' +import type { Resolver } from '@nuxt/kit' +import { useNuxt } from '@nuxt/kit' +import type { ModuleOptions } from './module' + +const DEVTOOLS_UI_ROUTE = '/__nuxt-simple-sitemap' +const DEVTOOLS_UI_LOCAL_PORT = 3030 + +export function setupDevToolsUI(options: ModuleOptions, resolve: Resolver['resolve'], nuxt: Nuxt = useNuxt()) { + const clientPath = resolve('./client') + const isProductionBuild = existsSync(clientPath) + + // Serve production-built client (used when package is published) + if (isProductionBuild) { + nuxt.hook('vite:serverCreated', async (server) => { + const sirv = await import('sirv').then(r => r.default || r) + server.middlewares.use( + DEVTOOLS_UI_ROUTE, + sirv(clientPath, { dev: true, single: true }), + ) + }) + } + // In local development, start a separate Nuxt Server and proxy to serve the client + else { + nuxt.hook('vite:extendConfig', (config) => { + config.server = config.server || {} + config.server.proxy = config.server.proxy || {} + config.server.proxy[DEVTOOLS_UI_ROUTE] = { + target: `http://localhost:${DEVTOOLS_UI_LOCAL_PORT}${DEVTOOLS_UI_ROUTE}`, + changeOrigin: true, + followRedirects: true, + rewrite: path => path.replace(DEVTOOLS_UI_ROUTE, ''), + } + console.log('adding proxy settings', config.server.proxy) + }) + } + + nuxt.hook('devtools:customTabs', (tabs) => { + tabs.push({ + // unique identifier + name: 'nuxt-simple-sitemap', + // title to display in the tab + title: 'Sitemap', + // any icon from Iconify, or a URL to an image + icon: 'carbon:load-balancer-application', + // iframe view + view: { + type: 'iframe', + src: DEVTOOLS_UI_ROUTE, + }, + }) + }) +} diff --git a/src/module.ts b/src/module.ts index 6dd22fda..0e383231 100644 --- a/src/module.ts +++ b/src/module.ts @@ -13,7 +13,6 @@ import { } from '@nuxt/kit' import { withBase, withoutLeadingSlash } from 'ufo' import { installNuxtSiteConfig, updateSiteConfig } from 'nuxt-site-config-kit' -import { addCustomTab } from '@nuxt/devtools-kit' import type { NuxtPage } from 'nuxt/schema' import type { NuxtI18nOptions } from '@nuxtjs/i18n/dist/module' import { version } from '../package.json' @@ -37,6 +36,7 @@ import { } from './utils' import { setupPrerenderHandler } from './prerender' import { mergeOnKey } from './runtime/util/pageUtils' +import { setupDevToolsUI } from './devtools' export interface ModuleOptions extends SitemapRoot { /** @@ -460,7 +460,7 @@ declare module 'nitropack' { moduleConfig.autoI18n = resolvedAutoI18n nuxt.options.runtimeConfig['nuxt-simple-sitemap'] = { version, - // @ts-ignore runtime type untyped + // @ts-expect-error runtime type untyped moduleConfig, buildTimeMeta, } @@ -470,20 +470,8 @@ declare module 'nitropack' { route: '/api/__sitemap__/debug', handler: resolve('./runtime/routes/debug'), }) - // pretty hacky but works for now - addCustomTab({ - // unique identifier - name: 'nuxt-simple-sitemap', - // title to display in the tab - title: 'Sitemap', - // any icon from Iconify, or a URL to an image - icon: 'carbon:tree-view', - // iframe view - view: { - type: 'iframe', - src: '/api/__sitemap__/debug', - }, - }) + + setupDevToolsUI(config, resolve) } nuxt.hooks.hook('nitro:config', (nitroConfig) => {