mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-26 01:40:34 +01:00
chore: improve module
This commit is contained in:
114
src/index.ts
114
src/index.ts
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user