Skip to content

Commit c053c37

Browse files
chore(core): remove orphan PageTabs + clean post-i18n doc drift (#4192)
* chore(core): remove orphan PageTabs + clean post-i18n doc drift - delete core.pageTabs.component.{vue,test} (zero consumers since SurfaceTabBar) - MIGRATIONS.md: remove dangling src/lib/plugins/i18n.js reference; add PageTabs drop note - billing.static-content.js: fix 3 stale "fallback to i18n keys" comments Closes audit P1 (2026-05-21). * docs(billing): fix MIGRATIONS component name + static-content JSDoc accuracy (CR) - MIGRATIONS.md: replace SurfaceTabBar → CoreSurfaceTabBar, make downstream deletion paths explicit (vue + test file separately) - static-content.js faqs @type: add string|null to subtitle, describe falsy fallback - static-content.js tabs: clarify two-layer fallback (devkit default 'Extras' vs view hardcoded 'Units' when field absent/falsy) - static-content.js header: wording updated to 'any falsy value (including empty string) triggers view fallback'
1 parent e7434c9 commit c053c37

4 files changed

Lines changed: 23 additions & 145 deletions

File tree

MIGRATIONS.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,18 @@ This migration is **opt-in per module** — coordinate with the maintainer of ea
266266

267267
---
268268

269+
## Drop CorePageTabsComponent (2026-05-21)
270+
271+
The `core.pageTabs.component.vue` introduced in PR #4183 was abandoned 2h after merge in favor of `CoreSurfaceTabBar` (PR #4187). The component had zero consumers and is removed.
272+
273+
**Downstream action:** if you propagated the files via `/update-stack`, delete both:
274+
- `src/modules/core/components/core.pageTabs.component.vue`
275+
- `src/modules/core/tests/core.pageTabs.component.unit.tests.js`
276+
277+
Use `CoreSurfaceTabBar` (`core.surfaceTabBar.component.vue`) for any tab layouts.
278+
279+
---
280+
269281
## Legal module + cookie consent banner (2026-05-07)
270282

271283
**Non-breaking for default consumers.** New `modules/legal/` ships:
@@ -285,7 +297,7 @@ Disabled by default. Enable in `modules/legal/config/legal.{env}.config.js` (or
285297
- MODIFIED: `src/modules/core/components/core.footer.component.vue` — auto-injects a "Legal" section when `legal.cookieConsent.enabled` or any `legal.pages.items[*].enabled` is true. Also fixes a pre-existing bug where the footer was hidden on hard-load (the `$route` watcher didn't fire on initial mount); a `created()` hook now initializes `enabled` from `$route.meta.footer`.
286298
- MODIFIED: `src/modules/app/app.vue` — global mount of `<legalCookieBanner />`.
287299
- MODIFIED: `src/modules/app/app.router.js` — concatenates legal routes (returns empty when `pages.enabled: false`).
288-
- MODIFIED: `src/lib/plugins/i18n.js` — imports `legalEn` / `legalFr`.
300+
- ~~MODIFIED: `src/lib/plugins/i18n.js` — imports `legalEn` / `legalFr`.~~ **Superseded:** `src/lib/plugins/i18n.js` was removed entirely in PR #4169 (i18n removal). Legal strings are now hardcoded in English directly in the legal components.
289301

290302
### Action for downstream projects
291303

src/modules/billing/config/billing.static-content.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,10 @@ export const packs = [
163163
];
164164

165165
/**
166-
* @desc FAQ section content. Title + subtitle are optional (fallback to i18n).
167-
* @type {{ title?: string, subtitle?: string, content: Array<{id: string, question: string, answer: string}> }}
166+
* @desc FAQ section content. `title` and `subtitle` are optional; any falsy value (including
167+
* `null` or empty string) triggers the view's hardcoded fallback:
168+
* `'Frequently asked questions'` for title, `null` (no subtitle rendered) for subtitle.
169+
* @type {{ title?: string|null, subtitle?: string|null, content: Array<{id: string, question: string, answer: string}> }}
168170
*/
169171
export const faqs = {
170172
title: 'Frequently asked questions',
@@ -190,9 +192,10 @@ export const faqs = {
190192

191193
/**
192194
* @desc Configurable tab labels (used in 'both-tabs' mode).
193-
* Each field is optional — when omitted the view falls back to i18n keys
194-
* `billing.pricing.tabs.plans` / `billing.pricing.tabs.units`.
195+
* This devkit default ships `plans: 'Plans'` / `units: 'Extras'`.
195196
* Downstream projects can override either or both labels per project.
197+
* The view's hardcoded fallback (`'Plans'` / `'Units'`) only applies when
198+
* the field is entirely absent or falsy — it is not reached under the devkit default.
196199
* @type {{ plans?: string, units?: string }}
197200
*/
198201
export const tabs = {
@@ -201,8 +204,9 @@ export const tabs = {
201204
};
202205

203206
/**
204-
* @desc Page header copy. When `null`/absent, falls back to i18n keys
205-
* `billing.pricing.title` / `billing.pricing.subtitle`.
207+
* @desc Page header copy. Any falsy value (including `null`, `undefined`, or empty string)
208+
* triggers the view's hardcoded English fallback
209+
* (`'Pricing'` / `'Choose the plan that fits your needs.'`).
206210
* @type {{ title?: string|null, subtitle?: string|null }}
207211
*/
208212
export const header = {

src/modules/core/components/core.pageTabs.component.vue

Lines changed: 0 additions & 79 deletions
This file was deleted.

src/modules/core/tests/core.pageTabs.component.unit.tests.js

Lines changed: 0 additions & 59 deletions
This file was deleted.

0 commit comments

Comments
 (0)