@stackonward/cli 1.3.2 → 1.4.0

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 (62) hide show
  1. package/dist/index.js +33 -34
  2. package/dist/index.js.map +1 -1
  3. package/dist/resources/components/nuxt/site-source/app/app.vue +4 -2
  4. package/dist/resources/components/nuxt/site-source/app/assets/css/site-shell.css +50 -50
  5. package/dist/resources/components/nuxt/site-source/app/components/{site/ApplicationHeader.vue → app/Header.vue} +3 -3
  6. package/dist/resources/components/nuxt/site-source/app/components/{site/ApplicationShell.vue → app/Shell.vue} +2 -2
  7. package/dist/resources/components/nuxt/site-source/app/components/{site/ApplicationSidebar.vue → app/Sidebar.vue} +2 -2
  8. package/dist/resources/components/nuxt/site-source/app/components/{ui/CheckoutStatus.vue → checkout/Status.vue} +8 -3
  9. package/dist/resources/components/nuxt/site-source/app/components/{ui/CheckoutSummary.vue → checkout/Summary.vue} +11 -11
  10. package/dist/resources/components/nuxt/site-source/app/components/consent/Banner.vue +63 -0
  11. package/dist/resources/components/nuxt/site-source/app/components/{site/ConsentSettingsButton.vue → consent/Settings.vue} +13 -8
  12. package/dist/resources/components/nuxt/site-source/app/components/{site/ContentArticlePage.vue → content/Article.vue} +3 -3
  13. package/dist/resources/components/nuxt/site-source/app/components/{site/ContentListPage.vue → content/List.vue} +2 -2
  14. package/dist/resources/components/nuxt/site-source/app/components/{ui/GoogleSignInButton.vue → google/SignInButton.vue} +3 -3
  15. package/dist/resources/components/nuxt/site-source/app/components/{site/LocaleSwitcher.vue → locale/Menu.vue} +2 -2
  16. package/dist/resources/components/nuxt/site-source/app/components/site/{MarketingFooter.vue → Footer.vue} +8 -8
  17. package/dist/resources/components/nuxt/site-source/app/components/site/{MarketingHeader.vue → Header.vue} +27 -31
  18. package/dist/resources/components/nuxt/site-source/app/components/site/Shell.vue +29 -0
  19. package/dist/resources/components/nuxt/site-source/app/components/{site/ThemeSwitcher.vue → theme/Menu.vue} +31 -27
  20. package/dist/resources/components/nuxt/site-source/app/components/ui/{BaseButton.vue → Button.vue} +1 -8
  21. package/dist/resources/components/nuxt/site-source/app/components/ui/InfiniteScroll.vue +2 -2
  22. package/dist/resources/components/nuxt/site-source/app/components/{ui/YoutubeEmbed.vue → youtube/Embed.vue} +10 -2
  23. package/dist/resources/components/nuxt/site-source/app/composables/useConsent.ts +8 -10
  24. package/dist/resources/components/nuxt/site-source/app/composables/useNavigation.ts +9 -14
  25. package/dist/resources/components/nuxt/site-source/app/composables/useSeo.ts +3 -1
  26. package/dist/resources/components/nuxt/site-source/app/composables/useSiteShell.ts +19 -22
  27. package/dist/resources/components/nuxt/site-source/app/consent/types.ts +59 -0
  28. package/dist/resources/components/nuxt/site-source/app/content/types.ts +17 -0
  29. package/dist/resources/components/nuxt/site-source/app/layouts/app.vue +2 -2
  30. package/dist/resources/components/nuxt/site-source/app/layouts/default.vue +2 -2
  31. package/dist/resources/components/nuxt/site-source/app/navigation/types.ts +68 -0
  32. package/dist/resources/components/nuxt/site-source/app/plugins/consent.ts +2 -2
  33. package/dist/resources/components/nuxt/site-source/app/site/config.ts +35 -0
  34. package/dist/resources/components/registry.json +63 -51
  35. package/dist/resources/registry.json +6 -6
  36. package/dist/resources/templates/nuxt/README.md +3 -3
  37. package/dist/resources/templates/nuxt/app/app.config.ts +1 -1
  38. package/dist/resources/templates/nuxt/app/i18n/locales/en.json +1 -1
  39. package/dist/resources/templates/nuxt/app/pages/app/index.vue +1 -1
  40. package/dist/resources/templates/nuxt/app/pages/authors/[slug].vue +2 -2
  41. package/dist/resources/templates/nuxt/app/pages/blog/[slug].vue +4 -3
  42. package/dist/resources/templates/nuxt/app/pages/blog/category/[category].vue +2 -2
  43. package/dist/resources/templates/nuxt/app/pages/blog/index.vue +2 -2
  44. package/dist/resources/templates/nuxt/app/pages/legal/cookies.vue +3 -3
  45. package/dist/resources/templates/nuxt/app/pages/legal/privacy.vue +2 -2
  46. package/dist/resources/templates/nuxt/app/pages/legal/terms.vue +2 -2
  47. package/dist/resources/templates/nuxt/app/pages/ui/index.vue +45 -45
  48. package/dist/resources/templates/nuxt/nuxt.config.ts +4 -10
  49. package/dist/resources/templates/nuxt/package.json +2 -2
  50. package/dist/resources/templates/nuxt/test/e2e/rendering.test.ts +1 -0
  51. package/dist/resources/templates/nuxt/test/unit/consent.test.ts +4 -7
  52. package/package.json +2 -2
  53. package/dist/resources/components/nuxt/site-source/app/components/site/CookieConsent.vue +0 -58
  54. package/dist/resources/components/nuxt/site-source/app/components/site/MarketingShell.vue +0 -35
  55. package/dist/resources/components/nuxt/site-source/app/types/site-shell.ts +0 -172
  56. /package/dist/resources/components/nuxt/site-source/app/components/{site/StaticPage.vue → content/Document.vue} +0 -0
  57. /package/dist/resources/components/nuxt/site-source/app/components/{site/ToastViewport.vue → feedback/Toast.vue} +0 -0
  58. /package/dist/resources/components/nuxt/site-source/app/components/site/{SiteBrand.vue → Brand.vue} +0 -0
  59. /package/dist/resources/components/nuxt/site-source/app/components/ui/{BaseGradientBorder.vue → GradientBorder.vue} +0 -0
  60. /package/dist/resources/components/nuxt/site-source/app/components/ui/{BaseModal.vue → Modal.vue} +0 -0
  61. /package/dist/resources/components/nuxt/site-source/app/components/ui/{BasePopover.vue → Popover.vue} +0 -0
  62. /package/dist/resources/components/nuxt/site-source/app/components/ui/{BaseText.vue → Text.vue} +0 -0
