import React from 'react'; import type { MapView } from '../map/use-map-fit'; import type { MapOverlayPosition } from '../map/map.types'; export interface MapViewControlProps extends React.HTMLAttributes { /** Named camera positions. Pass the same array to ``. */ views: MapView[]; /** Id of the active entry. Pass the same value to ``. */ activeViewId?: string; onViewChange: (id: string) => void; /** * Re-frames the map around the current data. Typically implemented by * re-selecting the overview view; the button is hidden when not provided. */ onRefit?: () => void; /** @default "Reframe to data" */ refitLabel?: string; /** * `'overlay'` floats over the map and needs a positioned ancestor; * `'inline'` flows in normal layout. * @default 'inline' */ variant?: 'overlay' | 'inline'; /** @default 'top-left' */ position?: MapOverlayPosition; /** @default "Map views" */ ariaLabel?: string; } /** * Switches between named map views and re-frames the camera. * * @description * Seven of the sixteen surveyed applications re-frame the map on every filter * change and keep a "back to overview" button next to it. This is that button, * plus the view switcher, built on `Button` so keyboard operation and focus * states come from the design system rather than being reinvented. * * The control is presentational: it reports the user's choice and `` moves * the camera. Hand the same `views` / `activeViewId` / `onViewChange` triple to * both components. * * @ai-rules * 1. `views` and `activeViewId` must be the same values passed to ``, or the buttons will lie about the camera. * 2. Omit `onRefit` rather than passing a no-op — the button hides itself when there is nothing to do. * 3. For `variant="overlay"`, wrap the map and the control in a `relative` container. */ export declare const MapViewControl: React.ForwardRefExoticComponent>;