@dargmuesli/nuxt-vio 3.0.0-beta.2 → 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.
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
@@ -1,5 +1,6 @@
1
1
  export const useAppLayout = () => {
2
2
  const appConfig = useAppConfig()
3
+ const siteConfig = useSiteConfig()
3
4
 
4
5
  useServerHeadSafe({
5
6
  ...useLocaleHead({ addSeoAttributes: true }).value,
@@ -7,23 +8,16 @@ export const useAppLayout = () => {
7
8
  class:
8
9
  'bg-background-bright dark:bg-background-dark font-sans text-text-dark dark:text-text-bright',
9
10
  },
10
- ...(appConfig.themeColor
11
- ? {
12
- meta: [
13
- {
14
- content: appConfig.themeColor,
15
- name: 'msapplication-TileColor',
16
- },
17
- {
18
- content: appConfig.themeColor,
19
- name: 'theme-color',
20
- },
21
- ],
22
- }
23
- : {}),
24
11
  })
25
12
 
26
- if (appConfig.seoMeta) {
27
- useServerSeoMeta(appConfig.seoMeta)
28
- }
13
+ useServerSeoMeta({
14
+ msapplicationTileColor: appConfig.vio.themeColor,
15
+ themeColor: appConfig.vio.themeColor,
16
+ titleTemplate: (titleChunk) => {
17
+ return titleChunk && titleChunk !== siteConfig.name
18
+ ? `${titleChunk} ${siteConfig.titleSeparator} ${siteConfig.name}`
19
+ : siteConfig.name
20
+ },
21
+ ...(appConfig.vio.seoMeta ? appConfig.vio.seoMeta : {}),
22
+ })
29
23
  }
@@ -4,46 +4,18 @@ export const useFavicons = () => {
4
4
  useServerHeadSafe({
5
5
  link: [
6
6
  {
7
- href: '/assets/static/favicon/apple-touch-icon.png?v=bOXMwoKlJr',
8
- rel: 'apple-touch-icon',
9
- sizes: '180x180',
10
- },
11
- {
12
- href: '/assets/static/favicon/favicon-16x16.png?v=bOXMwoKlJr',
13
- rel: 'icon',
14
- sizes: '16x16',
15
- type: 'image/png',
16
- },
17
- {
18
- href: '/assets/static/favicon/favicon-32x32.png?v=bOXMwoKlJr',
19
- rel: 'icon',
20
- sizes: '32x32',
21
- type: 'image/png',
22
- },
23
- {
24
- href: '/favicon.ico',
25
- rel: 'icon',
26
- type: 'image/x-icon',
27
- },
28
- {
29
- href: '/assets/static/favicon/site.webmanifest?v=bOXMwoKlJr',
7
+ href: `/assets/static/favicon/site.webmanifest?v=${CACHE_VERSION}`,
30
8
  rel: 'manifest',
31
9
  },
32
10
  {
33
11
  color: appConfig.vio.themeColor,
34
- href: '/assets/static/favicon/safari-pinned-tab.svg?v=bOXMwoKlJr',
12
+ href: `/assets/static/favicon/safari-pinned-tab.svg?v=${CACHE_VERSION}`,
35
13
  rel: 'mask-icon',
36
14
  },
37
15
  {
38
- href: '/favicon.ico?v=bOXMwoKlJr',
16
+ href: `/favicon.ico?v=${CACHE_VERSION}`,
39
17
  rel: 'shortcut icon',
40
18
  },
41
19
  ],
42
- meta: [
43
- {
44
- content: '/assets/static/favicon/browserconfig.xml?v=bOXMwoKlJr',
45
- name: 'msapplication-config',
46
- },
47
- ],
48
20
  })
49
21
  }
