Skip to content

Commit 8810ab3

Browse files
committed
feat(nuxt): module improved to accept preset anu & theme default options
1 parent 0218041 commit 8810ab3

File tree

2 files changed

+46
-35
lines changed

2 files changed

+46
-35
lines changed

packages/anu-nuxt/package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
{
22
"name": "@anu-vue/nuxt",
33
"version": "0.14.0",
4-
"description": "Nuxt 3 Anu UI library",
5-
"author": "Mehmet - @productdevbook <hi@productdevbook.com>",
4+
"description": "anu-vue - Nuxt 3 Module",
65
"license": "MIT",
76
"private": false,
8-
"funding": "https://github.com/sponsors/productdevbook",
9-
"homepage": "https://github.com/jd-solanki/anu/tree/main/packages/anu-nuxt#readme",
7+
"homepage": "https://anu-vue.netlify.app",
108
"repository": {
119
"type": "git",
1210
"url": "git+https://github.com/jd-solanki/anu.git",
@@ -55,4 +53,4 @@
5553
"@unocss/nuxt": "^0.51.13",
5654
"nuxt": "^3.5.0"
5755
}
58-
}
56+
}

packages/anu-nuxt/src/module.ts

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { PresetOptions as PresetThemeDefaultOptions } from '@anu-vue/preset-theme-default'
12
import { presetThemeDefault } from '@anu-vue/preset-theme-default'
23
import { addCustomTab } from '@nuxt/devtools-kit'
34
import {
@@ -10,7 +11,7 @@ import {
1011
} from '@nuxt/kit'
1112
import presetIcons from '@unocss/preset-icons'
1213
import presetUno from '@unocss/preset-uno'
13-
import type { PluginOptions } from 'anu-vue'
14+
import type { PluginOptions, PresetAnuOptions } from 'anu-vue'
1415
import { components as AnuComponents, composables as AnuComposables, presetAnu, presetIconExtraProperties } from 'anu-vue'
1516
import type { PartialDeep } from 'type-fest'
1617

@@ -21,29 +22,21 @@ import { name, version } from '../package.json'
2122
const configKey = 'anu'
2223

2324
/** Nuxt Module Options */
24-
interface PresetThemeOptions {
25-
26-
/**
27-
* Import Anu Preset Theme with either CSS or SASS
28-
* You can either import CSS which doesn't require any additional setup
29-
* or SASS which requires you to install `sass` dependencies.
30-
*
31-
* @default 'css'
32-
*/
33-
style?: 'css' | 'scss'
34-
}
35-
3625
// TODO: (types) We don't get nested autocompletion for options
3726
export interface ModuleOptions {
3827

3928
/**
40-
* Import Anu Preset Theme Default | Source npm pkg: `@anu-vue/preset-theme-default`
41-
* When enabled, it will automatically set up the default presets for Anu and Uno.
42-
* We recommend to enable this option to get the best experience.
29+
* Import Anu Preset Theme Default
30+
* When enabled, it will automatically set up the default theme preset for Anu and Uno.
4331
*
4432
* @default true
4533
*/
46-
presetTheme?: PresetThemeOptions | boolean
34+
presetThemeDefault?: PresetThemeDefaultOptions | boolean
35+
36+
/**
37+
* Options for Anu Preset
38+
*/
39+
presetAnuOptions?: PresetAnuOptions
4740

4841
/**
4942
* Anu Vue Initial Theme | Source npm pkg: `anu-vue`
@@ -100,7 +93,7 @@ export interface ModuleOptions {
10093

10194
export default defineNuxtModule<ModuleOptions>({
10295
defaults: {
103-
presetTheme: true,
96+
presetThemeDefault: true,
10497
},
10598
meta: {
10699
name,
@@ -112,6 +105,7 @@ export default defineNuxtModule<ModuleOptions>({
112105
},
113106
hooks: {
114107
'prepare:types': ({ tsConfig, references }) => {
108+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
115109
tsConfig.compilerOptions!.types.push('anu-vue/volar')
116110
references.push({
117111
types: 'anu-vue/volar',
@@ -120,7 +114,6 @@ export default defineNuxtModule<ModuleOptions>({
120114
},
121115
setup(opts, nuxt) {
122116
const logger = useLogger('anu-vue')
123-
const enableDefaultPreset = opts.presetTheme === true || typeof opts.presetTheme === 'object'
124117

125118
// Disable module if '@unocss/nuxt' is not installed.
126119
if (nuxt.options.modules.includes('@unocss/nuxt') === false) {
@@ -139,19 +132,41 @@ export default defineNuxtModule<ModuleOptions>({
139132
...(nuxt.options.unocss.presets || []), // Don't override existing presets.
140133
presetUno(),
141134

142-
// Icons Preset
143-
// ℹ️ `nuxt.options.unocss.icons` can also be `undefined`
144-
nuxt.options.unocss.icons !== false && presetIcons(
135+
// Anu Preset
136+
presetAnu(opts.presetAnuOptions),
137+
]
138+
139+
/*
140+
👉 Preset Theme Default
141+
142+
Inject preset theme default into the unocss options if isn't disabled.
143+
*/
144+
const isPresetThemeDefaultEnabled = opts.presetThemeDefault !== false
145+
if (isPresetThemeDefaultEnabled) {
146+
nuxt.options.unocss.presets.push(
147+
presetThemeDefault(
148+
typeof opts.presetThemeDefault === 'object'
149+
? opts.presetThemeDefault
150+
: undefined,
151+
),
152+
)
153+
}
154+
155+
/*
156+
👉 Preset Icons
157+
158+
Inject preset icons extra properties into icons preset unocss options if icons preset isn't disabled.
159+
*/
160+
if (nuxt.options.unocss.icons !== false) {
161+
presetIcons(
145162
typeof nuxt.options.unocss.icons === 'object'
146163
? nuxt.options.unocss.icons
147164
: {
148165
scale: 1.2,
149166
extraProperties: presetIconExtraProperties,
150167
},
151-
),
152-
presetAnu(),
153-
enableDefaultPreset && presetThemeDefault(),
154-
] as any // Since unocss doesn't have runtime types for plugins yet.
168+
)
169+
}
155170

156171
nuxt.options.unocss.include = [
157172
/.*\/anu-vue\.js(.*)?$/,
@@ -178,10 +193,8 @@ export default defineNuxtModule<ModuleOptions>({
178193
})`,
179194
]
180195

181-
if (enableDefaultPreset) {
182-
const styleExt = typeof opts.presetTheme === 'object' ? opts.presetTheme.style : 'css'
183-
lines.unshift(`import '@anu-vue/preset-theme-default/dist/style.${styleExt}'`)
184-
}
196+
if (isPresetThemeDefaultEnabled)
197+
lines.unshift('import \'@anu-vue/preset-theme-default/dist/style.css\'')
185198

186199
lines.unshift('import \'anu-vue/dist/style.css\'')
187200

0 commit comments

Comments
 (0)