@dargmuesli/nuxt-vio 10.2.10 → 10.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,7 +20,6 @@ const ogImageComponentProp = toRef(() => props.ogImageComponent)
20
20
 
21
21
  const { $dayjs } = useNuxtApp()
22
22
  const { locale } = useI18n()
23
- const cookieControl = useCookieControl()
24
23
  const siteConfig = useSiteConfig()
25
24
 
26
25
  const { loadingIds, indicateLoadingDone } = useLoadingDoneIndicator('app')
@@ -46,18 +45,6 @@ const isLoading = computed(() => !!loadingIds.value.length)
46
45
 
47
46
  // lifecycle
48
47
  onMounted(() => indicateLoadingDone())
49
- watch(
50
- () => cookieControl.cookiesEnabledIds.value,
51
- (current, previous) => {
52
- if (
53
- (!previous?.includes('ga') && current?.includes('ga')) ||
54
- (previous?.includes('ga') && !current?.includes('ga'))
55
- ) {
56
- window.location.reload()
57
- }
58
- },
59
- { deep: true },
60
- )
61
48
 
62
49
  // initialization
63
50
  defineOgImageComponent(
@@ -77,5 +64,6 @@ useSchemaOrg([
77
64
  description: siteConfig.description,
78
65
  }),
79
66
  ])
67
+ useVioGtag()
80
68
  init()
81
69
  </script>
@@ -0,0 +1,42 @@
1
+ import { GOOGLE_ANALYTICS_COOKIE_NAME } from '../utils/constants'
2
+
3
+ export const useVioGtag = () => {
4
+ const {
5
+ gtag,
6
+ initialize: initializeGtag,
7
+ disableAnalytics,
8
+ enableAnalytics,
9
+ } = useGtag()
10
+ const cookieControl = useCookieControl()
11
+
12
+ if (
13
+ cookieControl.cookiesEnabledIds.value?.includes(
14
+ GOOGLE_ANALYTICS_COOKIE_NAME,
15
+ )
16
+ ) {
17
+ initializeGtag()
18
+ }
19
+
20
+ watch(cookieControl.cookiesEnabledIds, (current, previous) => {
21
+ if (
22
+ !previous?.includes(GOOGLE_ANALYTICS_COOKIE_NAME) &&
23
+ current?.includes(GOOGLE_ANALYTICS_COOKIE_NAME)
24
+ ) {
25
+ initializeGtag()
26
+ enableAnalytics()
27
+ gtag('consent', 'update', {
28
+ ad_user_data: 'granted',
29
+ ad_personalization: 'granted',
30
+ ad_storage: 'granted',
31
+ analytics_storage: 'granted',
32
+ })
33
+ }
34
+
35
+ if (
36
+ previous?.includes(GOOGLE_ANALYTICS_COOKIE_NAME) &&
37
+ !current?.includes(GOOGLE_ANALYTICS_COOKIE_NAME)
38
+ ) {
39
+ disableAnalytics()
40
+ }
41
+ })
42
+ }
package/nuxt.config.ts CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  SITE_URL,
8
8
  SITE_NAME,
9
9
  TIMEZONE_COOKIE_NAME,
10
+ GOOGLE_ANALYTICS_COOKIE_NAME,
10
11
  VIO_NUXT_BASE_CONFIG,
11
12
  } from './utils/constants'
12
13
 
