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.
- package/.data/content/contents.sqlite +0 -0
- package/.env +43 -0
- package/.nuxt/app.config.mjs +227 -1
- package/.nuxt/components.d.ts +496 -132
- package/.nuxt/content/components.ts +108 -0
- package/.nuxt/content/database.compressed.mjs +1 -0
- package/.nuxt/content/manifest.ts +33 -0
- package/.nuxt/content/sql_dump +6 -0
- package/.nuxt/content/types.d.ts +13 -0
- package/.nuxt/dev/index.mjs +4719 -66
- package/.nuxt/dev/index.mjs.map +1 -1
- package/.nuxt/dist/server/client.manifest.json +2 -2
- package/.nuxt/dist/server/client.manifest.mjs +18 -1
- package/.nuxt/eslint.config.d.mts +2 -2
- package/.nuxt/eslint.config.mjs +2 -2
- package/.nuxt/i18n.options.mjs +165 -0
- package/.nuxt/imports.d.ts +62 -31
- package/.nuxt/manifest/latest.json +1 -1
- package/.nuxt/manifest/meta/dev.json +1 -1
- package/.nuxt/mdc-configs.mjs +8 -0
- package/.nuxt/mdc-highlighter.mjs +213 -0
- package/.nuxt/mdc-image-component.mjs +1 -0
- package/.nuxt/mdc-imports.mjs +12 -0
- package/.nuxt/module/@nuxtjs-sitemap.d.ts +28 -0
- package/.nuxt/module/nuxt-robots.d.ts +35 -0
- package/.nuxt/module/nuxt-seo-utils.assets.d.ts +25 -0
- package/.nuxt/module/nuxt-seo-utils.d.ts +22 -0
- package/.nuxt/module/nuxt-site-config.d.ts +43 -0
- package/.nuxt/nitro.json +4 -4
- package/.nuxt/nuxt-i18n-logger.mjs +1 -0
- package/.nuxt/nuxt-icon-client-bundle.mjs +1 -0
- package/.nuxt/nuxt-icon-server-bundle.mjs +15 -0
- package/.nuxt/nuxt.d.ts +23 -6
- package/.nuxt/nuxt.json +2 -2
- package/.nuxt/schema/nuxt.schema.d.ts +193 -0
- package/.nuxt/schema/nuxt.schema.json +261 -1
- package/.nuxt/tsconfig.json +216 -42
- package/.nuxt/tsconfig.server.json +181 -23
- package/.nuxt/types/app.config.d.ts +227 -1
- package/.nuxt/types/build.d.ts +4 -1
- package/.nuxt/types/i18n-plugin.d.ts +104 -0
- package/.nuxt/types/imports.d.ts +334 -210
- package/.nuxt/types/neon.d.ts +137 -0
- package/.nuxt/types/nitro-imports.d.ts +268 -6
- package/.nuxt/types/nitro-routes.d.ts +65 -1
- package/.nuxt/types/plugins.d.ts +40 -17
- package/.nuxt/types/schema.d.ts +984 -2
- package/.nuxt/types/ui.d.ts +35 -0
- package/.nuxt/ui/accordion.ts +20 -0
- package/.nuxt/ui/alert.ts +264 -0
- package/.nuxt/ui/avatar-group.ts +52 -0
- package/.nuxt/ui/avatar.ts +54 -0
- package/.nuxt/ui/badge.ts +263 -0
- package/.nuxt/ui/breadcrumb.ts +45 -0
- package/.nuxt/ui/button-group.ts +16 -0
- package/.nuxt/ui/button.ts +378 -0
- package/.nuxt/ui/calendar.ts +103 -0
- package/.nuxt/ui/card.ts +34 -0
- package/.nuxt/ui/carousel.ts +38 -0
- package/.nuxt/ui/checkbox-group.ts +204 -0
- package/.nuxt/ui/checkbox.ts +236 -0
- package/.nuxt/ui/chip.ts +96 -0
- package/.nuxt/ui/collapsible.ts +6 -0
- package/.nuxt/ui/color-picker.ts +47 -0
- package/.nuxt/ui/command-palette.ts +50 -0
- package/.nuxt/ui/container.ts +3 -0
- package/.nuxt/ui/context-menu.ts +217 -0
- package/.nuxt/ui/drawer.ts +126 -0
- package/.nuxt/ui/dropdown-menu.ts +218 -0
- package/.nuxt/ui/form-field.ts +48 -0
- package/.nuxt/ui/form.ts +3 -0
- package/.nuxt/ui/index.ts +50 -0
- package/.nuxt/ui/input-menu.ts +436 -0
- package/.nuxt/ui/input-number.ts +245 -0
- package/.nuxt/ui/input.ts +289 -0
- package/.nuxt/ui/kbd.ts +31 -0
- package/.nuxt/ui/link.ts +22 -0
- package/.nuxt/ui/modal.ts +29 -0
- package/.nuxt/ui/navigation-menu.ts +510 -0
- package/.nuxt/ui/pagination.ts +13 -0
- package/.nuxt/ui/pin-input.ts +171 -0
- package/.nuxt/ui/popover.ts +6 -0
- package/.nuxt/ui/progress.ts +297 -0
- package/.nuxt/ui/radio-group.ts +350 -0
- package/.nuxt/ui/select-menu.ts +346 -0
- package/.nuxt/ui/select.ts +341 -0
- package/.nuxt/ui/separator.ts +172 -0
- package/.nuxt/ui/skeleton.ts +3 -0
- package/.nuxt/ui/slideover.ts +71 -0
- package/.nuxt/ui/slider.ts +171 -0
- package/.nuxt/ui/stepper.ts +202 -0
- package/.nuxt/ui/switch.ts +131 -0
- package/.nuxt/ui/table.ts +147 -0
- package/.nuxt/ui/tabs.ts +256 -0
- package/.nuxt/ui/textarea.ts +294 -0
- package/.nuxt/ui/toast.ts +81 -0
- package/.nuxt/ui/toaster.ts +91 -0
- package/.nuxt/ui/tooltip.ts +9 -0
- package/.nuxt/ui/tree.ts +154 -0
- package/.nuxt/ui-image-component.ts +1 -0
- package/.nuxt/ui.css +146 -0
- package/content.config.ts +6 -10
- package/features.ts +43 -22
- package/nuxt.config.ts +1 -1
- package/package.json +13 -12
- package/server/api/neonTest.ts +7 -5
- package/tailwind.config.ts +1 -1
- package/test/features/db-neon.txt +3 -0
- package/test/features/db-off.txt +3 -0
- package/test/features/db-supabase.txt +3 -0
- package/test/features/default.txt +3 -0
- package/test/features/disable-core.txt +3 -0
- package/test/features/enable-all.txt +4 -0
- package/test/features/forms-formkit.txt +3 -0
- package/test/features/forms-off.txt +3 -0
- package/test/features/forms-vueform.txt +3 -0
- package/test/features/ui-nuxt-ui.txt +3 -0
- package/test/features/ui-off.txt +3 -0
- package/test/features/ui-tailwind.txt +4 -0
- package/test/features.test.ts +191 -0
- package/utils/config/content.config.ts +12 -0
- package/utils/config/vueform.config.ts +20 -0
- package/utils/content.ts +31 -0
- package/utils/tailwind.ts +19 -0
- package/utils/vueform.ts +16 -0
- package/vueform.config.ts +4 -16
- package/.nuxt/component-chunk.mjs +0 -1
- 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
|
-
|
|
1
|
+
// minimal config for Nuxt Content
|
|
2
|
+
// currently required to be loaded like this...
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
64
|
-
if (uiPreset
|
|
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' || (
|
|
82
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
96
|
-
if (dbPreset
|
|
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' ||
|
|
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
|
-
|
|
139
|
-
if (formsPreset
|
|
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' ||
|
|
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('
|
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-ignis",
|
|
3
|
-
"version": "0.3.
|
|
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.
|
|
34
|
-
"@nuxt/ui": "3.1.
|
|
35
|
-
"@nuxtjs/i18n": "9.5.
|
|
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.
|
|
40
|
-
"@vueform/nuxt": "1.
|
|
41
|
-
"@vueuse/core": "13.
|
|
42
|
-
"@vueuse/nuxt": "13.
|
|
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.
|
|
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.
|
|
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.
|
|
57
|
-
"vue": "3.5.
|
|
57
|
+
"nuxt": "3.17.5",
|
|
58
|
+
"vue": "3.5.16",
|
|
58
59
|
"vue-router": "4.5.1"
|
|
59
60
|
},
|
|
60
61
|
"scripts": {
|
package/server/api/neonTest.ts
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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'
|
package/tailwind.config.ts
CHANGED
|
@@ -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
|
-
'
|
|
9
|
+
'srcDir/content/**/*.{md,yml,json}',
|
|
10
10
|
],
|
|
11
11
|
theme: {
|
|
12
12
|
// example of extending Tailwind CSS with custom color
|
|
@@ -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,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
|
+
})
|