{"version":3,"sources":["utils/Utils.js","components/ItemName.jsx","App.js","index.js"],"names":["fromMaterial","material","charAt","str","substr","replacement","replaceAll","includes","replace","substring","toLowerCase","colors","a","b","c","d","e","f","ItemName","props","name","className","Utils","elements","lookingForCode","currentCode","undefined","chars","split","char","test","length","push","color","join","map","element","idx","style","App","useState","loading","data","state","setState","useEffect","fetch","then","res","json","catch","err","console","error","obj","item","id","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"6MAAO,SAASA,EAAaC,GAC3B,OAAOA,EAASC,OAAO,GAIlB,SAAoBC,EAAKC,EAAQC,GACtC,GAAIF,EAAIG,WACN,OAAOH,EAAIG,WAAWF,EAAQC,GAGhC,KAAOF,EAAII,SAASH,IAClBD,EAAMA,EAAIK,QAAQJ,EAAQC,GAE5B,OAAOF,EAZqBG,CAAWL,EAASQ,UAAU,GAAGC,cAAe,IAAK,K,WCC7EC,EAAS,CACb,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACHC,EAAG,UACHC,EAAG,UACHC,EAAG,UACHC,EAAG,UACHC,EAAG,UACHC,EAAG,WA6DUC,MA1Df,SAAkBC,GAChB,IAAQC,EAAmBD,EAAnBC,KAAMnB,EAAakB,EAAblB,SAEd,IAAKmB,EACH,OAAO,qBAAKC,UAAU,oBAAf,SAAoCC,EAAmBrB,KAGhE,GAAKmB,EAAKb,SAAS,KAEZ,CACL,IADK,EACCgB,EAAW,GACbC,GAAiB,EACjBC,OAAcC,EACdC,EAAQ,GAJP,cAMYP,EAAKQ,MAAM,KANvB,IAML,2BAAiC,CAAC,IAAzBC,EAAwB,QAE/B,GAAa,MAATA,EACFL,GAAiB,OACZ,GAAIA,GAAkB,gBAAgBM,KAAKD,GAAO,CAGvD,QAAqBH,IAAjBf,EAAOkB,GACT,SAIEJ,GAAeE,EAAMI,OAAS,GAChCR,EAASS,KAAK,CAAEC,MAAOR,EAAaL,KAAMO,EAAMO,KAAK,MAIvDV,GAAiB,EACjBC,EAAcI,EACdF,EAAQ,QAERH,GAAiB,EACjBG,EAAMK,KAAKH,IA5BV,8BA2CL,OAVIF,EAAMI,OAAS,IACbN,EACFF,EAASS,KAAK,CAAEC,MAAOR,EAAaL,KAAMO,EAAMO,KAAK,MAErDX,EAASS,KAAK,CAAEZ,KAAMO,EAAMO,KAAK,MAEnCP,EAAQ,IAIH,qBAAKN,UAAU,YAAf,SAA4BE,EAASY,KAAI,SAACC,EAASC,GACxD,OAAO,sBAAMC,MAAO,CAAEL,MAAM,GAAD,OAAKtB,EAAOyB,EAAQH,SAAxC,SAA+DG,EAAQhB,MAAdiB,QA7ClE,OAAO,qBAAKhB,UAAU,YAAf,SAA4BD,KCOxBmB,MAhCf,WACE,MAA0BC,mBAAS,CAAEC,SAAS,EAAMC,UAAMhB,IAA1D,mBAAOiB,EAAP,KAAcC,EAAd,KAWA,OATAC,qBAAU,WACRC,MAAM,wCACHC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,UAChBF,MAAK,SAAAE,GACJL,EAAS,CAAEH,SAAS,EAAOC,KAAMO,OAElCC,OAAM,SAAAC,GAAG,OAAIC,QAAQC,MAAMF,QAC7B,CAACP,IAEAD,EAAMF,QACD,8CAIP,sBAAKpB,UAAU,YAAf,UACE,kDAAqBsB,EAAMD,KAAKX,OAAhC,OAECY,EAAMD,KAAKP,KAAI,SAAAmB,GACd,IAAQC,EAASD,EAATC,KAER,OAAQ,sBAAKlC,UAAU,OAAf,UACN,cAAC,EAAD,CAAUpB,SAAUsD,EAAKtD,SAAUmB,KAAMmC,EAAKnC,OAC9C,uBAAMC,UAAU,UAAhB,iBAA+BiC,EAAIE,QAFFF,EAAIE,WCtB/CC,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,EAAD,MAEFC,SAASC,eAAe,W","file":"static/js/main.694d1193.chunk.js","sourcesContent":["export function fromMaterial(material) {\n return material.charAt(0) + replaceAll(material.substring(1).toLowerCase(), '_', ' ');\n}\n\n// Martin is using Chrome 78 (2019) for some reason... it doesn't have String#replaceAll\nexport function replaceAll(str, substr, replacement) {\n if (str.replaceAll) {\n return str.replaceAll(substr, replacement);\n }\n\n while (str.includes(substr)) {\n str = str.replace(substr, replacement);\n }\n return str;\n}","import * as Utils from '../utils/Utils';\n\nconst colors = {\n 0: '#000000',\n 1: '#0000AA',\n 2: '#00AA00',\n 3: '#00AAAA',\n 4: '#AA0000',\n 5: '#AA00AA',\n 6: '#FFAA00',\n 7: '#AAAAAA',\n 8: '#555555',\n 9: '#5555FF',\n a: '#55FF55',\n b: '#55FFFF',\n c: '#FF5555',\n d: '#FF55FF',\n e: '#FFFF55',\n f: '#FFFFFF',\n}\n\nfunction ItemName(props) {\n const { name, material } = props;\n\n if (!name) {\n return
{Utils.fromMaterial(material)}
\n }\n\n if (!name.includes('&')) {\n return
{name}
\n } else {\n const elements = [];\n let lookingForCode = false;\n let currentCode = undefined;\n let chars = [];\n\n for (let char of name.split('')) {\n // console.log(` ${char} - code: ${lookingForCode}, current: ${currentCode} (${lookingForCode} && ${/[a-fk-or0-9]/g.test(char)}) -- chars: ${chars.join('')}`);\n if (char === '&') {\n lookingForCode = true;\n } else if (lookingForCode && /[a-fk-or0-9]/g.test(char)) {\n\n // If there is no color (for example, bold or obfuscated) just skip the processing.\n if (colors[char] === undefined) {\n continue;\n }\n\n // We found a valid \"&x\" now we want to make a new element if applicable\n if (currentCode && chars.length > 0) {\n elements.push({ color: currentCode, name: chars.join('') })\n }\n\n // Reset values\n lookingForCode = false;\n currentCode = char;\n chars = [];\n } else {\n lookingForCode = false;\n chars.push(char);\n }\n }\n\n // If we have chars left over then add them\n if (chars.length > 0) {\n if (currentCode) {\n elements.push({ color: currentCode, name: chars.join('') });\n } else {\n elements.push({ name: chars.join('') });\n }\n chars = [];\n }\n\n // Build\n return
{elements.map((element, idx) => {\n return {element.name}\n })}
;\n }\n}\n\nexport default ItemName;","import React, { useState, useEffect } from \"react\";\n\nimport ItemName from './components/ItemName';\n\nfunction App() {\n const [state, setState] = useState({ loading: true, data: undefined });\n\n useEffect(() => {\n fetch('https://static.walshy.dev/items.json')\n .then(res => res.json())\n .then(json => {\n setState({ loading: false, data: json });\n })\n .catch(err => console.error(err));\n }, [setState]);\n\n if (state.loading) {\n return Loading...\n }\n\n return (\n
\n

Slimefun Items ({state.data.length})

\n\n {state.data.map(obj => {\n const { item } = obj;\n\n return (
\n \n ID: {obj.id}\n
)\n })}\n
\n );\n}\n\nexport default App;","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);"],"sourceRoot":""}