doxa-maps/library/composables
Doxa Maps 30dc9a1457 Shareable pages P1: one address helper, and the filters write through it
library/composables/useViewAddress.js is the page's address for the view a reader is on: ?tab= &pane= &place=, with
a level rule, an id whitelist, and ONE history write (commitUrl). It keeps history.state and sets its `current` to
the new URL, so a link survives the next in-app navigation on a Vue Router host. The OUTERMOST owner writes,
named by profile-config urlOwner:
- 'app' writes history itself;
- 'host' hands its router one dxm-address;
- absent, nothing is written and links are still read.
Nested elements announce dxm-view. Back/Forward is read and never written.

useShareableView's filter write used to call replaceState(null, ...) itself, which wiped the router's state. It
now goes through commitUrl (writeFilterView). A filter write keeps tab/pane/place, and a tab/pane/place write keeps
the filters.

Level 2 is `pane`, not `view`: ?view= is already published by four of our pages.

check:view-address (gates:pre) runs on a simulated browser history. It covers:
- the whitelist and the level rule;
- one push per tab change, with state + current kept;
- no write when unchanged, on a partner page, or by a host owner;
- the filters and the view keys keeping each other through writes, Back and Forward;
- a census of every history writer in library/ and plugin-designs/ (6 today). A new writer fails until it is listed.

The self-test has 14 poisons, each caught. Real-source mutations are caught too: drop current, drop the unchanged
guard, drop the level rule, an uncomposed event, no length cap, an aliased pushState in a plugin.
2026-10-03 05:20:43 +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 P1: one address helper, and the filters write through it 2026-10-03 05:20:43 +00:00