UNPKG

@eslamdevui/ui

Version:

A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.

149 lines (145 loc) 4.42 kB
import { defineNuxtModule, createResolver, addVitePlugin, addPlugin, hasNuxtModule, addComponentsDir, addImportsDir, installModule } from '@nuxt/kit'; import { defu } from 'defu'; import { d as defaultOptions, r as resolveColors, a as getDefaultUiConfig, b as addTemplates } from './shared/ui.CgUuvRXi.mjs'; import '../dist/runtime/utils/index.js'; import 'node:url'; import 'scule'; import 'tailwindcss/colors'; import 'knitwork'; const name = "@eslamdevui/ui"; const version = "3.3.3"; function generateProseComponentMap(components) { return components.reduce((map, component) => { const pascalCase = component.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(""); map[component] = `Prose${pascalCase}`; return map; }, {}); } const proseComponents = [ "accordion", "accordion-item", "badge", "callout", "card", "card-group", "caution", "code-collapse", "code-group", "code-icon", "code-preview", "code-tree", "collapsible", "field", "field-group", "icon", "kbd", "note", "steps", "tabs", "tabs-item", "tip", "warning" ]; const module = defineNuxtModule({ meta: { name, version, docs: "https://ui.nuxt.com/getting-started/installation/nuxt", configKey: "ui", compatibility: { nuxt: ">=3.16.0" } }, defaults: defaultOptions, async setup(options, nuxt) { const { resolve } = createResolver(import.meta.url); options.theme = options.theme || {}; options.theme.colors = resolveColors(options.theme.colors); nuxt.options.ui = options; nuxt.options.alias["#ui"] = resolve("./runtime"); nuxt.options.appConfig.ui = defu( nuxt.options.appConfig.ui || {}, getDefaultUiConfig(options.theme.colors) ); nuxt.options.app.rootAttrs = nuxt.options.app.rootAttrs || {}; nuxt.options.app.rootAttrs.class = [ nuxt.options.app.rootAttrs.class, "isolate" ].filter(Boolean).join(" "); if (nuxt.options.builder === "@nuxt/vite-builder") { const plugin = await import('@tailwindcss/vite').then((r) => r.default); addVitePlugin(plugin()); } else { nuxt.options.postcss.plugins["@tailwindcss/postcss"] = {}; } async function registerModule(name2, key, options2) { if (!hasNuxtModule(name2)) { await installModule(name2, defu(nuxt.options[key], options2)); } else { nuxt.options[key] = defu(nuxt.options[key], options2); } } await registerModule("@nuxt/icon", "icon", { cssLayer: "components" }); if (options.fonts) { await registerModule("@nuxt/fonts", "fonts", { defaults: { weights: [400, 500, 600, 700] } }); } if (options.colorMode) { await registerModule("@nuxtjs/color-mode", "colorMode", { classSuffix: "", disableTransition: true }); } addPlugin({ src: resolve("./runtime/plugins/colors") }); if (hasNuxtModule("@nuxtjs/mdc") || options.mdc || hasNuxtModule("@nuxt/content") || options.content) { nuxt.options.mdc = defu(nuxt.options.mdc, { highlight: { theme: { light: "material-theme-lighter", default: "material-theme", dark: "material-theme-palenight" } }, components: { map: generateProseComponentMap(proseComponents) } }); } addComponentsDir({ path: resolve("./runtime/components/prose"), prefix: "Prose", pathPrefix: false, global: true }); if (hasNuxtModule("@nuxt/content") || options.content) { addComponentsDir({ path: resolve("./runtime/components/content"), pathPrefix: false, prefix: nuxt.options.ui?.prefix || "U" }); } if (hasNuxtModule("@nuxtjs/color-mode")) { addComponentsDir({ path: resolve("./runtime/components/color-mode"), pathPrefix: false, prefix: nuxt.options.ui?.prefix || "U" }); } else { addImportsDir(resolve("./runtime/composables/color-mode")); } addComponentsDir({ path: resolve("./runtime/components"), prefix: nuxt.options.ui?.prefix || "U", pathPrefix: false, ignore: ["color-mode/**", "content/**", "prose/**"] }); addImportsDir(resolve("./runtime/composables")); addTemplates(options, nuxt, resolve); } }); export { module as default };