@empoweredvote/ev-ui 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -111
- package/dist/index.js +523 -575
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +189 -241
- package/dist/index.mjs.map +1 -1
- package/package.json +47 -45
- package/src/tailwind-preset.js +81 -81
- package/src/tokens.js +415 -415
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,
|
|
@@ -104,121 +103,94 @@ function RadarChartCore({
|
|
|
104
103
|
onReplaceTopic = () => {
|
|
105
104
|
},
|
|
106
105
|
size = 400,
|
|
107
|
-
labelFontSize = 18,
|
|
108
106
|
padding = 80,
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
tightFit = false,
|
|
108
|
+
activeSpoke = null,
|
|
109
|
+
writeIns = {}
|
|
111
110
|
}) {
|
|
111
|
+
var _a;
|
|
112
112
|
const radius = size / 2 - 40;
|
|
113
|
+
const extRadius = radius * 1.15;
|
|
113
114
|
const centerX = size / 2;
|
|
114
115
|
const centerY = size / 2;
|
|
116
|
+
const [tooltip, setTooltip] = (0, import_react.useState)(null);
|
|
115
117
|
const spokes = Object.entries(data);
|
|
116
118
|
const numSpokes = Math.max(spokes.length, 1);
|
|
117
|
-
const prevCountRef = (0,
|
|
119
|
+
const prevCountRef = (0, import_react.useRef)(numSpokes);
|
|
118
120
|
const countChanged = numSpokes !== prevCountRef.current;
|
|
119
|
-
(0,
|
|
121
|
+
(0, import_react.useEffect)(() => {
|
|
120
122
|
prevCountRef.current = numSpokes;
|
|
121
123
|
}, [numSpokes]);
|
|
122
|
-
|
|
123
|
-
var
|
|
124
|
+
function calcAdjusted(value, shortTitle) {
|
|
125
|
+
var _a2;
|
|
126
|
+
if (!value || Number(value) === 0) return 0;
|
|
124
127
|
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
125
|
-
const max = ((
|
|
126
|
-
const pct =
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
const max = ((_a2 = topic == null ? void 0 : topic.stances) == null ? void 0 : _a2.length) || 10;
|
|
129
|
+
const pct = Number(value) / max * 10;
|
|
130
|
+
return invertedSpokes[shortTitle] ? (max + 1) * 10 / max - pct : pct;
|
|
131
|
+
}
|
|
132
|
+
const pointsArr = spokes.map(([shortTitle, value], index) => {
|
|
133
|
+
const adjusted = calcAdjusted(value, shortTitle);
|
|
129
134
|
const r = adjusted / 10 * radius;
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
return [x, y];
|
|
135
|
+
const angle = 2 * Math.PI * index / numSpokes;
|
|
136
|
+
return [centerX + r * Math.sin(angle), centerY - r * Math.cos(angle)];
|
|
133
137
|
});
|
|
134
138
|
const targetPoints = pointsArr.map((p) => p.join(",")).join(" ");
|
|
135
|
-
const
|
|
139
|
+
const springBase = {
|
|
136
140
|
to: { points: targetPoints },
|
|
137
141
|
immediate: countChanged,
|
|
138
|
-
reset: countChanged,
|
|
139
142
|
config: { tension: 300, friction: 30 }
|
|
140
|
-
}
|
|
143
|
+
};
|
|
144
|
+
if (countChanged) springBase.from = { points: targetPoints };
|
|
145
|
+
const spring = (0, import_web.useSpring)(springBase);
|
|
141
146
|
const hasCompareData = Object.keys(compareData).length > 0;
|
|
142
147
|
const centerPoints = spokes.map(() => `${centerX},${centerY}`).join(" ");
|
|
143
148
|
let comparePoints = null;
|
|
144
149
|
let compareCoords = null;
|
|
145
150
|
if (hasCompareData) {
|
|
146
151
|
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;
|
|
152
|
+
var _a2;
|
|
153
|
+
const value = (_a2 = compareData[shortTitle]) != null ? _a2 : 0;
|
|
154
|
+
const adjusted = calcAdjusted(value, shortTitle);
|
|
154
155
|
const r = adjusted / 10 * radius;
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
return [x, y];
|
|
156
|
+
const angle = 2 * Math.PI * index / numSpokes;
|
|
157
|
+
return [centerX + r * Math.sin(angle), centerY - r * Math.cos(angle)];
|
|
158
158
|
});
|
|
159
159
|
compareCoords = ccoords;
|
|
160
160
|
comparePoints = ccoords.map((p) => p.join(",")).join(" ");
|
|
161
161
|
}
|
|
162
|
-
const hadCompareDataRef = (0,
|
|
162
|
+
const hadCompareDataRef = (0, import_react.useRef)(false);
|
|
163
163
|
const compareJustAppeared = hasCompareData && !hadCompareDataRef.current;
|
|
164
|
-
(0,
|
|
164
|
+
(0, import_react.useEffect)(() => {
|
|
165
165
|
hadCompareDataRef.current = hasCompareData;
|
|
166
166
|
}, [hasCompareData]);
|
|
167
|
-
const
|
|
167
|
+
const compareSpringBase = {
|
|
168
168
|
to: { points: comparePoints || centerPoints || `${centerX},${centerY}` },
|
|
169
169
|
immediate: countChanged || compareJustAppeared,
|
|
170
|
-
reset: countChanged || compareJustAppeared,
|
|
171
170
|
config: { tension: 300, friction: 30 }
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
const side = sinA < -0.1 ? "left" : sinA > 0.1 ? "right" : "center";
|
|
185
|
-
return { estimatedWidth, side };
|
|
186
|
-
});
|
|
187
|
-
const leftLabelWidths = labelMeta.filter((m) => m.side === "left").map((m) => m.estimatedWidth);
|
|
188
|
-
const rightLabelWidths = labelMeta.filter((m) => m.side === "right").map((m) => m.estimatedWidth);
|
|
189
|
-
const minPadding = 40;
|
|
190
|
-
const maxPadding = padding * 2;
|
|
191
|
-
const rawLeftPadding = Math.min(
|
|
192
|
-
Math.max(
|
|
193
|
-
leftLabelWidths.length ? Math.max(...leftLabelWidths) + labelOffset : 0,
|
|
194
|
-
minPadding
|
|
195
|
-
),
|
|
196
|
-
maxPadding
|
|
197
|
-
);
|
|
198
|
-
const rawRightPadding = Math.min(
|
|
199
|
-
Math.max(
|
|
200
|
-
rightLabelWidths.length ? Math.max(...rightLabelWidths) + labelOffset : 0,
|
|
201
|
-
minPadding
|
|
202
|
-
),
|
|
203
|
-
maxPadding
|
|
204
|
-
);
|
|
205
|
-
const symmetricPadding = Math.max(rawLeftPadding, rawRightPadding);
|
|
206
|
-
const leftPadding = symmetricPadding;
|
|
207
|
-
const rightPadding = symmetricPadding;
|
|
208
|
-
const verticalPadding = padding;
|
|
209
|
-
let tightTop = -verticalPadding;
|
|
210
|
-
let tightHeight = size + verticalPadding * 2;
|
|
171
|
+
};
|
|
172
|
+
if (countChanged || compareJustAppeared) compareSpringBase.from = compareSpringBase.to;
|
|
173
|
+
const compareSpring = (0, import_web.useSpring)(compareSpringBase);
|
|
174
|
+
const spokeExtension = spokes.reduce((acc, [shortTitle]) => {
|
|
175
|
+
const userAdj = calcAdjusted(data[shortTitle], shortTitle);
|
|
176
|
+
const cmpAdj = hasCompareData && compareData[shortTitle] ? calcAdjusted(compareData[shortTitle], shortTitle) : 0;
|
|
177
|
+
acc[shortTitle] = userAdj > 10 || cmpAdj > 10;
|
|
178
|
+
return acc;
|
|
179
|
+
}, {});
|
|
180
|
+
const sidePadding = 20;
|
|
181
|
+
let tightTop = -sidePadding;
|
|
182
|
+
let tightHeight = size + sidePadding * 2;
|
|
211
183
|
if (tightFit && numSpokes > 0) {
|
|
212
184
|
let yMin = Infinity, yMax = -Infinity;
|
|
213
185
|
for (let i = 0; i < numSpokes; i++) {
|
|
214
186
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
215
|
-
const
|
|
187
|
+
const effectiveR = spokeExtension[(_a = spokes[i]) == null ? void 0 : _a[0]] ? extRadius : radius;
|
|
188
|
+
const y = centerY - effectiveR * Math.cos(angle);
|
|
216
189
|
if (y < yMin) yMin = y;
|
|
217
190
|
if (y > yMax) yMax = y;
|
|
218
191
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
tightHeight = yMax + labelMargin - tightTop;
|
|
192
|
+
tightTop = yMin - sidePadding;
|
|
193
|
+
tightHeight = yMax + sidePadding - tightTop;
|
|
222
194
|
}
|
|
223
195
|
const guidePolygons = [];
|
|
224
196
|
for (let level = 1; level <= 5; level++) {
|
|
@@ -226,101 +198,76 @@ function RadarChartCore({
|
|
|
226
198
|
const ring = [];
|
|
227
199
|
for (let i = 0; i < numSpokes; i++) {
|
|
228
200
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
229
|
-
|
|
230
|
-
const y = centerY - radius * scale * Math.cos(angle);
|
|
231
|
-
ring.push(`${x},${y}`);
|
|
201
|
+
ring.push(`${centerX + radius * scale * Math.sin(angle)},${centerY - radius * scale * Math.cos(angle)}`);
|
|
232
202
|
}
|
|
233
203
|
guidePolygons.push(
|
|
234
204
|
/* @__PURE__ */ import_react.default.createElement("polygon", { key: level, points: ring.join(" "), fill: "none", stroke: "#ccc" })
|
|
235
205
|
);
|
|
236
206
|
}
|
|
207
|
+
const getStanceText = (shortTitle, value) => {
|
|
208
|
+
if (writeIns[shortTitle]) return writeIns[shortTitle];
|
|
209
|
+
const topic = topics.find((t) => t.short_title === shortTitle);
|
|
210
|
+
const stances = (topic == null ? void 0 : topic.stances) || [];
|
|
211
|
+
const idx = Math.round(Number(value)) - 1;
|
|
212
|
+
if (idx >= 0 && idx < stances.length) {
|
|
213
|
+
return stances[idx].text || shortTitle;
|
|
214
|
+
}
|
|
215
|
+
return shortTitle;
|
|
216
|
+
};
|
|
237
217
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
238
218
|
"svg",
|
|
239
219
|
{
|
|
240
220
|
className: "w-full h-auto max-h-full",
|
|
241
|
-
viewBox: `-${
|
|
242
|
-
preserveAspectRatio: "xMidYMid meet"
|
|
221
|
+
viewBox: `-${sidePadding} ${tightTop} ${size + sidePadding * 2} ${tightHeight}`,
|
|
222
|
+
preserveAspectRatio: "xMidYMid meet",
|
|
223
|
+
onMouseLeave: () => setTooltip(null)
|
|
243
224
|
},
|
|
244
225
|
guidePolygons,
|
|
245
226
|
spokes.map(([shortTitle], i) => {
|
|
246
227
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
247
|
-
const
|
|
248
|
-
const
|
|
228
|
+
const endX = centerX + radius * Math.sin(angle);
|
|
229
|
+
const endY = centerY - radius * Math.cos(angle);
|
|
249
230
|
const isUnanswered = !!unansweredSpokes[shortTitle];
|
|
250
|
-
|
|
231
|
+
const needsExt = spokeExtension[shortTitle];
|
|
232
|
+
const extX = centerX + extRadius * Math.sin(angle);
|
|
233
|
+
const extY = centerY - extRadius * Math.cos(angle);
|
|
234
|
+
return /* @__PURE__ */ import_react.default.createElement("g", { key: `spoke-${shortTitle}` }, /* @__PURE__ */ import_react.default.createElement(
|
|
251
235
|
"line",
|
|
252
236
|
{
|
|
253
|
-
key: `line-${shortTitle}`,
|
|
254
237
|
x1: centerX,
|
|
255
238
|
y1: centerY,
|
|
256
|
-
x2:
|
|
257
|
-
y2:
|
|
258
|
-
stroke: isUnanswered ? "#9ca3af" : "
|
|
239
|
+
x2: endX,
|
|
240
|
+
y2: endY,
|
|
241
|
+
stroke: isUnanswered ? "#9ca3af" : "#aaa",
|
|
259
242
|
strokeDasharray: isUnanswered ? "4 3" : void 0,
|
|
260
243
|
opacity: isUnanswered ? 0.6 : 1
|
|
261
244
|
}
|
|
262
|
-
)
|
|
263
|
-
|
|
264
|
-
spokes.map(([shortTitle], i) => {
|
|
265
|
-
const angle = 2 * Math.PI * i / numSpokes;
|
|
266
|
-
const anchor = angle > Math.PI ? "end" : angle < Math.PI && angle > 0 ? "start" : "middle";
|
|
267
|
-
const cosA = Math.cos(angle);
|
|
268
|
-
const isTop = cosA > 0.5;
|
|
269
|
-
const isBottom = cosA < -0.5;
|
|
270
|
-
const baseFSize = labelFontSize;
|
|
271
|
-
const lines = wrapLabel(shortTitle, 12);
|
|
272
|
-
const longestLine = lines.reduce(
|
|
273
|
-
(max, ln) => ln.length > max ? ln.length : max,
|
|
274
|
-
0
|
|
275
|
-
);
|
|
276
|
-
const fSize = adaptiveFontSize(longestLine, baseFSize);
|
|
277
|
-
const lineHeight = fSize * 1.1;
|
|
278
|
-
const dynamicLabelOffset = lines.length > 1 ? labelOffset + 8 : labelOffset;
|
|
279
|
-
const offset2 = radius + dynamicLabelOffset;
|
|
280
|
-
const labelX = centerX + offset2 * Math.sin(angle);
|
|
281
|
-
let labelY = centerY - offset2 * Math.cos(angle);
|
|
282
|
-
if (isTop && lines.length > 1) {
|
|
283
|
-
labelY -= (lines.length - 1) * lineHeight;
|
|
284
|
-
}
|
|
285
|
-
const isUnansweredLabel = !!unansweredSpokes[shortTitle];
|
|
286
|
-
return /* @__PURE__ */ import_react.default.createElement(
|
|
287
|
-
"text",
|
|
245
|
+
), needsExt && /* @__PURE__ */ import_react.default.createElement(
|
|
246
|
+
"line",
|
|
288
247
|
{
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
},
|
|
299
|
-
isUnansweredLabel && /* @__PURE__ */ import_react.default.createElement("title", null, "No stance on file for this topic."),
|
|
300
|
-
lines.map((ln, idx) => /* @__PURE__ */ import_react.default.createElement("tspan", { key: idx, x: labelX, dy: idx === 0 ? "0" : `${lineHeight}` }, ln))
|
|
301
|
-
);
|
|
248
|
+
x1: endX,
|
|
249
|
+
y1: endY,
|
|
250
|
+
x2: extX,
|
|
251
|
+
y2: extY,
|
|
252
|
+
stroke: "#aaa",
|
|
253
|
+
strokeDasharray: "4 4",
|
|
254
|
+
opacity: 0.4
|
|
255
|
+
}
|
|
256
|
+
));
|
|
302
257
|
}),
|
|
303
258
|
countChanged ? /* @__PURE__ */ import_react.default.createElement(
|
|
304
259
|
"polygon",
|
|
305
260
|
{
|
|
306
261
|
key: "user-static",
|
|
307
262
|
points: targetPoints,
|
|
308
|
-
style: {
|
|
309
|
-
fill: "rgba(124, 107, 158, 0.4)",
|
|
310
|
-
stroke: "#7C6B9E",
|
|
311
|
-
strokeWidth: 3
|
|
312
|
-
}
|
|
263
|
+
style: { fill: "rgba(124, 107, 158, 0.4)", stroke: "#7C6B9E", strokeWidth: 3 }
|
|
313
264
|
}
|
|
314
265
|
) : /* @__PURE__ */ import_react.default.createElement(
|
|
315
266
|
import_web.animated.polygon,
|
|
316
267
|
{
|
|
317
268
|
key: "user-animated",
|
|
318
269
|
points: spring.points,
|
|
319
|
-
style: {
|
|
320
|
-
fill: "rgba(124, 107, 158, 0.4)",
|
|
321
|
-
stroke: "#7C6B9E",
|
|
322
|
-
strokeWidth: 3
|
|
323
|
-
}
|
|
270
|
+
style: { fill: "rgba(124, 107, 158, 0.4)", stroke: "#7C6B9E", strokeWidth: 3 }
|
|
324
271
|
}
|
|
325
272
|
),
|
|
326
273
|
pointsArr.map(([cx, cy], i) => {
|
|
@@ -338,7 +285,10 @@ function RadarChartCore({
|
|
|
338
285
|
r: matches ? 8 : 7,
|
|
339
286
|
fill: matches ? "#fed12e" : "#7C6B9E",
|
|
340
287
|
stroke: "#FFFFFF",
|
|
341
|
-
strokeWidth: 3
|
|
288
|
+
strokeWidth: 3,
|
|
289
|
+
style: { cursor: "default" },
|
|
290
|
+
onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, userVal) }),
|
|
291
|
+
onMouseLeave: () => setTooltip(null)
|
|
342
292
|
}
|
|
343
293
|
);
|
|
344
294
|
}),
|
|
@@ -347,22 +297,14 @@ function RadarChartCore({
|
|
|
347
297
|
{
|
|
348
298
|
key: "compare-static",
|
|
349
299
|
points: comparePoints,
|
|
350
|
-
style: {
|
|
351
|
-
fill: "rgba(90, 154, 110, 0.3)",
|
|
352
|
-
stroke: "#5A9A6E",
|
|
353
|
-
strokeWidth: 2
|
|
354
|
-
}
|
|
300
|
+
style: { fill: "rgba(90, 154, 110, 0.3)", stroke: "#5A9A6E", strokeWidth: 2 }
|
|
355
301
|
}
|
|
356
302
|
) : /* @__PURE__ */ import_react.default.createElement(
|
|
357
303
|
import_web.animated.polygon,
|
|
358
304
|
{
|
|
359
305
|
key: "compare-animated",
|
|
360
306
|
points: compareSpring.points,
|
|
361
|
-
style: {
|
|
362
|
-
fill: "rgba(90, 154, 110, 0.3)",
|
|
363
|
-
stroke: "#5A9A6E",
|
|
364
|
-
strokeWidth: 2
|
|
365
|
-
}
|
|
307
|
+
style: { fill: "rgba(90, 154, 110, 0.3)", stroke: "#5A9A6E", strokeWidth: 2 }
|
|
366
308
|
}
|
|
367
309
|
) : null,
|
|
368
310
|
hasCompareData && compareCoords && compareCoords.map(([cx, cy], i) => {
|
|
@@ -370,7 +312,7 @@ function RadarChartCore({
|
|
|
370
312
|
const userVal = spokes[i][1];
|
|
371
313
|
const compareVal = compareData[shortTitle];
|
|
372
314
|
if (!compareVal || Number(compareVal) === 0) return null;
|
|
373
|
-
const matches = userVal !== 0 && compareVal
|
|
315
|
+
const matches = userVal !== 0 && compareVal != null && Number(userVal) === Number(compareVal);
|
|
374
316
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
375
317
|
"circle",
|
|
376
318
|
{
|
|
@@ -380,14 +322,17 @@ function RadarChartCore({
|
|
|
380
322
|
r: matches ? 8 : 7,
|
|
381
323
|
fill: matches ? "#fed12e" : "#5A9A6E",
|
|
382
324
|
stroke: "#FFFFFF",
|
|
383
|
-
strokeWidth: 3
|
|
325
|
+
strokeWidth: 3,
|
|
326
|
+
style: { cursor: "default" },
|
|
327
|
+
onMouseEnter: () => setTooltip({ x: cx, y: cy, text: getStanceText(shortTitle, compareVal) }),
|
|
328
|
+
onMouseLeave: () => setTooltip(null)
|
|
384
329
|
}
|
|
385
330
|
);
|
|
386
331
|
}),
|
|
387
332
|
spokes.map(([shortTitle], i) => {
|
|
388
333
|
const angle = 2 * Math.PI * i / numSpokes;
|
|
389
|
-
const
|
|
390
|
-
const
|
|
334
|
+
const endX = centerX + (spokeExtension[shortTitle] ? extRadius : radius) * Math.sin(angle);
|
|
335
|
+
const endY = centerY - (spokeExtension[shortTitle] ? extRadius : radius) * Math.cos(angle);
|
|
391
336
|
const isUnansweredHitbox = !!unansweredSpokes[shortTitle];
|
|
392
337
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
393
338
|
"line",
|
|
@@ -395,54 +340,56 @@ function RadarChartCore({
|
|
|
395
340
|
key: `hitbox-${shortTitle}`,
|
|
396
341
|
x1: centerX,
|
|
397
342
|
y1: centerY,
|
|
398
|
-
x2:
|
|
399
|
-
y2:
|
|
343
|
+
x2: endX,
|
|
344
|
+
y2: endY,
|
|
400
345
|
stroke: "transparent",
|
|
401
346
|
strokeWidth: 14,
|
|
402
347
|
onClick: () => isUnansweredHitbox ? onReplaceTopic(shortTitle) : onToggleInversion(shortTitle),
|
|
403
348
|
style: { cursor: "pointer" }
|
|
404
349
|
}
|
|
405
350
|
);
|
|
406
|
-
})
|
|
351
|
+
}),
|
|
352
|
+
tooltip && (() => {
|
|
353
|
+
const tipW = 190;
|
|
354
|
+
const tipH = 70;
|
|
355
|
+
const svgW = size + sidePadding * 2;
|
|
356
|
+
const tx = tooltip.x + sidePadding + 12 > svgW - tipW ? tooltip.x - tipW - 12 : tooltip.x + 12;
|
|
357
|
+
const ty = tooltip.y - 10;
|
|
358
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
359
|
+
"foreignObject",
|
|
360
|
+
{
|
|
361
|
+
x: tx,
|
|
362
|
+
y: ty,
|
|
363
|
+
width: tipW,
|
|
364
|
+
height: tipH,
|
|
365
|
+
style: { overflow: "visible", pointerEvents: "none" }
|
|
366
|
+
},
|
|
367
|
+
/* @__PURE__ */ import_react.default.createElement(
|
|
368
|
+
"div",
|
|
369
|
+
{
|
|
370
|
+
xmlns: "http://www.w3.org/1999/xhtml",
|
|
371
|
+
style: {
|
|
372
|
+
background: "white",
|
|
373
|
+
border: "1px solid #d1d5db",
|
|
374
|
+
borderRadius: 6,
|
|
375
|
+
padding: "6px 10px",
|
|
376
|
+
fontSize: 11,
|
|
377
|
+
lineHeight: 1.4,
|
|
378
|
+
color: "#111",
|
|
379
|
+
boxShadow: "0 2px 8px rgba(0,0,0,0.12)",
|
|
380
|
+
width: tipW + "px",
|
|
381
|
+
wordWrap: "break-word"
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
tooltip.text
|
|
385
|
+
)
|
|
386
|
+
);
|
|
387
|
+
})()
|
|
407
388
|
);
|
|
408
389
|
}
|
|
409
|
-
function adaptiveFontSize(longestLineLen, baseFSize) {
|
|
410
|
-
return Math.max(baseFSize, 10);
|
|
411
|
-
}
|
|
412
|
-
function wrapLabel(label, maxChars = 12) {
|
|
413
|
-
const str = String(label);
|
|
414
|
-
let rawWords;
|
|
415
|
-
if (str.includes("/")) {
|
|
416
|
-
rawWords = str.split("/").reduce((acc, segment, idx, arr) => {
|
|
417
|
-
const part = idx < arr.length - 1 ? segment + "/" : segment;
|
|
418
|
-
if (part.trim()) acc.push(part.trim());
|
|
419
|
-
return acc;
|
|
420
|
-
}, []);
|
|
421
|
-
} else {
|
|
422
|
-
rawWords = str.split(/\s+/);
|
|
423
|
-
}
|
|
424
|
-
const lines = [];
|
|
425
|
-
let line = "";
|
|
426
|
-
for (const word of rawWords) {
|
|
427
|
-
if (line === "") {
|
|
428
|
-
line = word;
|
|
429
|
-
} else if ((line + " " + word).length <= maxChars) {
|
|
430
|
-
line += " " + word;
|
|
431
|
-
} else {
|
|
432
|
-
lines.push(line);
|
|
433
|
-
line = word;
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
if (line) lines.push(line);
|
|
437
|
-
if (lines.length > 2) {
|
|
438
|
-
const overflow = lines.splice(2).join(" ");
|
|
439
|
-
lines[1] = lines[1] + " " + overflow;
|
|
440
|
-
}
|
|
441
|
-
return lines;
|
|
442
|
-
}
|
|
443
390
|
|
|
444
391
|
// src/Header.jsx
|
|
445
|
-
var
|
|
392
|
+
var import_react3 = __toESM(require("react"));
|
|
446
393
|
|
|
447
394
|
// src/tokens.js
|
|
448
395
|
var colorScales = {
|
|
@@ -838,13 +785,13 @@ var breakpoints = {
|
|
|
838
785
|
};
|
|
839
786
|
|
|
840
787
|
// src/useMediaQuery.js
|
|
841
|
-
var
|
|
788
|
+
var import_react2 = require("react");
|
|
842
789
|
function useMediaQuery(query) {
|
|
843
|
-
const [matches, setMatches] = (0,
|
|
790
|
+
const [matches, setMatches] = (0, import_react2.useState)(() => {
|
|
844
791
|
if (typeof window === "undefined") return false;
|
|
845
792
|
return window.matchMedia(query).matches;
|
|
846
793
|
});
|
|
847
|
-
(0,
|
|
794
|
+
(0, import_react2.useEffect)(() => {
|
|
848
795
|
if (typeof window === "undefined") return;
|
|
849
796
|
const mql = window.matchMedia(query);
|
|
850
797
|
const handler = (e) => setMatches(e.matches);
|
|
@@ -859,6 +806,7 @@ function useMediaQuery(query) {
|
|
|
859
806
|
function Header({
|
|
860
807
|
logoSrc,
|
|
861
808
|
logoAlt = "Empowered Vote",
|
|
809
|
+
logoHref = "https://login.empowered.vote/profile",
|
|
862
810
|
navItems = [],
|
|
863
811
|
ctaButton,
|
|
864
812
|
secondaryAction,
|
|
@@ -867,12 +815,12 @@ function Header({
|
|
|
867
815
|
profileMenu,
|
|
868
816
|
style = {}
|
|
869
817
|
}) {
|
|
870
|
-
const [mobileMenuOpen, setMobileMenuOpen] = (0,
|
|
871
|
-
const [openDropdown, setOpenDropdown] = (0,
|
|
872
|
-
const [profileOpen, setProfileOpen] = (0,
|
|
818
|
+
const [mobileMenuOpen, setMobileMenuOpen] = (0, import_react3.useState)(false);
|
|
819
|
+
const [openDropdown, setOpenDropdown] = (0, import_react3.useState)(null);
|
|
820
|
+
const [profileOpen, setProfileOpen] = (0, import_react3.useState)(false);
|
|
873
821
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
874
|
-
const profileRef = (0,
|
|
875
|
-
(0,
|
|
822
|
+
const profileRef = (0, import_react3.useRef)(null);
|
|
823
|
+
(0, import_react3.useEffect)(() => {
|
|
876
824
|
if (!profileOpen) return;
|
|
877
825
|
const handleClickOutside = (e) => {
|
|
878
826
|
if (profileRef.current && !profileRef.current.contains(e.target)) {
|
|
@@ -1083,14 +1031,14 @@ function Header({
|
|
|
1083
1031
|
const isActive = currentPath === item.href;
|
|
1084
1032
|
const hasDropdown = item.dropdown && item.dropdown.length > 0;
|
|
1085
1033
|
const isOpen = openDropdown === item.label;
|
|
1086
|
-
return /* @__PURE__ */
|
|
1034
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1087
1035
|
"div",
|
|
1088
1036
|
{
|
|
1089
1037
|
style: { position: "relative" },
|
|
1090
1038
|
onMouseEnter: () => hasDropdown && setOpenDropdown(item.label),
|
|
1091
1039
|
onMouseLeave: () => hasDropdown && setOpenDropdown(null)
|
|
1092
1040
|
},
|
|
1093
|
-
/* @__PURE__ */
|
|
1041
|
+
/* @__PURE__ */ import_react3.default.createElement(
|
|
1094
1042
|
"a",
|
|
1095
1043
|
{
|
|
1096
1044
|
href: item.href,
|
|
@@ -1101,7 +1049,7 @@ function Header({
|
|
|
1101
1049
|
}
|
|
1102
1050
|
},
|
|
1103
1051
|
item.label,
|
|
1104
|
-
hasDropdown && /* @__PURE__ */
|
|
1052
|
+
hasDropdown && /* @__PURE__ */ import_react3.default.createElement(
|
|
1105
1053
|
"svg",
|
|
1106
1054
|
{
|
|
1107
1055
|
style: styles2.dropdownIcon,
|
|
@@ -1109,7 +1057,7 @@ function Header({
|
|
|
1109
1057
|
fill: "none",
|
|
1110
1058
|
xmlns: "http://www.w3.org/2000/svg"
|
|
1111
1059
|
},
|
|
1112
|
-
/* @__PURE__ */
|
|
1060
|
+
/* @__PURE__ */ import_react3.default.createElement(
|
|
1113
1061
|
"path",
|
|
1114
1062
|
{
|
|
1115
1063
|
d: "M1 1L8 8L15 1",
|
|
@@ -1121,7 +1069,7 @@ function Header({
|
|
|
1121
1069
|
)
|
|
1122
1070
|
)
|
|
1123
1071
|
),
|
|
1124
|
-
hasDropdown && isOpen && /* @__PURE__ */
|
|
1072
|
+
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
1073
|
"a",
|
|
1126
1074
|
{
|
|
1127
1075
|
key: idx,
|
|
@@ -1139,14 +1087,14 @@ function Header({
|
|
|
1139
1087
|
))))
|
|
1140
1088
|
);
|
|
1141
1089
|
};
|
|
1142
|
-
return /* @__PURE__ */
|
|
1090
|
+
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
1091
|
"a",
|
|
1144
1092
|
{
|
|
1145
|
-
href:
|
|
1146
|
-
onClick: (e) => handleNavClick(e,
|
|
1093
|
+
href: logoHref,
|
|
1094
|
+
onClick: (e) => handleNavClick(e, logoHref),
|
|
1147
1095
|
style: { display: "flex", alignItems: "center" }
|
|
1148
1096
|
},
|
|
1149
|
-
logoSrc ? /* @__PURE__ */
|
|
1097
|
+
logoSrc ? /* @__PURE__ */ import_react3.default.createElement("img", { src: logoSrc, alt: logoAlt, style: styles2.logo }) : /* @__PURE__ */ import_react3.default.createElement(
|
|
1150
1098
|
"span",
|
|
1151
1099
|
{
|
|
1152
1100
|
style: {
|
|
@@ -1158,7 +1106,7 @@ function Header({
|
|
|
1158
1106
|
},
|
|
1159
1107
|
"empowered.vote"
|
|
1160
1108
|
)
|
|
1161
|
-
), /* @__PURE__ */
|
|
1109
|
+
), /* @__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
1110
|
"a",
|
|
1163
1111
|
{
|
|
1164
1112
|
href: secondaryAction.href,
|
|
@@ -1181,7 +1129,7 @@ function Header({
|
|
|
1181
1129
|
}
|
|
1182
1130
|
},
|
|
1183
1131
|
secondaryAction.label
|
|
1184
|
-
), ctaButton && /* @__PURE__ */
|
|
1132
|
+
), ctaButton && /* @__PURE__ */ import_react3.default.createElement(
|
|
1185
1133
|
"a",
|
|
1186
1134
|
{
|
|
1187
1135
|
href: ctaButton.href,
|
|
@@ -1196,7 +1144,7 @@ function Header({
|
|
|
1196
1144
|
}
|
|
1197
1145
|
},
|
|
1198
1146
|
ctaButton.label
|
|
1199
|
-
), profileMenu && /* @__PURE__ */
|
|
1147
|
+
), profileMenu && /* @__PURE__ */ import_react3.default.createElement("div", { ref: profileRef, style: { position: "relative" } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
1200
1148
|
"button",
|
|
1201
1149
|
{
|
|
1202
1150
|
style: styles2.profileButton,
|
|
@@ -1204,7 +1152,7 @@ function Header({
|
|
|
1204
1152
|
"aria-label": "Profile menu",
|
|
1205
1153
|
"aria-expanded": profileOpen
|
|
1206
1154
|
},
|
|
1207
|
-
/* @__PURE__ */
|
|
1155
|
+
/* @__PURE__ */ import_react3.default.createElement(
|
|
1208
1156
|
"svg",
|
|
1209
1157
|
{
|
|
1210
1158
|
width: "20",
|
|
@@ -1216,12 +1164,12 @@ function Header({
|
|
|
1216
1164
|
strokeLinecap: "round",
|
|
1217
1165
|
strokeLinejoin: "round"
|
|
1218
1166
|
},
|
|
1219
|
-
/* @__PURE__ */
|
|
1220
|
-
/* @__PURE__ */
|
|
1167
|
+
/* @__PURE__ */ import_react3.default.createElement("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
|
|
1168
|
+
/* @__PURE__ */ import_react3.default.createElement("circle", { cx: "12", cy: "7", r: "4" })
|
|
1221
1169
|
)
|
|
1222
|
-
), profileOpen && /* @__PURE__ */
|
|
1170
|
+
), 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
1171
|
if (item.href) {
|
|
1224
|
-
return /* @__PURE__ */
|
|
1172
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1225
1173
|
"a",
|
|
1226
1174
|
{
|
|
1227
1175
|
key: idx,
|
|
@@ -1244,7 +1192,7 @@ function Header({
|
|
|
1244
1192
|
item.label
|
|
1245
1193
|
);
|
|
1246
1194
|
}
|
|
1247
|
-
return /* @__PURE__ */
|
|
1195
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1248
1196
|
"button",
|
|
1249
1197
|
{
|
|
1250
1198
|
key: idx,
|
|
@@ -1263,7 +1211,7 @@ function Header({
|
|
|
1263
1211
|
},
|
|
1264
1212
|
item.label
|
|
1265
1213
|
);
|
|
1266
|
-
}))))), /* @__PURE__ */
|
|
1214
|
+
}))))), /* @__PURE__ */ import_react3.default.createElement(
|
|
1267
1215
|
"button",
|
|
1268
1216
|
{
|
|
1269
1217
|
style: styles2.mobileMenuButton,
|
|
@@ -1272,7 +1220,7 @@ function Header({
|
|
|
1272
1220
|
"aria-label": "Toggle menu",
|
|
1273
1221
|
"aria-expanded": mobileMenuOpen
|
|
1274
1222
|
},
|
|
1275
|
-
/* @__PURE__ */
|
|
1223
|
+
/* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.hamburger }, /* @__PURE__ */ import_react3.default.createElement(
|
|
1276
1224
|
"span",
|
|
1277
1225
|
{
|
|
1278
1226
|
style: {
|
|
@@ -1284,7 +1232,7 @@ function Header({
|
|
|
1284
1232
|
backgroundColor: colors.evTeal
|
|
1285
1233
|
}
|
|
1286
1234
|
}
|
|
1287
|
-
), /* @__PURE__ */
|
|
1235
|
+
), /* @__PURE__ */ import_react3.default.createElement(
|
|
1288
1236
|
"span",
|
|
1289
1237
|
{
|
|
1290
1238
|
style: {
|
|
@@ -1297,9 +1245,9 @@ function Header({
|
|
|
1297
1245
|
}
|
|
1298
1246
|
}
|
|
1299
1247
|
))
|
|
1300
|
-
)), /* @__PURE__ */
|
|
1248
|
+
)), /* @__PURE__ */ import_react3.default.createElement("div", { style: styles2.mobileMenu, className: "ev-header-mobile-menu" }, navItems.map((item, idx) => {
|
|
1301
1249
|
const hasDropdown = item.dropdown && item.dropdown.length > 0;
|
|
1302
|
-
return /* @__PURE__ */
|
|
1250
|
+
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
1251
|
"span",
|
|
1304
1252
|
{
|
|
1305
1253
|
style: {
|
|
@@ -1309,7 +1257,7 @@ function Header({
|
|
|
1309
1257
|
}
|
|
1310
1258
|
},
|
|
1311
1259
|
item.label
|
|
1312
|
-
), item.dropdown.map((sub, subIdx) => /* @__PURE__ */
|
|
1260
|
+
), item.dropdown.map((sub, subIdx) => /* @__PURE__ */ import_react3.default.createElement(
|
|
1313
1261
|
"a",
|
|
1314
1262
|
{
|
|
1315
1263
|
key: subIdx,
|
|
@@ -1326,7 +1274,7 @@ function Header({
|
|
|
1326
1274
|
}
|
|
1327
1275
|
},
|
|
1328
1276
|
sub.label
|
|
1329
|
-
))) : /* @__PURE__ */
|
|
1277
|
+
))) : /* @__PURE__ */ import_react3.default.createElement(
|
|
1330
1278
|
"a",
|
|
1331
1279
|
{
|
|
1332
1280
|
href: item.href,
|
|
@@ -1338,7 +1286,7 @@ function Header({
|
|
|
1338
1286
|
},
|
|
1339
1287
|
item.label
|
|
1340
1288
|
));
|
|
1341
|
-
}), secondaryAction &&
|
|
1289
|
+
}), 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
1290
|
"a",
|
|
1343
1291
|
{
|
|
1344
1292
|
href: secondaryAction.href,
|
|
@@ -1353,7 +1301,7 @@ function Header({
|
|
|
1353
1301
|
style: { ...styles2.secondaryAction, marginTop: spacing[4], textAlign: "center", justifyContent: "center" }
|
|
1354
1302
|
},
|
|
1355
1303
|
secondaryAction.label
|
|
1356
|
-
), ctaButton && /* @__PURE__ */
|
|
1304
|
+
), ctaButton && /* @__PURE__ */ import_react3.default.createElement(
|
|
1357
1305
|
"a",
|
|
1358
1306
|
{
|
|
1359
1307
|
href: ctaButton.href,
|
|
@@ -1364,7 +1312,7 @@ function Header({
|
|
|
1364
1312
|
style: { ...styles2.ctaButton, marginTop: spacing[4], textAlign: "center" }
|
|
1365
1313
|
},
|
|
1366
1314
|
ctaButton.label
|
|
1367
|
-
), profileMenu && /* @__PURE__ */
|
|
1315
|
+
), 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
1316
|
"span",
|
|
1369
1317
|
{
|
|
1370
1318
|
style: {
|
|
@@ -1380,7 +1328,7 @@ function Header({
|
|
|
1380
1328
|
profileMenu.label
|
|
1381
1329
|
), profileMenu.items.map((item, idx) => {
|
|
1382
1330
|
if (item.href) {
|
|
1383
|
-
return /* @__PURE__ */
|
|
1331
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1384
1332
|
"a",
|
|
1385
1333
|
{
|
|
1386
1334
|
key: idx,
|
|
@@ -1397,7 +1345,7 @@ function Header({
|
|
|
1397
1345
|
item.label
|
|
1398
1346
|
);
|
|
1399
1347
|
}
|
|
1400
|
-
return /* @__PURE__ */
|
|
1348
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
1401
1349
|
"button",
|
|
1402
1350
|
{
|
|
1403
1351
|
key: idx,
|
|
@@ -1421,10 +1369,10 @@ function Header({
|
|
|
1421
1369
|
}
|
|
1422
1370
|
|
|
1423
1371
|
// src/SiteHeader.jsx
|
|
1424
|
-
var
|
|
1372
|
+
var import_react5 = __toESM(require("react"));
|
|
1425
1373
|
|
|
1426
1374
|
// src/FeedbackButton.jsx
|
|
1427
|
-
var
|
|
1375
|
+
var import_react4 = __toESM(require("react"));
|
|
1428
1376
|
var FEEDBACK_BASE_DEFAULT = "https://alpha.empowered.vote/feedback";
|
|
1429
1377
|
var HOST_FEATURE_MAP = {
|
|
1430
1378
|
"compass.empowered.vote": "compass",
|
|
@@ -1495,7 +1443,7 @@ function FeedbackButton({
|
|
|
1495
1443
|
cursor: "pointer"
|
|
1496
1444
|
};
|
|
1497
1445
|
const baseStyle = variant === "link" ? linkStyle2 : pillStyle;
|
|
1498
|
-
return /* @__PURE__ */
|
|
1446
|
+
return /* @__PURE__ */ import_react4.default.createElement(
|
|
1499
1447
|
"a",
|
|
1500
1448
|
{
|
|
1501
1449
|
href,
|
|
@@ -1559,11 +1507,11 @@ function SiteHeader({
|
|
|
1559
1507
|
if (secondaryAction === false) {
|
|
1560
1508
|
resolvedSecondary = void 0;
|
|
1561
1509
|
} else if (secondaryAction === void 0) {
|
|
1562
|
-
resolvedSecondary = /* @__PURE__ */
|
|
1510
|
+
resolvedSecondary = /* @__PURE__ */ import_react5.default.createElement(FeedbackButton, { feature: feedbackFeature });
|
|
1563
1511
|
} else {
|
|
1564
1512
|
resolvedSecondary = secondaryAction;
|
|
1565
1513
|
}
|
|
1566
|
-
return /* @__PURE__ */
|
|
1514
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
1567
1515
|
Header,
|
|
1568
1516
|
{
|
|
1569
1517
|
logoSrc,
|
|
@@ -1580,7 +1528,7 @@ function SiteHeader({
|
|
|
1580
1528
|
}
|
|
1581
1529
|
|
|
1582
1530
|
// src/FilterSidebar.jsx
|
|
1583
|
-
var
|
|
1531
|
+
var import_react6 = __toESM(require("react"));
|
|
1584
1532
|
function FilterSidebar({
|
|
1585
1533
|
title = "Filter by",
|
|
1586
1534
|
zipCode = "",
|
|
@@ -1734,14 +1682,14 @@ function FilterSidebar({
|
|
|
1734
1682
|
fontSize: fontSizes.sm
|
|
1735
1683
|
}
|
|
1736
1684
|
};
|
|
1737
|
-
return /* @__PURE__ */
|
|
1685
|
+
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
1686
|
"div",
|
|
1739
1687
|
{
|
|
1740
1688
|
ref: autocompleteContainerRef,
|
|
1741
1689
|
style: styles2.zipInputWrapper,
|
|
1742
1690
|
className: "ev-autocomplete-container"
|
|
1743
1691
|
}
|
|
1744
|
-
) : /* @__PURE__ */
|
|
1692
|
+
) : /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.zipInputWrapper }, /* @__PURE__ */ import_react6.default.createElement(
|
|
1745
1693
|
"input",
|
|
1746
1694
|
{
|
|
1747
1695
|
ref: zipInputRef,
|
|
@@ -1753,7 +1701,7 @@ function FilterSidebar({
|
|
|
1753
1701
|
style: styles2.zipInput,
|
|
1754
1702
|
"aria-label": "Search location"
|
|
1755
1703
|
}
|
|
1756
|
-
), /* @__PURE__ */
|
|
1704
|
+
), /* @__PURE__ */ import_react6.default.createElement(
|
|
1757
1705
|
"button",
|
|
1758
1706
|
{
|
|
1759
1707
|
type: "button",
|
|
@@ -1762,7 +1710,7 @@ function FilterSidebar({
|
|
|
1762
1710
|
"aria-label": "Clear ZIP code"
|
|
1763
1711
|
},
|
|
1764
1712
|
"\xD7"
|
|
1765
|
-
))), /* @__PURE__ */
|
|
1713
|
+
))), /* @__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
1714
|
"input",
|
|
1767
1715
|
{
|
|
1768
1716
|
type: "radio",
|
|
@@ -1772,18 +1720,18 @@ function FilterSidebar({
|
|
|
1772
1720
|
onChange: () => onFilterChange == null ? void 0 : onFilterChange(option.value),
|
|
1773
1721
|
style: styles2.radioInput
|
|
1774
1722
|
}
|
|
1775
|
-
), option.label))))), !isMobile && /* @__PURE__ */
|
|
1723
|
+
), 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
1724
|
"img",
|
|
1777
1725
|
{
|
|
1778
1726
|
src: buildingImageSrc,
|
|
1779
1727
|
alt: `${selectedFilter} government building`,
|
|
1780
1728
|
style: styles2.buildingImage
|
|
1781
1729
|
}
|
|
1782
|
-
) : /* @__PURE__ */
|
|
1730
|
+
) : /* @__PURE__ */ import_react6.default.createElement("div", { style: styles2.buildingPlaceholder }, "No image")));
|
|
1783
1731
|
}
|
|
1784
1732
|
|
|
1785
1733
|
// src/PoliticianCard.jsx
|
|
1786
|
-
var
|
|
1734
|
+
var import_react7 = __toESM(require("react"));
|
|
1787
1735
|
function PoliticianCard({
|
|
1788
1736
|
id,
|
|
1789
1737
|
imageSrc,
|
|
@@ -1935,7 +1883,7 @@ function PoliticianCard({
|
|
|
1935
1883
|
textTransform: "uppercase"
|
|
1936
1884
|
}
|
|
1937
1885
|
};
|
|
1938
|
-
const CompassIcon2 = () => /* @__PURE__ */
|
|
1886
|
+
const CompassIcon2 = () => /* @__PURE__ */ import_react7.default.createElement(
|
|
1939
1887
|
"svg",
|
|
1940
1888
|
{
|
|
1941
1889
|
style: styles2.compassIcon,
|
|
@@ -1943,7 +1891,7 @@ function PoliticianCard({
|
|
|
1943
1891
|
fill: "none",
|
|
1944
1892
|
xmlns: "http://www.w3.org/2000/svg"
|
|
1945
1893
|
},
|
|
1946
|
-
/* @__PURE__ */
|
|
1894
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
1947
1895
|
"polygon",
|
|
1948
1896
|
{
|
|
1949
1897
|
points: "12,1 21.5,6.5 21.5,17.5 12,23 2.5,17.5 2.5,6.5",
|
|
@@ -1953,13 +1901,13 @@ function PoliticianCard({
|
|
|
1953
1901
|
strokeLinejoin: "round"
|
|
1954
1902
|
}
|
|
1955
1903
|
),
|
|
1956
|
-
/* @__PURE__ */
|
|
1957
|
-
/* @__PURE__ */
|
|
1958
|
-
/* @__PURE__ */
|
|
1959
|
-
/* @__PURE__ */
|
|
1960
|
-
/* @__PURE__ */
|
|
1961
|
-
/* @__PURE__ */
|
|
1962
|
-
/* @__PURE__ */
|
|
1904
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "1", stroke: "currentColor", strokeWidth: "1" }),
|
|
1905
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1906
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "21.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1907
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "12", y2: "23", stroke: "currentColor", strokeWidth: "1" }),
|
|
1908
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "17.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1909
|
+
/* @__PURE__ */ import_react7.default.createElement("line", { x1: "12", y1: "12", x2: "2.5", y2: "6.5", stroke: "currentColor", strokeWidth: "1" }),
|
|
1910
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
1963
1911
|
"polygon",
|
|
1964
1912
|
{
|
|
1965
1913
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -1967,7 +1915,7 @@ function PoliticianCard({
|
|
|
1967
1915
|
opacity: "0.35"
|
|
1968
1916
|
}
|
|
1969
1917
|
),
|
|
1970
|
-
/* @__PURE__ */
|
|
1918
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
1971
1919
|
"polygon",
|
|
1972
1920
|
{
|
|
1973
1921
|
points: "12,4 18,7.5 18,16 12,19.5 7,15 5,8",
|
|
@@ -1978,8 +1926,8 @@ function PoliticianCard({
|
|
|
1978
1926
|
}
|
|
1979
1927
|
)
|
|
1980
1928
|
);
|
|
1981
|
-
const [imgError, setImgError] = (0,
|
|
1982
|
-
(0,
|
|
1929
|
+
const [imgError, setImgError] = (0, import_react7.useState)(false);
|
|
1930
|
+
(0, import_react7.useEffect)(() => {
|
|
1983
1931
|
setImgError(false);
|
|
1984
1932
|
}, [imageSrc]);
|
|
1985
1933
|
const getInitials = (n) => {
|
|
@@ -1988,7 +1936,7 @@ function PoliticianCard({
|
|
|
1988
1936
|
const initials = parts.length >= 2 ? parts[0][0] + parts[parts.length - 1][0] : ((_a = parts[0]) == null ? void 0 : _a[0]) || "?";
|
|
1989
1937
|
return initials.toUpperCase();
|
|
1990
1938
|
};
|
|
1991
|
-
return /* @__PURE__ */
|
|
1939
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
1992
1940
|
"div",
|
|
1993
1941
|
{
|
|
1994
1942
|
style: styles2.card,
|
|
@@ -2013,8 +1961,8 @@ function PoliticianCard({
|
|
|
2013
1961
|
}
|
|
2014
1962
|
}
|
|
2015
1963
|
},
|
|
2016
|
-
badge && /* @__PURE__ */
|
|
2017
|
-
/* @__PURE__ */
|
|
1964
|
+
badge && /* @__PURE__ */ import_react7.default.createElement("span", { style: styles2.badge }, badge),
|
|
1965
|
+
/* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.imageWrapper }, imageSrc && !imgError ? /* @__PURE__ */ import_react7.default.createElement(
|
|
2018
1966
|
"img",
|
|
2019
1967
|
{
|
|
2020
1968
|
src: imageSrc,
|
|
@@ -2022,9 +1970,9 @@ function PoliticianCard({
|
|
|
2022
1970
|
style: styles2.image,
|
|
2023
1971
|
onError: () => setImgError(true)
|
|
2024
1972
|
}
|
|
2025
|
-
) : /* @__PURE__ */
|
|
2026
|
-
/* @__PURE__ */
|
|
2027
|
-
onCompassClick && /* @__PURE__ */
|
|
1973
|
+
) : /* @__PURE__ */ import_react7.default.createElement("div", { style: styles2.imagePlaceholder }, getInitials(name))),
|
|
1974
|
+
/* @__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)),
|
|
1975
|
+
onCompassClick && /* @__PURE__ */ import_react7.default.createElement(
|
|
2028
1976
|
"button",
|
|
2029
1977
|
{
|
|
2030
1978
|
type: "button",
|
|
@@ -2039,16 +1987,16 @@ function PoliticianCard({
|
|
|
2039
1987
|
},
|
|
2040
1988
|
"aria-label": `View ${name}'s compass`
|
|
2041
1989
|
},
|
|
2042
|
-
/* @__PURE__ */
|
|
1990
|
+
/* @__PURE__ */ import_react7.default.createElement(CompassIcon2, null)
|
|
2043
1991
|
)
|
|
2044
1992
|
);
|
|
2045
1993
|
}
|
|
2046
1994
|
|
|
2047
1995
|
// src/CompassCardHorizontal.jsx
|
|
2048
|
-
var
|
|
1996
|
+
var import_react13 = __toESM(require("react"));
|
|
2049
1997
|
|
|
2050
1998
|
// src/PlaceholderRadar.jsx
|
|
2051
|
-
var
|
|
1999
|
+
var import_react8 = __toESM(require("react"));
|
|
2052
2000
|
function PlaceholderRadar({ size = 250, name = "" }) {
|
|
2053
2001
|
const cx = size / 2;
|
|
2054
2002
|
const cy = size / 2;
|
|
@@ -2061,7 +2009,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2061
2009
|
const outerPts = vertices.map(([x, y]) => `${x},${y}`).join(" ");
|
|
2062
2010
|
const midPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.6},${cy + (y - cy) * 0.6}`).join(" ");
|
|
2063
2011
|
const innerPts = vertices.map(([x, y]) => `${cx + (x - cx) * 0.3},${cy + (y - cy) * 0.3}`).join(" ");
|
|
2064
|
-
return /* @__PURE__ */
|
|
2012
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
2065
2013
|
"svg",
|
|
2066
2014
|
{
|
|
2067
2015
|
width: size,
|
|
@@ -2075,7 +2023,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2075
2023
|
flexShrink: 0
|
|
2076
2024
|
}
|
|
2077
2025
|
},
|
|
2078
|
-
vertices.map(([x, y], i) => /* @__PURE__ */
|
|
2026
|
+
vertices.map(([x, y], i) => /* @__PURE__ */ import_react8.default.createElement(
|
|
2079
2027
|
"line",
|
|
2080
2028
|
{
|
|
2081
2029
|
key: i,
|
|
@@ -2089,7 +2037,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2089
2037
|
opacity: "0.6"
|
|
2090
2038
|
}
|
|
2091
2039
|
)),
|
|
2092
|
-
/* @__PURE__ */
|
|
2040
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
2093
2041
|
"polygon",
|
|
2094
2042
|
{
|
|
2095
2043
|
points: innerPts,
|
|
@@ -2100,7 +2048,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2100
2048
|
opacity: "0.5"
|
|
2101
2049
|
}
|
|
2102
2050
|
),
|
|
2103
|
-
/* @__PURE__ */
|
|
2051
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
2104
2052
|
"polygon",
|
|
2105
2053
|
{
|
|
2106
2054
|
points: midPts,
|
|
@@ -2111,7 +2059,7 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2111
2059
|
opacity: "0.6"
|
|
2112
2060
|
}
|
|
2113
2061
|
),
|
|
2114
|
-
/* @__PURE__ */
|
|
2062
|
+
/* @__PURE__ */ import_react8.default.createElement(
|
|
2115
2063
|
"polygon",
|
|
2116
2064
|
{
|
|
2117
2065
|
points: outerPts,
|
|
@@ -2125,16 +2073,16 @@ function PlaceholderRadar({ size = 250, name = "" }) {
|
|
|
2125
2073
|
}
|
|
2126
2074
|
|
|
2127
2075
|
// src/CompassCardHorizontalMeta.jsx
|
|
2128
|
-
var
|
|
2076
|
+
var import_react12 = __toESM(require("react"));
|
|
2129
2077
|
|
|
2130
2078
|
// src/IconOverlay.jsx
|
|
2131
|
-
var
|
|
2132
|
-
var
|
|
2079
|
+
var import_react10 = __toESM(require("react"));
|
|
2080
|
+
var import_react11 = require("@floating-ui/react");
|
|
2133
2081
|
|
|
2134
2082
|
// src/icons.js
|
|
2135
|
-
var
|
|
2083
|
+
var import_react9 = __toESM(require("react"));
|
|
2136
2084
|
function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
2137
|
-
return /* @__PURE__ */
|
|
2085
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2138
2086
|
"svg",
|
|
2139
2087
|
{
|
|
2140
2088
|
width: size,
|
|
@@ -2147,13 +2095,13 @@ function BallotIcon({ size = 16, color = "currentColor" }) {
|
|
|
2147
2095
|
strokeLinejoin: "round",
|
|
2148
2096
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2149
2097
|
},
|
|
2150
|
-
/* @__PURE__ */
|
|
2151
|
-
/* @__PURE__ */
|
|
2152
|
-
/* @__PURE__ */
|
|
2098
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "m9 12 2 2 4-4" }),
|
|
2099
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z" }),
|
|
2100
|
+
/* @__PURE__ */ import_react9.default.createElement("path", { d: "M22 19H2" })
|
|
2153
2101
|
);
|
|
2154
2102
|
}
|
|
2155
2103
|
function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
2156
|
-
return /* @__PURE__ */
|
|
2104
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2157
2105
|
"svg",
|
|
2158
2106
|
{
|
|
2159
2107
|
width: size,
|
|
@@ -2166,27 +2114,27 @@ function CompassIcon({ size = 16, color = "currentColor" }) {
|
|
|
2166
2114
|
strokeLinejoin: "round",
|
|
2167
2115
|
xmlns: "http://www.w3.org/2000/svg"
|
|
2168
2116
|
},
|
|
2169
|
-
/* @__PURE__ */
|
|
2170
|
-
/* @__PURE__ */
|
|
2117
|
+
/* @__PURE__ */ import_react9.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
2118
|
+
/* @__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
2119
|
);
|
|
2172
2120
|
}
|
|
2173
2121
|
function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
2174
2122
|
let paths;
|
|
2175
2123
|
switch (branch) {
|
|
2176
2124
|
case "executive":
|
|
2177
|
-
paths = /* @__PURE__ */
|
|
2125
|
+
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
2126
|
break;
|
|
2179
2127
|
case "legislative":
|
|
2180
|
-
paths = /* @__PURE__ */
|
|
2128
|
+
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
2129
|
break;
|
|
2182
2130
|
case "judicial":
|
|
2183
|
-
paths = /* @__PURE__ */
|
|
2131
|
+
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
2132
|
break;
|
|
2185
2133
|
default:
|
|
2186
|
-
paths = /* @__PURE__ */
|
|
2134
|
+
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
2135
|
break;
|
|
2188
2136
|
}
|
|
2189
|
-
return /* @__PURE__ */
|
|
2137
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2190
2138
|
"svg",
|
|
2191
2139
|
{
|
|
2192
2140
|
width: size,
|
|
@@ -2205,24 +2153,24 @@ function BranchIcon({ size = 16, color = "currentColor", branch }) {
|
|
|
2205
2153
|
|
|
2206
2154
|
// src/IconOverlay.jsx
|
|
2207
2155
|
function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps = {}, onClick }) {
|
|
2208
|
-
const [isOpen, setIsOpen] = (0,
|
|
2209
|
-
const { refs, floatingStyles, context } = (0,
|
|
2156
|
+
const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
|
|
2157
|
+
const { refs, floatingStyles, context } = (0, import_react11.useFloating)({
|
|
2210
2158
|
open: isOpen,
|
|
2211
2159
|
onOpenChange: setIsOpen,
|
|
2212
|
-
middleware: [(0,
|
|
2213
|
-
whileElementsMounted:
|
|
2160
|
+
middleware: [(0, import_react11.offset)(8), (0, import_react11.flip)(), (0, import_react11.shift)({ padding: 4 })],
|
|
2161
|
+
whileElementsMounted: import_react11.autoUpdate
|
|
2214
2162
|
});
|
|
2215
|
-
const hover = (0,
|
|
2216
|
-
const focus2 = (0,
|
|
2217
|
-
const dismiss = (0,
|
|
2218
|
-
const role = (0,
|
|
2219
|
-
const { getReferenceProps, getFloatingProps } = (0,
|
|
2163
|
+
const hover = (0, import_react11.useHover)(context);
|
|
2164
|
+
const focus2 = (0, import_react11.useFocus)(context);
|
|
2165
|
+
const dismiss = (0, import_react11.useDismiss)(context);
|
|
2166
|
+
const role = (0, import_react11.useRole)(context, { role: "tooltip" });
|
|
2167
|
+
const { getReferenceProps, getFloatingProps } = (0, import_react11.useInteractions)([
|
|
2220
2168
|
hover,
|
|
2221
2169
|
focus2,
|
|
2222
2170
|
dismiss,
|
|
2223
2171
|
role
|
|
2224
2172
|
]);
|
|
2225
|
-
return /* @__PURE__ */
|
|
2173
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2226
2174
|
"span",
|
|
2227
2175
|
{
|
|
2228
2176
|
ref: refs.setReference,
|
|
@@ -2235,8 +2183,8 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2235
2183
|
onClick(e);
|
|
2236
2184
|
} : void 0
|
|
2237
2185
|
},
|
|
2238
|
-
/* @__PURE__ */
|
|
2239
|
-
), isOpen && /* @__PURE__ */
|
|
2186
|
+
/* @__PURE__ */ import_react10.default.createElement(IconComponent, { size, color, ...extraProps })
|
|
2187
|
+
), isOpen && /* @__PURE__ */ import_react10.default.createElement(import_react11.FloatingPortal, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2240
2188
|
"div",
|
|
2241
2189
|
{
|
|
2242
2190
|
ref: refs.setFloating,
|
|
@@ -2260,7 +2208,7 @@ function IconWithTooltip({ IconComponent, color, tooltip, size = 14, extraProps
|
|
|
2260
2208
|
function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
2261
2209
|
if (!ballot && !hasStances && !branch) return null;
|
|
2262
2210
|
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__ */
|
|
2211
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
2264
2212
|
"div",
|
|
2265
2213
|
{
|
|
2266
2214
|
style: {
|
|
@@ -2273,7 +2221,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2273
2221
|
// offset icon wrapper padding so icons align flush-left with text
|
|
2274
2222
|
}
|
|
2275
2223
|
},
|
|
2276
|
-
ballot && /* @__PURE__ */
|
|
2224
|
+
ballot && /* @__PURE__ */ import_react10.default.createElement(
|
|
2277
2225
|
IconWithTooltip,
|
|
2278
2226
|
{
|
|
2279
2227
|
IconComponent: BallotIcon,
|
|
@@ -2282,7 +2230,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2282
2230
|
size: 14
|
|
2283
2231
|
}
|
|
2284
2232
|
),
|
|
2285
|
-
hasStances && /* @__PURE__ */
|
|
2233
|
+
hasStances && /* @__PURE__ */ import_react10.default.createElement(
|
|
2286
2234
|
IconWithTooltip,
|
|
2287
2235
|
{
|
|
2288
2236
|
IconComponent: CompassIcon,
|
|
@@ -2292,7 +2240,7 @@ function IconOverlay({ ballot, hasStances, branch, onCompassClick }) {
|
|
|
2292
2240
|
onClick: onCompassClick
|
|
2293
2241
|
}
|
|
2294
2242
|
),
|
|
2295
|
-
branch && /* @__PURE__ */
|
|
2243
|
+
branch && /* @__PURE__ */ import_react10.default.createElement(
|
|
2296
2244
|
IconWithTooltip,
|
|
2297
2245
|
{
|
|
2298
2246
|
IconComponent: BranchIcon,
|
|
@@ -2312,20 +2260,20 @@ function CompassCardHorizontalMeta({
|
|
|
2312
2260
|
userAnswers
|
|
2313
2261
|
}) {
|
|
2314
2262
|
const titleText = surface === "elections" ? politician.office_running_for : politician.office_title;
|
|
2315
|
-
return /* @__PURE__ */
|
|
2263
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", { style: {
|
|
2316
2264
|
flex: 1,
|
|
2317
2265
|
minWidth: 0,
|
|
2318
2266
|
display: "flex",
|
|
2319
2267
|
flexDirection: "column",
|
|
2320
2268
|
gap: spacing[1]
|
|
2321
|
-
} }, /* @__PURE__ */
|
|
2269
|
+
} }, /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2322
2270
|
fontFamily: fonts.primary,
|
|
2323
2271
|
fontSize: fontSizes.lg,
|
|
2324
2272
|
fontWeight: fontWeights.semibold,
|
|
2325
2273
|
lineHeight: 1.4,
|
|
2326
2274
|
color: colors.evMutedBlue,
|
|
2327
2275
|
margin: 0
|
|
2328
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
2276
|
+
} }, politician.full_name), /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2329
2277
|
fontFamily: fonts.primary,
|
|
2330
2278
|
fontSize: fontSizes.sm,
|
|
2331
2279
|
fontWeight: fontWeights.semibold,
|
|
@@ -2336,7 +2284,7 @@ function CompassCardHorizontalMeta({
|
|
|
2336
2284
|
display: "-webkit-box",
|
|
2337
2285
|
WebkitLineClamp: 2,
|
|
2338
2286
|
WebkitBoxOrient: "vertical"
|
|
2339
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
2287
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react12.default.createElement("p", { style: {
|
|
2340
2288
|
fontFamily: fonts.primary,
|
|
2341
2289
|
fontSize: fontSizes.sm,
|
|
2342
2290
|
fontWeight: fontWeights.regular,
|
|
@@ -2346,7 +2294,7 @@ function CompassCardHorizontalMeta({
|
|
|
2346
2294
|
overflow: "hidden",
|
|
2347
2295
|
textOverflow: "ellipsis",
|
|
2348
2296
|
whiteSpace: "nowrap"
|
|
2349
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
2297
|
+
} }, politician.district_label), /* @__PURE__ */ import_react12.default.createElement(
|
|
2350
2298
|
IconOverlay,
|
|
2351
2299
|
{
|
|
2352
2300
|
ballot: politician.ballot || null,
|
|
@@ -2395,11 +2343,11 @@ function CompassCardHorizontal({
|
|
|
2395
2343
|
onClick
|
|
2396
2344
|
}) {
|
|
2397
2345
|
var _a;
|
|
2398
|
-
const [hovered, setHovered] = (0,
|
|
2399
|
-
const [focused, setFocused] = (0,
|
|
2400
|
-
const [imgError, setImgError] = (0,
|
|
2401
|
-
const [emptyCtaHovered, setEmptyCtaHovered] = (0,
|
|
2402
|
-
(0,
|
|
2346
|
+
const [hovered, setHovered] = (0, import_react13.useState)(false);
|
|
2347
|
+
const [focused, setFocused] = (0, import_react13.useState)(false);
|
|
2348
|
+
const [imgError, setImgError] = (0, import_react13.useState)(false);
|
|
2349
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react13.useState)(false);
|
|
2350
|
+
(0, import_react13.useEffect)(() => {
|
|
2403
2351
|
setImgError(false);
|
|
2404
2352
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2405
2353
|
const cardStyle = {
|
|
@@ -2423,7 +2371,7 @@ function CompassCardHorizontal({
|
|
|
2423
2371
|
function renderCompass() {
|
|
2424
2372
|
var _a2, _b, _c;
|
|
2425
2373
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2426
|
-
return /* @__PURE__ */
|
|
2374
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2427
2375
|
}
|
|
2428
2376
|
let topics = [];
|
|
2429
2377
|
let data = {};
|
|
@@ -2459,12 +2407,12 @@ function CompassCardHorizontal({
|
|
|
2459
2407
|
}, {}) : politician.stances;
|
|
2460
2408
|
}
|
|
2461
2409
|
if (topics.length === 0) {
|
|
2462
|
-
return /* @__PURE__ */
|
|
2410
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2463
2411
|
}
|
|
2464
2412
|
} catch (err) {
|
|
2465
|
-
return /* @__PURE__ */
|
|
2413
|
+
return /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: RADAR_SIZE, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2466
2414
|
}
|
|
2467
|
-
return /* @__PURE__ */
|
|
2415
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2468
2416
|
RadarChartCore,
|
|
2469
2417
|
{
|
|
2470
2418
|
topics,
|
|
@@ -2486,7 +2434,7 @@ function CompassCardHorizontal({
|
|
|
2486
2434
|
var _a2, _b, _c;
|
|
2487
2435
|
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
2436
|
if (imageSrc && !imgError) {
|
|
2489
|
-
return /* @__PURE__ */
|
|
2437
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2490
2438
|
"img",
|
|
2491
2439
|
{
|
|
2492
2440
|
src: imageSrc,
|
|
@@ -2504,7 +2452,7 @@ function CompassCardHorizontal({
|
|
|
2504
2452
|
}
|
|
2505
2453
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2506
2454
|
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__ */
|
|
2455
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2508
2456
|
width: "100%",
|
|
2509
2457
|
height: "100%",
|
|
2510
2458
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2518,7 +2466,7 @@ function CompassCardHorizontal({
|
|
|
2518
2466
|
} }, initials);
|
|
2519
2467
|
}
|
|
2520
2468
|
function renderEmptyVariant() {
|
|
2521
|
-
return /* @__PURE__ */
|
|
2469
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2522
2470
|
width: "100%",
|
|
2523
2471
|
height: "100%",
|
|
2524
2472
|
display: "flex",
|
|
@@ -2529,14 +2477,14 @@ function CompassCardHorizontal({
|
|
|
2529
2477
|
padding: "12px 14px",
|
|
2530
2478
|
boxSizing: "border-box",
|
|
2531
2479
|
backgroundColor: colorScales.teal["050"]
|
|
2532
|
-
} }, /* @__PURE__ */
|
|
2480
|
+
} }, /* @__PURE__ */ import_react13.default.createElement(PlaceholderRadar, { size: 140, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2533
2481
|
margin: 0,
|
|
2534
2482
|
fontSize: fontSizes.xs,
|
|
2535
2483
|
color: colors.textMuted,
|
|
2536
2484
|
textAlign: "center",
|
|
2537
2485
|
lineHeight: 1.4,
|
|
2538
2486
|
fontFamily: fonts.primary
|
|
2539
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
2487
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react13.default.createElement(
|
|
2540
2488
|
"button",
|
|
2541
2489
|
{
|
|
2542
2490
|
type: "button",
|
|
@@ -2564,7 +2512,7 @@ function CompassCardHorizontal({
|
|
|
2564
2512
|
));
|
|
2565
2513
|
}
|
|
2566
2514
|
function renderUnavailablePlate(message = "Compass currently unavailable for this role.") {
|
|
2567
|
-
return /* @__PURE__ */
|
|
2515
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2568
2516
|
width: "100%",
|
|
2569
2517
|
height: "100%",
|
|
2570
2518
|
backgroundColor: colorScales.teal["050"],
|
|
@@ -2573,7 +2521,7 @@ function CompassCardHorizontal({
|
|
|
2573
2521
|
justifyContent: "center",
|
|
2574
2522
|
padding: spacing[4],
|
|
2575
2523
|
boxSizing: "border-box"
|
|
2576
|
-
} }, /* @__PURE__ */
|
|
2524
|
+
} }, /* @__PURE__ */ import_react13.default.createElement("p", { style: {
|
|
2577
2525
|
fontSize: fontSizes.sm,
|
|
2578
2526
|
fontWeight: fontWeights.semibold,
|
|
2579
2527
|
lineHeight: 1.4,
|
|
@@ -2592,7 +2540,7 @@ function CompassCardHorizontal({
|
|
|
2592
2540
|
const name = (politician == null ? void 0 : politician.full_name) || "this official";
|
|
2593
2541
|
return renderUnavailablePlate(`No compass stances on file for ${name} yet.`);
|
|
2594
2542
|
}
|
|
2595
|
-
return /* @__PURE__ */
|
|
2543
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2596
2544
|
width: "100%",
|
|
2597
2545
|
height: "100%",
|
|
2598
2546
|
display: "flex",
|
|
@@ -2602,7 +2550,7 @@ function CompassCardHorizontal({
|
|
|
2602
2550
|
boxSizing: "border-box"
|
|
2603
2551
|
} }, renderCompass());
|
|
2604
2552
|
}
|
|
2605
|
-
return /* @__PURE__ */
|
|
2553
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
2606
2554
|
"div",
|
|
2607
2555
|
{
|
|
2608
2556
|
role: "article",
|
|
@@ -2621,7 +2569,7 @@ function CompassCardHorizontal({
|
|
|
2621
2569
|
onFocus: () => setFocused(true),
|
|
2622
2570
|
onBlur: () => setFocused(false)
|
|
2623
2571
|
},
|
|
2624
|
-
/* @__PURE__ */
|
|
2572
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: slotStyle }, renderSlotContent(), surface === "elections" && politician.running_unopposed && /* @__PURE__ */ import_react13.default.createElement("div", { style: {
|
|
2625
2573
|
position: "absolute",
|
|
2626
2574
|
bottom: "15px",
|
|
2627
2575
|
left: 0,
|
|
@@ -2636,7 +2584,7 @@ function CompassCardHorizontal({
|
|
|
2636
2584
|
padding: "6px 0",
|
|
2637
2585
|
pointerEvents: "none"
|
|
2638
2586
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed")),
|
|
2639
|
-
/* @__PURE__ */
|
|
2587
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { style: { flex: 1, minWidth: 0, padding: spacing[4], paddingLeft: spacing[3] } }, /* @__PURE__ */ import_react13.default.createElement(
|
|
2640
2588
|
CompassCardHorizontalMeta,
|
|
2641
2589
|
{
|
|
2642
2590
|
politician,
|
|
@@ -2648,7 +2596,7 @@ function CompassCardHorizontal({
|
|
|
2648
2596
|
}
|
|
2649
2597
|
|
|
2650
2598
|
// src/CompassCardVertical.jsx
|
|
2651
|
-
var
|
|
2599
|
+
var import_react14 = __toESM(require("react"));
|
|
2652
2600
|
var RADAR_SIZE2 = 400;
|
|
2653
2601
|
function CompassCardVertical({
|
|
2654
2602
|
politician,
|
|
@@ -2662,11 +2610,11 @@ function CompassCardVertical({
|
|
|
2662
2610
|
onClick
|
|
2663
2611
|
}) {
|
|
2664
2612
|
var _a;
|
|
2665
|
-
const [hovered, setHovered] = (0,
|
|
2666
|
-
const [focused, setFocused] = (0,
|
|
2667
|
-
const [imgError, setImgError] = (0,
|
|
2668
|
-
const [emptyCtaHovered, setEmptyCtaHovered] = (0,
|
|
2669
|
-
(0,
|
|
2613
|
+
const [hovered, setHovered] = (0, import_react14.useState)(false);
|
|
2614
|
+
const [focused, setFocused] = (0, import_react14.useState)(false);
|
|
2615
|
+
const [imgError, setImgError] = (0, import_react14.useState)(false);
|
|
2616
|
+
const [emptyCtaHovered, setEmptyCtaHovered] = (0, import_react14.useState)(false);
|
|
2617
|
+
(0, import_react14.useEffect)(() => {
|
|
2670
2618
|
setImgError(false);
|
|
2671
2619
|
}, [politician == null ? void 0 : politician.photo_origin_url]);
|
|
2672
2620
|
const cardStyle = {
|
|
@@ -2689,7 +2637,7 @@ function CompassCardVertical({
|
|
|
2689
2637
|
function renderCompass() {
|
|
2690
2638
|
var _a2, _b, _c;
|
|
2691
2639
|
if (!userAnswers || userAnswers.length === 0) {
|
|
2692
|
-
return /* @__PURE__ */
|
|
2640
|
+
return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2693
2641
|
}
|
|
2694
2642
|
let topics = [];
|
|
2695
2643
|
let data = {};
|
|
@@ -2725,17 +2673,17 @@ function CompassCardVertical({
|
|
|
2725
2673
|
}, {}) : politician.stances;
|
|
2726
2674
|
}
|
|
2727
2675
|
if (topics.length === 0) {
|
|
2728
|
-
return /* @__PURE__ */
|
|
2676
|
+
return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2729
2677
|
}
|
|
2730
2678
|
} catch {
|
|
2731
|
-
return /* @__PURE__ */
|
|
2679
|
+
return /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: RADAR_SIZE2, name: (politician == null ? void 0 : politician.full_name) || "" });
|
|
2732
2680
|
}
|
|
2733
2681
|
const unansweredSpokes = {};
|
|
2734
2682
|
for (const t of topics) {
|
|
2735
2683
|
const v = compareData[t.short_title];
|
|
2736
2684
|
if (!v || Number(v) === 0) unansweredSpokes[t.short_title] = true;
|
|
2737
2685
|
}
|
|
2738
|
-
return /* @__PURE__ */
|
|
2686
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: { width: RADAR_SIZE2 + 240, maxWidth: "100%", flexShrink: 0 } }, /* @__PURE__ */ import_react14.default.createElement(
|
|
2739
2687
|
RadarChartCore,
|
|
2740
2688
|
{
|
|
2741
2689
|
topics,
|
|
@@ -2770,7 +2718,7 @@ function CompassCardVertical({
|
|
|
2770
2718
|
justifyContent: "center"
|
|
2771
2719
|
};
|
|
2772
2720
|
if (imageSrc && !imgError) {
|
|
2773
|
-
return /* @__PURE__ */
|
|
2721
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react14.default.createElement(
|
|
2774
2722
|
"img",
|
|
2775
2723
|
{
|
|
2776
2724
|
src: imageSrc,
|
|
@@ -2788,7 +2736,7 @@ function CompassCardVertical({
|
|
|
2788
2736
|
}
|
|
2789
2737
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2790
2738
|
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__ */
|
|
2739
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: baseStyle }, /* @__PURE__ */ import_react14.default.createElement("span", { style: {
|
|
2792
2740
|
color: colors.textWhite,
|
|
2793
2741
|
fontFamily: fonts.primary,
|
|
2794
2742
|
fontWeight: fontWeights.bold,
|
|
@@ -2799,7 +2747,7 @@ function CompassCardVertical({
|
|
|
2799
2747
|
var _a2, _b, _c;
|
|
2800
2748
|
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
2749
|
if (imageSrc && !imgError) {
|
|
2802
|
-
return /* @__PURE__ */
|
|
2750
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
2803
2751
|
"img",
|
|
2804
2752
|
{
|
|
2805
2753
|
src: imageSrc,
|
|
@@ -2818,7 +2766,7 @@ function CompassCardVertical({
|
|
|
2818
2766
|
}
|
|
2819
2767
|
const parts = ((politician == null ? void 0 : politician.full_name) || "").split(" ").filter(Boolean);
|
|
2820
2768
|
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__ */
|
|
2769
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2822
2770
|
width: RADAR_SIZE2,
|
|
2823
2771
|
height: RADAR_SIZE2,
|
|
2824
2772
|
backgroundColor: colors.evMutedBlue,
|
|
@@ -2833,7 +2781,7 @@ function CompassCardVertical({
|
|
|
2833
2781
|
} }, initials);
|
|
2834
2782
|
}
|
|
2835
2783
|
function renderEmptyVariant() {
|
|
2836
|
-
return /* @__PURE__ */
|
|
2784
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2837
2785
|
width: "100%",
|
|
2838
2786
|
height: "100%",
|
|
2839
2787
|
flex: 1,
|
|
@@ -2846,14 +2794,14 @@ function CompassCardVertical({
|
|
|
2846
2794
|
boxSizing: "border-box",
|
|
2847
2795
|
backgroundColor: colorScales.teal["050"],
|
|
2848
2796
|
borderRadius: borderRadius.md
|
|
2849
|
-
} }, /* @__PURE__ */
|
|
2797
|
+
} }, /* @__PURE__ */ import_react14.default.createElement(PlaceholderRadar, { size: 220, name: (politician == null ? void 0 : politician.full_name) || "" }), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2850
2798
|
margin: 0,
|
|
2851
2799
|
fontSize: fontSizes.sm,
|
|
2852
2800
|
color: colors.textMuted,
|
|
2853
2801
|
textAlign: "center",
|
|
2854
2802
|
lineHeight: 1.4,
|
|
2855
2803
|
fontFamily: fonts.primary
|
|
2856
|
-
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */
|
|
2804
|
+
} }, "Calibrate your compass to see how you align with ", (politician == null ? void 0 : politician.full_name) || "this official"), /* @__PURE__ */ import_react14.default.createElement(
|
|
2857
2805
|
"button",
|
|
2858
2806
|
{
|
|
2859
2807
|
type: "button",
|
|
@@ -2879,7 +2827,7 @@ function CompassCardVertical({
|
|
|
2879
2827
|
));
|
|
2880
2828
|
}
|
|
2881
2829
|
function renderUnavailablePlate(message) {
|
|
2882
|
-
return /* @__PURE__ */
|
|
2830
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2883
2831
|
width: "100%",
|
|
2884
2832
|
height: "100%",
|
|
2885
2833
|
flex: 1,
|
|
@@ -2890,7 +2838,7 @@ function CompassCardVertical({
|
|
|
2890
2838
|
justifyContent: "center",
|
|
2891
2839
|
padding: spacing[6],
|
|
2892
2840
|
boxSizing: "border-box"
|
|
2893
|
-
} }, /* @__PURE__ */
|
|
2841
|
+
} }, /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2894
2842
|
fontSize: fontSizes.base,
|
|
2895
2843
|
fontWeight: fontWeights.semibold,
|
|
2896
2844
|
lineHeight: 1.4,
|
|
@@ -2911,7 +2859,7 @@ function CompassCardVertical({
|
|
|
2911
2859
|
}
|
|
2912
2860
|
return renderCompass();
|
|
2913
2861
|
}
|
|
2914
|
-
return /* @__PURE__ */
|
|
2862
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
2915
2863
|
"div",
|
|
2916
2864
|
{
|
|
2917
2865
|
role: "article",
|
|
@@ -2930,21 +2878,21 @@ function CompassCardVertical({
|
|
|
2930
2878
|
onFocus: () => setFocused(true),
|
|
2931
2879
|
onBlur: () => setFocused(false)
|
|
2932
2880
|
},
|
|
2933
|
-
/* @__PURE__ */
|
|
2881
|
+
/* @__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
2882
|
fontFamily: fonts.primary,
|
|
2935
2883
|
fontSize: fontSizes.xl,
|
|
2936
2884
|
fontWeight: fontWeights.semibold,
|
|
2937
2885
|
lineHeight: 1.3,
|
|
2938
2886
|
color: colors.evMutedBlue,
|
|
2939
2887
|
margin: 0
|
|
2940
|
-
} }, politician.full_name), /* @__PURE__ */
|
|
2888
|
+
} }, politician.full_name), /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2941
2889
|
fontFamily: fonts.primary,
|
|
2942
2890
|
fontSize: fontSizes.sm,
|
|
2943
2891
|
fontWeight: fontWeights.semibold,
|
|
2944
2892
|
lineHeight: 1.4,
|
|
2945
2893
|
color: colors.textSecondary,
|
|
2946
2894
|
margin: 0
|
|
2947
|
-
} }, titleText || ""), politician.district_label && /* @__PURE__ */
|
|
2895
|
+
} }, titleText || ""), politician.district_label && /* @__PURE__ */ import_react14.default.createElement("p", { style: {
|
|
2948
2896
|
fontFamily: fonts.primary,
|
|
2949
2897
|
fontSize: fontSizes.sm,
|
|
2950
2898
|
fontWeight: fontWeights.regular,
|
|
@@ -2954,7 +2902,7 @@ function CompassCardVertical({
|
|
|
2954
2902
|
overflow: "hidden",
|
|
2955
2903
|
textOverflow: "ellipsis",
|
|
2956
2904
|
whiteSpace: "nowrap"
|
|
2957
|
-
} }, politician.district_label), /* @__PURE__ */
|
|
2905
|
+
} }, politician.district_label), /* @__PURE__ */ import_react14.default.createElement("div", { style: { marginTop: "auto" } }, /* @__PURE__ */ import_react14.default.createElement(
|
|
2958
2906
|
IconOverlay,
|
|
2959
2907
|
{
|
|
2960
2908
|
ballot: politician.ballot || null,
|
|
@@ -2962,7 +2910,7 @@ function CompassCardVertical({
|
|
|
2962
2910
|
branch: politician.branch || null
|
|
2963
2911
|
}
|
|
2964
2912
|
)))),
|
|
2965
|
-
surface === "elections" && politician.withdrawn && /* @__PURE__ */
|
|
2913
|
+
surface === "elections" && politician.withdrawn && /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2966
2914
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
2967
2915
|
backgroundColor: "rgba(120,0,0,0.85)",
|
|
2968
2916
|
color: "#fff",
|
|
@@ -2974,7 +2922,7 @@ function CompassCardVertical({
|
|
|
2974
2922
|
padding: "6px 0",
|
|
2975
2923
|
borderRadius: borderRadius.sm
|
|
2976
2924
|
} }, "Withdrawn"),
|
|
2977
|
-
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */
|
|
2925
|
+
surface === "elections" && !politician.withdrawn && politician.running_unopposed && /* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2978
2926
|
margin: `0 ${spacing[4]} ${spacing[3]}`,
|
|
2979
2927
|
backgroundColor: "rgba(0,0,0,0.75)",
|
|
2980
2928
|
color: "#fff",
|
|
@@ -2986,7 +2934,7 @@ function CompassCardVertical({
|
|
|
2986
2934
|
padding: "6px 0",
|
|
2987
2935
|
borderRadius: borderRadius.sm
|
|
2988
2936
|
} }, typeof politician.running_unopposed === "string" ? politician.running_unopposed : "Running Unopposed"),
|
|
2989
|
-
/* @__PURE__ */
|
|
2937
|
+
/* @__PURE__ */ import_react14.default.createElement("div", { style: {
|
|
2990
2938
|
flex: 1,
|
|
2991
2939
|
padding: spacing[4],
|
|
2992
2940
|
paddingTop: 0,
|
|
@@ -3000,7 +2948,7 @@ function CompassCardVertical({
|
|
|
3000
2948
|
}
|
|
3001
2949
|
|
|
3002
2950
|
// src/CompassKey.jsx
|
|
3003
|
-
var
|
|
2951
|
+
var import_react15 = __toESM(require("react"));
|
|
3004
2952
|
|
|
3005
2953
|
// src/evContext.js
|
|
3006
2954
|
var DEFAULT_BROKER_URL = "https://ev-context.empowered.vote/";
|
|
@@ -3245,9 +3193,9 @@ var evContext = {
|
|
|
3245
3193
|
|
|
3246
3194
|
// src/CompassKey.jsx
|
|
3247
3195
|
function CompassKey({ compact = false } = {}) {
|
|
3248
|
-
const [dismissed, setDismissed] = (0,
|
|
3249
|
-
const [loaded, setLoaded] = (0,
|
|
3250
|
-
(0,
|
|
3196
|
+
const [dismissed, setDismissed] = (0, import_react15.useState)(false);
|
|
3197
|
+
const [loaded, setLoaded] = (0, import_react15.useState)(false);
|
|
3198
|
+
(0, import_react15.useEffect)(() => {
|
|
3251
3199
|
let cancelled = false;
|
|
3252
3200
|
evContext.get().then((shared) => {
|
|
3253
3201
|
if (cancelled) return;
|
|
@@ -3277,7 +3225,7 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3277
3225
|
persistDismissed(false);
|
|
3278
3226
|
}
|
|
3279
3227
|
if (!loaded) return null;
|
|
3280
|
-
const Swatch = ({ color, label, ring }) => /* @__PURE__ */
|
|
3228
|
+
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
3229
|
display: "inline-block",
|
|
3282
3230
|
width: 12,
|
|
3283
3231
|
height: 12,
|
|
@@ -3285,9 +3233,9 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3285
3233
|
background: color,
|
|
3286
3234
|
border: `2px solid ${ring || "#fff"}`,
|
|
3287
3235
|
boxShadow: "0 0 0 1px rgba(0,0,0,0.08)"
|
|
3288
|
-
} }), /* @__PURE__ */
|
|
3236
|
+
} }), /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, label));
|
|
3289
3237
|
if (dismissed) {
|
|
3290
|
-
return /* @__PURE__ */
|
|
3238
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
3291
3239
|
"button",
|
|
3292
3240
|
{
|
|
3293
3241
|
type: "button",
|
|
@@ -3308,11 +3256,11 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3308
3256
|
cursor: "pointer"
|
|
3309
3257
|
}
|
|
3310
3258
|
},
|
|
3311
|
-
/* @__PURE__ */
|
|
3259
|
+
/* @__PURE__ */ import_react15.default.createElement("span", { "aria-hidden": "true" }, "?"),
|
|
3312
3260
|
" Compass key"
|
|
3313
3261
|
);
|
|
3314
3262
|
}
|
|
3315
|
-
return /* @__PURE__ */
|
|
3263
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
3316
3264
|
"div",
|
|
3317
3265
|
{
|
|
3318
3266
|
role: "region",
|
|
@@ -3331,17 +3279,17 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3331
3279
|
boxSizing: "border-box"
|
|
3332
3280
|
}
|
|
3333
3281
|
},
|
|
3334
|
-
!compact && /* @__PURE__ */
|
|
3282
|
+
!compact && /* @__PURE__ */ import_react15.default.createElement("span", { style: {
|
|
3335
3283
|
fontSize: fontSizes.xs,
|
|
3336
3284
|
fontWeight: fontWeights.semibold,
|
|
3337
3285
|
color: colors.textMuted,
|
|
3338
3286
|
textTransform: "uppercase",
|
|
3339
3287
|
letterSpacing: "0.5px"
|
|
3340
3288
|
} }, "Compass key"),
|
|
3341
|
-
/* @__PURE__ */
|
|
3342
|
-
/* @__PURE__ */
|
|
3343
|
-
/* @__PURE__ */
|
|
3344
|
-
/* @__PURE__ */
|
|
3289
|
+
/* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#7C6B9E", label: "You" }),
|
|
3290
|
+
/* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#5A9A6E", label: "Politician" }),
|
|
3291
|
+
/* @__PURE__ */ import_react15.default.createElement(Swatch, { color: "#fed12e", label: "Match" }),
|
|
3292
|
+
/* @__PURE__ */ import_react15.default.createElement("span", { style: { display: "inline-flex", alignItems: "center", gap: spacing[1] } }, /* @__PURE__ */ import_react15.default.createElement("span", { style: {
|
|
3345
3293
|
fontSize: fontSizes.xs,
|
|
3346
3294
|
fontWeight: fontWeights.semibold,
|
|
3347
3295
|
color: "#9ca3af",
|
|
@@ -3349,8 +3297,8 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3349
3297
|
textDecoration: "underline",
|
|
3350
3298
|
textDecorationStyle: "dashed",
|
|
3351
3299
|
textUnderlineOffset: "3px"
|
|
3352
|
-
} }, "Topic"), /* @__PURE__ */
|
|
3353
|
-
/* @__PURE__ */
|
|
3300
|
+
} }, "Topic"), /* @__PURE__ */ import_react15.default.createElement("span", { style: { fontSize: fontSizes.xs, color: colors.textSecondary, fontFamily: fonts.primary } }, "= no stance")),
|
|
3301
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
3354
3302
|
"button",
|
|
3355
3303
|
{
|
|
3356
3304
|
type: "button",
|
|
@@ -3373,7 +3321,7 @@ function CompassKey({ compact = false } = {}) {
|
|
|
3373
3321
|
}
|
|
3374
3322
|
|
|
3375
3323
|
// src/CategorySection.jsx
|
|
3376
|
-
var
|
|
3324
|
+
var import_react16 = __toESM(require("react"));
|
|
3377
3325
|
function CategorySection({
|
|
3378
3326
|
title,
|
|
3379
3327
|
infoTooltip,
|
|
@@ -3383,7 +3331,7 @@ function CategorySection({
|
|
|
3383
3331
|
tier
|
|
3384
3332
|
}) {
|
|
3385
3333
|
var _a, _b;
|
|
3386
|
-
const [showTooltip, setShowTooltip] = (0,
|
|
3334
|
+
const [showTooltip, setShowTooltip] = (0, import_react16.useState)(false);
|
|
3387
3335
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3388
3336
|
const styles2 = {
|
|
3389
3337
|
section: {
|
|
@@ -3451,7 +3399,7 @@ function CategorySection({
|
|
|
3451
3399
|
gap: spacing[4]
|
|
3452
3400
|
}
|
|
3453
3401
|
};
|
|
3454
|
-
return /* @__PURE__ */
|
|
3402
|
+
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
3403
|
"button",
|
|
3456
3404
|
{
|
|
3457
3405
|
type: "button",
|
|
@@ -3463,8 +3411,8 @@ function CategorySection({
|
|
|
3463
3411
|
"aria-label": `Info about ${title}`
|
|
3464
3412
|
},
|
|
3465
3413
|
"i",
|
|
3466
|
-
showTooltip && /* @__PURE__ */
|
|
3467
|
-
), websiteUrl && /* @__PURE__ */
|
|
3414
|
+
showTooltip && /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.tooltip, role: "tooltip" }, infoTooltip)
|
|
3415
|
+
), websiteUrl && /* @__PURE__ */ import_react16.default.createElement(
|
|
3468
3416
|
"a",
|
|
3469
3417
|
{
|
|
3470
3418
|
href: websiteUrl,
|
|
@@ -3473,7 +3421,7 @@ function CategorySection({
|
|
|
3473
3421
|
style: styles2.externalLink,
|
|
3474
3422
|
"aria-label": `Visit official website for ${title}`
|
|
3475
3423
|
},
|
|
3476
|
-
/* @__PURE__ */
|
|
3424
|
+
/* @__PURE__ */ import_react16.default.createElement(
|
|
3477
3425
|
"svg",
|
|
3478
3426
|
{
|
|
3479
3427
|
viewBox: "0 0 24 24",
|
|
@@ -3481,7 +3429,7 @@ function CategorySection({
|
|
|
3481
3429
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3482
3430
|
style: { width: "14px", height: "14px" }
|
|
3483
3431
|
},
|
|
3484
|
-
/* @__PURE__ */
|
|
3432
|
+
/* @__PURE__ */ import_react16.default.createElement(
|
|
3485
3433
|
"path",
|
|
3486
3434
|
{
|
|
3487
3435
|
d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14",
|
|
@@ -3492,11 +3440,11 @@ function CategorySection({
|
|
|
3492
3440
|
}
|
|
3493
3441
|
)
|
|
3494
3442
|
)
|
|
3495
|
-
)), /* @__PURE__ */
|
|
3443
|
+
)), /* @__PURE__ */ import_react16.default.createElement("div", { style: styles2.grid, className: "ev-category-grid" }, children));
|
|
3496
3444
|
}
|
|
3497
3445
|
|
|
3498
3446
|
// src/SubGroupSection.jsx
|
|
3499
|
-
var
|
|
3447
|
+
var import_react17 = __toESM(require("react"));
|
|
3500
3448
|
function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap, justifyContent }) {
|
|
3501
3449
|
const styles2 = {
|
|
3502
3450
|
section: {
|
|
@@ -3531,7 +3479,7 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3531
3479
|
width: "100%"
|
|
3532
3480
|
}
|
|
3533
3481
|
};
|
|
3534
|
-
return /* @__PURE__ */
|
|
3482
|
+
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
3483
|
"a",
|
|
3536
3484
|
{
|
|
3537
3485
|
href: websiteUrl,
|
|
@@ -3539,12 +3487,12 @@ function SubGroupSection({ title, websiteUrl, children, gridTemplateColumns, gap
|
|
|
3539
3487
|
rel: "noopener noreferrer",
|
|
3540
3488
|
style: styles2.link
|
|
3541
3489
|
},
|
|
3542
|
-
/* @__PURE__ */
|
|
3543
|
-
)), /* @__PURE__ */
|
|
3490
|
+
/* @__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" }))
|
|
3491
|
+
)), /* @__PURE__ */ import_react17.default.createElement("div", { style: styles2.grid, className: "ev-subgroup-grid" }, children));
|
|
3544
3492
|
}
|
|
3545
3493
|
|
|
3546
3494
|
// src/GovernmentBodySection.jsx
|
|
3547
|
-
var
|
|
3495
|
+
var import_react18 = __toESM(require("react"));
|
|
3548
3496
|
function GovernmentBodySection({
|
|
3549
3497
|
title,
|
|
3550
3498
|
websiteUrl,
|
|
@@ -3553,7 +3501,7 @@ function GovernmentBodySection({
|
|
|
3553
3501
|
children
|
|
3554
3502
|
}) {
|
|
3555
3503
|
var _a;
|
|
3556
|
-
const [expanded, setExpanded] = (0,
|
|
3504
|
+
const [expanded, setExpanded] = (0, import_react18.useState)(defaultExpanded);
|
|
3557
3505
|
const tierStyle = tier ? tierColors[tier] : null;
|
|
3558
3506
|
const accentColor = (_a = tierStyle == null ? void 0 : tierStyle.accent) != null ? _a : colors.borderMedium;
|
|
3559
3507
|
const styles2 = {
|
|
@@ -3593,7 +3541,7 @@ function GovernmentBodySection({
|
|
|
3593
3541
|
display: expanded ? "block" : "none"
|
|
3594
3542
|
}
|
|
3595
3543
|
};
|
|
3596
|
-
return /* @__PURE__ */
|
|
3544
|
+
return /* @__PURE__ */ import_react18.default.createElement("section", { style: styles2.section, className: "ev-gov-body-section" }, /* @__PURE__ */ import_react18.default.createElement(
|
|
3597
3545
|
"div",
|
|
3598
3546
|
{
|
|
3599
3547
|
style: styles2.header,
|
|
@@ -3609,8 +3557,8 @@ function GovernmentBodySection({
|
|
|
3609
3557
|
"aria-expanded": expanded,
|
|
3610
3558
|
"aria-label": `${expanded ? "Collapse" : "Expand"} ${title}`
|
|
3611
3559
|
},
|
|
3612
|
-
/* @__PURE__ */
|
|
3613
|
-
websiteUrl && /* @__PURE__ */
|
|
3560
|
+
/* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.title }, title),
|
|
3561
|
+
websiteUrl && /* @__PURE__ */ import_react18.default.createElement(
|
|
3614
3562
|
"a",
|
|
3615
3563
|
{
|
|
3616
3564
|
href: websiteUrl,
|
|
@@ -3620,14 +3568,14 @@ function GovernmentBodySection({
|
|
|
3620
3568
|
onClick: (e) => e.stopPropagation(),
|
|
3621
3569
|
"aria-label": `Visit ${title} website`
|
|
3622
3570
|
},
|
|
3623
|
-
/* @__PURE__ */
|
|
3571
|
+
/* @__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
3572
|
),
|
|
3625
|
-
/* @__PURE__ */
|
|
3626
|
-
), /* @__PURE__ */
|
|
3573
|
+
/* @__PURE__ */ import_react18.default.createElement("span", { style: styles2.toggle, "aria-hidden": "true" }, "\u25BC")
|
|
3574
|
+
), /* @__PURE__ */ import_react18.default.createElement("div", { style: styles2.content }, children));
|
|
3627
3575
|
}
|
|
3628
3576
|
|
|
3629
3577
|
// src/SocialLinks.jsx
|
|
3630
|
-
var
|
|
3578
|
+
var import_react19 = __toESM(require("react"));
|
|
3631
3579
|
var SOCIAL_PLATFORMS = [
|
|
3632
3580
|
{ test: /facebook\.com/i, platform: "facebook" },
|
|
3633
3581
|
{ test: /twitter\.com|x\.com/i, platform: "twitter" },
|
|
@@ -3698,7 +3646,7 @@ function SocialLinks({
|
|
|
3698
3646
|
}
|
|
3699
3647
|
};
|
|
3700
3648
|
const platformIconMap = {
|
|
3701
|
-
twitter: /* @__PURE__ */
|
|
3649
|
+
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
3650
|
"path",
|
|
3703
3651
|
{
|
|
3704
3652
|
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 +3656,7 @@ function SocialLinks({
|
|
|
3708
3656
|
strokeLinejoin: "round"
|
|
3709
3657
|
}
|
|
3710
3658
|
)),
|
|
3711
|
-
facebook: /* @__PURE__ */
|
|
3659
|
+
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
3660
|
"path",
|
|
3713
3661
|
{
|
|
3714
3662
|
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 +3666,8 @@ function SocialLinks({
|
|
|
3718
3666
|
strokeLinejoin: "round"
|
|
3719
3667
|
}
|
|
3720
3668
|
)),
|
|
3721
|
-
instagram: /* @__PURE__ */
|
|
3722
|
-
linkedin: /* @__PURE__ */
|
|
3669
|
+
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" })),
|
|
3670
|
+
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
3671
|
"path",
|
|
3724
3672
|
{
|
|
3725
3673
|
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 +3676,8 @@ function SocialLinks({
|
|
|
3728
3676
|
strokeLinecap: "round",
|
|
3729
3677
|
strokeLinejoin: "round"
|
|
3730
3678
|
}
|
|
3731
|
-
), /* @__PURE__ */
|
|
3732
|
-
youtube: /* @__PURE__ */
|
|
3679
|
+
), /* @__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" })),
|
|
3680
|
+
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
3681
|
};
|
|
3734
3682
|
const links = [
|
|
3735
3683
|
{
|
|
@@ -3755,7 +3703,7 @@ function SocialLinks({
|
|
|
3755
3703
|
{
|
|
3756
3704
|
href: website,
|
|
3757
3705
|
label: "Website",
|
|
3758
|
-
icon: /* @__PURE__ */
|
|
3706
|
+
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
3707
|
"path",
|
|
3760
3708
|
{
|
|
3761
3709
|
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 +3733,7 @@ function SocialLinks({
|
|
|
3785
3733
|
if (links.length === 0) {
|
|
3786
3734
|
return null;
|
|
3787
3735
|
}
|
|
3788
|
-
return /* @__PURE__ */
|
|
3736
|
+
return /* @__PURE__ */ import_react19.default.createElement("div", { style: styles2.container, className: "ev-social-links" }, links.map((link) => /* @__PURE__ */ import_react19.default.createElement(
|
|
3789
3737
|
"a",
|
|
3790
3738
|
{
|
|
3791
3739
|
key: link.label,
|
|
@@ -3808,7 +3756,7 @@ function SocialLinks({
|
|
|
3808
3756
|
}
|
|
3809
3757
|
|
|
3810
3758
|
// src/IssueTags.jsx
|
|
3811
|
-
var
|
|
3759
|
+
var import_react20 = __toESM(require("react"));
|
|
3812
3760
|
function IssueTags({
|
|
3813
3761
|
tags = [],
|
|
3814
3762
|
selectedTags = [],
|
|
@@ -3851,9 +3799,9 @@ function IssueTags({
|
|
|
3851
3799
|
onTagClick(tag.value);
|
|
3852
3800
|
}
|
|
3853
3801
|
};
|
|
3854
|
-
return /* @__PURE__ */
|
|
3802
|
+
return /* @__PURE__ */ import_react20.default.createElement("div", { style: styles2.container, className: "ev-issue-tags", role: "list" }, tags.map((tag) => {
|
|
3855
3803
|
const isSelected = selectedTags.includes(tag.value);
|
|
3856
|
-
return /* @__PURE__ */
|
|
3804
|
+
return /* @__PURE__ */ import_react20.default.createElement(
|
|
3857
3805
|
"span",
|
|
3858
3806
|
{
|
|
3859
3807
|
key: tag.value,
|
|
@@ -3882,7 +3830,7 @@ function IssueTags({
|
|
|
3882
3830
|
}
|
|
3883
3831
|
|
|
3884
3832
|
// src/CommitteeTable.jsx
|
|
3885
|
-
var
|
|
3833
|
+
var import_react21 = __toESM(require("react"));
|
|
3886
3834
|
var ROLE_ORDER = {
|
|
3887
3835
|
"chair": 0,
|
|
3888
3836
|
"co-chair": 1,
|
|
@@ -3909,7 +3857,7 @@ function CommitteeTable({
|
|
|
3909
3857
|
maxVisible = 6,
|
|
3910
3858
|
style = {}
|
|
3911
3859
|
}) {
|
|
3912
|
-
const [showAll, setShowAll] = (0,
|
|
3860
|
+
const [showAll, setShowAll] = (0, import_react21.useState)(false);
|
|
3913
3861
|
if (committees.length === 0) {
|
|
3914
3862
|
return null;
|
|
3915
3863
|
}
|
|
@@ -3971,7 +3919,7 @@ function CommitteeTable({
|
|
|
3971
3919
|
cursor: "pointer"
|
|
3972
3920
|
}
|
|
3973
3921
|
};
|
|
3974
|
-
return /* @__PURE__ */
|
|
3922
|
+
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
3923
|
"a",
|
|
3976
3924
|
{
|
|
3977
3925
|
href: committee.url,
|
|
@@ -3986,7 +3934,7 @@ function CommitteeTable({
|
|
|
3986
3934
|
}
|
|
3987
3935
|
},
|
|
3988
3936
|
committee.name
|
|
3989
|
-
) : committee.name), /* @__PURE__ */
|
|
3937
|
+
) : committee.name), /* @__PURE__ */ import_react21.default.createElement("td", { style: { ...styles2.cell, ...styles2.positionCell } }, formatPosition(committee.position)))))), hasMore && /* @__PURE__ */ import_react21.default.createElement(
|
|
3990
3938
|
"button",
|
|
3991
3939
|
{
|
|
3992
3940
|
type: "button",
|
|
@@ -3994,7 +3942,7 @@ function CommitteeTable({
|
|
|
3994
3942
|
onClick: () => setShowAll(!showAll)
|
|
3995
3943
|
},
|
|
3996
3944
|
showAll ? "Show less" : `Show all ${sorted.length} committees`,
|
|
3997
|
-
/* @__PURE__ */
|
|
3945
|
+
/* @__PURE__ */ import_react21.default.createElement(
|
|
3998
3946
|
"svg",
|
|
3999
3947
|
{
|
|
4000
3948
|
width: "14",
|
|
@@ -4007,16 +3955,16 @@ function CommitteeTable({
|
|
|
4007
3955
|
strokeLinejoin: "round",
|
|
4008
3956
|
style: { transform: showAll ? "rotate(180deg)" : "none", transition: "transform 0.2s" }
|
|
4009
3957
|
},
|
|
4010
|
-
/* @__PURE__ */
|
|
3958
|
+
/* @__PURE__ */ import_react21.default.createElement("polyline", { points: "6 9 12 15 18 9" })
|
|
4011
3959
|
)
|
|
4012
3960
|
));
|
|
4013
3961
|
}
|
|
4014
3962
|
|
|
4015
3963
|
// src/PoliticianProfile.jsx
|
|
4016
|
-
var
|
|
3964
|
+
var import_react24 = __toESM(require("react"));
|
|
4017
3965
|
|
|
4018
3966
|
// src/LegislativeInlineSummary.jsx
|
|
4019
|
-
var
|
|
3967
|
+
var import_react22 = __toESM(require("react"));
|
|
4020
3968
|
function normalizePosition(pos) {
|
|
4021
3969
|
if (!pos) return "";
|
|
4022
3970
|
return pos.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
@@ -4124,7 +4072,7 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4124
4072
|
fontSize: fontSizes.sm,
|
|
4125
4073
|
fontWeight: fontWeights.medium
|
|
4126
4074
|
};
|
|
4127
|
-
return /* @__PURE__ */
|
|
4075
|
+
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
4076
|
"button",
|
|
4129
4077
|
{
|
|
4130
4078
|
onClick: () => {
|
|
@@ -4149,12 +4097,12 @@ function LegislativeInlineSummary({ summary, politicianId, onNavigateToRecord })
|
|
|
4149
4097
|
}
|
|
4150
4098
|
},
|
|
4151
4099
|
"View Full Legislative Record",
|
|
4152
|
-
/* @__PURE__ */
|
|
4100
|
+
/* @__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
4101
|
)));
|
|
4154
4102
|
}
|
|
4155
4103
|
|
|
4156
4104
|
// src/JudicialScorecard.jsx
|
|
4157
|
-
var
|
|
4105
|
+
var import_react23 = __toESM(require("react"));
|
|
4158
4106
|
|
|
4159
4107
|
// src/judicialUtils.js
|
|
4160
4108
|
function formatDate(dateStr) {
|
|
@@ -4272,7 +4220,7 @@ function JudicialScorecard({ judicialRecord, politicianId, onNavigateToRecord })
|
|
|
4272
4220
|
onNavigateToRecord(`/politician/${politicianId}/judicial-record`);
|
|
4273
4221
|
}
|
|
4274
4222
|
};
|
|
4275
|
-
return /* @__PURE__ */
|
|
4223
|
+
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
4224
|
}
|
|
4277
4225
|
|
|
4278
4226
|
// src/PoliticianProfile.jsx
|
|
@@ -4423,13 +4371,13 @@ function formatAddress(addr) {
|
|
|
4423
4371
|
if (cityStateZip) lines.push(cityStateZip);
|
|
4424
4372
|
return lines;
|
|
4425
4373
|
}
|
|
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__ */
|
|
4374
|
+
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" }));
|
|
4375
|
+
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" }));
|
|
4376
|
+
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" }));
|
|
4377
|
+
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" }));
|
|
4378
|
+
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" }));
|
|
4379
|
+
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" }));
|
|
4380
|
+
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
4381
|
function PoliticianProfile({
|
|
4434
4382
|
politician = {},
|
|
4435
4383
|
onBack,
|
|
@@ -4456,8 +4404,8 @@ function PoliticianProfile({
|
|
|
4456
4404
|
return pol.photo_origin_url;
|
|
4457
4405
|
})();
|
|
4458
4406
|
const initials = [pol.first_name, pol.last_name].filter(Boolean).map((n) => n[0]).join("");
|
|
4459
|
-
const [imgError, setImgError] = (0,
|
|
4460
|
-
(0,
|
|
4407
|
+
const [imgError, setImgError] = (0, import_react24.useState)(false);
|
|
4408
|
+
(0, import_react24.useEffect)(() => {
|
|
4461
4409
|
setImgError(false);
|
|
4462
4410
|
}, [profileImageUrl]);
|
|
4463
4411
|
const getSocialHandle = (type) => {
|
|
@@ -4757,7 +4705,7 @@ function PoliticianProfile({
|
|
|
4757
4705
|
borderRadius: borderRadius.full
|
|
4758
4706
|
}
|
|
4759
4707
|
};
|
|
4760
|
-
return /* @__PURE__ */
|
|
4708
|
+
return /* @__PURE__ */ import_react24.default.createElement("div", { style: styles2.container, className: "ev-politician-profile" }, onBack && /* @__PURE__ */ import_react24.default.createElement(
|
|
4761
4709
|
"button",
|
|
4762
4710
|
{
|
|
4763
4711
|
type: "button",
|
|
@@ -4770,9 +4718,9 @@ function PoliticianProfile({
|
|
|
4770
4718
|
e.currentTarget.style.textDecoration = "none";
|
|
4771
4719
|
}
|
|
4772
4720
|
},
|
|
4773
|
-
/* @__PURE__ */
|
|
4721
|
+
/* @__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
4722
|
label
|
|
4775
|
-
), /* @__PURE__ */
|
|
4723
|
+
), /* @__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
4724
|
"img",
|
|
4777
4725
|
{
|
|
4778
4726
|
src: profileImageUrl,
|
|
@@ -4780,7 +4728,7 @@ function PoliticianProfile({
|
|
|
4780
4728
|
style: styles2.photo,
|
|
4781
4729
|
onError: () => setImgError(true)
|
|
4782
4730
|
}
|
|
4783
|
-
) : /* @__PURE__ */
|
|
4731
|
+
) : /* @__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
4732
|
"a",
|
|
4785
4733
|
{
|
|
4786
4734
|
href: pol.web_form_url,
|
|
@@ -4794,9 +4742,9 @@ function PoliticianProfile({
|
|
|
4794
4742
|
e.currentTarget.style.background = colors.evTeal;
|
|
4795
4743
|
}
|
|
4796
4744
|
},
|
|
4797
|
-
/* @__PURE__ */
|
|
4745
|
+
/* @__PURE__ */ import_react24.default.createElement(ExternalLinkIcon, { size: 14 }),
|
|
4798
4746
|
"Submit a Message"
|
|
4799
|
-
))), hasContactInfo && /* @__PURE__ */
|
|
4747
|
+
))), 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
4748
|
"a",
|
|
4801
4749
|
{
|
|
4802
4750
|
href: `tel:${phone}`,
|
|
@@ -4809,7 +4757,7 @@ function PoliticianProfile({
|
|
|
4809
4757
|
}
|
|
4810
4758
|
},
|
|
4811
4759
|
phone
|
|
4812
|
-
)))))), hasEmails && /* @__PURE__ */
|
|
4760
|
+
)))))), 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
4761
|
"a",
|
|
4814
4762
|
{
|
|
4815
4763
|
href: `mailto:${email}`,
|
|
@@ -4822,7 +4770,7 @@ function PoliticianProfile({
|
|
|
4822
4770
|
}
|
|
4823
4771
|
},
|
|
4824
4772
|
email
|
|
4825
|
-
)))))), hasWebsitesCol && /* @__PURE__ */
|
|
4773
|
+
)))))), 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
4774
|
"a",
|
|
4827
4775
|
{
|
|
4828
4776
|
href: url,
|
|
@@ -4837,7 +4785,7 @@ function PoliticianProfile({
|
|
|
4837
4785
|
}
|
|
4838
4786
|
},
|
|
4839
4787
|
extractDomain(url)
|
|
4840
|
-
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */
|
|
4788
|
+
))), (hasSocial || socialWebsiteUrls.length > 0) && /* @__PURE__ */ import_react24.default.createElement(
|
|
4841
4789
|
SocialLinks,
|
|
4842
4790
|
{
|
|
4843
4791
|
twitter,
|
|
@@ -4848,14 +4796,14 @@ function PoliticianProfile({
|
|
|
4848
4796
|
size: "sm",
|
|
4849
4797
|
style: { marginTop: allWebsites.length > 0 ? "8px" : 0 }
|
|
4850
4798
|
}
|
|
4851
|
-
)))), committees.length > 0 && /* @__PURE__ */
|
|
4799
|
+
)))), 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
4800
|
JudicialScorecard,
|
|
4853
4801
|
{
|
|
4854
4802
|
judicialRecord,
|
|
4855
4803
|
politicianId,
|
|
4856
4804
|
onNavigateToRecord
|
|
4857
4805
|
}
|
|
4858
|
-
) : /* @__PURE__ */
|
|
4806
|
+
) : /* @__PURE__ */ import_react24.default.createElement(
|
|
4859
4807
|
LegislativeInlineSummary,
|
|
4860
4808
|
{
|
|
4861
4809
|
summary: legislativeSummary,
|
|
@@ -4866,7 +4814,7 @@ function PoliticianProfile({
|
|
|
4866
4814
|
}
|
|
4867
4815
|
|
|
4868
4816
|
// src/LegislativeRecord.jsx
|
|
4869
|
-
var
|
|
4817
|
+
var import_react25 = __toESM(require("react"));
|
|
4870
4818
|
var DEFAULT_LIMIT = 25;
|
|
4871
4819
|
function normalizeText(str) {
|
|
4872
4820
|
if (!str) return "";
|
|
@@ -4946,7 +4894,7 @@ function getPositionBadge(position) {
|
|
|
4946
4894
|
return { bg: colors.borderLight, text: colors.textSecondary };
|
|
4947
4895
|
}
|
|
4948
4896
|
function Badge({ label, bg, text }) {
|
|
4949
|
-
return /* @__PURE__ */
|
|
4897
|
+
return /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
4950
4898
|
display: "inline-block",
|
|
4951
4899
|
background: bg,
|
|
4952
4900
|
color: text,
|
|
@@ -4959,18 +4907,18 @@ function Badge({ label, bg, text }) {
|
|
|
4959
4907
|
} }, label);
|
|
4960
4908
|
}
|
|
4961
4909
|
function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
4962
|
-
return /* @__PURE__ */
|
|
4910
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
4963
4911
|
display: "flex",
|
|
4964
4912
|
alignItems: "center",
|
|
4965
4913
|
justifyContent: "space-between",
|
|
4966
4914
|
marginBottom: spacing[4]
|
|
4967
|
-
} }, /* @__PURE__ */
|
|
4915
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("h2", { style: {
|
|
4968
4916
|
fontFamily: fonts.primary,
|
|
4969
4917
|
fontSize: fontSizes.xl,
|
|
4970
4918
|
fontWeight: fontWeights.bold,
|
|
4971
4919
|
color: colors.evTeal,
|
|
4972
4920
|
margin: 0
|
|
4973
|
-
} }, title), years && years.length > 0 && /* @__PURE__ */
|
|
4921
|
+
} }, title), years && years.length > 0 && /* @__PURE__ */ import_react25.default.createElement(
|
|
4974
4922
|
"select",
|
|
4975
4923
|
{
|
|
4976
4924
|
value: yearFilter,
|
|
@@ -4986,13 +4934,13 @@ function SectionHeader({ title, yearFilter, years, onYearChange }) {
|
|
|
4986
4934
|
cursor: "pointer"
|
|
4987
4935
|
}
|
|
4988
4936
|
},
|
|
4989
|
-
/* @__PURE__ */
|
|
4990
|
-
years.map((y) => /* @__PURE__ */
|
|
4937
|
+
/* @__PURE__ */ import_react25.default.createElement("option", { value: "All" }, "All years"),
|
|
4938
|
+
years.map((y) => /* @__PURE__ */ import_react25.default.createElement("option", { key: y, value: y }, y))
|
|
4991
4939
|
));
|
|
4992
4940
|
}
|
|
4993
4941
|
function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
4994
4942
|
if (totalCount <= visibleCount) return null;
|
|
4995
|
-
return /* @__PURE__ */
|
|
4943
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { textAlign: "center", marginTop: spacing[3] } }, /* @__PURE__ */ import_react25.default.createElement(
|
|
4996
4944
|
"button",
|
|
4997
4945
|
{
|
|
4998
4946
|
type: "button",
|
|
@@ -5020,7 +4968,7 @@ function ShowAllLink({ totalCount, visibleCount, onClick }) {
|
|
|
5020
4968
|
));
|
|
5021
4969
|
}
|
|
5022
4970
|
function EmptyState({ message }) {
|
|
5023
|
-
return /* @__PURE__ */
|
|
4971
|
+
return /* @__PURE__ */ import_react25.default.createElement("p", { style: {
|
|
5024
4972
|
fontFamily: fonts.primary,
|
|
5025
4973
|
fontSize: fontSizes.sm,
|
|
5026
4974
|
color: colors.textMuted,
|
|
@@ -5030,24 +4978,24 @@ function EmptyState({ message }) {
|
|
|
5030
4978
|
} }, message);
|
|
5031
4979
|
}
|
|
5032
4980
|
function Spinner() {
|
|
5033
|
-
return /* @__PURE__ */
|
|
4981
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5034
4982
|
display: "flex",
|
|
5035
4983
|
justifyContent: "center",
|
|
5036
4984
|
alignItems: "center",
|
|
5037
4985
|
padding: spacing[10]
|
|
5038
|
-
} }, /* @__PURE__ */
|
|
4986
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5039
4987
|
width: "40px",
|
|
5040
4988
|
height: "40px",
|
|
5041
4989
|
borderRadius: borderRadius.full,
|
|
5042
4990
|
border: `3px solid ${colors.borderLight}`,
|
|
5043
4991
|
borderTopColor: colors.evTeal,
|
|
5044
4992
|
animation: "ev-spin 0.8s linear infinite"
|
|
5045
|
-
} }), /* @__PURE__ */
|
|
4993
|
+
} }), /* @__PURE__ */ import_react25.default.createElement("style", null, `@keyframes ev-spin { to { transform: rotate(360deg); } }`));
|
|
5046
4994
|
}
|
|
5047
4995
|
function CommitteesSection({ committees, leadership }) {
|
|
5048
|
-
const [showAll, setShowAll] = (0,
|
|
4996
|
+
const [showAll, setShowAll] = (0, import_react25.useState)(false);
|
|
5049
4997
|
const visible = showAll ? committees : committees.slice(0, DEFAULT_LIMIT);
|
|
5050
|
-
return /* @__PURE__ */
|
|
4998
|
+
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
4999
|
display: "inline-flex",
|
|
5052
5000
|
alignItems: "center",
|
|
5053
5001
|
gap: spacing[1],
|
|
@@ -5058,23 +5006,23 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5058
5006
|
fontFamily: fonts.primary,
|
|
5059
5007
|
fontSize: fontSizes.sm,
|
|
5060
5008
|
fontWeight: fontWeights.semibold
|
|
5061
|
-
} }, role.title, role.chamber && /* @__PURE__ */
|
|
5009
|
+
} }, 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
5010
|
const badge = getRoleBadge(c.role);
|
|
5063
|
-
return /* @__PURE__ */
|
|
5011
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
|
|
5064
5012
|
display: "flex",
|
|
5065
5013
|
alignItems: "center",
|
|
5066
5014
|
justifyContent: "space-between",
|
|
5067
5015
|
padding: `${spacing[3]} 0`,
|
|
5068
5016
|
borderBottom: `1px solid ${colors.borderLight}`,
|
|
5069
5017
|
gap: spacing[3]
|
|
5070
|
-
} }, /* @__PURE__ */
|
|
5018
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5071
5019
|
fontFamily: fonts.primary,
|
|
5072
5020
|
fontSize: fontSizes.sm,
|
|
5073
5021
|
color: colors.textSecondary,
|
|
5074
5022
|
flex: 1,
|
|
5075
5023
|
minWidth: 0
|
|
5076
|
-
} }, c.committee_name, c.parent_name && /* @__PURE__ */
|
|
5077
|
-
})), !showAll && /* @__PURE__ */
|
|
5024
|
+
} }, 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 }));
|
|
5025
|
+
})), !showAll && /* @__PURE__ */ import_react25.default.createElement(
|
|
5078
5026
|
ShowAllLink,
|
|
5079
5027
|
{
|
|
5080
5028
|
totalCount: committees.length,
|
|
@@ -5085,15 +5033,15 @@ function CommitteesSection({ committees, leadership }) {
|
|
|
5085
5033
|
}
|
|
5086
5034
|
function LegislationSection({ bills, isMobile }) {
|
|
5087
5035
|
const years = getYears(bills, "introduced_at");
|
|
5088
|
-
const [yearFilter, setYearFilter] = (0,
|
|
5089
|
-
const [showAll, setShowAll] = (0,
|
|
5036
|
+
const [yearFilter, setYearFilter] = (0, import_react25.useState)("All");
|
|
5037
|
+
const [showAll, setShowAll] = (0, import_react25.useState)(false);
|
|
5090
5038
|
const handleYearChange = (y) => {
|
|
5091
5039
|
setYearFilter(y);
|
|
5092
5040
|
setShowAll(false);
|
|
5093
5041
|
};
|
|
5094
5042
|
const filtered = yearFilter === "All" ? bills : bills.filter((b) => extractYear(b.introduced_at) === yearFilter);
|
|
5095
5043
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5096
|
-
return /* @__PURE__ */
|
|
5044
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(
|
|
5097
5045
|
SectionHeader,
|
|
5098
5046
|
{
|
|
5099
5047
|
title: "Sponsored Legislation",
|
|
@@ -5101,42 +5049,42 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5101
5049
|
years,
|
|
5102
5050
|
onYearChange: handleYearChange
|
|
5103
5051
|
}
|
|
5104
|
-
), bills.length === 0 ? /* @__PURE__ */
|
|
5052
|
+
), 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
5053
|
const statusBadge = getStatusBadge(bill.status_label);
|
|
5106
|
-
return /* @__PURE__ */
|
|
5054
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
|
|
5107
5055
|
display: "flex",
|
|
5108
5056
|
flexDirection: isMobile ? "column" : "row",
|
|
5109
5057
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5110
5058
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5111
5059
|
padding: `${spacing[3]} 0`,
|
|
5112
5060
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5113
|
-
} }, /* @__PURE__ */
|
|
5061
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5114
5062
|
fontFamily: fonts.primary,
|
|
5115
5063
|
fontSize: fontSizes.xs,
|
|
5116
5064
|
fontWeight: fontWeights.bold,
|
|
5117
5065
|
color: colors.textSecondary,
|
|
5118
5066
|
marginRight: spacing[2]
|
|
5119
|
-
} }, bill.number), /* @__PURE__ */
|
|
5067
|
+
} }, bill.number), /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5120
5068
|
fontFamily: fonts.primary,
|
|
5121
5069
|
fontSize: fontSizes.sm,
|
|
5122
5070
|
color: colors.textSecondary
|
|
5123
|
-
} }, bill.title)), /* @__PURE__ */
|
|
5071
|
+
} }, bill.title)), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5124
5072
|
display: "flex",
|
|
5125
5073
|
alignItems: "center",
|
|
5126
5074
|
gap: spacing[2],
|
|
5127
5075
|
flexShrink: 0,
|
|
5128
5076
|
flexWrap: "wrap"
|
|
5129
|
-
} }, /* @__PURE__ */
|
|
5077
|
+
} }, /* @__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
5078
|
fontFamily: fonts.primary,
|
|
5131
5079
|
fontSize: fontSizes.xs,
|
|
5132
5080
|
color: colors.textMuted
|
|
5133
|
-
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */
|
|
5081
|
+
} }, formatDate2(bill.introduced_at)), /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5134
5082
|
fontFamily: fonts.primary,
|
|
5135
5083
|
fontSize: fontSizes.xs,
|
|
5136
5084
|
color: colors.textMuted,
|
|
5137
5085
|
fontStyle: "italic"
|
|
5138
5086
|
} }, bill.is_sponsor ? "Sponsored" : "Cosponsored")));
|
|
5139
|
-
})), !showAll && /* @__PURE__ */
|
|
5087
|
+
})), !showAll && /* @__PURE__ */ import_react25.default.createElement(
|
|
5140
5088
|
ShowAllLink,
|
|
5141
5089
|
{
|
|
5142
5090
|
totalCount: filtered.length,
|
|
@@ -5147,15 +5095,15 @@ function LegislationSection({ bills, isMobile }) {
|
|
|
5147
5095
|
}
|
|
5148
5096
|
function VotingSection({ votes, isMobile }) {
|
|
5149
5097
|
const years = getYears(votes, "vote_date");
|
|
5150
|
-
const [yearFilter, setYearFilter] = (0,
|
|
5151
|
-
const [showAll, setShowAll] = (0,
|
|
5098
|
+
const [yearFilter, setYearFilter] = (0, import_react25.useState)("All");
|
|
5099
|
+
const [showAll, setShowAll] = (0, import_react25.useState)(false);
|
|
5152
5100
|
const handleYearChange = (y) => {
|
|
5153
5101
|
setYearFilter(y);
|
|
5154
5102
|
setShowAll(false);
|
|
5155
5103
|
};
|
|
5156
5104
|
const filtered = yearFilter === "All" ? votes : votes.filter((v) => extractYear(v.vote_date) === yearFilter);
|
|
5157
5105
|
const visible = showAll ? filtered : filtered.slice(0, DEFAULT_LIMIT);
|
|
5158
|
-
return /* @__PURE__ */
|
|
5106
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { marginBottom: spacing[8] } }, /* @__PURE__ */ import_react25.default.createElement(
|
|
5159
5107
|
SectionHeader,
|
|
5160
5108
|
{
|
|
5161
5109
|
title: "Voting Record",
|
|
@@ -5163,38 +5111,38 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5163
5111
|
years,
|
|
5164
5112
|
onYearChange: handleYearChange
|
|
5165
5113
|
}
|
|
5166
|
-
), votes.length === 0 ? /* @__PURE__ */
|
|
5114
|
+
), 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
5115
|
const positionBadge = getPositionBadge(vote.position);
|
|
5168
5116
|
const normPosition = normalizeText(vote.position);
|
|
5169
5117
|
const topic = vote.bill_title || vote.vote_question;
|
|
5170
5118
|
const sourceUrl = vote.bill_url;
|
|
5171
|
-
return /* @__PURE__ */
|
|
5119
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { key: i, style: {
|
|
5172
5120
|
display: "flex",
|
|
5173
5121
|
flexDirection: isMobile ? "column" : "row",
|
|
5174
5122
|
alignItems: isMobile ? "flex-start" : "center",
|
|
5175
5123
|
gap: isMobile ? spacing[1] : spacing[3],
|
|
5176
5124
|
padding: `${spacing[3]} 0`,
|
|
5177
5125
|
borderBottom: `1px solid ${colors.borderLight}`
|
|
5178
|
-
} }, /* @__PURE__ */
|
|
5126
|
+
} }, /* @__PURE__ */ import_react25.default.createElement("div", { style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5179
5127
|
fontFamily: fonts.primary,
|
|
5180
5128
|
fontSize: fontSizes.sm,
|
|
5181
5129
|
color: colors.textSecondary
|
|
5182
|
-
} }, topic)), /* @__PURE__ */
|
|
5130
|
+
} }, topic)), /* @__PURE__ */ import_react25.default.createElement("div", { style: {
|
|
5183
5131
|
display: "flex",
|
|
5184
5132
|
alignItems: "center",
|
|
5185
5133
|
gap: spacing[2],
|
|
5186
5134
|
flexShrink: 0,
|
|
5187
5135
|
flexWrap: "wrap"
|
|
5188
|
-
} }, vote.vote_date && /* @__PURE__ */
|
|
5136
|
+
} }, vote.vote_date && /* @__PURE__ */ import_react25.default.createElement("span", { style: {
|
|
5189
5137
|
fontFamily: fonts.primary,
|
|
5190
5138
|
fontSize: fontSizes.xs,
|
|
5191
5139
|
color: colors.textMuted
|
|
5192
|
-
} }, formatDate2(vote.vote_date)), /* @__PURE__ */
|
|
5140
|
+
} }, 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
5141
|
fontFamily: fonts.primary,
|
|
5194
5142
|
fontSize: fontSizes.xs,
|
|
5195
5143
|
color: vote.result === "Passed" ? colors.success : colors.textMuted,
|
|
5196
5144
|
fontWeight: fontWeights.medium
|
|
5197
|
-
} }, vote.result), sourceUrl && /* @__PURE__ */
|
|
5145
|
+
} }, vote.result), sourceUrl && /* @__PURE__ */ import_react25.default.createElement(
|
|
5198
5146
|
"a",
|
|
5199
5147
|
{
|
|
5200
5148
|
href: sourceUrl,
|
|
@@ -5215,7 +5163,7 @@ function VotingSection({ votes, isMobile }) {
|
|
|
5215
5163
|
},
|
|
5216
5164
|
"Source"
|
|
5217
5165
|
)));
|
|
5218
|
-
})), !showAll && /* @__PURE__ */
|
|
5166
|
+
})), !showAll && /* @__PURE__ */ import_react25.default.createElement(
|
|
5219
5167
|
ShowAllLink,
|
|
5220
5168
|
{
|
|
5221
5169
|
totalCount: filtered.length,
|
|
@@ -5234,20 +5182,20 @@ function LegislativeRecord({
|
|
|
5234
5182
|
}) {
|
|
5235
5183
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
5236
5184
|
if (loading) {
|
|
5237
|
-
return /* @__PURE__ */
|
|
5185
|
+
return /* @__PURE__ */ import_react25.default.createElement(Spinner, null);
|
|
5238
5186
|
}
|
|
5239
|
-
return /* @__PURE__ */
|
|
5187
|
+
return /* @__PURE__ */ import_react25.default.createElement("div", { style: { fontFamily: fonts.primary } }, politicianName && /* @__PURE__ */ import_react25.default.createElement("h1", { style: {
|
|
5240
5188
|
fontFamily: fonts.primary,
|
|
5241
5189
|
fontSize: isMobile ? fontSizes["2xl"] : fontSizes["4xl"],
|
|
5242
5190
|
fontWeight: fontWeights.bold,
|
|
5243
5191
|
color: colors.evTeal,
|
|
5244
5192
|
marginBottom: spacing[8],
|
|
5245
5193
|
marginTop: 0
|
|
5246
|
-
} }, "Legislative Record: ", politicianName), /* @__PURE__ */
|
|
5194
|
+
} }, "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
5195
|
}
|
|
5248
5196
|
|
|
5249
5197
|
// src/JudicialRecordDetail.jsx
|
|
5250
|
-
var
|
|
5198
|
+
var import_react26 = __toESM(require("react"));
|
|
5251
5199
|
var containerStyle = {
|
|
5252
5200
|
fontFamily: "'Manrope', sans-serif",
|
|
5253
5201
|
maxWidth: "800px"
|
|
@@ -5332,7 +5280,7 @@ var emptyStateStyle = {
|
|
|
5332
5280
|
function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
5333
5281
|
var _a;
|
|
5334
5282
|
if (!judicialRecord) {
|
|
5335
|
-
return /* @__PURE__ */
|
|
5283
|
+
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
5284
|
}
|
|
5337
5285
|
const {
|
|
5338
5286
|
judge_detail: detail,
|
|
@@ -5341,13 +5289,13 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5341
5289
|
disciplinary_records: disciplinary = []
|
|
5342
5290
|
} = judicialRecord;
|
|
5343
5291
|
const displayName = politician.full_name || `${politician.first_name || ""} ${politician.last_name || ""}`.trim();
|
|
5344
|
-
return /* @__PURE__ */
|
|
5292
|
+
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
5293
|
borderLeft: "3px solid #fc8181",
|
|
5346
5294
|
backgroundColor: "#fff5f5",
|
|
5347
5295
|
borderRadius: "0 6px 6px 0",
|
|
5348
5296
|
padding: "12px 16px",
|
|
5349
5297
|
marginBottom: "10px"
|
|
5350
|
-
} }, /* @__PURE__ */
|
|
5298
|
+
} }, /* @__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
5299
|
"a",
|
|
5352
5300
|
{
|
|
5353
5301
|
href: d.source_url,
|
|
@@ -5360,7 +5308,7 @@ function JudicialRecordDetail({ politician = {}, judicialRecord, onBack }) {
|
|
|
5360
5308
|
}
|
|
5361
5309
|
|
|
5362
5310
|
// src/AuthForm.jsx
|
|
5363
|
-
var
|
|
5311
|
+
var import_react27 = __toESM(require("react"));
|
|
5364
5312
|
function AuthForm({
|
|
5365
5313
|
logoSrc = "/EVLogo.svg",
|
|
5366
5314
|
appName = "Empowered Vote",
|
|
@@ -5371,11 +5319,11 @@ function AuthForm({
|
|
|
5371
5319
|
error = null,
|
|
5372
5320
|
submitting = false
|
|
5373
5321
|
}) {
|
|
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,
|
|
5322
|
+
const [username, setUsername] = (0, import_react27.useState)("");
|
|
5323
|
+
const [password, setPassword] = (0, import_react27.useState)("");
|
|
5324
|
+
const [confirmPassword, setConfirmPassword] = (0, import_react27.useState)("");
|
|
5325
|
+
const [showPasswords, setShowPasswords] = (0, import_react27.useState)(false);
|
|
5326
|
+
const [passwordMismatch, setPasswordMismatch] = (0, import_react27.useState)(false);
|
|
5379
5327
|
const isLogin = mode === "login";
|
|
5380
5328
|
const handleSubmit = (e) => {
|
|
5381
5329
|
e.preventDefault();
|
|
@@ -5387,7 +5335,7 @@ function AuthForm({
|
|
|
5387
5335
|
setPasswordMismatch(false);
|
|
5388
5336
|
onSubmit == null ? void 0 : onSubmit(username.trim(), password);
|
|
5389
5337
|
};
|
|
5390
|
-
const EyeOpen = () => /* @__PURE__ */
|
|
5338
|
+
const EyeOpen = () => /* @__PURE__ */ import_react27.default.createElement(
|
|
5391
5339
|
"svg",
|
|
5392
5340
|
{
|
|
5393
5341
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5397,7 +5345,7 @@ function AuthForm({
|
|
|
5397
5345
|
stroke: "currentColor",
|
|
5398
5346
|
style: { width: "20px", height: "20px" }
|
|
5399
5347
|
},
|
|
5400
|
-
/* @__PURE__ */
|
|
5348
|
+
/* @__PURE__ */ import_react27.default.createElement(
|
|
5401
5349
|
"path",
|
|
5402
5350
|
{
|
|
5403
5351
|
strokeLinecap: "round",
|
|
@@ -5405,7 +5353,7 @@ function AuthForm({
|
|
|
5405
5353
|
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
5354
|
}
|
|
5407
5355
|
),
|
|
5408
|
-
/* @__PURE__ */
|
|
5356
|
+
/* @__PURE__ */ import_react27.default.createElement(
|
|
5409
5357
|
"path",
|
|
5410
5358
|
{
|
|
5411
5359
|
strokeLinecap: "round",
|
|
@@ -5414,7 +5362,7 @@ function AuthForm({
|
|
|
5414
5362
|
}
|
|
5415
5363
|
)
|
|
5416
5364
|
);
|
|
5417
|
-
const EyeClosed = () => /* @__PURE__ */
|
|
5365
|
+
const EyeClosed = () => /* @__PURE__ */ import_react27.default.createElement(
|
|
5418
5366
|
"svg",
|
|
5419
5367
|
{
|
|
5420
5368
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -5424,7 +5372,7 @@ function AuthForm({
|
|
|
5424
5372
|
stroke: "currentColor",
|
|
5425
5373
|
style: { width: "20px", height: "20px" }
|
|
5426
5374
|
},
|
|
5427
|
-
/* @__PURE__ */
|
|
5375
|
+
/* @__PURE__ */ import_react27.default.createElement(
|
|
5428
5376
|
"path",
|
|
5429
5377
|
{
|
|
5430
5378
|
strokeLinecap: "round",
|
|
@@ -5433,17 +5381,17 @@ function AuthForm({
|
|
|
5433
5381
|
}
|
|
5434
5382
|
)
|
|
5435
5383
|
);
|
|
5436
|
-
const PasswordToggle = () => /* @__PURE__ */
|
|
5384
|
+
const PasswordToggle = () => /* @__PURE__ */ import_react27.default.createElement(
|
|
5437
5385
|
"button",
|
|
5438
5386
|
{
|
|
5439
5387
|
type: "button",
|
|
5440
5388
|
onClick: () => setShowPasswords((prev) => !prev),
|
|
5441
5389
|
style: styles.passwordToggle
|
|
5442
5390
|
},
|
|
5443
|
-
showPasswords ? /* @__PURE__ */
|
|
5391
|
+
showPasswords ? /* @__PURE__ */ import_react27.default.createElement(EyeOpen, null) : /* @__PURE__ */ import_react27.default.createElement(EyeClosed, null)
|
|
5444
5392
|
);
|
|
5445
5393
|
const displayError = passwordMismatch ? "Passwords do not match." : error;
|
|
5446
|
-
return /* @__PURE__ */
|
|
5394
|
+
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
5395
|
"input",
|
|
5448
5396
|
{
|
|
5449
5397
|
type: "text",
|
|
@@ -5460,7 +5408,7 @@ function AuthForm({
|
|
|
5460
5408
|
},
|
|
5461
5409
|
required: true
|
|
5462
5410
|
}
|
|
5463
|
-
)), /* @__PURE__ */
|
|
5411
|
+
)), /* @__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
5412
|
"input",
|
|
5465
5413
|
{
|
|
5466
5414
|
type: showPasswords ? "text" : "password",
|
|
@@ -5476,7 +5424,7 @@ function AuthForm({
|
|
|
5476
5424
|
},
|
|
5477
5425
|
required: true
|
|
5478
5426
|
}
|
|
5479
|
-
), /* @__PURE__ */
|
|
5427
|
+
), /* @__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
5428
|
"input",
|
|
5481
5429
|
{
|
|
5482
5430
|
type: showPasswords ? "text" : "password",
|
|
@@ -5492,7 +5440,7 @@ function AuthForm({
|
|
|
5492
5440
|
},
|
|
5493
5441
|
required: true
|
|
5494
5442
|
}
|
|
5495
|
-
), /* @__PURE__ */
|
|
5443
|
+
), /* @__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
5444
|
"button",
|
|
5497
5445
|
{
|
|
5498
5446
|
type: "submit",
|
|
@@ -5510,7 +5458,7 @@ function AuthForm({
|
|
|
5510
5458
|
}
|
|
5511
5459
|
},
|
|
5512
5460
|
submitting ? isLogin ? "Signing In..." : "Creating Account..." : isLogin ? "Sign In" : "Create Account"
|
|
5513
|
-
), onModeSwitch && /* @__PURE__ */
|
|
5461
|
+
), 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
5462
|
"button",
|
|
5515
5463
|
{
|
|
5516
5464
|
type: "button",
|
|
@@ -5683,9 +5631,9 @@ var styles = {
|
|
|
5683
5631
|
};
|
|
5684
5632
|
|
|
5685
5633
|
// src/TopicTierBadge.jsx
|
|
5686
|
-
var
|
|
5634
|
+
var import_react28 = __toESM(require("react"));
|
|
5687
5635
|
function LandmarkIcon({ size = 14 }) {
|
|
5688
|
-
return /* @__PURE__ */
|
|
5636
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5689
5637
|
"svg",
|
|
5690
5638
|
{
|
|
5691
5639
|
width: size,
|
|
@@ -5699,16 +5647,16 @@ function LandmarkIcon({ size = 14 }) {
|
|
|
5699
5647
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5700
5648
|
"aria-hidden": "true"
|
|
5701
5649
|
},
|
|
5702
|
-
/* @__PURE__ */
|
|
5703
|
-
/* @__PURE__ */
|
|
5704
|
-
/* @__PURE__ */
|
|
5705
|
-
/* @__PURE__ */
|
|
5706
|
-
/* @__PURE__ */
|
|
5707
|
-
/* @__PURE__ */
|
|
5650
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 18v-7" }),
|
|
5651
|
+
/* @__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" }),
|
|
5652
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M14 18v-7" }),
|
|
5653
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M18 18v-7" }),
|
|
5654
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M3 22h18" }),
|
|
5655
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 18v-7" })
|
|
5708
5656
|
);
|
|
5709
5657
|
}
|
|
5710
5658
|
function Building2Icon({ size = 14 }) {
|
|
5711
|
-
return /* @__PURE__ */
|
|
5659
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5712
5660
|
"svg",
|
|
5713
5661
|
{
|
|
5714
5662
|
width: size,
|
|
@@ -5722,17 +5670,17 @@ function Building2Icon({ size = 14 }) {
|
|
|
5722
5670
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5723
5671
|
"aria-hidden": "true"
|
|
5724
5672
|
},
|
|
5725
|
-
/* @__PURE__ */
|
|
5726
|
-
/* @__PURE__ */
|
|
5727
|
-
/* @__PURE__ */
|
|
5728
|
-
/* @__PURE__ */
|
|
5729
|
-
/* @__PURE__ */
|
|
5730
|
-
/* @__PURE__ */
|
|
5731
|
-
/* @__PURE__ */
|
|
5673
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z" }),
|
|
5674
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M6 12H4a2 2 0 0 0-2 2v8h4" }),
|
|
5675
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M18 9h2a2 2 0 0 1 2 2v11h-4" }),
|
|
5676
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 6h4" }),
|
|
5677
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 10h4" }),
|
|
5678
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 14h4" }),
|
|
5679
|
+
/* @__PURE__ */ import_react28.default.createElement("path", { d: "M10 18h4" })
|
|
5732
5680
|
);
|
|
5733
5681
|
}
|
|
5734
5682
|
function HomeIcon({ size = 14 }) {
|
|
5735
|
-
return /* @__PURE__ */
|
|
5683
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5736
5684
|
"svg",
|
|
5737
5685
|
{
|
|
5738
5686
|
width: size,
|
|
@@ -5746,8 +5694,8 @@ function HomeIcon({ size = 14 }) {
|
|
|
5746
5694
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5747
5695
|
"aria-hidden": "true"
|
|
5748
5696
|
},
|
|
5749
|
-
/* @__PURE__ */
|
|
5750
|
-
/* @__PURE__ */
|
|
5697
|
+
/* @__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" }),
|
|
5698
|
+
/* @__PURE__ */ import_react28.default.createElement("polyline", { points: "9 22 9 12 15 12 15 22" })
|
|
5751
5699
|
);
|
|
5752
5700
|
}
|
|
5753
5701
|
var TIER_INFO = {
|
|
@@ -5807,7 +5755,7 @@ function TopicTierBadge({
|
|
|
5807
5755
|
userSelect: "none"
|
|
5808
5756
|
};
|
|
5809
5757
|
};
|
|
5810
|
-
return /* @__PURE__ */
|
|
5758
|
+
return /* @__PURE__ */ import_react28.default.createElement(
|
|
5811
5759
|
"span",
|
|
5812
5760
|
{
|
|
5813
5761
|
className: "ev-topic-tier-badge",
|
|
@@ -5817,13 +5765,13 @@ function TopicTierBadge({
|
|
|
5817
5765
|
},
|
|
5818
5766
|
effectiveTiers.map((tier) => {
|
|
5819
5767
|
const { label, Icon } = TIER_INFO[tier];
|
|
5820
|
-
return /* @__PURE__ */
|
|
5768
|
+
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
5769
|
})
|
|
5822
5770
|
);
|
|
5823
5771
|
}
|
|
5824
5772
|
|
|
5825
5773
|
// src/CompassCoverageCallout.jsx
|
|
5826
|
-
var
|
|
5774
|
+
var import_react29 = __toESM(require("react"));
|
|
5827
5775
|
var TIER_LABELS = {
|
|
5828
5776
|
federal: "federal",
|
|
5829
5777
|
state: "state",
|
|
@@ -5836,7 +5784,7 @@ function CompassCoverageCallout({
|
|
|
5836
5784
|
compassUrl,
|
|
5837
5785
|
onDismiss
|
|
5838
5786
|
}) {
|
|
5839
|
-
const [dismissed, setDismissed] = (0,
|
|
5787
|
+
const [dismissed, setDismissed] = (0, import_react29.useState)(false);
|
|
5840
5788
|
if (dismissed) return null;
|
|
5841
5789
|
const tierLabel = TIER_LABELS[tier] || tier;
|
|
5842
5790
|
const tierStyle = tierColors[tier] || tierColors.federal;
|
|
@@ -5887,15 +5835,15 @@ function CompassCoverageCallout({
|
|
|
5887
5835
|
setDismissed(true);
|
|
5888
5836
|
if (onDismiss) onDismiss();
|
|
5889
5837
|
};
|
|
5890
|
-
return /* @__PURE__ */
|
|
5838
|
+
return /* @__PURE__ */ import_react29.default.createElement(
|
|
5891
5839
|
"div",
|
|
5892
5840
|
{
|
|
5893
5841
|
className: "ev-compass-coverage-callout",
|
|
5894
5842
|
role: "status",
|
|
5895
5843
|
style: containerStyle2
|
|
5896
5844
|
},
|
|
5897
|
-
/* @__PURE__ */
|
|
5898
|
-
onDismiss !== void 0 && /* @__PURE__ */
|
|
5845
|
+
/* @__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")),
|
|
5846
|
+
onDismiss !== void 0 && /* @__PURE__ */ import_react29.default.createElement(
|
|
5899
5847
|
"button",
|
|
5900
5848
|
{
|
|
5901
5849
|
onClick: handleDismiss,
|
|
@@ -5908,7 +5856,7 @@ function CompassCoverageCallout({
|
|
|
5908
5856
|
}
|
|
5909
5857
|
|
|
5910
5858
|
// src/ExpandCompassNudge.jsx
|
|
5911
|
-
var
|
|
5859
|
+
var import_react30 = __toESM(require("react"));
|
|
5912
5860
|
function ExpandCompassNudge({
|
|
5913
5861
|
politicianName,
|
|
5914
5862
|
missingCount,
|
|
@@ -5955,7 +5903,7 @@ function ExpandCompassNudge({
|
|
|
5955
5903
|
};
|
|
5956
5904
|
const topicsLabel = missingCount === 1 ? "topic" : "topics";
|
|
5957
5905
|
const speakerName = politicianName || "This politician";
|
|
5958
|
-
return /* @__PURE__ */
|
|
5906
|
+
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
5907
|
}
|
|
5960
5908
|
|
|
5961
5909
|
// src/computeTierCoverage.js
|
|
@@ -5976,7 +5924,7 @@ function computeTierCoverage(topics) {
|
|
|
5976
5924
|
}
|
|
5977
5925
|
|
|
5978
5926
|
// src/useEvContextPromotion.js
|
|
5979
|
-
var
|
|
5927
|
+
var import_react31 = require("react");
|
|
5980
5928
|
function useEvContextPromotion({
|
|
5981
5929
|
domain,
|
|
5982
5930
|
isLoggedIn,
|
|
@@ -5985,23 +5933,23 @@ function useEvContextPromotion({
|
|
|
5985
5933
|
apiWriter,
|
|
5986
5934
|
enabled = true
|
|
5987
5935
|
}) {
|
|
5988
|
-
const [shouldPrompt, setShouldPrompt] = (0,
|
|
5989
|
-
const [payload, setPayload] = (0,
|
|
5990
|
-
const [status, setStatus] = (0,
|
|
5991
|
-
const [error, setError] = (0,
|
|
5992
|
-
const apiDataRef = (0,
|
|
5936
|
+
const [shouldPrompt, setShouldPrompt] = (0, import_react31.useState)(false);
|
|
5937
|
+
const [payload, setPayload] = (0, import_react31.useState)(null);
|
|
5938
|
+
const [status, setStatus] = (0, import_react31.useState)("idle");
|
|
5939
|
+
const [error, setError] = (0, import_react31.useState)(null);
|
|
5940
|
+
const apiDataRef = (0, import_react31.useRef)(apiData);
|
|
5993
5941
|
apiDataRef.current = apiData;
|
|
5994
|
-
const userIdRef = (0,
|
|
5942
|
+
const userIdRef = (0, import_react31.useRef)(userId);
|
|
5995
5943
|
userIdRef.current = userId;
|
|
5996
|
-
const isLoggedInRef = (0,
|
|
5944
|
+
const isLoggedInRef = (0, import_react31.useRef)(isLoggedIn);
|
|
5997
5945
|
isLoggedInRef.current = isLoggedIn;
|
|
5998
|
-
const enabledRef = (0,
|
|
5946
|
+
const enabledRef = (0, import_react31.useRef)(enabled);
|
|
5999
5947
|
enabledRef.current = enabled;
|
|
6000
|
-
const domainRef = (0,
|
|
5948
|
+
const domainRef = (0, import_react31.useRef)(domain);
|
|
6001
5949
|
domainRef.current = domain;
|
|
6002
|
-
const apiWriterRef = (0,
|
|
5950
|
+
const apiWriterRef = (0, import_react31.useRef)(apiWriter);
|
|
6003
5951
|
apiWriterRef.current = apiWriter;
|
|
6004
|
-
const detect = (0,
|
|
5952
|
+
const detect = (0, import_react31.useCallback)(async () => {
|
|
6005
5953
|
const _enabled = enabledRef.current;
|
|
6006
5954
|
const _isLoggedIn = isLoggedInRef.current;
|
|
6007
5955
|
const _userId = userIdRef.current;
|
|
@@ -6040,16 +5988,16 @@ function useEvContextPromotion({
|
|
|
6040
5988
|
setPayload(null);
|
|
6041
5989
|
}
|
|
6042
5990
|
}, []);
|
|
6043
|
-
(0,
|
|
5991
|
+
(0, import_react31.useEffect)(() => {
|
|
6044
5992
|
detect();
|
|
6045
5993
|
}, [detect, isLoggedIn, userId, apiData, enabled, domain]);
|
|
6046
|
-
(0,
|
|
5994
|
+
(0, import_react31.useEffect)(() => {
|
|
6047
5995
|
const unsub = evContext.subscribe(() => {
|
|
6048
5996
|
detect();
|
|
6049
5997
|
});
|
|
6050
5998
|
return unsub;
|
|
6051
5999
|
}, [detect]);
|
|
6052
|
-
const promote = (0,
|
|
6000
|
+
const promote = (0, import_react31.useCallback)(async () => {
|
|
6053
6001
|
const _userId = userIdRef.current;
|
|
6054
6002
|
const _domain = domainRef.current;
|
|
6055
6003
|
const _writer = apiWriterRef.current;
|
|
@@ -6076,7 +6024,7 @@ function useEvContextPromotion({
|
|
|
6076
6024
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
6077
6025
|
}
|
|
6078
6026
|
}, [payload]);
|
|
6079
|
-
const dismiss = (0,
|
|
6027
|
+
const dismiss = (0, import_react31.useCallback)(async () => {
|
|
6080
6028
|
const _userId = userIdRef.current;
|
|
6081
6029
|
const _domain = domainRef.current;
|
|
6082
6030
|
if (!_userId) return;
|
|
@@ -6135,14 +6083,14 @@ function isGuestPopulated(domain, fullEvContext) {
|
|
|
6135
6083
|
}
|
|
6136
6084
|
|
|
6137
6085
|
// src/StanceAccordion.jsx
|
|
6138
|
-
var
|
|
6086
|
+
var import_react33 = __toESM(require("react"));
|
|
6139
6087
|
|
|
6140
6088
|
// src/Favicon.jsx
|
|
6141
|
-
var
|
|
6089
|
+
var import_react32 = __toESM(require("react"));
|
|
6142
6090
|
function Favicon({ url, size = 16 }) {
|
|
6143
6091
|
try {
|
|
6144
6092
|
const domain = new URL(url).hostname;
|
|
6145
|
-
return /* @__PURE__ */
|
|
6093
|
+
return /* @__PURE__ */ import_react32.default.createElement(
|
|
6146
6094
|
"img",
|
|
6147
6095
|
{
|
|
6148
6096
|
src: `https://www.google.com/s2/favicons?sz=${size}&domain=${domain}`,
|
|
@@ -6153,7 +6101,7 @@ function Favicon({ url, size = 16 }) {
|
|
|
6153
6101
|
}
|
|
6154
6102
|
);
|
|
6155
6103
|
} catch {
|
|
6156
|
-
return /* @__PURE__ */
|
|
6104
|
+
return /* @__PURE__ */ import_react32.default.createElement(
|
|
6157
6105
|
"svg",
|
|
6158
6106
|
{
|
|
6159
6107
|
width: size,
|
|
@@ -6164,8 +6112,8 @@ function Favicon({ url, size = 16 }) {
|
|
|
6164
6112
|
strokeWidth: "1.5",
|
|
6165
6113
|
style: { verticalAlign: "middle", flexShrink: 0 }
|
|
6166
6114
|
},
|
|
6167
|
-
/* @__PURE__ */
|
|
6168
|
-
/* @__PURE__ */
|
|
6115
|
+
/* @__PURE__ */ import_react32.default.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
6116
|
+
/* @__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
6117
|
);
|
|
6170
6118
|
}
|
|
6171
6119
|
}
|
|
@@ -6196,11 +6144,11 @@ function StanceAccordion({
|
|
|
6196
6144
|
apiUrl = "https://api.empowered.vote"
|
|
6197
6145
|
}) {
|
|
6198
6146
|
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,
|
|
6147
|
+
const [expandedTopicId, setExpandedTopicId] = (0, import_react33.useState)(null);
|
|
6148
|
+
const [loadingId, setLoadingId] = (0, import_react33.useState)(null);
|
|
6149
|
+
const [showAll, setShowAll] = (0, import_react33.useState)(false);
|
|
6150
|
+
const contextCache = (0, import_react33.useRef)(/* @__PURE__ */ new Map());
|
|
6151
|
+
const quotesCache = (0, import_react33.useRef)(null);
|
|
6204
6152
|
const polAnswerMap = {};
|
|
6205
6153
|
if (polAnswers) {
|
|
6206
6154
|
polAnswers.forEach((a) => {
|
|
@@ -6259,7 +6207,7 @@ function StanceAccordion({
|
|
|
6259
6207
|
quotesCache.current = [];
|
|
6260
6208
|
}
|
|
6261
6209
|
}
|
|
6262
|
-
const handleToggle = (0,
|
|
6210
|
+
const handleToggle = (0, import_react33.useCallback)(
|
|
6263
6211
|
async (topicId) => {
|
|
6264
6212
|
if (expandedTopicId === topicId) {
|
|
6265
6213
|
setExpandedTopicId(null);
|
|
@@ -6276,7 +6224,7 @@ function StanceAccordion({
|
|
|
6276
6224
|
},
|
|
6277
6225
|
[expandedTopicId, politicianId, apiUrl]
|
|
6278
6226
|
);
|
|
6279
|
-
(0,
|
|
6227
|
+
(0, import_react33.useEffect)(() => {
|
|
6280
6228
|
if (initialExpandedTopicId && topics && topics.length > 0) {
|
|
6281
6229
|
handleToggle(String(initialExpandedTopicId));
|
|
6282
6230
|
}
|
|
@@ -6292,13 +6240,13 @@ function StanceAccordion({
|
|
|
6292
6240
|
visibleTopics = [pinned, ...baseTopics.filter((t) => String(t.id) !== String(initialExpandedTopicId))];
|
|
6293
6241
|
}
|
|
6294
6242
|
}
|
|
6295
|
-
return /* @__PURE__ */
|
|
6243
|
+
return /* @__PURE__ */ import_react33.default.createElement(
|
|
6296
6244
|
"div",
|
|
6297
6245
|
{
|
|
6298
6246
|
className: "flex flex-col",
|
|
6299
6247
|
style: { fontFamily: "'Manrope', sans-serif" }
|
|
6300
6248
|
},
|
|
6301
|
-
/* @__PURE__ */
|
|
6249
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
6302
6250
|
"h3",
|
|
6303
6251
|
{
|
|
6304
6252
|
className: "text-sm font-semibold text-neutral-400 uppercase tracking-wider mb-2",
|
|
@@ -6321,15 +6269,15 @@ function StanceAccordion({
|
|
|
6321
6269
|
if (topic.topic_key) return q.issue === topic.topic_key;
|
|
6322
6270
|
return topic.short_title && q.issue.toLowerCase() === topic.short_title.toLowerCase();
|
|
6323
6271
|
}) : [];
|
|
6324
|
-
return /* @__PURE__ */
|
|
6272
|
+
return /* @__PURE__ */ import_react33.default.createElement("div", { key: topicId, className: "border-b border-neutral-100" }, /* @__PURE__ */ import_react33.default.createElement(
|
|
6325
6273
|
"button",
|
|
6326
6274
|
{
|
|
6327
6275
|
type: "button",
|
|
6328
6276
|
onClick: () => handleToggle(topicId),
|
|
6329
6277
|
className: "w-full flex items-center justify-between py-3 px-2 text-left cursor-pointer hover:bg-neutral-50 transition-colors"
|
|
6330
6278
|
},
|
|
6331
|
-
/* @__PURE__ */
|
|
6332
|
-
/* @__PURE__ */
|
|
6279
|
+
/* @__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)),
|
|
6280
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
6333
6281
|
"svg",
|
|
6334
6282
|
{
|
|
6335
6283
|
width: "16",
|
|
@@ -6346,9 +6294,9 @@ function StanceAccordion({
|
|
|
6346
6294
|
transition: "transform 0.2s ease"
|
|
6347
6295
|
}
|
|
6348
6296
|
},
|
|
6349
|
-
/* @__PURE__ */
|
|
6297
|
+
/* @__PURE__ */ import_react33.default.createElement("polyline", { points: "9 18 15 12 9 6" })
|
|
6350
6298
|
)
|
|
6351
|
-
), /* @__PURE__ */
|
|
6299
|
+
), /* @__PURE__ */ import_react33.default.createElement(
|
|
6352
6300
|
"div",
|
|
6353
6301
|
{
|
|
6354
6302
|
style: {
|
|
@@ -6357,7 +6305,7 @@ function StanceAccordion({
|
|
|
6357
6305
|
transition: "grid-template-rows 0.25s ease"
|
|
6358
6306
|
}
|
|
6359
6307
|
},
|
|
6360
|
-
/* @__PURE__ */
|
|
6308
|
+
/* @__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
6309
|
"div",
|
|
6362
6310
|
{
|
|
6363
6311
|
style: {
|
|
@@ -6369,14 +6317,14 @@ function StanceAccordion({
|
|
|
6369
6317
|
animation: "ev-spin 0.8s linear infinite"
|
|
6370
6318
|
}
|
|
6371
6319
|
}
|
|
6372
|
-
)), !isLoading && cached && /* @__PURE__ */
|
|
6320
|
+
)), !isLoading && cached && /* @__PURE__ */ import_react33.default.createElement(import_react33.default.Fragment, null, cached.reasoning ? /* @__PURE__ */ import_react33.default.createElement(
|
|
6373
6321
|
"p",
|
|
6374
6322
|
{
|
|
6375
6323
|
className: "text-sm text-neutral-700 mb-3",
|
|
6376
6324
|
style: { whiteSpace: "pre-wrap", lineHeight: 1.6 }
|
|
6377
6325
|
},
|
|
6378
6326
|
cached.reasoning
|
|
6379
|
-
) : null, cached.sources && cached.sources.length > 0 && /* @__PURE__ */
|
|
6327
|
+
) : 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
6328
|
"a",
|
|
6381
6329
|
{
|
|
6382
6330
|
href: src,
|
|
@@ -6384,9 +6332,9 @@ function StanceAccordion({
|
|
|
6384
6332
|
rel: "noreferrer",
|
|
6385
6333
|
className: "inline-flex items-center gap-1.5 hover:text-[#00657c] transition-colors"
|
|
6386
6334
|
},
|
|
6387
|
-
/* @__PURE__ */
|
|
6388
|
-
/* @__PURE__ */
|
|
6389
|
-
))))), topicQuotes.length > 0 && /* @__PURE__ */
|
|
6335
|
+
/* @__PURE__ */ import_react33.default.createElement(Favicon, { url: src }),
|
|
6336
|
+
/* @__PURE__ */ import_react33.default.createElement("span", { className: "underline underline-offset-2" }, getDisplayUrl(src))
|
|
6337
|
+
))))), topicQuotes.length > 0 && /* @__PURE__ */ import_react33.default.createElement("div", { style: { marginTop: "12px" } }, /* @__PURE__ */ import_react33.default.createElement(
|
|
6390
6338
|
"p",
|
|
6391
6339
|
{
|
|
6392
6340
|
style: {
|
|
@@ -6403,7 +6351,7 @@ function StanceAccordion({
|
|
|
6403
6351
|
const verdict = verdictsByQuote ? verdictsByQuote[quote.id] : void 0;
|
|
6404
6352
|
const borderColor = verdict === "agreed" ? "#0e7490" : verdict === "disagreed" ? "#b45309" : "#e2e8f0";
|
|
6405
6353
|
const sourceName = quote.source_name || quote.sourceName;
|
|
6406
|
-
return /* @__PURE__ */
|
|
6354
|
+
return /* @__PURE__ */ import_react33.default.createElement(
|
|
6407
6355
|
"div",
|
|
6408
6356
|
{
|
|
6409
6357
|
key: quote.id,
|
|
@@ -6415,7 +6363,7 @@ function StanceAccordion({
|
|
|
6415
6363
|
marginBottom: "8px"
|
|
6416
6364
|
}
|
|
6417
6365
|
},
|
|
6418
|
-
/* @__PURE__ */
|
|
6366
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
6419
6367
|
"p",
|
|
6420
6368
|
{
|
|
6421
6369
|
style: {
|
|
@@ -6428,7 +6376,7 @@ function StanceAccordion({
|
|
|
6428
6376
|
},
|
|
6429
6377
|
quote.text
|
|
6430
6378
|
),
|
|
6431
|
-
verdict === "agreed" && /* @__PURE__ */
|
|
6379
|
+
verdict === "agreed" && /* @__PURE__ */ import_react33.default.createElement(
|
|
6432
6380
|
"span",
|
|
6433
6381
|
{
|
|
6434
6382
|
style: {
|
|
@@ -6445,10 +6393,10 @@ function StanceAccordion({
|
|
|
6445
6393
|
flexShrink: 0
|
|
6446
6394
|
}
|
|
6447
6395
|
},
|
|
6448
|
-
/* @__PURE__ */
|
|
6396
|
+
/* @__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
6397
|
"Agreed"
|
|
6450
6398
|
),
|
|
6451
|
-
verdict === "disagreed" && /* @__PURE__ */
|
|
6399
|
+
verdict === "disagreed" && /* @__PURE__ */ import_react33.default.createElement(
|
|
6452
6400
|
"span",
|
|
6453
6401
|
{
|
|
6454
6402
|
style: {
|
|
@@ -6465,10 +6413,10 @@ function StanceAccordion({
|
|
|
6465
6413
|
flexShrink: 0
|
|
6466
6414
|
}
|
|
6467
6415
|
},
|
|
6468
|
-
/* @__PURE__ */
|
|
6416
|
+
/* @__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
6417
|
"Disagreed"
|
|
6470
6418
|
),
|
|
6471
|
-
sourceName && /* @__PURE__ */
|
|
6419
|
+
sourceName && /* @__PURE__ */ import_react33.default.createElement(
|
|
6472
6420
|
"a",
|
|
6473
6421
|
{
|
|
6474
6422
|
href: quote.source_url || quote.sourceUrl,
|
|
@@ -6485,10 +6433,10 @@ function StanceAccordion({
|
|
|
6485
6433
|
sourceName
|
|
6486
6434
|
)
|
|
6487
6435
|
);
|
|
6488
|
-
})), !cached.reasoning && (!cached.sources || cached.sources.length === 0) && topicQuotes.length === 0 && /* @__PURE__ */
|
|
6436
|
+
})), !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
6437
|
));
|
|
6490
6438
|
}),
|
|
6491
|
-
hasToggle && /* @__PURE__ */
|
|
6439
|
+
hasToggle && /* @__PURE__ */ import_react33.default.createElement(
|
|
6492
6440
|
"button",
|
|
6493
6441
|
{
|
|
6494
6442
|
type: "button",
|