doxa-maps/documentation
Doxa Maps b4664aa67e MapInfo can answer a map-control info button (MapInfoButton), fail-open
The "what can this map do for you?" button can now live IN a map's control
column instead of floating over it. This is the bridge only: nothing changes
until a map adds the control and its gallery tab sets trigger: 'control'.

- map-controls/MapInfoButton.vue (new): a MapControlButton with the info
  icon and the localized mapInfo.open label. Clicking it sends a bubbling,
  composed 'dxmaps:mapinfo-open' event out of the plugin's shadow root to
  the gallery pane. On mount it asks 'dxmaps:mapinfo-control' and shows
  ONLY if a MapInfo on the same pane answers (ack), so a standalone leaf or
  a partner page never shows a button that opens nothing. A MapInfo that
  mounts later broadcasts 'dxmaps:mapinfo-host' and the button asks again.
- info/MapInfo.vue: new prop trigger, 'floating' (default, unchanged) |
  'control'. In control mode it listens on its own pane: it acts only on
  events whose composedPath contains the pane, and stops them there. Its own
  floating button and pointer hide ONLY while the announced control is
  MEASURED usable: connected, a non-zero on-screen rect, and in no
  inert/aria-hidden subtree. It is re-measured by IntersectionObserver and
  ResizeObserver plus a 1.5 s fallback timer, never inferred from an unmount
  event. Escape and close return focus to the control when it is on screen,
  else to the floating button. aria-expanded is kept on the control.

Proved on a UPG-100 pilot served locally (gallery page, 1440, MapLibre and
Mapbox, en and ar), exactly one info button on screen at every step:
wall 1 floating; Map 1 control (it wins its hit test and sits inside the
toolbar column); opened from the control, Escape closes it with focus back
on the control; toolbar hidden 1 floating, shown again 1 control; tab away
and back 1; back to the wall 1 floating. 0 page errors. That pilot's wiring
is not in this commit.
2026-09-30 03:11:40 +00:00
..
architecture Delete useMapPacket.js: nothing imports it since both packets print through the shared HTML renderer 2026-09-28 06:44:14 +00:00
assets consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
contributing README: lead with the objectives, showcase the Research Gallery, teach the agent swarm 2026-09-24 18:34:02 +00:00
needs-eyes Docs and the plugin-designer skill: keep the reason, drop the speaker (6 lines) 2026-09-29 09:48:51 +00:00
readme-images README: show Rudder running as a desktop app 2026-09-29 01:32:16 +00:00
screenshots consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
CLOUD-DEVELOPMENT-ENVIRONMENT.md A laptop that follows the table says when it needs credentials, and the last main defaults say development 2026-09-29 00:59:14 +00:00
CONTRIBUTING.md CONTRIBUTING: source and build output as two commits in one push (not two pushes), with the two exemptions 2026-09-28 13:05:56 +00:00
DEPLOY.md README + DEPLOY: no links into private repos; the web folder's size is measured by a gate 2026-09-29 05:26:25 +00:00
develop-a-plugin-and-see-it-live.md README: three outputs, not five methods; a Languages section; screenshot gates see every shot again 2026-09-25 19:40:03 +00:00
explanation.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
how-to.md README and docs: a plugin's own page is /__leaf/<plugin>/<profile>, and auto is MapLibre 2026-09-29 11:04:22 +00:00
HOWTO-build-the-desktop-app.md bun run desktop:build <plugin> packages a desktop plugin as an app; check:targets keeps non-web plugins out of the web build 2026-09-28 06:44:14 +00:00
HOWTO-join-the-table.md README, HOWTO and .env.example: a changed port takes effect when bun run dev restarts (V8, third fresh reader) 2026-09-29 11:56:47 +00:00
HOWTO-which-gates-need-a-browser.md documentation: the browser guard, and ask the repo rather than grepping 2026-09-28 09:07:30 +00:00
PRESET-PLUGIN-STANDARD.md A preset keeps its profile's defaults: instance props merge over the meta config instead of replacing it 2026-09-28 03:12:45 +00:00
README-embed-example.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
README-embed-gospel-resources.md The map learned to name peoples, not just their languages 2026-09-27 02:40:12 +00:00
README-SECTION-3-cli-commands.md Docs: an iframe updates itself; a script embed's integrity hash pins the bytes, so re-copy it after each release 2026-09-26 02:07:14 +00:00
README.md The embed contract, written down for partners 2026-09-26 17:24:55 +00:00
reference-capability-exemplars.md Three post-landing gates green again: the library index, the capability table, Path2D 2026-09-29 02:35:35 +00:00
reference-library-index.md MapInfo can answer a map-control info button (MapInfoButton), fail-open 2026-09-30 03:11:40 +00:00
reference-universal-props.md List names speak the reader's language: listLabel and listDefinition 2026-09-26 08:39:52 +00:00
reference.md README and docs: a plugin's own page is /__leaf/<plugin>/<profile>, and auto is MapLibre 2026-09-29 11:04:22 +00:00
THIRD-PARTY.md Docs and the plugin-designer skill: keep the reason, drop the speaker (6 lines) 2026-09-29 09:48:51 +00:00
tutorial.md Docs: every build line a reader copies now carries BUILD_ALLOW=1 2026-09-25 03:07:52 +00:00
vendored-font-noto-serif-devanagari.md Move the vendored font's README out of the served folder 2026-09-24 04:15:26 +00:00
vendored-fonts.md Every vendored font ships its own licence 2026-09-28 01:30:47 +00:00
why.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00

documentation/ — pick your path

        "what is this?"          "teach me"        "how do I …?"       "look it up"      "all the detail"
             │                       │                   │                  │                  │
         why.md  ──────────►  tutorial.md  ────►  how-to.md  ────►  reference.md  ───►  architecture/
        (2 min, 1 diagram)   (first map)         (task recipes)     (tables)           (contracts)
  • why.md — the problem and the "map islands" idea. Start here.
  • tutorial.md — build your first map, no jargon.
  • how-to.md — recipes: embed, iframe, SPA, colors, CDN, mobile, tokens.
  • reference.md — config fields, build scripts, the profile-config contract.
  • explanation.md — the model in 15 lines.
  • architecture/ — the deep end: full contracts, the per-file catalog.
  • README-embed-example.md — the drop-in README used when this bundler is embedded inside a host repo.
  • README-embed-gospel-resources.md — the gospel map's URL contract for partner embeds: bring your own ISO 639-3 list, one country, one group, or the zero-access view.

Working on the repo:

Nothing on the simple path is longer than a few minutes; everything complex lives in architecture/, linked from where you'd need it.