@dargmuesli/nuxt-vio 3.0.0-beta.2 → 3.0.0-beta.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. package/app.config.ts +32 -33
  2. package/assets/css/tailwind.css +24 -9
  3. package/components/vio/_/VioApp.vue +14 -2
  4. package/components/vio/_/VioError.vue +4 -1
  5. package/components/vio/_/VioLink.vue +7 -5
  6. package/components/vio/form/VioForm.vue +2 -2
  7. package/components/vio/form/input/VioFormInput.vue +5 -5
  8. package/components/vio/form/input/state/VioFormInputStateError.vue +1 -1
  9. package/components/vio/form/input/state/VioFormInputStateInfo.vue +1 -1
  10. package/components/vio/icon/IconArrowRight.vue +2 -2
  11. package/components/vio/icon/IconCalendar.vue +2 -2
  12. package/components/vio/icon/IconCheckCircle.vue +2 -2
  13. package/components/vio/icon/IconDownload.vue +2 -2
  14. package/components/vio/icon/IconExclamationCircle.vue +2 -2
  15. package/components/vio/icon/IconHome.vue +2 -2
  16. package/components/vio/icon/IconHourglass.vue +2 -2
  17. package/components/vio/layout/VioLayoutBreadcrumbs.vue +1 -1
  18. package/components/vio/layout/VioLayoutFooter.vue +3 -3
  19. package/components/vio/layout/VioLayoutFooterCategory.vue +1 -1
  20. package/components/vio/loader/indicator/VioLoaderIndicator.vue +2 -2
  21. package/components/vio/loader/indicator/VioLoaderIndicatorPing.vue +2 -2
  22. package/components/vio/page/VioPageLegalNotice.vue +10 -8
  23. package/components/vio/page/VioPagePrivacyPolicy.vue +19 -12
  24. package/composables/useAppLayout.ts +11 -17
  25. package/composables/useFavicons.ts +3 -31
  26. package/composables/useGetServiceHref.ts +2 -28
  27. package/composables/useHeadDefault.ts +13 -26
  28. package/composables/usePolyfills.ts +23 -0
  29. package/locales/de.json +1 -1
  30. package/locales/en.json +1 -1
  31. package/nuxt.config.ts +152 -147
  32. package/package.json +33 -33
  33. package/plugins/dayjs.ts +6 -6
  34. package/plugins/gtag.client.ts +4 -1
  35. package/server/middleware/headers.ts +1 -1
  36. package/server/tsconfig.json +1 -1
  37. package/server/utils/util.ts +2 -0
  38. package/store/auth.ts +32 -0
  39. package/tailwind.config.ts +3 -3
  40. package/types/api.d.ts +9 -0
  41. package/types/fetch.d.ts +8 -0
  42. package/types/modules/gql.d.ts +6 -0
  43. package/types/modules/graphql.d.ts +6 -0
  44. package/utils/constants.ts +51 -0
  45. package/utils/networking.ts +44 -9
  46. package/utils/routing.ts +4 -2
  47. package/LICENSE +0 -674
  48. package/components/vio/icon/IconLogo.vue +0 -17
  49. package/components/vio/layout/VioLayoutHeader.vue +0 -98
package/app.config.ts CHANGED
@@ -2,11 +2,8 @@ import { useServerSeoMeta } from '@unhead/vue'
2
2
 
