nuxt-ignis 0.3.3 → 0.4.0-rc.1

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 (141) hide show
  1. package/.data/content/contents.sqlite +0 -0
  2. package/.env +8 -2
  3. package/.nuxt/app.config.mjs +2 -2
  4. package/.nuxt/cache/fonts/EP1810cmAtyahQPDHB6nvBzRkIG5RcNv4u5vTy1aYHU-Ih_Po7WkbhDymI0Y_ntmpz__bZJprHiu7_c5N_X6AAA.woff2 +0 -0
  5. package/.nuxt/cache/fonts/JNWOTRocaYj0gq52vW_s7sHAdSMUetrRmhhggCVxyZ0-TnR4PP30hI5UWldZ0knUBrHkvIoiDWYXwn2v1NtCh80.woff2 +0 -0
  6. package/.nuxt/cache/fonts/XbAtjIvy1UErjg9eu_v7X3zPLS_AwsmqVsR9fG-JB6o-H99o9_8BZXq7ey5UyS99Wn9zX0V0anvpXEqAqavcJlQ.woff2 +0 -0
  7. package/.nuxt/cache/fonts/ZLm6CLvwhQbamZ73M80jbqz7DuOkHlT_HRyXHG7YfVs-eYLoSJPWhqR5CE0c8XPABls8kE_7Fc7F2x7Gtfsg_8M.woff2 +0 -0
  8. package/.nuxt/cache/fonts/aPa9az0DeE4U5rqM-Ov0Vl_obQis_d6sScLNygGkvxw-s32Y9TxBLZRr_ebRHQ3l3q1g2j_0tPT879PPSBGrj8A.woff2 +0 -0
  9. package/.nuxt/cache/fonts/kgyHMsxRmhh06xcV0yKMKdTKQBsQpXGi7erqwaqgjXg-55rzD39AWoqYSkQOLHuoKZUDVcDSlXRKdaymIN2dXes.woff +0 -0
  10. package/.nuxt/components.d.ts +606 -394
  11. package/.nuxt/content/components.ts +107 -98
  12. package/.nuxt/content/database.compressed.mjs +1 -1
  13. package/.nuxt/content/manifest.ts +6 -6
  14. package/.nuxt/content/sql_dump.txt +5 -0
  15. package/.nuxt/content/types.d.ts +8 -0
  16. package/.nuxt/dev/index.mjs +1584 -544
  17. package/.nuxt/dev/index.mjs.map +1 -1
  18. package/.nuxt/dist/server/client.manifest.json +2 -2
  19. package/.nuxt/dist/server/client.manifest.mjs +2 -2
  20. package/.nuxt/eslint-typegen.d.ts +256 -225
  21. package/.nuxt/eslint.config.d.mts +3 -3
  22. package/.nuxt/eslint.config.mjs +11 -11
  23. package/.nuxt/imports.d.ts +70 -54
  24. package/.nuxt/manifest/latest.json +1 -1
  25. package/.nuxt/manifest/meta/dev.json +1 -1
  26. package/.nuxt/mdc-image-component.mjs +1 -1
  27. package/.nuxt/module/@nuxtjs-sitemap.d.ts +9 -8
  28. package/.nuxt/module/nuxt-robots.d.ts +37 -7
  29. package/.nuxt/{modules/@nuxt-scripts.d.ts → module/nuxt-scripts.d.ts} +1 -2
  30. package/.nuxt/module/nuxt-seo-utils.assets.d.ts +3 -3
  31. package/.nuxt/module/nuxt-seo-utils.d.ts +20 -6
  32. package/.nuxt/module/nuxt-site-config.d.ts +8 -8
  33. package/.nuxt/nitro.json +5 -5
  34. package/.nuxt/nuxt.d.ts +13 -10
  35. package/.nuxt/nuxt.json +2 -2
  36. package/.nuxt/tsconfig.json +235 -153
  37. package/.nuxt/tsconfig.server.json +126 -92
  38. package/.nuxt/types/app.config.d.ts +2 -2
  39. package/.nuxt/types/build.d.ts +2 -1
  40. package/.nuxt/types/i18n-plugin.d.ts +2 -2
  41. package/.nuxt/types/imports.d.ts +407 -314
  42. package/.nuxt/types/nitro-config.d.ts +2 -2
  43. package/.nuxt/types/nitro-imports.d.ts +143 -134
  44. package/.nuxt/types/nitro-nuxt.d.ts +2 -0
  45. package/.nuxt/types/nitro-routes.d.ts +17 -17
  46. package/.nuxt/types/plugins.d.ts +34 -34
  47. package/.nuxt/types/schema.d.ts +322 -12
  48. package/.nuxt/ui/avatar.ts +1 -1
  49. package/.nuxt/ui/card.ts +1 -1
  50. package/.nuxt/ui/carousel.ts +1 -1
  51. package/.nuxt/ui/command-palette.ts +1 -0
  52. package/.nuxt/ui/drawer.ts +1 -1
  53. package/.nuxt/ui/index.ts +2 -0
  54. package/.nuxt/ui/input-menu.ts +24 -10
  55. package/.nuxt/ui/input-tags.ts +310 -0
  56. package/.nuxt/ui/modal.ts +1 -1
  57. package/.nuxt/ui/navigation-menu.ts +1 -1
  58. package/.nuxt/ui/select-menu.ts +11 -6
  59. package/.nuxt/ui/select.ts +11 -6
  60. package/.nuxt/ui/table.ts +3 -2
  61. package/.nuxt/ui/timeline.ts +321 -0
  62. package/.nuxt/ui/toaster.ts +1 -1
  63. package/.nuxt/ui-image-component.ts +1 -1
  64. package/app.vue +2 -6
  65. package/assets/css/ignis-nuxt-ui.css +24 -0
  66. package/assets/css/{open-props.css → ignis-open-props.css} +1 -1
  67. package/assets/css/ignis-tailwind.css +23 -0
  68. package/assets/css/ignis.css +31 -0
  69. package/bin/make-eslint.js +55 -0
  70. package/components/CurrentTime.vue +1 -1
  71. package/components/ignis/IgnisConfig.vue +38 -0
  72. package/components/{AppFeature.vue → ignis/IgnisFeature.vue} +2 -1
  73. package/components/ignis/IgnisFeatureList.vue +125 -0
  74. package/components/ignis/IgnisFooter.vue +2 -2
  75. package/components/ignis/IgnisHeader.vue +4 -3
  76. package/components/ignis/IgnisInfo.vue +14 -13
  77. package/components/ignis/IgnisWelcome.vue +65 -0
  78. package/composables/useTranslation.ts +18 -9
  79. package/features.ts +52 -10
  80. package/formkit.config.ts +8 -8
  81. package/i18n/locales/en.json +10 -4
  82. package/nuxt.config.ts +30 -2
  83. package/package.json +29 -21
  84. package/pages/_ignis-config.vue +3 -0
  85. package/pages/_ignis-info.vue +3 -0
  86. package/pages/index.vue +4 -6
  87. package/public/_ignis-config.json +97 -0
  88. package/test/config/css-multiple.txt +30 -0
  89. package/test/config/css-nuxt-ui.txt +34 -0
  90. package/test/config/css-open-props.txt +2307 -0
  91. package/test/config/css-single.txt +28 -0
  92. package/test/config/css-tailwind.txt +58 -0
  93. package/test/config/custom-lang.txt +27 -0
  94. package/test/config/db-neon.txt +28 -0
  95. package/test/config/db-supabase.txt +31 -0
  96. package/test/config/default.txt +26 -15
  97. package/test/config/equipment-1-composable.txt +32 -21
  98. package/test/config/equipment-2-plugins.txt +33 -22
  99. package/test/config/equipment-all.txt +38 -27
  100. package/test/config/forms-formkit.txt +32 -0
  101. package/test/config/forms-vueform.txt +28 -0
  102. package/test/config/i18n.txt +38 -0
  103. package/test/config/no-default-css.txt +24 -0
  104. package/test/config/open-props.txt +2306 -0
  105. package/test/config/seo-ssr-false.txt +35 -0
  106. package/test/config/ui-nuxt-ui.txt +33 -0
  107. package/test/config/ui-tailwind.txt +57 -0
  108. package/test/config.test.ts +115 -0
  109. package/test/features/charts.txt +4 -0
  110. package/test/features/custom-css.txt +4 -0
  111. package/test/features/custom-title.txt +4 -0
  112. package/test/features/db-neon.txt +4 -3
  113. package/test/features/db-off.txt +4 -3
  114. package/test/features/db-supabase.txt +4 -3
  115. package/test/features/default.txt +4 -3
  116. package/test/features/disable-core.txt +2 -1
  117. package/test/features/enable-all.txt +5 -4
  118. package/test/features/equipment.txt +4 -3
  119. package/test/features/forms-formkit.txt +4 -3
  120. package/test/features/forms-off.txt +4 -3
  121. package/test/features/forms-vueform.txt +4 -3
  122. package/test/features/no-default-css.txt +4 -0
  123. package/test/features/regexp.txt +4 -0
  124. package/test/features/ui-nuxt-ui.txt +4 -3
  125. package/test/features/ui-off.txt +4 -3
  126. package/test/features/ui-tailwind.txt +5 -4
  127. package/test/features/validation-off.txt +4 -3
  128. package/test/features/validation-valibot.txt +5 -4
  129. package/test/features/validation-zod.txt +5 -4
  130. package/test/features.test.ts +37 -1
  131. package/utils/config/formkit.ts +23 -0
  132. package/utils/formkit.ts +16 -0
  133. package/.nuxt/content/sql_dump +0 -6
  134. package/app.config.ts +0 -3
  135. package/assets/css/nuxt-ui.css +0 -16
  136. package/assets/css/tailwind.css +0 -15
  137. package/components/AppFeatureList.vue +0 -124
  138. package/content/second.md +0 -11
  139. package/pages/ignis.vue +0 -3
  140. package/pages/second.vue +0 -59
  141. package/tailwind.config.ts +0 -29
