| 1 | import type { Metadata } from "next"; |
| 2 | import Link from "next/link"; |
| 3 | import { Suspense } from "react"; |
| 4 | import { PageHeader } from "@/components/ui"; |
| 5 | import { CiteThis } from "@/components/cite-this"; |
| 6 | import { VotesBrowser } from "@/components/votes-browser"; |
| 7 | |
| 8 | export const metadata: Metadata = { |
| 9 | title: "Votes", |
| 10 | description: |
| 11 | "Recorded roll-call votes of the U.S. House and Senate. Filter by chamber or keyword. Every vote links to its official record.", |
| 12 | }; |
| 13 | |
| 14 | export const revalidate = 300; |
| 15 | |
| 16 | export default function VotesPage() { |
| 17 | return ( |
| 18 | <div |
| 19 | className="mx-auto w-full max-w-[860px] px-6 sm:px-8" |
| 20 | style={{ |
| 21 | paddingTop: "clamp(32px, 6vw, 56px)", |
| 22 | paddingBottom: "clamp(48px, 8vw, 80px)", |
| 23 | }} |
| 24 | > |
| 25 | {} |
| 26 | <nav aria-label="Breadcrumb" className="mb-10"> |
| 27 | <ol className="flex flex-wrap items-center gap-2" style={{ marginBottom: "12px" }}> |
| 28 | <li> |
| 29 | <Link |
| 30 | href="/" |
| 31 | className="focus-ring label no-underline hover:underline" |
| 32 | style={{ color: "var(--dk-signal)", fontSize: "12px", letterSpacing: "0.12em" }} |
| 33 | > |
| 34 | Home |
| 35 | </Link> |
| 36 | </li> |
| 37 | <li aria-hidden="true" className="label" style={{ color: "var(--dk-ash-2)", fontSize: "12px" }}> |
| 38 | / |
| 39 | </li> |
| 40 | <li |
| 41 | className="label" |
| 42 | style={{ color: "var(--dk-ash)", fontSize: "12px", letterSpacing: "0.12em" }} |
| 43 | aria-current="page" |
| 44 | > |
| 45 | Votes |
| 46 | </li> |
| 47 | </ol> |
| 48 | <Link |
| 49 | href="/" |
| 50 | className="focus-ring tap no-underline hover:underline" |
| 51 | style={{ |
| 52 | display: "inline-flex", |
| 53 | alignItems: "center", |
| 54 | gap: "8px", |
| 55 | fontFamily: "var(--font-mono), ui-monospace, monospace", |
| 56 | fontSize: "13px", |
| 57 | letterSpacing: "0.08em", |
| 58 | color: "var(--dk-signal)", |
| 59 | }} |
| 60 | > |
| 61 | ← Back to home |
| 62 | </Link> |
| 63 | </nav> |
| 64 | |
| 65 | <PageHeader |
| 66 | eyebrow="Roll-call register" |
| 67 | title="Votes, on the record" |
| 68 | lead="Each row is a recorded vote in the House or Senate -what it was about, the tally, and a link to the official roll call. Open any vote to see how every member voted." |
| 69 | /> |
| 70 | |
| 71 | <Suspense fallback={<VotesSkeleton />}> |
| 72 | <VotesBrowser /> |
| 73 | </Suspense> |
| 74 | |
| 75 | {} |
| 76 | <div |
| 77 | style={{ |
| 78 | marginTop: "clamp(40px, 7vw, 72px)", |
| 79 | borderTop: "1px solid var(--dk-line)", |
| 80 | paddingTop: "clamp(24px, 4vw, 40px)", |
| 81 | }} |
| 82 | > |
| 83 | <p className="label mb-8" style={{ color: "var(--dk-ash-2)" }}> |
| 84 | Roll-call votes from clerk.house.gov and senate.gov XML feeds. Order is |
| 85 | by date -no editorial weighting. |
| 86 | </p> |
| 87 | <p className="label mb-4" style={{ color: "var(--dk-ash)" }}> |
| 88 | Cite this page |
| 89 | </p> |
| 90 | <CiteThis |
| 91 | kind="page" |
| 92 | title="Votes -Roll-call register" |
| 93 | permalink="https://usdocket.org/votes" |
| 94 | sourceUrl="https://clerk.house.gov/evs/ https://www.senate.gov/legislative/votes_new.htm" |
| 95 | /> |
| 96 | </div> |
| 97 | </div> |
| 98 | ); |
| 99 | } |
| 100 | |
| 101 | function VotesSkeleton() { |
| 102 | return ( |
| 103 | <div className="mt-8"> |
| 104 | <div className="h-14 w-full animate-pulse rounded-sm bg-graphite" /> |
| 105 | <div className="mt-8 mb-4 h-4 w-40 animate-pulse rounded-sm bg-graphite" /> |
| 106 | <div className="space-y-1"> |
| 107 | {Array.from({ length: 16 }).map((_, i) => ( |
| 108 | <div key={i} className="h-12 w-full animate-pulse rounded-sm bg-graphite" /> |
| 109 | ))} |
| 110 | </div> |
| 111 | </div> |
| 112 | ); |
| 113 | } |