@dargmuesli/nuxt-vio 3.0.0-beta.19 → 3.0.0-beta.20
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/components/vio/_/VioLink.vue +5 -3
- package/nuxt.config.ts +151 -159
- package/package.json +1 -1
- package/utils/constants.ts +37 -36
- package/utils/routing.ts +4 -2
@@ -1,9 +1,9 @@
|
|
1
1
|
<template>
|
2
2
|
<a
|
3
|
-
v-if="to.match(/^((ftp|http(s)?):\/\/|(mailto):)/)"
|
3
|
+
v-if="to?.toString().match(/^((ftp|http(s)?):\/\/|(mailto):)/)"
|
4
4
|
:aria-label="ariaLabel"
|
5
5
|
:class="classes"
|
6
|
-
:href="to"
|
6
|
+
:href="to.toString()"
|
7
7
|
:rel="
|
8
8
|
[...(nofollow ? ['nofollow'] : []), 'noopener', 'noreferrer'].join(' ')
|
9
9
|
"
|
@@ -24,13 +24,15 @@
|
|
24
24
|
</template>
|
25
25
|
|
26
26
|
<script setup lang="ts">
|
27
|
+
import { NuxtLinkProps } from '#app'
|
28
|
+
|
27
29
|
export interface Props {
|
28
30
|
ariaLabel?: string
|
29
31
|
isColored?: boolean
|
30
32
|
isToRelative?: boolean
|
31
33
|
isUnderlined?: boolean
|
32
34
|
nofollow?: boolean
|
33
|
-
to:
|
35
|
+
to: NuxtLinkProps['to']
|
34
36
|
}
|
35
37
|
const props = withDefaults(defineProps<Props>(), {
|
36
38
|
ariaLabel: undefined,
|
package/nuxt.config.ts
CHANGED
@@ -1,180 +1,172 @@
|
|
1
1
|
import { dirname, join } from 'node:path'
|
2
2
|
import { fileURLToPath } from 'node:url'
|
3
3
|
|
4
|
+
import { defu } from 'defu'
|
5
|
+
|
4
6
|
import {
|
7
|
+
BASE_URL,
|
5
8
|
I18N_COOKIE_NAME,
|
6
|
-
I18N_MODULE_CONFIG,
|
7
|
-
TIMEZONE_COOKIE_NAME,
|
8
9
|
SITE_NAME,
|
10
|
+
TIMEZONE_COOKIE_NAME,
|
11
|
+
VIO_NUXT_BASE_CONFIG,
|
9
12
|
} from './utils/constants'
|
10
13
|
|
11
14
|
const currentDir = dirname(fileURLToPath(import.meta.url))
|
12
15
|
|
13
|
-
const BASE_URL =
|
14
|
-
(process.env.NUXT_PUBLIC_STACK_DOMAIN ? 'https' : 'http') +
|
15
|
-
'://' +
|
16
|
-
(process.env.NUXT_PUBLIC_STACK_DOMAIN ||
|
17
|
-
`${process.env.HOST || 'localhost'}:${
|
18
|
-
!process.env.NODE_ENV || process.env.NODE_ENV === 'development'
|
19
|
-
? '3000'
|
20
|
-
: '3001'
|
21
|
-
}`)
|
22
|
-
|
23
16
|
// https://v3.nuxtjs.org/api/configuration/nuxt.config
|
24
|
-
export default defineNuxtConfig(
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
17
|
+
export default defineNuxtConfig(
|
18
|
+
defu(
|
19
|
+
{
|
20
|
+
alias: {
|
21
|
+
clipboard: 'clipboard',
|
22
|
+
dayjs: 'dayjs',
|
23
|
+
sweetalert2: 'sweetalert2',
|
24
|
+
}, // TODO: remove (https://github.com/nuxt/nuxt/issues/19426)
|
25
|
+
app: {
|
26
|
+
head: {
|
27
|
+
htmlAttrs: {
|
28
|
+
lang: 'en', // fallback data to prevent invalid html at generation
|
29
|
+
},
|
30
|
+
titleTemplate: '%s', // fully set in `composables/useAppLayout.ts`
|
31
|
+
},
|
32
|
+
pageTransition: {
|
33
|
+
name: 'layout',
|
34
|
+
},
|
34
35
|
},
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
},
|
41
|
-
},
|
42
|
-
devtools: {
|
43
|
-
enabled: process.env.NODE_ENV !== 'production',
|
44
|
-
timeline: {
|
45
|
-
enabled: true,
|
46
|
-
},
|
47
|
-
},
|
48
|
-
modules: [
|
49
|
-
'@dargmuesli/nuxt-cookie-control',
|
50
|
-
'@nuxt/image',
|
51
|
-
'@nuxtjs/color-mode',
|
52
|
-
'@nuxtjs/html-validator',
|
53
|
-
'@nuxtjs/i18n',
|
54
|
-
'@nuxtjs/tailwindcss',
|
55
|
-
'@pinia/nuxt',
|
56
|
-
'nuxt-seo-kit-module',
|
57
|
-
],
|
58
|
-
nitro: {
|
59
|
-
compressPublicAssets: true,
|
60
|
-
},
|
61
|
-
runtimeConfig: {
|
62
|
-
public: {
|
63
|
-
i18n: {
|
64
|
-
baseUrl: BASE_URL,
|
36
|
+
devtools: {
|
37
|
+
enabled: process.env.NODE_ENV !== 'production',
|
38
|
+
timeline: {
|
39
|
+
enabled: true,
|
40
|
+
},
|
65
41
|
},
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
42
|
+
modules: [
|
43
|
+
'@dargmuesli/nuxt-cookie-control',
|
44
|
+
'@nuxt/image',
|
45
|
+
'@nuxtjs/color-mode',
|
46
|
+
'@nuxtjs/html-validator',
|
47
|
+
'@nuxtjs/i18n',
|
48
|
+
'@nuxtjs/tailwindcss',
|
49
|
+
'@pinia/nuxt',
|
50
|
+
'nuxt-seo-kit-module',
|
51
|
+
],
|
52
|
+
nitro: {
|
53
|
+
compressPublicAssets: true,
|
75
54
|
},
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
// esModuleInterop: true,
|
83
|
-
// },
|
84
|
-
// },
|
85
|
-
},
|
86
|
-
|
87
|
-
// modules
|
88
|
-
colorMode: {
|
89
|
-
classSuffix: '',
|
90
|
-
},
|
91
|
-
cookieControl: {
|
92
|
-
cookies: {
|
93
|
-
necessary: [
|
94
|
-
{
|
95
|
-
description: {
|
96
|
-
de: 'Dieser Cookie von uns speichert die Einstellungen, die in diesem Dialog getroffen werden.',
|
97
|
-
en: 'This cookie of ours stores the settings made in this dialog.',
|
55
|
+
runtimeConfig: {
|
56
|
+
public: {
|
57
|
+
vio: {
|
58
|
+
googleAnalyticsId: '', // set via environment variable `NUXT_PUBLIC_GOOGLE_ANALYTICS_ID` only
|
59
|
+
isInProduction: process.env.NODE_ENV === 'production',
|
60
|
+
isTesting: false,
|
98
61
|
},
|
99
|
-
id: 'c',
|
100
|
-
name: {
|
101
|
-
de: 'Cookie-Präferenzen',
|
102
|
-
en: 'Cookie Preferences',
|
103
|
-
},
|
104
|
-
targetCookieIds: ['ncc_c', 'ncc_e'],
|
105
62
|
},
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
en: 'Language',
|
63
|
+
},
|
64
|
+
typescript: {
|
65
|
+
shim: false,
|
66
|
+
tsConfig: {
|
67
|
+
compilerOptions: {
|
68
|
+
esModuleInterop: true,
|
69
|
+
// moduleResolution: 'bundler',
|
70
|
+
// noErrorTruncation: true,
|
115
71
|
},
|
116
|
-
targetCookieIds: [I18N_COOKIE_NAME],
|
117
72
|
},
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
73
|
+
},
|
74
|
+
|
75
|
+
// modules
|
76
|
+
colorMode: {
|
77
|
+
classSuffix: '',
|
78
|
+
},
|
79
|
+
cookieControl: {
|
80
|
+
cookies: {
|
81
|
+
necessary: [
|
82
|
+
{
|
83
|
+
description: {
|
84
|
+
de: 'Dieser Cookie von uns speichert die Einstellungen, die in diesem Dialog getroffen werden.',
|
85
|
+
en: 'This cookie of ours stores the settings made in this dialog.',
|
86
|
+
},
|
87
|
+
id: 'c',
|
88
|
+
name: {
|
89
|
+
de: 'Cookie-Präferenzen',
|
90
|
+
en: 'Cookie Preferences',
|
91
|
+
},
|
92
|
+
targetCookieIds: ['ncc_c', 'ncc_e'],
|
93
|
+
},
|
94
|
+
{
|
95
|
+
description: {
|
96
|
+
de: 'Dieser Cookie von uns speichert die Sprache, in der diese Webseite angezeigt wird.',
|
97
|
+
en: "This cookie of ours stores the language that's used to display this website.",
|
98
|
+
},
|
99
|
+
id: 'l',
|
100
|
+
name: {
|
101
|
+
de: 'Sprache',
|
102
|
+
en: 'Language',
|
103
|
+
},
|
104
|
+
targetCookieIds: [I18N_COOKIE_NAME],
|
105
|
+
},
|
106
|
+
{
|
107
|
+
description: {
|
108
|
+
de: 'Dieser Cookie von uns speichert die Zeitzone, in der sich das Gerät zu befinden scheint.',
|
109
|
+
en: 'This cookie of ours saves the timezone in which the device appears to be located.',
|
110
|
+
},
|
111
|
+
id: 't',
|
112
|
+
name: {
|
113
|
+
de: 'Zeitzone',
|
114
|
+
en: 'Timezone',
|
115
|
+
},
|
116
|
+
targetCookieIds: [TIMEZONE_COOKIE_NAME],
|
117
|
+
},
|
118
|
+
],
|
119
|
+
optional: [
|
120
|
+
{
|
121
|
+
description: {
|
122
|
+
de: 'Die Cookies vom Drittanbieter Google ermöglichen die Analyse von Nutzerverhalten. Diese Analyse hilft uns unsere Dienste zu verbessern, indem wir verstehen, wie diese Webseite genutzt wird.',
|
123
|
+
en: 'The third-party cookies by Google enable the analysis of user behavior. This analysis helps us to improve our services by understanding how this website is used.',
|
124
|
+
},
|
125
|
+
id: 'ga',
|
126
|
+
links: {
|
127
|
+
'https://policies.google.com/privacy': 'Google Privacy Policy',
|
128
|
+
'https://policies.google.com/terms': 'Google Terms of Service',
|
129
|
+
},
|
130
|
+
name: 'Analytics',
|
131
|
+
targetCookieIds: ['_ga', '_ga_K4R41W62BR'],
|
132
|
+
},
|
133
|
+
],
|
129
134
|
},
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
},
|
142
|
-
name: 'Analytics',
|
143
|
-
targetCookieIds: ['_ga', '_ga_K4R41W62BR'],
|
135
|
+
locales: ['en', 'de'],
|
136
|
+
},
|
137
|
+
htmlValidator: {
|
138
|
+
failOnError: false, // TODO: fix invalid html in nuxt html template (https://github.com/nuxt/nuxt/issues/22526)
|
139
|
+
logLevel: 'warning',
|
140
|
+
},
|
141
|
+
i18n: {
|
142
|
+
defaultLocale: 'en', // Must be set for the default prefix_except_default prefix strategy.
|
143
|
+
detectBrowserLanguage: {
|
144
|
+
cookieKey: I18N_COOKIE_NAME,
|
145
|
+
cookieSecure: true,
|
144
146
|
},
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
147
|
+
},
|
148
|
+
linkChecker: {
|
149
|
+
debug: process.env.NODE_ENV === 'development',
|
150
|
+
failOnError: true,
|
151
|
+
},
|
152
|
+
seoKit: {
|
153
|
+
splash: false,
|
154
|
+
},
|
155
|
+
site: {
|
156
|
+
debug: process.env.NODE_ENV === 'development',
|
157
|
+
titleSeparator: '·',
|
158
|
+
},
|
159
|
+
sitemap: {
|
160
|
+
exclude: ['/api/pages/**'],
|
161
|
+
},
|
162
|
+
tailwindcss: {
|
163
|
+
cssPath: join(currentDir, './assets/css/tailwind.css'),
|
164
|
+
},
|
159
165
|
},
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
},
|
168
|
-
site: {
|
169
|
-
debug: process.env.NODE_ENV === 'development',
|
170
|
-
name: SITE_NAME,
|
171
|
-
titleSeparator: '·',
|
172
|
-
url: BASE_URL,
|
173
|
-
},
|
174
|
-
sitemap: {
|
175
|
-
exclude: ['/api/pages/**'],
|
176
|
-
},
|
177
|
-
tailwindcss: {
|
178
|
-
cssPath: join(currentDir, './assets/css/tailwind.css'),
|
179
|
-
},
|
180
|
-
})
|
166
|
+
VIO_NUXT_BASE_CONFIG({
|
167
|
+
baseUrl: BASE_URL,
|
168
|
+
siteName: SITE_NAME,
|
169
|
+
stagingHost: 'localhost:3000',
|
170
|
+
}),
|
171
|
+
),
|
172
|
+
)
|
package/package.json
CHANGED
package/utils/constants.ts
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
export const SITE_NAME = 'Vio'
|
2
2
|
|
3
|
+
export const BASE_URL =
|
4
|
+
(process.env.NUXT_PUBLIC_STACK_DOMAIN ? 'https' : 'http') +
|
5
|
+
'://' +
|
6
|
+
(process.env.NUXT_PUBLIC_STACK_DOMAIN ||
|
7
|
+
`${process.env.HOST || 'localhost'}:${
|
8
|
+
!process.env.NODE_ENV || process.env.NODE_ENV === 'development'
|
9
|
+
? '3000'
|
10
|
+
: '3001'
|
11
|
+
}`)
|
3
12
|
export const CACHE_VERSION = 'bOXMwoKlJr'
|
4
13
|
export const COOKIE_PREFIX = SITE_NAME.toLocaleLowerCase()
|
5
14
|
export const COOKIE_SEPARATOR = '_'
|
@@ -38,44 +47,36 @@ export const VIO_NUXT_BASE_CONFIG = ({
|
|
38
47
|
baseUrl?: string
|
39
48
|
siteName: string
|
40
49
|
stagingHost?: string
|
41
|
-
}) =>
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
},
|
47
|
-
runtimeConfig: {
|
48
|
-
public: {
|
49
|
-
i18n: {
|
50
|
-
...(baseUrl ? { baseUrl } : {}),
|
51
|
-
},
|
52
|
-
vio: {
|
53
|
-
...(stagingHost
|
54
|
-
? {
|
55
|
-
stagingHost:
|
56
|
-
process.env.NODE_ENV !== 'production' &&
|
57
|
-
!process.env.NUXT_PUBLIC_STACK_DOMAIN
|
58
|
-
? stagingHost
|
59
|
-
: undefined,
|
60
|
-
}
|
61
|
-
: {}),
|
50
|
+
}) =>
|
51
|
+
({
|
52
|
+
app: {
|
53
|
+
head: {
|
54
|
+
title: SITE_NAME, // fallback data to prevent invalid html at generation
|
62
55
|
},
|
63
56
|
},
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
57
|
+
runtimeConfig: {
|
58
|
+
public: {
|
59
|
+
i18n: {
|
60
|
+
...(baseUrl ? { baseUrl } : {}),
|
61
|
+
},
|
62
|
+
vio: {
|
63
|
+
...(stagingHost
|
64
|
+
? {
|
65
|
+
stagingHost:
|
66
|
+
process.env.NODE_ENV !== 'production' &&
|
67
|
+
!process.env.NUXT_PUBLIC_STACK_DOMAIN
|
68
|
+
? stagingHost
|
69
|
+
: undefined,
|
70
|
+
}
|
71
|
+
: {}),
|
72
|
+
},
|
71
73
|
},
|
72
74
|
},
|
73
|
-
},
|
74
75
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
})
|
76
|
+
// modules
|
77
|
+
i18n: I18N_MODULE_CONFIG, // `langDir`, `lazy` and `locales` must be configured to extend a layer having lazy-loaded translations (https://v8.i18n.nuxtjs.org/guide/layers#locales)
|
78
|
+
site: {
|
79
|
+
name: siteName,
|
80
|
+
...(baseUrl ? { url: baseUrl } : {}),
|
81
|
+
},
|
82
|
+
}) as Parameters<typeof defineNuxtConfig>[0]
|
package/utils/routing.ts
CHANGED
@@ -1,2 +1,4 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import { RouteLocationRaw } from '#vue-router'
|
2
|
+
|
3
|
+
export const append = (path: string, pathToAppend?: RouteLocationRaw) =>
|
4
|
+
path + (path.endsWith('/') ? '' : '/') + (pathToAppend ?? '')
|