Simpl-Resultat/src/components/shared
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
..
CategoryCombobox.test.ts fix(reports): render category combobox in hierarchical DFS order (#126) 2026-04-21 20:58:53 -04:00
CategoryCombobox.tsx fix(reports): render category combobox in hierarchical DFS order (#126) 2026-04-21 20:58:53 -04:00
ChartContextMenu.tsx refactor: remove pivot report, add sub-route skeletons and shared components (#69) 2026-04-14 14:25:38 -04:00
ContextMenu.tsx refactor: remove pivot report, add sub-route skeletons and shared components (#69) 2026-04-14 14:25:38 -04:00
ErrorBoundary.tsx Add error boundary, error page, and startup timeout 2026-02-28 19:01:39 -05:00
ErrorPage.tsx feat: gate auto-updates behind license entitlement (#48) 2026-04-09 15:52:59 -04:00
PageHelp.tsx feat: add per-page contextual help via CircleHelp icon 2026-02-11 12:17:28 +00:00
RequireFeature.tsx feat(gating): UI guard — RequireFeature + UpsellGate + i18n 2026-07-20 22:05:04 -04:00
TransactionDetailModal.tsx Add sort and amount toggle to report details, sticky budget headers 2026-03-01 09:31:47 -05:00
UpsellGate.tsx feat(gating): multi-profile gate (Base+), non-destructive 2026-07-20 22:24:23 -04:00