@expofp/floorplan
Version:
Interactive floor plan library for expos and events
40 lines • 2.67 kB
TypeScript
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