From c8b0361e59e919f20ee4f19f7b9d8cd6deca313c Mon Sep 17 00:00:00 2001 From: NX7353 <849989428@qq.com> Date: Wed, 31 Dec 2025 15:54:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(package):=20=E6=96=B0=E5=A2=9E=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E6=A1=88=E4=BE=8B=EF=BC=9B=E4=BD=86=E6=98=AF=20tailwi?= =?UTF-8?q?ndcss=20=E4=BB=85=E5=9C=A8=E5=AD=90=E9=A1=B9=E7=9B=AE=E7=94=9F?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/demo/auto-imports.d.ts | 94 ++++ apps/demo/components.d.ts | 44 ++ apps/demo/src/App.vue | 8 +- apps/demo/src/main.ts | 11 +- apps/demo/vite.config.ts | 61 ++- package.json | 4 + .../config-provider/ConfigProvider.vue | 38 ++ .../components/config-provider/index.ts | 3 + packages/nanxing-admin/components/index.ts | 1 + .../components/layouts/Provider.vue | 8 + .../components/layouts/default/Index.vue | 33 ++ .../nanxing-admin/components/layouts/index.ts | 6 + packages/nanxing-admin/core/constants.ts | 0 packages/nanxing-admin/core/createWebApp.ts | 31 ++ .../nanxing-admin/core/createWebRouter.ts | 50 +++ packages/nanxing-admin/core/router/guards.ts | 11 + packages/nanxing-admin/index.ts | 5 +- .../stores/useLocalConfigStore.ts | 68 +++ packages/nanxing-admin/tsconfig.json | 3 +- pnpm-lock.yaml | 404 ++++++++++++++++++ tsconfig.app.json | 2 +- vite.config.ts | 34 ++ 22 files changed, 887 insertions(+), 32 deletions(-) create mode 100644 apps/demo/auto-imports.d.ts create mode 100644 apps/demo/components.d.ts create mode 100644 packages/nanxing-admin/components/config-provider/ConfigProvider.vue create mode 100644 packages/nanxing-admin/components/config-provider/index.ts create mode 100644 packages/nanxing-admin/components/index.ts create mode 100644 packages/nanxing-admin/components/layouts/Provider.vue create mode 100644 packages/nanxing-admin/components/layouts/default/Index.vue create mode 100644 packages/nanxing-admin/components/layouts/index.ts create mode 100644 packages/nanxing-admin/core/constants.ts create mode 100644 packages/nanxing-admin/core/createWebApp.ts create mode 100644 packages/nanxing-admin/core/createWebRouter.ts create mode 100644 packages/nanxing-admin/core/router/guards.ts create mode 100644 packages/nanxing-admin/stores/useLocalConfigStore.ts create mode 100644 vite.config.ts diff --git a/apps/demo/auto-imports.d.ts b/apps/demo/auto-imports.d.ts new file mode 100644 index 0000000..d8e5994 --- /dev/null +++ b/apps/demo/auto-imports.d.ts @@ -0,0 +1,94 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + const EffectScope: typeof import('vue').EffectScope + const acceptHMRUpdate: typeof import('pinia').acceptHMRUpdate + const computed: typeof import('vue').computed + const createApp: typeof import('vue').createApp + const createPinia: typeof import('pinia').createPinia + const customRef: typeof import('vue').customRef + const defineAsyncComponent: typeof import('vue').defineAsyncComponent + const defineComponent: typeof import('vue').defineComponent + const defineStore: typeof import('pinia').defineStore + const effectScope: typeof import('vue').effectScope + const getActivePinia: typeof import('pinia').getActivePinia + const getCurrentInstance: typeof import('vue').getCurrentInstance + const getCurrentScope: typeof import('vue').getCurrentScope + const getCurrentWatcher: typeof import('vue').getCurrentWatcher + const h: typeof import('vue').h + const inject: typeof import('vue').inject + const isProxy: typeof import('vue').isProxy + const isReactive: typeof import('vue').isReactive + const isReadonly: typeof import('vue').isReadonly + const isRef: typeof import('vue').isRef + const isShallow: typeof import('vue').isShallow + const mapActions: typeof import('pinia').mapActions + const mapGetters: typeof import('pinia').mapGetters + const mapState: typeof import('pinia').mapState + const mapStores: typeof import('pinia').mapStores + const mapWritableState: typeof import('pinia').mapWritableState + const markRaw: typeof import('vue').markRaw + const nextTick: typeof import('vue').nextTick + const onActivated: typeof import('vue').onActivated + const onBeforeMount: typeof import('vue').onBeforeMount + const onBeforeRouteLeave: typeof import('vue-router').onBeforeRouteLeave + const onBeforeRouteUpdate: typeof import('vue-router').onBeforeRouteUpdate + const onBeforeUnmount: typeof import('vue').onBeforeUnmount + const onBeforeUpdate: typeof import('vue').onBeforeUpdate + const onDeactivated: typeof import('vue').onDeactivated + const onErrorCaptured: typeof import('vue').onErrorCaptured + const onMounted: typeof import('vue').onMounted + const onRenderTracked: typeof import('vue').onRenderTracked + const onRenderTriggered: typeof import('vue').onRenderTriggered + const onScopeDispose: typeof import('vue').onScopeDispose + const onServerPrefetch: typeof import('vue').onServerPrefetch + const onUnmounted: typeof import('vue').onUnmounted + const onUpdated: typeof import('vue').onUpdated + const onWatcherCleanup: typeof import('vue').onWatcherCleanup + const provide: typeof import('vue').provide + const reactive: typeof import('vue').reactive + const readonly: typeof import('vue').readonly + const ref: typeof import('vue').ref + const resolveComponent: typeof import('vue').resolveComponent + const setActivePinia: typeof import('pinia').setActivePinia + const setMapStoreSuffix: typeof import('pinia').setMapStoreSuffix + const shallowReactive: typeof import('vue').shallowReactive + const shallowReadonly: typeof import('vue').shallowReadonly + const shallowRef: typeof import('vue').shallowRef + const storeToRefs: typeof import('pinia').storeToRefs + const toRaw: typeof import('vue').toRaw + const toRef: typeof import('vue').toRef + const toRefs: typeof import('vue').toRefs + const toValue: typeof import('vue').toValue + const triggerRef: typeof import('vue').triggerRef + const unref: typeof import('vue').unref + const useAttrs: typeof import('vue').useAttrs + const useCssModule: typeof import('vue').useCssModule + const useCssVars: typeof import('vue').useCssVars + const useDialog: typeof import('naive-ui').useDialog + const useId: typeof import('vue').useId + const useLink: typeof import('vue-router').useLink + const useLoadingBar: typeof import('naive-ui').useLoadingBar + const useMessage: typeof import('naive-ui').useMessage + const useModel: typeof import('vue').useModel + const useNotification: typeof import('naive-ui').useNotification + const useRoute: typeof import('vue-router').useRoute + const useRouter: typeof import('vue-router').useRouter + const useSlots: typeof import('vue').useSlots + const useTemplateRef: typeof import('vue').useTemplateRef + const watch: typeof import('vue').watch + const watchEffect: typeof import('vue').watchEffect + const watchPostEffect: typeof import('vue').watchPostEffect + const watchSyncEffect: typeof import('vue').watchSyncEffect +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, ShallowRef, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/apps/demo/components.d.ts b/apps/demo/components.d.ts new file mode 100644 index 0000000..46ff78e --- /dev/null +++ b/apps/demo/components.d.ts @@ -0,0 +1,44 @@ +/* eslint-disable */ +// @ts-nocheck +// biome-ignore lint: disable +// oxlint-disable +// ------ +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +import { GlobalComponents } from 'vue' + +export {} + +/* prettier-ignore */ +declare module 'vue' { + export interface GlobalComponents { + NColorPicker: typeof import('naive-ui')['NColorPicker'] + NConfigProvider: typeof import('naive-ui')['NConfigProvider'] + NDialogProvider: typeof import('naive-ui')['NDialogProvider'] + NLayout: typeof import('naive-ui')['NLayout'] + NLayoutContent: typeof import('naive-ui')['NLayoutContent'] + NLayoutHeader: typeof import('naive-ui')['NLayoutHeader'] + NLayoutSider: typeof import('naive-ui')['NLayoutSider'] + NLoadingBarProvider: typeof import('naive-ui')['NLoadingBarProvider'] + NMessageProvider: typeof import('naive-ui')['NMessageProvider'] + NNotificationProvider: typeof import('naive-ui')['NNotificationProvider'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + } +} + +// For TSX support +declare global { + const NColorPicker: typeof import('naive-ui')['NColorPicker'] + const NConfigProvider: typeof import('naive-ui')['NConfigProvider'] + const NDialogProvider: typeof import('naive-ui')['NDialogProvider'] + const NLayout: typeof import('naive-ui')['NLayout'] + const NLayoutContent: typeof import('naive-ui')['NLayoutContent'] + const NLayoutHeader: typeof import('naive-ui')['NLayoutHeader'] + const NLayoutSider: typeof import('naive-ui')['NLayoutSider'] + const NLoadingBarProvider: typeof import('naive-ui')['NLoadingBarProvider'] + const NMessageProvider: typeof import('naive-ui')['NMessageProvider'] + const NNotificationProvider: typeof import('naive-ui')['NNotificationProvider'] + const RouterLink: typeof import('vue-router')['RouterLink'] + const RouterView: typeof import('vue-router')['RouterView'] +} \ No newline at end of file diff --git a/apps/demo/src/App.vue b/apps/demo/src/App.vue index 346a48f..2fbb6fe 100644 --- a/apps/demo/src/App.vue +++ b/apps/demo/src/App.vue @@ -1,3 +1,9 @@ + + diff --git a/apps/demo/src/main.ts b/apps/demo/src/main.ts index 5e174f1..e7c9c7e 100644 --- a/apps/demo/src/main.ts +++ b/apps/demo/src/main.ts @@ -1,9 +1,12 @@ import './assets/style/tailwind.css'; -import { createApp } from 'vue'; import App from './App.vue'; import { createWebApp } from 'nanxing-admin'; -createWebApp(); - -createApp(App).mount('#app'); +createWebApp(App, { + mount: '#app', + requestPrefix: '/api', + router: { + routes: [], + }, +}); diff --git a/apps/demo/vite.config.ts b/apps/demo/vite.config.ts index 519cde0..3339626 100644 --- a/apps/demo/vite.config.ts +++ b/apps/demo/vite.config.ts @@ -1,27 +1,44 @@ import { fileURLToPath, URL } from 'node:url'; - import { defineConfig } from 'vite'; -import vue from '@vitejs/plugin-vue'; -import vueJsx from '@vitejs/plugin-vue-jsx'; +import defineMainConfig from '../../vite.config'; +import { mergeConfig } from 'vite'; -import tailwindcss from '@tailwindcss/vite'; +export default defineConfig( + mergeConfig(defineMainConfig, { + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + }) +); // https://vitejs.dev/config/ -export default defineConfig({ - // base: 影响打包静态资源的路径 - base: './', - plugins: [vue(), vueJsx(), tailwindcss()], - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, - }, - css: { - preprocessorOptions: { - scss: { api: 'modern-compiler' }, - }, - }, - server: { - host: true, - }, -}); +// export default defineConfig({ +// // base: 影响打包静态资源的路径 +// base: './', +// plugins: [ +// vue(), +// vueJsx(), +// tailwindcss(), +// AutoImport({ +// imports: ['vue', 'vue-router', 'pinia', { 'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar'] }], +// }), +// Components({ +// resolvers: [NaiveUiResolver()], +// }), +// ], +// resolve: { +// alias: { +// '@': fileURLToPath(new URL('./src', import.meta.url)), +// }, +// }, +// css: { +// preprocessorOptions: { +// scss: { api: 'modern-compiler' }, +// }, +// }, +// server: { +// host: true, +// }, +// }); diff --git a/package.json b/package.json index 53248c0..348f52b 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,10 @@ "devDependencies": { "@types/node": "^25.0.3", "@vue/tsconfig": "^0.8.1", + "colord": "^2.9.3", "typescript": "^5.9.3", + "unplugin-auto-import": "^20.3.0", + "unplugin-vue-components": "^30.0.0", "vite": "^7.3.0", "vue-tsc": "^3.2.1" }, @@ -26,6 +29,7 @@ "@tsconfig/node18": "^18.2.6", "@vitejs/plugin-vue": "^6.0.3", "@vitejs/plugin-vue-jsx": "^5.1.3", + "naive-ui": "^2.43.2", "nanxing-admin": "workspace:*", "pinia": "^3.0.4", "pinia-plugin-persistedstate": "^4.7.1", diff --git a/packages/nanxing-admin/components/config-provider/ConfigProvider.vue b/packages/nanxing-admin/components/config-provider/ConfigProvider.vue new file mode 100644 index 0000000..fc6fc53 --- /dev/null +++ b/packages/nanxing-admin/components/config-provider/ConfigProvider.vue @@ -0,0 +1,38 @@ + + + diff --git a/packages/nanxing-admin/components/config-provider/index.ts b/packages/nanxing-admin/components/config-provider/index.ts new file mode 100644 index 0000000..f636380 --- /dev/null +++ b/packages/nanxing-admin/components/config-provider/index.ts @@ -0,0 +1,3 @@ +import ConfigProvider from './ConfigProvider.vue'; + +export const AppConfigProvider = ConfigProvider; diff --git a/packages/nanxing-admin/components/index.ts b/packages/nanxing-admin/components/index.ts new file mode 100644 index 0000000..2245ba1 --- /dev/null +++ b/packages/nanxing-admin/components/index.ts @@ -0,0 +1 @@ +export * from './config-provider'; diff --git a/packages/nanxing-admin/components/layouts/Provider.vue b/packages/nanxing-admin/components/layouts/Provider.vue new file mode 100644 index 0000000..5cde980 --- /dev/null +++ b/packages/nanxing-admin/components/layouts/Provider.vue @@ -0,0 +1,8 @@ + + + diff --git a/packages/nanxing-admin/components/layouts/default/Index.vue b/packages/nanxing-admin/components/layouts/default/Index.vue new file mode 100644 index 0000000..be76b02 --- /dev/null +++ b/packages/nanxing-admin/components/layouts/default/Index.vue @@ -0,0 +1,33 @@ + + + diff --git a/packages/nanxing-admin/components/layouts/index.ts b/packages/nanxing-admin/components/layouts/index.ts new file mode 100644 index 0000000..ad569c4 --- /dev/null +++ b/packages/nanxing-admin/components/layouts/index.ts @@ -0,0 +1,6 @@ +import Provider from './Provider.vue'; + +import Default from './default/index.vue'; + +export const LayoutProvider = Provider; +export const LayoutDefault = Default; diff --git a/packages/nanxing-admin/core/constants.ts b/packages/nanxing-admin/core/constants.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/nanxing-admin/core/createWebApp.ts b/packages/nanxing-admin/core/createWebApp.ts new file mode 100644 index 0000000..72c1304 --- /dev/null +++ b/packages/nanxing-admin/core/createWebApp.ts @@ -0,0 +1,31 @@ +import { createApp, type App, type Component, type Plugin } from 'vue'; +import { createWebRouter, type WebRouterOptions } from './createWebRouter'; +import { createPinia } from 'pinia'; +import piniaPluginPersistedState from 'pinia-plugin-persistedstate'; + +export interface WebAppOptions { + mount: string; + plugins?: Plugin[]; + requestPrefix: string; + router: WebRouterOptions; +} + +// 封装一个创建 Web 应用的函数 +// 用于替代 Vue 3 项目中的 main.ts 默认的应用逻辑 +export function createWebApp(rootComponent: Component, options: WebAppOptions): App { + const app = createApp(rootComponent); + const router = createWebRouter(options.router); + + app.use(router); + + if (options.plugins && options.plugins.length > 0) { + options.plugins.forEach((plugin) => { + app.use(plugin); + }); + } + + app.use(createPinia().use(piniaPluginPersistedState)); + + app.mount(options.mount); + return app; +} diff --git a/packages/nanxing-admin/core/createWebRouter.ts b/packages/nanxing-admin/core/createWebRouter.ts new file mode 100644 index 0000000..0839f67 --- /dev/null +++ b/packages/nanxing-admin/core/createWebRouter.ts @@ -0,0 +1,50 @@ +import { + createMemoryHistory, + createRouter, + createWebHashHistory, + createWebHistory, + type Router, + type RouterHistory, + type RouterOptions, +} from 'vue-router'; +import { setRouterTranslateGuard } from './router/guards'; + +type RouterHistoryMode = 'hash' | 'history' | 'memory'; +type RouterHistoryFunction = (base?: string) => RouterHistory; + +function _useHistory(mode: RouterHistoryMode): RouterHistoryFunction { + const historyObject: Record = { + hash: createWebHashHistory, + history: createWebHistory, + memory: createMemoryHistory, + }; + return historyObject[mode]; +} + +// 创建一个 Web 路由实例的函数 +// 默认是 history 模式 +export interface WebRouterOptions extends Omit { + mode?: RouterHistoryMode; + base?: string; + guards?: ((router: Router) => void)[]; +} +export function createWebRouter(options: WebRouterOptions): Router { + const history = _useHistory(options?.mode || 'history')?.(options?.base); + const routes = options?.routes || []; + const scrollBehavior = options?.scrollBehavior || (() => ({ left: 0, top: 0 })); + const guards = [setRouterTranslateGuard].concat(options?.guards || []); + + const router = createRouter({ + history, + routes, + scrollBehavior, + }); + + if (guards && guards.length > 0) { + guards.forEach((guard) => { + guard(router); + }); + } + + return router; +} diff --git a/packages/nanxing-admin/core/router/guards.ts b/packages/nanxing-admin/core/router/guards.ts new file mode 100644 index 0000000..9f0383c --- /dev/null +++ b/packages/nanxing-admin/core/router/guards.ts @@ -0,0 +1,11 @@ +import { type ShallowRef, shallowRef } from 'vue'; +import { type LoadingBarApi } from 'naive-ui'; +import type { Router } from 'vue-router'; + +export const loadingBarRef: ShallowRef = shallowRef(null); + +export function setRouterTranslateGuard(router: Router) { + console.log('Router translate guard set'); + router.beforeEach(() => loadingBarRef.value?.start()); + router.afterEach(() => loadingBarRef.value?.finish()); +} diff --git a/packages/nanxing-admin/index.ts b/packages/nanxing-admin/index.ts index 6c7f184..abc3eb1 100644 --- a/packages/nanxing-admin/index.ts +++ b/packages/nanxing-admin/index.ts @@ -1,3 +1,2 @@ -export function createWebApp() { - console.log('Created web app'); -} +export * from './core/createWebApp'; +export * from './components'; diff --git a/packages/nanxing-admin/stores/useLocalConfigStore.ts b/packages/nanxing-admin/stores/useLocalConfigStore.ts new file mode 100644 index 0000000..a9d8eeb --- /dev/null +++ b/packages/nanxing-admin/stores/useLocalConfigStore.ts @@ -0,0 +1,68 @@ +import type { GlobalThemeOverrides } from 'naive-ui'; +import { defineStore } from 'pinia'; +import { computed, shallowRef } from 'vue'; +import { colord } from 'colord'; + +const LOCAL_FIXED_THEME_PRIMARY_COLOR = '#31A848FF'; + +export const useLocalConfigStore = defineStore( + 'localConfig', + () => { + // 本地主题色配置 + const { primaryColor, resetPrimaryColor, grayMode, toggleGrayMode, naiveThemeProps } = (function () { + const primaryColor = shallowRef(LOCAL_FIXED_THEME_PRIMARY_COLOR); + + // naive-ui 主题色变更 + const naiveThemeProps = computed((): GlobalThemeOverrides => { + const hsColor = colord(primaryColor.value).lighten(0.035); + const pColor = colord(primaryColor.value).darken(0.1); + return { + common: { + primaryColor: primaryColor.value, + primaryColorHover: hsColor.toHex(), + primaryColorPressed: pColor.toHex(), + primaryColorSuppl: hsColor.toHex(), + }, + LoadingBar: { + colorLoading: primaryColor.value, + }, + }; + }); + + function resetPrimaryColor() { + primaryColor.value = LOCAL_FIXED_THEME_PRIMARY_COLOR; + } + + const grayMode = shallowRef(false); + function toggleGrayMode() { + grayMode.value = !grayMode.value; + if (grayMode.value) { + document.documentElement.style.filter = 'grayscale(1)'; + } else { + document.documentElement.style.filter = 'grayscale(0)'; + } + } + + return { + primaryColor, + resetPrimaryColor, + grayMode, + toggleGrayMode, + naiveThemeProps, + }; + })(); + + // 布局配置 + + return { + primaryColor, + resetPrimaryColor, + grayMode, + toggleGrayMode, + naiveThemeProps, + }; + }, + { + persist: true, + } +); diff --git a/packages/nanxing-admin/tsconfig.json b/packages/nanxing-admin/tsconfig.json index f26d8fe..2d8c52e 100644 --- a/packages/nanxing-admin/tsconfig.json +++ b/packages/nanxing-admin/tsconfig.json @@ -1,3 +1,4 @@ { - "extends": "../../tsconfig.app.json" + "extends": "../../tsconfig.app.json", + "include": ["./**/*.vue", "./**/*.ts", "./**/*.tsx", "./**/*.js", "./**/*.jsx"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2511389..277e253 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@vitejs/plugin-vue-jsx': specifier: ^5.1.3 version: 5.1.3(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.9.3)) + naive-ui: + specifier: ^2.43.2 + version: 2.43.2(vue@3.5.26(typescript@5.9.3)) nanxing-admin: specifier: workspace:* version: link:packages/nanxing-admin @@ -45,9 +48,18 @@ importers: '@vue/tsconfig': specifier: ^0.8.1 version: 0.8.1(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) + colord: + specifier: ^2.9.3 + version: 2.9.3 typescript: specifier: ^5.9.3 version: 5.9.3 + unplugin-auto-import: + specifier: ^20.3.0 + version: 20.3.0 + unplugin-vue-components: + specifier: ^30.0.0 + version: 30.0.0(@babel/parser@7.28.5)(vue@3.5.26(typescript@5.9.3)) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) @@ -178,6 +190,19 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@css-render/plugin-bem@0.15.14': + resolution: {integrity: sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==} + peerDependencies: + css-render: ~0.15.14 + + '@css-render/vue3-ssr@0.15.14': + resolution: {integrity: sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==} + peerDependencies: + vue: ^3.0.11 + + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -350,6 +375,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@juggle/resize-observer@3.4.0': + resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} + '@rolldown/pluginutils@1.0.0-beta.53': resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} @@ -577,6 +605,15 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/katex@0.16.7': + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.21': + resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==} + '@types/node@25.0.3': resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} @@ -674,9 +711,17 @@ packages: vue: optional: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + alien-signals@3.1.2: resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + baseline-browser-mapping@2.9.11: resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true @@ -692,6 +737,19 @@ packages: caniuse-lite@1.0.30001762: resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -699,9 +757,23 @@ packages: resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} engines: {node: '>=18'} + css-render@0.15.14: + resolution: {integrity: sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==} + + csstype@3.0.11: + resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} + csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + date-fns-tz@3.2.0: + resolution: {integrity: sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==} + peerDependencies: + date-fns: ^3.0.0 || ^4.0.0 + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -738,9 +810,22 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + evtd@0.2.4: + resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==} + + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -762,6 +847,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -776,6 +865,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -860,6 +952,16 @@ packages: resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} engines: {node: '>= 12.0.0'} + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + + lodash-es@4.17.22: + resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -869,12 +971,20 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + naive-ui@2.43.2: + resolution: {integrity: sha512-YlLMnGrwGTOc+zMj90sG3ubaH5/7czsgLgGcjTLA981IUaz8r6t4WIujNt8r9PNr+dqv6XNEr0vxkARgPPjfBQ==} + peerDependencies: + vue: ^3.0.0 + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -886,6 +996,9 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -919,10 +1032,23 @@ packages: typescript: optional: true + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -931,6 +1057,12 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + seemly@0.3.10: + resolution: {integrity: sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -943,6 +1075,9 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + superjson@2.2.6: resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} engines: {node: '>=16'} @@ -958,20 +1093,68 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + treemate@0.3.11: + resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==} + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + unimport@5.6.0: + resolution: {integrity: sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A==} + engines: {node: '>=18.12.0'} + + unplugin-auto-import@20.3.0: + resolution: {integrity: sha512-RcSEQiVv7g0mLMMXibYVKk8mpteKxvyffGuDKqZZiFr7Oq3PB1HwgHdK5O7H4AzbhzHoVKG0NnMnsk/1HIVYzQ==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^4.0.0 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin-vue-components@30.0.0: + resolution: {integrity: sha512-4qVE/lwCgmdPTp6h0qsRN2u642tt4boBQtcpn4wQcWZAsr8TQwq+SPT3NDu/6kBFxzo/sSEK4ioXhOOBrXc3iw==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 || ^4.0.0 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' + vdirs@0.1.8: + resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==} + peerDependencies: + vue: ^3.0.11 + vite@7.3.0: resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1012,6 +1195,11 @@ packages: yaml: optional: true + vooks@0.2.12: + resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==} + peerDependencies: + vue: ^3.0.0 + vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} @@ -1034,6 +1222,14 @@ packages: typescript: optional: true + vueuc@0.4.65: + resolution: {integrity: sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==} + peerDependencies: + vue: ^3.0.11 + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -1206,6 +1402,16 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@css-render/plugin-bem@0.15.14(css-render@0.15.14)': + dependencies: + css-render: 0.15.14 + + '@css-render/vue3-ssr@0.15.14(vue@3.5.26(typescript@5.9.3))': + dependencies: + vue: 3.5.26(typescript@5.9.3) + + '@emotion/hash@0.8.0': {} + '@esbuild/aix-ppc64@0.27.2': optional: true @@ -1303,6 +1509,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@juggle/resize-observer@3.4.0': {} + '@rolldown/pluginutils@1.0.0-beta.53': {} '@rolldown/pluginutils@1.0.0-beta.57': {} @@ -1445,6 +1653,14 @@ snapshots: '@types/estree@1.0.8': {} + '@types/katex@0.16.7': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.21 + + '@types/lodash@4.17.21': {} + '@types/node@25.0.3': dependencies: undici-types: 7.16.0 @@ -1597,8 +1813,12 @@ snapshots: typescript: 5.9.3 vue: 3.5.26(typescript@5.9.3) + acorn@8.15.0: {} + alien-signals@3.1.2: {} + async-validator@4.2.5: {} + baseline-browser-mapping@2.9.11: {} birpc@2.9.0: {} @@ -1613,14 +1833,37 @@ snapshots: caniuse-lite@1.0.30001762: {} + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + colord@2.9.3: {} + + confbox@0.1.8: {} + + confbox@0.2.2: {} + convert-source-map@2.0.0: {} copy-anything@4.0.5: dependencies: is-what: 5.5.0 + css-render@0.15.14: + dependencies: + '@emotion/hash': 0.8.0 + csstype: 3.0.11 + + csstype@3.0.11: {} + csstype@3.2.3: {} + date-fns-tz@3.2.0(date-fns@4.1.0): + dependencies: + date-fns: 4.1.0 + + date-fns@4.1.0: {} + debug@4.4.3: dependencies: ms: 2.1.3 @@ -1669,8 +1912,18 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@5.0.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + evtd@0.2.4: {} + + exsolve@1.0.8: {} + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -1682,6 +1935,8 @@ snapshots: graceful-fs@4.2.11: {} + highlight.js@11.11.1: {} + hookable@5.5.3: {} is-what@5.5.0: {} @@ -1690,6 +1945,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + jsesc@3.1.0: {} json5@2.2.3: {} @@ -1743,6 +2000,16 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.2 lightningcss-win32-x64-msvc: 1.30.2 + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + + lodash-es@4.17.22: {} + + lodash@4.17.21: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -1753,16 +2020,48 @@ snapshots: mitt@3.0.1: {} + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + ms@2.1.3: {} muggle-string@0.4.1: {} + naive-ui@2.43.2(vue@3.5.26(typescript@5.9.3)): + dependencies: + '@css-render/plugin-bem': 0.15.14(css-render@0.15.14) + '@css-render/vue3-ssr': 0.15.14(vue@3.5.26(typescript@5.9.3)) + '@types/katex': 0.16.7 + '@types/lodash': 4.17.21 + '@types/lodash-es': 4.17.12 + async-validator: 4.2.5 + css-render: 0.15.14 + csstype: 3.2.3 + date-fns: 4.1.0 + date-fns-tz: 3.2.0(date-fns@4.1.0) + evtd: 0.2.4 + highlight.js: 11.11.1 + lodash: 4.17.21 + lodash-es: 4.17.22 + seemly: 0.3.10 + treemate: 0.3.11 + vdirs: 0.1.8(vue@3.5.26(typescript@5.9.3)) + vooks: 0.2.12(vue@3.5.26(typescript@5.9.3)) + vue: 3.5.26(typescript@5.9.3) + vueuc: 0.4.65(vue@3.5.26(typescript@5.9.3)) + nanoid@3.3.11: {} node-releases@2.0.27: {} path-browserify@1.0.1: {} + pathe@2.0.3: {} + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -1782,12 +2081,28 @@ snapshots: optionalDependencies: typescript: 5.9.3 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + quansync@0.2.11: {} + + readdirp@4.1.2: {} + rfdc@1.4.1: {} rollup@4.54.0: @@ -1818,12 +2133,20 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 + scule@1.3.0: {} + + seemly@0.3.10: {} + semver@6.3.1: {} source-map-js@1.2.1: {} speakingurl@14.0.1: {} + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + superjson@2.2.6: dependencies: copy-anything: 4.0.5 @@ -1837,16 +2160,79 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + treemate@0.3.11: {} + typescript@5.9.3: {} + ufo@1.6.1: {} + undici-types@7.16.0: {} + unimport@5.6.0: + dependencies: + acorn: 8.15.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.0 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 2.3.0 + scule: 1.3.0 + strip-literal: 3.1.0 + tinyglobby: 0.2.15 + unplugin: 2.3.11 + unplugin-utils: 0.3.1 + + unplugin-auto-import@20.3.0: + dependencies: + local-pkg: 1.1.2 + magic-string: 0.30.21 + picomatch: 4.0.3 + unimport: 5.6.0 + unplugin: 2.3.11 + unplugin-utils: 0.3.1 + + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + unplugin-vue-components@30.0.0(@babel/parser@7.28.5)(vue@3.5.26(typescript@5.9.3)): + dependencies: + chokidar: 4.0.3 + debug: 4.4.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.0 + tinyglobby: 0.2.15 + unplugin: 2.3.11 + unplugin-utils: 0.3.1 + vue: 3.5.26(typescript@5.9.3) + optionalDependencies: + '@babel/parser': 7.28.5 + transitivePeerDependencies: + - supports-color + + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.15.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 + vdirs@0.1.8(vue@3.5.26(typescript@5.9.3)): + dependencies: + evtd: 0.2.4 + vue: 3.5.26(typescript@5.9.3) + vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2): dependencies: esbuild: 0.27.2 @@ -1861,6 +2247,11 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 + vooks@0.2.12(vue@3.5.26(typescript@5.9.3)): + dependencies: + evtd: 0.2.4 + vue: 3.5.26(typescript@5.9.3) + vscode-uri@3.1.0: {} vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)): @@ -1884,4 +2275,17 @@ snapshots: optionalDependencies: typescript: 5.9.3 + vueuc@0.4.65(vue@3.5.26(typescript@5.9.3)): + dependencies: + '@css-render/vue3-ssr': 0.15.14(vue@3.5.26(typescript@5.9.3)) + '@juggle/resize-observer': 3.4.0 + css-render: 0.15.14 + evtd: 0.2.4 + seemly: 0.3.10 + vdirs: 0.1.8(vue@3.5.26(typescript@5.9.3)) + vooks: 0.2.12(vue@3.5.26(typescript@5.9.3)) + vue: 3.5.26(typescript@5.9.3) + + webpack-virtual-modules@0.6.2: {} + yallist@3.1.1: {} diff --git a/tsconfig.app.json b/tsconfig.app.json index 9f8d803..1d17765 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -5,7 +5,7 @@ "composite": true, "noEmit": true, "paths": { - "@/*": ["./src"] + "@/*": ["./src/*"] } } } diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..04dffb2 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,34 @@ +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import vueJsx from '@vitejs/plugin-vue-jsx'; + +import tailwindcss from '@tailwindcss/vite'; + +import AutoImport from 'unplugin-auto-import/vite'; +import Components from 'unplugin-vue-components/vite'; +import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'; + +// https://vitejs.dev/config/ +export default defineConfig({ + // base: 影响打包静态资源的路径 + base: './', + plugins: [ + vue(), + vueJsx(), + tailwindcss(), + AutoImport({ + imports: ['vue', 'vue-router', 'pinia', { 'naive-ui': ['useDialog', 'useMessage', 'useNotification', 'useLoadingBar'] }], + }), + Components({ + resolvers: [NaiveUiResolver()], + }), + ], + css: { + preprocessorOptions: { + scss: { api: 'modern-compiler' }, + }, + }, + server: { + host: true, + }, +});