@@ -0,0 +1,35 @@
1
+ import type { ConsentConfig, StorageDisclosure } from "~/consent/types";
2
+ import type {
3
+ FooterGroupConfig,
4
+ NavGroupConfig,
5
+ NavItemConfig,
6
+ SocialLinkConfig,
7
+ } from "~/navigation/types";
8
+
9
+ export interface Config {
10
+ readonly name: string;
11
+ readonly descriptionKey: string;
12
+ readonly url: string;
13
+ readonly defaultLocale: string;
14
+ readonly homePath: string;
15
+ readonly appPath: string;
16
+ readonly logoText: string;
17
+ readonly primaryActionLabelKey: string;
18
+ readonly secondaryActionLabelKey: string;
19
+ readonly secondaryActionPath: string;
20
+ readonly consent: ConsentConfig;
21
+ readonly storageDisclosures: readonly StorageDisclosure[];
22
+ readonly navigation: {
23
+ readonly main: readonly NavItemConfig[];
24
+ readonly app: readonly NavGroupConfig[];
25
+ readonly footer: readonly FooterGroupConfig[];
26
+ readonly legal: readonly NavItemConfig[];
27
+ readonly social: readonly SocialLinkConfig[];
28
+ };
29
+ readonly content: {
30
+ readonly blogPath: string;
31
+ readonly authorPath: string;
32
+ readonly previewPath: string;
33
+ readonly sitemapSourcePath: string;
34
+ };
35
+ }
@@ -144,7 +144,7 @@
144
144
  },
