// The "extra" spot markers — the ones ORTHOGONAL to the entity status. // // A spot's entity status (new DXCC / new band / new slot / worked) answers one // question. These answer others that can be true at the same time: the park is // new even if the entity is worked, the county is new even if the band is not. // Both the DX-cluster list and the band map show them, and they have to agree — // the same fact must not be green in one panel and violet in the next, so the // colours live HERE and nowhere else. This is also the table a per-marker colour // setting will drive, which is why it is a table rather than three constants. // // Colour choices: // POTA green — parks; the association is worth keeping // county violet — a chart hue, because every semantic token was already // spoken for: red, orange and yellow are the entity // statuses, blue is "callsign worked", green is POTA // worked blue — matches the WKD-CALL badge the cluster list has always used // prefix yellow — unchanged export type SpotMarkerKey = 'new_pota' | 'new_county' | 'new_pfx' | 'worked_call'; export type SpotMarker = { key: SpotMarkerKey; colour: string; // a CSS colour — a var() reference, so it follows the theme labelKey: string; // i18n key, short form (badge / legend) }; // Order is the display order, in both panels. export const SPOT_MARKERS: SpotMarker[] = [ { key: 'new_pota', colour: 'var(--success)', labelKey: 'clg2.newPota' }, { key: 'new_county', colour: 'var(--chart-5)', labelKey: 'clg2.newCounty' }, { key: 'new_pfx', colour: 'var(--caution)', labelKey: 'clg2.newPfx' }, { key: 'worked_call', colour: 'var(--info)', labelKey: 'clg2.wkdCall' }, ]; export const markerColour = (key: SpotMarkerKey): string => SPOT_MARKERS.find((m) => m.key === key)?.colour ?? 'var(--muted-foreground)'; // activeMarkers returns the markers set on a status entry, in display order. export function activeMarkers(e: Record | undefined): SpotMarker[] { if (!e) return []; return SPOT_MARKERS.filter((m) => !!e[m.key]); }