import { type LayerDef } from '@expofp/renderer';
/**
 * Draws a pin over every booth an active POI-type search button selects, and draws the renderer's
 * clusters of those pins from a pool of hidden markers.
 *
 * The pins key off `uiState.selectedPoiTypeFilters`, which is what both a single `poi_type` button
 * and a `poi_types` group button write — so one filter or a whole group reaches this the same way.
 *
 * This module only *substitutes*. The renderer decides which pins collide, hides every pin in a
 * cluster through its own `onPlace`, and reports the clusters to the pin layer's `clustering`. What
 * this draws for a report is a pooled marker per cluster, in two sibling layers that declare neither
 * `placement` nor `clustering`, so a marker can never be clustered as its own input.
 *
 * Nothing is created or destroyed on a camera move. The pins are built when the booth set changes,
 * one per booth, and so is the pool: a cluster needs two pins, so `floor(n / 2)` markers is every
 * marker a report can ask for. A report writes positions and counts onto defs already mounted, and
 * no layer's `children` is reassigned by anything but a booth-set change.
 *
 * Takes the layers rather than the scene, so it runs in `config-all` beside the layers' creation:
 * nothing here needs the renderer, and `update` before the scene mounts is a documented no-op that
 * the mount's own full sync covers.
 * @param pinLayer - The layer for pins, which `config-all` creates.
 * @param clusterLayer - The layer for cluster teardrops, created directly above `pinLayer`.
 * @param countLayer - The layer for cluster counts, created directly above `clusterLayer`.
 * @returns A disposer.
 */
export declare function configPins(pinLayer: LayerDef, clusterLayer: LayerDef, countLayer: LayerDef): () => void;
/** The layer `config-all` pre-creates for pins, and the one whose clustering this module declares. */
export declare const PIN_LAYER_NAME = "poiFilterPins";
/** The layer `config-all` pre-creates for cluster teardrops, drawn directly above the pins. */
export declare const PIN_CLUSTER_LAYER_NAME = "poiFilterPinClusters";
/** The layer `config-all` pre-creates for cluster counts, drawn directly above the teardrops. */
export declare const PIN_COUNT_LAYER_NAME = "poiFilterPinCounts";
/**
 * How long a pin takes to fade in or out, in milliseconds. MapLibre's `fadeDuration` default, which
 * the placement spec's research cites: long enough that a crowd thinning out reads as motion, short
 * enough that a zoom does not leave half-faded pins behind the camera.
 */
export declare const PIN_FADE_MS = 300;
//# sourceMappingURL=config-pins.d.ts.map