doxa-maps/library/layouts
Doxa Maps c963a2a9fa P2: studio's 5B notes. A nested element cannot switch the owner's tab, a kept-alive pane or place is claimed back when its tab is shown again, and scrollTo takes null
- ownAddress records only pane and place. tab is the owner's own key, so a nested announcement cannot switch it.
- A shell keeps Regions (and UPG100) alive when another tab is open. Switching back dropped ?pane= and ?place=
  (the tab change), while the screen still showed them. pane-wrapper and region-dashboards now watch for being
  shown again (a ResizeObserver: no height, then height) and claim their pane / place back with a replace. An
  address that names one wins, because Back to an entry of this tab is applied while the column has no layout.
- scrollTo(id, null) behaves as scrollTo(id).

check:view-address covers each of these (34 poisons, each caught). The slow pane-wrapper arm runs only for
pane-wrapper poisons, so the self-test takes 16 s.
2026-10-03 06:26:53 +00:00
..
app-wrapper-material The plugin is 'UPG100 Posters', x11 (the series stays 'UPG100 List'), and every spaced 'UPG 100' label becomes 'UPG100' 2026-10-02 21:48:33 +00:00
pane-wrapper P2: studio's 5B notes. A nested element cannot switch the owner's tab, a kept-alive pane or place is claimed back when its tab is shown again, and scrollTo takes null 2026-10-03 06:26:53 +00:00
README.md Move internal files out of the repo; fix five dead links; a fuller delegation diagram 2026-09-25 05:14:10 +00:00
StackLayout.vue library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
VerticalTabsLayout.vue Phones: one top bar on a website too; maps fill a sized host, so the legend is never cut off 2026-10-02 05:27:37 +00:00

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.