nuxt-ignis 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/.data/content/contents.sqlite +0 -0
  2. package/.env +43 -0
  3. package/.nuxt/app.config.mjs +227 -1
  4. package/.nuxt/components.d.ts +496 -132
  5. package/.nuxt/content/components.ts +108 -0
  6. package/.nuxt/content/database.compressed.mjs +1 -0
  7. package/.nuxt/content/manifest.ts +33 -0
  8. package/.nuxt/content/sql_dump +6 -0
  9. package/.nuxt/content/types.d.ts +13 -0
  10. package/.nuxt/dev/index.mjs +4719 -66
  11. package/.nuxt/dev/index.mjs.map +1 -1
  12. package/.nuxt/dist/server/client.manifest.json +2 -2
  13. package/.nuxt/dist/server/client.manifest.mjs +18 -1
  14. package/.nuxt/eslint.config.d.mts +2 -2
  15. package/.nuxt/eslint.config.mjs +2 -2
  16. package/.nuxt/i18n.options.mjs +165 -0
  17. package/.nuxt/imports.d.ts +62 -31
  18. package/.nuxt/manifest/latest.json +1 -1
  19. package/.nuxt/manifest/meta/dev.json +1 -1
  20. package/.nuxt/mdc-configs.mjs +8 -0
  21. package/.nuxt/mdc-highlighter.mjs +213 -0
  22. package/.nuxt/mdc-image-component.mjs +1 -0
  23. package/.nuxt/mdc-imports.mjs +12 -0
  24. package/.nuxt/module/@nuxtjs-sitemap.d.ts +28 -0
  25. package/.nuxt/module/nuxt-robots.d.ts +35 -0
  26. package/.nuxt/module/nuxt-seo-utils.assets.d.ts +25 -0
  27. package/.nuxt/module/nuxt-seo-utils.d.ts +22 -0
  28. package/.nuxt/module/nuxt-site-config.d.ts +43 -0
  29. package/.nuxt/nitro.json +4 -4
  30. package/.nuxt/nuxt-i18n-logger.mjs +1 -0
  31. package/.nuxt/nuxt-icon-client-bundle.mjs +1 -0
  32. package/.nuxt/nuxt-icon-server-bundle.mjs +15 -0
  33. package/.nuxt/nuxt.d.ts +23 -6
  34. package/.nuxt/nuxt.json +2 -2
  35. package/.nuxt/schema/nuxt.schema.d.ts +193 -0
  36. package/.nuxt/schema/nuxt.schema.json +261 -1
  37. package/.nuxt/tsconfig.json +216 -42
  38. package/.nuxt/tsconfig.server.json +181 -23
  39. package/.nuxt/types/app.config.d.ts +227 -1
  40. package/.nuxt/types/build.d.ts +4 -1
  41. package/.nuxt/types/i18n-plugin.d.ts +104 -0
  42. package/.nuxt/types/imports.d.ts +334 -210
  43. package/.nuxt/types/neon.d.ts +137 -0
  44. package/.nuxt/types/nitro-imports.d.ts +268 -6
  45. package/.nuxt/types/nitro-routes.d.ts +65 -1
  46. package/.nuxt/types/plugins.d.ts +40 -17
  47. package/.nuxt/types/schema.d.ts +984 -2
  48. package/.nuxt/types/ui.d.ts +35 -0
  49. package/.nuxt/ui/accordion.ts +20 -0
  50. package/.nuxt/ui/alert.ts +264 -0
  51. package/.nuxt/ui/avatar-group.ts +52 -0
  52. package/.nuxt/ui/avatar.ts +54 -0
  53. package/.nuxt/ui/badge.ts +263 -0
  54. package/.nuxt/ui/breadcrumb.ts +45 -0
  55. package/.nuxt/ui/button-group.ts +16 -0
  56. package/.nuxt/ui/button.ts +378 -0
  57. package/.nuxt/ui/calendar.ts +103 -0
  58. package/.nuxt/ui/card.ts +34 -0
  59. package/.nuxt/ui/carousel.ts +38 -0
  60. package/.nuxt/ui/checkbox-group.ts +204 -0
  61. package/.nuxt/ui/checkbox.ts +236 -0
  62. package/.nuxt/ui/chip.ts +96 -0
  63. package/.nuxt/ui/collapsible.ts +6 -0
  64. package/.nuxt/ui/color-picker.ts +47 -0
  65. package/.nuxt/ui/command-palette.ts +50 -0
  66. package/.nuxt/ui/container.ts +3 -0
  67. package/.nuxt/ui/context-menu.ts +217 -0
  68. package/.nuxt/ui/drawer.ts +126 -0
  69. package/.nuxt/ui/dropdown-menu.ts +218 -0
  70. package/.nuxt/ui/form-field.ts +48 -0
  71. package/.nuxt/ui/form.ts +3 -0
  72. package/.nuxt/ui/index.ts +50 -0
  73. package/.nuxt/ui/input-menu.ts +436 -0
  74. package/.nuxt/ui/input-number.ts +245 -0
  75. package/.nuxt/ui/input.ts +289 -0
  76. package/.nuxt/ui/kbd.ts +31 -0
  77. package/.nuxt/ui/link.ts +22 -0
  78. package/.nuxt/ui/modal.ts +29 -0
  79. package/.nuxt/ui/navigation-menu.ts +510 -0
  80. package/.nuxt/ui/pagination.ts +13 -0
  81. package/.nuxt/ui/pin-input.ts +171 -0
  82. package/.nuxt/ui/popover.ts +6 -0
  83. package/.nuxt/ui/progress.ts +297 -0
  84. package/.nuxt/ui/radio-group.ts +350 -0
  85. package/.nuxt/ui/select-menu.ts +346 -0
  86. package/.nuxt/ui/select.ts +341 -0
  87. package/.nuxt/ui/separator.ts +172 -0
  88. package/.nuxt/ui/skeleton.ts +3 -0
  89. package/.nuxt/ui/slideover.ts +71 -0
  90. package/.nuxt/ui/slider.ts +171 -0
  91. package/.nuxt/ui/stepper.ts +202 -0
  92. package/.nuxt/ui/switch.ts +131 -0
  93. package/.nuxt/ui/table.ts +147 -0
  94. package/.nuxt/ui/tabs.ts +256 -0
  95. package/.nuxt/ui/textarea.ts +294 -0
  96. package/.nuxt/ui/toast.ts +81 -0
  97. package/.nuxt/ui/toaster.ts +91 -0
  98. package/.nuxt/ui/tooltip.ts +9 -0
  99. package/.nuxt/ui/tree.ts +154 -0
  100. package/.nuxt/ui-image-component.ts +1 -0
  101. package/.nuxt/ui.css +146 -0
  102. package/content.config.ts +6 -10
  103. package/features.ts +43 -22
  104. package/nuxt.config.ts +1 -1
  105. package/package.json +13 -12
  106. package/server/api/neonTest.ts +7 -5
  107. package/tailwind.config.ts +1 -1
  108. package/test/features/db-neon.txt +3 -0
  109. package/test/features/db-off.txt +3 -0
  110. package/test/features/db-supabase.txt +3 -0
  111. package/test/features/default.txt +3 -0
  112. package/test/features/disable-core.txt +3 -0
  113. package/test/features/enable-all.txt +4 -0
  114. package/test/features/forms-formkit.txt +3 -0
  115. package/test/features/forms-off.txt +3 -0
  116. package/test/features/forms-vueform.txt +3 -0
  117. package/test/features/ui-nuxt-ui.txt +3 -0
  118. package/test/features/ui-off.txt +3 -0
  119. package/test/features/ui-tailwind.txt +4 -0
  120. package/test/features.test.ts +191 -0
  121. package/utils/config/content.config.ts +12 -0
  122. package/utils/config/vueform.config.ts +20 -0
  123. package/utils/content.ts +31 -0
  124. package/utils/tailwind.ts +19 -0
  125. package/utils/vueform.ts +16 -0
  126. package/vueform.config.ts +4 -16
  127. package/.nuxt/component-chunk.mjs +0 -1
  128. package/.nuxt/dist/server/server.mjs +0 -1
