component DataMap { outputs { select(payload: { value?: string | number | boolean | null; values?: Array; sourceEvent?: Event; [key: string]: string | number | boolean | null | object } | string | number | boolean | null) change(payload: { value?: string | number | boolean | null; values?: Array; sourceEvent?: Event; [key: string]: string | number | boolean | null | object } | string | number | boolean | null) } props { size: string = "default" color: string = "primary" title: string = "Data Map" description: string = "" items: unknown[] = [] variant: string = "default" class: string = "" } state selectedLabel: string = "" functions { client function choose(item) { selectedLabel = item.label; output.select({ value: item.value, item: item }); output.change({ value: item.value, item: item }) } shared function shade(item) { return Math.max(6, Math.min(35, (Number(item.value) || 0) / 3)) + "%" } } view {
{#if title}{title}{/if}{#if description}

{description}

{/if}
{#each items as item}{/each}
Lower activity Higher activity
} style { .wrn-data-map { display:grid; gap:.85rem; color:var(--wrn-color-text); } .wrn-data-map p { margin:0; color:var(--wrn-color-muted); font-size:.875rem; } .wrn-data-map__grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(6rem,1fr)); gap:.4rem; } .wrn-data-map button { display:grid; gap:.35rem; padding:1rem .65rem; border:1px solid var(--wrn-color-border); border-radius:6px; background:color-mix(in srgb,var(--wrn-color-primary) var(--heat),var(--wrn-color-surface)); color:var(--wrn-color-text); font:inherit; font-size:.8rem; cursor:pointer; } .wrn-data-map button[aria-pressed="true"] { outline:2px solid var(--wrn-color-primary-text); outline-offset:2px; } .wrn-data-map small { display:flex; align-items:center; gap:.5rem; color:var(--wrn-color-muted); } .wrn-data-map__legend { display:inline-block; width:4rem; height:.5rem; background:linear-gradient(90deg,var(--wrn-color-primary-soft),var(--wrn-color-primary)); border-radius:4px; } } }