{"version":3,"sources":["webpack:///./app/scripts/utils/utils.js","webpack:///./config/modern-polyfills.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./app/scripts/components/ByCategory/ByCategoryTitle.js","webpack:///./app/scripts/components/ByCategory/ByCategoryBar.js","webpack:///./app/scripts/components/ByCategory/BarLegend.js","webpack:///./app/scripts/components/ByCategory/Annotation.js","webpack:///./app/scripts/components/ByCategory/ByCategoryRow.js","webpack:///./app/scripts/components/CategoryComparison.js","webpack:///./app/scripts/packs/category-comparison-main.js"],"names":["titleCase","require","str","toLowerCase","split","map","word","charAt","toUpperCase","slice","join","formatNumberWithCommas","num","format","formatNumberAnnotation","f","ft","includes","replace","formatNumberPct","p","concat","formatCountiesTitle","county","exceptions","upper","title","e","find","formatYAxisTicks","formatted","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","Error","code","keys","Object","resolve","module","exports","h","Component","ByCategoryTitle","constructor","super","this","state","render","projection","geoMercator","fitSize","props","mapData","path","geoPath","class","width","height","features","d","fill","properties","category","tag","ByCategoryBar","drawBar","container","select","node","clientWidth","margin","earlyVote2026","data","early_vote_2026","totalVotes2026","total_votes_2026","edayVote2026","registered2026","registered_2026","xScale","scaleLinear","domain","range","xPctScale","barsG","append","attr","prevEv","early_vote_2022","registered_2022","prevEvText","style","text","prevTotal","total_votes_2022","prevTotalText","html","redrawBar","remove","componentDidMount","window","addEventListener","BarLegend","drawLegend","legend","redrawLegend","Annotation","ByCategoryRow","console","log","description","desc","asOfDate","moment","CategoryComparsion","date","CategoryComparison","document","getElementById","initFrameAndPoll"],"mappings":"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","file":"category-comparison-main.7982e1cf62.mjs","sourcesContent":["// Packages\nconst journalize = require('journalize');\nimport { timeFormat, format, precisionPrefix, formatPrefix, precisionFixed } from 'd3';\n\nconst titleCase = str => {\n  return str.toLowerCase().split(' ').map(word => {\n    return (word.charAt(0).toUpperCase() + word.slice(1));\n  }).join(' ');\n}\n\nexport const formatDate = date => {\n  let month = journalize.apmonth(date);\n  let day = timeFormat(\"%e\")(date);\n  return `${month} ${day}`;\n}\n\nexport const formatNumberWithCommas = num => {\n  return format(',')(num);\n}\n\nexport const formatNumberPrefix = num => {\n  // const p = precisionPrefix(1e5, 1.3e6);\n  // const f = formatPrefix(\".\" + p, 1.3e6);\n  const f = format('.2s');\n  return f(num);\n}\n\nexport const formatNumberAnnotation = num => {\n  const f = format('.3s');\n  const ft = format(\",\");\n  let formatted;\n  if(f(num).includes(\"M\")) {\n    formatted = f(num).replace(\"M\", \" million\");\n    return formatted;\n  } \n  // else if(f(num).includes(\"k\")) {\n  //   formatted = f(num).replace(\"k\", \" thousand\")\n  // }\n  return ft(num);\n}\n\nexport const formatNumberPrefixWithoutUnit = num => {\n  const f = format('.2s');\n  let formatted;\n  if(f(num).includes(\"M\")) {\n    formatted = f(num).replace(\"M\", \"\");\n  } else if(f(num).includes(\"k\")) {\n    formatted = f(num).replace(\"k\", \"\")\n  }\n  return formatted;\n}\n\nexport const formatNumberPct = num => {\n  const p = format(\",.1f\");\n  return `${p(num)}%`;\n}\n\nexport const formatCounties = county => {\n  const exceptions = [\n    {upper: \"MCMULLEN\", title: \"McMullen\"},\n    {upper: \"MCLENNAN\", title: \"McLennan\"},\n    {upper: \"MCCULLOCH\", title: \"McCulloch\"},\n    {upper: \"DEWITT\", title: \"DeWitt\"},\n  ]\n  if(exceptions.map(e => e.upper).includes(county)) {\n    return `${exceptions.find(e => e.upper == county).title} County`;\n  } else if(county == \"TOTAL\") {\n    return 'Texas';\n  } else {\n    return `${titleCase(county)} County`\n  }\n}\n\nexport const formatCountiesTitle = county => {\n  const exceptions = [\n    {upper: \"MCMULLEN\", title: \"McMullen\"},\n    {upper: \"MCLENNAN\", title: \"McLennan\"},\n    {upper: \"MCCULLOCH\", title: \"McCulloch\"},\n    {upper: \"DEWITT\", title: \"DeWitt\"},\n  ]\n  if(exceptions.map(e => e.upper).includes(county)) {\n    return `${exceptions.find(e => e.upper == county).title} County`;\n  } else if(county == \"TOTAL\") {\n    return 'Texas';\n  } else {\n    return `${titleCase(county)} County`\n  }\n}\n\nexport const formatCountiesShort = county => {\n  const exceptions = [\n    {upper: \"MCMULLEN\", title: \"McMullen\"},\n    {upper: \"MCLENNAN\", title: \"McLennan\"},\n    {upper: \"MCCULLOCH\", title: \"McCulloch\"},\n    {upper: \"DEWITT\", title: \"DeWitt\"},\n  ]\n  if(exceptions.map(e => e.upper).includes(county)) {\n    return exceptions.find(e => e.upper == county).title;\n  } else if(county == \"TOTAL\") {\n    return 'Texas';\n  } else {\n    return `${titleCase(county)}`\n  }\n}\n\nexport const formatYAxisTicks = num => {\n  if (num >= 1000000 && num % 1000000 === 0) {\n    return `${num / 1000000}M`;\n  }\n\n  const f = format('.2s');\n  let formatted = f(num);\n\n  if (formatted.includes('.0')) {\n    formatted = formatted.replace('.0', '');\n  }\n\n  if (formatted.includes('k')) {\n    formatted = formatted.replace('k', 'K');\n  }\n\n  return formatted;\n}\n","'use strict';\n\n// We depend on intersection-observer enough that it should just be assumed as necessary\nrequire('intersection-observer');\n","var map = {\n\t\"./af\": \"K/tc\",\n\t\"./af.js\": \"K/tc\",\n\t\"./ar\": \"jnO4\",\n\t\"./ar-dz\": \"o1bE\",\n\t\"./ar-dz.js\": \"o1bE\",\n\t\"./ar-kw\": \"Qj4J\",\n\t\"./ar-kw.js\": \"Qj4J\",\n\t\"./ar-ly\": \"HP3h\",\n\t\"./ar-ly.js\": \"HP3h\",\n\t\"./ar-ma\": \"CoRJ\",\n\t\"./ar-ma.js\": \"CoRJ\",\n\t\"./ar-ps\": \"TJgH\",\n\t\"./ar-ps.js\": \"TJgH\",\n\t\"./ar-sa\": \"gjCT\",\n\t\"./ar-sa.js\": \"gjCT\",\n\t\"./ar-tn\": \"bYM6\",\n\t\"./ar-tn.js\": \"bYM6\",\n\t\"./ar.js\": \"jnO4\",\n\t\"./az\": \"SFxW\",\n\t\"./az.js\": \"SFxW\",\n\t\"./be\": \"H8ED\",\n\t\"./be.js\": \"H8ED\",\n\t\"./bg\": \"hKrs\",\n\t\"./bg.js\": \"hKrs\",\n\t\"./bm\": \"p/rL\",\n\t\"./bm.js\": \"p/rL\",\n\t\"./bn\": \"kEOa\",\n\t\"./bn-bd\": \"loYQ\",\n\t\"./bn-bd.js\": \"loYQ\",\n\t\"./bn.js\": \"kEOa\",\n\t\"./bo\": \"0mo+\",\n\t\"./bo.js\": \"0mo+\",\n\t\"./br\": \"aIdf\",\n\t\"./br.js\": \"aIdf\",\n\t\"./bs\": \"JVSJ\",\n\t\"./bs.js\": \"JVSJ\",\n\t\"./ca\": \"1xZ4\",\n\t\"./ca.js\": \"1xZ4\",\n\t\"./cs\": \"PA2r\",\n\t\"./cs.js\": \"PA2r\",\n\t\"./cv\": \"A+xa\",\n\t\"./cv.js\": \"A+xa\",\n\t\"./cy\": \"l5ep\",\n\t\"./cy.js\": \"l5ep\",\n\t\"./da\": \"DxQv\",\n\t\"./da.js\": \"DxQv\",\n\t\"./de\": \"tGlX\",\n\t\"./de-at\": \"s+uk\",\n\t\"./de-at.js\": \"s+uk\",\n\t\"./de-ch\": \"u3GI\",\n\t\"./de-ch.js\": \"u3GI\",\n\t\"./de.js\": \"tGlX\",\n\t\"./dv\": \"WYrj\",\n\t\"./dv.js\": \"WYrj\",\n\t\"./el\": \"jUeY\",\n\t\"./el.js\": \"jUeY\",\n\t\"./en-au\": \"Dmvi\",\n\t\"./en-au.js\": \"Dmvi\",\n\t\"./en-ca\": \"OIYi\",\n\t\"./en-ca.js\": \"OIYi\",\n\t\"./en-gb\": \"Oaa7\",\n\t\"./en-gb.js\": \"Oaa7\",\n\t\"./en-ie\": \"4dOw\",\n\t\"./en-ie.js\": \"4dOw\",\n\t\"./en-il\": \"czMo\",\n\t\"./en-il.js\": \"czMo\",\n\t\"./en-in\": \"7C5Q\",\n\t\"./en-in.js\": \"7C5Q\",\n\t\"./en-nz\": \"b1Dy\",\n\t\"./en-nz.js\": \"b1Dy\",\n\t\"./en-sg\": \"t+mt\",\n\t\"./en-sg.js\": \"t+mt\",\n\t\"./eo\": \"Zduo\",\n\t\"./eo.js\": \"Zduo\",\n\t\"./es\": \"iYuL\",\n\t\"./es-do\": \"CjzT\",\n\t\"./es-do.js\": \"CjzT\",\n\t\"./es-mx\": \"tbfe\",\n\t\"./es-mx.js\": \"tbfe\",\n\t\"./es-us\": \"Vclq\",\n\t\"./es-us.js\": \"Vclq\",\n\t\"./es.js\": \"iYuL\",\n\t\"./et\": \"7BjC\",\n\t\"./et.js\": \"7BjC\",\n\t\"./eu\": \"D/JM\",\n\t\"./eu.js\": \"D/JM\",\n\t\"./fa\": \"jfSC\",\n\t\"./fa.js\": \"jfSC\",\n\t\"./fi\": \"gekB\",\n\t\"./fi.js\": \"gekB\",\n\t\"./fil\": \"1ppg\",\n\t\"./fil.js\": \"1ppg\",\n\t\"./fo\": \"ByF4\",\n\t\"./fo.js\": \"ByF4\",\n\t\"./fr\": \"nyYc\",\n\t\"./fr-ca\": \"2fjn\",\n\t\"./fr-ca.js\": \"2fjn\",\n\t\"./fr-ch\": \"Dkky\",\n\t\"./fr-ch.js\": \"Dkky\",\n\t\"./fr.js\": \"nyYc\",\n\t\"./fy\": \"cRix\",\n\t\"./fy.js\": \"cRix\",\n\t\"./ga\": \"USCx\",\n\t\"./ga.js\": \"USCx\",\n\t\"./gd\": \"9rRi\",\n\t\"./gd.js\": \"9rRi\",\n\t\"./gl\": \"iEDd\",\n\t\"./gl.js\": \"iEDd\",\n\t\"./gom-deva\": \"qvJo\",\n\t\"./gom-deva.js\": \"qvJo\",\n\t\"./gom-latn\": \"DKr+\",\n\t\"./gom-latn.js\": \"DKr+\",\n\t\"./gu\": \"4MV3\",\n\t\"./gu.js\": \"4MV3\",\n\t\"./he\": \"x6pH\",\n\t\"./he.js\": \"x6pH\",\n\t\"./hi\": \"3E1r\",\n\t\"./hi.js\": \"3E1r\",\n\t\"./hr\": \"S6ln\",\n\t\"./hr.js\": \"S6ln\",\n\t\"./hu\": \"WxRl\",\n\t\"./hu.js\": \"WxRl\",\n\t\"./hy-am\": \"1rYy\",\n\t\"./hy-am.js\": \"1rYy\",\n\t\"./id\": \"UDhR\",\n\t\"./id.js\": \"UDhR\",\n\t\"./is\": \"BVg3\",\n\t\"./is.js\": \"BVg3\",\n\t\"./it\": \"bpih\",\n\t\"./it-ch\": \"bxKX\",\n\t\"./it-ch.js\": \"bxKX\",\n\t\"./it.js\": \"bpih\",\n\t\"./ja\": \"B55N\",\n\t\"./ja.js\": \"B55N\",\n\t\"./jv\": \"tUCv\",\n\t\"./jv.js\": \"tUCv\",\n\t\"./ka\": \"IBtZ\",\n\t\"./ka.js\": \"IBtZ\",\n\t\"./kk\": \"bXm7\",\n\t\"./kk.js\": \"bXm7\",\n\t\"./km\": \"6B0Y\",\n\t\"./km.js\": \"6B0Y\",\n\t\"./kn\": \"PpIw\",\n\t\"./kn.js\": \"PpIw\",\n\t\"./ko\": \"Ivi+\",\n\t\"./ko.js\": \"Ivi+\",\n\t\"./ku\": \"JCF/\",\n\t\"./ku-kmr\": \"dVgr\",\n\t\"./ku-kmr.js\": \"dVgr\",\n\t\"./ku.js\": \"JCF/\",\n\t\"./ky\": \"lgnt\",\n\t\"./ky.js\": \"lgnt\",\n\t\"./lb\": \"RAwQ\",\n\t\"./lb.js\": \"RAwQ\",\n\t\"./lo\": \"sp3z\",\n\t\"./lo.js\": \"sp3z\",\n\t\"./lt\": \"JvlW\",\n\t\"./lt.js\": \"JvlW\",\n\t\"./lv\": \"uXwI\",\n\t\"./lv.js\": \"uXwI\",\n\t\"./me\": \"KTz0\",\n\t\"./me.js\": \"KTz0\",\n\t\"./mi\": \"aIsn\",\n\t\"./mi.js\": \"aIsn\",\n\t\"./mk\": \"aQkU\",\n\t\"./mk.js\": \"aQkU\",\n\t\"./ml\": \"AvvY\",\n\t\"./ml.js\": \"AvvY\",\n\t\"./mn\": \"lYtQ\",\n\t\"./mn.js\": \"lYtQ\",\n\t\"./mr\": \"Ob0Z\",\n\t\"./mr.js\": \"Ob0Z\",\n\t\"./ms\": \"6+QB\",\n\t\"./ms-my\": \"ZAMP\",\n\t\"./ms-my.js\": \"ZAMP\",\n\t\"./ms.js\": \"6+QB\",\n\t\"./mt\": \"G0Uy\",\n\t\"./mt.js\": \"G0Uy\",\n\t\"./my\": \"honF\",\n\t\"./my.js\": \"honF\",\n\t\"./nb\": \"bOMt\",\n\t\"./nb.js\": \"bOMt\",\n\t\"./ne\": \"OjkT\",\n\t\"./ne.js\": \"OjkT\",\n\t\"./nl\": \"+s0g\",\n\t\"./nl-be\": \"2ykv\",\n\t\"./nl-be.js\": \"2ykv\",\n\t\"./nl.js\": \"+s0g\",\n\t\"./nn\": \"uEye\",\n\t\"./nn.js\": \"uEye\",\n\t\"./oc-lnc\": \"Fnuy\",\n\t\"./oc-lnc.js\": \"Fnuy\",\n\t\"./pa-in\": \"8/+R\",\n\t\"./pa-in.js\": \"8/+R\",\n\t\"./pl\": \"jVdC\",\n\t\"./pl.js\": \"jVdC\",\n\t\"./pt\": \"8mBD\",\n\t\"./pt-br\": \"0tRk\",\n\t\"./pt-br.js\": \"0tRk\",\n\t\"./pt.js\": \"8mBD\",\n\t\"./ro\": \"lyxo\",\n\t\"./ro.js\": \"lyxo\",\n\t\"./ru\": \"lXzo\",\n\t\"./ru.js\": \"lXzo\",\n\t\"./sd\": \"Z4QM\",\n\t\"./sd.js\": \"Z4QM\",\n\t\"./se\": \"//9w\",\n\t\"./se.js\": \"//9w\",\n\t\"./si\": \"7aV9\",\n\t\"./si.js\": \"7aV9\",\n\t\"./sk\": \"e+ae\",\n\t\"./sk.js\": \"e+ae\",\n\t\"./sl\": \"gVVK\",\n\t\"./sl.js\": \"gVVK\",\n\t\"./sq\": \"yPMs\",\n\t\"./sq.js\": \"yPMs\",\n\t\"./sr\": \"zx6S\",\n\t\"./sr-cyrl\": \"E+lV\",\n\t\"./sr-cyrl.js\": \"E+lV\",\n\t\"./sr.js\": \"zx6S\",\n\t\"./ss\": \"Ur1D\",\n\t\"./ss.js\": \"Ur1D\",\n\t\"./sv\": \"X709\",\n\t\"./sv.js\": \"X709\",\n\t\"./sw\": \"dNwA\",\n\t\"./sw.js\": \"dNwA\",\n\t\"./ta\": \"PeUW\",\n\t\"./ta.js\": \"PeUW\",\n\t\"./te\": \"XLvN\",\n\t\"./te.js\": \"XLvN\",\n\t\"./tet\": \"V2x9\",\n\t\"./tet.js\": \"V2x9\",\n\t\"./tg\": \"Oxv6\",\n\t\"./tg.js\": \"Oxv6\",\n\t\"./th\": \"EOgW\",\n\t\"./th.js\": \"EOgW\",\n\t\"./tk\": \"Wv91\",\n\t\"./tk.js\": \"Wv91\",\n\t\"./tl-ph\": \"Dzi0\",\n\t\"./tl-ph.js\": \"Dzi0\",\n\t\"./tlh\": \"z3Vd\",\n\t\"./tlh.js\": \"z3Vd\",\n\t\"./tr\": \"DoHr\",\n\t\"./tr.js\": \"DoHr\",\n\t\"./tzl\": \"z1FC\",\n\t\"./tzl.js\": \"z1FC\",\n\t\"./tzm\": \"wQk9\",\n\t\"./tzm-latn\": \"tT3J\",\n\t\"./tzm-latn.js\": \"tT3J\",\n\t\"./tzm.js\": \"wQk9\",\n\t\"./ug-cn\": \"YRex\",\n\t\"./ug-cn.js\": \"YRex\",\n\t\"./uk\": \"raLr\",\n\t\"./uk.js\": \"raLr\",\n\t\"./ur\": \"UpQW\",\n\t\"./ur.js\": \"UpQW\",\n\t\"./uz\": \"Loxo\",\n\t\"./uz-latn\": \"AQ68\",\n\t\"./uz-latn.js\": \"AQ68\",\n\t\"./uz.js\": \"Loxo\",\n\t\"./vi\": \"KSF8\",\n\t\"./vi.js\": \"KSF8\",\n\t\"./x-pseudo\": \"/X5v\",\n\t\"./x-pseudo.js\": \"/X5v\",\n\t\"./yo\": \"fzPg\",\n\t\"./yo.js\": \"fzPg\",\n\t\"./zh-cn\": \"XDpg\",\n\t\"./zh-cn.js\": \"XDpg\",\n\t\"./zh-hk\": \"SatO\",\n\t\"./zh-hk.js\": \"SatO\",\n\t\"./zh-mo\": \"OmwH\",\n\t\"./zh-mo.js\": \"OmwH\",\n\t\"./zh-tw\": \"kOpN\",\n\t\"./zh-tw.js\": \"kOpN\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"RnhZ\";","// packages\nconst { h, Component } = require(\"preact\");\nimport { geoMercator, geoPath } from 'd3';\n\n// components\n\n// internal\n\nclass ByCategoryTitle extends Component {\n  constructor() {\n    super();\n\n    this.state = {}\n  }\n\n  render() {\n    const projection = geoMercator()\n      .fitSize([60, 60], this.props.mapData);\n    const path = geoPath(projection);\n   \n    return (\n      <div class=\"bar-cell by-category-title\">\n        <div class=\"map\">\n          <svg\n            width=\"60\"\n            height=\"60\"\n          >\n            <g class=\"map\">\n              {this.props.mapData.features.map(d => (\n                <path\n                  d={path(d)}\n                  fill={d.properties.category == this.props.tag ? \"#333333\" : \"lightgray\"}\n                ></path>\n              ))}\n            </g>\n          </svg>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default ByCategoryTitle;","// packages\nconst { h, Component } = require(\"preact\");\nimport { select, scaleLinear } from 'd3';\nimport { formatNumberPct, formatNumberWithCommas } from '../../utils/utils';\nconst journalize = require('journalize');\n\n// components\n\n// internal\n\nclass ByCategoryBar extends Component {\n  constructor() {\n    super();\n\n    this.state = {\n    }\n  }\n\n  drawBar() {\n    const container = select(`.bar-container-${this.props.category}`)\n    const width = container.node().clientWidth-30;\n    const height = 60;\n    const rectHeight = 30;\n    const margin = {t: 31, l: 0};\n\n    const earlyVote2026 = +this.props.data.early_vote_2026 || 0;\n    const totalVotes2026 = +this.props.data.total_votes_2026 || 0;\n    const edayVote2026 = totalVotes2026 - earlyVote2026;\n    const registered2026 = +this.props.data.registered_2026 || 0;\n\n    // set scales\n    const xScale = scaleLinear()\n      .domain([0, registered2026])\n      .range([margin.l, width]);\n\n    const xPctScale = scaleLinear()\n      .domain([0, 100])\n      .range([margin.l, width]);\n\n    const svg = container\n      .append('svg')\n      .attr('width', width)\n      .attr('height', height)\n    const barsG = svg.append('g')\n      .attr('class', 'bars');\n    \n    \n    // people who haven't voted\n    barsG.append('rect')\n      .attr('class', 'bar-not-voted')\n      .attr('x', xScale(totalVotes2026))\n      .attr('y', margin.t)\n      .attr('width', xScale(registered2026 - totalVotes2026))\n      .attr('height', rectHeight)\n      .attr('fill', 'lightgray')\n      .attr('fill-opacity', 0.7)\n      .attr('stroke', 'lightgray')\n      .attr('stroke-width', 1.5)\n\n    // people voted on election day\n    barsG.append('rect')\n      .attr('class', 'bar-total-voted')\n      .attr('x', xScale(earlyVote2026) + 1)\n      .attr('y', margin.t)\n      .attr('width', xScale(edayVote2026))\n      .attr('height', rectHeight)\n      .attr('fill', '#3fa293')\n      .attr('fill-opacity', 0.7)\n      .attr('stroke', '#3fa293')\n      .attr('stroke-width', 1.5)\n\n    // people voted early\n    barsG.append('rect')\n      .attr('class', 'bar-voted')\n      .attr('x', margin.l)\n      .attr('y', margin.t)\n      .attr('width', xScale(earlyVote2026))\n      .attr('height', rectHeight)\n      .attr('fill', '#ffc200')\n      .attr('fill-opacity', 0.7)\n      .attr('stroke', '#ffc200')\n      .attr('stroke-width', 1.5)\n    // 2022 early\n    const prevEv = barsG.append('g')\n      .attr('class', '2022-early')\n    prevEv.append('polygon')\n      .attr('points', `${xPctScale(+this.props.data.early_vote_2022 / +this.props.data.registered_2022 * 100) - 5} ${margin.t - 7}, ${xPctScale(+this.props.data.early_vote_2022 / +this.props.data.registered_2022 * 100) + 5} ${margin.t - 7}, ${xPctScale(+this.props.data.early_vote_2022 / +this.props.data.registered_2022 * 100)} ${margin.t}`)\n      .attr('fill', '#1a2b4b');\n    prevEv.append('line')\n      .attr('x1', xPctScale(+this.props.data.early_vote_2022 / +this.props.data.registered_2022 * 100))\n      .attr('x2', xPctScale(+this.props.data.early_vote_2022 / +this.props.data.registered_2022 * 100))\n      .attr('y1', margin.t)\n      .attr('y2', margin.t + rectHeight)\n      .attr('stroke', '#1a2b4b')\n      .attr('stroke-width', 1.5)\n      .attr('stroke-dasharray', ('2, 2'));\n    if(this.props.category == 'red') {\n      const prevEvText = prevEv.append('text')\n        .attr('transform', `translate(${xPctScale(+this.props.data.early_vote_2022 / +this.props.data.registered_2022 * 100) + 5}, 10)`)\n        .attr('text-anchor', 'end')\n        .attr('fill', 'gray')\n        .style('font-size', '10px')\n      prevEvText.append(\"tspan\")\n        .attr('x', 0)\n        .attr('dy', 0)\n        .text('2022 early')\n      prevEvText.append('tspan')\n        .attr('x', 0)\n        .attr('dy', 10)\n        .text('voters (%)')\n      const votereg = barsG.append('g')\n        .attr('class','votereg-numbers')\n      votereg.append('text')\n        .attr('x', width-5)\n        .attr('dy', 50)\n        .attr('text-anchor', 'end')\n        .text('100% turnout')\n        .attr('fill', 'black')\n        .style('font-size', '11px')\n    }\n    // 2022 total\n    const prevTotal = barsG.append('g')\n      .attr('class', '2022-total')\n    prevTotal.append('polygon')\n      .attr('points', `${xPctScale(+this.props.data.total_votes_2022 / +this.props.data.registered_2022 * 100) - 5} ${margin.t - 7}, ${xPctScale(+this.props.data.total_votes_2022 / +this.props.data.registered_2022 * 100) + 5} ${margin.t - 7}, ${xPctScale(+this.props.data.total_votes_2022 / +this.props.data.registered_2022 * 100)} ${margin.t}`)\n      .attr('fill', '#348094');\n    prevTotal.append('line')\n      .attr('x1', xPctScale(+this.props.data.total_votes_2022 / +this.props.data.registered_2022 * 100))\n      .attr('x2', xPctScale(+this.props.data.total_votes_2022 / +this.props.data.registered_2022 * 100))\n      .attr('y1', margin.t)\n      .attr('y2', margin.t + rectHeight)\n      .attr('stroke', '#348094')\n      .attr('stroke-width', 1.5)\n      .attr('stroke-dasharray', ('2, 2'));\n    if(this.props.category == \"red\") {\n      const prevTotalText = prevTotal.append('text')\n        .attr('transform', `translate(${xPctScale(+this.props.data.total_votes_2022 / +this.props.data.registered_2022 * 100) - 5}, 10)`)\n        .attr('fill', '#222222')\n        .attr('text-anchor', 'start')\n        .style('font-size', '10px')\n      prevTotalText.append(\"tspan\")\n        .attr('x', 0)\n        .attr('dy', 0)\n        .text('2022 total')\n      prevTotalText.append('tspan')\n        .attr('x', 0)\n        .attr('dy', 10)\n        .text('voters (%)')\n    }\n\n    // % voted\n    select(`.bar-container-${this.props.category}`)\n      .append('div')\n      .attr('class', 'text')\n      .attr('id',`bar-percentage-${this.props.category}`)\n      .attr('style', 'color:#444444')\n      .html(`<span class=\"voted-early-${this.props.category}\">${formatNumberPct(earlyVote2026 / registered2026 * 100)}</span> early votes, <span>${formatNumberPct(edayVote2026 / registered2026 * 100)}</span> on election day`)\n    // select(`#bar-percentage-${this.props.category}`)\n    //   .append('span')\n    //   .attr('class', 'text')\n    //   .attr('style', 'color:#444444')\n    //   .attr('style',`margin-left:${xScale(this.props.data.early_vote_2024)-width(${voted-early-${this.props.category}})}px`)\n    //   .html(`<span>${formatNumberPct(+this.props.data.early_vote_2024 / +this.props.data.registered_2024 * 100)}</span>${this.props.data.category == \"red\" ? \" voted early\" : \"\"}`)\n    // const annotationsG = barsG.append('g')\n    //   .attr('class', 'annotation')\n    // annotationsG.append('text')\n    //   .attr('class', 'pct_voted')\n    //   .attr('x', xScale(+this.props.data.cum_ev_total) + 2)\n    //   .attr('y', margin.t + rectHeight - 3)\n    //   .text(formatNumberPct(+this.props.data.cum_ev_total / +this.props.data.registered_2024 * 100))\n    //   .style('font-weight', 'bold')\n    // annotationsG.append('text')\n    //   .attr('class', 'cum_ev')\n    //   .attr('x', xScale(0) + 2)\n    //   .attr('y', margin.t + rectHeight + 12)\n    //   .text(`${formatNumberWithCommas(+this.props.data.cum_ev_total)} votes${this.props.data.category == \"border\" ? \" cast so far\" : \"\"}`)\n  }\n\n  redrawBar() {\n    select(`.bar-container-${this.props.category}`)\n      .select('svg')\n      .remove()\n    select(`.bar-container-${this.props.category}`)\n      .select('.text')\n      .remove()\n    this.drawBar(); \n  }\n\n  componentDidMount() {\n    this.drawBar();\n\n    window.addEventListener('resize', () => {\n      this.redrawBar();\n    })\n  }\n\n  render() {   \n    return (\n      <div class={`bar-cell bar-container-by-category bar-container-${this.props.category}`}>\n      </div>\n    )\n  }\n}\n\nexport default ByCategoryBar;","const { h, Component } = require(\"preact\");\nimport { select, scaleLinear } from 'd3';\nimport { formatNumberPct, formatNumberWithCommas } from '../../utils/utils';\n\nclass BarLegend extends Component {\n    constructor() {\n      super();\n  \n      this.state = {\n      }\n    }\n\n    drawLegend(){\n        const container = select(`.categories-bars-legend`)\n        const width = container.node().clientWidth;\n        const height = 30;\n        const margin = {t: 31, l: 0};\n\n        const svg = container\n            .append('svg')\n            .attr('width', width)\n            .attr('height', height)\n\n        const legend = svg.append('g')\n            .attr('class', 'legend');\n        \n        legend.append('rect')\n            .attr('class','key')\n            .attr('x',0)\n            .attr('y', 0)\n            .attr('width', 17)\n            .attr('height', 17)\n            .attr('fill', '#ffc200')\n            .attr('fill-opacity', 0.7)\n        legend.append('text')\n            .attr('class','key-text')\n            .attr('x', 21)\n            .attr('dy',12)\n            .attr('text-anchor', 'start')\n            .text('Early votes')\n            .attr('fill', 'black')\n            .style('font-size', '12px')\n        legend.append('rect')\n            .attr('class','key')\n            .attr('x',90)\n            .attr('y', 0)\n            .attr('width', 17)\n            .attr('height', 17)\n            .attr('fill', '#3fa293')\n            .attr('fill-opacity', 0.7)\n        legend.append('text')\n            .attr('class','key-text')\n            .attr('x', 111)\n            .attr('dy',12)\n            .attr('text-anchor', 'start')\n            .text('Election day votes')\n            .attr('fill', 'black')\n            .style('font-size', '12px')\n    }\n\n    redrawLegend() {\n        select(`.categories-bars-legend`)\n          .select('svg')\n          .remove()\n        select(`.categories-bars-legend`)\n          .select('.text')\n          .remove()\n        this.drawLegend(); \n      }\n\n    componentDidMount() {\n        this.drawLegend();\n    \n        window.addEventListener('resize', () => {\n          this.redrawLegend();\n        })\n      }\n\n    render() {   \n        return (\n          <div class='categories-bars-legend'></div>\n        )\n      }\n}\n\nexport default BarLegend;","// packages\nconst { h, Component } = require(\"preact\");\nimport { formatNumberAnnotation, formatNumberWithCommas } from '../../utils/utils';\n\n// components\n\n// internal\n\nclass Annotation extends Component {\n  constructor() {\n    super();\n\n    this.state = {}\n  }\n\n  render() {\n    return (\n      <div class={`bar-cell annotation${this.props.county == \"HARRIS\" | this.props.category == \"red\" ? \"-first\" : \"\"}`}>\n        <span>{this.props.regVoters > 1000000 ? formatNumberAnnotation(this.props.regVoters) : formatNumberWithCommas(this.props.regVoters)}</span>{this.props.county == \"HARRIS\" | this.props.category == \"red\" ? \"registered voters\" : \"\"}\n      </div>\n    )\n  }\n}\n\nexport default Annotation;","// packages\nconst { h, Component } = require(\"preact\");\n\n// components\nimport ByCategoryTitle from './ByCategoryTitle';\nimport ByCategoryBar from './ByCategoryBar';\nimport BarLegend from './BarLegend'\nimport Annotation from './Annotation';\n\n// internal\n\nclass ByCategoryRow extends Component {\n  constructor() {\n    super();\n\n    this.state = {}\n  }\n  \n  render() {   \n    console.log(this.props.data)\n    return (\n      <div>\n        <div class=\"bar-legend\">\n          <BarLegend />\n        </div>\n        <div class=\"by-category\">\n          {this.props.data.map(d => (\n            <div>\n              <div class=\"bar-row-top\">\n                <div class=\"group-name\">{d.title}</div>\n                <div class=\"counties\">{d.description}</div>\n              </div>\n              <div class=\"bar-row-bottom\">\n                <ByCategoryTitle\n                  category={d.category}\n                  mapData={this.props.mapData}\n                  tag={d.category}\n                />\n                <ByCategoryBar\n                  data={d}\n                  category={d.category}\n                  desc={d.description}\n                />\n                {/* <Annotation\n                  regVoters={d.registered_2024}\n                  category={d.category}\n                /> */}\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default ByCategoryRow;","// packages\nconst { h, Component } = require(\"preact\");\nimport * as moment from 'moment';\n\n// components\nimport ByCategoryRow from './ByCategory/ByCategoryRow.js';\n\n// internal\nimport data from '../../../data/data.json';\nimport mapData from '../../../data/county_category_map.json';\n\nconst asOfDate = moment('2022-11-08', 'YYYY-MM-DD');\n\nclass CategoryComparsion extends Component {\n  constructor() {\n    super();\n\n    this.state = {}\n  }\n\n  render() {\n    // const sortedData = data['daily_by_category'].sort((a, b) => b.reg_voters - a.reg_voters)\n    // console.log(sortedData)\n   \n    return (\n      <div>\n        <ByCategoryRow\n          data={data['categories']}\n          date={asOfDate}\n          mapData={mapData}\n        />\n      </div>\n    )\n  }\n}\n\nexport default CategoryComparsion;","import { h, render } from 'preact';\nimport { initFrame, sendFrameHeight, initFrameAndPoll } from '@newswire/frames';\nimport CategoryComparison from '../components/CategoryComparison.js';\n\nrender(<CategoryComparison />, document.getElementById(\"category-comparison\"));\ninitFrameAndPoll(200);\n\nif (process.env.NODE_ENV === 'development') {\n  require('preact/debug');\n}\n"],"sourceRoot":""}