@@ -0,0 +1,125 @@
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;">
14
+ <h1>Features Overview</h1>
15
+ <div class="feature-list">
16
+ <IgnisFeature :text="useIgnisT('features.nuxt')" />
17
+ <IgnisFeature :text="useIgnisT('features.consola')" />
18
+ <IgnisFeature :active="eslint" :text="useIgnisT('features.eslint')" />
19
+ <IgnisFeature :active="security" :text="useIgnisT('features.security')" />
20
+ <IgnisFeature :active="image" :text="useIgnisT('features.image')" />
21
+ <IgnisFeature :active="scripts" :text="useIgnisT('features.scripts')" />
22
+ <IgnisFeature :active="fonts" :text="useIgnisT('features.fonts')" class="fonts" />
23
+ <IgnisFeature :active="pinia" :text="useIgnisT('features.pinia')" />
24
+ <IgnisFeature :active="vueuse" :text="useIgnisT('features.vueuse')" />
25
+ <IgnisFeature :active="true" :text="useIgnisT('features.time')" />
26
+ <IgnisFeature :active="nuxtui" :text="useIgnisT('features.ui')" />
27
+ <IgnisFeature :active="tailwind" :text="useIgnisT('features.tailwind')" />
28
+ <IgnisFeature :active="nuxtui" :text="useIgnisT('features.icon')" />
29
+ <IgnisFeature :active="neon" :text="useIgnisT('features.neon')" />
30
+ <IgnisFeature :active="supabase" :text="useIgnisT('features.supabase')" />
31
+ <IgnisFeature :active="i18n" :text="useIgnisT('features.i18n')" />
32
+ <IgnisFeature :active="vueform" :text="useIgnisT('features.vueform')" />
33
+ <IgnisFeature :active="formkit" :text="useIgnisT('features.formkit')" />
34
+ <IgnisFeature :active="valibot" :text="useIgnisT('features.valibot')" />
35
+ <IgnisFeature :active="zod" :text="useIgnisT('features.zod')" />
36
+ <IgnisFeature :active="content" :text="useIgnisT('features.content')" />
37
+ <IgnisFeature :active="seo" :text="useIgnisT('features.seo')" />
38
+ <IgnisFeature :active="auth" :text="useIgnisT('features.auth')" />
39
+ <IgnisFeature :active="equipment" :text="useIgnisT('features.equipment')" />
40
+ <IgnisFeature :active="regexp" :text="useIgnisT('features.regexp')" />
41
+ <IgnisFeature :active="charts" :text="useIgnisT('features.charts')" />
42
+ <IgnisFeature :active="openprops" class="openprops-feature" :text="useIgnisT('features.openprops')" />
43
+ </div>
44
+ </div>
45
+ </template>
46
+
47
+ <script setup lang="ts">
48
+ import { useIgnisT } from '#imports' // requires explicit import for some reason
49
+
50
+ const setup = useRuntimeConfig().public.ignis
51
+ const eslint = setup.core.eslint
52
+ const fonts = setup.core.fonts
53
+ const image = setup.core.image
54
+ const pinia = setup.core.pinia
55
+ const scripts = setup.core.scripts
56
+ const security = setup.core.security
57
+ const vueuse = setup.core.vueuse
58
+ const ui = setup.preset.ui
59
+ const nuxtui = ui === 'nuxt-ui' || setup.ui
60
+ const tailwind = ui !== 'off' || setup.ui || setup.tailwind
61
+ const db = setup.preset.db
62
+ const neon = db === 'neon' || (db === 'off' && setup.neon)
63
+ const supabase = db === 'supabase' || (db === 'off' && setup.supabase)
64
+ const i18n = setup.i18n.enabled
65
+ const forms = setup.preset.forms
66
+ const vueform = forms === 'vueform' || (forms === 'off' && setup.vueform)
67
+ const formkit = forms === 'formkit' || (forms === 'off' && setup.formkit.enabled)
68
+ const validation = setup.preset.validation
69
+ const valibot = validation === 'valibot' || (validation === 'off' && setup.valibot)
70
+ const zod = validation === 'zod' || (validation === 'off' && setup.zod)
71
+ const content = setup.content
72
+ const seo = setup.seo
73
+ const auth = setup.auth
74
+ const openprops = setup.openprops
75
+ const equipment = setup.equipment.enabled
76
+ const regexp = setup.regexp
77
+ const charts = setup.charts
78
+ </script>
79
+
80
+ <style scoped>
81
+ /* demo for @nuxt/fonts */
82
+ .fonts {
83
+ font-family: "Kurale";
84
+ }
85
+
86
+ /* avoid Tailwind CSS styles here, because Tailwind may not be enabled */
87
+
88
+ h1 {
89
+ font-size: 1.75rem;
90
+ margin-top: 2rem;
91
+ margin-bottom: 0.5rem;
92
+ color: #fbbf24;
93
+ }
94
+
95
+ /* margin-auto my-4 flex flex-col */
96
+ .feature-list {
97
+ margin: 0px auto;
98
+ margin-bottom: 8px;
99
+ display: flex;
100
+ flex-direction: column;
101
+ }
102
+
103
+ @media (max-width: 1200px) {
104
+ .feature-list {
105
+ width: 60%;
106
+ }
107
+ }
108
+
109
+ @media (max-width: 800px) {
110
+ .feature-list {
111
+ width: 80%;
112
+ }
113
+ }
114
+
115
+ @media (max-width: 600px) {
116
+ .feature-list {
117
+ width: 100%;
118
+ }
119
+ }
120
+
121
+ /* mb-2 */
122
+ .pages {
123
+ margin-bottom: 2em;
124
+ }
125
+ </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-top: 4px;
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
- <h1 class="ignis-title">
5
+ <div class="ignis-title">
6
6
  {{ useIgnisT("title") }}
