1
+ import type { PresetOptions as PresetThemeDefaultOptions } from '@anu-vue/preset-theme-default'
1
2
import { presetThemeDefault } from '@anu-vue/preset-theme-default'
2
3
import { addCustomTab } from '@nuxt/devtools-kit'
3
4
import {
@@ -10,7 +11,7 @@ import {
10
11
} from '@nuxt/kit'
11
12
import presetIcons from '@unocss/preset-icons'
12
13
import presetUno from '@unocss/preset-uno'
13
- import type { PluginOptions } from 'anu-vue'
14
+ import type { PluginOptions , PresetAnuOptions } from 'anu-vue'
14
15
import { components as AnuComponents , composables as AnuComposables , presetAnu , presetIconExtraProperties } from 'anu-vue'
15
16
import type { PartialDeep } from 'type-fest'
16
17
@@ -21,29 +22,21 @@ import { name, version } from '../package.json'
21
22
const configKey = 'anu'
22
23
23
24
/** 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
-
36
25
// TODO: (types) We don't get nested autocompletion for options
37
26
export interface ModuleOptions {
38
27
39
28
/**
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.
43
31
*
44
32
* @default true
45
33
*/
46
- presetTheme ?: PresetThemeOptions | boolean
34
+ presetThemeDefault ?: PresetThemeDefaultOptions | boolean
35
+
36
+ /**
37
+ * Options for Anu Preset
38
+ */
39
+ presetAnuOptions ?: PresetAnuOptions
47
40
48
41
/**
49
42
* Anu Vue Initial Theme | Source npm pkg: `anu-vue`
@@ -100,7 +93,7 @@ export interface ModuleOptions {
100
93
101
94
export default defineNuxtModule < ModuleOptions > ( {
102
95
defaults : {
103
- presetTheme : true ,
96
+ presetThemeDefault : true ,
104
97
} ,
105
98
meta : {
106
99
name,
@@ -112,6 +105,7 @@ export default defineNuxtModule<ModuleOptions>({
112
105
} ,
113
106
hooks : {
114
107
'prepare:types' : ( { tsConfig, references } ) => {
108
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
115
109
tsConfig . compilerOptions ! . types . push ( 'anu-vue/volar' )
116
110
references . push ( {
117
111
types : 'anu-vue/volar' ,
@@ -120,7 +114,6 @@ export default defineNuxtModule<ModuleOptions>({
120
114
} ,
121
115
setup ( opts , nuxt ) {
122
116
const logger = useLogger ( 'anu-vue' )
123
- const enableDefaultPreset = opts . presetTheme === true || typeof opts . presetTheme === 'object'
124
117
125
118
// Disable module if '@unocss/nuxt' is not installed.
126
119
if ( nuxt . options . modules . includes ( '@unocss/nuxt' ) === false ) {
@@ -139,19 +132,41 @@ export default defineNuxtModule<ModuleOptions>({
139
132
...( nuxt . options . unocss . presets || [ ] ) , // Don't override existing presets.
140
133
presetUno ( ) ,
141
134
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 (
145
162
typeof nuxt . options . unocss . icons === 'object'
146
163
? nuxt . options . unocss . icons
147
164
: {
148
165
scale : 1.2 ,
149
166
extraProperties : presetIconExtraProperties ,
150
167
} ,
151
- ) ,
152
- presetAnu ( ) ,
153
- enableDefaultPreset && presetThemeDefault ( ) ,
154
- ] as any // Since unocss doesn't have runtime types for plugins yet.
168
+ )
169
+ }
155
170
156
171
nuxt . options . unocss . include = [
157
172
/ .* \/ a n u - v u e \. j s ( .* ) ? $ / ,
@@ -178,10 +193,8 @@ export default defineNuxtModule<ModuleOptions>({
178
193
})` ,
179
194
]
180
195
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\'' )
185
198
186
199
lines . unshift ( 'import \'anu-vue/dist/style.css\'' )
187
200
0 commit comments