UNPKG

@vueless/nuxt

Version:

Nuxt Styleless UI Component Library, powered by Tailwind CSS.

77 lines (72 loc) 2.47 kB
import { addTemplate, installModule, useNuxt, defineNuxtModule, createResolver, addPlugin, addComponent, addImportsDir } from '@nuxt/kit'; import { COMPONENTS } from 'vueless/constants.js'; import { Vueless } from 'vueless/plugin-vite.js'; import { createTailwindSafelist } from 'vueless/utils/node/tailwindSafelist.js'; import { getNuxtDirs } from 'vueless/utils/node/helper.js'; import { join } from 'pathe'; import { defu } from 'defu'; async function installTailwind(_nuxt = useNuxt()) { await createTailwindSafelist({ targetFiles: getNuxtDirs() }); const vuelessConfigFile = addTemplate({ filename: "vueless-tailwind.config.mjs", write: true, getContents: async () => ` import forms from "@tailwindcss/forms"; import { getSafelist, vuelessTailwindConfig } from "vueless/preset-tailwind"; export default { plugins: [forms({ strategy: "base" })], safelist: getSafelist(), ...vuelessTailwindConfig, } ` }); const configPaths = [vuelessConfigFile.dst, join(_nuxt.options.rootDir, "tailwind.config")]; const { configPath = [], ...twModuleConfig } = _nuxt.options.tailwindcss ?? {}; const userConfigPath = configPath; if (typeof userConfigPath === "string") { configPaths.push(userConfigPath); } else { configPaths.push(...userConfigPath); } await installModule("@nuxtjs/tailwindcss", defu({ exposeConfig: true, configPath: configPaths }, twModuleConfig)); } const module = defineNuxtModule({ meta: { name: "@vueless/nuxt", configKey: "vueless", compatibility: { nuxt: ">=3.13.0" } }, defaults: { mirrorCacheDir: "", debug: false }, async setup(_options, _nuxt) { const { resolve } = createResolver(import.meta.url); const { mirrorCacheDir, debug } = _options; _nuxt.options.build.transpile.push("vueless", "tailwindcss"); _nuxt.hook("vite:extendConfig", (config) => { config.plugins = config.plugins || []; config.plugins.push( Vueless({ mode: "nuxt-module", mirrorCacheDir, debug }) ); }); await installTailwind(_nuxt); addPlugin(resolve("./runtime/plugin")); for (const componentName in COMPONENTS) { addComponent({ name: componentName, filePath: `vueless/${COMPONENTS[componentName]}/${componentName}.vue` }); } addImportsDir("vueless/composables"); addImportsDir("vueless/utils"); } }); export { module as default };