\n New York City is by many measures the most culturally and\n socioeconomically diverse city in America. Coupled with NYC’s massive\n population and intercity transit system, these factors put together\n have created the conditions for a diverse and interesting population\n of subway riders in NYC.\n
\n \n
\n The L Train, which serves commuters in Brooklyn, Manhattan, and\n Queens, is no exception to this, and spans a wide variety of\n neighborhoods within these boroughs. This project serves to highlight\n the diversity of the people living along this line, as well as the\n inequities between the neighborhoods this line services.\n
\n In this visualization, we will simulate a trip from one end of the L\n Train in Brooklyn, all the way to the other end in Manhattan. This\n simulation will incorporate subway ridership data, as well as 2020\n Census data to provide a cohesive demonstration of this ride.\n
\n \n
\n Along the way we will be able to see how historical forces such as\n racial segregation and gentrification have shaped the demographics of\n the people in the neighborhoods that this train serves.\n
\n );\n};\n\nexport default Intro;\n","import { useEffect } from \"react\";\nimport * as d3 from \"d3\";\nimport omit from \"lodash/omit\";\n\nimport { chartTypeInfo, stops } from \"../logic/data\";\n\nconst dummyRaces = [\n {\n stop: 0,\n \"Hispanic or Latino\": 5,\n \"White alone\": 3,\n \"Black or African American alone\": 28,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 0,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 0,\n },\n {\n stop: 1,\n \"Hispanic or Latino\": 6,\n \"White alone\": 3,\n \"Black or African American alone\": 22,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 0,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 0,\n },\n {\n stop: 2,\n \"Hispanic or Latino\": 8,\n \"White alone\": 3,\n \"Black or African American alone\": 29,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 0,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 1,\n },\n {\n stop: 3,\n \"Hispanic or Latino\": 13,\n \"White alone\": 1,\n \"Black or African American alone\": 32,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 1,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 2,\n },\n {\n stop: 4,\n \"Hispanic or Latino\": 19,\n \"White alone\": 2,\n \"Black or African American alone\": 32,\n \"American Indian and Alaska Native alone\": 0,\n \"Asian alone\": 1,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 3,\n },\n {\n stop: 5,\n \"Hispanic or Latino\": 23,\n \"White alone\": 3,\n \"Black or African American alone\": 30,\n \"American Indian and Alaska Native alone\": 0,\n \"Asian alone\": 0,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 1,\n },\n {\n stop: 6,\n \"Hispanic or Latino\": 23,\n \"White alone\": 5,\n \"Black or African American alone\": 32,\n \"American Indian and Alaska Native alone\": 0,\n \"Asian alone\": 3,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 0,\n },\n {\n stop: 7,\n \"Hispanic or Latino\": 24,\n \"White alone\": 5,\n \"Black or African American alone\": 30,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 4,\n \"Native Hawaiian and Other Pacific Islander alone\": 1,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 1,\n },\n {\n stop: 8,\n \"Hispanic or Latino\": 27,\n \"White alone\": 10,\n \"Black or African American alone\": 27,\n \"American Indian and Alaska Native alone\": 2,\n \"Asian alone\": 5,\n \"Native Hawaiian and Other Pacific Islander alone\": 1,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 1,\n },\n {\n stop: 9,\n \"Hispanic or Latino\": 36,\n \"White alone\": 11,\n \"Black or African American alone\": 24,\n \"American Indian and Alaska Native alone\": 2,\n \"Asian alone\": 5,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 0,\n \"Population of two or more races:\": 1,\n },\n {\n stop: 10,\n \"Hispanic or Latino\": 27,\n \"White alone\": 8,\n \"Black or African American alone\": 21,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 5,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 0,\n \"Population of two or more races:\": 1,\n },\n {\n stop: 11,\n \"Hispanic or Latino\": 49,\n \"White alone\": 31,\n \"Black or African American alone\": 16,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 11,\n \"Native Hawaiian and Other Pacific Islander alone\": 1,\n \"Some Other Race alone\": 2,\n \"Population of two or more races:\": 4,\n },\n {\n stop: 12,\n \"Hispanic or Latino\": 58,\n \"White alone\": 37,\n \"Black or African American alone\": 12,\n \"American Indian and Alaska Native alone\": 0,\n \"Asian alone\": 10,\n \"Native Hawaiian and Other Pacific Islander alone\": 3,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 4,\n },\n {\n stop: 13,\n \"Hispanic or Latino\": 57,\n \"White alone\": 35,\n \"Black or African American alone\": 16,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 10,\n \"Native Hawaiian and Other Pacific Islander alone\": 3,\n \"Some Other Race alone\": 3,\n \"Population of two or more races:\": 5,\n },\n {\n stop: 14,\n \"Hispanic or Latino\": 59,\n \"White alone\": 34,\n \"Black or African American alone\": 22,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 12,\n \"Native Hawaiian and Other Pacific Islander alone\": 3,\n \"Some Other Race alone\": 3,\n \"Population of two or more races:\": 7,\n },\n {\n stop: 15,\n \"Hispanic or Latino\": 55,\n \"White alone\": 46,\n \"Black or African American alone\": 20,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 14,\n \"Native Hawaiian and Other Pacific Islander alone\": 3,\n \"Some Other Race alone\": 3,\n \"Population of two or more races:\": 6,\n },\n {\n stop: 16,\n \"Hispanic or Latino\": 44,\n \"White alone\": 64,\n \"Black or African American alone\": 16,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 11,\n \"Native Hawaiian and Other Pacific Islander alone\": 3,\n \"Some Other Race alone\": 3,\n \"Population of two or more races:\": 6,\n },\n {\n stop: 17,\n \"Hispanic or Latino\": 33,\n \"White alone\": 80,\n \"Black or African American alone\": 13,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 15,\n \"Native Hawaiian and Other Pacific Islander alone\": 2,\n \"Some Other Race alone\": 2,\n \"Population of two or more races:\": 7,\n },\n {\n stop: 18,\n \"Hispanic or Latino\": 43,\n \"White alone\": 91,\n \"Black or African American alone\": 8,\n \"American Indian and Alaska Native alone\": 2,\n \"Asian alone\": 21,\n \"Native Hawaiian and Other Pacific Islander alone\": 3,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 5,\n },\n {\n stop: 19,\n \"Hispanic or Latino\": 33,\n \"White alone\": 101,\n \"Black or African American alone\": 7,\n \"American Indian and Alaska Native alone\": 2,\n \"Asian alone\": 24,\n \"Native Hawaiian and Other Pacific Islander alone\": 3,\n \"Some Other Race alone\": 0,\n \"Population of two or more races:\": 4,\n },\n {\n stop: 20,\n \"Hispanic or Latino\": 25,\n \"White alone\": 105,\n \"Black or African American alone\": 8,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 26,\n \"Native Hawaiian and Other Pacific Islander alone\": 1,\n \"Some Other Race alone\": 0,\n \"Population of two or more races:\": 8,\n },\n {\n stop: 21,\n \"Hispanic or Latino\": 11,\n \"White alone\": 119,\n \"Black or African American alone\": 9,\n \"American Indian and Alaska Native alone\": 1,\n \"Asian alone\": 26,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 2,\n \"Population of two or more races:\": 12,\n },\n {\n stop: 22,\n \"Hispanic or Latino\": 14,\n \"White alone\": 114,\n \"Black or African American alone\": 5,\n \"American Indian and Alaska Native alone\": 0,\n \"Asian alone\": 21,\n \"Native Hawaiian and Other Pacific Islander alone\": 0,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 9,\n },\n {\n stop: 23,\n \"Hispanic or Latino\": 19,\n \"White alone\": 99,\n \"Black or African American alone\": 7,\n \"American Indian and Alaska Native alone\": 2,\n \"Asian alone\": 14,\n \"Native Hawaiian and Other Pacific Islander alone\": 4,\n \"Some Other Race alone\": 1,\n \"Population of two or more races:\": 5,\n },\n];\nconst dummyIncomes = [\n {\n stop: 0,\n \"Less than $10,000\": 2,\n \"$10,000 to $14,999\": 0,\n \"$15,000 to $24,999\": 2,\n \"$25,000 to $34,999\": 3,\n \"$35,000 to $49,999\": 6,\n \"$50,000 to $74,999\": 8,\n \"$75,000 to $99,999\": 8,\n \"$100,000 to $149,999\": 4,\n \"$150,000 to $199,999\": 4,\n \"$200,000 or more\": 1,\n },\n {\n stop: 1,\n \"Less than $10,000\": 3,\n \"$10,000 to $14,999\": 0,\n \"$15,000 to $24,999\": 1,\n \"$25,000 to $34,999\": 3,\n \"$35,000 to $49,999\": 5,\n \"$50,000 to $74,999\": 7,\n \"$75,000 to $99,999\": 7,\n \"$100,000 to $149,999\": 3,\n \"$150,000 to $199,999\": 4,\n \"$200,000 or more\": 0,\n },\n {\n stop: 2,\n \"Less than $10,000\": 7,\n \"$10,000 to $14,999\": 2,\n \"$15,000 to $24,999\": 3,\n \"$25,000 to $34,999\": 4,\n \"$35,000 to $49,999\": 7,\n \"$50,000 to $74,999\": 7,\n \"$75,000 to $99,999\": 4,\n \"$100,000 to $149,999\": 4,\n \"$150,000 to $199,999\": 4,\n \"$200,000 or more\": 1,\n },\n {\n stop: 3,\n \"Less than $10,000\": 6,\n \"$10,000 to $14,999\": 3,\n \"$15,000 to $24,999\": 7,\n \"$25,000 to $34,999\": 3,\n \"$35,000 to $49,999\": 9,\n \"$50,000 to $74,999\": 8,\n \"$75,000 to $99,999\": 6,\n \"$100,000 to $149,999\": 4,\n \"$150,000 to $199,999\": 4,\n \"$200,000 or more\": 1,\n },\n {\n stop: 4,\n \"Less than $10,000\": 11,\n \"$10,000 to $14,999\": 5,\n \"$15,000 to $24,999\": 7,\n \"$25,000 to $34,999\": 2,\n \"$35,000 to $49,999\": 8,\n \"$50,000 to $74,999\": 11,\n \"$75,000 to $99,999\": 6,\n \"$100,000 to $149,999\": 4,\n \"$150,000 to $199,999\": 2,\n \"$200,000 or more\": 2,\n },\n {\n stop: 5,\n \"Less than $10,000\": 14,\n \"$10,000 to $14,999\": 4,\n \"$15,000 to $24,999\": 8,\n \"$25,000 to $34,999\": 2,\n \"$35,000 to $49,999\": 8,\n \"$50,000 to $74,999\": 10,\n \"$75,000 to $99,999\": 5,\n \"$100,000 to $149,999\": 3,\n \"$150,000 to $199,999\": 2,\n \"$200,000 or more\": 2,\n },\n {\n stop: 6,\n \"Less than $10,000\": 11,\n \"$10,000 to $14,999\": 6,\n \"$15,000 to $24,999\": 12,\n \"$25,000 to $34,999\": 1,\n \"$35,000 to $49,999\": 9,\n \"$50,000 to $74,999\": 9,\n \"$75,000 to $99,999\": 6,\n \"$100,000 to $149,999\": 5,\n \"$150,000 to $199,999\": 2,\n \"$200,000 or more\": 3,\n },\n {\n stop: 7,\n \"Less than $10,000\": 12,\n \"$10,000 to $14,999\": 8,\n \"$15,000 to $24,999\": 9,\n \"$25,000 to $34,999\": 5,\n \"$35,000 to $49,999\": 10,\n \"$50,000 to $74,999\": 9,\n \"$75,000 to $99,999\": 6,\n \"$100,000 to $149,999\": 6,\n \"$150,000 to $199,999\": 1,\n \"$200,000 or more\": 1,\n },\n {\n stop: 8,\n \"Less than $10,000\": 8,\n \"$10,000 to $14,999\": 8,\n \"$15,000 to $24,999\": 8,\n \"$25,000 to $34,999\": 6,\n \"$35,000 to $49,999\": 9,\n \"$50,000 to $74,999\": 12,\n \"$75,000 to $99,999\": 6,\n \"$100,000 to $149,999\": 9,\n \"$150,000 to $199,999\": 5,\n \"$200,000 or more\": 3,\n },\n {\n stop: 9,\n \"Less than $10,000\": 8,\n \"$10,000 to $14,999\": 8,\n \"$15,000 to $24,999\": 10,\n \"$25,000 to $34,999\": 7,\n \"$35,000 to $49,999\": 12,\n \"$50,000 to $74,999\": 9,\n \"$75,000 to $99,999\": 9,\n \"$100,000 to $149,999\": 7,\n \"$150,000 to $199,999\": 5,\n \"$200,000 or more\": 4,\n },\n {\n stop: 10,\n \"Less than $10,000\": 7,\n \"$10,000 to $14,999\": 5,\n \"$15,000 to $24,999\": 6,\n \"$25,000 to $34,999\": 4,\n \"$35,000 to $49,999\": 8,\n \"$50,000 to $74,999\": 7,\n \"$75,000 to $99,999\": 8,\n \"$100,000 to $149,999\": 9,\n \"$150,000 to $199,999\": 5,\n \"$200,000 or more\": 4,\n },\n {\n stop: 11,\n \"Less than $10,000\": 8,\n \"$10,000 to $14,999\": 7,\n \"$15,000 to $24,999\": 13,\n \"$25,000 to $34,999\": 13,\n \"$35,000 to $49,999\": 13,\n \"$50,000 to $74,999\": 18,\n \"$75,000 to $99,999\": 12,\n \"$100,000 to $149,999\": 15,\n \"$150,000 to $199,999\": 10,\n \"$200,000 or more\": 6,\n },\n {\n stop: 12,\n \"Less than $10,000\": 11,\n \"$10,000 to $14,999\": 6,\n \"$15,000 to $24,999\": 13,\n \"$25,000 to $34,999\": 14,\n \"$35,000 to $49,999\": 13,\n \"$50,000 to $74,999\": 24,\n \"$75,000 to $99,999\": 12,\n \"$100,000 to $149,999\": 16,\n \"$150,000 to $199,999\": 9,\n \"$200,000 or more\": 7,\n },\n {\n stop: 13,\n \"Less than $10,000\": 13,\n \"$10,000 to $14,999\": 7,\n \"$15,000 to $24,999\": 14,\n \"$25,000 to $34,999\": 14,\n \"$35,000 to $49,999\": 13,\n \"$50,000 to $74,999\": 22,\n \"$75,000 to $99,999\": 8,\n \"$100,000 to $149,999\": 16,\n \"$150,000 to $199,999\": 16,\n \"$200,000 or more\": 7,\n },\n {\n stop: 14,\n \"Less than $10,000\": 20,\n \"$10,000 to $14,999\": 7,\n \"$15,000 to $24,999\": 12,\n \"$25,000 to $34,999\": 17,\n \"$35,000 to $49,999\": 13,\n \"$50,000 to $74,999\": 21,\n \"$75,000 to $99,999\": 19,\n \"$100,000 to $149,999\": 13,\n \"$150,000 to $199,999\": 11,\n \"$200,000 or more\": 8,\n },\n {\n stop: 15,\n \"Less than $10,000\": 17,\n \"$10,000 to $14,999\": 8,\n \"$15,000 to $24,999\": 7,\n \"$25,000 to $34,999\": 15,\n \"$35,000 to $49,999\": 18,\n \"$50,000 to $74,999\": 17,\n \"$75,000 to $99,999\": 19,\n \"$100,000 to $149,999\": 15,\n \"$150,000 to $199,999\": 21,\n \"$200,000 or more\": 11,\n },\n {\n stop: 16,\n \"Less than $10,000\": 14,\n \"$10,000 to $14,999\": 7,\n \"$15,000 to $24,999\": 6,\n \"$25,000 to $34,999\": 15,\n \"$35,000 to $49,999\": 15,\n \"$50,000 to $74,999\": 17,\n \"$75,000 to $99,999\": 24,\n \"$100,000 to $149,999\": 18,\n \"$150,000 to $199,999\": 20,\n \"$200,000 or more\": 12,\n },\n {\n stop: 17,\n \"Less than $10,000\": 9,\n \"$10,000 to $14,999\": 7,\n \"$15,000 to $24,999\": 7,\n \"$25,000 to $34,999\": 12,\n \"$35,000 to $49,999\": 11,\n \"$50,000 to $74,999\": 18,\n \"$75,000 to $99,999\": 19,\n \"$100,000 to $149,999\": 23,\n \"$150,000 to $199,999\": 27,\n \"$200,000 or more\": 20,\n },\n {\n stop: 18,\n \"Less than $10,000\": 10,\n \"$10,000 to $14,999\": 8,\n \"$15,000 to $24,999\": 9,\n \"$25,000 to $34,999\": 8,\n \"$35,000 to $49,999\": 12,\n \"$50,000 to $74,999\": 26,\n \"$75,000 to $99,999\": 19,\n \"$100,000 to $149,999\": 30,\n \"$150,000 to $199,999\": 23,\n \"$200,000 or more\": 29,\n },\n {\n stop: 19,\n \"Less than $10,000\": 9,\n \"$10,000 to $14,999\": 8,\n \"$15,000 to $24,999\": 9,\n \"$25,000 to $34,999\": 6,\n \"$35,000 to $49,999\": 12,\n \"$50,000 to $74,999\": 30,\n \"$75,000 to $99,999\": 17,\n \"$100,000 to $149,999\": 24,\n \"$150,000 to $199,999\": 26,\n \"$200,000 or more\": 33,\n },\n {\n stop: 20,\n \"Less than $10,000\": 14,\n \"$10,000 to $14,999\": 6,\n \"$15,000 to $24,999\": 10,\n \"$25,000 to $34,999\": 5,\n \"$35,000 to $49,999\": 10,\n \"$50,000 to $74,999\": 29,\n \"$75,000 to $99,999\": 15,\n \"$100,000 to $149,999\": 19,\n \"$150,000 to $199,999\": 29,\n \"$200,000 or more\": 37,\n },\n {\n stop: 21,\n \"Less than $10,000\": 13,\n \"$10,000 to $14,999\": 3,\n \"$15,000 to $24,999\": 4,\n \"$25,000 to $34,999\": 4,\n \"$35,000 to $49,999\": 11,\n \"$50,000 to $74,999\": 15,\n \"$75,000 to $99,999\": 20,\n \"$100,000 to $149,999\": 18,\n \"$150,000 to $199,999\": 19,\n \"$200,000 or more\": 73,\n },\n {\n stop: 22,\n \"Less than $10,000\": 8,\n \"$10,000 to $14,999\": 2,\n \"$15,000 to $24,999\": 2,\n \"$25,000 to $34,999\": 1,\n \"$35,000 to $49,999\": 11,\n \"$50,000 to $74,999\": 11,\n \"$75,000 to $99,999\": 18,\n \"$100,000 to $149,999\": 23,\n \"$150,000 to $199,999\": 19,\n \"$200,000 or more\": 69,\n },\n {\n stop: 23,\n \"Less than $10,000\": 7,\n \"$10,000 to $14,999\": 8,\n \"$15,000 to $24,999\": 2,\n \"$25,000 to $34,999\": 6,\n \"$35,000 to $49,999\": 9,\n \"$50,000 to $74,999\": 13,\n \"$75,000 to $99,999\": 10,\n \"$100,000 to $149,999\": 25,\n \"$150,000 to $199,999\": 26,\n \"$200,000 or more\": 45,\n },\n];\n\n// set the dimensions and margins of the graph\nvar width = 450,\n height = 450,\n margin = 40;\n\n// The radius of the pieplot is half the width or half the height (smallest one). I subtract a bit of margin.\nvar radius = Math.min(width, height) / 2 - margin;\n\nconst arcs = (slice) => {\n var pieData = Object.entries(omit(slice, \"stop\"));\n\n // console.log(pieData)\n\n var data = d3.pie().value((d) => d[1]);\n\n return data(pieData);\n};\n\n// var arc = d3.arc()\n// \t.outerRadius(radius * 0.8)\n// \t.innerRadius(radius * 0.4);\n\n// var outerArc = d3.arc()\n// \t.innerRadius(radius * 0.9)\n// \t.outerRadius(radius * 0.9);\n\nconst Outro = ({ height, width, raceStack, incomeStack }) => {\n useEffect(() => {\n var svgWidth = 250,\n svgHeight = 250;\n\n var radius = Math.min(svgWidth, svgHeight) / 2;\n // console.log('hi', radius)\n\n var idxs = [3, 11, 21];\n\n for (var i = 0; i < idxs.length; i++) {\n var raceSelection = d3.select(\"#visualizations\");\n var raceArcs = arcs(raceStack[idxs[i]]);\n // var raceArcs = arcs(dummyRaces[idxs[i]])\n let total = raceArcs.reduce((acc, next) => acc + next.value, 0);\n\n raceSelection\n .append(\"g\")\n .attr(\"class\", \"race\" + i)\n .attr(\n \"transform\",\n `translate(${svgWidth}, ${svgHeight * (i + 1) + 50 * i - 75})`\n );\n\n raceSelection\n .select(\"g.race\" + i)\n .selectAll(\"path.slice\")\n .data(raceArcs)\n .join((enter) =>\n enter\n .append(\"path\")\n .attr(\"class\", \"slice\")\n .attr(\"class\", (d) =>\n d.data[0].replaceAll(\" \", \"\").replaceAll(\":\", \"\")\n )\n .style(\"fill\", (d) => {\n return chartTypeInfo[\"race\"].colors(d.data[0]);\n })\n .attr(\"d\", (d) => d3.arc().innerRadius(50).outerRadius(radius)(d))\n )\n .on(\"mouseover\", (e, d) => {\n var tooltip = d3.select(\"#tooltip\");\n // console.log('hi', e, tooltip, e.clientX)\n\n tooltip\n .style(\"top\", e.clientY - 30 + \"px\")\n .style(\"left\", e.clientX + 30 + \"px\")\n .html(\n `
\nProportion of ${chartTypeInfo[\"race\"].shortKeys[d.data[0]]} riders at this stop:\n \n${\n ((d.value / total) * 100).toFixed(2) + \"%\"\n }\n
\n Now that we've reached the end of our journey on the L Train, we can\n reflect upon what we've learned by observing the demographic shifting\n of the riders.\n
\n
\n Due to the systemic inequalities between neighborhoods along to L\n Train, we can see radically different racial and income demographics\n between stops at the beginning, middle, and end of the ride.\n
\n
\n Because no two rides on the subway are the same, these demographics\n might have minor changes if this simulation is ran again. Still, the\n overall shape of these demographics are likely to remain the same.\n
\n
\n {/* vizes */}\n \n \n
\n );\n};\n\nexport default Outro;\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"component\"];\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport styled from '@mui/styled-engine';\nimport defaultStyleFunctionSx, { extendSxProp } from './styleFunctionSx';\nimport useTheme from './useTheme';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createBox(options = {}) {\n const {\n defaultTheme,\n defaultClassName = 'MuiBox-root',\n generateClassName,\n styleFunctionSx = defaultStyleFunctionSx\n } = options;\n const BoxRoot = styled('div')(styleFunctionSx);\n const Box = /*#__PURE__*/React.forwardRef(function Box(inProps, ref) {\n const theme = useTheme(defaultTheme);\n\n const _extendSxProp = extendSxProp(inProps),\n {\n className,\n component = 'div'\n } = _extendSxProp,\n other = _objectWithoutPropertiesLoose(_extendSxProp, _excluded);\n\n return /*#__PURE__*/_jsx(BoxRoot, _extends({\n as: component,\n ref: ref,\n className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),\n theme: theme\n }, other));\n });\n return Box;\n}","import PropTypes from 'prop-types';\nimport { createBox } from '@mui/system';\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '../className';\nimport { createTheme } from '../styles';\nconst defaultTheme = createTheme();\nconst Box = createBox({\n defaultTheme,\n defaultClassName: 'MuiBox-root',\n generateClassName: ClassNameGenerator.generate\n});\nprocess.env.NODE_ENV !== \"production\" ? Box.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * @ignore\n */\n children: PropTypes.node,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Box;","/**\n * Determines if a given element is a DOM element name (i.e. not a React component).\n */\nfunction isHostComponent(element) {\n return typeof element === 'string';\n}\n\nexport default isHostComponent;","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { exactProp, HTMLElementType, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useForkRef as useForkRef, unstable_setRef as setRef } from '@mui/utils';\n\nfunction getContainer(container) {\n return typeof container === 'function' ? container() : container;\n}\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\n\n\nconst Portal = /*#__PURE__*/React.forwardRef(function Portal(props, ref) {\n const {\n children,\n container,\n disablePortal = false\n } = props;\n const [mountNode, setMountNode] = React.useState(null);\n const handleRef = useForkRef( /*#__PURE__*/React.isValidElement(children) ? children.ref : null, ref);\n useEnhancedEffect(() => {\n if (!disablePortal) {\n setMountNode(getContainer(container) || document.body);\n }\n }, [container, disablePortal]);\n useEnhancedEffect(() => {\n if (mountNode && !disablePortal) {\n setRef(ref, mountNode);\n return () => {\n setRef(ref, null);\n };\n }\n\n return undefined;\n }, [ref, mountNode, disablePortal]);\n\n if (disablePortal) {\n if ( /*#__PURE__*/React.isValidElement(children)) {\n return /*#__PURE__*/React.cloneElement(children, {\n ref: handleRef\n });\n }\n\n return children;\n }\n\n return mountNode ? /*#__PURE__*/ReactDOM.createPortal(children, mountNode) : mountNode;\n});\nprocess.env.NODE_ENV !== \"production\" ? Portal.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The children to render into the `container`.\n */\n children: PropTypes.node,\n\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([HTMLElementType, PropTypes.func]),\n\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: PropTypes.bool\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line\n Portal['propTypes' + ''] = exactProp(Portal.propTypes);\n}\n\nexport default Portal;","import { unstable_ownerWindow as ownerWindow, unstable_ownerDocument as ownerDocument, unstable_getScrollbarSize as getScrollbarSize } from '@mui/utils';\n\n// Is a vertical scrollbar displayed?\nfunction isOverflowing(container) {\n const doc = ownerDocument(container);\n\n if (doc.body === container) {\n return ownerWindow(container).innerWidth > doc.documentElement.clientWidth;\n }\n\n return container.scrollHeight > container.clientHeight;\n}\n\nexport function ariaHidden(element, show) {\n if (show) {\n element.setAttribute('aria-hidden', 'true');\n } else {\n element.removeAttribute('aria-hidden');\n }\n}\n\nfunction getPaddingRight(element) {\n return parseInt(ownerWindow(element).getComputedStyle(element).paddingRight, 10) || 0;\n}\n\nfunction ariaHiddenSiblings(container, mountElement, currentElement, elementsToExclude = [], show) {\n const blacklist = [mountElement, currentElement, ...elementsToExclude];\n const blacklistTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE'];\n [].forEach.call(container.children, element => {\n if (blacklist.indexOf(element) === -1 && blacklistTagNames.indexOf(element.tagName) === -1) {\n ariaHidden(element, show);\n }\n });\n}\n\nfunction findIndexOf(items, callback) {\n let idx = -1;\n items.some((item, index) => {\n if (callback(item)) {\n idx = index;\n return true;\n }\n\n return false;\n });\n return idx;\n}\n\nfunction handleContainer(containerInfo, props) {\n const restoreStyle = [];\n const container = containerInfo.container;\n\n if (!props.disableScrollLock) {\n if (isOverflowing(container)) {\n // Compute the size before applying overflow hidden to avoid any scroll jumps.\n const scrollbarSize = getScrollbarSize(ownerDocument(container));\n restoreStyle.push({\n value: container.style.paddingRight,\n property: 'padding-right',\n el: container\n }); // Use computed style, here to get the real padding to add our scrollbar width.\n\n container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`; // .mui-fixed is a global helper.\n\n const fixedElements = ownerDocument(container).querySelectorAll('.mui-fixed');\n [].forEach.call(fixedElements, element => {\n restoreStyle.push({\n value: element.style.paddingRight,\n property: 'padding-right',\n el: element\n });\n element.style.paddingRight = `${getPaddingRight(element) + scrollbarSize}px`;\n });\n } // Improve Gatsby support\n // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n\n\n const parent = container.parentElement;\n const containerWindow = ownerWindow(container);\n const scrollContainer = (parent == null ? void 0 : parent.nodeName) === 'HTML' && containerWindow.getComputedStyle(parent).overflowY === 'scroll' ? parent : container; // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n // screensize shrink.\n\n restoreStyle.push({\n value: scrollContainer.style.overflow,\n property: 'overflow',\n el: scrollContainer\n }, {\n value: scrollContainer.style.overflowX,\n property: 'overflow-x',\n el: scrollContainer\n }, {\n value: scrollContainer.style.overflowY,\n property: 'overflow-y',\n el: scrollContainer\n });\n scrollContainer.style.overflow = 'hidden';\n }\n\n const restore = () => {\n restoreStyle.forEach(({\n value,\n el,\n property\n }) => {\n if (value) {\n el.style.setProperty(property, value);\n } else {\n el.style.removeProperty(property);\n }\n });\n };\n\n return restore;\n}\n\nfunction getHiddenSiblings(container) {\n const hiddenSiblings = [];\n [].forEach.call(container.children, element => {\n if (element.getAttribute('aria-hidden') === 'true') {\n hiddenSiblings.push(element);\n }\n });\n return hiddenSiblings;\n}\n\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\nexport default class ModalManager {\n constructor() {\n this.containers = void 0;\n this.modals = void 0;\n this.modals = [];\n this.containers = [];\n }\n\n add(modal, container) {\n let modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex !== -1) {\n return modalIndex;\n }\n\n modalIndex = this.modals.length;\n this.modals.push(modal); // If the modal we are adding is already in the DOM.\n\n if (modal.modalRef) {\n ariaHidden(modal.modalRef, false);\n }\n\n const hiddenSiblings = getHiddenSiblings(container);\n ariaHiddenSiblings(container, modal.mount, modal.modalRef, hiddenSiblings, true);\n const containerIndex = findIndexOf(this.containers, item => item.container === container);\n\n if (containerIndex !== -1) {\n this.containers[containerIndex].modals.push(modal);\n return modalIndex;\n }\n\n this.containers.push({\n modals: [modal],\n container,\n restore: null,\n hiddenSiblings\n });\n return modalIndex;\n }\n\n mount(modal, props) {\n const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);\n const containerInfo = this.containers[containerIndex];\n\n if (!containerInfo.restore) {\n containerInfo.restore = handleContainer(containerInfo, props);\n }\n }\n\n remove(modal) {\n const modalIndex = this.modals.indexOf(modal);\n\n if (modalIndex === -1) {\n return modalIndex;\n }\n\n const containerIndex = findIndexOf(this.containers, item => item.modals.indexOf(modal) !== -1);\n const containerInfo = this.containers[containerIndex];\n containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n this.modals.splice(modalIndex, 1); // If that was the last modal in a container, clean up the container.\n\n if (containerInfo.modals.length === 0) {\n // The modal might be closed before it had the chance to be mounted in the DOM.\n if (containerInfo.restore) {\n containerInfo.restore();\n }\n\n if (modal.modalRef) {\n // In case the modal wasn't in the DOM yet.\n ariaHidden(modal.modalRef, true);\n }\n\n ariaHiddenSiblings(containerInfo.container, modal.mount, modal.modalRef, containerInfo.hiddenSiblings, false);\n this.containers.splice(containerIndex, 1);\n } else {\n // Otherwise make sure the next top modal is visible to a screen reader.\n const nextTop = containerInfo.modals[containerInfo.modals.length - 1]; // as soon as a modal is adding its modalRef is undefined. it can't set\n // aria-hidden because the dom element doesn't exist either\n // when modal was unmounted before modalRef gets null\n\n if (nextTop.modalRef) {\n ariaHidden(nextTop.modalRef, false);\n }\n }\n\n return modalIndex;\n }\n\n isTopModal(modal) {\n return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n }\n\n}","// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18\nexport default function getScrollbarSize(doc) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = doc.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n}","/* eslint-disable consistent-return, jsx-a11y/no-noninteractive-tabindex */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp, elementAcceptingRef, unstable_useForkRef as useForkRef, unstable_ownerDocument as ownerDocument } from '@mui/utils'; // Inspired by https://github.com/focus-trap/tabbable\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst candidatesSelector = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'].join(',');\n\nfunction getTabIndex(node) {\n const tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n\n if (!Number.isNaN(tabindexAttr)) {\n return tabindexAttr;\n } // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=661108&q=contenteditable%20tabindex&can=2\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n // in Chrome, , and elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n\n\n if (node.contentEditable === 'true' || (node.nodeName === 'AUDIO' || node.nodeName === 'VIDEO' || node.nodeName === 'DETAILS') && node.getAttribute('tabindex') === null) {\n return 0;\n }\n\n return node.tabIndex;\n}\n\nfunction isNonTabbableRadio(node) {\n if (node.tagName !== 'INPUT' || node.type !== 'radio') {\n return false;\n }\n\n if (!node.name) {\n return false;\n }\n\n const getRadio = selector => node.ownerDocument.querySelector(`input[type=\"radio\"]${selector}`);\n\n let roving = getRadio(`[name=\"${node.name}\"]:checked`);\n\n if (!roving) {\n roving = getRadio(`[name=\"${node.name}\"]`);\n }\n\n return roving !== node;\n}\n\nfunction isNodeMatchingSelectorFocusable(node) {\n if (node.disabled || node.tagName === 'INPUT' && node.type === 'hidden' || isNonTabbableRadio(node)) {\n return false;\n }\n\n return true;\n}\n\nfunction defaultGetTabbable(root) {\n const regularTabNodes = [];\n const orderedTabNodes = [];\n Array.from(root.querySelectorAll(candidatesSelector)).forEach((node, i) => {\n const nodeTabIndex = getTabIndex(node);\n\n if (nodeTabIndex === -1 || !isNodeMatchingSelectorFocusable(node)) {\n return;\n }\n\n if (nodeTabIndex === 0) {\n regularTabNodes.push(node);\n } else {\n orderedTabNodes.push({\n documentOrder: i,\n tabIndex: nodeTabIndex,\n node\n });\n }\n });\n return orderedTabNodes.sort((a, b) => a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex).map(a => a.node).concat(regularTabNodes);\n}\n\nfunction defaultIsEnabled() {\n return true;\n}\n/**\n * Utility component that locks focus inside the component.\n */\n\n\nfunction TrapFocus(props) {\n const {\n children,\n disableAutoFocus = false,\n disableEnforceFocus = false,\n disableRestoreFocus = false,\n getTabbable = defaultGetTabbable,\n isEnabled = defaultIsEnabled,\n open\n } = props;\n const ignoreNextEnforceFocus = React.useRef();\n const sentinelStart = React.useRef(null);\n const sentinelEnd = React.useRef(null);\n const nodeToRestore = React.useRef(null);\n const reactFocusEventTarget = React.useRef(null); // This variable is useful when disableAutoFocus is true.\n // It waits for the active element to move into the component to activate.\n\n const activated = React.useRef(false);\n const rootRef = React.useRef(null);\n const handleRef = useForkRef(children.ref, rootRef);\n const lastKeydown = React.useRef(null);\n React.useEffect(() => {\n // We might render an empty child.\n if (!open || !rootRef.current) {\n return;\n }\n\n activated.current = !disableAutoFocus;\n }, [disableAutoFocus, open]);\n React.useEffect(() => {\n // We might render an empty child.\n if (!open || !rootRef.current) {\n return;\n }\n\n const doc = ownerDocument(rootRef.current);\n\n if (!rootRef.current.contains(doc.activeElement)) {\n if (!rootRef.current.hasAttribute('tabIndex')) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(['MUI: The modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n'));\n }\n\n rootRef.current.setAttribute('tabIndex', -1);\n }\n\n if (activated.current) {\n rootRef.current.focus();\n }\n }\n\n return () => {\n // restoreLastFocus()\n if (!disableRestoreFocus) {\n // In IE11 it is possible for document.activeElement to be null resulting\n // in nodeToRestore.current being null.\n // Not all elements in IE11 have a focus method.\n // Once IE11 support is dropped the focus() call can be unconditional.\n if (nodeToRestore.current && nodeToRestore.current.focus) {\n ignoreNextEnforceFocus.current = true;\n nodeToRestore.current.focus();\n }\n\n nodeToRestore.current = null;\n }\n }; // Missing `disableRestoreFocus` which is fine.\n // We don't support changing that prop on an open TrapFocus\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n React.useEffect(() => {\n // We might render an empty child.\n if (!open || !rootRef.current) {\n return;\n }\n\n const doc = ownerDocument(rootRef.current);\n\n const contain = nativeEvent => {\n const {\n current: rootElement\n } = rootRef; // Cleanup functions are executed lazily in React 17.\n // Contain can be called between the component being unmounted and its cleanup function being run.\n\n if (rootElement === null) {\n return;\n }\n\n if (!doc.hasFocus() || disableEnforceFocus || !isEnabled() || ignoreNextEnforceFocus.current) {\n ignoreNextEnforceFocus.current = false;\n return;\n }\n\n if (!rootElement.contains(doc.activeElement)) {\n // if the focus event is not coming from inside the children's react tree, reset the refs\n if (nativeEvent && reactFocusEventTarget.current !== nativeEvent.target || doc.activeElement !== reactFocusEventTarget.current) {\n reactFocusEventTarget.current = null;\n } else if (reactFocusEventTarget.current !== null) {\n return;\n }\n\n if (!activated.current) {\n return;\n }\n\n let tabbable = [];\n\n if (doc.activeElement === sentinelStart.current || doc.activeElement === sentinelEnd.current) {\n tabbable = getTabbable(rootRef.current);\n }\n\n if (tabbable.length > 0) {\n var _lastKeydown$current, _lastKeydown$current2;\n\n const isShiftTab = Boolean(((_lastKeydown$current = lastKeydown.current) == null ? void 0 : _lastKeydown$current.shiftKey) && ((_lastKeydown$current2 = lastKeydown.current) == null ? void 0 : _lastKeydown$current2.key) === 'Tab');\n const focusNext = tabbable[0];\n const focusPrevious = tabbable[tabbable.length - 1];\n\n if (isShiftTab) {\n focusPrevious.focus();\n } else {\n focusNext.focus();\n }\n } else {\n rootElement.focus();\n }\n }\n };\n\n const loopFocus = nativeEvent => {\n lastKeydown.current = nativeEvent;\n\n if (disableEnforceFocus || !isEnabled() || nativeEvent.key !== 'Tab') {\n return;\n } // Make sure the next tab starts from the right place.\n // doc.activeElement referes to the origin.\n\n\n if (doc.activeElement === rootRef.current && nativeEvent.shiftKey) {\n // We need to ignore the next contain as\n // it will try to move the focus back to the rootRef element.\n ignoreNextEnforceFocus.current = true;\n sentinelEnd.current.focus();\n }\n };\n\n doc.addEventListener('focusin', contain);\n doc.addEventListener('keydown', loopFocus, true); // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area.\n // e.g. https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n // Instead, we can look if the active element was restored on the BODY element.\n //\n // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n\n const interval = setInterval(() => {\n if (doc.activeElement.tagName === 'BODY') {\n contain();\n }\n }, 50);\n return () => {\n clearInterval(interval);\n doc.removeEventListener('focusin', contain);\n doc.removeEventListener('keydown', loopFocus, true);\n };\n }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open, getTabbable]);\n\n const onFocus = event => {\n if (nodeToRestore.current === null) {\n nodeToRestore.current = event.relatedTarget;\n }\n\n activated.current = true;\n reactFocusEventTarget.current = event.target;\n const childrenPropsHandler = children.props.onFocus;\n\n if (childrenPropsHandler) {\n childrenPropsHandler(event);\n }\n };\n\n const handleFocusSentinel = event => {\n if (nodeToRestore.current === null) {\n nodeToRestore.current = event.relatedTarget;\n }\n\n activated.current = true;\n };\n\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: handleFocusSentinel,\n ref: sentinelStart,\n \"data-test\": \"sentinelStart\"\n }), /*#__PURE__*/React.cloneElement(children, {\n ref: handleRef,\n onFocus\n }), /*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: handleFocusSentinel,\n ref: sentinelEnd,\n \"data-test\": \"sentinelEnd\"\n })]\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TrapFocus.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * A single child content element.\n */\n children: elementAcceptingRef,\n\n /**\n * If `true`, the trap focus will not automatically shift focus to itself when it opens, and\n * replace it to the last focused element when it closes.\n * This also works correctly with any trap focus children that have the `disableAutoFocus` prop.\n *\n * Generally this should never be set to `true` as it makes the trap focus less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableAutoFocus: PropTypes.bool,\n\n /**\n * If `true`, the trap focus will not prevent focus from leaving the trap focus while open.\n *\n * Generally this should never be set to `true` as it makes the trap focus less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableEnforceFocus: PropTypes.bool,\n\n /**\n * If `true`, the trap focus will not restore focus to previously focused element once\n * trap focus is hidden or unmounted.\n * @default false\n */\n disableRestoreFocus: PropTypes.bool,\n\n /**\n * Returns an array of ordered tabbable nodes (i.e. in tab order) within the root.\n * For instance, you can provide the \"tabbable\" npm dependency.\n * @param {HTMLElement} root\n */\n getTabbable: PropTypes.func,\n\n /**\n * This prop extends the `open` prop.\n * It allows to toggle the open state without having to wait for a rerender when changing the `open` prop.\n * This prop should be memoized.\n * It can be used to support multiple trap focus mounted at the same time.\n * @default function defaultIsEnabled() {\n * return true;\n * }\n */\n isEnabled: PropTypes.func,\n\n /**\n * If `true`, focus is locked.\n */\n open: PropTypes.bool.isRequired\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line\n TrapFocus['propTypes' + ''] = exactProp(TrapFocus.propTypes);\n}\n\nexport default TrapFocus;","import generateUtilityClasses from '../generateUtilityClasses';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getModalUtilityClass(slot) {\n return generateUtilityClass('MuiModal', slot);\n}\nconst modalUnstyledClasses = generateUtilityClasses('MuiModal', ['root', 'hidden']);\nexport default modalUnstyledClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"BackdropComponent\", \"BackdropProps\", \"children\", \"classes\", \"className\", \"closeAfterTransition\", \"component\", \"components\", \"componentsProps\", \"container\", \"disableAutoFocus\", \"disableEnforceFocus\", \"disableEscapeKeyDown\", \"disablePortal\", \"disableRestoreFocus\", \"disableScrollLock\", \"hideBackdrop\", \"keepMounted\", \"manager\", \"onBackdropClick\", \"onClose\", \"onKeyDown\", \"open\", \"theme\", \"onTransitionEnter\", \"onTransitionExited\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { elementAcceptingRef, HTMLElementType, unstable_ownerDocument as ownerDocument, unstable_useForkRef as useForkRef, unstable_createChainedFunction as createChainedFunction, unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport composeClasses from '../composeClasses';\nimport isHostComponent from '../utils/isHostComponent';\nimport Portal from '../Portal';\nimport ModalManager, { ariaHidden } from './ModalManager';\nimport TrapFocus from '../TrapFocus';\nimport { getModalUtilityClass } from './modalUnstyledClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n open,\n exited,\n classes\n } = ownerState;\n const slots = {\n root: ['root', !open && exited && 'hidden']\n };\n return composeClasses(slots, getModalUtilityClass, classes);\n};\n\nfunction getContainer(container) {\n return typeof container === 'function' ? container() : container;\n}\n\nfunction getHasTransition(props) {\n return props.children ? props.children.props.hasOwnProperty('in') : false;\n} // A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\n\n\nconst defaultManager = new ModalManager();\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/material-ui/api/dialog/)\n * - [Drawer](/material-ui/api/drawer/)\n * - [Menu](/material-ui/api/menu/)\n * - [Popover](/material-ui/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/material-ui/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\n\nconst ModalUnstyled = /*#__PURE__*/React.forwardRef(function ModalUnstyled(props, ref) {\n const {\n BackdropComponent,\n BackdropProps,\n children,\n classes: classesProp,\n className,\n closeAfterTransition = false,\n component = 'div',\n components = {},\n componentsProps = {},\n container,\n disableAutoFocus = false,\n disableEnforceFocus = false,\n disableEscapeKeyDown = false,\n disablePortal = false,\n disableRestoreFocus = false,\n disableScrollLock = false,\n hideBackdrop = false,\n keepMounted = false,\n // private\n // eslint-disable-next-line react/prop-types\n manager = defaultManager,\n onBackdropClick,\n onClose,\n onKeyDown,\n open,\n\n /* eslint-disable react/prop-types */\n theme,\n onTransitionEnter,\n onTransitionExited\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const [exited, setExited] = React.useState(true);\n const modal = React.useRef({});\n const mountNodeRef = React.useRef(null);\n const modalRef = React.useRef(null);\n const handleRef = useForkRef(modalRef, ref);\n const hasTransition = getHasTransition(props);\n\n const getDoc = () => ownerDocument(mountNodeRef.current);\n\n const getModal = () => {\n modal.current.modalRef = modalRef.current;\n modal.current.mountNode = mountNodeRef.current;\n return modal.current;\n };\n\n const handleMounted = () => {\n manager.mount(getModal(), {\n disableScrollLock\n }); // Fix a bug on Chrome where the scroll isn't initially 0.\n\n modalRef.current.scrollTop = 0;\n };\n\n const handleOpen = useEventCallback(() => {\n const resolvedContainer = getContainer(container) || getDoc().body;\n manager.add(getModal(), resolvedContainer); // The element was already mounted.\n\n if (modalRef.current) {\n handleMounted();\n }\n });\n const isTopModal = React.useCallback(() => manager.isTopModal(getModal()), [manager]);\n const handlePortalRef = useEventCallback(node => {\n mountNodeRef.current = node;\n\n if (!node) {\n return;\n }\n\n if (open && isTopModal()) {\n handleMounted();\n } else {\n ariaHidden(modalRef.current, true);\n }\n });\n const handleClose = React.useCallback(() => {\n manager.remove(getModal());\n }, [manager]);\n React.useEffect(() => {\n return () => {\n handleClose();\n };\n }, [handleClose]);\n React.useEffect(() => {\n if (open) {\n handleOpen();\n } else if (!hasTransition || !closeAfterTransition) {\n handleClose();\n }\n }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n\n const ownerState = _extends({}, props, {\n classes: classesProp,\n closeAfterTransition,\n disableAutoFocus,\n disableEnforceFocus,\n disableEscapeKeyDown,\n disablePortal,\n disableRestoreFocus,\n disableScrollLock,\n exited,\n hideBackdrop,\n keepMounted\n });\n\n const classes = useUtilityClasses(ownerState);\n\n if (!keepMounted && !open && (!hasTransition || exited)) {\n return null;\n }\n\n const handleEnter = () => {\n setExited(false);\n\n if (onTransitionEnter) {\n onTransitionEnter();\n }\n };\n\n const handleExited = () => {\n setExited(true);\n\n if (onTransitionExited) {\n onTransitionExited();\n }\n\n if (closeAfterTransition) {\n handleClose();\n }\n };\n\n const handleBackdropClick = event => {\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (onBackdropClick) {\n onBackdropClick(event);\n }\n\n if (onClose) {\n onClose(event, 'backdropClick');\n }\n };\n\n const handleKeyDown = event => {\n if (onKeyDown) {\n onKeyDown(event);\n } // The handler doesn't take event.defaultPrevented into account:\n //\n // event.preventDefault() is meant to stop default behaviors like\n // clicking a checkbox to check it, hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default behaviors.\n\n\n if (event.key !== 'Escape' || !isTopModal()) {\n return;\n }\n\n if (!disableEscapeKeyDown) {\n // Swallow the event, in case someone is listening for the escape key on the body.\n event.stopPropagation();\n\n if (onClose) {\n onClose(event, 'escapeKeyDown');\n }\n }\n };\n\n const childProps = {};\n\n if (children.props.tabIndex === undefined) {\n childProps.tabIndex = '-1';\n } // It's a Transition like component\n\n\n if (hasTransition) {\n childProps.onEnter = createChainedFunction(handleEnter, children.props.onEnter);\n childProps.onExited = createChainedFunction(handleExited, children.props.onExited);\n }\n\n const Root = components.Root || component;\n const rootProps = componentsProps.root || {};\n return /*#__PURE__*/_jsx(Portal, {\n ref: handlePortalRef,\n container: container,\n disablePortal: disablePortal,\n children: /*#__PURE__*/_jsxs(Root, _extends({\n role: \"presentation\"\n }, rootProps, !isHostComponent(Root) && {\n as: component,\n ownerState: _extends({}, ownerState, rootProps.ownerState),\n theme\n }, other, {\n ref: handleRef,\n onKeyDown: handleKeyDown,\n className: clsx(classes.root, rootProps.className, className),\n children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/_jsx(BackdropComponent, _extends({\n \"aria-hidden\": true,\n open: open,\n onClick: handleBackdropClick\n }, BackdropProps)) : null, /*#__PURE__*/_jsx(TrapFocus, {\n disableEnforceFocus: disableEnforceFocus,\n disableAutoFocus: disableAutoFocus,\n disableRestoreFocus: disableRestoreFocus,\n isEnabled: isTopModal,\n open: open,\n children: /*#__PURE__*/React.cloneElement(children, childProps)\n })]\n }))\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? ModalUnstyled.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * A backdrop component. This prop enables custom backdrop rendering.\n */\n BackdropComponent: PropTypes.elementType,\n\n /**\n * Props applied to the backdrop element.\n */\n BackdropProps: PropTypes.object,\n\n /**\n * A single child content element.\n */\n children: elementAcceptingRef.isRequired,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * When set to true the Modal waits until a nested Transition is completed before closing.\n * @default false\n */\n closeAfterTransition: PropTypes.bool,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n\n /**\n * The components used for each slot inside the Modal.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n components: PropTypes.shape({\n Root: PropTypes.elementType\n }),\n\n /**\n * The props used for each slot inside the Modal.\n * @default {}\n */\n componentsProps: PropTypes.shape({\n root: PropTypes.object\n }),\n\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([HTMLElementType, PropTypes.func]),\n\n /**\n * If `true`, the modal will not automatically shift focus to itself when it opens, and\n * replace it to the last focused element when it closes.\n * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableAutoFocus: PropTypes.bool,\n\n /**\n * If `true`, the modal will not prevent focus from leaving the modal while open.\n *\n * Generally this should never be set to `true` as it makes the modal less\n * accessible to assistive technologies, like screen readers.\n * @default false\n */\n disableEnforceFocus: PropTypes.bool,\n\n /**\n * If `true`, hitting escape will not fire the `onClose` callback.\n * @default false\n */\n disableEscapeKeyDown: PropTypes.bool,\n\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: PropTypes.bool,\n\n /**\n * If `true`, the modal will not restore focus to previously focused element once\n * modal is hidden or unmounted.\n * @default false\n */\n disableRestoreFocus: PropTypes.bool,\n\n /**\n * Disable the scroll lock behavior.\n * @default false\n */\n disableScrollLock: PropTypes.bool,\n\n /**\n * If `true`, the backdrop is not rendered.\n * @default false\n */\n hideBackdrop: PropTypes.bool,\n\n /**\n * Always keep the children in the DOM.\n * This prop can be useful in SEO situation or\n * when you want to maximize the responsiveness of the Modal.\n * @default false\n */\n keepMounted: PropTypes.bool,\n\n /**\n * Callback fired when the backdrop is clicked.\n * @deprecated Use the `onClose` prop with the `reason` argument to handle the `backdropClick` events.\n */\n onBackdropClick: PropTypes.func,\n\n /**\n * Callback fired when the component requests to be closed.\n * The `reason` parameter can optionally be used to control the response to `onClose`.\n *\n * @param {object} event The event source of the callback.\n * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n */\n onClose: PropTypes.func,\n\n /**\n * @ignore\n */\n onKeyDown: PropTypes.func,\n\n /**\n * If `true`, the component is shown.\n */\n open: PropTypes.bool.isRequired\n} : void 0;\nexport default ModalUnstyled;","export default {\n disabled: false\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {state => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n * \n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *
\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n , document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"names":["StyleSheet","options","_this","this","_insertTag","tag","before","tags","length","insertionPoint","nextSibling","prepend","container","firstChild","insertBefore","push","isSpeedy","undefined","speedy","ctr","nonce","key","_proto","prototype","hydrate","nodes","forEach","insert","rule","document","createElement","setAttribute","appendChild","createTextNode","createStyleElement","sheet","i","styleSheets","ownerNode","sheetForTag","insertRule","cssRules","e","process","flush","parentNode","removeChild","abs","Math","from","String","fromCharCode","assign","Object","trim","value","replace","pattern","replacement","indexof","search","indexOf","charat","index","charCodeAt","substr","begin","end","slice","strlen","sizeof","append","array","line","column","position","character","characters","node","root","parent","type","props","children","return","copy","prev","next","peek","caret","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","KEYFRAMES","serialize","callback","output","stringify","element","join","prefix","hash","compile","parse","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","k","x","y","z","identifierWithPointTracking","getRules","parsed","toRules","fixedElements","WeakMap","compat","isImplicitRule","get","set","parentRules","removeLabel","defaultStylisPlugins","map","combine","exec","match","ssrStyles","querySelectorAll","Array","call","getAttribute","head","stylisPlugins","_insert","inserted","nodesToHydrate","attrib","split","currentSheet","finalizingPlugins","serializer","collection","middleware","concat","selector","serialized","shouldCache","styles","cache","name","registered","fn","create","arg","str","h","len","toString","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","memoize","styleName","toLowerCase","processStyleValue","p1","p2","cursor","unitless","handleInterpolation","mergedProps","interpolation","__emotion_styles","anim","obj","string","isArray","_key","interpolated","_i","createStringFromObject","previousCursor","result","cached","labelPattern","serializeStyles","args","stringMode","strings","raw","lastIndex","identifierName","hashString","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","defineProperty","enumerable","_utils","createSvgIcon","defaultGenerator","componentName","ClassNameGenerator","generate","configure","generator","reset","createClassNameGenerator","composeClasses","slots","getUtilityClass","classes","keys","slot","reduce","acc","globalStateClassesMapping","active","checked","completed","disabled","error","expanded","focused","focusVisible","required","selected","generateUtilityClass","generateUtilityClasses","values","xs","sm","md","lg","xl","defaultBreakpoints","up","handleBreakpoints","propValue","styleFromPropValue","theme","themeBreakpoints","breakpoints","item","breakpoint","cssKey","createEmptyBreakpointObject","_breakpointsInput$key","breakpointsInput","breakpointsInOrder","removeUnusedBreakpoints","breakpointKeys","style","breakpointOutput","clamp","min","max","decomposeColor","color","charAt","re","RegExp","colors","n","parseInt","round","hexToRgb","marker","substring","Error","_formatMuiErrorMessage","colorSpace","shift","parseFloat","recomposeColor","getLuminance","rgb","s","l","a","f","hslToRgb","val","Number","toFixed","getContrastRatio","foreground","background","lumA","lumB","alpha","darken","coefficient","lighten","_excluded","createBreakpoints","unit","step","other","_objectWithoutPropertiesLoose","sortedValues","breakpointsAsArray","sort","breakpoint1","breakpoint2","_extends","sortBreakpointsValues","down","between","start","endIndex","only","not","keyIndex","borderRadius","createSpacing","spacingInput","mui","transform","createUnarySpacing","spacing","argsInput","argument","palette","paletteInput","shape","shapeInput","muiTheme","deepmerge","direction","components","mode","handlers","filterProps","prop","merge","propTypes","getBorder","border","themeKey","borderTop","borderRight","borderBottom","borderLeft","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","transformer","createUnaryUnit","getValue","compose","cssProperty","display","gap","columnGap","rowGap","width","maxWidth","_props$theme","_props$theme$breakpoi","_props$theme$breakpoi2","breakpointsValues","minWidth","height","maxHeight","minHeight","fontFamily","fontSize","fontStyle","letterSpacing","textTransform","textAlign","filterPropsMapping","borders","flexbox","grid","positions","shadows","sizing","typography","styleFunctionMapping","propToStyleFunction","styleFnName","propName","clone","properties","m","p","directions","t","r","b","aliases","marginX","marginY","paddingX","paddingY","getCssProperties","dir","marginKeys","paddingKeys","spacingKeys","defaultValue","_getPath","themeSpacing","getPath","transformed","resolveCssProperty","cssProperties","getStyleFromPropValue","margin","padding","path","vars","themeMapping","propValueFinal","userValue","capitalize","objectsHaveSameKeys","objects","allKeys","object","union","Set","every","callIfFn","maybeFn","styleFunctionSx","defaultStyleFunctionMapping","getThemeValue","inputProps","styleFunction","sx","traverse","sxInput","sxObject","emptyBreakpoints","breakpointsKeys","css","styleKey","unstable_createStyleFunctionSx","React","useTheme","ThemeContext","isObjectEmpty","defaultTheme","contextTheme","muiUseTheme","systemDefaultTheme","createTheme","useThemeWithoutDefault","reactPropsRegex","test","EmotionCacheContext","createContext","HTMLElement","createCache","Provider","withEmotionCache","func","forwardRef","ref","useContext","getRegisteredStyles","registeredStyles","classNames","rawClassName","className","registerStyles","isStringTag","testOmitPropsOnStringTag","isPropValid","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","shouldForwardProp","optionsShouldForwardProp","__emotion_forwardProp","useInsertionEffect","Insertion","_ref","current","insertStyles","createStyled","targetClassName","__emotion_real","baseTag","__emotion_base","label","target","defaultShouldForwardProp","shouldUseAs","arguments","apply","Styled","FinalTag","as","classInterpolations","finalShouldForwardProp","newProps","Fragment","displayName","defaultProps","withComponent","nextTag","nextOptions","newStyled","tagName","styled","emStyled","toUpperCase","createChainedFunction","funcs","isPlainObject","constructor","source","formatMuiErrorMessage","code","url","encodeURIComponent","ownerDocument","ownerWindow","defaultView","window","setRef","useEnhancedEffect","useEventCallback","useForkRef","refA","refB","refValue","createMixins","mixins","toolbar","black","white","A100","A200","A400","A700","light","text","primary","secondary","divider","paper","common","action","hover","hoverOpacity","selectedOpacity","disabledBackground","disabledOpacity","focus","focusOpacity","activatedOpacity","dark","icon","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","hasOwnProperty","main","createPalette","contrastThreshold","blue","getDefaultPrimary","purple","getDefaultSecondary","red","getDefaultError","info","lightBlue","getDefaultInfo","success","green","getDefaultSuccess","warning","orange","getDefaultWarning","getContrastText","augmentColor","mainShade","lightShade","darkShade","JSON","contrastText","modes","grey","caseAllCaps","defaultFontFamily","createTypography","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem2","pxToRem","coef","buildVariant","casing","variants","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","button","caption","overline","createShadow","easing","easeInOut","easeOut","easeIn","sharp","duration","shortest","shorter","short","standard","complex","enteringScreen","leavingScreen","formatMs","milliseconds","getAutoHeightDuration","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","delay","animatedProp","mobileStepper","fab","speedDial","appBar","drawer","modal","snackbar","tooltip","mixinsInput","transitions","transitionsInput","typographyInput","systemTheme","systemCreateTheme","isEmpty","propsToClassKey","variant","classKey","_excluded2","_excluded3","getStyleOverrides","styleOverrides","getVariantStyles","variantsStyles","definition","variantsResolver","_theme$components","_theme$components$nam","ownerState","themeVariants","themeVariant","isMatch","rootShouldForwardProp","input","slotShouldForwardProp","defaultStyleFunctionSx","inputOptions","componentSlot","inputSkipVariantsResolver","skipVariantsResolver","inputSkipSx","skipSx","overridesResolver","shouldForwardPropOption","defaultStyledResolver","styledEngineStyled","muiStyledResolver","styleArg","expressions","expressionsWithDefaultTheme","stylesArg","themeInput","transformedStyleArg","resolvedStyleOverrides","entries","slotKey","slotStyle","numOfCustomFnsApplied","placeholders","fill","_ref2","Component","withConfig","getThemeProps","params","resolveProps","useThemeProps","systemUseThemeProps","getSvgIconUtilityClass","SvgIconRoot","_theme$transitions","_theme$transitions$cr","_theme$transitions2","_theme$transitions2$d","_theme$typography","_theme$typography$pxT","_theme$typography2","_theme$typography2$px","_theme$typography3","_theme$typography3$px","_theme$palette$ownerS","_theme$palette","_theme$palette$ownerS2","_theme$palette2","_theme$palette2$actio","_theme$palette3","_theme$palette3$actio","userSelect","transition","inherit","small","medium","large","SvgIcon","inProps","component","htmlColor","inheritViewBox","titleAccess","viewBox","instanceFontSize","more","useUtilityClasses","_jsxs","clsx","focusable","role","_jsx","muiName","timeout","wait","debounced","later","clearTimeout","setTimeout","clear","validator","reason","componentNameInError","location","propFullName","unstable_ClassNameGenerator","console","warn","muiNames","controlled","defaultProp","isControlled","state","valueState","setValue","newValue","globalId","maybeReactUseId","idOverride","reactId","defaultId","setDefaultId","id","useGlobalId","hadFocusVisibleRecentlyTimeout","hadKeyboardEvent","hadFocusVisibleRecently","inputTypesWhitelist","tel","email","password","number","date","month","week","time","datetime","handleKeyDown","event","metaKey","altKey","ctrlKey","handlePointerDown","handleVisibilityChange","visibilityState","isFocusVisible","matches","readOnly","isContentEditable","focusTriggersKeyboardModality","doc","addEventListener","isFocusVisibleRef","onFocus","onBlur","toVal","mix","tmp","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","isMemo","ForwardRef","render","Memo","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","module","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","Symbol","for","c","g","q","v","w","u","$$typeof","A","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","DataView","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","entry","has","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","Promise","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","data","__data__","Uint8Array","thisArg","iteratee","predicate","resIndex","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseAssignValue","eq","objValue","copyObject","keysIn","arrayEach","assignValue","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","isMap","isObject","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","isFunc","stacked","subValue","add","objectCreate","baseCreate","proto","arrayPush","isFlattenable","baseFlatten","depth","isStrict","castPath","toKey","keysFunc","symbolsFunc","getRawTag","objectToString","symToStringTag","toStringTag","baseGetTag","isObjectLike","isFunction","isMasked","toSource","reIsHostCtor","funcProto","Function","objectProto","funcToString","reIsNative","isLength","typedArrayTags","isPrototype","nativeKeys","nativeKeysIn","isProto","identity","baseSetToString","arrayMap","isSymbol","symbolProto","symbolToString","baseToString","last","isKey","stringToPath","arrayBuffer","byteLength","freeExports","nodeType","freeModule","Buffer","allocUnsafe","buffer","cloneArrayBuffer","dataView","byteOffset","reFlags","regexp","symbolValueOf","valueOf","symbol","typedArray","isNew","getSymbols","getSymbolsIn","coreJsData","flatten","overRest","setToString","freeGlobal","global","baseGetAllKeys","isKeyable","baseIsNative","getPrototype","overArg","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","propertyIsEnumerable","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ArrayBuffer","resolve","Ctor","ctorString","nativeCreate","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","spreadableSymbol","isConcatSpreadable","reIsUint","reIsDeepProp","reIsPlainProp","maskSrcKey","uid","IE_PROTO","assocIndexOf","splice","pop","getMapData","freeProcess","nodeUtil","types","binding","nativeMax","otherArgs","baseGet","baseSlice","freeSelf","self","shortOut","nativeNow","Date","now","lastCalled","stamp","remaining","pairs","LARGE_ARRAY_SIZE","memoizeCapped","rePropName","reEscapeChar","quote","subString","CLONE_DEEP_FLAG","baseIsArguments","stubFalse","baseIsMap","baseUnary","nodeIsMap","objectCtorString","baseIsSet","nodeIsSet","baseIsTypedArray","nodeIsTypedArray","arrayLikeKeys","baseKeys","isArrayLike","baseKeysIn","resolver","TypeError","memoized","Cache","baseUnset","customOmitClone","flatRest","omit","paths","propIsEnumerable","toObject","test1","test2","test3","letter","err","shouldUseNative","symbols","to","aa","ba","ca","da","ea","fa","ha","ia","ja","ka","B","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","D","oa","pa","qa","ma","isNaN","na","la","removeAttribute","setAttributeNS","xlinkHref","ra","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","sa","ta","ua","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","E","Ma","Ka","iterator","La","Na","Oa","Pa","prepareStackTrace","Reflect","construct","Qa","_render","Ra","_context","_payload","_init","Sa","Ta","nodeName","Va","_valueTracker","configurable","stopTracking","Ua","Wa","Xa","activeElement","body","Ya","defaultChecked","_wrapperState","initialChecked","Za","initialValue","$a","ab","bb","cb","eb","Children","db","fb","defaultSelected","gb","dangerouslySetInnerHTML","hb","ib","jb","textContent","kb","lb","mb","nb","ob","namespaceURI","innerHTML","MSApp","execUnsafeLocalFunction","pb","lastChild","nodeValue","qb","gridArea","lineClamp","rb","sb","tb","setProperty","ub","menuitem","area","base","br","col","embed","hr","img","keygen","link","meta","param","track","wbr","vb","wb","is","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","removeEventListener","Rb","onError","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","flags","$b","memoizedState","dehydrated","ac","cc","child","sibling","bc","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","nc","oc","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","delete","pointerId","tc","vc","wc","lanePriority","unstable_runWithPriority","priority","containerInfo","xc","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","animation","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","F","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","clz32","bd","cd","log","LN2","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","bind","uc","jd","kd","ld","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","shiftKey","getModifierState","zd","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","repeat","locale","which","Rd","Td","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","range","me","ne","oe","listeners","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","Le","Me","contains","compareDocumentPosition","Ne","HTMLIFrameElement","contentWindow","href","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","instance","listener","G","$e","af","bf","random","cf","df","capture","passive","Nb","ef","ff","parentWindow","gf","hf","J","K","Q","L","je","char","ke","unshift","jf","kf","lf","mf","autoFocus","nf","__html","of","pf","qf","rf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","H","I","Cf","M","N","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","getChildContext","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","O","eg","fg","gg","hg","ig","jg","kg","ReactCurrentBatchConfig","mg","ng","og","pg","qg","rg","_currentValue","sg","childLanes","tg","dependencies","firstContext","lanes","ug","vg","context","observedBits","responders","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","effects","yg","zg","eventTime","lane","payload","Ag","Bg","Cg","C","Dg","Eg","Fg","refs","Gg","Kg","isMounted","_reactInternals","enqueueSetState","Hg","Ig","Jg","enqueueReplaceState","enqueueForceUpdate","Lg","shouldComponentUpdate","isPureReactComponent","Mg","updater","Ng","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Og","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Pg","Qg","_owner","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","elementType","Vg","implementation","Wg","Xg","done","Yg","Zg","$g","ah","bh","ch","dh","eh","documentElement","fh","gh","hh","P","ih","memoizedProps","revealOrder","jh","kh","lh","mh","nh","oh","pendingProps","ph","qh","rh","sh","th","uh","_workInProgressVersionPrimary","vh","ReactCurrentDispatcher","wh","xh","R","S","T","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","baseQueue","queue","Ih","Jh","Kh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","U","useState","getSnapshot","subscribe","useEffect","setSnapshot","Oh","Ph","Qh","Rh","destroy","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","readContext","useCallback","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","ReactCurrentOwner","fi","gi","hi","ii","ji","ki","li","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","qi","ri","pendingContext","Bi","Di","Ei","si","retryLane","ti","fallback","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","wi","xi","yi","zi","isBackwards","rendering","renderingStartTime","tail","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onClick","onclick","createElementNS","V","Hi","Ii","W","Ji","Ki","Li","Mi","message","Ni","Oi","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","WeakSet","Vi","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","Zi","$i","aj","bj","onCommitFiberUnmount","componentWillUnmount","cj","dj","ej","fj","gj","hj","_reactRootContainer","ij","jj","kj","lj","then","mj","nj","ceil","oj","pj","X","Y","qj","rj","sj","tj","uj","vj","Infinity","wj","ck","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","va","ak","bk","dk","rangeCount","focusedElem","selectionRange","ek","extend","createRange","setStart","removeAllRanges","addRange","setEnd","left","scrollLeft","top","scrollTop","onCommitFiberRoot","fk","gk","ik","isReactComponent","pendingChildren","jk","mutableSourceEagerHydrationData","kk","lk","mk","nk","ok","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","hasAttribute","sk","uk","hk","_calculateChangedBits","unstable_observedBits","unmount","form","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","version","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","__REACT_DEVTOOLS_GLOBAL_HOOK__","yk","isDisabled","supportsFiber","inject","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","__self","__source","jsxs","setState","forceUpdate","escape","_status","_result","IsSomeRendererActing","toArray","PureComponent","cloneElement","_currentValue2","_threadCount","Consumer","createFactory","createRef","isValidElement","lazy","memo","performance","MessageChannel","unstable_forceFrameRate","cancelAnimationFrame","requestAnimationFrame","floor","port2","port1","onmessage","postMessage","sortIndex","startTime","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","__esModule","_typeof","_regeneratorRuntime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","writable","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","method","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","reject","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","reverse","skipTempReset","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","runtime","regeneratorRuntime","accidentalStrictMode","globalThis","_arrayLikeToArray","arr","arr2","_defineProperty","excluded","sourceKeys","_slicedToArray","_s","_e","_arr","_n","_d","unsupportedIterableToArray","_toConsumableArray","arrayLikeToArray","_unsupportedIterableToArray","o","minLen","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","leafPrototypes","ns","def","chunkId","all","promises","miniCssF","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","charset","src","onScriptComplete","onerror","onload","doneFns","nmd","installedChunks","installedChunkData","promise","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","some","chunkLoadingGlobal","ownKeys","enumerableOnly","filter","sym","_objectSpread2","getOwnPropertyDescriptors","defineProperties","epsilon","translateX","translateY","scale","center","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","devicePixelRatio","ticks","domain","format","range0","range1","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","select","isFinite","remove","each","_","tickSize","axisLeft","none","querySelector","empty","childMatcher","find","childFirst","firstElementChild","update","EnterNode","datum","_next","_parent","bindIndex","group","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","arraylike","ascending","NaN","allowArrayLike","it","normalCompletion","didErr","_e2","xhtml","svg","xlink","xml","xmlns","namespaces","space","local","attrRemove","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","removeProperty","styleConstant","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","lower","creatorInherit","uri","creatorFixed","namespace","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","parseTypenames","typenames","onRemove","typename","on","__on","onAdd","contextListener","dispatchEvent","CustomEvent","createEvent","initEvent","dispatchConstant","dispatchFunction","groups","_groups","Selection","parents","_parents","subgroups","subnode","subgroup","arrayAll","selectorAll","selectChild","childFind","selectChildren","childrenFilter","matcher","enterGroup","updateGroup","exitGroup","i0","i1","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","m1","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","classed","html","creator","deep","selection_iterator","noop","Dispatch","that","taskHead","taskTail","frame","interval","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_call","_time","timer","restart","wake","timerFlush","t0","t2","t1","sleep","nap","poke","clearInterval","setInterval","elapsed","emptyOn","emptyTween","timing","schedules","__transition","tween","schedule","ease","init","svgNode","degrees","PI","rotate","skewX","scaleX","scaleY","sqrt","atan2","atan","interpolateTransform","pxComma","pxParen","degParen","translate","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","hsl2rgb","m2","basis","v0","v1","v2","v3","t3","channels","displayable","formatHex8","formatHsl","pow","linear","gamma","nogamma","exponential","rgbGamma","colorRgb","rgbSpline","spline","rgbBasis","reA","reB","am","bm","bs","one","zero","interpolateNumber","interpolateRgb","interpolateString","interpolate","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","id0","id1","styleNull","listener0","styleMaybeRemove","removeFunction","easeVarying","cancel","interrupt","defaultTiming","number1","number2","formatDecimalParts","toExponential","prefixExponent","formatSpecifier","specifier","FormatSpecifier","align","sign","comma","precision","exponent","toLocaleString","toPrecision","formatRounded","formatPrefix","prefixes","grouping","thousands","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","formatLocale","e10","e5","e2","tickIncrement","power","LN10","descending","bisector","compare1","compare2","delta","lo","mid","right","ascendingBisect","bisectRight","genericArray","setTime","isView","numberArray","normalize","bimap","d0","d1","r0","r1","polymap","bisect","unknown","untransform","piecewise","interpolateValue","rescale","clamper","invert","rangeRound","interpolateRound","continuous","initRange","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","nice","prestep","maxIter","_classCallCheck","Constructor","_defineProperties","_createClass","protoProps","staticProps","_assertThisInitialized","ReferenceError","_getPrototypeOf","_superPropBase","_get","receiver","desc","_setPrototypeOf","_inherits","subClass","superClass","_isNativeReflectConstruct","sham","Proxy","Boolean","_possibleConstructorReturn","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","_construct","Parent","Class","_wrapNativeSuper","_cache","Wrapper","InternMap","keyof","_intern","intern_get","intern_set","intern_delete","implicit","ordinal","scheme","interpolateRgbBasis","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","rect","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","ox","oy","x11","y11","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","ax","ay","bx","by","centroid","series","s0","s1","stackValue","stackSeries","Transform","point","applyX","applyY","invertX","invertY","rescaleX","rescaleY","isOffsetInPixels","includes","markerStyles","offsetTextStyles","DebugOffset","useTop","debug","onStepEnter","onStepExit","onStepProgress","threshold","isOffsetDefinedInPixels","lastScrollTop","setLastScrollTop","windowInnerHeight","setWindowInnerHeight","handleSetLastScrollTop","handleWindowResize","innerHeight","offsetValue","progressThreshold","theta","ratio","createThreshold","scrollamaId","windowSize","setWindowSize","handleResize","innerWidth","maxOccupancy","squareSize","seatIdxs","doorIdxs","egress","moveSeats","board","race","income","proportional","raceKeys","emptyRaces","incomeKeys","emptyIncomes","findIndexOfPerson","occupant","findIndex","person","randomIntFromInterval","distance","getClosestEl","el","curr","getClosestPoint","percentageChance","chances","pool","i2","swap","temp","arrayShuffle","sampleFromProportions","propObj","introduceNoise","num","racial","stops","enterFn","chartType","chartTypeInfo","exitFn","updateFn","chartSeries","isProp","orderNone","offsetNone","oz","sz","d3","sum","proportion","fromEntries","raceColors","incomeColors","shortKeys","axisTitle","selectors","people","currentMapChart","peopleRef","bound_args","bind_trailing_args","transitionColors","peopleSelection","train","backgroundColor","useFormControl","FormControlContext","_taggedTemplateLiteral","freeze","_inheritsLoose","getChildMapping","mapFn","mapper","getProp","getNextChildMapping","nextProps","prevChildMapping","onExited","nextChildMapping","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","mergeChildMappings","hasPrev","hasNext","prevChild","isLeaving","in","TransitionGroup","_React$Component","handleExited","contextValue","isMounting","firstRender","mounted","appear","currentChildMapping","_this$props","childFactory","TransitionGroupContext","_len","keyframes","insertable","pulsate","rippleX","rippleY","rippleSize","inProp","leaving","setLeaving","rippleClassName","ripple","rippleVisible","ripplePulsate","rippleStyles","childClassName","childLeaving","childPulsate","timeoutId","_t","_t2","_t3","_t4","enterKeyframe","exitKeyframe","pulsateKeyframe","TouchRippleRoot","overflow","pointerEvents","bottom","TouchRippleRipple","Ripple","touchRippleClasses","TouchRipple","centerProp","ripples","setRipples","rippleCallback","ignoringMouseDown","startTimer","startTimerCommit","startCommit","oldRipples","fakeElement","getBoundingClientRect","sizeX","clientWidth","sizeY","clientHeight","getButtonBaseUtilityClass","ButtonBaseRoot","alignItems","justifyContent","boxSizing","WebkitTapHighlightColor","outline","verticalAlign","MozAppearance","WebkitAppearance","textDecoration","borderStyle","buttonBaseClasses","colorAdjust","ButtonBase","centerRipple","disableRipple","disableTouchRipple","focusRipple","LinkComponent","onContextMenu","onDragLeave","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","buttonRef","rippleRef","handleRippleRef","useIsFocusVisible","handleFocusVisible","handleBlurVisible","focusVisibleRef","setFocusVisible","mountedState","setMountedState","enableTouchRipple","useRippleHandler","rippleAction","eventCallback","skipRippleAction","handleMouseDown","handleContextMenu","handleDragLeave","handleMouseUp","handleMouseLeave","handleTouchStart","handleTouchEnd","handleTouchMove","handleBlur","handleFocus","isNonNativeButton","keydownRef","handleKeyUp","ComponentProp","buttonProps","handleOwnRef","handleRef","focusVisibleClassName","composedClasses","getSwitchBaseUtilityClass","SwitchBaseRoot","edge","marginLeft","marginRight","SwitchBaseInput","SwitchBase","checkedProp","checkedIcon","disabledProp","disableFocusRipple","inputRef","onChange","useControlled","setCheckedState","muiFormControl","hasLabelFor","newChecked","RadioButtonIconRoot","RadioButtonIconBackground","RadioButtonUncheckedIcon","RadioButtonIconDot","RadioButtonCheckedIcon","dot","getRadioUtilityClass","RadioRoot","radioClasses","defaultCheckedIcon","RadioButtonIcon","defaultIcon","Radio","_defaultIcon$props$fo","_defaultCheckedIcon$p","nameProp","onChangeProp","radioGroup","RadioGroupContext","getFormGroupUtilityClass","formControlState","states","FormGroupRoot","row","flexDirection","flexWrap","fcs","RadioGroup","actions","valueProp","rootRef","setValueState","useId","FormGroup","extendSxProp","finalSx","inSx","systemProps","otherProps","splitProps","getTypographyUtilityClass","TypographyRoot","noWrap","gutterBottom","paragraph","textOverflow","whiteSpace","marginBottom","defaultVariantMapping","colorTransformations","textPrimary","textSecondary","Typography","themeProps","transformDeprecatedColors","variantMapping","getFormControlLabelUtilityClasses","FormControlLabelRoot","formControlLabelClasses","labelPlacement","componentsProps","control","disableTypography","labelProp","controlProps","hasValue","getFormControlUtilityClasses","FormControlRoot","fullWidth","marginTop","FormControl","visuallyFocused","hiddenLabel","initialAdornedStart","isMuiElement","startAdornment","adornedStart","setAdornedStart","initialFilled","SSR","isFilled","filled","setFilled","focusedState","setFocused","onFilled","childContext","onEmpty","registerEffect","stripMapColor","whiteStyle","ArrowPath","isGlowing","ArrowText","currentStop","raceStack","incomeStack","stepHandlers","isMoving","setCurrentMapChart","currentMapType","setCurrentMapType","showOutro","setStep","setType","circlesRef","dimensions","barHeight","yProp","formatPercent","axisProp","legendSpacing","showElement","stacks","paddingSides","margins","stopCircs","rx","ry","First","click","arrowCircle","Second","Third","setCurrent","handleChange","firstMap","secondMap","thirdMap","arcs","pieData","sortValues","pie","svgWidth","svgHeight","radius","idxs","raceSelection","total","raceArcs","replaceAll","incomeSelection","incomeArcs","paddingLeft","Box","defaultClassName","generateClassName","BoxRoot","_extendSxProp","createBox","disablePortal","mountNode","setMountNode","getContainer","ReactDOM","ariaHidden","show","getPaddingRight","paddingRight","ariaHiddenSiblings","mountElement","currentElement","elementsToExclude","blacklistTagNames","findIndexOf","items","idx","handleContainer","restoreStyle","disableScrollLock","scrollHeight","isOverflowing","scrollbarSize","documentWidth","getScrollbarSize","parentElement","containerWindow","scrollContainer","overflowY","overflowX","ModalManager","containers","modals","modalIndex","modalRef","hiddenSiblings","getHiddenSiblings","mount","containerIndex","restore","nextTop","candidatesSelector","defaultGetTabbable","regularTabNodes","orderedTabNodes","nodeTabIndex","tabindexAttr","getTabIndex","getRadio","roving","isNonTabbableRadio","isNodeMatchingSelectorFocusable","documentOrder","defaultIsEnabled","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","getTabbable","isEnabled","open","ignoreNextEnforceFocus","sentinelStart","sentinelEnd","nodeToRestore","reactFocusEventTarget","activated","lastKeydown","contain","rootElement","hasFocus","tabbable","_lastKeydown$current","_lastKeydown$current2","isShiftTab","focusNext","focusPrevious","loopFocus","handleFocusSentinel","childrenPropsHandler","getModalUtilityClass","defaultManager","ModalUnstyled","BackdropComponent","BackdropProps","classesProp","closeAfterTransition","disableEscapeKeyDown","hideBackdrop","keepMounted","manager","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","exited","setExited","mountNodeRef","hasTransition","getHasTransition","getModal","handleMounted","handleOpen","resolvedContainer","isTopModal","handlePortalRef","handleClose","childProps","onEnter","Root","rootProps","isHostComponent","TrapFocus","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","initialStatus","appearStatus","unmountOnExit","mountOnEnter","status","nextCallback","prevState","updateStatus","prevProps","nextStatus","cancelNextCallback","getTimeouts","mounting","performEnter","performExit","_this2","appearing","nodeRef","maybeNode","maybeAppearing","timeouts","enterTimeout","config","safeSetState","onEntered","onEntering","onTransitionEnd","_this3","onExit","onExiting","nextState","setNextCallback","_this4","handler","doesNotHaveTimeoutOrListener","addEndListener","_ref3","maybeNextCallback","getTransitionProps","_style$transitionDura","_style$transitionTimi","transitionDuration","transitionTimingFunction","transitionDelay","entered","Fade","useThemeSystem","defaultTimeout","TransitionComponent","foreignRef","normalizedTransitionCallback","maybeIsAppearing","handleEntering","handleEnter","isAppearing","reflow","transitionProps","webkitTransition","handleEntered","handleExiting","handleExit","visibility","getBackdropUtilityClass","getRandomValues","BackdropRoot","invisible","Backdrop","_components$Root","_componentsProps$root","ModalRoot","hidden","ModalBackdrop","backdrop","Modal","commonProps","extendUtilityClasses","rnds8","rng","crypto","msCrypto","uuid","REGEX","byteToHex","validate","buf","rnds","getOccupancy","handleEgress","boarded","occupiedAreas","toRemove","peopleToRemove","randIdx","boardedIdx","totalIdx","handleBoard","availableSeats","availableSpaces","toAdd","desiredOccupancy","peopleToAdd","newPerson","uuidv4","gender","boxShadow","useWindowSize","gridTrain","isSeat","isDoor","createGridTrain","setGridTrain","peopleBoarded","setPeopleBoarded","peopleTotal","setPeopleTotal","setIsMoving","genderStack","setGenderStack","setRaceStack","setIncomeStack","setCurrentStop","setAction","isOutro","setIsOutro","setOpen","newGridTrain","cloneDeep","getAvailableSeats","occupiedSeats","occupiedSpaces","getOccupation","scanTrain","boardedCopy","totalCopy","updateState","randSpaceIdx","closestSeat","idxToRemove","handleMoveSeats","male","female","introduceTrain","moveFirstStep","moveMiddleSteps","noMoveMiddleSteps","Info","rel","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","getElementById","reportWebVitals"],"sourceRoot":""}
\ No newline at end of file