package/.nuxt/ui.css ADDED
@@ -0,0 +1,146 @@
1
+ @source "./ui";
2
+
3
+ @theme static {
4
+ --color-old-neutral-50: oklch(98.5% 0 0);
5
+ --color-old-neutral-100: oklch(97% 0 0);
6
+ --color-old-neutral-200: oklch(92.2% 0 0);
7
+ --color-old-neutral-300: oklch(87% 0 0);
8
+ --color-old-neutral-400: oklch(70.8% 0 0);
9
+ --color-old-neutral-500: oklch(55.6% 0 0);
10
+ --color-old-neutral-600: oklch(43.9% 0 0);
11
+ --color-old-neutral-700: oklch(37.1% 0 0);
12
+ --color-old-neutral-800: oklch(26.9% 0 0);
13
+ --color-old-neutral-900: oklch(20.5% 0 0);
14
+ --color-old-neutral-950: oklch(14.5% 0 0);
15
+ }
16
+
17
+ @theme default inline {
18
+ --color-primary-50: var(--ui-color-primary-50);
19
+ --color-primary-100: var(--ui-color-primary-100);
20
+ --color-primary-200: var(--ui-color-primary-200);
21
+ --color-primary-300: var(--ui-color-primary-300);
22
+ --color-primary-400: var(--ui-color-primary-400);
23
+ --color-primary-500: var(--ui-color-primary-500);
24
+ --color-primary-600: var(--ui-color-primary-600);
25
+ --color-primary-700: var(--ui-color-primary-700);
26
+ --color-primary-800: var(--ui-color-primary-800);
27
+ --color-primary-900: var(--ui-color-primary-900);
28
+ --color-primary-950: var(--ui-color-primary-950);
29
+ --color-secondary-50: var(--ui-color-secondary-50);
30
+ --color-secondary-100: var(--ui-color-secondary-100);
31
+ --color-secondary-200: var(--ui-color-secondary-200);
32
+ --color-secondary-300: var(--ui-color-secondary-300);
33
+ --color-secondary-400: var(--ui-color-secondary-400);
34
+ --color-secondary-500: var(--ui-color-secondary-500);
35
+ --color-secondary-600: var(--ui-color-secondary-600);
36
+ --color-secondary-700: var(--ui-color-secondary-700);
37
+ --color-secondary-800: var(--ui-color-secondary-800);
38
+ --color-secondary-900: var(--ui-color-secondary-900);
39
+ --color-secondary-950: var(--ui-color-secondary-950);
40
+ --color-success-50: var(--ui-color-success-50);
41
+ --color-success-100: var(--ui-color-success-100);
42
+ --color-success-200: var(--ui-color-success-200);
43
+ --color-success-300: var(--ui-color-success-300);
44
+ --color-success-400: var(--ui-color-success-400);
45
+ --color-success-500: var(--ui-color-success-500);
46
+ --color-success-600: var(--ui-color-success-600);
47
+ --color-success-700: var(--ui-color-success-700);
48
+ --color-success-800: var(--ui-color-success-800);
49
+ --color-success-900: var(--ui-color-success-900);
50
+ --color-success-950: var(--ui-color-success-950);
51
+ --color-info-50: var(--ui-color-info-50);
52
+ --color-info-100: var(--ui-color-info-100);
53
+ --color-info-200: var(--ui-color-info-200);
54
+ --color-info-300: var(--ui-color-info-300);
55
+ --color-info-400: var(--ui-color-info-400);
56
+ --color-info-500: var(--ui-color-info-500);
57
+ --color-info-600: var(--ui-color-info-600);
58
+ --color-info-700: var(--ui-color-info-700);
59
+ --color-info-800: var(--ui-color-info-800);
60
+ --color-info-900: var(--ui-color-info-900);
61
+ --color-info-950: var(--ui-color-info-950);
62
+ --color-warning-50: var(--ui-color-warning-50);
63
+ --color-warning-100: var(--ui-color-warning-100);
64
+ --color-warning-200: var(--ui-color-warning-200);
65
+ --color-warning-300: var(--ui-color-warning-300);
66
+ --color-warning-400: var(--ui-color-warning-400);
67
+ --color-warning-500: var(--ui-color-warning-500);
68
+ --color-warning-600: var(--ui-color-warning-600);
69
+ --color-warning-700: var(--ui-color-warning-700);
70
+ --color-warning-800: var(--ui-color-warning-800);
71
+ --color-warning-900: var(--ui-color-warning-900);
72
+ --color-warning-950: var(--ui-color-warning-950);
73
+ --color-error-50: var(--ui-color-error-50);
74
+ --color-error-100: var(--ui-color-error-100);
75
+ --color-error-200: var(--ui-color-error-200);
76
+ --color-error-300: var(--ui-color-error-300);
77
+ --color-error-400: var(--ui-color-error-400);
78
+ --color-error-500: var(--ui-color-error-500);
79
+ --color-error-600: var(--ui-color-error-600);
80
+ --color-error-700: var(--ui-color-error-700);
81
+ --color-error-800: var(--ui-color-error-800);
82
+ --color-error-900: var(--ui-color-error-900);
83
+ --color-error-950: var(--ui-color-error-950);
84
+ --color-neutral-50: var(--ui-color-neutral-50);
85
+ --color-neutral-100: var(--ui-color-neutral-100);
86
+ --color-neutral-200: var(--ui-color-neutral-200);
87
+ --color-neutral-300: var(--ui-color-neutral-300);
88
+ --color-neutral-400: var(--ui-color-neutral-400);
89
+ --color-neutral-500: var(--ui-color-neutral-500);
90
+ --color-neutral-600: var(--ui-color-neutral-600);
91
+ --color-neutral-700: var(--ui-color-neutral-700);
92
+ --color-neutral-800: var(--ui-color-neutral-800);
93
+ --color-neutral-900: var(--ui-color-neutral-900);
94
+ --color-neutral-950: var(--ui-color-neutral-950);
95
+ --color-primary: var(--ui-primary);
96
+ --color-secondary: var(--ui-secondary);
97
+ --color-success: var(--ui-success);
98
+ --color-info: var(--ui-info);
99
+ --color-warning: var(--ui-warning);
100
+ --color-error: var(--ui-error);
101
+ --radius-xs: calc(var(--ui-radius) * 0.5);
102
+ --radius-sm: var(--ui-radius);
103
+ --radius-md: calc(var(--ui-radius) * 1.5);
104
+ --radius-lg: calc(var(--ui-radius) * 2);
105
+ --radius-xl: calc(var(--ui-radius) * 3);
106
+ --radius-2xl: calc(var(--ui-radius) * 4);
107
+ --radius-3xl: calc(var(--ui-radius) * 6);
108
+ --text-color-dimmed: var(--ui-text-dimmed);
109
+ --text-color-muted: var(--ui-text-muted);
110
+ --text-color-toned: var(--ui-text-toned);
111
+ --text-color-default: var(--ui-text);
112
+ --text-color-highlighted: var(--ui-text-highlighted);
113
+ --text-color-inverted: var(--ui-text-inverted);
114
+ --background-color-default: var(--ui-bg);
115
+ --background-color-muted: var(--ui-bg-muted);
116
+ --background-color-elevated: var(--ui-bg-elevated);
117
+ --background-color-accented: var(--ui-bg-accented);
118
+ --background-color-inverted: var(--ui-bg-inverted);
119
+ --background-color-border: var(--ui-border);
120
+ --border-color-default: var(--ui-border);
121
+ --border-color-muted: var(--ui-border-muted);
122
+ --border-color-accented: var(--ui-border-accented);
123
+ --border-color-inverted: var(--ui-border-inverted);
124
+ --border-color-bg: var(--ui-bg);
125
+ --ring-color-default: var(--ui-border);
126
+ --ring-color-muted: var(--ui-border-muted);
127
+ --ring-color-accented: var(--ui-border-accented);
128
+ --ring-color-inverted: var(--ui-border-inverted);
129
+ --ring-color-bg: var(--ui-bg);
130
+ --ring-offset-color-default: var(--ui-border);
131
+ --ring-offset-color-muted: var(--ui-border-muted);
132
+ --ring-offset-color-accented: var(--ui-border-accented);
133
+ --ring-offset-color-inverted: var(--ui-border-inverted);
134
+ --ring-offset-color-bg: var(--ui-bg);
135
+ --divide-color-default: var(--ui-border);
136
+ --divide-color-muted: var(--ui-border-muted);
137
+ --divide-color-accented: var(--ui-border-accented);
138
+ --divide-color-inverted: var(--ui-border-inverted);
139
+ --divide-color-bg: var(--ui-bg);
140
+ --outline-color-default: var(--ui-border);
141
+ --outline-color-inverted: var(--ui-border-inverted);
142
+ --stroke-default: var(--ui-border);
143
+ --stroke-inverted: var(--ui-border-inverted);
144
+ --fill-default: var(--ui-border);
145
+ --fill-inverted: var(--ui-border-inverted);
146
+ }
package/content.config.ts CHANGED
@@ -1,12 +1,8 @@
1
- import { defineCollection, defineContentConfig } from '@nuxt/content'
1
+ // minimal config for Nuxt Content
2
+ // currently required to be loaded like this...
2
3
 
