{"version":3,"sources":["App.js","reportWebVitals.js","index.js"],"names":["NBSP","String","fromCodePoint","setProperty","cssVar","value","document","documentElement","style","setPropertyPx","appendSizeThresholds","config","rows","columns","sizes","bottom","top","left","right","widths","heights","size","grid","gap","back","imgWidth","imgHeight","width","Math","max","height","push","sort","a","b","largestSize","dimension","largest","i","length","App","props","componentDidMount","axios","get","response","adaptToSize","data","window","addEventListener","onResize","componentWillUnmount","removeEventListener","state","theState","newState","innerWidth","innerHeight","isOpen","min","axisFontSize","axisPad","setState","clickOnFront","evt","cards","target","getBoundingClientRect","leftGrid","floor","clientX","topGrid","clientY","row","console","log","pageX","x","squareId","padStart","enlarged","url","clickOnBack","render","title","bottomCoordinates","xLetter","isSelected","className","rightCoordinates","yNumber","substring","id","href","src","onClick","alt","PureComponent","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.93db5ad0.chunk.js","sourcesContent":["import './App.css';\nimport {PureComponent} from \"react\";\nimport axios from \"axios\";\n\nconst NBSP = String.fromCodePoint(160);\nconst setProperty = (cssVar, value) => document.documentElement.style.setProperty(cssVar,value)\nconst setPropertyPx = (cssVar, value) => setProperty(cssVar,value+\"px\");\nconst appendSizeThresholds = (config) => {\n const {rows, columns, sizes} = config\n const {bottom, top} = rows\n const {left, right} = columns\n\n const widths = []\n const heights = []\n for(const size in sizes) {\n const {grid, gap, back} = sizes[size]\n const imgWidth = (1+right-left)*(grid+gap)+gap\n const imgHeight = (1+top-bottom)*(grid+gap)+gap\n const width = Math.max(imgWidth, back) + 100\n const height = Math.max(imgHeight, back) + 100\n widths.push([width, size])\n heights.push([height, size])\n }\n\n widths.sort((a,b) => a[0]-b[0])\n heights.sort((a,b) => a[0]-b[0])\n widths[0][0] = 0\n heights[0][0] = 0\n\n config.widths=widths\n config.heights=heights\n return config\n}\n\nconst largestSize = (sizes, dimension) => {\n let largest = 0\n for(let i=0;idimension) {\n return largest\n }\n largest = i\n }\n return largest\n}\n\nclass App extends PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n isOpen: false,\n enlarged: null,\n url: \"\",\n };\n }\n\n componentDidMount = async () => {\n const response = await axios.get(\"DATA/CONFIG.JSON\")\n this.adaptToSize(appendSizeThresholds(response.data))\n window.addEventListener(\"resize\", this.onResize)\n }\n\n componentWillUnmount = () => {\n window.removeEventListener(\"resize\", this.onResize)\n }\n\n onResize = () => {\n this.adaptToSize(this.state)\n }\n\n adaptToSize = (theState) => {\n const {...newState} = theState\n const {widths, heights, sizes} = newState\n const {innerWidth, innerHeight} = window\n newState.isOpen=true;\n const largest = Math.min(largestSize(widths, innerWidth), largestSize(heights, innerHeight))\n newState.size=widths[largest][1]\n newState.innerWidth = innerWidth\n newState.innerHeight = innerHeight\n\n const {rows, columns, size} = newState\n\n const {grid, gap, back, axisFontSize, axisPad} = sizes[size]\n const {bottom, top} = rows\n const {left, right} = columns\n\n const imgWidth = (1+right-left)*(grid+gap)+gap\n const imgHeight = (1+top-bottom)*(grid+gap)+gap\n\n setProperty('--columns', 1 + right - left)\n setProperty('--rows', 1 + top - bottom)\n setPropertyPx('--grid', grid)\n setPropertyPx('--gap', gap)\n setPropertyPx('--width', imgWidth)\n setPropertyPx('--height', imgHeight)\n setPropertyPx('--back', back)\n setPropertyPx('--axisFontSize', axisFontSize)\n setPropertyPx('--axisPad', axisPad)\n\n this.setState(newState)\n }\n\n clickOnFront = (evt) => {\n const {state} = this\n const {rows, columns, cards, sizes, size} = state\n const {grid, gap} = sizes[size]\n\n const {left, top} = evt.target.getBoundingClientRect()\n const leftGrid = Math.floor((evt.clientX - left) / (grid + gap))\n const topGrid = Math.floor((evt.clientY - top) / (grid + gap))\n const row = rows.top - topGrid\n console.log(evt.pageX, evt.target.x, grid, gap, leftGrid)\n const column = String.fromCodePoint(columns.left + leftGrid + 64)\n const squareId = column + String(row).padStart(2, '0')\n if(cards[squareId]) {\n this.setState({\n enlarged: squareId,\n url: cards[squareId].url\n })\n } else {\n this.setState({enlarged: null, url: \"\"})\n }\n }\n\n clickOnBack = () => {\n this.setState({enlarged: null, url: \"\"})\n }\n\n render = () => {\n const {clickOnFront, clickOnBack, state} = this\n if (!state.isOpen) {\n return null\n }\n\n const {enlarged, rows, columns, url, title, sizes, size} = state\n const {grid, back} = sizes[size]\n const {bottom, top} = rows\n const {left, right} = columns\n\n let bottomCoordinates = []\n for(let i=left;i<=right;i++) {\n const xLetter = String.fromCodePoint(i + 64)\n const isSelected = enlarged && xLetter === enlarged[0] ? \"isSelected\" : null\n bottomCoordinates.push(
{xLetter}
)\n }\n\n let rightCoordinates = []\n for(let i=top;i>=bottom;i--) {\n const yNumber = String(i).padStart(2, '0')\n const isSelected = enlarged && yNumber === enlarged.substring(1) ? \"isSelected\" : null\n rightCoordinates.push(
{yNumber}
)\n }\n return (\n
\n <>\n
{title}
\n
{url ? url : NBSP}
\n
\n
\n {\"Front\n
{enlarged && {enlarged}
\n
\n
{rightCoordinates}
\n
{bottomCoordinates}
\n
\n \n\n
\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 \n \n ,\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"],"sourceRoot":""}