doxa-maps/library/components/map-controls
Doxa Maps c535c0f031 Phones: a panel announces it closed; the legend's resize drag owns its gesture
- MapControlMenu dispatches 'dxmaps:panel-close' (composed, bubbling), the twin of 'dxmaps:panel-open', when a
  panel closes by ✕, an outside tap or Esc, or is unmounted while open. A host can then hide its own chrome
  while a panel is up (DX Life's top scroll strip sat over the Share panel's ✕).
- The mobile legend's resize drag scrolled the page. Only the strip and the title rows carried
  touch-action:none, so a drag that began elsewhere in the 44px grab zone let the browser start panning
  before touchmove could cancel it, and its later touchmoves were not cancelable. touchstart in the grab zone
  now claims the gesture (preventDefault), and a touch that never becomes a drag is clicked on release
  (inputs keep their native tap). The height is written once per frame (rAF), and the last frame lands
  before the snap.
2026-10-02 06:51:32 +00:00
..
FullscreenButton.vue A lazy view that fails to load says so and offers Retry; map controls carry data-control 2026-09-28 11:42:54 +00:00
GeocoderComponent.vue library/ keeps the reason and drops the speaker: no comment quotes or cites the Driver 2026-09-29 05:26:25 +00:00
HamburgerButton.vue Every animating library component now honours prefers-reduced-motion itself 2026-09-29 01:38:07 +00:00
HelpButton.vue A map's own ? can ask its host for help: HelpButton and useHostedHelp send doxa:help 2026-09-29 02:35:35 +00:00
index.js doxa-maps — portable bundler for embeddable JAMstack maps 2026-09-10 01:53:07 +00:00
LocationButton.vue A lazy view that fails to load says so and offers Retry; map controls carry data-control 2026-09-28 11:42:54 +00:00
MapControlButton.vue Full tree rebuild on merged development (BP-C3 header buttons + PP2 grace) 2026-09-30 04:48:50 +00:00
MapControlMenu.vue Phones: a panel announces it closed; the legend's resize drag owns its gesture 2026-10-02 06:51:32 +00:00
MapInfoButton.vue The "What can this map do?" button shows a question mark, not an (i) 2026-09-30 08:21:16 +00:00
MapToolbar.vue Source comments state design history and measurements as facts, without quoting or naming anyone 2026-10-01 00:37:17 +00:00
README.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
ShareButton.vue Big Picture header: rounded-square ⓘ left of a rounded-square Share 2026-09-30 04:27:44 +00:00
ThemeToggleButton.vue A lazy view that fails to load says so and offers Retry; map controls carry data-control 2026-09-28 11:42:54 +00:00
ZoomInButton.vue A lazy view that fails to load says so and offers Retry; map controls carry data-control 2026-09-28 11:42:54 +00:00
ZoomOutButton.vue A lazy view that fails to load says so and offers Retry; map controls carry data-control 2026-09-28 11:42:54 +00:00

library/components/map-controls/ — toolbar buttons

Each file is a single, focused button or input that mounts inside the map's control area. Replaces the older monolithic MapControlsComponent.vue.

  MapToolbar.vue  (container)
   ├─ ZoomInButton · ZoomOutButton · LocationButton
   ├─ FullscreenButton · HamburgerButton · ThemeToggleButton
   ├─ HelpButton · ShareButton
   └─ GeocoderComponent   (all built on MapControlButton.vue)
  • Every button takes a size prop (sm | md | lg) and follows the MapControlButton shape.
  • Click handlers go through inject('mapStore') or getMap() — never a captured Mapbox instance.
  • To add one: copy ZoomInButton.vue and register it in MapToolbar.vue.

Full conventions + catalog: ../../../documentation/architecture/components.md.