import { LegendCategoryUI } from '../legend-category/legend-category-ui' import { LegendRampUI } from '../legend-ramp/legend-ramp-ui' import { LegendProportionUI } from '../legend-proportion/legend-proportion-ui' import { LegendIconUI } from '../legend-icon/legend-icon-ui' import type { LegendLabels } from '../../provider/labels' import type { LegendVariable } from '../../stores' export interface LegendItemUIProps { data: LegendVariable /** Forwarded to the renderers that show text (ramp header, proportion labels). */ labels?: Pick< LegendLabels, | 'colorBasedOn' | 'colorGradient' | 'radiusRangeBy' | 'maxPrefix' | 'minPrefix' > } /** * Dispatches to the matching pure renderer based on the discriminated * `variables.type`. Adding a new legend type is localized to this switch. * * @experimental This API is new and may change in a future release. */ export function LegendItemUI({ data, labels }: LegendItemUIProps) { switch (data.type) { case 'category': return case 'ramp': return case 'proportion': return case 'icon': return default: { // Exhaustiveness guard — a new variant must be handled above. const _exhaustive: never = data return _exhaustive } } }