3
- export default defineContentConfig({
4
- // while it is not strictily necessary to have a default config file
5
- // it produces warning during startup when not presented
6
- collections: {
7
- content: defineCollection({
8
- source: '**',
9
- type: 'page',
10
- }),
11
- },
4
+ import { loadContentConfig } from './utils/content'
5
+
6
+ export default loadContentConfig({
7
+ // custom config here
12
8
  })
package/features.ts CHANGED
@@ -2,7 +2,9 @@ import { fileURLToPath } from 'url'
2
2
  import { dirname, join } from 'path'
3
3
  import { defu } from 'defu'
4
4
  import OpenProps from 'open-props'
5
+ import tailwindcss from '@tailwindcss/vite'
5
6
  import { log } from './utils/consola'
7
+ import { ignisTailwindcssFix } from './utils/tailwind'
6
8
 
7
9
  const currentDir = dirname(fileURLToPath(import.meta.url))
8
10
 
@@ -60,8 +62,15 @@ export function setFeatures() {
60
62
  // (excluded unless enabled)
61
63
 
62
64
  // ui
63
- const uiPreset = process.env.NUXT_PUBLIC_IGNIS_PRESET_UI
64
- if (uiPreset === 'nuxt-ui' || (!uiPreset && process.env.NUXT_PUBLIC_IGNIS_UI === 'true')) {
65
+ let uiPreset = process.env.NUXT_PUBLIC_IGNIS_PRESET_UI
66
+ if (uiPreset && !['nuxt-ui', 'tailwind'].includes(uiPreset)) {
67
+ // surpress other values
68
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_UI = uiPreset = 'off'
69
+ }
70
+
71
+ let tailwindFixRequired = false
72
+ if (uiPreset === 'nuxt-ui' || process.env.NUXT_PUBLIC_IGNIS_UI === 'true') {
73
+ tailwindFixRequired = true
65
74
  nuxtConfig.modules.push('@nuxt/ui')
66
75
  // import tailwind css file
67
76
  nuxtConfig = defu({
@@ -78,26 +87,41 @@ export function setFeatures() {
78
87
  }, nuxtConfig)
79
88
 
80
89
  // evaluate separate Tailwind CSS module
81
- if (uiPreset === 'tailwind' || (!uiPreset && process.env.NUXT_PUBLIC_IGNIS_TAILWIND === 'true')) {
82
- nuxtConfig.modules.push('@nuxtjs/tailwindcss')
90
+ if (uiPreset === 'tailwind' || (process.env.NUXT_PUBLIC_IGNIS_TAILWIND === 'true' && uiPreset !== 'nuxt-ui')) {
91
+ tailwindFixRequired = true
92
+ // nuxtConfig.modules.push('@nuxtjs/tailwindcss') // temporary disabled until v7 is released
93
+ extras.push('Tailwind CSS')
83
94
  // import tailwind css file
84
95
  nuxtConfig = defu({
85
96
  css: [join(currentDir, './assets/css/tailwind.css')],
97
+ vite: {
98
+ plugins: [tailwindcss()], // temporary integration using Vite plugin directly
99
+ },
86
100
  }, nuxtConfig)
87
101
  }
88
102
  }
89
- // surpress other values
90
- if (!uiPreset || !['nuxt-ui', 'tailwind'].includes(uiPreset)) {
91
- process.env.NUXT_PUBLIC_IGNIS_PRESET_UI = 'off'
103
+
104
+ // TODO occasionaly check https://github.com/tailwindlabs/tailwindcss/discussions/16119 for solution
105
+ if (tailwindFixRequired) {
106
+ nuxtConfig = defu({
107
+ vite: {
108
+ plugins: [ignisTailwindcssFix],
109
+ },
110
+ }, nuxtConfig)
92
111
  }
93
112
 
94
113
  // database
95
- const dbPreset = process.env.NUXT_PUBLIC_IGNIS_PRESET_DB
96
- if (dbPreset === 'neon' || (!dbPreset && process.env.NUXT_PUBLIC_IGNIS_NEON === 'true')) {
114
+ let dbPreset = process.env.NUXT_PUBLIC_IGNIS_PRESET_DB
115
+ if (dbPreset && !['neon', 'supabase'].includes(dbPreset)) {
116
+ // surpress other values
117
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_DB = dbPreset = 'off'
118
+ }
119
+
120
+ if (dbPreset === 'neon' || process.env.NUXT_PUBLIC_IGNIS_NEON === 'true') {
97
121
  // module definition
98
122
  nuxtConfig.modules.push('nuxt-neon')
99
123
  }
100
- if (dbPreset === 'supabase' || (!dbPreset && process.env.NUXT_PUBLIC_IGNIS_SUPABASE === 'true')) {
124
+ if (dbPreset === 'supabase' || process.env.NUXT_PUBLIC_IGNIS_SUPABASE === 'true') {
101
125
  // module definition
102
126
  nuxtConfig.modules.push('@nuxtjs/supabase')
103
127
  // module-specific config key
@@ -107,10 +131,6 @@ export function setFeatures() {
107
131
  },
108
132
  }, nuxtConfig)
109
133
  }
110
- if (dbPreset && dbPreset !== 'neon' && dbPreset !== 'supabase') {
111
- // surpress other values
112
- process.env.NUXT_PUBLIC_IGNIS_PRESET_DB = 'off'
113
- }
114
134
 
115
135
  // i18n
116
136
  if (process.env.NUXT_PUBLIC_IGNIS_I18N_ENABLED === 'true') {
@@ -135,11 +155,16 @@ export function setFeatures() {
135
155
  }
136
156
 
137
157
  // forms
138
- const formsPreset = process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS
139
- if (formsPreset === 'vueform' || (!formsPreset && process.env.NUXT_PUBLIC_IGNIS_VUEFORM === 'true')) {
158
+ let formsPreset = process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS
159
+ if (formsPreset && !['vueform', 'formkit'].includes(formsPreset)) {
160
+ // surpress other values
161
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS = formsPreset = 'off'
162
+ }
163
+
164
+ if (formsPreset === 'vueform' || process.env.NUXT_PUBLIC_IGNIS_VUEFORM === 'true') {
140
165
  nuxtConfig.modules.push('@vueform/nuxt')
141
166
  }
142
- if (formsPreset === 'formkit' || (!formsPreset && process.env.NUXT_PUBLIC_IGNIS_FORMKIT_ENABLED === 'true')) {
167
+ if (formsPreset === 'formkit' || process.env.NUXT_PUBLIC_IGNIS_FORMKIT_ENABLED === 'true') {
143
168
  // module definition
144
169
  nuxtConfig.modules.push('@formkit/nuxt')
145
170
  // module-specific config key
@@ -150,10 +175,6 @@ export function setFeatures() {
150
175
  },
151
176
  }, nuxtConfig)
152
177
  }
153
- if (formsPreset && formsPreset !== 'vueform' && formsPreset !== 'formkit') {
154
- // surpress other values
155
- process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS = 'off'
156
- }
157
178
 
158
179
  // seo
159
180
  // 2025/04 - must be before @nuxt/content (https://nuxtseo.com/docs/nuxt-seo/guides/nuxt-content)
@@ -222,7 +243,7 @@ export function setFeatures() {
222
243
  // this means e.g. 2 database modules or 2 form solutions
223
244
  if (process.env.NUXT_PUBLIC_IGNIS_WARN_DUPLICATES !== 'false') {
224
245
  const used = nuxtConfig.modules
225
- if (used.includes('nuxt-neon') && used.includes('nuxt-neon')) {
246
+ if (used.includes('nuxt-neon') && used.includes('@nuxtjs/supabase')) {
226
247
  log.warn('You have both DB connector modules (Neon and Supabase) active, which is not recommended. If this is intentional, you can use `process.env.NUXT_PUBLIC_IGNIS_WARN_DUPLICATES=false` to surpress this warning.')
227
248
  }
228
249
  if (used.includes('@vueform/nuxt') && used.includes('@formkit/nuxt')) {
package/nuxt.config.ts CHANGED
@@ -12,7 +12,7 @@ const nuxtConfig = defu(ignisFeatures, {
12
12
  ],
13
13
 
14
14
  // https://nuxt.com/docs/api/nuxt-config#compatibilitydate
15
- compatibilityDate: '2025-05-21',
15
+ compatibilityDate: '2025-06-07',
16
16
 
17
17
  // simple eslint config - see eslint.config.mjs
18
18
  eslint: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-ignis",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Enhanced and customizable Nuxt application starter pack",
5
5
  "keywords": [
6
6
  "nuxt",
@@ -30,31 +30,32 @@
30
30
  "@nuxt/eslint": "1.4.1",
31
31
  "@nuxt/fonts": "0.11.4",
32
32
  "@nuxt/image": "1.10.0",
33
- "@nuxt/scripts": "0.11.7",
34
- "@nuxt/ui": "3.1.2",
35
- "@nuxtjs/i18n": "9.5.4",
33
+ "@nuxt/scripts": "0.11.8",
34
+ "@nuxt/ui": "3.1.3",
35
+ "@nuxtjs/i18n": "9.5.5",
36
36
  "@nuxtjs/seo": "3.0.3",
37
37
  "@nuxtjs/supabase": "1.5.1",
38
38
  "@nuxtjs/tailwindcss": "6.14.0",
39
- "@pinia/nuxt": "0.11.0",
40
- "@vueform/nuxt": "1.13.0",
41
- "@vueuse/core": "13.2.0",
42
- "@vueuse/nuxt": "13.2.0",
39
+ "@pinia/nuxt": "0.11.1",
40
+ "@vueform/nuxt": "1.15.0",
41
+ "@vueuse/core": "13.3.0",
42
+ "@vueuse/nuxt": "13.3.0",
43
+ "@tailwindcss/vite": "4.1.8",
43
44
  "consola": "3.4.2",
44
45
  "defu": "6.1.4",
45
46
  "elrh-pslo": "1.1.6",
46
47
  "nuxt-auth-utils": "0.5.20",
47
- "nuxt-neon": "0.6.0",
48
+ "nuxt-neon": "0.6.2",
48
49
  "nuxt-security": "2.2.0",
49
50
  "nuxt-spec": "0.0.4",
50
51
  "open-props": "1.7.15",
51
- "pinia": "3.0.2",
52
+ "pinia": "3.0.3",
52
53
  "postcss-jit-props": "1.0.16",
53
54
  "typescript": "5.8.3"
54
55
  },
55
56
  "devDependencies": {
56
- "nuxt": "3.17.4",
57
- "vue": "3.5.14",
57
+ "nuxt": "3.17.5",
58
+ "vue": "3.5.16",
58
59
  "vue-router": "4.5.1"
59
60
  },
60
61
  "scripts": {
@@ -3,11 +3,13 @@ export default defineEventHandler(async () => {
3
3
  if (config.preset.db === 'neon' || config.neon === true) {
4
4
  return await select(
5
5
  getNeonClient(),
6
- ['name', 'value'],
7
- 'playing_with_neon',
8
- [{ column: 'name', condition: 'LIKE', value: '\'test%\'' }],
9
- 'name DESC',
10
- 2,
6
+ {
7
+ columns: ['name', 'value'],
8
+ from: 'playing_with_neon',
9
+ where: { column: 'name', condition: 'LIKE', value: '\'test%\'' },
10
+ order: 'name DESC',
11
+ limit: 2,
12
+ },
11
13
  )
12
14
  } else {
13
15
  return 'Neon DB module not enabled'
@@ -6,7 +6,7 @@ import plugin from 'tailwindcss/plugin'
6
6
  module.exports = {
7
7
  content: [
8
8
  // include Nuxt Content files into array scanned by Tailwind CSS
9
- '{srcDir}/content/**/*.{md,yml,json}',
9
+ 'srcDir/content/**/*.{md,yml,json}',
10
10
  ],
11
11
  theme: {
12
12
  // example of extending Tailwind CSS with custom color
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt, nuxt-neon
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt, @nuxtjs/supabase
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules:
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,4 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt, @nuxt/ui, nuxt-neon, @nuxtjs/supabase, @nuxtjs/i18n, @vueform/nuxt, @formkit/nuxt, @nuxtjs/seo, @nuxt/content, nuxt-auth-utils
3
+ Extras: Open Props CSS, elrh-pslo
4
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt, @formkit/nuxt
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt, @vueform/nuxt
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt, @nuxt/ui
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,3 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt
3
+ Nuxt: log-level=info[default]
@@ -0,0 +1,4 @@
1
+ Nuxt Ignis will start using following settings:
2
+ Modules: @nuxt/eslint, @nuxt/fonts, @nuxt/image, @pinia/nuxt, @nuxt/scripts, nuxt-security, @vueuse/nuxt
3
+ Extras: Tailwind CSS
4
+ Nuxt: log-level=info[default]
@@ -0,0 +1,191 @@
1
+ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
2
+ import { setFeatures } from '../features'
3
+ import { log } from '../utils/consola'
4
+
5
+ // `setFeatures()` is the core function that evaluates the environment variables
6
+ // and decides which features to enable in the user's Nuxt application
7
+
8
+ describe('setFeatures() unit tests', () => {
9
+ // store original process.env to restore it after tests
10
+ const OLD_ENV = process.env
11
+
12
+ // mock consola instance for listening to `setFeatures()` method output
13
+ const consoleSpy = vi.spyOn(log, 'info').mockImplementation(() => {})
14
+
15
+ // helper function to get the console output from the spy
16
+ function getConsoleOutput() {
17
+ return consoleSpy.mock.calls[0]![0] as string
18
+ }
19
+
20
+ beforeEach(() => {
21
+ // restore env before each test
22
+ process.env = { ...OLD_ENV }
23
+ })
24
+
25
+ afterEach(() => {
26
+ // clear the console spy after each test
27
+ vi.clearAllMocks()
28
+ })
29
+
30
+ // output with no settings provided
31
+
32
+ test('setFeatures() - default output', async () => {
33
+ expect(setFeatures).toBeDefined()
34
+ setFeatures()
35
+ expect(consoleSpy).toHaveBeenCalledOnce()
36
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/default.txt')
37
+ })
38
+
39
+ // following test cases are checking whether presets are evaluated correctly
40
+
41
+ // preset - UI
42
+
43
+ test('setFeatures() - UI preset - nuxt-ui', async () => {
44
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_UI = 'nuxt-ui'
45
+ setFeatures()
46
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/ui-nuxt-ui.txt')
47
+ })
48
+
49
+ test('setFeatures() - UI preset - tailwind', async () => {
50
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_UI = 'tailwind'
51
+ setFeatures()
52
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/ui-tailwind.txt')
53
+ })
54
+
55
+ test('setFeatures() - UI preset - off', async () => {
56
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_UI = 'off'
57
+ setFeatures()
58
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/ui-off.txt')
59
+ })
60
+
61
+ test('setFeatures() - UI preset - invalid', async () => {
62
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_UI = 'invalid'
63
+ setFeatures()
64
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/ui-off.txt')
65
+ })
66
+
67
+ // UI - set directly
68
+
69
+ test('setFeatures() - UI - nuxt-ui', async () => {
70
+ process.env.NUXT_PUBLIC_IGNIS_UI = 'true'
71
+ setFeatures()
72
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/ui-nuxt-ui.txt')
73
+ })
74
+
75
+ test('setFeatures() - UI - tailwind', async () => {
76
+ process.env.NUXT_PUBLIC_IGNIS_TAILWIND = 'true'
77
+ setFeatures()
78
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/ui-tailwind.txt')
79
+ })
80
+
81
+ // preset - DB
82
+
83
+ test('setFeatures() - DB preset - neon', async () => {
84
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_DB = 'neon'
85
+ setFeatures()
86
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/db-neon.txt')
87
+ })
88
+
89
+ test('setFeatures() - DB preset - supabase', async () => {
90
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_DB = 'supabase'
91
+ setFeatures()
92
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/db-supabase.txt')
93
+ })
94
+
95
+ test('setFeatures() - DB preset - off', async () => {
96
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_DB = 'off'
97
+ setFeatures()
98
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/db-off.txt')
99
+ })
100
+
101
+ test('setFeatures() - DB preset - invalid', async () => {
102
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_DB = 'invalid'
103
+ setFeatures()
104
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/db-off.txt')
105
+ })
106
+
107
+ // DB - set directly
108
+
109
+ test('setFeatures() - DB - neon', async () => {
110
+ process.env.NUXT_PUBLIC_IGNIS_NEON = 'true'
111
+ setFeatures()
112
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/db-neon.txt')
113
+ })
114
+
115
+ test('setFeatures() - DB - supabase', async () => {
116
+ process.env.NUXT_PUBLIC_IGNIS_SUPABASE = 'true'
117
+ setFeatures()
118
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/db-supabase.txt')
119
+ })
120
+
121
+ // preset - forms
122
+
123
+ test('setFeatures() - forms preset - vueform', async () => {
124
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS = 'vueform'
125
+ setFeatures()
126
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/forms-vueform.txt')
127
+ })
128
+
129
+ test('setFeatures() - forms preset - formkit', async () => {
130
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS = 'formkit'
131
+ setFeatures()
132
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/forms-formkit.txt')
133
+ })
134
+
135
+ test('setFeatures() - forms preset - off', async () => {
136
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS = 'off'
137
+ setFeatures()
138
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/forms-off.txt')
139
+ })
140
+
141
+ test('setFeatures() - forms preset - invalid', async () => {
142
+ process.env.NUXT_PUBLIC_IGNIS_PRESET_FORMS = 'invalid'
143
+ setFeatures()
144
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/forms-off.txt')
145
+ })
146
+
147
+ // forms - set directly
148
+
149
+ test('setFeatures() - forms - vueform', async () => {
150
+ process.env.NUXT_PUBLIC_IGNIS_VUEFORM = 'true'
151
+ setFeatures()
152
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/forms-vueform.txt')
153
+ })
154
+
155
+ test('setFeatures() - forms - formkit', async () => {
156
+ process.env.NUXT_PUBLIC_IGNIS_FORMKIT_ENABLED = 'true'
157
+ setFeatures()
158
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/forms-formkit.txt')
159
+ })
160
+
161
+ // disable "core" features
162
+ test('setFeatures() - disable core features', async () => {
163
+ process.env.NUXT_PUBLIC_IGNIS_CORE_ESLINT = 'false'
164
+ process.env.NUXT_PUBLIC_IGNIS_CORE_FONTS = 'false'
165
+ process.env.NUXT_PUBLIC_IGNIS_CORE_IMAGE = 'false'
166
+ process.env.NUXT_PUBLIC_IGNIS_CORE_PINIA = 'false'
167
+ process.env.NUXT_PUBLIC_IGNIS_CORE_SCRIPTS = 'false'
168
+ process.env.NUXT_PUBLIC_IGNIS_CORE_SECURITY = 'false'
169
+ process.env.NUXT_PUBLIC_IGNIS_CORE_VUEUSE = 'false'
170
+ setFeatures()
171
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/disable-core.txt')
172
+ })
173
+
174
+ // enable all features
175
+ test('setFeatures() - enable all features', async () => {
176
+ process.env.NUXT_PUBLIC_IGNIS_UI = 'true'
177
+ process.env.NUXT_PUBLIC_IGNIS_NEON = 'true'
178
+ process.env.NUXT_PUBLIC_IGNIS_SUPABASE = 'true'
179
+ process.env.NUXT_PUBLIC_IGNIS_I18N_ENABLED = 'true'
180
+ process.env.NUXT_PUBLIC_IGNIS_FORMKIT_ENABLED = 'true'
181
+ process.env.NUXT_PUBLIC_IGNIS_VUEFORM = 'true'
182
+ process.env.NUXT_PUBLIC_IGNIS_CONTENT = 'true'
183
+ process.env.NUXT_PUBLIC_IGNIS_OPENPROPS = 'true'
184
+ process.env.NUXT_PUBLIC_IGNIS_PSLO_ENABLED = 'true'
185
+ process.env.NUXT_PUBLIC_IGNIS_SEO = 'true'
186
+ process.env.NUXT_PUBLIC_IGNIS_AUTH = 'true'
187
+ process.env.NUXT_PUBLIC_IGNIS_WARN_DUPLICATES = 'false' // to avoid console log
188
+ setFeatures()
189
+ await expect(getConsoleOutput()).toMatchFileSnapshot('./features/enable-all.txt')
190
+ })
191
+ })
@@ -0,0 +1,12 @@
1
+ import { defineCollection, defineContentConfig } from '@nuxt/content'
2
+
3
+ export default defineContentConfig({
4
+ // while it is not strictily necessary to have a default config file
5
+ // it produces warning during startup when not presented
6
+ collections: {
7
+ content: defineCollection({
8
+ source: '**',
9
+ type: 'page',
10
+ }),
11
+ },
12
+ })