Simpl-Resultat/src/pages
le king fu b89074e6c6 feat(gating): multi-profile gate (Base+), non-destructive
A Free user keeps full access to their active profile; profiles beyond
it show a lock in ProfileSwitcher and open an upsell dialog instead of
switching. Creating a profile beyond the first is locked at the single
creation point, ProfileFormModal (reached from both ProfileSwitcher and
ProfileSelectionPage), with a race guard in handleSave covering the
license boot window. Both creation entries stay visible with a lock
(locked-not-hidden). Nothing is ever removed from profiles.json — an
upgrade to Base/Premium makes every profile reappear untouched.

- New pure predicates in src/shared/profileGate.ts
  (isProfileSwitchLocked, isProfileCreationLocked) + 10 vitest
- ProfileFormModal upsell panel reuses upsell.* keys WITHOUT UpsellGate:
  the modal also opens from ProfileSelectionPage, which renders outside
  BrowserRouter, where UpsellGate's useNavigate would throw
- UpsellGate gains an optional onNavigate callback so the
  ProfileSwitcher upsell dialog can close itself after navigation
- No lock while the license is loading (anti-flash, ready guard);
  zero new i18n keys; no DB migration

Resolves #300

Generated autonomously by /autopilot run of 2026-07-20

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 22:24:23 -04:00
..
settings refactor(settings): split monolithic Settings page into 3 sub-pages (#190) 2026-05-03 09:50:02 -04:00
AccountsPage.tsx feat(balance): account form vehicle field + category rename via custom_label (#203) 2026-06-01 20:50:40 -04:00
AdjustmentsPage.tsx fix: improve split indicator visibility and adjustments layout 2026-02-17 02:01:15 +00:00
BalancePage.tsx feat(balance): tile-based landing hub + reachable account management 2026-07-04 17:43:43 -04:00
BudgetPage.tsx feat(reports): adopt shared FilterPanel on Compare and Budget 2026-07-11 15:52:21 -04:00
CategoriesMigrationPage.tsx refactor(settings): split monolithic Settings page into 3 sub-pages (#190) 2026-05-03 09:50:02 -04:00
CategoriesPage.tsx Bump version to 0.6.2 — Section subtotals and category detail fix 2026-03-06 16:22:36 -05:00
CategoriesStandardGuidePage.tsx refactor(categories): unify both category trees' collapse state onto useCollapsibleGroups 2026-07-15 21:30:17 -04:00
ChangelogPage.tsx refactor(settings): split monolithic Settings page into 3 sub-pages (#190) 2026-05-03 09:50:02 -04:00
DashboardPage.tsx feat(dashboard): converge home page on the Cartes report model 2026-07-11 17:13:23 -04:00
DocsPage.tsx refactor(settings): split monolithic Settings page into 3 sub-pages (#190) 2026-05-03 09:50:02 -04:00
ImportPage.tsx feat: persist template selection and add update template button 2026-02-15 13:16:55 +00:00
ProfileSelectionPage.tsx feat(gating): multi-profile gate (Base+), non-destructive 2026-07-20 22:24:23 -04:00
ReportsCartesPage.tsx feat(reports/cartes): Mensuel/YTD toggle on KPI cards + user guide section (#102) 2026-04-19 09:49:21 -04:00
ReportsCategoryPage.tsx feat: category zoom + secure AddKeywordDialog with context menu (#74) 2026-04-14 15:09:17 -04:00
ReportsComparePage.tsx feat(reports): adopt shared FilterPanel on Compare and Budget 2026-07-11 15:52:21 -04:00
ReportsHighlightsPage.tsx feat(reports/highlights): default reference month to previous month + YTD current year, user-changeable (#106) 2026-04-19 08:28:30 -04:00
ReportsPage.tsx feat(gating): gate routes and Sidebar for budget, advanced reports, balance 2026-07-20 22:12:51 -04:00
ReportsTrendsPage.tsx feat(reports): adopt shared FilterPanel on the Trends page 2026-07-11 15:41:13 -04:00
SnapshotEditPage.tsx feat(balance): CSV import of holdings in detailed snapshot 2026-07-04 18:04:12 -04:00
TransactionsPage.tsx feat(transactions): inline transfer icon + FK error message 2026-04-25 16:38:46 -04:00