@@ -1,6 +1,6 @@
1
1
  export const useGetServiceHref = () => {
2
2
  const host = useHost()
3
- const config = useRuntimeConfig()
3
+ const runtimeConfig = useRuntimeConfig()
4
4
 
5
5
  return ({
6
6
  isSsr = true,
@@ -16,32 +16,6 @@ export const useGetServiceHref = () => {
16
16
  isSsr,
17
17
  name,
18
18
  port,
19
- stagingHost: config.public.stagingHost,
19
+ stagingHost: runtimeConfig.public.vio.stagingHost,
20
20
  })
21
21
  }
22
-
23
- export const getServiceHref = ({
24
- host,
25
- isSsr = true,
26
- name,
27
- port,
28
- stagingHost,
29
- }: {
30
- host: string
31
- isSsr?: boolean
32
- name?: string
33
- port?: number
34
- stagingHost?: string
35
- }) => {
36
- const nameSubdomain = name?.replaceAll('_', '-')
37
- const nameSubdomainString = nameSubdomain ? `${nameSubdomain}.` : ''
38
- const portString = port ? `:${port}` : ''
39
-
40
- if (stagingHost) {
41
- return `https://${nameSubdomainString}${stagingHost}`
42
- } else if (isSsr && process.server) {
43
- return `http://${name}${portString}`
44
- } else {
45
- return `https://${nameSubdomainString}${getDomainTldPort(host)}`
46
- }
47
- }
@@ -1,34 +1,21 @@
1
1
  import { defu } from 'defu'
2
- import type { UseHeadSafeInput } from '@unhead/vue'
3
2
  import type { ComputedRef } from 'vue'
4
3
 
5
- export const useHeadDefault = (
6
- title: string | ComputedRef<string>,
7
- extension?: UseHeadSafeInput,
8
- ) => {
9
- const host = useHost()
10
- const router = useRouter()
4
+ export const useHeadDefault = ({
5
+ extension,
6
+ title,
7
+ }: {
8
+ extension?: Parameters<typeof useServerSeoMeta>[0]
9
+ title: string | ComputedRef<string>
10
+ }) => {
11
+ const attrs = useAttrs()
11
12
 
12
- const defaults: UseHeadSafeInput = {
13
- meta: [
14
- {
15
- id: 'og:title',
16
- property: 'og:title',
17
- content: title,
18
- },
19
- {
20
- id: 'og:url',
21
- property: 'og:url',
22
- content: `https://${host}${router.currentRoute.value.fullPath}`,
23
- },
24
- {
25
- id: 'twitter:title',
26
- property: 'twitter:title',
27
- content: title,
28
- },
29
- ],
13
+ const defaults: Parameters<typeof useServerSeoMeta>[0] = {
14
+ msapplicationConfig: `/assets/static/favicon/browserconfig.xml?v=${CACHE_VERSION}`,
30
15
  title,
16
+ twitterDescription: attrs['site-description'] as string,
17
+ twitterTitle: title,
31
18
  }
32
19
 
33
- return useServerHeadSafe(defu(extension, defaults))
20
+ useSeoMeta(defu(extension, defaults)) // TODO: use `useServerSeoMeta` when Nuxt 3.7 is used
34
21
  }
@@ -0,0 +1,23 @@
1
+ export const usePolyfills = () => {
2
+ const polyfills =
3
+ 'https://polyfill.io/v3/polyfill.min.js?features=Promise&flags=gated'
4
+
5
+ useServerHead({
6
+ link: [
7
+ {
8
+ rel: 'preload',
9
+ href: polyfills,
10
+ crossorigin: 'anonymous',
11
+ as: 'script',
12
+ 'data-testid': 'polyfill-preload',
13
+ },
14
+ ],
15
+ script: [
16
+ {
17
+ src: polyfills,
18
+ crossorigin: 'anonymous',
19
+ 'data-testid': 'polyfill-script',
20
+ },
21
+ ],
22
+ })
23
+ }
package/locales/de.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
- "globalLoading": "Lade...",
3
2
  "globalPlaceholderUrl": "https://websei.te",
4
3
  "globalStatusError": "Fehler",
4
+ "globalStatusLoading": "Lade...",
5
5
  "globalValidationFailed": "Bitte überprüfe deine Eingaben 🙈",
6
6
  "globalValidationFormatUrlHttps": "Muss mit \"https://\" beginnen",
7
7
  "globalValidationLength": "Zu lang",
package/locales/en.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
- "globalLoading": "Loading...",
3
2
  "globalPlaceholderUrl": "https://websi.te",
4
3
  "globalStatusError": "Error",
4
+ "globalStatusLoading": "Loading...",
5
5
  "globalValidationFailed": "Please check your input 🙈",
6
6
  "globalValidationFormatUrlHttps": "Must start with \"https://\"",
7
7
  "globalValidationLength": "Too long",
package/nuxt.config.ts CHANGED
@@ -1,167 +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
- 'https://' +
15
- (process.env.NUXT_PUBLIC_STACK_DOMAIN ||
16
- `${process.env.HOST || 'localhost'}:${
17
- !process.env.NODE_ENV || process.env.NODE_ENV === 'development'
18
- ? '3000'
19
- : '3001'
20
- }`)
21
-
22
16
  // https://v3.nuxtjs.org/api/configuration/nuxt.config
23
- export default defineNuxtConfig({
24
- alias: {
25
- sweetalert2: 'sweetalert2', // TODO: remove (https://github.com/nuxt/nuxt/issues/19426)
26
- },
27
- app: {
28
- head: {
29
- htmlAttrs: {
30
- lang: 'en', // fallback data to prevent invalid html at generation
31
- },
32
- titleTemplate: `%s`,
33
- title: SITE_NAME, // fallback data to prevent invalid html at generation
34
- },
35
- pageTransition: {
36
- name: 'layout',
37
- },
38
- },
39
- modules: [
40
- '@dargmuesli/nuxt-cookie-control',
41
- '@nuxtjs/color-mode',
42
- '@nuxtjs/html-validator',
43
- '@nuxtjs/i18n',
44
- '@nuxtjs/tailwindcss',
45
- '@pinia/nuxt',
46
- 'nuxt-seo-kit-module',
47
- ],
48
- nitro: {
49
- compressPublicAssets: true,
50
- },
51
- runtimeConfig: {
52
- public: {
53
- googleAnalyticsId: '', // set via environment variable `NUXT_PUBLIC_GOOGLE_ANALYTICS_ID` only
54
- i18n: {
55
- baseUrl: BASE_URL,
56
- },
57
- isInProduction: process.env.NODE_ENV === 'production',
58
- isTesting: false,
59
- stagingHost:
60
- process.env.NODE_ENV !== 'production' &&
61
- !process.env.NUXT_PUBLIC_STACK_DOMAIN
62
- ? 'jonas-thelemann.de'
63
- : undefined,
64
- },
65
- },
66
- typescript: {
67
- shim: false,
68
- strict: true,
69
- // tsConfig: {
70
- // compilerOptions: {
71
- // esModuleInterop: true,
72
- // },
73
- // },
74
- },
75
-
76
- // modules
77
- colorMode: {
78
- classSuffix: '',
79
- },
80
- cookieControl: {
81
- cookies: {
82
- necessary: [
83
- {
84
- description: {
85
- de: 'Dieser Cookie von uns speichert die Einstellungen, die in diesem Dialog getroffen werden.',
86
- en: 'This cookie of ours stores the settings made in this dialog.',
87
- },
88
- id: 'c',
89
- name: {
90
- de: 'Cookie-Präferenzen',
91
- en: 'Cookie Preferences',
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
92
29
  },
93
- targetCookieIds: ['ncc_c', 'ncc_e'],
30
+ titleTemplate: '%s', // fully set in `composables/useAppLayout.ts`
94
31
  },
95
- {
96
- description: {
97
- de: 'Dieser Cookie von uns speichert die Sprache, in der diese Webseite angezeigt wird.',
98
- en: "This cookie of ours stores the language that's used to display this website.",
99
- },
100
- id: 'l',
101
- name: {
102
- de: 'Sprache',
103
- en: 'Language',
104
- },
105
- targetCookieIds: [I18N_COOKIE_NAME],
32
+ pageTransition: {
33
+ name: 'layout',
106
34
  },
107
- {
108
- description: {
109
- de: 'Dieser Cookie von uns speichert die Zeitzone, in der sich das Gerät zu befinden scheint.',
110
- en: 'This cookie of ours saves the timezone in which the device appears to be located.',
111
- },
112
- id: 't',
113
- name: {
114
- de: 'Zeitzone',
115
- en: 'Timezone',
116
- },
117
- targetCookieIds: [TIMEZONE_COOKIE_NAME],
35
+ },
36
+ devtools: {
37
+ enabled: process.env.NODE_ENV !== 'production',
38
+ timeline: {
39
+ enabled: true,
118
40
  },
41
+ },
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',
119
51
  ],
120
- optional: [
121
- {
122
- description: {
123
- 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.',
124
- 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.',
52
+ nitro: {
53
+ compressPublicAssets: true,
54
+ },
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,
125
61
  },
126
- id: 'ga',
127
- links: {
128
- 'https://policies.google.com/privacy': 'Google Privacy Policy',
129
- 'https://policies.google.com/terms': 'Google Terms of Service',
62
+ },
63
+ },
64
+ typescript: {
65
+ shim: false,
66
+ tsConfig: {
67
+ compilerOptions: {
68
+ esModuleInterop: true,
69
+ // moduleResolution: 'bundler',
70
+ // noErrorTruncation: true,
130
71
  },
131
- name: 'Analytics',
132
- targetCookieIds: ['_ga', '_ga_K4R41W62BR'],
133
72
  },
134
- ],
135
- },
136
- locales: ['en', 'de'],
137
- },
138
- htmlValidator: {
139
- // failOnError: true,
140
- logLevel: 'warning',
141
- },
142
- i18n: {
143
- ...I18N_MODULE_CONFIG,
144
- defaultLocale: 'en', // Must be set for the default prefix_except_default prefix strategy.
145
- detectBrowserLanguage: {
146
- cookieKey: I18N_COOKIE_NAME,
147
- cookieSecure: true,
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
+ ],
134
+ },
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,
146
+ },
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
+ },
148
165
  },
149
- },
150
- linkChecker: {
151
- failOnError: false, // TODO: enable (https://github.com/harlan-zw/nuxt-seo-kit/issues/4#issuecomment-1434522124)
152
- },
153
- seoKit: {
154
- splash: false,
155
- },
156
- site: {
157
- debug: process.env.NODE_ENV === 'development',
158
- name: SITE_NAME,
159
- url: BASE_URL,
160
- },
161
- sitemap: {
162
- exclude: ['/api/**'],
163
- },
164
- tailwindcss: {
165
- cssPath: join(currentDir, './assets/css/tailwind.css'),
166
- },
167
- })
166
+ VIO_NUXT_BASE_CONFIG({
167
+ baseUrl: BASE_URL,
168
+ siteName: SITE_NAME,
169
+ stagingHost: 'localhost:3000',
170
+ }),
171
+ ),
172
+ )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dargmuesli/nuxt-vio",
3
- "version": "3.0.0-beta.2",
3
+ "version": "3.0.0-beta.20",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -15,9 +15,11 @@
15
15
  "composables",
