- The closed phone drawer casts no shadow. Parked off-screen at translateX(-100%), its 28px blur still darkened the start edge of every map (measured at 390: the left 30px about 22 luminance levels darker than with the shadow off, a repeat shot identical). The shadow now belongs to the open drawer only; in Arabic the same rule covers the drawer parked off the right edge. - A row with disabled (a desktop-only map on a phone, e.g. Big Picture) renders greyed, with aria-disabled and a not-allowed cursor; its badge keeps its accent colour. pick() is unchanged, so the consumer still receives the click and can say why the row does not open. Both CSS copies change identically. |
||
|---|---|---|
| .. | ||
| 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.