7
- </h1>
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-bottom: 10px;
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
- <div v-if="pages" class="link">
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
- const pages = useRuntimeConfig().public.ignis.pages
19
- </script>
13
+ export type IgnisComponentType = 'Welcome' | 'Features' | 'Config'
14
+
15
+ const props = defineProps<{
16
+ content: IgnisComponentType
17
+ }>()
20
18
 
21
- <style scoped lang="css">
22
- .link {
23
- text-align: center;
24
- margin-bottom: 4px;
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
- </style>
27
+ </script>
@@ -0,0 +1,65 @@
1
+ <template>
2
+ <div style="display: flex; flex-direction: column; align-items: center; gap: 0.75rem; padding: 2rem;">
3
+ <h1>Welcome to Ignis</h1>
4
+ <p>Thank you for choosing Nuxt Ignis! Your awesome website is just a few steps away.</p>
5
+ <p v-if="pages">
6
+ 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.
7
+ </p>
8
+ <p v-else>
9
+ Replace <span class="file">/app.vue</span> with your own content to get started.
10
+ </p>
11
+ <h2>Resources</h2>
12
+ <div style="display: flex; gap: 0.5rem; flex-wrap: wrap;">
13
+ <NuxtLink to="/_ignis-info" class="feature">Features Overview</NuxtLink>
14
+ <NuxtLink to="/_ignis-config" class="feature">Configuration Overview</NuxtLink>
15
+ <NuxtLink to="https://nuxt-ignis.netlify.app/" class="feature">Documentation &#x1F517;</NuxtLink>
16
+ </div>
17
+ <a href="https://github.com/AloisSeckar/nuxt-ignis" title="Nuxt Ignis on GitHub">
18
+ <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>
19
+ </a>
20
+ </div>
21
+ </template>
22
+
23
+ <script setup lang="ts">
24
+ const pages = useRuntimeConfig().public.ignis.pages
25
+ </script>
26
+
27
+ <style scoped lang="css">
28
+ h1 {
29
+ font-size: 1.75rem;
30
+ margin-bottom: 0.5rem;
31
+ color: #fbbf24;
32
+ }
33
+ h2 {
34
+ font-size: 1.5rem;
35
+ color: #fbbf24;
36
+ }
37
+ p {
38
+ width: 100%;
39
+ }
40
+
41
+ .file {
42
+ display: inline;
43
+ color: #fbbf24;
44
+ font-family: monospace;
45
+ }
46
+
47
+ /* TODO unify with IgnisFeature.vue */
48
+ .feature {
49
+ margin: 4px;
50
+ padding: 4px 12px;
51
+ border: 2px solid #fcd34d;
52
+ font-size: 1em !important;
53
+ font-weight: bold;
54
+ background-color: #047857;
55
+ color: #f1f5f9;
56
+ font-size: 1.125rem;
57
+ line-height: 1.75rem;
58
+ border-radius: 0.5rem;
59
+ }
60
+ .feature:hover {
61
+ background-color: #334155;
62
+ color: #3CB371;
63
+ text-decoration: none;
64
+ }
65
+ </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 as string
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): unknown {
40
+ export function useIgnisT(key: string): string {
41
41
  const keys = key.split('.')
42
42
 
43
- let current = lang
44
- for (const key of keys) {
45
- if (current && key in current) {
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
- current = current[key]
47
+ currentLang = currentLang[currentKey]
48
48
  } else {
49
- return undefined
49
+ log.debug(`useIgnisT: string value not found for "${key}"`)
50
+ return '???'
50
51
  }
51
52
  }
52
53
 
53
- return current
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
@@ -74,7 +74,7 @@ export function setFeatures() {
74
74
  nuxtConfig.modules.push('@nuxt/ui')
75
75
  // import tailwind css file
76
76
  nuxtConfig = defu({
77
- css: [join(currentDir, './assets/css/nuxt-ui.css')],
77
+ css: [join(currentDir, './assets/css/ignis-nuxt-ui.css')],
78
78
  }, nuxtConfig)
79
79
  } else {
80
80
  // remove @nuxt/ui-specific components from resolution if module is not used
@@ -93,7 +93,7 @@ export function setFeatures() {
93
93
  extras.push('Tailwind CSS')
94
94
  // import tailwind css file
95
95
  nuxtConfig = defu({
96
- css: [join(currentDir, './assets/css/tailwind.css')],
96
+ css: [join(currentDir, './assets/css/ignis-tailwind.css')],
97
97
  vite: {
98
98
  plugins: [tailwindcss()], // temporary integration using Vite plugin directly
99
99
  },
@@ -242,7 +242,7 @@ export function setFeatures() {
242
242
  extras.push('Open Props CSS')
243
243
  nuxtConfig = defu({
244
244
  // import Open Prpops stylesheet
245
- css: [join(currentDir, './assets/css/open-props.css')],
245
+ css: [join(currentDir, './assets/css/ignis-open-props.css')],
246
246
  // CSS processor for Open Props
247
247
  postcss: {
248
248
  plugins: {
@@ -257,6 +257,16 @@ export function setFeatures() {
257
257
  extras.push('elrh-pslo')
258
258
  }
259
259
 
260
+ // magic-regexp
261
+ if (process.env.NUXT_PUBLIC_IGNIS_REGEXP === 'true') {
262
+ nuxtConfig.modules.push('magic-regexp/nuxt')
263
+ }
264
+
265
+ // magic-regexp
266
+ if (process.env.NUXT_PUBLIC_IGNIS_CHARTS === 'true') {
267
+ nuxtConfig.modules.push('nuxt-charts')
268
+ }
269
+
260
270
  // 3. Nuxt-related settings
261
271
 
262
272
  nuxt.push(`log-level=${process.env.NUXT_PUBLIC_IGNIS_LOG_LEVEL || 'info[default]'}`)
@@ -275,7 +285,38 @@ export function setFeatures() {
275
285
  nuxt.push('pages=false')
276
286
  }
277
287
 
278
- // 4. warn if duplicate modules find
288
+ // default CSS file
289
+ if (process.env.NUXT_PUBLIC_IGNIS_CORE_CSS !== 'false') {
290
+ nuxtConfig = defu({
291
+ css: [join(currentDir, './assets/css/ignis.css')],
292
+ }, nuxtConfig)
293
+ nuxt.push('ignis CSS')
294
+ }
295
+
296
+ // custom CSS files
297
+ if (process.env.NUXT_PUBLIC_IGNIS_CSS) {
298
+ // values MUST be delimited by "," (spaces will be trimmed)
299
+ nuxtConfig = defu({
300
+ css: process.env.NUXT_PUBLIC_IGNIS_CSS.split(',').map(p => p?.trim()),
301
+ }, nuxtConfig)
302
+ nuxt.push('custom CSS')
303
+ }
304
+
305
+ // 4. HTML config
306
+ const htmlLang = process.env.NUXT_PUBLIC_IGNIS_HTML_LANG || 'en'
307
+ const appTitle = process.env.NUXT_PUBLIC_IGNIS_HTML_TITLE || 'Nuxt Ignis App'
308
+ nuxtConfig = defu({
309
+ app: {
310
+ head: {
311
+ htmlAttrs: {
312
+ lang: htmlLang,
313
+ },
314
+ title: appTitle,
315
+ },
316
+ },
317
+ }, nuxtConfig)
318
+
319
+ // 5. warn if duplicate modules find
279
320
  // this means e.g. 2 database modules or 2 form solutions
280
321
  if (process.env.NUXT_PUBLIC_IGNIS_WARN_DUPLICATES !== 'false') {
281
322
  const used = nuxtConfig.modules
@@ -291,16 +332,17 @@ export function setFeatures() {
291
332
  }
292
333
  }
293
334
 
294
- // 5. verify results
295
- // TODO why this run twice?
335
+ // 6. verify results
336
+ // TODO why this run twice? (SSR?)
296
337
 
297
- let overview = 'Nuxt Ignis will start using following settings:\n'
298
- overview += 'Modules: ' + nuxtConfig.modules.join(', ') + '\n'
338
+ let overview = `Nuxt Ignis will start using following settings:\n`
339
+ overview += `App title: ${appTitle}\n`
340
+ overview += `Modules: ${nuxtConfig.modules.join(', ')}\n`
299
341
  if (extras.length > 0) {
300
- overview += 'Extras: ' + extras.join(', ') + '\n'
342
+ overview += `Extras: ${extras.join(', ')}\n`
301
343
  }
302
344
  if (nuxt.length > 0) {
303
- overview += 'Nuxt: ' + nuxt.join(', ') + '\n'
345
+ overview += `Nuxt: ${nuxt.join(', ')}\n`
304
346
  }
305
347
  log.info(overview)
306
348
 
package/formkit.config.ts CHANGED
@@ -1,12 +1,12 @@
1
- // https://formkit.com/guides/optimizing-for-production#using-the-nuxt-module
2
- import { en, de, cs } from '@formkit/i18n'
3
- import type { DefaultConfigOptions } from '@formkit/vue'
1
+ // minimal config for Formkit
2
+ // currently required to be loaded like this...
4
3
 
5
- const ignisLocale = process.env.NUXT_PUBLIC_IGNIS_FORMKIT_DEFAULT || 'en'
4
+ import { loadFormkitConfig } from './utils/formkit'
6
5
 
7
- const config: DefaultConfigOptions = {
8
- locales: { en, de, cs }, // TODO allow multiple locales
9
- locale: ignisLocale,
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
@@ -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 second page of the application",
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 index",
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-06-07',
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.3.3",
4
- "description": "Enhanced and customizable Nuxt application starter pack",
3
+ "version": "0.4.0-rc.1",
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": ">=18.0.0"
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",
30
- "@nuxt/content": "3.6.1",
31
- "@nuxt/eslint": "1.4.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.8",
35
- "@nuxt/ui": "3.1.3",
36
- "@nuxtjs/i18n": "9.5.5",
37
- "@nuxtjs/seo": "3.0.3",
38
- "@nuxtjs/supabase": "1.5.2",
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.1",
41
- "@tailwindcss/vite": "4.1.10",
42
- "@vueform/nuxt": "1.16.0",
43
- "@vueuse/core": "13.4.0",
44
- "@vueuse/nuxt": "13.4.0",
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.15",
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": "3.25.67"
66
+ "zod": "4.0.5"
59
67
  },
60
68
  "devDependencies": {
61
- "nuxt": "3.17.5",
62
- "vue": "3.5.16",
69
+ "nuxt": "3.17.7",
70
+ "vue": "3.5.17",
63
71
  "vue-router": "4.5.1"
64
72
  },
65
73
  "scripts": {
@@ -0,0 +1,3 @@
1
+ <template>
2
+ <IgnisInfo :content="'Config'" />
3
+ </template>
@@ -0,0 +1,3 @@
1
+ <template>
2
+ <IgnisInfo :content="'Features'" />
3
+ </template>
package/pages/index.vue CHANGED
@@ -4,14 +4,12 @@
4
4
  An example of Nuxt page.
5
5
  Nuxt automaticaly provides routing and displays this page when user visits root URL or `/index`.
6
6
 
7
- AppFeatureList
7
+ IgnisInfo
8
8
  - an example usage of auto-imported Nuxt component declared in `/components` directory
9
- - this contains a list of available features configured in current Nuxt Ignis setup
10
-
11
- NuxtLink
12
- - special component for improved handling for HTML links (<a> tags)
9
+ - it is a wrapper around couple of possible components defined by "content" prop
10
+ - this one contains a list of available features configured in current Nuxt Ignis setup
13
11
  -->
14
12
 
15
13
  <template>
16
- <IgnisInfo />
14
+ <IgnisInfo :content="'Welcome'" />
17
15
  </template>