@@ -45,6 +46,7 @@ export default defineNuxtConfig(
45
46
  '@nuxtjs/seo',
46
47
  '@nuxtjs/tailwindcss',
47
48
  '@pinia/nuxt',
49
+ 'nuxt-gtag',
48
50
  // nuxt-security: remove invalid `'none'`s and duplicates
49
51
  (_options, nuxt) => {
50
52
  const nuxtConfigSecurity = nuxt.options.security
@@ -90,7 +92,6 @@ export default defineNuxtConfig(
90
92
  : { baseUrl: SITE_URL }),
91
93
  },
92
94
  vio: {
93
- googleAnalyticsId: '',
94
95
  isInProduction: process.env.NODE_ENV === 'production',
95
96
  isTesting: false,
96
97
  },
@@ -144,7 +145,7 @@ export default defineNuxtConfig(
144
145
  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.',
145
146
  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.',
146
147
  },
147
- id: 'ga',
148
+ id: GOOGLE_ANALYTICS_COOKIE_NAME,
148
149
  links: {
149
150
  'https://policies.google.com/privacy': 'Google Privacy Policy',
150
151
  'https://policies.google.com/terms': 'Google Terms of Service',
@@ -156,6 +157,27 @@ export default defineNuxtConfig(
156
157
  },
157
158
  locales: ['en', 'de'],
158
159
  },
160
+ gtag: {
161
+ config: {
162
+ cookie_flags: `samesite=strict${
163
+ process.env.NODE_ENV === 'production' ? ';secure' : ''
164
+ }`,
165
+ },
166
+ enabled: false,
167
+ initCommands: [
168
+ [
169
+ 'consent',
170
+ 'default',
171
+ {
172
+ ad_user_data: 'denied',
173
+ ad_personalization: 'denied',
174
+ ad_storage: 'denied',
175
+ analytics_storage: 'denied',
176
+ wait_for_update: 500,
177
+ },
178
+ ],
179
+ ],
180
+ },
159
181
  htmlValidator: {
160
182
  // failOnError: true, // TODO: enable once headers match requirements (https://github.com/unjs/unhead/issues/199#issuecomment-1815728703)
161
183
  logLevel: 'warning',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dargmuesli/nuxt-vio",
3
- "version": "10.2.10",
3
+ "version": "10.3.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/dargmuesli/vio.git"
@@ -12,7 +12,7 @@
12
12
  "engines": {
13
13
  "node": "20"
14
14
  },
15
- "packageManager": "pnpm@8.15.3",
15
+ "packageManager": "pnpm@8.15.5",
16
16
  "files": [
17
17
  "assets",
18
18
  "components",
@@ -34,74 +34,74 @@
34
34
  ],
35
35
  "main": "nuxt.config.ts",
36
36
  "dependencies": {
37
- "@dargmuesli/nuxt-cookie-control": "8.0.0-beta.1",
37
+ "@dargmuesli/nuxt-cookie-control": "8.0.0-beta.3",
38
38
  "@heroicons/vue": "2.1.1",
39
39
  "@http-util/status-i18n": "0.8.1",
40
40
  "@nuxt/devtools": "1.0.8",
41
- "@nuxt/image": "1.3.0",
42
- "@nuxtjs/color-mode": "3.3.2",
41
+ "@nuxt/image": "1.4.0",
42
+ "@nuxtjs/color-mode": "3.3.3",
43
43
  "@nuxtjs/html-validator": "1.6.0",
44
- "@nuxtjs/i18n": "8.1.1",
45
- "@nuxtjs/seo": "2.0.0-rc.8",
44
+ "@nuxtjs/i18n": "8.2.0",
45
+ "@nuxtjs/seo": "2.0.0-rc.9",
46
46
  "@nuxtjs/tailwindcss": "6.11.4",
47
47
  "@pinia/nuxt": "0.5.1",
48
48
  "@tailwindcss/forms": "0.5.7",
49
49
  "@tailwindcss/typography": "0.5.10",
50
50
  "@types/lodash-es": "4.17.12",
51
- "@urql/core": "4.2.3",
51
+ "@urql/core": "4.3.0",
52
52
  "@vuelidate/core": "2.0.3",
53
53
  "@vuelidate/validators": "2.0.4",
54
54
  "clipboardy": "4.0.0",
55
55
  "dayjs": "2.0.0-alpha.4",
56
- "jose": "5.2.2",
57
- "nuxt-security": "1.1.2",
58
- "sweetalert2": "11.10.5",
59
- "vue-gtag": "2.0.1"
56
+ "jose": "5.2.3",
57
+ "nuxt-gtag": "2.0.5",
58
+ "nuxt-security": "1.2.2",
59
+ "sweetalert2": "11.10.6"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@axe-core/playwright": "4.8.5",
63
- "@intlify/eslint-plugin-vue-i18n": "3.0.0-next.5",
63
+ "@intlify/eslint-plugin-vue-i18n": "3.0.0-next.7",
64
64
  "@nuxtjs/eslint-config-typescript": "12.1.0",
65
- "@playwright/test": "1.41.2",
66
- "@unhead/vue": "1.8.10",
65
+ "@playwright/test": "1.42.1",
66
+ "@unhead/vue": "1.8.20",
67
67
  "@urql/devtools": "2.0.3",
68
- "@urql/exchange-graphcache": "6.4.1",
68
+ "@urql/exchange-graphcache": "6.5.0",
69
69
  "@urql/vue": "1.1.2",
70
70
  "consola": "3.2.3",
71
71
  "cookie-es": "1.0.0",
72
72
  "cross-env": "7.0.3",
73
73
  "defu": "6.1.4",
74
- "eslint": "8.56.0",
74
+ "eslint": "8.57.0",
75
75
  "eslint-config-prettier": "9.1.0",
76
76
  "eslint-plugin-compat": "4.2.0",
77
77
  "eslint-plugin-nuxt": "4.0.0",
78
78
  "eslint-plugin-prettier": "5.1.3",
79
- "eslint-plugin-yml": "1.12.2",
80
- "h3": "1.10.1",
79
+ "eslint-plugin-yml": "1.13.1",
80
+ "h3": "1.11.1",
81
81
  "jiti": "1.21.0",
82
82
  "lint-staged": "15.2.2",
83
83
  "lodash-es": "4.17.21",
84
- "nuxt": "3.10.2",
84
+ "nuxt": "3.11.1",
85
85
  "pinia": "2.1.7",
86
86
  "prettier": "3.2.5",
87
- "prettier-plugin-tailwindcss": "0.5.11",
87
+ "prettier-plugin-tailwindcss": "0.5.12",
88
88
  "serve": "14.2.1",
89
89
  "stylelint": "16.2.1",
90
90
  "stylelint-config-recommended-vue": "1.5.0",
91
91
  "stylelint-config-standard": "36.0.0",
92
92
  "stylelint-no-unsupported-browser-features": "8.0.1",
93
93
  "tailwindcss": "3.4.1",
94
- "ufo": "1.4.0",
95
- "unhead": "1.8.10",
96
- "vue": "3.4.19",
97
- "vue-router": "4.2.5",
98
- "vue-tsc": "1.8.27"
94
+ "ufo": "1.5.2",
95
+ "unhead": "1.8.20",
96
+ "vue": "3.4.21",
97
+ "vue-router": "4.3.0",
98
+ "vue-tsc": "2.0.6"
99
99
  },
100
100
  "peerDependencies": {
101
- "nuxt": "3.10.2",
102
- "playwright-core": "1.41.2",
103
- "vue": "3.4.19",
104
- "vue-router": "4.2.5"
101
+ "nuxt": "3.11.1",
102
+ "playwright-core": "1.42.1",
103
+ "vue": "3.4.21",
104
+ "vue-router": "4.3.0"
105
105
  },
106
106
  "scripts": {
107
107
  "build": "pnpm run build:node",
@@ -13,6 +13,7 @@ export const CACHE_VERSION = 'bOXMwoKlJr'
13
13
  export const COOKIE_PREFIX = SITE_NAME.toLocaleLowerCase()
14
14
  export const COOKIE_SEPARATOR = '_'
15
15
  export const FETCH_RETRY_AMOUNT = 3
16
+ export const GOOGLE_ANALYTICS_COOKIE_NAME = 'ga'
16
17
  export const I18N_MODULE_CONFIG = {
17
18
  langDir: 'locales',
18
19
  lazy: true,
@@ -1,21 +0,0 @@
1
- import VueGtag from 'vue-gtag'
2
-
3
- export default defineNuxtPlugin((nuxtApp) => {
4
- const config = useRuntimeConfig()
5
- const router = useRouter()
6
- const cookieControl = useCookieControl()
7
-
8
- nuxtApp.vueApp.use(
9
- VueGtag,
10
- {
11
- bootstrap: !!cookieControl.cookiesEnabledIds.value?.includes('ga'),
12
- config: {
13
- id: config.public.vio.googleAnalyticsId,
14
- params: {
15
- cookie_flags: 'secure;samesite=strict',
16
- },
17
- },
18
- },
19
- router,
20
- )
21
- })