{"version":3,"sources":["redux/calcSlice.js","components/UnitSelector.js","assets/js/calculate.js","components/Calculator.js","components/ResultsFormDialog.js","assets/images/tank.png","components/Results.js","components/ContactFormDialog.js","assets/images/tank-scene.jpg","components/ContactUs.js","App.js","redux/store.js","serviceWorker.js","index.js"],"names":["calcSlice","createSlice","name","initialState","value","formInitValues","reducers","changeCalc","state","action","payload","actions","reducer","selectCalc","calc","UnitSelectorContainer","styled","Grid","theme","padding","color","textAlign","marginBottom","UnitSelector","useSelector","dispatch","useDispatch","Fragment","container","item","xs","ToggleButtonGroup","unit","exclusive","onChange","e","parseInt","target","ToggleButton","Calculate","metals","calculator","filter","metal","OKGrade","calcMetals","temp","lowTempIdx","highTempIdx","designStress","designPerDeg","sortedMetals","sort","a","b","Temperature","idx","length","DesignStress","Micro","tankDiameter","steelType","thickness","i","diam","actHeight","plateWidth","dens","jointF","corrAllow","minTh","minThick","height","result","section","width","this","calculateThickness","calculateMinThickness","push","uom","ret","fromUom","sections","steelDensity","weight","diameter","ConvToMM","ConvToM","Math","PI","metals1","concat","metals2","metals3","CalcStd1","CalcSTd1_Austenitic","CalcSTd1_Austenitic_OKGrade","Object","assign","Map","map","itm","values","CalcSTd1_Duplex","CalcSTd1_Duplex_OKGrade","CalcSTd1_Carbon","CalcSTd1_Carbon_OKGrade","CalcSTd2","CalcSTd2_Austenitic","CalcSTd2_Austenitic_OKGrade","CalcSTd2_Duplex","CalcSTd2_Duplex_OKGrade","CalcSTd2_Carbon","CalcSTd2_Carbon_OKGrade","CalcSTd3","CalcSTd3_Austenitic","CalcSTd3_Austenitic_OKGrade","CalcSTd3_Duplex","CalcSTd3_Duplex_OKGrade","CalcSTd3_Carbon","CalcSTd3_Carbon_OKGrade","Item","Paper","spacing","DisabledMenuItem","MenuItem","palette","background","default","primary","dark","DisabledMenuItemHighlighted","main","opacity","Calculator","props","firstRender","useRef","useEffect","current","subBtn","useState","triggerSubmit","setTriggerSubmit","click","submitted","setTimeout","document","getElementById","scrollIntoView","behavior","block","calculate","formik","useFormik","initialValues","queryValues","window","parent","location","search","queryStringKeyValue","split","qsJsonObj","longFields","entries","shortFields","key","hasOwnProperty","isNaN","decodeURI","getQueryString","steelGrade","CalcStd","OKGradeShort","steelGrade2","Array","isArray","populateInitalValues","validate","errors","temperature","units","density","plateWidth2","corrosionAllowance","enableReinitialize","onSubmit","round","designStressByTemp","res1","tankSectionsCalc","jointFactor","consumption1","calcMtrlConsumption","SteelDensity","designStress2","res2","jointFactor2","consumption2","submitting","handleSubmit","Fade","in","style","transformOrigin","timeout","lg","Typography","variant","component","FormControl","fullWidth","TextField","type","handleChange","onBlur","handleBlur","error","touched","helperText","Select","renderValue","IconComponent","KeyboardArrowDownIcon","disabled","macro","FormHelperText","marginTop","position","bottom","Button","ref","onClick","dataLayer","ResultsFormDialog","React","setSubmitted","loading","setLoading","urlString","urlParams","URLSearchParams","emailAddress","company","country","marketingpermission","marketingText","UTMsource","get","UTMmedium","UTMcampaign","includes","toLowerCase","test","calcFields","keys","calcString","toString","now","Date","toLocaleString","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","axios","post","dateTime","Dialog","maxWidth","scroll","PaperProps","sx","m","top","left","open","handleClose","DialogTitle","IconButton","float","margin","fontSize","DialogContent","DialogContentText","inputProps","tabIndex","countries","find","code","FormControlLabel","labelPlacement","control","Checkbox","label","ReactHtmlParser","LoadingButton","paddingLeft","paddingRight","backgroundColor","GradeLabel","BarHolder","flexGrow","Bar","borderRadius","BarInner","ResultContainer","setOpen","diff","abs","thicknessUnits","id","lineHeight","toFixed","backgroundImage","tank","minHeight","backgroundRepeat","backgroundSize","backgroundPosition","display","flexFlow","zIndex","reverse","bar","Grow","marginLeft","marginRight","ceil","paddingTop","paddingBottom","src","alt","xtextAlign","ContactForm","dialogueRef","firstName","lastName","busPhone","jobTitle","resetForm","onClose","ContactContainer","ContactUs","order","fontFamily","tankScene","ContactFormDialog","createTheme","breakpoints","sm","md","xl","typography","p","h1","letterSpacing","h2","textDecoration","h3","contrastText","secondary","text","paper","grey","form","components","MuiContainer","styleOverrides","root","MuiPaper","boxShadow","MuiInputBase","border","MuiOutlinedInput","MuiButton","textTransform","MuiToggleButtonGroup","MuiToggleButton","MuiList","MuiFormHelperText","MuiDialogTitle","MuiDialogContentText","MuiFormControlLabel","alignItems","MuiCheckbox","App","ThemeProvider","CssBaseline","Container","Results","store","configureStore","Boolean","hostname","match","ReactDOM","render","StrictMode","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.93f0e416.chunk.js","sourcesContent":["import { createSlice } from '@reduxjs/toolkit';\nimport formInitValues from '../assets/json/formInitValues.json';\n\nconst calcSlice = createSlice({\n name: 'calc',\n initialState: { \n value: {\n ...formInitValues[1]\n }\n },\n reducers: {\n changeCalc: (state, action) => {\n state.value = { ...action.payload };\n }\n }\n});\n\nconst { actions, reducer } = calcSlice\nexport const { changeCalc } = actions;\n\nexport const selectCalc = (state) => state.calc.value;\n\nexport default reducer;","import React from 'react';\nimport { styled } from '@mui/material/styles';\nimport { Grid, ToggleButton, ToggleButtonGroup } from '@mui/material';\n\nimport formInitValues from '../assets/json/formInitValues.json';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectCalc, changeCalc } from '../redux/calcSlice';\n\nconst UnitSelectorContainer = styled(Grid)(({ theme }) => ({\n padding:0,\n color:'#FFF',\n textAlign:'center',\n marginBottom:'36px'\n}));\n\nconst UnitSelector = () => {\n const calc = useSelector(selectCalc);\n const dispatch = useDispatch();\n\n const handleChange = (e) => { \n dispatch(changeCalc( { ...formInitValues[parseInt(e.target.value)] } ));\n }\n\n return (\n \n \n \n \n API 650 Metric units\n \n \n API 650 Customary units\n \n \n EN 14015 Metric units\n \n \n \n \n );\n}\n\nexport default UnitSelector;\n","class Calculate {\n filterByCalculator(metals, calculator = 1){\n return metals.filter(metal => {\n return (metal[\"CalcStd\"] === calculator);\n });\n }\n \n filterByGrade(metals, OKGrade = \"Supra 316plus\"){\n return metals.filter(metal => metal.OKGrade === OKGrade);\n }\n\n designStressByTemp(calcMetals, temp){\n var gradeMetals = [...calcMetals];\n var sortedMetals = gradeMetals.sort((a,b) => a.Temperature > b.Temperature ? 1 : -1);\n var lowTempIdx;\n var highTempIdx;\n \n for(var idx=0; idx= temp){\n if(metal.Temperature === temp){\n lowTempIdx = idx;\n highTempIdx = idx;\n break;\n }else{\n lowTempIdx = idx > 0 ? idx-1 : 0;\n highTempIdx = idx;\n break;\n }\n }\n }\n\n var designStress;\n var designDiff;\n var designPerDeg;\n\n if(highTempIdx === lowTempIdx){\n designStress = sortedMetals[highTempIdx].DesignStress;\n } else {\n designDiff = sortedMetals[highTempIdx].DesignStress - sortedMetals[lowTempIdx].DesignStress;\n designPerDeg = designDiff / (sortedMetals[highTempIdx].Temperature - sortedMetals[lowTempIdx].Temperature);\n \n designStress = sortedMetals[lowTempIdx].DesignStress + designPerDeg * (temp - sortedMetals[lowTempIdx].Temperature);\n }\n\n return designStress;\n }\n\n metalTypeByGrade(metals, OKGrade) {\n return metals.filter(metal=>metal.OKGrade === OKGrade)[0].Micro;\n }\n\n minThickness(calc, tankDiameter, steelType) {\n var thickness = 0;\n\n switch (calc) {\n case 2:\n if (steelType !== \"Carbon steel\") {\n if ((tankDiameter > 0) && (tankDiameter < 4)) {\n thickness = 2;\n } else if ((tankDiameter >= 4) && (tankDiameter < 10)) {\n thickness = 3;\n } else if ((tankDiameter >= 10) && (tankDiameter < 15)) {\n thickness = 4;\n } else if ((tankDiameter >= 15) && (tankDiameter < 30)) {\n thickness = 5;\n } else if ((tankDiameter >= 30)) {\n thickness = 6;\n }\n } else {\n if ((tankDiameter > 0) && (tankDiameter < 15)) {\n thickness = 5;\n } else if ((tankDiameter >= 15) && (tankDiameter < 30)) {\n thickness = 6;\n } else if ((tankDiameter >= 30)) {\n thickness = 8;\n }\n }\n break;\n case 3:\n if ((tankDiameter > 0) && (tankDiameter < 50)) {\n thickness = 0.1875;\n } else if ((tankDiameter >= 50) && (tankDiameter < 120)) {\n thickness = 0.25;\n } else if ((tankDiameter >= 120) && (tankDiameter < 200)) {\n thickness = 0.3125;\n } else if (tankDiameter >= 200) {\n thickness = 0.375;\n }\n break;\n default:\n if ((tankDiameter > 0) && (tankDiameter < 15)) {\n thickness = 5;\n } else if ((tankDiameter >= 15) && (tankDiameter < 36)) {\n thickness = 6;\n } else if ((tankDiameter >= 36) && (tankDiameter < 60)) {\n thickness = 8;\n } else if (tankDiameter >= 60) {\n thickness = 10;\n }\n break;\n }\n\n return thickness;\n }\n\n calculateThickness(i, calc, diam, actHeight, plateWidth, dens, designStress, jointF, steelType, corrAllow) {\n var minTh = 0;\n\n if (calc === 1) {\n /* Original */\n minTh = (((4.9 * diam) * (actHeight - 0.3) * dens) / (designStress * jointF)) + corrAllow;\n\n /* new 0.1.2022 */\n //minTh = (4.9 * ( diam * dens * ((actHeight - (jointF * (i * plateWidth))) - 0.3)) / designStress) + corrAllow;\n //minTh = (4.9 * ( diam * dens * ((actHeight - (jointF * plateWidth)) - 0.3)) / designStress) + corrAllow;\n } else if (calc === 2) {\n /* Original */\n minTh = (diam / (20 * designStress)) * (98 * dens * (actHeight - 0.3)) + corrAllow;\n /* new 0.1.2022 */\n // minTh = (diam / (20 * designStress)) * (98 * dens * (actHeight - (i * plateWidth) - 0.3)) + corrAllow;\n\n\n } else if (calc === 3) {\n /* Original */\n minTh = (((2.6 * diam) * (actHeight - 1) * dens) / ((designStress * 1000) * jointF)) + corrAllow;\n \n // minTh = (((2.6 * diam) * (actHeight - (jointF * (i * plateWidth)) - 1) * dens) / (( designStress * 1000 ))) + corrAllow;\n }\n \n //var stdMinThickness = this.minThickness(calc, diam, steelType);\n /*\n // if (minTh > stdMinThickness + corrAllow) {\n if (minTh > stdMinThickness) {\n if (calc !== 3) {\n return minTh;\n } else {\n return minTh;\n }\n } else {\n // return stdMinThickness + corrAllow;\n return stdMinThickness;\n }\n */\n\n return minTh;\n }\n\n calculateMinThickness(calc, diam, steelType, thickness){\n\n /* API 650 Metric Units */\n var minThick = 0;\n\n if(calc == 1){\n minThick = 10;\n\n if(diam < 15){\n minThick = 5;\n }else if(diam < 36){\n minThick = 6;\n }else if(diam < 60){\n minThick = 8;\n }\n \n /* EN 14015 Metric Units */\n }else if(calc == 2){\n if(steelType == \"Carbon\"){\n minThick = 12;\n\n if(diam < 15){\n minThick = 5;\n }else if(diam < 30){\n minThick = 6;\n }else if(diam < 60){\n minThick = 8;\n }else if(diam < 90){\n minThick = 10;\n }\n }else{\n minThick = 6;\n\n if(diam < 4){\n minThick = 2;\n }else if(diam < 10){\n minThick = 3;\n }else if(diam < 15){\n minThick = 4;\n }else if(diam < 30){\n minThick = 5;\n }\n }\n /* API 650 Customary Units */\n }else{\n minThick = 3/8;\n\n if(diam < 50){\n minThick = 3/16;\n }else if(diam < 120){\n minThick = 1/4;\n }else if(diam < 200){\n minThick = 5/16;\n }\n }\n\n if(thickness < minThick) thickness = minThick;\n\n return thickness;\n }\n\n tankSectionsCalc(calc, designStress, height, diam, dens, jointF, plateWidth, steelType, corrAllow){\n var actHeight = height;\n var result = [];\n\n var i = 0;\n while (actHeight > 0) {\n var section = {thickness:0, width:0};\n \n section.thickness = this.calculateThickness(i, calc, diam, actHeight, plateWidth, dens, designStress, jointF, steelType, corrAllow);\n \n /** check minimum thickness by diameter */\n section.thickness = this.calculateMinThickness(calc, diam, steelType, section.thickness);\n\n if (calc !== 3) {\n if (actHeight < plateWidth / 1000) {\n section.width = actHeight * 1000;\n } else {\n section.width = plateWidth;\n }\n\n result.push(section);\n actHeight -= plateWidth / 1000;\n } else {\n if (actHeight < plateWidth) {\n section.width = actHeight;\n } else {\n section.width = plateWidth;\n }\n\n result.push(section);\n actHeight -= plateWidth;\n }\n\n i++;\n }\n\n return result;\n }\n\n ConvToMM(value, uom) {\n var ret = 0;\n\n switch (uom) {\n case \"ft\":\n ret = value * 304.8;\n break;\n case \"inch\":\n ret = value * 25.4;\n break;\n default:\n ret = value;\n break;\n }\n\n return ret;\n }\n\n ConvToM(value, fromUom) {\n var ret = 0;\n\n switch (fromUom) {\n case \"ft\":\n ret = (value * 304.8) / 1000;\n break;\n case \"inch\":\n ret = (value * 25.4) / 1000;\n break;\n default:\n ret = value / 1000;\n break;\n }\n\n return ret;\n }\n\n calcMtrlConsumption(calc, sections, steelDensity, diam) {\n var weight = 0;\n \n for (var i = 0; i < sections.length; i++) {\n var thickness = sections[i].thickness;\n var width = sections[i].width;\n var diameter = diam;\n \n if (calc === 3) {\n thickness = this.ConvToMM(thickness, \"inch\");\n width = this.ConvToMM(width, \"ft\");\n diameter = this.ConvToM(diameter, \"ft\");\n }\n \n var sectionVolume = (thickness / 100) * (width / 100) * (Math.PI * (diameter * 10));\n var sectionWeight = (steelDensity * sectionVolume);\n \n weight += sectionWeight;\n }\n \n return weight;\n }\n}\n\nexport default Calculate;","import React, { useState, useEffect, useRef } from 'react';\n\nimport Calculate from '../assets/js/calculate';\n\nimport { styled } from '@mui/material/styles';\n\nimport { Grid, Paper, MenuItem, FormControl, TextField, Select, Button, Typography, FormHelperText, Fade } from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectCalc, changeCalc } from '../redux/calcSlice';\n\nimport shortFields from \"../assets/json/shortFields.json\";\n\nimport { useFormik } from 'formik';\n\nimport units from \"../assets/json/units.json\";\nimport metals1 from \"../assets/json/metals-1.json\";\nimport metals2 from \"../assets/json/metals-2.json\";\nimport metals3 from \"../assets/json/metals-3.json\";\n\nconst metals = metals1.concat(metals2, metals3);\n\n\n/* Filter API 650 Metric Unit grades */\n\nconst CalcStd1 = metals.filter(item => item['CalcStd'] === 1);\n\nconst CalcSTd1_Austenitic = CalcStd1.filter(item => item['Micro'] === 'Austenitic');\nconst CalcSTd1_Austenitic_OKGrade = Object.assign({}, ...new Map(CalcSTd1_Austenitic.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd1_Austenitic.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\nconst CalcSTd1_Duplex = CalcStd1.filter(item => item['Micro'] === 'Duplex');\nconst CalcSTd1_Duplex_OKGrade = Object.assign({}, ...new Map(CalcSTd1_Duplex.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd1_Duplex.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\nconst CalcSTd1_Carbon = CalcStd1.filter(item => item['Micro'] === 'Carbon');\nconst CalcSTd1_Carbon_OKGrade = Object.assign({}, ...new Map(CalcSTd1_Carbon.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd1_Carbon.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\n\n/* EN 14015 Metric Unit grades */\n\nconst CalcSTd2 = metals.filter(item => item['CalcStd'] === 2);\n\nconst CalcSTd2_Austenitic = CalcSTd2.filter(item => item['Micro'] === 'Austenitic');\nconst CalcSTd2_Austenitic_OKGrade = Object.assign({}, ...new Map(CalcSTd2_Austenitic.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd2_Austenitic.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\nconst CalcSTd2_Duplex = CalcSTd2.filter(item => item['Micro'] === 'Duplex');\nconst CalcSTd2_Duplex_OKGrade = Object.assign({}, ...new Map(CalcSTd2_Duplex.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd2_Duplex.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\nconst CalcSTd2_Carbon = CalcSTd2.filter(item => item['Micro'] === 'Carbon');\nconst CalcSTd2_Carbon_OKGrade = Object.assign({}, ...new Map(CalcSTd2_Carbon.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd2_Carbon.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\n\n/* Filter API 650 Customary Unit grades */\n\nconst CalcSTd3 = metals.filter(item => item['CalcStd'] === 3);\n\nconst CalcSTd3_Austenitic = CalcSTd3.filter(item => item['Micro'] === 'Austenitic');\nconst CalcSTd3_Austenitic_OKGrade = Object.assign({}, ...new Map(CalcSTd3_Austenitic.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd3_Austenitic.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\nconst CalcSTd3_Duplex = CalcSTd3.filter(item => item['Micro'] === 'Duplex');\nconst CalcSTd3_Duplex_OKGrade = Object.assign({}, ...new Map(CalcSTd3_Duplex.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd3_Duplex.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\nconst CalcSTd3_Carbon = CalcSTd3.filter(item => item['Micro'] === 'Carbon');\nconst CalcSTd3_Carbon_OKGrade = Object.assign({}, ...new Map(CalcSTd3_Carbon.map(item => \n [item['OKGrade'], { [item['OKGrade'] ]: CalcSTd3_Carbon.filter(itm => itm['OKGrade'] === item['OKGrade']) }]\n)).values());\n\n\n/* Filter order of Austenitic metals */\n\nconst sortedMetals = {\n 1: {\n \"Austenitic\": { \n \"Core 304L/4307\":[...CalcSTd1_Austenitic_OKGrade[\"Core 304L/4307\"]],\n \"Supra 316L/4404\":[...CalcSTd1_Austenitic_OKGrade[\"Supra 316L/4404\"]],\n \"Supra 316plus\":[...CalcSTd1_Austenitic_OKGrade[\"Supra 316plus\"]],\n \"Ultra 317L\":[...CalcSTd1_Austenitic_OKGrade[\"Ultra 317L\"]],\n \"Ultra 904L\":[...CalcSTd1_Austenitic_OKGrade[\"Ultra 904L\"]],\n \"Ultra 254 SMO\":[...CalcSTd1_Austenitic_OKGrade[\"Ultra 254 SMO\"]]\n },\n\n \"Duplex\": { ...CalcSTd1_Duplex_OKGrade },\n \"Carbon\": { ...CalcSTd1_Carbon_OKGrade }\n },\n 2: {\n \"Austenitic\": {\n \"Core 304L/4307\":[...CalcSTd2_Austenitic_OKGrade[\"Core 304L/4307\"]],\n \"Supra 316L/4404\":[...CalcSTd2_Austenitic_OKGrade[\"Supra 316L/4404\"]],\n \"Supra 316plus\":[...CalcSTd2_Austenitic_OKGrade[\"Supra 316plus\"]],\n \"Ultra 317L\":[...CalcSTd2_Austenitic_OKGrade[\"Ultra 317L\"]],\n \"Ultra 904L\":[...CalcSTd2_Austenitic_OKGrade[\"Ultra 904L\"]],\n \"Ultra 254 SMO\":[...CalcSTd2_Austenitic_OKGrade[\"Ultra 254 SMO\"]]\n },\n\n \"Duplex\": { ...CalcSTd2_Duplex_OKGrade },\n \"Carbon\": { ...CalcSTd2_Carbon_OKGrade }\n },\n 3: {\n \"Austenitic\": {\n \"Core 304L/4307\":[...CalcSTd3_Austenitic_OKGrade[\"Core 304L/4307\"]],\n \"Supra 316L/4404\":[...CalcSTd3_Austenitic_OKGrade[\"Supra 316L/4404\"]],\n \"Supra 316plus\":[...CalcSTd3_Austenitic_OKGrade[\"Supra 316plus\"]],\n \"Ultra 317L\":[...CalcSTd3_Austenitic_OKGrade[\"Ultra 317L\"]],\n \"Ultra 904L\":[...CalcSTd3_Austenitic_OKGrade[\"Ultra 904L\"]],\n \"Ultra 254 SMO\":[...CalcSTd3_Austenitic_OKGrade[\"Ultra 254 SMO\"]]\n },\n \"Duplex\": { ...CalcSTd3_Duplex_OKGrade },\n \"Carbon\": { ...CalcSTd3_Carbon_OKGrade }\n }\n};\n\nconst Item = styled(Paper)(({ theme }) => ({\n padding: theme.spacing(4),\n height: '100%'\n}));\n\nconst DisabledMenuItem = styled(MenuItem)(({ theme }) => ({\n color: theme.palette.background.default,\n background: theme.palette.primary.dark\n}));\n\nconst DisabledMenuItemHighlighted = styled(MenuItem)(({ theme }) => ({\n color: theme.palette.background.default,\n background: theme.palette.primary.main,\n opacity: '1 !important'\n}));\n\nconst Calculator = (props) => {\n const firstRender = useRef(true);\n\n useEffect(() => {\n firstRender.current = false;\n }, [])\n\n\n const subBtn = useRef(null);\n const [ triggerSubmit, setTriggerSubmit ] = useState(false);\n\n useEffect(() => {\n if(triggerSubmit === true) {\n setTriggerSubmit(false);\n subBtn.current?.click();\n }\n }, [triggerSubmit])\n\n\n const calc = useSelector(selectCalc);\n\n useEffect(() => {\n if(calc.submitted) {\n setTimeout(()=>{\n document.getElementById(\"result-scroll\").scrollIntoView({ behavior: 'smooth', block: 'start' });\n }, 1000);\n }\n }, [calc.submitted])\n\n \n const calculate = new Calculate();\n\n const dispatch = useDispatch();\n\n\n const getQueryString = () => {\n if(!window.parent.location.search){ return {}};\n\n const queryStringKeyValue = window.parent.location.search.split('?')[1].split('&');\n const qsJsonObj = {};\n \n const longFields = Object.assign({}, ...Object.entries(shortFields).map(([a,b]) => ({ [b]: a })));\n\n if (queryStringKeyValue === '') { return {}};\n\n for (let i = 0; i < queryStringKeyValue.length; i++) {\n let value = queryStringKeyValue[i].split('=')[1];\n let key = queryStringKeyValue[i].split('=')[0];\n \n if(longFields.hasOwnProperty(key)){\n qsJsonObj[longFields[key]] = !isNaN(value) ? parseInt(value) : decodeURI(value);\n }\n }\n\n return {...qsJsonObj};\n }\n \n const populateInitalValues = () => {\n if(firstRender.current === true){\n let queryValues = getQueryString();\n\n if(queryValues.unit && queryValues.steelGrade){\n queryValues.steelGrade = metals.filter((metal, idx) => {\n return (metal.CalcStd === queryValues.unit && metal.OKGradeShort === queryValues.steelGrade );\n });\n \n if(queryValues.unit && queryValues.steelGrade2) {\n queryValues.steelGrade2 = metals.filter((metal, idx) => {\n return (metal.CalcStd === queryValues.unit && metal.OKGradeShort === queryValues.steelGrade2 );\n });\n }\n\n if(Array.isArray(queryValues.steelGrade2) && queryValues.steelGrade2.length === 0){\n delete(queryValues.steelGrade2);\n }\n\n dispatch(changeCalc( { ...calc, ...queryValues } ));\n \n if(triggerSubmit === false) {\n setTimeout(()=>{\n setTriggerSubmit(true);\n }, 500);\n }\n }\n }\n\n return calc;\n }\n\n const validate = values => {\n const errors = {};\n \n if (!values.temperature && values.temperature !== 0) {\n errors.temperature = 'Required';\n } else if (values.temperature < units[calc.unit][\"temperature\"][\"min\"]) {\n errors.temperature = `Must be greater than ${units[calc.unit][\"temperature\"][\"min\"]} ${units[calc.unit][\"temperature\"][\"sign\"]}`;\n } else if (values.temperature > units[calc.unit][\"temperature\"][\"max\"]) {\n errors.temperature = `Must be less than ${units[calc.unit][\"temperature\"][\"max\"]} ${units[calc.unit][\"temperature\"][\"sign\"]}`;\n }\n\n if (!values.height && values.height !== 0) {\n errors.height = 'Required';\n } else if (values.height < units[calc.unit][\"height\"][\"min\"]) {\n errors.height = `Must be greater than ${units[calc.unit][\"height\"][\"min\"]} ${units[calc.unit][\"height\"][\"sign\"]}`;\n } else if (values.height > units[calc.unit][\"height\"][\"max\"]) {\n errors.height = `Must be less than ${units[calc.unit][\"height\"][\"max\"]} ${units[calc.unit][\"height\"][\"sign\"]}`;\n }\n \n if (!values.diameter && values.diameter !== 0) {\n errors.diameter = 'Required';\n } else if (values.diameter < units[calc.unit][\"diameter\"][\"min\"]) {\n errors.diameter = `Must be greater than ${units[calc.unit][\"diameter\"][\"min\"]} ${units[calc.unit][\"diameter\"][\"sign\"]}`;\n } else if (values.diameter > units[calc.unit][\"diameter\"][\"max\"]) {\n errors.diameter = `Must be less than ${units[calc.unit][\"diameter\"][\"max\"]} ${units[calc.unit][\"diameter\"][\"sign\"]}`;\n }\n\n if (!values.density && values.density !== 0) {\n errors.density = 'Required';\n } else if (values.density < units[calc.unit][\"density\"][\"min\"]) {\n errors.density = `Must be greater than ${units[calc.unit][\"density\"][\"min\"]}`;\n } else if (values.density > units[calc.unit][\"density\"][\"max\"]) {\n errors.density = `Must be less than ${units[calc.unit][\"density\"][\"max\"]}`;\n }\n\n if (!Array.isArray(values.steelGrade)) {\n errors.steelGrade = 'Required';\n }\n \n if (!values.plateWidth && values.plateWidth !== 0) {\n errors.plateWidth = 'Required';\n } else if (values.plateWidth < units[calc.unit][\"plateWidth\"][\"min\"]) {\n errors.plateWidth = `Must be greater than ${units[calc.unit][\"plateWidth\"][\"min\"]}`;\n } else if (values.plateWidth > units[calc.unit][\"plateWidth\"][\"max\"]) {\n errors.plateWidth = `Must be less than ${units[calc.unit][\"plateWidth\"][\"max\"]}`;\n }\n \n if(Array.isArray(values.steelGrade2)) {\n if (!values.plateWidth2 && values.plateWidth2 !== 0) {\n errors.plateWidth2 = 'Required';\n } else if (values.plateWidth2 < units[calc.unit][\"plateWidth\"][\"min\"]) {\n errors.plateWidth2 = `Must be greater than ${units[calc.unit][\"plateWidth\"][\"min\"]}`;\n } else if (values.plateWidth2 > units[calc.unit][\"plateWidth\"][\"max\"]) {\n errors.plateWidth2 = `Must be less than ${units[calc.unit][\"plateWidth\"][\"max\"]}`;\n }\n\n if (!values.corrosionAllowance && values.corrosionAllowance !== 0) {\n errors.corrosionAllowance = 'Required';\n } else if (values.corrosionAllowance < units[calc.unit][\"corrosionAllowance\"][\"min\"]) {\n errors.corrosionAllowance = `Must be greater than ${units[calc.unit][\"corrosionAllowance\"][\"min\"]}`;\n } else if (values.corrosionAllowance > units[calc.unit][\"corrosionAllowance\"][\"max\"]) {\n errors.corrosionAllowance = `Must be less than ${units[calc.unit][\"corrosionAllowance\"][\"max\"]}`;\n }\n }\n \n return errors;\n };\n \n\n const formik = useFormik({\n initialValues: populateInitalValues(),\n validate,\n enableReinitialize: true,\n \n onSubmit: async (values) => {\n const designStress = Math.round(calculate.designStressByTemp(values.steelGrade, values.temperature));\n \n const res1 = calculate.tankSectionsCalc(calc.unit, designStress, values.height, values.diameter, values.density, values.jointFactor, values.plateWidth, values.steelGrade[0]['Micro'], 0)\n \n const consumption1 = calculate.calcMtrlConsumption(calc.unit, res1, values.steelGrade[0].SteelDensity, values.diameter / 1000);\n \n const designStress2 = !Array.isArray(values.steelGrade2) ? null : Math.round(calculate.designStressByTemp(values.steelGrade2, values.temperature));\n const res2 = !Array.isArray(values.steelGrade2) ? [] : calculate.tankSectionsCalc(calc.unit, designStress2, values.height, values.diameter, values.density, values.jointFactor2, values.plateWidth2, values.steelGrade2[0]['Micro'], values.corrosionAllowance)\n const consumption2 = !Array.isArray(values.steelGrade2) ? null : calculate.calcMtrlConsumption(calc.unit, res2, values.steelGrade2[0].SteelDensity, values.diameter / 1000);\n \n dispatch(changeCalc( { ...calc, ...values, res1:[...res1], consumption1, res2:[...res2], consumption2, submitting: true, submitted: false } ));\n dispatch(changeCalc( { ...calc, ...values, res1:[...res1], consumption1, res2:[...res2], consumption2, submitting: false, submitted: true } ));\n },\n });\n\n return (\n \n );\n}\n\nexport default Calculator;","import React from 'react';\n\nimport countries from \"../assets/json/countries.json\";\n\nimport { Grid, MenuItem, FormControl, FormControlLabel, TextField, Select, Checkbox, Typography, Dialog, DialogContent, DialogContentText, DialogTitle, IconButton, FormHelperText } from '@mui/material';\nimport { LoadingButton } from '@mui/lab';\nimport CloseIcon from '@mui/icons-material/Close';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\n\nimport { useSelector } from 'react-redux';\nimport { selectCalc } from '../redux/calcSlice';\n\nimport { useFormik } from 'formik';\n\nimport formInitValues from '../assets/json/formInitValues.json';\nimport shortFields from \"../assets/json/shortFields.json\";\n\nimport ReactHtmlParser from 'react-html-parser';\n\nimport axios from \"axios\";\n\nconst ResultsFormDialog = (props) => {\n const [submitted, setSubmitted] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const calc = useSelector(selectCalc);\n\n const validate = values => {\n const errors = {};\n\n for(const key in values) {\n if(key.includes(\"UTM\")) {\n continue;\n }\n\n if(!values[key]){\n errors[key] = 'Required'\n }else{\n if (key.toLowerCase().includes('email')) {\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values[key])) {\n errors[key] = 'Enter a valid email';\n }\n }\n }\n }\n\n return errors;\n };\n\n const urlString = window.parent.location.search;\n const urlParams = new URLSearchParams(urlString);\n\n const formik = useFormik({\n initialValues: {\n emailAddress: '',\n company: '',\n country: '',\n marketingpermission: [],\n marketingText: 'Outokumpu can keep me up to date with timely and relevant information. Outokumpu is committed to keeping personal data confidential and secure, and to processing personal data only in accordance with applicable privacy and data protection laws. Please read our Privacy notice. ',\n UTMsource: urlParams.get('utm_source') == null ? '' : urlParams.get('utm_source'),\n UTMmedium: urlParams.get('utm_medium') == null ? '' : urlParams.get('utm_medium'),\n UTMcampaign: urlParams.get('utm_campaign') == null ? '' : urlParams.get('utm_campaign')\n },\n validate,\n onSubmit: async (values) => {\n setLoading(true);\n \n const calcFields = {};\n\n Object.keys(calc).map(key => {\n if (key in shortFields) {\n calcFields[shortFields[key]] = Array.isArray(calc[key]) ? calc[key][0]['OKGradeShort'] : calc[key];\n }\n });\n \n const calcString = new URLSearchParams({...calcFields}).toString();\n\n const now = new Date().toLocaleString();\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n \n const apiResponse = await axios.post(\"https://en5o2z7yer3vzbj.m.pipedream.net\", { ...values, marketingpermission: (values.marketingpermission.length > 0 ? 'on' : ''), calcString, type: 'storage tank calculation', dateTime: `${now} ${timezone}` });\n\n setLoading(false);\n setSubmitted(true);\n\n /* eslint-disable */\n if(parent && parent.dataLayer) {\n parent.dataLayer.push({\n 'event': 'StorageTankResultsSubmitBtn'\n });\n }\n /* eslint-enable */\n },\n });\n \n return (\n \n \n {\n props.handleClose(e);\n setTimeout(() => {\n setSubmitted(false);\n }, 500);\n }}\n style={{ float:'right', margin:'-16px -24px'}} >\n \n \n {submitted === true &&\n Thank you for your interest in Outokumpu }\n {submitted === false &&\n Send the results to your emails }\n \n\n {submitted === true &&\n \n \n Please check your email for a link to your calculations.\n \n }\n\n {submitted === false &&\n \n \n Please fill in your details. We will send you an email with a link to your calculations.\n \n\n \n }\n \n );\n}\n\nexport default ResultsFormDialog;","export default __webpack_public_path__ + \"static/media/tank.2a7d57e9.png\";","import React from 'react';\nimport { styled } from '@mui/material/styles';\n\nimport { Grid, Paper, Button, Typography, Grow } from '@mui/material';\n\nimport { useSelector } from 'react-redux';\nimport { selectCalc } from '../redux/calcSlice';\n\nimport ResultsFormDialog from './ResultsFormDialog';\n\nimport units from \"../assets/json/units.json\";\nimport tank from '../assets/images/tank.png'\n\nconst Item = styled(Paper)(({ theme }) => ({\n padding: theme.spacing(4),\n backgroundColor: 'transparent'\n}));\n\nconst GradeLabel = styled(Paper)(({ theme }) => ({\n padding: `${theme.spacing(5)} ${theme.spacing(0)} ${theme.spacing(1.6)} ${theme.spacing(0)}`,\n backgroundColor: 'transparent'\n}));\n\nconst BarHolder = styled(Paper)(({ theme }) => ({\n flexGrow : '1',\n backgroundColor: 'transparent'\n}));\n\nconst Bar = styled(Paper)(({ theme }) => ({\n borderRadius: 0,\n}));\n\nconst BarInner = styled(Paper)(({ theme }) => ({\n fontSize: '12px',\n padding:'4% 5%',\n backgroundColor: theme.palette.primary.main,\n color: '#fff',\n borderRadius: 0,\n height: 'calc(100% - 2px)'\n}));\n\nconst ResultContainer = styled(Grid)(({ theme }) => ({\n background:'#F0F1F2',\n marginTop:theme.spacing(3),\n}));\n\nconst Calculator = () => {\n const [open, setOpen] = React.useState(false);\n const calc = useSelector(selectCalc);\n\n const consumption1 = calc['consumption1']\n const consumption2 = calc['consumption2']\n\n const diff = 100 * Math.abs( ( consumption1 - consumption2 ) / ( (consumption1+consumption2)/2 ) );\n\n const thicknessUnits = units[calc.unit][\"thickness\"][\"sign\"]\n \n return (\n \n \n - \n
Calculation results \n \n Material consumption {calc['steelGrade'][0]['OKGrade']}: \n {calc['consumption1'].toFixed(1)} metric tons \n \n {Array.isArray(calc['steelGrade2']) &&\n \n Material consumption {calc['steelGrade2'][0]['OKGrade']}: \n {calc['consumption2'].toFixed(1)} metric tons \n }\n \n\n {consumption1 && consumption2 &&\n \n \n {diff.toFixed(1)}% saving\n \n\n \n in material consumption using \n {consumption1 > consumption2 ? calc['steelGrade2'][0]['OKGrade'] : calc['steelGrade'][0]['OKGrade']} compared to{consumption1 > consumption2 ? calc['steelGrade'][0]['OKGrade'] : calc['steelGrade2'][0]['OKGrade']} \n \n }\n\n {\n setOpen(true);\n\n /* eslint-disable */\n if(parent && parent.dataLayer) {\n parent.dataLayer.push({\n 'event': 'StorageTankClickSendResultsBtn'\n });\n }\n /* eslint-enable */\n }}\n \n variant=\"contained\">\n Send the results to your e-mail\n \n \n \n \n \n \n {Array.isArray(calc['steelGrade']) &&\n \n {calc['steelGrade'][0]['OKGrade']} \n {calc.submitting === true ? false : true &&\n \n {([...calc['res1']].reverse()).map((bar, idx) => {\n return(\n \n {thicknessUnits === 'mm' ? Math.ceil(bar[\"thickness\"]) : bar[\"thickness\"].toFixed(2)} {thicknessUnits} \n \n )}\n )}\n }\n }\n\n \n \n \n \n {Array.isArray(calc['steelGrade2']) &&\n \n {calc['steelGrade2'][0]['OKGrade']} \n {calc.submitting === true ? false : true &&\n \n {([...calc['res2']].reverse()).map((bar, idx) => {\n return(\n \n {thicknessUnits === 'mm' ? Math.ceil(bar[\"thickness\"]) : bar[\"thickness\"].toFixed(2)} {thicknessUnits} \n \n )}\n )}\n } \n }\n \n \n - \n
\n The picture above illustrates the number of plates and thickness by plate needed to build a tank with your specifications.\n \n \n \n \n \n setOpen(false)} />\n \n );\n}\n\nexport default Calculator;\n","import React, { useRef, useEffect } from 'react';\n\nimport countries from \"../assets/json/countries.json\";\n\nimport { Grid, MenuItem, FormControl, FormControlLabel, TextField, Select, Checkbox, Typography, Dialog, DialogContent, DialogContentText, DialogTitle, IconButton, FormHelperText } from '@mui/material';\nimport { LoadingButton } from '@mui/lab';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\n\nimport { useSelector } from 'react-redux';\nimport { selectCalc } from '../redux/calcSlice';\n\nimport { useFormik } from 'formik';\n\nimport formInitValues from '../assets/json/formInitValues.json';\nimport shortFields from '../assets/json/shortFields.json';\n\nimport ReactHtmlParser from 'react-html-parser';\n\n\nimport axios from 'axios';\nimport { AltRoute } from '@mui/icons-material';\n\nconst ContactForm = (props) => {\n const dialogueRef = useRef();\n const [submitted, setSubmitted] = React.useState(false);\n const [loading, setLoading] = React.useState(false);\n const calc = useSelector(selectCalc);\n\n /*\n useEffect(() => {\n if(props.open){\n setTimeout(function(){\n document.getElementById(\"contact-form-dialogue\").scrollIntoView({ behavior: 'smooth', block: 'start' });\n }, 5000);\n }\n }, [props.open]);\n */\n\n const validate = values => {\n const errors = {};\n \n for(const key in values) {\n if(key.includes(\"UTM\")) {\n continue;\n }\n\n if(!values[key] && key !== \"jobTitle\" && key !== \"busPhone\"){\n errors[key] = 'Required'\n }else{\n if (key.toLowerCase().includes('email')) {\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values[key])) {\n errors[key] = 'Enter a valid email';\n }\n }\n }\n }\n\n return errors;\n };\n\n\n const urlString = window.parent.location.search;\n const urlParams = new URLSearchParams(urlString);\n\n const formik = useFormik({\n initialValues: {\n firstName: '',\n lastName: '',\n emailAddress: '',\n company: '',\n busPhone: '',\n country: '',\n jobTitle: '',\n marketingpermission: [],\n marketingText: 'Outokumpu can keep me up to date with timely and relevant information. Outokumpu is committed to keeping personal data confidential and secure, and to processing personal data only in accordance with applicable privacy and data protection laws. Please read our Privacy notice .',\n UTMsource: urlParams.get('utm_source') == null ? '' : urlParams.get('utm_source'),\n UTMmedium: urlParams.get('utm_medium') == null ? '' : urlParams.get('utm_medium'),\n UTMcampaign: urlParams.get('utm_campaign') == null ? '' : urlParams.get('utm_campaign')\n },\n validate,\n onSubmit: async (values) => {\n setLoading(true);\n\n const calcFields = {};\n \n Object.keys(calc).map(key => {\n if (key in shortFields) {\n calcFields[shortFields[key]] = Array.isArray(calc[key]) ? calc[key][0]['OKGradeShort'] : calc[key];\n }\n });\n \n const calcString = new URLSearchParams({...calcFields}).toString();\n\n const now = new Date().toLocaleString();\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n const apiResponse = await axios.post(\"https://en5o2z7yer3vzbj.m.pipedream.net\", { ...values, marketingpermission: (values.marketingpermission.length > 0 ? 'on' : ''), calcString, type: 'storage tank contact', dateTime: `${now} ${timezone}`});\n \n setLoading(false);\n setSubmitted(true);\n formik.resetForm();\n \n /* eslint-disable */\n if(parent && parent.dataLayer) {\n parent.dataLayer.push({\n 'event': 'StorageTankClickContactUsSubmitBtn'\n });\n }\n /* eslint-enable */\n },\n });\n\n return (\n {\n props.handleClose(e);\n setTimeout(() => {\n setSubmitted(false);\n }, 500);\n }}>\n \n \n {\n props.handleClose(e);\n setTimeout(() => {\n setSubmitted(false);\n }, 500);\n }}\n style={{ float:'right', margin:'-16px -24px'}} >\n \n \n {submitted &&\n Thank you for your interest in Outokumpu }\n {!submitted &&\n Discuss with an expert }\n \n\n {submitted &&\n \n \n A reperesentative will contact you shortly.\n \n }\n\n {!submitted &&\n \n \n Please fill in your details, and will contact you shortly.\n \n\n \n }\n \n );\n}\n\nexport default ContactForm;","export default __webpack_public_path__ + \"static/media/tank-scene.86d636bf.jpg\";","import React from 'react';\nimport { styled } from '@mui/material/styles';\nimport { Grid, Paper, Button, Typography, Fade } from '@mui/material';\nimport ContactFormDialog from './ContactFormDialog';\n\nimport tankScene from '../assets/images/tank-scene.jpg'\n\nconst ContactContainer = styled(Grid)(({ theme }) => ({\n background:'#003057',\n marginTop:theme.spacing(3),\n}));\n\nconst Item = styled(Paper)(({ theme }) => ({\n padding: theme.spacing(4),\n backgroundColor: 'transparent',\n textAlign: 'left !important',\n color: '#FFF'\n}));\n\nconst ContactUs = () => {\n const [open, setOpen] = React.useState(false);\n\n return (\n \n \n \n - \n
\n Would you like to compare full life cycle costs with different materials?\n \n \n Get a full scale view to your tank project with our advanced Tankbuilder calculation tool. You can compare full life cycle costs with up to four different steel grade options that you specify, covering everything:\n \n \n \n Material costs \n Welding \n Assembly \n Surface treatment \n \n\n \n Would you like to discuss with an expert to learn more?\n \n {\n setOpen(true);\n \n /* eslint-disable */\n if(parent && parent.dataLayer) {\n parent.dataLayer.push({\n 'event': 'StorageTankClickContactUsBtn'\n });\n }\n /* eslint-enable */\n }}\n\n variant=\"contained\">\n Yes, contact me\n \n \n \n\n \n \n setOpen(false)} /> \n \n \n );\n}\n\nexport default ContactUs;\n","import React from 'react';\nimport { createTheme, ThemeProvider } from \"@mui/material/styles\";\nimport { CssBaseline, Container, Typography } from '@mui/material';\nimport { useSelector } from 'react-redux';\nimport { selectCalc } from './redux/calcSlice';\nimport UnitSelector from './components/UnitSelector';\nimport Calculator from './components/Calculator';\nimport Results from './components/Results';\nimport ContactUs from './components/ContactUs';\n\nimport './assets/css/App.css';\n\nconst theme = createTheme({\n breakpoints: {\n values: {\n xs: 0,\n sm: 450,\n md: 600,\n lg: 900,\n xl: 1190\n }\n },\n typography: {\n fontFamily: 'TeeFranklinForeverMedium',\n p: {\n fontSize: '22px',\n fontFamily: 'TeeFranklinForeverBook',\n color: '#003057',\n lineHeight: '26px',\n marginBottom: '32px'\n },\n h1: {\n fontFamily: 'TeeFranklinForeverBook',\n fontSize: '55px',\n letterSpacing: '0px',\n color: '#003057',\n lineHeight: '55px',\n marginBottom: '24px'\n },\n h2: {\n fontFamily: 'TeeFranklinForeverBook',\n fontSize: '35px',\n letterSpacing: '0px',\n textDecoration: 'capitalize',\n color: '#009EE8',\n lineHeight: '55px',\n marginBottom: '24px'\n },\n h3: {\n fontFamily: 'TeeFranklinForeverMedium',\n fontSize: '16px',\n letterSpacing: '0px',\n marginBottom: '0px'\n },\n label: {\n fontFamily: 'TeeFranklinForeverLight',\n fontSize: '16px',\n color: '#003057',\n marginBottom: '8px',\n marginTop: '18px'\n }\n },\n palette: {\n type: 'light',\n primary: {\n main: '#009EE8',\n dark: '#003057',\n contrastText: '#fff'\n },\n secondary: {\n main: '#f50057',\n },\n text: {\n primary: '#003057',\n secondary: '#003057',\n disabled: '#A5A9AB',\n },\n background: {\n default: '#FFF',\n },\n paper: {\n default: '#F2F9FD',\n grey: '#F0F1F2'\n },\n form: {\n label:{\n padding: '2em'\n }\n }\n },\n components: {\n MuiContainer: {\n styleOverrides: {\n root: {\n paddingLeft:'0 !important',\n paddingRight:'0 !important'\n }\n }\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n background: '#F2F9FD',\n boxShadow: 'none',\n borderRadius: 0\n }\n }\n },\n MuiInputBase: {\n styleOverrides: {\n root: {\n marginBottom: '0px',\n background: '#FFF',\n \"&$disabled\": {\n color: 'red',\n border: '2px solid red',\n background: 'red'\n }\n }\n }\n },\n MuiOutlinedInput: {\n styleOverrides: {\n root: {\n fontFamily: 'TeeFranklinForeverLight',\n fontSize: '16px',\n height: '50px',\n borderRadius: '0px',\n }\n }\n },\n MuiButton: {\n styleOverrides: {\n root: {\n fontFamily: 'TeeFranklinForeverMedium',\n fontSize: '16px',\n marginTop:'42px',\n padding:'10px',\n boxShadow: 'none !important',\n textTransform: 'none',\n letterSpacing: '1.92px'\n }\n }\n },\n MuiToggleButtonGroup: {\n styleOverrides: {\n root: {\n borderRadius:0\n }\n }\n },\n MuiToggleButton: {\n styleOverrides: {\n root: {\n background: '#009EE8',\n color: '#FFF',\n '&:hover': {\n backgroundColor: '#003057',\n color: '#FFF'\n },\n '&.Mui-selected': {\n backgroundColor: '#003057',\n color: '#FFF'\n },\n '&.Mui-selected:hover': {\n backgroundColor: '#003057',\n color: '#FFF'\n }\n }\n }\n },\n MuiList: {\n styleOverrides: {\n root: {\n border: '1px solid #003057',\n }\n }\n },\n MuiFormHelperText: {\n styleOverrides: {\n root: {\n margin: '4px 0 0 0',\n color: '#d32f2f'\n }\n }\n },\n MuiDialogTitle: {\n styleOverrides: {\n root: {\n fontSize: '35px',\n lineHeight: '35px',\n fontFamily: 'TeeFranklinForeverBook',\n }\n }\n },\n MuiDialogContentText: {\n styleOverrides: {\n root: {\n fontSize: '16px',\n fontFamily: 'TeeFranklinForeverLight',\n }\n }\n },\n MuiFormControlLabel: {\n styleOverrides: {\n root:{\n alignItems:'start',\n margin:0\n },\n label: {\n fontSize: '16px',\n lineHeight: '21px',\n fontFamily: 'TeeFranklinForeverLight'\n }\n }\n },\n MuiCheckbox: {\n styleOverrides: {\n root:{\n alignItems:'baseline'\n }\n }\n }\n }\n});\n\nconst App = () => {\n const calc = useSelector(selectCalc);\n \n return (\n \n \n \n \n {/* Storage tank calculator */}\n Storage tank shell thickness calculation tool based on the API 650 and EN 14015 standards allows you to estimate material consumption for the cylindrical shell of a tank and to compare how steel grade affects material consumption. This tool can be used for estimation only. We are happy to discuss your requirements in more detail. \n \n \n \n {calc.submitted &&\n }\n \n \n \n \n );\n}\n\nexport default App;\n","import { configureStore } from '@reduxjs/toolkit';\nimport calcSlice from './calcSlice';\n\nexport const store = configureStore({\n reducer: {\n calc: calcSlice,\n },\n});\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport { store } from './redux/store';\nimport { Provider } from 'react-redux';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n// serviceWorker.register();\n"],"sourceRoot":""}