145
145
  "nuxt-site-source": {
146
146
  "name": "Nuxt Site Source",
147
- "description": "Editable Nuxt product-site source: app shell, marketing shell, content shell, UI primitives, composables, plugins, theme tokens, and CSS.",
147
+ "description": "Editable Nuxt product-site source: site shell, app shell, content shell, UI primitives, composables, plugins, theme tokens, and CSS.",
148
148
  "installContext": "template",
149
149
  "files": [
150
150
  {
@@ -164,108 +164,108 @@
164
164
  "target": "app/assets/icons/common/.gitkeep"
165
165
  },
166
166
  {
167
- "path": "site-source/app/components/site/ApplicationHeader.vue",
168
- "target": "app/components/site/ApplicationHeader.vue"
167
+ "path": "site-source/app/components/app/Header.vue",
168
+ "target": "app/components/app/Header.vue"
169
169
  },
170
170
  {
171
- "path": "site-source/app/components/site/ApplicationShell.vue",
172
- "target": "app/components/site/ApplicationShell.vue"
171
+ "path": "site-source/app/components/app/Shell.vue",
172
+ "target": "app/components/app/Shell.vue"
173
173
  },
174
174
  {
175
- "path": "site-source/app/components/site/ApplicationSidebar.vue",
176
- "target": "app/components/site/ApplicationSidebar.vue"
175
+ "path": "site-source/app/components/app/Sidebar.vue",
176
+ "target": "app/components/app/Sidebar.vue"
177
177
  },
178
178
  {
179
179
  "path": "site-source/app/components/site/BackToTop.vue",
180
180
  "target": "app/components/site/BackToTop.vue"
181
181
  },
182
182
  {
183
- "path": "site-source/app/components/site/ContentArticlePage.vue",
184
- "target": "app/components/site/ContentArticlePage.vue"
183
+ "path": "site-source/app/components/content/Article.vue",
184
+ "target": "app/components/content/Article.vue"
185
185
  },
186
186
  {
187
- "path": "site-source/app/components/site/ContentListPage.vue",
188
- "target": "app/components/site/ContentListPage.vue"
187
+ "path": "site-source/app/components/content/List.vue",
188
+ "target": "app/components/content/List.vue"
189
189
  },
190
190
  {
191
- "path": "site-source/app/components/site/ConsentSettingsButton.vue",
192
- "target": "app/components/site/ConsentSettingsButton.vue"
191
+ "path": "site-source/app/components/consent/Settings.vue",
192
+ "target": "app/components/consent/Settings.vue"
193
193
  },
194
194
  {
195
- "path": "site-source/app/components/site/CookieConsent.vue",
196
- "target": "app/components/site/CookieConsent.vue"
195
+ "path": "site-source/app/components/consent/Banner.vue",
196
+ "target": "app/components/consent/Banner.vue"
197
197
  },
198
198
  {
199
- "path": "site-source/app/components/site/LocaleSwitcher.vue",
200
- "target": "app/components/site/LocaleSwitcher.vue"
199
+ "path": "site-source/app/components/locale/Menu.vue",
200
+ "target": "app/components/locale/Menu.vue"
201
201
  },
202
202
  {
203
- "path": "site-source/app/components/site/MarketingFooter.vue",
204
- "target": "app/components/site/MarketingFooter.vue"
203
+ "path": "site-source/app/components/site/Footer.vue",
204
+ "target": "app/components/site/Footer.vue"
205
205
  },
206
206
  {
207
- "path": "site-source/app/components/site/MarketingHeader.vue",
208
- "target": "app/components/site/MarketingHeader.vue"
207
+ "path": "site-source/app/components/site/Header.vue",
208
+ "target": "app/components/site/Header.vue"
209
209
  },
210
210
  {
211
- "path": "site-source/app/components/site/MarketingShell.vue",
212
- "target": "app/components/site/MarketingShell.vue"
211
+ "path": "site-source/app/components/site/Shell.vue",
212
+ "target": "app/components/site/Shell.vue"
213
213
  },
214
214
  {
215
- "path": "site-source/app/components/site/SiteBrand.vue",
216
- "target": "app/components/site/SiteBrand.vue"
215
+ "path": "site-source/app/components/site/Brand.vue",
216
+ "target": "app/components/site/Brand.vue"
217
217
  },
218
218
  {
219
- "path": "site-source/app/components/site/StaticPage.vue",
220
- "target": "app/components/site/StaticPage.vue"
219
+ "path": "site-source/app/components/content/Document.vue",
220
+ "target": "app/components/content/Document.vue"
221
221
  },
222
222
  {
223
- "path": "site-source/app/components/site/ToastViewport.vue",
224
- "target": "app/components/site/ToastViewport.vue"
223
+ "path": "site-source/app/components/feedback/Toast.vue",
224
+ "target": "app/components/feedback/Toast.vue"
225
225
  },
226
226
  {
227
- "path": "site-source/app/components/site/ThemeSwitcher.vue",
228
- "target": "app/components/site/ThemeSwitcher.vue"
227
+ "path": "site-source/app/components/theme/Menu.vue",
228
+ "target": "app/components/theme/Menu.vue"
229
229
  },
230
230
  {
231
- "path": "site-source/app/components/ui/BaseButton.vue",
232
- "target": "app/components/ui/BaseButton.vue"
231
+ "path": "site-source/app/components/ui/Button.vue",
232
+ "target": "app/components/ui/Button.vue"
233
233
  },
234
234
  {
235
- "path": "site-source/app/components/ui/BaseGradientBorder.vue",
236
- "target": "app/components/ui/BaseGradientBorder.vue"
235
+ "path": "site-source/app/components/ui/GradientBorder.vue",
236
+ "target": "app/components/ui/GradientBorder.vue"
237
237
  },
238
238
  {
239
- "path": "site-source/app/components/ui/BaseModal.vue",
240
- "target": "app/components/ui/BaseModal.vue"
239
+ "path": "site-source/app/components/ui/Modal.vue",
240
+ "target": "app/components/ui/Modal.vue"
241
241
  },
242
242
  {
243
- "path": "site-source/app/components/ui/BasePopover.vue",
244
- "target": "app/components/ui/BasePopover.vue"
243
+ "path": "site-source/app/components/ui/Popover.vue",
244
+ "target": "app/components/ui/Popover.vue"
245
245
  },
246
246
  {
247
- "path": "site-source/app/components/ui/BaseText.vue",
248
- "target": "app/components/ui/BaseText.vue"
247
+ "path": "site-source/app/components/ui/Text.vue",
248
+ "target": "app/components/ui/Text.vue"
249
249
  },
250
250
  {
251
- "path": "site-source/app/components/ui/CheckoutStatus.vue",
252
- "target": "app/components/ui/CheckoutStatus.vue"
251
+ "path": "site-source/app/components/checkout/Status.vue",
252
+ "target": "app/components/checkout/Status.vue"
253
253
  },
254
254
  {
255
- "path": "site-source/app/components/ui/CheckoutSummary.vue",
256
- "target": "app/components/ui/CheckoutSummary.vue"
255
+ "path": "site-source/app/components/checkout/Summary.vue",
256
+ "target": "app/components/checkout/Summary.vue"
257
257
  },
258
258
  {
259
- "path": "site-source/app/components/ui/GoogleSignInButton.vue",
260
- "target": "app/components/ui/GoogleSignInButton.vue"
259
+ "path": "site-source/app/components/google/SignInButton.vue",
260
+ "target": "app/components/google/SignInButton.vue"
261
261
  },
262
262
  {
263
263
  "path": "site-source/app/components/ui/InfiniteScroll.vue",
264
264
  "target": "app/components/ui/InfiniteScroll.vue"
265
265
  },
266
266
  {
267
- "path": "site-source/app/components/ui/YoutubeEmbed.vue",
268
- "target": "app/components/ui/YoutubeEmbed.vue"
267
+ "path": "site-source/app/components/youtube/Embed.vue",
268
+ "target": "app/components/youtube/Embed.vue"
269
269
  },
270
270
  {
271
271
  "path": "site-source/app/composables/useCheckout.ts",
@@ -364,8 +364,20 @@
364
364
  "target": "app/theme/tooltip.ts"
365
365
  },
366
366
  {
367
- "path": "site-source/app/types/site-shell.ts",
368
- "target": "app/types/site-shell.ts"
367
+ "path": "site-source/app/consent/types.ts",
368
+ "target": "app/consent/types.ts"
369
+ },
370
+ {
371
+ "path": "site-source/app/content/types.ts",
372
+ "target": "app/content/types.ts"
373
+ },
374
+ {
375
+ "path": "site-source/app/navigation/types.ts",
376
+ "target": "app/navigation/types.ts"
377
+ },
378
+ {
379
+ "path": "site-source/app/site/config.ts",
380
+ "target": "app/site/config.ts"
369
381
  }
370
382
  ],
371
383
  "dependencies": [],
@@ -9,19 +9,19 @@
9
9
  "name": "@stackonward/analytics-core",
10
10
  "description": "Provider-neutral analytics pipeline and browser autocapture",
11
11
  "type": "npm",
12
- "version": "^0.2.1"
12
+ "version": "^0.3.0"
13
13
  },
