@empoweredvote/ev-ui 0.9.9 → 0.10.0
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.js +671 -349
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +649 -328
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1690,8 +1690,328 @@ function SiteHeader({
|
|
|
1690
1690
|
);
|
|
1691
1691
|
}
|
|
1692
1692
|
|
|
1693
|
+
// src/SiteFooter.jsx
|
|
1694
|
+
import React6, { useId, useRef as useRef3, useState as useState4 } from "react";
|
|
1695
|
+
var SIGNUP_ENDPOINT_DEFAULT = "https://gq2nohazl3447rhtau34o6yqs40vpude.lambda-url.us-east-1.on.aws/";
|
|
1696
|
+
var DEFAULT_LINKS = [
|
|
1697
|
+
{ label: "Mind Map", href: "https://empowered.vote/maps/purpose-map.html" },
|
|
1698
|
+
{ label: "Briefing", href: "https://empowered.vote/briefing" },
|
|
1699
|
+
{ label: "Financials", href: "https://financials.empowered.vote", external: true }
|
|
1700
|
+
];
|
|
1701
|
+
function SiteFooter({
|
|
1702
|
+
darkMode = false,
|
|
1703
|
+
brandLabel = "Empowered Vote \xB7 Alpha",
|
|
1704
|
+
year,
|
|
1705
|
+
links = DEFAULT_LINKS,
|
|
1706
|
+
newsletter = true,
|
|
1707
|
+
endpoint = SIGNUP_ENDPOINT_DEFAULT,
|
|
1708
|
+
className = "",
|
|
1709
|
+
style = {}
|
|
1710
|
+
}) {
|
|
1711
|
+
const [open, setOpen] = useState4(false);
|
|
1712
|
+
const [submitting, setSubmitting] = useState4(false);
|
|
1713
|
+
const [note, setNote] = useState4(null);
|
|
1714
|
+
const formRef = useRef3(null);
|
|
1715
|
+
const emailRef = useRef3(null);
|
|
1716
|
+
const uid = useId().replace(/:/g, "");
|
|
1717
|
+
const formId = `ev-sf-form-${uid}`;
|
|
1718
|
+
const emailId = `ev-sf-email-${uid}`;
|
|
1719
|
+
const noteId = `ev-sf-note-${uid}`;
|
|
1720
|
+
const resolvedYear = year != null ? year : (/* @__PURE__ */ new Date()).getFullYear();
|
|
1721
|
+
const t = darkMode ? {
|
|
1722
|
+
bg: "#131416",
|
|
1723
|
+
borderTop: "#2D2D32",
|
|
1724
|
+
brand: "#F2F2F2",
|
|
1725
|
+
muted: "#8B949E",
|
|
1726
|
+
link: "#8B949E",
|
|
1727
|
+
linkHover: "#F2F2F2",
|
|
1728
|
+
dot: "#FFD740",
|
|
1729
|
+
inputBg: "#1C1C1F",
|
|
1730
|
+
inputBorder: "#41454E",
|
|
1731
|
+
inputText: "#F2F2F2",
|
|
1732
|
+
placeholder: "#8B949E",
|
|
1733
|
+
btnBg: "#F2F2F2",
|
|
1734
|
+
btnText: "#111113",
|
|
1735
|
+
btnHover: "#FFFFFF",
|
|
1736
|
+
teal: "#1DA8C6",
|
|
1737
|
+
coral: "#FF6B52",
|
|
1738
|
+
noteText: "#F2F2F2",
|
|
1739
|
+
noteBg: "rgba(29, 168, 198, 0.15)",
|
|
1740
|
+
errorBg: "rgba(255, 107, 82, 0.18)"
|
|
1741
|
+
} : {
|
|
1742
|
+
bg: "#F7F7F8",
|
|
1743
|
+
borderTop: "#E5E7EB",
|
|
1744
|
+
brand: "#1C1C1C",
|
|
1745
|
+
muted: "#6B7280",
|
|
1746
|
+
link: "#6B7280",
|
|
1747
|
+
linkHover: "#1C1C1C",
|
|
1748
|
+
dot: "#FED12E",
|
|
1749
|
+
inputBg: "#FFFFFF",
|
|
1750
|
+
inputBorder: "#D3D7DE",
|
|
1751
|
+
inputText: "#1C1C1C",
|
|
1752
|
+
placeholder: "#6B7280",
|
|
1753
|
+
btnBg: "#1C1C1C",
|
|
1754
|
+
btnText: "#FFFFFF",
|
|
1755
|
+
btnHover: "#000000",
|
|
1756
|
+
teal: "#00657C",
|
|
1757
|
+
coral: "#FF5740",
|
|
1758
|
+
noteText: "#1C1C1C",
|
|
1759
|
+
noteBg: "rgba(0, 101, 124, 0.10)",
|
|
1760
|
+
errorBg: "rgba(255, 87, 64, 0.12)"
|
|
1761
|
+
};
|
|
1762
|
+
function toggle() {
|
|
1763
|
+
setOpen((prev) => {
|
|
1764
|
+
const next = !prev;
|
|
1765
|
+
if (next) {
|
|
1766
|
+
setTimeout(() => emailRef.current && emailRef.current.focus(), 260);
|
|
1767
|
+
}
|
|
1768
|
+
return next;
|
|
1769
|
+
});
|
|
1770
|
+
}
|
|
1771
|
+
function handleSubmit(e) {
|
|
1772
|
+
e.preventDefault();
|
|
1773
|
+
const form = formRef.current;
|
|
1774
|
+
if (!form) return;
|
|
1775
|
+
const emailInput = form.elements.email;
|
|
1776
|
+
if (emailInput && !emailInput.checkValidity()) {
|
|
1777
|
+
emailInput.reportValidity();
|
|
1778
|
+
return;
|
|
1779
|
+
}
|
|
1780
|
+
const payload = {
|
|
1781
|
+
email: emailInput ? emailInput.value.trim() : "",
|
|
1782
|
+
company: form.elements.company && form.elements.company.value || ""
|
|
1783
|
+
// honeypot
|
|
1784
|
+
};
|
|
1785
|
+
setSubmitting(true);
|
|
1786
|
+
setNote({ msg: "Adding you\u2026", kind: null });
|
|
1787
|
+
fetch(endpoint, {
|
|
1788
|
+
method: "POST",
|
|
1789
|
+
headers: { "Content-Type": "application/json" },
|
|
1790
|
+
body: JSON.stringify(payload)
|
|
1791
|
+
}).then((r) => r.json().catch(() => ({ ok: r.ok }))).then((data) => {
|
|
1792
|
+
if (data && data.ok) {
|
|
1793
|
+
form.reset();
|
|
1794
|
+
setNote({ msg: "You\u2019re on the list \u2014 thanks for following the build. \u{1F389}", kind: "ok" });
|
|
1795
|
+
} else {
|
|
1796
|
+
setNote({ msg: data && data.error || "Something went wrong. Please try again.", kind: "error" });
|
|
1797
|
+
}
|
|
1798
|
+
}).catch(() => {
|
|
1799
|
+
setNote({ msg: "Couldn\u2019t reach us just now. Please try again in a moment.", kind: "error" });
|
|
1800
|
+
}).then(() => setSubmitting(false));
|
|
1801
|
+
}
|
|
1802
|
+
const rootStyle = {
|
|
1803
|
+
borderTop: `1px solid ${t.borderTop}`,
|
|
1804
|
+
padding: "32px 0 40px",
|
|
1805
|
+
background: t.bg,
|
|
1806
|
+
color: t.muted,
|
|
1807
|
+
fontFamily: fonts.primary,
|
|
1808
|
+
fontSize: "0.88rem",
|
|
1809
|
+
// CSS custom props consumed by the scoped <style> for pseudo-selectors.
|
|
1810
|
+
"--ev-sf-placeholder": t.placeholder,
|
|
1811
|
+
"--ev-sf-focus": t.teal,
|
|
1812
|
+
"--ev-sf-input-bg": t.inputBg,
|
|
1813
|
+
"--ev-sf-input-border": t.inputBorder,
|
|
1814
|
+
"--ev-sf-input-text": t.inputText,
|
|
1815
|
+
...style
|
|
1816
|
+
};
|
|
1817
|
+
const linkBase = { color: t.link, textDecoration: "none", transition: "color 0.15s ease" };
|
|
1818
|
+
const onLinkEnter = (e) => {
|
|
1819
|
+
e.currentTarget.style.color = t.linkHover;
|
|
1820
|
+
};
|
|
1821
|
+
const onLinkLeave = (e) => {
|
|
1822
|
+
e.currentTarget.style.color = t.link;
|
|
1823
|
+
};
|
|
1824
|
+
return /* @__PURE__ */ React6.createElement("footer", { className: `ev-site-footer ${className}`.trim(), style: rootStyle }, /* @__PURE__ */ React6.createElement("style", null, CSS), /* @__PURE__ */ React6.createElement("div", { className: "ev-sf-wrap" }, /* @__PURE__ */ React6.createElement("span", { className: "ev-sf-brand", style: { color: t.brand, fontWeight: fontWeights.bold } }, /* @__PURE__ */ React6.createElement("span", { className: "ev-sf-dot", style: { background: t.dot } }), brandLabel), /* @__PURE__ */ React6.createElement("span", { className: "ev-sf-links" }, /* @__PURE__ */ React6.createElement("span", { style: { color: t.muted } }, "\xA9 ", resolvedYear), links.map((link) => /* @__PURE__ */ React6.createElement(
|
|
1825
|
+
"a",
|
|
1826
|
+
{
|
|
1827
|
+
key: link.href,
|
|
1828
|
+
href: link.href,
|
|
1829
|
+
style: linkBase,
|
|
1830
|
+
onMouseEnter: onLinkEnter,
|
|
1831
|
+
onMouseLeave: onLinkLeave,
|
|
1832
|
+
...link.external ? { target: "_blank", rel: "noopener noreferrer" } : {}
|
|
1833
|
+
},
|
|
1834
|
+
link.label
|
|
1835
|
+
)), newsletter && /* @__PURE__ */ React6.createElement(React6.Fragment, null, /* @__PURE__ */ React6.createElement(
|
|
1836
|
+
"button",
|
|
1837
|
+
{
|
|
1838
|
+
type: "button",
|
|
1839
|
+
className: "ev-sf-toggle",
|
|
1840
|
+
"aria-expanded": open,
|
|
1841
|
+
"aria-controls": formId,
|
|
1842
|
+
onClick: toggle,
|
|
1843
|
+
style: { color: open ? t.linkHover : t.link },
|
|
1844
|
+
onMouseEnter: (e) => {
|
|
1845
|
+
e.currentTarget.style.color = t.linkHover;
|
|
1846
|
+
},
|
|
1847
|
+
onMouseLeave: (e) => {
|
|
1848
|
+
e.currentTarget.style.color = open ? t.linkHover : t.link;
|
|
1849
|
+
}
|
|
1850
|
+
},
|
|
1851
|
+
"Newsletter ",
|
|
1852
|
+
/* @__PURE__ */ React6.createElement("span", { className: "ev-sf-caret", "aria-hidden": "true" }, "\u25B8")
|
|
1853
|
+
), /* @__PURE__ */ React6.createElement(
|
|
1854
|
+
"form",
|
|
1855
|
+
{
|
|
1856
|
+
ref: formRef,
|
|
1857
|
+
className: `ev-sf-form${open ? " open" : ""}`,
|
|
1858
|
+
id: formId,
|
|
1859
|
+
method: "post",
|
|
1860
|
+
noValidate: true,
|
|
1861
|
+
"aria-hidden": !open,
|
|
1862
|
+
onSubmit: handleSubmit
|
|
1863
|
+
},
|
|
1864
|
+
/* @__PURE__ */ React6.createElement("label", { className: "ev-sf-sr-only", htmlFor: emailId }, "Email address"),
|
|
1865
|
+
/* @__PURE__ */ React6.createElement(
|
|
1866
|
+
"input",
|
|
1867
|
+
{
|
|
1868
|
+
ref: emailRef,
|
|
1869
|
+
id: emailId,
|
|
1870
|
+
name: "email",
|
|
1871
|
+
type: "email",
|
|
1872
|
+
required: true,
|
|
1873
|
+
autoComplete: "email",
|
|
1874
|
+
placeholder: "you@example.com",
|
|
1875
|
+
tabIndex: open ? 0 : -1,
|
|
1876
|
+
style: {
|
|
1877
|
+
background: t.inputBg,
|
|
1878
|
+
borderColor: t.inputBorder,
|
|
1879
|
+
color: t.inputText
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1882
|
+
),
|
|
1883
|
+
/* @__PURE__ */ React6.createElement("div", { className: "ev-sf-hp", "aria-hidden": "true" }, /* @__PURE__ */ React6.createElement("label", null, "Company", /* @__PURE__ */ React6.createElement("input", { type: "text", name: "company", tabIndex: -1, autoComplete: "off" }))),
|
|
1884
|
+
/* @__PURE__ */ React6.createElement(
|
|
1885
|
+
"button",
|
|
1886
|
+
{
|
|
1887
|
+
type: "submit",
|
|
1888
|
+
className: "ev-sf-btn",
|
|
1889
|
+
tabIndex: open ? 0 : -1,
|
|
1890
|
+
disabled: submitting,
|
|
1891
|
+
style: { background: t.btnBg, color: t.btnText },
|
|
1892
|
+
onMouseEnter: (e) => {
|
|
1893
|
+
if (!submitting) e.currentTarget.style.background = t.btnHover;
|
|
1894
|
+
},
|
|
1895
|
+
onMouseLeave: (e) => {
|
|
1896
|
+
e.currentTarget.style.background = t.btnBg;
|
|
1897
|
+
}
|
|
1898
|
+
},
|
|
1899
|
+
"Subscribe"
|
|
1900
|
+
)
|
|
1901
|
+
), /* @__PURE__ */ React6.createElement(
|
|
1902
|
+
"p",
|
|
1903
|
+
{
|
|
1904
|
+
className: "ev-sf-note",
|
|
1905
|
+
id: noteId,
|
|
1906
|
+
role: "status",
|
|
1907
|
+
"aria-live": "polite",
|
|
1908
|
+
hidden: !note,
|
|
1909
|
+
style: note ? {
|
|
1910
|
+
color: t.noteText,
|
|
1911
|
+
background: note.kind === "error" ? t.errorBg : t.noteBg,
|
|
1912
|
+
borderColor: note.kind === "error" ? t.coral : t.teal
|
|
1913
|
+
} : void 0
|
|
1914
|
+
},
|
|
1915
|
+
note ? note.msg : ""
|
|
1916
|
+
)))));
|
|
1917
|
+
}
|
|
1918
|
+
var CSS = `
|
|
1919
|
+
.ev-site-footer .ev-sf-wrap {
|
|
1920
|
+
max-width: 1280px; margin: 0 auto; padding: 0 24px;
|
|
1921
|
+
display: flex; justify-content: space-between; align-items: center;
|
|
1922
|
+
flex-wrap: wrap; gap: 12px;
|
|
1923
|
+
}
|
|
1924
|
+
.ev-site-footer .ev-sf-brand {
|
|
1925
|
+
display: inline-flex; align-items: center; gap: 10px;
|
|
1926
|
+
}
|
|
1927
|
+
.ev-site-footer .ev-sf-dot {
|
|
1928
|
+
width: 10px; height: 10px; border-radius: 2px; flex: 0 0 auto;
|
|
1929
|
+
}
|
|
1930
|
+
.ev-site-footer .ev-sf-links {
|
|
1931
|
+
display: inline-flex; align-items: center; gap: 18px; flex-wrap: wrap;
|
|
1932
|
+
}
|
|
1933
|
+
.ev-site-footer .ev-sf-sr-only {
|
|
1934
|
+
position: absolute; width: 1px; height: 1px;
|
|
1935
|
+
padding: 0; margin: -1px; overflow: hidden;
|
|
1936
|
+
clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
|
|
1937
|
+
}
|
|
1938
|
+
.ev-site-footer .ev-sf-hp {
|
|
1939
|
+
position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden;
|
|
1940
|
+
}
|
|
1941
|
+
.ev-site-footer .ev-sf-toggle {
|
|
1942
|
+
font: inherit; background: none; border: none; padding: 0; cursor: pointer;
|
|
1943
|
+
display: inline-flex; align-items: center; gap: 5px;
|
|
1944
|
+
transition: color 0.15s ease;
|
|
1945
|
+
}
|
|
1946
|
+
.ev-site-footer .ev-sf-toggle:focus-visible {
|
|
1947
|
+
outline: 2px solid var(--ev-sf-focus); outline-offset: 3px; border-radius: 4px;
|
|
1948
|
+
}
|
|
1949
|
+
.ev-site-footer .ev-sf-caret {
|
|
1950
|
+
font-size: 0.7em; display: inline-block; transition: transform 0.25s ease;
|
|
1951
|
+
}
|
|
1952
|
+
.ev-site-footer .ev-sf-toggle[aria-expanded="true"] .ev-sf-caret {
|
|
1953
|
+
transform: rotate(90deg);
|
|
1954
|
+
}
|
|
1955
|
+
/* Collapsed by default; slides open to the right, pushing the links left.
|
|
1956
|
+
margin-left cancels the parent flex gap so there is no phantom slot when closed. */
|
|
1957
|
+
.ev-site-footer .ev-sf-form {
|
|
1958
|
+
display: flex; align-items: center; gap: 8px;
|
|
1959
|
+
max-width: 0; opacity: 0; margin-left: -18px;
|
|
1960
|
+
overflow: hidden; pointer-events: none;
|
|
1961
|
+
transition: max-width 0.4s cubic-bezier(.4, 0, .2, 1), opacity 0.3s ease, margin-left 0.4s ease;
|
|
1962
|
+
}
|
|
1963
|
+
.ev-site-footer .ev-sf-form.open {
|
|
1964
|
+
max-width: 360px; opacity: 1; margin-left: 0; pointer-events: auto;
|
|
1965
|
+
}
|
|
1966
|
+
.ev-site-footer .ev-sf-form input[type="email"] {
|
|
1967
|
+
width: 188px; flex: 0 0 auto; min-width: 0;
|
|
1968
|
+
font-family: inherit; font-size: 0.9rem;
|
|
1969
|
+
color: var(--ev-sf-input-text); background: var(--ev-sf-input-bg);
|
|
1970
|
+
border: 1.5px solid var(--ev-sf-input-border);
|
|
1971
|
+
border-radius: 999px; padding: 9px 15px;
|
|
1972
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
1973
|
+
}
|
|
1974
|
+
.ev-site-footer .ev-sf-form input[type="email"]::placeholder { color: var(--ev-sf-placeholder); }
|
|
1975
|
+
.ev-site-footer .ev-sf-form input[type="email"]:focus {
|
|
1976
|
+
outline: 2px solid transparent; outline-offset: 1px;
|
|
1977
|
+
border-color: var(--ev-sf-focus);
|
|
1978
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--ev-sf-focus) 20%, transparent);
|
|
1979
|
+
}
|
|
1980
|
+
.ev-site-footer .ev-sf-btn {
|
|
1981
|
+
font-family: inherit; font-weight: 700; font-size: 0.88rem;
|
|
1982
|
+
white-space: nowrap; padding: 9px 18px;
|
|
1983
|
+
border: 1.5px solid transparent; border-radius: 999px; cursor: pointer;
|
|
1984
|
+
transition: background 0.15s ease, transform 0.15s ease;
|
|
1985
|
+
}
|
|
1986
|
+
.ev-site-footer .ev-sf-btn:hover { transform: translateY(-1px); }
|
|
1987
|
+
.ev-site-footer .ev-sf-btn:disabled { opacity: 0.7; cursor: default; transform: none; }
|
|
1988
|
+
.ev-site-footer .ev-sf-btn:focus-visible {
|
|
1989
|
+
outline: 2px solid var(--ev-sf-focus); outline-offset: 2px;
|
|
1990
|
+
}
|
|
1991
|
+
.ev-site-footer .ev-sf-note {
|
|
1992
|
+
flex-basis: 100%; width: 100%;
|
|
1993
|
+
font-size: 0.82rem; line-height: 1.4;
|
|
1994
|
+
margin: 12px 0 0; padding: 11px 14px;
|
|
1995
|
+
border-radius: 10px; text-align: right;
|
|
1996
|
+
border: 1px solid transparent;
|
|
1997
|
+
}
|
|
1998
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1999
|
+
.ev-site-footer .ev-sf-form { transition: opacity 0.2s ease; }
|
|
2000
|
+
.ev-site-footer .ev-sf-caret { transition: none; }
|
|
2001
|
+
.ev-site-footer .ev-sf-btn:hover { transform: none; }
|
|
2002
|
+
}
|
|
2003
|
+
@media (max-width: 640px) {
|
|
2004
|
+
.ev-site-footer .ev-sf-wrap { flex-direction: column; align-items: flex-start; gap: 10px; }
|
|
2005
|
+
}
|
|
2006
|
+
@media (max-width: 480px) {
|
|
2007
|
+
.ev-site-footer .ev-sf-form.open { flex-basis: 100%; max-width: 100%; margin-left: 0; }
|
|
2008
|
+
.ev-site-footer .ev-sf-form.open input[type="email"] { flex: 1; width: auto; }
|
|
2009
|
+
.ev-site-footer .ev-sf-note { text-align: left; }
|
|
2010
|
+
}
|
|
2011
|
+
`;
|
|
2012
|
+
|
|
1693
2013
|
// src/FilterSidebar.jsx
|
|
1694
|
-
import
|
|
2014
|
+
import React7 from "react";
|
|
1695
2015
|
function FilterSidebar({
|
|
1696
2016
|
title = "Filter by",
|
|
1697
2017
|
zipCode = "",
|
|
@@ -1845,14 +2165,14 @@ function FilterSidebar({
|
|
|
1845
2165
|
fontSize: fontSizes.sm
|
|
1846
2166
|
}
|
|
1847
2167
|
};
|
|
1848
|
-
return /* @__PURE__ */
|
|
2168
|
+
return /* @__PURE__ */ React7.createElement("aside", { style: styles2.sidebar, className: "ev-filter-sidebar" }, !isMobile && /* @__PURE__ */ React7.createElement("h2", { style: styles2.title }, title), /* @__PURE__ */ React7.createElement("div", { style: isMobile ? void 0 : styles2.contentTop }, /* @__PURE__ */ React7.createElement("div", { style: isMobile ? { marginBottom: spacing[3] } : styles2.section }, !isMobile && /* @__PURE__ */ React7.createElement("label", { style: styles2.sectionLabel }, "Location"), autocompleteContainerRef ? /* @__PURE__ */ React7.createElement(
|
|
1849
2169
|
"div",
|
|
1850
2170
|
{
|
|
1851
2171
|
ref: autocompleteContainerRef,
|
|
1852
2172
|
style: styles2.zipInputWrapper,
|
|
1853
2173
|
className: "ev-autocomplete-container"
|
|
1854
2174
|
}
|
|
1855
|
-
) : /* @__PURE__ */
|
|
2175
|
+
) : /* @__PURE__ */ React7.createElement("div", { style: styles2.zipInputWrapper }, /* @__PURE__ */ React7.createElement(
|
|
1856
2176
|
"input",
|
|
1857
2177
|
{
|
|
1858
2178
|
ref: zipInputRef,
|
|
@@ -1864,7 +2184,7 @@ function FilterSidebar({
|
|
|
1864
2184
|
style: styles2.zipInput,
|
|
1865
2185
|
"aria-label": "Search location"
|
|
1866
2186
|
}
|
|
1867
|
-
), /* @__PURE__ */
|
|
2187
|
+
), /* @__PURE__ */ React7.createElement(
|
|
1868
2188
|
"button",
|
|
1869
2189
|
{
|
|
1870
2190
|
type: "button",
|
|
@@ -1873,7 +2193,7 @@ function FilterSidebar({
|
|
|
1873
2193
|
"aria-label": "Clear ZIP code"
|
|
1874
2194
|
},
|
|
1875
2195
|
"\xD7"
|
|
1876
|
-
))), /* @__PURE__ */
|
|
2196
|
+
))), /* @__PURE__ */ React7.createElement("div", { style: isMobile ? {} : styles2.section }, !isMobile && /* @__PURE__ */ React7.createElement("label", { style: styles2.sectionLabel }, "Group"), /* @__PURE__ */ React7.createElement("div", { style: styles2.radioGroup, role: "radiogroup", "aria-label": "Filter by group" }, filterOptions.map((option) => /* @__PURE__ */ React7.createElement("label", { key: option.value, style: styles2.radioLabel }, /* @__PURE__ */ React7.createElement(
|
|
1877
2197
|
"input",
|
|
1878
2198
|
{
|
|
1879
2199
|
type: "radio",
|
|
@@ -1883,18 +2203,18 @@ function FilterSidebar({
|
|
|
1883
2203
|
onChange: () => onFilterChange == null ? void 0 : onFilterChange(option.value),
|
|
1884
2204
|
style: styles2.radioInput
|
|
1885
2205
|
}
|
|
1886
|
-
), option.label))))), !isMobile && /* @__PURE__ */
|
|
2206
|
+
), option.label))))), !isMobile && /* @__PURE__ */ React7.createElement("div", { style: styles2.imageSection }, locationLabel && /* @__PURE__ */ React7.createElement("div", { style: styles2.locationLabel }, locationLabel), buildingImageSrc ? /* @__PURE__ */ React7.createElement(
|
|
1887
2207
|
"img",
|
|
1888
2208
|
{
|
|
1889
2209
|
src: buildingImageSrc,
|
|
1890
2210
|
alt: `${selectedFilter} government building`,
|
|
1891
2211
|
style: styles2.buildingImage
|
|
1892
2212
|
}
|
|
1893
|
-
) : /* @__PURE__ */
|
|
2213
|
+
) : /* @__PURE__ */ React7.createElement("div", { style: styles2.buildingPlaceholder }, "No image")));
|
|
1894
2214
|
}
|
|
1895
2215
|
|
|
1896
2216
|
// src/PoliticianCard.jsx
|
|
1897
|
-
import
|
|
2217
|
+
import React8, { useState as useState5, useEffect as useEffect5 } from "react";
|
|
1898
2218
|
function PoliticianCard({
|
|
1899
2219
|
id,
|
|
1900
2220
|
imageSrc,
|
|
@@ -2062,7 +2382,7 @@ function PoliticianCard({
|
|
|
2062
2382
|
textTransform: "uppercase"
|
|
2063
2383
|
}
|
|
2064
2384
|
};
|
|
2065
|
-
const CompassIcon2 = () => /* @__PURE__ */
|
|
2385
|
+
const CompassIcon2 = () => /* @__PURE__ */ React8.createElement(
|
|
2066
2386
|
"svg",
|
|
2067
2387
|
{
|
|
2068
2388
|
style: styles2.compassIcon,
|
|
@@ -2070,7 +2390,7 @@ function PoliticianCard({
|
|
|
2070
2390
|
fill: "none",
|
|
2071
2391
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2072
2392
|
},
|
|
2073
|
-
/* @__PURE__ */
|
|
2393
|
+
/* @__PURE__ */ React8.createElement(
|
|
2074
2394
|
"polygon",
|
|
2075
2395
|
{
|
|
2076
2396
|
points: "12,1 21.5,6.5 21.5,17.5 12,23 2.5,17.5 2.5,6.5",
|
|
@@ -2080,13 +2400,13 @@ function PoliticianCard({
|
|
|
2080
2400
|
strokeLinejoin: "round"
|
|
2081
2401
|
}
|
|
2082
2402
|
),
|
|
2083
|
-
/* @__PURE__ */
|
|
2084
|
-
/* @__PURE__ */
|
|
2085
|
-
/* @__PURE__ */
|
|
2086
|
-
/* @__PURE__ */
|
|
2087
|
-
/* @__PURE__ */
|
|
2088
|
-
/* @__PURE__ */
|
|
2089
|
-
/* @__PURE__ */
|
|
2403
|
+
/* @__PURE__ */ React8.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "1", stroke: "currentColor", strokeWidth: "1" }),
|
|
2404
|
+
/* @__PURE__ */ React8.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2405
|
+
/* @__PURE__ */ React8.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2406
|
+
/* @__PURE__ */ React8.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "23", stroke: "currentColor", strokeWidth: "1" }),
|
|
2407
|
+
/* @__PURE__ */ React8.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2408
|
+
/* @__PURE__ */ React8.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2409
|
+
/* @__PURE__ */ React8.createElement(
|
|
2090
2410
|
"polygon",
|
|
2091
2411
|
{
|
|
2092
2412
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -2094,7 +2414,7 @@ function PoliticianCard({
|
|
|
2094
2414
|
opacity: "0.35"
|
|
2095
2415
|
}
|
|
2096
2416
|
),
|
|
2097
|
-
/* @__PURE__ */
|
|
2417
|
+
/* @__PURE__ */ React8.createElement(
|
|
2098
2418
|
"polygon",
|
|
2099
2419
|
{
|
|
2100
2420
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -2105,7 +2425,7 @@ function PoliticianCard({
|
|
|
2105
2425
|
}
|
|
2106
2426
|
)
|
|
2107
2427
|
);
|
|
2108
|
-
const [imgError, setImgError] =
|
|
2428
|
+
const [imgError, setImgError] = useState5(false);
|
|
2109
2429
|
useEffect5(() => {
|
|
2110
2430
|
setImgError(false);
|
|
2111
2431
|
}, [imageSrc]);
|
|
@@ -2115,7 +2435,7 @@ function PoliticianCard({
|
|
|
2115
2435
|
const initials = parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_a = parts[0]) == null ? void 0 : _a[0]) || "?";
|
|
2116
2436
|
return initials.toUpperCase();
|
|
2117
2437
|
};
|
|
2118
|
-
return /* @__PURE__ */
|
|
2438
|
+
return /* @__PURE__ */ React8.createElement(
|
|
2119
2439
|
"div",
|
|
2120
2440
|
{
|
|
2121
2441
|
style: styles2.card,
|
|
@@ -2140,8 +2460,8 @@ function PoliticianCard({
|
|
|
2140
2460
|
}
|
|
2141
2461
|
}
|
|
2142
2462
|
},
|
|
2143
|
-
badge && /* @__PURE__ */
|
|
2144
|
-
/* @__PURE__ */
|
|
2463
|
+
badge && /* @__PURE__ */ React8.createElement("span", { style: styles2.badge }, badge),
|
|
2464
|
+
/* @__PURE__ */ React8.createElement("div", { style: styles2.imageWrapper }, imageSrc && !imgError ? /* @__PURE__ */ React8.createElement(
|
|
2145
2465
|
"img",
|
|
2146
2466
|
{
|
|
2147
2467
|
src: imageSrc,
|
|
@@ -2149,9 +2469,9 @@ function PoliticianCard({
|
|
|
2149
2469
|
style: styles2.image,
|
|
2150
2470
|
onError: () => setImgError(true)
|
|
2151
2471
|
}
|
|
2152
|
-
) : /* @__PURE__ */
|
|
2153
|
-
/* @__PURE__ */
|
|
2154
|
-
onCompassClick && /* @__PURE__ */
|
|
2472
|
+
) : /* @__PURE__ */ React8.createElement("div", { style: styles2.imagePlaceholder }, getInitials(name))),
|
|
2473
|
+
/* @__PURE__ */ React8.createElement("div", { style: styles2.content }, /* @__PURE__ */ React8.createElement("h3", { style: styles2.name }, name), /* @__PURE__ */ React8.createElement("p", { style: styles2.title }, title), subtitle && /* @__PURE__ */ React8.createElement("p", { style: styles2.subtitle }, subtitle), footer && /* @__PURE__ */ React8.createElement("div", { style: { marginTop: "auto", marginLeft: "-5px" } }, footer)),
|
|
2474
|
+
onCompassClick && /* @__PURE__ */ React8.createElement(
|
|
2155
2475
|
"button",
|
|
2156
2476
|
{
|
|
2157
2477
|
type: "button",
|
|
@@ -2166,19 +2486,19 @@ function PoliticianCard({
|
|
|
2166
2486
|
},
|
|
2167
2487
|
"aria-label": `View ${name}'s compass`
|
|
2168
2488
|
},
|
|
2169
|
-
/* @__PURE__ */
|
|
2489
|
+
/* @__PURE__ */ React8.createElement(CompassIcon2, null)
|
|
2170
2490
|
)
|
|
2171
2491
|
);
|
|
2172
2492
|
}
|
|
2173
2493
|
|
|
2174
2494
|
// src/CompassCardHorizontal.jsx
|
|
2175
|
-
import
|
|
2495
|
+
import React12, { useState as useState7, useEffect as useEffect6 } from "react";
|
|
2176
2496
|
|
|
2177
2497
|
// src/CompassCardHorizontalMeta.jsx
|
|
2178
|
-
import
|
|
2498
|
+
import React11 from "react";
|
|
2179
2499
|
|
|
2180
2500
|
// src/IconOverlay.jsx
|
|
2181
|
-
import
|
|
2501
|
+
import React10, { useState as useState6 } from "react";
|
|
2182
2502
|
import {
|
|
2183
2503
|
useFloating,
|
|
2184
2504
|
useHover,
|
|
@@ -2194,9 +2514,9 @@ import {
|
|
|
2194
2514
|
} from "@floating-ui/react";
|
|
2195
2515
|
|
|
2196
2516
|
// src/icons.js
|
|
2197
|
-
import
|
|
2517
|
+
import React9 from "react";
|
|
2198
2518
|
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
2199
|
-
return /* @__PURE__ */
|
|
2519
|
+
return /* @__PURE__ */ React9.createElement(
|
|
2200
2520
|
"svg",
|
|
2201
2521
|
{
|
|
2202
2522
|
width: size,
|
|
@@ -2209,13 +2529,13 @@ function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
|
2209
2529
|
strokeLinejoin: "round",
|
|
2210
2530
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2211
2531
|
},
|
|
2212
|
-
/* @__PURE__ */
|
|
2213
|
-
/* @__PURE__ */
|
|
2214
|
-
/* @__PURE__ */
|
|
2532
|
+
/* @__PURE__ */ React9.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
2533
|
+
/* @__PURE__ */ React9.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
2534
|
+
/* @__PURE__ */ React9.createElement("path", { d: "M22 19H2" })
|
|
2215
2535
|
);
|
|
2216
2536
|
}
|
|
2217
2537
|
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
2218
|
-
return /* @__PURE__ */
|
|
2538
|
+
return /* @__PURE__ */ React9.createElement(
|
|
2219
2539
|
"svg",
|
|
2220
2540
|
{
|
|
2221
2541
|
width: size,
|
|
@@ -2228,27 +2548,27 @@ function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
|
2228
2548
|
strokeLinejoin: "round",
|
|
2229
2549
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2230
2550
|
},
|
|
2231
|
-
/* @__PURE__ */
|
|
2232
|
-
/* @__PURE__ */
|
|
2551
|
+
/* @__PURE__ */ React9.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
2552
|
+
/* @__PURE__ */ React9.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" })
|
|
2233
2553
|
);
|
|
2234
2554
|
}
|
|
2235
2555
|
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
2236
2556
|
let paths;
|
|
2237
2557
|
switch (branch) {
|
|
2238
2558
|
case "executive":
|
|
2239
|
-
paths = /* @__PURE__ */
|
|
2559
|
+
paths = /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ React9.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ React9.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ React9.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ React9.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ React9.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ React9.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ React9.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ React9.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ React9.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
|
|
2240
2560
|
break;
|
|
2241
2561
|
case "legislative":
|
|
2242
|
-
paths = /* @__PURE__ */
|
|
2562
|
+
paths = /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.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__ */ React9.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ React9.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ React9.createElement("path", { d: "M15 12h-5" }));
|
|
2243
2563
|
break;
|
|
2244
2564
|
case "judicial":
|
|
2245
|
-
paths = /* @__PURE__ */
|
|
2565
|
+
paths = /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ React9.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ React9.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ React9.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ React9.createElement("path", { d: "M8 21h8" }));
|
|
2246
2566
|
break;
|
|
2247
2567
|
default:
|
|
2248
|
-
paths = /* @__PURE__ */
|
|
2568
|
+
paths = /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ React9.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__ */ React9.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ React9.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ React9.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ React9.createElement("path", { d: "M6 18v-7" }));
|
|
2249
2569
|
break;
|
|
2250
2570
|
}
|
|
2251
|
-
return /* @__PURE__ */
|
|
2571
|
+
return /* @__PURE__ */ React9.createElement(
|
|
2252
2572
|
"svg",
|
|
2253
2573
|
{
|
|
2254
2574
|
width: size,
|
|
@@ -2267,7 +2587,7 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
|
2267
2587
|
|
|
2268
2588
|
// src/IconOverlay.jsx
|
|
2269
2589
|
function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
|
|
2270
|
-
const [isOpen, setIsOpen] =
|
|
2590
|
+
const [isOpen, setIsOpen] = useState6(false);
|
|
2271
2591
|
const { refs, floatingStyles, context } = useFloating({
|
|
2272
2592
|
open: isOpen,
|
|
2273
2593
|
onOpenChange: setIsOpen,
|
|
@@ -2284,7 +2604,7 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2284
2604
|
dismiss,
|
|
2285
2605
|
role
|
|
2286
2606
|
]);
|
|
2287
|
-
return /* @__PURE__ */
|
|
2607
|
+
return /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(
|
|
2288
2608
|
"span",
|
|
2289
2609
|
{
|
|
2290
2610
|
ref: refs.setReference,
|
|
@@ -2297,8 +2617,8 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2297
2617
|
onClick(e);
|
|
2298
2618
|
} : void 0
|
|
2299
2619
|
},
|
|
2300
|
-
/* @__PURE__ */
|
|
2301
|
-
), isOpen && /* @__PURE__ */
|
|
2620
|
+
/* @__PURE__ */ React10.createElement(IconComponent, { size, color, ...extraProps })
|
|
2621
|
+
), isOpen && /* @__PURE__ */ React10.createElement(FloatingPortal, null, /* @__PURE__ */ React10.createElement(
|
|
2302
2622
|
"div",
|
|
2303
2623
|
{
|
|
2304
2624
|
ref: refs.setFloating,
|
|
@@ -2322,7 +2642,7 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2322
2642
|
function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
2323
2643
|
if (!ballot && !hasStances && !branch) return null;
|
|
2324
2644
|
const ballotTooltip = ballot ? `This seat is on your ballot \u2014 ${ballot.electionLabel}: ${new Date(ballot.electionDate).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" })}` : null;
|
|
2325
|
-
return /* @__PURE__ */
|
|
2645
|
+
return /* @__PURE__ */ React10.createElement(
|
|
2326
2646
|
"div",
|
|
2327
2647
|
{
|
|
2328
2648
|
style: {
|
|
@@ -2335,7 +2655,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2335
2655
|
// offset icon wrapper padding so icons align flush-left with text
|
|
2336
2656
|
}
|
|
2337
2657
|
},
|
|
2338
|
-
ballot && /* @__PURE__ */
|
|
2658
|
+
ballot && /* @__PURE__ */ React10.createElement(
|
|
2339
2659
|
IconWithTooltip,
|
|
2340
2660
|
{
|
|
2341
2661
|
IconComponent: BallotIcon,
|
|
@@ -2344,7 +2664,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2344
2664
|
size: 14
|
|
2345
2665
|
}
|
|
2346
2666
|
),
|
|
2347
|
-
hasStances && /* @__PURE__ */
|
|
2667
|
+
hasStances && /* @__PURE__ */ React10.createElement(
|
|
2348
2668
|
IconWithTooltip,
|
|
2349
2669
|
{
|
|
2350
2670
|
IconComponent: CompassIcon,
|
|
@@ -2354,7 +2674,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2354
2674
|
onClick: onCompassClick
|
|
2355
2675
|
}
|
|
2356
2676
|
),
|
|
2357
|
-
branch && /* @__PURE__ */
|
|
2677
|
+
branch && /* @__PURE__ */ React10.createElement(
|
|
2358
2678
|
IconWithTooltip,
|
|
2359
2679
|
{
|
|
2360
2680
|
IconComponent: BranchIcon,
|
|
@@ -2374,20 +2694,20 @@ function CompassCardHorizontalMeta({
|
|
|
2374
2694
|
userAnswers
|
|
2375
2695
|
}) {
|
|
2376
2696
|
const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
|
|
2377
|
-
return /* @__PURE__ */
|
|
2697
|
+
return /* @__PURE__ */ React11.createElement("div", { style: {
|
|
2378
2698
|
flex: 1,
|
|
2379
2699
|
minWidth: 0,
|
|
2380
2700
|
display: "flex",
|
|
2381
2701
|
flexDirection: "column",
|
|
2382
2702
|
gap: spacing[1]
|
|
2383
|
-
} }, /* @__PURE__ */
|
|
2703
|
+
} }, /* @__PURE__ */ React11.createElement("p", { style: {
|
|
2384
2704
|
fontFamily: fonts.primary,
|
|
2385
2705
|
fontSize: fontSizes.lg,
|
|
2386
2706
|
fontWeight: fontWeights.semibold,
|
|
2387
2707
|
lineHeight: 1.4,
|
|
2388
2708
|
color: colors.evMutedBlue,
|
|
2389
2709
|
margin: 0
|
|
2390
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
2710
|
+
} }, politician.full_name), /* @__PURE__ */ React11.createElement("p", { style: {
|
|
2391
2711
|
fontFamily: fonts.primary,
|
|
2392
2712
|
fontSize: fontSizes.sm,
|
|
2393
2713
|
fontWeight: fontWeights.semibold,
|
|
@@ -2398,7 +2718,7 @@ function CompassCardHorizontalMeta({
|
|
|
2398
2718
|
display: "-webkit-box",
|
|
2399
2719
|
WebkitLineClamp: 2,
|
|
2400
2720
|
WebkitBoxOrient: "vertical"
|
|
2401
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
2721
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ React11.createElement("p", { style: {
|
|
2402
2722
|
fontFamily: fonts.primary,
|
|
2403
2723
|
fontSize: fontSizes.sm,
|
|
2404
2724
|
fontWeight: fontWeights.regular,
|
|
@@ -2408,7 +2728,7 @@ function CompassCardHorizontalMeta({
|
|
|
2408
2728
|
overflow: "hidden",
|
|
2409
2729
|
textOverflow: "ellipsis",
|
|
2410
2730
|
whiteSpace: "nowrap"
|
|
2411
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
2731
|
+
} }, politician.district_label), /* @__PURE__ */ React11.createElement(
|
|
2412
2732
|
IconOverlay,
|
|
2413
2733
|
{
|
|
2414
2734
|
ballot: politician.ballot || null,
|
|
@@ -2457,10 +2777,10 @@ function CompassCardHorizontal({
|
|
|
2457
2777
|
onClick
|
|
2458
2778
|
}) {
|
|
2459
2779
|
var _a;
|
|
2460
|
-
const [hovered, setHovered] =
|
|
2461
|
-
const [focused, setFocused] =
|
|
2462
|
-
const [imgError, setImgError] =
|
|
2463
|
-
const [emptyCtaHovered, setEmptyCtaHovered] =
|
|
2780
|
+
const [hovered, setHovered] = useState7(false);
|
|
2781
|
+
const [focused, setFocused] = useState7(false);
|
|
2782
|
+
const [imgError, setImgError] = useState7(false);
|
|
2783
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = useState7(false);
|
|
2464
2784
|
useEffect6(() => {
|
|
2465
2785
|
setImgError(false);
|
|
2466
2786
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
@@ -2485,7 +2805,7 @@ function CompassCardHorizontal({
|
|
|
2485
2805
|
function renderCompass() {
|
|
2486
2806
|
var _a2, _b, _c;
|
|
2487
2807
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2488
|
-
return /* @__PURE__ */
|
|
2808
|
+
return /* @__PURE__ */ React12.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2489
2809
|
}
|
|
2490
2810
|
let topics = [];
|
|
2491
2811
|
let data = {};
|
|
@@ -2521,12 +2841,12 @@ function CompassCardHorizontal({
|
|
|
2521
2841
|
}, {}) : politician.stances;
|
|
2522
2842
|
}
|
|
2523
2843
|
if (topics.length === 0) {
|
|
2524
|
-
return /* @__PURE__ */
|
|
2844
|
+
return /* @__PURE__ */ React12.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2525
2845
|
}
|
|
2526
2846
|
} catch (err) {
|
|
2527
|
-
return /* @__PURE__ */
|
|
2847
|
+
return /* @__PURE__ */ React12.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2528
2848
|
}
|
|
2529
|
-
return /* @__PURE__ */
|
|
2849
|
+
return /* @__PURE__ */ React12.createElement(
|
|
2530
2850
|
RadarChartCore,
|
|
2531
2851
|
{
|
|
2532
2852
|
topics,
|
|
@@ -2548,7 +2868,7 @@ function CompassCardHorizontal({
|
|
|
2548
2868
|
var _a2, _b, _c;
|
|
2549
2869
|
const imageSrc = (politician == null ? void 0 : politician.photo_origin_url) || (politician == null ? void 0 : politician.images) && ((_a2 = politician.images[0]) == null ? void 0 : _a2.url) || null;
|
|
2550
2870
|
if (imageSrc && !imgError) {
|
|
2551
|
-
return /* @__PURE__ */
|
|
2871
|
+
return /* @__PURE__ */ React12.createElement(
|
|
2552
2872
|
"img",
|
|
2553
2873
|
{
|
|
2554
2874
|
src: imageSrc,
|
|
@@ -2566,7 +2886,7 @@ function CompassCardHorizontal({
|
|
|
2566
2886
|
}
|
|
2567
2887
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2568
2888
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2569
|
-
return /* @__PURE__ */
|
|
2889
|
+
return /* @__PURE__ */ React12.createElement("div", { style: {
|
|
2570
2890
|
width: "100%",
|
|
2571
2891
|
height: "100%",
|
|
2572
2892
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2580,7 +2900,7 @@ function CompassCardHorizontal({
|
|
|
2580
2900
|
} }, initials);
|
|
2581
2901
|
}
|
|
2582
2902
|
function renderEmptyVariant() {
|
|
2583
|
-
return /* @__PURE__ */
|
|
2903
|
+
return /* @__PURE__ */ React12.createElement("div", { style: {
|
|
2584
2904
|
width: "100%",
|
|
2585
2905
|
height: "100%",
|
|
2586
2906
|
display: "flex",
|
|
@@ -2591,14 +2911,14 @@ function CompassCardHorizontal({
|
|
|
2591
2911
|
padding: "12px 14px",
|
|
2592
2912
|
boxSizing: "border-box",
|
|
2593
2913
|
backgroundColor: colorScales.teal["050"]
|
|
2594
|
-
} }, /* @__PURE__ */
|
|
2914
|
+
} }, /* @__PURE__ */ React12.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ React12.createElement("p", { style: {
|
|
2595
2915
|
margin: 0,
|
|
2596
2916
|
fontSize: fontSizes.xs,
|
|
2597
2917
|
color: colors.textMuted,
|
|
2598
2918
|
textAlign: "center",
|
|
2599
2919
|
lineHeight: 1.4,
|
|
2600
2920
|
fontFamily: fonts.primary
|
|
2601
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
2921
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ React12.createElement(
|
|
2602
2922
|
"button",
|
|
2603
2923
|
{
|
|
2604
2924
|
type: "button",
|
|
@@ -2626,7 +2946,7 @@ function CompassCardHorizontal({
|
|
|
2626
2946
|
));
|
|
2627
2947
|
}
|
|
2628
2948
|
function renderUnavailablePlate(message = "Compass currently unavailable for this role.") {
|
|
2629
|
-
return /* @__PURE__ */
|
|
2949
|
+
return /* @__PURE__ */ React12.createElement("div", { style: {
|
|
2630
2950
|
width: "100%",
|
|
2631
2951
|
height: "100%",
|
|
2632
2952
|
backgroundColor: colorScales.teal["050"],
|
|
@@ -2635,7 +2955,7 @@ function CompassCardHorizontal({
|
|
|
2635
2955
|
justifyContent: "center",
|
|
2636
2956
|
padding: spacing[4],
|
|
2637
2957
|
boxSizing: "border-box"
|
|
2638
|
-
} }, /* @__PURE__ */
|
|
2958
|
+
} }, /* @__PURE__ */ React12.createElement("p", { style: {
|
|
2639
2959
|
fontSize: fontSizes.sm,
|
|
2640
2960
|
fontWeight: fontWeights.semibold,
|
|
2641
2961
|
lineHeight: 1.4,
|
|
@@ -2654,7 +2974,7 @@ function CompassCardHorizontal({
|
|
|
2654
2974
|
const name = (politician == null ? void 0 : politician.full_name) || "this official";
|
|
2655
2975
|
return renderUnavailablePlate(`No compass stances on file for ${name} yet.`);
|
|
2656
2976
|
}
|
|
2657
|
-
return /* @__PURE__ */
|
|
2977
|
+
return /* @__PURE__ */ React12.createElement("div", { style: {
|
|
2658
2978
|
width: "100%",
|
|
2659
2979
|
height: "100%",
|
|
2660
2980
|
display: "flex",
|
|
@@ -2664,7 +2984,7 @@ function CompassCardHorizontal({
|
|
|
2664
2984
|
boxSizing: "border-box"
|
|
2665
2985
|
} }, renderCompass());
|
|
2666
2986
|
}
|
|
2667
|
-
return /* @__PURE__ */
|
|
2987
|
+
return /* @__PURE__ */ React12.createElement(
|
|
2668
2988
|
"div",
|
|
2669
2989
|
{
|
|
2670
2990
|
role: "article",
|
|
@@ -2683,7 +3003,7 @@ function CompassCardHorizontal({
|
|
|
2683
3003
|
onFocus: () => setFocused(true),
|
|
2684
3004
|
onBlur: () => setFocused(false)
|
|
2685
3005
|
},
|
|
2686
|
-
/* @__PURE__ */
|
|
3006
|
+
/* @__PURE__ */ React12.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ React12.createElement("div", { style: {
|
|
2687
3007
|
position: "absolute",
|
|
2688
3008
|
bottom: "15px",
|
|
2689
3009
|
left: 0,
|
|
@@ -2698,7 +3018,7 @@ function CompassCardHorizontal({
|
|
|
2698
3018
|
padding: "6px 0",
|
|
2699
3019
|
pointerEvents: "none"
|
|
2700
3020
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed")),
|
|
2701
|
-
/* @__PURE__ */
|
|
3021
|
+
/* @__PURE__ */ React12.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ React12.createElement(
|
|
2702
3022
|
CompassCardHorizontalMeta,
|
|
2703
3023
|
{
|
|
2704
3024
|
politician,
|
|
@@ -2710,7 +3030,7 @@ function CompassCardHorizontal({
|
|
|
2710
3030
|
}
|
|
2711
3031
|
|
|
2712
3032
|
// src/CompassCardVertical.jsx
|
|
2713
|
-
import
|
|
3033
|
+
import React13, { useState as useState8, useEffect as useEffect7 } from "react";
|
|
2714
3034
|
var RADAR_SIZE2 = 400;
|
|
2715
3035
|
function CompassCardVertical({
|
|
2716
3036
|
politician,
|
|
@@ -2724,10 +3044,10 @@ function CompassCardVertical({
|
|
|
2724
3044
|
onClick
|
|
2725
3045
|
}) {
|
|
2726
3046
|
var _a;
|
|
2727
|
-
const [hovered, setHovered] =
|
|
2728
|
-
const [focused, setFocused] =
|
|
2729
|
-
const [imgError, setImgError] =
|
|
2730
|
-
const [emptyCtaHovered, setEmptyCtaHovered] =
|
|
3047
|
+
const [hovered, setHovered] = useState8(false);
|
|
3048
|
+
const [focused, setFocused] = useState8(false);
|
|
3049
|
+
const [imgError, setImgError] = useState8(false);
|
|
3050
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = useState8(false);
|
|
2731
3051
|
useEffect7(() => {
|
|
2732
3052
|
setImgError(false);
|
|
2733
3053
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
@@ -2751,7 +3071,7 @@ function CompassCardVertical({
|
|
|
2751
3071
|
function renderCompass() {
|
|
2752
3072
|
var _a2, _b, _c;
|
|
2753
3073
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2754
|
-
return /* @__PURE__ */
|
|
3074
|
+
return /* @__PURE__ */ React13.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2755
3075
|
}
|
|
2756
3076
|
let topics = [];
|
|
2757
3077
|
let data = {};
|
|
@@ -2787,17 +3107,17 @@ function CompassCardVertical({
|
|
|
2787
3107
|
}, {}) : politician.stances;
|
|
2788
3108
|
}
|
|
2789
3109
|
if (topics.length === 0) {
|
|
2790
|
-
return /* @__PURE__ */
|
|
3110
|
+
return /* @__PURE__ */ React13.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2791
3111
|
}
|
|
2792
3112
|
} catch {
|
|
2793
|
-
return /* @__PURE__ */
|
|
3113
|
+
return /* @__PURE__ */ React13.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2794
3114
|
}
|
|
2795
3115
|
const unansweredSpokes = {};
|
|
2796
3116
|
for (const t of topics) {
|
|
2797
3117
|
const v = compareData[t.short_title];
|
|
2798
3118
|
if (!v || Number(v) === 0) unansweredSpokes[t.short_title] = true;
|
|
2799
3119
|
}
|
|
2800
|
-
return /* @__PURE__ */
|
|
3120
|
+
return /* @__PURE__ */ React13.createElement("div", { style: { width: RADAR_SIZE2 + 240, maxWidth: "100%", flexShrink: 0 } }, /* @__PURE__ */ React13.createElement(
|
|
2801
3121
|
RadarChartCore,
|
|
2802
3122
|
{
|
|
2803
3123
|
topics,
|
|
@@ -2832,7 +3152,7 @@ function CompassCardVertical({
|
|
|
2832
3152
|
justifyContent: "center"
|
|
2833
3153
|
};
|
|
2834
3154
|
if (imageSrc && !imgError) {
|
|
2835
|
-
return /* @__PURE__ */
|
|
3155
|
+
return /* @__PURE__ */ React13.createElement("div", { style: baseStyle }, /* @__PURE__ */ React13.createElement(
|
|
2836
3156
|
"img",
|
|
2837
3157
|
{
|
|
2838
3158
|
src: imageSrc,
|
|
@@ -2850,7 +3170,7 @@ function CompassCardVertical({
|
|
|
2850
3170
|
}
|
|
2851
3171
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2852
3172
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2853
|
-
return /* @__PURE__ */
|
|
3173
|
+
return /* @__PURE__ */ React13.createElement("div", { style: baseStyle }, /* @__PURE__ */ React13.createElement("span", { style: {
|
|
2854
3174
|
color: colors.textWhite,
|
|
2855
3175
|
fontFamily: fonts.primary,
|
|
2856
3176
|
fontWeight: fontWeights.bold,
|
|
@@ -2861,7 +3181,7 @@ function CompassCardVertical({
|
|
|
2861
3181
|
var _a2, _b, _c;
|
|
2862
3182
|
const imageSrc = (politician == null ? void 0 : politician.photo_origin_url) || (politician == null ? void 0 : politician.images) && ((_a2 = politician.images[0]) == null ? void 0 : _a2.url) || null;
|
|
2863
3183
|
if (imageSrc && !imgError) {
|
|
2864
|
-
return /* @__PURE__ */
|
|
3184
|
+
return /* @__PURE__ */ React13.createElement(
|
|
2865
3185
|
"img",
|
|
2866
3186
|
{
|
|
2867
3187
|
src: imageSrc,
|
|
@@ -2880,7 +3200,7 @@ function CompassCardVertical({
|
|
|
2880
3200
|
}
|
|
2881
3201
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2882
3202
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2883
|
-
return /* @__PURE__ */
|
|
3203
|
+
return /* @__PURE__ */ React13.createElement("div", { style: {
|
|
2884
3204
|
width: RADAR_SIZE2,
|
|
2885
3205
|
height: RADAR_SIZE2,
|
|
2886
3206
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2895,7 +3215,7 @@ function CompassCardVertical({
|
|
|
2895
3215
|
} }, initials);
|
|
2896
3216
|
}
|
|
2897
3217
|
function renderEmptyVariant() {
|
|
2898
|
-
return /* @__PURE__ */
|
|
3218
|
+
return /* @__PURE__ */ React13.createElement("div", { style: {
|
|
2899
3219
|
width: "100%",
|
|
2900
3220
|
height: "100%",
|
|
2901
3221
|
flex: 1,
|
|
@@ -2908,14 +3228,14 @@ function CompassCardVertical({
|
|
|
2908
3228
|
boxSizing: "border-box",
|
|
2909
3229
|
backgroundColor: colorScales.teal["050"],
|
|
2910
3230
|
borderRadius: borderRadius.md
|
|
2911
|
-
} }, /* @__PURE__ */
|
|
3231
|
+
} }, /* @__PURE__ */ React13.createElement(PlaceholderRadar, { size: 220, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ React13.createElement("p", { style: {
|
|
2912
3232
|
margin: 0,
|
|
2913
3233
|
fontSize: fontSizes.sm,
|
|
2914
3234
|
color: colors.textMuted,
|
|
2915
3235
|
textAlign: "center",
|
|
2916
3236
|
lineHeight: 1.4,
|
|
2917
3237
|
fontFamily: fonts.primary
|
|
2918
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
3238
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ React13.createElement(
|
|
2919
3239
|
"button",
|
|
2920
3240
|
{
|
|
2921
3241
|
type: "button",
|
|
@@ -2941,7 +3261,7 @@ function CompassCardVertical({
|
|
|
2941
3261
|
));
|
|
2942
3262
|
}
|
|
2943
3263
|
function renderUnavailablePlate(message) {
|
|
2944
|
-
return /* @__PURE__ */
|
|
3264
|
+
return /* @__PURE__ */ React13.createElement("div", { style: {
|
|
2945
3265
|
width: "100%",
|
|
2946
3266
|
height: "100%",
|
|
2947
3267
|
flex: 1,
|
|
@@ -2952,7 +3272,7 @@ function CompassCardVertical({
|
|
|
2952
3272
|
justifyContent: "center",
|
|
2953
3273
|
padding: spacing[6],
|
|
2954
3274
|
boxSizing: "border-box"
|
|
2955
|
-
} }, /* @__PURE__ */
|
|
3275
|
+
} }, /* @__PURE__ */ React13.createElement("p", { style: {
|
|
2956
3276
|
fontSize: fontSizes.base,
|
|
2957
3277
|
fontWeight: fontWeights.semibold,
|
|
2958
3278
|
lineHeight: 1.4,
|
|
@@ -2973,7 +3293,7 @@ function CompassCardVertical({
|
|
|
2973
3293
|
}
|
|
2974
3294
|
return renderCompass();
|
|
2975
3295
|
}
|
|
2976
|
-
return /* @__PURE__ */
|
|
3296
|
+
return /* @__PURE__ */ React13.createElement(
|
|
2977
3297
|
"div",
|
|
2978
3298
|
{
|
|
2979
3299
|
role: "article",
|
|
@@ -2992,21 +3312,21 @@ function CompassCardVertical({
|
|
|
2992
3312
|
onFocus: () => setFocused(true),
|
|
2993
3313
|
onBlur: () => setFocused(false)
|
|
2994
3314
|
},
|
|
2995
|
-
/* @__PURE__ */
|
|
3315
|
+
/* @__PURE__ */ React13.createElement("div", { style: { padding: spacing[4], paddingBottom: spacing[3], display: "flex", alignItems: "stretch", gap: spacing[3], flexShrink: 0 } }, renderAvatar(), /* @__PURE__ */ React13.createElement("div", { style: { display: "flex", flexDirection: "column", gap: spacing[1], minWidth: 0, flex: 1 } }, /* @__PURE__ */ React13.createElement("p", { style: {
|
|
2996
3316
|
fontFamily: fonts.primary,
|
|
2997
3317
|
fontSize: fontSizes.xl,
|
|
2998
3318
|
fontWeight: fontWeights.semibold,
|
|
2999
3319
|
lineHeight: 1.3,
|
|
3000
3320
|
color: colors.evMutedBlue,
|
|
3001
3321
|
margin: 0
|
|
3002
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
3322
|
+
} }, politician.full_name), /* @__PURE__ */ React13.createElement("p", { style: {
|
|
3003
3323
|
fontFamily: fonts.primary,
|
|
3004
3324
|
fontSize: fontSizes.sm,
|
|
3005
3325
|
fontWeight: fontWeights.semibold,
|
|
3006
3326
|
lineHeight: 1.4,
|
|
3007
3327
|
color: colors.textSecondary,
|
|
3008
3328
|
margin: 0
|
|
3009
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
3329
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ React13.createElement("p", { style: {
|
|
3010
3330
|
fontFamily: fonts.primary,
|
|
3011
3331
|
fontSize: fontSizes.sm,
|
|
3012
3332
|
fontWeight: fontWeights.regular,
|
|
@@ -3016,7 +3336,7 @@ function CompassCardVertical({
|
|
|
3016
3336
|
overflow: "hidden",
|
|
3017
3337
|
textOverflow: "ellipsis",
|
|
3018
3338
|
whiteSpace: "nowrap"
|
|
3019
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
3339
|
+
} }, politician.district_label), /* @__PURE__ */ React13.createElement("div", { style: { marginTop: "auto" } }, /* @__PURE__ */ React13.createElement(
|
|
3020
3340
|
IconOverlay,
|
|
3021
3341
|
{
|
|
3022
3342
|
ballot: politician.ballot || null,
|
|
@@ -3024,7 +3344,7 @@ function CompassCardVertical({
|
|
|
3024
3344
|
branch: politician.branch || null
|
|
3025
3345
|
}
|
|
3026
3346
|
)))),
|
|
3027
|
-
surface === "elections" && politician.withdrawn && /* @__PURE__ */
|
|
3347
|
+
surface === "elections" && politician.withdrawn && /* @__PURE__ */ React13.createElement("div", { style: {
|
|
3028
3348
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
3029
3349
|
backgroundColor: "rgba(120,0,0,0.85)",
|
|
3030
3350
|
color: "#fff",
|
|
@@ -3036,7 +3356,7 @@ function CompassCardVertical({
|
|
|
3036
3356
|
padding: "6px 0",
|
|
3037
3357
|
borderRadius: borderRadius.sm
|
|
3038
3358
|
} }, "Withdrawn"),
|
|
3039
|
-
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */
|
|
3359
|
+
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */ React13.createElement("div", { style: {
|
|
3040
3360
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
3041
3361
|
backgroundColor: "rgba(0,0,0,0.75)",
|
|
3042
3362
|
color: "#fff",
|
|
@@ -3048,7 +3368,7 @@ function CompassCardVertical({
|
|
|
3048
3368
|
padding: "6px 0",
|
|
3049
3369
|
borderRadius: borderRadius.sm
|
|
3050
3370
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed"),
|
|
3051
|
-
/* @__PURE__ */
|
|
3371
|
+
/* @__PURE__ */ React13.createElement("div", { style: {
|
|
3052
3372
|
flex: 1,
|
|
3053
3373
|
padding: spacing[4],
|
|
3054
3374
|
paddingTop: 0,
|
|
@@ -3062,7 +3382,7 @@ function CompassCardVertical({
|
|
|
3062
3382
|
}
|
|
3063
3383
|
|
|
3064
3384
|
// src/CompassKey.jsx
|
|
3065
|
-
import
|
|
3385
|
+
import React14, { useEffect as useEffect8, useState as useState9 } from "react";
|
|
3066
3386
|
|
|
3067
3387
|
// src/evContext.js
|
|
3068
3388
|
var DEFAULT_BROKER_URL = "https://ev-context.empowered.vote/";
|
|
@@ -3307,8 +3627,8 @@ var evContext = {
|
|
|
3307
3627
|
|
|
3308
3628
|
// src/CompassKey.jsx
|
|
3309
3629
|
function CompassKey({ compact = false } = {}) {
|
|
3310
|
-
const [dismissed, setDismissed] =
|
|
3311
|
-
const [loaded, setLoaded] =
|
|
3630
|
+
const [dismissed, setDismissed] = useState9(false);
|
|
3631
|
+
const [loaded, setLoaded] = useState9(false);
|
|
3312
3632
|
useEffect8(() => {
|
|
3313
3633
|
let cancelled = false;
|
|
3314
3634
|
evContext.get().then((shared) => {
|
|
@@ -3339,16 +3659,16 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3339
3659
|
persistDismissed(false);
|
|
3340
3660
|
}
|
|
3341
3661
|
if (!loaded) return null;
|
|
3342
|
-
const Swatch = ({ color, label }) => /* @__PURE__ */
|
|
3662
|
+
const Swatch = ({ color, label }) => /* @__PURE__ */ React14.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ React14.createElement("span", { style: {
|
|
3343
3663
|
display: "inline-block",
|
|
3344
3664
|
width: 16,
|
|
3345
3665
|
height: 16,
|
|
3346
3666
|
borderRadius: "50%",
|
|
3347
3667
|
background: color,
|
|
3348
3668
|
boxShadow: "0 0 0 1px rgba(0,0,0,0.08)"
|
|
3349
|
-
} }), /* @__PURE__ */
|
|
3669
|
+
} }), /* @__PURE__ */ React14.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, label));
|
|
3350
3670
|
if (dismissed) {
|
|
3351
|
-
return /* @__PURE__ */
|
|
3671
|
+
return /* @__PURE__ */ React14.createElement(
|
|
3352
3672
|
"button",
|
|
3353
3673
|
{
|
|
3354
3674
|
type: "button",
|
|
@@ -3369,11 +3689,11 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3369
3689
|
cursor: "pointer"
|
|
3370
3690
|
}
|
|
3371
3691
|
},
|
|
3372
|
-
/* @__PURE__ */
|
|
3692
|
+
/* @__PURE__ */ React14.createElement("span", { "aria-hidden": "true" }, "?"),
|
|
3373
3693
|
" Compass key"
|
|
3374
3694
|
);
|
|
3375
3695
|
}
|
|
3376
|
-
return /* @__PURE__ */
|
|
3696
|
+
return /* @__PURE__ */ React14.createElement(
|
|
3377
3697
|
"div",
|
|
3378
3698
|
{
|
|
3379
3699
|
role: "region",
|
|
@@ -3392,17 +3712,17 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3392
3712
|
boxSizing: "border-box"
|
|
3393
3713
|
}
|
|
3394
3714
|
},
|
|
3395
|
-
!compact && /* @__PURE__ */
|
|
3715
|
+
!compact && /* @__PURE__ */ React14.createElement("span", { style: {
|
|
3396
3716
|
fontSize: fontSizes.xs,
|
|
3397
3717
|
fontWeight: fontWeights.semibold,
|
|
3398
3718
|
color: colors.textMuted,
|
|
3399
3719
|
textTransform: "uppercase",
|
|
3400
3720
|
letterSpacing: "0.5px"
|
|
3401
3721
|
} }, "Compass key"),
|
|
3402
|
-
/* @__PURE__ */
|
|
3403
|
-
/* @__PURE__ */
|
|
3404
|
-
/* @__PURE__ */
|
|
3405
|
-
/* @__PURE__ */
|
|
3722
|
+
/* @__PURE__ */ React14.createElement(Swatch, { color: "#7C6B9E", label: "You" }),
|
|
3723
|
+
/* @__PURE__ */ React14.createElement(Swatch, { color: "#5A9A6E", label: "Politician" }),
|
|
3724
|
+
/* @__PURE__ */ React14.createElement(Swatch, { color: "#fed12e", label: "Match" }),
|
|
3725
|
+
/* @__PURE__ */ React14.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ React14.createElement("span", { style: {
|
|
3406
3726
|
fontSize: fontSizes.xs,
|
|
3407
3727
|
fontWeight: fontWeights.semibold,
|
|
3408
3728
|
color: "#9ca3af",
|
|
@@ -3410,8 +3730,8 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3410
3730
|
textDecoration: "underline",
|
|
3411
3731
|
textDecorationStyle: "dashed",
|
|
3412
3732
|
textUnderlineOffset: "3px"
|
|
3413
|
-
} }, "Topic"), /* @__PURE__ */
|
|
3414
|
-
/* @__PURE__ */
|
|
3733
|
+
} }, "Topic"), /* @__PURE__ */ React14.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, "= no stance")),
|
|
3734
|
+
/* @__PURE__ */ React14.createElement(
|
|
3415
3735
|
"button",
|
|
3416
3736
|
{
|
|
3417
3737
|
type: "button",
|
|
@@ -3434,7 +3754,7 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3434
3754
|
}
|
|
3435
3755
|
|
|
3436
3756
|
// src/CategorySection.jsx
|
|
3437
|
-
import
|
|
3757
|
+
import React15, { useState as useState10 } from "react";
|
|
3438
3758
|
function CategorySection({
|
|
3439
3759
|
title,
|
|
3440
3760
|
infoTooltip,
|
|
@@ -3444,7 +3764,7 @@ function CategorySection({
|
|
|
3444
3764
|
tier
|
|
3445
3765
|
}) {
|
|
3446
3766
|
var _a, _b;
|
|
3447
|
-
const [showTooltip, setShowTooltip] =
|
|
3767
|
+
const [showTooltip, setShowTooltip] = useState10(false);
|
|
3448
3768
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3449
3769
|
const styles2 = {
|
|
3450
3770
|
section: {
|
|
@@ -3512,7 +3832,7 @@ function CategorySection({
|
|
|
3512
3832
|
gap: spacing[4]
|
|
3513
3833
|
}
|
|
3514
3834
|
};
|
|
3515
|
-
return /* @__PURE__ */
|
|
3835
|
+
return /* @__PURE__ */ React15.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ React15.createElement("div", { style: styles2.header }, /* @__PURE__ */ React15.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ React15.createElement(
|
|
3516
3836
|
"button",
|
|
3517
3837
|
{
|
|
3518
3838
|
type: "button",
|
|
@@ -3524,8 +3844,8 @@ function CategorySection({
|
|
|
3524
3844
|
"aria-label": `Info about ${title}`
|
|
3525
3845
|
},
|
|
3526
3846
|
"i",
|
|
3527
|
-
showTooltip && /* @__PURE__ */
|
|
3528
|
-
), websiteUrl && /* @__PURE__ */
|
|
3847
|
+
showTooltip && /* @__PURE__ */ React15.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
|
|
3848
|
+
), websiteUrl && /* @__PURE__ */ React15.createElement(
|
|
3529
3849
|
"a",
|
|
3530
3850
|
{
|
|
3531
3851
|
href: websiteUrl,
|
|
@@ -3534,7 +3854,7 @@ function CategorySection({
|
|
|
3534
3854
|
style: styles2.externalLink,
|
|
3535
3855
|
"aria-label": `Visit official website for ${title}`
|
|
3536
3856
|
},
|
|
3537
|
-
/* @__PURE__ */
|
|
3857
|
+
/* @__PURE__ */ React15.createElement(
|
|
3538
3858
|
"svg",
|
|
3539
3859
|
{
|
|
3540
3860
|
viewBox: "0 0 24 24",
|
|
@@ -3542,7 +3862,7 @@ function CategorySection({
|
|
|
3542
3862
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3543
3863
|
style: { width: "14px", height: "14px" }
|
|
3544
3864
|
},
|
|
3545
|
-
/* @__PURE__ */
|
|
3865
|
+
/* @__PURE__ */ React15.createElement(
|
|
3546
3866
|
"path",
|
|
3547
3867
|
{
|
|
3548
3868
|
d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
|
|
@@ -3553,11 +3873,11 @@ function CategorySection({
|
|
|
3553
3873
|
}
|
|
3554
3874
|
)
|
|
3555
3875
|
)
|
|
3556
|
-
)), /* @__PURE__ */
|
|
3876
|
+
)), /* @__PURE__ */ React15.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
|
|
3557
3877
|
}
|
|
3558
3878
|
|
|
3559
3879
|
// src/SubGroupSection.jsx
|
|
3560
|
-
import
|
|
3880
|
+
import React16 from "react";
|
|
3561
3881
|
function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap, justifyContent }) {
|
|
3562
3882
|
const styles2 = {
|
|
3563
3883
|
section: {
|
|
@@ -3592,7 +3912,7 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3592
3912
|
width: "100%"
|
|
3593
3913
|
}
|
|
3594
3914
|
};
|
|
3595
|
-
return /* @__PURE__ */
|
|
3915
|
+
return /* @__PURE__ */ React16.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ React16.createElement("div", { style: styles2.header }, /* @__PURE__ */ React16.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ React16.createElement(
|
|
3596
3916
|
"a",
|
|
3597
3917
|
{
|
|
3598
3918
|
href: websiteUrl,
|
|
@@ -3600,12 +3920,12 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3600
3920
|
rel: "noopener noreferrer",
|
|
3601
3921
|
style: styles2.link
|
|
3602
3922
|
},
|
|
3603
|
-
/* @__PURE__ */
|
|
3604
|
-
)), /* @__PURE__ */
|
|
3923
|
+
/* @__PURE__ */ React16.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ React16.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ React16.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
|
|
3924
|
+
)), /* @__PURE__ */ React16.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
|
|
3605
3925
|
}
|
|
3606
3926
|
|
|
3607
3927
|
// src/GovernmentBodySection.jsx
|
|
3608
|
-
import
|
|
3928
|
+
import React17, { useState as useState11 } from "react";
|
|
3609
3929
|
function GovernmentBodySection({
|
|
3610
3930
|
title,
|
|
3611
3931
|
websiteUrl,
|
|
@@ -3614,7 +3934,7 @@ function GovernmentBodySection({
|
|
|
3614
3934
|
children
|
|
3615
3935
|
}) {
|
|
3616
3936
|
var _a;
|
|
3617
|
-
const [expanded, setExpanded] =
|
|
3937
|
+
const [expanded, setExpanded] = useState11(defaultExpanded);
|
|
3618
3938
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3619
3939
|
const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
|
|
3620
3940
|
const styles2 = {
|
|
@@ -3654,7 +3974,7 @@ function GovernmentBodySection({
|
|
|
3654
3974
|
display: expanded ? "block" : "none"
|
|
3655
3975
|
}
|
|
3656
3976
|
};
|
|
3657
|
-
return /* @__PURE__ */
|
|
3977
|
+
return /* @__PURE__ */ React17.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ React17.createElement(
|
|
3658
3978
|
"div",
|
|
3659
3979
|
{
|
|
3660
3980
|
style: styles2.header,
|
|
@@ -3670,8 +3990,8 @@ function GovernmentBodySection({
|
|
|
3670
3990
|
"aria-expanded": expanded,
|
|
3671
3991
|
"aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
|
|
3672
3992
|
},
|
|
3673
|
-
/* @__PURE__ */
|
|
3674
|
-
websiteUrl && /* @__PURE__ */
|
|
3993
|
+
/* @__PURE__ */ React17.createElement("span", { style: styles2.title }, title),
|
|
3994
|
+
websiteUrl && /* @__PURE__ */ React17.createElement(
|
|
3675
3995
|
"a",
|
|
3676
3996
|
{
|
|
3677
3997
|
href: websiteUrl,
|
|
@@ -3681,14 +4001,14 @@ function GovernmentBodySection({
|
|
|
3681
4001
|
onClick: (e) => e.stopPropagation(),
|
|
3682
4002
|
"aria-label": `Visit ${title} website`
|
|
3683
4003
|
},
|
|
3684
|
-
/* @__PURE__ */
|
|
4004
|
+
/* @__PURE__ */ React17.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ React17.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ React17.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z", stroke: "currentColor", strokeWidth: "2" }))
|
|
3685
4005
|
),
|
|
3686
|
-
/* @__PURE__ */
|
|
3687
|
-
), /* @__PURE__ */
|
|
4006
|
+
/* @__PURE__ */ React17.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
|
|
4007
|
+
), /* @__PURE__ */ React17.createElement("div", { style: styles2.content }, children));
|
|
3688
4008
|
}
|
|
3689
4009
|
|
|
3690
4010
|
// src/SocialLinks.jsx
|
|
3691
|
-
import
|
|
4011
|
+
import React18 from "react";
|
|
3692
4012
|
var SOCIAL_PLATFORMS = [
|
|
3693
4013
|
{ test: /facebook\.com/i, platform: "facebook" },
|
|
3694
4014
|
{ test: /twitter\.com|x\.com/i, platform: "twitter" },
|
|
@@ -3760,7 +4080,7 @@ function SocialLinks({
|
|
|
3760
4080
|
}
|
|
3761
4081
|
};
|
|
3762
4082
|
const platformIconMap = {
|
|
3763
|
-
twitter: /* @__PURE__ */
|
|
4083
|
+
twitter: /* @__PURE__ */ React18.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React18.createElement(
|
|
3764
4084
|
"path",
|
|
3765
4085
|
{
|
|
3766
4086
|
d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
|
|
@@ -3770,7 +4090,7 @@ function SocialLinks({
|
|
|
3770
4090
|
strokeLinejoin: "round"
|
|
3771
4091
|
}
|
|
3772
4092
|
)),
|
|
3773
|
-
facebook: /* @__PURE__ */
|
|
4093
|
+
facebook: /* @__PURE__ */ React18.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React18.createElement(
|
|
3774
4094
|
"path",
|
|
3775
4095
|
{
|
|
3776
4096
|
d: "M18 2H15C13.6739 2 12.4021 2.52678 11.4645 3.46447C10.5268 4.40215 10 5.67392 10 7V10H7V14H10V22H14V14H17L18 10H14V7C14 6.73478 14.1054 6.48043 14.2929 6.29289C14.4804 6.10536 14.7348 6 15 6H18V2Z",
|
|
@@ -3780,8 +4100,8 @@ function SocialLinks({
|
|
|
3780
4100
|
strokeLinejoin: "round"
|
|
3781
4101
|
}
|
|
3782
4102
|
)),
|
|
3783
|
-
instagram: /* @__PURE__ */
|
|
3784
|
-
linkedin: /* @__PURE__ */
|
|
4103
|
+
instagram: /* @__PURE__ */ React18.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React18.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ React18.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ React18.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
|
|
4104
|
+
linkedin: /* @__PURE__ */ React18.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React18.createElement(
|
|
3785
4105
|
"path",
|
|
3786
4106
|
{
|
|
3787
4107
|
d: "M16 8C17.5913 8 19.1174 8.63214 20.2426 9.75736C21.3679 10.8826 22 12.4087 22 14V21H18V14C18 13.4696 17.7893 12.9609 17.4142 12.5858C17.0391 12.2107 16.5304 12 16 12C15.4696 12 14.9609 12.2107 14.5858 12.5858C14.2107 12.9609 14 13.4696 14 14V21H10V14C10 12.4087 10.6321 10.8826 11.7574 9.75736C12.8826 8.63214 14.4087 8 16 8Z",
|
|
@@ -3790,8 +4110,8 @@ function SocialLinks({
|
|
|
3790
4110
|
strokeLinecap: "round",
|
|
3791
4111
|
strokeLinejoin: "round"
|
|
3792
4112
|
}
|
|
3793
|
-
), /* @__PURE__ */
|
|
3794
|
-
youtube: /* @__PURE__ */
|
|
4113
|
+
), /* @__PURE__ */ React18.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ React18.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
|
|
4114
|
+
youtube: /* @__PURE__ */ React18.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React18.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ React18.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
|
|
3795
4115
|
};
|
|
3796
4116
|
const links = [
|
|
3797
4117
|
{
|
|
@@ -3817,7 +4137,7 @@ function SocialLinks({
|
|
|
3817
4137
|
{
|
|
3818
4138
|
href: website,
|
|
3819
4139
|
label: "Website",
|
|
3820
|
-
icon: /* @__PURE__ */
|
|
4140
|
+
icon: /* @__PURE__ */ React18.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React18.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ React18.createElement(
|
|
3821
4141
|
"path",
|
|
3822
4142
|
{
|
|
3823
4143
|
d: "M2 12H22M12 2C14.5 4.5 16 8 16 12C16 16 14.5 19.5 12 22C9.5 19.5 8 16 8 12C8 8 9.5 4.5 12 2Z",
|
|
@@ -3847,7 +4167,7 @@ function SocialLinks({
|
|
|
3847
4167
|
if (links.length === 0) {
|
|
3848
4168
|
return null;
|
|
3849
4169
|
}
|
|
3850
|
-
return /* @__PURE__ */
|
|
4170
|
+
return /* @__PURE__ */ React18.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ React18.createElement(
|
|
3851
4171
|
"a",
|
|
3852
4172
|
{
|
|
3853
4173
|
key: link.label,
|
|
@@ -3870,7 +4190,7 @@ function SocialLinks({
|
|
|
3870
4190
|
}
|
|
3871
4191
|
|
|
3872
4192
|
// src/IssueTags.jsx
|
|
3873
|
-
import
|
|
4193
|
+
import React19 from "react";
|
|
3874
4194
|
function IssueTags({
|
|
3875
4195
|
tags = [],
|
|
3876
4196
|
selectedTags = [],
|
|
@@ -3913,9 +4233,9 @@ function IssueTags({
|
|
|
3913
4233
|
onTagClick(tag.value);
|
|
3914
4234
|
}
|
|
3915
4235
|
};
|
|
3916
|
-
return /* @__PURE__ */
|
|
4236
|
+
return /* @__PURE__ */ React19.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
|
|
3917
4237
|
const isSelected = selectedTags.includes(tag.value);
|
|
3918
|
-
return /* @__PURE__ */
|
|
4238
|
+
return /* @__PURE__ */ React19.createElement(
|
|
3919
4239
|
"span",
|
|
3920
4240
|
{
|
|
3921
4241
|
key: tag.value,
|
|
@@ -3944,7 +4264,7 @@ function IssueTags({
|
|
|
3944
4264
|
}
|
|
3945
4265
|
|
|
3946
4266
|
// src/CommitteeTable.jsx
|
|
3947
|
-
import
|
|
4267
|
+
import React20, { useState as useState12 } from "react";
|
|
3948
4268
|
var ROLE_ORDER = {
|
|
3949
4269
|
"chair": 0,
|
|
3950
4270
|
"co-chair": 1,
|
|
@@ -3971,7 +4291,7 @@ function CommitteeTable({
|
|
|
3971
4291
|
maxVisible = 6,
|
|
3972
4292
|
style = {}
|
|
3973
4293
|
}) {
|
|
3974
|
-
const [showAll, setShowAll] =
|
|
4294
|
+
const [showAll, setShowAll] = useState12(false);
|
|
3975
4295
|
if (committees.length === 0) {
|
|
3976
4296
|
return null;
|
|
3977
4297
|
}
|
|
@@ -4033,7 +4353,7 @@ function CommitteeTable({
|
|
|
4033
4353
|
cursor: "pointer"
|
|
4034
4354
|
}
|
|
4035
4355
|
};
|
|
4036
|
-
return /* @__PURE__ */
|
|
4356
|
+
return /* @__PURE__ */ React20.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ React20.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ React20.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ React20.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ React20.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ React20.createElement("table", { style: styles2.table }, /* @__PURE__ */ React20.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ React20.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ React20.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ React20.createElement(
|
|
4037
4357
|
"a",
|
|
4038
4358
|
{
|
|
4039
4359
|
href: committee.url,
|
|
@@ -4048,7 +4368,7 @@ function CommitteeTable({
|
|
|
4048
4368
|
}
|
|
4049
4369
|
},
|
|
4050
4370
|
committee.name
|
|
4051
|
-
) : committee.name), /* @__PURE__ */
|
|
4371
|
+
) : committee.name), /* @__PURE__ */ React20.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ React20.createElement(
|
|
4052
4372
|
"button",
|
|
4053
4373
|
{
|
|
4054
4374
|
type: "button",
|
|
@@ -4056,7 +4376,7 @@ function CommitteeTable({
|
|
|
4056
4376
|
onClick: () => setShowAll(!showAll)
|
|
4057
4377
|
},
|
|
4058
4378
|
showAll ? "Show less" : `Show all ${sorted.length} committees`,
|
|
4059
|
-
/* @__PURE__ */
|
|
4379
|
+
/* @__PURE__ */ React20.createElement(
|
|
4060
4380
|
"svg",
|
|
4061
4381
|
{
|
|
4062
4382
|
width: "14",
|
|
@@ -4069,16 +4389,16 @@ function CommitteeTable({
|
|
|
4069
4389
|
strokeLinejoin: "round",
|
|
4070
4390
|
style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
|
|
4071
4391
|
},
|
|
4072
|
-
/* @__PURE__ */
|
|
4392
|
+
/* @__PURE__ */ React20.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
4073
4393
|
)
|
|
4074
4394
|
));
|
|
4075
4395
|
}
|
|
4076
4396
|
|
|
4077
4397
|
// src/PoliticianProfile.jsx
|
|
4078
|
-
import
|
|
4398
|
+
import React23, { useState as useState13, useEffect as useEffect9 } from "react";
|
|
4079
4399
|
|
|
4080
4400
|
// src/LegislativeInlineSummary.jsx
|
|
4081
|
-
import
|
|
4401
|
+
import React21 from "react";
|
|
4082
4402
|
function normalizePosition(pos) {
|
|
4083
4403
|
if (!pos) return "";
|
|
4084
4404
|
return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -4186,7 +4506,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4186
4506
|
fontSize: fontSizes.sm,
|
|
4187
4507
|
fontWeight: fontWeights.medium
|
|
4188
4508
|
};
|
|
4189
|
-
return /* @__PURE__ */
|
|
4509
|
+
return /* @__PURE__ */ React21.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ React21.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ React21.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ React21.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ React21.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ React21.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ React21.createElement("div", null), /* @__PURE__ */ React21.createElement("div", { style: footerRow }, /* @__PURE__ */ React21.createElement(
|
|
4190
4510
|
"button",
|
|
4191
4511
|
{
|
|
4192
4512
|
onClick: () => {
|
|
@@ -4211,12 +4531,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4211
4531
|
}
|
|
4212
4532
|
},
|
|
4213
4533
|
"View Full Legislative Record",
|
|
4214
|
-
/* @__PURE__ */
|
|
4534
|
+
/* @__PURE__ */ React21.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ React21.createElement("path", { d: "M9 18l6-6-6-6" }))
|
|
4215
4535
|
)));
|
|
4216
4536
|
}
|
|
4217
4537
|
|
|
4218
4538
|
// src/JudicialScorecard.jsx
|
|
4219
|
-
import
|
|
4539
|
+
import React22 from "react";
|
|
4220
4540
|
|
|
4221
4541
|
// src/judicialUtils.js
|
|
4222
4542
|
function formatDate(dateStr) {
|
|
@@ -4334,7 +4654,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
|
|
|
4334
4654
|
onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
|
|
4335
4655
|
}
|
|
4336
4656
|
};
|
|
4337
|
-
return /* @__PURE__ */
|
|
4657
|
+
return /* @__PURE__ */ React22.createElement("section", { style: sectionStyle }, /* @__PURE__ */ React22.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ React22.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ React22.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ React22.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ React22.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ React22.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ React22.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ React22.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ React22.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ React22.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ React22.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ React22.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ React22.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ React22.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
|
|
4338
4658
|
}
|
|
4339
4659
|
|
|
4340
4660
|
// src/PoliticianProfile.jsx
|
|
@@ -4510,13 +4830,13 @@ function formatAddress(addr) {
|
|
|
4510
4830
|
if (cityStateZip) lines.push(cityStateZip);
|
|
4511
4831
|
return lines;
|
|
4512
4832
|
}
|
|
4513
|
-
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4514
|
-
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4515
|
-
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4516
|
-
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4517
|
-
var MailIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4518
|
-
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4519
|
-
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4833
|
+
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ React23.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ React23.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ React23.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ React23.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
|
|
4834
|
+
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ React23.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React23.createElement("polyline", { points: "12 6 12 12 16 14" }));
|
|
4835
|
+
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ React23.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ React23.createElement("circle", { cx: "12", cy: "10", r: "3" }));
|
|
4836
|
+
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ React23.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("path", { d: "M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 10.8 19.79 19.79 0 01.07 2.18 2 2 0 012.02 0h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L6.09 7.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z" }));
|
|
4837
|
+
var MailIcon = ({ size = 16 }) => /* @__PURE__ */ React23.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("path", { d: "M4 4H20C21.1 4 22 4.9 22 6V18C22 19.1 21.1 20 20 20H4C2.9 20 2 19.1 2 18V6C2 4.9 2.9 4 4 4Z" }), /* @__PURE__ */ React23.createElement("path", { d: "M22 6L12 13L2 6" }));
|
|
4838
|
+
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ React23.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ React23.createElement("path", { d: "M2 12H22M12 2C14.5 4.5 16 8 16 12C16 16 14.5 19.5 12 22C9.5 19.5 8 16 8 12C8 8 9.5 4.5 12 2Z" }));
|
|
4839
|
+
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ React23.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ React23.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ React23.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
|
|
4520
4840
|
function PoliticianProfile({
|
|
4521
4841
|
politician = {},
|
|
4522
4842
|
onBack,
|
|
@@ -4544,7 +4864,7 @@ function PoliticianProfile({
|
|
|
4544
4864
|
return pol.photo_origin_url;
|
|
4545
4865
|
})();
|
|
4546
4866
|
const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
|
|
4547
|
-
const [imgError, setImgError] =
|
|
4867
|
+
const [imgError, setImgError] = useState13(false);
|
|
4548
4868
|
useEffect9(() => {
|
|
4549
4869
|
setImgError(false);
|
|
4550
4870
|
}, [profileImageUrl]);
|
|
@@ -4845,7 +5165,7 @@ function PoliticianProfile({
|
|
|
4845
5165
|
borderRadius: borderRadius.full
|
|
4846
5166
|
}
|
|
4847
5167
|
};
|
|
4848
|
-
return /* @__PURE__ */
|
|
5168
|
+
return /* @__PURE__ */ React23.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ React23.createElement(
|
|
4849
5169
|
"button",
|
|
4850
5170
|
{
|
|
4851
5171
|
type: "button",
|
|
@@ -4858,9 +5178,9 @@ function PoliticianProfile({
|
|
|
4858
5178
|
e.currentTarget.style.textDecoration = "none";
|
|
4859
5179
|
}
|
|
4860
5180
|
},
|
|
4861
|
-
/* @__PURE__ */
|
|
5181
|
+
/* @__PURE__ */ React23.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("path", { d: "M15 19l-7-7 7-7" })),
|
|
4862
5182
|
label
|
|
4863
|
-
), /* @__PURE__ */
|
|
5183
|
+
), /* @__PURE__ */ React23.createElement("div", { style: styles2.card }, /* @__PURE__ */ React23.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ React23.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ React23.createElement(
|
|
4864
5184
|
"img",
|
|
4865
5185
|
{
|
|
4866
5186
|
src: profileImageUrl,
|
|
@@ -4868,7 +5188,7 @@ function PoliticianProfile({
|
|
|
4868
5188
|
style: styles2.photo,
|
|
4869
5189
|
onError: () => setImgError(true)
|
|
4870
5190
|
}
|
|
4871
|
-
) : /* @__PURE__ */
|
|
5191
|
+
) : /* @__PURE__ */ React23.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ React23.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ React23.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ React23.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ React23.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ React23.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ React23.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ React23.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ React23.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ React23.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ React23.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ React23.createElement(ClockIcon, { size: 14 }), pol.total_years_in_office, " ", pol.total_years_in_office === 1 ? "year" : "years", " in office")), pol.web_form_url && /* @__PURE__ */ React23.createElement(
|
|
4872
5192
|
"a",
|
|
4873
5193
|
{
|
|
4874
5194
|
href: pol.web_form_url,
|
|
@@ -4882,9 +5202,9 @@ function PoliticianProfile({
|
|
|
4882
5202
|
e.currentTarget.style.background = colors.evTeal;
|
|
4883
5203
|
}
|
|
4884
5204
|
},
|
|
4885
|
-
/* @__PURE__ */
|
|
5205
|
+
/* @__PURE__ */ React23.createElement(ExternalLinkIcon, { size: 14 }),
|
|
4886
5206
|
"Submit a Message"
|
|
4887
|
-
))), hasContactInfo && /* @__PURE__ */
|
|
5207
|
+
))), hasContactInfo && /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("div", { style: divider }), /* @__PURE__ */ React23.createElement("div", { style: sectionHeading }, /* @__PURE__ */ React23.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ React23.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ React23.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ React23.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ React23.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ React23.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ React23.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ React23.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ React23.createElement(React23.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ React23.createElement("br", null))))))), hasPhones && /* @__PURE__ */ React23.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ React23.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ React23.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ React23.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ React23.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ React23.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ React23.createElement(
|
|
4888
5208
|
"a",
|
|
4889
5209
|
{
|
|
4890
5210
|
href: `tel:${phone}`,
|
|
@@ -4897,7 +5217,7 @@ function PoliticianProfile({
|
|
|
4897
5217
|
}
|
|
4898
5218
|
},
|
|
4899
5219
|
phone
|
|
4900
|
-
)))))), hasEmails && /* @__PURE__ */
|
|
5220
|
+
)))))), hasEmails && /* @__PURE__ */ React23.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ React23.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ React23.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ React23.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ React23.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), emails.filter((e) => e && e.trim()).map((email, j) => /* @__PURE__ */ React23.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ React23.createElement(
|
|
4901
5221
|
"a",
|
|
4902
5222
|
{
|
|
4903
5223
|
href: `mailto:${email}`,
|
|
@@ -4910,7 +5230,7 @@ function PoliticianProfile({
|
|
|
4910
5230
|
}
|
|
4911
5231
|
},
|
|
4912
5232
|
email
|
|
4913
|
-
)))))), hasWebsitesCol && /* @__PURE__ */
|
|
5233
|
+
)))))), hasWebsitesCol && /* @__PURE__ */ React23.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ React23.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ React23.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ React23.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ React23.createElement(
|
|
4914
5234
|
"a",
|
|
4915
5235
|
{
|
|
4916
5236
|
href: url,
|
|
@@ -4925,7 +5245,7 @@ function PoliticianProfile({
|
|
|
4925
5245
|
}
|
|
4926
5246
|
},
|
|
4927
5247
|
extractDomain(url)
|
|
4928
|
-
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */
|
|
5248
|
+
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ React23.createElement(
|
|
4929
5249
|
SocialLinks,
|
|
4930
5250
|
{
|
|
4931
5251
|
twitter,
|
|
@@ -4937,14 +5257,14 @@ function PoliticianProfile({
|
|
|
4937
5257
|
darkMode,
|
|
4938
5258
|
style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
|
|
4939
5259
|
}
|
|
4940
|
-
)))), committees.length > 0 && /* @__PURE__ */
|
|
5260
|
+
)))), committees.length > 0 && /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("div", { style: divider }), /* @__PURE__ */ React23.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ React23.createElement(
|
|
4941
5261
|
JudicialScorecard,
|
|
4942
5262
|
{
|
|
4943
5263
|
judicialRecord,
|
|
4944
5264
|
politicianId,
|
|
4945
5265
|
onNavigateToRecord
|
|
4946
5266
|
}
|
|
4947
|
-
) : /* @__PURE__ */
|
|
5267
|
+
) : /* @__PURE__ */ React23.createElement(
|
|
4948
5268
|
LegislativeInlineSummary,
|
|
4949
5269
|
{
|
|
4950
5270
|
summary: legislativeSummary,
|
|
@@ -4955,7 +5275,7 @@ function PoliticianProfile({
|
|
|
4955
5275
|
}
|
|
4956
5276
|
|
|
4957
5277
|
// src/LegislativeRecord.jsx
|
|
4958
|
-
import
|
|
5278
|
+
import React24, { useState as useState14 } from "react";
|
|
4959
5279
|
var DEFAULT_LIMIT = 25;
|
|
4960
5280
|
function normalizeText(str) {
|
|
4961
5281
|
if (!str) return "";
|
|
@@ -5035,7 +5355,7 @@ function getPositionBadge(position) {
|
|
|
5035
5355
|
return { bg: colors.borderLight, text: colors.textSecondary };
|
|
5036
5356
|
}
|
|
5037
5357
|
function Badge({ label, bg, text }) {
|
|
5038
|
-
return /* @__PURE__ */
|
|
5358
|
+
return /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5039
5359
|
display: "inline-block",
|
|
5040
5360
|
background: bg,
|
|
5041
5361
|
color: text,
|
|
@@ -5048,18 +5368,18 @@ function Badge({ label, bg, text }) {
|
|
|
5048
5368
|
} }, label);
|
|
5049
5369
|
}
|
|
5050
5370
|
function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
5051
|
-
return /* @__PURE__ */
|
|
5371
|
+
return /* @__PURE__ */ React24.createElement("div", { style: {
|
|
5052
5372
|
display: "flex",
|
|
5053
5373
|
alignItems: "center",
|
|
5054
5374
|
justifyContent: "space-between",
|
|
5055
5375
|
marginBottom: spacing[4]
|
|
5056
|
-
} }, /* @__PURE__ */
|
|
5376
|
+
} }, /* @__PURE__ */ React24.createElement("h2", { style: {
|
|
5057
5377
|
fontFamily: fonts.primary,
|
|
5058
5378
|
fontSize: fontSizes.xl,
|
|
5059
5379
|
fontWeight: fontWeights.bold,
|
|
5060
5380
|
color: colors.evTeal,
|
|
5061
5381
|
margin: 0
|
|
5062
|
-
} }, title), years && years.length > 0 && /* @__PURE__ */
|
|
5382
|
+
} }, title), years && years.length > 0 && /* @__PURE__ */ React24.createElement(
|
|
5063
5383
|
"select",
|
|
5064
5384
|
{
|
|
5065
5385
|
value: yearFilter,
|
|
@@ -5075,13 +5395,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
|
5075
5395
|
cursor: "pointer"
|
|
5076
5396
|
}
|
|
5077
5397
|
},
|
|
5078
|
-
/* @__PURE__ */
|
|
5079
|
-
years.map((y) => /* @__PURE__ */
|
|
5398
|
+
/* @__PURE__ */ React24.createElement("option", { value: "All" }, "All years"),
|
|
5399
|
+
years.map((y) => /* @__PURE__ */ React24.createElement("option", { key: y, value: y }, y))
|
|
5080
5400
|
));
|
|
5081
5401
|
}
|
|
5082
5402
|
function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
5083
5403
|
if (totalCount <= visibleCount) return null;
|
|
5084
|
-
return /* @__PURE__ */
|
|
5404
|
+
return /* @__PURE__ */ React24.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ React24.createElement(
|
|
5085
5405
|
"button",
|
|
5086
5406
|
{
|
|
5087
5407
|
type: "button",
|
|
@@ -5109,7 +5429,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
|
5109
5429
|
));
|
|
5110
5430
|
}
|
|
5111
5431
|
function EmptyState({ message }) {
|
|
5112
|
-
return /* @__PURE__ */
|
|
5432
|
+
return /* @__PURE__ */ React24.createElement("p", { style: {
|
|
5113
5433
|
fontFamily: fonts.primary,
|
|
5114
5434
|
fontSize: fontSizes.sm,
|
|
5115
5435
|
color: colors.textMuted,
|
|
@@ -5119,24 +5439,24 @@ function EmptyState({ message }) {
|
|
|
5119
5439
|
} }, message);
|
|
5120
5440
|
}
|
|
5121
5441
|
function Spinner() {
|
|
5122
|
-
return /* @__PURE__ */
|
|
5442
|
+
return /* @__PURE__ */ React24.createElement("div", { style: {
|
|
5123
5443
|
display: "flex",
|
|
5124
5444
|
justifyContent: "center",
|
|
5125
5445
|
alignItems: "center",
|
|
5126
5446
|
padding: spacing[10]
|
|
5127
|
-
} }, /* @__PURE__ */
|
|
5447
|
+
} }, /* @__PURE__ */ React24.createElement("div", { style: {
|
|
5128
5448
|
width: "40px",
|
|
5129
5449
|
height: "40px",
|
|
5130
5450
|
borderRadius: borderRadius.full,
|
|
5131
5451
|
border: `3px solid ${colors.borderLight}`,
|
|
5132
5452
|
borderTopColor: colors.evTeal,
|
|
5133
5453
|
animation: "ev-spin 0.8s linear infinite"
|
|
5134
|
-
} }), /* @__PURE__ */
|
|
5454
|
+
} }), /* @__PURE__ */ React24.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
|
|
5135
5455
|
}
|
|
5136
5456
|
function CommitteesSection({ committees, leadership }) {
|
|
5137
|
-
const [showAll, setShowAll] =
|
|
5457
|
+
const [showAll, setShowAll] = useState14(false);
|
|
5138
5458
|
const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
|
|
5139
|
-
return /* @__PURE__ */
|
|
5459
|
+
return /* @__PURE__ */ React24.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ React24.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ React24.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ React24.createElement("div", { key: i, style: {
|
|
5140
5460
|
display: "inline-flex",
|
|
5141
5461
|
alignItems: "center",
|
|
5142
5462
|
gap: spacing[1],
|
|
@@ -5147,23 +5467,23 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5147
5467
|
fontFamily: fonts.primary,
|
|
5148
5468
|
fontSize: fontSizes.sm,
|
|
5149
5469
|
fontWeight: fontWeights.semibold
|
|
5150
|
-
} }, role.title, role.chamber && /* @__PURE__ */
|
|
5470
|
+
} }, role.title, role.chamber && /* @__PURE__ */ React24.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ React24.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("div", null, visible.map((c, i) => {
|
|
5151
5471
|
const badge = getRoleBadge(c.role);
|
|
5152
|
-
return /* @__PURE__ */
|
|
5472
|
+
return /* @__PURE__ */ React24.createElement("div", { key: i, style: {
|
|
5153
5473
|
display: "flex",
|
|
5154
5474
|
alignItems: "center",
|
|
5155
5475
|
justifyContent: "space-between",
|
|
5156
5476
|
padding: `${spacing[3]} 0`,
|
|
5157
5477
|
borderBottom: `1px solid ${colors.borderLight}`,
|
|
5158
5478
|
gap: spacing[3]
|
|
5159
|
-
} }, /* @__PURE__ */
|
|
5479
|
+
} }, /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5160
5480
|
fontFamily: fonts.primary,
|
|
5161
5481
|
fontSize: fontSizes.sm,
|
|
5162
5482
|
color: colors.textSecondary,
|
|
5163
5483
|
flex: 1,
|
|
5164
5484
|
minWidth: 0
|
|
5165
|
-
} }, c.committee_name, c.parent_name && /* @__PURE__ */
|
|
5166
|
-
})), !showAll && /* @__PURE__ */
|
|
5485
|
+
} }, c.committee_name, c.parent_name && /* @__PURE__ */ React24.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ React24.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
|
|
5486
|
+
})), !showAll && /* @__PURE__ */ React24.createElement(
|
|
5167
5487
|
ShowAllLink,
|
|
5168
5488
|
{
|
|
5169
5489
|
totalCount: committees.length,
|
|
@@ -5174,15 +5494,15 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5174
5494
|
}
|
|
5175
5495
|
function LegislationSection({ bills, isMobile }) {
|
|
5176
5496
|
const years = getYears(bills, "introduced_at");
|
|
5177
|
-
const [yearFilter, setYearFilter] =
|
|
5178
|
-
const [showAll, setShowAll] =
|
|
5497
|
+
const [yearFilter, setYearFilter] = useState14("All");
|
|
5498
|
+
const [showAll, setShowAll] = useState14(false);
|
|
5179
5499
|
const handleYearChange = (y) => {
|
|
5180
5500
|
setYearFilter(y);
|
|
5181
5501
|
setShowAll(false);
|
|
5182
5502
|
};
|
|
5183
5503
|
const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
|
|
5184
5504
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5185
|
-
return /* @__PURE__ */
|
|
5505
|
+
return /* @__PURE__ */ React24.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ React24.createElement(
|
|
5186
5506
|
SectionHeader,
|
|
5187
5507
|
{
|
|
5188
5508
|
title: "Sponsored Legislation",
|
|
@@ -5190,42 +5510,42 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5190
5510
|
years,
|
|
5191
5511
|
onYearChange: handleYearChange
|
|
5192
5512
|
}
|
|
5193
|
-
), bills.length === 0 ? /* @__PURE__ */
|
|
5513
|
+
), bills.length === 0 ? /* @__PURE__ */ React24.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("div", null, visible.map((bill, i) => {
|
|
5194
5514
|
const statusBadge = getStatusBadge(bill.status_label);
|
|
5195
|
-
return /* @__PURE__ */
|
|
5515
|
+
return /* @__PURE__ */ React24.createElement("div", { key: i, style: {
|
|
5196
5516
|
display: "flex",
|
|
5197
5517
|
flexDirection: isMobile ? "column" : "row",
|
|
5198
5518
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5199
5519
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5200
5520
|
padding: `${spacing[3]} 0`,
|
|
5201
5521
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5202
|
-
} }, /* @__PURE__ */
|
|
5522
|
+
} }, /* @__PURE__ */ React24.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5203
5523
|
fontFamily: fonts.primary,
|
|
5204
5524
|
fontSize: fontSizes.xs,
|
|
5205
5525
|
fontWeight: fontWeights.bold,
|
|
5206
5526
|
color: colors.textSecondary,
|
|
5207
5527
|
marginRight: spacing[2]
|
|
5208
|
-
} }, bill.number), /* @__PURE__ */
|
|
5528
|
+
} }, bill.number), /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5209
5529
|
fontFamily: fonts.primary,
|
|
5210
5530
|
fontSize: fontSizes.sm,
|
|
5211
5531
|
color: colors.textSecondary
|
|
5212
|
-
} }, bill.title)), /* @__PURE__ */
|
|
5532
|
+
} }, bill.title)), /* @__PURE__ */ React24.createElement("div", { style: {
|
|
5213
5533
|
display: "flex",
|
|
5214
5534
|
alignItems: "center",
|
|
5215
5535
|
gap: spacing[2],
|
|
5216
5536
|
flexShrink: 0,
|
|
5217
5537
|
flexWrap: "wrap"
|
|
5218
|
-
} }, /* @__PURE__ */
|
|
5538
|
+
} }, /* @__PURE__ */ React24.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5219
5539
|
fontFamily: fonts.primary,
|
|
5220
5540
|
fontSize: fontSizes.xs,
|
|
5221
5541
|
color: colors.textMuted
|
|
5222
|
-
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */
|
|
5542
|
+
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5223
5543
|
fontFamily: fonts.primary,
|
|
5224
5544
|
fontSize: fontSizes.xs,
|
|
5225
5545
|
color: colors.textMuted,
|
|
5226
5546
|
fontStyle: "italic"
|
|
5227
5547
|
} }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
|
|
5228
|
-
})), !showAll && /* @__PURE__ */
|
|
5548
|
+
})), !showAll && /* @__PURE__ */ React24.createElement(
|
|
5229
5549
|
ShowAllLink,
|
|
5230
5550
|
{
|
|
5231
5551
|
totalCount: filtered.length,
|
|
@@ -5236,15 +5556,15 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5236
5556
|
}
|
|
5237
5557
|
function VotingSection({ votes, isMobile }) {
|
|
5238
5558
|
const years = getYears(votes, "vote_date");
|
|
5239
|
-
const [yearFilter, setYearFilter] =
|
|
5240
|
-
const [showAll, setShowAll] =
|
|
5559
|
+
const [yearFilter, setYearFilter] = useState14("All");
|
|
5560
|
+
const [showAll, setShowAll] = useState14(false);
|
|
5241
5561
|
const handleYearChange = (y) => {
|
|
5242
5562
|
setYearFilter(y);
|
|
5243
5563
|
setShowAll(false);
|
|
5244
5564
|
};
|
|
5245
5565
|
const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
|
|
5246
5566
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5247
|
-
return /* @__PURE__ */
|
|
5567
|
+
return /* @__PURE__ */ React24.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ React24.createElement(
|
|
5248
5568
|
SectionHeader,
|
|
5249
5569
|
{
|
|
5250
5570
|
title: "Voting Record",
|
|
@@ -5252,38 +5572,38 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5252
5572
|
years,
|
|
5253
5573
|
onYearChange: handleYearChange
|
|
5254
5574
|
}
|
|
5255
|
-
), votes.length === 0 ? /* @__PURE__ */
|
|
5575
|
+
), votes.length === 0 ? /* @__PURE__ */ React24.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("div", null, visible.map((vote, i) => {
|
|
5256
5576
|
const positionBadge = getPositionBadge(vote.position);
|
|
5257
5577
|
const normPosition = normalizeText(vote.position);
|
|
5258
5578
|
const topic = vote.bill_title || vote.vote_question;
|
|
5259
5579
|
const sourceUrl = vote.bill_url;
|
|
5260
|
-
return /* @__PURE__ */
|
|
5580
|
+
return /* @__PURE__ */ React24.createElement("div", { key: i, style: {
|
|
5261
5581
|
display: "flex",
|
|
5262
5582
|
flexDirection: isMobile ? "column" : "row",
|
|
5263
5583
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5264
5584
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5265
5585
|
padding: `${spacing[3]} 0`,
|
|
5266
5586
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5267
|
-
} }, /* @__PURE__ */
|
|
5587
|
+
} }, /* @__PURE__ */ React24.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5268
5588
|
fontFamily: fonts.primary,
|
|
5269
5589
|
fontSize: fontSizes.sm,
|
|
5270
5590
|
color: colors.textSecondary
|
|
5271
|
-
} }, topic)), /* @__PURE__ */
|
|
5591
|
+
} }, topic)), /* @__PURE__ */ React24.createElement("div", { style: {
|
|
5272
5592
|
display: "flex",
|
|
5273
5593
|
alignItems: "center",
|
|
5274
5594
|
gap: spacing[2],
|
|
5275
5595
|
flexShrink: 0,
|
|
5276
5596
|
flexWrap: "wrap"
|
|
5277
|
-
} }, vote.vote_date && /* @__PURE__ */
|
|
5597
|
+
} }, vote.vote_date && /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5278
5598
|
fontFamily: fonts.primary,
|
|
5279
5599
|
fontSize: fontSizes.xs,
|
|
5280
5600
|
color: colors.textMuted
|
|
5281
|
-
} }, formatDate2(vote.vote_date)), /* @__PURE__ */
|
|
5601
|
+
} }, formatDate2(vote.vote_date)), /* @__PURE__ */ React24.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ React24.createElement("span", { style: {
|
|
5282
5602
|
fontFamily: fonts.primary,
|
|
5283
5603
|
fontSize: fontSizes.xs,
|
|
5284
5604
|
color: vote.result === "Passed" ? colors.success : colors.textMuted,
|
|
5285
5605
|
fontWeight: fontWeights.medium
|
|
5286
|
-
} }, vote.result), sourceUrl && /* @__PURE__ */
|
|
5606
|
+
} }, vote.result), sourceUrl && /* @__PURE__ */ React24.createElement(
|
|
5287
5607
|
"a",
|
|
5288
5608
|
{
|
|
5289
5609
|
href: sourceUrl,
|
|
@@ -5304,7 +5624,7 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5304
5624
|
},
|
|
5305
5625
|
"Source"
|
|
5306
5626
|
)));
|
|
5307
|
-
})), !showAll && /* @__PURE__ */
|
|
5627
|
+
})), !showAll && /* @__PURE__ */ React24.createElement(
|
|
5308
5628
|
ShowAllLink,
|
|
5309
5629
|
{
|
|
5310
5630
|
totalCount: filtered.length,
|
|
@@ -5323,20 +5643,20 @@ function LegislativeRecord({
|
|
|
5323
5643
|
}) {
|
|
5324
5644
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
5325
5645
|
if (loading) {
|
|
5326
|
-
return /* @__PURE__ */
|
|
5646
|
+
return /* @__PURE__ */ React24.createElement(Spinner, null);
|
|
5327
5647
|
}
|
|
5328
|
-
return /* @__PURE__ */
|
|
5648
|
+
return /* @__PURE__ */ React24.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ React24.createElement("h1", { style: {
|
|
5329
5649
|
fontFamily: fonts.primary,
|
|
5330
5650
|
fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
|
|
5331
5651
|
fontWeight: fontWeights.bold,
|
|
5332
5652
|
color: colors.evTeal,
|
|
5333
5653
|
marginBottom: spacing[8],
|
|
5334
5654
|
marginTop: 0
|
|
5335
|
-
} }, "Legislative Record: ", politicianName), /* @__PURE__ */
|
|
5655
|
+
} }, "Legislative Record: ", politicianName), /* @__PURE__ */ React24.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ React24.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ React24.createElement(VotingSection, { votes, isMobile }));
|
|
5336
5656
|
}
|
|
5337
5657
|
|
|
5338
5658
|
// src/JudicialRecordDetail.jsx
|
|
5339
|
-
import
|
|
5659
|
+
import React25 from "react";
|
|
5340
5660
|
var containerStyle = {
|
|
5341
5661
|
fontFamily: "'Manrope', sans-serif",
|
|
5342
5662
|
maxWidth: "800px"
|
|
@@ -5421,7 +5741,7 @@ var emptyStateStyle = {
|
|
|
5421
5741
|
function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
5422
5742
|
var _a;
|
|
5423
5743
|
if (!judicialRecord) {
|
|
5424
|
-
return /* @__PURE__ */
|
|
5744
|
+
return /* @__PURE__ */ React25.createElement("div", { style: containerStyle }, /* @__PURE__ */ React25.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ React25.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
|
|
5425
5745
|
}
|
|
5426
5746
|
const {
|
|
5427
5747
|
judge_detail: detail,
|
|
@@ -5430,13 +5750,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5430
5750
|
disciplinary_records: disciplinary = []
|
|
5431
5751
|
} = judicialRecord;
|
|
5432
5752
|
const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
|
|
5433
|
-
return /* @__PURE__ */
|
|
5753
|
+
return /* @__PURE__ */ React25.createElement("div", { style: containerStyle }, /* @__PURE__ */ React25.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ React25.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ React25.createElement("p", { style: roleStyle }, (detail == null ? void 0 : detail.court_role) || politician.office_title, (detail == null ? void 0 : detail.date_seated) && ` \xB7 Seated ${formatDate(detail.date_seated)}`), detail && /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ React25.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ React25.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ React25.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ React25.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ React25.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ React25.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ React25.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ React25.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ React25.createElement("span", { style: detailValueStyle }, detail.election_type === "retention" ? "Retention (Yes/No)" : "Contested Election")), ((_a = detail.areas_of_focus) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */ React25.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ React25.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ React25.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ React25.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ React25.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ React25.createElement("table", { style: tableStyle }, /* @__PURE__ */ React25.createElement("thead", null, /* @__PURE__ */ React25.createElement("tr", null, /* @__PURE__ */ React25.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ React25.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ React25.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ React25.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ React25.createElement("tr", { key: i }, /* @__PURE__ */ React25.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ React25.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ React25.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ React25.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ React25.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ React25.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ React25.createElement("table", { style: tableStyle }, /* @__PURE__ */ React25.createElement("thead", null, /* @__PURE__ */ React25.createElement("tr", null, /* @__PURE__ */ React25.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ React25.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ React25.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ React25.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ React25.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ React25.createElement("tr", { key: i }, /* @__PURE__ */ React25.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ React25.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ React25.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ React25.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ React25.createElement("div", { key: i, style: {
|
|
5434
5754
|
borderLeft: "3px solid #fc8181",
|
|
5435
5755
|
backgroundColor: "#fff5f5",
|
|
5436
5756
|
borderRadius: "0 6px 6px 0",
|
|
5437
5757
|
padding: "12px 16px",
|
|
5438
5758
|
marginBottom: "10px"
|
|
5439
|
-
} }, /* @__PURE__ */
|
|
5759
|
+
} }, /* @__PURE__ */ React25.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ React25.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ React25.createElement(
|
|
5440
5760
|
"a",
|
|
5441
5761
|
{
|
|
5442
5762
|
href: d.source_url,
|
|
@@ -5449,7 +5769,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5449
5769
|
}
|
|
5450
5770
|
|
|
5451
5771
|
// src/AuthForm.jsx
|
|
5452
|
-
import
|
|
5772
|
+
import React26, { useState as useState15 } from "react";
|
|
5453
5773
|
function AuthForm({
|
|
5454
5774
|
logoSrc = "/EVLogo.svg",
|
|
5455
5775
|
appName = "Empowered Vote",
|
|
@@ -5460,11 +5780,11 @@ function AuthForm({
|
|
|
5460
5780
|
error = null,
|
|
5461
5781
|
submitting = false
|
|
5462
5782
|
}) {
|
|
5463
|
-
const [username, setUsername] =
|
|
5464
|
-
const [password, setPassword] =
|
|
5465
|
-
const [confirmPassword, setConfirmPassword] =
|
|
5466
|
-
const [showPasswords, setShowPasswords] =
|
|
5467
|
-
const [passwordMismatch, setPasswordMismatch] =
|
|
5783
|
+
const [username, setUsername] = useState15("");
|
|
5784
|
+
const [password, setPassword] = useState15("");
|
|
5785
|
+
const [confirmPassword, setConfirmPassword] = useState15("");
|
|
5786
|
+
const [showPasswords, setShowPasswords] = useState15(false);
|
|
5787
|
+
const [passwordMismatch, setPasswordMismatch] = useState15(false);
|
|
5468
5788
|
const isLogin = mode === "login";
|
|
5469
5789
|
const handleSubmit = (e) => {
|
|
5470
5790
|
e.preventDefault();
|
|
@@ -5476,7 +5796,7 @@ function AuthForm({
|
|
|
5476
5796
|
setPasswordMismatch(false);
|
|
5477
5797
|
onSubmit == null ? void 0 : onSubmit(username.trim(), password);
|
|
5478
5798
|
};
|
|
5479
|
-
const EyeOpen = () => /* @__PURE__ */
|
|
5799
|
+
const EyeOpen = () => /* @__PURE__ */ React26.createElement(
|
|
5480
5800
|
"svg",
|
|
5481
5801
|
{
|
|
5482
5802
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5486,7 +5806,7 @@ function AuthForm({
|
|
|
5486
5806
|
stroke: "currentColor",
|
|
5487
5807
|
style: { width: "20px", height: "20px" }
|
|
5488
5808
|
},
|
|
5489
|
-
/* @__PURE__ */
|
|
5809
|
+
/* @__PURE__ */ React26.createElement(
|
|
5490
5810
|
"path",
|
|
5491
5811
|
{
|
|
5492
5812
|
strokeLinecap: "round",
|
|
@@ -5494,7 +5814,7 @@ function AuthForm({
|
|
|
5494
5814
|
d: "M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z"
|
|
5495
5815
|
}
|
|
5496
5816
|
),
|
|
5497
|
-
/* @__PURE__ */
|
|
5817
|
+
/* @__PURE__ */ React26.createElement(
|
|
5498
5818
|
"path",
|
|
5499
5819
|
{
|
|
5500
5820
|
strokeLinecap: "round",
|
|
@@ -5503,7 +5823,7 @@ function AuthForm({
|
|
|
5503
5823
|
}
|
|
5504
5824
|
)
|
|
5505
5825
|
);
|
|
5506
|
-
const EyeClosed = () => /* @__PURE__ */
|
|
5826
|
+
const EyeClosed = () => /* @__PURE__ */ React26.createElement(
|
|
5507
5827
|
"svg",
|
|
5508
5828
|
{
|
|
5509
5829
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5513,7 +5833,7 @@ function AuthForm({
|
|
|
5513
5833
|
stroke: "currentColor",
|
|
5514
5834
|
style: { width: "20px", height: "20px" }
|
|
5515
5835
|
},
|
|
5516
|
-
/* @__PURE__ */
|
|
5836
|
+
/* @__PURE__ */ React26.createElement(
|
|
5517
5837
|
"path",
|
|
5518
5838
|
{
|
|
5519
5839
|
strokeLinecap: "round",
|
|
@@ -5522,17 +5842,17 @@ function AuthForm({
|
|
|
5522
5842
|
}
|
|
5523
5843
|
)
|
|
5524
5844
|
);
|
|
5525
|
-
const PasswordToggle = () => /* @__PURE__ */
|
|
5845
|
+
const PasswordToggle = () => /* @__PURE__ */ React26.createElement(
|
|
5526
5846
|
"button",
|
|
5527
5847
|
{
|
|
5528
5848
|
type: "button",
|
|
5529
5849
|
onClick: () => setShowPasswords((prev) => !prev),
|
|
5530
5850
|
style: styles.passwordToggle
|
|
5531
5851
|
},
|
|
5532
|
-
showPasswords ? /* @__PURE__ */
|
|
5852
|
+
showPasswords ? /* @__PURE__ */ React26.createElement(EyeOpen, null) : /* @__PURE__ */ React26.createElement(EyeClosed, null)
|
|
5533
5853
|
);
|
|
5534
5854
|
const displayError = passwordMismatch ? "Passwords do not match." : error;
|
|
5535
|
-
return /* @__PURE__ */
|
|
5855
|
+
return /* @__PURE__ */ React26.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ React26.createElement("div", { style: styles.container }, /* @__PURE__ */ React26.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ React26.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ React26.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ React26.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ React26.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ React26.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ React26.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ React26.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ React26.createElement(
|
|
5536
5856
|
"input",
|
|
5537
5857
|
{
|
|
5538
5858
|
type: "text",
|
|
@@ -5549,7 +5869,7 @@ function AuthForm({
|
|
|
5549
5869
|
},
|
|
5550
5870
|
required: true
|
|
5551
5871
|
}
|
|
5552
|
-
)), /* @__PURE__ */
|
|
5872
|
+
)), /* @__PURE__ */ React26.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ React26.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ React26.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ React26.createElement(
|
|
5553
5873
|
"input",
|
|
5554
5874
|
{
|
|
5555
5875
|
type: showPasswords ? "text" : "password",
|
|
@@ -5565,7 +5885,7 @@ function AuthForm({
|
|
|
5565
5885
|
},
|
|
5566
5886
|
required: true
|
|
5567
5887
|
}
|
|
5568
|
-
), /* @__PURE__ */
|
|
5888
|
+
), /* @__PURE__ */ React26.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ React26.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ React26.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ React26.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ React26.createElement(
|
|
5569
5889
|
"input",
|
|
5570
5890
|
{
|
|
5571
5891
|
type: showPasswords ? "text" : "password",
|
|
@@ -5581,7 +5901,7 @@ function AuthForm({
|
|
|
5581
5901
|
},
|
|
5582
5902
|
required: true
|
|
5583
5903
|
}
|
|
5584
|
-
), /* @__PURE__ */
|
|
5904
|
+
), /* @__PURE__ */ React26.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ React26.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ React26.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ React26.createElement(
|
|
5585
5905
|
"button",
|
|
5586
5906
|
{
|
|
5587
5907
|
type: "submit",
|
|
@@ -5599,7 +5919,7 @@ function AuthForm({
|
|
|
5599
5919
|
}
|
|
5600
5920
|
},
|
|
5601
5921
|
submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
|
|
5602
|
-
), onModeSwitch && /* @__PURE__ */
|
|
5922
|
+
), onModeSwitch && /* @__PURE__ */ React26.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ React26.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ React26.createElement(
|
|
5603
5923
|
"button",
|
|
5604
5924
|
{
|
|
5605
5925
|
type: "button",
|
|
@@ -5772,9 +6092,9 @@ var styles = {
|
|
|
5772
6092
|
};
|
|
5773
6093
|
|
|
5774
6094
|
// src/TopicTierBadge.jsx
|
|
5775
|
-
import
|
|
6095
|
+
import React27 from "react";
|
|
5776
6096
|
function LandmarkIcon({ size = 14 }) {
|
|
5777
|
-
return /* @__PURE__ */
|
|
6097
|
+
return /* @__PURE__ */ React27.createElement(
|
|
5778
6098
|
"svg",
|
|
5779
6099
|
{
|
|
5780
6100
|
width: size,
|
|
@@ -5788,16 +6108,16 @@ function LandmarkIcon({ size = 14 }) {
|
|
|
5788
6108
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5789
6109
|
"aria-hidden": "true"
|
|
5790
6110
|
},
|
|
5791
|
-
/* @__PURE__ */
|
|
5792
|
-
/* @__PURE__ */
|
|
5793
|
-
/* @__PURE__ */
|
|
5794
|
-
/* @__PURE__ */
|
|
5795
|
-
/* @__PURE__ */
|
|
5796
|
-
/* @__PURE__ */
|
|
6111
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M10 18v-7" }),
|
|
6112
|
+
/* @__PURE__ */ React27.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" }),
|
|
6113
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M14 18v-7" }),
|
|
6114
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M18 18v-7" }),
|
|
6115
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M3 22h18" }),
|
|
6116
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M6 18v-7" })
|
|
5797
6117
|
);
|
|
5798
6118
|
}
|
|
5799
6119
|
function Building2Icon({ size = 14 }) {
|
|
5800
|
-
return /* @__PURE__ */
|
|
6120
|
+
return /* @__PURE__ */ React27.createElement(
|
|
5801
6121
|
"svg",
|
|
5802
6122
|
{
|
|
5803
6123
|
width: size,
|
|
@@ -5811,17 +6131,17 @@ function Building2Icon({ size = 14 }) {
|
|
|
5811
6131
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5812
6132
|
"aria-hidden": "true"
|
|
5813
6133
|
},
|
|
5814
|
-
/* @__PURE__ */
|
|
5815
|
-
/* @__PURE__ */
|
|
5816
|
-
/* @__PURE__ */
|
|
5817
|
-
/* @__PURE__ */
|
|
5818
|
-
/* @__PURE__ */
|
|
5819
|
-
/* @__PURE__ */
|
|
5820
|
-
/* @__PURE__ */
|
|
6134
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
|
|
6135
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
|
|
6136
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
|
|
6137
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M10 6h4" }),
|
|
6138
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M10 10h4" }),
|
|
6139
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M10 14h4" }),
|
|
6140
|
+
/* @__PURE__ */ React27.createElement("path", { d: "M10 18h4" })
|
|
5821
6141
|
);
|
|
5822
6142
|
}
|
|
5823
6143
|
function HomeIcon({ size = 14 }) {
|
|
5824
|
-
return /* @__PURE__ */
|
|
6144
|
+
return /* @__PURE__ */ React27.createElement(
|
|
5825
6145
|
"svg",
|
|
5826
6146
|
{
|
|
5827
6147
|
width: size,
|
|
@@ -5835,8 +6155,8 @@ function HomeIcon({ size = 14 }) {
|
|
|
5835
6155
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5836
6156
|
"aria-hidden": "true"
|
|
5837
6157
|
},
|
|
5838
|
-
/* @__PURE__ */
|
|
5839
|
-
/* @__PURE__ */
|
|
6158
|
+
/* @__PURE__ */ React27.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
|
|
6159
|
+
/* @__PURE__ */ React27.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
|
|
5840
6160
|
);
|
|
5841
6161
|
}
|
|
5842
6162
|
var TIER_INFO = {
|
|
@@ -5896,7 +6216,7 @@ function TopicTierBadge({
|
|
|
5896
6216
|
userSelect: "none"
|
|
5897
6217
|
};
|
|
5898
6218
|
};
|
|
5899
|
-
return /* @__PURE__ */
|
|
6219
|
+
return /* @__PURE__ */ React27.createElement(
|
|
5900
6220
|
"span",
|
|
5901
6221
|
{
|
|
5902
6222
|
className: "ev-topic-tier-badge",
|
|
@@ -5906,13 +6226,13 @@ function TopicTierBadge({
|
|
|
5906
6226
|
},
|
|
5907
6227
|
effectiveTiers.map((tier) => {
|
|
5908
6228
|
const { label, Icon } = TIER_INFO[tier];
|
|
5909
|
-
return /* @__PURE__ */
|
|
6229
|
+
return /* @__PURE__ */ React27.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ React27.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ React27.createElement("span", null, label));
|
|
5910
6230
|
})
|
|
5911
6231
|
);
|
|
5912
6232
|
}
|
|
5913
6233
|
|
|
5914
6234
|
// src/CompassCoverageCallout.jsx
|
|
5915
|
-
import
|
|
6235
|
+
import React28, { useState as useState16 } from "react";
|
|
5916
6236
|
var TIER_LABELS = {
|
|
5917
6237
|
federal: "federal",
|
|
5918
6238
|
state: "state",
|
|
@@ -5925,7 +6245,7 @@ function CompassCoverageCallout({
|
|
|
5925
6245
|
compassUrl,
|
|
5926
6246
|
onDismiss
|
|
5927
6247
|
}) {
|
|
5928
|
-
const [dismissed, setDismissed] =
|
|
6248
|
+
const [dismissed, setDismissed] = useState16(false);
|
|
5929
6249
|
if (dismissed) return null;
|
|
5930
6250
|
const tierLabel = TIER_LABELS[tier] || tier;
|
|
5931
6251
|
const tierStyle = tierColors[tier] || tierColors.federal;
|
|
@@ -5976,15 +6296,15 @@ function CompassCoverageCallout({
|
|
|
5976
6296
|
setDismissed(true);
|
|
5977
6297
|
if (onDismiss) onDismiss();
|
|
5978
6298
|
};
|
|
5979
|
-
return /* @__PURE__ */
|
|
6299
|
+
return /* @__PURE__ */ React28.createElement(
|
|
5980
6300
|
"div",
|
|
5981
6301
|
{
|
|
5982
6302
|
className: "ev-compass-coverage-callout",
|
|
5983
6303
|
role: "status",
|
|
5984
6304
|
style: containerStyle2
|
|
5985
6305
|
},
|
|
5986
|
-
/* @__PURE__ */
|
|
5987
|
-
onDismiss !== void 0 && /* @__PURE__ */
|
|
6306
|
+
/* @__PURE__ */ React28.createElement("div", { style: textStyle }, /* @__PURE__ */ React28.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ React28.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__ */ React28.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
|
|
6307
|
+
onDismiss !== void 0 && /* @__PURE__ */ React28.createElement(
|
|
5988
6308
|
"button",
|
|
5989
6309
|
{
|
|
5990
6310
|
onClick: handleDismiss,
|
|
@@ -5997,7 +6317,7 @@ function CompassCoverageCallout({
|
|
|
5997
6317
|
}
|
|
5998
6318
|
|
|
5999
6319
|
// src/ExpandCompassNudge.jsx
|
|
6000
|
-
import
|
|
6320
|
+
import React29 from "react";
|
|
6001
6321
|
function ExpandCompassNudge({
|
|
6002
6322
|
politicianName,
|
|
6003
6323
|
missingCount,
|
|
@@ -6044,7 +6364,7 @@ function ExpandCompassNudge({
|
|
|
6044
6364
|
};
|
|
6045
6365
|
const topicsLabel = missingCount === 1 ? "topic" : "topics";
|
|
6046
6366
|
const speakerName = politicianName || "This politician";
|
|
6047
|
-
return /* @__PURE__ */
|
|
6367
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ React29.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ React29.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__ */ React29.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
|
|
6048
6368
|
}
|
|
6049
6369
|
|
|
6050
6370
|
// src/computeTierCoverage.js
|
|
@@ -6065,7 +6385,7 @@ function computeTierCoverage(topics) {
|
|
|
6065
6385
|
}
|
|
6066
6386
|
|
|
6067
6387
|
// src/useEvContextPromotion.js
|
|
6068
|
-
import { useEffect as useEffect10, useState as
|
|
6388
|
+
import { useEffect as useEffect10, useState as useState17, useCallback, useRef as useRef4 } from "react";
|
|
6069
6389
|
function useEvContextPromotion({
|
|
6070
6390
|
domain,
|
|
6071
6391
|
isLoggedIn,
|
|
@@ -6074,21 +6394,21 @@ function useEvContextPromotion({
|
|
|
6074
6394
|
apiWriter,
|
|
6075
6395
|
enabled = true
|
|
6076
6396
|
}) {
|
|
6077
|
-
const [shouldPrompt, setShouldPrompt] =
|
|
6078
|
-
const [payload, setPayload] =
|
|
6079
|
-
const [status, setStatus] =
|
|
6080
|
-
const [error, setError] =
|
|
6081
|
-
const apiDataRef =
|
|
6397
|
+
const [shouldPrompt, setShouldPrompt] = useState17(false);
|
|
6398
|
+
const [payload, setPayload] = useState17(null);
|
|
6399
|
+
const [status, setStatus] = useState17("idle");
|
|
6400
|
+
const [error, setError] = useState17(null);
|
|
6401
|
+
const apiDataRef = useRef4(apiData);
|
|
6082
6402
|
apiDataRef.current = apiData;
|
|
6083
|
-
const userIdRef =
|
|
6403
|
+
const userIdRef = useRef4(userId);
|
|
6084
6404
|
userIdRef.current = userId;
|
|
6085
|
-
const isLoggedInRef =
|
|
6405
|
+
const isLoggedInRef = useRef4(isLoggedIn);
|
|
6086
6406
|
isLoggedInRef.current = isLoggedIn;
|
|
6087
|
-
const enabledRef =
|
|
6407
|
+
const enabledRef = useRef4(enabled);
|
|
6088
6408
|
enabledRef.current = enabled;
|
|
6089
|
-
const domainRef =
|
|
6409
|
+
const domainRef = useRef4(domain);
|
|
6090
6410
|
domainRef.current = domain;
|
|
6091
|
-
const apiWriterRef =
|
|
6411
|
+
const apiWriterRef = useRef4(apiWriter);
|
|
6092
6412
|
apiWriterRef.current = apiWriter;
|
|
6093
6413
|
const detect = useCallback(async () => {
|
|
6094
6414
|
const _enabled = enabledRef.current;
|
|
@@ -6224,14 +6544,14 @@ function isGuestPopulated(domain, fullEvContext) {
|
|
|
6224
6544
|
}
|
|
6225
6545
|
|
|
6226
6546
|
// src/StanceAccordion.jsx
|
|
6227
|
-
import
|
|
6547
|
+
import React31, { useState as useState18, useRef as useRef5, useCallback as useCallback2, useEffect as useEffect11 } from "react";
|
|
6228
6548
|
|
|
6229
6549
|
// src/Favicon.jsx
|
|
6230
|
-
import
|
|
6550
|
+
import React30 from "react";
|
|
6231
6551
|
function Favicon({ url, size = 16 }) {
|
|
6232
6552
|
try {
|
|
6233
6553
|
const domain = new URL(url).hostname;
|
|
6234
|
-
return /* @__PURE__ */
|
|
6554
|
+
return /* @__PURE__ */ React30.createElement(
|
|
6235
6555
|
"img",
|
|
6236
6556
|
{
|
|
6237
6557
|
src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
|
|
@@ -6242,7 +6562,7 @@ function Favicon({ url, size = 16 }) {
|
|
|
6242
6562
|
}
|
|
6243
6563
|
);
|
|
6244
6564
|
} catch {
|
|
6245
|
-
return /* @__PURE__ */
|
|
6565
|
+
return /* @__PURE__ */ React30.createElement(
|
|
6246
6566
|
"svg",
|
|
6247
6567
|
{
|
|
6248
6568
|
width: size,
|
|
@@ -6253,8 +6573,8 @@ function Favicon({ url, size = 16 }) {
|
|
|
6253
6573
|
strokeWidth: "1.5",
|
|
6254
6574
|
style: { verticalAlign: "middle", flexShrink: 0 }
|
|
6255
6575
|
},
|
|
6256
|
-
/* @__PURE__ */
|
|
6257
|
-
/* @__PURE__ */
|
|
6576
|
+
/* @__PURE__ */ React30.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
6577
|
+
/* @__PURE__ */ React30.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" })
|
|
6258
6578
|
);
|
|
6259
6579
|
}
|
|
6260
6580
|
}
|
|
@@ -6349,11 +6669,11 @@ function StanceAccordion({
|
|
|
6349
6669
|
apiUrl = "https://api.empowered.vote"
|
|
6350
6670
|
}) {
|
|
6351
6671
|
var _a;
|
|
6352
|
-
const [expandedTopicId, setExpandedTopicId] =
|
|
6353
|
-
const [loadingId, setLoadingId] =
|
|
6354
|
-
const [showAll, setShowAll] =
|
|
6355
|
-
const contextCache =
|
|
6356
|
-
const quotesCache =
|
|
6672
|
+
const [expandedTopicId, setExpandedTopicId] = useState18(null);
|
|
6673
|
+
const [loadingId, setLoadingId] = useState18(null);
|
|
6674
|
+
const [showAll, setShowAll] = useState18(false);
|
|
6675
|
+
const contextCache = useRef5(/* @__PURE__ */ new Map());
|
|
6676
|
+
const quotesCache = useRef5(null);
|
|
6357
6677
|
const c = palette(darkMode);
|
|
6358
6678
|
const polAnswerMap = {};
|
|
6359
6679
|
if (polAnswers) {
|
|
@@ -6453,13 +6773,13 @@ function StanceAccordion({
|
|
|
6453
6773
|
textTransform: "uppercase",
|
|
6454
6774
|
letterSpacing: "0.06em"
|
|
6455
6775
|
};
|
|
6456
|
-
return /* @__PURE__ */
|
|
6776
|
+
return /* @__PURE__ */ React31.createElement(
|
|
6457
6777
|
"div",
|
|
6458
6778
|
{
|
|
6459
6779
|
className: "ev-stance-panel flex flex-col",
|
|
6460
6780
|
style: { fontFamily: "'Manrope', sans-serif" }
|
|
6461
6781
|
},
|
|
6462
|
-
/* @__PURE__ */
|
|
6782
|
+
/* @__PURE__ */ React31.createElement("h3", { style: { ...sectionLabelStyle, marginBottom: "8px" } }, "Stance Breakdown"),
|
|
6463
6783
|
visibleTopics.map((topic) => {
|
|
6464
6784
|
const topicId = String(topic.id);
|
|
6465
6785
|
const polValue = polAnswerMap[topicId];
|
|
@@ -6478,13 +6798,13 @@ function StanceAccordion({
|
|
|
6478
6798
|
if (topic.topic_key) return q.issue === topic.topic_key;
|
|
6479
6799
|
return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
|
|
6480
6800
|
}) : [];
|
|
6481
|
-
return /* @__PURE__ */
|
|
6801
|
+
return /* @__PURE__ */ React31.createElement(
|
|
6482
6802
|
"div",
|
|
6483
6803
|
{
|
|
6484
6804
|
key: topicId,
|
|
6485
6805
|
style: { borderBottom: `1px solid ${c.rowBorder}` }
|
|
6486
6806
|
},
|
|
6487
|
-
/* @__PURE__ */
|
|
6807
|
+
/* @__PURE__ */ React31.createElement(
|
|
6488
6808
|
"button",
|
|
6489
6809
|
{
|
|
6490
6810
|
type: "button",
|
|
@@ -6504,7 +6824,7 @@ function StanceAccordion({
|
|
|
6504
6824
|
e.currentTarget.style.background = "transparent";
|
|
6505
6825
|
}
|
|
6506
6826
|
},
|
|
6507
|
-
/* @__PURE__ */
|
|
6827
|
+
/* @__PURE__ */ React31.createElement("div", { className: "flex flex-col min-w-0", style: { gap: "5px" } }, /* @__PURE__ */ React31.createElement(
|
|
6508
6828
|
"span",
|
|
6509
6829
|
{
|
|
6510
6830
|
style: {
|
|
@@ -6515,7 +6835,7 @@ function StanceAccordion({
|
|
|
6515
6835
|
}
|
|
6516
6836
|
},
|
|
6517
6837
|
titleText
|
|
6518
|
-
), /* @__PURE__ */
|
|
6838
|
+
), /* @__PURE__ */ React31.createElement("span", { style: { display: "flex", alignItems: "flex-start", gap: "8px" } }, /* @__PURE__ */ React31.createElement(
|
|
6519
6839
|
"span",
|
|
6520
6840
|
{
|
|
6521
6841
|
style: {
|
|
@@ -6527,7 +6847,7 @@ function StanceAccordion({
|
|
|
6527
6847
|
marginTop: "6px"
|
|
6528
6848
|
}
|
|
6529
6849
|
}
|
|
6530
|
-
), /* @__PURE__ */
|
|
6850
|
+
), /* @__PURE__ */ React31.createElement(
|
|
6531
6851
|
"span",
|
|
6532
6852
|
{
|
|
6533
6853
|
style: {
|
|
@@ -6538,7 +6858,7 @@ function StanceAccordion({
|
|
|
6538
6858
|
},
|
|
6539
6859
|
label
|
|
6540
6860
|
))),
|
|
6541
|
-
/* @__PURE__ */
|
|
6861
|
+
/* @__PURE__ */ React31.createElement(
|
|
6542
6862
|
"svg",
|
|
6543
6863
|
{
|
|
6544
6864
|
width: "16",
|
|
@@ -6556,10 +6876,10 @@ function StanceAccordion({
|
|
|
6556
6876
|
transition: "transform 0.2s ease"
|
|
6557
6877
|
}
|
|
6558
6878
|
},
|
|
6559
|
-
/* @__PURE__ */
|
|
6879
|
+
/* @__PURE__ */ React31.createElement("polyline", { points: "9 18 15 12 9 6" })
|
|
6560
6880
|
)
|
|
6561
6881
|
),
|
|
6562
|
-
/* @__PURE__ */
|
|
6882
|
+
/* @__PURE__ */ React31.createElement(
|
|
6563
6883
|
"div",
|
|
6564
6884
|
{
|
|
6565
6885
|
style: {
|
|
@@ -6568,7 +6888,7 @@ function StanceAccordion({
|
|
|
6568
6888
|
transition: "grid-template-rows 0.25s ease"
|
|
6569
6889
|
}
|
|
6570
6890
|
},
|
|
6571
|
-
/* @__PURE__ */
|
|
6891
|
+
/* @__PURE__ */ React31.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ React31.createElement("div", { style: { padding: "4px 8px 16px" } }, stances.length > 0 && /* @__PURE__ */ React31.createElement(React31.Fragment, null, (userValue > 0 || polValue > 0) && /* @__PURE__ */ React31.createElement(
|
|
6572
6892
|
"div",
|
|
6573
6893
|
{
|
|
6574
6894
|
style: {
|
|
@@ -6580,14 +6900,14 @@ function StanceAccordion({
|
|
|
6580
6900
|
color: c.sourceText
|
|
6581
6901
|
}
|
|
6582
6902
|
},
|
|
6583
|
-
userValue > 0 && /* @__PURE__ */
|
|
6584
|
-
/* @__PURE__ */
|
|
6585
|
-
), /* @__PURE__ */
|
|
6903
|
+
userValue > 0 && /* @__PURE__ */ React31.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: "6px" } }, /* @__PURE__ */ React31.createElement("span", { style: { width: "9px", height: "9px", borderRadius: "50%", backgroundColor: USER_DOT } }), "You"),
|
|
6904
|
+
/* @__PURE__ */ React31.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: "6px" } }, /* @__PURE__ */ React31.createElement("span", { style: { width: "9px", height: "9px", borderRadius: "50%", backgroundColor: c.polDot } }), "Their stance")
|
|
6905
|
+
), /* @__PURE__ */ React31.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "6px", marginBottom: "14px" } }, stances.map((stance, i) => {
|
|
6586
6906
|
const stanceNum = i + 1;
|
|
6587
6907
|
const isUser = userValue === stanceNum;
|
|
6588
6908
|
const isPol = polValue === stanceNum;
|
|
6589
6909
|
const isActive = isUser || isPol;
|
|
6590
|
-
return /* @__PURE__ */
|
|
6910
|
+
return /* @__PURE__ */ React31.createElement(
|
|
6591
6911
|
"div",
|
|
6592
6912
|
{
|
|
6593
6913
|
key: i,
|
|
@@ -6603,7 +6923,7 @@ function StanceAccordion({
|
|
|
6603
6923
|
backgroundColor: isActive ? c.pillActiveBg : "transparent"
|
|
6604
6924
|
}
|
|
6605
6925
|
},
|
|
6606
|
-
/* @__PURE__ */
|
|
6926
|
+
/* @__PURE__ */ React31.createElement(
|
|
6607
6927
|
"span",
|
|
6608
6928
|
{
|
|
6609
6929
|
style: {
|
|
@@ -6615,10 +6935,10 @@ function StanceAccordion({
|
|
|
6615
6935
|
paddingTop: "3px"
|
|
6616
6936
|
}
|
|
6617
6937
|
},
|
|
6618
|
-
isUser && /* @__PURE__ */
|
|
6619
|
-
isPol && /* @__PURE__ */
|
|
6938
|
+
isUser && /* @__PURE__ */ React31.createElement("span", { style: { width: "9px", height: "9px", borderRadius: "50%", backgroundColor: USER_DOT, boxShadow: `0 0 0 3px ${USER_DOT}33` } }),
|
|
6939
|
+
isPol && /* @__PURE__ */ React31.createElement("span", { style: { width: "9px", height: "9px", borderRadius: "50%", backgroundColor: c.polDot, boxShadow: `0 0 0 3px ${c.polDot}33` } })
|
|
6620
6940
|
),
|
|
6621
|
-
/* @__PURE__ */
|
|
6941
|
+
/* @__PURE__ */ React31.createElement(
|
|
6622
6942
|
"span",
|
|
6623
6943
|
{
|
|
6624
6944
|
style: {
|
|
@@ -6630,7 +6950,7 @@ function StanceAccordion({
|
|
|
6630
6950
|
stance.text
|
|
6631
6951
|
)
|
|
6632
6952
|
);
|
|
6633
|
-
}))), isLoading && /* @__PURE__ */
|
|
6953
|
+
}))), isLoading && /* @__PURE__ */ React31.createElement("div", { className: "flex items-center", style: { padding: "12px 0" } }, /* @__PURE__ */ React31.createElement(
|
|
6634
6954
|
"div",
|
|
6635
6955
|
{
|
|
6636
6956
|
style: {
|
|
@@ -6642,7 +6962,7 @@ function StanceAccordion({
|
|
|
6642
6962
|
animation: "ev-spin 0.8s linear infinite"
|
|
6643
6963
|
}
|
|
6644
6964
|
}
|
|
6645
|
-
)), !isLoading && cached && /* @__PURE__ */
|
|
6965
|
+
)), !isLoading && cached && /* @__PURE__ */ React31.createElement(React31.Fragment, null, cached.reasoning ? /* @__PURE__ */ React31.createElement(
|
|
6646
6966
|
"p",
|
|
6647
6967
|
{
|
|
6648
6968
|
style: {
|
|
@@ -6654,7 +6974,7 @@ function StanceAccordion({
|
|
|
6654
6974
|
}
|
|
6655
6975
|
},
|
|
6656
6976
|
cached.reasoning
|
|
6657
|
-
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */
|
|
6977
|
+
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ React31.createElement("div", { style: { marginTop: "8px" } }, /* @__PURE__ */ React31.createElement("p", { style: { ...sectionLabelStyle, marginBottom: "6px" } }, "References"), /* @__PURE__ */ React31.createElement("ol", { style: { listStyle: "decimal", listStylePosition: "inside", display: "flex", flexDirection: "column", gap: "4px" } }, cached.sources.map((src, i) => /* @__PURE__ */ React31.createElement("li", { key: i, style: { fontSize: "12px", color: c.sourceText } }, /* @__PURE__ */ React31.createElement(
|
|
6658
6978
|
"a",
|
|
6659
6979
|
{
|
|
6660
6980
|
href: src,
|
|
@@ -6663,13 +6983,13 @@ function StanceAccordion({
|
|
|
6663
6983
|
className: "inline-flex items-center gap-1.5",
|
|
6664
6984
|
style: { color: c.link }
|
|
6665
6985
|
},
|
|
6666
|
-
/* @__PURE__ */
|
|
6667
|
-
/* @__PURE__ */
|
|
6668
|
-
))))), topicQuotes.length > 0 && /* @__PURE__ */
|
|
6986
|
+
/* @__PURE__ */ React31.createElement(Favicon, { url: src }),
|
|
6987
|
+
/* @__PURE__ */ React31.createElement("span", { style: { textDecoration: "underline", textUnderlineOffset: "2px" } }, getDisplayUrl(src))
|
|
6988
|
+
))))), topicQuotes.length > 0 && /* @__PURE__ */ React31.createElement("div", { style: { marginTop: "14px" } }, /* @__PURE__ */ React31.createElement("p", { style: { ...sectionLabelStyle, marginBottom: "8px" } }, "Quotes"), topicQuotes.map((quote) => {
|
|
6669
6989
|
const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
|
|
6670
6990
|
const borderColor = verdict === "agreed" ? c.agreedText : verdict === "disagreed" ? c.disagreedText : c.quoteBorder;
|
|
6671
6991
|
const sourceName = quote.source_name || quote.sourceName;
|
|
6672
|
-
return /* @__PURE__ */
|
|
6992
|
+
return /* @__PURE__ */ React31.createElement(
|
|
6673
6993
|
"div",
|
|
6674
6994
|
{
|
|
6675
6995
|
key: quote.id,
|
|
@@ -6681,7 +7001,7 @@ function StanceAccordion({
|
|
|
6681
7001
|
marginBottom: "8px"
|
|
6682
7002
|
}
|
|
6683
7003
|
},
|
|
6684
|
-
/* @__PURE__ */
|
|
7004
|
+
/* @__PURE__ */ React31.createElement(
|
|
6685
7005
|
"p",
|
|
6686
7006
|
{
|
|
6687
7007
|
style: {
|
|
@@ -6694,7 +7014,7 @@ function StanceAccordion({
|
|
|
6694
7014
|
},
|
|
6695
7015
|
quote.text
|
|
6696
7016
|
),
|
|
6697
|
-
verdict === "agreed" && /* @__PURE__ */
|
|
7017
|
+
verdict === "agreed" && /* @__PURE__ */ React31.createElement(
|
|
6698
7018
|
"span",
|
|
6699
7019
|
{
|
|
6700
7020
|
style: {
|
|
@@ -6711,10 +7031,10 @@ function StanceAccordion({
|
|
|
6711
7031
|
flexShrink: 0
|
|
6712
7032
|
}
|
|
6713
7033
|
},
|
|
6714
|
-
/* @__PURE__ */
|
|
7034
|
+
/* @__PURE__ */ React31.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React31.createElement("path", { d: "M5 13l4 4L19 7" })),
|
|
6715
7035
|
"Agreed"
|
|
6716
7036
|
),
|
|
6717
|
-
verdict === "disagreed" && /* @__PURE__ */
|
|
7037
|
+
verdict === "disagreed" && /* @__PURE__ */ React31.createElement(
|
|
6718
7038
|
"span",
|
|
6719
7039
|
{
|
|
6720
7040
|
style: {
|
|
@@ -6731,10 +7051,10 @@ function StanceAccordion({
|
|
|
6731
7051
|
flexShrink: 0
|
|
6732
7052
|
}
|
|
6733
7053
|
},
|
|
6734
|
-
/* @__PURE__ */
|
|
7054
|
+
/* @__PURE__ */ React31.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React31.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
|
|
6735
7055
|
"Disagreed"
|
|
6736
7056
|
),
|
|
6737
|
-
sourceName && /* @__PURE__ */
|
|
7057
|
+
sourceName && /* @__PURE__ */ React31.createElement(
|
|
6738
7058
|
"a",
|
|
6739
7059
|
{
|
|
6740
7060
|
href: quote.source_url || quote.sourceUrl,
|
|
@@ -6751,11 +7071,11 @@ function StanceAccordion({
|
|
|
6751
7071
|
sourceName
|
|
6752
7072
|
)
|
|
6753
7073
|
);
|
|
6754
|
-
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */
|
|
7074
|
+
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ React31.createElement("p", { style: { fontSize: "14px", color: c.emptyText, fontStyle: "italic", padding: "8px 0" } }, "No detailed reasoning available for this topic."))))
|
|
6755
7075
|
)
|
|
6756
7076
|
);
|
|
6757
7077
|
}),
|
|
6758
|
-
hasToggle && /* @__PURE__ */
|
|
7078
|
+
hasToggle && /* @__PURE__ */ React31.createElement(
|
|
6759
7079
|
"button",
|
|
6760
7080
|
{
|
|
6761
7081
|
type: "button",
|
|
@@ -6793,6 +7113,7 @@ export {
|
|
|
6793
7113
|
PoliticianCard,
|
|
6794
7114
|
PoliticianProfile,
|
|
6795
7115
|
RadarChartCore,
|
|
7116
|
+
SiteFooter,
|
|
6796
7117
|
SiteHeader,
|
|
6797
7118
|
SocialLinks,
|
|
6798
7119
|
StanceAccordion,
|