feat(layout): unified app-shell primitives (Phase A, no consumer changes)

Build the shared building blocks for the unified bottom-nav UX across the
hub + 7 standalones. Phase A is groundwork only — no App.vue or Hub.vue
consumer is wired up yet, so this commit is purely additive.

New components in src/components/layout/:
- PreferencesRow.vue   theme/language/currency triad (row + list layouts)
- ProfileSheetContent.vue  identity card + back-to-hub + prefs + ProfileSettings
- ProfileSheetTrigger.vue  bottom-row Profile button → opens sheet
- HubPill.vue          fixed top-right back-to-hub link
- BottomNav.vue        consumer tabs + appended Profile slot
- AppShell.vue         outer wrapper composing the above

New composable: useCurrentUserAvatar — picture/displayName/fallbackInitial
from the auth user object.

i18n: new common.nav.* namespace in en/es/fr (typed via LocaleMessages).

Env: VITE_HUB_ROOT_URL added to .env.example with path/subdomain/local
guidance — consumed by HubPill and the back-to-hub sheet item.

Phase B (consumer refactor: chat/wallet/tasks first, then forum/libra/
market/activities, then hub) lands separately.
This commit is contained in:
Padreug 2026-05-07 12:05:56 +02:00
commit eaacb3b985
12 changed files with 582 additions and 3 deletions

View file

@ -87,6 +87,25 @@ VITE_HUB_FORUM_URL=
VITE_HUB_MARKET_URL=
VITE_HUB_TASKS_URL=
# ───────────────────────────────────────────────────────────────────────
# VITE_HUB_ROOT_URL — standalone → hub (the inverse of the URLs above)
#
# Read by the standalone shell's <HubPill> (top-right "back to hub" link)
# and the "Back to Hub" item inside the profile sheet. Each standalone's
# bundle gets this value baked in at build time.
#
# In PATH-MODE deployment the standalone and hub share an origin, so the
# default ('/' if unset) is correct — the link is same-origin.
#
# In SUBDOMAIN-MODE production the standalone is on a different origin
# than the hub; set this to the full hub URL:
# VITE_HUB_ROOT_URL=https://app.example.com/
#
# In LOCAL DEV with `npm run dev:all`, the hub is on :5173:
# VITE_HUB_ROOT_URL=http://localhost:5173/
# ───────────────────────────────────────────────────────────────────────
VITE_HUB_ROOT_URL=
# ───────────────────────────────────────────────────────────────────────
# VITE_BASE_PATH — build-time only, NOT per .env
#