The tab layout takes an optional homeHref and homeLabel from its host. When a URL is given it draws a link directly above the rail's Collapse button, in the same box, and a phone shows it at the top of the drawer. It mirrors in Arabic and slims with the rail. With no URL nothing changes, so the Plugin Studio and every other host look exactly as before. A javascript:, data: or vbscript: URL is ignored. The gallery accepts home-href and home-label (or profile-config homeHref and homeLabel) and passes them on; its own "Back to homepage" is the fallback label in all 11 languages. Prayer Mobilization now reads Prayer Progress, UPG 100 List Posters (renamed in all 11 languages), then Country Posters, which mounts its composite view and leaves the Experimental shelf. Posterverse, the second shell, is kept off this shelf so a shell never opens inside a shell. |
||
|---|---|---|
| .. | ||
| app-wrapper-material | ||
| pane-wrapper | ||
| README.md | ||
| StackLayout.vue | ||
| VerticalTabsLayout.vue | ||
layouts/ — app wrappers
Each folder here is an app wrapper: a host shell that composes doxa-maps plugin-designs (the independently-built custom elements) into one application.
layouts/<wrapper>/ ← the HOST page (not a bundle)
┌──────────┬──────────────────────────────┐
│ sidebar │ mounts an app-profile here │
│ (nav.js) │ ┌──────────────┐ │
│ ├ item │ │ <doxa-map> │ ← a │
│ ├ section│ │ (a bundle) │ micro- │
│ └ folder │ └──────────────┘ frontend │
└──────────┴──────────────────────────────┘
- app-profile = a self-contained custom element (the micro-frontend). app wrapper = the host that mounts them and provides nav/chrome. A wrapper is a host page, not a bundle-in-a-bundle.
- Wrappers today:
app-wrapper-material/,pane-wrapper/. - Icons are inline SVG only (no CDN) — an F-Droid/offline hard requirement.
Sidebar contract, target filtering, sidebar modes, staging: ../documentation/architecture/app-wrappers.md.