@empoweredvote/ev-ui 0.4.5 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +802 -268
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +809 -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
|
}
|
|
@@ -1841,8 +1843,610 @@ function PoliticianCard({
|
|
|
1841
1843
|
);
|
|
1842
1844
|
}
|
|
1843
1845
|
|
|
1844
|
-
// src/
|
|
1846
|
+
// src/CompassCardHorizontal.jsx
|
|
1847
|
+
var import_react13 = __toESM(require("react"));
|
|
1848
|
+
|
|
1849
|
+
// src/PlaceholderRadar.jsx
|
|
1845
1850
|
var import_react8 = __toESM(require("react"));
|
|
1851
|
+
function PlaceholderRadar({ size = 250, name = "" }) {
|
|
1852
|
+
const cx = size / 2;
|
|
1853
|
+
const cy = size / 2;
|
|
1854
|
+
const r = size / 2 * 0.65;
|
|
1855
|
+
const n = 8;
|
|
1856
|
+
const vertices = Array.from({ length: n }, (_, i) => {
|
|
1857
|
+
const a = 2 * Math.PI * i / n;
|
|
1858
|
+
return [cx + r * Math.sin(a), cy - r * Math.cos(a)];
|
|
1859
|
+
});
|
|
1860
|
+
const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
|
|
1861
|
+
const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
|
|
1862
|
+
const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
|
|
1863
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
1864
|
+
"svg",
|
|
1865
|
+
{
|
|
1866
|
+
width: size,
|
|
1867
|
+
height: size,
|
|
1868
|
+
viewBox: `0 0 ${size} ${size}`,
|
|
1869
|
+
role: "img",
|
|
1870
|
+
"aria-label": name ? `${name} \u2014 compass data unavailable` : "compass data unavailable",
|
|
1871
|
+
style: {
|
|
1872
|
+
backgroundColor: colorScales.teal["050"],
|
|
1873
|
+
borderRadius: borderRadius.sm,
|
|
1874
|
+
flexShrink: 0
|
|
1875
|
+
}
|
|
1876
|
+
},
|
|
1877
|
+
vertices.map(([x, y], i) => /* @__PURE__ */ import_react8.default.createElement(
|
|
1878
|
+
"line",
|
|
1879
|
+
{
|
|
1880
|
+
key: i,
|
|
1881
|
+
x1: cx,
|
|
1882
|
+
y1: cy,
|
|
1883
|
+
x2: x,
|
|
1884
|
+
y2: y,
|
|
1885
|
+
stroke: colorScales.gray["200"],
|
|
1886
|
+
strokeWidth: "1",
|
|
1887
|
+
strokeDasharray: "2 3",
|
|
1888
|
+
opacity: "0.6"
|
|
1889
|
+
}
|
|
1890
|
+
)),
|
|
1891
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
1892
|
+
"polygon",
|
|
1893
|
+
{
|
|
1894
|
+
points: innerPts,
|
|
1895
|
+
fill: "none",
|
|
1896
|
+
stroke: colorScales.gray["200"],
|
|
1897
|
+
strokeWidth: "1",
|
|
1898
|
+
strokeDasharray: "2 3",
|
|
1899
|
+
opacity: "0.5"
|
|
1900
|
+
}
|
|
1901
|
+
),
|
|
1902
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
1903
|
+
"polygon",
|
|
1904
|
+
{
|
|
1905
|
+
points: midPts,
|
|
1906
|
+
fill: "none",
|
|
1907
|
+
stroke: colorScales.gray["200"],
|
|
1908
|
+
strokeWidth: "1",
|
|
1909
|
+
strokeDasharray: "3 3",
|
|
1910
|
+
opacity: "0.6"
|
|
1911
|
+
}
|
|
1912
|
+
),
|
|
1913
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
1914
|
+
"polygon",
|
|
1915
|
+
{
|
|
1916
|
+
points: outerPts,
|
|
1917
|
+
fill: "none",
|
|
1918
|
+
stroke: colorScales.gray["200"],
|
|
1919
|
+
strokeWidth: "1.5",
|
|
1920
|
+
strokeDasharray: "4 3"
|
|
1921
|
+
}
|
|
1922
|
+
)
|
|
1923
|
+
);
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
// src/CompassCardHorizontalMeta.jsx
|
|
1927
|
+
var import_react12 = __toESM(require("react"));
|
|
1928
|
+
|
|
1929
|
+
// src/IconOverlay.jsx
|
|
1930
|
+
var import_react10 = __toESM(require("react"));
|
|
1931
|
+
var import_react11 = require("@floating-ui/react");
|
|
1932
|
+
|
|
1933
|
+
// src/icons.js
|
|
1934
|
+
var import_react9 = __toESM(require("react"));
|
|
1935
|
+
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
1936
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
1937
|
+
"svg",
|
|
1938
|
+
{
|
|
1939
|
+
width: size,
|
|
1940
|
+
height: size,
|
|
1941
|
+
viewBox: "0 0 24 24",
|
|
1942
|
+
fill: "none",
|
|
1943
|
+
stroke: color,
|
|
1944
|
+
strokeWidth: "2",
|
|
1945
|
+
strokeLinecap: "round",
|
|
1946
|
+
strokeLinejoin: "round",
|
|
1947
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1948
|
+
},
|
|
1949
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
1950
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
1951
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M22 19H2" })
|
|
1952
|
+
);
|
|
1953
|
+
}
|
|
1954
|
+
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
1955
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
1956
|
+
"svg",
|
|
1957
|
+
{
|
|
1958
|
+
width: size,
|
|
1959
|
+
height: size,
|
|
1960
|
+
viewBox: "0 0 24 24",
|
|
1961
|
+
fill: "none",
|
|
1962
|
+
stroke: color,
|
|
1963
|
+
strokeWidth: "2",
|
|
1964
|
+
strokeLinecap: "round",
|
|
1965
|
+
strokeLinejoin: "round",
|
|
1966
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1967
|
+
},
|
|
1968
|
+
/* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1969
|
+
/* @__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" })
|
|
1970
|
+
);
|
|
1971
|
+
}
|
|
1972
|
+
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
1973
|
+
let paths;
|
|
1974
|
+
switch (branch) {
|
|
1975
|
+
case "executive":
|
|
1976
|
+
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" }));
|
|
1977
|
+
break;
|
|
1978
|
+
case "legislative":
|
|
1979
|
+
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" }));
|
|
1980
|
+
break;
|
|
1981
|
+
case "judicial":
|
|
1982
|
+
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" }));
|
|
1983
|
+
break;
|
|
1984
|
+
default:
|
|
1985
|
+
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" }));
|
|
1986
|
+
break;
|
|
1987
|
+
}
|
|
1988
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
1989
|
+
"svg",
|
|
1990
|
+
{
|
|
1991
|
+
width: size,
|
|
1992
|
+
height: size,
|
|
1993
|
+
viewBox: "0 0 24 24",
|
|
1994
|
+
fill: "none",
|
|
1995
|
+
stroke: color,
|
|
1996
|
+
strokeWidth: "2",
|
|
1997
|
+
strokeLinecap: "round",
|
|
1998
|
+
strokeLinejoin: "round",
|
|
1999
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
2000
|
+
},
|
|
2001
|
+
paths
|
|
2002
|
+
);
|
|
2003
|
+
}
|
|
2004
|
+
|
|
2005
|
+
// src/IconOverlay.jsx
|
|
2006
|
+
function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
|
|
2007
|
+
const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
|
|
2008
|
+
const { refs, floatingStyles, context } = (0, import_react11.useFloating)({
|
|
2009
|
+
open: isOpen,
|
|
2010
|
+
onOpenChange: setIsOpen,
|
|
2011
|
+
middleware: [(0, import_react11.offset)(8), (0, import_react11.flip)(), (0, import_react11.shift)({ padding: 4 })],
|
|
2012
|
+
whileElementsMounted: import_react11.autoUpdate
|
|
2013
|
+
});
|
|
2014
|
+
const hover = (0, import_react11.useHover)(context);
|
|
2015
|
+
const focus2 = (0, import_react11.useFocus)(context);
|
|
2016
|
+
const dismiss = (0, import_react11.useDismiss)(context);
|
|
2017
|
+
const role = (0, import_react11.useRole)(context, { role: "tooltip" });
|
|
2018
|
+
const { getReferenceProps, getFloatingProps } = (0, import_react11.useInteractions)([
|
|
2019
|
+
hover,
|
|
2020
|
+
focus2,
|
|
2021
|
+
dismiss,
|
|
2022
|
+
role
|
|
2023
|
+
]);
|
|
2024
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2025
|
+
"span",
|
|
2026
|
+
{
|
|
2027
|
+
ref: refs.setReference,
|
|
2028
|
+
"aria-label": tooltip,
|
|
2029
|
+
tabIndex: 0,
|
|
2030
|
+
style: { display: "inline-flex", padding: spacing[1], ...onClick ? { cursor: "pointer" } : {} },
|
|
2031
|
+
...getReferenceProps(),
|
|
2032
|
+
onClick: onClick ? (e) => {
|
|
2033
|
+
e.stopPropagation();
|
|
2034
|
+
onClick(e);
|
|
2035
|
+
} : void 0
|
|
2036
|
+
},
|
|
2037
|
+
/* @__PURE__ */ import_react10.default.createElement(IconComponent, { size, color, ...extraProps })
|
|
2038
|
+
), isOpen && /* @__PURE__ */ import_react10.default.createElement(import_react11.FloatingPortal, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2039
|
+
"div",
|
|
2040
|
+
{
|
|
2041
|
+
ref: refs.setFloating,
|
|
2042
|
+
style: {
|
|
2043
|
+
...floatingStyles,
|
|
2044
|
+
zIndex: 70,
|
|
2045
|
+
background: semanticTokens.light.tooltip.background,
|
|
2046
|
+
color: semanticTokens.light.tooltip.text,
|
|
2047
|
+
padding: "4px 8px",
|
|
2048
|
+
borderRadius: "6px",
|
|
2049
|
+
fontSize: "14px",
|
|
2050
|
+
fontFamily: "'Manrope', sans-serif",
|
|
2051
|
+
pointerEvents: "none",
|
|
2052
|
+
whiteSpace: "nowrap"
|
|
2053
|
+
},
|
|
2054
|
+
...getFloatingProps()
|
|
2055
|
+
},
|
|
2056
|
+
tooltip
|
|
2057
|
+
)));
|
|
2058
|
+
}
|
|
2059
|
+
function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
2060
|
+
if (!ballot && !hasStances && !branch) return null;
|
|
2061
|
+
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;
|
|
2062
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
2063
|
+
"div",
|
|
2064
|
+
{
|
|
2065
|
+
style: {
|
|
2066
|
+
display: "flex",
|
|
2067
|
+
gap: 4,
|
|
2068
|
+
alignItems: "center",
|
|
2069
|
+
justifyContent: "flex-start",
|
|
2070
|
+
padding: 0,
|
|
2071
|
+
marginLeft: "-4px"
|
|
2072
|
+
// offset icon wrapper padding so icons align flush-left with text
|
|
2073
|
+
}
|
|
2074
|
+
},
|
|
2075
|
+
ballot && /* @__PURE__ */ import_react10.default.createElement(
|
|
2076
|
+
IconWithTooltip,
|
|
2077
|
+
{
|
|
2078
|
+
IconComponent: BallotIcon,
|
|
2079
|
+
color: colors.evMutedBlue,
|
|
2080
|
+
tooltip: ballotTooltip,
|
|
2081
|
+
size: 14
|
|
2082
|
+
}
|
|
2083
|
+
),
|
|
2084
|
+
hasStances && /* @__PURE__ */ import_react10.default.createElement(
|
|
2085
|
+
IconWithTooltip,
|
|
2086
|
+
{
|
|
2087
|
+
IconComponent: CompassIcon,
|
|
2088
|
+
color: colors.evMutedBlue,
|
|
2089
|
+
tooltip: "Compare your views",
|
|
2090
|
+
size: 14,
|
|
2091
|
+
onClick: onCompassClick
|
|
2092
|
+
}
|
|
2093
|
+
),
|
|
2094
|
+
branch && /* @__PURE__ */ import_react10.default.createElement(
|
|
2095
|
+
IconWithTooltip,
|
|
2096
|
+
{
|
|
2097
|
+
IconComponent: BranchIcon,
|
|
2098
|
+
color: colors.evMutedBlue,
|
|
2099
|
+
tooltip: `${branch} branch`,
|
|
2100
|
+
size: 14,
|
|
2101
|
+
extraProps: { branch: branch.toLowerCase() }
|
|
2102
|
+
}
|
|
2103
|
+
)
|
|
2104
|
+
);
|
|
2105
|
+
}
|
|
2106
|
+
|
|
2107
|
+
// src/CompassCardHorizontalMeta.jsx
|
|
2108
|
+
function CompassCardHorizontalMeta({
|
|
2109
|
+
politician,
|
|
2110
|
+
surface = "representatives",
|
|
2111
|
+
userAnswers
|
|
2112
|
+
}) {
|
|
2113
|
+
const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
|
|
2114
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", { style: {
|
|
2115
|
+
flex: 1,
|
|
2116
|
+
minWidth: 0,
|
|
2117
|
+
display: "flex",
|
|
2118
|
+
flexDirection: "column",
|
|
2119
|
+
gap: spacing[1]
|
|
2120
|
+
} }, /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2121
|
+
fontFamily: fonts.primary,
|
|
2122
|
+
fontSize: fontSizes.lg,
|
|
2123
|
+
fontWeight: fontWeights.semibold,
|
|
2124
|
+
lineHeight: 1.4,
|
|
2125
|
+
color: colors.evMutedBlue,
|
|
2126
|
+
margin: 0
|
|
2127
|
+
} }, politician.full_name), /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2128
|
+
fontFamily: fonts.primary,
|
|
2129
|
+
fontSize: fontSizes.sm,
|
|
2130
|
+
fontWeight: fontWeights.semibold,
|
|
2131
|
+
lineHeight: 1.4,
|
|
2132
|
+
color: colors.textSecondary,
|
|
2133
|
+
margin: 0,
|
|
2134
|
+
overflow: "hidden",
|
|
2135
|
+
display: "-webkit-box",
|
|
2136
|
+
WebkitLineClamp: 2,
|
|
2137
|
+
WebkitBoxOrient: "vertical"
|
|
2138
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2139
|
+
fontFamily: fonts.primary,
|
|
2140
|
+
fontSize: fontSizes.sm,
|
|
2141
|
+
fontWeight: fontWeights.regular,
|
|
2142
|
+
lineHeight: 1.5,
|
|
2143
|
+
color: colors.textMuted,
|
|
2144
|
+
margin: 0,
|
|
2145
|
+
overflow: "hidden",
|
|
2146
|
+
textOverflow: "ellipsis",
|
|
2147
|
+
whiteSpace: "nowrap"
|
|
2148
|
+
} }, politician.district_label), /* @__PURE__ */ import_react12.default.createElement(
|
|
2149
|
+
IconOverlay,
|
|
2150
|
+
{
|
|
2151
|
+
ballot: politician.ballot || null,
|
|
2152
|
+
hasStances: Boolean(userAnswers && userAnswers.length > 0) || Boolean(politician.hasStances),
|
|
2153
|
+
branch: politician.branch || null
|
|
2154
|
+
}
|
|
2155
|
+
));
|
|
2156
|
+
}
|
|
2157
|
+
|
|
2158
|
+
// src/compassHelpers.js
|
|
2159
|
+
function buildAnswerMapByShortTitle(allTopics, allAnswers, allowedShorts) {
|
|
2160
|
+
var _a;
|
|
2161
|
+
const allowed = new Set(allowedShorts.map((s) => s.toLowerCase()));
|
|
2162
|
+
const topicById = new Map(allTopics.map((t) => [t.id, t]));
|
|
2163
|
+
const shortById = new Map(allTopics.map((t) => [t.id, t.short_title]));
|
|
2164
|
+
const out = {};
|
|
2165
|
+
const topicByShortLower = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
|
|
2166
|
+
for (const s of allowedShorts) {
|
|
2167
|
+
const t = topicByShortLower.get(s.toLowerCase());
|
|
2168
|
+
if (t) out[t.short_title] = 0;
|
|
2169
|
+
}
|
|
2170
|
+
for (const a of allAnswers) {
|
|
2171
|
+
const st = shortById.get(a.topic_id);
|
|
2172
|
+
if (!st) continue;
|
|
2173
|
+
if (allowed.has(String(st).toLowerCase())) {
|
|
2174
|
+
out[st] = (_a = a.value) != null ? _a : 0;
|
|
2175
|
+
}
|
|
2176
|
+
}
|
|
2177
|
+
const topicByShort = new Map(allTopics.map((t) => [t.short_title.toLowerCase(), t]));
|
|
2178
|
+
const topicsFiltered = allowedShorts.map((s) => topicByShort.get(s.toLowerCase())).filter(Boolean);
|
|
2179
|
+
return { topicsFiltered, answersByShort: out };
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2182
|
+
// src/CompassCardHorizontal.jsx
|
|
2183
|
+
var RADAR_SIZE = 250;
|
|
2184
|
+
var SLOT_WIDTH = 260;
|
|
2185
|
+
function CompassCardHorizontal({
|
|
2186
|
+
politician,
|
|
2187
|
+
userAnswers = null,
|
|
2188
|
+
tierVisuals = null,
|
|
2189
|
+
view = "compass",
|
|
2190
|
+
surface = "representatives",
|
|
2191
|
+
variant = "compass",
|
|
2192
|
+
onBuildCompass = null,
|
|
2193
|
+
onClick
|
|
2194
|
+
}) {
|
|
2195
|
+
var _a;
|
|
2196
|
+
const [hovered, setHovered] = (0, import_react13.useState)(false);
|
|
2197
|
+
const [focused, setFocused] = (0, import_react13.useState)(false);
|
|
2198
|
+
const [imgError, setImgError] = (0, import_react13.useState)(false);
|
|
2199
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react13.useState)(false);
|
|
2200
|
+
(0, import_react13.useEffect)(() => {
|
|
2201
|
+
setImgError(false);
|
|
2202
|
+
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2203
|
+
const cardStyle = {
|
|
2204
|
+
position: "relative",
|
|
2205
|
+
display: "flex",
|
|
2206
|
+
flexDirection: "row",
|
|
2207
|
+
alignItems: "center",
|
|
2208
|
+
backgroundColor: (_a = tierVisuals == null ? void 0 : tierVisuals.bg) != null ? _a : colors.bgWhite,
|
|
2209
|
+
border: `1px solid ${colors.borderLight}`,
|
|
2210
|
+
borderRadius: borderRadius.xl,
|
|
2211
|
+
overflow: "hidden",
|
|
2212
|
+
// clips slot corners via card border-radius — no padding needed
|
|
2213
|
+
boxShadow: focused ? focus.ring : hovered ? shadows.cardHover : shadows.md,
|
|
2214
|
+
transform: hovered ? "translateY(-2px)" : "none",
|
|
2215
|
+
transition: `box-shadow ${duration.normal} ease, transform ${duration.normal} ease`,
|
|
2216
|
+
cursor: onClick ? "pointer" : "default",
|
|
2217
|
+
fontFamily: fonts.primary,
|
|
2218
|
+
outline: "none"
|
|
2219
|
+
};
|
|
2220
|
+
const slotStyle = { width: SLOT_WIDTH, height: SLOT_WIDTH, flexShrink: 0, overflow: "hidden", position: "relative" };
|
|
2221
|
+
function renderCompass() {
|
|
2222
|
+
var _a2, _b, _c;
|
|
2223
|
+
if (!userAnswers || userAnswers.length === 0) {
|
|
2224
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2225
|
+
}
|
|
2226
|
+
let topics = [];
|
|
2227
|
+
let data = {};
|
|
2228
|
+
let compareData = {};
|
|
2229
|
+
try {
|
|
2230
|
+
if (Array.isArray(userAnswers) && userAnswers.length > 0) {
|
|
2231
|
+
const hasEmbeddedTopics = (_b = (_a2 = userAnswers[0]) == null ? void 0 : _a2.topic) == null ? void 0 : _b.short_title;
|
|
2232
|
+
if (hasEmbeddedTopics) {
|
|
2233
|
+
const allowedShorts = userAnswers.map((a) => a.topic.short_title);
|
|
2234
|
+
const allTopics = userAnswers.map((a) => a.topic);
|
|
2235
|
+
const { topicsFiltered, answersByShort } = buildAnswerMapByShortTitle(
|
|
2236
|
+
allTopics,
|
|
2237
|
+
userAnswers,
|
|
2238
|
+
allowedShorts
|
|
2239
|
+
);
|
|
2240
|
+
topics = topicsFiltered;
|
|
2241
|
+
data = answersByShort;
|
|
2242
|
+
} else {
|
|
2243
|
+
if (!Array.isArray(userAnswers[0])) {
|
|
2244
|
+
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 }));
|
|
2245
|
+
data = {};
|
|
2246
|
+
for (const a of userAnswers) {
|
|
2247
|
+
if (a.short_title) data[a.short_title] = (_c = a.value) != null ? _c : 0;
|
|
2248
|
+
}
|
|
2249
|
+
}
|
|
2250
|
+
}
|
|
2251
|
+
}
|
|
2252
|
+
if ((politician == null ? void 0 : politician.stances) && typeof politician.stances === "object") {
|
|
2253
|
+
compareData = Array.isArray(politician.stances) ? politician.stances.reduce((acc, s) => {
|
|
2254
|
+
var _a3;
|
|
2255
|
+
if (s.short_title) acc[s.short_title] = (_a3 = s.value) != null ? _a3 : 0;
|
|
2256
|
+
return acc;
|
|
2257
|
+
}, {}) : politician.stances;
|
|
2258
|
+
}
|
|
2259
|
+
if (topics.length === 0) {
|
|
2260
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2261
|
+
}
|
|
2262
|
+
} catch (err) {
|
|
2263
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2264
|
+
}
|
|
2265
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2266
|
+
RadarChartCore,
|
|
2267
|
+
{
|
|
2268
|
+
topics,
|
|
2269
|
+
data,
|
|
2270
|
+
compareData,
|
|
2271
|
+
invertedSpokes: {},
|
|
2272
|
+
onToggleInversion: () => {
|
|
2273
|
+
},
|
|
2274
|
+
onReplaceTopic: () => {
|
|
2275
|
+
},
|
|
2276
|
+
size: RADAR_SIZE,
|
|
2277
|
+
padding: 20,
|
|
2278
|
+
labelOffset: 5,
|
|
2279
|
+
labelFontSize: 12
|
|
2280
|
+
}
|
|
2281
|
+
);
|
|
2282
|
+
}
|
|
2283
|
+
function renderPortrait() {
|
|
2284
|
+
var _a2, _b, _c;
|
|
2285
|
+
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;
|
|
2286
|
+
if (imageSrc && !imgError) {
|
|
2287
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2288
|
+
"img",
|
|
2289
|
+
{
|
|
2290
|
+
src: imageSrc,
|
|
2291
|
+
alt: `${politician.full_name} portrait`,
|
|
2292
|
+
style: {
|
|
2293
|
+
width: "100%",
|
|
2294
|
+
height: "100%",
|
|
2295
|
+
objectFit: "cover",
|
|
2296
|
+
objectPosition: (_b = politician.imageFocalPoint) != null ? _b : "center 20%",
|
|
2297
|
+
display: "block"
|
|
2298
|
+
},
|
|
2299
|
+
onError: () => setImgError(true)
|
|
2300
|
+
}
|
|
2301
|
+
);
|
|
2302
|
+
}
|
|
2303
|
+
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2304
|
+
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2305
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2306
|
+
width: "100%",
|
|
2307
|
+
height: "100%",
|
|
2308
|
+
backgroundColor: colors.evMutedBlue,
|
|
2309
|
+
color: colors.textWhite,
|
|
2310
|
+
display: "flex",
|
|
2311
|
+
alignItems: "center",
|
|
2312
|
+
justifyContent: "center",
|
|
2313
|
+
fontFamily: fonts.primary,
|
|
2314
|
+
fontWeight: fontWeights.bold,
|
|
2315
|
+
fontSize: fontSizes["4xl"]
|
|
2316
|
+
} }, initials);
|
|
2317
|
+
}
|
|
2318
|
+
function renderEmptyVariant() {
|
|
2319
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2320
|
+
width: "100%",
|
|
2321
|
+
height: "100%",
|
|
2322
|
+
display: "flex",
|
|
2323
|
+
flexDirection: "column",
|
|
2324
|
+
alignItems: "center",
|
|
2325
|
+
justifyContent: "center",
|
|
2326
|
+
gap: "8px",
|
|
2327
|
+
padding: "12px 14px",
|
|
2328
|
+
boxSizing: "border-box",
|
|
2329
|
+
backgroundColor: colorScales.teal["050"]
|
|
2330
|
+
} }, /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2331
|
+
margin: 0,
|
|
2332
|
+
fontSize: fontSizes.xs,
|
|
2333
|
+
color: colors.textMuted,
|
|
2334
|
+
textAlign: "center",
|
|
2335
|
+
lineHeight: 1.4,
|
|
2336
|
+
fontFamily: fonts.primary
|
|
2337
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react13.default.createElement(
|
|
2338
|
+
"button",
|
|
2339
|
+
{
|
|
2340
|
+
type: "button",
|
|
2341
|
+
onClick: onBuildCompass || void 0,
|
|
2342
|
+
onMouseEnter: () => setEmptyCtaHovered(true),
|
|
2343
|
+
onMouseLeave: () => setEmptyCtaHovered(false),
|
|
2344
|
+
style: {
|
|
2345
|
+
minWidth: "160px",
|
|
2346
|
+
height: "40px",
|
|
2347
|
+
padding: "0 16px",
|
|
2348
|
+
backgroundColor: emptyCtaHovered ? semanticTokens.light.buttonPrimary.background.hovered : semanticTokens.light.buttonPrimary.background.default,
|
|
2349
|
+
color: colors.textWhite,
|
|
2350
|
+
fontSize: fontSizes.xs,
|
|
2351
|
+
fontWeight: fontWeights.semibold,
|
|
2352
|
+
fontFamily: fonts.primary,
|
|
2353
|
+
borderRadius: borderRadius.full,
|
|
2354
|
+
border: "none",
|
|
2355
|
+
cursor: onBuildCompass ? "pointer" : "default",
|
|
2356
|
+
whiteSpace: "nowrap",
|
|
2357
|
+
transition: `background ${duration.normal} ease`,
|
|
2358
|
+
flexShrink: 0
|
|
2359
|
+
}
|
|
2360
|
+
},
|
|
2361
|
+
"Calibrate your compass"
|
|
2362
|
+
));
|
|
2363
|
+
}
|
|
2364
|
+
function renderUnavailablePlate(message = "Compass currently unavailable for this role.") {
|
|
2365
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2366
|
+
width: "100%",
|
|
2367
|
+
height: "100%",
|
|
2368
|
+
backgroundColor: colorScales.teal["050"],
|
|
2369
|
+
display: "flex",
|
|
2370
|
+
alignItems: "center",
|
|
2371
|
+
justifyContent: "center",
|
|
2372
|
+
padding: spacing[4],
|
|
2373
|
+
boxSizing: "border-box"
|
|
2374
|
+
} }, /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2375
|
+
fontSize: fontSizes.sm,
|
|
2376
|
+
fontWeight: fontWeights.semibold,
|
|
2377
|
+
lineHeight: 1.4,
|
|
2378
|
+
color: colors.textMuted,
|
|
2379
|
+
textAlign: "center",
|
|
2380
|
+
maxWidth: "180px",
|
|
2381
|
+
margin: 0,
|
|
2382
|
+
fontFamily: fonts.primary
|
|
2383
|
+
} }, message));
|
|
2384
|
+
}
|
|
2385
|
+
function renderSlotContent() {
|
|
2386
|
+
if (view === "portrait") return renderPortrait();
|
|
2387
|
+
if (variant === "empty") return renderEmptyVariant();
|
|
2388
|
+
if (variant === "administrative" || variant === "judicial") return renderUnavailablePlate();
|
|
2389
|
+
if (variant === "no-stances") {
|
|
2390
|
+
const name = (politician == null ? void 0 : politician.full_name) || "this official";
|
|
2391
|
+
return renderUnavailablePlate(`No compass stances on file for ${name} yet.`);
|
|
2392
|
+
}
|
|
2393
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2394
|
+
width: "100%",
|
|
2395
|
+
height: "100%",
|
|
2396
|
+
display: "flex",
|
|
2397
|
+
alignItems: "center",
|
|
2398
|
+
justifyContent: "center",
|
|
2399
|
+
padding: spacing[3],
|
|
2400
|
+
boxSizing: "border-box"
|
|
2401
|
+
} }, renderCompass());
|
|
2402
|
+
}
|
|
2403
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2404
|
+
"div",
|
|
2405
|
+
{
|
|
2406
|
+
role: "article",
|
|
2407
|
+
"aria-label": `${politician.full_name}, ${politician.office_title || ""}`,
|
|
2408
|
+
tabIndex: 0,
|
|
2409
|
+
style: cardStyle,
|
|
2410
|
+
onClick,
|
|
2411
|
+
onKeyDown: (e) => {
|
|
2412
|
+
if (onClick && (e.key === "Enter" || e.key === " ")) {
|
|
2413
|
+
e.preventDefault();
|
|
2414
|
+
onClick();
|
|
2415
|
+
}
|
|
2416
|
+
},
|
|
2417
|
+
onMouseEnter: () => setHovered(true),
|
|
2418
|
+
onMouseLeave: () => setHovered(false),
|
|
2419
|
+
onFocus: () => setFocused(true),
|
|
2420
|
+
onBlur: () => setFocused(false)
|
|
2421
|
+
},
|
|
2422
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2423
|
+
position: "absolute",
|
|
2424
|
+
bottom: "15px",
|
|
2425
|
+
left: 0,
|
|
2426
|
+
width: "100%",
|
|
2427
|
+
backgroundColor: "rgba(0,0,0,0.35)",
|
|
2428
|
+
color: "#fff",
|
|
2429
|
+
fontSize: "12px",
|
|
2430
|
+
fontWeight: 700,
|
|
2431
|
+
letterSpacing: "0.4px",
|
|
2432
|
+
textAlign: "center",
|
|
2433
|
+
textTransform: "uppercase",
|
|
2434
|
+
padding: "6px 0",
|
|
2435
|
+
pointerEvents: "none"
|
|
2436
|
+
} }, "Running Unopposed")),
|
|
2437
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react13.default.createElement(
|
|
2438
|
+
CompassCardHorizontalMeta,
|
|
2439
|
+
{
|
|
2440
|
+
politician,
|
|
2441
|
+
surface,
|
|
2442
|
+
userAnswers
|
|
2443
|
+
}
|
|
2444
|
+
))
|
|
2445
|
+
);
|
|
2446
|
+
}
|
|
2447
|
+
|
|
2448
|
+
// src/CategorySection.jsx
|
|
2449
|
+
var import_react14 = __toESM(require("react"));
|
|
1846
2450
|
function CategorySection({
|
|
1847
2451
|
title,
|
|
1848
2452
|
infoTooltip,
|
|
@@ -1852,7 +2456,7 @@ function CategorySection({
|
|
|
1852
2456
|
tier
|
|
1853
2457
|
}) {
|
|
1854
2458
|
var _a, _b;
|
|
1855
|
-
const [showTooltip, setShowTooltip] = (0,
|
|
2459
|
+
const [showTooltip, setShowTooltip] = (0, import_react14.useState)(false);
|
|
1856
2460
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
1857
2461
|
const styles2 = {
|
|
1858
2462
|
section: {
|
|
@@ -1920,7 +2524,7 @@ function CategorySection({
|
|
|
1920
2524
|
gap: spacing[4]
|
|
1921
2525
|
}
|
|
1922
2526
|
};
|
|
1923
|
-
return /* @__PURE__ */
|
|
2527
|
+
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(
|
|
1924
2528
|
"button",
|
|
1925
2529
|
{
|
|
1926
2530
|
type: "button",
|
|
@@ -1932,8 +2536,8 @@ function CategorySection({
|
|
|
1932
2536
|
"aria-label": `Info about ${title}`
|
|
1933
2537
|
},
|
|
1934
2538
|
"i",
|
|
1935
|
-
showTooltip && /* @__PURE__ */
|
|
1936
|
-
), websiteUrl && /* @__PURE__ */
|
|
2539
|
+
showTooltip && /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
|
|
2540
|
+
), websiteUrl && /* @__PURE__ */ import_react14.default.createElement(
|
|
1937
2541
|
"a",
|
|
1938
2542
|
{
|
|
1939
2543
|
href: websiteUrl,
|
|
@@ -1942,7 +2546,7 @@ function CategorySection({
|
|
|
1942
2546
|
style: styles2.externalLink,
|
|
1943
2547
|
"aria-label": `Visit official website for ${title}`
|
|
1944
2548
|
},
|
|
1945
|
-
/* @__PURE__ */
|
|
2549
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
1946
2550
|
"svg",
|
|
1947
2551
|
{
|
|
1948
2552
|
viewBox: "0 0 24 24",
|
|
@@ -1950,7 +2554,7 @@ function CategorySection({
|
|
|
1950
2554
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1951
2555
|
style: { width: "14px", height: "14px" }
|
|
1952
2556
|
},
|
|
1953
|
-
/* @__PURE__ */
|
|
2557
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
1954
2558
|
"path",
|
|
1955
2559
|
{
|
|
1956
2560
|
d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
|
|
@@ -1961,11 +2565,11 @@ function CategorySection({
|
|
|
1961
2565
|
}
|
|
1962
2566
|
)
|
|
1963
2567
|
)
|
|
1964
|
-
)), /* @__PURE__ */
|
|
2568
|
+
)), /* @__PURE__ */ import_react14.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
|
|
1965
2569
|
}
|
|
1966
2570
|
|
|
1967
2571
|
// src/SubGroupSection.jsx
|
|
1968
|
-
var
|
|
2572
|
+
var import_react15 = __toESM(require("react"));
|
|
1969
2573
|
function SubGroupSection({ title, websiteUrl, children }) {
|
|
1970
2574
|
const styles2 = {
|
|
1971
2575
|
section: {
|
|
@@ -1998,7 +2602,7 @@ function SubGroupSection({ title, websiteUrl, children }) {
|
|
|
1998
2602
|
gap: spacing[2]
|
|
1999
2603
|
}
|
|
2000
2604
|
};
|
|
2001
|
-
return /* @__PURE__ */
|
|
2605
|
+
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(
|
|
2002
2606
|
"a",
|
|
2003
2607
|
{
|
|
2004
2608
|
href: websiteUrl,
|
|
@@ -2006,12 +2610,12 @@ function SubGroupSection({ title, websiteUrl, children }) {
|
|
|
2006
2610
|
rel: "noopener noreferrer",
|
|
2007
2611
|
style: styles2.link
|
|
2008
2612
|
},
|
|
2009
|
-
/* @__PURE__ */
|
|
2010
|
-
)), /* @__PURE__ */
|
|
2613
|
+
/* @__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" }))
|
|
2614
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
|
|
2011
2615
|
}
|
|
2012
2616
|
|
|
2013
2617
|
// src/GovernmentBodySection.jsx
|
|
2014
|
-
var
|
|
2618
|
+
var import_react16 = __toESM(require("react"));
|
|
2015
2619
|
function GovernmentBodySection({
|
|
2016
2620
|
title,
|
|
2017
2621
|
websiteUrl,
|
|
@@ -2020,7 +2624,7 @@ function GovernmentBodySection({
|
|
|
2020
2624
|
children
|
|
2021
2625
|
}) {
|
|
2022
2626
|
var _a;
|
|
2023
|
-
const [expanded, setExpanded] = (0,
|
|
2627
|
+
const [expanded, setExpanded] = (0, import_react16.useState)(defaultExpanded);
|
|
2024
2628
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
2025
2629
|
const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
|
|
2026
2630
|
const styles2 = {
|
|
@@ -2060,7 +2664,7 @@ function GovernmentBodySection({
|
|
|
2060
2664
|
display: expanded ? "block" : "none"
|
|
2061
2665
|
}
|
|
2062
2666
|
};
|
|
2063
|
-
return /* @__PURE__ */
|
|
2667
|
+
return /* @__PURE__ */ import_react16.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react16.default.createElement(
|
|
2064
2668
|
"div",
|
|
2065
2669
|
{
|
|
2066
2670
|
style: styles2.header,
|
|
@@ -2076,8 +2680,8 @@ function GovernmentBodySection({
|
|
|
2076
2680
|
"aria-expanded": expanded,
|
|
2077
2681
|
"aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
|
|
2078
2682
|
},
|
|
2079
|
-
/* @__PURE__ */
|
|
2080
|
-
websiteUrl && /* @__PURE__ */
|
|
2683
|
+
/* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.title }, title),
|
|
2684
|
+
websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
|
|
2081
2685
|
"a",
|
|
2082
2686
|
{
|
|
2083
2687
|
href: websiteUrl,
|
|
@@ -2087,14 +2691,14 @@ function GovernmentBodySection({
|
|
|
2087
2691
|
onClick: (e) => e.stopPropagation(),
|
|
2088
2692
|
"aria-label": `Visit ${title} website`
|
|
2089
2693
|
},
|
|
2090
|
-
/* @__PURE__ */
|
|
2694
|
+
/* @__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" }))
|
|
2091
2695
|
),
|
|
2092
|
-
/* @__PURE__ */
|
|
2093
|
-
), /* @__PURE__ */
|
|
2696
|
+
/* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
|
|
2697
|
+
), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.content }, children));
|
|
2094
2698
|
}
|
|
2095
2699
|
|
|
2096
2700
|
// src/SocialLinks.jsx
|
|
2097
|
-
var
|
|
2701
|
+
var import_react17 = __toESM(require("react"));
|
|
2098
2702
|
var SOCIAL_PLATFORMS = [
|
|
2099
2703
|
{ test: /facebook\.com/i, platform: "facebook" },
|
|
2100
2704
|
{ test: /twitter\.com|x\.com/i, platform: "twitter" },
|
|
@@ -2165,7 +2769,7 @@ function SocialLinks({
|
|
|
2165
2769
|
}
|
|
2166
2770
|
};
|
|
2167
2771
|
const platformIconMap = {
|
|
2168
|
-
twitter: /* @__PURE__ */
|
|
2772
|
+
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(
|
|
2169
2773
|
"path",
|
|
2170
2774
|
{
|
|
2171
2775
|
d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
|
|
@@ -2175,7 +2779,7 @@ function SocialLinks({
|
|
|
2175
2779
|
strokeLinejoin: "round"
|
|
2176
2780
|
}
|
|
2177
2781
|
)),
|
|
2178
|
-
facebook: /* @__PURE__ */
|
|
2782
|
+
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(
|
|
2179
2783
|
"path",
|
|
2180
2784
|
{
|
|
2181
2785
|
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",
|
|
@@ -2185,8 +2789,8 @@ function SocialLinks({
|
|
|
2185
2789
|
strokeLinejoin: "round"
|
|
2186
2790
|
}
|
|
2187
2791
|
)),
|
|
2188
|
-
instagram: /* @__PURE__ */
|
|
2189
|
-
linkedin: /* @__PURE__ */
|
|
2792
|
+
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" })),
|
|
2793
|
+
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(
|
|
2190
2794
|
"path",
|
|
2191
2795
|
{
|
|
2192
2796
|
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",
|
|
@@ -2195,8 +2799,8 @@ function SocialLinks({
|
|
|
2195
2799
|
strokeLinecap: "round",
|
|
2196
2800
|
strokeLinejoin: "round"
|
|
2197
2801
|
}
|
|
2198
|
-
), /* @__PURE__ */
|
|
2199
|
-
youtube: /* @__PURE__ */
|
|
2802
|
+
), /* @__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" })),
|
|
2803
|
+
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" }))
|
|
2200
2804
|
};
|
|
2201
2805
|
const links = [
|
|
2202
2806
|
{
|
|
@@ -2222,7 +2826,7 @@ function SocialLinks({
|
|
|
2222
2826
|
{
|
|
2223
2827
|
href: website,
|
|
2224
2828
|
label: "Website",
|
|
2225
|
-
icon: /* @__PURE__ */
|
|
2829
|
+
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(
|
|
2226
2830
|
"path",
|
|
2227
2831
|
{
|
|
2228
2832
|
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",
|
|
@@ -2252,7 +2856,7 @@ function SocialLinks({
|
|
|
2252
2856
|
if (links.length === 0) {
|
|
2253
2857
|
return null;
|
|
2254
2858
|
}
|
|
2255
|
-
return /* @__PURE__ */
|
|
2859
|
+
return /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react17.default.createElement(
|
|
2256
2860
|
"a",
|
|
2257
2861
|
{
|
|
2258
2862
|
key: link.label,
|
|
@@ -2275,7 +2879,7 @@ function SocialLinks({
|
|
|
2275
2879
|
}
|
|
2276
2880
|
|
|
2277
2881
|
// src/IssueTags.jsx
|
|
2278
|
-
var
|
|
2882
|
+
var import_react18 = __toESM(require("react"));
|
|
2279
2883
|
function IssueTags({
|
|
2280
2884
|
tags = [],
|
|
2281
2885
|
selectedTags = [],
|
|
@@ -2318,9 +2922,9 @@ function IssueTags({
|
|
|
2318
2922
|
onTagClick(tag.value);
|
|
2319
2923
|
}
|
|
2320
2924
|
};
|
|
2321
|
-
return /* @__PURE__ */
|
|
2925
|
+
return /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
|
|
2322
2926
|
const isSelected = selectedTags.includes(tag.value);
|
|
2323
|
-
return /* @__PURE__ */
|
|
2927
|
+
return /* @__PURE__ */ import_react18.default.createElement(
|
|
2324
2928
|
"span",
|
|
2325
2929
|
{
|
|
2326
2930
|
key: tag.value,
|
|
@@ -2349,7 +2953,7 @@ function IssueTags({
|
|
|
2349
2953
|
}
|
|
2350
2954
|
|
|
2351
2955
|
// src/CommitteeTable.jsx
|
|
2352
|
-
var
|
|
2956
|
+
var import_react19 = __toESM(require("react"));
|
|
2353
2957
|
var ROLE_ORDER = {
|
|
2354
2958
|
"chair": 0,
|
|
2355
2959
|
"co-chair": 1,
|
|
@@ -2376,7 +2980,7 @@ function CommitteeTable({
|
|
|
2376
2980
|
maxVisible = 6,
|
|
2377
2981
|
style = {}
|
|
2378
2982
|
}) {
|
|
2379
|
-
const [showAll, setShowAll] = (0,
|
|
2983
|
+
const [showAll, setShowAll] = (0, import_react19.useState)(false);
|
|
2380
2984
|
if (committees.length === 0) {
|
|
2381
2985
|
return null;
|
|
2382
2986
|
}
|
|
@@ -2438,7 +3042,7 @@ function CommitteeTable({
|
|
|
2438
3042
|
cursor: "pointer"
|
|
2439
3043
|
}
|
|
2440
3044
|
};
|
|
2441
|
-
return /* @__PURE__ */
|
|
3045
|
+
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(
|
|
2442
3046
|
"a",
|
|
2443
3047
|
{
|
|
2444
3048
|
href: committee.url,
|
|
@@ -2453,7 +3057,7 @@ function CommitteeTable({
|
|
|
2453
3057
|
}
|
|
2454
3058
|
},
|
|
2455
3059
|
committee.name
|
|
2456
|
-
) : committee.name), /* @__PURE__ */
|
|
3060
|
+
) : committee.name), /* @__PURE__ */ import_react19.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react19.default.createElement(
|
|
2457
3061
|
"button",
|
|
2458
3062
|
{
|
|
2459
3063
|
type: "button",
|
|
@@ -2461,7 +3065,7 @@ function CommitteeTable({
|
|
|
2461
3065
|
onClick: () => setShowAll(!showAll)
|
|
2462
3066
|
},
|
|
2463
3067
|
showAll ? "Show less" : `Show all ${sorted.length} committees`,
|
|
2464
|
-
/* @__PURE__ */
|
|
3068
|
+
/* @__PURE__ */ import_react19.default.createElement(
|
|
2465
3069
|
"svg",
|
|
2466
3070
|
{
|
|
2467
3071
|
width: "14",
|
|
@@ -2474,16 +3078,16 @@ function CommitteeTable({
|
|
|
2474
3078
|
strokeLinejoin: "round",
|
|
2475
3079
|
style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
|
|
2476
3080
|
},
|
|
2477
|
-
/* @__PURE__ */
|
|
3081
|
+
/* @__PURE__ */ import_react19.default.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
2478
3082
|
)
|
|
2479
3083
|
));
|
|
2480
3084
|
}
|
|
2481
3085
|
|
|
2482
3086
|
// src/PoliticianProfile.jsx
|
|
2483
|
-
var
|
|
3087
|
+
var import_react22 = __toESM(require("react"));
|
|
2484
3088
|
|
|
2485
3089
|
// src/LegislativeInlineSummary.jsx
|
|
2486
|
-
var
|
|
3090
|
+
var import_react20 = __toESM(require("react"));
|
|
2487
3091
|
function normalizePosition(pos) {
|
|
2488
3092
|
if (!pos) return "";
|
|
2489
3093
|
return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -2591,7 +3195,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
2591
3195
|
fontSize: fontSizes.sm,
|
|
2592
3196
|
fontWeight: fontWeights.medium
|
|
2593
3197
|
};
|
|
2594
|
-
return /* @__PURE__ */
|
|
3198
|
+
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(
|
|
2595
3199
|
"button",
|
|
2596
3200
|
{
|
|
2597
3201
|
onClick: () => {
|
|
@@ -2616,12 +3220,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
2616
3220
|
}
|
|
2617
3221
|
},
|
|
2618
3222
|
"View Full Legislative Record",
|
|
2619
|
-
/* @__PURE__ */
|
|
3223
|
+
/* @__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" }))
|
|
2620
3224
|
)));
|
|
2621
3225
|
}
|
|
2622
3226
|
|
|
2623
3227
|
// src/JudicialScorecard.jsx
|
|
2624
|
-
var
|
|
3228
|
+
var import_react21 = __toESM(require("react"));
|
|
2625
3229
|
|
|
2626
3230
|
// src/judicialUtils.js
|
|
2627
3231
|
function formatDate(dateStr) {
|
|
@@ -2739,7 +3343,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
|
|
|
2739
3343
|
onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
|
|
2740
3344
|
}
|
|
2741
3345
|
};
|
|
2742
|
-
return /* @__PURE__ */
|
|
3346
|
+
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"));
|
|
2743
3347
|
}
|
|
2744
3348
|
|
|
2745
3349
|
// src/PoliticianProfile.jsx
|
|
@@ -2890,13 +3494,13 @@ function formatAddress(addr) {
|
|
|
2890
3494
|
if (cityStateZip) lines.push(cityStateZip);
|
|
2891
3495
|
return lines;
|
|
2892
3496
|
}
|
|
2893
|
-
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2894
|
-
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2895
|
-
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2896
|
-
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2897
|
-
var MailIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2898
|
-
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
2899
|
-
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
3497
|
+
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" }));
|
|
3498
|
+
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" }));
|
|
3499
|
+
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" }));
|
|
3500
|
+
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" }));
|
|
3501
|
+
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" }));
|
|
3502
|
+
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" }));
|
|
3503
|
+
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" }));
|
|
2900
3504
|
function PoliticianProfile({
|
|
2901
3505
|
politician = {},
|
|
2902
3506
|
onBack,
|
|
@@ -2923,8 +3527,8 @@ function PoliticianProfile({
|
|
|
2923
3527
|
return pol.photo_origin_url;
|
|
2924
3528
|
})();
|
|
2925
3529
|
const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
|
|
2926
|
-
const [imgError, setImgError] = (0,
|
|
2927
|
-
(0,
|
|
3530
|
+
const [imgError, setImgError] = (0, import_react22.useState)(false);
|
|
3531
|
+
(0, import_react22.useEffect)(() => {
|
|
2928
3532
|
setImgError(false);
|
|
2929
3533
|
}, [profileImageUrl]);
|
|
2930
3534
|
const getSocialHandle = (type) => {
|
|
@@ -3224,7 +3828,7 @@ function PoliticianProfile({
|
|
|
3224
3828
|
borderRadius: borderRadius.full
|
|
3225
3829
|
}
|
|
3226
3830
|
};
|
|
3227
|
-
return /* @__PURE__ */
|
|
3831
|
+
return /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react22.default.createElement(
|
|
3228
3832
|
"button",
|
|
3229
3833
|
{
|
|
3230
3834
|
type: "button",
|
|
@@ -3237,9 +3841,9 @@ function PoliticianProfile({
|
|
|
3237
3841
|
e.currentTarget.style.textDecoration = "none";
|
|
3238
3842
|
}
|
|
3239
3843
|
},
|
|
3240
|
-
/* @__PURE__ */
|
|
3844
|
+
/* @__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" })),
|
|
3241
3845
|
label
|
|
3242
|
-
), /* @__PURE__ */
|
|
3846
|
+
), /* @__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(
|
|
3243
3847
|
"img",
|
|
3244
3848
|
{
|
|
3245
3849
|
src: profileImageUrl,
|
|
@@ -3247,7 +3851,7 @@ function PoliticianProfile({
|
|
|
3247
3851
|
style: styles2.photo,
|
|
3248
3852
|
onError: () => setImgError(true)
|
|
3249
3853
|
}
|
|
3250
|
-
) : /* @__PURE__ */
|
|
3854
|
+
) : /* @__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(
|
|
3251
3855
|
"a",
|
|
3252
3856
|
{
|
|
3253
3857
|
href: pol.web_form_url,
|
|
@@ -3261,9 +3865,9 @@ function PoliticianProfile({
|
|
|
3261
3865
|
e.currentTarget.style.background = colors.evTeal;
|
|
3262
3866
|
}
|
|
3263
3867
|
},
|
|
3264
|
-
/* @__PURE__ */
|
|
3868
|
+
/* @__PURE__ */ import_react22.default.createElement(ExternalLinkIcon, { size: 14 }),
|
|
3265
3869
|
"Submit a Message"
|
|
3266
|
-
))), hasContactInfo && /* @__PURE__ */
|
|
3870
|
+
))), 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(
|
|
3267
3871
|
"a",
|
|
3268
3872
|
{
|
|
3269
3873
|
href: `tel:${phone}`,
|
|
@@ -3276,7 +3880,7 @@ function PoliticianProfile({
|
|
|
3276
3880
|
}
|
|
3277
3881
|
},
|
|
3278
3882
|
phone
|
|
3279
|
-
)))))), hasEmails && /* @__PURE__ */
|
|
3883
|
+
)))))), 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(
|
|
3280
3884
|
"a",
|
|
3281
3885
|
{
|
|
3282
3886
|
href: `mailto:${email}`,
|
|
@@ -3289,7 +3893,7 @@ function PoliticianProfile({
|
|
|
3289
3893
|
}
|
|
3290
3894
|
},
|
|
3291
3895
|
email
|
|
3292
|
-
)))))), hasWebsitesCol && /* @__PURE__ */
|
|
3896
|
+
)))))), 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(
|
|
3293
3897
|
"a",
|
|
3294
3898
|
{
|
|
3295
3899
|
href: url,
|
|
@@ -3304,7 +3908,7 @@ function PoliticianProfile({
|
|
|
3304
3908
|
}
|
|
3305
3909
|
},
|
|
3306
3910
|
extractDomain(url)
|
|
3307
|
-
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */
|
|
3911
|
+
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react22.default.createElement(
|
|
3308
3912
|
SocialLinks,
|
|
3309
3913
|
{
|
|
3310
3914
|
twitter,
|
|
@@ -3315,14 +3919,14 @@ function PoliticianProfile({
|
|
|
3315
3919
|
size: "sm",
|
|
3316
3920
|
style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
|
|
3317
3921
|
}
|
|
3318
|
-
)))), committees.length > 0 && /* @__PURE__ */
|
|
3922
|
+
)))), 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(
|
|
3319
3923
|
JudicialScorecard,
|
|
3320
3924
|
{
|
|
3321
3925
|
judicialRecord,
|
|
3322
3926
|
politicianId,
|
|
3323
3927
|
onNavigateToRecord
|
|
3324
3928
|
}
|
|
3325
|
-
) : /* @__PURE__ */
|
|
3929
|
+
) : /* @__PURE__ */ import_react22.default.createElement(
|
|
3326
3930
|
LegislativeInlineSummary,
|
|
3327
3931
|
{
|
|
3328
3932
|
summary: legislativeSummary,
|
|
@@ -3333,7 +3937,7 @@ function PoliticianProfile({
|
|
|
3333
3937
|
}
|
|
3334
3938
|
|
|
3335
3939
|
// src/LegislativeRecord.jsx
|
|
3336
|
-
var
|
|
3940
|
+
var import_react23 = __toESM(require("react"));
|
|
3337
3941
|
var DEFAULT_LIMIT = 25;
|
|
3338
3942
|
function normalizeText(str) {
|
|
3339
3943
|
if (!str) return "";
|
|
@@ -3413,7 +4017,7 @@ function getPositionBadge(position) {
|
|
|
3413
4017
|
return { bg: colors.borderLight, text: colors.textSecondary };
|
|
3414
4018
|
}
|
|
3415
4019
|
function Badge({ label, bg, text }) {
|
|
3416
|
-
return /* @__PURE__ */
|
|
4020
|
+
return /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3417
4021
|
display: "inline-block",
|
|
3418
4022
|
background: bg,
|
|
3419
4023
|
color: text,
|
|
@@ -3426,18 +4030,18 @@ function Badge({ label, bg, text }) {
|
|
|
3426
4030
|
} }, label);
|
|
3427
4031
|
}
|
|
3428
4032
|
function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
3429
|
-
return /* @__PURE__ */
|
|
4033
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3430
4034
|
display: "flex",
|
|
3431
4035
|
alignItems: "center",
|
|
3432
4036
|
justifyContent: "space-between",
|
|
3433
4037
|
marginBottom: spacing[4]
|
|
3434
|
-
} }, /* @__PURE__ */
|
|
4038
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("h2", { style: {
|
|
3435
4039
|
fontFamily: fonts.primary,
|
|
3436
4040
|
fontSize: fontSizes.xl,
|
|
3437
4041
|
fontWeight: fontWeights.bold,
|
|
3438
4042
|
color: colors.evTeal,
|
|
3439
4043
|
margin: 0
|
|
3440
|
-
} }, title), years && years.length > 0 && /* @__PURE__ */
|
|
4044
|
+
} }, title), years && years.length > 0 && /* @__PURE__ */ import_react23.default.createElement(
|
|
3441
4045
|
"select",
|
|
3442
4046
|
{
|
|
3443
4047
|
value: yearFilter,
|
|
@@ -3453,13 +4057,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
|
3453
4057
|
cursor: "pointer"
|
|
3454
4058
|
}
|
|
3455
4059
|
},
|
|
3456
|
-
/* @__PURE__ */
|
|
3457
|
-
years.map((y) => /* @__PURE__ */
|
|
4060
|
+
/* @__PURE__ */ import_react23.default.createElement("option", { value: "All" }, "All years"),
|
|
4061
|
+
years.map((y) => /* @__PURE__ */ import_react23.default.createElement("option", { key: y, value: y }, y))
|
|
3458
4062
|
));
|
|
3459
4063
|
}
|
|
3460
4064
|
function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
3461
4065
|
if (totalCount <= visibleCount) return null;
|
|
3462
|
-
return /* @__PURE__ */
|
|
4066
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react23.default.createElement(
|
|
3463
4067
|
"button",
|
|
3464
4068
|
{
|
|
3465
4069
|
type: "button",
|
|
@@ -3487,7 +4091,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
|
3487
4091
|
));
|
|
3488
4092
|
}
|
|
3489
4093
|
function EmptyState({ message }) {
|
|
3490
|
-
return /* @__PURE__ */
|
|
4094
|
+
return /* @__PURE__ */ import_react23.default.createElement("p", { style: {
|
|
3491
4095
|
fontFamily: fonts.primary,
|
|
3492
4096
|
fontSize: fontSizes.sm,
|
|
3493
4097
|
color: colors.textMuted,
|
|
@@ -3497,24 +4101,24 @@ function EmptyState({ message }) {
|
|
|
3497
4101
|
} }, message);
|
|
3498
4102
|
}
|
|
3499
4103
|
function Spinner() {
|
|
3500
|
-
return /* @__PURE__ */
|
|
4104
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3501
4105
|
display: "flex",
|
|
3502
4106
|
justifyContent: "center",
|
|
3503
4107
|
alignItems: "center",
|
|
3504
4108
|
padding: spacing[10]
|
|
3505
|
-
} }, /* @__PURE__ */
|
|
4109
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3506
4110
|
width: "40px",
|
|
3507
4111
|
height: "40px",
|
|
3508
4112
|
borderRadius: borderRadius.full,
|
|
3509
4113
|
border: `3px solid ${colors.borderLight}`,
|
|
3510
4114
|
borderTopColor: colors.evTeal,
|
|
3511
4115
|
animation: "ev-spin 0.8s linear infinite"
|
|
3512
|
-
} }), /* @__PURE__ */
|
|
4116
|
+
} }), /* @__PURE__ */ import_react23.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
|
|
3513
4117
|
}
|
|
3514
4118
|
function CommitteesSection({ committees, leadership }) {
|
|
3515
|
-
const [showAll, setShowAll] = (0,
|
|
4119
|
+
const [showAll, setShowAll] = (0, import_react23.useState)(false);
|
|
3516
4120
|
const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
|
|
3517
|
-
return /* @__PURE__ */
|
|
4121
|
+
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: {
|
|
3518
4122
|
display: "inline-flex",
|
|
3519
4123
|
alignItems: "center",
|
|
3520
4124
|
gap: spacing[1],
|
|
@@ -3525,23 +4129,23 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
3525
4129
|
fontFamily: fonts.primary,
|
|
3526
4130
|
fontSize: fontSizes.sm,
|
|
3527
4131
|
fontWeight: fontWeights.semibold
|
|
3528
|
-
} }, role.title, role.chamber && /* @__PURE__ */
|
|
4132
|
+
} }, 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) => {
|
|
3529
4133
|
const badge = getRoleBadge(c.role);
|
|
3530
|
-
return /* @__PURE__ */
|
|
4134
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
|
|
3531
4135
|
display: "flex",
|
|
3532
4136
|
alignItems: "center",
|
|
3533
4137
|
justifyContent: "space-between",
|
|
3534
4138
|
padding: `${spacing[3]} 0`,
|
|
3535
4139
|
borderBottom: `1px solid ${colors.borderLight}`,
|
|
3536
4140
|
gap: spacing[3]
|
|
3537
|
-
} }, /* @__PURE__ */
|
|
4141
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3538
4142
|
fontFamily: fonts.primary,
|
|
3539
4143
|
fontSize: fontSizes.sm,
|
|
3540
4144
|
color: colors.textSecondary,
|
|
3541
4145
|
flex: 1,
|
|
3542
4146
|
minWidth: 0
|
|
3543
|
-
} }, c.committee_name, c.parent_name && /* @__PURE__ */
|
|
3544
|
-
})), !showAll && /* @__PURE__ */
|
|
4147
|
+
} }, 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 }));
|
|
4148
|
+
})), !showAll && /* @__PURE__ */ import_react23.default.createElement(
|
|
3545
4149
|
ShowAllLink,
|
|
3546
4150
|
{
|
|
3547
4151
|
totalCount: committees.length,
|
|
@@ -3552,15 +4156,15 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
3552
4156
|
}
|
|
3553
4157
|
function LegislationSection({ bills, isMobile }) {
|
|
3554
4158
|
const years = getYears(bills, "introduced_at");
|
|
3555
|
-
const [yearFilter, setYearFilter] = (0,
|
|
3556
|
-
const [showAll, setShowAll] = (0,
|
|
4159
|
+
const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
|
|
4160
|
+
const [showAll, setShowAll] = (0, import_react23.useState)(false);
|
|
3557
4161
|
const handleYearChange = (y) => {
|
|
3558
4162
|
setYearFilter(y);
|
|
3559
4163
|
setShowAll(false);
|
|
3560
4164
|
};
|
|
3561
4165
|
const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
|
|
3562
4166
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
3563
|
-
return /* @__PURE__ */
|
|
4167
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
|
|
3564
4168
|
SectionHeader,
|
|
3565
4169
|
{
|
|
3566
4170
|
title: "Sponsored Legislation",
|
|
@@ -3568,42 +4172,42 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
3568
4172
|
years,
|
|
3569
4173
|
onYearChange: handleYearChange
|
|
3570
4174
|
}
|
|
3571
|
-
), bills.length === 0 ? /* @__PURE__ */
|
|
4175
|
+
), 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) => {
|
|
3572
4176
|
const statusBadge = getStatusBadge(bill.status_label);
|
|
3573
|
-
return /* @__PURE__ */
|
|
4177
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
|
|
3574
4178
|
display: "flex",
|
|
3575
4179
|
flexDirection: isMobile ? "column" : "row",
|
|
3576
4180
|
alignItems: isMobile ? "flex-start" : "center",
|
|
3577
4181
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
3578
4182
|
padding: `${spacing[3]} 0`,
|
|
3579
4183
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
3580
|
-
} }, /* @__PURE__ */
|
|
4184
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3581
4185
|
fontFamily: fonts.primary,
|
|
3582
4186
|
fontSize: fontSizes.xs,
|
|
3583
4187
|
fontWeight: fontWeights.bold,
|
|
3584
4188
|
color: colors.textSecondary,
|
|
3585
4189
|
marginRight: spacing[2]
|
|
3586
|
-
} }, bill.number), /* @__PURE__ */
|
|
4190
|
+
} }, bill.number), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3587
4191
|
fontFamily: fonts.primary,
|
|
3588
4192
|
fontSize: fontSizes.sm,
|
|
3589
4193
|
color: colors.textSecondary
|
|
3590
|
-
} }, bill.title)), /* @__PURE__ */
|
|
4194
|
+
} }, bill.title)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3591
4195
|
display: "flex",
|
|
3592
4196
|
alignItems: "center",
|
|
3593
4197
|
gap: spacing[2],
|
|
3594
4198
|
flexShrink: 0,
|
|
3595
4199
|
flexWrap: "wrap"
|
|
3596
|
-
} }, /* @__PURE__ */
|
|
4200
|
+
} }, /* @__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: {
|
|
3597
4201
|
fontFamily: fonts.primary,
|
|
3598
4202
|
fontSize: fontSizes.xs,
|
|
3599
4203
|
color: colors.textMuted
|
|
3600
|
-
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */
|
|
4204
|
+
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3601
4205
|
fontFamily: fonts.primary,
|
|
3602
4206
|
fontSize: fontSizes.xs,
|
|
3603
4207
|
color: colors.textMuted,
|
|
3604
4208
|
fontStyle: "italic"
|
|
3605
4209
|
} }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
|
|
3606
|
-
})), !showAll && /* @__PURE__ */
|
|
4210
|
+
})), !showAll && /* @__PURE__ */ import_react23.default.createElement(
|
|
3607
4211
|
ShowAllLink,
|
|
3608
4212
|
{
|
|
3609
4213
|
totalCount: filtered.length,
|
|
@@ -3614,15 +4218,15 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
3614
4218
|
}
|
|
3615
4219
|
function VotingSection({ votes, isMobile }) {
|
|
3616
4220
|
const years = getYears(votes, "vote_date");
|
|
3617
|
-
const [yearFilter, setYearFilter] = (0,
|
|
3618
|
-
const [showAll, setShowAll] = (0,
|
|
4221
|
+
const [yearFilter, setYearFilter] = (0, import_react23.useState)("All");
|
|
4222
|
+
const [showAll, setShowAll] = (0, import_react23.useState)(false);
|
|
3619
4223
|
const handleYearChange = (y) => {
|
|
3620
4224
|
setYearFilter(y);
|
|
3621
4225
|
setShowAll(false);
|
|
3622
4226
|
};
|
|
3623
4227
|
const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
|
|
3624
4228
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
3625
|
-
return /* @__PURE__ */
|
|
4229
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react23.default.createElement(
|
|
3626
4230
|
SectionHeader,
|
|
3627
4231
|
{
|
|
3628
4232
|
title: "Voting Record",
|
|
@@ -3630,38 +4234,38 @@ function VotingSection({ votes, isMobile }) {
|
|
|
3630
4234
|
years,
|
|
3631
4235
|
onYearChange: handleYearChange
|
|
3632
4236
|
}
|
|
3633
|
-
), votes.length === 0 ? /* @__PURE__ */
|
|
4237
|
+
), 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) => {
|
|
3634
4238
|
const positionBadge = getPositionBadge(vote.position);
|
|
3635
4239
|
const normPosition = normalizeText(vote.position);
|
|
3636
4240
|
const topic = vote.bill_title || vote.vote_question;
|
|
3637
4241
|
const sourceUrl = vote.bill_url;
|
|
3638
|
-
return /* @__PURE__ */
|
|
4242
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: {
|
|
3639
4243
|
display: "flex",
|
|
3640
4244
|
flexDirection: isMobile ? "column" : "row",
|
|
3641
4245
|
alignItems: isMobile ? "flex-start" : "center",
|
|
3642
4246
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
3643
4247
|
padding: `${spacing[3]} 0`,
|
|
3644
4248
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
3645
|
-
} }, /* @__PURE__ */
|
|
4249
|
+
} }, /* @__PURE__ */ import_react23.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3646
4250
|
fontFamily: fonts.primary,
|
|
3647
4251
|
fontSize: fontSizes.sm,
|
|
3648
4252
|
color: colors.textSecondary
|
|
3649
|
-
} }, topic)), /* @__PURE__ */
|
|
4253
|
+
} }, topic)), /* @__PURE__ */ import_react23.default.createElement("div", { style: {
|
|
3650
4254
|
display: "flex",
|
|
3651
4255
|
alignItems: "center",
|
|
3652
4256
|
gap: spacing[2],
|
|
3653
4257
|
flexShrink: 0,
|
|
3654
4258
|
flexWrap: "wrap"
|
|
3655
|
-
} }, vote.vote_date && /* @__PURE__ */
|
|
4259
|
+
} }, vote.vote_date && /* @__PURE__ */ import_react23.default.createElement("span", { style: {
|
|
3656
4260
|
fontFamily: fonts.primary,
|
|
3657
4261
|
fontSize: fontSizes.xs,
|
|
3658
4262
|
color: colors.textMuted
|
|
3659
|
-
} }, formatDate2(vote.vote_date)), /* @__PURE__ */
|
|
4263
|
+
} }, 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: {
|
|
3660
4264
|
fontFamily: fonts.primary,
|
|
3661
4265
|
fontSize: fontSizes.xs,
|
|
3662
4266
|
color: vote.result === "Passed" ? colors.success : colors.textMuted,
|
|
3663
4267
|
fontWeight: fontWeights.medium
|
|
3664
|
-
} }, vote.result), sourceUrl && /* @__PURE__ */
|
|
4268
|
+
} }, vote.result), sourceUrl && /* @__PURE__ */ import_react23.default.createElement(
|
|
3665
4269
|
"a",
|
|
3666
4270
|
{
|
|
3667
4271
|
href: sourceUrl,
|
|
@@ -3682,7 +4286,7 @@ function VotingSection({ votes, isMobile }) {
|
|
|
3682
4286
|
},
|
|
3683
4287
|
"Source"
|
|
3684
4288
|
)));
|
|
3685
|
-
})), !showAll && /* @__PURE__ */
|
|
4289
|
+
})), !showAll && /* @__PURE__ */ import_react23.default.createElement(
|
|
3686
4290
|
ShowAllLink,
|
|
3687
4291
|
{
|
|
3688
4292
|
totalCount: filtered.length,
|
|
@@ -3701,20 +4305,20 @@ function LegislativeRecord({
|
|
|
3701
4305
|
}) {
|
|
3702
4306
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
3703
4307
|
if (loading) {
|
|
3704
|
-
return /* @__PURE__ */
|
|
4308
|
+
return /* @__PURE__ */ import_react23.default.createElement(Spinner, null);
|
|
3705
4309
|
}
|
|
3706
|
-
return /* @__PURE__ */
|
|
4310
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react23.default.createElement("h1", { style: {
|
|
3707
4311
|
fontFamily: fonts.primary,
|
|
3708
4312
|
fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
|
|
3709
4313
|
fontWeight: fontWeights.bold,
|
|
3710
4314
|
color: colors.evTeal,
|
|
3711
4315
|
marginBottom: spacing[8],
|
|
3712
4316
|
marginTop: 0
|
|
3713
|
-
} }, "Legislative Record: ", politicianName), /* @__PURE__ */
|
|
4317
|
+
} }, "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 }));
|
|
3714
4318
|
}
|
|
3715
4319
|
|
|
3716
4320
|
// src/JudicialRecordDetail.jsx
|
|
3717
|
-
var
|
|
4321
|
+
var import_react24 = __toESM(require("react"));
|
|
3718
4322
|
var containerStyle = {
|
|
3719
4323
|
fontFamily: "'Manrope', sans-serif",
|
|
3720
4324
|
maxWidth: "800px"
|
|
@@ -3799,7 +4403,7 @@ var emptyStateStyle = {
|
|
|
3799
4403
|
function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
3800
4404
|
var _a;
|
|
3801
4405
|
if (!judicialRecord) {
|
|
3802
|
-
return /* @__PURE__ */
|
|
4406
|
+
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."));
|
|
3803
4407
|
}
|
|
3804
4408
|
const {
|
|
3805
4409
|
judge_detail: detail,
|
|
@@ -3808,13 +4412,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
3808
4412
|
disciplinary_records: disciplinary = []
|
|
3809
4413
|
} = judicialRecord;
|
|
3810
4414
|
const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
|
|
3811
|
-
return /* @__PURE__ */
|
|
4415
|
+
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: {
|
|
3812
4416
|
borderLeft: "3px solid #fc8181",
|
|
3813
4417
|
backgroundColor: "#fff5f5",
|
|
3814
4418
|
borderRadius: "0 6px 6px 0",
|
|
3815
4419
|
padding: "12px 16px",
|
|
3816
4420
|
marginBottom: "10px"
|
|
3817
|
-
} }, /* @__PURE__ */
|
|
4421
|
+
} }, /* @__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(
|
|
3818
4422
|
"a",
|
|
3819
4423
|
{
|
|
3820
4424
|
href: d.source_url,
|
|
@@ -3827,7 +4431,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
3827
4431
|
}
|
|
3828
4432
|
|
|
3829
4433
|
// src/AuthForm.jsx
|
|
3830
|
-
var
|
|
4434
|
+
var import_react25 = __toESM(require("react"));
|
|
3831
4435
|
function AuthForm({
|
|
3832
4436
|
logoSrc = "/EVLogo.svg",
|
|
3833
4437
|
appName = "Empowered Vote",
|
|
@@ -3838,11 +4442,11 @@ function AuthForm({
|
|
|
3838
4442
|
error = null,
|
|
3839
4443
|
submitting = false
|
|
3840
4444
|
}) {
|
|
3841
|
-
const [username, setUsername] = (0,
|
|
3842
|
-
const [password, setPassword] = (0,
|
|
3843
|
-
const [confirmPassword, setConfirmPassword] = (0,
|
|
3844
|
-
const [showPasswords, setShowPasswords] = (0,
|
|
3845
|
-
const [passwordMismatch, setPasswordMismatch] = (0,
|
|
4445
|
+
const [username, setUsername] = (0, import_react25.useState)("");
|
|
4446
|
+
const [password, setPassword] = (0, import_react25.useState)("");
|
|
4447
|
+
const [confirmPassword, setConfirmPassword] = (0, import_react25.useState)("");
|
|
4448
|
+
const [showPasswords, setShowPasswords] = (0, import_react25.useState)(false);
|
|
4449
|
+
const [passwordMismatch, setPasswordMismatch] = (0, import_react25.useState)(false);
|
|
3846
4450
|
const isLogin = mode === "login";
|
|
3847
4451
|
const handleSubmit = (e) => {
|
|
3848
4452
|
e.preventDefault();
|
|
@@ -3854,7 +4458,7 @@ function AuthForm({
|
|
|
3854
4458
|
setPasswordMismatch(false);
|
|
3855
4459
|
onSubmit == null ? void 0 : onSubmit(username.trim(), password);
|
|
3856
4460
|
};
|
|
3857
|
-
const EyeOpen = () => /* @__PURE__ */
|
|
4461
|
+
const EyeOpen = () => /* @__PURE__ */ import_react25.default.createElement(
|
|
3858
4462
|
"svg",
|
|
3859
4463
|
{
|
|
3860
4464
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -3864,7 +4468,7 @@ function AuthForm({
|
|
|
3864
4468
|
stroke: "currentColor",
|
|
3865
4469
|
style: { width: "20px", height: "20px" }
|
|
3866
4470
|
},
|
|
3867
|
-
/* @__PURE__ */
|
|
4471
|
+
/* @__PURE__ */ import_react25.default.createElement(
|
|
3868
4472
|
"path",
|
|
3869
4473
|
{
|
|
3870
4474
|
strokeLinecap: "round",
|
|
@@ -3872,7 +4476,7 @@ function AuthForm({
|
|
|
3872
4476
|
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"
|
|
3873
4477
|
}
|
|
3874
4478
|
),
|
|
3875
|
-
/* @__PURE__ */
|
|
4479
|
+
/* @__PURE__ */ import_react25.default.createElement(
|
|
3876
4480
|
"path",
|
|
3877
4481
|
{
|
|
3878
4482
|
strokeLinecap: "round",
|
|
@@ -3881,7 +4485,7 @@ function AuthForm({
|
|
|
3881
4485
|
}
|
|
3882
4486
|
)
|
|
3883
4487
|
);
|
|
3884
|
-
const EyeClosed = () => /* @__PURE__ */
|
|
4488
|
+
const EyeClosed = () => /* @__PURE__ */ import_react25.default.createElement(
|
|
3885
4489
|
"svg",
|
|
3886
4490
|
{
|
|
3887
4491
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -3891,7 +4495,7 @@ function AuthForm({
|
|
|
3891
4495
|
stroke: "currentColor",
|
|
3892
4496
|
style: { width: "20px", height: "20px" }
|
|
3893
4497
|
},
|
|
3894
|
-
/* @__PURE__ */
|
|
4498
|
+
/* @__PURE__ */ import_react25.default.createElement(
|
|
3895
4499
|
"path",
|
|
3896
4500
|
{
|
|
3897
4501
|
strokeLinecap: "round",
|
|
@@ -3900,17 +4504,17 @@ function AuthForm({
|
|
|
3900
4504
|
}
|
|
3901
4505
|
)
|
|
3902
4506
|
);
|
|
3903
|
-
const PasswordToggle = () => /* @__PURE__ */
|
|
4507
|
+
const PasswordToggle = () => /* @__PURE__ */ import_react25.default.createElement(
|
|
3904
4508
|
"button",
|
|
3905
4509
|
{
|
|
3906
4510
|
type: "button",
|
|
3907
4511
|
onClick: () => setShowPasswords((prev) => !prev),
|
|
3908
4512
|
style: styles.passwordToggle
|
|
3909
4513
|
},
|
|
3910
|
-
showPasswords ? /* @__PURE__ */
|
|
4514
|
+
showPasswords ? /* @__PURE__ */ import_react25.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react25.default.createElement(EyeClosed, null)
|
|
3911
4515
|
);
|
|
3912
4516
|
const displayError = passwordMismatch ? "Passwords do not match." : error;
|
|
3913
|
-
return /* @__PURE__ */
|
|
4517
|
+
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(
|
|
3914
4518
|
"input",
|
|
3915
4519
|
{
|
|
3916
4520
|
type: "text",
|
|
@@ -3927,7 +4531,7 @@ function AuthForm({
|
|
|
3927
4531
|
},
|
|
3928
4532
|
required: true
|
|
3929
4533
|
}
|
|
3930
|
-
)), /* @__PURE__ */
|
|
4534
|
+
)), /* @__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(
|
|
3931
4535
|
"input",
|
|
3932
4536
|
{
|
|
3933
4537
|
type: showPasswords ? "text" : "password",
|
|
@@ -3943,7 +4547,7 @@ function AuthForm({
|
|
|
3943
4547
|
},
|
|
3944
4548
|
required: true
|
|
3945
4549
|
}
|
|
3946
|
-
), /* @__PURE__ */
|
|
4550
|
+
), /* @__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(
|
|
3947
4551
|
"input",
|
|
3948
4552
|
{
|
|
3949
4553
|
type: showPasswords ? "text" : "password",
|
|
@@ -3959,7 +4563,7 @@ function AuthForm({
|
|
|
3959
4563
|
},
|
|
3960
4564
|
required: true
|
|
3961
4565
|
}
|
|
3962
|
-
), /* @__PURE__ */
|
|
4566
|
+
), /* @__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(
|
|
3963
4567
|
"button",
|
|
3964
4568
|
{
|
|
3965
4569
|
type: "submit",
|
|
@@ -3977,7 +4581,7 @@ function AuthForm({
|
|
|
3977
4581
|
}
|
|
3978
4582
|
},
|
|
3979
4583
|
submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
|
|
3980
|
-
), onModeSwitch && /* @__PURE__ */
|
|
4584
|
+
), 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(
|
|
3981
4585
|
"button",
|
|
3982
4586
|
{
|
|
3983
4587
|
type: "button",
|
|
@@ -4150,9 +4754,9 @@ var styles = {
|
|
|
4150
4754
|
};
|
|
4151
4755
|
|
|
4152
4756
|
// src/TopicTierBadge.jsx
|
|
4153
|
-
var
|
|
4757
|
+
var import_react26 = __toESM(require("react"));
|
|
4154
4758
|
function LandmarkIcon({ size = 14 }) {
|
|
4155
|
-
return /* @__PURE__ */
|
|
4759
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4156
4760
|
"svg",
|
|
4157
4761
|
{
|
|
4158
4762
|
width: size,
|
|
@@ -4166,16 +4770,16 @@ function LandmarkIcon({ size = 14 }) {
|
|
|
4166
4770
|
xmlns: "http://www.w3.org/2000/svg",
|
|
4167
4771
|
"aria-hidden": "true"
|
|
4168
4772
|
},
|
|
4169
|
-
/* @__PURE__ */
|
|
4170
|
-
/* @__PURE__ */
|
|
4171
|
-
/* @__PURE__ */
|
|
4172
|
-
/* @__PURE__ */
|
|
4173
|
-
/* @__PURE__ */
|
|
4174
|
-
/* @__PURE__ */
|
|
4773
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18v-7" }),
|
|
4774
|
+
/* @__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" }),
|
|
4775
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M14 18v-7" }),
|
|
4776
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 18v-7" }),
|
|
4777
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M3 22h18" }),
|
|
4778
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 18v-7" })
|
|
4175
4779
|
);
|
|
4176
4780
|
}
|
|
4177
4781
|
function Building2Icon({ size = 14 }) {
|
|
4178
|
-
return /* @__PURE__ */
|
|
4782
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4179
4783
|
"svg",
|
|
4180
4784
|
{
|
|
4181
4785
|
width: size,
|
|
@@ -4189,17 +4793,17 @@ function Building2Icon({ size = 14 }) {
|
|
|
4189
4793
|
xmlns: "http://www.w3.org/2000/svg",
|
|
4190
4794
|
"aria-hidden": "true"
|
|
4191
4795
|
},
|
|
4192
|
-
/* @__PURE__ */
|
|
4193
|
-
/* @__PURE__ */
|
|
4194
|
-
/* @__PURE__ */
|
|
4195
|
-
/* @__PURE__ */
|
|
4196
|
-
/* @__PURE__ */
|
|
4197
|
-
/* @__PURE__ */
|
|
4198
|
-
/* @__PURE__ */
|
|
4796
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
|
|
4797
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
|
|
4798
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
|
|
4799
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 6h4" }),
|
|
4800
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 10h4" }),
|
|
4801
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 14h4" }),
|
|
4802
|
+
/* @__PURE__ */ import_react26.default.createElement("path", { d: "M10 18h4" })
|
|
4199
4803
|
);
|
|
4200
4804
|
}
|
|
4201
4805
|
function HomeIcon({ size = 14 }) {
|
|
4202
|
-
return /* @__PURE__ */
|
|
4806
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4203
4807
|
"svg",
|
|
4204
4808
|
{
|
|
4205
4809
|
width: size,
|
|
@@ -4213,8 +4817,8 @@ function HomeIcon({ size = 14 }) {
|
|
|
4213
4817
|
xmlns: "http://www.w3.org/2000/svg",
|
|
4214
4818
|
"aria-hidden": "true"
|
|
4215
4819
|
},
|
|
4216
|
-
/* @__PURE__ */
|
|
4217
|
-
/* @__PURE__ */
|
|
4820
|
+
/* @__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" }),
|
|
4821
|
+
/* @__PURE__ */ import_react26.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
|
|
4218
4822
|
);
|
|
4219
4823
|
}
|
|
4220
4824
|
var TIER_INFO = {
|
|
@@ -4274,7 +4878,7 @@ function TopicTierBadge({
|
|
|
4274
4878
|
userSelect: "none"
|
|
4275
4879
|
};
|
|
4276
4880
|
};
|
|
4277
|
-
return /* @__PURE__ */
|
|
4881
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
4278
4882
|
"span",
|
|
4279
4883
|
{
|
|
4280
4884
|
className: "ev-topic-tier-badge",
|
|
@@ -4284,13 +4888,13 @@ function TopicTierBadge({
|
|
|
4284
4888
|
},
|
|
4285
4889
|
effectiveTiers.map((tier) => {
|
|
4286
4890
|
const { label, Icon } = TIER_INFO[tier];
|
|
4287
|
-
return /* @__PURE__ */
|
|
4891
|
+
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));
|
|
4288
4892
|
})
|
|
4289
4893
|
);
|
|
4290
4894
|
}
|
|
4291
4895
|
|
|
4292
4896
|
// src/CompassCoverageCallout.jsx
|
|
4293
|
-
var
|
|
4897
|
+
var import_react27 = __toESM(require("react"));
|
|
4294
4898
|
var TIER_LABELS = {
|
|
4295
4899
|
federal: "federal",
|
|
4296
4900
|
state: "state",
|
|
@@ -4303,7 +4907,7 @@ function CompassCoverageCallout({
|
|
|
4303
4907
|
compassUrl,
|
|
4304
4908
|
onDismiss
|
|
4305
4909
|
}) {
|
|
4306
|
-
const [dismissed, setDismissed] = (0,
|
|
4910
|
+
const [dismissed, setDismissed] = (0, import_react27.useState)(false);
|
|
4307
4911
|
if (dismissed) return null;
|
|
4308
4912
|
const tierLabel = TIER_LABELS[tier] || tier;
|
|
4309
4913
|
const tierStyle = tierColors[tier] || tierColors.federal;
|
|
@@ -4354,15 +4958,15 @@ function CompassCoverageCallout({
|
|
|
4354
4958
|
setDismissed(true);
|
|
4355
4959
|
if (onDismiss) onDismiss();
|
|
4356
4960
|
};
|
|
4357
|
-
return /* @__PURE__ */
|
|
4961
|
+
return /* @__PURE__ */ import_react27.default.createElement(
|
|
4358
4962
|
"div",
|
|
4359
4963
|
{
|
|
4360
4964
|
className: "ev-compass-coverage-callout",
|
|
4361
4965
|
role: "status",
|
|
4362
4966
|
style: containerStyle2
|
|
4363
4967
|
},
|
|
4364
|
-
/* @__PURE__ */
|
|
4365
|
-
onDismiss !== void 0 && /* @__PURE__ */
|
|
4968
|
+
/* @__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")),
|
|
4969
|
+
onDismiss !== void 0 && /* @__PURE__ */ import_react27.default.createElement(
|
|
4366
4970
|
"button",
|
|
4367
4971
|
{
|
|
4368
4972
|
onClick: handleDismiss,
|
|
@@ -4375,7 +4979,7 @@ function CompassCoverageCallout({
|
|
|
4375
4979
|
}
|
|
4376
4980
|
|
|
4377
4981
|
// src/ExpandCompassNudge.jsx
|
|
4378
|
-
var
|
|
4982
|
+
var import_react28 = __toESM(require("react"));
|
|
4379
4983
|
function ExpandCompassNudge({
|
|
4380
4984
|
politicianName,
|
|
4381
4985
|
missingCount,
|
|
@@ -4422,7 +5026,7 @@ function ExpandCompassNudge({
|
|
|
4422
5026
|
};
|
|
4423
5027
|
const topicsLabel = missingCount === 1 ? "topic" : "topics";
|
|
4424
5028
|
const speakerName = politicianName || "This politician";
|
|
4425
|
-
return /* @__PURE__ */
|
|
5029
|
+
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"));
|
|
4426
5030
|
}
|
|
4427
5031
|
|
|
4428
5032
|
// src/computeTierCoverage.js
|
|
@@ -4443,14 +5047,14 @@ function computeTierCoverage(topics) {
|
|
|
4443
5047
|
}
|
|
4444
5048
|
|
|
4445
5049
|
// src/StanceAccordion.jsx
|
|
4446
|
-
var
|
|
5050
|
+
var import_react30 = __toESM(require("react"));
|
|
4447
5051
|
|
|
4448
5052
|
// src/Favicon.jsx
|
|
4449
|
-
var
|
|
5053
|
+
var import_react29 = __toESM(require("react"));
|
|
4450
5054
|
function Favicon({ url, size = 16 }) {
|
|
4451
5055
|
try {
|
|
4452
5056
|
const domain = new URL(url).hostname;
|
|
4453
|
-
return /* @__PURE__ */
|
|
5057
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
4454
5058
|
"img",
|
|
4455
5059
|
{
|
|
4456
5060
|
src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
|
|
@@ -4461,7 +5065,7 @@ function Favicon({ url, size = 16 }) {
|
|
|
4461
5065
|
}
|
|
4462
5066
|
);
|
|
4463
5067
|
} catch {
|
|
4464
|
-
return /* @__PURE__ */
|
|
5068
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
4465
5069
|
"svg",
|
|
4466
5070
|
{
|
|
4467
5071
|
width: size,
|
|
@@ -4472,8 +5076,8 @@ function Favicon({ url, size = 16 }) {
|
|
|
4472
5076
|
strokeWidth: "1.5",
|
|
4473
5077
|
style: { verticalAlign: "middle", flexShrink: 0 }
|
|
4474
5078
|
},
|
|
4475
|
-
/* @__PURE__ */
|
|
4476
|
-
/* @__PURE__ */
|
|
5079
|
+
/* @__PURE__ */ import_react29.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
5080
|
+
/* @__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" })
|
|
4477
5081
|
);
|
|
4478
5082
|
}
|
|
4479
5083
|
}
|
|
@@ -4504,11 +5108,11 @@ function StanceAccordion({
|
|
|
4504
5108
|
apiUrl = "https://api.empowered.vote"
|
|
4505
5109
|
}) {
|
|
4506
5110
|
var _a;
|
|
4507
|
-
const [expandedTopicId, setExpandedTopicId] = (0,
|
|
4508
|
-
const [loadingId, setLoadingId] = (0,
|
|
4509
|
-
const [showAll, setShowAll] = (0,
|
|
4510
|
-
const contextCache = (0,
|
|
4511
|
-
const quotesCache = (0,
|
|
5111
|
+
const [expandedTopicId, setExpandedTopicId] = (0, import_react30.useState)(null);
|
|
5112
|
+
const [loadingId, setLoadingId] = (0, import_react30.useState)(null);
|
|
5113
|
+
const [showAll, setShowAll] = (0, import_react30.useState)(false);
|
|
5114
|
+
const contextCache = (0, import_react30.useRef)(/* @__PURE__ */ new Map());
|
|
5115
|
+
const quotesCache = (0, import_react30.useRef)(null);
|
|
4512
5116
|
const polAnswerMap = {};
|
|
4513
5117
|
if (polAnswers) {
|
|
4514
5118
|
polAnswers.forEach((a) => {
|
|
@@ -4567,7 +5171,7 @@ function StanceAccordion({
|
|
|
4567
5171
|
quotesCache.current = [];
|
|
4568
5172
|
}
|
|
4569
5173
|
}
|
|
4570
|
-
const handleToggle = (0,
|
|
5174
|
+
const handleToggle = (0, import_react30.useCallback)(
|
|
4571
5175
|
async (topicId) => {
|
|
4572
5176
|
if (expandedTopicId === topicId) {
|
|
4573
5177
|
setExpandedTopicId(null);
|
|
@@ -4584,7 +5188,7 @@ function StanceAccordion({
|
|
|
4584
5188
|
},
|
|
4585
5189
|
[expandedTopicId, politicianId, apiUrl]
|
|
4586
5190
|
);
|
|
4587
|
-
(0,
|
|
5191
|
+
(0, import_react30.useEffect)(() => {
|
|
4588
5192
|
if (initialExpandedTopicId && topics && topics.length > 0) {
|
|
4589
5193
|
handleToggle(String(initialExpandedTopicId));
|
|
4590
5194
|
}
|
|
@@ -4600,13 +5204,13 @@ function StanceAccordion({
|
|
|
4600
5204
|
visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
|
|
4601
5205
|
}
|
|
4602
5206
|
}
|
|
4603
|
-
return /* @__PURE__ */
|
|
5207
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
4604
5208
|
"div",
|
|
4605
5209
|
{
|
|
4606
5210
|
className: "flex flex-col",
|
|
4607
5211
|
style: { fontFamily: "'Manrope', sans-serif" }
|
|
4608
5212
|
},
|
|
4609
|
-
/* @__PURE__ */
|
|
5213
|
+
/* @__PURE__ */ import_react30.default.createElement(
|
|
4610
5214
|
"h3",
|
|
4611
5215
|
{
|
|
4612
5216
|
className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
|
|
@@ -4628,15 +5232,15 @@ function StanceAccordion({
|
|
|
4628
5232
|
if (topic.topic_key) return q.issue === topic.topic_key;
|
|
4629
5233
|
return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
|
|
4630
5234
|
}) : [];
|
|
4631
|
-
return /* @__PURE__ */
|
|
5235
|
+
return /* @__PURE__ */ import_react30.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react30.default.createElement(
|
|
4632
5236
|
"button",
|
|
4633
5237
|
{
|
|
4634
5238
|
type: "button",
|
|
4635
5239
|
onClick: () => handleToggle(topicId),
|
|
4636
5240
|
className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
|
|
4637
5241
|
},
|
|
4638
|
-
/* @__PURE__ */
|
|
4639
|
-
/* @__PURE__ */
|
|
5242
|
+
/* @__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)),
|
|
5243
|
+
/* @__PURE__ */ import_react30.default.createElement(
|
|
4640
5244
|
"svg",
|
|
4641
5245
|
{
|
|
4642
5246
|
width: "16",
|
|
@@ -4653,9 +5257,9 @@ function StanceAccordion({
|
|
|
4653
5257
|
transition: "transform 0.2s ease"
|
|
4654
5258
|
}
|
|
4655
5259
|
},
|
|
4656
|
-
/* @__PURE__ */
|
|
5260
|
+
/* @__PURE__ */ import_react30.default.createElement("polyline", { points: "9 18 15 12 9 6" })
|
|
4657
5261
|
)
|
|
4658
|
-
), /* @__PURE__ */
|
|
5262
|
+
), /* @__PURE__ */ import_react30.default.createElement(
|
|
4659
5263
|
"div",
|
|
4660
5264
|
{
|
|
4661
5265
|
style: {
|
|
@@ -4664,7 +5268,7 @@ function StanceAccordion({
|
|
|
4664
5268
|
transition: "grid-template-rows 0.25s ease"
|
|
4665
5269
|
}
|
|
4666
5270
|
},
|
|
4667
|
-
/* @__PURE__ */
|
|
5271
|
+
/* @__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(
|
|
4668
5272
|
"div",
|
|
4669
5273
|
{
|
|
4670
5274
|
style: {
|
|
@@ -4676,14 +5280,14 @@ function StanceAccordion({
|
|
|
4676
5280
|
animation: "ev-spin 0.8s linear infinite"
|
|
4677
5281
|
}
|
|
4678
5282
|
}
|
|
4679
|
-
)), !isLoading && cached && /* @__PURE__ */
|
|
5283
|
+
)), !isLoading && cached && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react30.default.createElement(
|
|
4680
5284
|
"p",
|
|
4681
5285
|
{
|
|
4682
5286
|
className: "text-sm text-neutral-700 mb-3",
|
|
4683
5287
|
style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
|
|
4684
5288
|
},
|
|
4685
5289
|
cached.reasoning
|
|
4686
|
-
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */
|
|
5290
|
+
) : 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(
|
|
4687
5291
|
"a",
|
|
4688
5292
|
{
|
|
4689
5293
|
href: src,
|
|
@@ -4691,9 +5295,9 @@ function StanceAccordion({
|
|
|
4691
5295
|
rel: "noreferrer",
|
|
4692
5296
|
className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
|
|
4693
5297
|
},
|
|
4694
|
-
/* @__PURE__ */
|
|
4695
|
-
/* @__PURE__ */
|
|
4696
|
-
))))), topicQuotes.length > 0 && /* @__PURE__ */
|
|
5298
|
+
/* @__PURE__ */ import_react30.default.createElement(Favicon, { url: src }),
|
|
5299
|
+
/* @__PURE__ */ import_react30.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
|
|
5300
|
+
))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react30.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react30.default.createElement(
|
|
4697
5301
|
"p",
|
|
4698
5302
|
{
|
|
4699
5303
|
style: {
|
|
@@ -4710,7 +5314,7 @@ function StanceAccordion({
|
|
|
4710
5314
|
const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
|
|
4711
5315
|
const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
|
|
4712
5316
|
const sourceName = quote.source_name || quote.sourceName;
|
|
4713
|
-
return /* @__PURE__ */
|
|
5317
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
4714
5318
|
"div",
|
|
4715
5319
|
{
|
|
4716
5320
|
key: quote.id,
|
|
@@ -4722,7 +5326,7 @@ function StanceAccordion({
|
|
|
4722
5326
|
marginBottom: "8px"
|
|
4723
5327
|
}
|
|
4724
5328
|
},
|
|
4725
|
-
/* @__PURE__ */
|
|
5329
|
+
/* @__PURE__ */ import_react30.default.createElement(
|
|
4726
5330
|
"p",
|
|
4727
5331
|
{
|
|
4728
5332
|
style: {
|
|
@@ -4735,7 +5339,7 @@ function StanceAccordion({
|
|
|
4735
5339
|
},
|
|
4736
5340
|
quote.text
|
|
4737
5341
|
),
|
|
4738
|
-
verdict === "agreed" && /* @__PURE__ */
|
|
5342
|
+
verdict === "agreed" && /* @__PURE__ */ import_react30.default.createElement(
|
|
4739
5343
|
"span",
|
|
4740
5344
|
{
|
|
4741
5345
|
style: {
|
|
@@ -4752,10 +5356,10 @@ function StanceAccordion({
|
|
|
4752
5356
|
flexShrink: 0
|
|
4753
5357
|
}
|
|
4754
5358
|
},
|
|
4755
|
-
/* @__PURE__ */
|
|
5359
|
+
/* @__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" })),
|
|
4756
5360
|
"Agreed"
|
|
4757
5361
|
),
|
|
4758
|
-
verdict === "disagreed" && /* @__PURE__ */
|
|
5362
|
+
verdict === "disagreed" && /* @__PURE__ */ import_react30.default.createElement(
|
|
4759
5363
|
"span",
|
|
4760
5364
|
{
|
|
4761
5365
|
style: {
|
|
@@ -4772,10 +5376,10 @@ function StanceAccordion({
|
|
|
4772
5376
|
flexShrink: 0
|
|
4773
5377
|
}
|
|
4774
5378
|
},
|
|
4775
|
-
/* @__PURE__ */
|
|
5379
|
+
/* @__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" })),
|
|
4776
5380
|
"Disagreed"
|
|
4777
5381
|
),
|
|
4778
|
-
sourceName && /* @__PURE__ */
|
|
5382
|
+
sourceName && /* @__PURE__ */ import_react30.default.createElement(
|
|
4779
5383
|
"a",
|
|
4780
5384
|
{
|
|
4781
5385
|
href: quote.source_url || quote.sourceUrl,
|
|
@@ -4792,10 +5396,10 @@ function StanceAccordion({
|
|
|
4792
5396
|
sourceName
|
|
4793
5397
|
)
|
|
4794
5398
|
);
|
|
4795
|
-
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */
|
|
5399
|
+
})), !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."))))
|
|
4796
5400
|
));
|
|
4797
5401
|
}),
|
|
4798
|
-
hasToggle && /* @__PURE__ */
|
|
5402
|
+
hasToggle && /* @__PURE__ */ import_react30.default.createElement(
|
|
4799
5403
|
"button",
|
|
4800
5404
|
{
|
|
4801
5405
|
type: "button",
|
|
@@ -4807,78 +5411,6 @@ function StanceAccordion({
|
|
|
4807
5411
|
)
|
|
4808
5412
|
);
|
|
4809
5413
|
}
|
|
4810
|
-
|
|
4811
|
-
// src/icons.js
|
|
4812
|
-
var import_react25 = __toESM(require("react"));
|
|
4813
|
-
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
4814
|
-
return /* @__PURE__ */ import_react25.default.createElement(
|
|
4815
|
-
"svg",
|
|
4816
|
-
{
|
|
4817
|
-
width: size,
|
|
4818
|
-
height: size,
|
|
4819
|
-
viewBox: "0 0 24 24",
|
|
4820
|
-
fill: "none",
|
|
4821
|
-
stroke: color,
|
|
4822
|
-
strokeWidth: "2",
|
|
4823
|
-
strokeLinecap: "round",
|
|
4824
|
-
strokeLinejoin: "round",
|
|
4825
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4826
|
-
},
|
|
4827
|
-
/* @__PURE__ */ import_react25.default.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
4828
|
-
/* @__PURE__ */ import_react25.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
4829
|
-
/* @__PURE__ */ import_react25.default.createElement("path", { d: "M22 19H2" })
|
|
4830
|
-
);
|
|
4831
|
-
}
|
|
4832
|
-
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
4833
|
-
return /* @__PURE__ */ import_react25.default.createElement(
|
|
4834
|
-
"svg",
|
|
4835
|
-
{
|
|
4836
|
-
width: size,
|
|
4837
|
-
height: size,
|
|
4838
|
-
viewBox: "0 0 24 24",
|
|
4839
|
-
fill: "none",
|
|
4840
|
-
stroke: color,
|
|
4841
|
-
strokeWidth: "2",
|
|
4842
|
-
strokeLinecap: "round",
|
|
4843
|
-
strokeLinejoin: "round",
|
|
4844
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4845
|
-
},
|
|
4846
|
-
/* @__PURE__ */ import_react25.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
4847
|
-
/* @__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" })
|
|
4848
|
-
);
|
|
4849
|
-
}
|
|
4850
|
-
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
4851
|
-
let paths;
|
|
4852
|
-
switch (branch) {
|
|
4853
|
-
case "executive":
|
|
4854
|
-
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" }));
|
|
4855
|
-
break;
|
|
4856
|
-
case "legislative":
|
|
4857
|
-
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" }));
|
|
4858
|
-
break;
|
|
4859
|
-
case "judicial":
|
|
4860
|
-
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" }));
|
|
4861
|
-
break;
|
|
4862
|
-
default:
|
|
4863
|
-
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" }));
|
|
4864
|
-
break;
|
|
4865
|
-
}
|
|
4866
|
-
return /* @__PURE__ */ import_react25.default.createElement(
|
|
4867
|
-
"svg",
|
|
4868
|
-
{
|
|
4869
|
-
width: size,
|
|
4870
|
-
height: size,
|
|
4871
|
-
viewBox: "0 0 24 24",
|
|
4872
|
-
fill: "none",
|
|
4873
|
-
stroke: color,
|
|
4874
|
-
strokeWidth: "2",
|
|
4875
|
-
strokeLinecap: "round",
|
|
4876
|
-
strokeLinejoin: "round",
|
|
4877
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
4878
|
-
},
|
|
4879
|
-
paths
|
|
4880
|
-
);
|
|
4881
|
-
}
|
|
4882
5414
|
// Annotate the CommonJS export names for ESM import in node:
|
|
4883
5415
|
0 && (module.exports = {
|
|
4884
5416
|
AuthForm,
|
|
@@ -4886,12 +5418,14 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
|
4886
5418
|
BranchIcon,
|
|
4887
5419
|
CategorySection,
|
|
4888
5420
|
CommitteeTable,
|
|
5421
|
+
CompassCardHorizontal,
|
|
4889
5422
|
CompassCoverageCallout,
|
|
4890
5423
|
CompassIcon,
|
|
4891
5424
|
ExpandCompassNudge,
|
|
4892
5425
|
FilterSidebar,
|
|
4893
5426
|
GovernmentBodySection,
|
|
4894
5427
|
Header,
|
|
5428
|
+
IconOverlay,
|
|
4895
5429
|
IssueTags,
|
|
4896
5430
|
JudicialRecordDetail,
|
|
4897
5431
|
JudicialScorecard,
|