chore: improve module

This commit is contained in:
Benjamin Canac
2021-11-24 15:50:55 +01:00
parent 6bab973bbc
commit 6286633049

View File

@@ -1,14 +1,53 @@
import { resolve, join } from 'pathe' import { fileURLToPath } from 'url'
import { defineNuxtModule, installModule, addPlugin, resolveModule } from '@nuxt/kit' import { dirname, resolve } from 'pathe'
import { defineNuxtModule, installModule, addPlugin, addComponentsDir } from '@nuxt/kit'
import { colors } from '@unocss/preset-uno' import { colors } from '@unocss/preset-uno'
import type { UnocssNuxtOptions } from '@unocss/nuxt' import type { UnocssNuxtOptions } from '@unocss/nuxt'
export default defineNuxtModule({ const dir = dirname(fileURLToPath(import.meta.url))
export interface UiColorsOptions {
/**
* @default 'indigo'
*/
primary?: string
/**
* @default 'zinc'
*/
gray?: string
}
export interface UiOptions {
/**
* Prefix of injected components.
*
* @default 'u'
*/
prefix?: string
colors?: UiColorsOptions
unocss?: UnocssNuxtOptions
}
export default defineNuxtModule<UiOptions>({
name: '@nuxthq/ui', name: '@nuxthq/ui',
configKey: 'ui', configKey: 'ui',
defaults: {
prefix: 'u',
colors: {
primary: 'indigo',
gray: 'zinc'
},
unocss: {
shortcuts: [],
rules: [],
variants: [],
theme: {}
}
},
async setup (_options, nuxt) { async setup (_options, nuxt) {
const { prefix = 'u', colors: { primary = 'indigo', gray = 'zinc' } = {} } = _options || {} const { prefix, colors: { primary = 'indigo', gray = 'zinc' } = {} } = _options
const { shortcuts = [], rules = [], variants = [], theme = {} } = _options?.unocss || {} const { shortcuts = [], rules = [], variants = [], theme = {} } = _options.unocss || {}
const options: UnocssNuxtOptions = { const options: UnocssNuxtOptions = {
theme: { theme: {
@@ -96,38 +135,45 @@ export default defineNuxtModule({
await installModule(nuxt, { src: '@vueuse/core/nuxt' }) await installModule(nuxt, { src: '@vueuse/core/nuxt' })
await installModule(nuxt, { src: '@unocss/nuxt', options }) await installModule(nuxt, { src: '@unocss/nuxt', options })
const runtimeDir = resolve(__dirname, 'runtime') addPlugin(resolve(dir, './runtime/plugin'))
const componentsDir = resolve(__dirname, 'components')
addPlugin(resolveModule('./plugin', { paths: runtimeDir }), { append: true }) addComponentsDir({
path: resolve(dir, './components/elements'),
nuxt.hook('components:dirs', (dirs) => { prefix,
dirs.push({ watch: false
path: join(componentsDir, 'elements'), })
prefix addComponentsDir({
}) path: resolve(dir, './components/feedback'),
dirs.push({ prefix,
path: join(componentsDir, 'feedback'), watch: false
prefix })
}) addComponentsDir({
dirs.push({ path: resolve(dir, './components/forms'),
path: join(componentsDir, 'forms'), prefix,
prefix watch: false
}) })
dirs.push({ addComponentsDir({
path: join(componentsDir, 'layout'), path: resolve(dir, './components/layout'),
prefix prefix,
}) watch: false
dirs.push({ })
path: join(componentsDir, 'navigation'), addComponentsDir({
prefix path: resolve(dir, './components/navigation'),
}) prefix,
dirs.push({ watch: false
path: join(componentsDir, 'overlays'), })
prefix addComponentsDir({
}) path: resolve(dir, './components/overlays'),
prefix,
watch: false
}) })
nuxt.options.build.transpile.push('@popperjs/core', '@headlessui/vue', '@vueuse/core', '@nuxthq/ui') nuxt.options.build.transpile.push('@popperjs/core', '@headlessui/vue', '@vueuse/core', '@nuxthq/ui')
} }
}) })
declare module '@nuxt/schema' {
interface NuxtConfig {
ui?: UiOptions
}
}