14
14
  "@stackonward/analytics-nuxt": {
15
15
  "name": "@stackonward/analytics-nuxt",
16
16
  "description": "Provider-neutral Nuxt analytics lifecycle",
17
17
  "type": "npm",
18
- "version": "^0.1.2"
18
+ "version": "^0.2.0"
19
19
  },
20
20
  "@stackonward/cli": {
21
21
  "name": "@stackonward/cli",
22
22
  "description": "StackOnward project and resource CLI",
23
23
  "type": "npm",
24
- "version": "^1.3.2"
24
+ "version": "^1.4.0"
25
25
  },
26
26
  "@stackonward/cms-client": {
27
27
  "name": "@stackonward/cms-client",
@@ -69,13 +69,13 @@
69
69
  "name": "@stackonward/google-tag-manager-nuxt",
70
70
  "description": "Consent-aware Google Tag Manager analytics integration for Nuxt",
71
71
  "type": "npm",
72
- "version": "^0.2.3"
72
+ "version": "^0.3.0"
73
73
  },
74
74
  "@stackonward/google-tag-manager": {
75
75
  "name": "@stackonward/google-tag-manager",
76
76
  "description": "Google Tag Manager transport and declarative container generator",
77
77
  "type": "npm",
78
- "version": "^0.1.1"
78
+ "version": "^0.2.0"
79
79
  },