3
3
  export default defineAppConfig({
4
4
  vio: {
5
- legalNotice: undefined,
6
- privacyPolicy: undefined,
7
- seoMeta: {
8
- twitterSite: '@dargmuesli',
9
- },
5
+ pages: undefined,
6
+ seoMeta: undefined,
10
7
  server: {
11
8
  middleware: {
12
9
  headers: {
@@ -37,55 +34,57 @@ export default defineAppConfig({
37
34
  },
38
35
  },
39
36
  },
40
- themeColor: '#202020',
37
+ themeColor: undefined,
41
38
  },
42
39
  })
43
40
 
44
41
  declare module 'nuxt/schema' {
45
- interface AppConfig {
42
+ interface AppConfigInput {
46
43
  vio: {
47
- legalNotice?: {
48
- contact: {
49
- email: string
50
- }
51
- responsibility: {
52
- address: {
53
- city: string
54
- name: string
55
- street: string
56
- }
57
- }
58
- tmg: {
59
- address: {
60
- city: string
61
- name: string
62
- street: string
44
+ pages?: {
45
+ legalNotice?: {
46
+ contact: {
47
+ email: string
63
48
  }
64
- }
65
- }
66
- privacyPolicy?: {
67
- hostingCdn?: {
68
- external: {
49
+ responsibility: {
69
50
  address: {
70
51
  city: string
71
52
  name: string
72
53
  street: string
73
54
  }
74
55
  }
75
- }
76
- mandatoryInfo?: {
77
- responsible: {
56
+ tmg: {
78
57
  address: {
79
58
  city: string
80
- email: string
81
59
  name: string
82
60
  street: string
83
61
  }
84
62
  }
85
63
  }
64
+ privacyPolicy?: {
65
+ hostingCdn?: {
66
+ external: {
67
+ address: {
68
+ city: string
69
+ name: string
70
+ street: string
71
+ }
72
+ }
73
+ }
74
+ mandatoryInfo?: {
75
+ responsible: {
76
+ address: {
77
+ city: string
78
+ email: string
79
+ name: string
80
+ street: string
81
+ }
82
+ }
83
+ }
84
+ }
86
85
  }
87
86
  seoMeta?: Parameters<typeof useServerSeoMeta>[0]
88
- server: {
87
+ server?: {
89
88
  middleware: {
90
89
  headers: {
91
90
  csp: {
@@ -1,43 +1,58 @@
1
+ /* stylelint-disable at-rule-no-unknown */
1
2
  @tailwind base;
2
3
  @tailwind components;
3
4
  @tailwind utilities;
5
+ /* stylelint-enable at-rule-no-unknown */
4
6
 
7
+ /* doiuse-disable css-cascade-layers */
5
8
  @layer base {
9
+ /* doiuse-enable css-cascade-layers */
6
10
  a:focus {
7
- @apply outline-none ring;
11
+ /* doiuse-disable css-nesting */
12
+ @apply outline-none ring; /* doiuse-enable css-nesting */
8
13
  }
9
14
 
10
15
  button:focus {
11
- @apply outline-none ring;
16
+ /* doiuse-disable css-nesting */
17
+ @apply outline-none ring; /* doiuse-enable css-nesting */
12
18
  }
13
19
 
14
20
  thead {
15
- @apply sticky top-0 z-10 vio-bg-darken;
21
+ /* doiuse-disable css-nesting */
22
+ @apply vio-bg-darken sticky top-0 z-10; /* doiuse-enable css-nesting */
16
23
  }
17
24
 
18
25
  tbody {
19
- @apply divide-y vio-divide-darken;
26
+ /* doiuse-disable css-nesting */
27
+ @apply vio-divide-darken divide-y; /* doiuse-enable css-nesting */
20
28
  }
21
29
  }
22
30
 
31
+ /* doiuse-disable css-cascade-layers */
23
32
  @layer utilities {
33
+ /* doiuse-enable css-cascade-layers */
24
34
  .vio-prose {
25
- @apply m-auto prose dark:prose-invert prose-sm sm:prose-base lg:prose-lg xl:prose-xl; /* 2xl:prose-2xl */
35
+ /* doiuse-disable css-nesting */
36
+ @apply prose prose-sm m-auto dark:prose-invert sm:prose-base lg:prose-lg xl:prose-xl; /* 2xl:prose-2xl */ /* doiuse-enable css-nesting */
26
37
  }
27
38
 
28
39
  .vio-prose-fullwidth {
29
- @apply vio-prose max-w-full sm:max-w-full md:max-w-full xl:max-w-full 2xl:max-w-full;
40
+ /* doiuse-disable css-nesting */
41
+ @apply vio-prose max-w-full sm:max-w-full md:max-w-full xl:max-w-full 2xl:max-w-full; /* doiuse-enable css-nesting */
30
42
  }
31
43
 
32
44
  .vio-divide-darken {
33
- @apply divide-background-brighten dark:divide-background-darken;
45
+ /* doiuse-disable css-nesting */
46
+ @apply divide-background-brighten dark:divide-background-darken; /* doiuse-enable css-nesting */
34
47
  }
35
48
 
36
49
  .vio-bg-darken {
37
- @apply bg-background-brighten dark:bg-background-darken;
50
+ /* doiuse-disable css-nesting */
51
+ @apply bg-background-brighten dark:bg-background-darken; /* doiuse-enable css-nesting */
38
52
  }
39
53
 
40
54
  .vio-border-darken {
41
- @apply border-background-brighten dark:border-background-darken;
55
+ /* doiuse-disable css-nesting */
56
+ @apply border-background-brighten dark:border-background-darken; /* doiuse-enable css-nesting */
42
57
  }
43
58
  }
@@ -3,7 +3,7 @@
3
3
  <NuxtLayout>
4
4
  <!-- `NuxtLayout` can't have mulitple child nodes (https://github.com/nuxt/nuxt/issues/21759) -->
5
5
  <div>
6
- <NuxtPage />
6
+ <NuxtPage :site-description="siteDescriptionProp" />
7
7
  <CookieControl :locale="locale" />
8
8
  </div>
9
9
  </NuxtLayout>
@@ -29,6 +29,7 @@ const siteDescriptionProp = toRef(() => props.siteDescription)
29
29
  const { $dayjs } = useNuxtApp()
30
30
  const i18n = useI18n()
31
31
  const cookieControl = useCookieControl()
32
+ const siteConfig = useSiteConfig()
32
33
 
33
34
  const { loadingIds, indicateLoadingDone } = useLoadingDoneIndicator('app')
34
35
 
@@ -37,6 +38,8 @@ const locale = i18n.locale as WritableComputedRef<Locale>
37
38
 
38
39
  // methods
39
40
  const init = () => {
41
+ $dayjs.locale(locale.value)
42
+
40
43
  if (process.client) {
41
44
  const cookieTimezone = useCookie(TIMEZONE_COOKIE_NAME, {
42
45
  // default: () => undefined, // setting `default` on the client side only does not write the cookie
@@ -68,7 +71,6 @@ watch(
68
71
  )
69
72
 
70
73
  // initialization
71
- init()
72
74
  updateSiteConfig({
73
75
  description: siteDescriptionProp.value,
74
76
  })
@@ -79,4 +81,14 @@ defineOgImage({
79
81
  })
80
82
  useAppLayout()
81
83
  useFavicons()
84
+ usePolyfills()
85
+ useSchemaOrg([
86
+ defineWebSite({
87
+ description: siteDescriptionProp,
88
+ inLanguage: locale,
89
+ name: siteConfig.name,
90
+ }),
91
+ defineWebPage(),
92
+ ])
93
+ init()
82
94
  </script>
@@ -3,7 +3,10 @@
3
3
  <div>
4
4
  {{ description }}
5
5
  </div>
6
- <pre v-if="stack && !runtimeConfig.public.isInProduction" v-html="stack" />
6
+ <pre
7
+ v-if="stack && !runtimeConfig.public.vio.isInProduction"
8
+ v-html="stack"
9
+ />
7
10
  </template>
8
11
 
9
12
  <script setup lang="ts">
@@ -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
  "
@@ -12,7 +12,7 @@
12
12
  >
13
13
  <slot />
14
14
  </a>
15
- <NuxtLink
15
+ <NuxtLinkLocale
16
16
  v-else
17
17
  :aria-label="ariaLabel"
18
18
  :class="classes"
@@ -20,17 +20,19 @@
20
20
  @click="emit('click')"
21
21
  >
22
22
  <slot />
23
- </NuxtLink>
23
+ </NuxtLinkLocale>
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: string
35
+ to: NuxtLinkProps['to']
34
36
  }
35
37
  const props = withDefaults(defineProps<Props>(), {
36
38
  ariaLabel: undefined,
@@ -9,7 +9,7 @@
9
9
  @submit="(e) => emit('submit', e)"
10
10
  >
11
11
  <VioCard class="flex flex-col" is-high>
12
- <div class="flex flex-col min-h-0 overflow-y-auto gap-6">
12
+ <div class="flex min-h-0 flex-col gap-6 overflow-y-auto">
13
13
  <slot />
14
14
  <div class="flex flex-col items-center justify-between">
15
15
  <VioButtonColored
@@ -43,7 +43,7 @@
43
43
  <script setup lang="ts">
44
44
  import type { BaseValidation } from '@vuelidate/core'
45
45
 
46
- import type { BackendError } from '~/../types/api'
46
+ import type { BackendError } from '../../../types/api'
47
47
 
48
48
  export interface Props {
49
49
  errors?: BackendError[]
@@ -51,9 +51,9 @@
51
51
  />
52
52
  <div v-if="validationProperty && isValidatable">
53
53
  <VioFormInputIconWrapper v-if="validationProperty.$pending">
54
- <IconHourglass
54
+ <VioIconHourglass
55
55
  class="text-blue-600"
56
- :title="t('globalLoading')"
56
+ :title="t('globalStatusLoading')"
57
57
  />
58
58
  </VioFormInputIconWrapper>
59
59
  <VioFormInputIconWrapper
@@ -61,14 +61,14 @@
61
61
  validationProperty.$model && !validationProperty.$invalid
62
62
  "
63
63
  >
64
- <IconCheckCircle class="text-green-600" :title="t('valid')" />
64
+ <VioIconCheckCircle class="text-green-600" :title="t('valid')" />
65
65
  </VioFormInputIconWrapper>
66
66
  <VioFormInputIconWrapper
67
67
  v-else-if="
68
68
  validationProperty.$model && validationProperty.$invalid
69
69
  "
70
70
  >
71
- <IconExclamationCircle
71
+ <VioIconExclamationCircle
72
72
  class="text-red-600"
73
73
  :title="t('validNot')"
74
74
  />
@@ -91,7 +91,7 @@
91
91
  <div class="md:w-2/3">
92
92
  <slot name="stateInfo" />
93
93
  <VioFormInputStateInfo v-if="value?.$pending">
94
- {{ t('globalLoading') }}
94
+ {{ t('globalStatusLoading') }}
95
95
  </VioFormInputStateInfo>
96
96
  </div>
97
97
  <div class="md:w-1/3" />
@@ -11,7 +11,7 @@
11
11
  "
12
12
  class="text-red-600"
13
13
  >
14
- <IconExclamationCircle v-if="formInput && validationProperty" />
14
+ <VioIconExclamationCircle v-if="formInput && validationProperty" />
15
15
  <slot />
16
16
  </VioFormInputState>
17
17
  </template>
@@ -11,7 +11,7 @@
11
11
  "
12
12
  class="text-gray-500 dark:text-gray-400"
13
13
  >
14
- <IconInformationCircle />
14
+ <VioIconInformationCircle />
15
15
  <slot />
16
16
  </VioFormInputState>
17
17
  </template>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <IconContainer
2
+ <VioIconContainer
3
3
  fill="none"
4
4
  viewBox="0 0 24 24"
5
5
  stroke="currentColor"
@@ -11,7 +11,7 @@
11
11
  stroke-linejoin="round"
12
12
  d="M14 5l7 7m0 0l-7 7m7-7H3"
13
13
  />
14
- </IconContainer>
14
+ </VioIconContainer>
15
15
  </template>
16
16
 
17
17
  <script setup lang="ts">
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <IconContainer
2
+ <VioIconContainer
3
3
  fill="none"
4
4
  viewBox="0 0 24 24"
5
5
  stroke="currentColor"
@@ -11,7 +11,7 @@
11
11
  stroke-width="2"
12
12
  d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"
13
13
  />
14
- </IconContainer>
14
+ </VioIconContainer>
15
15
  </template>
16
16
 
17
17
  <script setup lang="ts">
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <IconContainer
2
+ <VioIconContainer
3
3
  viewBox="0 0 20 20"
4
4
  fill="currentColor"
5
5
  :title="title || t('title')"
@@ -9,7 +9,7 @@
9
9
  d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
10
10
  clip-rule="evenodd"
11
11
  />
12
- </IconContainer>
12
+ </VioIconContainer>
13
13
  </template>
14
14
 
15
15
  <script setup lang="ts">
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <IconContainer
2
+ <VioIconContainer
3
3
  fill="none"
4
4
  viewBox="0 0 24 24"
5
5
  stroke="currentColor"
@@ -11,7 +11,7 @@
11
11
  stroke-width="2"
12
12
  d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
13
13
  />
14
- </IconContainer>
14
+ </VioIconContainer>
15
15
  </template>
16
16
 
17
17
  <script setup lang="ts">
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <IconContainer
2
+ <VioIconContainer
3
3
  viewBox="0 0 20 20"
4
4
  fill="currentColor"
5
5
  :title="title || t('title')"
@@ -9,7 +9,7 @@
9
9
  d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z"
10
10
  clip-rule="evenodd"
11
11
  />
12
- </IconContainer>
12
+ </VioIconContainer>
13
13
  </template>
14
14
 
15
15
  <script setup lang="ts">
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <IconContainer
2
+ <VioIconContainer
3
3
  fill="none"
4
4
  viewBox="0 0 24 24"
5
5
  stroke="currentColor"
@@ -11,7 +11,7 @@
11
11
  stroke-width="2"
12
12
  d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
13
13
  />
14
- </IconContainer>
14
+ </VioIconContainer>
15
15
  </template>
16
16
 
17
17
  <script setup lang="ts">
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <IconContainer
2
+ <VioIconContainer
3
3
  aria-hidden="true"
4
4
  focusable="false"
5
5
  data-prefix="fas"
@@ -12,7 +12,7 @@
12
12
  fill="currentColor"
13
13
  d="M352 0C369.7 0 384 14.33 384 32C384 49.67 369.7 64 352 64V74.98C352 117.4 335.1 158.1 305.1 188.1L237.3 256L305.1 323.9C335.1 353.9 352 394.6 352 437V448C369.7 448 384 462.3 384 480C384 497.7 369.7 512 352 512H32C14.33 512 0 497.7 0 480C0 462.3 14.33 448 32 448V437C32 394.6 48.86 353.9 78.86 323.9L146.7 256L78.86 188.1C48.86 158.1 32 117.4 32 74.98V64C14.33 64 0 49.67 0 32C0 14.33 14.33 0 32 0H352zM111.1 128H272C282.4 112.4 288 93.98 288 74.98V64H96V74.98C96 93.98 101.6 112.4 111.1 128zM111.1 384H272C268.5 378.7 264.5 373.7 259.9 369.1L192 301.3L124.1 369.1C119.5 373.7 115.5 378.7 111.1 384V384z"
14
14
  />
15
- </IconContainer>
15
+ </VioIconContainer>
16
16
  </template>
17
17
 
18
18
  <script setup lang="ts">
@@ -6,7 +6,7 @@
6
6
  :is-colored="false"
7
7
  :to="localePath('/')"
8
8
  >
9
- <IconHome classes="h-6 w-6" />
9
+ <VioIconHome classes="h-6 w-6" />
10
10
  </VioLink>
11
11
  <ul v-if="prefixes" class="flex items-center gap-2">
12
12
  <li
@@ -3,7 +3,7 @@
3
3
  <div class="flex flex-col gap-8">
4
4
  <div class="flex items-center">
5
5
  <VioLayoutHr />
6
- <IconLogo class="mx-12 h-12 w-12 brightness-0 opacity-60 invert" />
6
+ <slot name="logo" />
7
7
  <VioLayoutHr />
8
8
  </div>
9
9
  <!-- Justifying evenly, instead of "between", centers a single element. -->
@@ -24,11 +24,11 @@
24
24
 
25
25
  <script setup lang="ts">
26
26
  const { t } = useI18n()
27
- const config = useRuntimeConfig()
27
+ const runtimeConfig = useRuntimeConfig()
28
28
 
29
29
  // computations
30
30
  const year = computed(() =>
31
- config.public.isTesting ? 1337 : new Date().getFullYear(),
31
+ runtimeConfig.public.vio.isTesting ? 1337 : new Date().getFullYear(),
32
32
  )
33
33
  </script>
34
34
 
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div
3
- class="flex flex-1 flex-col items-start p-4 basis-1/2 md:flex-none md:basis-auto gap-2"
3
+ class="flex flex-1 basis-1/2 flex-col items-start gap-2 p-4 md:flex-none md:basis-auto"
4
4
  >
5
5
  <span class="whitespace-nowrap text-lg font-medium leading-7">
6
6
  {{ heading }}
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <div
3
3
  class="flex h-full items-center justify-center"
4
- :title="t('globalLoading')"
4
+ :title="t('globalStatusLoading')"
5
5
  >
6
- <div class="flex items-center justify-center w-1/2">
6
+ <div class="flex w-1/2 items-center justify-center">
7
7
  <slot />
8
8
  </div>
9
9
  </div>
@@ -1,8 +1,8 @@
1
1
  <template>
2
2
  <VioLoaderIndicator>
3
3
  <div
4
- class="w-1/2 aspect-square animate-ping rounded-full bg-gray-500"
5
- :title="t('globalLoading')"
4
+ class="aspect-square w-1/2 animate-ping rounded-full bg-gray-500"
5
+ :title="t('globalStatusLoading')"
6
6
  />
7
7
  </VioLoaderIndicator>
8
8
  </template>
@@ -9,13 +9,13 @@
9
9
  <br />
10
10
  </template>
11
11
  <template #city>
12
- {{ appConfig.legalNotice.tmg.address.city }}
12
+ {{ appConfig.vio.pages.legalNotice.tmg.address.city }}
13
13
  </template>
14
14
  <template #name>
15
- {{ appConfig.legalNotice.tmg.address.name }}
15
+ {{ appConfig.vio.pages.legalNotice.tmg.address.name }}
16
16
  </template>
17
17
  <template #street>
18
- {{ appConfig.legalNotice.tmg.address.street }}
18
+ {{ appConfig.vio.pages.legalNotice.tmg.address.street }}
19
19
  </template>
20
20
  </i18n-t>
21
21
  </address>
@@ -24,7 +24,9 @@
24
24
  <p>
25
25
  <slot v-if="$slots.contactEmail" name="contactEmail" />
26
26
  <span v-else>
27
- {{ t('email', { email: appConfig.legalNotice.contact.email }) }}
27
+ {{
28
+ t('email', { email: appConfig.vio.pages.legalNotice.contact.email })
29
+ }}
28
30
  </span>
29
31
  </p>
30
32
 
@@ -36,13 +38,13 @@
36
38
  <br />
37
39
  </template>
38
40
  <template #city>
39
- {{ appConfig.legalNotice.responsibility.address.city }}
41
+ {{ appConfig.vio.pages.legalNotice.responsibility.address.city }}
40
42
  </template>
41
43
  <template #name>
42
- {{ appConfig.legalNotice.responsibility.address.name }}
44
+ {{ appConfig.vio.pages.legalNotice.responsibility.address.name }}
43
45
  </template>
44
46
  <template #street>
45
- {{ appConfig.legalNotice.responsibility.address.street }}
47
+ {{ appConfig.vio.pages.legalNotice.responsibility.address.street }}
46
48
  </template>
47
49
  </i18n-t>
48
50
  </address>
@@ -73,7 +75,7 @@ const { t } = useI18n()
73
75
  const title = t('title')
74
76
 
75
77
  // initialization
76
- useServerSeoMeta({ title })
78
+ useHeadDefault({ title })
77
79
  </script>
78
80
 
79
81
  <i18n lang="yaml">
@@ -64,14 +64,21 @@
64
64
  <br />
65
65
  </template>
66
66
  <template #city>
67
- {{ appConfig.privacyPolicy.hostingCdn.external.address.city }}
67
+ {{
68
+ appConfig.vio.pages.privacyPolicy.hostingCdn.external
69
+ .address.city
70
+ }}
68
71
  </template>
69
72
  <template #name>
70
- {{ appConfig.privacyPolicy.hostingCdn.external.address.name }}
73
+ {{
74
+ appConfig.vio.pages.privacyPolicy.hostingCdn.external
75
+ .address.name
76
+ }}
71
77
  </template>
72
78
  <template #street>
73
79
  {{
74
- appConfig.privacyPolicy.hostingCdn.external.address.street
80
+ appConfig.vio.pages.privacyPolicy.hostingCdn.external
81
+ .address.street
75
82
  }}
76
83
  </template>
77
84
  </i18n-t>
@@ -109,29 +116,29 @@
109
116
  </template>
110
117
  <template #city>
111
118
  {{
112
- appConfig.privacyPolicy.mandatoryInfo.responsible.address
113
- .city
119
+ appConfig.vio.pages.privacyPolicy.mandatoryInfo.responsible
120
+ .address.city
114
121
  }}
115
122
  </template>
116
123
  <template #email>
117
124
  {{
118
125
  t('email', {
119
126
  email:
120
- appConfig.privacyPolicy.mandatoryInfo.responsible
121
- .address.email,
127
+ appConfig.vio.pages.privacyPolicy.mandatoryInfo
128
+ .responsible.address.email,
122
129
  })
123
130
  }}
124
131
  </template>
125
132
  <template #name>
126
133
  {{
127
- appConfig.privacyPolicy.mandatoryInfo.responsible.address
128
- .name
134
+ appConfig.vio.pages.privacyPolicy.mandatoryInfo.responsible
135
+ .address.name
129
136
  }}
130
137
  </template>
131
138
  <template #street>
132
139
  {{
133
- appConfig.privacyPolicy.mandatoryInfo.responsible.address
134
- .street
140
+ appConfig.vio.pages.privacyPolicy.mandatoryInfo.responsible
141
+ .address.street
135
142
  }}
136
143
  </template>
137
144
  </i18n-t>
@@ -502,7 +509,7 @@ const { t } = useI18n()
502
509
  const title = t('title')
503
510
 
504
511
  // initialization
505
- useServerSeoMeta({ title })
512
+ useHeadDefault({ title })
506
513
  </script>
507
514
 
508
515
  <i18n lang="yaml">