16
16
  "layouts",
17
17
  "locales",
18
- "server",
19
18
  "pages",
20
19
  "plugins",
20
+ "server",
21
+ "store",
22
+ "types",
21
23
  "utils",
22
24
  "app.config.ts",
23
25
  "error.vue",
@@ -25,69 +27,67 @@
25
27
  "nuxt.config.ts",
26
28
  "tailwind.config.ts"
27
29
  ],
28
- "main": "./nuxt.config.ts",
30
+ "main": "nuxt.config.ts",
29
31
  "scripts": {
30
- "dev": "nuxi dev .playground",
31
- "build": "nuxi build .playground",
32
- "generate": "nuxi generate .playground",
33
- "preview": "nuxi preview .playground",
34
- "prepare": "pnpm husky install && pnpm nuxt prepare .playground",
35
- "lint": "pnpm lint:js && pnpm lint:ts && pnpm lint:style",
32
+ "build": "nuxt build .playground",
33
+ "dev": "nuxt dev .playground",
34
+ "generate": "nuxt generate .playground",
36
35
  "lint:fix": "pnpm lint:js --fix && pnpm lint:ts --fix && pnpm lint:style --fix",
37
36
  "lint:js": "eslint --cache --ext .js,.ts,.vue --ignore-path .gitignore .",
38
- "lint:staged": "pnpm lint-staged",
39
- "lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore",
40
- "lint:ts": "nuxt typecheck"
37
+ "lint:staged": "lint-staged",
38
+ "lint:style": "stylelint --cache {,**/}*.{vue,css} --ignore-path .gitignore",
39
+ "lint:ts": "nuxt typecheck",
40
+ "lint": "pnpm lint:js && pnpm lint:ts && pnpm lint:style",
41
+ "prepare": "nuxt prepare .playground",
42
+ "preview": "nuxt preview .playground"
41
43
  },
