@empoweredvote/ev-ui 0.3.0 → 0.4.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.
package/dist/index.mjs CHANGED
@@ -1221,7 +1221,6 @@ function Header({
1221
1221
  // src/SiteHeader.jsx
1222
1222
  import React3 from "react";
1223
1223
  var defaultNavItems = [
1224
- { label: "About Us", href: "https://empowered.vote/about" },
1225
1224
  {
1226
1225
  label: "Features",
1227
1226
  href: "#",
@@ -1229,12 +1228,10 @@ var defaultNavItems = [
1229
1228
  { label: "Political Compass", href: "https://compass.empowered.vote" },
1230
1229
  { label: "Find Representatives", href: "https://essentials.empowered.vote" },
1231
1230
  { label: "Read & Rank", href: "https://readrank.empowered.vote" },
1232
- { label: "Treasury Tracker", href: "https://ev-prototypes.netlify.app/treasury-tracker/dist" },
1233
- { label: "Empowered Badges", href: "https://ev-prototypes.netlify.app/empowered-badges/dist" }
1231
+ { label: "Treasury Tracker", href: "https://treasurytracker.empowered.vote" },
1232
+ { label: "Empowered Badges", href: "https://badges.empowered.vote" }
1234
1233
  ]
1235
- },
1236
- { label: "Volunteer", href: "https://empowered.vote/volunteer" },
1237
- { label: "FAQ", href: "https://empowered.vote/faq" }
1234
+ }
1238
1235
  ];
1239
1236
  var defaultCtaButton = {
1240
1237
  label: "Donate",
@@ -4172,15 +4169,168 @@ function TopicTierBadge({
4172
4169
  );
4173
4170
  }
4174
4171
 
4172
+ // src/CompassCoverageCallout.jsx
4173
+ import React19, { useState as useState10 } from "react";
4174
+ var TIER_LABELS = {
4175
+ federal: "federal",
4176
+ state: "state",
4177
+ local: "local"
4178
+ };
4179
+ function CompassCoverageCallout({
4180
+ tier,
4181
+ count,
4182
+ totalSelected,
4183
+ compassUrl,
4184
+ onDismiss
4185
+ }) {
4186
+ const [dismissed, setDismissed] = useState10(false);
4187
+ if (dismissed) return null;
4188
+ const tierLabel = TIER_LABELS[tier] || tier;
4189
+ const tierStyle = tierColors[tier] || tierColors.federal;
4190
+ const containerStyle2 = {
4191
+ display: "flex",
4192
+ alignItems: "flex-start",
4193
+ gap: spacing[3],
4194
+ padding: `${spacing[3]} ${spacing[4]}`,
4195
+ borderLeft: `4px solid ${tierStyle.text}`,
4196
+ backgroundColor: tierStyle.bg,
4197
+ borderRadius: `0 ${borderRadius.md} ${borderRadius.md} 0`,
4198
+ fontFamily: fonts.primary,
4199
+ margin: `${spacing[3]} 0`
4200
+ };
4201
+ const textStyle = {
4202
+ flex: 1,
4203
+ fontSize: fontSizes.sm,
4204
+ color: "#2d3748",
4205
+ lineHeight: 1.5
4206
+ };
4207
+ const headlineStyle = {
4208
+ fontWeight: fontWeights.semibold,
4209
+ marginBottom: spacing[1],
4210
+ color: tierStyle.text
4211
+ };
4212
+ const ctaStyle = {
4213
+ display: "inline-block",
4214
+ marginTop: spacing[2],
4215
+ padding: `${spacing[2]} ${spacing[4]}`,
4216
+ backgroundColor: tierStyle.text,
4217
+ color: "#ffffff",
4218
+ borderRadius: borderRadius.full,
4219
+ fontSize: fontSizes.sm,
4220
+ fontWeight: fontWeights.semibold,
4221
+ textDecoration: "none",
4222
+ cursor: "pointer"
4223
+ };
4224
+ const closeStyle = {
4225
+ background: "none",
4226
+ border: "none",
4227
+ padding: spacing[1],
4228
+ cursor: "pointer",
4229
+ color: "#718096",
4230
+ fontSize: fontSizes.lg,
4231
+ lineHeight: 1
4232
+ };
4233
+ const handleDismiss = () => {
4234
+ setDismissed(true);
4235
+ if (onDismiss) onDismiss();
4236
+ };
4237
+ return /* @__PURE__ */ React19.createElement(
4238
+ "div",
4239
+ {
4240
+ className: "ev-compass-coverage-callout",
4241
+ role: "status",
4242
+ style: containerStyle2
4243
+ },
4244
+ /* @__PURE__ */ React19.createElement("div", { style: textStyle }, /* @__PURE__ */ React19.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ React19.createElement("div", null, count === 0 ? `None of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. ` : `Only ${count} of your ${totalSelected != null ? totalSelected : "selected"} compass topics apply at the ${tierLabel} level. `, "Add more ", tierLabel, "-applicable topics to get better comparisons with ", tierLabel, " officials."), /* @__PURE__ */ React19.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
4245
+ onDismiss !== void 0 && /* @__PURE__ */ React19.createElement(
4246
+ "button",
4247
+ {
4248
+ onClick: handleDismiss,
4249
+ style: closeStyle,
4250
+ "aria-label": "Dismiss coverage callout"
4251
+ },
4252
+ "\xD7"
4253
+ )
4254
+ );
4255
+ }
4256
+
4257
+ // src/ExpandCompassNudge.jsx
4258
+ import React20 from "react";
4259
+ function ExpandCompassNudge({
4260
+ politicianName,
4261
+ missingCount,
4262
+ compassUrl,
4263
+ style = {}
4264
+ }) {
4265
+ if (!missingCount || missingCount <= 0) return null;
4266
+ const containerStyle2 = {
4267
+ display: "flex",
4268
+ flexDirection: "column",
4269
+ alignItems: "flex-start",
4270
+ gap: spacing[2],
4271
+ padding: spacing[4],
4272
+ marginTop: spacing[4],
4273
+ backgroundColor: "#F5F9FA",
4274
+ borderRadius: borderRadius.lg,
4275
+ border: "1px solid #e0e6eb",
4276
+ fontFamily: fonts.primary,
4277
+ ...style
4278
+ };
4279
+ const headlineStyle = {
4280
+ fontSize: fontSizes.base,
4281
+ fontWeight: fontWeights.semibold,
4282
+ color: "#2d3748",
4283
+ margin: 0
4284
+ };
4285
+ const bodyStyle = {
4286
+ fontSize: fontSizes.sm,
4287
+ color: "#4a5568",
4288
+ lineHeight: 1.5,
4289
+ margin: 0
4290
+ };
4291
+ const ctaStyle = {
4292
+ display: "inline-block",
4293
+ marginTop: spacing[2],
4294
+ padding: `${spacing[2]} ${spacing[4]}`,
4295
+ backgroundColor: "#00657c",
4296
+ color: "#ffffff",
4297
+ borderRadius: borderRadius.full,
4298
+ fontSize: fontSizes.sm,
4299
+ fontWeight: fontWeights.semibold,
4300
+ textDecoration: "none",
4301
+ cursor: "pointer"
4302
+ };
4303
+ const topicsLabel = missingCount === 1 ? "topic" : "topics";
4304
+ const speakerName = politicianName || "This politician";
4305
+ return /* @__PURE__ */ React20.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ React20.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ React20.createElement("p", { style: bodyStyle }, speakerName, " has stances on ", missingCount, " more ", topicsLabel, " you haven't answered yet. Expand your compass to see where you stand on all of them."), /* @__PURE__ */ React20.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
4306
+ }
4307
+
4308
+ // src/computeTierCoverage.js
4309
+ function computeTierCoverage(topics) {
4310
+ const counts = { federal: 0, state: 0, local: 0 };
4311
+ if (!Array.isArray(topics)) return counts;
4312
+ for (const t of topics) {
4313
+ if (!t) continue;
4314
+ const hasFlags = "applies_federal" in t || "applies_state" in t || "applies_local" in t;
4315
+ const f = hasFlags ? Boolean(t.applies_federal) : true;
4316
+ const s = hasFlags ? Boolean(t.applies_state) : true;
4317
+ const l = hasFlags ? Boolean(t.applies_local) : true;
4318
+ if (f) counts.federal++;
4319
+ if (s) counts.state++;
4320
+ if (l) counts.local++;
4321
+ }
4322
+ return counts;
4323
+ }
4324
+
4175
4325
  // src/StanceAccordion.jsx
4176
- import React20, { useState as useState10, useRef as useRef3, useCallback, useEffect as useEffect6 } from "react";
4326
+ import React22, { useState as useState11, useRef as useRef3, useCallback, useEffect as useEffect6 } from "react";
4177
4327
 
4178
4328
  // src/Favicon.jsx
4179
- import React19 from "react";
4329
+ import React21 from "react";
4180
4330
  function Favicon({ url, size = 16 }) {
4181
4331
  try {
4182
4332
  const domain = new URL(url).hostname;
4183
- return /* @__PURE__ */ React19.createElement(
4333
+ return /* @__PURE__ */ React21.createElement(
4184
4334
  "img",
4185
4335
  {
4186
4336
  src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
@@ -4191,7 +4341,7 @@ function Favicon({ url, size = 16 }) {
4191
4341
  }
4192
4342
  );
4193
4343
  } catch {
4194
- return /* @__PURE__ */ React19.createElement(
4344
+ return /* @__PURE__ */ React21.createElement(
4195
4345
  "svg",
4196
4346
  {
4197
4347
  width: size,
@@ -4202,8 +4352,8 @@ function Favicon({ url, size = 16 }) {
4202
4352
  strokeWidth: "1.5",
4203
4353
  style: { verticalAlign: "middle", flexShrink: 0 }
4204
4354
  },
4205
- /* @__PURE__ */ React19.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4206
- /* @__PURE__ */ React19.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
4355
+ /* @__PURE__ */ React21.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4356
+ /* @__PURE__ */ React21.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
4207
4357
  );
4208
4358
  }
4209
4359
  }
@@ -4234,9 +4384,9 @@ function StanceAccordion({
4234
4384
  apiUrl = "https://api.empowered.vote"
4235
4385
  }) {
4236
4386
  var _a;
4237
- const [expandedTopicId, setExpandedTopicId] = useState10(null);
4238
- const [loadingId, setLoadingId] = useState10(null);
4239
- const [showAll, setShowAll] = useState10(false);
4387
+ const [expandedTopicId, setExpandedTopicId] = useState11(null);
4388
+ const [loadingId, setLoadingId] = useState11(null);
4389
+ const [showAll, setShowAll] = useState11(false);
4240
4390
  const contextCache = useRef3(/* @__PURE__ */ new Map());
4241
4391
  const quotesCache = useRef3(null);
4242
4392
  const polAnswerMap = {};
@@ -4330,13 +4480,13 @@ function StanceAccordion({
4330
4480
  visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
4331
4481
  }
4332
4482
  }
4333
- return /* @__PURE__ */ React20.createElement(
4483
+ return /* @__PURE__ */ React22.createElement(
4334
4484
  "div",
4335
4485
  {
4336
4486
  className: "flex flex-col",
4337
4487
  style: { fontFamily: "'Manrope', sans-serif" }
4338
4488
  },
4339
- /* @__PURE__ */ React20.createElement(
4489
+ /* @__PURE__ */ React22.createElement(
4340
4490
  "h3",
4341
4491
  {
4342
4492
  className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
@@ -4358,15 +4508,15 @@ function StanceAccordion({
4358
4508
  if (topic.topic_key) return q.issue === topic.topic_key;
4359
4509
  return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
4360
4510
  }) : [];
4361
- return /* @__PURE__ */ React20.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ React20.createElement(
4511
+ return /* @__PURE__ */ React22.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ React22.createElement(
4362
4512
  "button",
4363
4513
  {
4364
4514
  type: "button",
4365
4515
  onClick: () => handleToggle(topicId),
4366
4516
  className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
4367
4517
  },
4368
- /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React20.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ React20.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ React20.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
4369
- /* @__PURE__ */ React20.createElement(
4518
+ /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React22.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ React22.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ React22.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
4519
+ /* @__PURE__ */ React22.createElement(
4370
4520
  "svg",
4371
4521
  {
4372
4522
  width: "16",
@@ -4383,9 +4533,9 @@ function StanceAccordion({
4383
4533
  transition: "transform 0.2s ease"
4384
4534
  }
4385
4535
  },
4386
- /* @__PURE__ */ React20.createElement("polyline", { points: "9 18 15 12 9 6" })
4536
+ /* @__PURE__ */ React22.createElement("polyline", { points: "9 18 15 12 9 6" })
4387
4537
  )
4388
- ), /* @__PURE__ */ React20.createElement(
4538
+ ), /* @__PURE__ */ React22.createElement(
4389
4539
  "div",
4390
4540
  {
4391
4541
  style: {
@@ -4394,7 +4544,7 @@ function StanceAccordion({
4394
4544
  transition: "grid-template-rows 0.25s ease"
4395
4545
  }
4396
4546
  },
4397
- /* @__PURE__ */ React20.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ React20.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ React20.createElement(
4547
+ /* @__PURE__ */ React22.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ React22.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ React22.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ React22.createElement(
4398
4548
  "div",
4399
4549
  {
4400
4550
  style: {
@@ -4406,14 +4556,14 @@ function StanceAccordion({
4406
4556
  animation: "ev-spin 0.8s linear infinite"
4407
4557
  }
4408
4558
  }
4409
- )), !isLoading && cached && /* @__PURE__ */ React20.createElement(React20.Fragment, null, cached.reasoning ? /* @__PURE__ */ React20.createElement(
4559
+ )), !isLoading && cached && /* @__PURE__ */ React22.createElement(React22.Fragment, null, cached.reasoning ? /* @__PURE__ */ React22.createElement(
4410
4560
  "p",
4411
4561
  {
4412
4562
  className: "text-sm text-neutral-700 mb-3",
4413
4563
  style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
4414
4564
  },
4415
4565
  cached.reasoning
4416
- ) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React20.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ React20.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ React20.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ React20.createElement(
4566
+ ) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ React22.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React22.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ React22.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ React22.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ React22.createElement(
4417
4567
  "a",
4418
4568
  {
4419
4569
  href: src,
@@ -4421,9 +4571,9 @@ function StanceAccordion({
4421
4571
  rel: "noreferrer",
4422
4572
  className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
4423
4573
  },
4424
- /* @__PURE__ */ React20.createElement(Favicon, { url: src }),
4425
- /* @__PURE__ */ React20.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
4426
- ))))), topicQuotes.length > 0 && /* @__PURE__ */ React20.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ React20.createElement(
4574
+ /* @__PURE__ */ React22.createElement(Favicon, { url: src }),
4575
+ /* @__PURE__ */ React22.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
4576
+ ))))), topicQuotes.length > 0 && /* @__PURE__ */ React22.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ React22.createElement(
4427
4577
  "p",
4428
4578
  {
4429
4579
  style: {
@@ -4440,7 +4590,7 @@ function StanceAccordion({
4440
4590
  const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
4441
4591
  const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
4442
4592
  const sourceName = quote.source_name || quote.sourceName;
4443
- return /* @__PURE__ */ React20.createElement(
4593
+ return /* @__PURE__ */ React22.createElement(
4444
4594
  "div",
4445
4595
  {
4446
4596
  key: quote.id,
@@ -4452,7 +4602,7 @@ function StanceAccordion({
4452
4602
  marginBottom: "8px"
4453
4603
  }
4454
4604
  },
4455
- /* @__PURE__ */ React20.createElement(
4605
+ /* @__PURE__ */ React22.createElement(
4456
4606
  "p",
4457
4607
  {
4458
4608
  style: {
@@ -4465,7 +4615,7 @@ function StanceAccordion({
4465
4615
  },
4466
4616
  quote.text
4467
4617
  ),
4468
- verdict === "agreed" && /* @__PURE__ */ React20.createElement(
4618
+ verdict === "agreed" && /* @__PURE__ */ React22.createElement(
4469
4619
  "span",
4470
4620
  {
4471
4621
  style: {
@@ -4482,10 +4632,10 @@ function StanceAccordion({
4482
4632
  flexShrink: 0
4483
4633
  }
4484
4634
  },
4485
- /* @__PURE__ */ React20.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("path", { d: "M5 13l4 4L19 7" })),
4635
+ /* @__PURE__ */ React22.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React22.createElement("path", { d: "M5 13l4 4L19 7" })),
4486
4636
  "Agreed"
4487
4637
  ),
4488
- verdict === "disagreed" && /* @__PURE__ */ React20.createElement(
4638
+ verdict === "disagreed" && /* @__PURE__ */ React22.createElement(
4489
4639
  "span",
4490
4640
  {
4491
4641
  style: {
@@ -4502,10 +4652,10 @@ function StanceAccordion({
4502
4652
  flexShrink: 0
4503
4653
  }
4504
4654
  },
4505
- /* @__PURE__ */ React20.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
4655
+ /* @__PURE__ */ React22.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React22.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
4506
4656
  "Disagreed"
4507
4657
  ),
4508
- sourceName && /* @__PURE__ */ React20.createElement(
4658
+ sourceName && /* @__PURE__ */ React22.createElement(
4509
4659
  "a",
4510
4660
  {
4511
4661
  href: quote.source_url || quote.sourceUrl,
@@ -4522,10 +4672,10 @@ function StanceAccordion({
4522
4672
  sourceName
4523
4673
  )
4524
4674
  );
4525
- })), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ React20.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
4675
+ })), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ React22.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
4526
4676
  ));
4527
4677
  }),
4528
- hasToggle && /* @__PURE__ */ React20.createElement(
4678
+ hasToggle && /* @__PURE__ */ React22.createElement(
4529
4679
  "button",
4530
4680
  {
4531
4681
  type: "button",
@@ -4539,9 +4689,9 @@ function StanceAccordion({
4539
4689
  }
4540
4690
 
4541
4691
  // src/icons.js
4542
- import React21 from "react";
4692
+ import React23 from "react";
4543
4693
  function BallotIcon({ size = 16, color = "currentColor" }) {
4544
- return /* @__PURE__ */ React21.createElement(
4694
+ return /* @__PURE__ */ React23.createElement(
4545
4695
  "svg",
4546
4696
  {
4547
4697
  width: size,
@@ -4554,13 +4704,13 @@ function BallotIcon({ size = 16, color = "currentColor" }) {
4554
4704
  strokeLinejoin: "round",
4555
4705
  xmlns: "http://www.w3.org/2000/svg"
4556
4706
  },
4557
- /* @__PURE__ */ React21.createElement("path", { d: "m9 12 2 2 4-4" }),
4558
- /* @__PURE__ */ React21.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
4559
- /* @__PURE__ */ React21.createElement("path", { d: "M22 19H2" })
4707
+ /* @__PURE__ */ React23.createElement("path", { d: "m9 12 2 2 4-4" }),
4708
+ /* @__PURE__ */ React23.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
4709
+ /* @__PURE__ */ React23.createElement("path", { d: "M22 19H2" })
4560
4710
  );
4561
4711
  }
4562
4712
  function CompassIcon({ size = 16, color = "currentColor" }) {
4563
- return /* @__PURE__ */ React21.createElement(
4713
+ return /* @__PURE__ */ React23.createElement(
4564
4714
  "svg",
4565
4715
  {
4566
4716
  width: size,
@@ -4573,27 +4723,27 @@ function CompassIcon({ size = 16, color = "currentColor" }) {
4573
4723
  strokeLinejoin: "round",
4574
4724
  xmlns: "http://www.w3.org/2000/svg"
4575
4725
  },
4576
- /* @__PURE__ */ React21.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4577
- /* @__PURE__ */ React21.createElement("path", { d: "m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z" })
4726
+ /* @__PURE__ */ React23.createElement("circle", { cx: "12", cy: "12", r: "10" }),
4727
+ /* @__PURE__ */ React23.createElement("path", { d: "m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z" })
4578
4728
  );
4579
4729
  }
4580
4730
  function BranchIcon({ size = 16, color = "currentColor", branch }) {
4581
4731
  let paths;
4582
4732
  switch (branch) {
4583
4733
  case "executive":
4584
- paths = /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ React21.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ React21.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ React21.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ React21.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ React21.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ React21.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ React21.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ React21.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ React21.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
4734
+ paths = /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ React23.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ React23.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ React23.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ React23.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ React23.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ React23.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ React23.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ React23.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ React23.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
4585
4735
  break;
4586
4736
  case "legislative":
4587
- paths = /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("path", { d: "M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4" }), /* @__PURE__ */ React21.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ React21.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ React21.createElement("path", { d: "M15 12h-5" }));
4737
+ paths = /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("path", { d: "M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4" }), /* @__PURE__ */ React23.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ React23.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ React23.createElement("path", { d: "M15 12h-5" }));
4588
4738
  break;
4589
4739
  case "judicial":
4590
- paths = /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ React21.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ React21.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ React21.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ React21.createElement("path", { d: "M8 21h8" }));
4740
+ paths = /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ React23.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ React23.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ React23.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ React23.createElement("path", { d: "M8 21h8" }));
4591
4741
  break;
4592
4742
  default:
4593
- paths = /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ React21.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }), /* @__PURE__ */ React21.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ React21.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ React21.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ React21.createElement("path", { d: "M6 18v-7" }));
4743
+ paths = /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ React23.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }), /* @__PURE__ */ React23.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ React23.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ React23.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ React23.createElement("path", { d: "M6 18v-7" }));
4594
4744
  break;
4595
4745
  }
4596
- return /* @__PURE__ */ React21.createElement(
4746
+ return /* @__PURE__ */ React23.createElement(
4597
4747
  "svg",
4598
4748
  {
4599
4749
  width: size,
@@ -4615,7 +4765,9 @@ export {
4615
4765
  BranchIcon,
4616
4766
  CategorySection,
4617
4767
  CommitteeTable,
4768
+ CompassCoverageCallout,
4618
4769
  CompassIcon,
4770
+ ExpandCompassNudge,
4619
4771
  FilterSidebar,
4620
4772
  GovernmentBodySection,
4621
4773
  Header,
@@ -4637,6 +4789,7 @@ export {
4637
4789
  breakpoints,
4638
4790
  colorScales,
4639
4791
  colors,
4792
+ computeTierCoverage,
4640
4793
  dataVizPalette,
4641
4794
  defaultCtaButton,
4642
4795
  defaultNavItems,