UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

40 lines • 2.67 kB
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