42
44
  "dependencies": {
43
- "@dargmuesli/nuxt-cookie-control": "6.1.5",
44
- "@dargmuesli/nuxt-vio": "link:",
45
- "@http-util/status-i18n": "0.7.0",
45
+ "@dargmuesli/nuxt-cookie-control": "6.4.1",
46
+ "@http-util/status-i18n": "0.8.1",
47
+ "@nuxt/image": "1.0.0-rc.1",
46
48
  "@nuxtjs/color-mode": "3.3.0",
47
49
  "@nuxtjs/html-validator": "1.5.2",
48
- "@nuxtjs/i18n": "8.0.0-rc.2",
50
+ "@nuxtjs/i18n": "8.0.0-rc.3",
49
51
  "@nuxtjs/tailwindcss": "6.8.0",
50
52
  "@pinia/nuxt": "0.4.11",
51
- "@tailwindcss/forms": "0.5.4",
53
+ "@tailwindcss/forms": "0.5.5",
52
54
  "@tailwindcss/typography": "0.5.9",
53
55
  "@urql/core": "4.1.1",
54
56
  "@urql/devtools": "2.0.3",
55
- "@urql/exchange-graphcache": "6.3.1",
57
+ "@urql/exchange-graphcache": "6.3.2",
56
58
  "@urql/vue": "1.1.2",
57
59
  "@vuelidate/core": "2.0.3",
60
+ "@vuelidate/validators": "2.0.3",
58
61
  "clipboard": "2.0.11",
59
- "dayjs": "1.11.9",
62
+ "dayjs": "2.0.0-alpha.4",
60
63
  "is-https": "4.0.0",
61
64
  "jose": "4.14.4",
62
- "marked": "7.0.0",
63
- "nuxt-seo-kit-module": "2.0.0-beta.9",
65
+ "marked": "7.0.4",
66
+ "nuxt-seo-kit-module": "2.0.0-beta.13",
64
67
  "pinia": "2.1.6",
65
- "sweetalert2": "11.7.20",
66
- "vue-gtag": "2.0.1"
68
+ "sweetalert2": "11.7.27",
69
+ "vue-gtag": "2.0.1",
70
+ "vue-tsc": "1.8.8"
67
71
  },
