@eslamdevui/ui
Version:
A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.
149 lines (145 loc) • 4.42 kB
JavaScript
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 };