diff --git a/auto-imports.d.ts b/auto-imports.d.ts new file mode 100644 index 0000000..fed4e1d --- /dev/null +++ b/auto-imports.d.ts @@ -0,0 +1,192 @@ +// Generated by 'unplugin-auto-import' +// We suggest you to commit this file into source control +declare global { + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const biSyncRef: typeof import('@vueuse/core')['biSyncRef'] + const computed: typeof import('vue')['computed'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] + const customRef: typeof import('vue')['customRef'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] + const effectScope: typeof import('vue')['effectScope'] + const EffectScope: typeof import('vue')['EffectScope'] + const extendRef: typeof import('@vueuse/core')['extendRef'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] + const inject: typeof import('vue')['inject'] + const isDefined: typeof import('@vueuse/core')['isDefined'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + 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 onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + 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 onStartTyping: typeof import('@vueuse/core')['onStartTyping'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] + const provide: typeof import('vue')['provide'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] + const reactive: typeof import('vue')['reactive'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] + const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] + const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] + const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useHead: typeof import('@vueuse/head')['useHead'] + const useI18n: typeof import('vue-i18n')['useI18n'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] + const useSlots: typeof import('vue')['useSlots'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const watch: typeof import('vue')['watch'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] +} +export {} diff --git a/components.d.ts b/components.d.ts new file mode 100644 index 0000000..a55febc --- /dev/null +++ b/components.d.ts @@ -0,0 +1,41 @@ +// generated by unplugin-vue-components +// We suggest you to commit this file into source control +// Read more: https://github.com/vuejs/vue-next/pull/3399 + +declare module 'vue' { + export interface GlobalComponents { + Adjustments: typeof import('./src/components/icons/Adjustments.vue')['default'] + AppImg: typeof import('./src/components/icons/AppImg.vue')['default'] + AppLogoText: typeof import('./src/components/icons/AppLogoText.vue')['default'] + AppLogoV: typeof import('./src/components/icons/AppLogoV.vue')['default'] + BellIcon: typeof import('./src/components/icons/BellIcon.vue')['default'] + CarbonEdit: typeof import('~icons/carbon/edit')['default'] + CarbonErase: typeof import('~icons/carbon/erase')['default'] + CarbonHome: typeof import('~icons/carbon/home')['default'] + CarbonLanguage: typeof import('~icons/carbon/language')['default'] + CheckInput: typeof import('./src/components/forms/CheckInput.vue')['default'] + ChevronDoubleRight: typeof import('./src/components/icons/ChevronDoubleRight.vue')['default'] + CloseIcon: typeof import('./src/components/icons/CloseIcon.vue')['default'] + CloudIcon: typeof import('./src/components/icons/CloudIcon.vue')['default'] + DataInput: typeof import('./src/components/forms/DataInput.vue')['default'] + Footer: typeof import('./src/components/Footer.vue')['default'] + HomeIcon: typeof import('./src/components/icons/HomeIcon.vue')['default'] + InputValue: typeof import('./src/components/InputValue.vue')['default'] + LoginIcon: typeof import('./src/components/icons/LoginIcon.vue')['default'] + LogoutIcon: typeof import('./src/components/icons/LogoutIcon.vue')['default'] + MenuLocales: typeof import('./src/components/MenuLocales.vue')['default'] + MessageBox: typeof import('./src/components/MessageBox.vue')['default'] + MessageBoxView: typeof import('./src/components/MessageBoxView.vue')['default'] + Modal: typeof import('./src/components/Modal.vue')['default'] + Navbar: typeof import('./src/components/Navbar.vue')['default'] + NavMenu: typeof import('./src/components/NavMenu.vue')['default'] + README: typeof import('./src/components/README.md')['default'] + SearchIcon: typeof import('./src/components/icons/SearchIcon.vue')['default'] + TextInput: typeof import('./src/components/forms/TextInput.vue')['default'] + TiptapEditor: typeof import('./src/components/TiptapEditor.vue')['default'] + UserAddIcon: typeof import('./src/components/icons/UserAddIcon.vue')['default'] + UserIcon: typeof import('./src/components/icons/UserIcon.vue')['default'] + } +} + +export { } diff --git a/index.html b/index.html new file mode 100644 index 0000000..c123488 --- /dev/null +++ b/index.html @@ -0,0 +1,25 @@ + + + + + + + Gen Admin + + + + +
+ + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..df536e9 --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "private": true, + "scripts": { + "dev": "vite --port 5555 --open", + "build": "cross-env NODE_ENV=production vite build", + "preview": "vite preview" + }, + "dependencies": { + "@intlify/vite-plugin-vue-i18n": "^2.5.0", + "@tiptap/extension-link": "^2.0.0-beta.35", + "@tiptap/extension-text-style": "^2.0.0-beta.23", + "@tiptap/starter-kit": "^2.0.0-beta.168", + "@tiptap/vue-3": "^2.0.0-beta.87", + "@types/toastify-js": "^1.11.0", + "@vueuse/core": "^6.9.2", + "@vueuse/head": "^0.6.0", + "install": "^0.13.0", + "luxon": "^2.3.0", + "toastify-js": "^1.11.2", + "vue": "^3.2.26", + "vue-demi": "^0.12.1", + "vue-i18n": "^9.1.9", + "vue-router": "^4.0.12", + "vue3-highlightjs": "^1.0.5", + "yaml": "^2.0.0-10" + }, + "devDependencies": { + "@antfu/eslint-config": "^0.11.1", + "@iconify-json/carbon": "^1.0.12", + "@types/node": "^16.11.19", + "@unocss/preset-icons": "^0.7.7", + "@unocss/reset": "^0.7.7", + "@vitejs/plugin-vue": "^1.10.2", + "cross-env": "^7.0.3", + "eslint": "^8.6.0", + "pnpm": "^6.25.0", + "typescript": "^4.5.4", + "unocss": "^0.7.7", + "unplugin-auto-import": "^0.5.5", + "unplugin-icons": "^0.12.23", + "unplugin-vue-components": "^0.17.11", + "vite": "^2.7.10", + "vite-plugin-inspect": "^0.3.13", + "vite-plugin-md": "^0.11.7", + "vite-plugin-pages": "^0.18.2", + "vite-plugin-vue-layouts": "^0.5.0" + }, + "eslintConfig": { + "extends": "@antfu/eslint-config", + "rules": { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "off" + } + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..7e35dd7 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,147 @@ +import path from 'path' +import { defineConfig } from 'vite' +import Vue from '@vitejs/plugin-vue' +import Pages from 'vite-plugin-pages' +import Layouts from 'vite-plugin-vue-layouts' +import Icons from 'unplugin-icons/vite' +import IconsResolver from 'unplugin-icons/resolver' +import Components from 'unplugin-vue-components/vite' +import Unocss from 'unocss/vite' +import { presetAttributify, presetUno } from 'unocss' +import presetIcons from '@unocss/preset-icons' +import AutoImport from 'unplugin-auto-import/vite' +import VueI18n from '@intlify/vite-plugin-vue-i18n' +import Markdown from 'vite-plugin-md' +import Inspect from 'vite-plugin-inspect' + +export default defineConfig({ + resolve: { + alias: { + '~/': `${path.resolve(__dirname, 'src')}/`, + '@/': `${path.resolve(__dirname, 'src/components')}/`, + }, + }, + plugins: [ + Vue({ + include: [/\.vue$/, /\.md$/], // <-- + }), + + // https://github.com/hannoeru/vite-plugin-pages + Pages({ + extensions: ['vue', 'md'], + }), + // imagetools(), + Layouts({ + layoutsDir: 'src/layouts', + defaultLayout: 'Default' + }), + // https://github.com/antfu/unplugin-auto-import + AutoImport({ + include: [ + /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx + /\.vue$/, /\.vue\?vue/, // .vue + /\.md$/, // .md + ], + imports: [ + 'vue', + 'vue-router', + 'vue-i18n', +// 'vuex', + '@vueuse/head', + '@vueuse/core', + ], + dts: true, + }), + + // https://github.com/antfu/vite-plugin-components + Components({ + // allow auto load markdown components under `./src/components/` + extensions: ['vue', 'md'], + resolvers: [ + // auto import icons + // https://github.com/antfu/vite-plugin-icons + IconsResolver({ + componentPrefix: '', + enabledCollections: ['carbon'], + }), + ], + // allow auto import and register components used in markdown + include: [/\.vue$/, /\.vue\?vue/, /\.md$/], + dts: true, + }), + + // https://github.com/antfu/vite-plugin-icons + Icons({ + autoInstall: true, + }), + VueI18n({ + runtimeOnly: true, + compositionOnly: true, + include: [path.resolve(__dirname, 'locales/**')], + }), + // https://github.com/antfu/vite-plugin-md + Markdown({ + }), + // https://github.com/antfu/vite-plugin-inspect + Inspect({ + // change this to enable inspect for debugging + enabled: false, + }), + // https://github.com/antfu/unocss + Unocss({ + shortcuts: [ + { + 'btn': 'px-4 py-1 rounded inline-block bg-teal-600 text-white cursor-pointer hover:bg-teal-700 disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50', + 'icon-btn': 'text-[0.9em] inline-block cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-indigo-900', + 'section-headline': 'font-normal sm:text-xl racking-widest border-indigo-300 text-indigo-700 dark:text-indigo-400 border-l-8 pl-2 mb-2', + 'hr-sep': 'mt-4 mb-3 text-indigo-200 dark:text-indigo-600', + 'hr-sep-itms': 'mt-3 mb-3 text-indigo-200 dark:text-gray-500', + 'panel-group': 'font-light text-lg px-1 mb-12 dark:text-dark-900', + 'nav-item': 'ml-5 hover:-mt-1 hover:border-b-2 hover:border-indigo-500 text-[0.9em] cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-indigo-900 dark:bg-cool-gray-800 dark:text-white dark:hover:text-indigo-200 dark:hover:border-indigo-200">', + 'h2-title': 'text-xl font-semibold mb-4 text-indigo-500 dark:text-indigo-900', + 'sectionitem': 'mt-2 text-sm text-gray-600 dark:text-gray-500', + 'tag-list': 'inline-flex gap-2 w-full flex-wrap', + 'tag-item': 'rounded-xl dark:text-gray-100 bg-gray-200 dark:bg-gray-600 px-3 py-1 text-xs leading-5', + 'left-item': 'lg:inline-block lg:w-2/12 lg:align-top italic mb-2 pr-2', + 'right-item': 'lg:inline-block lg:w-10/12 w-full', + 'box': 'py-8 px-8 inline-flex mx-auto bg-white dark:bg-gray-400 dark:bg-opacity-10 rounded-xl shadow-md space-y-2', + 'btn-msg': 'px-4 py-1 text-sm text-indigo-600 dark:text-indigo-400 font-semibold rounded-full border border-indigo-200 dark:border-indigo-800 hover:text-white hover:bg-indigo-600 hover:border-transparent focus:outline-none hover:dark:text-indigo-100 focus:ring-2 ring-indigo-600 ring-opacity-40 bg-gray-300 dark:bg-gray-700', + 'checkbox': 'form-check-input h-4 w-4 border border-gray-300 rounded-sm bg-white checked:bg-blue-600 checked:border-blue-600 focus:outline-none transition duration-200 mt-1 align-top bg-no-repeat bg-center bg-contain float-left mr-2 cursor-pointer', + 'helpbox': 'border border-gray-500 p-2 my-2 text-sm text-indigo-700 dark:text-indigo-400 font-normal rounded-tl-xl rounded-tr-xl bg-gray-100 dark:bg-gray-900', + 'input-fld': 'appearance-none bg-transparent border-none w-full text-gray-700 dark:text-gray-200 leading-tight focus:outline-none', + 'input-lbl': 'text-gray-600 dark:text-gray-300 text-sm', + /// dynamic shortcuts + // [/^btn-(.*)$/, ([, c]) => `bg-${c}-400 text-${c}-100 py-2 px-4 rounded-lg`], + } + ], + presets: [ + presetUno(), + presetAttributify(), + presetIcons({ + scale: 1.2, + }), + ], + }), + ], + + server: { + fs: { + strict: true, + }, + }, + build: { + sourcemap: false, + }, + optimizeDeps: { + include: [ + 'vue', + 'vue-router', + 'vue-i18n', + '@vueuse/core', + '@vueuse/head', + ], + exclude: [ + 'vue-demi', + ], + }, +})