doxa-maps/library/composables
Doxa Maps 00f7d349eb Shareable pages P2b: nested shells at any depth have their tab in the address (?subtab= path)
When a shell sits inside another plugin that owns the address (Plugin Studio → the Research Gallery → …), its own
tab had no key. P1 never wrote it from a nested shell, and P2's ownAddress dropped a nested `tab`, so every tab
inside Studio had the same URL.

`subtab` is a PATH, one segment per nested shell below the owner: ?subtab=regions-dashboard at depth 1, and
?subtab=posterverse.upg-100 when a shell sits inside a shell. There are at most 6 segments, each a plain id.
- A nested shell claims its tab with claimView({ tab }, { depth }), where depth comes from its profile-config
  addressDepth (depthOf; its parent passes it down).
- The owner records the claim as that segment: the segments above are kept, the deeper ones and pane/place dropped.
- The same tab again is a no-op (a shell's first-paint claim on a deep link keeps everything below it).
- A segment missing above the claimed depth (a hole) is refused.
- The owner's own tab change drops the whole path.
- subtabAt(search, depth) gives a shell its segment.
Standalone pages and DX Life never see subtab: there the shell is the owner and writes `tab`.

check:view-address H covers depth 1, 2 and 3: first-paint replace, pick push, a composite's pane/place beside
subtab, the same tab claimed again, Back, and the owner's tab change. It has 9 new poisons (52).
2026-10-03 07:50:25 +00:00
..
legends The regions idle paint expression moves to the library that already painted with it 2026-09-29 13:29:18 +00:00
poster Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
.gitkeep doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
host-token-url.js A composite embedded bare dropped tokenUrl, and passed because a ProfileLoader sat above it 2026-09-28 15:52:47 +00:00
joinBase.js The country link went to the people group; four links broke on a missing slash 2026-09-28 21:59:29 +00:00
printInPlace.js Phone print: going away again cancels a pending drop; a 60 s grace; no early touch 2026-10-02 17:15:56 +00:00
retryableAsyncComponent.js library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
retryFetch.js Two gates the branch backlog turned red 2026-09-29 14:55:35 +00:00
useAvatarGenerator.js Keep the prayer yellow to the prayer palette; other palettes keep their orange 2026-09-16 21:21:07 -05:00
useCardSurface.js The prayer-progress cards become shared components too 2026-09-27 04:14:31 +00:00
useCountryOutline.js Merge branch 'bundler-2/driver-1650' into bundler-2/handoff 2026-09-29 14:50:44 +00:00
useCsvExport.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useDashboardData.js The research dashboard asked the API for English, then translated half of it 2026-09-28 22:25:31 +00:00
useDashboardLayout.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useDashboardSearch.js library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
useDocumentFont.js library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
useEdgeScrollAffordance.js P2: comments state the reason without quoting anyone or naming a role 2026-10-02 08:45:40 +00:00
useFacetAggregation.js Kit 4c-1: the counting half, and the bucket that said "Other" in every locale 2026-09-27 04:14:13 +00:00
useGeocoderSearch.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useHostedHelp.js A map's own ? can ask its host for help: HelpButton and useHostedHelp send doxa:help 2026-09-29 02:35:35 +00:00
useHostTokenUrl.js A composite embedded bare dropped tokenUrl, and passed because a ProfileLoader sat above it 2026-09-28 15:52:47 +00:00
useMapAttribution.js Escape the two popup URLs and the packet photo URL 2026-09-29 05:26:27 +00:00
useMapClustering.js useMapClustering: no console.log in shipped bundles 2026-09-28 02:01:47 +00:00
useMapData.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useMapEvents.js One pin click should call the click handler once, not twice 2026-09-29 12:44:25 +00:00
useMapFly.js library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
useMapInstance.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useMapLayers.js The URLs that failed cannot be retried, and the ones that can were not 2026-09-28 18:02:00 +00:00
useMapProvider.js P assembly: the widened census, stated neutrally 2026-10-01 05:42:24 +00:00
useMapTheme.js Research map: religion joins prayer, adoption and engagement on the night look; only people, regions and languages are monochrome day 2026-09-16 21:01:37 -05:00
useOptionalT.js A host without i18n picks the same plural form an installed i18n would, in every language 2026-09-29 05:26:26 +00:00
usePaneConfig.js Generalise the pane re-forward to attribute-configured panes, and gate it 2026-09-29 18:34:49 +00:00
usePosterPrints.js Print on phones: the shared Print bar is labelled in the reader's language from the wall and the poster prints too 2026-09-30 08:04:52 +00:00
usePplrInstance.js library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
usePrayedLocally.js Public builds carry zero platform surface + copy-embed on staging 2026-09-16 05:13:44 +00:00
usePrayerStatistics.js The URLs that failed cannot be retried, and the ones that can were not 2026-09-28 18:02:00 +00:00
useScreenGate.js A desktop-only composite blocks on a phone too: the phone rule is a composable its root can call 2026-09-29 09:18:55 +00:00
useSearch.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useSelectedPin.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useSelectionBus.js library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
useSelectionCamera.js library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
useSentence.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useShadowStyles.js Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
useShareableView.js Shareable pages P1: one address helper, and the filters write through it 2026-10-03 05:20:43 +00:00
useSharedMapToken.js Merge branch 'bundler-2/driver-1650' into bundler-2/handoff 2026-09-29 14:50:44 +00:00
useTextHighlight.js Two plugins built the same search highlighter; now there is one 2026-09-27 01:16:50 +00:00
useViewAddress.js Shareable pages P2b: nested shells at any depth have their tab in the address (?subtab= path) 2026-10-03 07:50:25 +00:00