@cfasim-ui/charts 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,16 @@ export interface StateData {
7
7
  /** FIPS code (e.g. "06" for California, "04015" for a county) or name */
8
8
  id: string;
9
9
  value: number | string;
10
+ /**
11
+ * Geographic level of *this row*, when it differs from the map's `geoType`.
12
+ * The state the row belongs to is then re-tiled at this level: on a county
13
+ * map, `{ id: "06", geoType: "states" }` draws California as one merged
14
+ * shape carrying this value; on a state map, `{ id: "36061", geoType:
15
+ * "counties" }` breaks New York out into its counties. Rows at the base
16
+ * level (the common case) leave `geoType` unset. Ignores `dataGeoType` —
17
+ * an off-level row is looked up by its own id.
18
+ */
19
+ geoType?: GeoType;
10
20
  }
11
21
  export interface ChoroplethColorScale {
12
22
  /**
@@ -72,7 +82,10 @@ type __VLS_Props = {
72
82
  * with its parent HSA's value) or by state values, without changing
73
83
  * the rendered/interactive geometry. Supported combinations:
74
84
  * `counties` ← `hsas`, `counties` ← `states`, `hsas` ← `states`.
75
- * When unset, data ids must match the base `geoType`.
85
+ * When unset, data ids must match the base `geoType`. Re-keys the whole
86
+ * dataset — to mix levels on one map (a county map where California
87
+ * reports one statewide value), set `geoType` on the individual rows
88
+ * instead.
76
89
  */
77
90
  dataGeoType?: GeoType;
78
91
  /**
@@ -4,8 +4,9 @@ export interface CityMarker {
4
4
  coordinates: [number, number];
5
5
  /**
6
6
  * Mark as a capital: the label gets first pick during placement and is never
7
- * dropped for collisions (rendered slightly emphasized). The marker itself is
8
- * a plain dot, same as any other city.
7
+ * dropped for collisions. It renders like any other label (with a
8
+ * `choropleth-city-label-capital` class to style if you want), and the marker
9
+ * is a plain dot, same as any other city.
9
10
  */
10
11
  capital?: boolean;
11
12
  /**
@@ -0,0 +1,74 @@
1
+ import { GeoType } from './ChoroplethMap';
2
+ /** Minimal shape of the GeoJSON features this module shuffles around. */
3
+ export interface MixFeature {
4
+ id?: string | number | null;
5
+ properties?: {
6
+ name?: string;
7
+ } | null;
8
+ }
9
+ /** id → feature and name → id indexes for one geographic level. */
10
+ export interface LevelLookup<F extends MixFeature = MixFeature> {
11
+ byId: Map<string, F>;
12
+ byName: Map<string, string>;
13
+ }
14
+ /**
15
+ * Lazily resolves the lookup for a level, so a map that never mixes never pays
16
+ * to index the levels it doesn't render. Returns null when the topology can't
17
+ * supply that level (e.g. "counties" from a states-only topology, or "hsas"
18
+ * before the lazy HSA chunk loads).
19
+ */
20
+ export type LevelResolver<F extends MixFeature = MixFeature> = (level: GeoType) => LevelLookup<F> | null;
21
+ /**
22
+ * 2-digit state FIPS a feature id belongs to, or null when it can't be
23
+ * determined. States and counties carry it as their first two digits; HSA
24
+ * codes need the FIPS→HSA table (inverted into `hsaToState`), because an HSA
25
+ * code isn't state-prefixed. No HSA spans two states, so the mapping is total.
26
+ */
27
+ export declare function stateOfId(level: GeoType, id: string, hsaToState?: ReadonlyMap<string, string> | null): string | null;
28
+ /** A `data` row as far as mixing is concerned. */
29
+ export interface MixRow {
30
+ id: string;
31
+ geoType?: GeoType;
32
+ }
33
+ export interface OverrideResolution {
34
+ /** state FIPS → the level that state renders at. */
35
+ overrides: Map<string, GeoType>;
36
+ /** Row ids whose state couldn't be resolved (bad id, or level unavailable). */
37
+ unresolved: string[];
38
+ /**
39
+ * Row ids that named an already-claimed state at a different level. The first
40
+ * row wins; these are reported so the caller can warn.
41
+ */
42
+ conflicts: string[];
43
+ }
44
+ /**
45
+ * Collects the per-state level overrides implied by `rows`. Rows without a
46
+ * `geoType`, or whose `geoType` matches the base map, are plain data and are
47
+ * ignored here.
48
+ */
49
+ export declare function resolveGeoOverrides(rows: readonly MixRow[] | undefined, baseGeoType: GeoType, getLevel: LevelResolver, hsaToState?: ReadonlyMap<string, string> | null): OverrideResolution;
50
+ /**
51
+ * Serializes overrides into a comparable key. The caller derives the override
52
+ * map from this string so its identity only changes when the *set* of overrides
53
+ * does — otherwise every `data` update would rebuild the whole feature tree.
54
+ */
55
+ export declare function serializeOverrides(overrides: Map<string, GeoType>): string;
56
+ /** Inverse of `serializeOverrides`. */
57
+ export declare function parseOverrides(key: string): Map<string, GeoType>;
58
+ export interface MixedFeatures<F extends MixFeature> {
59
+ features: F[];
60
+ /**
61
+ * Feature id → level, for substituted features only. Ids absent from the map
62
+ * render at the base `geoType`.
63
+ */
64
+ levelById: Map<string, GeoType>;
65
+ }
66
+ /**
67
+ * Replaces every overridden state's base features with that state's features at
68
+ * the override level. Returns `base` untouched when there's nothing to mix, so
69
+ * the common case costs one `size` check.
70
+ *
71
+ * `scopeFips` mirrors the map's single-state mode: substituted features outside
72
+ * the scoped state are dropped, exactly as the base set already is.
73
+ */
74
+ export declare function mixFeatures<F extends MixFeature>(base: readonly F[], baseGeoType: GeoType, overrides: Map<string, GeoType>, getLevel: LevelResolver<F>, hsaToState?: ReadonlyMap<string, string> | null, scopeFips?: string | null): MixedFeatures<F>;
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.css CHANGED
@@ -1,2 +1,2 @@
1
- .chart-menu-trigger-area[data-v-f5743494]{z-index:1;position:absolute;top:.5em;right:.5em}.chart-menu-trigger-area--expanded[data-v-f5743494]{top:1.25em;right:1.25em}.chart-menu-button[data-v-f5743494]{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);width:28px;height:28px;color:var(--color-text-secondary);cursor:pointer;opacity:0;border-radius:.25em;justify-content:center;align-items:center;transition:opacity .15s;display:flex}.chart-menu-button[data-state=open][data-v-f5743494],.chart-close-button[data-v-f5743494]{opacity:1}.chart-menu-button[data-v-f5743494]:hover{background:var(--color-bg-1,#0000000d);color:var(--color-text)}.line-chart-wrapper:hover .chart-menu-button,.bar-chart-wrapper:hover .chart-menu-button,.choropleth-wrapper:hover .chart-menu-button,.line-chart-wrapper:focus-within .chart-menu-button,.bar-chart-wrapper:focus-within .chart-menu-button,.choropleth-wrapper:focus-within .chart-menu-button{opacity:1}.chart-sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.chart-menu-content{z-index:100;background:var(--color-bg-0);border:1px solid var(--color-border);border-radius:.25em;min-width:140px;padding:.25em;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.chart-menu-item{font-size:var(--font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:.25em;outline:none;align-items:center;padding:.375em .5em;display:flex}.chart-menu-item[data-highlighted]{background:var(--color-primary);color:#fff}.chart-zoom-controls[data-v-87ceeada]{z-index:1;flex-direction:column;gap:4px;display:flex;position:absolute;top:.5em;left:.5em}.chart-zoom-controls--expanded[data-v-87ceeada]{top:1.25em;left:1.25em}.chart-zoom-button[data-v-87ceeada]{border:1px solid var(--color-border,#e5e7eb);background:var(--color-bg-0,#fff);width:28px;height:28px;color:var(--color-text-secondary,#555);cursor:pointer;border-radius:.25em;justify-content:center;align-items:center;padding:0;display:flex}.chart-zoom-button[data-v-87ceeada]:hover:not(:disabled){background:var(--color-bg-1,#0000000d);color:var(--color-text)}.chart-zoom-button[data-v-87ceeada]:disabled{opacity:.4;cursor:default}.line-chart-wrapper[data-v-7e41f1cc]{width:100%;position:relative}.line-chart-tooltip-label[data-v-7e41f1cc]{margin-bottom:.25em;font-weight:600}.line-chart-tooltip-row[data-v-7e41f1cc]{align-items:center;gap:.375em;display:flex}.line-chart-download-link[data-v-7e41f1cc]{text-align:right;font-size:var(--font-size-sm);margin-top:.25em;display:block}.line-chart-tooltip-swatch[data-v-7e41f1cc]{border-radius:50%;flex-shrink:0;width:.625em;height:.625em;display:inline-block}.line-chart-download-button{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);color:var(--color-text);font-size:var(--font-size-sm);cursor:pointer;border-radius:.25em;align-items:center;margin-top:.5em;padding:.5em 1em;display:inline-flex}.line-chart-download-button:hover{background:var(--color-bg-1,#0000000d)}.line-chart-download-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.bar-chart-wrapper[data-v-32872fa4]{width:100%;position:relative}.bar-chart-tooltip-label[data-v-32872fa4]{margin-bottom:.25em;font-weight:600}.bar-chart-tooltip-row[data-v-32872fa4]{align-items:center;gap:.375em;display:flex}.bar-chart-download-link[data-v-32872fa4]{text-align:right;font-size:var(--font-size-sm);margin-top:.25em;display:block}.bar-chart-tooltip-swatch[data-v-32872fa4]{border-radius:50%;flex-shrink:0;width:.625em;height:.625em;display:inline-block}.bar-chart-download-button{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);color:var(--color-text);font-size:var(--font-size-sm);cursor:pointer;border-radius:.25em;align-items:center;margin-top:.5em;padding:.5em 1em;display:inline-flex}.bar-chart-download-button:hover{background:var(--color-bg-1,#0000000d)}.bar-chart-download-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.chart-tooltip-sheet[data-v-90392830]{z-index:2;background:var(--color-bg-0,#fff);color:var(--color-text,inherit);border-top:1px solid var(--color-border,#e5e7eb);padding:14px 16px calc(14px + env(safe-area-inset-bottom,0px));pointer-events:none;font-size:14px;line-height:1.4;transition:transform .25s;position:absolute;bottom:0;left:0;right:0;transform:translateY(100%);box-shadow:0 -4px 12px #0000001f}.chart-tooltip-sheet.is-open[data-v-90392830]{transform:translateY(0)}.choropleth-wrapper[data-v-85387c29]{--choropleth-legend-bg:var(--color-bg-0,#fff);width:100%;position:relative;container-type:inline-size}.choropleth-wrapper svg[data-v-85387c29]{width:100%;height:auto;display:block}.choropleth-wrapper.pannable svg[data-v-85387c29]{cursor:grab}.choropleth-wrapper.is-fullscreen svg[data-v-85387c29]{flex:auto;width:100%;height:100%;min-height:0}.choropleth-wrapper.pannable svg[data-v-85387c29]:active{cursor:grabbing}.choropleth-wrapper[data-v-85387c29] .state-path{cursor:pointer}.choropleth-city-overlay[data-v-85387c29]{pointer-events:none;position:absolute;top:0;left:0}.choropleth-cities[data-v-85387c29]{--choropleth-city-marker:#1a1a1a;--choropleth-city-halo:#fff;--choropleth-city-label-color:#1a1a1a;font-family:var(--font-family,system-ui, sans-serif)}.choropleth-cities[data-v-85387c29] .choropleth-city-dot{fill:var(--choropleth-city-marker);stroke:var(--choropleth-city-halo)}.choropleth-cities[data-v-85387c29] .choropleth-city-label{fill:var(--choropleth-city-label-color);stroke:var(--choropleth-city-halo);paint-order:stroke fill;stroke-linejoin:round;font-weight:500}.choropleth-cities[data-v-85387c29] .choropleth-city-label-capital{font-weight:700}.choropleth-canvas[data-v-85387c29]{pointer-events:none;will-change:transform;position:absolute;top:0;left:0}.choropleth-zoom-hint[data-v-85387c29]{z-index:1;text-align:center;color:var(--color-text-secondary,#777);opacity:.6;pointer-events:none;text-shadow:1px 0 0 var(--color-bg-0,#fff), -1px 0 0 var(--color-bg-0,#fff), 0 1px 0 var(--color-bg-0,#fff), 0 -1px 0 var(--color-bg-0,#fff), 0 0 3px var(--color-bg-0,#fff);padding-top:6px;font-size:12px;line-height:1.4;position:absolute;left:0;right:0}@container (width<=480px){.choropleth-zoom-hint[data-v-85387c29]{padding:0;position:static}}.choropleth-header[data-v-85387c29]{background:var(--choropleth-legend-bg);color:currentColor;border-radius:4px;flex-direction:column;align-items:center;gap:10px;width:fit-content;margin:0 auto;padding:8px 14px;display:flex}.choropleth-title[data-v-85387c29]{white-space:pre-line;font-size:14px;font-weight:600;line-height:1.2}.choropleth-legend[data-v-85387c29]{align-items:center;gap:14px;font-size:13px;line-height:1.2;display:flex}.choropleth-legend-title[data-v-85387c29]{font-weight:600}.choropleth-legend[data-v-85387c29]:has(.choropleth-legend-continuous){align-items:flex-start}.choropleth-legend:has(.choropleth-legend-continuous) .choropleth-legend-title[data-v-85387c29]{line-height:12px}.choropleth-legend-item[data-v-85387c29]{align-items:center;gap:6px;display:inline-flex}.choropleth-legend-swatch[data-v-85387c29]{border-radius:3px;width:12px;height:12px;display:inline-block}.choropleth-legend-continuous[data-v-85387c29]{flex-direction:column;width:160px;display:flex}.choropleth-legend-gradient[data-v-85387c29]{border-radius:2px;height:12px}.choropleth-legend-ticks[data-v-85387c29]{opacity:.7;height:14px;margin-top:4px;font-size:11px;position:relative}.choropleth-legend-ticks>span[data-v-85387c29]{position:absolute;transform:translate(-50%)}.chart-tooltip-anchor[data-v-44377f70]{pointer-events:none;width:1px;height:1px;position:absolute}.chart-tooltip-content{z-index:100;background:var(--color-bg-0,#fff);border:1px solid var(--color-border,#e5e7eb);font-size:var(--font-size-sm,.875rem);pointer-events:none;border-radius:.375em;padding:.5em .75em;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.TableOuter[data-v-9b1b6a76]{display:inline-block;position:relative}.TableOuter.full-width[data-v-9b1b6a76]{display:block}.TableWrapper[data-v-9b1b6a76]{font-size:var(--font-size-sm);overflow-x:auto}.Table[data-v-9b1b6a76]{border-collapse:collapse;font-variant-numeric:tabular-nums;border:1px solid var(--color-border);table-layout:fixed;margin:0;display:table}.Table.full-width[data-v-9b1b6a76]{width:100%}.Table tr[data-v-9b1b6a76],.Table th[data-v-9b1b6a76],.Table td[data-v-9b1b6a76]{background:0 0;border:none}.Table th[data-v-9b1b6a76],.Table td[data-v-9b1b6a76]{white-space:nowrap;text-overflow:ellipsis;text-align:left;padding:.75em 1.25em;overflow:hidden}.Table th.cell-wrap[data-v-9b1b6a76],.Table td.cell-wrap[data-v-9b1b6a76]{white-space:normal;text-overflow:clip;overflow:visible}.Table th[data-v-9b1b6a76]{border-bottom:1px solid var(--color-border-header);font-weight:600;position:sticky;top:0}.Table tbody td[data-v-9b1b6a76]{border-bottom:1px solid var(--color-border)}.Table tbody tr:last-child td[data-v-9b1b6a76]{border-bottom:none}.TableOuter[data-v-9b1b6a76] .chart-menu-trigger-area{top:4px;right:4px}.TableOuter[data-v-9b1b6a76] .chart-menu-button{opacity:1}.TableOuter.has-menu .Table thead th[data-v-9b1b6a76]:last-child{padding-right:2.5em}.data-table-download-button{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);color:var(--color-text);font-size:var(--font-size-sm);cursor:pointer;border-radius:.25em;align-items:center;margin-top:.75em;padding:.5em 1em;display:inline-flex}.data-table-download-button:hover{background:var(--color-bg-1,#0000000d)}.data-table-download-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.data-table-download-link{text-align:right;font-size:var(--font-size-sm);margin-top:.25em;display:block}
1
+ .chart-menu-trigger-area[data-v-f5743494]{z-index:1;position:absolute;top:.5em;right:.5em}.chart-menu-trigger-area--expanded[data-v-f5743494]{top:1.25em;right:1.25em}.chart-menu-button[data-v-f5743494]{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);width:28px;height:28px;color:var(--color-text-secondary);cursor:pointer;opacity:0;border-radius:.25em;justify-content:center;align-items:center;transition:opacity .15s;display:flex}.chart-menu-button[data-state=open][data-v-f5743494],.chart-close-button[data-v-f5743494]{opacity:1}.chart-menu-button[data-v-f5743494]:hover{background:var(--color-bg-1,#0000000d);color:var(--color-text)}.line-chart-wrapper:hover .chart-menu-button,.bar-chart-wrapper:hover .chart-menu-button,.choropleth-wrapper:hover .chart-menu-button,.line-chart-wrapper:focus-within .chart-menu-button,.bar-chart-wrapper:focus-within .chart-menu-button,.choropleth-wrapper:focus-within .chart-menu-button{opacity:1}.chart-sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.chart-menu-content{z-index:100;background:var(--color-bg-0);border:1px solid var(--color-border);border-radius:.25em;min-width:140px;padding:.25em;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.chart-menu-item{font-size:var(--font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;border-radius:.25em;outline:none;align-items:center;padding:.375em .5em;display:flex}.chart-menu-item[data-highlighted]{background:var(--color-primary);color:#fff}.chart-zoom-controls[data-v-87ceeada]{z-index:1;flex-direction:column;gap:4px;display:flex;position:absolute;top:.5em;left:.5em}.chart-zoom-controls--expanded[data-v-87ceeada]{top:1.25em;left:1.25em}.chart-zoom-button[data-v-87ceeada]{border:1px solid var(--color-border,#e5e7eb);background:var(--color-bg-0,#fff);width:28px;height:28px;color:var(--color-text-secondary,#555);cursor:pointer;border-radius:.25em;justify-content:center;align-items:center;padding:0;display:flex}.chart-zoom-button[data-v-87ceeada]:hover:not(:disabled){background:var(--color-bg-1,#0000000d);color:var(--color-text)}.chart-zoom-button[data-v-87ceeada]:disabled{opacity:.4;cursor:default}.line-chart-wrapper[data-v-7e41f1cc]{width:100%;position:relative}.line-chart-tooltip-label[data-v-7e41f1cc]{margin-bottom:.25em;font-weight:600}.line-chart-tooltip-row[data-v-7e41f1cc]{align-items:center;gap:.375em;display:flex}.line-chart-download-link[data-v-7e41f1cc]{text-align:right;font-size:var(--font-size-sm);margin-top:.25em;display:block}.line-chart-tooltip-swatch[data-v-7e41f1cc]{border-radius:50%;flex-shrink:0;width:.625em;height:.625em;display:inline-block}.line-chart-download-button{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);color:var(--color-text);font-size:var(--font-size-sm);cursor:pointer;border-radius:.25em;align-items:center;margin-top:.5em;padding:.5em 1em;display:inline-flex}.line-chart-download-button:hover{background:var(--color-bg-1,#0000000d)}.line-chart-download-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.bar-chart-wrapper[data-v-32872fa4]{width:100%;position:relative}.bar-chart-tooltip-label[data-v-32872fa4]{margin-bottom:.25em;font-weight:600}.bar-chart-tooltip-row[data-v-32872fa4]{align-items:center;gap:.375em;display:flex}.bar-chart-download-link[data-v-32872fa4]{text-align:right;font-size:var(--font-size-sm);margin-top:.25em;display:block}.bar-chart-tooltip-swatch[data-v-32872fa4]{border-radius:50%;flex-shrink:0;width:.625em;height:.625em;display:inline-block}.bar-chart-download-button{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);color:var(--color-text);font-size:var(--font-size-sm);cursor:pointer;border-radius:.25em;align-items:center;margin-top:.5em;padding:.5em 1em;display:inline-flex}.bar-chart-download-button:hover{background:var(--color-bg-1,#0000000d)}.bar-chart-download-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.chart-tooltip-sheet[data-v-90392830]{z-index:2;background:var(--color-bg-0,#fff);color:var(--color-text,inherit);border-top:1px solid var(--color-border,#e5e7eb);padding:14px 16px calc(14px + env(safe-area-inset-bottom,0px));pointer-events:none;font-size:14px;line-height:1.4;transition:transform .25s;position:absolute;bottom:0;left:0;right:0;transform:translateY(100%);box-shadow:0 -4px 12px #0000001f}.chart-tooltip-sheet.is-open[data-v-90392830]{transform:translateY(0)}.choropleth-wrapper[data-v-ef6ce015]{--choropleth-legend-bg:var(--color-bg-0,#fff);width:100%;position:relative;container-type:inline-size}.choropleth-wrapper svg[data-v-ef6ce015]{width:100%;height:auto;display:block}.choropleth-wrapper.pannable svg[data-v-ef6ce015]{cursor:grab}.choropleth-wrapper.is-fullscreen svg[data-v-ef6ce015]{flex:auto;width:100%;height:100%;min-height:0}.choropleth-wrapper.pannable svg[data-v-ef6ce015]:active{cursor:grabbing}.choropleth-wrapper[data-v-ef6ce015] .state-path{cursor:pointer}.choropleth-city-overlay[data-v-ef6ce015]{pointer-events:none;position:absolute;top:0;left:0}.choropleth-cities[data-v-ef6ce015]{--choropleth-city-marker:#1a1a1a;--choropleth-city-halo:#fff;--choropleth-city-label-color:#1a1a1a;font-family:var(--font-family,system-ui, sans-serif)}.choropleth-cities[data-v-ef6ce015] .choropleth-city-dot{fill:var(--choropleth-city-marker);stroke:var(--choropleth-city-halo)}.choropleth-cities[data-v-ef6ce015] .choropleth-city-label{fill:var(--choropleth-city-label-color);stroke:var(--choropleth-city-halo);paint-order:stroke fill;stroke-linejoin:round;font-weight:500}.choropleth-canvas[data-v-ef6ce015]{pointer-events:none;will-change:transform;position:absolute;top:0;left:0}.choropleth-zoom-hint[data-v-ef6ce015]{z-index:1;text-align:center;color:var(--color-text-secondary,#777);opacity:.6;pointer-events:none;text-shadow:1px 0 0 var(--color-bg-0,#fff), -1px 0 0 var(--color-bg-0,#fff), 0 1px 0 var(--color-bg-0,#fff), 0 -1px 0 var(--color-bg-0,#fff), 0 0 3px var(--color-bg-0,#fff);padding-top:6px;font-size:12px;line-height:1.4;position:absolute;left:0;right:0}@container (width<=480px){.choropleth-zoom-hint[data-v-ef6ce015]{padding:0;position:static}}.choropleth-header[data-v-ef6ce015]{background:var(--choropleth-legend-bg);color:currentColor;border-radius:4px;flex-direction:column;align-items:center;gap:10px;width:fit-content;margin:0 auto;padding:8px 14px;display:flex}.choropleth-title[data-v-ef6ce015]{white-space:pre-line;font-size:14px;font-weight:600;line-height:1.2}.choropleth-legend[data-v-ef6ce015]{align-items:center;gap:14px;font-size:13px;line-height:1.2;display:flex}.choropleth-legend-title[data-v-ef6ce015]{font-weight:600}.choropleth-legend[data-v-ef6ce015]:has(.choropleth-legend-continuous){align-items:flex-start}.choropleth-legend:has(.choropleth-legend-continuous) .choropleth-legend-title[data-v-ef6ce015]{line-height:12px}.choropleth-legend-item[data-v-ef6ce015]{align-items:center;gap:6px;display:inline-flex}.choropleth-legend-swatch[data-v-ef6ce015]{border-radius:3px;width:12px;height:12px;display:inline-block}.choropleth-legend-continuous[data-v-ef6ce015]{flex-direction:column;width:160px;display:flex}.choropleth-legend-gradient[data-v-ef6ce015]{border-radius:2px;height:12px}.choropleth-legend-ticks[data-v-ef6ce015]{opacity:.7;height:14px;margin-top:4px;font-size:11px;position:relative}.choropleth-legend-ticks>span[data-v-ef6ce015]{position:absolute;transform:translate(-50%)}.chart-tooltip-anchor[data-v-44377f70]{pointer-events:none;width:1px;height:1px;position:absolute}.chart-tooltip-content{z-index:100;background:var(--color-bg-0,#fff);border:1px solid var(--color-border,#e5e7eb);font-size:var(--font-size-sm,.875rem);pointer-events:none;border-radius:.375em;padding:.5em .75em;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.TableOuter[data-v-9b1b6a76]{display:inline-block;position:relative}.TableOuter.full-width[data-v-9b1b6a76]{display:block}.TableWrapper[data-v-9b1b6a76]{font-size:var(--font-size-sm);overflow-x:auto}.Table[data-v-9b1b6a76]{border-collapse:collapse;font-variant-numeric:tabular-nums;border:1px solid var(--color-border);table-layout:fixed;margin:0;display:table}.Table.full-width[data-v-9b1b6a76]{width:100%}.Table tr[data-v-9b1b6a76],.Table th[data-v-9b1b6a76],.Table td[data-v-9b1b6a76]{background:0 0;border:none}.Table th[data-v-9b1b6a76],.Table td[data-v-9b1b6a76]{white-space:nowrap;text-overflow:ellipsis;text-align:left;padding:.75em 1.25em;overflow:hidden}.Table th.cell-wrap[data-v-9b1b6a76],.Table td.cell-wrap[data-v-9b1b6a76]{white-space:normal;text-overflow:clip;overflow:visible}.Table th[data-v-9b1b6a76]{border-bottom:1px solid var(--color-border-header);font-weight:600;position:sticky;top:0}.Table tbody td[data-v-9b1b6a76]{border-bottom:1px solid var(--color-border)}.Table tbody tr:last-child td[data-v-9b1b6a76]{border-bottom:none}.TableOuter[data-v-9b1b6a76] .chart-menu-trigger-area{top:4px;right:4px}.TableOuter[data-v-9b1b6a76] .chart-menu-button{opacity:1}.TableOuter.has-menu .Table thead th[data-v-9b1b6a76]:last-child{padding-right:2.5em}.data-table-download-button{border:1px solid var(--color-border);background:var(--color-bg-0,#fff);color:var(--color-text);font-size:var(--font-size-sm);cursor:pointer;border-radius:.25em;align-items:center;margin-top:.75em;padding:.5em 1em;display:inline-flex}.data-table-download-button:hover{background:var(--color-bg-1,#0000000d)}.data-table-download-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.data-table-download-link{text-align:right;font-size:var(--font-size-sm);margin-top:.25em;display:block}
2
2
  /*$vite$:1*/