@empoweredvote/ev-ui 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +532 -486
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +198 -152
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -92,7 +92,6 @@ module.exports = __toCommonJS(index_exports);
|
|
|
92
92
|
// src/RadarChartCore.jsx
|
|
93
93
|
var import_react = __toESM(require("react"));
|
|
94
94
|
var import_web = require("@react-spring/web");
|
|
95
|
-
var import_react2 = require("react");
|
|
96
95
|
function RadarChartCore({
|
|
97
96
|
topics,
|
|
98
97
|
data,
|
|
@@ -107,78 +106,78 @@ function RadarChartCore({
|
|
|
107
106
|
labelFontSize = 18,
|
|
108
107
|
padding = 80,
|
|
109
108
|
labelOffset = 20,
|
|
110
|
-
tightFit = false
|
|
109
|
+
tightFit = false,
|
|
110
|
+
activeSpoke = null,
|
|
111
|
+
writeIns = {}
|
|
111
112
|
}) {
|
|
113
|
+
var _a;
|
|
112
114
|
const radius = size / 2 - 40;
|
|
115
|
+
const extRadius = radius * 1.15;
|
|
113
116
|
const centerX = size / 2;
|
|
114
117
|
const centerY = size / 2;
|
|
118
|
+
const [tooltip, setTooltip] = (0, import_react.useState)(null);
|
|
115
119
|
const spokes = Object.entries(data);
|
|
116
120
|
const numSpokes = Math.max(spokes.length, 1);
|
|
117
|
-
const prevCountRef = (0,
|
|
121
|
+
const prevCountRef = (0, import_react.useRef)(numSpokes);
|
|
118
122
|
const countChanged = numSpokes !== prevCountRef.current;
|
|
119
|
-
(0,
|
|
123
|
+
(0, import_react.useEffect)(() => {
|
|
120
124
|
prevCountRef.current = numSpokes;
|
|
121
125
|
}, [numSpokes]);
|
|
122
|
-
|
|
123
|
-
var
|
|
126
|
+
function calcAdjusted(value, shortTitle) {
|
|
127
|
+
var _a2;
|
|
128
|
+
if (!value || Number(value) === 0) return 0;
|
|
124
129
|
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
125
|
-
const max = ((
|
|
126
|
-
const pct =
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
const max = ((_a2 = topic == null ? void 0 : topic.stances) == null ? void 0 : _a2.length) || 10;
|
|
131
|
+
const pct = Number(value) / max * 10;
|
|
132
|
+
return invertedSpokes[shortTitle] ? (max + 1) * 10 / max - pct : pct;
|
|
133
|
+
}
|
|
134
|
+
const pointsArr = spokes.map(([shortTitle, value], index) => {
|
|
135
|
+
const adjusted = calcAdjusted(value, shortTitle);
|
|
129
136
|
const r = adjusted / 10 * radius;
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
return [x, y];
|
|
137
|
+
const angle = 2 * Math.PI * index / numSpokes;
|
|
138
|
+
return [centerX + r * Math.sin(angle), centerY - r * Math.cos(angle)];
|
|
133
139
|
});
|
|
134
140
|
const targetPoints = pointsArr.map((p) => p.join(",")).join(" ");
|
|
135
|
-
const
|
|
141
|
+
const springBase = {
|
|
136
142
|
to: { points: targetPoints },
|
|
137
143
|
immediate: countChanged,
|
|
138
|
-
reset: countChanged,
|
|
139
144
|
config: { tension: 300, friction: 30 }
|
|
140
|
-
}
|
|
145
|
+
};
|
|
146
|
+
if (countChanged) springBase.from = { points: targetPoints };
|
|
147
|
+
const spring = (0, import_web.useSpring)(springBase);
|
|
141
148
|
const hasCompareData = Object.keys(compareData).length > 0;
|
|
142
149
|
const centerPoints = spokes.map(() => `${centerX},${centerY}`).join(" ");
|
|
143
150
|
let comparePoints = null;
|
|
144
151
|
let compareCoords = null;
|
|
145
152
|
if (hasCompareData) {
|
|
146
153
|
const ccoords = spokes.map(([shortTitle], index) => {
|
|
147
|
-
var
|
|
148
|
-
const value = (
|
|
149
|
-
const
|
|
150
|
-
const max = ((_b = topic == null ? void 0 : topic.stances) == null ? void 0 : _b.length) || 10;
|
|
151
|
-
const pct = Math.min(value / max * 10, 10);
|
|
152
|
-
const angle = 2 * Math.PI * index / numSpokes;
|
|
153
|
-
const adjusted = value === 0 ? 0 : invertedSpokes[shortTitle] ? 11 - pct : pct;
|
|
154
|
+
var _a2;
|
|
155
|
+
const value = (_a2 = compareData[shortTitle]) != null ? _a2 : 0;
|
|
156
|
+
const adjusted = calcAdjusted(value, shortTitle);
|
|
154
157
|
const r = adjusted / 10 * radius;
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
return [x, y];
|
|
158
|
+
const angle = 2 * Math.PI * index / numSpokes;
|
|
159
|
+
return [centerX + r * Math.sin(angle), centerY - r * Math.cos(angle)];
|
|
158
160
|
});
|
|
159
161
|
compareCoords = ccoords;
|
|
160
162
|
comparePoints = ccoords.map((p) => p.join(",")).join(" ");
|
|
161
163
|
}
|
|
162
|
-
const hadCompareDataRef = (0,
|
|
164
|
+
const hadCompareDataRef = (0, import_react.useRef)(false);
|
|
163
165
|
const compareJustAppeared = hasCompareData && !hadCompareDataRef.current;
|
|
164
|
-
(0,
|
|
166
|
+
(0, import_react.useEffect)(() => {
|
|
165
167
|
hadCompareDataRef.current = hasCompareData;
|
|
166
168
|
}, [hasCompareData]);
|
|
167
|
-
const
|
|
169
|
+
const compareSpringBase = {
|
|
168
170
|
to: { points: comparePoints || centerPoints || `${centerX},${centerY}` },
|
|
169
171
|
immediate: countChanged || compareJustAppeared,
|
|
170
|
-
reset: countChanged || compareJustAppeared,
|
|
171
172
|
config: { tension: 300, friction: 30 }
|
|
172
|
-
}
|
|
173
|
+
};
|
|
174
|
+
if (countChanged || compareJustAppeared) compareSpringBase.from = compareSpringBase.to;
|
|
175
|
+
const compareSpring = (0, import_web.useSpring)(compareSpringBase);
|
|
173
176
|
const labelMeta = spokes.map(([shortTitle], i) => {
|
|
174
177
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
175
|
-
const baseFSize = labelFontSize;
|
|
176
178
|
const lines = wrapLabel(shortTitle, 12);
|
|
177
|
-
const longestLineLen = lines.reduce(
|
|
178
|
-
|
|
179
|
-
0
|
|
180
|
-
);
|
|
181
|
-
const fSize = adaptiveFontSize(longestLineLen, baseFSize);
|
|
179
|
+
const longestLineLen = lines.reduce((m, ln) => ln.length > m ? ln.length : m, 0);
|
|
180
|
+
const fSize = adaptiveFontSize(longestLineLen, labelFontSize);
|
|
182
181
|
const estimatedWidth = longestLineLen * fSize * 0.6;
|
|
183
182
|
const sinA = Math.sin(angle);
|
|
184
183
|
const side = sinA < -0.1 ? "left" : sinA > 0.1 ? "right" : "center";
|
|
@@ -189,30 +188,31 @@ function RadarChartCore({
|
|
|
189
188
|
const minPadding = 40;
|
|
190
189
|
const maxPadding = padding * 2;
|
|
191
190
|
const rawLeftPadding = Math.min(
|
|
192
|
-
Math.max(
|
|
193
|
-
leftLabelWidths.length ? Math.max(...leftLabelWidths) + labelOffset : 0,
|
|
194
|
-
minPadding
|
|
195
|
-
),
|
|
191
|
+
Math.max(leftLabelWidths.length ? Math.max(...leftLabelWidths) + labelOffset : 0, minPadding),
|
|
196
192
|
maxPadding
|
|
197
193
|
);
|
|
198
194
|
const rawRightPadding = Math.min(
|
|
199
|
-
Math.max(
|
|
200
|
-
rightLabelWidths.length ? Math.max(...rightLabelWidths) + labelOffset : 0,
|
|
201
|
-
minPadding
|
|
202
|
-
),
|
|
195
|
+
Math.max(rightLabelWidths.length ? Math.max(...rightLabelWidths) + labelOffset : 0, minPadding),
|
|
203
196
|
maxPadding
|
|
204
197
|
);
|
|
205
198
|
const symmetricPadding = Math.max(rawLeftPadding, rawRightPadding);
|
|
206
199
|
const leftPadding = symmetricPadding;
|
|
207
200
|
const rightPadding = symmetricPadding;
|
|
208
201
|
const verticalPadding = padding;
|
|
202
|
+
const spokeExtension = spokes.reduce((acc, [shortTitle]) => {
|
|
203
|
+
const userAdj = calcAdjusted(data[shortTitle], shortTitle);
|
|
204
|
+
const cmpAdj = hasCompareData && compareData[shortTitle] ? calcAdjusted(compareData[shortTitle], shortTitle) : 0;
|
|
205
|
+
acc[shortTitle] = userAdj > 10 || cmpAdj > 10;
|
|
206
|
+
return acc;
|
|
207
|
+
}, {});
|
|
209
208
|
let tightTop = -verticalPadding;
|
|
210
209
|
let tightHeight = size + verticalPadding * 2;
|
|
211
210
|
if (tightFit && numSpokes > 0) {
|
|
212
211
|
let yMin = Infinity, yMax = -Infinity;
|
|
213
212
|
for (let i = 0; i < numSpokes; i++) {
|
|
214
213
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
215
|
-
const
|
|
214
|
+
const effectiveR = spokeExtension[(_a = spokes[i]) == null ? void 0 : _a[0]] ? extRadius : radius;
|
|
215
|
+
const y = centerY - effectiveR * Math.cos(angle);
|
|
216
216
|
if (y < yMin) yMin = y;
|
|
217
217
|
if (y > yMax) yMax = y;
|
|
218
218
|
}
|
|
@@ -226,75 +226,94 @@ function RadarChartCore({
|
|
|
226
226
|
const ring = [];
|
|
227
227
|
for (let i = 0; i < numSpokes; i++) {
|
|
228
228
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
229
|
-
|
|
230
|
-
const y = centerY - radius * scale * Math.cos(angle);
|
|
231
|
-
ring.push(`${x},${y}`);
|
|
229
|
+
ring.push(`${centerX + radius * scale * Math.sin(angle)},${centerY - radius * scale * Math.cos(angle)}`);
|
|
232
230
|
}
|
|
233
231
|
guidePolygons.push(
|
|
234
232
|
/* @__PURE__ */ import_react.default.createElement("polygon", { key: level, points: ring.join(" "), fill: "none", stroke: "#ccc" })
|
|
235
233
|
);
|
|
236
234
|
}
|
|
235
|
+
const getStanceText = (shortTitle, value) => {
|
|
236
|
+
if (writeIns[shortTitle]) return writeIns[shortTitle];
|
|
237
|
+
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
238
|
+
const stances = (topic == null ? void 0 : topic.stances) || [];
|
|
239
|
+
const idx = Math.round(Number(value)) - 1;
|
|
240
|
+
if (idx >= 0 && idx < stances.length) {
|
|
241
|
+
return stances[idx].text || shortTitle;
|
|
242
|
+
}
|
|
243
|
+
return shortTitle;
|
|
244
|
+
};
|
|
237
245
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
238
246
|
"svg",
|
|
239
247
|
{
|
|
240
248
|
className: "w-full h-auto max-h-full",
|
|
241
249
|
viewBox: `-${leftPadding} ${tightTop} ${size + leftPadding + rightPadding} ${tightHeight}`,
|
|
242
|
-
preserveAspectRatio: "xMidYMid meet"
|
|
250
|
+
preserveAspectRatio: "xMidYMid meet",
|
|
251
|
+
onMouseLeave: () => setTooltip(null)
|
|
243
252
|
},
|
|
244
253
|
guidePolygons,
|
|
245
254
|
spokes.map(([shortTitle], i) => {
|
|
246
255
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
247
|
-
const
|
|
248
|
-
const
|
|
256
|
+
const endX = centerX + radius * Math.sin(angle);
|
|
257
|
+
const endY = centerY - radius * Math.cos(angle);
|
|
249
258
|
const isUnanswered = !!unansweredSpokes[shortTitle];
|
|
250
|
-
|
|
259
|
+
const needsExt = spokeExtension[shortTitle];
|
|
260
|
+
const extX = centerX + extRadius * Math.sin(angle);
|
|
261
|
+
const extY = centerY - extRadius * Math.cos(angle);
|
|
262
|
+
return /* @__PURE__ */ import_react.default.createElement("g", { key: `spoke-${shortTitle}` }, /* @__PURE__ */ import_react.default.createElement(
|
|
251
263
|
"line",
|
|
252
264
|
{
|
|
253
|
-
key: `line-${shortTitle}`,
|
|
254
265
|
x1: centerX,
|
|
255
266
|
y1: centerY,
|
|
256
|
-
x2:
|
|
257
|
-
y2:
|
|
267
|
+
x2: endX,
|
|
268
|
+
y2: endY,
|
|
258
269
|
stroke: isUnanswered ? "#9ca3af" : "black",
|
|
259
270
|
strokeDasharray: isUnanswered ? "4 3" : void 0,
|
|
260
271
|
opacity: isUnanswered ? 0.6 : 1
|
|
261
272
|
}
|
|
262
|
-
)
|
|
273
|
+
), needsExt && /* @__PURE__ */ import_react.default.createElement(
|
|
274
|
+
"line",
|
|
275
|
+
{
|
|
276
|
+
x1: endX,
|
|
277
|
+
y1: endY,
|
|
278
|
+
x2: extX,
|
|
279
|
+
y2: extY,
|
|
280
|
+
stroke: "black",
|
|
281
|
+
strokeDasharray: "4 4",
|
|
282
|
+
opacity: 0.4
|
|
283
|
+
}
|
|
284
|
+
));
|
|
263
285
|
}),
|
|
264
286
|
spokes.map(([shortTitle], i) => {
|
|
265
287
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
266
|
-
const anchor = angle > Math.PI ? "end" : angle < Math.PI && angle > 0 ? "start" : "middle";
|
|
267
288
|
const cosA = Math.cos(angle);
|
|
268
|
-
const isTop = cosA > 0.5;
|
|
269
289
|
const isBottom = cosA < -0.5;
|
|
270
|
-
const
|
|
290
|
+
const isTop = cosA > 0.5;
|
|
271
291
|
const lines = wrapLabel(shortTitle, 12);
|
|
272
|
-
const longestLine = lines.reduce(
|
|
273
|
-
|
|
274
|
-
0
|
|
275
|
-
);
|
|
276
|
-
const fSize = adaptiveFontSize(longestLine, baseFSize);
|
|
292
|
+
const longestLine = lines.reduce((m, ln) => ln.length > m ? ln.length : m, 0);
|
|
293
|
+
const fSize = adaptiveFontSize(longestLine, labelFontSize);
|
|
277
294
|
const lineHeight = fSize * 1.1;
|
|
278
295
|
const dynamicLabelOffset = lines.length > 1 ? labelOffset + 8 : labelOffset;
|
|
279
296
|
const offset2 = radius + dynamicLabelOffset;
|
|
280
297
|
const labelX = centerX + offset2 * Math.sin(angle);
|
|
281
298
|
let labelY = centerY - offset2 * Math.cos(angle);
|
|
282
|
-
if (isTop && lines.length > 1)
|
|
283
|
-
|
|
284
|
-
}
|
|
299
|
+
if (isTop && lines.length > 1) labelY -= (lines.length - 1) * lineHeight;
|
|
300
|
+
const isActive = shortTitle === activeSpoke;
|
|
285
301
|
const isUnansweredLabel = !!unansweredSpokes[shortTitle];
|
|
302
|
+
const activeFSize = fSize * 1.5;
|
|
303
|
+
const displayFSize = isActive ? activeFSize : fSize;
|
|
286
304
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
287
305
|
"text",
|
|
288
306
|
{
|
|
289
307
|
key: `label-${shortTitle}`,
|
|
290
308
|
x: labelX,
|
|
291
309
|
y: labelY,
|
|
292
|
-
textAnchor:
|
|
310
|
+
textAnchor: "middle",
|
|
293
311
|
dominantBaseline: isBottom ? "hanging" : "auto",
|
|
294
312
|
onClick: () => onReplaceTopic(shortTitle),
|
|
295
313
|
className: "text-xl font-medium mb-1 md:text-base md:font-normal",
|
|
296
|
-
fill: isUnansweredLabel ? "#9ca3af" : void 0,
|
|
297
|
-
|
|
314
|
+
fill: isActive ? "#E85D26" : isUnansweredLabel ? "#9ca3af" : void 0,
|
|
315
|
+
fontWeight: isActive ? "bold" : void 0,
|
|
316
|
+
style: { cursor: "pointer", userSelect: "none", fontSize: displayFSize }
|
|
298
317
|
},
|
|
299
318
|
isUnansweredLabel && /* @__PURE__ */ import_react.default.createElement("title", null, "No stance on file for this topic."),
|
|
300
319
|
lines.map((ln, idx) => /* @__PURE__ */ import_react.default.createElement("tspan", { key: idx, x: labelX, dy: idx === 0 ? "0" : `${lineHeight}` }, ln))
|
|
@@ -305,22 +324,14 @@ function RadarChartCore({
|
|
|
305
324
|
{
|
|
306
325
|
key: "user-static",
|
|
307
326
|
points: targetPoints,
|
|
308
|
-
style: {
|
|
309
|
-
fill: "rgba(124, 107, 158, 0.4)",
|
|
310
|
-
stroke: "#7C6B9E",
|
|
311
|
-
strokeWidth: 3
|
|
312
|
-
}
|
|
327
|
+
style: { fill: "rgba(124, 107, 158, 0.4)", stroke: "#7C6B9E", strokeWidth: 3 }
|
|
313
328
|
}
|
|
314
329
|
) : /* @__PURE__ */ import_react.default.createElement(
|
|
315
330
|
import_web.animated.polygon,
|
|
316
331
|
{
|
|
317
332
|
key: "user-animated",
|
|
318
333
|
points: spring.points,
|
|
319
|
-
style: {
|
|
320
|
-
fill: "rgba(124, 107, 158, 0.4)",
|
|
321
|
-
stroke: "#7C6B9E",
|
|
322
|
-
strokeWidth: 3
|
|
323
|
-
}
|
|
334
|
+
style: { fill: "rgba(124, 107, 158, 0.4)", stroke: "#7C6B9E", strokeWidth: 3 }
|
|
324
335
|
}
|
|
325
336
|
),
|
|
326
337
|
pointsArr.map(([cx, cy], i) => {
|
|
@@ -338,7 +349,10 @@ function RadarChartCore({
|
|
|
338
349
|
r: matches ? 8 : 7,
|
|
339
350
|
fill: matches ? "#fed12e" : "#7C6B9E",
|
|
340
351
|
stroke: "#FFFFFF",
|
|
341
|
-
strokeWidth: 3
|
|
352
|
+
strokeWidth: 3,
|
|
353
|
+
style: { cursor: "default" },
|
|
354
|
+
onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, userVal) }),
|
|
355
|
+
onMouseLeave: () => setTooltip(null)
|
|
342
356
|
}
|
|
343
357
|
);
|
|
344
358
|
}),
|
|
@@ -347,22 +361,14 @@ function RadarChartCore({
|
|
|
347
361
|
{
|
|
348
362
|
key: "compare-static",
|
|
349
363
|
points: comparePoints,
|
|
350
|
-
style: {
|
|
351
|
-
fill: "rgba(90, 154, 110, 0.3)",
|
|
352
|
-
stroke: "#5A9A6E",
|
|
353
|
-
strokeWidth: 2
|
|
354
|
-
}
|
|
364
|
+
style: { fill: "rgba(90, 154, 110, 0.3)", stroke: "#5A9A6E", strokeWidth: 2 }
|
|
355
365
|
}
|
|
356
366
|
) : /* @__PURE__ */ import_react.default.createElement(
|
|
357
367
|
import_web.animated.polygon,
|
|
358
368
|
{
|
|
359
369
|
key: "compare-animated",
|
|
360
370
|
points: compareSpring.points,
|
|
361
|
-
style: {
|
|
362
|
-
fill: "rgba(90, 154, 110, 0.3)",
|
|
363
|
-
stroke: "#5A9A6E",
|
|
364
|
-
strokeWidth: 2
|
|
365
|
-
}
|
|
371
|
+
style: { fill: "rgba(90, 154, 110, 0.3)", stroke: "#5A9A6E", strokeWidth: 2 }
|
|
366
372
|
}
|
|
367
373
|
) : null,
|
|
368
374
|
hasCompareData && compareCoords && compareCoords.map(([cx, cy], i) => {
|
|
@@ -370,7 +376,7 @@ function RadarChartCore({
|
|
|
370
376
|
const userVal = spokes[i][1];
|
|
371
377
|
const compareVal = compareData[shortTitle];
|
|
372
378
|
if (!compareVal || Number(compareVal) === 0) return null;
|
|
373
|
-
const matches = userVal !== 0 && compareVal
|
|
379
|
+
const matches = userVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
|
|
374
380
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
375
381
|
"circle",
|
|
376
382
|
{
|
|
@@ -380,14 +386,17 @@ function RadarChartCore({
|
|
|
380
386
|
r: matches ? 8 : 7,
|
|
381
387
|
fill: matches ? "#fed12e" : "#5A9A6E",
|
|
382
388
|
stroke: "#FFFFFF",
|
|
383
|
-
strokeWidth: 3
|
|
389
|
+
strokeWidth: 3,
|
|
390
|
+
style: { cursor: "default" },
|
|
391
|
+
onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, compareVal) }),
|
|
392
|
+
onMouseLeave: () => setTooltip(null)
|
|
384
393
|
}
|
|
385
394
|
);
|
|
386
395
|
}),
|
|
387
396
|
spokes.map(([shortTitle], i) => {
|
|
388
397
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
389
|
-
const
|
|
390
|
-
const
|
|
398
|
+
const endX = centerX + (spokeExtension[shortTitle] ? extRadius : radius) * Math.sin(angle);
|
|
399
|
+
const endY = centerY - (spokeExtension[shortTitle] ? extRadius : radius) * Math.cos(angle);
|
|
391
400
|
const isUnansweredHitbox = !!unansweredSpokes[shortTitle];
|
|
392
401
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
393
402
|
"line",
|
|
@@ -395,15 +404,51 @@ function RadarChartCore({
|
|
|
395
404
|
key: `hitbox-${shortTitle}`,
|
|
396
405
|
x1: centerX,
|
|
397
406
|
y1: centerY,
|
|
398
|
-
x2:
|
|
399
|
-
y2:
|
|
407
|
+
x2: endX,
|
|
408
|
+
y2: endY,
|
|
400
409
|
stroke: "transparent",
|
|
401
410
|
strokeWidth: 14,
|
|
402
411
|
onClick: () => isUnansweredHitbox ? onReplaceTopic(shortTitle) : onToggleInversion(shortTitle),
|
|
403
412
|
style: { cursor: "pointer" }
|
|
404
413
|
}
|
|
405
414
|
);
|
|
406
|
-
})
|
|
415
|
+
}),
|
|
416
|
+
tooltip && (() => {
|
|
417
|
+
const tipW = 190;
|
|
418
|
+
const tipH = 70;
|
|
419
|
+
const svgW = size + leftPadding + rightPadding;
|
|
420
|
+
const tx = tooltip.x + leftPadding + 12 > svgW - tipW ? tooltip.x - tipW - 12 : tooltip.x + 12;
|
|
421
|
+
const ty = tooltip.y - 10;
|
|
422
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
423
|
+
"foreignObject",
|
|
424
|
+
{
|
|
425
|
+
x: tx,
|
|
426
|
+
y: ty,
|
|
427
|
+
width: tipW,
|
|
428
|
+
height: tipH,
|
|
429
|
+
style: { overflow: "visible", pointerEvents: "none" }
|
|
430
|
+
},
|
|
431
|
+
/* @__PURE__ */ import_react.default.createElement(
|
|
432
|
+
"div",
|
|
433
|
+
{
|
|
434
|
+
xmlns: "http://www.w3.org/1999/xhtml",
|
|
435
|
+
style: {
|
|
436
|
+
background: "white",
|
|
437
|
+
border: "1px solid #d1d5db",
|
|
438
|
+
borderRadius: 6,
|
|
439
|
+
padding: "6px 10px",
|
|
440
|
+
fontSize: 11,
|
|
441
|
+
lineHeight: 1.4,
|
|
442
|
+
color: "#111",
|
|
443
|
+
boxShadow: "0 2px 8px rgba(0,0,0,0.12)",
|
|
444
|
+
width: tipW + "px",
|
|
445
|
+
wordWrap: "break-word"
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
tooltip.text
|
|
449
|
+
)
|
|
450
|
+
);
|
|
451
|
+
})()
|
|
407
452
|
);
|
|
408
453
|
}
|
|
409
454
|
function adaptiveFontSize(longestLineLen, baseFSize) {
|
|
@@ -442,7 +487,7 @@ function wrapLabel(label, maxChars = 12) {
|
|
|
442
487
|
}
|
|
443
488
|
|
|
444
489
|
// src/Header.jsx
|
|
445
|
-
var
|
|
490
|
+
var import_react3 = __toESM(require("react"));
|
|
446
491
|
|
|
447
492
|
// src/tokens.js
|
|
448
493
|
var colorScales = {
|
|
@@ -838,13 +883,13 @@ var breakpoints = {
|
|
|
838
883
|
};
|
|
839
884
|
|
|
840
885
|
// src/useMediaQuery.js
|
|
841
|
-
var
|
|
886
|
+
var import_react2 = require("react");
|
|
842
887
|
function useMediaQuery(query) {
|
|
843
|
-
const [matches, setMatches] = (0,
|
|
888
|
+
const [matches, setMatches] = (0, import_react2.useState)(() => {
|
|
844
889
|
if (typeof window === "undefined") return false;
|
|
845
890
|
return window.matchMedia(query).matches;
|
|
846
891
|
});
|
|
847
|
-
(0,
|
|
892
|
+
(0, import_react2.useEffect)(() => {
|
|
848
893
|
if (typeof window === "undefined") return;
|
|
849
894
|
const mql = window.matchMedia(query);
|
|
850
895
|
const handler = (e) => setMatches(e.matches);
|
|
@@ -859,6 +904,7 @@ function useMediaQuery(query) {
|
|
|
859
904
|
function Header({
|
|
860
905
|
logoSrc,
|
|
861
906
|
logoAlt = "Empowered Vote",
|
|
907
|
+
logoHref = "https://login.empowered.vote/profile",
|
|
862
908
|
navItems = [],
|
|
863
909
|
ctaButton,
|
|
864
910
|
secondaryAction,
|
|
@@ -867,12 +913,12 @@ function Header({
|
|
|
867
913
|
profileMenu,
|
|
868
914
|
style = {}
|
|
869
915
|
}) {
|
|
870
|
-
const [mobileMenuOpen, setMobileMenuOpen] = (0,
|
|
871
|
-
const [openDropdown, setOpenDropdown] = (0,
|
|
872
|
-
const [profileOpen, setProfileOpen] = (0,
|
|
916
|
+
const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react3.useState)(false);
|
|
917
|
+
const [openDropdown, setOpenDropdown] = (0, import_react3.useState)(null);
|
|
918
|
+
const [profileOpen, setProfileOpen] = (0, import_react3.useState)(false);
|
|
873
919
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
874
|
-
const profileRef = (0,
|
|
875
|
-
(0,
|
|
920
|
+
const profileRef = (0, import_react3.useRef)(null);
|
|
921
|
+
(0, import_react3.useEffect)(() => {
|
|
876
922
|
if (!profileOpen) return;
|
|
877
923
|
const handleClickOutside = (e) => {
|
|
878
924
|
if (profileRef.current && !profileRef.current.contains(e.target)) {
|
|
@@ -1083,14 +1129,14 @@ function Header({
|
|
|
1083
1129
|
const isActive = currentPath === item.href;
|
|
1084
1130
|
const hasDropdown = item.dropdown && item.dropdown.length > 0;
|
|
1085
1131
|
const isOpen = openDropdown === item.label;
|
|
1086
|
-
return /* @__PURE__ */
|
|
1132
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1087
1133
|
"div",
|
|
1088
1134
|
{
|
|
1089
1135
|
style: { position: "relative" },
|
|
1090
1136
|
onMouseEnter: () => hasDropdown && setOpenDropdown(item.label),
|
|
1091
1137
|
onMouseLeave: () => hasDropdown && setOpenDropdown(null)
|
|
1092
1138
|
},
|
|
1093
|
-
/* @__PURE__ */
|
|
1139
|
+
/* @__PURE__ */ import_react3.default.createElement(
|
|
1094
1140
|
"a",
|
|
1095
1141
|
{
|
|
1096
1142
|
href: item.href,
|
|
@@ -1101,7 +1147,7 @@ function Header({
|
|
|
1101
1147
|
}
|
|
1102
1148
|
},
|
|
1103
1149
|
item.label,
|
|
1104
|
-
hasDropdown && /* @__PURE__ */
|
|
1150
|
+
hasDropdown && /* @__PURE__ */ import_react3.default.createElement(
|
|
1105
1151
|
"svg",
|
|
1106
1152
|
{
|
|
1107
1153
|
style: styles2.dropdownIcon,
|
|
@@ -1109,7 +1155,7 @@ function Header({
|
|
|
1109
1155
|
fill: "none",
|
|
1110
1156
|
xmlns: "http://www.w3.org/2000/svg"
|
|
1111
1157
|
},
|
|
1112
|
-
/* @__PURE__ */
|
|
1158
|
+
/* @__PURE__ */ import_react3.default.createElement(
|
|
1113
1159
|
"path",
|
|
1114
1160
|
{
|
|
1115
1161
|
d: "M1 1L8 8L15 1",
|
|
@@ -1121,7 +1167,7 @@ function Header({
|
|
|
1121
1167
|
)
|
|
1122
1168
|
)
|
|
1123
1169
|
),
|
|
1124
|
-
hasDropdown && isOpen && /* @__PURE__ */
|
|
1170
|
+
hasDropdown && isOpen && /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.dropdown }, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.dropdownInner }, item.dropdown.map((dropdownItem, idx) => /* @__PURE__ */ import_react3.default.createElement(
|
|
1125
1171
|
"a",
|
|
1126
1172
|
{
|
|
1127
1173
|
key: idx,
|
|
@@ -1139,14 +1185,14 @@ function Header({
|
|
|
1139
1185
|
))))
|
|
1140
1186
|
);
|
|
1141
1187
|
};
|
|
1142
|
-
return /* @__PURE__ */
|
|
1188
|
+
return /* @__PURE__ */ import_react3.default.createElement("header", { style: styles2.header }, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.container }, /* @__PURE__ */ import_react3.default.createElement(
|
|
1143
1189
|
"a",
|
|
1144
1190
|
{
|
|
1145
|
-
href:
|
|
1146
|
-
onClick: (e) => handleNavClick(e,
|
|
1191
|
+
href: logoHref,
|
|
1192
|
+
onClick: (e) => handleNavClick(e, logoHref),
|
|
1147
1193
|
style: { display: "flex", alignItems: "center" }
|
|
1148
1194
|
},
|
|
1149
|
-
logoSrc ? /* @__PURE__ */
|
|
1195
|
+
logoSrc ? /* @__PURE__ */ import_react3.default.createElement("img", { src: logoSrc, alt: logoAlt, style: styles2.logo }) : /* @__PURE__ */ import_react3.default.createElement(
|
|
1150
1196
|
"span",
|
|
1151
1197
|
{
|
|
1152
1198
|
style: {
|
|
@@ -1158,7 +1204,7 @@ function Header({
|
|
|
1158
1204
|
},
|
|
1159
1205
|
"empowered.vote"
|
|
1160
1206
|
)
|
|
1161
|
-
), /* @__PURE__ */
|
|
1207
|
+
), /* @__PURE__ */ import_react3.default.createElement("nav", { style: styles2.nav, className: "ev-header-nav" }, navItems.map((item, idx) => /* @__PURE__ */ import_react3.default.createElement(NavLink, { key: idx, item }))), /* @__PURE__ */ import_react3.default.createElement("div", { style: { display: isMobile ? "none" : "flex", alignItems: "center", gap: spacing[3] } }, secondaryAction && import_react3.default.isValidElement(secondaryAction) && secondaryAction, secondaryAction && !import_react3.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react3.default.createElement(
|
|
1162
1208
|
"a",
|
|
1163
1209
|
{
|
|
1164
1210
|
href: secondaryAction.href,
|
|
@@ -1181,7 +1227,7 @@ function Header({
|
|
|
1181
1227
|
}
|
|
1182
1228
|
},
|
|
1183
1229
|
secondaryAction.label
|
|
1184
|
-
), ctaButton && /* @__PURE__ */
|
|
1230
|
+
), ctaButton && /* @__PURE__ */ import_react3.default.createElement(
|
|
1185
1231
|
"a",
|
|
1186
1232
|
{
|
|
1187
1233
|
href: ctaButton.href,
|
|
@@ -1196,7 +1242,7 @@ function Header({
|
|
|
1196
1242
|
}
|
|
1197
1243
|
},
|
|
1198
1244
|
ctaButton.label
|
|
1199
|
-
), profileMenu && /* @__PURE__ */
|
|
1245
|
+
), profileMenu && /* @__PURE__ */ import_react3.default.createElement("div", { ref: profileRef, style: { position: "relative" } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
1200
1246
|
"button",
|
|
1201
1247
|
{
|
|
1202
1248
|
style: styles2.profileButton,
|
|
@@ -1204,7 +1250,7 @@ function Header({
|
|
|
1204
1250
|
"aria-label": "Profile menu",
|
|
1205
1251
|
"aria-expanded": profileOpen
|
|
1206
1252
|
},
|
|
1207
|
-
/* @__PURE__ */
|
|
1253
|
+
/* @__PURE__ */ import_react3.default.createElement(
|
|
1208
1254
|
"svg",
|
|
1209
1255
|
{
|
|
1210
1256
|
width: "20",
|
|
@@ -1216,12 +1262,12 @@ function Header({
|
|
|
1216
1262
|
strokeLinecap: "round",
|
|
1217
1263
|
strokeLinejoin: "round"
|
|
1218
1264
|
},
|
|
1219
|
-
/* @__PURE__ */
|
|
1220
|
-
/* @__PURE__ */
|
|
1265
|
+
/* @__PURE__ */ import_react3.default.createElement("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
|
|
1266
|
+
/* @__PURE__ */ import_react3.default.createElement("circle", { cx: "12", cy: "7", r: "4" })
|
|
1221
1267
|
)
|
|
1222
|
-
), profileOpen && /* @__PURE__ */
|
|
1268
|
+
), profileOpen && /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.profileDropdown }, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.profileDropdownInner }, profileMenu.label && /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.profileLabel }, profileMenu.label), profileMenu.items.map((item, idx) => {
|
|
1223
1269
|
if (item.href) {
|
|
1224
|
-
return /* @__PURE__ */
|
|
1270
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1225
1271
|
"a",
|
|
1226
1272
|
{
|
|
1227
1273
|
key: idx,
|
|
@@ -1244,7 +1290,7 @@ function Header({
|
|
|
1244
1290
|
item.label
|
|
1245
1291
|
);
|
|
1246
1292
|
}
|
|
1247
|
-
return /* @__PURE__ */
|
|
1293
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1248
1294
|
"button",
|
|
1249
1295
|
{
|
|
1250
1296
|
key: idx,
|
|
@@ -1263,7 +1309,7 @@ function Header({
|
|
|
1263
1309
|
},
|
|
1264
1310
|
item.label
|
|
1265
1311
|
);
|
|
1266
|
-
}))))), /* @__PURE__ */
|
|
1312
|
+
}))))), /* @__PURE__ */ import_react3.default.createElement(
|
|
1267
1313
|
"button",
|
|
1268
1314
|
{
|
|
1269
1315
|
style: styles2.mobileMenuButton,
|
|
@@ -1272,7 +1318,7 @@ function Header({
|
|
|
1272
1318
|
"aria-label": "Toggle menu",
|
|
1273
1319
|
"aria-expanded": mobileMenuOpen
|
|
1274
1320
|
},
|
|
1275
|
-
/* @__PURE__ */
|
|
1321
|
+
/* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.hamburger }, /* @__PURE__ */ import_react3.default.createElement(
|
|
1276
1322
|
"span",
|
|
1277
1323
|
{
|
|
1278
1324
|
style: {
|
|
@@ -1284,7 +1330,7 @@ function Header({
|
|
|
1284
1330
|
backgroundColor: colors.evTeal
|
|
1285
1331
|
}
|
|
1286
1332
|
}
|
|
1287
|
-
), /* @__PURE__ */
|
|
1333
|
+
), /* @__PURE__ */ import_react3.default.createElement(
|
|
1288
1334
|
"span",
|
|
1289
1335
|
{
|
|
1290
1336
|
style: {
|
|
@@ -1297,9 +1343,9 @@ function Header({
|
|
|
1297
1343
|
}
|
|
1298
1344
|
}
|
|
1299
1345
|
))
|
|
1300
|
-
)), /* @__PURE__ */
|
|
1346
|
+
)), /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.mobileMenu, className: "ev-header-mobile-menu" }, navItems.map((item, idx) => {
|
|
1301
1347
|
const hasDropdown = item.dropdown && item.dropdown.length > 0;
|
|
1302
|
-
return /* @__PURE__ */
|
|
1348
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, { key: idx }, hasDropdown ? /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(
|
|
1303
1349
|
"span",
|
|
1304
1350
|
{
|
|
1305
1351
|
style: {
|
|
@@ -1309,7 +1355,7 @@ function Header({
|
|
|
1309
1355
|
}
|
|
1310
1356
|
},
|
|
1311
1357
|
item.label
|
|
1312
|
-
), item.dropdown.map((sub, subIdx) => /* @__PURE__ */
|
|
1358
|
+
), item.dropdown.map((sub, subIdx) => /* @__PURE__ */ import_react3.default.createElement(
|
|
1313
1359
|
"a",
|
|
1314
1360
|
{
|
|
1315
1361
|
key: subIdx,
|
|
@@ -1326,7 +1372,7 @@ function Header({
|
|
|
1326
1372
|
}
|
|
1327
1373
|
},
|
|
1328
1374
|
sub.label
|
|
1329
|
-
))) : /* @__PURE__ */
|
|
1375
|
+
))) : /* @__PURE__ */ import_react3.default.createElement(
|
|
1330
1376
|
"a",
|
|
1331
1377
|
{
|
|
1332
1378
|
href: item.href,
|
|
@@ -1338,7 +1384,7 @@ function Header({
|
|
|
1338
1384
|
},
|
|
1339
1385
|
item.label
|
|
1340
1386
|
));
|
|
1341
|
-
}), secondaryAction &&
|
|
1387
|
+
}), secondaryAction && import_react3.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react3.default.createElement("div", { style: { marginTop: spacing[4], textAlign: "center" } }, secondaryAction), secondaryAction && !import_react3.default.isValidElement(secondaryAction) && /* @__PURE__ */ import_react3.default.createElement(
|
|
1342
1388
|
"a",
|
|
1343
1389
|
{
|
|
1344
1390
|
href: secondaryAction.href,
|
|
@@ -1353,7 +1399,7 @@ function Header({
|
|
|
1353
1399
|
style: { ...styles2.secondaryAction, marginTop: spacing[4], textAlign: "center", justifyContent: "center" }
|
|
1354
1400
|
},
|
|
1355
1401
|
secondaryAction.label
|
|
1356
|
-
), ctaButton && /* @__PURE__ */
|
|
1402
|
+
), ctaButton && /* @__PURE__ */ import_react3.default.createElement(
|
|
1357
1403
|
"a",
|
|
1358
1404
|
{
|
|
1359
1405
|
href: ctaButton.href,
|
|
@@ -1364,7 +1410,7 @@ function Header({
|
|
|
1364
1410
|
style: { ...styles2.ctaButton, marginTop: spacing[4], textAlign: "center" }
|
|
1365
1411
|
},
|
|
1366
1412
|
ctaButton.label
|
|
1367
|
-
), profileMenu && /* @__PURE__ */
|
|
1413
|
+
), profileMenu && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.mobileDivider }), profileMenu.label && /* @__PURE__ */ import_react3.default.createElement(
|
|
1368
1414
|
"span",
|
|
1369
1415
|
{
|
|
1370
1416
|
style: {
|
|
@@ -1380,7 +1426,7 @@ function Header({
|
|
|
1380
1426
|
profileMenu.label
|
|
1381
1427
|
), profileMenu.items.map((item, idx) => {
|
|
1382
1428
|
if (item.href) {
|
|
1383
|
-
return /* @__PURE__ */
|
|
1429
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1384
1430
|
"a",
|
|
1385
1431
|
{
|
|
1386
1432
|
key: idx,
|
|
@@ -1397,7 +1443,7 @@ function Header({
|
|
|
1397
1443
|
item.label
|
|
1398
1444
|
);
|
|
1399
1445
|
}
|
|
1400
|
-
return /* @__PURE__ */
|
|
1446
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1401
1447
|
"button",
|
|
1402
1448
|
{
|
|
1403
1449
|
key: idx,
|
|
@@ -1421,10 +1467,10 @@ function Header({
|
|
|
1421
1467
|
}
|
|
1422
1468
|
|
|
1423
1469
|
// src/SiteHeader.jsx
|
|
1424
|
-
var
|
|
1470
|
+
var import_react5 = __toESM(require("react"));
|
|
1425
1471
|
|
|
1426
1472
|
// src/FeedbackButton.jsx
|
|
1427
|
-
var
|
|
1473
|
+
var import_react4 = __toESM(require("react"));
|
|
1428
1474
|
var FEEDBACK_BASE_DEFAULT = "https://alpha.empowered.vote/feedback";
|
|
1429
1475
|
var HOST_FEATURE_MAP = {
|
|
1430
1476
|
"compass.empowered.vote": "compass",
|
|
@@ -1495,7 +1541,7 @@ function FeedbackButton({
|
|
|
1495
1541
|
cursor: "pointer"
|
|
1496
1542
|
};
|
|
1497
1543
|
const baseStyle = variant === "link" ? linkStyle2 : pillStyle;
|
|
1498
|
-
return /* @__PURE__ */
|
|
1544
|
+
return /* @__PURE__ */ import_react4.default.createElement(
|
|
1499
1545
|
"a",
|
|
1500
1546
|
{
|
|
1501
1547
|
href,
|
|
@@ -1559,11 +1605,11 @@ function SiteHeader({
|
|
|
1559
1605
|
if (secondaryAction === false) {
|
|
1560
1606
|
resolvedSecondary = void 0;
|
|
1561
1607
|
} else if (secondaryAction === void 0) {
|
|
1562
|
-
resolvedSecondary = /* @__PURE__ */
|
|
1608
|
+
resolvedSecondary = /* @__PURE__ */ import_react5.default.createElement(FeedbackButton, { feature: feedbackFeature });
|
|
1563
1609
|
} else {
|
|
1564
1610
|
resolvedSecondary = secondaryAction;
|
|
1565
1611
|
}
|
|
1566
|
-
return /* @__PURE__ */
|
|
1612
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
1567
1613
|
Header,
|
|
1568
1614
|
{
|
|
1569
1615
|
logoSrc,
|
|
@@ -1580,7 +1626,7 @@ function SiteHeader({
|
|
|
1580
1626
|
}
|
|
1581
1627
|
|
|
1582
1628
|
// src/FilterSidebar.jsx
|
|
1583
|
-
var
|
|
1629
|
+
var import_react6 = __toESM(require("react"));
|
|
1584
1630
|
function FilterSidebar({
|
|
1585
1631
|
title = "Filter by",
|
|
1586
1632
|
zipCode = "",
|
|
@@ -1734,14 +1780,14 @@ function FilterSidebar({
|
|
|
1734
1780
|
fontSize: fontSizes.sm
|
|
1735
1781
|
}
|
|
1736
1782
|
};
|
|
1737
|
-
return /* @__PURE__ */
|
|
1783
|
+
return /* @__PURE__ */ import_react6.default.createElement("aside", { style: styles2.sidebar, className: "ev-filter-sidebar" }, !isMobile && /* @__PURE__ */ import_react6.default.createElement("h2", { style: styles2.title }, title), /* @__PURE__ */ import_react6.default.createElement("div", { style: isMobile ? void 0 : styles2.contentTop }, /* @__PURE__ */ import_react6.default.createElement("div", { style: isMobile ? { marginBottom: spacing[3] } : styles2.section }, !isMobile && /* @__PURE__ */ import_react6.default.createElement("label", { style: styles2.sectionLabel }, "Location"), autocompleteContainerRef ? /* @__PURE__ */ import_react6.default.createElement(
|
|
1738
1784
|
"div",
|
|
1739
1785
|
{
|
|
1740
1786
|
ref: autocompleteContainerRef,
|
|
1741
1787
|
style: styles2.zipInputWrapper,
|
|
1742
1788
|
className: "ev-autocomplete-container"
|
|
1743
1789
|
}
|
|
1744
|
-
) : /* @__PURE__ */
|
|
1790
|
+
) : /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.zipInputWrapper }, /* @__PURE__ */ import_react6.default.createElement(
|
|
1745
1791
|
"input",
|
|
1746
1792
|
{
|
|
1747
1793
|
ref: zipInputRef,
|
|
@@ -1753,7 +1799,7 @@ function FilterSidebar({
|
|
|
1753
1799
|
style: styles2.zipInput,
|
|
1754
1800
|
"aria-label": "Search location"
|
|
1755
1801
|
}
|
|
1756
|
-
), /* @__PURE__ */
|
|
1802
|
+
), /* @__PURE__ */ import_react6.default.createElement(
|
|
1757
1803
|
"button",
|
|
1758
1804
|
{
|
|
1759
1805
|
type: "button",
|
|
@@ -1762,7 +1808,7 @@ function FilterSidebar({
|
|
|
1762
1808
|
"aria-label": "Clear ZIP code"
|
|
1763
1809
|
},
|
|
1764
1810
|
"\xD7"
|
|
1765
|
-
))), /* @__PURE__ */
|
|
1811
|
+
))), /* @__PURE__ */ import_react6.default.createElement("div", { style: isMobile ? {} : styles2.section }, !isMobile && /* @__PURE__ */ import_react6.default.createElement("label", { style: styles2.sectionLabel }, "Group"), /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.radioGroup, role: "radiogroup", "aria-label": "Filter by group" }, filterOptions.map((option) => /* @__PURE__ */ import_react6.default.createElement("label", { key: option.value, style: styles2.radioLabel }, /* @__PURE__ */ import_react6.default.createElement(
|
|
1766
1812
|
"input",
|
|
1767
1813
|
{
|
|
1768
1814
|
type: "radio",
|
|
@@ -1772,18 +1818,18 @@ function FilterSidebar({
|
|
|
1772
1818
|
onChange: () => onFilterChange == null ? void 0 : onFilterChange(option.value),
|
|
1773
1819
|
style: styles2.radioInput
|
|
1774
1820
|
}
|
|
1775
|
-
), option.label))))), !isMobile && /* @__PURE__ */
|
|
1821
|
+
), option.label))))), !isMobile && /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.imageSection }, locationLabel && /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.locationLabel }, locationLabel), buildingImageSrc ? /* @__PURE__ */ import_react6.default.createElement(
|
|
1776
1822
|
"img",
|
|
1777
1823
|
{
|
|
1778
1824
|
src: buildingImageSrc,
|
|
1779
1825
|
alt: `${selectedFilter} government building`,
|
|
1780
1826
|
style: styles2.buildingImage
|
|
1781
1827
|
}
|
|
1782
|
-
) : /* @__PURE__ */
|
|
1828
|
+
) : /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.buildingPlaceholder }, "No image")));
|
|
1783
1829
|
}
|
|
1784
1830
|
|
|
1785
1831
|
// src/PoliticianCard.jsx
|
|
1786
|
-
var
|
|
1832
|
+
var import_react7 = __toESM(require("react"));
|
|
1787
1833
|
function PoliticianCard({
|
|
1788
1834
|
id,
|
|
1789
1835
|
imageSrc,
|
|
@@ -1935,7 +1981,7 @@ function PoliticianCard({
|
|
|
1935
1981
|
textTransform: "uppercase"
|
|
1936
1982
|
}
|
|
1937
1983
|
};
|
|
1938
|
-
const CompassIcon2 = () => /* @__PURE__ */
|
|
1984
|
+
const CompassIcon2 = () => /* @__PURE__ */ import_react7.default.createElement(
|
|
1939
1985
|
"svg",
|
|
1940
1986
|
{
|
|
1941
1987
|
style: styles2.compassIcon,
|
|
@@ -1943,7 +1989,7 @@ function PoliticianCard({
|
|
|
1943
1989
|
fill: "none",
|
|
1944
1990
|
xmlns: "http://www.w3.org/2000/svg"
|
|
1945
1991
|
},
|
|
1946
|
-
/* @__PURE__ */
|
|
1992
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
1947
1993
|
"polygon",
|
|
1948
1994
|
{
|
|
1949
1995
|
points: "12,1 21.5,6.5 21.5,17.5 12,23 2.5,17.5 2.5,6.5",
|
|
@@ -1953,13 +1999,13 @@ function PoliticianCard({
|
|
|
1953
1999
|
strokeLinejoin: "round"
|
|
1954
2000
|
}
|
|
1955
2001
|
),
|
|
1956
|
-
/* @__PURE__ */
|
|
1957
|
-
/* @__PURE__ */
|
|
1958
|
-
/* @__PURE__ */
|
|
1959
|
-
/* @__PURE__ */
|
|
1960
|
-
/* @__PURE__ */
|
|
1961
|
-
/* @__PURE__ */
|
|
1962
|
-
/* @__PURE__ */
|
|
2002
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "1", stroke: "currentColor", strokeWidth: "1" }),
|
|
2003
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2004
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2005
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "23", stroke: "currentColor", strokeWidth: "1" }),
|
|
2006
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2007
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
2008
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
1963
2009
|
"polygon",
|
|
1964
2010
|
{
|
|
1965
2011
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -1967,7 +2013,7 @@ function PoliticianCard({
|
|
|
1967
2013
|
opacity: "0.35"
|
|
1968
2014
|
}
|
|
1969
2015
|
),
|
|
1970
|
-
/* @__PURE__ */
|
|
2016
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
1971
2017
|
"polygon",
|
|
1972
2018
|
{
|
|
1973
2019
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -1978,8 +2024,8 @@ function PoliticianCard({
|
|
|
1978
2024
|
}
|
|
1979
2025
|
)
|
|
1980
2026
|
);
|
|
1981
|
-
const [imgError, setImgError] = (0,
|
|
1982
|
-
(0,
|
|
2027
|
+
const [imgError, setImgError] = (0, import_react7.useState)(false);
|
|
2028
|
+
(0, import_react7.useEffect)(() => {
|
|
1983
2029
|
setImgError(false);
|
|
1984
2030
|
}, [imageSrc]);
|
|
1985
2031
|
const getInitials = (n) => {
|
|
@@ -1988,7 +2034,7 @@ function PoliticianCard({
|
|
|
1988
2034
|
const initials = parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_a = parts[0]) == null ? void 0 : _a[0]) || "?";
|
|
1989
2035
|
return initials.toUpperCase();
|
|
1990
2036
|
};
|
|
1991
|
-
return /* @__PURE__ */
|
|
2037
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
1992
2038
|
"div",
|
|
1993
2039
|
{
|
|
1994
2040
|
style: styles2.card,
|
|
@@ -2013,8 +2059,8 @@ function PoliticianCard({
|
|
|
2013
2059
|
}
|
|
2014
2060
|
}
|
|
2015
2061
|
},
|
|
2016
|
-
badge && /* @__PURE__ */
|
|
2017
|
-
/* @__PURE__ */
|
|
2062
|
+
badge && /* @__PURE__ */ import_react7.default.createElement("span", { style: styles2.badge }, badge),
|
|
2063
|
+
/* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.imageWrapper }, imageSrc && !imgError ? /* @__PURE__ */ import_react7.default.createElement(
|
|
2018
2064
|
"img",
|
|
2019
2065
|
{
|
|
2020
2066
|
src: imageSrc,
|
|
@@ -2022,9 +2068,9 @@ function PoliticianCard({
|
|
|
2022
2068
|
style: styles2.image,
|
|
2023
2069
|
onError: () => setImgError(true)
|
|
2024
2070
|
}
|
|
2025
|
-
) : /* @__PURE__ */
|
|
2026
|
-
/* @__PURE__ */
|
|
2027
|
-
onCompassClick && /* @__PURE__ */
|
|
2071
|
+
) : /* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.imagePlaceholder }, getInitials(name))),
|
|
2072
|
+
/* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.content }, /* @__PURE__ */ import_react7.default.createElement("h3", { style: styles2.name }, name), /* @__PURE__ */ import_react7.default.createElement("p", { style: styles2.title }, title), subtitle && /* @__PURE__ */ import_react7.default.createElement("p", { style: styles2.subtitle }, subtitle), footer && /* @__PURE__ */ import_react7.default.createElement("div", { style: { marginTop: "auto", marginLeft: "-5px" } }, footer)),
|
|
2073
|
+
onCompassClick && /* @__PURE__ */ import_react7.default.createElement(
|
|
2028
2074
|
"button",
|
|
2029
2075
|
{
|
|
2030
2076
|
type: "button",
|
|
@@ -2039,16 +2085,16 @@ function PoliticianCard({
|
|
|
2039
2085
|
},
|
|
2040
2086
|
"aria-label": `View ${name}'s compass`
|
|
2041
2087
|
},
|
|
2042
|
-
/* @__PURE__ */
|
|
2088
|
+
/* @__PURE__ */ import_react7.default.createElement(CompassIcon2, null)
|
|
2043
2089
|
)
|
|
2044
2090
|
);
|
|
2045
2091
|
}
|
|
2046
2092
|
|
|
2047
2093
|
// src/CompassCardHorizontal.jsx
|
|
2048
|
-
var
|
|
2094
|
+
var import_react13 = __toESM(require("react"));
|
|
2049
2095
|
|
|
2050
2096
|
// src/PlaceholderRadar.jsx
|
|
2051
|
-
var
|
|
2097
|
+
var import_react8 = __toESM(require("react"));
|
|
2052
2098
|
function PlaceholderRadar({ size = 250, name = "" }) {
|
|
2053
2099
|
const cx = size / 2;
|
|
2054
2100
|
const cy = size / 2;
|
|
@@ -2061,7 +2107,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2061
2107
|
const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
|
|
2062
2108
|
const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
|
|
2063
2109
|
const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
|
|
2064
|
-
return /* @__PURE__ */
|
|
2110
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
2065
2111
|
"svg",
|
|
2066
2112
|
{
|
|
2067
2113
|
width: size,
|
|
@@ -2075,7 +2121,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2075
2121
|
flexShrink: 0
|
|
2076
2122
|
}
|
|
2077
2123
|
},
|
|
2078
|
-
vertices.map(([x, y], i) => /* @__PURE__ */
|
|
2124
|
+
vertices.map(([x, y], i) => /* @__PURE__ */ import_react8.default.createElement(
|
|
2079
2125
|
"line",
|
|
2080
2126
|
{
|
|
2081
2127
|
key: i,
|
|
@@ -2089,7 +2135,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2089
2135
|
opacity: "0.6"
|
|
2090
2136
|
}
|
|
2091
2137
|
)),
|
|
2092
|
-
/* @__PURE__ */
|
|
2138
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
2093
2139
|
"polygon",
|
|
2094
2140
|
{
|
|
2095
2141
|
points: innerPts,
|
|
@@ -2100,7 +2146,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2100
2146
|
opacity: "0.5"
|
|
2101
2147
|
}
|
|
2102
2148
|
),
|
|
2103
|
-
/* @__PURE__ */
|
|
2149
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
2104
2150
|
"polygon",
|
|
2105
2151
|
{
|
|
2106
2152
|
points: midPts,
|
|
@@ -2111,7 +2157,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2111
2157
|
opacity: "0.6"
|
|
2112
2158
|
}
|
|
2113
2159
|
),
|
|
2114
|
-
/* @__PURE__ */
|
|
2160
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
2115
2161
|
"polygon",
|
|
2116
2162
|
{
|
|
2117
2163
|
points: outerPts,
|
|
@@ -2125,16 +2171,16 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2125
2171
|
}
|
|
2126
2172
|
|
|
2127
2173
|
// src/CompassCardHorizontalMeta.jsx
|
|
2128
|
-
var
|
|
2174
|
+
var import_react12 = __toESM(require("react"));
|
|
2129
2175
|
|
|
2130
2176
|
// src/IconOverlay.jsx
|
|
2131
|
-
var
|
|
2132
|
-
var
|
|
2177
|
+
var import_react10 = __toESM(require("react"));
|
|
2178
|
+
var import_react11 = require("@floating-ui/react");
|
|
2133
2179
|
|
|
2134
2180
|
// src/icons.js
|
|
2135
|
-
var
|
|
2181
|
+
var import_react9 = __toESM(require("react"));
|
|
2136
2182
|
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
2137
|
-
return /* @__PURE__ */
|
|
2183
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2138
2184
|
"svg",
|
|
2139
2185
|
{
|
|
2140
2186
|
width: size,
|
|
@@ -2147,13 +2193,13 @@ function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
|
2147
2193
|
strokeLinejoin: "round",
|
|
2148
2194
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2149
2195
|
},
|
|
2150
|
-
/* @__PURE__ */
|
|
2151
|
-
/* @__PURE__ */
|
|
2152
|
-
/* @__PURE__ */
|
|
2196
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
2197
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
2198
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M22 19H2" })
|
|
2153
2199
|
);
|
|
2154
2200
|
}
|
|
2155
2201
|
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
2156
|
-
return /* @__PURE__ */
|
|
2202
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2157
2203
|
"svg",
|
|
2158
2204
|
{
|
|
2159
2205
|
width: size,
|
|
@@ -2166,27 +2212,27 @@ function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
|
2166
2212
|
strokeLinejoin: "round",
|
|
2167
2213
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2168
2214
|
},
|
|
2169
|
-
/* @__PURE__ */
|
|
2170
|
-
/* @__PURE__ */
|
|
2215
|
+
/* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
2216
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z" })
|
|
2171
2217
|
);
|
|
2172
2218
|
}
|
|
2173
2219
|
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
2174
2220
|
let paths;
|
|
2175
2221
|
switch (branch) {
|
|
2176
2222
|
case "executive":
|
|
2177
|
-
paths = /* @__PURE__ */
|
|
2223
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 21h18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 21V7l8-4v18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M19 21V11l-6-4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 9v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 12v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 15v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M9 18v.01" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 21h14" }), /* @__PURE__ */ import_react9.default.createElement("line", { x1: "13", y1: "5", x2: "13", y2: "3" }), /* @__PURE__ */ import_react9.default.createElement("line", { x1: "13", y1: "3", x2: "15", y2: "4" }));
|
|
2178
2224
|
break;
|
|
2179
2225
|
case "legislative":
|
|
2180
|
-
paths = /* @__PURE__ */
|
|
2226
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M19 17V5a2 2 0 0 0-2-2H4" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M15 8h-5" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M15 12h-5" }));
|
|
2181
2227
|
break;
|
|
2182
2228
|
case "judicial":
|
|
2183
|
-
paths = /* @__PURE__ */
|
|
2229
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M12 3v19" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 8l7-5 7 5" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M17 13l2-5 2 5a3 3 0 0 1-4 0z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M8 21h8" }));
|
|
2184
2230
|
break;
|
|
2185
2231
|
default:
|
|
2186
|
-
paths = /* @__PURE__ */
|
|
2232
|
+
paths = /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement("path", { d: "M10 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M14 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M18 18v-7" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M3 22h18" }), /* @__PURE__ */ import_react9.default.createElement("path", { d: "M6 18v-7" }));
|
|
2187
2233
|
break;
|
|
2188
2234
|
}
|
|
2189
|
-
return /* @__PURE__ */
|
|
2235
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2190
2236
|
"svg",
|
|
2191
2237
|
{
|
|
2192
2238
|
width: size,
|
|
@@ -2205,24 +2251,24 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
|
2205
2251
|
|
|
2206
2252
|
// src/IconOverlay.jsx
|
|
2207
2253
|
function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
|
|
2208
|
-
const [isOpen, setIsOpen] = (0,
|
|
2209
|
-
const { refs, floatingStyles, context } = (0,
|
|
2254
|
+
const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
|
|
2255
|
+
const { refs, floatingStyles, context } = (0, import_react11.useFloating)({
|
|
2210
2256
|
open: isOpen,
|
|
2211
2257
|
onOpenChange: setIsOpen,
|
|
2212
|
-
middleware: [(0,
|
|
2213
|
-
whileElementsMounted:
|
|
2258
|
+
middleware: [(0, import_react11.offset)(8), (0, import_react11.flip)(), (0, import_react11.shift)({ padding: 4 })],
|
|
2259
|
+
whileElementsMounted: import_react11.autoUpdate
|
|
2214
2260
|
});
|
|
2215
|
-
const hover = (0,
|
|
2216
|
-
const focus2 = (0,
|
|
2217
|
-
const dismiss = (0,
|
|
2218
|
-
const role = (0,
|
|
2219
|
-
const { getReferenceProps, getFloatingProps } = (0,
|
|
2261
|
+
const hover = (0, import_react11.useHover)(context);
|
|
2262
|
+
const focus2 = (0, import_react11.useFocus)(context);
|
|
2263
|
+
const dismiss = (0, import_react11.useDismiss)(context);
|
|
2264
|
+
const role = (0, import_react11.useRole)(context, { role: "tooltip" });
|
|
2265
|
+
const { getReferenceProps, getFloatingProps } = (0, import_react11.useInteractions)([
|
|
2220
2266
|
hover,
|
|
2221
2267
|
focus2,
|
|
2222
2268
|
dismiss,
|
|
2223
2269
|
role
|
|
2224
2270
|
]);
|
|
2225
|
-
return /* @__PURE__ */
|
|
2271
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2226
2272
|
"span",
|
|
2227
2273
|
{
|
|
2228
2274
|
ref: refs.setReference,
|
|
@@ -2235,8 +2281,8 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2235
2281
|
onClick(e);
|
|
2236
2282
|
} : void 0
|
|
2237
2283
|
},
|
|
2238
|
-
/* @__PURE__ */
|
|
2239
|
-
), isOpen && /* @__PURE__ */
|
|
2284
|
+
/* @__PURE__ */ import_react10.default.createElement(IconComponent, { size, color, ...extraProps })
|
|
2285
|
+
), isOpen && /* @__PURE__ */ import_react10.default.createElement(import_react11.FloatingPortal, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2240
2286
|
"div",
|
|
2241
2287
|
{
|
|
2242
2288
|
ref: refs.setFloating,
|
|
@@ -2260,7 +2306,7 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2260
2306
|
function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
2261
2307
|
if (!ballot && !hasStances && !branch) return null;
|
|
2262
2308
|
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;
|
|
2263
|
-
return /* @__PURE__ */
|
|
2309
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
2264
2310
|
"div",
|
|
2265
2311
|
{
|
|
2266
2312
|
style: {
|
|
@@ -2273,7 +2319,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2273
2319
|
// offset icon wrapper padding so icons align flush-left with text
|
|
2274
2320
|
}
|
|
2275
2321
|
},
|
|
2276
|
-
ballot && /* @__PURE__ */
|
|
2322
|
+
ballot && /* @__PURE__ */ import_react10.default.createElement(
|
|
2277
2323
|
IconWithTooltip,
|
|
2278
2324
|
{
|
|
2279
2325
|
IconComponent: BallotIcon,
|
|
@@ -2282,7 +2328,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2282
2328
|
size: 14
|
|
2283
2329
|
}
|
|
2284
2330
|
),
|
|
2285
|
-
hasStances && /* @__PURE__ */
|
|
2331
|
+
hasStances && /* @__PURE__ */ import_react10.default.createElement(
|
|
2286
2332
|
IconWithTooltip,
|
|
2287
2333
|
{
|
|
2288
2334
|
IconComponent: CompassIcon,
|
|
@@ -2292,7 +2338,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2292
2338
|
onClick: onCompassClick
|
|
2293
2339
|
}
|
|
2294
2340
|
),
|
|
2295
|
-
branch && /* @__PURE__ */
|
|
2341
|
+
branch && /* @__PURE__ */ import_react10.default.createElement(
|
|
2296
2342
|
IconWithTooltip,
|
|
2297
2343
|
{
|
|
2298
2344
|
IconComponent: BranchIcon,
|
|
@@ -2312,20 +2358,20 @@ function CompassCardHorizontalMeta({
|
|
|
2312
2358
|
userAnswers
|
|
2313
2359
|
}) {
|
|
2314
2360
|
const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
|
|
2315
|
-
return /* @__PURE__ */
|
|
2361
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", { style: {
|
|
2316
2362
|
flex: 1,
|
|
2317
2363
|
minWidth: 0,
|
|
2318
2364
|
display: "flex",
|
|
2319
2365
|
flexDirection: "column",
|
|
2320
2366
|
gap: spacing[1]
|
|
2321
|
-
} }, /* @__PURE__ */
|
|
2367
|
+
} }, /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2322
2368
|
fontFamily: fonts.primary,
|
|
2323
2369
|
fontSize: fontSizes.lg,
|
|
2324
2370
|
fontWeight: fontWeights.semibold,
|
|
2325
2371
|
lineHeight: 1.4,
|
|
2326
2372
|
color: colors.evMutedBlue,
|
|
2327
2373
|
margin: 0
|
|
2328
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
2374
|
+
} }, politician.full_name), /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2329
2375
|
fontFamily: fonts.primary,
|
|
2330
2376
|
fontSize: fontSizes.sm,
|
|
2331
2377
|
fontWeight: fontWeights.semibold,
|
|
@@ -2336,7 +2382,7 @@ function CompassCardHorizontalMeta({
|
|
|
2336
2382
|
display: "-webkit-box",
|
|
2337
2383
|
WebkitLineClamp: 2,
|
|
2338
2384
|
WebkitBoxOrient: "vertical"
|
|
2339
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
2385
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2340
2386
|
fontFamily: fonts.primary,
|
|
2341
2387
|
fontSize: fontSizes.sm,
|
|
2342
2388
|
fontWeight: fontWeights.regular,
|
|
@@ -2346,7 +2392,7 @@ function CompassCardHorizontalMeta({
|
|
|
2346
2392
|
overflow: "hidden",
|
|
2347
2393
|
textOverflow: "ellipsis",
|
|
2348
2394
|
whiteSpace: "nowrap"
|
|
2349
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
2395
|
+
} }, politician.district_label), /* @__PURE__ */ import_react12.default.createElement(
|
|
2350
2396
|
IconOverlay,
|
|
2351
2397
|
{
|
|
2352
2398
|
ballot: politician.ballot || null,
|
|
@@ -2395,11 +2441,11 @@ function CompassCardHorizontal({
|
|
|
2395
2441
|
onClick
|
|
2396
2442
|
}) {
|
|
2397
2443
|
var _a;
|
|
2398
|
-
const [hovered, setHovered] = (0,
|
|
2399
|
-
const [focused, setFocused] = (0,
|
|
2400
|
-
const [imgError, setImgError] = (0,
|
|
2401
|
-
const [emptyCtaHovered, setEmptyCtaHovered] = (0,
|
|
2402
|
-
(0,
|
|
2444
|
+
const [hovered, setHovered] = (0, import_react13.useState)(false);
|
|
2445
|
+
const [focused, setFocused] = (0, import_react13.useState)(false);
|
|
2446
|
+
const [imgError, setImgError] = (0, import_react13.useState)(false);
|
|
2447
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react13.useState)(false);
|
|
2448
|
+
(0, import_react13.useEffect)(() => {
|
|
2403
2449
|
setImgError(false);
|
|
2404
2450
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2405
2451
|
const cardStyle = {
|
|
@@ -2423,7 +2469,7 @@ function CompassCardHorizontal({
|
|
|
2423
2469
|
function renderCompass() {
|
|
2424
2470
|
var _a2, _b, _c;
|
|
2425
2471
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2426
|
-
return /* @__PURE__ */
|
|
2472
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2427
2473
|
}
|
|
2428
2474
|
let topics = [];
|
|
2429
2475
|
let data = {};
|
|
@@ -2459,12 +2505,12 @@ function CompassCardHorizontal({
|
|
|
2459
2505
|
}, {}) : politician.stances;
|
|
2460
2506
|
}
|
|
2461
2507
|
if (topics.length === 0) {
|
|
2462
|
-
return /* @__PURE__ */
|
|
2508
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2463
2509
|
}
|
|
2464
2510
|
} catch (err) {
|
|
2465
|
-
return /* @__PURE__ */
|
|
2511
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2466
2512
|
}
|
|
2467
|
-
return /* @__PURE__ */
|
|
2513
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2468
2514
|
RadarChartCore,
|
|
2469
2515
|
{
|
|
2470
2516
|
topics,
|
|
@@ -2486,7 +2532,7 @@ function CompassCardHorizontal({
|
|
|
2486
2532
|
var _a2, _b, _c;
|
|
2487
2533
|
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;
|
|
2488
2534
|
if (imageSrc && !imgError) {
|
|
2489
|
-
return /* @__PURE__ */
|
|
2535
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2490
2536
|
"img",
|
|
2491
2537
|
{
|
|
2492
2538
|
src: imageSrc,
|
|
@@ -2504,7 +2550,7 @@ function CompassCardHorizontal({
|
|
|
2504
2550
|
}
|
|
2505
2551
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2506
2552
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2507
|
-
return /* @__PURE__ */
|
|
2553
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2508
2554
|
width: "100%",
|
|
2509
2555
|
height: "100%",
|
|
2510
2556
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2518,7 +2564,7 @@ function CompassCardHorizontal({
|
|
|
2518
2564
|
} }, initials);
|
|
2519
2565
|
}
|
|
2520
2566
|
function renderEmptyVariant() {
|
|
2521
|
-
return /* @__PURE__ */
|
|
2567
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2522
2568
|
width: "100%",
|
|
2523
2569
|
height: "100%",
|
|
2524
2570
|
display: "flex",
|
|
@@ -2529,14 +2575,14 @@ function CompassCardHorizontal({
|
|
|
2529
2575
|
padding: "12px 14px",
|
|
2530
2576
|
boxSizing: "border-box",
|
|
2531
2577
|
backgroundColor: colorScales.teal["050"]
|
|
2532
|
-
} }, /* @__PURE__ */
|
|
2578
|
+
} }, /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2533
2579
|
margin: 0,
|
|
2534
2580
|
fontSize: fontSizes.xs,
|
|
2535
2581
|
color: colors.textMuted,
|
|
2536
2582
|
textAlign: "center",
|
|
2537
2583
|
lineHeight: 1.4,
|
|
2538
2584
|
fontFamily: fonts.primary
|
|
2539
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
2585
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react13.default.createElement(
|
|
2540
2586
|
"button",
|
|
2541
2587
|
{
|
|
2542
2588
|
type: "button",
|
|
@@ -2564,7 +2610,7 @@ function CompassCardHorizontal({
|
|
|
2564
2610
|
));
|
|
2565
2611
|
}
|
|
2566
2612
|
function renderUnavailablePlate(message = "Compass currently unavailable for this role.") {
|
|
2567
|
-
return /* @__PURE__ */
|
|
2613
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2568
2614
|
width: "100%",
|
|
2569
2615
|
height: "100%",
|
|
2570
2616
|
backgroundColor: colorScales.teal["050"],
|
|
@@ -2573,7 +2619,7 @@ function CompassCardHorizontal({
|
|
|
2573
2619
|
justifyContent: "center",
|
|
2574
2620
|
padding: spacing[4],
|
|
2575
2621
|
boxSizing: "border-box"
|
|
2576
|
-
} }, /* @__PURE__ */
|
|
2622
|
+
} }, /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2577
2623
|
fontSize: fontSizes.sm,
|
|
2578
2624
|
fontWeight: fontWeights.semibold,
|
|
2579
2625
|
lineHeight: 1.4,
|
|
@@ -2592,7 +2638,7 @@ function CompassCardHorizontal({
|
|
|
2592
2638
|
const name = (politician == null ? void 0 : politician.full_name) || "this official";
|
|
2593
2639
|
return renderUnavailablePlate(`No compass stances on file for ${name} yet.`);
|
|
2594
2640
|
}
|
|
2595
|
-
return /* @__PURE__ */
|
|
2641
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2596
2642
|
width: "100%",
|
|
2597
2643
|
height: "100%",
|
|
2598
2644
|
display: "flex",
|
|
@@ -2602,7 +2648,7 @@ function CompassCardHorizontal({
|
|
|
2602
2648
|
boxSizing: "border-box"
|
|
2603
2649
|
} }, renderCompass());
|
|
2604
2650
|
}
|
|
2605
|
-
return /* @__PURE__ */
|
|
2651
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2606
2652
|
"div",
|
|
2607
2653
|
{
|
|
2608
2654
|
role: "article",
|
|
@@ -2621,7 +2667,7 @@ function CompassCardHorizontal({
|
|
|
2621
2667
|
onFocus: () => setFocused(true),
|
|
2622
2668
|
onBlur: () => setFocused(false)
|
|
2623
2669
|
},
|
|
2624
|
-
/* @__PURE__ */
|
|
2670
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2625
2671
|
position: "absolute",
|
|
2626
2672
|
bottom: "15px",
|
|
2627
2673
|
left: 0,
|
|
@@ -2636,7 +2682,7 @@ function CompassCardHorizontal({
|
|
|
2636
2682
|
padding: "6px 0",
|
|
2637
2683
|
pointerEvents: "none"
|
|
2638
2684
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed")),
|
|
2639
|
-
/* @__PURE__ */
|
|
2685
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react13.default.createElement(
|
|
2640
2686
|
CompassCardHorizontalMeta,
|
|
2641
2687
|
{
|
|
2642
2688
|
politician,
|
|
@@ -2648,7 +2694,7 @@ function CompassCardHorizontal({
|
|
|
2648
2694
|
}
|
|
2649
2695
|
|
|
2650
2696
|
// src/CompassCardVertical.jsx
|
|
2651
|
-
var
|
|
2697
|
+
var import_react14 = __toESM(require("react"));
|
|
2652
2698
|
var RADAR_SIZE2 = 400;
|
|
2653
2699
|
function CompassCardVertical({
|
|
2654
2700
|
politician,
|
|
@@ -2662,11 +2708,11 @@ function CompassCardVertical({
|
|
|
2662
2708
|
onClick
|
|
2663
2709
|
}) {
|
|
2664
2710
|
var _a;
|
|
2665
|
-
const [hovered, setHovered] = (0,
|
|
2666
|
-
const [focused, setFocused] = (0,
|
|
2667
|
-
const [imgError, setImgError] = (0,
|
|
2668
|
-
const [emptyCtaHovered, setEmptyCtaHovered] = (0,
|
|
2669
|
-
(0,
|
|
2711
|
+
const [hovered, setHovered] = (0, import_react14.useState)(false);
|
|
2712
|
+
const [focused, setFocused] = (0, import_react14.useState)(false);
|
|
2713
|
+
const [imgError, setImgError] = (0, import_react14.useState)(false);
|
|
2714
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react14.useState)(false);
|
|
2715
|
+
(0, import_react14.useEffect)(() => {
|
|
2670
2716
|
setImgError(false);
|
|
2671
2717
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2672
2718
|
const cardStyle = {
|
|
@@ -2689,7 +2735,7 @@ function CompassCardVertical({
|
|
|
2689
2735
|
function renderCompass() {
|
|
2690
2736
|
var _a2, _b, _c;
|
|
2691
2737
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2692
|
-
return /* @__PURE__ */
|
|
2738
|
+
return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2693
2739
|
}
|
|
2694
2740
|
let topics = [];
|
|
2695
2741
|
let data = {};
|
|
@@ -2725,17 +2771,17 @@ function CompassCardVertical({
|
|
|
2725
2771
|
}, {}) : politician.stances;
|
|
2726
2772
|
}
|
|
2727
2773
|
if (topics.length === 0) {
|
|
2728
|
-
return /* @__PURE__ */
|
|
2774
|
+
return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2729
2775
|
}
|
|
2730
2776
|
} catch {
|
|
2731
|
-
return /* @__PURE__ */
|
|
2777
|
+
return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2732
2778
|
}
|
|
2733
2779
|
const unansweredSpokes = {};
|
|
2734
2780
|
for (const t of topics) {
|
|
2735
2781
|
const v = compareData[t.short_title];
|
|
2736
2782
|
if (!v || Number(v) === 0) unansweredSpokes[t.short_title] = true;
|
|
2737
2783
|
}
|
|
2738
|
-
return /* @__PURE__ */
|
|
2784
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: { width: RADAR_SIZE2 + 240, maxWidth: "100%", flexShrink: 0 } }, /* @__PURE__ */ import_react14.default.createElement(
|
|
2739
2785
|
RadarChartCore,
|
|
2740
2786
|
{
|
|
2741
2787
|
topics,
|
|
@@ -2770,7 +2816,7 @@ function CompassCardVertical({
|
|
|
2770
2816
|
justifyContent: "center"
|
|
2771
2817
|
};
|
|
2772
2818
|
if (imageSrc && !imgError) {
|
|
2773
|
-
return /* @__PURE__ */
|
|
2819
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react14.default.createElement(
|
|
2774
2820
|
"img",
|
|
2775
2821
|
{
|
|
2776
2822
|
src: imageSrc,
|
|
@@ -2788,7 +2834,7 @@ function CompassCardVertical({
|
|
|
2788
2834
|
}
|
|
2789
2835
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2790
2836
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2791
|
-
return /* @__PURE__ */
|
|
2837
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react14.default.createElement("span", { style: {
|
|
2792
2838
|
color: colors.textWhite,
|
|
2793
2839
|
fontFamily: fonts.primary,
|
|
2794
2840
|
fontWeight: fontWeights.bold,
|
|
@@ -2799,7 +2845,7 @@ function CompassCardVertical({
|
|
|
2799
2845
|
var _a2, _b, _c;
|
|
2800
2846
|
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;
|
|
2801
2847
|
if (imageSrc && !imgError) {
|
|
2802
|
-
return /* @__PURE__ */
|
|
2848
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
2803
2849
|
"img",
|
|
2804
2850
|
{
|
|
2805
2851
|
src: imageSrc,
|
|
@@ -2818,7 +2864,7 @@ function CompassCardVertical({
|
|
|
2818
2864
|
}
|
|
2819
2865
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2820
2866
|
const initials = (parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_c = parts[0]) == null ? void 0 : _c[0]) || "?").toUpperCase();
|
|
2821
|
-
return /* @__PURE__ */
|
|
2867
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2822
2868
|
width: RADAR_SIZE2,
|
|
2823
2869
|
height: RADAR_SIZE2,
|
|
2824
2870
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2833,7 +2879,7 @@ function CompassCardVertical({
|
|
|
2833
2879
|
} }, initials);
|
|
2834
2880
|
}
|
|
2835
2881
|
function renderEmptyVariant() {
|
|
2836
|
-
return /* @__PURE__ */
|
|
2882
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2837
2883
|
width: "100%",
|
|
2838
2884
|
height: "100%",
|
|
2839
2885
|
flex: 1,
|
|
@@ -2846,14 +2892,14 @@ function CompassCardVertical({
|
|
|
2846
2892
|
boxSizing: "border-box",
|
|
2847
2893
|
backgroundColor: colorScales.teal["050"],
|
|
2848
2894
|
borderRadius: borderRadius.md
|
|
2849
|
-
} }, /* @__PURE__ */
|
|
2895
|
+
} }, /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: 220, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2850
2896
|
margin: 0,
|
|
2851
2897
|
fontSize: fontSizes.sm,
|
|
2852
2898
|
color: colors.textMuted,
|
|
2853
2899
|
textAlign: "center",
|
|
2854
2900
|
lineHeight: 1.4,
|
|
2855
2901
|
fontFamily: fonts.primary
|
|
2856
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
2902
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react14.default.createElement(
|
|
2857
2903
|
"button",
|
|
2858
2904
|
{
|
|
2859
2905
|
type: "button",
|
|
@@ -2879,7 +2925,7 @@ function CompassCardVertical({
|
|
|
2879
2925
|
));
|
|
2880
2926
|
}
|
|
2881
2927
|
function renderUnavailablePlate(message) {
|
|
2882
|
-
return /* @__PURE__ */
|
|
2928
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2883
2929
|
width: "100%",
|
|
2884
2930
|
height: "100%",
|
|
2885
2931
|
flex: 1,
|
|
@@ -2890,7 +2936,7 @@ function CompassCardVertical({
|
|
|
2890
2936
|
justifyContent: "center",
|
|
2891
2937
|
padding: spacing[6],
|
|
2892
2938
|
boxSizing: "border-box"
|
|
2893
|
-
} }, /* @__PURE__ */
|
|
2939
|
+
} }, /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2894
2940
|
fontSize: fontSizes.base,
|
|
2895
2941
|
fontWeight: fontWeights.semibold,
|
|
2896
2942
|
lineHeight: 1.4,
|
|
@@ -2911,7 +2957,7 @@ function CompassCardVertical({
|
|
|
2911
2957
|
}
|
|
2912
2958
|
return renderCompass();
|
|
2913
2959
|
}
|
|
2914
|
-
return /* @__PURE__ */
|
|
2960
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
2915
2961
|
"div",
|
|
2916
2962
|
{
|
|
2917
2963
|
role: "article",
|
|
@@ -2930,21 +2976,21 @@ function CompassCardVertical({
|
|
|
2930
2976
|
onFocus: () => setFocused(true),
|
|
2931
2977
|
onBlur: () => setFocused(false)
|
|
2932
2978
|
},
|
|
2933
|
-
/* @__PURE__ */
|
|
2979
|
+
/* @__PURE__ */ import_react14.default.createElement("div", { style: { padding: spacing[4], paddingBottom: spacing[3], display: "flex", alignItems: "stretch", gap: spacing[3], flexShrink: 0 } }, renderAvatar(), /* @__PURE__ */ import_react14.default.createElement("div", { style: { display: "flex", flexDirection: "column", gap: spacing[1], minWidth: 0, flex: 1 } }, /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2934
2980
|
fontFamily: fonts.primary,
|
|
2935
2981
|
fontSize: fontSizes.xl,
|
|
2936
2982
|
fontWeight: fontWeights.semibold,
|
|
2937
2983
|
lineHeight: 1.3,
|
|
2938
2984
|
color: colors.evMutedBlue,
|
|
2939
2985
|
margin: 0
|
|
2940
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
2986
|
+
} }, politician.full_name), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2941
2987
|
fontFamily: fonts.primary,
|
|
2942
2988
|
fontSize: fontSizes.sm,
|
|
2943
2989
|
fontWeight: fontWeights.semibold,
|
|
2944
2990
|
lineHeight: 1.4,
|
|
2945
2991
|
color: colors.textSecondary,
|
|
2946
2992
|
margin: 0
|
|
2947
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
2993
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2948
2994
|
fontFamily: fonts.primary,
|
|
2949
2995
|
fontSize: fontSizes.sm,
|
|
2950
2996
|
fontWeight: fontWeights.regular,
|
|
@@ -2954,7 +3000,7 @@ function CompassCardVertical({
|
|
|
2954
3000
|
overflow: "hidden",
|
|
2955
3001
|
textOverflow: "ellipsis",
|
|
2956
3002
|
whiteSpace: "nowrap"
|
|
2957
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
3003
|
+
} }, politician.district_label), /* @__PURE__ */ import_react14.default.createElement("div", { style: { marginTop: "auto" } }, /* @__PURE__ */ import_react14.default.createElement(
|
|
2958
3004
|
IconOverlay,
|
|
2959
3005
|
{
|
|
2960
3006
|
ballot: politician.ballot || null,
|
|
@@ -2962,7 +3008,7 @@ function CompassCardVertical({
|
|
|
2962
3008
|
branch: politician.branch || null
|
|
2963
3009
|
}
|
|
2964
3010
|
)))),
|
|
2965
|
-
surface === "elections" && politician.withdrawn && /* @__PURE__ */
|
|
3011
|
+
surface === "elections" && politician.withdrawn && /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2966
3012
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
2967
3013
|
backgroundColor: "rgba(120,0,0,0.85)",
|
|
2968
3014
|
color: "#fff",
|
|
@@ -2974,7 +3020,7 @@ function CompassCardVertical({
|
|
|
2974
3020
|
padding: "6px 0",
|
|
2975
3021
|
borderRadius: borderRadius.sm
|
|
2976
3022
|
} }, "Withdrawn"),
|
|
2977
|
-
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */
|
|
3023
|
+
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2978
3024
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
2979
3025
|
backgroundColor: "rgba(0,0,0,0.75)",
|
|
2980
3026
|
color: "#fff",
|
|
@@ -2986,7 +3032,7 @@ function CompassCardVertical({
|
|
|
2986
3032
|
padding: "6px 0",
|
|
2987
3033
|
borderRadius: borderRadius.sm
|
|
2988
3034
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed"),
|
|
2989
|
-
/* @__PURE__ */
|
|
3035
|
+
/* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2990
3036
|
flex: 1,
|
|
2991
3037
|
padding: spacing[4],
|
|
2992
3038
|
paddingTop: 0,
|
|
@@ -3000,7 +3046,7 @@ function CompassCardVertical({
|
|
|
3000
3046
|
}
|
|
3001
3047
|
|
|
3002
3048
|
// src/CompassKey.jsx
|
|
3003
|
-
var
|
|
3049
|
+
var import_react15 = __toESM(require("react"));
|
|
3004
3050
|
|
|
3005
3051
|
// src/evContext.js
|
|
3006
3052
|
var DEFAULT_BROKER_URL = "https://ev-context.empowered.vote/";
|
|
@@ -3245,9 +3291,9 @@ var evContext = {
|
|
|
3245
3291
|
|
|
3246
3292
|
// src/CompassKey.jsx
|
|
3247
3293
|
function CompassKey({ compact = false } = {}) {
|
|
3248
|
-
const [dismissed, setDismissed] = (0,
|
|
3249
|
-
const [loaded, setLoaded] = (0,
|
|
3250
|
-
(0,
|
|
3294
|
+
const [dismissed, setDismissed] = (0, import_react15.useState)(false);
|
|
3295
|
+
const [loaded, setLoaded] = (0, import_react15.useState)(false);
|
|
3296
|
+
(0, import_react15.useEffect)(() => {
|
|
3251
3297
|
let cancelled = false;
|
|
3252
3298
|
evContext.get().then((shared) => {
|
|
3253
3299
|
if (cancelled) return;
|
|
@@ -3277,7 +3323,7 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3277
3323
|
persistDismissed(false);
|
|
3278
3324
|
}
|
|
3279
3325
|
if (!loaded) return null;
|
|
3280
|
-
const Swatch = ({ color, label, ring }) => /* @__PURE__ */
|
|
3326
|
+
const Swatch = ({ color, label, ring }) => /* @__PURE__ */ import_react15.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react15.default.createElement("span", { style: {
|
|
3281
3327
|
display: "inline-block",
|
|
3282
3328
|
width: 12,
|
|
3283
3329
|
height: 12,
|
|
@@ -3285,9 +3331,9 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3285
3331
|
background: color,
|
|
3286
3332
|
border: `2px solid ${ring || "#fff"}`,
|
|
3287
3333
|
boxShadow: "0 0 0 1px rgba(0,0,0,0.08)"
|
|
3288
|
-
} }), /* @__PURE__ */
|
|
3334
|
+
} }), /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, label));
|
|
3289
3335
|
if (dismissed) {
|
|
3290
|
-
return /* @__PURE__ */
|
|
3336
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
3291
3337
|
"button",
|
|
3292
3338
|
{
|
|
3293
3339
|
type: "button",
|
|
@@ -3308,11 +3354,11 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3308
3354
|
cursor: "pointer"
|
|
3309
3355
|
}
|
|
3310
3356
|
},
|
|
3311
|
-
/* @__PURE__ */
|
|
3357
|
+
/* @__PURE__ */ import_react15.default.createElement("span", { "aria-hidden": "true" }, "?"),
|
|
3312
3358
|
" Compass key"
|
|
3313
3359
|
);
|
|
3314
3360
|
}
|
|
3315
|
-
return /* @__PURE__ */
|
|
3361
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
3316
3362
|
"div",
|
|
3317
3363
|
{
|
|
3318
3364
|
role: "region",
|
|
@@ -3331,17 +3377,17 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3331
3377
|
boxSizing: "border-box"
|
|
3332
3378
|
}
|
|
3333
3379
|
},
|
|
3334
|
-
!compact && /* @__PURE__ */
|
|
3380
|
+
!compact && /* @__PURE__ */ import_react15.default.createElement("span", { style: {
|
|
3335
3381
|
fontSize: fontSizes.xs,
|
|
3336
3382
|
fontWeight: fontWeights.semibold,
|
|
3337
3383
|
color: colors.textMuted,
|
|
3338
3384
|
textTransform: "uppercase",
|
|
3339
3385
|
letterSpacing: "0.5px"
|
|
3340
3386
|
} }, "Compass key"),
|
|
3341
|
-
/* @__PURE__ */
|
|
3342
|
-
/* @__PURE__ */
|
|
3343
|
-
/* @__PURE__ */
|
|
3344
|
-
/* @__PURE__ */
|
|
3387
|
+
/* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#7C6B9E", label: "You" }),
|
|
3388
|
+
/* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#5A9A6E", label: "Politician" }),
|
|
3389
|
+
/* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#fed12e", label: "Match" }),
|
|
3390
|
+
/* @__PURE__ */ import_react15.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react15.default.createElement("span", { style: {
|
|
3345
3391
|
fontSize: fontSizes.xs,
|
|
3346
3392
|
fontWeight: fontWeights.semibold,
|
|
3347
3393
|
color: "#9ca3af",
|
|
@@ -3349,8 +3395,8 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3349
3395
|
textDecoration: "underline",
|
|
3350
3396
|
textDecorationStyle: "dashed",
|
|
3351
3397
|
textUnderlineOffset: "3px"
|
|
3352
|
-
} }, "Topic"), /* @__PURE__ */
|
|
3353
|
-
/* @__PURE__ */
|
|
3398
|
+
} }, "Topic"), /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, "= no stance")),
|
|
3399
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
3354
3400
|
"button",
|
|
3355
3401
|
{
|
|
3356
3402
|
type: "button",
|
|
@@ -3373,7 +3419,7 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3373
3419
|
}
|
|
3374
3420
|
|
|
3375
3421
|
// src/CategorySection.jsx
|
|
3376
|
-
var
|
|
3422
|
+
var import_react16 = __toESM(require("react"));
|
|
3377
3423
|
function CategorySection({
|
|
3378
3424
|
title,
|
|
3379
3425
|
infoTooltip,
|
|
@@ -3383,7 +3429,7 @@ function CategorySection({
|
|
|
3383
3429
|
tier
|
|
3384
3430
|
}) {
|
|
3385
3431
|
var _a, _b;
|
|
3386
|
-
const [showTooltip, setShowTooltip] = (0,
|
|
3432
|
+
const [showTooltip, setShowTooltip] = (0, import_react16.useState)(false);
|
|
3387
3433
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3388
3434
|
const styles2 = {
|
|
3389
3435
|
section: {
|
|
@@ -3451,7 +3497,7 @@ function CategorySection({
|
|
|
3451
3497
|
gap: spacing[4]
|
|
3452
3498
|
}
|
|
3453
3499
|
};
|
|
3454
|
-
return /* @__PURE__ */
|
|
3500
|
+
return /* @__PURE__ */ import_react16.default.createElement("section", { style: styles2.section, className: "ev-category-section" }, /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react16.default.createElement("span", { style: styles2.titlePill }, title), infoTooltip && /* @__PURE__ */ import_react16.default.createElement(
|
|
3455
3501
|
"button",
|
|
3456
3502
|
{
|
|
3457
3503
|
type: "button",
|
|
@@ -3463,8 +3509,8 @@ function CategorySection({
|
|
|
3463
3509
|
"aria-label": `Info about ${title}`
|
|
3464
3510
|
},
|
|
3465
3511
|
"i",
|
|
3466
|
-
showTooltip && /* @__PURE__ */
|
|
3467
|
-
), websiteUrl && /* @__PURE__ */
|
|
3512
|
+
showTooltip && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
|
|
3513
|
+
), websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
|
|
3468
3514
|
"a",
|
|
3469
3515
|
{
|
|
3470
3516
|
href: websiteUrl,
|
|
@@ -3473,7 +3519,7 @@ function CategorySection({
|
|
|
3473
3519
|
style: styles2.externalLink,
|
|
3474
3520
|
"aria-label": `Visit official website for ${title}`
|
|
3475
3521
|
},
|
|
3476
|
-
/* @__PURE__ */
|
|
3522
|
+
/* @__PURE__ */ import_react16.default.createElement(
|
|
3477
3523
|
"svg",
|
|
3478
3524
|
{
|
|
3479
3525
|
viewBox: "0 0 24 24",
|
|
@@ -3481,7 +3527,7 @@ function CategorySection({
|
|
|
3481
3527
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3482
3528
|
style: { width: "14px", height: "14px" }
|
|
3483
3529
|
},
|
|
3484
|
-
/* @__PURE__ */
|
|
3530
|
+
/* @__PURE__ */ import_react16.default.createElement(
|
|
3485
3531
|
"path",
|
|
3486
3532
|
{
|
|
3487
3533
|
d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
|
|
@@ -3492,11 +3538,11 @@ function CategorySection({
|
|
|
3492
3538
|
}
|
|
3493
3539
|
)
|
|
3494
3540
|
)
|
|
3495
|
-
)), /* @__PURE__ */
|
|
3541
|
+
)), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
|
|
3496
3542
|
}
|
|
3497
3543
|
|
|
3498
3544
|
// src/SubGroupSection.jsx
|
|
3499
|
-
var
|
|
3545
|
+
var import_react17 = __toESM(require("react"));
|
|
3500
3546
|
function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap, justifyContent }) {
|
|
3501
3547
|
const styles2 = {
|
|
3502
3548
|
section: {
|
|
@@ -3531,7 +3577,7 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3531
3577
|
width: "100%"
|
|
3532
3578
|
}
|
|
3533
3579
|
};
|
|
3534
|
-
return /* @__PURE__ */
|
|
3580
|
+
return /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.section }, title && /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.header }, /* @__PURE__ */ import_react17.default.createElement("span", { style: styles2.label }, title), websiteUrl && /* @__PURE__ */ import_react17.default.createElement(
|
|
3535
3581
|
"a",
|
|
3536
3582
|
{
|
|
3537
3583
|
href: websiteUrl,
|
|
@@ -3539,12 +3585,12 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3539
3585
|
rel: "noopener noreferrer",
|
|
3540
3586
|
style: styles2.link
|
|
3541
3587
|
},
|
|
3542
|
-
/* @__PURE__ */
|
|
3543
|
-
)), /* @__PURE__ */
|
|
3588
|
+
/* @__PURE__ */ import_react17.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react17.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react17.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" }))
|
|
3589
|
+
)), /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
|
|
3544
3590
|
}
|
|
3545
3591
|
|
|
3546
3592
|
// src/GovernmentBodySection.jsx
|
|
3547
|
-
var
|
|
3593
|
+
var import_react18 = __toESM(require("react"));
|
|
3548
3594
|
function GovernmentBodySection({
|
|
3549
3595
|
title,
|
|
3550
3596
|
websiteUrl,
|
|
@@ -3553,7 +3599,7 @@ function GovernmentBodySection({
|
|
|
3553
3599
|
children
|
|
3554
3600
|
}) {
|
|
3555
3601
|
var _a;
|
|
3556
|
-
const [expanded, setExpanded] = (0,
|
|
3602
|
+
const [expanded, setExpanded] = (0, import_react18.useState)(defaultExpanded);
|
|
3557
3603
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3558
3604
|
const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
|
|
3559
3605
|
const styles2 = {
|
|
@@ -3593,7 +3639,7 @@ function GovernmentBodySection({
|
|
|
3593
3639
|
display: expanded ? "block" : "none"
|
|
3594
3640
|
}
|
|
3595
3641
|
};
|
|
3596
|
-
return /* @__PURE__ */
|
|
3642
|
+
return /* @__PURE__ */ import_react18.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react18.default.createElement(
|
|
3597
3643
|
"div",
|
|
3598
3644
|
{
|
|
3599
3645
|
style: styles2.header,
|
|
@@ -3609,8 +3655,8 @@ function GovernmentBodySection({
|
|
|
3609
3655
|
"aria-expanded": expanded,
|
|
3610
3656
|
"aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
|
|
3611
3657
|
},
|
|
3612
|
-
/* @__PURE__ */
|
|
3613
|
-
websiteUrl && /* @__PURE__ */
|
|
3658
|
+
/* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.title }, title),
|
|
3659
|
+
websiteUrl && /* @__PURE__ */ import_react18.default.createElement(
|
|
3614
3660
|
"a",
|
|
3615
3661
|
{
|
|
3616
3662
|
href: websiteUrl,
|
|
@@ -3620,14 +3666,14 @@ function GovernmentBodySection({
|
|
|
3620
3666
|
onClick: (e) => e.stopPropagation(),
|
|
3621
3667
|
"aria-label": `Visit ${title} website`
|
|
3622
3668
|
},
|
|
3623
|
-
/* @__PURE__ */
|
|
3669
|
+
/* @__PURE__ */ import_react18.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { width: "14px", height: "14px" } }, /* @__PURE__ */ import_react18.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react18.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" }))
|
|
3624
3670
|
),
|
|
3625
|
-
/* @__PURE__ */
|
|
3626
|
-
), /* @__PURE__ */
|
|
3671
|
+
/* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
|
|
3672
|
+
), /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.content }, children));
|
|
3627
3673
|
}
|
|
3628
3674
|
|
|
3629
3675
|
// src/SocialLinks.jsx
|
|
3630
|
-
var
|
|
3676
|
+
var import_react19 = __toESM(require("react"));
|
|
3631
3677
|
var SOCIAL_PLATFORMS = [
|
|
3632
3678
|
{ test: /facebook\.com/i, platform: "facebook" },
|
|
3633
3679
|
{ test: /twitter\.com|x\.com/i, platform: "twitter" },
|
|
@@ -3698,7 +3744,7 @@ function SocialLinks({
|
|
|
3698
3744
|
}
|
|
3699
3745
|
};
|
|
3700
3746
|
const platformIconMap = {
|
|
3701
|
-
twitter: /* @__PURE__ */
|
|
3747
|
+
twitter: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
3702
3748
|
"path",
|
|
3703
3749
|
{
|
|
3704
3750
|
d: "M4 4L10.5 12.5M20 20L13.5 11.5M10.5 12.5L4 20H8L13.5 11.5M10.5 12.5L16 4H20L13.5 11.5",
|
|
@@ -3708,7 +3754,7 @@ function SocialLinks({
|
|
|
3708
3754
|
strokeLinejoin: "round"
|
|
3709
3755
|
}
|
|
3710
3756
|
)),
|
|
3711
|
-
facebook: /* @__PURE__ */
|
|
3757
|
+
facebook: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
3712
3758
|
"path",
|
|
3713
3759
|
{
|
|
3714
3760
|
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",
|
|
@@ -3718,8 +3764,8 @@ function SocialLinks({
|
|
|
3718
3764
|
strokeLinejoin: "round"
|
|
3719
3765
|
}
|
|
3720
3766
|
)),
|
|
3721
|
-
instagram: /* @__PURE__ */
|
|
3722
|
-
linkedin: /* @__PURE__ */
|
|
3767
|
+
instagram: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement("rect", { x: "2", y: "2", width: "20", height: "20", rx: "5", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "12", cy: "12", r: "4", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "18", cy: "6", r: "1", fill: "currentColor" })),
|
|
3768
|
+
linkedin: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement(
|
|
3723
3769
|
"path",
|
|
3724
3770
|
{
|
|
3725
3771
|
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",
|
|
@@ -3728,8 +3774,8 @@ function SocialLinks({
|
|
|
3728
3774
|
strokeLinecap: "round",
|
|
3729
3775
|
strokeLinejoin: "round"
|
|
3730
3776
|
}
|
|
3731
|
-
), /* @__PURE__ */
|
|
3732
|
-
youtube: /* @__PURE__ */
|
|
3777
|
+
), /* @__PURE__ */ import_react19.default.createElement("rect", { x: "2", y: "9", width: "4", height: "12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "4", cy: "4", r: "2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })),
|
|
3778
|
+
youtube: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement("rect", { x: "2", y: "5", width: "20", height: "14", rx: "3", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement("polygon", { points: "10,9 16,12 10,15", fill: "currentColor" }))
|
|
3733
3779
|
};
|
|
3734
3780
|
const links = [
|
|
3735
3781
|
{
|
|
@@ -3755,7 +3801,7 @@ function SocialLinks({
|
|
|
3755
3801
|
{
|
|
3756
3802
|
href: website,
|
|
3757
3803
|
label: "Website",
|
|
3758
|
-
icon: /* @__PURE__ */
|
|
3804
|
+
icon: /* @__PURE__ */ import_react19.default.createElement("svg", { style: styles2.icon, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ import_react19.default.createElement("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), /* @__PURE__ */ import_react19.default.createElement(
|
|
3759
3805
|
"path",
|
|
3760
3806
|
{
|
|
3761
3807
|
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",
|
|
@@ -3785,7 +3831,7 @@ function SocialLinks({
|
|
|
3785
3831
|
if (links.length === 0) {
|
|
3786
3832
|
return null;
|
|
3787
3833
|
}
|
|
3788
|
-
return /* @__PURE__ */
|
|
3834
|
+
return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react19.default.createElement(
|
|
3789
3835
|
"a",
|
|
3790
3836
|
{
|
|
3791
3837
|
key: link.label,
|
|
@@ -3808,7 +3854,7 @@ function SocialLinks({
|
|
|
3808
3854
|
}
|
|
3809
3855
|
|
|
3810
3856
|
// src/IssueTags.jsx
|
|
3811
|
-
var
|
|
3857
|
+
var import_react20 = __toESM(require("react"));
|
|
3812
3858
|
function IssueTags({
|
|
3813
3859
|
tags = [],
|
|
3814
3860
|
selectedTags = [],
|
|
@@ -3851,9 +3897,9 @@ function IssueTags({
|
|
|
3851
3897
|
onTagClick(tag.value);
|
|
3852
3898
|
}
|
|
3853
3899
|
};
|
|
3854
|
-
return /* @__PURE__ */
|
|
3900
|
+
return /* @__PURE__ */ import_react20.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
|
|
3855
3901
|
const isSelected = selectedTags.includes(tag.value);
|
|
3856
|
-
return /* @__PURE__ */
|
|
3902
|
+
return /* @__PURE__ */ import_react20.default.createElement(
|
|
3857
3903
|
"span",
|
|
3858
3904
|
{
|
|
3859
3905
|
key: tag.value,
|
|
@@ -3882,7 +3928,7 @@ function IssueTags({
|
|
|
3882
3928
|
}
|
|
3883
3929
|
|
|
3884
3930
|
// src/CommitteeTable.jsx
|
|
3885
|
-
var
|
|
3931
|
+
var import_react21 = __toESM(require("react"));
|
|
3886
3932
|
var ROLE_ORDER = {
|
|
3887
3933
|
"chair": 0,
|
|
3888
3934
|
"co-chair": 1,
|
|
@@ -3909,7 +3955,7 @@ function CommitteeTable({
|
|
|
3909
3955
|
maxVisible = 6,
|
|
3910
3956
|
style = {}
|
|
3911
3957
|
}) {
|
|
3912
|
-
const [showAll, setShowAll] = (0,
|
|
3958
|
+
const [showAll, setShowAll] = (0, import_react21.useState)(false);
|
|
3913
3959
|
if (committees.length === 0) {
|
|
3914
3960
|
return null;
|
|
3915
3961
|
}
|
|
@@ -3971,7 +4017,7 @@ function CommitteeTable({
|
|
|
3971
4017
|
cursor: "pointer"
|
|
3972
4018
|
}
|
|
3973
4019
|
};
|
|
3974
|
-
return /* @__PURE__ */
|
|
4020
|
+
return /* @__PURE__ */ import_react21.default.createElement("div", { style: styles2.container, className: "ev-committee-table" }, /* @__PURE__ */ import_react21.default.createElement("h4", { style: styles2.heading }, /* @__PURE__ */ import_react21.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react21.default.createElement("path", { d: "M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2" }), /* @__PURE__ */ import_react21.default.createElement("circle", { cx: "9", cy: "7", r: "4" }), /* @__PURE__ */ import_react21.default.createElement("path", { d: "M23 21v-2a4 4 0 00-3-3.87M16 3.13a4 4 0 010 7.75" })), title), /* @__PURE__ */ import_react21.default.createElement("table", { style: styles2.table }, /* @__PURE__ */ import_react21.default.createElement("tbody", null, visible.map((committee, index) => /* @__PURE__ */ import_react21.default.createElement("tr", { key: index, style: styles2.row }, /* @__PURE__ */ import_react21.default.createElement("td", { style: { ...styles2.cell, ...styles2.nameCell } }, committee.url ? /* @__PURE__ */ import_react21.default.createElement(
|
|
3975
4021
|
"a",
|
|
3976
4022
|
{
|
|
3977
4023
|
href: committee.url,
|
|
@@ -3986,7 +4032,7 @@ function CommitteeTable({
|
|
|
3986
4032
|
}
|
|
3987
4033
|
},
|
|
3988
4034
|
committee.name
|
|
3989
|
-
) : committee.name), /* @__PURE__ */
|
|
4035
|
+
) : committee.name), /* @__PURE__ */ import_react21.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react21.default.createElement(
|
|
3990
4036
|
"button",
|
|
3991
4037
|
{
|
|
3992
4038
|
type: "button",
|
|
@@ -3994,7 +4040,7 @@ function CommitteeTable({
|
|
|
3994
4040
|
onClick: () => setShowAll(!showAll)
|
|
3995
4041
|
},
|
|
3996
4042
|
showAll ? "Show less" : `Show all ${sorted.length} committees`,
|
|
3997
|
-
/* @__PURE__ */
|
|
4043
|
+
/* @__PURE__ */ import_react21.default.createElement(
|
|
3998
4044
|
"svg",
|
|
3999
4045
|
{
|
|
4000
4046
|
width: "14",
|
|
@@ -4007,16 +4053,16 @@ function CommitteeTable({
|
|
|
4007
4053
|
strokeLinejoin: "round",
|
|
4008
4054
|
style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
|
|
4009
4055
|
},
|
|
4010
|
-
/* @__PURE__ */
|
|
4056
|
+
/* @__PURE__ */ import_react21.default.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
4011
4057
|
)
|
|
4012
4058
|
));
|
|
4013
4059
|
}
|
|
4014
4060
|
|
|
4015
4061
|
// src/PoliticianProfile.jsx
|
|
4016
|
-
var
|
|
4062
|
+
var import_react24 = __toESM(require("react"));
|
|
4017
4063
|
|
|
4018
4064
|
// src/LegislativeInlineSummary.jsx
|
|
4019
|
-
var
|
|
4065
|
+
var import_react22 = __toESM(require("react"));
|
|
4020
4066
|
function normalizePosition(pos) {
|
|
4021
4067
|
if (!pos) return "";
|
|
4022
4068
|
return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -4124,7 +4170,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4124
4170
|
fontSize: fontSizes.sm,
|
|
4125
4171
|
fontWeight: fontWeights.medium
|
|
4126
4172
|
};
|
|
4127
|
-
return /* @__PURE__ */
|
|
4173
|
+
return /* @__PURE__ */ import_react22.default.createElement("div", { style: card }, stats.length > 0 && /* @__PURE__ */ import_react22.default.createElement("div", { style: statsRow }, stats.map((s, i) => /* @__PURE__ */ import_react22.default.createElement("div", { key: i, style: statItem }, /* @__PURE__ */ import_react22.default.createElement("span", { style: statValue }, s.value), s.label && /* @__PURE__ */ import_react22.default.createElement("span", { style: statLabel }, s.label)))), mostRecentAction && /* @__PURE__ */ import_react22.default.createElement("div", { style: actionLine, title: mostRecentAction }, mostRecentAction), /* @__PURE__ */ import_react22.default.createElement("div", null), /* @__PURE__ */ import_react22.default.createElement("div", { style: footerRow }, /* @__PURE__ */ import_react22.default.createElement(
|
|
4128
4174
|
"button",
|
|
4129
4175
|
{
|
|
4130
4176
|
onClick: () => {
|
|
@@ -4149,12 +4195,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4149
4195
|
}
|
|
4150
4196
|
},
|
|
4151
4197
|
"View Full Legislative Record",
|
|
4152
|
-
/* @__PURE__ */
|
|
4198
|
+
/* @__PURE__ */ import_react22.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_react22.default.createElement("path", { d: "M9 18l6-6-6-6" }))
|
|
4153
4199
|
)));
|
|
4154
4200
|
}
|
|
4155
4201
|
|
|
4156
4202
|
// src/JudicialScorecard.jsx
|
|
4157
|
-
var
|
|
4203
|
+
var import_react23 = __toESM(require("react"));
|
|
4158
4204
|
|
|
4159
4205
|
// src/judicialUtils.js
|
|
4160
4206
|
function formatDate(dateStr) {
|
|
@@ -4272,7 +4318,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
|
|
|
4272
4318
|
onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
|
|
4273
4319
|
}
|
|
4274
4320
|
};
|
|
4275
|
-
return /* @__PURE__ */
|
|
4321
|
+
return /* @__PURE__ */ import_react23.default.createElement("section", { style: sectionStyle }, /* @__PURE__ */ import_react23.default.createElement("h3", { style: headingStyle }, "Judicial Record"), evaluations.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: "16px" } }, evaluations.slice(0, 3).map((ev, i) => /* @__PURE__ */ import_react23.default.createElement("span", { key: i, style: evalChipStyle }, ev.rating, /* @__PURE__ */ import_react23.default.createElement("span", { style: { fontWeight: 400, color: "#4a90a4", fontSize: "11px" } }, "\u2014 ", ev.source)))), metrics.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: cardGridStyle }, metrics.slice(0, 4).map((m, i) => /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: metricCardStyle }, /* @__PURE__ */ import_react23.default.createElement("div", { style: metricLabelStyle }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react23.default.createElement("div", { style: metricValueStyle }, formatMetricValue(m.metric_type, m.value)), m.context_label && /* @__PURE__ */ import_react23.default.createElement("div", { style: metricContextStyle }, m.context_label)))), disciplinary.length > 0 && /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginBottom: "12px" } }, disciplinary.slice(0, 2).map((d, i) => /* @__PURE__ */ import_react23.default.createElement("div", { key: i, style: disciplinaryStyle }, /* @__PURE__ */ import_react23.default.createElement("strong", null, d.record_type), " \u2014 ", formatDate(d.record_date), d.description && /* @__PURE__ */ import_react23.default.createElement("div", { style: { marginTop: "4px" } }, d.description)))), /* @__PURE__ */ import_react23.default.createElement("a", { href: `/politician/${politicianId}/judicial-record`, onClick: handleNavigate, style: linkStyle }, "View Full Judicial Record \u2192"));
|
|
4276
4322
|
}
|
|
4277
4323
|
|
|
4278
4324
|
// src/PoliticianProfile.jsx
|
|
@@ -4423,13 +4469,13 @@ function formatAddress(addr) {
|
|
|
4423
4469
|
if (cityStateZip) lines.push(cityStateZip);
|
|
4424
4470
|
return lines;
|
|
4425
4471
|
}
|
|
4426
|
-
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4427
|
-
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4428
|
-
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4429
|
-
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4430
|
-
var MailIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4431
|
-
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4432
|
-
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */
|
|
4472
|
+
var CalendarIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "16", y1: "2", x2: "16", y2: "6" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "8", y1: "2", x2: "8", y2: "6" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "3", y1: "10", x2: "21", y2: "10" }));
|
|
4473
|
+
var ClockIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "12 6 12 12 16 14" }));
|
|
4474
|
+
var MapPinIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), /* @__PURE__ */ import_react24.default.createElement("circle", { cx: "12", cy: "10", r: "3" }));
|
|
4475
|
+
var PhoneIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.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" }));
|
|
4476
|
+
var MailIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.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_react24.default.createElement("path", { d: "M22 6L12 13L2 6" }));
|
|
4477
|
+
var GlobeIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("circle", { cx: "12", cy: "12", r: "10" }), /* @__PURE__ */ import_react24.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" }));
|
|
4478
|
+
var ExternalLinkIcon = ({ size = 16 }) => /* @__PURE__ */ import_react24.default.createElement("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6" }), /* @__PURE__ */ import_react24.default.createElement("polyline", { points: "15 3 21 3 21 9" }), /* @__PURE__ */ import_react24.default.createElement("line", { x1: "10", y1: "14", x2: "21", y2: "3" }));
|
|
4433
4479
|
function PoliticianProfile({
|
|
4434
4480
|
politician = {},
|
|
4435
4481
|
onBack,
|
|
@@ -4456,8 +4502,8 @@ function PoliticianProfile({
|
|
|
4456
4502
|
return pol.photo_origin_url;
|
|
4457
4503
|
})();
|
|
4458
4504
|
const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
|
|
4459
|
-
const [imgError, setImgError] = (0,
|
|
4460
|
-
(0,
|
|
4505
|
+
const [imgError, setImgError] = (0, import_react24.useState)(false);
|
|
4506
|
+
(0, import_react24.useEffect)(() => {
|
|
4461
4507
|
setImgError(false);
|
|
4462
4508
|
}, [profileImageUrl]);
|
|
4463
4509
|
const getSocialHandle = (type) => {
|
|
@@ -4757,7 +4803,7 @@ function PoliticianProfile({
|
|
|
4757
4803
|
borderRadius: borderRadius.full
|
|
4758
4804
|
}
|
|
4759
4805
|
};
|
|
4760
|
-
return /* @__PURE__ */
|
|
4806
|
+
return /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react24.default.createElement(
|
|
4761
4807
|
"button",
|
|
4762
4808
|
{
|
|
4763
4809
|
type: "button",
|
|
@@ -4770,9 +4816,9 @@ function PoliticianProfile({
|
|
|
4770
4816
|
e.currentTarget.style.textDecoration = "none";
|
|
4771
4817
|
}
|
|
4772
4818
|
},
|
|
4773
|
-
/* @__PURE__ */
|
|
4819
|
+
/* @__PURE__ */ import_react24.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react24.default.createElement("path", { d: "M15 19l-7-7 7-7" })),
|
|
4774
4820
|
label
|
|
4775
|
-
), /* @__PURE__ */
|
|
4821
|
+
), /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.card }, /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.heroRow }, /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.photoWrap }, profileImageUrl && !imgError ? /* @__PURE__ */ import_react24.default.createElement(
|
|
4776
4822
|
"img",
|
|
4777
4823
|
{
|
|
4778
4824
|
src: profileImageUrl,
|
|
@@ -4780,7 +4826,7 @@ function PoliticianProfile({
|
|
|
4780
4826
|
style: styles2.photo,
|
|
4781
4827
|
onError: () => setImgError(true)
|
|
4782
4828
|
}
|
|
4783
|
-
) : /* @__PURE__ */
|
|
4829
|
+
) : /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.placeholder }, initials || "?")), /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.infoCol }, styles2.tierBadge && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.tierBadge }, tier), /* @__PURE__ */ import_react24.default.createElement("h1", { style: styles2.name }, displayName), banner, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.roleLine }, roleLine), pol.office_description && /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.officeDesc }, pol.office_description), pol.bio_text && /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.bioText }, pol.bio_text), (termLine || pol.total_years_in_office > 0) && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.metaRow }, termLine && /* @__PURE__ */ import_react24.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react24.default.createElement(CalendarIcon, { size: 14 }), termLine), pol.total_years_in_office > 0 && /* @__PURE__ */ import_react24.default.createElement("span", { style: styles2.metaItem }, /* @__PURE__ */ import_react24.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_react24.default.createElement(
|
|
4784
4830
|
"a",
|
|
4785
4831
|
{
|
|
4786
4832
|
href: pol.web_form_url,
|
|
@@ -4794,9 +4840,9 @@ function PoliticianProfile({
|
|
|
4794
4840
|
e.currentTarget.style.background = colors.evTeal;
|
|
4795
4841
|
}
|
|
4796
4842
|
},
|
|
4797
|
-
/* @__PURE__ */
|
|
4843
|
+
/* @__PURE__ */ import_react24.default.createElement(ExternalLinkIcon, { size: 14 }),
|
|
4798
4844
|
"Submit a Message"
|
|
4799
|
-
))), hasContactInfo && /* @__PURE__ */
|
|
4845
|
+
))), hasContactInfo && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react24.default.createElement("div", { style: sectionHeading }, /* @__PURE__ */ import_react24.default.createElement(MailIcon, { size: 20 }), "Contact Information"), /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGrid }, hasAddresses && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(MapPinIcon, { size: 12 }), "Addresses"), addresses.map((addr, i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: `addr-${i}` }, /* @__PURE__ */ import_react24.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, addr.type), /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactValue }, addr.lines.map((line, j) => /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, { key: j }, line, j < addr.lines.length - 1 && /* @__PURE__ */ import_react24.default.createElement("br", null))))))), hasPhones && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(PhoneIcon, { size: 12 }), "Phone"), Object.entries(phonesByType).map(([type, phones], i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: `phone-${type}` }, /* @__PURE__ */ import_react24.default.createElement("p", { style: { ...styles2.contactSubLabel, ...i === 0 ? { marginTop: 0 } : { marginTop: spacing[2] } } }, type), phones.map((phone, j) => /* @__PURE__ */ import_react24.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react24.default.createElement(
|
|
4800
4846
|
"a",
|
|
4801
4847
|
{
|
|
4802
4848
|
href: `tel:${phone}`,
|
|
@@ -4809,7 +4855,7 @@ function PoliticianProfile({
|
|
|
4809
4855
|
}
|
|
4810
4856
|
},
|
|
4811
4857
|
phone
|
|
4812
|
-
)))))), hasEmails && /* @__PURE__ */
|
|
4858
|
+
)))))), hasEmails && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(MailIcon, { size: 12 }), "Email"), Object.entries(emailsByType).filter(([, emails]) => emails.some((e) => e && e.trim())).map(([type, emails], i) => /* @__PURE__ */ import_react24.default.createElement("div", { key: `email-${type}` }, /* @__PURE__ */ import_react24.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_react24.default.createElement("p", { key: j, style: styles2.contactValue }, /* @__PURE__ */ import_react24.default.createElement(
|
|
4813
4859
|
"a",
|
|
4814
4860
|
{
|
|
4815
4861
|
href: `mailto:${email}`,
|
|
@@ -4822,7 +4868,7 @@ function PoliticianProfile({
|
|
|
4822
4868
|
}
|
|
4823
4869
|
},
|
|
4824
4870
|
email
|
|
4825
|
-
)))))), hasWebsitesCol && /* @__PURE__ */
|
|
4871
|
+
)))))), hasWebsitesCol && /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.contactGroup }, /* @__PURE__ */ import_react24.default.createElement("p", { style: styles2.contactLabel }, /* @__PURE__ */ import_react24.default.createElement(GlobeIcon, { size: 12 }), "Websites"), allWebsites.map((url, i) => /* @__PURE__ */ import_react24.default.createElement("p", { key: i, style: styles2.contactValue }, /* @__PURE__ */ import_react24.default.createElement(
|
|
4826
4872
|
"a",
|
|
4827
4873
|
{
|
|
4828
4874
|
href: url,
|
|
@@ -4837,7 +4883,7 @@ function PoliticianProfile({
|
|
|
4837
4883
|
}
|
|
4838
4884
|
},
|
|
4839
4885
|
extractDomain(url)
|
|
4840
|
-
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */
|
|
4886
|
+
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react24.default.createElement(
|
|
4841
4887
|
SocialLinks,
|
|
4842
4888
|
{
|
|
4843
4889
|
twitter,
|
|
@@ -4848,14 +4894,14 @@ function PoliticianProfile({
|
|
|
4848
4894
|
size: "sm",
|
|
4849
4895
|
style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
|
|
4850
4896
|
}
|
|
4851
|
-
)))), committees.length > 0 && /* @__PURE__ */
|
|
4897
|
+
)))), committees.length > 0 && /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("div", { style: divider }), /* @__PURE__ */ import_react24.default.createElement(CommitteeTable, { committees })), pol.is_judicial ? /* @__PURE__ */ import_react24.default.createElement(
|
|
4852
4898
|
JudicialScorecard,
|
|
4853
4899
|
{
|
|
4854
4900
|
judicialRecord,
|
|
4855
4901
|
politicianId,
|
|
4856
4902
|
onNavigateToRecord
|
|
4857
4903
|
}
|
|
4858
|
-
) : /* @__PURE__ */
|
|
4904
|
+
) : /* @__PURE__ */ import_react24.default.createElement(
|
|
4859
4905
|
LegislativeInlineSummary,
|
|
4860
4906
|
{
|
|
4861
4907
|
summary: legislativeSummary,
|
|
@@ -4866,7 +4912,7 @@ function PoliticianProfile({
|
|
|
4866
4912
|
}
|
|
4867
4913
|
|
|
4868
4914
|
// src/LegislativeRecord.jsx
|
|
4869
|
-
var
|
|
4915
|
+
var import_react25 = __toESM(require("react"));
|
|
4870
4916
|
var DEFAULT_LIMIT = 25;
|
|
4871
4917
|
function normalizeText(str) {
|
|
4872
4918
|
if (!str) return "";
|
|
@@ -4946,7 +4992,7 @@ function getPositionBadge(position) {
|
|
|
4946
4992
|
return { bg: colors.borderLight, text: colors.textSecondary };
|
|
4947
4993
|
}
|
|
4948
4994
|
function Badge({ label, bg, text }) {
|
|
4949
|
-
return /* @__PURE__ */
|
|
4995
|
+
return /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
4950
4996
|
display: "inline-block",
|
|
4951
4997
|
background: bg,
|
|
4952
4998
|
color: text,
|
|
@@ -4959,18 +5005,18 @@ function Badge({ label, bg, text }) {
|
|
|
4959
5005
|
} }, label);
|
|
4960
5006
|
}
|
|
4961
5007
|
function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
4962
|
-
return /* @__PURE__ */
|
|
5008
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
4963
5009
|
display: "flex",
|
|
4964
5010
|
alignItems: "center",
|
|
4965
5011
|
justifyContent: "space-between",
|
|
4966
5012
|
marginBottom: spacing[4]
|
|
4967
|
-
} }, /* @__PURE__ */
|
|
5013
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("h2", { style: {
|
|
4968
5014
|
fontFamily: fonts.primary,
|
|
4969
5015
|
fontSize: fontSizes.xl,
|
|
4970
5016
|
fontWeight: fontWeights.bold,
|
|
4971
5017
|
color: colors.evTeal,
|
|
4972
5018
|
margin: 0
|
|
4973
|
-
} }, title), years && years.length > 0 && /* @__PURE__ */
|
|
5019
|
+
} }, title), years && years.length > 0 && /* @__PURE__ */ import_react25.default.createElement(
|
|
4974
5020
|
"select",
|
|
4975
5021
|
{
|
|
4976
5022
|
value: yearFilter,
|
|
@@ -4986,13 +5032,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
|
4986
5032
|
cursor: "pointer"
|
|
4987
5033
|
}
|
|
4988
5034
|
},
|
|
4989
|
-
/* @__PURE__ */
|
|
4990
|
-
years.map((y) => /* @__PURE__ */
|
|
5035
|
+
/* @__PURE__ */ import_react25.default.createElement("option", { value: "All" }, "All years"),
|
|
5036
|
+
years.map((y) => /* @__PURE__ */ import_react25.default.createElement("option", { key: y, value: y }, y))
|
|
4991
5037
|
));
|
|
4992
5038
|
}
|
|
4993
5039
|
function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
4994
5040
|
if (totalCount <= visibleCount) return null;
|
|
4995
|
-
return /* @__PURE__ */
|
|
5041
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react25.default.createElement(
|
|
4996
5042
|
"button",
|
|
4997
5043
|
{
|
|
4998
5044
|
type: "button",
|
|
@@ -5020,7 +5066,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
|
5020
5066
|
));
|
|
5021
5067
|
}
|
|
5022
5068
|
function EmptyState({ message }) {
|
|
5023
|
-
return /* @__PURE__ */
|
|
5069
|
+
return /* @__PURE__ */ import_react25.default.createElement("p", { style: {
|
|
5024
5070
|
fontFamily: fonts.primary,
|
|
5025
5071
|
fontSize: fontSizes.sm,
|
|
5026
5072
|
color: colors.textMuted,
|
|
@@ -5030,24 +5076,24 @@ function EmptyState({ message }) {
|
|
|
5030
5076
|
} }, message);
|
|
5031
5077
|
}
|
|
5032
5078
|
function Spinner() {
|
|
5033
|
-
return /* @__PURE__ */
|
|
5079
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5034
5080
|
display: "flex",
|
|
5035
5081
|
justifyContent: "center",
|
|
5036
5082
|
alignItems: "center",
|
|
5037
5083
|
padding: spacing[10]
|
|
5038
|
-
} }, /* @__PURE__ */
|
|
5084
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5039
5085
|
width: "40px",
|
|
5040
5086
|
height: "40px",
|
|
5041
5087
|
borderRadius: borderRadius.full,
|
|
5042
5088
|
border: `3px solid ${colors.borderLight}`,
|
|
5043
5089
|
borderTopColor: colors.evTeal,
|
|
5044
5090
|
animation: "ev-spin 0.8s linear infinite"
|
|
5045
|
-
} }), /* @__PURE__ */
|
|
5091
|
+
} }), /* @__PURE__ */ import_react25.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
|
|
5046
5092
|
}
|
|
5047
5093
|
function CommitteesSection({ committees, leadership }) {
|
|
5048
|
-
const [showAll, setShowAll] = (0,
|
|
5094
|
+
const [showAll, setShowAll] = (0, import_react25.useState)(false);
|
|
5049
5095
|
const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
|
|
5050
|
-
return /* @__PURE__ */
|
|
5096
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(SectionHeader, { title: "Committees & Leadership" }), leadership && leadership.length > 0 && /* @__PURE__ */ import_react25.default.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: spacing[2], marginBottom: spacing[4] } }, leadership.map((role, i) => /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
|
|
5051
5097
|
display: "inline-flex",
|
|
5052
5098
|
alignItems: "center",
|
|
5053
5099
|
gap: spacing[1],
|
|
@@ -5058,23 +5104,23 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5058
5104
|
fontFamily: fonts.primary,
|
|
5059
5105
|
fontSize: fontSizes.sm,
|
|
5060
5106
|
fontWeight: fontWeights.semibold
|
|
5061
|
-
} }, role.title, role.chamber && /* @__PURE__ */
|
|
5107
|
+
} }, role.title, role.chamber && /* @__PURE__ */ import_react25.default.createElement("span", { style: { fontWeight: fontWeights.regular, opacity: 0.85 } }, "(", role.chamber, ")")))), committees.length === 0 ? /* @__PURE__ */ import_react25.default.createElement(EmptyState, { message: "Committee information is not available for this office." }) : /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("div", null, visible.map((c, i) => {
|
|
5062
5108
|
const badge = getRoleBadge(c.role);
|
|
5063
|
-
return /* @__PURE__ */
|
|
5109
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
|
|
5064
5110
|
display: "flex",
|
|
5065
5111
|
alignItems: "center",
|
|
5066
5112
|
justifyContent: "space-between",
|
|
5067
5113
|
padding: `${spacing[3]} 0`,
|
|
5068
5114
|
borderBottom: `1px solid ${colors.borderLight}`,
|
|
5069
5115
|
gap: spacing[3]
|
|
5070
|
-
} }, /* @__PURE__ */
|
|
5116
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5071
5117
|
fontFamily: fonts.primary,
|
|
5072
5118
|
fontSize: fontSizes.sm,
|
|
5073
5119
|
color: colors.textSecondary,
|
|
5074
5120
|
flex: 1,
|
|
5075
5121
|
minWidth: 0
|
|
5076
|
-
} }, c.committee_name, c.parent_name && /* @__PURE__ */
|
|
5077
|
-
})), !showAll && /* @__PURE__ */
|
|
5122
|
+
} }, c.committee_name, c.parent_name && /* @__PURE__ */ import_react25.default.createElement("span", { style: { color: colors.textMuted, marginLeft: spacing[1] } }, "(", c.parent_name, ")")), /* @__PURE__ */ import_react25.default.createElement(Badge, { label: badge.label, bg: badge.bg, text: badge.text }));
|
|
5123
|
+
})), !showAll && /* @__PURE__ */ import_react25.default.createElement(
|
|
5078
5124
|
ShowAllLink,
|
|
5079
5125
|
{
|
|
5080
5126
|
totalCount: committees.length,
|
|
@@ -5085,15 +5131,15 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5085
5131
|
}
|
|
5086
5132
|
function LegislationSection({ bills, isMobile }) {
|
|
5087
5133
|
const years = getYears(bills, "introduced_at");
|
|
5088
|
-
const [yearFilter, setYearFilter] = (0,
|
|
5089
|
-
const [showAll, setShowAll] = (0,
|
|
5134
|
+
const [yearFilter, setYearFilter] = (0, import_react25.useState)("All");
|
|
5135
|
+
const [showAll, setShowAll] = (0, import_react25.useState)(false);
|
|
5090
5136
|
const handleYearChange = (y) => {
|
|
5091
5137
|
setYearFilter(y);
|
|
5092
5138
|
setShowAll(false);
|
|
5093
5139
|
};
|
|
5094
5140
|
const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
|
|
5095
5141
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5096
|
-
return /* @__PURE__ */
|
|
5142
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(
|
|
5097
5143
|
SectionHeader,
|
|
5098
5144
|
{
|
|
5099
5145
|
title: "Sponsored Legislation",
|
|
@@ -5101,42 +5147,42 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5101
5147
|
years,
|
|
5102
5148
|
onYearChange: handleYearChange
|
|
5103
5149
|
}
|
|
5104
|
-
), bills.length === 0 ? /* @__PURE__ */
|
|
5150
|
+
), bills.length === 0 ? /* @__PURE__ */ import_react25.default.createElement(EmptyState, { message: "Sponsored legislation data is not available for this office." }) : /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("div", null, visible.map((bill, i) => {
|
|
5105
5151
|
const statusBadge = getStatusBadge(bill.status_label);
|
|
5106
|
-
return /* @__PURE__ */
|
|
5152
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
|
|
5107
5153
|
display: "flex",
|
|
5108
5154
|
flexDirection: isMobile ? "column" : "row",
|
|
5109
5155
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5110
5156
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5111
5157
|
padding: `${spacing[3]} 0`,
|
|
5112
5158
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5113
|
-
} }, /* @__PURE__ */
|
|
5159
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5114
5160
|
fontFamily: fonts.primary,
|
|
5115
5161
|
fontSize: fontSizes.xs,
|
|
5116
5162
|
fontWeight: fontWeights.bold,
|
|
5117
5163
|
color: colors.textSecondary,
|
|
5118
5164
|
marginRight: spacing[2]
|
|
5119
|
-
} }, bill.number), /* @__PURE__ */
|
|
5165
|
+
} }, bill.number), /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5120
5166
|
fontFamily: fonts.primary,
|
|
5121
5167
|
fontSize: fontSizes.sm,
|
|
5122
5168
|
color: colors.textSecondary
|
|
5123
|
-
} }, bill.title)), /* @__PURE__ */
|
|
5169
|
+
} }, bill.title)), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5124
5170
|
display: "flex",
|
|
5125
5171
|
alignItems: "center",
|
|
5126
5172
|
gap: spacing[2],
|
|
5127
5173
|
flexShrink: 0,
|
|
5128
5174
|
flexWrap: "wrap"
|
|
5129
|
-
} }, /* @__PURE__ */
|
|
5175
|
+
} }, /* @__PURE__ */ import_react25.default.createElement(Badge, { label: bill.status_label || "Unknown", bg: statusBadge.bg, text: statusBadge.text }), bill.introduced_at && /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5130
5176
|
fontFamily: fonts.primary,
|
|
5131
5177
|
fontSize: fontSizes.xs,
|
|
5132
5178
|
color: colors.textMuted
|
|
5133
|
-
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */
|
|
5179
|
+
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5134
5180
|
fontFamily: fonts.primary,
|
|
5135
5181
|
fontSize: fontSizes.xs,
|
|
5136
5182
|
color: colors.textMuted,
|
|
5137
5183
|
fontStyle: "italic"
|
|
5138
5184
|
} }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
|
|
5139
|
-
})), !showAll && /* @__PURE__ */
|
|
5185
|
+
})), !showAll && /* @__PURE__ */ import_react25.default.createElement(
|
|
5140
5186
|
ShowAllLink,
|
|
5141
5187
|
{
|
|
5142
5188
|
totalCount: filtered.length,
|
|
@@ -5147,15 +5193,15 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5147
5193
|
}
|
|
5148
5194
|
function VotingSection({ votes, isMobile }) {
|
|
5149
5195
|
const years = getYears(votes, "vote_date");
|
|
5150
|
-
const [yearFilter, setYearFilter] = (0,
|
|
5151
|
-
const [showAll, setShowAll] = (0,
|
|
5196
|
+
const [yearFilter, setYearFilter] = (0, import_react25.useState)("All");
|
|
5197
|
+
const [showAll, setShowAll] = (0, import_react25.useState)(false);
|
|
5152
5198
|
const handleYearChange = (y) => {
|
|
5153
5199
|
setYearFilter(y);
|
|
5154
5200
|
setShowAll(false);
|
|
5155
5201
|
};
|
|
5156
5202
|
const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
|
|
5157
5203
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5158
|
-
return /* @__PURE__ */
|
|
5204
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(
|
|
5159
5205
|
SectionHeader,
|
|
5160
5206
|
{
|
|
5161
5207
|
title: "Voting Record",
|
|
@@ -5163,38 +5209,38 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5163
5209
|
years,
|
|
5164
5210
|
onYearChange: handleYearChange
|
|
5165
5211
|
}
|
|
5166
|
-
), votes.length === 0 ? /* @__PURE__ */
|
|
5212
|
+
), votes.length === 0 ? /* @__PURE__ */ import_react25.default.createElement(EmptyState, { message: "Voting records are not available for this office." }) : /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement("div", null, visible.map((vote, i) => {
|
|
5167
5213
|
const positionBadge = getPositionBadge(vote.position);
|
|
5168
5214
|
const normPosition = normalizeText(vote.position);
|
|
5169
5215
|
const topic = vote.bill_title || vote.vote_question;
|
|
5170
5216
|
const sourceUrl = vote.bill_url;
|
|
5171
|
-
return /* @__PURE__ */
|
|
5217
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
|
|
5172
5218
|
display: "flex",
|
|
5173
5219
|
flexDirection: isMobile ? "column" : "row",
|
|
5174
5220
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5175
5221
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5176
5222
|
padding: `${spacing[3]} 0`,
|
|
5177
5223
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5178
|
-
} }, /* @__PURE__ */
|
|
5224
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5179
5225
|
fontFamily: fonts.primary,
|
|
5180
5226
|
fontSize: fontSizes.sm,
|
|
5181
5227
|
color: colors.textSecondary
|
|
5182
|
-
} }, topic)), /* @__PURE__ */
|
|
5228
|
+
} }, topic)), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5183
5229
|
display: "flex",
|
|
5184
5230
|
alignItems: "center",
|
|
5185
5231
|
gap: spacing[2],
|
|
5186
5232
|
flexShrink: 0,
|
|
5187
5233
|
flexWrap: "wrap"
|
|
5188
|
-
} }, vote.vote_date && /* @__PURE__ */
|
|
5234
|
+
} }, vote.vote_date && /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5189
5235
|
fontFamily: fonts.primary,
|
|
5190
5236
|
fontSize: fontSizes.xs,
|
|
5191
5237
|
color: colors.textMuted
|
|
5192
|
-
} }, formatDate2(vote.vote_date)), /* @__PURE__ */
|
|
5238
|
+
} }, formatDate2(vote.vote_date)), /* @__PURE__ */ import_react25.default.createElement(Badge, { label: normPosition || "Unknown", bg: positionBadge.bg, text: positionBadge.text }), vote.result && /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5193
5239
|
fontFamily: fonts.primary,
|
|
5194
5240
|
fontSize: fontSizes.xs,
|
|
5195
5241
|
color: vote.result === "Passed" ? colors.success : colors.textMuted,
|
|
5196
5242
|
fontWeight: fontWeights.medium
|
|
5197
|
-
} }, vote.result), sourceUrl && /* @__PURE__ */
|
|
5243
|
+
} }, vote.result), sourceUrl && /* @__PURE__ */ import_react25.default.createElement(
|
|
5198
5244
|
"a",
|
|
5199
5245
|
{
|
|
5200
5246
|
href: sourceUrl,
|
|
@@ -5215,7 +5261,7 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5215
5261
|
},
|
|
5216
5262
|
"Source"
|
|
5217
5263
|
)));
|
|
5218
|
-
})), !showAll && /* @__PURE__ */
|
|
5264
|
+
})), !showAll && /* @__PURE__ */ import_react25.default.createElement(
|
|
5219
5265
|
ShowAllLink,
|
|
5220
5266
|
{
|
|
5221
5267
|
totalCount: filtered.length,
|
|
@@ -5234,20 +5280,20 @@ function LegislativeRecord({
|
|
|
5234
5280
|
}) {
|
|
5235
5281
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
5236
5282
|
if (loading) {
|
|
5237
|
-
return /* @__PURE__ */
|
|
5283
|
+
return /* @__PURE__ */ import_react25.default.createElement(Spinner, null);
|
|
5238
5284
|
}
|
|
5239
|
-
return /* @__PURE__ */
|
|
5285
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react25.default.createElement("h1", { style: {
|
|
5240
5286
|
fontFamily: fonts.primary,
|
|
5241
5287
|
fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
|
|
5242
5288
|
fontWeight: fontWeights.bold,
|
|
5243
5289
|
color: colors.evTeal,
|
|
5244
5290
|
marginBottom: spacing[8],
|
|
5245
5291
|
marginTop: 0
|
|
5246
|
-
} }, "Legislative Record: ", politicianName), /* @__PURE__ */
|
|
5292
|
+
} }, "Legislative Record: ", politicianName), /* @__PURE__ */ import_react25.default.createElement(CommitteesSection, { committees, leadership }), /* @__PURE__ */ import_react25.default.createElement(LegislationSection, { bills, isMobile }), /* @__PURE__ */ import_react25.default.createElement(VotingSection, { votes, isMobile }));
|
|
5247
5293
|
}
|
|
5248
5294
|
|
|
5249
5295
|
// src/JudicialRecordDetail.jsx
|
|
5250
|
-
var
|
|
5296
|
+
var import_react26 = __toESM(require("react"));
|
|
5251
5297
|
var containerStyle = {
|
|
5252
5298
|
fontFamily: "'Manrope', sans-serif",
|
|
5253
5299
|
maxWidth: "800px"
|
|
@@ -5332,7 +5378,7 @@ var emptyStateStyle = {
|
|
|
5332
5378
|
function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
5333
5379
|
var _a;
|
|
5334
5380
|
if (!judicialRecord) {
|
|
5335
|
-
return /* @__PURE__ */
|
|
5381
|
+
return /* @__PURE__ */ import_react26.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react26.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react26.default.createElement("div", { style: emptyStateStyle }, "No judicial record data available."));
|
|
5336
5382
|
}
|
|
5337
5383
|
const {
|
|
5338
5384
|
judge_detail: detail,
|
|
@@ -5341,13 +5387,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5341
5387
|
disciplinary_records: disciplinary = []
|
|
5342
5388
|
} = judicialRecord;
|
|
5343
5389
|
const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
|
|
5344
|
-
return /* @__PURE__ */
|
|
5390
|
+
return /* @__PURE__ */ import_react26.default.createElement("div", { style: containerStyle }, /* @__PURE__ */ import_react26.default.createElement("button", { style: backBtnStyle, onClick: onBack }, "\u2190 Back to Profile"), /* @__PURE__ */ import_react26.default.createElement("h1", { style: nameStyle }, displayName), /* @__PURE__ */ import_react26.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_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Background"), detail.appointed_by && /* @__PURE__ */ import_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Appointed by"), /* @__PURE__ */ import_react26.default.createElement("span", { style: detailValueStyle }, detail.appointed_by, " (", detail.appointing_president_party, ")")), detail.confirmation_vote && /* @__PURE__ */ import_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Confirmation Vote"), /* @__PURE__ */ import_react26.default.createElement("span", { style: detailValueStyle }, detail.confirmation_vote)), detail.election_type && /* @__PURE__ */ import_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Election Type"), /* @__PURE__ */ import_react26.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_react26.default.createElement("div", { style: detailRowStyle }, /* @__PURE__ */ import_react26.default.createElement("span", { style: detailLabelStyle }, "Areas of Focus"), /* @__PURE__ */ import_react26.default.createElement("span", { style: detailValueStyle }, detail.areas_of_focus.join(", ")))), /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Evaluations"), evaluations.length === 0 ? /* @__PURE__ */ import_react26.default.createElement("div", { style: emptyStateStyle }, "No evaluation data available yet.") : /* @__PURE__ */ import_react26.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react26.default.createElement("thead", null, /* @__PURE__ */ import_react26.default.createElement("tr", null, /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Source"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Rating"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Date"))), /* @__PURE__ */ import_react26.default.createElement("tbody", null, evaluations.map((ev, i) => /* @__PURE__ */ import_react26.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, ev.source_url ? /* @__PURE__ */ import_react26.default.createElement("a", { href: ev.source_url, target: "_blank", rel: "noopener noreferrer", style: { color: "#319795" } }, ev.source) : ev.source), /* @__PURE__ */ import_react26.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, ev.rating), /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, formatDate(ev.rating_date)))))), /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Performance Metrics"), metrics.length === 0 ? /* @__PURE__ */ import_react26.default.createElement("div", { style: emptyStateStyle }, "No performance metric data available yet.") : /* @__PURE__ */ import_react26.default.createElement("table", { style: tableStyle }, /* @__PURE__ */ import_react26.default.createElement("thead", null, /* @__PURE__ */ import_react26.default.createElement("tr", null, /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Metric"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Value"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Context"), /* @__PURE__ */ import_react26.default.createElement("th", { style: thStyle }, "Period"))), /* @__PURE__ */ import_react26.default.createElement("tbody", null, metrics.map((m, i) => /* @__PURE__ */ import_react26.default.createElement("tr", { key: i }, /* @__PURE__ */ import_react26.default.createElement("td", { style: { ...tdStyle, fontWeight: 600 } }, METRIC_LABELS[m.metric_type] || m.metric_type.replace(/_/g, " ")), /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, formatMetricValue(m.metric_type, m.value)), /* @__PURE__ */ import_react26.default.createElement("td", { style: { ...tdStyle, color: "#718096", fontSize: "13px" } }, m.context_label), /* @__PURE__ */ import_react26.default.createElement("td", { style: tdStyle }, m.time_period))))), disciplinary.length > 0 && /* @__PURE__ */ import_react26.default.createElement(import_react26.default.Fragment, null, /* @__PURE__ */ import_react26.default.createElement("h2", { style: sectionHeadingStyle }, "Disciplinary History"), disciplinary.map((d, i) => /* @__PURE__ */ import_react26.default.createElement("div", { key: i, style: {
|
|
5345
5391
|
borderLeft: "3px solid #fc8181",
|
|
5346
5392
|
backgroundColor: "#fff5f5",
|
|
5347
5393
|
borderRadius: "0 6px 6px 0",
|
|
5348
5394
|
padding: "12px 16px",
|
|
5349
5395
|
marginBottom: "10px"
|
|
5350
|
-
} }, /* @__PURE__ */
|
|
5396
|
+
} }, /* @__PURE__ */ import_react26.default.createElement("div", { style: { fontWeight: 700, color: "#742a2a", fontSize: "14px" } }, d.record_type, " \u2014 ", formatDate(d.record_date)), d.description && /* @__PURE__ */ import_react26.default.createElement("div", { style: { color: "#9b2c2c", fontSize: "13px", marginTop: "4px" } }, d.description), d.source_url && /* @__PURE__ */ import_react26.default.createElement(
|
|
5351
5397
|
"a",
|
|
5352
5398
|
{
|
|
5353
5399
|
href: d.source_url,
|
|
@@ -5360,7 +5406,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5360
5406
|
}
|
|
5361
5407
|
|
|
5362
5408
|
// src/AuthForm.jsx
|
|
5363
|
-
var
|
|
5409
|
+
var import_react27 = __toESM(require("react"));
|
|
5364
5410
|
function AuthForm({
|
|
5365
5411
|
logoSrc = "/EVLogo.svg",
|
|
5366
5412
|
appName = "Empowered Vote",
|
|
@@ -5371,11 +5417,11 @@ function AuthForm({
|
|
|
5371
5417
|
error = null,
|
|
5372
5418
|
submitting = false
|
|
5373
5419
|
}) {
|
|
5374
|
-
const [username, setUsername] = (0,
|
|
5375
|
-
const [password, setPassword] = (0,
|
|
5376
|
-
const [confirmPassword, setConfirmPassword] = (0,
|
|
5377
|
-
const [showPasswords, setShowPasswords] = (0,
|
|
5378
|
-
const [passwordMismatch, setPasswordMismatch] = (0,
|
|
5420
|
+
const [username, setUsername] = (0, import_react27.useState)("");
|
|
5421
|
+
const [password, setPassword] = (0, import_react27.useState)("");
|
|
5422
|
+
const [confirmPassword, setConfirmPassword] = (0, import_react27.useState)("");
|
|
5423
|
+
const [showPasswords, setShowPasswords] = (0, import_react27.useState)(false);
|
|
5424
|
+
const [passwordMismatch, setPasswordMismatch] = (0, import_react27.useState)(false);
|
|
5379
5425
|
const isLogin = mode === "login";
|
|
5380
5426
|
const handleSubmit = (e) => {
|
|
5381
5427
|
e.preventDefault();
|
|
@@ -5387,7 +5433,7 @@ function AuthForm({
|
|
|
5387
5433
|
setPasswordMismatch(false);
|
|
5388
5434
|
onSubmit == null ? void 0 : onSubmit(username.trim(), password);
|
|
5389
5435
|
};
|
|
5390
|
-
const EyeOpen = () => /* @__PURE__ */
|
|
5436
|
+
const EyeOpen = () => /* @__PURE__ */ import_react27.default.createElement(
|
|
5391
5437
|
"svg",
|
|
5392
5438
|
{
|
|
5393
5439
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5397,7 +5443,7 @@ function AuthForm({
|
|
|
5397
5443
|
stroke: "currentColor",
|
|
5398
5444
|
style: { width: "20px", height: "20px" }
|
|
5399
5445
|
},
|
|
5400
|
-
/* @__PURE__ */
|
|
5446
|
+
/* @__PURE__ */ import_react27.default.createElement(
|
|
5401
5447
|
"path",
|
|
5402
5448
|
{
|
|
5403
5449
|
strokeLinecap: "round",
|
|
@@ -5405,7 +5451,7 @@ function AuthForm({
|
|
|
5405
5451
|
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"
|
|
5406
5452
|
}
|
|
5407
5453
|
),
|
|
5408
|
-
/* @__PURE__ */
|
|
5454
|
+
/* @__PURE__ */ import_react27.default.createElement(
|
|
5409
5455
|
"path",
|
|
5410
5456
|
{
|
|
5411
5457
|
strokeLinecap: "round",
|
|
@@ -5414,7 +5460,7 @@ function AuthForm({
|
|
|
5414
5460
|
}
|
|
5415
5461
|
)
|
|
5416
5462
|
);
|
|
5417
|
-
const EyeClosed = () => /* @__PURE__ */
|
|
5463
|
+
const EyeClosed = () => /* @__PURE__ */ import_react27.default.createElement(
|
|
5418
5464
|
"svg",
|
|
5419
5465
|
{
|
|
5420
5466
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5424,7 +5470,7 @@ function AuthForm({
|
|
|
5424
5470
|
stroke: "currentColor",
|
|
5425
5471
|
style: { width: "20px", height: "20px" }
|
|
5426
5472
|
},
|
|
5427
|
-
/* @__PURE__ */
|
|
5473
|
+
/* @__PURE__ */ import_react27.default.createElement(
|
|
5428
5474
|
"path",
|
|
5429
5475
|
{
|
|
5430
5476
|
strokeLinecap: "round",
|
|
@@ -5433,17 +5479,17 @@ function AuthForm({
|
|
|
5433
5479
|
}
|
|
5434
5480
|
)
|
|
5435
5481
|
);
|
|
5436
|
-
const PasswordToggle = () => /* @__PURE__ */
|
|
5482
|
+
const PasswordToggle = () => /* @__PURE__ */ import_react27.default.createElement(
|
|
5437
5483
|
"button",
|
|
5438
5484
|
{
|
|
5439
5485
|
type: "button",
|
|
5440
5486
|
onClick: () => setShowPasswords((prev) => !prev),
|
|
5441
5487
|
style: styles.passwordToggle
|
|
5442
5488
|
},
|
|
5443
|
-
showPasswords ? /* @__PURE__ */
|
|
5489
|
+
showPasswords ? /* @__PURE__ */ import_react27.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react27.default.createElement(EyeClosed, null)
|
|
5444
5490
|
);
|
|
5445
5491
|
const displayError = passwordMismatch ? "Passwords do not match." : error;
|
|
5446
|
-
return /* @__PURE__ */
|
|
5492
|
+
return /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.wrapper }, /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.container }, /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.header }, logoSrc && /* @__PURE__ */ import_react27.default.createElement("img", { src: logoSrc, alt: appName, style: styles.logo }), appName && /* @__PURE__ */ import_react27.default.createElement("h1", { style: styles.appName }, appName), appSubtitle && /* @__PURE__ */ import_react27.default.createElement("p", { style: styles.appSubtitle }, appSubtitle)), /* @__PURE__ */ import_react27.default.createElement("form", { onSubmit: handleSubmit, style: styles.card }, /* @__PURE__ */ import_react27.default.createElement("h2", { style: styles.cardTitle }, isLogin ? "Welcome Back" : "Create Account"), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react27.default.createElement("label", { style: styles.label }, "Username"), /* @__PURE__ */ import_react27.default.createElement(
|
|
5447
5493
|
"input",
|
|
5448
5494
|
{
|
|
5449
5495
|
type: "text",
|
|
@@ -5460,7 +5506,7 @@ function AuthForm({
|
|
|
5460
5506
|
},
|
|
5461
5507
|
required: true
|
|
5462
5508
|
}
|
|
5463
|
-
)), /* @__PURE__ */
|
|
5509
|
+
)), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react27.default.createElement("label", { style: styles.label }, "Password"), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react27.default.createElement(
|
|
5464
5510
|
"input",
|
|
5465
5511
|
{
|
|
5466
5512
|
type: showPasswords ? "text" : "password",
|
|
@@ -5476,7 +5522,7 @@ function AuthForm({
|
|
|
5476
5522
|
},
|
|
5477
5523
|
required: true
|
|
5478
5524
|
}
|
|
5479
|
-
), /* @__PURE__ */
|
|
5525
|
+
), /* @__PURE__ */ import_react27.default.createElement(PasswordToggle, null))), !isLogin && /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.fieldGroup }, /* @__PURE__ */ import_react27.default.createElement("label", { style: styles.label }, "Confirm Password"), /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.passwordWrapper }, /* @__PURE__ */ import_react27.default.createElement(
|
|
5480
5526
|
"input",
|
|
5481
5527
|
{
|
|
5482
5528
|
type: showPasswords ? "text" : "password",
|
|
@@ -5492,7 +5538,7 @@ function AuthForm({
|
|
|
5492
5538
|
},
|
|
5493
5539
|
required: true
|
|
5494
5540
|
}
|
|
5495
|
-
), /* @__PURE__ */
|
|
5541
|
+
), /* @__PURE__ */ import_react27.default.createElement(PasswordToggle, null))), displayError && /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.errorBox }, /* @__PURE__ */ import_react27.default.createElement("p", { style: styles.errorText }, displayError)), /* @__PURE__ */ import_react27.default.createElement(
|
|
5496
5542
|
"button",
|
|
5497
5543
|
{
|
|
5498
5544
|
type: "submit",
|
|
@@ -5510,7 +5556,7 @@ function AuthForm({
|
|
|
5510
5556
|
}
|
|
5511
5557
|
},
|
|
5512
5558
|
submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
|
|
5513
|
-
), onModeSwitch && /* @__PURE__ */
|
|
5559
|
+
), onModeSwitch && /* @__PURE__ */ import_react27.default.createElement("div", { style: styles.modeSwitch }, /* @__PURE__ */ import_react27.default.createElement("p", { style: styles.modeSwitchText }, isLogin ? "Don't have an account?" : "Already have an account?"), /* @__PURE__ */ import_react27.default.createElement(
|
|
5514
5560
|
"button",
|
|
5515
5561
|
{
|
|
5516
5562
|
type: "button",
|
|
@@ -5683,9 +5729,9 @@ var styles = {
|
|
|
5683
5729
|
};
|
|
5684
5730
|
|
|
5685
5731
|
// src/TopicTierBadge.jsx
|
|
5686
|
-
var
|
|
5732
|
+
var import_react28 = __toESM(require("react"));
|
|
5687
5733
|
function LandmarkIcon({ size = 14 }) {
|
|
5688
|
-
return /* @__PURE__ */
|
|
5734
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5689
5735
|
"svg",
|
|
5690
5736
|
{
|
|
5691
5737
|
width: size,
|
|
@@ -5699,16 +5745,16 @@ function LandmarkIcon({ size = 14 }) {
|
|
|
5699
5745
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5700
5746
|
"aria-hidden": "true"
|
|
5701
5747
|
},
|
|
5702
|
-
/* @__PURE__ */
|
|
5703
|
-
/* @__PURE__ */
|
|
5704
|
-
/* @__PURE__ */
|
|
5705
|
-
/* @__PURE__ */
|
|
5706
|
-
/* @__PURE__ */
|
|
5707
|
-
/* @__PURE__ */
|
|
5748
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 18v-7" }),
|
|
5749
|
+
/* @__PURE__ */ import_react28.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" }),
|
|
5750
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M14 18v-7" }),
|
|
5751
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M18 18v-7" }),
|
|
5752
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M3 22h18" }),
|
|
5753
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 18v-7" })
|
|
5708
5754
|
);
|
|
5709
5755
|
}
|
|
5710
5756
|
function Building2Icon({ size = 14 }) {
|
|
5711
|
-
return /* @__PURE__ */
|
|
5757
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5712
5758
|
"svg",
|
|
5713
5759
|
{
|
|
5714
5760
|
width: size,
|
|
@@ -5722,17 +5768,17 @@ function Building2Icon({ size = 14 }) {
|
|
|
5722
5768
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5723
5769
|
"aria-hidden": "true"
|
|
5724
5770
|
},
|
|
5725
|
-
/* @__PURE__ */
|
|
5726
|
-
/* @__PURE__ */
|
|
5727
|
-
/* @__PURE__ */
|
|
5728
|
-
/* @__PURE__ */
|
|
5729
|
-
/* @__PURE__ */
|
|
5730
|
-
/* @__PURE__ */
|
|
5731
|
-
/* @__PURE__ */
|
|
5771
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
|
|
5772
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
|
|
5773
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
|
|
5774
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 6h4" }),
|
|
5775
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 10h4" }),
|
|
5776
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 14h4" }),
|
|
5777
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 18h4" })
|
|
5732
5778
|
);
|
|
5733
5779
|
}
|
|
5734
5780
|
function HomeIcon({ size = 14 }) {
|
|
5735
|
-
return /* @__PURE__ */
|
|
5781
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5736
5782
|
"svg",
|
|
5737
5783
|
{
|
|
5738
5784
|
width: size,
|
|
@@ -5746,8 +5792,8 @@ function HomeIcon({ size = 14 }) {
|
|
|
5746
5792
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5747
5793
|
"aria-hidden": "true"
|
|
5748
5794
|
},
|
|
5749
|
-
/* @__PURE__ */
|
|
5750
|
-
/* @__PURE__ */
|
|
5795
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" }),
|
|
5796
|
+
/* @__PURE__ */ import_react28.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
|
|
5751
5797
|
);
|
|
5752
5798
|
}
|
|
5753
5799
|
var TIER_INFO = {
|
|
@@ -5807,7 +5853,7 @@ function TopicTierBadge({
|
|
|
5807
5853
|
userSelect: "none"
|
|
5808
5854
|
};
|
|
5809
5855
|
};
|
|
5810
|
-
return /* @__PURE__ */
|
|
5856
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5811
5857
|
"span",
|
|
5812
5858
|
{
|
|
5813
5859
|
className: "ev-topic-tier-badge",
|
|
@@ -5817,13 +5863,13 @@ function TopicTierBadge({
|
|
|
5817
5863
|
},
|
|
5818
5864
|
effectiveTiers.map((tier) => {
|
|
5819
5865
|
const { label, Icon } = TIER_INFO[tier];
|
|
5820
|
-
return /* @__PURE__ */
|
|
5866
|
+
return /* @__PURE__ */ import_react28.default.createElement("span", { key: tier, style: itemStyle(tier) }, /* @__PURE__ */ import_react28.default.createElement(Icon, { size: sizeStyle.iconSize }), !iconOnly && /* @__PURE__ */ import_react28.default.createElement("span", null, label));
|
|
5821
5867
|
})
|
|
5822
5868
|
);
|
|
5823
5869
|
}
|
|
5824
5870
|
|
|
5825
5871
|
// src/CompassCoverageCallout.jsx
|
|
5826
|
-
var
|
|
5872
|
+
var import_react29 = __toESM(require("react"));
|
|
5827
5873
|
var TIER_LABELS = {
|
|
5828
5874
|
federal: "federal",
|
|
5829
5875
|
state: "state",
|
|
@@ -5836,7 +5882,7 @@ function CompassCoverageCallout({
|
|
|
5836
5882
|
compassUrl,
|
|
5837
5883
|
onDismiss
|
|
5838
5884
|
}) {
|
|
5839
|
-
const [dismissed, setDismissed] = (0,
|
|
5885
|
+
const [dismissed, setDismissed] = (0, import_react29.useState)(false);
|
|
5840
5886
|
if (dismissed) return null;
|
|
5841
5887
|
const tierLabel = TIER_LABELS[tier] || tier;
|
|
5842
5888
|
const tierStyle = tierColors[tier] || tierColors.federal;
|
|
@@ -5887,15 +5933,15 @@ function CompassCoverageCallout({
|
|
|
5887
5933
|
setDismissed(true);
|
|
5888
5934
|
if (onDismiss) onDismiss();
|
|
5889
5935
|
};
|
|
5890
|
-
return /* @__PURE__ */
|
|
5936
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
5891
5937
|
"div",
|
|
5892
5938
|
{
|
|
5893
5939
|
className: "ev-compass-coverage-callout",
|
|
5894
5940
|
role: "status",
|
|
5895
5941
|
style: containerStyle2
|
|
5896
5942
|
},
|
|
5897
|
-
/* @__PURE__ */
|
|
5898
|
-
onDismiss !== void 0 && /* @__PURE__ */
|
|
5943
|
+
/* @__PURE__ */ import_react29.default.createElement("div", { style: textStyle }, /* @__PURE__ */ import_react29.default.createElement("div", { style: headlineStyle }, "Your compass covers ", tierLabel, " issues lightly"), /* @__PURE__ */ import_react29.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_react29.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Add ", tierLabel, " topics \u2192")),
|
|
5944
|
+
onDismiss !== void 0 && /* @__PURE__ */ import_react29.default.createElement(
|
|
5899
5945
|
"button",
|
|
5900
5946
|
{
|
|
5901
5947
|
onClick: handleDismiss,
|
|
@@ -5908,7 +5954,7 @@ function CompassCoverageCallout({
|
|
|
5908
5954
|
}
|
|
5909
5955
|
|
|
5910
5956
|
// src/ExpandCompassNudge.jsx
|
|
5911
|
-
var
|
|
5957
|
+
var import_react30 = __toESM(require("react"));
|
|
5912
5958
|
function ExpandCompassNudge({
|
|
5913
5959
|
politicianName,
|
|
5914
5960
|
missingCount,
|
|
@@ -5955,7 +6001,7 @@ function ExpandCompassNudge({
|
|
|
5955
6001
|
};
|
|
5956
6002
|
const topicsLabel = missingCount === 1 ? "topic" : "topics";
|
|
5957
6003
|
const speakerName = politicianName || "This politician";
|
|
5958
|
-
return /* @__PURE__ */
|
|
6004
|
+
return /* @__PURE__ */ import_react30.default.createElement("div", { className: "ev-expand-compass-nudge", style: containerStyle2, role: "region" }, /* @__PURE__ */ import_react30.default.createElement("p", { style: headlineStyle }, "Want a richer comparison?"), /* @__PURE__ */ import_react30.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_react30.default.createElement("a", { href: compassUrl, style: ctaStyle }, "Expand my compass \u2192"));
|
|
5959
6005
|
}
|
|
5960
6006
|
|
|
5961
6007
|
// src/computeTierCoverage.js
|
|
@@ -5976,7 +6022,7 @@ function computeTierCoverage(topics) {
|
|
|
5976
6022
|
}
|
|
5977
6023
|
|
|
5978
6024
|
// src/useEvContextPromotion.js
|
|
5979
|
-
var
|
|
6025
|
+
var import_react31 = require("react");
|
|
5980
6026
|
function useEvContextPromotion({
|
|
5981
6027
|
domain,
|
|
5982
6028
|
isLoggedIn,
|
|
@@ -5985,23 +6031,23 @@ function useEvContextPromotion({
|
|
|
5985
6031
|
apiWriter,
|
|
5986
6032
|
enabled = true
|
|
5987
6033
|
}) {
|
|
5988
|
-
const [shouldPrompt, setShouldPrompt] = (0,
|
|
5989
|
-
const [payload, setPayload] = (0,
|
|
5990
|
-
const [status, setStatus] = (0,
|
|
5991
|
-
const [error, setError] = (0,
|
|
5992
|
-
const apiDataRef = (0,
|
|
6034
|
+
const [shouldPrompt, setShouldPrompt] = (0, import_react31.useState)(false);
|
|
6035
|
+
const [payload, setPayload] = (0, import_react31.useState)(null);
|
|
6036
|
+
const [status, setStatus] = (0, import_react31.useState)("idle");
|
|
6037
|
+
const [error, setError] = (0, import_react31.useState)(null);
|
|
6038
|
+
const apiDataRef = (0, import_react31.useRef)(apiData);
|
|
5993
6039
|
apiDataRef.current = apiData;
|
|
5994
|
-
const userIdRef = (0,
|
|
6040
|
+
const userIdRef = (0, import_react31.useRef)(userId);
|
|
5995
6041
|
userIdRef.current = userId;
|
|
5996
|
-
const isLoggedInRef = (0,
|
|
6042
|
+
const isLoggedInRef = (0, import_react31.useRef)(isLoggedIn);
|
|
5997
6043
|
isLoggedInRef.current = isLoggedIn;
|
|
5998
|
-
const enabledRef = (0,
|
|
6044
|
+
const enabledRef = (0, import_react31.useRef)(enabled);
|
|
5999
6045
|
enabledRef.current = enabled;
|
|
6000
|
-
const domainRef = (0,
|
|
6046
|
+
const domainRef = (0, import_react31.useRef)(domain);
|
|
6001
6047
|
domainRef.current = domain;
|
|
6002
|
-
const apiWriterRef = (0,
|
|
6048
|
+
const apiWriterRef = (0, import_react31.useRef)(apiWriter);
|
|
6003
6049
|
apiWriterRef.current = apiWriter;
|
|
6004
|
-
const detect = (0,
|
|
6050
|
+
const detect = (0, import_react31.useCallback)(async () => {
|
|
6005
6051
|
const _enabled = enabledRef.current;
|
|
6006
6052
|
const _isLoggedIn = isLoggedInRef.current;
|
|
6007
6053
|
const _userId = userIdRef.current;
|
|
@@ -6040,16 +6086,16 @@ function useEvContextPromotion({
|
|
|
6040
6086
|
setPayload(null);
|
|
6041
6087
|
}
|
|
6042
6088
|
}, []);
|
|
6043
|
-
(0,
|
|
6089
|
+
(0, import_react31.useEffect)(() => {
|
|
6044
6090
|
detect();
|
|
6045
6091
|
}, [detect, isLoggedIn, userId, apiData, enabled, domain]);
|
|
6046
|
-
(0,
|
|
6092
|
+
(0, import_react31.useEffect)(() => {
|
|
6047
6093
|
const unsub = evContext.subscribe(() => {
|
|
6048
6094
|
detect();
|
|
6049
6095
|
});
|
|
6050
6096
|
return unsub;
|
|
6051
6097
|
}, [detect]);
|
|
6052
|
-
const promote = (0,
|
|
6098
|
+
const promote = (0, import_react31.useCallback)(async () => {
|
|
6053
6099
|
const _userId = userIdRef.current;
|
|
6054
6100
|
const _domain = domainRef.current;
|
|
6055
6101
|
const _writer = apiWriterRef.current;
|
|
@@ -6076,7 +6122,7 @@ function useEvContextPromotion({
|
|
|
6076
6122
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
6077
6123
|
}
|
|
6078
6124
|
}, [payload]);
|
|
6079
|
-
const dismiss = (0,
|
|
6125
|
+
const dismiss = (0, import_react31.useCallback)(async () => {
|
|
6080
6126
|
const _userId = userIdRef.current;
|
|
6081
6127
|
const _domain = domainRef.current;
|
|
6082
6128
|
if (!_userId) return;
|
|
@@ -6135,14 +6181,14 @@ function isGuestPopulated(domain, fullEvContext) {
|
|
|
6135
6181
|
}
|
|
6136
6182
|
|
|
6137
6183
|
// src/StanceAccordion.jsx
|
|
6138
|
-
var
|
|
6184
|
+
var import_react33 = __toESM(require("react"));
|
|
6139
6185
|
|
|
6140
6186
|
// src/Favicon.jsx
|
|
6141
|
-
var
|
|
6187
|
+
var import_react32 = __toESM(require("react"));
|
|
6142
6188
|
function Favicon({ url, size = 16 }) {
|
|
6143
6189
|
try {
|
|
6144
6190
|
const domain = new URL(url).hostname;
|
|
6145
|
-
return /* @__PURE__ */
|
|
6191
|
+
return /* @__PURE__ */ import_react32.default.createElement(
|
|
6146
6192
|
"img",
|
|
6147
6193
|
{
|
|
6148
6194
|
src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
|
|
@@ -6153,7 +6199,7 @@ function Favicon({ url, size = 16 }) {
|
|
|
6153
6199
|
}
|
|
6154
6200
|
);
|
|
6155
6201
|
} catch {
|
|
6156
|
-
return /* @__PURE__ */
|
|
6202
|
+
return /* @__PURE__ */ import_react32.default.createElement(
|
|
6157
6203
|
"svg",
|
|
6158
6204
|
{
|
|
6159
6205
|
width: size,
|
|
@@ -6164,8 +6210,8 @@ function Favicon({ url, size = 16 }) {
|
|
|
6164
6210
|
strokeWidth: "1.5",
|
|
6165
6211
|
style: { verticalAlign: "middle", flexShrink: 0 }
|
|
6166
6212
|
},
|
|
6167
|
-
/* @__PURE__ */
|
|
6168
|
-
/* @__PURE__ */
|
|
6213
|
+
/* @__PURE__ */ import_react32.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
6214
|
+
/* @__PURE__ */ import_react32.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" })
|
|
6169
6215
|
);
|
|
6170
6216
|
}
|
|
6171
6217
|
}
|
|
@@ -6196,11 +6242,11 @@ function StanceAccordion({
|
|
|
6196
6242
|
apiUrl = "https://api.empowered.vote"
|
|
6197
6243
|
}) {
|
|
6198
6244
|
var _a;
|
|
6199
|
-
const [expandedTopicId, setExpandedTopicId] = (0,
|
|
6200
|
-
const [loadingId, setLoadingId] = (0,
|
|
6201
|
-
const [showAll, setShowAll] = (0,
|
|
6202
|
-
const contextCache = (0,
|
|
6203
|
-
const quotesCache = (0,
|
|
6245
|
+
const [expandedTopicId, setExpandedTopicId] = (0, import_react33.useState)(null);
|
|
6246
|
+
const [loadingId, setLoadingId] = (0, import_react33.useState)(null);
|
|
6247
|
+
const [showAll, setShowAll] = (0, import_react33.useState)(false);
|
|
6248
|
+
const contextCache = (0, import_react33.useRef)(/* @__PURE__ */ new Map());
|
|
6249
|
+
const quotesCache = (0, import_react33.useRef)(null);
|
|
6204
6250
|
const polAnswerMap = {};
|
|
6205
6251
|
if (polAnswers) {
|
|
6206
6252
|
polAnswers.forEach((a) => {
|
|
@@ -6259,7 +6305,7 @@ function StanceAccordion({
|
|
|
6259
6305
|
quotesCache.current = [];
|
|
6260
6306
|
}
|
|
6261
6307
|
}
|
|
6262
|
-
const handleToggle = (0,
|
|
6308
|
+
const handleToggle = (0, import_react33.useCallback)(
|
|
6263
6309
|
async (topicId) => {
|
|
6264
6310
|
if (expandedTopicId === topicId) {
|
|
6265
6311
|
setExpandedTopicId(null);
|
|
@@ -6276,7 +6322,7 @@ function StanceAccordion({
|
|
|
6276
6322
|
},
|
|
6277
6323
|
[expandedTopicId, politicianId, apiUrl]
|
|
6278
6324
|
);
|
|
6279
|
-
(0,
|
|
6325
|
+
(0, import_react33.useEffect)(() => {
|
|
6280
6326
|
if (initialExpandedTopicId && topics && topics.length > 0) {
|
|
6281
6327
|
handleToggle(String(initialExpandedTopicId));
|
|
6282
6328
|
}
|
|
@@ -6292,13 +6338,13 @@ function StanceAccordion({
|
|
|
6292
6338
|
visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
|
|
6293
6339
|
}
|
|
6294
6340
|
}
|
|
6295
|
-
return /* @__PURE__ */
|
|
6341
|
+
return /* @__PURE__ */ import_react33.default.createElement(
|
|
6296
6342
|
"div",
|
|
6297
6343
|
{
|
|
6298
6344
|
className: "flex flex-col",
|
|
6299
6345
|
style: { fontFamily: "'Manrope', sans-serif" }
|
|
6300
6346
|
},
|
|
6301
|
-
/* @__PURE__ */
|
|
6347
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
6302
6348
|
"h3",
|
|
6303
6349
|
{
|
|
6304
6350
|
className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
|
|
@@ -6321,15 +6367,15 @@ function StanceAccordion({
|
|
|
6321
6367
|
if (topic.topic_key) return q.issue === topic.topic_key;
|
|
6322
6368
|
return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
|
|
6323
6369
|
}) : [];
|
|
6324
|
-
return /* @__PURE__ */
|
|
6370
|
+
return /* @__PURE__ */ import_react33.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
6325
6371
|
"button",
|
|
6326
6372
|
{
|
|
6327
6373
|
type: "button",
|
|
6328
6374
|
onClick: () => handleToggle(topicId),
|
|
6329
6375
|
className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
|
|
6330
6376
|
},
|
|
6331
|
-
/* @__PURE__ */
|
|
6332
|
-
/* @__PURE__ */
|
|
6377
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-sm font-medium text-neutral-800 truncate" }, topic.short_title), questionText && /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-xs text-neutral-400 mt-0.5" }, questionText), /* @__PURE__ */ import_react33.default.createElement("span", { className: "text-xs text-neutral-500 mt-0.5" }, label)),
|
|
6378
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
6333
6379
|
"svg",
|
|
6334
6380
|
{
|
|
6335
6381
|
width: "16",
|
|
@@ -6346,9 +6392,9 @@ function StanceAccordion({
|
|
|
6346
6392
|
transition: "transform 0.2s ease"
|
|
6347
6393
|
}
|
|
6348
6394
|
},
|
|
6349
|
-
/* @__PURE__ */
|
|
6395
|
+
/* @__PURE__ */ import_react33.default.createElement("polyline", { points: "9 18 15 12 9 6" })
|
|
6350
6396
|
)
|
|
6351
|
-
), /* @__PURE__ */
|
|
6397
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
6352
6398
|
"div",
|
|
6353
6399
|
{
|
|
6354
6400
|
style: {
|
|
@@ -6357,7 +6403,7 @@ function StanceAccordion({
|
|
|
6357
6403
|
transition: "grid-template-rows 0.25s ease"
|
|
6358
6404
|
}
|
|
6359
6405
|
},
|
|
6360
|
-
/* @__PURE__ */
|
|
6406
|
+
/* @__PURE__ */ import_react33.default.createElement("div", { style: { overflow: "hidden" } }, /* @__PURE__ */ import_react33.default.createElement("div", { className: "px-2 pb-4" }, isLoading && /* @__PURE__ */ import_react33.default.createElement("div", { className: "flex items-center py-3" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
6361
6407
|
"div",
|
|
6362
6408
|
{
|
|
6363
6409
|
style: {
|
|
@@ -6369,14 +6415,14 @@ function StanceAccordion({
|
|
|
6369
6415
|
animation: "ev-spin 0.8s linear infinite"
|
|
6370
6416
|
}
|
|
6371
6417
|
}
|
|
6372
|
-
)), !isLoading && cached && /* @__PURE__ */
|
|
6418
|
+
)), !isLoading && cached && /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react33.default.createElement(
|
|
6373
6419
|
"p",
|
|
6374
6420
|
{
|
|
6375
6421
|
className: "text-sm text-neutral-700 mb-3",
|
|
6376
6422
|
style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
|
|
6377
6423
|
},
|
|
6378
6424
|
cached.reasoning
|
|
6379
|
-
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */
|
|
6425
|
+
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */ import_react33.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-xs font-semibold text-neutral-500 uppercase tracking-wider mb-1.5" }, "References"), /* @__PURE__ */ import_react33.default.createElement("ol", { className: "list-decimal list-inside space-y-1" }, cached.sources.map((src, i) => /* @__PURE__ */ import_react33.default.createElement("li", { key: i, className: "text-xs text-neutral-600" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
6380
6426
|
"a",
|
|
6381
6427
|
{
|
|
6382
6428
|
href: src,
|
|
@@ -6384,9 +6430,9 @@ function StanceAccordion({
|
|
|
6384
6430
|
rel: "noreferrer",
|
|
6385
6431
|
className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
|
|
6386
6432
|
},
|
|
6387
|
-
/* @__PURE__ */
|
|
6388
|
-
/* @__PURE__ */
|
|
6389
|
-
))))), topicQuotes.length > 0 && /* @__PURE__ */
|
|
6433
|
+
/* @__PURE__ */ import_react33.default.createElement(Favicon, { url: src }),
|
|
6434
|
+
/* @__PURE__ */ import_react33.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
|
|
6435
|
+
))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react33.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react33.default.createElement(
|
|
6390
6436
|
"p",
|
|
6391
6437
|
{
|
|
6392
6438
|
style: {
|
|
@@ -6403,7 +6449,7 @@ function StanceAccordion({
|
|
|
6403
6449
|
const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
|
|
6404
6450
|
const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
|
|
6405
6451
|
const sourceName = quote.source_name || quote.sourceName;
|
|
6406
|
-
return /* @__PURE__ */
|
|
6452
|
+
return /* @__PURE__ */ import_react33.default.createElement(
|
|
6407
6453
|
"div",
|
|
6408
6454
|
{
|
|
6409
6455
|
key: quote.id,
|
|
@@ -6415,7 +6461,7 @@ function StanceAccordion({
|
|
|
6415
6461
|
marginBottom: "8px"
|
|
6416
6462
|
}
|
|
6417
6463
|
},
|
|
6418
|
-
/* @__PURE__ */
|
|
6464
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
6419
6465
|
"p",
|
|
6420
6466
|
{
|
|
6421
6467
|
style: {
|
|
@@ -6428,7 +6474,7 @@ function StanceAccordion({
|
|
|
6428
6474
|
},
|
|
6429
6475
|
quote.text
|
|
6430
6476
|
),
|
|
6431
|
-
verdict === "agreed" && /* @__PURE__ */
|
|
6477
|
+
verdict === "agreed" && /* @__PURE__ */ import_react33.default.createElement(
|
|
6432
6478
|
"span",
|
|
6433
6479
|
{
|
|
6434
6480
|
style: {
|
|
@@ -6445,10 +6491,10 @@ function StanceAccordion({
|
|
|
6445
6491
|
flexShrink: 0
|
|
6446
6492
|
}
|
|
6447
6493
|
},
|
|
6448
|
-
/* @__PURE__ */
|
|
6494
|
+
/* @__PURE__ */ import_react33.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_react33.default.createElement("path", { d: "M5 13l4 4L19 7" })),
|
|
6449
6495
|
"Agreed"
|
|
6450
6496
|
),
|
|
6451
|
-
verdict === "disagreed" && /* @__PURE__ */
|
|
6497
|
+
verdict === "disagreed" && /* @__PURE__ */ import_react33.default.createElement(
|
|
6452
6498
|
"span",
|
|
6453
6499
|
{
|
|
6454
6500
|
style: {
|
|
@@ -6465,10 +6511,10 @@ function StanceAccordion({
|
|
|
6465
6511
|
flexShrink: 0
|
|
6466
6512
|
}
|
|
6467
6513
|
},
|
|
6468
|
-
/* @__PURE__ */
|
|
6514
|
+
/* @__PURE__ */ import_react33.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_react33.default.createElement("path", { d: "M6 18L18 6M6 6l12 12" })),
|
|
6469
6515
|
"Disagreed"
|
|
6470
6516
|
),
|
|
6471
|
-
sourceName && /* @__PURE__ */
|
|
6517
|
+
sourceName && /* @__PURE__ */ import_react33.default.createElement(
|
|
6472
6518
|
"a",
|
|
6473
6519
|
{
|
|
6474
6520
|
href: quote.source_url || quote.sourceUrl,
|
|
@@ -6485,10 +6531,10 @@ function StanceAccordion({
|
|
|
6485
6531
|
sourceName
|
|
6486
6532
|
)
|
|
6487
6533
|
);
|
|
6488
|
-
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */
|
|
6534
|
+
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */ import_react33.default.createElement("p", { className: "text-sm text-neutral-400 italic py-2" }, "No detailed reasoning available for this topic."))))
|
|
6489
6535
|
));
|
|
6490
6536
|
}),
|
|
6491
|
-
hasToggle && /* @__PURE__ */
|
|
6537
|
+
hasToggle && /* @__PURE__ */ import_react33.default.createElement(
|
|
6492
6538
|
"button",
|
|
6493
6539
|
{
|
|
6494
6540
|
type: "button",
|