@dargmuesli/nuxt-vio 21.0.0-beta.9 → 21.0.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.
package/app/app.config.ts CHANGED
@@ -8,6 +8,11 @@ export default defineAppConfig({
8
8
  declare module 'nuxt/schema' {
9
9
  interface AppConfig {
10
10
  vio: {
11
+ seo?: {
12
+ ogImage?: {
13
+ defaultComponent: string // TODO: keyof OgImageComponents
14
+ }
15
+ }
11
16
  pages?: {
12
17
  legalNotice?: {
13
18
  contact: {
@@ -81,7 +81,7 @@ const titleComputedLineClamp = lineClampStyle(titleComputed, 2)
81
81
  </defs>
82
82
  </svg>
83
83
 
84
- <div class="max-w-175 pl-6 lg:pl-25">
84
+ <div class="flex max-w-175 flex-col pl-6 lg:pl-25">
85
85
  <p
86
86
  v-if="headline"
87
87
  class="mb-4 text-[24px] font-bold text-[#00DC82] uppercase"
@@ -7,7 +7,7 @@ import {
7
7
  OctagonXIcon,
8
8
  TriangleAlertIcon,
9
9
  XIcon,
10
- } from 'lucide-vue-next'
10
+ } from '@lucide/vue'
11
11
  import { Toaster as Sonner } from 'vue-sonner'
12
12
 
13
13
  import { cn } from '../../../utils/shadcn'
@@ -1,24 +1,19 @@
1
+ import type { OgImageComponents } from '#og-image/components'
2
+
1
3
  export const useAppLayout = () => {
2
4
  const appConfig = useAppConfig()
3
5
  const colorMode = useColorMode()
4
6
  const siteConfig = useSiteConfig()
5
7
 
6
8
  if (import.meta.server) {
7
- // style
8
9
  useHeadSafe({
10
+ // style
9
11
  bodyAttrs: {
10
12
  class:
11
13
  'bg-background-bright dark:bg-background-dark text-text-dark dark:text-text-bright',
12
14
  },
13
- })
14
-
15
- // favicon (https://vite-pwa-org.netlify.app/assets-generator/)
16
- useHeadSafe({
15
+ // favicon (https://vite-pwa-org.netlify.app/assets-generator/)
17
16
  link: [
18
- {
19
- href: `/site.webmanifest?v=${CACHE_VERSION}`,
20
- rel: 'manifest',
21
- },
22
17
  {
23
18
  href: `/favicon.ico?v=${CACHE_VERSION}`,
24
19
  rel: 'icon',
@@ -39,6 +34,16 @@ export const useAppLayout = () => {
39
34
 
40
35
  // i18n
41
36
  useHeadSafe(useLocaleHead().value)
37
+
38
+ // pwa
39
+ useHead({
40
+ link: [
41
+ {
42
+ href: `/site.webmanifest?v=${CACHE_VERSION}`,
43
+ rel: 'manifest',
44
+ },
45
+ ],
46
+ })
42
47
  }
43
48
 
44
49
  if (import.meta.client) {
@@ -62,9 +67,13 @@ export const useAppLayout = () => {
62
67
  })
63
68
  }
64
69
 
65
- export const useHeadDefault = (input: Parameters<typeof useSeoMeta>[0]) => {
70
+ export const useHeadDefault = (
71
+ input: Parameters<typeof useSeoMeta>[0],
72
+ ogImageProps?: Parameters<typeof defineOgImage>[1],
73
+ ) => {
66
74
  const { t } = useI18n({ useScope: 'global' })
67
75
  const siteConfig = useSiteConfig()
76
+ const appConfig = useAppConfig()
68
77
 
69
78
  const description =
70
79
  toValue(input.description) || (siteConfig.description as string)
@@ -85,10 +94,12 @@ export const useHeadDefault = (input: Parameters<typeof useSeoMeta>[0]) => {
85
94
  ...input,
86
95
  })
87
96
  defineOgImage(
88
- 'Nuxt.satori',
97
+ (appConfig.vio.seo?.ogImage?.defaultComponent as keyof OgImageComponents) ||
98
+ 'Nuxt.takumi',
89
99
  {
90
100
  description,
91
- title: toValue(input.title)?.toString() || undefined,
101
+ title: title.split(' · ')[0],
102
+ ...ogImageProps,
92
103
  },
93
104
  {
94
105
  alt: t('globalSeoOgImageAlt'),
@@ -7,10 +7,11 @@ const certSuffix = process.env.CI ? '-ci' : '-dev'
7
7
  const certPath = path.join(root, `.config/certificates/ssl${certSuffix}.crt`)
8
8
  const keyPath = path.join(root, `.config/certificates/ssl${certSuffix}.key`)
9
9
 
10
- console.log('Using SSL certificate:', certPath)
11
-
12
- process.env.NITRO_SSL_CERT = fs.readFileSync(certPath, 'utf8')
13
- process.env.NITRO_SSL_KEY = fs.readFileSync(keyPath, 'utf8')
10
+ if (fs.existsSync(certPath) && fs.existsSync(keyPath)) {
11
+ console.log('Using SSL certificate:', certPath)
12
+ process.env.NITRO_SSL_CERT = fs.readFileSync(certPath, 'utf8')
13
+ process.env.NITRO_SSL_KEY = fs.readFileSync(keyPath, 'utf8')
14
+ }
14
15
 
15
16
  // await import(path.join(root, '.output/server/sentry.server.config.mjs'))
16
17
  await import(path.join(root, 'playground/.output/server/index.mjs'))
@@ -1,4 +1,5 @@
1
1
  import { spawn } from 'node:child_process'
2
+ import fs from 'node:fs'
2
3
  import path from 'node:path'
3
4
 
4
5
  const root = process.argv[2] || process.cwd()
@@ -9,7 +10,12 @@ const keyPath = path.join(root, `.config/certificates/ssl${certSuffix}.key`)
9
10
 
10
11
  const serveProcess = spawn(
11
12
  'serve',
12
- ['playground/.output/public', '--ssl-cert', certPath, '--ssl-key', keyPath],
13
+ [
14
+ 'playground/.output/public',
15
+ ...(fs.existsSync(certPath) && fs.existsSync(keyPath)
16
+ ? ['--ssl-cert', certPath, '--ssl-key', keyPath]
17
+ : []),
18
+ ],
13
19
  {
14
20
  stdio: 'inherit',
15
21
  cwd: root,
package/nuxt.config.ts CHANGED
@@ -250,9 +250,6 @@ export default defineNuxtConfig(
250
250
  linkChecker: {
251
251
  failOnError: true,
252
252
  },
253
- ogImage: {
254
- tailwindCss: resolve('./app/assets/css/vio.css'),
255
- },
256
253
  robots: {
257
254
  credits: false,
258
255
  },
@@ -291,6 +288,9 @@ export default defineNuxtConfig(
291
288
  },
292
289
  strict: true,
293
290
  },
291
+ seo: {
292
+ minify: false, // TODO: enable (https://github.com/harlan-zw/nuxt-seo-utils/issues/103)
293
+ },
294
294
  shadcn: {
295
295
  prefix: '',
296
296
  componentDir: resolve('./app/components/scn'),
package/package.json CHANGED
@@ -1,23 +1,24 @@
1
1
  {
2
2
  "dependencies": {
3
- "@dargmuesli/nuxt-cookie-control": "9.1.17",
4
- "@eslint/compat": "2.0.2",
3
+ "@dargmuesli/nuxt-cookie-control": "9.1.19",
4
+ "@eslint/compat": "2.0.3",
5
5
  "@heroicons/vue": "2.2.0",
6
6
  "@http-util/status-i18n": "0.9.0",
7
- "@intlify/eslint-plugin-vue-i18n": "4.2.0",
8
- "@nuxt/devtools": "3.2.2",
7
+ "@intlify/eslint-plugin-vue-i18n": "4.3.0",
8
+ "@lucide/vue": "1.7.0",
9
+ "@nuxt/devtools": "3.2.4",
9
10
  "@nuxt/eslint": "1.15.2",
10
11
  "@nuxt/image": "2.0.0",
11
12
  "@nuxtjs/color-mode": "4.0.0",
12
13
  "@nuxtjs/html-validator": "2.1.0",
13
- "@nuxtjs/i18n": "10.2.3",
14
- "@nuxtjs/seo": "3.4.0",
15
- "@nuxtjs/turnstile": "1.1.1",
14
+ "@nuxtjs/i18n": "10.2.4",
15
+ "@nuxtjs/seo": "5.1.0",
16
+ "@nuxtjs/turnstile": "1.1.2",
16
17
  "@pinia/nuxt": "0.11.3",
17
- "@resvg/resvg-js": "2.6.2",
18
18
  "@tailwindcss/forms": "0.5.11",
19
19
  "@tailwindcss/typography": "0.5.19",
20
- "@tailwindcss/vite": "4.2.1",
20
+ "@tailwindcss/vite": "4.2.2",
21
+ "@takumi-rs/core": "0.73.1",
21
22
  "@types/lodash-es": "4.17.12",
22
23
  "@types/nodemailer": "7.0.11",
23
24
  "@urql/core": "6.0.1",
@@ -27,48 +28,46 @@
27
28
  "@vueuse/core": "14.2.1",
28
29
  "class-variance-authority": "0.7.1",
29
30
  "clsx": "2.1.1",
30
- "eslint": "10.0.2",
31
+ "eslint": "10.1.0",
31
32
  "eslint-config-prettier": "10.1.8",
32
- "eslint-plugin-compat": "7.0.0",
33
+ "eslint-plugin-compat": "7.0.1",
33
34
  "eslint-plugin-prettier": "5.5.5",
34
- "eslint-plugin-yml": "3.3.0",
35
- "globals": "17.3.0",
35
+ "eslint-plugin-yml": "3.3.1",
36
+ "globals": "17.4.0",
36
37
  "jiti": "2.6.1",
37
- "jose": "6.1.3",
38
- "lucide-vue-next": "0.575.0",
39
- "nodemailer": "8.0.1",
38
+ "jose": "6.2.2",
39
+ "nodemailer": "8.0.4",
40
40
  "nuxt-gtag": "4.1.0",
41
41
  "nuxt-security": "2.5.1",
42
- "reka-ui": "2.8.2",
43
- "satori": "0.19.1",
42
+ "reka-ui": "2.9.2",
44
43
  "shadcn-nuxt": "2.4.3",
45
44
  "tailwind-merge": "3.5.0",
46
45
  "tw-animate-css": "1.4.0",
47
46
  "vue-sonner": "2.0.9",
48
- "vue-tsc": "3.2.5"
47
+ "vue-tsc": "3.2.6"
49
48
  },
50
49
  "devDependencies": {
51
- "@types/node": "24.10.14",
50
+ "@types/node": "24.12.0",
52
51
  "@urql/devtools": "2.0.3",
53
52
  "@urql/exchange-graphcache": "9.0.0",
54
53
  "@vueuse/core": "14.2.1",
55
54
  "consola": "3.4.2",
56
55
  "defu": "6.1.4",
57
- "h3": "1.15.5",
56
+ "h3": "1.15.10",
58
57
  "lodash-es": "4.17.23",
59
- "nuxt": "4.3.1",
58
+ "nuxt": "4.4.2",
60
59
  "pinia": "3.0.4",
61
60
  "prettier": "3.8.1",
62
61
  "prettier-plugin-tailwindcss": "0.7.2",
63
- "serve": "14.2.5",
62
+ "serve": "14.2.6",
64
63
  "sharp": "0.34.5",
65
- "stylelint": "17.4.0",
64
+ "stylelint": "17.6.0",
66
65
  "stylelint-config-recommended-vue": "1.6.1",
67
66
  "stylelint-config-standard": "40.0.0",
68
67
  "stylelint-no-unsupported-browser-features": "8.1.1",
69
- "tailwindcss": "4.2.1",
70
- "vue": "3.5.29",
71
- "vue-router": "5.0.3"
68
+ "tailwindcss": "4.2.2",
69
+ "vue": "3.5.31",
70
+ "vue-router": "5.0.4"
72
71
  },
73
72
  "engines": {
74
73
  "node": "24"
@@ -119,5 +118,5 @@
119
118
  "start:static": "node node/server/static.mjs"
120
119
  },
121
120
  "type": "module",
122
- "version": "21.0.0-beta.9"
121
+ "version": "21.0.1"
123
122
  }