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