nuxt-ignis 0.3.3 → 0.4.0-rc.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 +8 -2
- package/.nuxt/app.config.mjs +2 -2
- package/.nuxt/cache/fonts/EP1810cmAtyahQPDHB6nvBzRkIG5RcNv4u5vTy1aYHU-Ih_Po7WkbhDymI0Y_ntmpz__bZJprHiu7_c5N_X6AAA.woff2 +0 -0
- package/.nuxt/cache/fonts/JNWOTRocaYj0gq52vW_s7sHAdSMUetrRmhhggCVxyZ0-TnR4PP30hI5UWldZ0knUBrHkvIoiDWYXwn2v1NtCh80.woff2 +0 -0
- package/.nuxt/cache/fonts/XbAtjIvy1UErjg9eu_v7X3zPLS_AwsmqVsR9fG-JB6o-H99o9_8BZXq7ey5UyS99Wn9zX0V0anvpXEqAqavcJlQ.woff2 +0 -0
- package/.nuxt/cache/fonts/ZLm6CLvwhQbamZ73M80jbqz7DuOkHlT_HRyXHG7YfVs-eYLoSJPWhqR5CE0c8XPABls8kE_7Fc7F2x7Gtfsg_8M.woff2 +0 -0
- package/.nuxt/cache/fonts/aPa9az0DeE4U5rqM-Ov0Vl_obQis_d6sScLNygGkvxw-s32Y9TxBLZRr_ebRHQ3l3q1g2j_0tPT879PPSBGrj8A.woff2 +0 -0
- package/.nuxt/cache/fonts/kgyHMsxRmhh06xcV0yKMKdTKQBsQpXGi7erqwaqgjXg-55rzD39AWoqYSkQOLHuoKZUDVcDSlXRKdaymIN2dXes.woff +0 -0
- package/.nuxt/components.d.ts +606 -394
- package/.nuxt/content/components.ts +107 -98
- package/.nuxt/content/database.compressed.mjs +1 -1
- package/.nuxt/content/manifest.ts +6 -6
- package/.nuxt/content/sql_dump.txt +5 -0
- package/.nuxt/content/types.d.ts +8 -0
- package/.nuxt/dev/index.mjs +1584 -559
- package/.nuxt/dev/index.mjs.map +1 -1
- package/.nuxt/dist/server/client.manifest.json +2 -2
- package/.nuxt/dist/server/client.manifest.mjs +2 -2
- package/.nuxt/eslint-typegen.d.ts +256 -225
- package/.nuxt/eslint.config.d.mts +3 -3
- package/.nuxt/eslint.config.mjs +11 -11
- package/.nuxt/imports.d.ts +70 -54
- package/.nuxt/manifest/latest.json +1 -1
- package/.nuxt/manifest/meta/dev.json +1 -1
- package/.nuxt/mdc-image-component.mjs +1 -1
- package/.nuxt/module/@nuxtjs-sitemap.d.ts +9 -8
- package/.nuxt/module/nuxt-robots.d.ts +37 -7
- package/.nuxt/{modules/@nuxt-scripts.d.ts → module/nuxt-scripts.d.ts} +1 -2
- package/.nuxt/module/nuxt-seo-utils.assets.d.ts +3 -3
- package/.nuxt/module/nuxt-seo-utils.d.ts +20 -6
- package/.nuxt/module/nuxt-site-config.d.ts +8 -8
- package/.nuxt/nitro.json +5 -5
- package/.nuxt/nuxt.d.ts +12 -9
- package/.nuxt/nuxt.json +2 -2
- package/.nuxt/tsconfig.json +235 -153
- package/.nuxt/tsconfig.server.json +126 -92
- package/.nuxt/types/app.config.d.ts +2 -2
- package/.nuxt/types/build.d.ts +2 -1
- package/.nuxt/types/i18n-plugin.d.ts +2 -2
- package/.nuxt/types/imports.d.ts +407 -314
- package/.nuxt/types/nitro-config.d.ts +2 -2
- package/.nuxt/types/nitro-imports.d.ts +143 -134
- package/.nuxt/types/nitro-nuxt.d.ts +2 -0
- package/.nuxt/types/nitro-routes.d.ts +17 -17
- package/.nuxt/types/plugins.d.ts +34 -34
- package/.nuxt/types/schema.d.ts +322 -12
- package/.nuxt/ui/avatar.ts +1 -1
- package/.nuxt/ui/card.ts +1 -1
- package/.nuxt/ui/carousel.ts +1 -1
- package/.nuxt/ui/command-palette.ts +1 -0
- package/.nuxt/ui/drawer.ts +1 -1
- package/.nuxt/ui/index.ts +2 -0
- package/.nuxt/ui/input-menu.ts +24 -10
- package/.nuxt/ui/input-tags.ts +310 -0
- package/.nuxt/ui/modal.ts +1 -1
- package/.nuxt/ui/navigation-menu.ts +1 -1
- package/.nuxt/ui/select-menu.ts +11 -6
- package/.nuxt/ui/select.ts +11 -6
- package/.nuxt/ui/table.ts +3 -2
- package/.nuxt/ui/timeline.ts +321 -0
- package/.nuxt/ui/toaster.ts +1 -1
- package/.nuxt/ui-image-component.ts +1 -1
- package/app.vue +2 -6
- package/assets/css/ignis-nuxt-ui.css +24 -0
- package/assets/css/{open-props.css → ignis-open-props.css} +1 -1
- package/assets/css/ignis-tailwind.css +23 -0
- package/assets/css/ignis.css +31 -0
- package/bin/make-eslint.js +55 -0
- package/components/CurrentTime.vue +4 -2
- package/components/ignis/IgnisConfig.vue +44 -0
- package/components/{AppFeature.vue → ignis/IgnisFeature.vue} +2 -1
- package/components/ignis/IgnisFeatureList.vue +111 -0
- package/components/ignis/IgnisFooter.vue +2 -2
- package/components/ignis/IgnisHeader.vue +4 -3
- package/components/ignis/IgnisInfo.vue +14 -13
- package/components/ignis/IgnisWelcome.vue +89 -0
- package/composables/useTranslation.ts +18 -9
- package/features.ts +68 -10
- package/formkit.config.ts +8 -8
- package/i18n/locales/en.json +10 -4
- package/nuxt.config.ts +30 -2
- package/package.json +29 -21
- package/pages/_ignis-config.vue +3 -0
- package/pages/_ignis-info.vue +3 -0
- package/pages/index.vue +4 -6
- package/public/_ignis-config.json +98 -0
- package/test/config/css-multiple.txt +30 -0
- package/test/config/css-nuxt-ui.txt +34 -0
- package/test/config/css-open-props.txt +2307 -0
- package/test/config/css-single.txt +28 -0
- package/test/config/css-tailwind.txt +58 -0
- package/test/config/custom-lang.txt +27 -0
- package/test/config/db-neon.txt +28 -0
- package/test/config/db-supabase.txt +31 -0
- package/test/config/default.txt +26 -15
- package/test/config/equipment-1-composable.txt +32 -21
- package/test/config/equipment-2-plugins.txt +33 -22
- package/test/config/equipment-all.txt +38 -27
- package/test/config/forms-formkit.txt +32 -0
- package/test/config/forms-vueform.txt +28 -0
- package/test/config/i18n.txt +38 -0
- package/test/config/no-default-css.txt +24 -0
- package/test/config/open-props.txt +2306 -0
- package/test/config/seo-ssr-false.txt +35 -0
- package/test/config/ui-nuxt-ui.txt +33 -0
- package/test/config/ui-tailwind.txt +57 -0
- package/test/config.test.ts +115 -0
- package/test/features/charts.txt +4 -0
- package/test/features/custom-css.txt +4 -0
- package/test/features/custom-title.txt +4 -0
- package/test/features/db-neon.txt +4 -3
- package/test/features/db-off.txt +4 -3
- package/test/features/db-supabase.txt +4 -3
- package/test/features/default.txt +4 -3
- package/test/features/disable-core.txt +2 -1
- package/test/features/enable-all.txt +5 -4
- package/test/features/equipment.txt +4 -3
- package/test/features/forms-formkit.txt +4 -3
- package/test/features/forms-off.txt +4 -3
- package/test/features/forms-vueform.txt +4 -3
- package/test/features/no-default-css.txt +4 -0
- package/test/features/regexp.txt +4 -0
- package/test/features/ui-nuxt-ui.txt +4 -3
- package/test/features/ui-off.txt +4 -3
- package/test/features/ui-tailwind.txt +5 -4
- package/test/features/validation-off.txt +4 -3
- package/test/features/validation-valibot.txt +5 -4
- package/test/features/validation-zod.txt +5 -4
- package/test/features.test.ts +37 -1
- package/utils/config/formkit.ts +23 -0
- package/utils/formkit.ts +16 -0
- package/utils/pslo-utils.ts +2 -1
- package/.nuxt/content/sql_dump +0 -6
- package/app.config.ts +0 -3
- package/assets/css/nuxt-ui.css +0 -16
- package/assets/css/tailwind.css +0 -15
- package/components/AppFeatureList.vue +0 -124
- package/content/second.md +0 -11
- package/pages/ignis.vue +0 -3
- package/pages/second.vue +0 -59
- package/server/plugins/pslo-content.ts +0 -17
- package/tailwind.config.ts +0 -29
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
https://nuxt.com/docs/guide/directory-structure/pages
|
|
3
|
+
|
|
4
|
+
An example of Nuxt component.
|
|
5
|
+
|
|
6
|
+
IgnisFeature
|
|
7
|
+
- an example usage of auto-imported Nuxt component declared in `/components` directory
|
|
8
|
+
- the text is (usually) being loaded localized via nuxtjs/i18n module
|
|
9
|
+
- features are being displayed conditionally according to current setting
|
|
10
|
+
-->
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<div style="text-align: center; max-width: 1200px;">
|
|
14
|
+
<h1 class="ignis-feature-header">
|
|
15
|
+
Features Overview
|
|
16
|
+
</h1>
|
|
17
|
+
<div class="feature-list">
|
|
18
|
+
<IgnisFeature :text="useIgnisT('features.nuxt')" />
|
|
19
|
+
<IgnisFeature :text="useIgnisT('features.consola')" />
|
|
20
|
+
<IgnisFeature :active="eslint" :text="useIgnisT('features.eslint')" />
|
|
21
|
+
<IgnisFeature :active="security" :text="useIgnisT('features.security')" />
|
|
22
|
+
<IgnisFeature :active="image" :text="useIgnisT('features.image')" />
|
|
23
|
+
<IgnisFeature :active="scripts" :text="useIgnisT('features.scripts')" />
|
|
24
|
+
<IgnisFeature :active="fonts" :text="useIgnisT('features.fonts')" class="fonts" />
|
|
25
|
+
<IgnisFeature :active="pinia" :text="useIgnisT('features.pinia')" />
|
|
26
|
+
<IgnisFeature :active="vueuse" :text="useIgnisT('features.vueuse')" />
|
|
27
|
+
<IgnisFeature :active="true" :text="useIgnisT('features.time')" />
|
|
28
|
+
<IgnisFeature :active="nuxtui" :text="useIgnisT('features.ui')" />
|
|
29
|
+
<IgnisFeature :active="tailwind" :text="useIgnisT('features.tailwind')" />
|
|
30
|
+
<IgnisFeature :active="nuxtui" :text="useIgnisT('features.icon')" />
|
|
31
|
+
<IgnisFeature :active="neon" :text="useIgnisT('features.neon')" />
|
|
32
|
+
<IgnisFeature :active="supabase" :text="useIgnisT('features.supabase')" />
|
|
33
|
+
<IgnisFeature :active="i18n" :text="useIgnisT('features.i18n')" />
|
|
34
|
+
<IgnisFeature :active="vueform" :text="useIgnisT('features.vueform')" />
|
|
35
|
+
<IgnisFeature :active="formkit" :text="useIgnisT('features.formkit')" />
|
|
36
|
+
<IgnisFeature :active="valibot" :text="useIgnisT('features.valibot')" />
|
|
37
|
+
<IgnisFeature :active="zod" :text="useIgnisT('features.zod')" />
|
|
38
|
+
<IgnisFeature :active="content" :text="useIgnisT('features.content')" />
|
|
39
|
+
<IgnisFeature :active="seo" :text="useIgnisT('features.seo')" />
|
|
40
|
+
<IgnisFeature :active="auth" :text="useIgnisT('features.auth')" />
|
|
41
|
+
<IgnisFeature :active="equipment" :text="useIgnisT('features.equipment')" />
|
|
42
|
+
<IgnisFeature :active="regexp" :text="useIgnisT('features.regexp')" />
|
|
43
|
+
<IgnisFeature :active="charts" :text="useIgnisT('features.charts')" />
|
|
44
|
+
<IgnisFeature :active="openprops" class="openprops-feature" :text="useIgnisT('features.openprops')" />
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<script setup lang="ts">
|
|
50
|
+
import { useIgnisT } from '#imports' // requires explicit import for some reason
|
|
51
|
+
|
|
52
|
+
const setup = useRuntimeConfig().public.ignis
|
|
53
|
+
const eslint = setup.core.eslint
|
|
54
|
+
const fonts = setup.core.fonts
|
|
55
|
+
const image = setup.core.image
|
|
56
|
+
const pinia = setup.core.pinia
|
|
57
|
+
const scripts = setup.core.scripts
|
|
58
|
+
const security = setup.core.security
|
|
59
|
+
const vueuse = setup.core.vueuse
|
|
60
|
+
const ui = setup.preset.ui
|
|
61
|
+
const nuxtui = ui === 'nuxt-ui' || setup.ui
|
|
62
|
+
const tailwind = ui !== 'off' || setup.ui || setup.tailwind
|
|
63
|
+
const db = setup.preset.db
|
|
64
|
+
const neon = db === 'neon' || (db === 'off' && setup.neon)
|
|
65
|
+
const supabase = db === 'supabase' || (db === 'off' && setup.supabase)
|
|
66
|
+
const i18n = setup.i18n.enabled
|
|
67
|
+
const forms = setup.preset.forms
|
|
68
|
+
const vueform = forms === 'vueform' || (forms === 'off' && setup.vueform)
|
|
69
|
+
const formkit = forms === 'formkit' || (forms === 'off' && setup.formkit.enabled)
|
|
70
|
+
const validation = setup.preset.validation
|
|
71
|
+
const valibot = validation === 'valibot' || (validation === 'off' && setup.valibot)
|
|
72
|
+
const zod = validation === 'zod' || (validation === 'off' && setup.zod)
|
|
73
|
+
const content = setup.content
|
|
74
|
+
const seo = setup.seo
|
|
75
|
+
const auth = setup.auth
|
|
76
|
+
const openprops = setup.openprops
|
|
77
|
+
const equipment = setup.equipment.enabled
|
|
78
|
+
const regexp = setup.regexp
|
|
79
|
+
const charts = setup.charts
|
|
80
|
+
</script>
|
|
81
|
+
|
|
82
|
+
<style scoped>
|
|
83
|
+
/* demo for @nuxt/fonts */
|
|
84
|
+
.fonts {
|
|
85
|
+
font-family: "Kurale";
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* avoid Tailwind CSS styles here, because Tailwind may not be enabled */
|
|
89
|
+
|
|
90
|
+
.ignis-feature-header {
|
|
91
|
+
text-align: center;
|
|
92
|
+
font-family: monospace;
|
|
93
|
+
font-size: 1.75rem;
|
|
94
|
+
margin-top: 2rem;
|
|
95
|
+
margin-bottom: 0.5rem;
|
|
96
|
+
color: #fbbf24;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* margin-auto my-4 flex flex-col */
|
|
100
|
+
.feature-list {
|
|
101
|
+
margin: 0px auto;
|
|
102
|
+
margin-bottom: 8px;
|
|
103
|
+
display: flex;
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* mb-2 */
|
|
108
|
+
.pages {
|
|
109
|
+
margin-bottom: 2em;
|
|
110
|
+
}
|
|
111
|
+
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<footer class="link text-xs">
|
|
2
|
+
<footer class="link text-xs hover:text-amber-300">
|
|
3
3
|
<NuxtLink to="https://github.com/AloisSeckar/nuxt-ignis">
|
|
4
4
|
https://github.com/AloisSeckar/nuxt-ignis
|
|
5
5
|
</NuxtLink>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<style scoped lang="css">
|
|
10
10
|
footer {
|
|
11
11
|
text-align: center;
|
|
12
|
-
margin
|
|
12
|
+
margin: 0.25rem 0; /* 4px */
|
|
13
13
|
font-size: 0.75rem; /* 12px */
|
|
14
14
|
line-height: 1rem; /* 16px */
|
|
15
15
|
}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
<header>
|
|
3
3
|
<div class="ignis-header">
|
|
4
4
|
<img src="/nuxt-ignis.png" class="ignis-logo" :title :alt>
|
|
5
|
-
<
|
|
5
|
+
<div class="ignis-title">
|
|
6
6
|
{{ useIgnisT("title") }}
|
|
7
|
-
</
|
|
7
|
+
</div>
|
|
8
8
|
<img src="/nuxt-ignis.png" class="ignis-logo" :title :alt>
|
|
9
9
|
</div>
|
|
10
10
|
<div class="ignis-subtitle ">
|
|
@@ -25,7 +25,8 @@ const alt = title
|
|
|
25
25
|
display: flex;
|
|
26
26
|
flex-direction: row;
|
|
27
27
|
justify-content: center;
|
|
28
|
-
margin-
|
|
28
|
+
margin-top: 0.5em;
|
|
29
|
+
margin-bottom: 0.5em;
|
|
29
30
|
}
|
|
30
31
|
.ignis-logo {
|
|
31
32
|
display: inline;
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
3
|
<IgnisHeader />
|
|
4
|
-
<AppFeatureList />
|
|
5
4
|
|
|
6
|
-
<
|
|
7
|
-
<NuxtLink to="/second">
|
|
8
|
-
{{ useIgnisT("goto2") }}
|
|
9
|
-
</NuxtLink>
|
|
10
|
-
</div>
|
|
5
|
+
<component :is="ignisContent" />
|
|
11
6
|
|
|
12
7
|
<CurrentTime />
|
|
13
8
|
<IgnisFooter />
|
|
@@ -15,12 +10,18 @@
|
|
|
15
10
|
</template>
|
|
16
11
|
|
|
17
12
|
<script setup lang="ts">
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
export type IgnisComponentType = 'Welcome' | 'Features' | 'Config'
|
|
14
|
+
|
|
15
|
+
const props = defineProps<{
|
|
16
|
+
content: IgnisComponentType
|
|
17
|
+
}>()
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
.
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
let ignisContent
|
|
20
|
+
if (props.content === 'Welcome') {
|
|
21
|
+
ignisContent = resolveComponent('IgnisWelcome')
|
|
22
|
+
} else if (props.content === 'Config') {
|
|
23
|
+
ignisContent = resolveComponent('IgnisConfig')
|
|
24
|
+
} else {
|
|
25
|
+
ignisContent = resolveComponent('IgnisFeatureList')
|
|
25
26
|
}
|
|
26
|
-
</
|
|
27
|
+
</script>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="ignis-welcome">
|
|
3
|
+
<h1 class="ignis-welcome-header">
|
|
4
|
+
Welcome to Ignis
|
|
5
|
+
</h1>
|
|
6
|
+
<p>Thank you for choosing Nuxt Ignis! Your awesome website is just a few steps away.</p>
|
|
7
|
+
<p v-if="pages">
|
|
8
|
+
Replace <span class="file">/pages/index.vue</span> with your own content to get started. You may also replace <span class="file">/app.vue</span> to adjust site defaults.
|
|
9
|
+
</p>
|
|
10
|
+
<p v-else>
|
|
11
|
+
Replace <span class="file">/app.vue</span> with your own content to get started.
|
|
12
|
+
</p>
|
|
13
|
+
<h2 class="ignis-welcome-subheader">
|
|
14
|
+
Resources
|
|
15
|
+
</h2>
|
|
16
|
+
<div class="ignis-welcome-resources">
|
|
17
|
+
<NuxtLink to="/_ignis-info" class="feature">Features Overview</NuxtLink>
|
|
18
|
+
<NuxtLink to="/_ignis-config" class="feature">Configuration Overview</NuxtLink>
|
|
19
|
+
<NuxtLink to="https://nuxt-ignis.netlify.app/" class="feature">Documentation 🔗</NuxtLink>
|
|
20
|
+
</div>
|
|
21
|
+
<a href="https://github.com/AloisSeckar/nuxt-ignis" title="Nuxt Ignis on GitHub">
|
|
22
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Material Design Icons by Pictogrammers - https://github.com/Templarian/MaterialDesign/blob/master/LICENSE --><path fill="#888888" d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2" /></svg>
|
|
23
|
+
</a>
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
<script setup lang="ts">
|
|
28
|
+
const pages = useRuntimeConfig().public.ignis.pages
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<style scoped lang="css">
|
|
32
|
+
.ignis-welcome {
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
35
|
+
align-items: center;
|
|
36
|
+
gap: 0.75rem;
|
|
37
|
+
padding: 2rem;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.ignis-welcome-header {
|
|
41
|
+
text-align: center;
|
|
42
|
+
font-family: monospace;
|
|
43
|
+
font-size: 1.75rem;
|
|
44
|
+
margin-bottom: 0.5rem;
|
|
45
|
+
color: #fbbf24;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.ignis-welcome-subheader {
|
|
49
|
+
text-align: center;
|
|
50
|
+
font-family: monospace;
|
|
51
|
+
font-size: 1.5rem;
|
|
52
|
+
color: #fbbf24;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.ignis-welcome-resources {
|
|
56
|
+
display: flex;
|
|
57
|
+
gap: 0.5rem;
|
|
58
|
+
flex-wrap: wrap;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
p {
|
|
62
|
+
width: 100%;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.file {
|
|
66
|
+
display: inline;
|
|
67
|
+
color: #fbbf24;
|
|
68
|
+
font-family: monospace;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* TODO unify with IgnisFeature.vue */
|
|
72
|
+
.feature {
|
|
73
|
+
margin: 4px;
|
|
74
|
+
padding: 4px 12px;
|
|
75
|
+
border: 2px solid #fcd34d;
|
|
76
|
+
font-size: 1em !important;
|
|
77
|
+
font-weight: bold;
|
|
78
|
+
background-color: #047857;
|
|
79
|
+
color: #f1f5f9;
|
|
80
|
+
font-size: 1.125rem;
|
|
81
|
+
line-height: 1.75rem;
|
|
82
|
+
border-radius: 0.5rem;
|
|
83
|
+
}
|
|
84
|
+
.feature:hover {
|
|
85
|
+
background-color: #334155;
|
|
86
|
+
color: #3CB371;
|
|
87
|
+
text-decoration: none;
|
|
88
|
+
}
|
|
89
|
+
</style>
|
|
@@ -20,8 +20,8 @@ export function useT(key: string): string {
|
|
|
20
20
|
} else {
|
|
21
21
|
// backdoor for Nuxt Ignis to display values on demo index page
|
|
22
22
|
const backdoorValue = useIgnisT(key)
|
|
23
|
-
if (backdoorValue) {
|
|
24
|
-
return backdoorValue
|
|
23
|
+
if (backdoorValue !== '???') {
|
|
24
|
+
return backdoorValue
|
|
25
25
|
}
|
|
26
26
|
// for other custom values a warning will be produced and a placeholder will be returned
|
|
27
27
|
log.warn('@nuxtjs/i18n turned off, translations are not available (set NUXT_PUBLIC_IGNIS_I18N=true)')
|
|
@@ -37,18 +37,27 @@ export function useT(key: string): string {
|
|
|
37
37
|
* @param key identifier of text that should be displayed
|
|
38
38
|
* @returns hardcoded text from '@/i18n/locales/en.json' of nuxt-ignis package (providing the key exists)
|
|
39
39
|
*/
|
|
40
|
-
export function useIgnisT(key: string):
|
|
40
|
+
export function useIgnisT(key: string): string {
|
|
41
41
|
const keys = key.split('.')
|
|
42
42
|
|
|
43
|
-
let
|
|
44
|
-
for (const
|
|
45
|
-
if (
|
|
43
|
+
let currentLang = lang
|
|
44
|
+
for (const currentKey of keys) {
|
|
45
|
+
if (currentLang && currentKey in currentLang) {
|
|
46
46
|
// @ts-expect-error TODO this should be fixed
|
|
47
|
-
|
|
47
|
+
currentLang = currentLang[currentKey]
|
|
48
48
|
} else {
|
|
49
|
-
|
|
49
|
+
log.debug(`useIgnisT: string value not found for "${key}"`)
|
|
50
|
+
return '???'
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
if (typeof currentLang === 'string') {
|
|
55
|
+
return currentLang
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
log.debug(`useIgnisT: string value not found for "${key}"`)
|
|
59
|
+
log.debug(`useIgnisT: was resolved as:`)
|
|
60
|
+
log.debug(JSON.stringify(currentLang))
|
|
61
|
+
|
|
62
|
+
return '???'
|
|
54
63
|
}
|
package/features.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { defu } from 'defu'
|
|
|
4
4
|
import OpenProps from 'open-props'
|
|
5
5
|
import tailwindcss from '@tailwindcss/vite'
|
|
6
6
|
import { log } from './utils/consola'
|
|
7
|
+
import { pslo } from './utils/pslo-utils'
|
|
7
8
|
import { ignisTailwindcssFix } from './utils/tailwind'
|
|
8
9
|
|
|
9
10
|
const currentDir = dirname(fileURLToPath(import.meta.url))
|
|
@@ -74,7 +75,7 @@ export function setFeatures() {
|
|
|
74
75
|
nuxtConfig.modules.push('@nuxt/ui')
|
|
75
76
|
// import tailwind css file
|
|
76
77
|
nuxtConfig = defu({
|
|
77
|
-
css: [join(currentDir, './assets/css/nuxt-ui.css')],
|
|
78
|
+
css: [join(currentDir, './assets/css/ignis-nuxt-ui.css')],
|
|
78
79
|
}, nuxtConfig)
|
|
79
80
|
} else {
|
|
80
81
|
// remove @nuxt/ui-specific components from resolution if module is not used
|
|
@@ -93,7 +94,7 @@ export function setFeatures() {
|
|
|
93
94
|
extras.push('Tailwind CSS')
|
|
94
95
|
// import tailwind css file
|
|
95
96
|
nuxtConfig = defu({
|
|
96
|
-
css: [join(currentDir, './assets/css/tailwind.css')],
|
|
97
|
+
css: [join(currentDir, './assets/css/ignis-tailwind.css')],
|
|
97
98
|
vite: {
|
|
98
99
|
plugins: [tailwindcss()], // temporary integration using Vite plugin directly
|
|
99
100
|
},
|
|
@@ -242,7 +243,7 @@ export function setFeatures() {
|
|
|
242
243
|
extras.push('Open Props CSS')
|
|
243
244
|
nuxtConfig = defu({
|
|
244
245
|
// import Open Prpops stylesheet
|
|
245
|
-
css: [join(currentDir, './assets/css/open-props.css')],
|
|
246
|
+
css: [join(currentDir, './assets/css/ignis-open-props.css')],
|
|
246
247
|
// CSS processor for Open Props
|
|
247
248
|
postcss: {
|
|
248
249
|
plugins: {
|
|
@@ -255,6 +256,31 @@ export function setFeatures() {
|
|
|
255
256
|
// elrh-pslo
|
|
256
257
|
if (process.env.NUXT_PUBLIC_IGNIS_PSLO_ENABLED === 'true') {
|
|
257
258
|
extras.push('elrh-pslo')
|
|
259
|
+
|
|
260
|
+
// integration with Nuxt Content
|
|
261
|
+
// if enabled, all Nuxt Content page data will be treated with "preventSingleLetterOrphans" function
|
|
262
|
+
if (process.env.NUXT_PUBLIC_IGNIS_CONTENT === 'true' && process.env.NUXT_PUBLIC_IGNIS_PSLO_CONTENT === 'true') {
|
|
263
|
+
nuxtConfig = defu({
|
|
264
|
+
hooks: {
|
|
265
|
+
// TODO can we get type of ctx from Nuxt Content?
|
|
266
|
+
'content:file:beforeParse'(ctx: { file: { id: string, body: string } }) {
|
|
267
|
+
const { file } = ctx
|
|
268
|
+
file.body = pslo(file.body)
|
|
269
|
+
log.debug(`Nuxt Content file ${file.id} processed with elrh-pslo`)
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
}, nuxtConfig)
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// magic-regexp
|
|
277
|
+
if (process.env.NUXT_PUBLIC_IGNIS_REGEXP === 'true') {
|
|
278
|
+
nuxtConfig.modules.push('magic-regexp/nuxt')
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// magic-regexp
|
|
282
|
+
if (process.env.NUXT_PUBLIC_IGNIS_CHARTS === 'true') {
|
|
283
|
+
nuxtConfig.modules.push('nuxt-charts')
|
|
258
284
|
}
|
|
259
285
|
|
|
260
286
|
// 3. Nuxt-related settings
|
|
@@ -275,7 +301,38 @@ export function setFeatures() {
|
|
|
275
301
|
nuxt.push('pages=false')
|
|
276
302
|
}
|
|
277
303
|
|
|
278
|
-
//
|
|
304
|
+
// default CSS file
|
|
305
|
+
if (process.env.NUXT_PUBLIC_IGNIS_CORE_CSS !== 'false') {
|
|
306
|
+
nuxtConfig = defu({
|
|
307
|
+
css: [join(currentDir, './assets/css/ignis.css')],
|
|
308
|
+
}, nuxtConfig)
|
|
309
|
+
nuxt.push('ignis CSS')
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// custom CSS files
|
|
313
|
+
if (process.env.NUXT_PUBLIC_IGNIS_CSS) {
|
|
314
|
+
// values MUST be delimited by "," (spaces will be trimmed)
|
|
315
|
+
nuxtConfig = defu({
|
|
316
|
+
css: process.env.NUXT_PUBLIC_IGNIS_CSS.split(',').map(p => p?.trim()),
|
|
317
|
+
}, nuxtConfig)
|
|
318
|
+
nuxt.push('custom CSS')
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// 4. HTML config
|
|
322
|
+
const htmlLang = process.env.NUXT_PUBLIC_IGNIS_HTML_LANG || 'en'
|
|
323
|
+
const appTitle = process.env.NUXT_PUBLIC_IGNIS_HTML_TITLE || 'Nuxt Ignis App'
|
|
324
|
+
nuxtConfig = defu({
|
|
325
|
+
app: {
|
|
326
|
+
head: {
|
|
327
|
+
htmlAttrs: {
|
|
328
|
+
lang: htmlLang,
|
|
329
|
+
},
|
|
330
|
+
title: appTitle,
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
}, nuxtConfig)
|
|
334
|
+
|
|
335
|
+
// 5. warn if duplicate modules find
|
|
279
336
|
// this means e.g. 2 database modules or 2 form solutions
|
|
280
337
|
if (process.env.NUXT_PUBLIC_IGNIS_WARN_DUPLICATES !== 'false') {
|
|
281
338
|
const used = nuxtConfig.modules
|
|
@@ -291,16 +348,17 @@ export function setFeatures() {
|
|
|
291
348
|
}
|
|
292
349
|
}
|
|
293
350
|
|
|
294
|
-
//
|
|
295
|
-
// TODO why this run twice?
|
|
351
|
+
// 6. verify results
|
|
352
|
+
// TODO why this run twice? (SSR?)
|
|
296
353
|
|
|
297
|
-
let overview =
|
|
298
|
-
overview +=
|
|
354
|
+
let overview = `Nuxt Ignis will start using following settings:\n`
|
|
355
|
+
overview += `App title: ${appTitle}\n`
|
|
356
|
+
overview += `Modules: ${nuxtConfig.modules.join(', ')}\n`
|
|
299
357
|
if (extras.length > 0) {
|
|
300
|
-
overview +=
|
|
358
|
+
overview += `Extras: ${extras.join(', ')}\n`
|
|
301
359
|
}
|
|
302
360
|
if (nuxt.length > 0) {
|
|
303
|
-
overview +=
|
|
361
|
+
overview += `Nuxt: ${nuxt.join(', ')}\n`
|
|
304
362
|
}
|
|
305
363
|
log.info(overview)
|
|
306
364
|
|
package/formkit.config.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
import type { DefaultConfigOptions } from '@formkit/vue'
|
|
1
|
+
// minimal config for Formkit
|
|
2
|
+
// currently required to be loaded like this...
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
import { loadFormkitConfig } from './utils/formkit'
|
|
6
5
|
|
|
7
|
-
const config
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
6
|
+
const config = loadFormkitConfig({
|
|
7
|
+
// custom config here
|
|
8
|
+
})
|
|
11
9
|
|
|
10
|
+
// Formkit expects default export of a `config` constant
|
|
11
|
+
// `export default loadFormkitConfig({})` does not work
|
|
12
12
|
export default config
|
package/i18n/locales/en.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title" : "Nuxt Ignis",
|
|
3
3
|
"subtitle" : "A ready-to-use setup for your next application in Nuxt",
|
|
4
|
-
"page2" : "This is a
|
|
4
|
+
"page2" : "This is a test page of Nuxt Ignis app",
|
|
5
5
|
"image" : "Image by Unsplash displayed with Nuxt Image",
|
|
6
|
-
"goto1" : "Go back to
|
|
6
|
+
"goto1" : "Go back to info",
|
|
7
7
|
"goto2" : "Go to 2nd page",
|
|
8
8
|
"features" : {
|
|
9
9
|
"nuxt" : "Nuxt application framework atop Vue.js",
|
|
@@ -29,6 +29,12 @@
|
|
|
29
29
|
"content" : "Nuxt Content for creating and editing content",
|
|
30
30
|
"seo" : "Nuxt SEO collection of SEO-related modules",
|
|
31
31
|
"auth" : "Nuxt Auth Utils for easy and secure authentication",
|
|
32
|
-
"openprops" : "Additional CSS by Open Props"
|
|
32
|
+
"openprops" : "Additional CSS by Open Props",
|
|
33
|
+
"equipment" : "Vue Equipment utils available",
|
|
34
|
+
"regexp" : "Magic Regexp for easier regexp handling",
|
|
35
|
+
"charts" : "Nuxt Charts for drawing charts with ease"
|
|
36
|
+
},
|
|
37
|
+
"config" : {
|
|
38
|
+
"header" : "Current Nuxt Ignis iteration was started with following config applied:"
|
|
33
39
|
}
|
|
34
|
-
}
|
|
40
|
+
}
|
package/nuxt.config.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { writeFileSync, existsSync, mkdirSync } from 'fs'
|
|
2
|
+
import { dirname } from 'path'
|
|
1
3
|
import { defu } from 'defu'
|
|
2
4
|
import { setFeatures } from './features'
|
|
3
5
|
|
|
@@ -11,8 +13,8 @@ const nuxtConfig = defu(ignisFeatures, {
|
|
|
11
13
|
'nuxt-spec',
|
|
12
14
|
],
|
|
13
15
|
|
|
14
|
-
// https://nuxt.com/docs/api/nuxt-config#compatibilitydate
|
|
15
|
-
compatibilityDate: '2025-
|
|
16
|
+
// https://nuxt.com/docs/3.x/api/nuxt-config#compatibilitydate
|
|
17
|
+
compatibilityDate: '2025-07-19',
|
|
16
18
|
|
|
17
19
|
// simple eslint config - see eslint.config.mjs
|
|
18
20
|
eslint: {
|
|
@@ -42,6 +44,13 @@ const nuxtConfig = defu(ignisFeatures, {
|
|
|
42
44
|
// actual values MUST BE provided via .env file (or production equivalent)
|
|
43
45
|
ignis: {
|
|
44
46
|
|
|
47
|
+
html: {
|
|
48
|
+
// HTML lang attribute,
|
|
49
|
+
lang: 'en',
|
|
50
|
+
// HTML page title,
|
|
51
|
+
title: 'Nuxt Ignis App',
|
|
52
|
+
},
|
|
53
|
+
|
|
45
54
|
// logging
|
|
46
55
|
log: {
|
|
47
56
|
level: 'info',
|
|
@@ -54,6 +63,9 @@ const nuxtConfig = defu(ignisFeatures, {
|
|
|
54
63
|
ssr: true, // true/false
|
|
55
64
|
pages: true, // true/false
|
|
56
65
|
|
|
66
|
+
// custom css files
|
|
67
|
+
css: '',
|
|
68
|
+
|
|
57
69
|
// presets
|
|
58
70
|
preset: {
|
|
59
71
|
ui: 'off', // nuxt-ui/tailwind/off
|
|
@@ -65,6 +77,7 @@ const nuxtConfig = defu(ignisFeatures, {
|
|
|
65
77
|
// core modules
|
|
66
78
|
// (may be disabled by explicitly setting "false")
|
|
67
79
|
core: {
|
|
80
|
+
css: true, // not a module, but a default css file
|
|
68
81
|
eslint: true,
|
|
69
82
|
fonts: true,
|
|
70
83
|
image: true,
|
|
@@ -105,6 +118,8 @@ const nuxtConfig = defu(ignisFeatures, {
|
|
|
105
118
|
composables: '', // list of Vue Equipment composables
|
|
106
119
|
plugins: '', // list of Vue Equipment plugins
|
|
107
120
|
},
|
|
121
|
+
regexp: false, // true/false
|
|
122
|
+
charts: false, // true/false
|
|
108
123
|
|
|
109
124
|
// extra behavior
|
|
110
125
|
warn: {
|
|
@@ -113,6 +128,19 @@ const nuxtConfig = defu(ignisFeatures, {
|
|
|
113
128
|
},
|
|
114
129
|
},
|
|
115
130
|
},
|
|
131
|
+
hooks: {
|
|
132
|
+
'schema:resolved'() {
|
|
133
|
+
const ignisConfig = JSON.stringify(ignisFeatures, null, 2)
|
|
134
|
+
const outPath = './public/_ignis-config.json'
|
|
135
|
+
|
|
136
|
+
const outDir = dirname(outPath)
|
|
137
|
+
if (!existsSync(outDir)) {
|
|
138
|
+
mkdirSync(outDir, { recursive: true })
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
writeFileSync(outPath, ignisConfig)
|
|
142
|
+
},
|
|
143
|
+
},
|
|
116
144
|
})
|
|
117
145
|
|
|
118
146
|
// https://nuxt.com/docs/getting-started/configuration#nuxt-configuration
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-ignis",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.0-rc.2",
|
|
4
|
+
"description": "A ready-to-use setup for your next application in Nuxt",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nuxt",
|
|
7
7
|
"nuxtjs",
|
|
8
8
|
"nuxt3",
|
|
9
|
-
"starter"
|
|
9
|
+
"starter",
|
|
10
|
+
"layer",
|
|
11
|
+
"nuxt-layer"
|
|
10
12
|
],
|
|
11
13
|
"author": "Alois Seckar <alois.seckar@gmail.com>",
|
|
12
14
|
"homepage": "https://github.com/AloisSeckar/nuxt-ignis",
|
|
@@ -22,44 +24,50 @@
|
|
|
22
24
|
"type": "module",
|
|
23
25
|
"main": "./nuxt.config.ts",
|
|
24
26
|
"engines": {
|
|
25
|
-
"node": "
|
|
27
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
28
|
+
},
|
|
29
|
+
"bin": {
|
|
30
|
+
"make-eslint": "./bin/make-eslint.js"
|
|
26
31
|
},
|
|
27
32
|
"dependencies": {
|
|
28
33
|
"@formkit/nuxt": "1.6.9",
|
|
29
|
-
"@maas/vue-equipment": "1.0.0-beta.
|
|
30
|
-
"@nuxt/content": "3.6.
|
|
31
|
-
"@nuxt/eslint": "1.
|
|
34
|
+
"@maas/vue-equipment": "1.0.0-beta.32",
|
|
35
|
+
"@nuxt/content": "3.6.3",
|
|
36
|
+
"@nuxt/eslint": "1.6.0",
|
|
32
37
|
"@nuxt/fonts": "0.11.4",
|
|
33
38
|
"@nuxt/image": "1.10.0",
|
|
34
|
-
"@nuxt/scripts": "0.11.
|
|
35
|
-
"@nuxt/ui": "3.
|
|
36
|
-
"@nuxtjs/i18n": "9.5.
|
|
37
|
-
"@nuxtjs/seo": "3.0
|
|
38
|
-
"@nuxtjs/supabase": "1.5.
|
|
39
|
+
"@nuxt/scripts": "0.11.10",
|
|
40
|
+
"@nuxt/ui": "3.2.0",
|
|
41
|
+
"@nuxtjs/i18n": "9.5.6",
|
|
42
|
+
"@nuxtjs/seo": "3.1.0",
|
|
43
|
+
"@nuxtjs/supabase": "1.5.3",
|
|
39
44
|
"@nuxtjs/tailwindcss": "6.14.0",
|
|
40
|
-
"@pinia/nuxt": "0.11.
|
|
41
|
-
"@tailwindcss/vite": "4.1.
|
|
42
|
-
"@vueform/nuxt": "1.
|
|
43
|
-
"@vueuse/core": "13.
|
|
44
|
-
"@vueuse/nuxt": "13.
|
|
45
|
+
"@pinia/nuxt": "0.11.2",
|
|
46
|
+
"@tailwindcss/vite": "4.1.11",
|
|
47
|
+
"@vueform/nuxt": "1.17.0",
|
|
48
|
+
"@vueuse/core": "13.5.0",
|
|
49
|
+
"@vueuse/nuxt": "13.5.0",
|
|
50
|
+
"better-sqlite3": "12.2.0",
|
|
45
51
|
"consola": "3.4.2",
|
|
46
52
|
"date-fns": "4.1.0",
|
|
47
53
|
"defu": "6.1.4",
|
|
48
54
|
"elrh-pslo": "1.1.6",
|
|
55
|
+
"magic-regexp": "0.10.0",
|
|
49
56
|
"nuxt-auth-utils": "0.5.20",
|
|
57
|
+
"nuxt-charts": "0.1.11",
|
|
50
58
|
"nuxt-neon": "0.6.2",
|
|
51
59
|
"nuxt-security": "2.2.0",
|
|
52
60
|
"nuxt-spec": "0.0.4",
|
|
53
|
-
"open-props": "1.7.
|
|
61
|
+
"open-props": "1.7.16",
|
|
54
62
|
"pinia": "3.0.3",
|
|
55
63
|
"postcss-jit-props": "1.0.16",
|
|
56
64
|
"typescript": "5.8.3",
|
|
57
65
|
"valibot": "1.1.0",
|
|
58
|
-
"zod": "
|
|
66
|
+
"zod": "4.0.5"
|
|
59
67
|
},
|
|
60
68
|
"devDependencies": {
|
|
61
|
-
"nuxt": "3.17.
|
|
62
|
-
"vue": "3.5.
|
|
69
|
+
"nuxt": "3.17.7",
|
|
70
|
+
"vue": "3.5.17",
|
|
63
71
|
"vue-router": "4.5.1"
|
|
64
72
|
},
|
|
65
73
|
"scripts": {
|