@empoweredvote/ev-ui 0.4.4 → 0.5.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 +798 -268
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +805 -265
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -34,12 +34,14 @@ __export(index_exports, {
|
|
|
34
34
|
BranchIcon: () => BranchIcon,
|
|
35
35
|
CategorySection: () => CategorySection,
|
|
36
36
|
CommitteeTable: () => CommitteeTable,
|
|
37
|
+
CompassCardHorizontal: () => CompassCardHorizontal,
|
|
37
38
|
CompassCoverageCallout: () => CompassCoverageCallout,
|
|
38
39
|
CompassIcon: () => CompassIcon,
|
|
39
40
|
ExpandCompassNudge: () => ExpandCompassNudge,
|
|
40
41
|
FilterSidebar: () => FilterSidebar,
|
|
41
42
|
GovernmentBodySection: () => GovernmentBodySection,
|
|
42
43
|
Header: () => Header,
|
|
44
|
+
IconOverlay: () => IconOverlay,
|
|
43
45
|
IssueTags: () => IssueTags,
|
|
44
46
|
JudicialRecordDetail: () => JudicialRecordDetail,
|
|
45
47
|
JudicialScorecard: () => JudicialScorecard,
|
|
@@ -254,9 +256,9 @@ function RadarChartCore({
|
|
|
254
256
|
const fSize = adaptiveFontSize(longestLine, baseFSize);
|
|
255
257
|
const lineHeight = fSize * 1.1;
|
|
256
258
|
const dynamicLabelOffset = lines.length > 1 ? labelOffset + 8 : labelOffset;
|
|
257
|
-
const
|
|
258
|
-
const labelX = centerX +
|
|
259
|
-
let labelY = centerY -
|
|
259
|
+
const offset2 = radius + dynamicLabelOffset;
|
|
260
|
+
const labelX = centerX + offset2 * Math.sin(angle);
|
|
261
|
+
let labelY = centerY - offset2 * Math.cos(angle);
|
|
260
262
|
if (isTop && lines.length > 1) {
|
|
261
263
|
labelY -= (lines.length - 1) * lineHeight;
|
|
262
264
|
}
|
|
@@ -1840,8 +1842,606 @@ function PoliticianCard({
|
|
|
1840
1842
|
);
|
|
1841
1843
|
}
|
|
1842
1844
|
|
|
1843
|
-
// src/
|
|
1845
|
+
// src/CompassCardHorizontal.jsx
|
|
1846
|
+
var import_react13 = __toESM(require("react"));
|
|
1847
|
+
|
|
1848
|
+
// src/PlaceholderRadar.jsx
|
|
1844
1849
|
var import_react8 = __toESM(require("react"));
|
|
1850
|
+
function PlaceholderRadar({ size = 250, name = "" }) {
|
|
1851
|
+
const cx = size / 2;
|
|
1852
|
+
const cy = size / 2;
|
|
1853
|
+
const r = size / 2 * 0.65;
|
|
1854
|
+
const n = 8;
|
|
1855
|
+
const vertices = Array.from({ length: n }, (_, i) => {
|
|
1856
|
+
const a = 2 * Math.PI * i / n;
|
|
1857
|
+
return [cx + r * Math.sin(a), cy - r * Math.cos(a)];
|
|
1858
|
+
});
|
|
1859
|
+
const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
|
|
1860
|
+
const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
|
|
1861
|
+
const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
|
|
1862
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
1863
|
+
"svg",
|
|
1864
|
+
{
|
|
1865
|
+
width: size,
|
|
1866
|
+
height: size,
|
|
1867
|
+
viewBox: `0 0 ${size} ${size}`,
|
|
1868
|
+
role: "img",
|
|
1869
|
+
"aria-label": name ? `${name} \u2014 compass data unavailable` : "compass data unavailable",
|
|
1870
|
+
style: {
|
|
1871
|
+
backgroundColor: colorScales.teal["050"],
|
|
1872
|
+
borderRadius: borderRadius.sm,
|
|
1873
|
+
flexShrink: 0
|
|
1874
|
+
}
|
|
1875
|
+
},
|
|
1876
|
+
vertices.map(([x, y], i) => /* @__PURE__ */ import_react8.default.createElement(
|
|
1877
|
+
"line",
|
|
1878
|
+
{
|
|
1879
|
+
key: i,
|
|
1880
|
+
x1: cx,
|
|
1881
|
+
y1: cy,
|
|
1882
|
+
x2: x,
|
|
1883
|
+
y2: y,
|
|
1884
|
+
stroke: colorScales.gray["200"],
|
|
1885
|
+
strokeWidth: "1",
|
|
1886
|
+
strokeDasharray: "2 3",
|
|
1887
|
+
opacity: "0.6"
|
|
1888
|
+
}
|
|
1889
|
+
)),
|
|
1890
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
1891
|
+
"polygon",
|
|
1892
|
+
{
|
|
1893
|
+
points: innerPts,
|
|
1894
|
+
fill: "none",
|
|
1895
|
+
stroke: colorScales.gray["200"],
|
|
1896
|
+
strokeWidth: "1",
|
|
1897
|
+
strokeDasharray: "2 3",
|
|
1898
|
+
opacity: "0.5"
|
|
1899
|
+
}
|
|
1900
|
+
),
|
|
1901
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
1902
|
+
"polygon",
|
|
1903
|
+
{
|
|
1904
|
+
points: midPts,
|
|
1905
|
+
fill: "none",
|
|
1906
|
+
stroke: colorScales.gray["200"],
|
|
1907
|
+
strokeWidth: "1",
|
|
1908
|
+
strokeDasharray: "3 3",
|
|
1909
|
+
opacity: "0.6"
|
|
1910
|
+
}
|
|
1911
|
+
),
|
|
1912
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
1913
|
+
"polygon",
|
|
1914
|
+
{
|
|
1915
|
+
points: outerPts,
|
|
1916
|
+
fill: "none",
|
|
1917
|
+
stroke: colorScales.gray["200"],
|
|
1918
|
+
strokeWidth: "1.5",
|
|
1919
|
+
strokeDasharray: "4 3"
|
|
1920
|
+
}
|
|
1921
|
+
)
|
|
1922
|
+
);
|
|
1923
|
+
}
|
|
1924
|
+
|
|
1925
|
+
// src/CompassCardHorizontalMeta.jsx
|
|
1926
|
+
var import_react12 = __toESM(require("react"));
|
|
1927
|
+
|
|
1928
|
+
// src/IconOverlay.jsx
|
|
1929
|
+
var import_react10 = __toESM(require("react"));
|
|
1930
|
+
var import_react11 = require("@floating-ui/react");
|
|
1931
|
+
|
|
1932
|
+
// src/icons.js
|
|
1933
|
+
var import_react9 = __toESM(require("react"));
|
|
1934
|
+
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
1935
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
1936
|
+
"svg",
|
|
1937
|
+
{
|
|
1938
|
+
width: size,
|
|
1939
|
+
height: size,
|
|
1940
|
+
viewBox: "0 0 24 24",
|
|
1941
|
+
fill: "none",
|
|
1942
|
+
stroke: color,
|
|
1943
|
+
strokeWidth: "2",
|
|
1944
|
+
strokeLinecap: "round",
|
|
1945
|
+
strokeLinejoin: "round",
|
|
1946
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1947
|
+
},
|
|
1948
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
1949
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
1950
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M22 19H2" })
|
|
1951
|
+
);
|
|
1952
|
+
}
|
|
1953
|
+
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
1954
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
1955
|
+
"svg",
|
|
1956
|
+
{
|
|
1957
|
+
width: size,
|
|
1958
|
+
height: size,
|
|
1959
|
+
viewBox: "0 0 24 24",
|
|
1960
|
+
fill: "none",
|
|
1961
|
+
stroke: color,
|
|
1962
|
+
strokeWidth: "2",
|
|
1963
|
+
strokeLinecap: "round",
|
|
1964
|
+
strokeLinejoin: "round",
|
|
1965
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1966
|
+
},
|
|
1967
|
+
/* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1968
|
+
/* @__PURE__ */ import_react9.default.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" })
|
|
1969
|
+
);
|
|
1970
|
+
}
|
|
1971
|
+
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
1972
|
+
let paths;
|
|
1973
|
+
switch (branch) {
|
|
1974
|
+
case "executive":
|
|
1975
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react9.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react9.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
|
|
1976
|
+
break;
|
|
1977
|
+
case "legislative":
|
|
1978
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.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__ */ import_react9.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M15 12h-5" }));
|
|
1979
|
+
break;
|
|
1980
|
+
case "judicial":
|
|
1981
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M8 21h8" }));
|
|
1982
|
+
break;
|
|
1983
|
+
default:
|
|
1984
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react9.default.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__ */ import_react9.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M6 18v-7" }));
|
|
1985
|
+
break;
|
|
1986
|
+
}
|
|
1987
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
1988
|
+
"svg",
|
|
1989
|
+
{
|
|
1990
|
+
width: size,
|
|
1991
|
+
height: size,
|
|
1992
|
+
viewBox: "0 0 24 24",
|
|
1993
|
+
fill: "none",
|
|
1994
|
+
stroke: color,
|
|
1995
|
+
strokeWidth: "2",
|
|
1996
|
+
strokeLinecap: "round",
|
|
1997
|
+
strokeLinejoin: "round",
|
|
1998
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1999
|
+
},
|
|
2000
|
+
paths
|
|
2001
|
+
);
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
// src/IconOverlay.jsx
|
|
2005
|
+
function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
|
|
2006
|
+
const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
|
|
2007
|
+
const { refs, floatingStyles, context } = (0, import_react11.useFloating)({
|
|
2008
|
+
open: isOpen,
|
|
2009
|
+
onOpenChange: setIsOpen,
|
|
2010
|
+
middleware: [(0, import_react11.offset)(8), (0, import_react11.flip)(), (0, import_react11.shift)({ padding: 4 })],
|
|
2011
|
+
whileElementsMounted: import_react11.autoUpdate
|
|
2012
|
+
});
|
|
2013
|
+
const hover = (0, import_react11.useHover)(context);
|
|
2014
|
+
const focus2 = (0, import_react11.useFocus)(context);
|
|
2015
|
+
const dismiss = (0, import_react11.useDismiss)(context);
|
|
2016
|
+
const role = (0, import_react11.useRole)(context, { role: "tooltip" });
|
|
2017
|
+
const { getReferenceProps, getFloatingProps } = (0, import_react11.useInteractions)([
|
|
2018
|
+
hover,
|
|
2019
|
+
focus2,
|
|
2020
|
+
dismiss,
|
|
2021
|
+
role
|
|
2022
|
+
]);
|
|
2023
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2024
|
+
"span",
|
|
2025
|
+
{
|
|
2026
|
+
ref: refs.setReference,
|
|
2027
|
+
"aria-label": tooltip,
|
|
2028
|
+
tabIndex: 0,
|
|
2029
|
+
style: { display: "inline-flex", padding: spacing[1], ...onClick ? { cursor: "pointer" } : {} },
|
|
2030
|
+
...getReferenceProps(),
|
|
2031
|
+
onClick: onClick ? (e) => {
|
|
2032
|
+
e.stopPropagation();
|
|
2033
|
+
onClick(e);
|
|
2034
|
+
} : void 0
|
|
2035
|
+
},
|
|
2036
|
+
/* @__PURE__ */ import_react10.default.createElement(IconComponent, { size, color, ...extraProps })
|
|
2037
|
+
), isOpen && /* @__PURE__ */ import_react10.default.createElement(import_react11.FloatingPortal, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2038
|
+
"div",
|
|
2039
|
+
{
|
|
2040
|
+
ref: refs.setFloating,
|
|
2041
|
+
style: {
|
|
2042
|
+
...floatingStyles,
|
|
2043
|
+
zIndex: 70,
|
|
2044
|
+
background: semanticTokens.light.tooltip.background,
|
|
2045
|
+
color: semanticTokens.light.tooltip.text,
|
|
2046
|
+
padding: "4px 8px",
|
|
2047
|
+
borderRadius: "6px",
|
|
2048
|
+
fontSize: "14px",
|
|
2049
|
+
fontFamily: "'Manrope', sans-serif",
|
|
2050
|
+
pointerEvents: "none",
|
|
2051
|
+
whiteSpace: "nowrap"
|
|
2052
|
+
},
|
|
2053
|
+
...getFloatingProps()
|
|
2054
|
+
},
|
|
2055
|
+
tooltip
|
|
2056
|
+
)));
|
|
2057
|
+
}
|
|
2058
|
+
function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
2059
|
+
if (!ballot && !hasStances && !branch) return null;
|
|
2060
|
+
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;
|
|
2061
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
2062
|
+
"div",
|
|
2063
|
+
{
|
|
2064
|
+
style: {
|
|
2065
|
+
display: "flex",
|
|
2066
|
+
gap: 4,
|
|
2067
|
+
alignItems: "center",
|
|
2068
|
+
justifyContent: "flex-start",
|
|
2069
|
+
padding: 0,
|
|
2070
|
+
marginLeft: "-4px"
|
|
2071
|
+
// offset icon wrapper padding so icons align flush-left with text
|
|
2072
|
+
}
|
|
2073
|
+
},
|
|
2074
|
+
ballot && /* @__PURE__ */ import_react10.default.createElement(
|
|
2075
|
+
IconWithTooltip,
|
|
2076
|
+
{
|
|
2077
|
+
IconComponent: BallotIcon,
|
|
2078
|
+
color: colors.evMutedBlue,
|
|
2079
|
+
tooltip: ballotTooltip,
|
|
2080
|
+
size: 14
|
|
2081
|
+
}
|
|
2082
|
+
),
|
|
2083
|
+
hasStances && /* @__PURE__ */ import_react10.default.createElement(
|
|
2084
|
+
IconWithTooltip,
|
|
2085
|
+
{
|
|
2086
|
+
IconComponent: CompassIcon,
|
|
2087
|
+
color: colors.evMutedBlue,
|
|
2088
|
+
tooltip: "Compare your views",
|
|
2089
|
+
size: 14,
|
|
2090
|
+
onClick: onCompassClick
|
|
2091
|
+
}
|
|
2092
|
+
),
|
|
2093
|
+
branch && /* @__PURE__ */ import_react10.default.createElement(
|
|
2094
|
+
IconWithTooltip,
|
|
2095
|
+
{
|
|
2096
|
+
IconComponent: BranchIcon,
|
|
2097
|
+
color: colors.evMutedBlue,
|
|
2098
|
+
tooltip: `${branch} branch`,
|
|
2099
|
+
size: 14,
|
|
2100
|
+
extraProps: { branch: branch.toLowerCase() }
|
|
2101
|
+
}
|
|
2102
|
+
)
|
|
2103
|
+
);
|
|
2104
|
+
}
|
|
2105
|
+
|
|
2106
|
+
// src/CompassCardHorizontalMeta.jsx
|
|
2107
|
+
function CompassCardHorizontalMeta({
|
|
2108
|
+
politician,
|
|
2109
|
+
surface = "representatives",
|
|
2110
|
+
userAnswers
|
|
2111
|
+
}) {
|
|
2112
|
+
const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
|
|
2113
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", { style: {
|
|
2114
|
+
flex: 1,
|
|
2115
|
+
minWidth: 0,
|
|
2116
|
+
display: "flex",
|
|
2117
|
+
flexDirection: "column",
|
|
2118
|
+
gap: spacing[1]
|
|
2119
|
+
} }, /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2120
|
+
fontFamily: fonts.primary,
|
|
2121
|
+
fontSize: fontSizes.lg,
|
|
2122
|
+
fontWeight: fontWeights.semibold,
|
|
2123
|
+
lineHeight: 1.4,
|
|
2124
|
+
color: colors.evMutedBlue,
|
|
2125
|
+
margin: 0
|
|
2126
|
+
} }, politician.full_name), /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2127
|
+
fontFamily: fonts.primary,
|
|
2128
|
+
fontSize: fontSizes.sm,
|
|
2129
|
+
fontWeight: fontWeights.semibold,
|
|
2130
|
+
lineHeight: 1.4,
|
|
2131
|
+
color: colors.textSecondary,
|
|
2132
|
+
margin: 0,
|
|
2133
|
+
overflow: "hidden",
|
|
2134
|
+
display: "-webkit-box",
|
|
2135
|
+
WebkitLineClamp: 2,
|
|
2136
|
+
WebkitBoxOrient: "vertical"
|
|
2137
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2138
|
+
fontFamily: fonts.primary,
|
|
2139
|
+
fontSize: fontSizes.sm,
|
|
2140
|
+
fontWeight: fontWeights.regular,
|
|
2141
|
+
lineHeight: 1.5,
|
|
2142
|
+
color: colors.textMuted,
|
|
2143
|
+
margin: 0,
|
|
2144
|
+
overflow: "hidden",
|
|
2145
|
+
textOverflow: "ellipsis",
|
|
2146
|
+
whiteSpace: "nowrap"
|
|
2147
|
+
} }, politician.district_label), /* @__PURE__ */ import_react12.default.createElement(
|
|
2148
|
+
IconOverlay,
|
|
2149
|
+
{
|
|
2150
|
+
ballot: politician.ballot || null,
|
|
2151
|
+
hasStances: Boolean(userAnswers && userAnswers.length > 0) || Boolean(politician.hasStances),
|
|
2152
|
+
branch: politician.branch || null
|
|
2153
|
+
}
|
|
2154
|
+
));
|
|
2155
|
+
}
|
|
2156
|
+
|
|
2157
|
+
// src/compassHelpers.js
|
|
2158
|
+
function buildAnswerMapByShortTitle(allTopics, allAnswers, allowedShorts) {
|
|
2159
|
+
var _a;
|
|
2160
|
+
const allowed = new Set(allowedShorts.map((s) => s.toLowerCase()));
|
|
2161
|
+
const topicById = new Map(allTopics.map((t) => [t.id, t]));
|
|
2162
|
+
const shortById = new Map(allTopics.map((t) => [t.id, t.short_title]));
|
|
2163
|
+
const out = {};
|
|
2164
|
+
const topicByShortLower = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
|
|
2165
|
+
for (const s of allowedShorts) {
|
|
2166
|
+
const t = topicByShortLower.get(s.toLowerCase());
|
|
2167
|
+
if (t) out[t.short_title] = 0;
|
|
2168
|
+
}
|
|
2169
|
+
for (const a of allAnswers) {
|
|
2170
|
+
const st = shortById.get(a.topic_id);
|
|
2171
|
+
if (!st) continue;
|
|
2172
|
+
if (allowed.has(String(st).toLowerCase())) {
|
|
2173
|
+
out[st] = (_a = a.value) != null ? _a : 0;
|
|
2174
|
+
}
|
|
2175
|
+
}
|
|
2176
|
+
const topicByShort = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
|
|
2177
|
+
const topicsFiltered = allowedShorts.map((s) => topicByShort.get(s.toLowerCase())).filter(Boolean);
|
|
2178
|
+
return { topicsFiltered, answersByShort: out };
|
|
2179
|
+
}
|
|
2180
|
+
|
|
2181
|
+
// src/CompassCardHorizontal.jsx
|
|
2182
|
+
var RADAR_SIZE = 250;
|
|
2183
|
+
var SLOT_WIDTH = 260;
|
|
2184
|
+
function CompassCardHorizontal({
|
|
2185
|
+
politician,
|
|
2186
|
+
userAnswers = null,
|
|
2187
|
+
tierVisuals = null,
|
|
2188
|
+
view = "compass",
|
|
2189
|
+
surface = "representatives",
|
|
2190
|
+
variant = "compass",
|
|
2191
|
+
onBuildCompass = null,
|
|
2192
|
+
onClick
|
|
2193
|
+
}) {
|
|
2194
|
+
var _a;
|
|
2195
|
+
const [hovered, setHovered] = (0, import_react13.useState)(false);
|
|
2196
|
+
const [focused, setFocused] = (0, import_react13.useState)(false);
|
|
2197
|
+
const [imgError, setImgError] = (0, import_react13.useState)(false);
|
|
2198
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react13.useState)(false);
|
|
2199
|
+
(0, import_react13.useEffect)(() => {
|
|
2200
|
+
setImgError(false);
|
|
2201
|
+
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2202
|
+
const cardStyle = {
|
|
2203
|
+
position: "relative",
|
|
2204
|
+
display: "flex",
|
|
2205
|
+
flexDirection: "row",
|
|
2206
|
+
alignItems: "center",
|
|
2207
|
+
backgroundColor: (_a = tierVisuals == null ? void 0 : tierVisuals.bg) != null ? _a : colors.bgWhite,
|
|
2208
|
+
border: `1px solid ${colors.borderLight}`,
|
|
2209
|
+
borderRadius: borderRadius.xl,
|
|
2210
|
+
overflow: "hidden",
|
|
2211
|
+
// clips slot corners via card border-radius — no padding needed
|
|
2212
|
+
boxShadow: focused ? focus.ring : hovered ? shadows.cardHover : shadows.md,
|
|
2213
|
+
transform: hovered ? "translateY(-2px)" : "none",
|
|
2214
|
+
transition: `box-shadow ${duration.normal} ease, transform ${duration.normal} ease`,
|
|
2215
|
+
cursor: onClick ? "pointer" : "default",
|
|
2216
|
+
fontFamily: fonts.primary,
|
|
2217
|
+
outline: "none"
|
|
2218
|
+
};
|
|
2219
|
+
const slotStyle = { width: SLOT_WIDTH, height: SLOT_WIDTH, flexShrink: 0, overflow: "hidden", position: "relative" };
|
|
2220
|
+
function renderCompass() {
|
|
2221
|
+
var _a2, _b, _c;
|
|
2222
|
+
if (!userAnswers || userAnswers.length === 0) {
|
|
2223
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2224
|
+
}
|
|
2225
|
+
let topics = [];
|
|
2226
|
+
let data = {};
|
|
2227
|
+
let compareData = {};
|
|
2228
|
+
try {
|
|
2229
|
+
if (Array.isArray(userAnswers) && userAnswers.length > 0) {
|
|
2230
|
+
const hasEmbeddedTopics = (_b = (_a2 = userAnswers[0]) == null ? void 0 : _a2.topic) == null ? void 0 : _b.short_title;
|
|
2231
|
+
if (hasEmbeddedTopics) {
|
|
2232
|
+
const allowedShorts = userAnswers.map((a) => a.topic.short_title);
|
|
2233
|
+
const allTopics = userAnswers.map((a) => a.topic);
|
|
2234
|
+
const { topicsFiltered, answersByShort } = buildAnswerMapByShortTitle(
|
|
2235
|
+
allTopics,
|
|
2236
|
+
userAnswers,
|
|
2237
|
+
allowedShorts
|
|
2238
|
+
);
|
|
2239
|
+
topics = topicsFiltered;
|
|
2240
|
+
data = answersByShort;
|
|
2241
|
+
} else {
|
|
2242
|
+
if (!Array.isArray(userAnswers[0])) {
|
|
2243
|
+
topics = userAnswers.filter((a) => a.short_title).map((a) => ({ id: a.topic_id || a.short_title, short_title: a.short_title, title: a.short_title }));
|
|
2244
|
+
data = {};
|
|
2245
|
+
for (const a of userAnswers) {
|
|
2246
|
+
if (a.short_title) data[a.short_title] = (_c = a.value) != null ? _c : 0;
|
|
2247
|
+
}
|
|
2248
|
+
}
|
|
2249
|
+
}
|
|
2250
|
+
}
|
|
2251
|
+
if ((politician == null ? void 0 : politician.stances) && typeof politician.stances === "object") {
|
|
2252
|
+
compareData = Array.isArray(politician.stances) ? politician.stances.reduce((acc, s) => {
|
|
2253
|
+
var _a3;
|
|
2254
|
+
if (s.short_title) acc[s.short_title] = (_a3 = s.value) != null ? _a3 : 0;
|
|
2255
|
+
return acc;
|
|
2256
|
+
}, {}) : politician.stances;
|
|
2257
|
+
}
|
|
2258
|
+
if (topics.length === 0) {
|
|
2259
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2260
|
+
}
|
|
2261
|
+
} catch (err) {
|
|
2262
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2263
|
+
}
|
|
2264
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2265
|
+
RadarChartCore,
|
|
2266
|
+
{
|
|
2267
|
+
topics,
|
|
2268
|
+
data,
|
|
2269
|
+
compareData,
|
|
2270
|
+
invertedSpokes: {},
|
|
2271
|
+
onToggleInversion: () => {
|
|
2272
|
+
},
|
|
2273
|
+
onReplaceTopic: () => {
|
|
2274
|
+
},
|
|
2275
|
+
size: RADAR_SIZE,
|
|
2276
|
+
padding: 20,
|
|
2277
|
+
labelOffset: 5,
|
|
2278
|
+
labelFontSize: 12
|
|
2279
|
+
}
|
|
2280
|
+
);
|
|
2281
|
+
}
|
|
2282
|
+
function renderPortrait() {
|
|
2283
|
+
var _a2, _b, _c;
|
|
2284
|
+
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;
|
|
2285
|
+
if (imageSrc && !imgError) {
|
|
2286
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2287
|
+
"img",
|
|
2288
|
+
{
|
|
2289
|
+
src: imageSrc,
|
|
2290
|
+
alt: `${politician.full_name} portrait`,
|
|
2291
|
+
style: {
|
|
2292
|
+
width: "100%",
|
|
2293
|
+
height: "100%",
|
|
2294
|
+
objectFit: "cover",
|
|
2295
|
+
objectPosition: (_b = politician.imageFocalPoint) != null ? _b : "center 20%",
|
|
2296
|
+
display: "block"
|
|
2297
|
+
},
|
|
2298
|
+
onError: () => setImgError(true)
|
|
2299
|
+
}
|
|
2300
|
+
);
|
|
2301
|
+
}
|
|
2302
|
+
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2303
|
+
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2304
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2305
|
+
width: "100%",
|
|
2306
|
+
height: "100%",
|
|
2307
|
+
backgroundColor: colors.evMutedBlue,
|
|
2308
|
+
color: colors.textWhite,
|
|
2309
|
+
display: "flex",
|
|
2310
|
+
alignItems: "center",
|
|
2311
|
+
justifyContent: "center",
|
|
2312
|
+
fontFamily: fonts.primary,
|
|
2313
|
+
fontWeight: fontWeights.bold,
|
|
2314
|
+
fontSize: fontSizes["4xl"]
|
|
2315
|
+
} }, initials);
|
|
2316
|
+
}
|
|
2317
|
+
function renderEmptyVariant() {
|
|
2318
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2319
|
+
width: "100%",
|
|
2320
|
+
height: "100%",
|
|
2321
|
+
display: "flex",
|
|
2322
|
+
flexDirection: "column",
|
|
2323
|
+
alignItems: "center",
|
|
2324
|
+
justifyContent: "center",
|
|
2325
|
+
gap: "8px",
|
|
2326
|
+
padding: "12px 14px",
|
|
2327
|
+
boxSizing: "border-box",
|
|
2328
|
+
backgroundColor: colorScales.teal["050"]
|
|
2329
|
+
} }, /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2330
|
+
margin: 0,
|
|
2331
|
+
fontSize: fontSizes.xs,
|
|
2332
|
+
color: colors.textMuted,
|
|
2333
|
+
textAlign: "center",
|
|
2334
|
+
lineHeight: 1.4,
|
|
2335
|
+
fontFamily: fonts.primary
|
|
2336
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react13.default.createElement(
|
|
2337
|
+
"button",
|
|
2338
|
+
{
|
|
2339
|
+
type: "button",
|
|
2340
|
+
onClick: onBuildCompass || void 0,
|
|
2341
|
+
onMouseEnter: () => setEmptyCtaHovered(true),
|
|
2342
|
+
onMouseLeave: () => setEmptyCtaHovered(false),
|
|
2343
|
+
style: {
|
|
2344
|
+
minWidth: "160px",
|
|
2345
|
+
height: "40px",
|
|
2346
|
+
padding: "0 16px",
|
|
2347
|
+
backgroundColor: emptyCtaHovered ? semanticTokens.light.buttonPrimary.background.hovered : semanticTokens.light.buttonPrimary.background.default,
|
|
2348
|
+
color: colors.textWhite,
|
|
2349
|
+
fontSize: fontSizes.xs,
|
|
2350
|
+
fontWeight: fontWeights.semibold,
|
|
2351
|
+
fontFamily: fonts.primary,
|
|
2352
|
+
borderRadius: borderRadius.full,
|
|
2353
|
+
border: "none",
|
|
2354
|
+
cursor: onBuildCompass ? "pointer" : "default",
|
|
2355
|
+
whiteSpace: "nowrap",
|
|
2356
|
+
transition: `background ${duration.normal} ease`,
|
|
2357
|
+
flexShrink: 0
|
|
2358
|
+
}
|
|
2359
|
+
},
|
|
2360
|
+
"Calibrate your compass"
|
|
2361
|
+
));
|
|
2362
|
+
}
|
|
2363
|
+
function renderUnavailablePlate() {
|
|
2364
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2365
|
+
width: "100%",
|
|
2366
|
+
height: "100%",
|
|
2367
|
+
backgroundColor: colorScales.teal["050"],
|
|
2368
|
+
display: "flex",
|
|
2369
|
+
alignItems: "center",
|
|
2370
|
+
justifyContent: "center",
|
|
2371
|
+
padding: spacing[4],
|
|
2372
|
+
boxSizing: "border-box"
|
|
2373
|
+
} }, /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2374
|
+
fontSize: fontSizes.sm,
|
|
2375
|
+
fontWeight: fontWeights.semibold,
|
|
2376
|
+
lineHeight: 1.4,
|
|
2377
|
+
color: colors.textMuted,
|
|
2378
|
+
textAlign: "center",
|
|
2379
|
+
maxWidth: "180px",
|
|
2380
|
+
margin: 0,
|
|
2381
|
+
fontFamily: fonts.primary
|
|
2382
|
+
} }, "Compass currently unavailable for this role."));
|
|
2383
|
+
}
|
|
2384
|
+
function renderSlotContent() {
|
|
2385
|
+
if (view === "portrait") return renderPortrait();
|
|
2386
|
+
if (variant === "empty") return renderEmptyVariant();
|
|
2387
|
+
if (variant === "administrative" || variant === "judicial") return renderUnavailablePlate();
|
|
2388
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2389
|
+
width: "100%",
|
|
2390
|
+
height: "100%",
|
|
2391
|
+
display: "flex",
|
|
2392
|
+
alignItems: "center",
|
|
2393
|
+
justifyContent: "center",
|
|
2394
|
+
padding: spacing[3],
|
|
2395
|
+
boxSizing: "border-box"
|
|
2396
|
+
} }, renderCompass());
|
|
2397
|
+
}
|
|
2398
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2399
|
+
"div",
|
|
2400
|
+
{
|
|
2401
|
+
role: "article",
|
|
2402
|
+
"aria-label": `${politician.full_name}, ${politician.office_title || ""}`,
|
|
2403
|
+
tabIndex: 0,
|
|
2404
|
+
style: cardStyle,
|
|
2405
|
+
onClick,
|
|
2406
|
+
onKeyDown: (e) => {
|
|
2407
|
+
if (onClick && (e.key === "Enter" || e.key === " ")) {
|
|
2408
|
+
e.preventDefault();
|
|
2409
|
+
onClick();
|
|
2410
|
+
}
|
|
2411
|
+
},
|
|
2412
|
+
onMouseEnter: () => setHovered(true),
|
|
2413
|
+
onMouseLeave: () => setHovered(false),
|
|
2414
|
+
onFocus: () => setFocused(true),
|
|
2415
|
+
onBlur: () => setFocused(false)
|
|
2416
|
+
},
|
|
2417
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2418
|
+
position: "absolute",
|
|
2419
|
+
bottom: "15px",
|
|
2420
|
+
left: 0,
|
|
2421
|
+
width: "100%",
|
|
2422
|
+
backgroundColor: "rgba(0,0,0,0.35)",
|
|
2423
|
+
color: "#fff",
|
|
2424
|
+
fontSize: "12px",
|
|
2425
|
+
fontWeight: 700,
|
|
2426
|
+
letterSpacing: "0.4px",
|
|
2427
|
+
textAlign: "center",
|
|
2428
|
+
textTransform: "uppercase",
|
|
2429
|
+
padding: "6px 0",
|
|
2430
|
+
pointerEvents: "none"
|
|
2431
|
+
} }, "Running Unopposed")),
|
|
2432
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react13.default.createElement(
|
|
2433
|
+
CompassCardHorizontalMeta,
|
|
2434
|
+
{
|
|
2435
|
+
politician,
|
|
2436
|
+
surface,
|
|
2437
|
+
userAnswers
|
|
2438
|
+
}
|
|
2439
|
+
))
|
|
2440
|
+
);
|
|
2441
|
+
}
|
|
2442
|
+
|
|
2443
|
+
// src/CategorySection.jsx
|
|
2444
|
+
var import_react14 = __toESM(require("react"));
|
|
1845
2445
|
function CategorySection({
|
|
1846
2446
|
title,
|
|
1847
2447
|
infoTooltip,
|
|
@@ -1851,7 +2451,7 @@ function CategorySection({
|
|
|
1851
2451
|
tier
|
|
1852
2452
|
}) {
|
|
1853
2453
|
var _a, _b;
|
|
1854
|
-
const [showTooltip, setShowTooltip] = (0,
|
|
2454
|
+
const [showTooltip, setShowTooltip] = (0, import_react14.useState)(false);
|
|
1855
2455
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
1856
2456
|
const styles2 = {
|
|
1857
2457
|
section: {
|
|
@@ -1919,7 +2519,7 @@ function CategorySection({
|
|
|
1919
2519
|
gap: spacing[4]
|
|
1920
2520
|
}
|
|
1921
2521
|
};
|
|
1922
|
-
return /* @__PURE__ */
|
|
2522
|
+
return /* @__PURE__ */ import_react14.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react14.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react14.default.createElement(
|
|
1923
2523
|
"button",
|
|
1924
2524
|
{
|
|
1925
2525
|
type: "button",
|
|
@@ -1931,8 +2531,8 @@ function CategorySection({
|
|
|
1931
2531
|
"aria-label": `Info about ${title}`
|
|
1932
2532
|
},
|
|
1933
2533
|
"i",
|
|
1934
|
-
showTooltip && /* @__PURE__ */
|
|
1935
|
-
), websiteUrl && /* @__PURE__ */
|
|
2534
|
+
showTooltip && /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
|
|
2535
|
+
), websiteUrl && /* @__PURE__ */ import_react14.default.createElement(
|
|
1936
2536
|
"a",
|
|
1937
2537
|
{
|
|
1938
2538
|
href: websiteUrl,
|
|
@@ -1941,7 +2541,7 @@ function CategorySection({
|
|
|
1941
2541
|
style: styles2.externalLink,
|
|
1942
2542
|
"aria-label": `Visit official website for ${title}`
|
|
1943
2543
|
},
|
|
1944
|
-
/* @__PURE__ */
|
|
2544
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
1945
2545
|
"svg",
|
|
1946
2546
|
{
|
|
1947
2547
|
viewBox: "0 0 24 24",
|
|
@@ -1949,7 +2549,7 @@ function CategorySection({
|
|
|
1949
2549
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1950
2550
|
style: { width: "14px", height: "14px" }
|
|
1951
2551
|
},
|
|
1952
|
-
/* @__PURE__ */
|
|
2552
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
1953
2553
|
"path",
|
|
1954
2554
|
{
|
|
1955
2555
|
d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
|
|
@@ -1960,11 +2560,11 @@ function CategorySection({
|
|
|
1960
2560
|
}
|
|
1961
2561
|
)
|
|
1962
2562
|
)
|
|
1963
|
-
)), /* @__PURE__ */
|
|
2563
|
+
)), /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
|
|
1964
2564
|
}
|
|
1965
2565
|
|
|
1966
2566
|
// src/SubGroupSection.jsx
|
|
1967
|
-
var
|
|
2567
|
+
var import_react15 = __toESM(require("react"));
|
|
1968
2568
|
function SubGroupSection({ title, websiteUrl, children }) {
|
|
1969
2569
|
const styles2 = {
|
|
1970
2570
|
section: {
|
|
@@ -1997,7 +2597,7 @@ function SubGroupSection({ title, websiteUrl, children }) {
|
|
|
1997
2597
|
gap: spacing[2]
|
|
1998
2598
|
}
|
|
1999
2599
|
};
|
|
2000
|
-
return /* @__PURE__ */
|
|
2600
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react15.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react15.default.createElement(
|
|
2001
2601
|
"a",
|
|
2002
2602
|
{
|
|
2003
2603
|
href: websiteUrl,
|
|
@@ -2005,12 +2605,12 @@ function SubGroupSection({ title, websiteUrl, children }) {
|
|
|
2005
2605
|
rel: "noopener noreferrer",
|
|
2006
2606
|
style: styles2.link
|
|
2007
2607
|
},
|
|
2008
|
-
/* @__PURE__ */
|
|
2009
|
-
)), /* @__PURE__ */
|
|
2608
|
+
/* @__PURE__ */ import_react15.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react15.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react15.default.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" }))
|
|
2609
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
|
|
2010
2610
|
}
|
|
2011
2611
|
|
|
2012
2612
|
// src/GovernmentBodySection.jsx
|
|
2013
|
-
var
|
|
2613
|
+
var import_react16 = __toESM(require("react"));
|
|
2014
2614
|
function GovernmentBodySection({
|
|
2015
2615
|
title,
|
|
2016
2616
|
websiteUrl,
|
|
@@ -2019,7 +2619,7 @@ function GovernmentBodySection({
|
|
|
2019
2619
|
children
|
|
2020
2620
|
}) {
|
|
2021
2621
|
var _a;
|
|
2022
|
-
const [expanded, setExpanded] = (0,
|
|
2622
|
+
const [expanded, setExpanded] = (0, import_react16.useState)(defaultExpanded);
|
|
2023
2623
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
2024
2624
|
const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
|
|
2025
2625
|
const styles2 = {
|
|
@@ -2059,7 +2659,7 @@ function GovernmentBodySection({
|
|
|
2059
2659
|
display: expanded ? "block" : "none"
|
|
2060
2660
|
}
|
|
2061
2661
|
};
|
|
2062
|
-
return /* @__PURE__ */
|
|
2662
|
+
return /* @__PURE__ */ import_react16.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
2063
2663
|
"div",
|
|
2064
2664
|
{
|
|
2065
2665
|
style: styles2.header,
|
|
@@ -2075,8 +2675,8 @@ function GovernmentBodySection({
|
|
|
2075
2675
|
"aria-expanded": expanded,
|
|
2076
2676
|
"aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
|
|
2077
2677
|
},
|
|
2078
|
-
/* @__PURE__ */
|
|
2079
|
-
websiteUrl && /* @__PURE__ */
|
|
2678
|
+
/* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.title }, title),
|
|
2679
|
+
websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
|
|
2080
2680
|
"a",
|
|
2081
2681
|
{
|
|
2082
2682
|
href: websiteUrl,
|
|
@@ -2086,14 +2686,14 @@ function GovernmentBodySection({
|
|
|
2086
2686
|
onClick: (e) => e.stopPropagation(),
|
|
2087
2687
|
"aria-label": `Visit ${title} website`
|
|
2088
2688
|
},
|
|
2089
|
-
/* @__PURE__ */
|
|
2689
|
+
/* @__PURE__ */ import_react16.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react16.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react16.default.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" }))
|
|
2090
2690
|
),
|
|
2091
|
-
/* @__PURE__ */
|
|
2092
|
-
), /* @__PURE__ */
|
|
2691
|
+
/* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
|
|
2692
|
+
), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.content }, children));
|
|
2093
2693
|
}
|
|
2094
2694
|
|
|
2095
2695
|
// src/SocialLinks.jsx
|
|
2096
|
-
var
|
|
2696
|
+
var import_react17 = __toESM(require("react"));
|
|
2097
2697
|
var SOCIAL_PLATFORMS = [
|
|
2098
2698
|
{ test: /facebook\.com/i, platform: "facebook" },
|
|
2099
2699
|
{ test: /twitter\.com|x\.com/i, platform: "twitter" },
|
|
@@ -2164,7 +2764,7 @@ function SocialLinks({
|
|
|
2164
2764
|
}
|
|
2165
2765
|
};
|
|
2166
2766
|
const platformIconMap = {
|
|
2167
|
-
twitter: /* @__PURE__ */
|
|
2767
|
+
twitter: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
2168
2768
|
"path",
|
|
2169
2769
|
{
|
|
2170
2770
|
d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
|
|
@@ -2174,7 +2774,7 @@ function SocialLinks({
|
|
|
2174
2774
|
strokeLinejoin: "round"
|
|
2175
2775
|
}
|
|
2176
2776
|
)),
|
|
2177
|
-
facebook: /* @__PURE__ */
|
|
2777
|
+
facebook: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
2178
2778
|
"path",
|
|
2179
2779
|
{
|
|
2180
2780
|
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",
|
|
@@ -2184,8 +2784,8 @@ function SocialLinks({
|
|
|
2184
2784
|
strokeLinejoin: "round"
|
|
2185
2785
|
}
|
|
2186
2786
|
)),
|
|
2187
|
-
instagram: /* @__PURE__ */
|
|
2188
|
-
linkedin: /* @__PURE__ */
|
|
2787
|
+
instagram: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
|
|
2788
|
+
linkedin: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement(
|
|
2189
2789
|
"path",
|
|
2190
2790
|
{
|
|
2191
2791
|
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",
|
|
@@ -2194,8 +2794,8 @@ function SocialLinks({
|
|
|
2194
2794
|
strokeLinecap: "round",
|
|
2195
2795
|
strokeLinejoin: "round"
|
|
2196
2796
|
}
|
|
2197
|
-
), /* @__PURE__ */
|
|
2198
|
-
youtube: /* @__PURE__ */
|
|
2797
|
+
), /* @__PURE__ */ import_react17.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
|
|
2798
|
+
youtube: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
|
|
2199
2799
|
};
|
|
2200
2800
|
const links = [
|
|
2201
2801
|
{
|
|
@@ -2221,7 +2821,7 @@ function SocialLinks({
|
|
|
2221
2821
|
{
|
|
2222
2822
|
href: website,
|
|
2223
2823
|
label: "Website",
|
|
2224
|
-
icon: /* @__PURE__ */
|
|
2824
|
+
icon: /* @__PURE__ */ import_react17.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.default.createElement(
|
|
2225
2825
|
"path",
|
|
2226
2826
|
{
|
|
2227
2827
|
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",
|
|
@@ -2251,7 +2851,7 @@ function SocialLinks({
|
|
|
2251
2851
|
if (links.length === 0) {
|
|
2252
2852
|
return null;
|
|
2253
2853
|
}
|
|
2254
|
-
return /* @__PURE__ */
|
|
2854
|
+
return /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react17.default.createElement(
|
|
2255
2855
|
"a",
|
|
2256
2856
|
{
|
|
2257
2857
|
key: link.label,
|
|
@@ -2274,7 +2874,7 @@ function SocialLinks({
|
|
|
2274
2874
|
}
|
|
2275
2875
|
|
|
2276
2876
|
// src/IssueTags.jsx
|
|
2277
|
-
var
|
|
2877
|
+
var import_react18 = __toESM(require("react"));
|
|
2278
2878
|
function IssueTags({
|
|
2279
2879
|
tags = [],
|
|
2280
2880
|
selectedTags = [],
|
|
@@ -2317,9 +2917,9 @@ function IssueTags({
|
|
|
2317
2917
|
onTagClick(tag.value);
|
|
2318
2918
|
}
|
|
2319
2919
|
};
|
|
2320
|
-
return /* @__PURE__ */
|
|
2920
|
+
return /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
|
|
2321
2921
|
const isSelected = selectedTags.includes(tag.value);
|
|
2322
|
-
return /* @__PURE__ */
|
|
2922
|
+
return /* @__PURE__ */ import_react18.default.createElement(
|
|
2323
2923
|
"span",
|
|
2324
2924
|
{
|
|
2325
2925
|
key: tag.value,
|
|
@@ -2348,7 +2948,7 @@ function IssueTags({
|
|
|
2348
2948
|
}
|
|
2349
2949
|
|
|
2350
2950
|
// src/CommitteeTable.jsx
|
|
2351
|
-
var
|
|
2951
|
+
var import_react19 = __toESM(require("react"));
|
|
2352
2952
|
var ROLE_ORDER = {
|
|
2353
2953
|
"chair": 0,
|
|
2354
2954
|
"co-chair": 1,
|
|
@@ -2375,7 +2975,7 @@ function CommitteeTable({
|
|
|
2375
2975
|
maxVisible = 6,
|
|
2376
2976
|
style = {}
|
|
2377
2977
|
}) {
|
|
2378
|
-
const [showAll, setShowAll] = (0,
|
|
2978
|
+
const [showAll, setShowAll] = (0, import_react19.useState)(false);
|
|
2379
2979
|
if (committees.length === 0) {
|
|
2380
2980
|
return null;
|
|
2381
2981
|
}
|
|
@@ -2437,7 +3037,7 @@ function CommitteeTable({
|
|
|
2437
3037
|
cursor: "pointer"
|
|
2438
3038
|
}
|
|
2439
3039
|
};
|
|
2440
|
-
return /* @__PURE__ */
|
|
3040
|
+
return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react19.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react19.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react19.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react19.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react19.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react19.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react19.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react19.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react19.default.createElement(
|
|
2441
3041
|
"a",
|
|
2442
3042
|
{
|
|
2443
3043
|
href: committee.url,
|
|
@@ -2452,7 +3052,7 @@ function CommitteeTable({
|
|
|
2452
3052
|
}
|
|
2453
3053
|
},
|
|
2454
3054
|
committee.name
|
|
2455
|
-
) : committee.name), /* @__PURE__ */
|
|
3055
|
+
) : committee.name), /* @__PURE__ */ import_react19.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react19.default.createElement(
|
|
2456
3056
|
"button",
|
|
2457
3057
|
{
|
|
2458
3058
|
type: "button",
|
|
@@ -2460,7 +3060,7 @@ function CommitteeTable({
|
|
|
2460
3060
|
onClick: () => setShowAll(!showAll)
|
|
2461
3061
|
},
|
|
2462
3062
|
showAll ? "Show less" : `Show all ${sorted.length} committees`,
|
|
2463
|
-
/* @__PURE__ */
|
|
3063
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
2464
3064
|
"svg",
|
|
2465
3065
|
{
|
|
2466
3066
|
width: "14",
|
|
@@ -2473,16 +3073,16 @@ function CommitteeTable({
|
|
|
2473
3073
|
strokeLinejoin: "round",
|
|
2474
3074
|
style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
|
|
2475
3075
|
},
|
|
2476
|
-
/* @__PURE__ */
|
|
3076
|
+
/* @__PURE__ */ import_react19.default.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
2477
3077
|
)
|
|
2478
3078
|
));
|
|
2479
3079
|
}
|
|
2480
3080
|
|
|
2481
3081
|
// src/PoliticianProfile.jsx
|
|
2482
|
-
var
|
|
3082
|
+
var import_react22 = __toESM(require("react"));
|
|
2483
3083
|
|
|
2484
3084
|
// src/LegislativeInlineSummary.jsx
|
|
2485
|
-
var
|
|
3085
|
+
var import_react20 = __toESM(require("react"));
|
|
2486
3086
|
function normalizePosition(pos) {
|
|
2487
3087
|
if (!pos) return "";
|
|
2488
3088
|
return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -2590,7 +3190,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
2590
3190
|
fontSize: fontSizes.sm,
|
|
2591
3191
|
fontWeight: fontWeights.medium
|
|
2592
3192
|
};
|
|
2593
|
-
return /* @__PURE__ */
|
|
3193
|
+
return /* @__PURE__ */ import_react20.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react20.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react20.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react20.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react20.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react20.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react20.default.createElement("div", null), /* @__PURE__ */ import_react20.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react20.default.createElement(
|
|
2594
3194
|
"button",
|
|
2595
3195
|
{
|
|
2596
3196
|
onClick: () => {
|
|
@@ -2615,12 +3215,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
2615
3215
|
}
|
|
2616
3216
|
},
|
|
2617
3217
|
"View Full Legislative Record",
|
|
2618
|
-
/* @__PURE__ */
|
|
3218
|
+
/* @__PURE__ */ import_react20.default.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__ */ import_react20.default.createElement("path", { d: "M9 18l6-6-6-6" }))
|
|
2619
3219
|
)));
|
|
2620
3220
|
}
|
|
2621
3221
|
|
|
2622
3222
|
// src/JudicialScorecard.jsx
|
|
2623
|
-
var
|
|
3223
|
+
var import_react21 = __toESM(require("react"));
|
|
2624
3224
|
|
|
2625
3225
|
// src/judicialUtils.js
|
|
2626
3226
|
function formatDate(dateStr) {
|
|
@@ -2738,7 +3338,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
|
|
|
2738
3338
|
onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
|
|
2739
3339
|
}
|
|
2740
3340
|
};
|
|
2741
|
-
return /* @__PURE__ */
|
|
3341
|
+
return /* @__PURE__ */ import_react21.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react21.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react21.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react21.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react21.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react21.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react21.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react21.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react21.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react21.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react21.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react21.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react21.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react21.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react21.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
|
|
2742
3342
|
}
|
|
2743
3343
|
|
|
2744
3344
|
// src/PoliticianProfile.jsx
|
|
@@ -2889,13 +3489,13 @@ function formatAddress(addr) {
|
|
|
2889
3489
|
if (cityStateZip) lines.push(cityStateZip);
|
|
2890
3490
|
return lines;
|
|
2891
3491
|
}
|
|
2892
|
-
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2893
|
-
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2894
|
-
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2895
|
-
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2896
|
-
var MailIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2897
|
-
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2898
|
-
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
3492
|
+
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
|
|
3493
|
+
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react22.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
|
|
3494
|
+
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react22.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
|
|
3495
|
+
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.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" }));
|
|
3496
|
+
var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.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__ */ import_react22.default.createElement("path", { d: "M22 6L12 13L2 6" }));
|
|
3497
|
+
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react22.default.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" }));
|
|
3498
|
+
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react22.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react22.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react22.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
|
|
2899
3499
|
function PoliticianProfile({
|
|
2900
3500
|
politician = {},
|
|
2901
3501
|
onBack,
|
|
@@ -2922,8 +3522,8 @@ function PoliticianProfile({
|
|
|
2922
3522
|
return pol.photo_origin_url;
|
|
2923
3523
|
})();
|
|
2924
3524
|
const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
|
|
2925
|
-
const [imgError, setImgError] = (0,
|
|
2926
|
-
(0,
|
|
3525
|
+
const [imgError, setImgError] = (0, import_react22.useState)(false);
|
|
3526
|
+
(0, import_react22.useEffect)(() => {
|
|
2927
3527
|
setImgError(false);
|
|
2928
3528
|
}, [profileImageUrl]);
|
|
2929
3529
|
const getSocialHandle = (type) => {
|
|
@@ -3223,7 +3823,7 @@ function PoliticianProfile({
|
|
|
3223
3823
|
borderRadius: borderRadius.full
|
|
3224
3824
|
}
|
|
3225
3825
|
};
|
|
3226
|
-
return /* @__PURE__ */
|
|
3826
|
+
return /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react22.default.createElement(
|
|
3227
3827
|
"button",
|
|
3228
3828
|
{
|
|
3229
3829
|
type: "button",
|
|
@@ -3236,9 +3836,9 @@ function PoliticianProfile({
|
|
|
3236
3836
|
e.currentTarget.style.textDecoration = "none";
|
|
3237
3837
|
}
|
|
3238
3838
|
},
|
|
3239
|
-
/* @__PURE__ */
|
|
3839
|
+
/* @__PURE__ */ import_react22.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react22.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
|
|
3240
3840
|
label
|
|
3241
|
-
), /* @__PURE__ */
|
|
3841
|
+
), /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react22.default.createElement(
|
|
3242
3842
|
"img",
|
|
3243
3843
|
{
|
|
3244
3844
|
src: profileImageUrl,
|
|
@@ -3246,7 +3846,7 @@ function PoliticianProfile({
|
|
|
3246
3846
|
style: styles2.photo,
|
|
3247
3847
|
onError: () => setImgError(true)
|
|
3248
3848
|
}
|
|
3249
|
-
) : /* @__PURE__ */
|
|
3849
|
+
) : /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react22.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react22.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react22.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react22.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react22.default.createElement(ClockIcon, { size: 14 }), pol.total_years_in_office, " ", pol.total_years_in_office === 1 ? "year" : "years", " in office")), pol.web_form_url && /* @__PURE__ */ import_react22.default.createElement(
|
|
3250
3850
|
"a",
|
|
3251
3851
|
{
|
|
3252
3852
|
href: pol.web_form_url,
|
|
@@ -3260,9 +3860,9 @@ function PoliticianProfile({
|
|
|
3260
3860
|
e.currentTarget.style.background = colors.evTeal;
|
|
3261
3861
|
}
|
|
3262
3862
|
},
|
|
3263
|
-
/* @__PURE__ */
|
|
3863
|
+
/* @__PURE__ */ import_react22.default.createElement(ExternalLinkIcon, { size: 14 }),
|
|
3264
3864
|
"Submit a Message"
|
|
3265
|
-
))), hasContactInfo && /* @__PURE__ */
|
|
3865
|
+
))), hasContactInfo && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react22.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react22.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react22.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react22.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react22.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react22.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react22.default.createElement(
|
|
3266
3866
|
"a",
|
|
3267
3867
|
{
|
|
3268
3868
|
href: `tel:${phone}`,
|
|
@@ -3275,7 +3875,7 @@ function PoliticianProfile({
|
|
|
3275
3875
|
}
|
|
3276
3876
|
},
|
|
3277
3877
|
phone
|
|
3278
|
-
)))))), hasEmails && /* @__PURE__ */
|
|
3878
|
+
)))))), hasEmails && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react22.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), emails.filter((e) => e && e.trim()).map((email, j) => /* @__PURE__ */ import_react22.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react22.default.createElement(
|
|
3279
3879
|
"a",
|
|
3280
3880
|
{
|
|
3281
3881
|
href: `mailto:${email}`,
|
|
@@ -3288,7 +3888,7 @@ function PoliticianProfile({
|
|
|
3288
3888
|
}
|
|
3289
3889
|
},
|
|
3290
3890
|
email
|
|
3291
|
-
)))))), hasWebsitesCol && /* @__PURE__ */
|
|
3891
|
+
)))))), hasWebsitesCol && /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react22.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react22.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react22.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react22.default.createElement(
|
|
3292
3892
|
"a",
|
|
3293
3893
|
{
|
|
3294
3894
|
href: url,
|
|
@@ -3303,7 +3903,7 @@ function PoliticianProfile({
|
|
|
3303
3903
|
}
|
|
3304
3904
|
},
|
|
3305
3905
|
extractDomain(url)
|
|
3306
|
-
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */
|
|
3906
|
+
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react22.default.createElement(
|
|
3307
3907
|
SocialLinks,
|
|
3308
3908
|
{
|
|
3309
3909
|
twitter,
|
|
@@ -3314,14 +3914,14 @@ function PoliticianProfile({
|
|
|
3314
3914
|
size: "sm",
|
|
3315
3915
|
style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
|
|
3316
3916
|
}
|
|
3317
|
-
)))), committees.length > 0 && /* @__PURE__ */
|
|
3917
|
+
)))), committees.length > 0 && /* @__PURE__ */ import_react22.default.createElement(import_react22.default.Fragment, null, /* @__PURE__ */ import_react22.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react22.default.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ import_react22.default.createElement(
|
|
3318
3918
|
JudicialScorecard,
|
|
3319
3919
|
{
|
|
3320
3920
|
judicialRecord,
|
|
3321
3921
|
politicianId,
|
|
3322
3922
|
onNavigateToRecord
|
|
3323
3923
|
}
|
|
3324
|
-
) : /* @__PURE__ */
|
|
3924
|
+
) : /* @__PURE__ */ import_react22.default.createElement(
|
|
3325
3925
|
LegislativeInlineSummary,
|
|
3326
3926
|
{
|
|
3327
3927
|
summary: legislativeSummary,
|
|
@@ -3332,7 +3932,7 @@ function PoliticianProfile({
|
|
|
3332
3932
|
}
|
|
3333
3933
|
|
|
3334
3934
|
// src/LegislativeRecord.jsx
|
|
3335
|
-
var
|
|
3935
|
+
var import_react23 = __toESM(require("react"));
|
|
3336
3936
|
var DEFAULT_LIMIT = 25;
|
|
3337
3937
|
function normalizeText(str) {
|
|
3338
3938
|
if (!str) return "";
|
|
@@ -3412,7 +4012,7 @@ function getPositionBadge(position) {
|
|
|
3412
4012
|
return { bg: colors.borderLight, text: colors.textSecondary };
|
|
3413
4013
|
}
|
|
3414
4014
|
function Badge({ label, bg, text }) {
|
|
3415
|
-
return /* @__PURE__ */
|
|
4015
|
+
return /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3416
4016
|
display: "inline-block",
|
|
3417
4017
|
background: bg,
|
|
3418
4018
|
color: text,
|
|
@@ -3425,18 +4025,18 @@ function Badge({ label, bg, text }) {
|
|
|
3425
4025
|
} }, label);
|
|
3426
4026
|
}
|
|
3427
4027
|
function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
3428
|
-
return /* @__PURE__ */
|
|
4028
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3429
4029
|
display: "flex",
|
|
3430
4030
|
alignItems: "center",
|
|
3431
4031
|
justifyContent: "space-between",
|
|
3432
4032
|
marginBottom: spacing[4]
|
|
3433
|
-
} }, /* @__PURE__ */
|
|
4033
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("h2", { style: {
|
|
3434
4034
|
fontFamily: fonts.primary,
|
|
3435
4035
|
fontSize: fontSizes.xl,
|
|
3436
4036
|
fontWeight: fontWeights.bold,
|
|
3437
4037
|
color: colors.evTeal,
|
|
3438
4038
|
margin: 0
|
|
3439
|
-
} }, title), years && years.length > 0 && /* @__PURE__ */
|
|
4039
|
+
} }, title), years && years.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
|
|
3440
4040
|
"select",
|
|
3441
4041
|
{
|
|
3442
4042
|
value: yearFilter,
|
|
@@ -3452,13 +4052,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
|
3452
4052
|
cursor: "pointer"
|
|
3453
4053
|
}
|
|
3454
4054
|
},
|
|
3455
|
-
/* @__PURE__ */
|
|
3456
|
-
years.map((y) => /* @__PURE__ */
|
|
4055
|
+
/* @__PURE__ */ import_react23.default.createElement("option", { value: "All" }, "All years"),
|
|
4056
|
+
years.map((y) => /* @__PURE__ */ import_react23.default.createElement("option", { key: y, value: y }, y))
|
|
3457
4057
|
));
|
|
3458
4058
|
}
|
|
3459
4059
|
function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
3460
4060
|
if (totalCount <= visibleCount) return null;
|
|
3461
|
-
return /* @__PURE__ */
|
|
4061
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react23.default.createElement(
|
|
3462
4062
|
"button",
|
|
3463
4063
|
{
|
|
3464
4064
|
type: "button",
|
|
@@ -3486,7 +4086,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
|
3486
4086
|
));
|
|
3487
4087
|
}
|
|
3488
4088
|
function EmptyState({ message }) {
|
|
3489
|
-
return /* @__PURE__ */
|
|
4089
|
+
return /* @__PURE__ */ import_react23.default.createElement("p", { style: {
|
|
3490
4090
|
fontFamily: fonts.primary,
|
|
3491
4091
|
fontSize: fontSizes.sm,
|
|
3492
4092
|
color: colors.textMuted,
|
|
@@ -3496,24 +4096,24 @@ function EmptyState({ message }) {
|
|
|
3496
4096
|
} }, message);
|
|
3497
4097
|
}
|
|
3498
4098
|
function Spinner() {
|
|
3499
|
-
return /* @__PURE__ */
|
|
4099
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3500
4100
|
display: "flex",
|
|
3501
4101
|
justifyContent: "center",
|
|
3502
4102
|
alignItems: "center",
|
|
3503
4103
|
padding: spacing[10]
|
|
3504
|
-
} }, /* @__PURE__ */
|
|
4104
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3505
4105
|
width: "40px",
|
|
3506
4106
|
height: "40px",
|
|
3507
4107
|
borderRadius: borderRadius.full,
|
|
3508
4108
|
border: `3px solid ${colors.borderLight}`,
|
|
3509
4109
|
borderTopColor: colors.evTeal,
|
|
3510
4110
|
animation: "ev-spin 0.8s linear infinite"
|
|
3511
|
-
} }), /* @__PURE__ */
|
|
4111
|
+
} }), /* @__PURE__ */ import_react23.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
|
|
3512
4112
|
}
|
|
3513
4113
|
function CommitteesSection({ committees, leadership }) {
|
|
3514
|
-
const [showAll, setShowAll] = (0,
|
|
4114
|
+
const [showAll, setShowAll] = (0, import_react23.useState)(false);
|
|
3515
4115
|
const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
|
|
3516
|
-
return /* @__PURE__ */
|
|
4116
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
|
|
3517
4117
|
display: "inline-flex",
|
|
3518
4118
|
alignItems: "center",
|
|
3519
4119
|
gap: spacing[1],
|
|
@@ -3524,23 +4124,23 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
3524
4124
|
fontFamily: fonts.primary,
|
|
3525
4125
|
fontSize: fontSizes.sm,
|
|
3526
4126
|
fontWeight: fontWeights.semibold
|
|
3527
|
-
} }, role.title, role.chamber && /* @__PURE__ */
|
|
4127
|
+
} }, role.title, role.chamber && /* @__PURE__ */ import_react23.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react23.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement("div", null, visible.map((c, i) => {
|
|
3528
4128
|
const badge = getRoleBadge(c.role);
|
|
3529
|
-
return /* @__PURE__ */
|
|
4129
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
|
|
3530
4130
|
display: "flex",
|
|
3531
4131
|
alignItems: "center",
|
|
3532
4132
|
justifyContent: "space-between",
|
|
3533
4133
|
padding: `${spacing[3]} 0`,
|
|
3534
4134
|
borderBottom: `1px solid ${colors.borderLight}`,
|
|
3535
4135
|
gap: spacing[3]
|
|
3536
|
-
} }, /* @__PURE__ */
|
|
4136
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3537
4137
|
fontFamily: fonts.primary,
|
|
3538
4138
|
fontSize: fontSizes.sm,
|
|
3539
4139
|
color: colors.textSecondary,
|
|
3540
4140
|
flex: 1,
|
|
3541
4141
|
minWidth: 0
|
|
3542
|
-
} }, c.committee_name, c.parent_name && /* @__PURE__ */
|
|
3543
|
-
})), !showAll && /* @__PURE__ */
|
|
4142
|
+
} }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react23.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react23.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
|
|
4143
|
+
})), !showAll && /* @__PURE__ */ import_react23.default.createElement(
|
|
3544
4144
|
ShowAllLink,
|
|
3545
4145
|
{
|
|
3546
4146
|
totalCount: committees.length,
|
|
@@ -3551,15 +4151,15 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
3551
4151
|
}
|
|
3552
4152
|
function LegislationSection({ bills, isMobile }) {
|
|
3553
4153
|
const years = getYears(bills, "introduced_at");
|
|
3554
|
-
const [yearFilter, setYearFilter] = (0,
|
|
3555
|
-
const [showAll, setShowAll] = (0,
|
|
4154
|
+
const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
|
|
4155
|
+
const [showAll, setShowAll] = (0, import_react23.useState)(false);
|
|
3556
4156
|
const handleYearChange = (y) => {
|
|
3557
4157
|
setYearFilter(y);
|
|
3558
4158
|
setShowAll(false);
|
|
3559
4159
|
};
|
|
3560
4160
|
const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
|
|
3561
4161
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
3562
|
-
return /* @__PURE__ */
|
|
4162
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
|
|
3563
4163
|
SectionHeader,
|
|
3564
4164
|
{
|
|
3565
4165
|
title: "Sponsored Legislation",
|
|
@@ -3567,42 +4167,42 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
3567
4167
|
years,
|
|
3568
4168
|
onYearChange: handleYearChange
|
|
3569
4169
|
}
|
|
3570
|
-
), bills.length === 0 ? /* @__PURE__ */
|
|
4170
|
+
), bills.length === 0 ? /* @__PURE__ */ import_react23.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement("div", null, visible.map((bill, i) => {
|
|
3571
4171
|
const statusBadge = getStatusBadge(bill.status_label);
|
|
3572
|
-
return /* @__PURE__ */
|
|
4172
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
|
|
3573
4173
|
display: "flex",
|
|
3574
4174
|
flexDirection: isMobile ? "column" : "row",
|
|
3575
4175
|
alignItems: isMobile ? "flex-start" : "center",
|
|
3576
4176
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
3577
4177
|
padding: `${spacing[3]} 0`,
|
|
3578
4178
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
3579
|
-
} }, /* @__PURE__ */
|
|
4179
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3580
4180
|
fontFamily: fonts.primary,
|
|
3581
4181
|
fontSize: fontSizes.xs,
|
|
3582
4182
|
fontWeight: fontWeights.bold,
|
|
3583
4183
|
color: colors.textSecondary,
|
|
3584
4184
|
marginRight: spacing[2]
|
|
3585
|
-
} }, bill.number), /* @__PURE__ */
|
|
4185
|
+
} }, bill.number), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3586
4186
|
fontFamily: fonts.primary,
|
|
3587
4187
|
fontSize: fontSizes.sm,
|
|
3588
4188
|
color: colors.textSecondary
|
|
3589
|
-
} }, bill.title)), /* @__PURE__ */
|
|
4189
|
+
} }, bill.title)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3590
4190
|
display: "flex",
|
|
3591
4191
|
alignItems: "center",
|
|
3592
4192
|
gap: spacing[2],
|
|
3593
4193
|
flexShrink: 0,
|
|
3594
4194
|
flexWrap: "wrap"
|
|
3595
|
-
} }, /* @__PURE__ */
|
|
4195
|
+
} }, /* @__PURE__ */ import_react23.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3596
4196
|
fontFamily: fonts.primary,
|
|
3597
4197
|
fontSize: fontSizes.xs,
|
|
3598
4198
|
color: colors.textMuted
|
|
3599
|
-
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */
|
|
4199
|
+
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3600
4200
|
fontFamily: fonts.primary,
|
|
3601
4201
|
fontSize: fontSizes.xs,
|
|
3602
4202
|
color: colors.textMuted,
|
|
3603
4203
|
fontStyle: "italic"
|
|
3604
4204
|
} }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
|
|
3605
|
-
})), !showAll && /* @__PURE__ */
|
|
4205
|
+
})), !showAll && /* @__PURE__ */ import_react23.default.createElement(
|
|
3606
4206
|
ShowAllLink,
|
|
3607
4207
|
{
|
|
3608
4208
|
totalCount: filtered.length,
|
|
@@ -3613,15 +4213,15 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
3613
4213
|
}
|
|
3614
4214
|
function VotingSection({ votes, isMobile }) {
|
|
3615
4215
|
const years = getYears(votes, "vote_date");
|
|
3616
|
-
const [yearFilter, setYearFilter] = (0,
|
|
3617
|
-
const [showAll, setShowAll] = (0,
|
|
4216
|
+
const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
|
|
4217
|
+
const [showAll, setShowAll] = (0, import_react23.useState)(false);
|
|
3618
4218
|
const handleYearChange = (y) => {
|
|
3619
4219
|
setYearFilter(y);
|
|
3620
4220
|
setShowAll(false);
|
|
3621
4221
|
};
|
|
3622
4222
|
const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
|
|
3623
4223
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
3624
|
-
return /* @__PURE__ */
|
|
4224
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
|
|
3625
4225
|
SectionHeader,
|
|
3626
4226
|
{
|
|
3627
4227
|
title: "Voting Record",
|
|
@@ -3629,38 +4229,38 @@ function VotingSection({ votes, isMobile }) {
|
|
|
3629
4229
|
years,
|
|
3630
4230
|
onYearChange: handleYearChange
|
|
3631
4231
|
}
|
|
3632
|
-
), votes.length === 0 ? /* @__PURE__ */
|
|
4232
|
+
), votes.length === 0 ? /* @__PURE__ */ import_react23.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement("div", null, visible.map((vote, i) => {
|
|
3633
4233
|
const positionBadge = getPositionBadge(vote.position);
|
|
3634
4234
|
const normPosition = normalizeText(vote.position);
|
|
3635
4235
|
const topic = vote.bill_title || vote.vote_question;
|
|
3636
4236
|
const sourceUrl = vote.bill_url;
|
|
3637
|
-
return /* @__PURE__ */
|
|
4237
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
|
|
3638
4238
|
display: "flex",
|
|
3639
4239
|
flexDirection: isMobile ? "column" : "row",
|
|
3640
4240
|
alignItems: isMobile ? "flex-start" : "center",
|
|
3641
4241
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
3642
4242
|
padding: `${spacing[3]} 0`,
|
|
3643
4243
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
3644
|
-
} }, /* @__PURE__ */
|
|
4244
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3645
4245
|
fontFamily: fonts.primary,
|
|
3646
4246
|
fontSize: fontSizes.sm,
|
|
3647
4247
|
color: colors.textSecondary
|
|
3648
|
-
} }, topic)), /* @__PURE__ */
|
|
4248
|
+
} }, topic)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3649
4249
|
display: "flex",
|
|
3650
4250
|
alignItems: "center",
|
|
3651
4251
|
gap: spacing[2],
|
|
3652
4252
|
flexShrink: 0,
|
|
3653
4253
|
flexWrap: "wrap"
|
|
3654
|
-
} }, vote.vote_date && /* @__PURE__ */
|
|
4254
|
+
} }, vote.vote_date && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3655
4255
|
fontFamily: fonts.primary,
|
|
3656
4256
|
fontSize: fontSizes.xs,
|
|
3657
4257
|
color: colors.textMuted
|
|
3658
|
-
} }, formatDate2(vote.vote_date)), /* @__PURE__ */
|
|
4258
|
+
} }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react23.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3659
4259
|
fontFamily: fonts.primary,
|
|
3660
4260
|
fontSize: fontSizes.xs,
|
|
3661
4261
|
color: vote.result === "Passed" ? colors.success : colors.textMuted,
|
|
3662
4262
|
fontWeight: fontWeights.medium
|
|
3663
|
-
} }, vote.result), sourceUrl && /* @__PURE__ */
|
|
4263
|
+
} }, vote.result), sourceUrl && /* @__PURE__ */ import_react23.default.createElement(
|
|
3664
4264
|
"a",
|
|
3665
4265
|
{
|
|
3666
4266
|
href: sourceUrl,
|
|
@@ -3681,7 +4281,7 @@ function VotingSection({ votes, isMobile }) {
|
|
|
3681
4281
|
},
|
|
3682
4282
|
"Source"
|
|
3683
4283
|
)));
|
|
3684
|
-
})), !showAll && /* @__PURE__ */
|
|
4284
|
+
})), !showAll && /* @__PURE__ */ import_react23.default.createElement(
|
|
3685
4285
|
ShowAllLink,
|
|
3686
4286
|
{
|
|
3687
4287
|
totalCount: filtered.length,
|
|
@@ -3700,20 +4300,20 @@ function LegislativeRecord({
|
|
|
3700
4300
|
}) {
|
|
3701
4301
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
3702
4302
|
if (loading) {
|
|
3703
|
-
return /* @__PURE__ */
|
|
4303
|
+
return /* @__PURE__ */ import_react23.default.createElement(Spinner, null);
|
|
3704
4304
|
}
|
|
3705
|
-
return /* @__PURE__ */
|
|
4305
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react23.default.createElement("h1", { style: {
|
|
3706
4306
|
fontFamily: fonts.primary,
|
|
3707
4307
|
fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
|
|
3708
4308
|
fontWeight: fontWeights.bold,
|
|
3709
4309
|
color: colors.evTeal,
|
|
3710
4310
|
marginBottom: spacing[8],
|
|
3711
4311
|
marginTop: 0
|
|
3712
|
-
} }, "Legislative Record: ", politicianName), /* @__PURE__ */
|
|
4312
|
+
} }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react23.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react23.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react23.default.createElement(VotingSection, { votes, isMobile }));
|
|
3713
4313
|
}
|
|
3714
4314
|
|
|
3715
4315
|
// src/JudicialRecordDetail.jsx
|
|
3716
|
-
var
|
|
4316
|
+
var import_react24 = __toESM(require("react"));
|
|
3717
4317
|
var containerStyle = {
|
|
3718
4318
|
fontFamily: "'Manrope', sans-serif",
|
|
3719
4319
|
maxWidth: "800px"
|
|
@@ -3798,7 +4398,7 @@ var emptyStateStyle = {
|
|
|
3798
4398
|
function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
3799
4399
|
var _a;
|
|
3800
4400
|
if (!judicialRecord) {
|
|
3801
|
-
return /* @__PURE__ */
|
|
4401
|
+
return /* @__PURE__ */ import_react24.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react24.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react24.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
|
|
3802
4402
|
}
|
|
3803
4403
|
const {
|
|
3804
4404
|
judge_detail: detail,
|
|
@@ -3807,13 +4407,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
3807
4407
|
disciplinary_records: disciplinary = []
|
|
3808
4408
|
} = judicialRecord;
|
|
3809
4409
|
const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
|
|
3810
|
-
return /* @__PURE__ */
|
|
4410
|
+
return /* @__PURE__ */ import_react24.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react24.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react24.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react24.default.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__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react24.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react24.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react24.default.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__ */ import_react24.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react24.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react24.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react24.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react24.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react24.default.createElement("thead", null, /* @__PURE__ */ import_react24.default.createElement("tr", null, /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react24.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react24.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react24.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react24.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react24.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react24.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react24.default.createElement("thead", null, /* @__PURE__ */ import_react24.default.createElement("tr", null, /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react24.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react24.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react24.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react24.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react24.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react24.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: i, style: {
|
|
3811
4411
|
borderLeft: "3px solid #fc8181",
|
|
3812
4412
|
backgroundColor: "#fff5f5",
|
|
3813
4413
|
borderRadius: "0 6px 6px 0",
|
|
3814
4414
|
padding: "12px 16px",
|
|
3815
4415
|
marginBottom: "10px"
|
|
3816
|
-
} }, /* @__PURE__ */
|
|
4416
|
+
} }, /* @__PURE__ */ import_react24.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react24.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react24.default.createElement(
|
|
3817
4417
|
"a",
|
|
3818
4418
|
{
|
|
3819
4419
|
href: d.source_url,
|
|
@@ -3826,7 +4426,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
3826
4426
|
}
|
|
3827
4427
|
|
|
3828
4428
|
// src/AuthForm.jsx
|
|
3829
|
-
var
|
|
4429
|
+
var import_react25 = __toESM(require("react"));
|
|
3830
4430
|
function AuthForm({
|
|
3831
4431
|
logoSrc = "/EVLogo.svg",
|
|
3832
4432
|
appName = "Empowered Vote",
|
|
@@ -3837,11 +4437,11 @@ function AuthForm({
|
|
|
3837
4437
|
error = null,
|
|
3838
4438
|
submitting = false
|
|
3839
4439
|
}) {
|
|
3840
|
-
const [username, setUsername] = (0,
|
|
3841
|
-
const [password, setPassword] = (0,
|
|
3842
|
-
const [confirmPassword, setConfirmPassword] = (0,
|
|
3843
|
-
const [showPasswords, setShowPasswords] = (0,
|
|
3844
|
-
const [passwordMismatch, setPasswordMismatch] = (0,
|
|
4440
|
+
const [username, setUsername] = (0, import_react25.useState)("");
|
|
4441
|
+
const [password, setPassword] = (0, import_react25.useState)("");
|
|
4442
|
+
const [confirmPassword, setConfirmPassword] = (0, import_react25.useState)("");
|
|
4443
|
+
const [showPasswords, setShowPasswords] = (0, import_react25.useState)(false);
|
|
4444
|
+
const [passwordMismatch, setPasswordMismatch] = (0, import_react25.useState)(false);
|
|
3845
4445
|
const isLogin = mode === "login";
|
|
3846
4446
|
const handleSubmit = (e) => {
|
|
3847
4447
|
e.preventDefault();
|
|
@@ -3853,7 +4453,7 @@ function AuthForm({
|
|
|
3853
4453
|
setPasswordMismatch(false);
|
|
3854
4454
|
onSubmit == null ? void 0 : onSubmit(username.trim(), password);
|
|
3855
4455
|
};
|
|
3856
|
-
const EyeOpen = () => /* @__PURE__ */
|
|
4456
|
+
const EyeOpen = () => /* @__PURE__ */ import_react25.default.createElement(
|
|
3857
4457
|
"svg",
|
|
3858
4458
|
{
|
|
3859
4459
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -3863,7 +4463,7 @@ function AuthForm({
|
|
|
3863
4463
|
stroke: "currentColor",
|
|
3864
4464
|
style: { width: "20px", height: "20px" }
|
|
3865
4465
|
},
|
|
3866
|
-
/* @__PURE__ */
|
|
4466
|
+
/* @__PURE__ */ import_react25.default.createElement(
|
|
3867
4467
|
"path",
|
|
3868
4468
|
{
|
|
3869
4469
|
strokeLinecap: "round",
|
|
@@ -3871,7 +4471,7 @@ function AuthForm({
|
|
|
3871
4471
|
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"
|
|
3872
4472
|
}
|
|
3873
4473
|
),
|
|
3874
|
-
/* @__PURE__ */
|
|
4474
|
+
/* @__PURE__ */ import_react25.default.createElement(
|
|
3875
4475
|
"path",
|
|
3876
4476
|
{
|
|
3877
4477
|
strokeLinecap: "round",
|
|
@@ -3880,7 +4480,7 @@ function AuthForm({
|
|
|
3880
4480
|
}
|
|
3881
4481
|
)
|
|
3882
4482
|
);
|
|
3883
|
-
const EyeClosed = () => /* @__PURE__ */
|
|
4483
|
+
const EyeClosed = () => /* @__PURE__ */ import_react25.default.createElement(
|
|
3884
4484
|
"svg",
|
|
3885
4485
|
{
|
|
3886
4486
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -3890,7 +4490,7 @@ function AuthForm({
|
|
|
3890
4490
|
stroke: "currentColor",
|
|
3891
4491
|
style: { width: "20px", height: "20px" }
|
|
3892
4492
|
},
|
|
3893
|
-
/* @__PURE__ */
|
|
4493
|
+
/* @__PURE__ */ import_react25.default.createElement(
|
|
3894
4494
|
"path",
|
|
3895
4495
|
{
|
|
3896
4496
|
strokeLinecap: "round",
|
|
@@ -3899,17 +4499,17 @@ function AuthForm({
|
|
|
3899
4499
|
}
|
|
3900
4500
|
)
|
|
3901
4501
|
);
|
|
3902
|
-
const PasswordToggle = () => /* @__PURE__ */
|
|
4502
|
+
const PasswordToggle = () => /* @__PURE__ */ import_react25.default.createElement(
|
|
3903
4503
|
"button",
|
|
3904
4504
|
{
|
|
3905
4505
|
type: "button",
|
|
3906
4506
|
onClick: () => setShowPasswords((prev) => !prev),
|
|
3907
4507
|
style: styles.passwordToggle
|
|
3908
4508
|
},
|
|
3909
|
-
showPasswords ? /* @__PURE__ */
|
|
4509
|
+
showPasswords ? /* @__PURE__ */ import_react25.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react25.default.createElement(EyeClosed, null)
|
|
3910
4510
|
);
|
|
3911
4511
|
const displayError = passwordMismatch ? "Passwords do not match." : error;
|
|
3912
|
-
return /* @__PURE__ */
|
|
4512
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react25.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react25.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react25.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react25.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react25.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react25.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react25.default.createElement(
|
|
3913
4513
|
"input",
|
|
3914
4514
|
{
|
|
3915
4515
|
type: "text",
|
|
@@ -3926,7 +4526,7 @@ function AuthForm({
|
|
|
3926
4526
|
},
|
|
3927
4527
|
required: true
|
|
3928
4528
|
}
|
|
3929
|
-
)), /* @__PURE__ */
|
|
4529
|
+
)), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react25.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react25.default.createElement(
|
|
3930
4530
|
"input",
|
|
3931
4531
|
{
|
|
3932
4532
|
type: showPasswords ? "text" : "password",
|
|
@@ -3942,7 +4542,7 @@ function AuthForm({
|
|
|
3942
4542
|
},
|
|
3943
4543
|
required: true
|
|
3944
4544
|
}
|
|
3945
|
-
), /* @__PURE__ */
|
|
4545
|
+
), /* @__PURE__ */ import_react25.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react25.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react25.default.createElement(
|
|
3946
4546
|
"input",
|
|
3947
4547
|
{
|
|
3948
4548
|
type: showPasswords ? "text" : "password",
|
|
@@ -3958,7 +4558,7 @@ function AuthForm({
|
|
|
3958
4558
|
},
|
|
3959
4559
|
required: true
|
|
3960
4560
|
}
|
|
3961
|
-
), /* @__PURE__ */
|
|
4561
|
+
), /* @__PURE__ */ import_react25.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react25.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react25.default.createElement(
|
|
3962
4562
|
"button",
|
|
3963
4563
|
{
|
|
3964
4564
|
type: "submit",
|
|
@@ -3976,7 +4576,7 @@ function AuthForm({
|
|
|
3976
4576
|
}
|
|
3977
4577
|
},
|
|
3978
4578
|
submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
|
|
3979
|
-
), onModeSwitch && /* @__PURE__ */
|
|
4579
|
+
), onModeSwitch && /* @__PURE__ */ import_react25.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react25.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react25.default.createElement(
|
|
3980
4580
|
"button",
|
|
3981
4581
|
{
|
|
3982
4582
|
type: "button",
|
|
@@ -4149,9 +4749,9 @@ var styles = {
|
|
|
4149
4749
|
};
|
|
4150
4750
|
|
|
4151
4751
|
// src/TopicTierBadge.jsx
|
|
4152
|
-
var
|
|
4752
|
+
var import_react26 = __toESM(require("react"));
|
|
4153
4753
|
function LandmarkIcon({ size = 14 }) {
|
|
4154
|
-
return /* @__PURE__ */
|
|
4754
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4155
4755
|
"svg",
|
|
4156
4756
|
{
|
|
4157
4757
|
width: size,
|
|
@@ -4165,16 +4765,16 @@ function LandmarkIcon({ size = 14 }) {
|
|
|
4165
4765
|
xmlns: "http://www.w3.org/2000/svg",
|
|
4166
4766
|
"aria-hidden": "true"
|
|
4167
4767
|
},
|
|
4168
|
-
/* @__PURE__ */
|
|
4169
|
-
/* @__PURE__ */
|
|
4170
|
-
/* @__PURE__ */
|
|
4171
|
-
/* @__PURE__ */
|
|
4172
|
-
/* @__PURE__ */
|
|
4173
|
-
/* @__PURE__ */
|
|
4768
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18v-7" }),
|
|
4769
|
+
/* @__PURE__ */ import_react26.default.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" }),
|
|
4770
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M14 18v-7" }),
|
|
4771
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 18v-7" }),
|
|
4772
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M3 22h18" }),
|
|
4773
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 18v-7" })
|
|
4174
4774
|
);
|
|
4175
4775
|
}
|
|
4176
4776
|
function Building2Icon({ size = 14 }) {
|
|
4177
|
-
return /* @__PURE__ */
|
|
4777
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4178
4778
|
"svg",
|
|
4179
4779
|
{
|
|
4180
4780
|
width: size,
|
|
@@ -4188,17 +4788,17 @@ function Building2Icon({ size = 14 }) {
|
|
|
4188
4788
|
xmlns: "http://www.w3.org/2000/svg",
|
|
4189
4789
|
"aria-hidden": "true"
|
|
4190
4790
|
},
|
|
4191
|
-
/* @__PURE__ */
|
|
4192
|
-
/* @__PURE__ */
|
|
4193
|
-
/* @__PURE__ */
|
|
4194
|
-
/* @__PURE__ */
|
|
4195
|
-
/* @__PURE__ */
|
|
4196
|
-
/* @__PURE__ */
|
|
4197
|
-
/* @__PURE__ */
|
|
4791
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
|
|
4792
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
|
|
4793
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
|
|
4794
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 6h4" }),
|
|
4795
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 10h4" }),
|
|
4796
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 14h4" }),
|
|
4797
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18h4" })
|
|
4198
4798
|
);
|
|
4199
4799
|
}
|
|
4200
4800
|
function HomeIcon({ size = 14 }) {
|
|
4201
|
-
return /* @__PURE__ */
|
|
4801
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4202
4802
|
"svg",
|
|
4203
4803
|
{
|
|
4204
4804
|
width: size,
|
|
@@ -4212,8 +4812,8 @@ function HomeIcon({ size = 14 }) {
|
|
|
4212
4812
|
xmlns: "http://www.w3.org/2000/svg",
|
|
4213
4813
|
"aria-hidden": "true"
|
|
4214
4814
|
},
|
|
4215
|
-
/* @__PURE__ */
|
|
4216
|
-
/* @__PURE__ */
|
|
4815
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
|
|
4816
|
+
/* @__PURE__ */ import_react26.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
|
|
4217
4817
|
);
|
|
4218
4818
|
}
|
|
4219
4819
|
var TIER_INFO = {
|
|
@@ -4273,7 +4873,7 @@ function TopicTierBadge({
|
|
|
4273
4873
|
userSelect: "none"
|
|
4274
4874
|
};
|
|
4275
4875
|
};
|
|
4276
|
-
return /* @__PURE__ */
|
|
4876
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4277
4877
|
"span",
|
|
4278
4878
|
{
|
|
4279
4879
|
className: "ev-topic-tier-badge",
|
|
@@ -4283,13 +4883,13 @@ function TopicTierBadge({
|
|
|
4283
4883
|
},
|
|
4284
4884
|
effectiveTiers.map((tier) => {
|
|
4285
4885
|
const { label, Icon } = TIER_INFO[tier];
|
|
4286
|
-
return /* @__PURE__ */
|
|
4886
|
+
return /* @__PURE__ */ import_react26.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react26.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react26.default.createElement("span", null, label));
|
|
4287
4887
|
})
|
|
4288
4888
|
);
|
|
4289
4889
|
}
|
|
4290
4890
|
|
|
4291
4891
|
// src/CompassCoverageCallout.jsx
|
|
4292
|
-
var
|
|
4892
|
+
var import_react27 = __toESM(require("react"));
|
|
4293
4893
|
var TIER_LABELS = {
|
|
4294
4894
|
federal: "federal",
|
|
4295
4895
|
state: "state",
|
|
@@ -4302,7 +4902,7 @@ function CompassCoverageCallout({
|
|
|
4302
4902
|
compassUrl,
|
|
4303
4903
|
onDismiss
|
|
4304
4904
|
}) {
|
|
4305
|
-
const [dismissed, setDismissed] = (0,
|
|
4905
|
+
const [dismissed, setDismissed] = (0, import_react27.useState)(false);
|
|
4306
4906
|
if (dismissed) return null;
|
|
4307
4907
|
const tierLabel = TIER_LABELS[tier] || tier;
|
|
4308
4908
|
const tierStyle = tierColors[tier] || tierColors.federal;
|
|
@@ -4353,15 +4953,15 @@ function CompassCoverageCallout({
|
|
|
4353
4953
|
setDismissed(true);
|
|
4354
4954
|
if (onDismiss) onDismiss();
|
|
4355
4955
|
};
|
|
4356
|
-
return /* @__PURE__ */
|
|
4956
|
+
return /* @__PURE__ */ import_react27.default.createElement(
|
|
4357
4957
|
"div",
|
|
4358
4958
|
{
|
|
4359
4959
|
className: "ev-compass-coverage-callout",
|
|
4360
4960
|
role: "status",
|
|
4361
4961
|
style: containerStyle2
|
|
4362
4962
|
},
|
|
4363
|
-
/* @__PURE__ */
|
|
4364
|
-
onDismiss !== void 0 && /* @__PURE__ */
|
|
4963
|
+
/* @__PURE__ */ import_react27.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react27.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react27.default.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__ */ import_react27.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
|
|
4964
|
+
onDismiss !== void 0 && /* @__PURE__ */ import_react27.default.createElement(
|
|
4365
4965
|
"button",
|
|
4366
4966
|
{
|
|
4367
4967
|
onClick: handleDismiss,
|
|
@@ -4374,7 +4974,7 @@ function CompassCoverageCallout({
|
|
|
4374
4974
|
}
|
|
4375
4975
|
|
|
4376
4976
|
// src/ExpandCompassNudge.jsx
|
|
4377
|
-
var
|
|
4977
|
+
var import_react28 = __toESM(require("react"));
|
|
4378
4978
|
function ExpandCompassNudge({
|
|
4379
4979
|
politicianName,
|
|
4380
4980
|
missingCount,
|
|
@@ -4421,7 +5021,7 @@ function ExpandCompassNudge({
|
|
|
4421
5021
|
};
|
|
4422
5022
|
const topicsLabel = missingCount === 1 ? "topic" : "topics";
|
|
4423
5023
|
const speakerName = politicianName || "This politician";
|
|
4424
|
-
return /* @__PURE__ */
|
|
5024
|
+
return /* @__PURE__ */ import_react28.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react28.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react28.default.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__ */ import_react28.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
|
|
4425
5025
|
}
|
|
4426
5026
|
|
|
4427
5027
|
// src/computeTierCoverage.js
|
|
@@ -4442,14 +5042,14 @@ function computeTierCoverage(topics) {
|
|
|
4442
5042
|
}
|
|
4443
5043
|
|
|
4444
5044
|
// src/StanceAccordion.jsx
|
|
4445
|
-
var
|
|
5045
|
+
var import_react30 = __toESM(require("react"));
|
|
4446
5046
|
|
|
4447
5047
|
// src/Favicon.jsx
|
|
4448
|
-
var
|
|
5048
|
+
var import_react29 = __toESM(require("react"));
|
|
4449
5049
|
function Favicon({ url, size = 16 }) {
|
|
4450
5050
|
try {
|
|
4451
5051
|
const domain = new URL(url).hostname;
|
|
4452
|
-
return /* @__PURE__ */
|
|
5052
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
4453
5053
|
"img",
|
|
4454
5054
|
{
|
|
4455
5055
|
src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
|
|
@@ -4460,7 +5060,7 @@ function Favicon({ url, size = 16 }) {
|
|
|
4460
5060
|
}
|
|
4461
5061
|
);
|
|
4462
5062
|
} catch {
|
|
4463
|
-
return /* @__PURE__ */
|
|
5063
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
4464
5064
|
"svg",
|
|
4465
5065
|
{
|
|
4466
5066
|
width: size,
|
|
@@ -4471,8 +5071,8 @@ function Favicon({ url, size = 16 }) {
|
|
|
4471
5071
|
strokeWidth: "1.5",
|
|
4472
5072
|
style: { verticalAlign: "middle", flexShrink: 0 }
|
|
4473
5073
|
},
|
|
4474
|
-
/* @__PURE__ */
|
|
4475
|
-
/* @__PURE__ */
|
|
5074
|
+
/* @__PURE__ */ import_react29.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
5075
|
+
/* @__PURE__ */ import_react29.default.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" })
|
|
4476
5076
|
);
|
|
4477
5077
|
}
|
|
4478
5078
|
}
|
|
@@ -4503,11 +5103,11 @@ function StanceAccordion({
|
|
|
4503
5103
|
apiUrl = "https://api.empowered.vote"
|
|
4504
5104
|
}) {
|
|
4505
5105
|
var _a;
|
|
4506
|
-
const [expandedTopicId, setExpandedTopicId] = (0,
|
|
4507
|
-
const [loadingId, setLoadingId] = (0,
|
|
4508
|
-
const [showAll, setShowAll] = (0,
|
|
4509
|
-
const contextCache = (0,
|
|
4510
|
-
const quotesCache = (0,
|
|
5106
|
+
const [expandedTopicId, setExpandedTopicId] = (0, import_react30.useState)(null);
|
|
5107
|
+
const [loadingId, setLoadingId] = (0, import_react30.useState)(null);
|
|
5108
|
+
const [showAll, setShowAll] = (0, import_react30.useState)(false);
|
|
5109
|
+
const contextCache = (0, import_react30.useRef)(/* @__PURE__ */ new Map());
|
|
5110
|
+
const quotesCache = (0, import_react30.useRef)(null);
|
|
4511
5111
|
const polAnswerMap = {};
|
|
4512
5112
|
if (polAnswers) {
|
|
4513
5113
|
polAnswers.forEach((a) => {
|
|
@@ -4566,7 +5166,7 @@ function StanceAccordion({
|
|
|
4566
5166
|
quotesCache.current = [];
|
|
4567
5167
|
}
|
|
4568
5168
|
}
|
|
4569
|
-
const handleToggle = (0,
|
|
5169
|
+
const handleToggle = (0, import_react30.useCallback)(
|
|
4570
5170
|
async (topicId) => {
|
|
4571
5171
|
if (expandedTopicId === topicId) {
|
|
4572
5172
|
setExpandedTopicId(null);
|
|
@@ -4583,7 +5183,7 @@ function StanceAccordion({
|
|
|
4583
5183
|
},
|
|
4584
5184
|
[expandedTopicId, politicianId, apiUrl]
|
|
4585
5185
|
);
|
|
4586
|
-
(0,
|
|
5186
|
+
(0, import_react30.useEffect)(() => {
|
|
4587
5187
|
if (initialExpandedTopicId && topics && topics.length > 0) {
|
|
4588
5188
|
handleToggle(String(initialExpandedTopicId));
|
|
4589
5189
|
}
|
|
@@ -4599,13 +5199,13 @@ function StanceAccordion({
|
|
|
4599
5199
|
visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
|
|
4600
5200
|
}
|
|
4601
5201
|
}
|
|
4602
|
-
return /* @__PURE__ */
|
|
5202
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
4603
5203
|
"div",
|
|
4604
5204
|
{
|
|
4605
5205
|
className: "flex flex-col",
|
|
4606
5206
|
style: { fontFamily: "'Manrope', sans-serif" }
|
|
4607
5207
|
},
|
|
4608
|
-
/* @__PURE__ */
|
|
5208
|
+
/* @__PURE__ */ import_react30.default.createElement(
|
|
4609
5209
|
"h3",
|
|
4610
5210
|
{
|
|
4611
5211
|
className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
|
|
@@ -4627,15 +5227,15 @@ function StanceAccordion({
|
|
|
4627
5227
|
if (topic.topic_key) return q.issue === topic.topic_key;
|
|
4628
5228
|
return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
|
|
4629
5229
|
}) : [];
|
|
4630
|
-
return /* @__PURE__ */
|
|
5230
|
+
return /* @__PURE__ */ import_react30.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react30.default.createElement(
|
|
4631
5231
|
"button",
|
|
4632
5232
|
{
|
|
4633
5233
|
type: "button",
|
|
4634
5234
|
onClick: () => handleToggle(topicId),
|
|
4635
5235
|
className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
|
|
4636
5236
|
},
|
|
4637
|
-
/* @__PURE__ */
|
|
4638
|
-
/* @__PURE__ */
|
|
5237
|
+
/* @__PURE__ */ import_react30.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react30.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
|
|
5238
|
+
/* @__PURE__ */ import_react30.default.createElement(
|
|
4639
5239
|
"svg",
|
|
4640
5240
|
{
|
|
4641
5241
|
width: "16",
|
|
@@ -4652,9 +5252,9 @@ function StanceAccordion({
|
|
|
4652
5252
|
transition: "transform 0.2s ease"
|
|
4653
5253
|
}
|
|
4654
5254
|
},
|
|
4655
|
-
/* @__PURE__ */
|
|
5255
|
+
/* @__PURE__ */ import_react30.default.createElement("polyline", { points: "9 18 15 12 9 6" })
|
|
4656
5256
|
)
|
|
4657
|
-
), /* @__PURE__ */
|
|
5257
|
+
), /* @__PURE__ */ import_react30.default.createElement(
|
|
4658
5258
|
"div",
|
|
4659
5259
|
{
|
|
4660
5260
|
style: {
|
|
@@ -4663,7 +5263,7 @@ function StanceAccordion({
|
|
|
4663
5263
|
transition: "grid-template-rows 0.25s ease"
|
|
4664
5264
|
}
|
|
4665
5265
|
},
|
|
4666
|
-
/* @__PURE__ */
|
|
5266
|
+
/* @__PURE__ */ import_react30.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react30.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react30.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react30.default.createElement(
|
|
4667
5267
|
"div",
|
|
4668
5268
|
{
|
|
4669
5269
|
style: {
|
|
@@ -4675,14 +5275,14 @@ function StanceAccordion({
|
|
|
4675
5275
|
animation: "ev-spin 0.8s linear infinite"
|
|
4676
5276
|
}
|
|
4677
5277
|
}
|
|
4678
|
-
)), !isLoading && cached && /* @__PURE__ */
|
|
5278
|
+
)), !isLoading && cached && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react30.default.createElement(
|
|
4679
5279
|
"p",
|
|
4680
5280
|
{
|
|
4681
5281
|
className: "text-sm text-neutral-700 mb-3",
|
|
4682
5282
|
style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
|
|
4683
5283
|
},
|
|
4684
5284
|
cached.reasoning
|
|
4685
|
-
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */
|
|
5285
|
+
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react30.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react30.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react30.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react30.default.createElement(
|
|
4686
5286
|
"a",
|
|
4687
5287
|
{
|
|
4688
5288
|
href: src,
|
|
@@ -4690,9 +5290,9 @@ function StanceAccordion({
|
|
|
4690
5290
|
rel: "noreferrer",
|
|
4691
5291
|
className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
|
|
4692
5292
|
},
|
|
4693
|
-
/* @__PURE__ */
|
|
4694
|
-
/* @__PURE__ */
|
|
4695
|
-
))))), topicQuotes.length > 0 && /* @__PURE__ */
|
|
5293
|
+
/* @__PURE__ */ import_react30.default.createElement(Favicon, { url: src }),
|
|
5294
|
+
/* @__PURE__ */ import_react30.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
|
|
5295
|
+
))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react30.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react30.default.createElement(
|
|
4696
5296
|
"p",
|
|
4697
5297
|
{
|
|
4698
5298
|
style: {
|
|
@@ -4709,7 +5309,7 @@ function StanceAccordion({
|
|
|
4709
5309
|
const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
|
|
4710
5310
|
const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
|
|
4711
5311
|
const sourceName = quote.source_name || quote.sourceName;
|
|
4712
|
-
return /* @__PURE__ */
|
|
5312
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
4713
5313
|
"div",
|
|
4714
5314
|
{
|
|
4715
5315
|
key: quote.id,
|
|
@@ -4721,7 +5321,7 @@ function StanceAccordion({
|
|
|
4721
5321
|
marginBottom: "8px"
|
|
4722
5322
|
}
|
|
4723
5323
|
},
|
|
4724
|
-
/* @__PURE__ */
|
|
5324
|
+
/* @__PURE__ */ import_react30.default.createElement(
|
|
4725
5325
|
"p",
|
|
4726
5326
|
{
|
|
4727
5327
|
style: {
|
|
@@ -4734,7 +5334,7 @@ function StanceAccordion({
|
|
|
4734
5334
|
},
|
|
4735
5335
|
quote.text
|
|
4736
5336
|
),
|
|
4737
|
-
verdict === "agreed" && /* @__PURE__ */
|
|
5337
|
+
verdict === "agreed" && /* @__PURE__ */ import_react30.default.createElement(
|
|
4738
5338
|
"span",
|
|
4739
5339
|
{
|
|
4740
5340
|
style: {
|
|
@@ -4751,10 +5351,10 @@ function StanceAccordion({
|
|
|
4751
5351
|
flexShrink: 0
|
|
4752
5352
|
}
|
|
4753
5353
|
},
|
|
4754
|
-
/* @__PURE__ */
|
|
5354
|
+
/* @__PURE__ */ import_react30.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react30.default.createElement("path", { d: "M5 13l4 4L19 7" })),
|
|
4755
5355
|
"Agreed"
|
|
4756
5356
|
),
|
|
4757
|
-
verdict === "disagreed" && /* @__PURE__ */
|
|
5357
|
+
verdict === "disagreed" && /* @__PURE__ */ import_react30.default.createElement(
|
|
4758
5358
|
"span",
|
|
4759
5359
|
{
|
|
4760
5360
|
style: {
|
|
@@ -4771,10 +5371,10 @@ function StanceAccordion({
|
|
|
4771
5371
|
flexShrink: 0
|
|
4772
5372
|
}
|
|
4773
5373
|
},
|
|
4774
|
-
/* @__PURE__ */
|
|
5374
|
+
/* @__PURE__ */ import_react30.default.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react30.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
|
|
4775
5375
|
"Disagreed"
|
|
4776
5376
|
),
|
|
4777
|
-
sourceName && /* @__PURE__ */
|
|
5377
|
+
sourceName && /* @__PURE__ */ import_react30.default.createElement(
|
|
4778
5378
|
"a",
|
|
4779
5379
|
{
|
|
4780
5380
|
href: quote.source_url || quote.sourceUrl,
|
|
@@ -4791,10 +5391,10 @@ function StanceAccordion({
|
|
|
4791
5391
|
sourceName
|
|
4792
5392
|
)
|
|
4793
5393
|
);
|
|
4794
|
-
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */
|
|
5394
|
+
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react30.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
|
|
4795
5395
|
));
|
|
4796
5396
|
}),
|
|
4797
|
-
hasToggle && /* @__PURE__ */
|
|
5397
|
+
hasToggle && /* @__PURE__ */ import_react30.default.createElement(
|
|
4798
5398
|
"button",
|
|
4799
5399
|
{
|
|
4800
5400
|
type: "button",
|
|
@@ -4806,78 +5406,6 @@ function StanceAccordion({
|
|
|
4806
5406
|
)
|
|
4807
5407
|
);
|
|
4808
5408
|
}
|
|
4809
|
-
|
|
4810
|
-
// src/icons.js
|
|
4811
|
-
var import_react25 = __toESM(require("react"));
|
|
4812
|
-
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
4813
|
-
return /* @__PURE__ */ import_react25.default.createElement(
|
|
4814
|
-
"svg",
|
|
4815
|
-
{
|
|
4816
|
-
width: size,
|
|
4817
|
-
height: size,
|
|
4818
|
-
viewBox: "0 0 24 24",
|
|
4819
|
-
fill: "none",
|
|
4820
|
-
stroke: color,
|
|
4821
|
-
strokeWidth: "2",
|
|
4822
|
-
strokeLinecap: "round",
|
|
4823
|
-
strokeLinejoin: "round",
|
|
4824
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4825
|
-
},
|
|
4826
|
-
/* @__PURE__ */ import_react25.default.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
4827
|
-
/* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
4828
|
-
/* @__PURE__ */ import_react25.default.createElement("path", { d: "M22 19H2" })
|
|
4829
|
-
);
|
|
4830
|
-
}
|
|
4831
|
-
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
4832
|
-
return /* @__PURE__ */ import_react25.default.createElement(
|
|
4833
|
-
"svg",
|
|
4834
|
-
{
|
|
4835
|
-
width: size,
|
|
4836
|
-
height: size,
|
|
4837
|
-
viewBox: "0 0 24 24",
|
|
4838
|
-
fill: "none",
|
|
4839
|
-
stroke: color,
|
|
4840
|
-
strokeWidth: "2",
|
|
4841
|
-
strokeLinecap: "round",
|
|
4842
|
-
strokeLinejoin: "round",
|
|
4843
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4844
|
-
},
|
|
4845
|
-
/* @__PURE__ */ import_react25.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
4846
|
-
/* @__PURE__ */ import_react25.default.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" })
|
|
4847
|
-
);
|
|
4848
|
-
}
|
|
4849
|
-
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
4850
|
-
let paths;
|
|
4851
|
-
switch (branch) {
|
|
4852
|
-
case "executive":
|
|
4853
|
-
paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react25.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react25.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
|
|
4854
|
-
break;
|
|
4855
|
-
case "legislative":
|
|
4856
|
-
paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.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__ */ import_react25.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M15 12h-5" }));
|
|
4857
|
-
break;
|
|
4858
|
-
case "judicial":
|
|
4859
|
-
paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M8 21h8" }));
|
|
4860
|
-
break;
|
|
4861
|
-
default:
|
|
4862
|
-
paths = /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react25.default.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__ */ import_react25.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react25.default.createElement("path", { d: "M6 18v-7" }));
|
|
4863
|
-
break;
|
|
4864
|
-
}
|
|
4865
|
-
return /* @__PURE__ */ import_react25.default.createElement(
|
|
4866
|
-
"svg",
|
|
4867
|
-
{
|
|
4868
|
-
width: size,
|
|
4869
|
-
height: size,
|
|
4870
|
-
viewBox: "0 0 24 24",
|
|
4871
|
-
fill: "none",
|
|
4872
|
-
stroke: color,
|
|
4873
|
-
strokeWidth: "2",
|
|
4874
|
-
strokeLinecap: "round",
|
|
4875
|
-
strokeLinejoin: "round",
|
|
4876
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4877
|
-
},
|
|
4878
|
-
paths
|
|
4879
|
-
);
|
|
4880
|
-
}
|
|
4881
5409
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4882
5410
|
0 && (module.exports = {
|
|
4883
5411
|
AuthForm,
|
|
@@ -4885,12 +5413,14 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
|
4885
5413
|
BranchIcon,
|
|
4886
5414
|
CategorySection,
|
|
4887
5415
|
CommitteeTable,
|
|
5416
|
+
CompassCardHorizontal,
|
|
4888
5417
|
CompassCoverageCallout,
|
|
4889
5418
|
CompassIcon,
|
|
4890
5419
|
ExpandCompassNudge,
|
|
4891
5420
|
FilterSidebar,
|
|
4892
5421
|
GovernmentBodySection,
|
|
4893
5422
|
Header,
|
|
5423
|
+
IconOverlay,
|
|
4894
5424
|
IssueTags,
|
|
4895
5425
|
JudicialRecordDetail,
|
|
4896
5426
|
JudicialScorecard,
|