68
72
  "devDependencies": {
69
- "@commitlint/cli": "17.6.7",
70
- "@commitlint/config-conventional": "17.6.7",
71
73
  "@intlify/eslint-plugin-vue-i18n": "3.0.0-next.3",
72
74
  "@nuxtjs/eslint-config-typescript": "12.0.0",
73
75
  "@types/marked": "5.0.1",
74
- "eslint": "8.46.0",
76
+ "eslint": "8.47.0",
75
77
  "eslint-config-prettier": "9.0.0",
76
78
  "eslint-plugin-compat": "4.1.4",
77
79
  "eslint-plugin-nuxt": "4.0.0",
78
80
  "eslint-plugin-prettier": "5.0.0",
79
81
  "eslint-plugin-yml": "1.8.0",
80
- "husky": "8.0.3",
81
- "lint-staged": "13.2.3",
82
+ "lint-staged": "14.0.1",
82
83
  "nuxt": "3.6.5",
83
- "prettier": "3.0.1",
84
- "stylelint": "15.10.2",
84
+ "prettier": "3.0.2",
85
+ "prettier-plugin-tailwindcss": "0.5.3",
86
+ "stylelint": "15.10.3",
85
87
  "stylelint-config-recommended-vue": "1.5.0",
86
88
  "stylelint-config-standard": "34.0.0",
87
89
  "stylelint-no-unsupported-browser-features": "7.0.0",
88
90
  "tailwindcss": "3.3.3",
89
- "typescript": "5.1.6",
90
- "vue": "3.3.4",
91
- "vue-tsc": "1.8.8"
91
+ "vue": "3.3.4"
92
92
  }
93
93
  }