import VueI18nPlugin from "@intlify/unplugin-vue-i18n/vite"; import vue from "@vitejs/plugin-vue"; import vueJsx from "@vitejs/plugin-vue-jsx"; import laravel from "laravel-vite-plugin"; import { fileURLToPath } from "node:url"; import AutoImport from "unplugin-auto-import/vite"; import Components from "unplugin-vue-components/vite"; import { VueRouterAutoImports, getPascalCaseRouteName, } from "unplugin-vue-router"; import VueRouter from "unplugin-vue-router/vite"; import { defineConfig } from "vite"; import VueDevTools from "vite-plugin-vue-devtools"; import Layouts from "vite-plugin-vue-layouts"; import vuetify from "vite-plugin-vuetify"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ // Docs: https://github.com/posva/unplugin-vue-router // ℹ️ This plugin should be placed before vue plugin VueRouter({ getRouteName: (routeNode) => { // Convert pascal case to kebab case return getPascalCaseRouteName(routeNode) .replace(/([a-z0-9])([A-Z])/g, "$1-$2") .toLowerCase(); }, beforeWriteFiles: (root) => { // root.insert('/apps/email/:filter', '/resources/js/pages/apps/email/index.vue') // root.insert('/apps/email/:label', '/resources/js/pages/apps/email/index.vue') }, routesFolder: "resources/js/pages", }), vue({ template: { compilerOptions: { isCustomElement: (tag) => tag === "swiper-container" || tag === "swiper-slide", }, transformAssetUrls: { base: null, includeAbsolute: false, }, }, }), laravel({ input: ["resources/js/main.js"], refresh: true, }), VueDevTools(), vueJsx(), // Docs: https://github.com/vuetifyjs/vuetify-loader/tree/master/packages/vite-plugin vuetify({ styles: { configFile: "resources/styles/variables/_vuetify.scss", }, }), // Docs: https://github.com/johncampionjr/vite-plugin-vue-layouts#vite-plugin-vue-layouts Layouts({ layoutsDirs: "./resources/js/layouts/", }), // Docs: https://github.com/antfu/unplugin-vue-components#unplugin-vue-components Components({ dirs: [ "resources/js/@core/components", "resources/js/views/demos", "resources/js/components", ], dts: true, resolvers: [ (componentName) => { // Auto import `VueApexCharts` if (componentName === "VueApexCharts") return { name: "default", from: "vue3-apexcharts", as: "VueApexCharts", }; }, ], }), // Docs: https://github.com/antfu/unplugin-auto-import#unplugin-auto-import AutoImport({ imports: [ "vue", VueRouterAutoImports, "@vueuse/core", "@vueuse/math", "vue-i18n", "pinia", ], dirs: [ "./resources/js/@core/utils", "./resources/js/@core/composable/", "./resources/js/composables/", "./resources/js/utils/", "./resources/js/plugins/*/composables/*", ], vueTemplate: true, // ℹ️ Disabled to avoid confusion & accidental usage ignore: ["useCookies", "useStorage"], eslintrc: { enabled: true, filepath: "./.eslintrc-auto-import.json", }, }), // Docs: https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n#intlifyunplugin-vue-i18n VueI18nPlugin({ runtimeOnly: true, compositionOnly: true, include: [ fileURLToPath( new URL("./resources/js/plugins/i18n/locales/**", import.meta.url) ), ], }), ], define: { "process.env": {}, }, resolve: { alias: { "@core-scss": fileURLToPath( new URL("./resources/styles/@core", import.meta.url) ), "@": fileURLToPath(new URL("./resources/js", import.meta.url)), "@themeConfig": fileURLToPath( new URL("./themeConfig.js", import.meta.url) ), "@core": fileURLToPath(new URL("./resources/js/@core", import.meta.url)), "@layouts": fileURLToPath( new URL("./resources/js/@layouts", import.meta.url) ), "@images": fileURLToPath(new URL("./resources/images/", import.meta.url)), "@styles": fileURLToPath(new URL("./resources/styles/", import.meta.url)), "@configured-variables": fileURLToPath( new URL("./resources/styles/variables/_template.scss", import.meta.url) ), apexcharts: fileURLToPath( new URL("node_modules/apexcharts-clevision", import.meta.url) ), "@db": fileURLToPath( new URL("./resources/js/plugins/fake-api/handlers/", import.meta.url) ), "@api-utils": fileURLToPath( new URL("./resources/js/plugins/fake-api/utils/", import.meta.url) ), vuetify: fileURLToPath(new URL("node_modules/vuetify", import.meta.url)), }, }, build: { chunkSizeWarningLimit: 5000, }, optimizeDeps: { exclude: ["vuetify"], entries: ["./resources/js/**/*.vue"], }, });