80
80
  "@stackonward/identity-browser": {
81
81
  "name": "@stackonward/identity-browser",
@@ -111,7 +111,7 @@
111
111
  "name": "@stackonward/nuxt-site-shell",
112
112
  "description": "Brand-free Nuxt product-site shell",
113
113
  "type": "layer",
114
- "version": "^0.2.0"
114
+ "version": "^0.3.0"
115
115
  },
116
116
  "@stackonward/onex-cms-client": {
117
117
  "name": "@stackonward/onex-cms-client",
@@ -3,8 +3,8 @@
3
3
  This template extends `@stackonward/nuxt-site-shell` for Nuxt module wiring and installs editable source from the component registry, so a new project starts with:
4
4
 
5
5
  - Nuxt UI and Tailwind theme wiring.
6
- - Local source files for marketing, app, content and static page shells under `app/layouts` and `app/components`.
7
- - Editable base components such as `BaseButton`, `BaseModal`, `BaseText`, `BasePopover`, `GoogleSignInButton`, `YoutubeEmbed`, `InfiniteScroll`, `CheckoutSummary` and `CheckoutStatus`.
6
+ - Local source files for site, app and content shells under `app/layouts` and owner-scoped component directories.
7
+ - Owner-scoped components such as `UiButton`, `UiModal`, `UiText`, `UiPopover`, `GoogleSignInButton`, `YoutubeEmbed`, `UiInfiniteScroll`, `CheckoutSummary` and `CheckoutStatus`.
8
8
  - Editable composables and plugins for Google Identity, consent presentation, privacy-enhanced YouTube embeds and provider-free checkout redirects.
9
9
  - Versioned global analytics through `@stackonward/google-tag-manager-nuxt`, including consent gating, SPA page views, element/link autocapture, manual events and product-configurable capture rules.
10
10
  - Local Nuxt UI theme overrides under `app/theme` and CSS tokens under `app/assets/css`.
@@ -16,7 +16,7 @@ Product-specific copy, assets, auth, analytics, CMS providers and business workf
16
16
 
17
17
  Set `NUXT_PUBLIC_GTM_ID` to a published GTM container such as `GTM-ABC123`. The integration remains disabled when the ID is empty. The included consent UI restores the product-owned local decision and starts analytics only after acceptance.
18
18
 
19
- Global capture defaults and product overrides live under `googleTagManager.analytics` in `nuxt.config.ts`. Products can configure selectors, internal domains, tracked link types, module naming/rules, event names, device breakpoints and privacy-sensitive field capture. Business event names remain typed in product source.
19
+ Global capture defaults and product overrides live under `gtm.analytics` in `nuxt.config.ts`. Products can configure selectors, internal domains, tracked link types, module naming/rules, event names, device breakpoints and privacy-sensitive field capture. Business event names remain typed in product source.
20
20
 
21
21
  Create a product-owned `analytics.google.json` with the GA4 measurement ID and any product event parameters, then generate the GTM import artifact without granting account credentials to the application:
22
22
 
@@ -51,7 +51,7 @@ export default defineAppConfig({
51
51
  },
52
52
  ],
53
53
  navigation: {
54
- marketing: [
54
+ main: [
55
55
  { labelKey: "navigation.items.product", to: "/" },
56
56
  {
57
57
  labelKey: "navigation.items.solutions",
@@ -7,7 +7,7 @@
7
7
  "home": "Home",
8
8
  "backToTop": "Back to top",
9
9
  "skipToContent": "Skip to content",
10
- "openMarketingSite": "View site",
10
+ "openSite": "View site",
11
11
  "description": "A premium product media workspace for generating product images, campaign sets, and short-form ad videos."
12
12
  },
13
13
  "actions": {
@@ -26,7 +26,7 @@ useSeo({
26
26
  <p>Production board</p>
27
27
  <h1>Creative output queue</h1>
28
28
  </div>
29
- <BaseButton label="New campaign" leading-icon="i-lucide-plus" />
29
+ <UiButton label="New campaign" leading-icon="i-lucide-plus" />
30
30
  </header>
31
31
 
32
32
  <div class="workspace-page__grid">
@@ -27,11 +27,11 @@ useSeo({
27
27
  </script>
28
28
 
29
29
  <template>
30
- <ContentListPage
30
+ <ContentList
31
31
  :title="author"
32
32
  description="Use this route shape for author profiles and authored content from the selected provider."
33
33
  :items="posts"
34
34
  >
35
35
  <template #eyebrow>Author</template>
36
- </ContentListPage>
36
+ </ContentList>
37
37
  </template>
@@ -36,10 +36,11 @@ useSeo({
36
36
  </script>
37
37
 
38
38
  <template>
39
- <ContentArticlePage :article="article" :related="related">
39
+ <ContentArticle :article="article" :related="related">
40
40
  <p>
41
41
  A paid creative product needs content that sells outcomes before it explains implementation.
42
- Use this article shape for launch guides, comparison pages, creator education, and SEO content.
42
+ Use this article shape for launch guides, comparison pages, creator education, and SEO
43
+ content.
43
44
  </p>
44
45
  <h2>Production Boundary</h2>
45
46
  <p>
@@ -51,5 +52,5 @@ useSeo({
51
52
  Use the SEO composable for page title, description, canonical path, robots rules, and social
52
53
  image values so each campaign page can target a specific commercial search intent.
53
54
  </p>
54
- </ContentArticlePage>
55
+ </ContentArticle>
55
56
  </template>
@@ -28,11 +28,11 @@ useSeo({
28
28
  </script>
29
29
 
30
30
  <template>
31
- <ContentListPage
31
+ <ContentList
32
32
  :title="`${categoryLabel} resources`"
33
33
  description="Use this route shape for product education, launch notes, and SEO category pages."
34
34
  :items="posts"
35
35
  >
36
36
  <template #eyebrow>Category</template>
37
- </ContentListPage>
37
+ </ContentList>
38
38
  </template>
@@ -36,11 +36,11 @@ useSeo({
36
36
  </script>
37
37
 
38
38
  <template>
39
- <ContentListPage
39
+ <ContentList
40
40
  title="Content hub"
41
41
  description="Playbooks, production notes, and design-system guidance for a paid creative product."
42
42
  :items="posts"
43
43
  >
44
44
  <template #eyebrow>Resources</template>
45
- </ContentListPage>
45
+ </ContentList>
46
46
  </template>
@@ -10,7 +10,7 @@ useSeo({
10
10
  </script>
11
11
 
12
12
  <template>
13
- <StaticPage
13
+ <ContentDocument
14
14
  :title="t('legal.cookies.title')"
15
15
  :description="t('legal.cookies.description')"
16
16
  :updated-at="t('legal.cookies.updated')"
@@ -52,7 +52,7 @@ useSeo({
52
52
  <section>
53
53
  <h2>{{ t("legal.cookies.choicesTitle") }}</h2>
54
54
  <p>{{ t("legal.cookies.choices") }}</p>
55
- <ConsentSettingsButton />
55
+ <ConsentSettings />
56
56
  </section>
57
57
 
58
58
  <section>
@@ -64,5 +64,5 @@ useSeo({
64
64
  <h2>{{ t("legal.cookies.contactTitle") }}</h2>
65
65
  <p>{{ t("legal.cookies.contact") }}</p>
66
66
  </section>
67
- </StaticPage>
67
+ </ContentDocument>
68
68
  </template>
@@ -7,7 +7,7 @@ useSeo({
7
7
  </script>
8
8
 
9
9
  <template>
10
- <StaticPage title="Privacy" description="Replace this sample with approved privacy text.">
10
+ <ContentDocument title="Privacy" description="Replace this sample with approved privacy text.">
11
11
  <p>
12
12
  This generated page provides structure only. Consumer projects must supply reviewed privacy
13
13
  disclosures for their data collection, processors, and retention policy.
@@ -17,5 +17,5 @@ useSeo({
17
17
  Add concrete categories of data, processing purposes, retention periods, user rights, contact
18
18
  channels, and regional disclosures.
19
19
  </p>
20
- </StaticPage>
20
+ </ContentDocument>
21
21
  </template>
@@ -7,7 +7,7 @@ useSeo({
7
7
  </script>
8
8
 
9
9
  <template>
10
- <StaticPage title="Terms" description="Replace this sample with approved legal text.">
10
+ <ContentDocument title="Terms" description="Replace this sample with approved legal text.">
11
11
  <p>
12
12
  This generated page provides structure only. Consumer projects must supply reviewed terms that
13
13
  match their product, jurisdiction, and operating model.
@@ -17,5 +17,5 @@ useSeo({
17
17
  Add the binding contract for account use, acceptable use, billing if applicable, termination,
18
18
  and support channels.
19
19
  </p>
20
- </StaticPage>
20
+ </ContentDocument>
21
21
  </template>