@empoweredvote/ev-ui 0.8.12 → 0.8.14
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 +602 -667
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +224 -289
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -90,8 +90,36 @@ __export(index_exports, {
|
|
|
90
90
|
module.exports = __toCommonJS(index_exports);
|
|
91
91
|
|
|
92
92
|
// src/RadarChartCore.jsx
|
|
93
|
-
var
|
|
93
|
+
var import_react2 = __toESM(require("react"));
|
|
94
94
|
var import_web = require("@react-spring/web");
|
|
95
|
+
var import_react3 = require("react");
|
|
96
|
+
|
|
97
|
+
// src/useTheme.js
|
|
98
|
+
var import_react = require("react");
|
|
99
|
+
function useTheme() {
|
|
100
|
+
const read = () => {
|
|
101
|
+
if (typeof document === "undefined") return false;
|
|
102
|
+
const root = document.documentElement;
|
|
103
|
+
const body = document.body;
|
|
104
|
+
const hasDarkClass = (el) => el && el.classList && el.classList.contains("dark");
|
|
105
|
+
const hasDarkAttr = (el) => el && el.getAttribute && el.getAttribute("data-theme") === "dark";
|
|
106
|
+
return hasDarkClass(root) || hasDarkAttr(root) || hasDarkClass(body) || hasDarkAttr(body);
|
|
107
|
+
};
|
|
108
|
+
const [isDark, setIsDark] = (0, import_react.useState)(read);
|
|
109
|
+
(0, import_react.useEffect)(() => {
|
|
110
|
+
if (typeof document === "undefined" || typeof MutationObserver === "undefined") return;
|
|
111
|
+
const update = () => setIsDark(read());
|
|
112
|
+
update();
|
|
113
|
+
const observer = new MutationObserver(update);
|
|
114
|
+
const opts = { attributes: true, attributeFilter: ["class", "data-theme"] };
|
|
115
|
+
observer.observe(document.documentElement, opts);
|
|
116
|
+
if (document.body) observer.observe(document.body, opts);
|
|
117
|
+
return () => observer.disconnect();
|
|
118
|
+
}, []);
|
|
119
|
+
return { isDark };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// src/RadarChartCore.jsx
|
|
95
123
|
function RadarChartCore({
|
|
96
124
|
topics,
|
|
97
125
|
data,
|
|
@@ -103,95 +131,83 @@ function RadarChartCore({
|
|
|
103
131
|
onReplaceTopic = () => {
|
|
104
132
|
},
|
|
105
133
|
size = 400,
|
|
106
|
-
labelFontSize =
|
|
134
|
+
labelFontSize = 18,
|
|
107
135
|
padding = 80,
|
|
108
|
-
labelOffset =
|
|
109
|
-
tightFit = false
|
|
110
|
-
activeSpoke = null,
|
|
111
|
-
writeIns = {},
|
|
112
|
-
darkMode = false,
|
|
113
|
-
lineColor,
|
|
114
|
-
ringColor,
|
|
115
|
-
// replacedSpokes: short_titles of substitute spokes (not the user's original defaults)
|
|
116
|
-
replacedSpokes = {},
|
|
117
|
-
// boldOriginalSpokes: when true, bold spokes that are NOT replacements
|
|
118
|
-
boldOriginalSpokes = false,
|
|
119
|
-
highlightedSpoke = null
|
|
136
|
+
labelOffset = 20,
|
|
137
|
+
tightFit = false
|
|
120
138
|
}) {
|
|
121
|
-
|
|
139
|
+
const { isDark } = useTheme();
|
|
122
140
|
const radius = size / 2 - 40;
|
|
123
|
-
const extRadius = radius * 1.15;
|
|
124
141
|
const centerX = size / 2;
|
|
125
142
|
const centerY = size / 2;
|
|
126
|
-
const [tooltip, setTooltip] = (0, import_react.useState)(null);
|
|
127
143
|
const spokes = Object.entries(data);
|
|
128
144
|
const numSpokes = Math.max(spokes.length, 1);
|
|
129
|
-
const prevCountRef = (0,
|
|
145
|
+
const prevCountRef = (0, import_react3.useRef)(numSpokes);
|
|
130
146
|
const countChanged = numSpokes !== prevCountRef.current;
|
|
131
|
-
(0,
|
|
147
|
+
(0, import_react3.useEffect)(() => {
|
|
132
148
|
prevCountRef.current = numSpokes;
|
|
133
149
|
}, [numSpokes]);
|
|
134
|
-
function calcAdjusted(value, shortTitle) {
|
|
135
|
-
var _a2;
|
|
136
|
-
if (!value || Number(value) === 0) return 0;
|
|
137
|
-
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
138
|
-
const max = ((_a2 = topic == null ? void 0 : topic.stances) == null ? void 0 : _a2.length) || 10;
|
|
139
|
-
const pct = Number(value) / max * 10;
|
|
140
|
-
return invertedSpokes[shortTitle] ? (max + 1) * 10 / max - pct : pct;
|
|
141
|
-
}
|
|
142
150
|
const pointsArr = spokes.map(([shortTitle, value], index) => {
|
|
143
|
-
|
|
144
|
-
const
|
|
151
|
+
var _a;
|
|
152
|
+
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
153
|
+
const max = ((_a = topic == null ? void 0 : topic.stances) == null ? void 0 : _a.length) || 10;
|
|
154
|
+
const pct = Math.min(value / max * 10, 10);
|
|
145
155
|
const angle = 2 * Math.PI * index / numSpokes;
|
|
146
|
-
|
|
156
|
+
const adjusted = value === 0 ? 0 : invertedSpokes[shortTitle] ? 11 - pct : pct;
|
|
157
|
+
const r = adjusted / 10 * radius;
|
|
158
|
+
const x = centerX + r * Math.sin(angle);
|
|
159
|
+
const y = centerY - r * Math.cos(angle);
|
|
160
|
+
return [x, y];
|
|
147
161
|
});
|
|
148
162
|
const targetPoints = pointsArr.map((p) => p.join(",")).join(" ");
|
|
149
|
-
const
|
|
163
|
+
const spring = (0, import_web.useSpring)({
|
|
150
164
|
to: { points: targetPoints },
|
|
151
165
|
immediate: countChanged,
|
|
166
|
+
reset: countChanged,
|
|
152
167
|
config: { tension: 300, friction: 30 }
|
|
153
|
-
};
|
|
154
|
-
if (countChanged) springBase.from = { points: targetPoints };
|
|
155
|
-
const spring = (0, import_web.useSpring)(springBase);
|
|
168
|
+
});
|
|
156
169
|
const hasCompareData = Object.keys(compareData).length > 0;
|
|
157
170
|
const centerPoints = spokes.map(() => `${centerX},${centerY}`).join(" ");
|
|
158
171
|
let comparePoints = null;
|
|
159
172
|
let compareCoords = null;
|
|
160
173
|
if (hasCompareData) {
|
|
161
174
|
const ccoords = spokes.map(([shortTitle], index) => {
|
|
162
|
-
var
|
|
163
|
-
const value = (
|
|
164
|
-
const
|
|
165
|
-
const
|
|
175
|
+
var _a, _b;
|
|
176
|
+
const value = (_a = compareData[shortTitle]) != null ? _a : 0;
|
|
177
|
+
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
178
|
+
const max = ((_b = topic == null ? void 0 : topic.stances) == null ? void 0 : _b.length) || 10;
|
|
179
|
+
const pct = Math.min(value / max * 10, 10);
|
|
166
180
|
const angle = 2 * Math.PI * index / numSpokes;
|
|
167
|
-
|
|
181
|
+
const adjusted = value === 0 ? 0 : invertedSpokes[shortTitle] ? 11 - pct : pct;
|
|
182
|
+
const r = adjusted / 10 * radius;
|
|
183
|
+
const x = centerX + r * Math.sin(angle);
|
|
184
|
+
const y = centerY - r * Math.cos(angle);
|
|
185
|
+
return [x, y];
|
|
168
186
|
});
|
|
169
187
|
compareCoords = ccoords;
|
|
170
188
|
comparePoints = ccoords.map((p) => p.join(",")).join(" ");
|
|
171
189
|
}
|
|
172
|
-
const hadCompareDataRef = (0,
|
|
190
|
+
const hadCompareDataRef = (0, import_react3.useRef)(false);
|
|
173
191
|
const compareJustAppeared = hasCompareData && !hadCompareDataRef.current;
|
|
174
|
-
(0,
|
|
192
|
+
(0, import_react3.useEffect)(() => {
|
|
175
193
|
hadCompareDataRef.current = hasCompareData;
|
|
176
194
|
}, [hasCompareData]);
|
|
177
|
-
const
|
|
195
|
+
const compareSpring = (0, import_web.useSpring)({
|
|
178
196
|
to: { points: comparePoints || centerPoints || `${centerX},${centerY}` },
|
|
179
197
|
immediate: countChanged || compareJustAppeared,
|
|
198
|
+
reset: countChanged || compareJustAppeared,
|
|
180
199
|
config: { tension: 300, friction: 30 }
|
|
181
|
-
};
|
|
182
|
-
if (countChanged || compareJustAppeared) compareSpringBase.from = compareSpringBase.to;
|
|
183
|
-
const compareSpring = (0, import_web.useSpring)(compareSpringBase);
|
|
184
|
-
const spokeExtension = spokes.reduce((acc, [shortTitle]) => {
|
|
185
|
-
const userAdj = calcAdjusted(data[shortTitle], shortTitle);
|
|
186
|
-
const cmpAdj = hasCompareData && compareData[shortTitle] ? calcAdjusted(compareData[shortTitle], shortTitle) : 0;
|
|
187
|
-
acc[shortTitle] = userAdj > 10 || cmpAdj > 10;
|
|
188
|
-
return acc;
|
|
189
|
-
}, {});
|
|
200
|
+
});
|
|
190
201
|
const labelMeta = spokes.map(([shortTitle], i) => {
|
|
191
202
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
203
|
+
const baseFSize = labelFontSize;
|
|
192
204
|
const lines = wrapLabel(shortTitle, 12);
|
|
193
|
-
const longestLineLen = lines.reduce(
|
|
194
|
-
|
|
205
|
+
const longestLineLen = lines.reduce(
|
|
206
|
+
(max, ln) => ln.length > max ? ln.length : max,
|
|
207
|
+
0
|
|
208
|
+
);
|
|
209
|
+
const fSize = adaptiveFontSize(longestLineLen, baseFSize);
|
|
210
|
+
const estimatedWidth = longestLineLen * fSize * 0.6;
|
|
195
211
|
const sinA = Math.sin(angle);
|
|
196
212
|
const side = sinA < -0.1 ? "left" : sinA > 0.1 ? "right" : "center";
|
|
197
213
|
return { estimatedWidth, side };
|
|
@@ -200,9 +216,23 @@ function RadarChartCore({
|
|
|
200
216
|
const rightLabelWidths = labelMeta.filter((m) => m.side === "right").map((m) => m.estimatedWidth);
|
|
201
217
|
const minPadding = 40;
|
|
202
218
|
const maxPadding = padding * 2;
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
219
|
+
const rawLeftPadding = Math.min(
|
|
220
|
+
Math.max(
|
|
221
|
+
leftLabelWidths.length ? Math.max(...leftLabelWidths) + labelOffset : 0,
|
|
222
|
+
minPadding
|
|
223
|
+
),
|
|
224
|
+
maxPadding
|
|
225
|
+
);
|
|
226
|
+
const rawRightPadding = Math.min(
|
|
227
|
+
Math.max(
|
|
228
|
+
rightLabelWidths.length ? Math.max(...rightLabelWidths) + labelOffset : 0,
|
|
229
|
+
minPadding
|
|
230
|
+
),
|
|
231
|
+
maxPadding
|
|
232
|
+
);
|
|
233
|
+
const symmetricPadding = Math.max(rawLeftPadding, rawRightPadding);
|
|
234
|
+
const leftPadding = symmetricPadding;
|
|
235
|
+
const rightPadding = symmetricPadding;
|
|
206
236
|
const verticalPadding = padding;
|
|
207
237
|
let tightTop = -verticalPadding;
|
|
208
238
|
let tightHeight = size + verticalPadding * 2;
|
|
@@ -210,12 +240,11 @@ function RadarChartCore({
|
|
|
210
240
|
let yMin = Infinity, yMax = -Infinity;
|
|
211
241
|
for (let i = 0; i < numSpokes; i++) {
|
|
212
242
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
213
|
-
const
|
|
214
|
-
const y = centerY - effectiveR * Math.cos(angle);
|
|
243
|
+
const y = centerY - radius * Math.cos(angle);
|
|
215
244
|
if (y < yMin) yMin = y;
|
|
216
245
|
if (y > yMax) yMax = y;
|
|
217
246
|
}
|
|
218
|
-
const labelMargin = labelOffset + labelFontSize *
|
|
247
|
+
const labelMargin = labelOffset + labelFontSize * 1.4 + labelFontSize * 1.1;
|
|
219
248
|
tightTop = yMin - labelMargin;
|
|
220
249
|
tightHeight = yMax + labelMargin - tightTop;
|
|
221
250
|
}
|
|
@@ -225,111 +254,101 @@ function RadarChartCore({
|
|
|
225
254
|
const ring = [];
|
|
226
255
|
for (let i = 0; i < numSpokes; i++) {
|
|
227
256
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
228
|
-
|
|
257
|
+
const x = centerX + radius * scale * Math.sin(angle);
|
|
258
|
+
const y = centerY - radius * scale * Math.cos(angle);
|
|
259
|
+
ring.push(`${x},${y}`);
|
|
229
260
|
}
|
|
230
261
|
guidePolygons.push(
|
|
231
|
-
/* @__PURE__ */
|
|
262
|
+
/* @__PURE__ */ import_react2.default.createElement("polygon", { key: level, points: ring.join(" "), fill: "none", stroke: isDark ? "#374151" : "#ccc" })
|
|
232
263
|
);
|
|
233
264
|
}
|
|
234
|
-
|
|
235
|
-
if (writeIns[shortTitle]) return writeIns[shortTitle];
|
|
236
|
-
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
237
|
-
const stances = (topic == null ? void 0 : topic.stances) || [];
|
|
238
|
-
const idx = Math.round(Number(value)) - 1;
|
|
239
|
-
if (idx >= 0 && idx < stances.length) {
|
|
240
|
-
return stances[idx].text || shortTitle;
|
|
241
|
-
}
|
|
242
|
-
return shortTitle;
|
|
243
|
-
};
|
|
244
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
265
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
245
266
|
"svg",
|
|
246
267
|
{
|
|
247
268
|
className: "w-full h-auto max-h-full",
|
|
248
|
-
viewBox: `-${
|
|
249
|
-
preserveAspectRatio: "xMidYMid meet"
|
|
250
|
-
onMouseLeave: () => setTooltip(null)
|
|
269
|
+
viewBox: `-${leftPadding} ${tightTop} ${size + leftPadding + rightPadding} ${tightHeight}`,
|
|
270
|
+
preserveAspectRatio: "xMidYMid meet"
|
|
251
271
|
},
|
|
252
272
|
guidePolygons,
|
|
253
273
|
spokes.map(([shortTitle], i) => {
|
|
254
274
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
255
|
-
const
|
|
256
|
-
const
|
|
275
|
+
const x = centerX + radius * Math.sin(angle);
|
|
276
|
+
const y = centerY - radius * Math.cos(angle);
|
|
257
277
|
const isUnanswered = !!unansweredSpokes[shortTitle];
|
|
258
|
-
|
|
259
|
-
const extX = centerX + extRadius * Math.sin(angle);
|
|
260
|
-
const extY = centerY - extRadius * Math.cos(angle);
|
|
261
|
-
return /* @__PURE__ */ import_react.default.createElement("g", { key: `spoke-${shortTitle}` }, /* @__PURE__ */ import_react.default.createElement(
|
|
278
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
262
279
|
"line",
|
|
263
280
|
{
|
|
281
|
+
key: `line-${shortTitle}`,
|
|
264
282
|
x1: centerX,
|
|
265
283
|
y1: centerY,
|
|
266
|
-
x2:
|
|
267
|
-
y2:
|
|
268
|
-
stroke: isUnanswered ? "#
|
|
284
|
+
x2: x,
|
|
285
|
+
y2: y,
|
|
286
|
+
stroke: isUnanswered ? isDark ? "#6b7280" : "#9ca3af" : isDark ? "#d1d5db" : "black",
|
|
269
287
|
strokeDasharray: isUnanswered ? "4 3" : void 0,
|
|
270
288
|
opacity: isUnanswered ? 0.6 : 1
|
|
271
289
|
}
|
|
272
|
-
)
|
|
273
|
-
"line",
|
|
274
|
-
{
|
|
275
|
-
x1: endX,
|
|
276
|
-
y1: endY,
|
|
277
|
-
x2: extX,
|
|
278
|
-
y2: extY,
|
|
279
|
-
stroke: "#aaa",
|
|
280
|
-
strokeDasharray: "4 4",
|
|
281
|
-
opacity: 0.4
|
|
282
|
-
}
|
|
283
|
-
));
|
|
290
|
+
);
|
|
284
291
|
}),
|
|
285
292
|
spokes.map(([shortTitle], i) => {
|
|
286
293
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
294
|
+
const anchor = angle > Math.PI ? "end" : angle < Math.PI && angle > 0 ? "start" : "middle";
|
|
287
295
|
const cosA = Math.cos(angle);
|
|
288
|
-
const isBottom = cosA < -0.5;
|
|
289
296
|
const isTop = cosA > 0.5;
|
|
297
|
+
const isBottom = cosA < -0.5;
|
|
298
|
+
const baseFSize = labelFontSize;
|
|
290
299
|
const lines = wrapLabel(shortTitle, 12);
|
|
291
|
-
const longestLine = lines.reduce(
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
300
|
+
const longestLine = lines.reduce(
|
|
301
|
+
(max, ln) => ln.length > max ? ln.length : max,
|
|
302
|
+
0
|
|
303
|
+
);
|
|
304
|
+
const fSize = adaptiveFontSize(longestLine, baseFSize);
|
|
305
|
+
const lineHeight = fSize * 1.1;
|
|
306
|
+
const dynamicLabelOffset = lines.length > 1 ? labelOffset + 8 : labelOffset;
|
|
307
|
+
const offset2 = radius + dynamicLabelOffset;
|
|
295
308
|
const labelX = centerX + offset2 * Math.sin(angle);
|
|
296
309
|
let labelY = centerY - offset2 * Math.cos(angle);
|
|
297
|
-
if (isTop && lines.length > 1)
|
|
298
|
-
|
|
310
|
+
if (isTop && lines.length > 1) {
|
|
311
|
+
labelY -= (lines.length - 1) * lineHeight;
|
|
312
|
+
}
|
|
299
313
|
const isUnansweredLabel = !!unansweredSpokes[shortTitle];
|
|
300
|
-
|
|
301
|
-
const shouldBold = boldOriginalSpokes && !isReplaced;
|
|
302
|
-
const fSize = labelFontSize;
|
|
303
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
314
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
304
315
|
"text",
|
|
305
316
|
{
|
|
306
317
|
key: `label-${shortTitle}`,
|
|
307
318
|
x: labelX,
|
|
308
319
|
y: labelY,
|
|
309
|
-
textAnchor:
|
|
320
|
+
textAnchor: anchor,
|
|
310
321
|
dominantBaseline: isBottom ? "hanging" : "auto",
|
|
311
322
|
onClick: () => onReplaceTopic(shortTitle),
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
style: { cursor: "pointer", userSelect: "none", fontSize: fSize
|
|
323
|
+
className: "text-xl font-medium mb-1 md:text-base md:font-normal",
|
|
324
|
+
fill: isUnansweredLabel ? isDark ? "#6b7280" : "#9ca3af" : isDark ? "#d1d5db" : void 0,
|
|
325
|
+
style: { cursor: "pointer", userSelect: "none", fontSize: fSize }
|
|
315
326
|
},
|
|
316
|
-
isUnansweredLabel && /* @__PURE__ */
|
|
317
|
-
lines.map((ln, idx) => /* @__PURE__ */
|
|
327
|
+
isUnansweredLabel && /* @__PURE__ */ import_react2.default.createElement("title", null, "No stance on file for this topic."),
|
|
328
|
+
lines.map((ln, idx) => /* @__PURE__ */ import_react2.default.createElement("tspan", { key: idx, x: labelX, dy: idx === 0 ? "0" : `${lineHeight}` }, ln))
|
|
318
329
|
);
|
|
319
330
|
}),
|
|
320
|
-
countChanged ? /* @__PURE__ */
|
|
331
|
+
countChanged ? /* @__PURE__ */ import_react2.default.createElement(
|
|
321
332
|
"polygon",
|
|
322
333
|
{
|
|
323
334
|
key: "user-static",
|
|
324
335
|
points: targetPoints,
|
|
325
|
-
style: {
|
|
336
|
+
style: {
|
|
337
|
+
fill: "rgba(124, 107, 158, 0.4)",
|
|
338
|
+
stroke: "#7C6B9E",
|
|
339
|
+
strokeWidth: 3
|
|
340
|
+
}
|
|
326
341
|
}
|
|
327
|
-
) : /* @__PURE__ */
|
|
342
|
+
) : /* @__PURE__ */ import_react2.default.createElement(
|
|
328
343
|
import_web.animated.polygon,
|
|
329
344
|
{
|
|
330
345
|
key: "user-animated",
|
|
331
346
|
points: spring.points,
|
|
332
|
-
style: {
|
|
347
|
+
style: {
|
|
348
|
+
fill: "rgba(124, 107, 158, 0.4)",
|
|
349
|
+
stroke: "#7C6B9E",
|
|
350
|
+
strokeWidth: 3
|
|
351
|
+
}
|
|
333
352
|
}
|
|
334
353
|
),
|
|
335
354
|
pointsArr.map(([cx, cy], i) => {
|
|
@@ -338,42 +357,39 @@ function RadarChartCore({
|
|
|
338
357
|
if (!userVal || Number(userVal) === 0) return null;
|
|
339
358
|
const compareVal = compareData[shortTitle];
|
|
340
359
|
const matches = hasCompareData && userVal !== 0 && compareVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
|
|
341
|
-
return /* @__PURE__ */
|
|
360
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
342
361
|
"circle",
|
|
343
362
|
{
|
|
344
363
|
key: `user-dot-${i}`,
|
|
345
364
|
cx,
|
|
346
365
|
cy,
|
|
347
|
-
r: matches ?
|
|
366
|
+
r: matches ? 8 : 7,
|
|
348
367
|
fill: matches ? "#fed12e" : "#7C6B9E",
|
|
349
368
|
stroke: "#FFFFFF",
|
|
350
|
-
strokeWidth:
|
|
351
|
-
style: { pointerEvents: "none" }
|
|
369
|
+
strokeWidth: 3
|
|
352
370
|
}
|
|
353
371
|
);
|
|
354
372
|
}),
|
|
355
|
-
hasCompareData && comparePoints ? countChanged || compareJustAppeared ? /* @__PURE__ */
|
|
373
|
+
hasCompareData && comparePoints ? countChanged || compareJustAppeared ? /* @__PURE__ */ import_react2.default.createElement(
|
|
356
374
|
"polygon",
|
|
357
375
|
{
|
|
358
376
|
key: "compare-static",
|
|
359
377
|
points: comparePoints,
|
|
360
378
|
style: {
|
|
361
|
-
fill:
|
|
362
|
-
stroke:
|
|
363
|
-
strokeWidth: 2
|
|
364
|
-
mixBlendMode: darkMode ? "normal" : "multiply"
|
|
379
|
+
fill: "rgba(90, 154, 110, 0.3)",
|
|
380
|
+
stroke: "#5A9A6E",
|
|
381
|
+
strokeWidth: 2
|
|
365
382
|
}
|
|
366
383
|
}
|
|
367
|
-
) : /* @__PURE__ */
|
|
384
|
+
) : /* @__PURE__ */ import_react2.default.createElement(
|
|
368
385
|
import_web.animated.polygon,
|
|
369
386
|
{
|
|
370
387
|
key: "compare-animated",
|
|
371
388
|
points: compareSpring.points,
|
|
372
389
|
style: {
|
|
373
|
-
fill:
|
|
374
|
-
stroke:
|
|
375
|
-
strokeWidth: 2
|
|
376
|
-
mixBlendMode: darkMode ? "normal" : "multiply"
|
|
390
|
+
fill: "rgba(90, 154, 110, 0.3)",
|
|
391
|
+
stroke: "#5A9A6E",
|
|
392
|
+
strokeWidth: 2
|
|
377
393
|
}
|
|
378
394
|
}
|
|
379
395
|
) : null,
|
|
@@ -382,117 +398,45 @@ function RadarChartCore({
|
|
|
382
398
|
const userVal = spokes[i][1];
|
|
383
399
|
const compareVal = compareData[shortTitle];
|
|
384
400
|
if (!compareVal || Number(compareVal) === 0) return null;
|
|
385
|
-
const matches = userVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
|
|
386
|
-
return /* @__PURE__ */
|
|
401
|
+
const matches = userVal !== 0 && compareVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
|
|
402
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
387
403
|
"circle",
|
|
388
404
|
{
|
|
389
405
|
key: `compare-dot-${i}`,
|
|
390
406
|
cx,
|
|
391
407
|
cy,
|
|
392
|
-
r: matches ?
|
|
393
|
-
fill: matches ? "#fed12e" :
|
|
408
|
+
r: matches ? 8 : 7,
|
|
409
|
+
fill: matches ? "#fed12e" : "#5A9A6E",
|
|
394
410
|
stroke: "#FFFFFF",
|
|
395
|
-
strokeWidth:
|
|
396
|
-
style: { pointerEvents: "none" }
|
|
411
|
+
strokeWidth: 3
|
|
397
412
|
}
|
|
398
413
|
);
|
|
399
414
|
}),
|
|
400
415
|
spokes.map(([shortTitle], i) => {
|
|
401
416
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
402
|
-
const
|
|
403
|
-
const
|
|
417
|
+
const x = centerX + radius * Math.sin(angle);
|
|
418
|
+
const y = centerY - radius * Math.cos(angle);
|
|
404
419
|
const isUnansweredHitbox = !!unansweredSpokes[shortTitle];
|
|
405
|
-
return /* @__PURE__ */
|
|
420
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
406
421
|
"line",
|
|
407
422
|
{
|
|
408
423
|
key: `hitbox-${shortTitle}`,
|
|
409
424
|
x1: centerX,
|
|
410
425
|
y1: centerY,
|
|
411
|
-
x2:
|
|
412
|
-
y2:
|
|
426
|
+
x2: x,
|
|
427
|
+
y2: y,
|
|
413
428
|
stroke: "transparent",
|
|
414
429
|
strokeWidth: 14,
|
|
415
430
|
onClick: () => isUnansweredHitbox ? onReplaceTopic(shortTitle) : onToggleInversion(shortTitle),
|
|
416
431
|
style: { cursor: "pointer" }
|
|
417
432
|
}
|
|
418
433
|
);
|
|
419
|
-
})
|
|
420
|
-
pointsArr.map(([cx, cy], i) => {
|
|
421
|
-
const shortTitle = spokes[i][0];
|
|
422
|
-
const userVal = spokes[i][1];
|
|
423
|
-
if (!userVal || Number(userVal) === 0) return null;
|
|
424
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
425
|
-
"circle",
|
|
426
|
-
{
|
|
427
|
-
key: `user-sensor-${i}`,
|
|
428
|
-
cx,
|
|
429
|
-
cy,
|
|
430
|
-
r: 14,
|
|
431
|
-
fill: "transparent",
|
|
432
|
-
stroke: "none",
|
|
433
|
-
style: { cursor: "default" },
|
|
434
|
-
onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, userVal) }),
|
|
435
|
-
onMouseLeave: () => setTooltip(null)
|
|
436
|
-
}
|
|
437
|
-
);
|
|
438
|
-
}),
|
|
439
|
-
hasCompareData && compareCoords && compareCoords.map(([cx, cy], i) => {
|
|
440
|
-
const shortTitle = spokes[i][0];
|
|
441
|
-
const compareVal = compareData[shortTitle];
|
|
442
|
-
if (!compareVal || Number(compareVal) === 0) return null;
|
|
443
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
444
|
-
"circle",
|
|
445
|
-
{
|
|
446
|
-
key: `compare-sensor-${i}`,
|
|
447
|
-
cx,
|
|
448
|
-
cy,
|
|
449
|
-
r: 14,
|
|
450
|
-
fill: "transparent",
|
|
451
|
-
stroke: "none",
|
|
452
|
-
style: { cursor: "default" },
|
|
453
|
-
onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, compareVal) }),
|
|
454
|
-
onMouseLeave: () => setTooltip(null)
|
|
455
|
-
}
|
|
456
|
-
);
|
|
457
|
-
}),
|
|
458
|
-
tooltip && (() => {
|
|
459
|
-
const tipW = 190;
|
|
460
|
-
const tipH = 70;
|
|
461
|
-
const svgW = size + sidePadding * 2;
|
|
462
|
-
const tx = tooltip.x + sidePadding + 12 > svgW - tipW ? tooltip.x - tipW - 12 : tooltip.x + 12;
|
|
463
|
-
const ty = tooltip.y - 10;
|
|
464
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
465
|
-
"foreignObject",
|
|
466
|
-
{
|
|
467
|
-
x: tx,
|
|
468
|
-
y: ty,
|
|
469
|
-
width: tipW,
|
|
470
|
-
height: tipH,
|
|
471
|
-
style: { overflow: "visible", pointerEvents: "none" }
|
|
472
|
-
},
|
|
473
|
-
/* @__PURE__ */ import_react.default.createElement(
|
|
474
|
-
"div",
|
|
475
|
-
{
|
|
476
|
-
xmlns: "http://www.w3.org/1999/xhtml",
|
|
477
|
-
style: {
|
|
478
|
-
background: darkMode ? "#2F3237" : "#ffffff",
|
|
479
|
-
border: darkMode ? "1px solid #59B0C4" : "1px solid #d1d5db",
|
|
480
|
-
borderRadius: 8,
|
|
481
|
-
padding: "7px 11px",
|
|
482
|
-
fontSize: 12,
|
|
483
|
-
lineHeight: 1.4,
|
|
484
|
-
color: darkMode ? "#EBEDEF" : "#111",
|
|
485
|
-
boxShadow: darkMode ? "0 2px 12px rgba(0,0,0,0.4)" : "0 2px 8px rgba(0,0,0,0.12)",
|
|
486
|
-
width: tipW + "px",
|
|
487
|
-
wordWrap: "break-word"
|
|
488
|
-
}
|
|
489
|
-
},
|
|
490
|
-
tooltip.text
|
|
491
|
-
)
|
|
492
|
-
);
|
|
493
|
-
})()
|
|
434
|
+
})
|
|
494
435
|
);
|
|
495
436
|
}
|
|
437
|
+
function adaptiveFontSize(longestLineLen, baseFSize) {
|
|
438
|
+
return Math.max(baseFSize, 10);
|
|
439
|
+
}
|
|
496
440
|
function wrapLabel(label, maxChars = 12) {
|
|
497
441
|
const str = String(label);
|
|
498
442
|
let rawWords;
|
|
@@ -526,7 +470,7 @@ function wrapLabel(label, maxChars = 12) {
|
|
|
526
470
|
}
|
|
527
471
|
|
|
528
472
|
// src/Header.jsx
|
|
529
|
-
var
|
|
473
|
+
var import_react5 = __toESM(require("react"));
|
|
530
474
|
|
|
531
475
|
// src/tokens.js
|
|
532
476
|
var colorScales = {
|
|
@@ -922,13 +866,13 @@ var breakpoints = {
|
|
|
922
866
|
};
|
|
923
867
|
|
|
924
868
|
// src/useMediaQuery.js
|
|
925
|
-
var
|
|
869
|
+
var import_react4 = require("react");
|
|
926
870
|
function useMediaQuery(query) {
|
|
927
|
-
const [matches, setMatches] = (0,
|
|
871
|
+
const [matches, setMatches] = (0, import_react4.useState)(() => {
|
|
928
872
|
if (typeof window === "undefined") return false;
|
|
929
873
|
return window.matchMedia(query).matches;
|
|
930
874
|
});
|
|
931
|
-
(0,
|
|
875
|
+
(0, import_react4.useEffect)(() => {
|
|
932
876
|
if (typeof window === "undefined") return;
|
|
933
877
|
const mql = window.matchMedia(query);
|
|
934
878
|
const handler = (e) => setMatches(e.matches);
|
|
@@ -940,16 +884,6 @@ function useMediaQuery(query) {
|
|
|
940
884
|
}
|
|
941
885
|
|
|
942
886
|
// src/Header.jsx
|
|
943
|
-
var dark = {
|
|
944
|
-
bg: "#1C1F23",
|
|
945
|
-
bgElevated: "#2F3237",
|
|
946
|
-
bgHover: "#41454E",
|
|
947
|
-
border: "#41454E",
|
|
948
|
-
link: "#59B0C4",
|
|
949
|
-
text: "#D3D7DE",
|
|
950
|
-
textMuted: "#9CA3AF",
|
|
951
|
-
shadow: "0 10px 40px rgba(0,0,0,0.4)"
|
|
952
|
-
};
|
|
953
887
|
function Header({
|
|
954
888
|
logoSrc,
|
|
955
889
|
logoAlt = "Empowered Vote",
|
|
@@ -960,15 +894,14 @@ function Header({
|
|
|
960
894
|
currentPath,
|
|
961
895
|
onNavigate,
|
|
962
896
|
profileMenu,
|
|
963
|
-
darkMode = false,
|
|
964
897
|
style = {}
|
|
965
898
|
}) {
|
|
966
|
-
const [mobileMenuOpen, setMobileMenuOpen] = (0,
|
|
967
|
-
const [openDropdown, setOpenDropdown] = (0,
|
|
968
|
-
const [profileOpen, setProfileOpen] = (0,
|
|
899
|
+
const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react5.useState)(false);
|
|
900
|
+
const [openDropdown, setOpenDropdown] = (0, import_react5.useState)(null);
|
|
901
|
+
const [profileOpen, setProfileOpen] = (0, import_react5.useState)(false);
|
|
969
902
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
970
|
-
const profileRef = (0,
|
|
971
|
-
(0,
|
|
903
|
+
const profileRef = (0, import_react5.useRef)(null);
|
|
904
|
+
(0, import_react5.useEffect)(() => {
|
|
972
905
|
if (!profileOpen) return;
|
|
973
906
|
const handleClickOutside = (e) => {
|
|
974
907
|
if (profileRef.current && !profileRef.current.contains(e.target)) {
|
|
@@ -984,16 +917,9 @@ function Header({
|
|
|
984
917
|
onNavigate(href);
|
|
985
918
|
}
|
|
986
919
|
};
|
|
987
|
-
const linkColor = darkMode ? dark.link : colors.evTeal;
|
|
988
|
-
const dropdownBg = darkMode ? dark.bgElevated : colors.bgWhite;
|
|
989
|
-
const dropdownShadow = darkMode ? dark.shadow : "0 10px 40px rgba(0,0,0,0.1)";
|
|
990
|
-
const hoverBg = darkMode ? dark.bgHover : colors.bgLight;
|
|
991
|
-
const borderColor = darkMode ? dark.border : colors.borderLight;
|
|
992
|
-
const mobileShadow = darkMode ? "0 4px 20px rgba(0,0,0,0.4)" : "0 4px 20px rgba(0,0,0,0.1)";
|
|
993
920
|
const styles2 = {
|
|
994
921
|
header: {
|
|
995
|
-
backgroundColor:
|
|
996
|
-
borderBottom: darkMode ? `1px solid ${dark.border}` : "none",
|
|
922
|
+
backgroundColor: colors.bgWhite,
|
|
997
923
|
position: "sticky",
|
|
998
924
|
top: 0,
|
|
999
925
|
zIndex: 50,
|
|
@@ -1021,7 +947,7 @@ function Header({
|
|
|
1021
947
|
fontFamily: fonts.primary,
|
|
1022
948
|
fontWeight: fontWeights.bold,
|
|
1023
949
|
fontSize: fontSizes.xl,
|
|
1024
|
-
color:
|
|
950
|
+
color: colors.evTeal,
|
|
1025
951
|
textDecoration: "none",
|
|
1026
952
|
cursor: "pointer",
|
|
1027
953
|
display: "flex",
|
|
@@ -1044,12 +970,11 @@ function Header({
|
|
|
1044
970
|
zIndex: 100
|
|
1045
971
|
},
|
|
1046
972
|
dropdownInner: {
|
|
1047
|
-
backgroundColor:
|
|
973
|
+
backgroundColor: colors.bgWhite,
|
|
1048
974
|
borderRadius: borderRadius.lg,
|
|
1049
|
-
boxShadow:
|
|
975
|
+
boxShadow: "0 10px 40px rgba(0,0,0,0.1)",
|
|
1050
976
|
minWidth: "200px",
|
|
1051
|
-
padding: spacing[2]
|
|
1052
|
-
border: darkMode ? `1px solid ${dark.border}` : "none"
|
|
977
|
+
padding: spacing[2]
|
|
1053
978
|
},
|
|
1054
979
|
dropdownItem: {
|
|
1055
980
|
display: "block",
|
|
@@ -1057,7 +982,7 @@ function Header({
|
|
|
1057
982
|
fontFamily: fonts.primary,
|
|
1058
983
|
fontWeight: fontWeights.medium,
|
|
1059
984
|
fontSize: fontSizes.base,
|
|
1060
|
-
color:
|
|
985
|
+
color: colors.evTeal,
|
|
1061
986
|
textDecoration: "none",
|
|
1062
987
|
borderRadius: borderRadius.md,
|
|
1063
988
|
cursor: "pointer"
|
|
@@ -1079,13 +1004,13 @@ function Header({
|
|
|
1079
1004
|
display: "inline-flex",
|
|
1080
1005
|
alignItems: "center",
|
|
1081
1006
|
backgroundColor: "transparent",
|
|
1082
|
-
color:
|
|
1007
|
+
color: colors.evTeal,
|
|
1083
1008
|
fontFamily: fonts.primary,
|
|
1084
1009
|
fontWeight: fontWeights.bold,
|
|
1085
1010
|
fontSize: fontSizes.base,
|
|
1086
1011
|
padding: `${spacing[2]} ${spacing[5]}`,
|
|
1087
1012
|
borderRadius: borderRadius.full || "999px",
|
|
1088
|
-
border: `1.5px solid ${
|
|
1013
|
+
border: `1.5px solid ${colors.evTeal}`,
|
|
1089
1014
|
cursor: "pointer",
|
|
1090
1015
|
textDecoration: "none",
|
|
1091
1016
|
lineHeight: 1.2,
|
|
@@ -1101,7 +1026,7 @@ function Header({
|
|
|
1101
1026
|
hamburger: {
|
|
1102
1027
|
width: "24px",
|
|
1103
1028
|
height: "2px",
|
|
1104
|
-
backgroundColor:
|
|
1029
|
+
backgroundColor: colors.evTeal,
|
|
1105
1030
|
position: "relative"
|
|
1106
1031
|
},
|
|
1107
1032
|
mobileMenu: {
|
|
@@ -1111,26 +1036,25 @@ function Header({
|
|
|
1111
1036
|
top: "100%",
|
|
1112
1037
|
left: 0,
|
|
1113
1038
|
right: 0,
|
|
1114
|
-
backgroundColor:
|
|
1039
|
+
backgroundColor: colors.bgWhite,
|
|
1115
1040
|
padding: spacing[4],
|
|
1116
|
-
boxShadow:
|
|
1117
|
-
borderTop: darkMode ? `1px solid ${dark.border}` : "none"
|
|
1041
|
+
boxShadow: "0 4px 20px rgba(0,0,0,0.1)"
|
|
1118
1042
|
},
|
|
1119
1043
|
mobileNavItem: {
|
|
1120
1044
|
fontFamily: fonts.primary,
|
|
1121
1045
|
fontWeight: fontWeights.bold,
|
|
1122
1046
|
fontSize: fontSizes.lg,
|
|
1123
|
-
color:
|
|
1047
|
+
color: colors.evTeal,
|
|
1124
1048
|
textDecoration: "none",
|
|
1125
1049
|
padding: `${spacing[3]} 0`,
|
|
1126
|
-
borderBottom: `1px solid ${
|
|
1050
|
+
borderBottom: `1px solid ${colors.borderLight}`
|
|
1127
1051
|
},
|
|
1128
1052
|
profileButton: {
|
|
1129
1053
|
width: "40px",
|
|
1130
1054
|
height: "40px",
|
|
1131
1055
|
borderRadius: borderRadius.full,
|
|
1132
|
-
border: `2px solid ${
|
|
1133
|
-
backgroundColor:
|
|
1056
|
+
border: `2px solid ${colors.evTeal}`,
|
|
1057
|
+
backgroundColor: colors.bgLight,
|
|
1134
1058
|
cursor: "pointer",
|
|
1135
1059
|
display: "flex",
|
|
1136
1060
|
alignItems: "center",
|
|
@@ -1145,12 +1069,11 @@ function Header({
|
|
|
1145
1069
|
zIndex: 100
|
|
1146
1070
|
},
|
|
1147
1071
|
profileDropdownInner: {
|
|
1148
|
-
backgroundColor:
|
|
1072
|
+
backgroundColor: colors.bgWhite,
|
|
1149
1073
|
borderRadius: borderRadius.lg,
|
|
1150
|
-
boxShadow:
|
|
1074
|
+
boxShadow: "0 10px 40px rgba(0,0,0,0.1)",
|
|
1151
1075
|
minWidth: "160px",
|
|
1152
|
-
padding: spacing[2]
|
|
1153
|
-
border: darkMode ? `1px solid ${dark.border}` : "none"
|
|
1076
|
+
padding: spacing[2]
|
|
1154
1077
|
},
|
|
1155
1078
|
profileDropdownItem: {
|
|
1156
1079
|
display: "block",
|
|
@@ -1159,7 +1082,7 @@ function Header({
|
|
|
1159
1082
|
fontFamily: fonts.primary,
|
|
1160
1083
|
fontWeight: fontWeights.medium,
|
|
1161
1084
|
fontSize: fontSizes.base,
|
|
1162
|
-
color:
|
|
1085
|
+
color: colors.evTeal,
|
|
1163
1086
|
textDecoration: "none",
|
|
1164
1087
|
borderRadius: borderRadius.md,
|
|
1165
1088
|
cursor: "pointer",
|
|
@@ -1169,7 +1092,7 @@ function Header({
|
|
|
1169
1092
|
},
|
|
1170
1093
|
mobileDivider: {
|
|
1171
1094
|
height: "1px",
|
|
1172
|
-
backgroundColor:
|
|
1095
|
+
backgroundColor: colors.borderLight,
|
|
1173
1096
|
margin: `${spacing[3]} 0`
|
|
1174
1097
|
},
|
|
1175
1098
|
profileLabel: {
|
|
@@ -1177,8 +1100,8 @@ function Header({
|
|
|
1177
1100
|
fontFamily: fonts.primary,
|
|
1178
1101
|
fontWeight: fontWeights.semibold,
|
|
1179
1102
|
fontSize: fontSizes.sm,
|
|
1180
|
-
color:
|
|
1181
|
-
borderBottom: `1px solid ${
|
|
1103
|
+
color: colors.textMuted,
|
|
1104
|
+
borderBottom: `1px solid ${colors.borderLight}`,
|
|
1182
1105
|
marginBottom: spacing[1],
|
|
1183
1106
|
overflow: "hidden",
|
|
1184
1107
|
textOverflow: "ellipsis",
|
|
@@ -1189,14 +1112,14 @@ function Header({
|
|
|
1189
1112
|
const isActive = currentPath === item.href;
|
|
1190
1113
|
const hasDropdown = item.dropdown && item.dropdown.length > 0;
|
|
1191
1114
|
const isOpen = openDropdown === item.label;
|
|
1192
|
-
return /* @__PURE__ */
|
|
1115
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
1193
1116
|
"div",
|
|
1194
1117
|
{
|
|
1195
1118
|
style: { position: "relative" },
|
|
1196
1119
|
onMouseEnter: () => hasDropdown && setOpenDropdown(item.label),
|
|
1197
1120
|
onMouseLeave: () => hasDropdown && setOpenDropdown(null)
|
|
1198
1121
|
},
|
|
1199
|
-
/* @__PURE__ */
|
|
1122
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
1200
1123
|
"a",
|
|
1201
1124
|
{
|
|
1202
1125
|
href: item.href,
|
|
@@ -1207,7 +1130,7 @@ function Header({
|
|
|
1207
1130
|
}
|
|
1208
1131
|
},
|
|
1209
1132
|
item.label,
|
|
1210
|
-
hasDropdown && /* @__PURE__ */
|
|
1133
|
+
hasDropdown && /* @__PURE__ */ import_react5.default.createElement(
|
|
1211
1134
|
"svg",
|
|
1212
1135
|
{
|
|
1213
1136
|
style: styles2.dropdownIcon,
|
|
@@ -1215,11 +1138,11 @@ function Header({
|
|
|
1215
1138
|
fill: "none",
|
|
1216
1139
|
xmlns: "http://www.w3.org/2000/svg"
|
|
1217
1140
|
},
|
|
1218
|
-
/* @__PURE__ */
|
|
1141
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
1219
1142
|
"path",
|
|
1220
1143
|
{
|
|
1221
1144
|
d: "M1 1L8 8L15 1",
|
|
1222
|
-
stroke:
|
|
1145
|
+
stroke: colors.evTeal,
|
|
1223
1146
|
strokeWidth: "2",
|
|
1224
1147
|
strokeLinecap: "round",
|
|
1225
1148
|
strokeLinejoin: "round"
|
|
@@ -1227,7 +1150,7 @@ function Header({
|
|
|
1227
1150
|
)
|
|
1228
1151
|
)
|
|
1229
1152
|
),
|
|
1230
|
-
hasDropdown && isOpen && /* @__PURE__ */
|
|
1153
|
+
hasDropdown && isOpen && /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.dropdown }, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.dropdownInner }, item.dropdown.map((dropdownItem, idx) => /* @__PURE__ */ import_react5.default.createElement(
|
|
1231
1154
|
"a",
|
|
1232
1155
|
{
|
|
1233
1156
|
key: idx,
|
|
@@ -1235,7 +1158,7 @@ function Header({
|
|
|
1235
1158
|
onClick: (e) => handleNavClick(e, dropdownItem.href),
|
|
1236
1159
|
style: styles2.dropdownItem,
|
|
1237
1160
|
onMouseEnter: (e) => {
|
|
1238
|
-
e.target.style.backgroundColor =
|
|
1161
|
+
e.target.style.backgroundColor = colors.bgLight;
|
|
1239
1162
|
},
|
|
1240
1163
|
onMouseLeave: (e) => {
|
|
1241
1164
|
e.target.style.backgroundColor = "transparent";
|
|
@@ -1245,26 +1168,26 @@ function Header({
|
|
|
1245
1168
|
))))
|
|
1246
1169
|
);
|
|
1247
1170
|
};
|
|
1248
|
-
return /* @__PURE__ */
|
|
1171
|
+
return /* @__PURE__ */ import_react5.default.createElement("header", { style: styles2.header }, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.container }, /* @__PURE__ */ import_react5.default.createElement(
|
|
1249
1172
|
"a",
|
|
1250
1173
|
{
|
|
1251
1174
|
href: logoHref,
|
|
1252
1175
|
onClick: (e) => handleNavClick(e, logoHref),
|
|
1253
1176
|
style: { display: "flex", alignItems: "center" }
|
|
1254
1177
|
},
|
|
1255
|
-
logoSrc ? /* @__PURE__ */
|
|
1178
|
+
logoSrc ? /* @__PURE__ */ import_react5.default.createElement("img", { src: logoSrc, alt: logoAlt, style: styles2.logo }) : /* @__PURE__ */ import_react5.default.createElement(
|
|
1256
1179
|
"span",
|
|
1257
1180
|
{
|
|
1258
1181
|
style: {
|
|
1259
1182
|
fontFamily: fonts.primary,
|
|
1260
1183
|
fontWeight: fontWeights.bold,
|
|
1261
1184
|
fontSize: fontSizes["2xl"],
|
|
1262
|
-
color:
|
|
1185
|
+
color: colors.evTeal
|
|
1263
1186
|
}
|
|
1264
1187
|
},
|
|
1265
1188
|
"empowered.vote"
|
|
1266
1189
|
)
|
|
1267
|
-
), /* @__PURE__ */
|
|
1190
|
+
), /* @__PURE__ */ import_react5.default.createElement("nav", { style: styles2.nav, className: "ev-header-nav" }, navItems.map((item, idx) => /* @__PURE__ */ import_react5.default.createElement(NavLink, { key: idx, item }))), /* @__PURE__ */ import_react5.default.createElement("div", { style: { display: isMobile ? "none" : "flex", alignItems: "center", gap: spacing[3] } }, secondaryAction && import_react5.default.isValidElement(secondaryAction) && secondaryAction, secondaryAction && !import_react5.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react5.default.createElement(
|
|
1268
1191
|
"a",
|
|
1269
1192
|
{
|
|
1270
1193
|
href: secondaryAction.href,
|
|
@@ -1278,16 +1201,16 @@ function Header({
|
|
|
1278
1201
|
style: styles2.secondaryAction,
|
|
1279
1202
|
className: "ev-header-secondary",
|
|
1280
1203
|
onMouseEnter: (e) => {
|
|
1281
|
-
e.currentTarget.style.backgroundColor =
|
|
1204
|
+
e.currentTarget.style.backgroundColor = colors.evTeal;
|
|
1282
1205
|
e.currentTarget.style.color = colors.textWhite;
|
|
1283
1206
|
},
|
|
1284
1207
|
onMouseLeave: (e) => {
|
|
1285
1208
|
e.currentTarget.style.backgroundColor = "transparent";
|
|
1286
|
-
e.currentTarget.style.color =
|
|
1209
|
+
e.currentTarget.style.color = colors.evTeal;
|
|
1287
1210
|
}
|
|
1288
1211
|
},
|
|
1289
1212
|
secondaryAction.label
|
|
1290
|
-
), ctaButton && /* @__PURE__ */
|
|
1213
|
+
), ctaButton && /* @__PURE__ */ import_react5.default.createElement(
|
|
1291
1214
|
"a",
|
|
1292
1215
|
{
|
|
1293
1216
|
href: ctaButton.href,
|
|
@@ -1302,7 +1225,7 @@ function Header({
|
|
|
1302
1225
|
}
|
|
1303
1226
|
},
|
|
1304
1227
|
ctaButton.label
|
|
1305
|
-
), profileMenu && /* @__PURE__ */
|
|
1228
|
+
), profileMenu && /* @__PURE__ */ import_react5.default.createElement("div", { ref: profileRef, style: { position: "relative" } }, /* @__PURE__ */ import_react5.default.createElement(
|
|
1306
1229
|
"button",
|
|
1307
1230
|
{
|
|
1308
1231
|
style: styles2.profileButton,
|
|
@@ -1310,24 +1233,24 @@ function Header({
|
|
|
1310
1233
|
"aria-label": "Profile menu",
|
|
1311
1234
|
"aria-expanded": profileOpen
|
|
1312
1235
|
},
|
|
1313
|
-
/* @__PURE__ */
|
|
1236
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
1314
1237
|
"svg",
|
|
1315
1238
|
{
|
|
1316
1239
|
width: "20",
|
|
1317
1240
|
height: "20",
|
|
1318
1241
|
viewBox: "0 0 24 24",
|
|
1319
1242
|
fill: "none",
|
|
1320
|
-
stroke:
|
|
1243
|
+
stroke: colors.evTeal,
|
|
1321
1244
|
strokeWidth: "2",
|
|
1322
1245
|
strokeLinecap: "round",
|
|
1323
1246
|
strokeLinejoin: "round"
|
|
1324
1247
|
},
|
|
1325
|
-
/* @__PURE__ */
|
|
1326
|
-
/* @__PURE__ */
|
|
1248
|
+
/* @__PURE__ */ import_react5.default.createElement("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
|
|
1249
|
+
/* @__PURE__ */ import_react5.default.createElement("circle", { cx: "12", cy: "7", r: "4" })
|
|
1327
1250
|
)
|
|
1328
|
-
), profileOpen && /* @__PURE__ */
|
|
1251
|
+
), profileOpen && /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.profileDropdown }, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.profileDropdownInner }, profileMenu.label && /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.profileLabel }, profileMenu.label), profileMenu.items.map((item, idx) => {
|
|
1329
1252
|
if (item.href) {
|
|
1330
|
-
return /* @__PURE__ */
|
|
1253
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
1331
1254
|
"a",
|
|
1332
1255
|
{
|
|
1333
1256
|
key: idx,
|
|
@@ -1341,7 +1264,7 @@ function Header({
|
|
|
1341
1264
|
},
|
|
1342
1265
|
style: styles2.profileDropdownItem,
|
|
1343
1266
|
onMouseEnter: (e) => {
|
|
1344
|
-
e.target.style.backgroundColor =
|
|
1267
|
+
e.target.style.backgroundColor = colors.bgLight;
|
|
1345
1268
|
},
|
|
1346
1269
|
onMouseLeave: (e) => {
|
|
1347
1270
|
e.target.style.backgroundColor = "transparent";
|
|
@@ -1350,7 +1273,7 @@ function Header({
|
|
|
1350
1273
|
item.label
|
|
1351
1274
|
);
|
|
1352
1275
|
}
|
|
1353
|
-
return /* @__PURE__ */
|
|
1276
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
1354
1277
|
"button",
|
|
1355
1278
|
{
|
|
1356
1279
|
key: idx,
|
|
@@ -1361,7 +1284,7 @@ function Header({
|
|
|
1361
1284
|
},
|
|
1362
1285
|
style: styles2.profileDropdownItem,
|
|
1363
1286
|
onMouseEnter: (e) => {
|
|
1364
|
-
e.target.style.backgroundColor =
|
|
1287
|
+
e.target.style.backgroundColor = colors.bgLight;
|
|
1365
1288
|
},
|
|
1366
1289
|
onMouseLeave: (e) => {
|
|
1367
1290
|
e.target.style.backgroundColor = "transparent";
|
|
@@ -1369,7 +1292,7 @@ function Header({
|
|
|
1369
1292
|
},
|
|
1370
1293
|
item.label
|
|
1371
1294
|
);
|
|
1372
|
-
}))))), /* @__PURE__ */
|
|
1295
|
+
}))))), /* @__PURE__ */ import_react5.default.createElement(
|
|
1373
1296
|
"button",
|
|
1374
1297
|
{
|
|
1375
1298
|
style: styles2.mobileMenuButton,
|
|
@@ -1378,7 +1301,7 @@ function Header({
|
|
|
1378
1301
|
"aria-label": "Toggle menu",
|
|
1379
1302
|
"aria-expanded": mobileMenuOpen
|
|
1380
1303
|
},
|
|
1381
|
-
/* @__PURE__ */
|
|
1304
|
+
/* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.hamburger }, /* @__PURE__ */ import_react5.default.createElement(
|
|
1382
1305
|
"span",
|
|
1383
1306
|
{
|
|
1384
1307
|
style: {
|
|
@@ -1387,10 +1310,10 @@ function Header({
|
|
|
1387
1310
|
left: 0,
|
|
1388
1311
|
width: "100%",
|
|
1389
1312
|
height: "2px",
|
|
1390
|
-
backgroundColor:
|
|
1313
|
+
backgroundColor: colors.evTeal
|
|
1391
1314
|
}
|
|
1392
1315
|
}
|
|
1393
|
-
), /* @__PURE__ */
|
|
1316
|
+
), /* @__PURE__ */ import_react5.default.createElement(
|
|
1394
1317
|
"span",
|
|
1395
1318
|
{
|
|
1396
1319
|
style: {
|
|
@@ -1399,13 +1322,13 @@ function Header({
|
|
|
1399
1322
|
left: 0,
|
|
1400
1323
|
width: "100%",
|
|
1401
1324
|
height: "2px",
|
|
1402
|
-
backgroundColor:
|
|
1325
|
+
backgroundColor: colors.evTeal
|
|
1403
1326
|
}
|
|
1404
1327
|
}
|
|
1405
1328
|
))
|
|
1406
|
-
)), /* @__PURE__ */
|
|
1329
|
+
)), /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.mobileMenu, className: "ev-header-mobile-menu" }, navItems.map((item, idx) => {
|
|
1407
1330
|
const hasDropdown = item.dropdown && item.dropdown.length > 0;
|
|
1408
|
-
return /* @__PURE__ */
|
|
1331
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, { key: idx }, hasDropdown ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(
|
|
1409
1332
|
"span",
|
|
1410
1333
|
{
|
|
1411
1334
|
style: {
|
|
@@ -1415,7 +1338,7 @@ function Header({
|
|
|
1415
1338
|
}
|
|
1416
1339
|
},
|
|
1417
1340
|
item.label
|
|
1418
|
-
), item.dropdown.map((sub, subIdx) => /* @__PURE__ */
|
|
1341
|
+
), item.dropdown.map((sub, subIdx) => /* @__PURE__ */ import_react5.default.createElement(
|
|
1419
1342
|
"a",
|
|
1420
1343
|
{
|
|
1421
1344
|
key: subIdx,
|
|
@@ -1432,7 +1355,7 @@ function Header({
|
|
|
1432
1355
|
}
|
|
1433
1356
|
},
|
|
1434
1357
|
sub.label
|
|
1435
|
-
))) : /* @__PURE__ */
|
|
1358
|
+
))) : /* @__PURE__ */ import_react5.default.createElement(
|
|
1436
1359
|
"a",
|
|
1437
1360
|
{
|
|
1438
1361
|
href: item.href,
|
|
@@ -1444,7 +1367,7 @@ function Header({
|
|
|
1444
1367
|
},
|
|
1445
1368
|
item.label
|
|
1446
1369
|
));
|
|
1447
|
-
}), secondaryAction &&
|
|
1370
|
+
}), secondaryAction && import_react5.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react5.default.createElement("div", { style: { marginTop: spacing[4], textAlign: "center" } }, secondaryAction), secondaryAction && !import_react5.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react5.default.createElement(
|
|
1448
1371
|
"a",
|
|
1449
1372
|
{
|
|
1450
1373
|
href: secondaryAction.href,
|
|
@@ -1459,7 +1382,7 @@ function Header({
|
|
|
1459
1382
|
style: { ...styles2.secondaryAction, marginTop: spacing[4], textAlign: "center", justifyContent: "center" }
|
|
1460
1383
|
},
|
|
1461
1384
|
secondaryAction.label
|
|
1462
|
-
), ctaButton && /* @__PURE__ */
|
|
1385
|
+
), ctaButton && /* @__PURE__ */ import_react5.default.createElement(
|
|
1463
1386
|
"a",
|
|
1464
1387
|
{
|
|
1465
1388
|
href: ctaButton.href,
|
|
@@ -1470,7 +1393,7 @@ function Header({
|
|
|
1470
1393
|
style: { ...styles2.ctaButton, marginTop: spacing[4], textAlign: "center" }
|
|
1471
1394
|
},
|
|
1472
1395
|
ctaButton.label
|
|
1473
|
-
), profileMenu && /* @__PURE__ */
|
|
1396
|
+
), profileMenu && /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement("div", { style: styles2.mobileDivider }), profileMenu.label && /* @__PURE__ */ import_react5.default.createElement(
|
|
1474
1397
|
"span",
|
|
1475
1398
|
{
|
|
1476
1399
|
style: {
|
|
@@ -1486,7 +1409,7 @@ function Header({
|
|
|
1486
1409
|
profileMenu.label
|
|
1487
1410
|
), profileMenu.items.map((item, idx) => {
|
|
1488
1411
|
if (item.href) {
|
|
1489
|
-
return /* @__PURE__ */
|
|
1412
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
1490
1413
|
"a",
|
|
1491
1414
|
{
|
|
1492
1415
|
key: idx,
|
|
@@ -1503,7 +1426,7 @@ function Header({
|
|
|
1503
1426
|
item.label
|
|
1504
1427
|
);
|
|
1505
1428
|
}
|
|
1506
|
-
return /* @__PURE__ */
|
|
1429
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
1507
1430
|
"button",
|
|
1508
1431
|
{
|
|
1509
1432
|
key: idx,
|
|
@@ -1527,10 +1450,10 @@ function Header({
|
|
|
1527
1450
|
}
|
|
1528
1451
|
|
|
1529
1452
|
// src/SiteHeader.jsx
|
|
1530
|
-
var
|
|
1453
|
+
var import_react7 = __toESM(require("react"));
|
|
1531
1454
|
|
|
1532
1455
|
// src/FeedbackButton.jsx
|
|
1533
|
-
var
|
|
1456
|
+
var import_react6 = __toESM(require("react"));
|
|
1534
1457
|
var FEEDBACK_BASE_DEFAULT = "https://alpha.empowered.vote/feedback";
|
|
1535
1458
|
var HOST_FEATURE_MAP = {
|
|
1536
1459
|
"compass.empowered.vote": "compass",
|
|
@@ -1601,7 +1524,7 @@ function FeedbackButton({
|
|
|
1601
1524
|
cursor: "pointer"
|
|
1602
1525
|
};
|
|
1603
1526
|
const baseStyle = variant === "link" ? linkStyle2 : pillStyle;
|
|
1604
|
-
return /* @__PURE__ */
|
|
1527
|
+
return /* @__PURE__ */ import_react6.default.createElement(
|
|
1605
1528
|
"a",
|
|
1606
1529
|
{
|
|
1607
1530
|
href,
|
|
@@ -1652,7 +1575,6 @@ function SiteHeader({
|
|
|
1652
1575
|
profileMenu,
|
|
1653
1576
|
secondaryAction,
|
|
1654
1577
|
feedbackFeature,
|
|
1655
|
-
darkMode = false,
|
|
1656
1578
|
style = {}
|
|
1657
1579
|
}) {
|
|
1658
1580
|
const handleNavigate = (href) => {
|
|
@@ -1666,11 +1588,11 @@ function SiteHeader({
|
|
|
1666
1588
|
if (secondaryAction === false) {
|
|
1667
1589
|
resolvedSecondary = void 0;
|
|
1668
1590
|
} else if (secondaryAction === void 0) {
|
|
1669
|
-
resolvedSecondary = /* @__PURE__ */
|
|
1591
|
+
resolvedSecondary = /* @__PURE__ */ import_react7.default.createElement(FeedbackButton, { feature: feedbackFeature });
|
|
1670
1592
|
} else {
|
|
1671
1593
|
resolvedSecondary = secondaryAction;
|
|
1672
1594
|
}
|
|
1673
|
-
return /* @__PURE__ */
|
|
1595
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
1674
1596
|
Header,
|
|
1675
1597
|
{
|
|
1676
1598
|
logoSrc,
|
|
@@ -1681,14 +1603,13 @@ function SiteHeader({
|
|
|
1681
1603
|
currentPath,
|
|
1682
1604
|
onNavigate: handleNavigate,
|
|
1683
1605
|
profileMenu,
|
|
1684
|
-
darkMode,
|
|
1685
1606
|
style
|
|
1686
1607
|
}
|
|
1687
1608
|
);
|
|
1688
1609
|
}
|
|
1689
1610
|
|
|
1690
1611
|
// src/FilterSidebar.jsx
|
|
1691
|
-
var
|
|
1612
|
+
var import_react8 = __toESM(require("react"));
|
|
1692
1613
|
function FilterSidebar({
|
|
1693
1614
|
title = "Filter by",
|
|
1694
1615
|
zipCode = "",
|
|
@@ -1842,14 +1763,14 @@ function FilterSidebar({
|
|
|
1842
1763
|
fontSize: fontSizes.sm
|
|
1843
1764
|
}
|
|
1844
1765
|
};
|
|
1845
|
-
return /* @__PURE__ */
|
|
1766
|
+
return /* @__PURE__ */ import_react8.default.createElement("aside", { style: styles2.sidebar, className: "ev-filter-sidebar" }, !isMobile && /* @__PURE__ */ import_react8.default.createElement("h2", { style: styles2.title }, title), /* @__PURE__ */ import_react8.default.createElement("div", { style: isMobile ? void 0 : styles2.contentTop }, /* @__PURE__ */ import_react8.default.createElement("div", { style: isMobile ? { marginBottom: spacing[3] } : styles2.section }, !isMobile && /* @__PURE__ */ import_react8.default.createElement("label", { style: styles2.sectionLabel }, "Location"), autocompleteContainerRef ? /* @__PURE__ */ import_react8.default.createElement(
|
|
1846
1767
|
"div",
|
|
1847
1768
|
{
|
|
1848
1769
|
ref: autocompleteContainerRef,
|
|
1849
1770
|
style: styles2.zipInputWrapper,
|
|
1850
1771
|
className: "ev-autocomplete-container"
|
|
1851
1772
|
}
|
|
1852
|
-
) : /* @__PURE__ */
|
|
1773
|
+
) : /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.zipInputWrapper }, /* @__PURE__ */ import_react8.default.createElement(
|
|
1853
1774
|
"input",
|
|
1854
1775
|
{
|
|
1855
1776
|
ref: zipInputRef,
|
|
@@ -1861,7 +1782,7 @@ function FilterSidebar({
|
|
|
1861
1782
|
style: styles2.zipInput,
|
|
1862
1783
|
"aria-label": "Search location"
|
|
1863
1784
|
}
|
|
1864
|
-
), /* @__PURE__ */
|
|
1785
|
+
), /* @__PURE__ */ import_react8.default.createElement(
|
|
1865
1786
|
"button",
|
|
1866
1787
|
{
|
|
1867
1788
|
type: "button",
|
|
@@ -1870,7 +1791,7 @@ function FilterSidebar({
|
|
|
1870
1791
|
"aria-label": "Clear ZIP code"
|
|
1871
1792
|
},
|
|
1872
1793
|
"\xD7"
|
|
1873
|
-
))), /* @__PURE__ */
|
|
1794
|
+
))), /* @__PURE__ */ import_react8.default.createElement("div", { style: isMobile ? {} : styles2.section }, !isMobile && /* @__PURE__ */ import_react8.default.createElement("label", { style: styles2.sectionLabel }, "Group"), /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.radioGroup, role: "radiogroup", "aria-label": "Filter by group" }, filterOptions.map((option) => /* @__PURE__ */ import_react8.default.createElement("label", { key: option.value, style: styles2.radioLabel }, /* @__PURE__ */ import_react8.default.createElement(
|
|
1874
1795
|
"input",
|
|
1875
1796
|
{
|
|
1876
1797
|
type: "radio",
|
|
@@ -1880,18 +1801,18 @@ function FilterSidebar({
|
|
|
1880
1801
|
onChange: () => onFilterChange == null ? void 0 : onFilterChange(option.value),
|
|
1881
1802
|
style: styles2.radioInput
|
|
1882
1803
|
}
|
|
1883
|
-
), option.label))))), !isMobile && /* @__PURE__ */
|
|
1804
|
+
), option.label))))), !isMobile && /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.imageSection }, locationLabel && /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.locationLabel }, locationLabel), buildingImageSrc ? /* @__PURE__ */ import_react8.default.createElement(
|
|
1884
1805
|
"img",
|
|
1885
1806
|
{
|
|
1886
1807
|
src: buildingImageSrc,
|
|
1887
1808
|
alt: `${selectedFilter} government building`,
|
|
1888
1809
|
style: styles2.buildingImage
|
|
1889
1810
|
}
|
|
1890
|
-
) : /* @__PURE__ */
|
|
1811
|
+
) : /* @__PURE__ */ import_react8.default.createElement("div", { style: styles2.buildingPlaceholder }, "No image")));
|
|
1891
1812
|
}
|
|
1892
1813
|
|
|
1893
1814
|
// src/PoliticianCard.jsx
|
|
1894
|
-
var
|
|
1815
|
+
var import_react9 = __toESM(require("react"));
|
|
1895
1816
|
function PoliticianCard({
|
|
1896
1817
|
id,
|
|
1897
1818
|
imageSrc,
|
|
@@ -2043,7 +1964,7 @@ function PoliticianCard({
|
|
|
2043
1964
|
textTransform: "uppercase"
|
|
2044
1965
|
}
|
|
2045
1966
|
};
|
|
2046
|
-
const CompassIcon2 = () => /* @__PURE__ */
|
|
1967
|
+
const CompassIcon2 = () => /* @__PURE__ */ import_react9.default.createElement(
|
|
2047
1968
|
"svg",
|
|
2048
1969
|
{
|
|
2049
1970
|
style: styles2.compassIcon,
|
|
@@ -2051,7 +1972,7 @@ function PoliticianCard({
|
|
|
2051
1972
|
fill: "none",
|
|
2052
1973
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2053
1974
|
},
|
|
2054
|
-
/* @__PURE__ */
|
|
1975
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
2055
1976
|
"polygon",
|
|
2056
1977
|
{
|
|
2057
1978
|
points: "12,1 21.5,6.5 21.5,17.5 12,23 2.5,17.5 2.5,6.5",
|
|
@@ -2061,13 +1982,13 @@ function PoliticianCard({
|
|
|
2061
1982
|
strokeLinejoin: "round"
|
|
2062
1983
|
}
|
|
2063
1984
|
),
|
|
2064
|
-
/* @__PURE__ */
|
|
2065
|
-
/* @__PURE__ */
|
|
2066
|
-
/* @__PURE__ */
|
|
2067
|
-
/* @__PURE__ */
|
|
2068
|
-
/* @__PURE__ */
|
|
2069
|
-
/* @__PURE__ */
|
|
2070
|
-
/* @__PURE__ */
|
|
1985
|
+
/* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "1", stroke: "currentColor", strokeWidth: "1" }),
|
|
1986
|
+
/* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1987
|
+
/* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1988
|
+
/* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "23", stroke: "currentColor", strokeWidth: "1" }),
|
|
1989
|
+
/* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1990
|
+
/* @__PURE__ */ import_react9.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1991
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
2071
1992
|
"polygon",
|
|
2072
1993
|
{
|
|
2073
1994
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -2075,7 +1996,7 @@ function PoliticianCard({
|
|
|
2075
1996
|
opacity: "0.35"
|
|
2076
1997
|
}
|
|
2077
1998
|
),
|
|
2078
|
-
/* @__PURE__ */
|
|
1999
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
2079
2000
|
"polygon",
|
|
2080
2001
|
{
|
|
2081
2002
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -2086,8 +2007,8 @@ function PoliticianCard({
|
|
|
2086
2007
|
}
|
|
2087
2008
|
)
|
|
2088
2009
|
);
|
|
2089
|
-
const [imgError, setImgError] = (0,
|
|
2090
|
-
(0,
|
|
2010
|
+
const [imgError, setImgError] = (0, import_react9.useState)(false);
|
|
2011
|
+
(0, import_react9.useEffect)(() => {
|
|
2091
2012
|
setImgError(false);
|
|
2092
2013
|
}, [imageSrc]);
|
|
2093
2014
|
const getInitials = (n) => {
|
|
@@ -2096,7 +2017,7 @@ function PoliticianCard({
|
|
|
2096
2017
|
const initials = parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_a = parts[0]) == null ? void 0 : _a[0]) || "?";
|
|
2097
2018
|
return initials.toUpperCase();
|
|
2098
2019
|
};
|
|
2099
|
-
return /* @__PURE__ */
|
|
2020
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2100
2021
|
"div",
|
|
2101
2022
|
{
|
|
2102
2023
|
style: styles2.card,
|
|
@@ -2121,8 +2042,8 @@ function PoliticianCard({
|
|
|
2121
2042
|
}
|
|
2122
2043
|
}
|
|
2123
2044
|
},
|
|
2124
|
-
badge && /* @__PURE__ */
|
|
2125
|
-
/* @__PURE__ */
|
|
2045
|
+
badge && /* @__PURE__ */ import_react9.default.createElement("span", { style: styles2.badge }, badge),
|
|
2046
|
+
/* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.imageWrapper }, imageSrc && !imgError ? /* @__PURE__ */ import_react9.default.createElement(
|
|
2126
2047
|
"img",
|
|
2127
2048
|
{
|
|
2128
2049
|
src: imageSrc,
|
|
@@ -2130,9 +2051,9 @@ function PoliticianCard({
|
|
|
2130
2051
|
style: styles2.image,
|
|
2131
2052
|
onError: () => setImgError(true)
|
|
2132
2053
|
}
|
|
2133
|
-
) : /* @__PURE__ */
|
|
2134
|
-
/* @__PURE__ */
|
|
2135
|
-
onCompassClick && /* @__PURE__ */
|
|
2054
|
+
) : /* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.imagePlaceholder }, getInitials(name))),
|
|
2055
|
+
/* @__PURE__ */ import_react9.default.createElement("div", { style: styles2.content }, /* @__PURE__ */ import_react9.default.createElement("h3", { style: styles2.name }, name), /* @__PURE__ */ import_react9.default.createElement("p", { style: styles2.title }, title), subtitle && /* @__PURE__ */ import_react9.default.createElement("p", { style: styles2.subtitle }, subtitle), footer && /* @__PURE__ */ import_react9.default.createElement("div", { style: { marginTop: "auto", marginLeft: "-5px" } }, footer)),
|
|
2056
|
+
onCompassClick && /* @__PURE__ */ import_react9.default.createElement(
|
|
2136
2057
|
"button",
|
|
2137
2058
|
{
|
|
2138
2059
|
type: "button",
|
|
@@ -2147,16 +2068,16 @@ function PoliticianCard({
|
|
|
2147
2068
|
},
|
|
2148
2069
|
"aria-label": `View ${name}'s compass`
|
|
2149
2070
|
},
|
|
2150
|
-
/* @__PURE__ */
|
|
2071
|
+
/* @__PURE__ */ import_react9.default.createElement(CompassIcon2, null)
|
|
2151
2072
|
)
|
|
2152
2073
|
);
|
|
2153
2074
|
}
|
|
2154
2075
|
|
|
2155
2076
|
// src/CompassCardHorizontal.jsx
|
|
2156
|
-
var
|
|
2077
|
+
var import_react15 = __toESM(require("react"));
|
|
2157
2078
|
|
|
2158
2079
|
// src/PlaceholderRadar.jsx
|
|
2159
|
-
var
|
|
2080
|
+
var import_react10 = __toESM(require("react"));
|
|
2160
2081
|
function PlaceholderRadar({ size = 250, name = "" }) {
|
|
2161
2082
|
const cx = size / 2;
|
|
2162
2083
|
const cy = size / 2;
|
|
@@ -2169,7 +2090,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2169
2090
|
const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
|
|
2170
2091
|
const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
|
|
2171
2092
|
const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
|
|
2172
|
-
return /* @__PURE__ */
|
|
2093
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
2173
2094
|
"svg",
|
|
2174
2095
|
{
|
|
2175
2096
|
width: size,
|
|
@@ -2183,7 +2104,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2183
2104
|
flexShrink: 0
|
|
2184
2105
|
}
|
|
2185
2106
|
},
|
|
2186
|
-
vertices.map(([x, y], i) => /* @__PURE__ */
|
|
2107
|
+
vertices.map(([x, y], i) => /* @__PURE__ */ import_react10.default.createElement(
|
|
2187
2108
|
"line",
|
|
2188
2109
|
{
|
|
2189
2110
|
key: i,
|
|
@@ -2197,7 +2118,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2197
2118
|
opacity: "0.6"
|
|
2198
2119
|
}
|
|
2199
2120
|
)),
|
|
2200
|
-
/* @__PURE__ */
|
|
2121
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
2201
2122
|
"polygon",
|
|
2202
2123
|
{
|
|
2203
2124
|
points: innerPts,
|
|
@@ -2208,7 +2129,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2208
2129
|
opacity: "0.5"
|
|
2209
2130
|
}
|
|
2210
2131
|
),
|
|
2211
|
-
/* @__PURE__ */
|
|
2132
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
2212
2133
|
"polygon",
|
|
2213
2134
|
{
|
|
2214
2135
|
points: midPts,
|
|
@@ -2219,7 +2140,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2219
2140
|
opacity: "0.6"
|
|
2220
2141
|
}
|
|
2221
2142
|
),
|
|
2222
|
-
/* @__PURE__ */
|
|
2143
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
2223
2144
|
"polygon",
|
|
2224
2145
|
{
|
|
2225
2146
|
points: outerPts,
|
|
@@ -2233,16 +2154,16 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2233
2154
|
}
|
|
2234
2155
|
|
|
2235
2156
|
// src/CompassCardHorizontalMeta.jsx
|
|
2236
|
-
var
|
|
2157
|
+
var import_react14 = __toESM(require("react"));
|
|
2237
2158
|
|
|
2238
2159
|
// src/IconOverlay.jsx
|
|
2239
|
-
var
|
|
2240
|
-
var
|
|
2160
|
+
var import_react12 = __toESM(require("react"));
|
|
2161
|
+
var import_react13 = require("@floating-ui/react");
|
|
2241
2162
|
|
|
2242
2163
|
// src/icons.js
|
|
2243
|
-
var
|
|
2164
|
+
var import_react11 = __toESM(require("react"));
|
|
2244
2165
|
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
2245
|
-
return /* @__PURE__ */
|
|
2166
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
2246
2167
|
"svg",
|
|
2247
2168
|
{
|
|
2248
2169
|
width: size,
|
|
@@ -2255,13 +2176,13 @@ function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
|
2255
2176
|
strokeLinejoin: "round",
|
|
2256
2177
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2257
2178
|
},
|
|
2258
|
-
/* @__PURE__ */
|
|
2259
|
-
/* @__PURE__ */
|
|
2260
|
-
/* @__PURE__ */
|
|
2179
|
+
/* @__PURE__ */ import_react11.default.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
2180
|
+
/* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
2181
|
+
/* @__PURE__ */ import_react11.default.createElement("path", { d: "M22 19H2" })
|
|
2261
2182
|
);
|
|
2262
2183
|
}
|
|
2263
2184
|
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
2264
|
-
return /* @__PURE__ */
|
|
2185
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
2265
2186
|
"svg",
|
|
2266
2187
|
{
|
|
2267
2188
|
width: size,
|
|
@@ -2274,27 +2195,27 @@ function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
|
2274
2195
|
strokeLinejoin: "round",
|
|
2275
2196
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2276
2197
|
},
|
|
2277
|
-
/* @__PURE__ */
|
|
2278
|
-
/* @__PURE__ */
|
|
2198
|
+
/* @__PURE__ */ import_react11.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
2199
|
+
/* @__PURE__ */ import_react11.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" })
|
|
2279
2200
|
);
|
|
2280
2201
|
}
|
|
2281
2202
|
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
2282
2203
|
let paths;
|
|
2283
2204
|
switch (branch) {
|
|
2284
2205
|
case "executive":
|
|
2285
|
-
paths = /* @__PURE__ */
|
|
2206
|
+
paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react11.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react11.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
|
|
2286
2207
|
break;
|
|
2287
2208
|
case "legislative":
|
|
2288
|
-
paths = /* @__PURE__ */
|
|
2209
|
+
paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.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_react11.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M15 12h-5" }));
|
|
2289
2210
|
break;
|
|
2290
2211
|
case "judicial":
|
|
2291
|
-
paths = /* @__PURE__ */
|
|
2212
|
+
paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M8 21h8" }));
|
|
2292
2213
|
break;
|
|
2293
2214
|
default:
|
|
2294
|
-
paths = /* @__PURE__ */
|
|
2215
|
+
paths = /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react11.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_react11.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react11.default.createElement("path", { d: "M6 18v-7" }));
|
|
2295
2216
|
break;
|
|
2296
2217
|
}
|
|
2297
|
-
return /* @__PURE__ */
|
|
2218
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
2298
2219
|
"svg",
|
|
2299
2220
|
{
|
|
2300
2221
|
width: size,
|
|
@@ -2313,24 +2234,24 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
|
2313
2234
|
|
|
2314
2235
|
// src/IconOverlay.jsx
|
|
2315
2236
|
function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
|
|
2316
|
-
const [isOpen, setIsOpen] = (0,
|
|
2317
|
-
const { refs, floatingStyles, context } = (0,
|
|
2237
|
+
const [isOpen, setIsOpen] = (0, import_react12.useState)(false);
|
|
2238
|
+
const { refs, floatingStyles, context } = (0, import_react13.useFloating)({
|
|
2318
2239
|
open: isOpen,
|
|
2319
2240
|
onOpenChange: setIsOpen,
|
|
2320
|
-
middleware: [(0,
|
|
2321
|
-
whileElementsMounted:
|
|
2241
|
+
middleware: [(0, import_react13.offset)(8), (0, import_react13.flip)(), (0, import_react13.shift)({ padding: 4 })],
|
|
2242
|
+
whileElementsMounted: import_react13.autoUpdate
|
|
2322
2243
|
});
|
|
2323
|
-
const hover = (0,
|
|
2324
|
-
const focus2 = (0,
|
|
2325
|
-
const dismiss = (0,
|
|
2326
|
-
const role = (0,
|
|
2327
|
-
const { getReferenceProps, getFloatingProps } = (0,
|
|
2244
|
+
const hover = (0, import_react13.useHover)(context);
|
|
2245
|
+
const focus2 = (0, import_react13.useFocus)(context);
|
|
2246
|
+
const dismiss = (0, import_react13.useDismiss)(context);
|
|
2247
|
+
const role = (0, import_react13.useRole)(context, { role: "tooltip" });
|
|
2248
|
+
const { getReferenceProps, getFloatingProps } = (0, import_react13.useInteractions)([
|
|
2328
2249
|
hover,
|
|
2329
2250
|
focus2,
|
|
2330
2251
|
dismiss,
|
|
2331
2252
|
role
|
|
2332
2253
|
]);
|
|
2333
|
-
return /* @__PURE__ */
|
|
2254
|
+
return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(
|
|
2334
2255
|
"span",
|
|
2335
2256
|
{
|
|
2336
2257
|
ref: refs.setReference,
|
|
@@ -2343,8 +2264,8 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2343
2264
|
onClick(e);
|
|
2344
2265
|
} : void 0
|
|
2345
2266
|
},
|
|
2346
|
-
/* @__PURE__ */
|
|
2347
|
-
), isOpen && /* @__PURE__ */
|
|
2267
|
+
/* @__PURE__ */ import_react12.default.createElement(IconComponent, { size, color, ...extraProps })
|
|
2268
|
+
), isOpen && /* @__PURE__ */ import_react12.default.createElement(import_react13.FloatingPortal, null, /* @__PURE__ */ import_react12.default.createElement(
|
|
2348
2269
|
"div",
|
|
2349
2270
|
{
|
|
2350
2271
|
ref: refs.setFloating,
|
|
@@ -2368,7 +2289,7 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2368
2289
|
function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
2369
2290
|
if (!ballot && !hasStances && !branch) return null;
|
|
2370
2291
|
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;
|
|
2371
|
-
return /* @__PURE__ */
|
|
2292
|
+
return /* @__PURE__ */ import_react12.default.createElement(
|
|
2372
2293
|
"div",
|
|
2373
2294
|
{
|
|
2374
2295
|
style: {
|
|
@@ -2381,7 +2302,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2381
2302
|
// offset icon wrapper padding so icons align flush-left with text
|
|
2382
2303
|
}
|
|
2383
2304
|
},
|
|
2384
|
-
ballot && /* @__PURE__ */
|
|
2305
|
+
ballot && /* @__PURE__ */ import_react12.default.createElement(
|
|
2385
2306
|
IconWithTooltip,
|
|
2386
2307
|
{
|
|
2387
2308
|
IconComponent: BallotIcon,
|
|
@@ -2390,7 +2311,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2390
2311
|
size: 14
|
|
2391
2312
|
}
|
|
2392
2313
|
),
|
|
2393
|
-
hasStances && /* @__PURE__ */
|
|
2314
|
+
hasStances && /* @__PURE__ */ import_react12.default.createElement(
|
|
2394
2315
|
IconWithTooltip,
|
|
2395
2316
|
{
|
|
2396
2317
|
IconComponent: CompassIcon,
|
|
@@ -2400,7 +2321,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2400
2321
|
onClick: onCompassClick
|
|
2401
2322
|
}
|
|
2402
2323
|
),
|
|
2403
|
-
branch && /* @__PURE__ */
|
|
2324
|
+
branch && /* @__PURE__ */ import_react12.default.createElement(
|
|
2404
2325
|
IconWithTooltip,
|
|
2405
2326
|
{
|
|
2406
2327
|
IconComponent: BranchIcon,
|
|
@@ -2420,20 +2341,20 @@ function CompassCardHorizontalMeta({
|
|
|
2420
2341
|
userAnswers
|
|
2421
2342
|
}) {
|
|
2422
2343
|
const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
|
|
2423
|
-
return /* @__PURE__ */
|
|
2344
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2424
2345
|
flex: 1,
|
|
2425
2346
|
minWidth: 0,
|
|
2426
2347
|
display: "flex",
|
|
2427
2348
|
flexDirection: "column",
|
|
2428
2349
|
gap: spacing[1]
|
|
2429
|
-
} }, /* @__PURE__ */
|
|
2350
|
+
} }, /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2430
2351
|
fontFamily: fonts.primary,
|
|
2431
2352
|
fontSize: fontSizes.lg,
|
|
2432
2353
|
fontWeight: fontWeights.semibold,
|
|
2433
2354
|
lineHeight: 1.4,
|
|
2434
2355
|
color: colors.evMutedBlue,
|
|
2435
2356
|
margin: 0
|
|
2436
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
2357
|
+
} }, politician.full_name), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2437
2358
|
fontFamily: fonts.primary,
|
|
2438
2359
|
fontSize: fontSizes.sm,
|
|
2439
2360
|
fontWeight: fontWeights.semibold,
|
|
@@ -2444,7 +2365,7 @@ function CompassCardHorizontalMeta({
|
|
|
2444
2365
|
display: "-webkit-box",
|
|
2445
2366
|
WebkitLineClamp: 2,
|
|
2446
2367
|
WebkitBoxOrient: "vertical"
|
|
2447
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
2368
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2448
2369
|
fontFamily: fonts.primary,
|
|
2449
2370
|
fontSize: fontSizes.sm,
|
|
2450
2371
|
fontWeight: fontWeights.regular,
|
|
@@ -2454,7 +2375,7 @@ function CompassCardHorizontalMeta({
|
|
|
2454
2375
|
overflow: "hidden",
|
|
2455
2376
|
textOverflow: "ellipsis",
|
|
2456
2377
|
whiteSpace: "nowrap"
|
|
2457
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
2378
|
+
} }, politician.district_label), /* @__PURE__ */ import_react14.default.createElement(
|
|
2458
2379
|
IconOverlay,
|
|
2459
2380
|
{
|
|
2460
2381
|
ballot: politician.ballot || null,
|
|
@@ -2503,11 +2424,11 @@ function CompassCardHorizontal({
|
|
|
2503
2424
|
onClick
|
|
2504
2425
|
}) {
|
|
2505
2426
|
var _a;
|
|
2506
|
-
const [hovered, setHovered] = (0,
|
|
2507
|
-
const [focused, setFocused] = (0,
|
|
2508
|
-
const [imgError, setImgError] = (0,
|
|
2509
|
-
const [emptyCtaHovered, setEmptyCtaHovered] = (0,
|
|
2510
|
-
(0,
|
|
2427
|
+
const [hovered, setHovered] = (0, import_react15.useState)(false);
|
|
2428
|
+
const [focused, setFocused] = (0, import_react15.useState)(false);
|
|
2429
|
+
const [imgError, setImgError] = (0, import_react15.useState)(false);
|
|
2430
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react15.useState)(false);
|
|
2431
|
+
(0, import_react15.useEffect)(() => {
|
|
2511
2432
|
setImgError(false);
|
|
2512
2433
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2513
2434
|
const cardStyle = {
|
|
@@ -2531,7 +2452,7 @@ function CompassCardHorizontal({
|
|
|
2531
2452
|
function renderCompass() {
|
|
2532
2453
|
var _a2, _b, _c;
|
|
2533
2454
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2534
|
-
return /* @__PURE__ */
|
|
2455
|
+
return /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2535
2456
|
}
|
|
2536
2457
|
let topics = [];
|
|
2537
2458
|
let data = {};
|
|
@@ -2567,12 +2488,12 @@ function CompassCardHorizontal({
|
|
|
2567
2488
|
}, {}) : politician.stances;
|
|
2568
2489
|
}
|
|
2569
2490
|
if (topics.length === 0) {
|
|
2570
|
-
return /* @__PURE__ */
|
|
2491
|
+
return /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2571
2492
|
}
|
|
2572
2493
|
} catch (err) {
|
|
2573
|
-
return /* @__PURE__ */
|
|
2494
|
+
return /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2574
2495
|
}
|
|
2575
|
-
return /* @__PURE__ */
|
|
2496
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
2576
2497
|
RadarChartCore,
|
|
2577
2498
|
{
|
|
2578
2499
|
topics,
|
|
@@ -2594,7 +2515,7 @@ function CompassCardHorizontal({
|
|
|
2594
2515
|
var _a2, _b, _c;
|
|
2595
2516
|
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;
|
|
2596
2517
|
if (imageSrc && !imgError) {
|
|
2597
|
-
return /* @__PURE__ */
|
|
2518
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
2598
2519
|
"img",
|
|
2599
2520
|
{
|
|
2600
2521
|
src: imageSrc,
|
|
@@ -2612,7 +2533,7 @@ function CompassCardHorizontal({
|
|
|
2612
2533
|
}
|
|
2613
2534
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2614
2535
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2615
|
-
return /* @__PURE__ */
|
|
2536
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
|
|
2616
2537
|
width: "100%",
|
|
2617
2538
|
height: "100%",
|
|
2618
2539
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2626,7 +2547,7 @@ function CompassCardHorizontal({
|
|
|
2626
2547
|
} }, initials);
|
|
2627
2548
|
}
|
|
2628
2549
|
function renderEmptyVariant() {
|
|
2629
|
-
return /* @__PURE__ */
|
|
2550
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
|
|
2630
2551
|
width: "100%",
|
|
2631
2552
|
height: "100%",
|
|
2632
2553
|
display: "flex",
|
|
@@ -2637,14 +2558,14 @@ function CompassCardHorizontal({
|
|
|
2637
2558
|
padding: "12px 14px",
|
|
2638
2559
|
boxSizing: "border-box",
|
|
2639
2560
|
backgroundColor: colorScales.teal["050"]
|
|
2640
|
-
} }, /* @__PURE__ */
|
|
2561
|
+
} }, /* @__PURE__ */ import_react15.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react15.default.createElement("p", { style: {
|
|
2641
2562
|
margin: 0,
|
|
2642
2563
|
fontSize: fontSizes.xs,
|
|
2643
2564
|
color: colors.textMuted,
|
|
2644
2565
|
textAlign: "center",
|
|
2645
2566
|
lineHeight: 1.4,
|
|
2646
2567
|
fontFamily: fonts.primary
|
|
2647
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
2568
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react15.default.createElement(
|
|
2648
2569
|
"button",
|
|
2649
2570
|
{
|
|
2650
2571
|
type: "button",
|
|
@@ -2672,7 +2593,7 @@ function CompassCardHorizontal({
|
|
|
2672
2593
|
));
|
|
2673
2594
|
}
|
|
2674
2595
|
function renderUnavailablePlate(message = "Compass currently unavailable for this role.") {
|
|
2675
|
-
return /* @__PURE__ */
|
|
2596
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
|
|
2676
2597
|
width: "100%",
|
|
2677
2598
|
height: "100%",
|
|
2678
2599
|
backgroundColor: colorScales.teal["050"],
|
|
@@ -2681,7 +2602,7 @@ function CompassCardHorizontal({
|
|
|
2681
2602
|
justifyContent: "center",
|
|
2682
2603
|
padding: spacing[4],
|
|
2683
2604
|
boxSizing: "border-box"
|
|
2684
|
-
} }, /* @__PURE__ */
|
|
2605
|
+
} }, /* @__PURE__ */ import_react15.default.createElement("p", { style: {
|
|
2685
2606
|
fontSize: fontSizes.sm,
|
|
2686
2607
|
fontWeight: fontWeights.semibold,
|
|
2687
2608
|
lineHeight: 1.4,
|
|
@@ -2700,7 +2621,7 @@ function CompassCardHorizontal({
|
|
|
2700
2621
|
const name = (politician == null ? void 0 : politician.full_name) || "this official";
|
|
2701
2622
|
return renderUnavailablePlate(`No compass stances on file for ${name} yet.`);
|
|
2702
2623
|
}
|
|
2703
|
-
return /* @__PURE__ */
|
|
2624
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", { style: {
|
|
2704
2625
|
width: "100%",
|
|
2705
2626
|
height: "100%",
|
|
2706
2627
|
display: "flex",
|
|
@@ -2710,7 +2631,7 @@ function CompassCardHorizontal({
|
|
|
2710
2631
|
boxSizing: "border-box"
|
|
2711
2632
|
} }, renderCompass());
|
|
2712
2633
|
}
|
|
2713
|
-
return /* @__PURE__ */
|
|
2634
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
2714
2635
|
"div",
|
|
2715
2636
|
{
|
|
2716
2637
|
role: "article",
|
|
@@ -2729,7 +2650,7 @@ function CompassCardHorizontal({
|
|
|
2729
2650
|
onFocus: () => setFocused(true),
|
|
2730
2651
|
onBlur: () => setFocused(false)
|
|
2731
2652
|
},
|
|
2732
|
-
/* @__PURE__ */
|
|
2653
|
+
/* @__PURE__ */ import_react15.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react15.default.createElement("div", { style: {
|
|
2733
2654
|
position: "absolute",
|
|
2734
2655
|
bottom: "15px",
|
|
2735
2656
|
left: 0,
|
|
@@ -2744,7 +2665,7 @@ function CompassCardHorizontal({
|
|
|
2744
2665
|
padding: "6px 0",
|
|
2745
2666
|
pointerEvents: "none"
|
|
2746
2667
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed")),
|
|
2747
|
-
/* @__PURE__ */
|
|
2668
|
+
/* @__PURE__ */ import_react15.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react15.default.createElement(
|
|
2748
2669
|
CompassCardHorizontalMeta,
|
|
2749
2670
|
{
|
|
2750
2671
|
politician,
|
|
@@ -2756,7 +2677,7 @@ function CompassCardHorizontal({
|
|
|
2756
2677
|
}
|
|
2757
2678
|
|
|
2758
2679
|
// src/CompassCardVertical.jsx
|
|
2759
|
-
var
|
|
2680
|
+
var import_react16 = __toESM(require("react"));
|
|
2760
2681
|
var RADAR_SIZE2 = 400;
|
|
2761
2682
|
function CompassCardVertical({
|
|
2762
2683
|
politician,
|
|
@@ -2770,11 +2691,11 @@ function CompassCardVertical({
|
|
|
2770
2691
|
onClick
|
|
2771
2692
|
}) {
|
|
2772
2693
|
var _a;
|
|
2773
|
-
const [hovered, setHovered] = (0,
|
|
2774
|
-
const [focused, setFocused] = (0,
|
|
2775
|
-
const [imgError, setImgError] = (0,
|
|
2776
|
-
const [emptyCtaHovered, setEmptyCtaHovered] = (0,
|
|
2777
|
-
(0,
|
|
2694
|
+
const [hovered, setHovered] = (0, import_react16.useState)(false);
|
|
2695
|
+
const [focused, setFocused] = (0, import_react16.useState)(false);
|
|
2696
|
+
const [imgError, setImgError] = (0, import_react16.useState)(false);
|
|
2697
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react16.useState)(false);
|
|
2698
|
+
(0, import_react16.useEffect)(() => {
|
|
2778
2699
|
setImgError(false);
|
|
2779
2700
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2780
2701
|
const cardStyle = {
|
|
@@ -2797,7 +2718,7 @@ function CompassCardVertical({
|
|
|
2797
2718
|
function renderCompass() {
|
|
2798
2719
|
var _a2, _b, _c;
|
|
2799
2720
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2800
|
-
return /* @__PURE__ */
|
|
2721
|
+
return /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2801
2722
|
}
|
|
2802
2723
|
let topics = [];
|
|
2803
2724
|
let data = {};
|
|
@@ -2833,17 +2754,17 @@ function CompassCardVertical({
|
|
|
2833
2754
|
}, {}) : politician.stances;
|
|
2834
2755
|
}
|
|
2835
2756
|
if (topics.length === 0) {
|
|
2836
|
-
return /* @__PURE__ */
|
|
2757
|
+
return /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2837
2758
|
}
|
|
2838
2759
|
} catch {
|
|
2839
|
-
return /* @__PURE__ */
|
|
2760
|
+
return /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2840
2761
|
}
|
|
2841
2762
|
const unansweredSpokes = {};
|
|
2842
2763
|
for (const t of topics) {
|
|
2843
2764
|
const v = compareData[t.short_title];
|
|
2844
2765
|
if (!v || Number(v) === 0) unansweredSpokes[t.short_title] = true;
|
|
2845
2766
|
}
|
|
2846
|
-
return /* @__PURE__ */
|
|
2767
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { style: { width: RADAR_SIZE2 + 240, maxWidth: "100%", flexShrink: 0 } }, /* @__PURE__ */ import_react16.default.createElement(
|
|
2847
2768
|
RadarChartCore,
|
|
2848
2769
|
{
|
|
2849
2770
|
topics,
|
|
@@ -2878,7 +2799,7 @@ function CompassCardVertical({
|
|
|
2878
2799
|
justifyContent: "center"
|
|
2879
2800
|
};
|
|
2880
2801
|
if (imageSrc && !imgError) {
|
|
2881
|
-
return /* @__PURE__ */
|
|
2802
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react16.default.createElement(
|
|
2882
2803
|
"img",
|
|
2883
2804
|
{
|
|
2884
2805
|
src: imageSrc,
|
|
@@ -2896,7 +2817,7 @@ function CompassCardVertical({
|
|
|
2896
2817
|
}
|
|
2897
2818
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2898
2819
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2899
|
-
return /* @__PURE__ */
|
|
2820
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react16.default.createElement("span", { style: {
|
|
2900
2821
|
color: colors.textWhite,
|
|
2901
2822
|
fontFamily: fonts.primary,
|
|
2902
2823
|
fontWeight: fontWeights.bold,
|
|
@@ -2907,7 +2828,7 @@ function CompassCardVertical({
|
|
|
2907
2828
|
var _a2, _b, _c;
|
|
2908
2829
|
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;
|
|
2909
2830
|
if (imageSrc && !imgError) {
|
|
2910
|
-
return /* @__PURE__ */
|
|
2831
|
+
return /* @__PURE__ */ import_react16.default.createElement(
|
|
2911
2832
|
"img",
|
|
2912
2833
|
{
|
|
2913
2834
|
src: imageSrc,
|
|
@@ -2926,7 +2847,7 @@ function CompassCardVertical({
|
|
|
2926
2847
|
}
|
|
2927
2848
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2928
2849
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2929
|
-
return /* @__PURE__ */
|
|
2850
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { style: {
|
|
2930
2851
|
width: RADAR_SIZE2,
|
|
2931
2852
|
height: RADAR_SIZE2,
|
|
2932
2853
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2941,7 +2862,7 @@ function CompassCardVertical({
|
|
|
2941
2862
|
} }, initials);
|
|
2942
2863
|
}
|
|
2943
2864
|
function renderEmptyVariant() {
|
|
2944
|
-
return /* @__PURE__ */
|
|
2865
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { style: {
|
|
2945
2866
|
width: "100%",
|
|
2946
2867
|
height: "100%",
|
|
2947
2868
|
flex: 1,
|
|
@@ -2954,14 +2875,14 @@ function CompassCardVertical({
|
|
|
2954
2875
|
boxSizing: "border-box",
|
|
2955
2876
|
backgroundColor: colorScales.teal["050"],
|
|
2956
2877
|
borderRadius: borderRadius.md
|
|
2957
|
-
} }, /* @__PURE__ */
|
|
2878
|
+
} }, /* @__PURE__ */ import_react16.default.createElement(PlaceholderRadar, { size: 220, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react16.default.createElement("p", { style: {
|
|
2958
2879
|
margin: 0,
|
|
2959
2880
|
fontSize: fontSizes.sm,
|
|
2960
2881
|
color: colors.textMuted,
|
|
2961
2882
|
textAlign: "center",
|
|
2962
2883
|
lineHeight: 1.4,
|
|
2963
2884
|
fontFamily: fonts.primary
|
|
2964
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
2885
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react16.default.createElement(
|
|
2965
2886
|
"button",
|
|
2966
2887
|
{
|
|
2967
2888
|
type: "button",
|
|
@@ -2987,7 +2908,7 @@ function CompassCardVertical({
|
|
|
2987
2908
|
));
|
|
2988
2909
|
}
|
|
2989
2910
|
function renderUnavailablePlate(message) {
|
|
2990
|
-
return /* @__PURE__ */
|
|
2911
|
+
return /* @__PURE__ */ import_react16.default.createElement("div", { style: {
|
|
2991
2912
|
width: "100%",
|
|
2992
2913
|
height: "100%",
|
|
2993
2914
|
flex: 1,
|
|
@@ -2998,7 +2919,7 @@ function CompassCardVertical({
|
|
|
2998
2919
|
justifyContent: "center",
|
|
2999
2920
|
padding: spacing[6],
|
|
3000
2921
|
boxSizing: "border-box"
|
|
3001
|
-
} }, /* @__PURE__ */
|
|
2922
|
+
} }, /* @__PURE__ */ import_react16.default.createElement("p", { style: {
|
|
3002
2923
|
fontSize: fontSizes.base,
|
|
3003
2924
|
fontWeight: fontWeights.semibold,
|
|
3004
2925
|
lineHeight: 1.4,
|
|
@@ -3019,7 +2940,7 @@ function CompassCardVertical({
|
|
|
3019
2940
|
}
|
|
3020
2941
|
return renderCompass();
|
|
3021
2942
|
}
|
|
3022
|
-
return /* @__PURE__ */
|
|
2943
|
+
return /* @__PURE__ */ import_react16.default.createElement(
|
|
3023
2944
|
"div",
|
|
3024
2945
|
{
|
|
3025
2946
|
role: "article",
|
|
@@ -3038,21 +2959,21 @@ function CompassCardVertical({
|
|
|
3038
2959
|
onFocus: () => setFocused(true),
|
|
3039
2960
|
onBlur: () => setFocused(false)
|
|
3040
2961
|
},
|
|
3041
|
-
/* @__PURE__ */
|
|
2962
|
+
/* @__PURE__ */ import_react16.default.createElement("div", { style: { padding: spacing[4], paddingBottom: spacing[3], display: "flex", alignItems: "stretch", gap: spacing[3], flexShrink: 0 } }, renderAvatar(), /* @__PURE__ */ import_react16.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: spacing[1], minWidth: 0, flex: 1 } }, /* @__PURE__ */ import_react16.default.createElement("p", { style: {
|
|
3042
2963
|
fontFamily: fonts.primary,
|
|
3043
2964
|
fontSize: fontSizes.xl,
|
|
3044
2965
|
fontWeight: fontWeights.semibold,
|
|
3045
2966
|
lineHeight: 1.3,
|
|
3046
2967
|
color: colors.evMutedBlue,
|
|
3047
2968
|
margin: 0
|
|
3048
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
2969
|
+
} }, politician.full_name), /* @__PURE__ */ import_react16.default.createElement("p", { style: {
|
|
3049
2970
|
fontFamily: fonts.primary,
|
|
3050
2971
|
fontSize: fontSizes.sm,
|
|
3051
2972
|
fontWeight: fontWeights.semibold,
|
|
3052
2973
|
lineHeight: 1.4,
|
|
3053
2974
|
color: colors.textSecondary,
|
|
3054
2975
|
margin: 0
|
|
3055
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
2976
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react16.default.createElement("p", { style: {
|
|
3056
2977
|
fontFamily: fonts.primary,
|
|
3057
2978
|
fontSize: fontSizes.sm,
|
|
3058
2979
|
fontWeight: fontWeights.regular,
|
|
@@ -3062,7 +2983,7 @@ function CompassCardVertical({
|
|
|
3062
2983
|
overflow: "hidden",
|
|
3063
2984
|
textOverflow: "ellipsis",
|
|
3064
2985
|
whiteSpace: "nowrap"
|
|
3065
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
2986
|
+
} }, politician.district_label), /* @__PURE__ */ import_react16.default.createElement("div", { style: { marginTop: "auto" } }, /* @__PURE__ */ import_react16.default.createElement(
|
|
3066
2987
|
IconOverlay,
|
|
3067
2988
|
{
|
|
3068
2989
|
ballot: politician.ballot || null,
|
|
@@ -3070,7 +2991,7 @@ function CompassCardVertical({
|
|
|
3070
2991
|
branch: politician.branch || null
|
|
3071
2992
|
}
|
|
3072
2993
|
)))),
|
|
3073
|
-
surface === "elections" && politician.withdrawn && /* @__PURE__ */
|
|
2994
|
+
surface === "elections" && politician.withdrawn && /* @__PURE__ */ import_react16.default.createElement("div", { style: {
|
|
3074
2995
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
3075
2996
|
backgroundColor: "rgba(120,0,0,0.85)",
|
|
3076
2997
|
color: "#fff",
|
|
@@ -3082,7 +3003,7 @@ function CompassCardVertical({
|
|
|
3082
3003
|
padding: "6px 0",
|
|
3083
3004
|
borderRadius: borderRadius.sm
|
|
3084
3005
|
} }, "Withdrawn"),
|
|
3085
|
-
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */
|
|
3006
|
+
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */ import_react16.default.createElement("div", { style: {
|
|
3086
3007
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
3087
3008
|
backgroundColor: "rgba(0,0,0,0.75)",
|
|
3088
3009
|
color: "#fff",
|
|
@@ -3094,7 +3015,7 @@ function CompassCardVertical({
|
|
|
3094
3015
|
padding: "6px 0",
|
|
3095
3016
|
borderRadius: borderRadius.sm
|
|
3096
3017
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed"),
|
|
3097
|
-
/* @__PURE__ */
|
|
3018
|
+
/* @__PURE__ */ import_react16.default.createElement("div", { style: {
|
|
3098
3019
|
flex: 1,
|
|
3099
3020
|
padding: spacing[4],
|
|
3100
3021
|
paddingTop: 0,
|
|
@@ -3108,7 +3029,7 @@ function CompassCardVertical({
|
|
|
3108
3029
|
}
|
|
3109
3030
|
|
|
3110
3031
|
// src/CompassKey.jsx
|
|
3111
|
-
var
|
|
3032
|
+
var import_react17 = __toESM(require("react"));
|
|
3112
3033
|
|
|
3113
3034
|
// src/evContext.js
|
|
3114
3035
|
var DEFAULT_BROKER_URL = "https://ev-context.empowered.vote/";
|
|
@@ -3353,9 +3274,9 @@ var evContext = {
|
|
|
3353
3274
|
|
|
3354
3275
|
// src/CompassKey.jsx
|
|
3355
3276
|
function CompassKey({ compact = false } = {}) {
|
|
3356
|
-
const [dismissed, setDismissed] = (0,
|
|
3357
|
-
const [loaded, setLoaded] = (0,
|
|
3358
|
-
(0,
|
|
3277
|
+
const [dismissed, setDismissed] = (0, import_react17.useState)(false);
|
|
3278
|
+
const [loaded, setLoaded] = (0, import_react17.useState)(false);
|
|
3279
|
+
(0, import_react17.useEffect)(() => {
|
|
3359
3280
|
let cancelled = false;
|
|
3360
3281
|
evContext.get().then((shared) => {
|
|
3361
3282
|
if (cancelled) return;
|
|
@@ -3385,7 +3306,7 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3385
3306
|
persistDismissed(false);
|
|
3386
3307
|
}
|
|
3387
3308
|
if (!loaded) return null;
|
|
3388
|
-
const Swatch = ({ color, label, ring }) => /* @__PURE__ */
|
|
3309
|
+
const Swatch = ({ color, label, ring }) => /* @__PURE__ */ import_react17.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
|
|
3389
3310
|
display: "inline-block",
|
|
3390
3311
|
width: 12,
|
|
3391
3312
|
height: 12,
|
|
@@ -3393,9 +3314,9 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3393
3314
|
background: color,
|
|
3394
3315
|
border: `2px solid ${ring || "#fff"}`,
|
|
3395
3316
|
boxShadow: "0 0 0 1px rgba(0,0,0,0.08)"
|
|
3396
|
-
} }), /* @__PURE__ */
|
|
3317
|
+
} }), /* @__PURE__ */ import_react17.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, label));
|
|
3397
3318
|
if (dismissed) {
|
|
3398
|
-
return /* @__PURE__ */
|
|
3319
|
+
return /* @__PURE__ */ import_react17.default.createElement(
|
|
3399
3320
|
"button",
|
|
3400
3321
|
{
|
|
3401
3322
|
type: "button",
|
|
@@ -3416,11 +3337,11 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3416
3337
|
cursor: "pointer"
|
|
3417
3338
|
}
|
|
3418
3339
|
},
|
|
3419
|
-
/* @__PURE__ */
|
|
3340
|
+
/* @__PURE__ */ import_react17.default.createElement("span", { "aria-hidden": "true" }, "?"),
|
|
3420
3341
|
" Compass key"
|
|
3421
3342
|
);
|
|
3422
3343
|
}
|
|
3423
|
-
return /* @__PURE__ */
|
|
3344
|
+
return /* @__PURE__ */ import_react17.default.createElement(
|
|
3424
3345
|
"div",
|
|
3425
3346
|
{
|
|
3426
3347
|
role: "region",
|
|
@@ -3439,17 +3360,17 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3439
3360
|
boxSizing: "border-box"
|
|
3440
3361
|
}
|
|
3441
3362
|
},
|
|
3442
|
-
!compact && /* @__PURE__ */
|
|
3363
|
+
!compact && /* @__PURE__ */ import_react17.default.createElement("span", { style: {
|
|
3443
3364
|
fontSize: fontSizes.xs,
|
|
3444
3365
|
fontWeight: fontWeights.semibold,
|
|
3445
3366
|
color: colors.textMuted,
|
|
3446
3367
|
textTransform: "uppercase",
|
|
3447
3368
|
letterSpacing: "0.5px"
|
|
3448
3369
|
} }, "Compass key"),
|
|
3449
|
-
/* @__PURE__ */
|
|
3450
|
-
/* @__PURE__ */
|
|
3451
|
-
/* @__PURE__ */
|
|
3452
|
-
/* @__PURE__ */
|
|
3370
|
+
/* @__PURE__ */ import_react17.default.createElement(Swatch, { color: "#7C6B9E", label: "You" }),
|
|
3371
|
+
/* @__PURE__ */ import_react17.default.createElement(Swatch, { color: "#5A9A6E", label: "Politician" }),
|
|
3372
|
+
/* @__PURE__ */ import_react17.default.createElement(Swatch, { color: "#fed12e", label: "Match" }),
|
|
3373
|
+
/* @__PURE__ */ import_react17.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react17.default.createElement("span", { style: {
|
|
3453
3374
|
fontSize: fontSizes.xs,
|
|
3454
3375
|
fontWeight: fontWeights.semibold,
|
|
3455
3376
|
color: "#9ca3af",
|
|
@@ -3457,8 +3378,8 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3457
3378
|
textDecoration: "underline",
|
|
3458
3379
|
textDecorationStyle: "dashed",
|
|
3459
3380
|
textUnderlineOffset: "3px"
|
|
3460
|
-
} }, "Topic"), /* @__PURE__ */
|
|
3461
|
-
/* @__PURE__ */
|
|
3381
|
+
} }, "Topic"), /* @__PURE__ */ import_react17.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, "= no stance")),
|
|
3382
|
+
/* @__PURE__ */ import_react17.default.createElement(
|
|
3462
3383
|
"button",
|
|
3463
3384
|
{
|
|
3464
3385
|
type: "button",
|
|
@@ -3481,7 +3402,7 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3481
3402
|
}
|
|
3482
3403
|
|
|
3483
3404
|
// src/CategorySection.jsx
|
|
3484
|
-
var
|
|
3405
|
+
var import_react18 = __toESM(require("react"));
|
|
3485
3406
|
function CategorySection({
|
|
3486
3407
|
title,
|
|
3487
3408
|
infoTooltip,
|
|
@@ -3491,7 +3412,7 @@ function CategorySection({
|
|
|
3491
3412
|
tier
|
|
3492
3413
|
}) {
|
|
3493
3414
|
var _a, _b;
|
|
3494
|
-
const [showTooltip, setShowTooltip] = (0,
|
|
3415
|
+
const [showTooltip, setShowTooltip] = (0, import_react18.useState)(false);
|
|
3495
3416
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3496
3417
|
const styles2 = {
|
|
3497
3418
|
section: {
|
|
@@ -3559,7 +3480,7 @@ function CategorySection({
|
|
|
3559
3480
|
gap: spacing[4]
|
|
3560
3481
|
}
|
|
3561
3482
|
};
|
|
3562
|
-
return /* @__PURE__ */
|
|
3483
|
+
return /* @__PURE__ */ import_react18.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react18.default.createElement(
|
|
3563
3484
|
"button",
|
|
3564
3485
|
{
|
|
3565
3486
|
type: "button",
|
|
@@ -3571,8 +3492,8 @@ function CategorySection({
|
|
|
3571
3492
|
"aria-label": `Info about ${title}`
|
|
3572
3493
|
},
|
|
3573
3494
|
"i",
|
|
3574
|
-
showTooltip && /* @__PURE__ */
|
|
3575
|
-
), websiteUrl && /* @__PURE__ */
|
|
3495
|
+
showTooltip && /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
|
|
3496
|
+
), websiteUrl && /* @__PURE__ */ import_react18.default.createElement(
|
|
3576
3497
|
"a",
|
|
3577
3498
|
{
|
|
3578
3499
|
href: websiteUrl,
|
|
@@ -3581,7 +3502,7 @@ function CategorySection({
|
|
|
3581
3502
|
style: styles2.externalLink,
|
|
3582
3503
|
"aria-label": `Visit official website for ${title}`
|
|
3583
3504
|
},
|
|
3584
|
-
/* @__PURE__ */
|
|
3505
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
3585
3506
|
"svg",
|
|
3586
3507
|
{
|
|
3587
3508
|
viewBox: "0 0 24 24",
|
|
@@ -3589,7 +3510,7 @@ function CategorySection({
|
|
|
3589
3510
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3590
3511
|
style: { width: "14px", height: "14px" }
|
|
3591
3512
|
},
|
|
3592
|
-
/* @__PURE__ */
|
|
3513
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
3593
3514
|
"path",
|
|
3594
3515
|
{
|
|
3595
3516
|
d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
|
|
@@ -3600,11 +3521,11 @@ function CategorySection({
|
|
|
3600
3521
|
}
|
|
3601
3522
|
)
|
|
3602
3523
|
)
|
|
3603
|
-
)), /* @__PURE__ */
|
|
3524
|
+
)), /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
|
|
3604
3525
|
}
|
|
3605
3526
|
|
|
3606
3527
|
// src/SubGroupSection.jsx
|
|
3607
|
-
var
|
|
3528
|
+
var import_react19 = __toESM(require("react"));
|
|
3608
3529
|
function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap, justifyContent }) {
|
|
3609
3530
|
const styles2 = {
|
|
3610
3531
|
section: {
|
|
@@ -3639,7 +3560,7 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3639
3560
|
width: "100%"
|
|
3640
3561
|
}
|
|
3641
3562
|
};
|
|
3642
|
-
return /* @__PURE__ */
|
|
3563
|
+
return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react19.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react19.default.createElement(
|
|
3643
3564
|
"a",
|
|
3644
3565
|
{
|
|
3645
3566
|
href: websiteUrl,
|
|
@@ -3647,12 +3568,12 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3647
3568
|
rel: "noopener noreferrer",
|
|
3648
3569
|
style: styles2.link
|
|
3649
3570
|
},
|
|
3650
|
-
/* @__PURE__ */
|
|
3651
|
-
)), /* @__PURE__ */
|
|
3571
|
+
/* @__PURE__ */ import_react19.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.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" }))
|
|
3572
|
+
)), /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
|
|
3652
3573
|
}
|
|
3653
3574
|
|
|
3654
3575
|
// src/GovernmentBodySection.jsx
|
|
3655
|
-
var
|
|
3576
|
+
var import_react20 = __toESM(require("react"));
|
|
3656
3577
|
function GovernmentBodySection({
|
|
3657
3578
|
title,
|
|
3658
3579
|
websiteUrl,
|
|
@@ -3661,7 +3582,7 @@ function GovernmentBodySection({
|
|
|
3661
3582
|
children
|
|
3662
3583
|
}) {
|
|
3663
3584
|
var _a;
|
|
3664
|
-
const [expanded, setExpanded] = (0,
|
|
3585
|
+
const [expanded, setExpanded] = (0, import_react20.useState)(defaultExpanded);
|
|
3665
3586
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3666
3587
|
const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
|
|
3667
3588
|
const styles2 = {
|
|
@@ -3701,7 +3622,7 @@ function GovernmentBodySection({
|
|
|
3701
3622
|
display: expanded ? "block" : "none"
|
|
3702
3623
|
}
|
|
3703
3624
|
};
|
|
3704
|
-
return /* @__PURE__ */
|
|
3625
|
+
return /* @__PURE__ */ import_react20.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
3705
3626
|
"div",
|
|
3706
3627
|
{
|
|
3707
3628
|
style: styles2.header,
|
|
@@ -3717,8 +3638,8 @@ function GovernmentBodySection({
|
|
|
3717
3638
|
"aria-expanded": expanded,
|
|
3718
3639
|
"aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
|
|
3719
3640
|
},
|
|
3720
|
-
/* @__PURE__ */
|
|
3721
|
-
websiteUrl && /* @__PURE__ */
|
|
3641
|
+
/* @__PURE__ */ import_react20.default.createElement("span", { style: styles2.title }, title),
|
|
3642
|
+
websiteUrl && /* @__PURE__ */ import_react20.default.createElement(
|
|
3722
3643
|
"a",
|
|
3723
3644
|
{
|
|
3724
3645
|
href: websiteUrl,
|
|
@@ -3728,14 +3649,14 @@ function GovernmentBodySection({
|
|
|
3728
3649
|
onClick: (e) => e.stopPropagation(),
|
|
3729
3650
|
"aria-label": `Visit ${title} website`
|
|
3730
3651
|
},
|
|
3731
|
-
/* @__PURE__ */
|
|
3652
|
+
/* @__PURE__ */ import_react20.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react20.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react20.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" }))
|
|
3732
3653
|
),
|
|
3733
|
-
/* @__PURE__ */
|
|
3734
|
-
), /* @__PURE__ */
|
|
3654
|
+
/* @__PURE__ */ import_react20.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
|
|
3655
|
+
), /* @__PURE__ */ import_react20.default.createElement("div", { style: styles2.content }, children));
|
|
3735
3656
|
}
|
|
3736
3657
|
|
|
3737
3658
|
// src/SocialLinks.jsx
|
|
3738
|
-
var
|
|
3659
|
+
var import_react21 = __toESM(require("react"));
|
|
3739
3660
|
var SOCIAL_PLATFORMS = [
|
|
3740
3661
|
{ test: /facebook\.com/i, platform: "facebook" },
|
|
3741
3662
|
{ test: /twitter\.com|x\.com/i, platform: "twitter" },
|
|
@@ -3807,7 +3728,7 @@ function SocialLinks({
|
|
|
3807
3728
|
}
|
|
3808
3729
|
};
|
|
3809
3730
|
const platformIconMap = {
|
|
3810
|
-
twitter: /* @__PURE__ */
|
|
3731
|
+
twitter: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement(
|
|
3811
3732
|
"path",
|
|
3812
3733
|
{
|
|
3813
3734
|
d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
|
|
@@ -3817,7 +3738,7 @@ function SocialLinks({
|
|
|
3817
3738
|
strokeLinejoin: "round"
|
|
3818
3739
|
}
|
|
3819
3740
|
)),
|
|
3820
|
-
facebook: /* @__PURE__ */
|
|
3741
|
+
facebook: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement(
|
|
3821
3742
|
"path",
|
|
3822
3743
|
{
|
|
3823
3744
|
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",
|
|
@@ -3827,8 +3748,8 @@ function SocialLinks({
|
|
|
3827
3748
|
strokeLinejoin: "round"
|
|
3828
3749
|
}
|
|
3829
3750
|
)),
|
|
3830
|
-
instagram: /* @__PURE__ */
|
|
3831
|
-
linkedin: /* @__PURE__ */
|
|
3751
|
+
instagram: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
|
|
3752
|
+
linkedin: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement(
|
|
3832
3753
|
"path",
|
|
3833
3754
|
{
|
|
3834
3755
|
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",
|
|
@@ -3837,8 +3758,8 @@ function SocialLinks({
|
|
|
3837
3758
|
strokeLinecap: "round",
|
|
3838
3759
|
strokeLinejoin: "round"
|
|
3839
3760
|
}
|
|
3840
|
-
), /* @__PURE__ */
|
|
3841
|
-
youtube: /* @__PURE__ */
|
|
3761
|
+
), /* @__PURE__ */ import_react21.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
|
|
3762
|
+
youtube: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
|
|
3842
3763
|
};
|
|
3843
3764
|
const links = [
|
|
3844
3765
|
{
|
|
@@ -3864,7 +3785,7 @@ function SocialLinks({
|
|
|
3864
3785
|
{
|
|
3865
3786
|
href: website,
|
|
3866
3787
|
label: "Website",
|
|
3867
|
-
icon: /* @__PURE__ */
|
|
3788
|
+
icon: /* @__PURE__ */ import_react21.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react21.default.createElement(
|
|
3868
3789
|
"path",
|
|
3869
3790
|
{
|
|
3870
3791
|
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",
|
|
@@ -3894,7 +3815,7 @@ function SocialLinks({
|
|
|
3894
3815
|
if (links.length === 0) {
|
|
3895
3816
|
return null;
|
|
3896
3817
|
}
|
|
3897
|
-
return /* @__PURE__ */
|
|
3818
|
+
return /* @__PURE__ */ import_react21.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react21.default.createElement(
|
|
3898
3819
|
"a",
|
|
3899
3820
|
{
|
|
3900
3821
|
key: link.label,
|
|
@@ -3917,7 +3838,7 @@ function SocialLinks({
|
|
|
3917
3838
|
}
|
|
3918
3839
|
|
|
3919
3840
|
// src/IssueTags.jsx
|
|
3920
|
-
var
|
|
3841
|
+
var import_react22 = __toESM(require("react"));
|
|
3921
3842
|
function IssueTags({
|
|
3922
3843
|
tags = [],
|
|
3923
3844
|
selectedTags = [],
|
|
@@ -3960,9 +3881,9 @@ function IssueTags({
|
|
|
3960
3881
|
onTagClick(tag.value);
|
|
3961
3882
|
}
|
|
3962
3883
|
};
|
|
3963
|
-
return /* @__PURE__ */
|
|
3884
|
+
return /* @__PURE__ */ import_react22.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
|
|
3964
3885
|
const isSelected = selectedTags.includes(tag.value);
|
|
3965
|
-
return /* @__PURE__ */
|
|
3886
|
+
return /* @__PURE__ */ import_react22.default.createElement(
|
|
3966
3887
|
"span",
|
|
3967
3888
|
{
|
|
3968
3889
|
key: tag.value,
|
|
@@ -3991,7 +3912,7 @@ function IssueTags({
|
|
|
3991
3912
|
}
|
|
3992
3913
|
|
|
3993
3914
|
// src/CommitteeTable.jsx
|
|
3994
|
-
var
|
|
3915
|
+
var import_react23 = __toESM(require("react"));
|
|
3995
3916
|
var ROLE_ORDER = {
|
|
3996
3917
|
"chair": 0,
|
|
3997
3918
|
"co-chair": 1,
|
|
@@ -4016,10 +3937,9 @@ function CommitteeTable({
|
|
|
4016
3937
|
committees = [],
|
|
4017
3938
|
title = "Committee Memberships",
|
|
4018
3939
|
maxVisible = 6,
|
|
4019
|
-
style = {}
|
|
4020
|
-
darkMode = false
|
|
3940
|
+
style = {}
|
|
4021
3941
|
}) {
|
|
4022
|
-
const [showAll, setShowAll] = (0,
|
|
3942
|
+
const [showAll, setShowAll] = (0, import_react23.useState)(false);
|
|
4023
3943
|
if (committees.length === 0) {
|
|
4024
3944
|
return null;
|
|
4025
3945
|
}
|
|
@@ -4037,7 +3957,7 @@ function CommitteeTable({
|
|
|
4037
3957
|
fontFamily: fonts.primary,
|
|
4038
3958
|
fontWeight: fontWeights.semibold,
|
|
4039
3959
|
fontSize: "18px",
|
|
4040
|
-
color:
|
|
3960
|
+
color: "#101828",
|
|
4041
3961
|
margin: 0,
|
|
4042
3962
|
marginBottom: spacing[3]
|
|
4043
3963
|
},
|
|
@@ -4046,7 +3966,7 @@ function CommitteeTable({
|
|
|
4046
3966
|
borderCollapse: "collapse"
|
|
4047
3967
|
},
|
|
4048
3968
|
row: {
|
|
4049
|
-
borderBottom:
|
|
3969
|
+
borderBottom: "1px solid #F3F4F6"
|
|
4050
3970
|
},
|
|
4051
3971
|
cell: {
|
|
4052
3972
|
padding: `${spacing[2]} 0`,
|
|
@@ -4055,16 +3975,16 @@ function CommitteeTable({
|
|
|
4055
3975
|
verticalAlign: "top"
|
|
4056
3976
|
},
|
|
4057
3977
|
nameCell: {
|
|
4058
|
-
color:
|
|
3978
|
+
color: "#364153",
|
|
4059
3979
|
paddingRight: spacing[4]
|
|
4060
3980
|
},
|
|
4061
3981
|
positionCell: {
|
|
4062
|
-
color:
|
|
3982
|
+
color: "#6A7282",
|
|
4063
3983
|
textAlign: "right",
|
|
4064
3984
|
whiteSpace: "nowrap"
|
|
4065
3985
|
},
|
|
4066
3986
|
link: {
|
|
4067
|
-
color:
|
|
3987
|
+
color: "#364153",
|
|
4068
3988
|
textDecoration: "none"
|
|
4069
3989
|
},
|
|
4070
3990
|
toggle: {
|
|
@@ -4074,14 +3994,14 @@ function CommitteeTable({
|
|
|
4074
3994
|
fontFamily: fonts.primary,
|
|
4075
3995
|
fontSize: "14px",
|
|
4076
3996
|
fontWeight: fontWeights.medium,
|
|
4077
|
-
color:
|
|
3997
|
+
color: "#6A7282",
|
|
4078
3998
|
background: "none",
|
|
4079
3999
|
border: "none",
|
|
4080
4000
|
padding: `${spacing[2]} 0`,
|
|
4081
4001
|
cursor: "pointer"
|
|
4082
4002
|
}
|
|
4083
4003
|
};
|
|
4084
|
-
return /* @__PURE__ */
|
|
4004
|
+
return /* @__PURE__ */ import_react23.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react23.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react23.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react23.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react23.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react23.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react23.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react23.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react23.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react23.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react23.default.createElement(
|
|
4085
4005
|
"a",
|
|
4086
4006
|
{
|
|
4087
4007
|
href: committee.url,
|
|
@@ -4096,7 +4016,7 @@ function CommitteeTable({
|
|
|
4096
4016
|
}
|
|
4097
4017
|
},
|
|
4098
4018
|
committee.name
|
|
4099
|
-
) : committee.name), /* @__PURE__ */
|
|
4019
|
+
) : committee.name), /* @__PURE__ */ import_react23.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react23.default.createElement(
|
|
4100
4020
|
"button",
|
|
4101
4021
|
{
|
|
4102
4022
|
type: "button",
|
|
@@ -4104,7 +4024,7 @@ function CommitteeTable({
|
|
|
4104
4024
|
onClick: () => setShowAll(!showAll)
|
|
4105
4025
|
},
|
|
4106
4026
|
showAll ? "Show less" : `Show all ${sorted.length} committees`,
|
|
4107
|
-
/* @__PURE__ */
|
|
4027
|
+
/* @__PURE__ */ import_react23.default.createElement(
|
|
4108
4028
|
"svg",
|
|
4109
4029
|
{
|
|
4110
4030
|
width: "14",
|
|
@@ -4117,16 +4037,16 @@ function CommitteeTable({
|
|
|
4117
4037
|
strokeLinejoin: "round",
|
|
4118
4038
|
style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
|
|
4119
4039
|
},
|
|
4120
|
-
/* @__PURE__ */
|
|
4040
|
+
/* @__PURE__ */ import_react23.default.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
4121
4041
|
)
|
|
4122
4042
|
));
|
|
4123
4043
|
}
|
|
4124
4044
|
|
|
4125
4045
|
// src/PoliticianProfile.jsx
|
|
4126
|
-
var
|
|
4046
|
+
var import_react26 = __toESM(require("react"));
|
|
4127
4047
|
|
|
4128
4048
|
// src/LegislativeInlineSummary.jsx
|
|
4129
|
-
var
|
|
4049
|
+
var import_react24 = __toESM(require("react"));
|
|
4130
4050
|
function normalizePosition(pos) {
|
|
4131
4051
|
if (!pos) return "";
|
|
4132
4052
|
return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -4234,7 +4154,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4234
4154
|
fontSize: fontSizes.sm,
|
|
4235
4155
|
fontWeight: fontWeights.medium
|
|
4236
4156
|
};
|
|
4237
|
-
return /* @__PURE__ */
|
|
4157
|
+
return /* @__PURE__ */ import_react24.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react24.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react24.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react24.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react24.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react24.default.createElement("div", null), /* @__PURE__ */ import_react24.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react24.default.createElement(
|
|
4238
4158
|
"button",
|
|
4239
4159
|
{
|
|
4240
4160
|
onClick: () => {
|
|
@@ -4259,12 +4179,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4259
4179
|
}
|
|
4260
4180
|
},
|
|
4261
4181
|
"View Full Legislative Record",
|
|
4262
|
-
/* @__PURE__ */
|
|
4182
|
+
/* @__PURE__ */ import_react24.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_react24.default.createElement("path", { d: "M9 18l6-6-6-6" }))
|
|
4263
4183
|
)));
|
|
4264
4184
|
}
|
|
4265
4185
|
|
|
4266
4186
|
// src/JudicialScorecard.jsx
|
|
4267
|
-
var
|
|
4187
|
+
var import_react25 = __toESM(require("react"));
|
|
4268
4188
|
|
|
4269
4189
|
// src/judicialUtils.js
|
|
4270
4190
|
function formatDate(dateStr) {
|
|
@@ -4382,7 +4302,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
|
|
|
4382
4302
|
onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
|
|
4383
4303
|
}
|
|
4384
4304
|
};
|
|
4385
|
-
return /* @__PURE__ */
|
|
4305
|
+
return /* @__PURE__ */ import_react25.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react25.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react25.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react25.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react25.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react25.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react25.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react25.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react25.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
|
|
4386
4306
|
}
|
|
4387
4307
|
|
|
4388
4308
|
// src/PoliticianProfile.jsx
|
|
@@ -4408,10 +4328,12 @@ function stripRetain(s) {
|
|
|
4408
4328
|
return (s || "").replace(/\s*\(Retain\s+.+?\?\)/, "");
|
|
4409
4329
|
}
|
|
4410
4330
|
function qualifyLocalTitle(baseTitle, pol) {
|
|
4411
|
-
if (!
|
|
4331
|
+
if (!baseTitle) return baseTitle;
|
|
4412
4332
|
const dt = pol.district_type || "";
|
|
4413
4333
|
if (!dt.startsWith("LOCAL") && dt !== "COUNTY") return baseTitle;
|
|
4414
|
-
const
|
|
4334
|
+
const govRaw = pol.government_name || pol.representing_city || "";
|
|
4335
|
+
if (!govRaw) return baseTitle;
|
|
4336
|
+
const gov = govRaw.split(",")[0].trim();
|
|
4415
4337
|
const govCore = gov.replace(/^City of\s+/i, "").replace(/\s+County$/i, "").trim();
|
|
4416
4338
|
if (govCore && baseTitle.toLowerCase().includes(govCore.toLowerCase())) return baseTitle;
|
|
4417
4339
|
let prefix = dt === "COUNTY" ? gov : gov.replace(/^City of\s+/i, "");
|
|
@@ -4419,6 +4341,17 @@ function qualifyLocalTitle(baseTitle, pol) {
|
|
|
4419
4341
|
prefix = prefix.replace(/\s+County$/, "");
|
|
4420
4342
|
return `${prefix} ${baseTitle}`;
|
|
4421
4343
|
}
|
|
4344
|
+
function deriveSeatSubtitle(pol, cleanTitle) {
|
|
4345
|
+
const dt = pol.district_type || "";
|
|
4346
|
+
if (!dt.startsWith("LOCAL") && dt !== "COUNTY") return null;
|
|
4347
|
+
const t = cleanTitle || "";
|
|
4348
|
+
if (/\bat[- ]large\b/i.test(t)) return "At-Large";
|
|
4349
|
+
let m = t.match(/\bward\s+(\d+)/i);
|
|
4350
|
+
if (m) return `Ward ${m[1]}`;
|
|
4351
|
+
m = t.match(/\bdistrict\s+(\d+)/i);
|
|
4352
|
+
if (m) return `District ${m[1]}`;
|
|
4353
|
+
return null;
|
|
4354
|
+
}
|
|
4422
4355
|
function buildTitleAndSubtitle(pol) {
|
|
4423
4356
|
const cleanTitle = stripRetain(pol.office_title);
|
|
4424
4357
|
const cleanChamber = stripRetain(pol.chamber_name);
|
|
@@ -4439,6 +4372,8 @@ function buildTitleAndSubtitle(pol) {
|
|
|
4439
4372
|
if (dashIdx > 0) return normalizeDistrictSubtitle(cleanTitle.slice(dashIdx + 3));
|
|
4440
4373
|
if (pol.district_type === "NATIONAL_JUDICIAL")
|
|
4441
4374
|
return cleanChamber || null;
|
|
4375
|
+
const seatFromTitle = deriveSeatSubtitle(pol, cleanTitle);
|
|
4376
|
+
if (seatFromTitle) return seatFromTitle;
|
|
4442
4377
|
if (pol.district_id && /^[1-9]\d*$/.test(pol.district_id))
|
|
4443
4378
|
return `District ${pol.district_id}`;
|
|
4444
4379
|
if (pol.district_id === "0" && !/(_EXEC)$/.test(pol.district_type))
|
|
@@ -4543,13 +4478,13 @@ function formatAddress(addr) {
|
|
|
4543
4478
|
if (cityStateZip) lines.push(cityStateZip);
|
|
4544
4479
|
return lines;
|
|
4545
4480
|
}
|
|
4546
|
-
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4547
|
-
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4548
|
-
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4549
|
-
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4550
|
-
var MailIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4551
|
-
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4552
|
-
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4481
|
+
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
|
|
4482
|
+
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
|
|
4483
|
+
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react26.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
|
|
4484
|
+
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.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" }));
|
|
4485
|
+
var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.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_react26.default.createElement("path", { d: "M22 6L12 13L2 6" }));
|
|
4486
|
+
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react26.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" }));
|
|
4487
|
+
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react26.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react26.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react26.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
|
|
4553
4488
|
function PoliticianProfile({
|
|
4554
4489
|
politician = {},
|
|
4555
4490
|
onBack,
|
|
@@ -4577,8 +4512,8 @@ function PoliticianProfile({
|
|
|
4577
4512
|
return pol.photo_origin_url;
|
|
4578
4513
|
})();
|
|
4579
4514
|
const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
|
|
4580
|
-
const [imgError, setImgError] = (0,
|
|
4581
|
-
(0,
|
|
4515
|
+
const [imgError, setImgError] = (0, import_react26.useState)(false);
|
|
4516
|
+
(0, import_react26.useEffect)(() => {
|
|
4582
4517
|
setImgError(false);
|
|
4583
4518
|
}, [profileImageUrl]);
|
|
4584
4519
|
const getSocialHandle = (type) => {
|
|
@@ -4878,7 +4813,7 @@ function PoliticianProfile({
|
|
|
4878
4813
|
borderRadius: borderRadius.full
|
|
4879
4814
|
}
|
|
4880
4815
|
};
|
|
4881
|
-
return /* @__PURE__ */
|
|
4816
|
+
return /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react26.default.createElement(
|
|
4882
4817
|
"button",
|
|
4883
4818
|
{
|
|
4884
4819
|
type: "button",
|
|
@@ -4891,9 +4826,9 @@ function PoliticianProfile({
|
|
|
4891
4826
|
e.currentTarget.style.textDecoration = "none";
|
|
4892
4827
|
}
|
|
4893
4828
|
},
|
|
4894
|
-
/* @__PURE__ */
|
|
4829
|
+
/* @__PURE__ */ import_react26.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react26.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
|
|
4895
4830
|
label
|
|
4896
|
-
), /* @__PURE__ */
|
|
4831
|
+
), /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react26.default.createElement(
|
|
4897
4832
|
"img",
|
|
4898
4833
|
{
|
|
4899
4834
|
src: profileImageUrl,
|
|
@@ -4901,7 +4836,7 @@ function PoliticianProfile({
|
|
|
4901
4836
|
style: styles2.photo,
|
|
4902
4837
|
onError: () => setImgError(true)
|
|
4903
4838
|
}
|
|
4904
|
-
) : /* @__PURE__ */
|
|
4839
|
+
) : /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react26.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react26.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react26.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react26.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react26.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_react26.default.createElement(
|
|
4905
4840
|
"a",
|
|
4906
4841
|
{
|
|
4907
4842
|
href: pol.web_form_url,
|
|
@@ -4915,9 +4850,9 @@ function PoliticianProfile({
|
|
|
4915
4850
|
e.currentTarget.style.background = colors.evTeal;
|
|
4916
4851
|
}
|
|
4917
4852
|
},
|
|
4918
|
-
/* @__PURE__ */
|
|
4853
|
+
/* @__PURE__ */ import_react26.default.createElement(ExternalLinkIcon, { size: 14 }),
|
|
4919
4854
|
"Submit a Message"
|
|
4920
|
-
))), hasContactInfo && /* @__PURE__ */
|
|
4855
|
+
))), hasContactInfo && /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react26.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react26.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react26.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react26.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react26.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react26.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react26.default.createElement(
|
|
4921
4856
|
"a",
|
|
4922
4857
|
{
|
|
4923
4858
|
href: `tel:${phone}`,
|
|
@@ -4930,7 +4865,7 @@ function PoliticianProfile({
|
|
|
4930
4865
|
}
|
|
4931
4866
|
},
|
|
4932
4867
|
phone
|
|
4933
|
-
)))))), hasEmails && /* @__PURE__ */
|
|
4868
|
+
)))))), hasEmails && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react26.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_react26.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react26.default.createElement(
|
|
4934
4869
|
"a",
|
|
4935
4870
|
{
|
|
4936
4871
|
href: `mailto:${email}`,
|
|
@@ -4943,7 +4878,7 @@ function PoliticianProfile({
|
|
|
4943
4878
|
}
|
|
4944
4879
|
},
|
|
4945
4880
|
email
|
|
4946
|
-
)))))), hasWebsitesCol && /* @__PURE__ */
|
|
4881
|
+
)))))), hasWebsitesCol && /* @__PURE__ */ import_react26.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react26.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react26.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react26.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react26.default.createElement(
|
|
4947
4882
|
"a",
|
|
4948
4883
|
{
|
|
4949
4884
|
href: url,
|
|
@@ -4958,7 +4893,7 @@ function PoliticianProfile({
|
|
|
4958
4893
|
}
|
|
4959
4894
|
},
|
|
4960
4895
|
extractDomain(url)
|
|
4961
|
-
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */
|
|
4896
|
+
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react26.default.createElement(
|
|
4962
4897
|
SocialLinks,
|
|
4963
4898
|
{
|
|
4964
4899
|
twitter,
|
|
@@ -4970,14 +4905,14 @@ function PoliticianProfile({
|
|
|
4970
4905
|
darkMode,
|
|
4971
4906
|
style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
|
|
4972
4907
|
}
|
|
4973
|
-
)))), committees.length > 0 && /* @__PURE__ */
|
|
4908
|
+
)))), committees.length > 0 && /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react26.default.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ import_react26.default.createElement(
|
|
4974
4909
|
JudicialScorecard,
|
|
4975
4910
|
{
|
|
4976
4911
|
judicialRecord,
|
|
4977
4912
|
politicianId,
|
|
4978
4913
|
onNavigateToRecord
|
|
4979
4914
|
}
|
|
4980
|
-
) : /* @__PURE__ */
|
|
4915
|
+
) : /* @__PURE__ */ import_react26.default.createElement(
|
|
4981
4916
|
LegislativeInlineSummary,
|
|
4982
4917
|
{
|
|
4983
4918
|
summary: legislativeSummary,
|
|
@@ -4988,7 +4923,7 @@ function PoliticianProfile({
|
|
|
4988
4923
|
}
|
|
4989
4924
|
|
|
4990
4925
|
// src/LegislativeRecord.jsx
|
|
4991
|
-
var
|
|
4926
|
+
var import_react27 = __toESM(require("react"));
|
|
4992
4927
|
var DEFAULT_LIMIT = 25;
|
|
4993
4928
|
function normalizeText(str) {
|
|
4994
4929
|
if (!str) return "";
|
|
@@ -5068,7 +5003,7 @@ function getPositionBadge(position) {
|
|
|
5068
5003
|
return { bg: colors.borderLight, text: colors.textSecondary };
|
|
5069
5004
|
}
|
|
5070
5005
|
function Badge({ label, bg, text }) {
|
|
5071
|
-
return /* @__PURE__ */
|
|
5006
|
+
return /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5072
5007
|
display: "inline-block",
|
|
5073
5008
|
background: bg,
|
|
5074
5009
|
color: text,
|
|
@@ -5081,18 +5016,18 @@ function Badge({ label, bg, text }) {
|
|
|
5081
5016
|
} }, label);
|
|
5082
5017
|
}
|
|
5083
5018
|
function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
5084
|
-
return /* @__PURE__ */
|
|
5019
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: {
|
|
5085
5020
|
display: "flex",
|
|
5086
5021
|
alignItems: "center",
|
|
5087
5022
|
justifyContent: "space-between",
|
|
5088
5023
|
marginBottom: spacing[4]
|
|
5089
|
-
} }, /* @__PURE__ */
|
|
5024
|
+
} }, /* @__PURE__ */ import_react27.default.createElement("h2", { style: {
|
|
5090
5025
|
fontFamily: fonts.primary,
|
|
5091
5026
|
fontSize: fontSizes.xl,
|
|
5092
5027
|
fontWeight: fontWeights.bold,
|
|
5093
5028
|
color: colors.evTeal,
|
|
5094
5029
|
margin: 0
|
|
5095
|
-
} }, title), years && years.length > 0 && /* @__PURE__ */
|
|
5030
|
+
} }, title), years && years.length > 0 && /* @__PURE__ */ import_react27.default.createElement(
|
|
5096
5031
|
"select",
|
|
5097
5032
|
{
|
|
5098
5033
|
value: yearFilter,
|
|
@@ -5108,13 +5043,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
|
5108
5043
|
cursor: "pointer"
|
|
5109
5044
|
}
|
|
5110
5045
|
},
|
|
5111
|
-
/* @__PURE__ */
|
|
5112
|
-
years.map((y) => /* @__PURE__ */
|
|
5046
|
+
/* @__PURE__ */ import_react27.default.createElement("option", { value: "All" }, "All years"),
|
|
5047
|
+
years.map((y) => /* @__PURE__ */ import_react27.default.createElement("option", { key: y, value: y }, y))
|
|
5113
5048
|
));
|
|
5114
5049
|
}
|
|
5115
5050
|
function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
5116
5051
|
if (totalCount <= visibleCount) return null;
|
|
5117
|
-
return /* @__PURE__ */
|
|
5052
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react27.default.createElement(
|
|
5118
5053
|
"button",
|
|
5119
5054
|
{
|
|
5120
5055
|
type: "button",
|
|
@@ -5142,7 +5077,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
|
5142
5077
|
));
|
|
5143
5078
|
}
|
|
5144
5079
|
function EmptyState({ message }) {
|
|
5145
|
-
return /* @__PURE__ */
|
|
5080
|
+
return /* @__PURE__ */ import_react27.default.createElement("p", { style: {
|
|
5146
5081
|
fontFamily: fonts.primary,
|
|
5147
5082
|
fontSize: fontSizes.sm,
|
|
5148
5083
|
color: colors.textMuted,
|
|
@@ -5152,24 +5087,24 @@ function EmptyState({ message }) {
|
|
|
5152
5087
|
} }, message);
|
|
5153
5088
|
}
|
|
5154
5089
|
function Spinner() {
|
|
5155
|
-
return /* @__PURE__ */
|
|
5090
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: {
|
|
5156
5091
|
display: "flex",
|
|
5157
5092
|
justifyContent: "center",
|
|
5158
5093
|
alignItems: "center",
|
|
5159
5094
|
padding: spacing[10]
|
|
5160
|
-
} }, /* @__PURE__ */
|
|
5095
|
+
} }, /* @__PURE__ */ import_react27.default.createElement("div", { style: {
|
|
5161
5096
|
width: "40px",
|
|
5162
5097
|
height: "40px",
|
|
5163
5098
|
borderRadius: borderRadius.full,
|
|
5164
5099
|
border: `3px solid ${colors.borderLight}`,
|
|
5165
5100
|
borderTopColor: colors.evTeal,
|
|
5166
5101
|
animation: "ev-spin 0.8s linear infinite"
|
|
5167
|
-
} }), /* @__PURE__ */
|
|
5102
|
+
} }), /* @__PURE__ */ import_react27.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
|
|
5168
5103
|
}
|
|
5169
5104
|
function CommitteesSection({ committees, leadership }) {
|
|
5170
|
-
const [showAll, setShowAll] = (0,
|
|
5105
|
+
const [showAll, setShowAll] = (0, import_react27.useState)(false);
|
|
5171
5106
|
const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
|
|
5172
|
-
return /* @__PURE__ */
|
|
5107
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react27.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react27.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
|
|
5173
5108
|
display: "inline-flex",
|
|
5174
5109
|
alignItems: "center",
|
|
5175
5110
|
gap: spacing[1],
|
|
@@ -5180,23 +5115,23 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5180
5115
|
fontFamily: fonts.primary,
|
|
5181
5116
|
fontSize: fontSizes.sm,
|
|
5182
5117
|
fontWeight: fontWeights.semibold
|
|
5183
|
-
} }, role.title, role.chamber && /* @__PURE__ */
|
|
5118
|
+
} }, role.title, role.chamber && /* @__PURE__ */ import_react27.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react27.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("div", null, visible.map((c, i) => {
|
|
5184
5119
|
const badge = getRoleBadge(c.role);
|
|
5185
|
-
return /* @__PURE__ */
|
|
5120
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
|
|
5186
5121
|
display: "flex",
|
|
5187
5122
|
alignItems: "center",
|
|
5188
5123
|
justifyContent: "space-between",
|
|
5189
5124
|
padding: `${spacing[3]} 0`,
|
|
5190
5125
|
borderBottom: `1px solid ${colors.borderLight}`,
|
|
5191
5126
|
gap: spacing[3]
|
|
5192
|
-
} }, /* @__PURE__ */
|
|
5127
|
+
} }, /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5193
5128
|
fontFamily: fonts.primary,
|
|
5194
5129
|
fontSize: fontSizes.sm,
|
|
5195
5130
|
color: colors.textSecondary,
|
|
5196
5131
|
flex: 1,
|
|
5197
5132
|
minWidth: 0
|
|
5198
|
-
} }, c.committee_name, c.parent_name && /* @__PURE__ */
|
|
5199
|
-
})), !showAll && /* @__PURE__ */
|
|
5133
|
+
} }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react27.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react27.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
|
|
5134
|
+
})), !showAll && /* @__PURE__ */ import_react27.default.createElement(
|
|
5200
5135
|
ShowAllLink,
|
|
5201
5136
|
{
|
|
5202
5137
|
totalCount: committees.length,
|
|
@@ -5207,15 +5142,15 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5207
5142
|
}
|
|
5208
5143
|
function LegislationSection({ bills, isMobile }) {
|
|
5209
5144
|
const years = getYears(bills, "introduced_at");
|
|
5210
|
-
const [yearFilter, setYearFilter] = (0,
|
|
5211
|
-
const [showAll, setShowAll] = (0,
|
|
5145
|
+
const [yearFilter, setYearFilter] = (0, import_react27.useState)("All");
|
|
5146
|
+
const [showAll, setShowAll] = (0, import_react27.useState)(false);
|
|
5212
5147
|
const handleYearChange = (y) => {
|
|
5213
5148
|
setYearFilter(y);
|
|
5214
5149
|
setShowAll(false);
|
|
5215
5150
|
};
|
|
5216
5151
|
const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
|
|
5217
5152
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5218
|
-
return /* @__PURE__ */
|
|
5153
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react27.default.createElement(
|
|
5219
5154
|
SectionHeader,
|
|
5220
5155
|
{
|
|
5221
5156
|
title: "Sponsored Legislation",
|
|
@@ -5223,42 +5158,42 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5223
5158
|
years,
|
|
5224
5159
|
onYearChange: handleYearChange
|
|
5225
5160
|
}
|
|
5226
|
-
), bills.length === 0 ? /* @__PURE__ */
|
|
5161
|
+
), bills.length === 0 ? /* @__PURE__ */ import_react27.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("div", null, visible.map((bill, i) => {
|
|
5227
5162
|
const statusBadge = getStatusBadge(bill.status_label);
|
|
5228
|
-
return /* @__PURE__ */
|
|
5163
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
|
|
5229
5164
|
display: "flex",
|
|
5230
5165
|
flexDirection: isMobile ? "column" : "row",
|
|
5231
5166
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5232
5167
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5233
5168
|
padding: `${spacing[3]} 0`,
|
|
5234
5169
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5235
|
-
} }, /* @__PURE__ */
|
|
5170
|
+
} }, /* @__PURE__ */ import_react27.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5236
5171
|
fontFamily: fonts.primary,
|
|
5237
5172
|
fontSize: fontSizes.xs,
|
|
5238
5173
|
fontWeight: fontWeights.bold,
|
|
5239
5174
|
color: colors.textSecondary,
|
|
5240
5175
|
marginRight: spacing[2]
|
|
5241
|
-
} }, bill.number), /* @__PURE__ */
|
|
5176
|
+
} }, bill.number), /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5242
5177
|
fontFamily: fonts.primary,
|
|
5243
5178
|
fontSize: fontSizes.sm,
|
|
5244
5179
|
color: colors.textSecondary
|
|
5245
|
-
} }, bill.title)), /* @__PURE__ */
|
|
5180
|
+
} }, bill.title)), /* @__PURE__ */ import_react27.default.createElement("div", { style: {
|
|
5246
5181
|
display: "flex",
|
|
5247
5182
|
alignItems: "center",
|
|
5248
5183
|
gap: spacing[2],
|
|
5249
5184
|
flexShrink: 0,
|
|
5250
5185
|
flexWrap: "wrap"
|
|
5251
|
-
} }, /* @__PURE__ */
|
|
5186
|
+
} }, /* @__PURE__ */ import_react27.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5252
5187
|
fontFamily: fonts.primary,
|
|
5253
5188
|
fontSize: fontSizes.xs,
|
|
5254
5189
|
color: colors.textMuted
|
|
5255
|
-
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */
|
|
5190
|
+
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5256
5191
|
fontFamily: fonts.primary,
|
|
5257
5192
|
fontSize: fontSizes.xs,
|
|
5258
5193
|
color: colors.textMuted,
|
|
5259
5194
|
fontStyle: "italic"
|
|
5260
5195
|
} }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
|
|
5261
|
-
})), !showAll && /* @__PURE__ */
|
|
5196
|
+
})), !showAll && /* @__PURE__ */ import_react27.default.createElement(
|
|
5262
5197
|
ShowAllLink,
|
|
5263
5198
|
{
|
|
5264
5199
|
totalCount: filtered.length,
|
|
@@ -5269,15 +5204,15 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5269
5204
|
}
|
|
5270
5205
|
function VotingSection({ votes, isMobile }) {
|
|
5271
5206
|
const years = getYears(votes, "vote_date");
|
|
5272
|
-
const [yearFilter, setYearFilter] = (0,
|
|
5273
|
-
const [showAll, setShowAll] = (0,
|
|
5207
|
+
const [yearFilter, setYearFilter] = (0, import_react27.useState)("All");
|
|
5208
|
+
const [showAll, setShowAll] = (0, import_react27.useState)(false);
|
|
5274
5209
|
const handleYearChange = (y) => {
|
|
5275
5210
|
setYearFilter(y);
|
|
5276
5211
|
setShowAll(false);
|
|
5277
5212
|
};
|
|
5278
5213
|
const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
|
|
5279
5214
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5280
|
-
return /* @__PURE__ */
|
|
5215
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react27.default.createElement(
|
|
5281
5216
|
SectionHeader,
|
|
5282
5217
|
{
|
|
5283
5218
|
title: "Voting Record",
|
|
@@ -5285,38 +5220,38 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5285
5220
|
years,
|
|
5286
5221
|
onYearChange: handleYearChange
|
|
5287
5222
|
}
|
|
5288
|
-
), votes.length === 0 ? /* @__PURE__ */
|
|
5223
|
+
), votes.length === 0 ? /* @__PURE__ */ import_react27.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement("div", null, visible.map((vote, i) => {
|
|
5289
5224
|
const positionBadge = getPositionBadge(vote.position);
|
|
5290
5225
|
const normPosition = normalizeText(vote.position);
|
|
5291
5226
|
const topic = vote.bill_title || vote.vote_question;
|
|
5292
5227
|
const sourceUrl = vote.bill_url;
|
|
5293
|
-
return /* @__PURE__ */
|
|
5228
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { key: i, style: {
|
|
5294
5229
|
display: "flex",
|
|
5295
5230
|
flexDirection: isMobile ? "column" : "row",
|
|
5296
5231
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5297
5232
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5298
5233
|
padding: `${spacing[3]} 0`,
|
|
5299
5234
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5300
|
-
} }, /* @__PURE__ */
|
|
5235
|
+
} }, /* @__PURE__ */ import_react27.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5301
5236
|
fontFamily: fonts.primary,
|
|
5302
5237
|
fontSize: fontSizes.sm,
|
|
5303
5238
|
color: colors.textSecondary
|
|
5304
|
-
} }, topic)), /* @__PURE__ */
|
|
5239
|
+
} }, topic)), /* @__PURE__ */ import_react27.default.createElement("div", { style: {
|
|
5305
5240
|
display: "flex",
|
|
5306
5241
|
alignItems: "center",
|
|
5307
5242
|
gap: spacing[2],
|
|
5308
5243
|
flexShrink: 0,
|
|
5309
5244
|
flexWrap: "wrap"
|
|
5310
|
-
} }, vote.vote_date && /* @__PURE__ */
|
|
5245
|
+
} }, vote.vote_date && /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5311
5246
|
fontFamily: fonts.primary,
|
|
5312
5247
|
fontSize: fontSizes.xs,
|
|
5313
5248
|
color: colors.textMuted
|
|
5314
|
-
} }, formatDate2(vote.vote_date)), /* @__PURE__ */
|
|
5249
|
+
} }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react27.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react27.default.createElement("span", { style: {
|
|
5315
5250
|
fontFamily: fonts.primary,
|
|
5316
5251
|
fontSize: fontSizes.xs,
|
|
5317
5252
|
color: vote.result === "Passed" ? colors.success : colors.textMuted,
|
|
5318
5253
|
fontWeight: fontWeights.medium
|
|
5319
|
-
} }, vote.result), sourceUrl && /* @__PURE__ */
|
|
5254
|
+
} }, vote.result), sourceUrl && /* @__PURE__ */ import_react27.default.createElement(
|
|
5320
5255
|
"a",
|
|
5321
5256
|
{
|
|
5322
5257
|
href: sourceUrl,
|
|
@@ -5337,7 +5272,7 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5337
5272
|
},
|
|
5338
5273
|
"Source"
|
|
5339
5274
|
)));
|
|
5340
|
-
})), !showAll && /* @__PURE__ */
|
|
5275
|
+
})), !showAll && /* @__PURE__ */ import_react27.default.createElement(
|
|
5341
5276
|
ShowAllLink,
|
|
5342
5277
|
{
|
|
5343
5278
|
totalCount: filtered.length,
|
|
@@ -5356,20 +5291,20 @@ function LegislativeRecord({
|
|
|
5356
5291
|
}) {
|
|
5357
5292
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
5358
5293
|
if (loading) {
|
|
5359
|
-
return /* @__PURE__ */
|
|
5294
|
+
return /* @__PURE__ */ import_react27.default.createElement(Spinner, null);
|
|
5360
5295
|
}
|
|
5361
|
-
return /* @__PURE__ */
|
|
5296
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react27.default.createElement("h1", { style: {
|
|
5362
5297
|
fontFamily: fonts.primary,
|
|
5363
5298
|
fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
|
|
5364
5299
|
fontWeight: fontWeights.bold,
|
|
5365
5300
|
color: colors.evTeal,
|
|
5366
5301
|
marginBottom: spacing[8],
|
|
5367
5302
|
marginTop: 0
|
|
5368
|
-
} }, "Legislative Record: ", politicianName), /* @__PURE__ */
|
|
5303
|
+
} }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react27.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react27.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react27.default.createElement(VotingSection, { votes, isMobile }));
|
|
5369
5304
|
}
|
|
5370
5305
|
|
|
5371
5306
|
// src/JudicialRecordDetail.jsx
|
|
5372
|
-
var
|
|
5307
|
+
var import_react28 = __toESM(require("react"));
|
|
5373
5308
|
var containerStyle = {
|
|
5374
5309
|
fontFamily: "'Manrope', sans-serif",
|
|
5375
5310
|
maxWidth: "800px"
|
|
@@ -5454,7 +5389,7 @@ var emptyStateStyle = {
|
|
|
5454
5389
|
function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
5455
5390
|
var _a;
|
|
5456
5391
|
if (!judicialRecord) {
|
|
5457
|
-
return /* @__PURE__ */
|
|
5392
|
+
return /* @__PURE__ */ import_react28.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react28.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react28.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
|
|
5458
5393
|
}
|
|
5459
5394
|
const {
|
|
5460
5395
|
judge_detail: detail,
|
|
@@ -5463,13 +5398,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5463
5398
|
disciplinary_records: disciplinary = []
|
|
5464
5399
|
} = judicialRecord;
|
|
5465
5400
|
const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
|
|
5466
|
-
return /* @__PURE__ */
|
|
5401
|
+
return /* @__PURE__ */ import_react28.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react28.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react28.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react28.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_react28.default.createElement(import_react28.default.Fragment, null, /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react28.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react28.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react28.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_react28.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react28.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react28.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react28.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react28.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react28.default.createElement("thead", null, /* @__PURE__ */ import_react28.default.createElement("tr", null, /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react28.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react28.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react28.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react28.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react28.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react28.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react28.default.createElement("thead", null, /* @__PURE__ */ import_react28.default.createElement("tr", null, /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react28.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react28.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react28.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react28.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react28.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react28.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react28.default.createElement(import_react28.default.Fragment, null, /* @__PURE__ */ import_react28.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react28.default.createElement("div", { key: i, style: {
|
|
5467
5402
|
borderLeft: "3px solid #fc8181",
|
|
5468
5403
|
backgroundColor: "#fff5f5",
|
|
5469
5404
|
borderRadius: "0 6px 6px 0",
|
|
5470
5405
|
padding: "12px 16px",
|
|
5471
5406
|
marginBottom: "10px"
|
|
5472
|
-
} }, /* @__PURE__ */
|
|
5407
|
+
} }, /* @__PURE__ */ import_react28.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react28.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react28.default.createElement(
|
|
5473
5408
|
"a",
|
|
5474
5409
|
{
|
|
5475
5410
|
href: d.source_url,
|
|
@@ -5482,7 +5417,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5482
5417
|
}
|
|
5483
5418
|
|
|
5484
5419
|
// src/AuthForm.jsx
|
|
5485
|
-
var
|
|
5420
|
+
var import_react29 = __toESM(require("react"));
|
|
5486
5421
|
function AuthForm({
|
|
5487
5422
|
logoSrc = "/EVLogo.svg",
|
|
5488
5423
|
appName = "Empowered Vote",
|
|
@@ -5493,11 +5428,11 @@ function AuthForm({
|
|
|
5493
5428
|
error = null,
|
|
5494
5429
|
submitting = false
|
|
5495
5430
|
}) {
|
|
5496
|
-
const [username, setUsername] = (0,
|
|
5497
|
-
const [password, setPassword] = (0,
|
|
5498
|
-
const [confirmPassword, setConfirmPassword] = (0,
|
|
5499
|
-
const [showPasswords, setShowPasswords] = (0,
|
|
5500
|
-
const [passwordMismatch, setPasswordMismatch] = (0,
|
|
5431
|
+
const [username, setUsername] = (0, import_react29.useState)("");
|
|
5432
|
+
const [password, setPassword] = (0, import_react29.useState)("");
|
|
5433
|
+
const [confirmPassword, setConfirmPassword] = (0, import_react29.useState)("");
|
|
5434
|
+
const [showPasswords, setShowPasswords] = (0, import_react29.useState)(false);
|
|
5435
|
+
const [passwordMismatch, setPasswordMismatch] = (0, import_react29.useState)(false);
|
|
5501
5436
|
const isLogin = mode === "login";
|
|
5502
5437
|
const handleSubmit = (e) => {
|
|
5503
5438
|
e.preventDefault();
|
|
@@ -5509,7 +5444,7 @@ function AuthForm({
|
|
|
5509
5444
|
setPasswordMismatch(false);
|
|
5510
5445
|
onSubmit == null ? void 0 : onSubmit(username.trim(), password);
|
|
5511
5446
|
};
|
|
5512
|
-
const EyeOpen = () => /* @__PURE__ */
|
|
5447
|
+
const EyeOpen = () => /* @__PURE__ */ import_react29.default.createElement(
|
|
5513
5448
|
"svg",
|
|
5514
5449
|
{
|
|
5515
5450
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5519,7 +5454,7 @@ function AuthForm({
|
|
|
5519
5454
|
stroke: "currentColor",
|
|
5520
5455
|
style: { width: "20px", height: "20px" }
|
|
5521
5456
|
},
|
|
5522
|
-
/* @__PURE__ */
|
|
5457
|
+
/* @__PURE__ */ import_react29.default.createElement(
|
|
5523
5458
|
"path",
|
|
5524
5459
|
{
|
|
5525
5460
|
strokeLinecap: "round",
|
|
@@ -5527,7 +5462,7 @@ function AuthForm({
|
|
|
5527
5462
|
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"
|
|
5528
5463
|
}
|
|
5529
5464
|
),
|
|
5530
|
-
/* @__PURE__ */
|
|
5465
|
+
/* @__PURE__ */ import_react29.default.createElement(
|
|
5531
5466
|
"path",
|
|
5532
5467
|
{
|
|
5533
5468
|
strokeLinecap: "round",
|
|
@@ -5536,7 +5471,7 @@ function AuthForm({
|
|
|
5536
5471
|
}
|
|
5537
5472
|
)
|
|
5538
5473
|
);
|
|
5539
|
-
const EyeClosed = () => /* @__PURE__ */
|
|
5474
|
+
const EyeClosed = () => /* @__PURE__ */ import_react29.default.createElement(
|
|
5540
5475
|
"svg",
|
|
5541
5476
|
{
|
|
5542
5477
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5546,7 +5481,7 @@ function AuthForm({
|
|
|
5546
5481
|
stroke: "currentColor",
|
|
5547
5482
|
style: { width: "20px", height: "20px" }
|
|
5548
5483
|
},
|
|
5549
|
-
/* @__PURE__ */
|
|
5484
|
+
/* @__PURE__ */ import_react29.default.createElement(
|
|
5550
5485
|
"path",
|
|
5551
5486
|
{
|
|
5552
5487
|
strokeLinecap: "round",
|
|
@@ -5555,17 +5490,17 @@ function AuthForm({
|
|
|
5555
5490
|
}
|
|
5556
5491
|
)
|
|
5557
5492
|
);
|
|
5558
|
-
const PasswordToggle = () => /* @__PURE__ */
|
|
5493
|
+
const PasswordToggle = () => /* @__PURE__ */ import_react29.default.createElement(
|
|
5559
5494
|
"button",
|
|
5560
5495
|
{
|
|
5561
5496
|
type: "button",
|
|
5562
5497
|
onClick: () => setShowPasswords((prev) => !prev),
|
|
5563
5498
|
style: styles.passwordToggle
|
|
5564
5499
|
},
|
|
5565
|
-
showPasswords ? /* @__PURE__ */
|
|
5500
|
+
showPasswords ? /* @__PURE__ */ import_react29.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react29.default.createElement(EyeClosed, null)
|
|
5566
5501
|
);
|
|
5567
5502
|
const displayError = passwordMismatch ? "Passwords do not match." : error;
|
|
5568
|
-
return /* @__PURE__ */
|
|
5503
|
+
return /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react29.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react29.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react29.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react29.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react29.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react29.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react29.default.createElement(
|
|
5569
5504
|
"input",
|
|
5570
5505
|
{
|
|
5571
5506
|
type: "text",
|
|
@@ -5582,7 +5517,7 @@ function AuthForm({
|
|
|
5582
5517
|
},
|
|
5583
5518
|
required: true
|
|
5584
5519
|
}
|
|
5585
|
-
)), /* @__PURE__ */
|
|
5520
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react29.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react29.default.createElement(
|
|
5586
5521
|
"input",
|
|
5587
5522
|
{
|
|
5588
5523
|
type: showPasswords ? "text" : "password",
|
|
@@ -5598,7 +5533,7 @@ function AuthForm({
|
|
|
5598
5533
|
},
|
|
5599
5534
|
required: true
|
|
5600
5535
|
}
|
|
5601
|
-
), /* @__PURE__ */
|
|
5536
|
+
), /* @__PURE__ */ import_react29.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react29.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react29.default.createElement(
|
|
5602
5537
|
"input",
|
|
5603
5538
|
{
|
|
5604
5539
|
type: showPasswords ? "text" : "password",
|
|
@@ -5614,7 +5549,7 @@ function AuthForm({
|
|
|
5614
5549
|
},
|
|
5615
5550
|
required: true
|
|
5616
5551
|
}
|
|
5617
|
-
), /* @__PURE__ */
|
|
5552
|
+
), /* @__PURE__ */ import_react29.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react29.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react29.default.createElement(
|
|
5618
5553
|
"button",
|
|
5619
5554
|
{
|
|
5620
5555
|
type: "submit",
|
|
@@ -5632,7 +5567,7 @@ function AuthForm({
|
|
|
5632
5567
|
}
|
|
5633
5568
|
},
|
|
5634
5569
|
submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
|
|
5635
|
-
), onModeSwitch && /* @__PURE__ */
|
|
5570
|
+
), onModeSwitch && /* @__PURE__ */ import_react29.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react29.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react29.default.createElement(
|
|
5636
5571
|
"button",
|
|
5637
5572
|
{
|
|
5638
5573
|
type: "button",
|
|
@@ -5805,9 +5740,9 @@ var styles = {
|
|
|
5805
5740
|
};
|
|
5806
5741
|
|
|
5807
5742
|
// src/TopicTierBadge.jsx
|
|
5808
|
-
var
|
|
5743
|
+
var import_react30 = __toESM(require("react"));
|
|
5809
5744
|
function LandmarkIcon({ size = 14 }) {
|
|
5810
|
-
return /* @__PURE__ */
|
|
5745
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
5811
5746
|
"svg",
|
|
5812
5747
|
{
|
|
5813
5748
|
width: size,
|
|
@@ -5821,16 +5756,16 @@ function LandmarkIcon({ size = 14 }) {
|
|
|
5821
5756
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5822
5757
|
"aria-hidden": "true"
|
|
5823
5758
|
},
|
|
5824
|
-
/* @__PURE__ */
|
|
5825
|
-
/* @__PURE__ */
|
|
5826
|
-
/* @__PURE__ */
|
|
5827
|
-
/* @__PURE__ */
|
|
5828
|
-
/* @__PURE__ */
|
|
5829
|
-
/* @__PURE__ */
|
|
5759
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 18v-7" }),
|
|
5760
|
+
/* @__PURE__ */ import_react30.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" }),
|
|
5761
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M14 18v-7" }),
|
|
5762
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M18 18v-7" }),
|
|
5763
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M3 22h18" }),
|
|
5764
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M6 18v-7" })
|
|
5830
5765
|
);
|
|
5831
5766
|
}
|
|
5832
5767
|
function Building2Icon({ size = 14 }) {
|
|
5833
|
-
return /* @__PURE__ */
|
|
5768
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
5834
5769
|
"svg",
|
|
5835
5770
|
{
|
|
5836
5771
|
width: size,
|
|
@@ -5844,17 +5779,17 @@ function Building2Icon({ size = 14 }) {
|
|
|
5844
5779
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5845
5780
|
"aria-hidden": "true"
|
|
5846
5781
|
},
|
|
5847
|
-
/* @__PURE__ */
|
|
5848
|
-
/* @__PURE__ */
|
|
5849
|
-
/* @__PURE__ */
|
|
5850
|
-
/* @__PURE__ */
|
|
5851
|
-
/* @__PURE__ */
|
|
5852
|
-
/* @__PURE__ */
|
|
5853
|
-
/* @__PURE__ */
|
|
5782
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
|
|
5783
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
|
|
5784
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
|
|
5785
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 6h4" }),
|
|
5786
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 10h4" }),
|
|
5787
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 14h4" }),
|
|
5788
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "M10 18h4" })
|
|
5854
5789
|
);
|
|
5855
5790
|
}
|
|
5856
5791
|
function HomeIcon({ size = 14 }) {
|
|
5857
|
-
return /* @__PURE__ */
|
|
5792
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
5858
5793
|
"svg",
|
|
5859
5794
|
{
|
|
5860
5795
|
width: size,
|
|
@@ -5868,8 +5803,8 @@ function HomeIcon({ size = 14 }) {
|
|
|
5868
5803
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5869
5804
|
"aria-hidden": "true"
|
|
5870
5805
|
},
|
|
5871
|
-
/* @__PURE__ */
|
|
5872
|
-
/* @__PURE__ */
|
|
5806
|
+
/* @__PURE__ */ import_react30.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
|
|
5807
|
+
/* @__PURE__ */ import_react30.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
|
|
5873
5808
|
);
|
|
5874
5809
|
}
|
|
5875
5810
|
var TIER_INFO = {
|
|
@@ -5929,7 +5864,7 @@ function TopicTierBadge({
|
|
|
5929
5864
|
userSelect: "none"
|
|
5930
5865
|
};
|
|
5931
5866
|
};
|
|
5932
|
-
return /* @__PURE__ */
|
|
5867
|
+
return /* @__PURE__ */ import_react30.default.createElement(
|
|
5933
5868
|
"span",
|
|
5934
5869
|
{
|
|
5935
5870
|
className: "ev-topic-tier-badge",
|
|
@@ -5939,13 +5874,13 @@ function TopicTierBadge({
|
|
|
5939
5874
|
},
|
|
5940
5875
|
effectiveTiers.map((tier) => {
|
|
5941
5876
|
const { label, Icon } = TIER_INFO[tier];
|
|
5942
|
-
return /* @__PURE__ */
|
|
5877
|
+
return /* @__PURE__ */ import_react30.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react30.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react30.default.createElement("span", null, label));
|
|
5943
5878
|
})
|
|
5944
5879
|
);
|
|
5945
5880
|
}
|
|
5946
5881
|
|
|
5947
5882
|
// src/CompassCoverageCallout.jsx
|
|
5948
|
-
var
|
|
5883
|
+
var import_react31 = __toESM(require("react"));
|
|
5949
5884
|
var TIER_LABELS = {
|
|
5950
5885
|
federal: "federal",
|
|
5951
5886
|
state: "state",
|
|
@@ -5958,7 +5893,7 @@ function CompassCoverageCallout({
|
|
|
5958
5893
|
compassUrl,
|
|
5959
5894
|
onDismiss
|
|
5960
5895
|
}) {
|
|
5961
|
-
const [dismissed, setDismissed] = (0,
|
|
5896
|
+
const [dismissed, setDismissed] = (0, import_react31.useState)(false);
|
|
5962
5897
|
if (dismissed) return null;
|
|
5963
5898
|
const tierLabel = TIER_LABELS[tier] || tier;
|
|
5964
5899
|
const tierStyle = tierColors[tier] || tierColors.federal;
|
|
@@ -6009,15 +5944,15 @@ function CompassCoverageCallout({
|
|
|
6009
5944
|
setDismissed(true);
|
|
6010
5945
|
if (onDismiss) onDismiss();
|
|
6011
5946
|
};
|
|
6012
|
-
return /* @__PURE__ */
|
|
5947
|
+
return /* @__PURE__ */ import_react31.default.createElement(
|
|
6013
5948
|
"div",
|
|
6014
5949
|
{
|
|
6015
5950
|
className: "ev-compass-coverage-callout",
|
|
6016
5951
|
role: "status",
|
|
6017
5952
|
style: containerStyle2
|
|
6018
5953
|
},
|
|
6019
|
-
/* @__PURE__ */
|
|
6020
|
-
onDismiss !== void 0 && /* @__PURE__ */
|
|
5954
|
+
/* @__PURE__ */ import_react31.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react31.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react31.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_react31.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
|
|
5955
|
+
onDismiss !== void 0 && /* @__PURE__ */ import_react31.default.createElement(
|
|
6021
5956
|
"button",
|
|
6022
5957
|
{
|
|
6023
5958
|
onClick: handleDismiss,
|
|
@@ -6030,7 +5965,7 @@ function CompassCoverageCallout({
|
|
|
6030
5965
|
}
|
|
6031
5966
|
|
|
6032
5967
|
// src/ExpandCompassNudge.jsx
|
|
6033
|
-
var
|
|
5968
|
+
var import_react32 = __toESM(require("react"));
|
|
6034
5969
|
function ExpandCompassNudge({
|
|
6035
5970
|
politicianName,
|
|
6036
5971
|
missingCount,
|
|
@@ -6077,7 +6012,7 @@ function ExpandCompassNudge({
|
|
|
6077
6012
|
};
|
|
6078
6013
|
const topicsLabel = missingCount === 1 ? "topic" : "topics";
|
|
6079
6014
|
const speakerName = politicianName || "This politician";
|
|
6080
|
-
return /* @__PURE__ */
|
|
6015
|
+
return /* @__PURE__ */ import_react32.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react32.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react32.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_react32.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
|
|
6081
6016
|
}
|
|
6082
6017
|
|
|
6083
6018
|
// src/computeTierCoverage.js
|
|
@@ -6098,7 +6033,7 @@ function computeTierCoverage(topics) {
|
|
|
6098
6033
|
}
|
|
6099
6034
|
|
|
6100
6035
|
// src/useEvContextPromotion.js
|
|
6101
|
-
var
|
|
6036
|
+
var import_react33 = require("react");
|
|
6102
6037
|
function useEvContextPromotion({
|
|
6103
6038
|
domain,
|
|
6104
6039
|
isLoggedIn,
|
|
@@ -6107,23 +6042,23 @@ function useEvContextPromotion({
|
|
|
6107
6042
|
apiWriter,
|
|
6108
6043
|
enabled = true
|
|
6109
6044
|
}) {
|
|
6110
|
-
const [shouldPrompt, setShouldPrompt] = (0,
|
|
6111
|
-
const [payload, setPayload] = (0,
|
|
6112
|
-
const [status, setStatus] = (0,
|
|
6113
|
-
const [error, setError] = (0,
|
|
6114
|
-
const apiDataRef = (0,
|
|
6045
|
+
const [shouldPrompt, setShouldPrompt] = (0, import_react33.useState)(false);
|
|
6046
|
+
const [payload, setPayload] = (0, import_react33.useState)(null);
|
|
6047
|
+
const [status, setStatus] = (0, import_react33.useState)("idle");
|
|
6048
|
+
const [error, setError] = (0, import_react33.useState)(null);
|
|
6049
|
+
const apiDataRef = (0, import_react33.useRef)(apiData);
|
|
6115
6050
|
apiDataRef.current = apiData;
|
|
6116
|
-
const userIdRef = (0,
|
|
6051
|
+
const userIdRef = (0, import_react33.useRef)(userId);
|
|
6117
6052
|
userIdRef.current = userId;
|
|
6118
|
-
const isLoggedInRef = (0,
|
|
6053
|
+
const isLoggedInRef = (0, import_react33.useRef)(isLoggedIn);
|
|
6119
6054
|
isLoggedInRef.current = isLoggedIn;
|
|
6120
|
-
const enabledRef = (0,
|
|
6055
|
+
const enabledRef = (0, import_react33.useRef)(enabled);
|
|
6121
6056
|
enabledRef.current = enabled;
|
|
6122
|
-
const domainRef = (0,
|
|
6057
|
+
const domainRef = (0, import_react33.useRef)(domain);
|
|
6123
6058
|
domainRef.current = domain;
|
|
6124
|
-
const apiWriterRef = (0,
|
|
6059
|
+
const apiWriterRef = (0, import_react33.useRef)(apiWriter);
|
|
6125
6060
|
apiWriterRef.current = apiWriter;
|
|
6126
|
-
const detect = (0,
|
|
6061
|
+
const detect = (0, import_react33.useCallback)(async () => {
|
|
6127
6062
|
const _enabled = enabledRef.current;
|
|
6128
6063
|
const _isLoggedIn = isLoggedInRef.current;
|
|
6129
6064
|
const _userId = userIdRef.current;
|
|
@@ -6162,16 +6097,16 @@ function useEvContextPromotion({
|
|
|
6162
6097
|
setPayload(null);
|
|
6163
6098
|
}
|
|
6164
6099
|
}, []);
|
|
6165
|
-
(0,
|
|
6100
|
+
(0, import_react33.useEffect)(() => {
|
|
6166
6101
|
detect();
|
|
6167
6102
|
}, [detect, isLoggedIn, userId, apiData, enabled, domain]);
|
|
6168
|
-
(0,
|
|
6103
|
+
(0, import_react33.useEffect)(() => {
|
|
6169
6104
|
const unsub = evContext.subscribe(() => {
|
|
6170
6105
|
detect();
|
|
6171
6106
|
});
|
|
6172
6107
|
return unsub;
|
|
6173
6108
|
}, [detect]);
|
|
6174
|
-
const promote = (0,
|
|
6109
|
+
const promote = (0, import_react33.useCallback)(async () => {
|
|
6175
6110
|
const _userId = userIdRef.current;
|
|
6176
6111
|
const _domain = domainRef.current;
|
|
6177
6112
|
const _writer = apiWriterRef.current;
|
|
@@ -6198,7 +6133,7 @@ function useEvContextPromotion({
|
|
|
6198
6133
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
6199
6134
|
}
|
|
6200
6135
|
}, [payload]);
|
|
6201
|
-
const dismiss = (0,
|
|
6136
|
+
const dismiss = (0, import_react33.useCallback)(async () => {
|
|
6202
6137
|
const _userId = userIdRef.current;
|
|
6203
6138
|
const _domain = domainRef.current;
|
|
6204
6139
|
if (!_userId) return;
|
|
@@ -6257,14 +6192,14 @@ function isGuestPopulated(domain, fullEvContext) {
|
|
|
6257
6192
|
}
|
|
6258
6193
|
|
|
6259
6194
|
// src/StanceAccordion.jsx
|
|
6260
|
-
var
|
|
6195
|
+
var import_react35 = __toESM(require("react"));
|
|
6261
6196
|
|
|
6262
6197
|
// src/Favicon.jsx
|
|
6263
|
-
var
|
|
6198
|
+
var import_react34 = __toESM(require("react"));
|
|
6264
6199
|
function Favicon({ url, size = 16 }) {
|
|
6265
6200
|
try {
|
|
6266
6201
|
const domain = new URL(url).hostname;
|
|
6267
|
-
return /* @__PURE__ */
|
|
6202
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
6268
6203
|
"img",
|
|
6269
6204
|
{
|
|
6270
6205
|
src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
|
|
@@ -6275,7 +6210,7 @@ function Favicon({ url, size = 16 }) {
|
|
|
6275
6210
|
}
|
|
6276
6211
|
);
|
|
6277
6212
|
} catch {
|
|
6278
|
-
return /* @__PURE__ */
|
|
6213
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
6279
6214
|
"svg",
|
|
6280
6215
|
{
|
|
6281
6216
|
width: size,
|
|
@@ -6286,8 +6221,8 @@ function Favicon({ url, size = 16 }) {
|
|
|
6286
6221
|
strokeWidth: "1.5",
|
|
6287
6222
|
style: { verticalAlign: "middle", flexShrink: 0 }
|
|
6288
6223
|
},
|
|
6289
|
-
/* @__PURE__ */
|
|
6290
|
-
/* @__PURE__ */
|
|
6224
|
+
/* @__PURE__ */ import_react34.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
6225
|
+
/* @__PURE__ */ import_react34.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" })
|
|
6291
6226
|
);
|
|
6292
6227
|
}
|
|
6293
6228
|
}
|
|
@@ -6318,11 +6253,11 @@ function StanceAccordion({
|
|
|
6318
6253
|
apiUrl = "https://api.empowered.vote"
|
|
6319
6254
|
}) {
|
|
6320
6255
|
var _a;
|
|
6321
|
-
const [expandedTopicId, setExpandedTopicId] = (0,
|
|
6322
|
-
const [loadingId, setLoadingId] = (0,
|
|
6323
|
-
const [showAll, setShowAll] = (0,
|
|
6324
|
-
const contextCache = (0,
|
|
6325
|
-
const quotesCache = (0,
|
|
6256
|
+
const [expandedTopicId, setExpandedTopicId] = (0, import_react35.useState)(null);
|
|
6257
|
+
const [loadingId, setLoadingId] = (0, import_react35.useState)(null);
|
|
6258
|
+
const [showAll, setShowAll] = (0, import_react35.useState)(false);
|
|
6259
|
+
const contextCache = (0, import_react35.useRef)(/* @__PURE__ */ new Map());
|
|
6260
|
+
const quotesCache = (0, import_react35.useRef)(null);
|
|
6326
6261
|
const polAnswerMap = {};
|
|
6327
6262
|
if (polAnswers) {
|
|
6328
6263
|
polAnswers.forEach((a) => {
|
|
@@ -6381,7 +6316,7 @@ function StanceAccordion({
|
|
|
6381
6316
|
quotesCache.current = [];
|
|
6382
6317
|
}
|
|
6383
6318
|
}
|
|
6384
|
-
const handleToggle = (0,
|
|
6319
|
+
const handleToggle = (0, import_react35.useCallback)(
|
|
6385
6320
|
async (topicId) => {
|
|
6386
6321
|
if (expandedTopicId === topicId) {
|
|
6387
6322
|
setExpandedTopicId(null);
|
|
@@ -6398,7 +6333,7 @@ function StanceAccordion({
|
|
|
6398
6333
|
},
|
|
6399
6334
|
[expandedTopicId, politicianId, apiUrl]
|
|
6400
6335
|
);
|
|
6401
|
-
(0,
|
|
6336
|
+
(0, import_react35.useEffect)(() => {
|
|
6402
6337
|
if (initialExpandedTopicId && topics && topics.length > 0) {
|
|
6403
6338
|
handleToggle(String(initialExpandedTopicId));
|
|
6404
6339
|
}
|
|
@@ -6414,13 +6349,13 @@ function StanceAccordion({
|
|
|
6414
6349
|
visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
|
|
6415
6350
|
}
|
|
6416
6351
|
}
|
|
6417
|
-
return /* @__PURE__ */
|
|
6352
|
+
return /* @__PURE__ */ import_react35.default.createElement(
|
|
6418
6353
|
"div",
|
|
6419
6354
|
{
|
|
6420
6355
|
className: "flex flex-col",
|
|
6421
6356
|
style: { fontFamily: "'Manrope', sans-serif" }
|
|
6422
6357
|
},
|
|
6423
|
-
/* @__PURE__ */
|
|
6358
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
6424
6359
|
"h3",
|
|
6425
6360
|
{
|
|
6426
6361
|
className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
|
|
@@ -6443,15 +6378,15 @@ function StanceAccordion({
|
|
|
6443
6378
|
if (topic.topic_key) return q.issue === topic.topic_key;
|
|
6444
6379
|
return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
|
|
6445
6380
|
}) : [];
|
|
6446
|
-
return /* @__PURE__ */
|
|
6381
|
+
return /* @__PURE__ */ import_react35.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
6447
6382
|
"button",
|
|
6448
6383
|
{
|
|
6449
6384
|
type: "button",
|
|
6450
6385
|
onClick: () => handleToggle(topicId),
|
|
6451
6386
|
className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
|
|
6452
6387
|
},
|
|
6453
|
-
/* @__PURE__ */
|
|
6454
|
-
/* @__PURE__ */
|
|
6388
|
+
/* @__PURE__ */ import_react35.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react35.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
|
|
6389
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
6455
6390
|
"svg",
|
|
6456
6391
|
{
|
|
6457
6392
|
width: "16",
|
|
@@ -6468,9 +6403,9 @@ function StanceAccordion({
|
|
|
6468
6403
|
transition: "transform 0.2s ease"
|
|
6469
6404
|
}
|
|
6470
6405
|
},
|
|
6471
|
-
/* @__PURE__ */
|
|
6406
|
+
/* @__PURE__ */ import_react35.default.createElement("polyline", { points: "9 18 15 12 9 6" })
|
|
6472
6407
|
)
|
|
6473
|
-
), /* @__PURE__ */
|
|
6408
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
6474
6409
|
"div",
|
|
6475
6410
|
{
|
|
6476
6411
|
style: {
|
|
@@ -6479,7 +6414,7 @@ function StanceAccordion({
|
|
|
6479
6414
|
transition: "grid-template-rows 0.25s ease"
|
|
6480
6415
|
}
|
|
6481
6416
|
},
|
|
6482
|
-
/* @__PURE__ */
|
|
6417
|
+
/* @__PURE__ */ import_react35.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react35.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react35.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
6483
6418
|
"div",
|
|
6484
6419
|
{
|
|
6485
6420
|
style: {
|
|
@@ -6491,14 +6426,14 @@ function StanceAccordion({
|
|
|
6491
6426
|
animation: "ev-spin 0.8s linear infinite"
|
|
6492
6427
|
}
|
|
6493
6428
|
}
|
|
6494
|
-
)), !isLoading && cached && /* @__PURE__ */
|
|
6429
|
+
)), !isLoading && cached && /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react35.default.createElement(
|
|
6495
6430
|
"p",
|
|
6496
6431
|
{
|
|
6497
6432
|
className: "text-sm text-neutral-700 mb-3",
|
|
6498
6433
|
style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
|
|
6499
6434
|
},
|
|
6500
6435
|
cached.reasoning
|
|
6501
|
-
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */
|
|
6436
|
+
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react35.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react35.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react35.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react35.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react35.default.createElement(
|
|
6502
6437
|
"a",
|
|
6503
6438
|
{
|
|
6504
6439
|
href: src,
|
|
@@ -6506,9 +6441,9 @@ function StanceAccordion({
|
|
|
6506
6441
|
rel: "noreferrer",
|
|
6507
6442
|
className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
|
|
6508
6443
|
},
|
|
6509
|
-
/* @__PURE__ */
|
|
6510
|
-
/* @__PURE__ */
|
|
6511
|
-
))))), topicQuotes.length > 0 && /* @__PURE__ */
|
|
6444
|
+
/* @__PURE__ */ import_react35.default.createElement(Favicon, { url: src }),
|
|
6445
|
+
/* @__PURE__ */ import_react35.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
|
|
6446
|
+
))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react35.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react35.default.createElement(
|
|
6512
6447
|
"p",
|
|
6513
6448
|
{
|
|
6514
6449
|
style: {
|
|
@@ -6525,7 +6460,7 @@ function StanceAccordion({
|
|
|
6525
6460
|
const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
|
|
6526
6461
|
const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
|
|
6527
6462
|
const sourceName = quote.source_name || quote.sourceName;
|
|
6528
|
-
return /* @__PURE__ */
|
|
6463
|
+
return /* @__PURE__ */ import_react35.default.createElement(
|
|
6529
6464
|
"div",
|
|
6530
6465
|
{
|
|
6531
6466
|
key: quote.id,
|
|
@@ -6537,7 +6472,7 @@ function StanceAccordion({
|
|
|
6537
6472
|
marginBottom: "8px"
|
|
6538
6473
|
}
|
|
6539
6474
|
},
|
|
6540
|
-
/* @__PURE__ */
|
|
6475
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
6541
6476
|
"p",
|
|
6542
6477
|
{
|
|
6543
6478
|
style: {
|
|
@@ -6550,7 +6485,7 @@ function StanceAccordion({
|
|
|
6550
6485
|
},
|
|
6551
6486
|
quote.text
|
|
6552
6487
|
),
|
|
6553
|
-
verdict === "agreed" && /* @__PURE__ */
|
|
6488
|
+
verdict === "agreed" && /* @__PURE__ */ import_react35.default.createElement(
|
|
6554
6489
|
"span",
|
|
6555
6490
|
{
|
|
6556
6491
|
style: {
|
|
@@ -6567,10 +6502,10 @@ function StanceAccordion({
|
|
|
6567
6502
|
flexShrink: 0
|
|
6568
6503
|
}
|
|
6569
6504
|
},
|
|
6570
|
-
/* @__PURE__ */
|
|
6505
|
+
/* @__PURE__ */ import_react35.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_react35.default.createElement("path", { d: "M5 13l4 4L19 7" })),
|
|
6571
6506
|
"Agreed"
|
|
6572
6507
|
),
|
|
6573
|
-
verdict === "disagreed" && /* @__PURE__ */
|
|
6508
|
+
verdict === "disagreed" && /* @__PURE__ */ import_react35.default.createElement(
|
|
6574
6509
|
"span",
|
|
6575
6510
|
{
|
|
6576
6511
|
style: {
|
|
@@ -6587,10 +6522,10 @@ function StanceAccordion({
|
|
|
6587
6522
|
flexShrink: 0
|
|
6588
6523
|
}
|
|
6589
6524
|
},
|
|
6590
|
-
/* @__PURE__ */
|
|
6525
|
+
/* @__PURE__ */ import_react35.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_react35.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
|
|
6591
6526
|
"Disagreed"
|
|
6592
6527
|
),
|
|
6593
|
-
sourceName && /* @__PURE__ */
|
|
6528
|
+
sourceName && /* @__PURE__ */ import_react35.default.createElement(
|
|
6594
6529
|
"a",
|
|
6595
6530
|
{
|
|
6596
6531
|
href: quote.source_url || quote.sourceUrl,
|
|
@@ -6607,10 +6542,10 @@ function StanceAccordion({
|
|
|
6607
6542
|
sourceName
|
|
6608
6543
|
)
|
|
6609
6544
|
);
|
|
6610
|
-
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */
|
|
6545
|
+
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react35.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
|
|
6611
6546
|
));
|
|
6612
6547
|
}),
|
|
6613
|
-
hasToggle && /* @__PURE__ */
|
|
6548
|
+
hasToggle && /* @__PURE__ */ import_react35.default.createElement(
|
|
6614
6549
|
"button",
|
|
6615
6550
|
{
|
|
6616
6551
|
type: "button",
|