{"version":3,"sources":["Portfolio.utils.ts","AboutMe/AboutMe.lazy.tsx","Experience/Experience.lazy.tsx","Skills/Skills.lazy.tsx","Contact/Contact.lazy.tsx","Projects/Projects.lazy.tsx","ErrorFallback/ErrorFallback.tsx","NotFound/NotFound.lazy.tsx","Portfolio.tsx","App.tsx","reportWebVitals.ts","index.tsx","App.module.scss","Shared/utils.ts"],"names":["logError","error","info","fetch","method","headers","body","JSON","stringify","name","message","callStack","stack","componentCallStack","componentStack","url","window","location","href","then","response","status","catch","e","LazyAboutMe","lazy","fallback","style","padding","width","display","flexFlow","alignItems","Image","flex","margin","active","AboutMe","props","LazyExperience","Experience","LazySkills","Skills","LazyContact","Contact","LazyProjects","Projects","ErrorFallback","resetErrorBoundary","height","justifyContent","textAlign","type","size","onClick","reload","LazyNotFound","NotFound","Sider","Layout","SideNavbarContent","withRouter","selectionKey","path","pathname","startsWith","Fragment","className","theme","mode","selectedKeys","Item","icon","UserOutlined","to","faBook","faChess","ExperimentOutlined","PhoneFilled","App","useState","sidenavCollapsed","setSidenavCollapsed","Date","redrawSkillsTime","setRedrawSkillsTime","clearErrorToggle","setClearErrorToggle","useLocation","updateCollapsed","collapsed","wasCollapsed","onSidebarOptionClick","ref","useRef","useOutsideAlerter","useCallback","id","styles","Collapsed","Container","FallbackComponent","onError","resetKeys","MenuOutlined","shape","MenuButton","exact","redraw","state","from","Portfolio","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","document","getElementById","module","exports","callback","useEffect","hadleClickOutside","event","current","contains","target","addEventListener","removeEventListener","useMediaQuery","query","matches","setMatches","media","matchMedia","listener","ev","deepCopy","obj","parse"],"mappings":"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","file":"static/js/main.ec058d12.chunk.js","sourcesContent":["export function logError(error: Error, info: {componentStack: string}) {\n fetch('/api/logging/log',\n {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json;charset=UTF-8'\n }, \n body: JSON.stringify({ \n name: error.name, \n message: error.message,\n callStack: error.stack,\n componentCallStack: info.componentStack,\n url: window.location.href\n })\n }).then(response => {\n if (response.status !== 200) {\n // todo: retry logic?\n }\n }).catch(e => {\n //todo: retry logic?\n });\n};\n","import { Skeleton } from 'antd';\nimport React, { lazy, Suspense } from 'react';\n\nconst LazyAboutMe = lazy(() => import('./AboutMe'));\n\nconst fallback = (\n
\n
\n \n
\n \n
\n
\n\n
\n
\n
\n
)\n\nconst AboutMe = (props: JSX.IntrinsicAttributes & { children?: React.ReactNode; }) => (\n \n \n \n);\n\nexport default AboutMe;\n","import { Skeleton } from 'antd';\nimport React, { lazy, Suspense } from 'react';\n\nconst LazyExperience = lazy(() => import('./Experience'));\n\nconst fallback = (\n <>\n
\n
\n
\n
\n
\n \n);\n\nconst Experience = (props: JSX.IntrinsicAttributes & { children?: React.ReactNode; }) => (\n \n \n \n);\n\nexport default Experience;\n","import { Skeleton } from 'antd';\nimport React, { lazy, Suspense } from 'react';\nimport { ISkillsProps } from './Skills';\n\nconst LazySkills = lazy(() => import('./Skills'));\n\nconst fallback = (\n <>\n
\n
\n
\n
\n
\n \n);\n\nconst Skills = (props: JSX.IntrinsicAttributes & { children?: React.ReactNode; } & ISkillsProps) => (\n \n \n \n);\n\nexport default Skills;\n","import { Skeleton } from 'antd';\nimport React, { lazy, Suspense } from 'react';\n\nconst LazyContact = lazy(() => import('./Contact'));\n\nconst fallback = (\n <>\n
\n
\n
\n
\n
\n \n);\n\nconst Contact = (props: JSX.IntrinsicAttributes & { children?: React.ReactNode; }) => (\n \n \n \n);\n\nexport default Contact;\n","import React, { lazy, Suspense } from 'react';\n\nconst LazyProjects = lazy(() => import('./Projects'));\n\nconst Projects = (props: JSX.IntrinsicAttributes & { children?: React.ReactNode; }) => (\n \n \n \n);\n\nexport default Projects;\n","import { Button } from 'antd';\nimport React from 'react';\n\nconst ErrorFallback : React.FC = ({error, resetErrorBoundary}: any) => (\n
\n
\n

Something went wrong. Please reload the page.

\n
\n \n
\n
\n
\n )\n\nexport default ErrorFallback;","import React, { lazy, Suspense } from 'react';\n\nconst LazyNotFound = lazy(() => import('./NotFound'));\n\nconst NotFound = (props: JSX.IntrinsicAttributes & { children?: React.ReactNode; }) => (\n \n \n \n);\n\nexport default NotFound;\n","import React, { useCallback, useRef, useState } from 'react';\nimport { Button, Layout, Menu, } from 'antd';\nimport { UserOutlined, PhoneFilled, MenuOutlined, ExperimentOutlined } from '@ant-design/icons';\nimport { Link, Redirect, Route, RouteComponentProps, Switch, useLocation, withRouter } from 'react-router-dom';\n\nimport './Global.scss';\nimport styles from './App.module.scss';\nimport { FontAwesomeIcon, } from '@fortawesome/react-fontawesome';\nimport { faBook, faChess } from '@fortawesome/free-solid-svg-icons'\nimport AboutMe from './AboutMe/AboutMe.lazy';\nimport Experience from './Experience/Experience.lazy';\nimport Skills from './Skills/Skills.lazy';\nimport Contact from './Contact/Contact.lazy';\nimport { useOutsideAlerter } from './Shared/utils';\nimport Projects from './Projects/Projects.lazy';\nimport { ErrorBoundary } from 'react-error-boundary'\nimport ErrorFallback from './ErrorFallback/ErrorFallback';\nimport { logError } from './Portfolio.utils';\nimport NotFound from './NotFound/NotFound.lazy';\n\nconst { Sider } = Layout;\n\ninterface SideNavbarContentProps extends RouteComponentProps {\n onClick?: () => void;\n}\n\nconst SideNavbarContent = withRouter((props: SideNavbarContentProps) => {\n const path = props.location.pathname;\n let selectionKey;\n if (path === '/') {\n selectionKey = '1';\n } else if (path.startsWith('/experience')) {\n selectionKey = '2';\n } else if (path.startsWith('/skills')) {\n selectionKey = '3';\n } else if (path.startsWith('/projects')) {\n selectionKey = '4';\n } else if (path.startsWith('/contact')) {\n selectionKey = '5';\n }\n return (\n \n
ePortfolio
\n \n }>\n About me\n \n }>\n Experience\n \n }>\n Skills\n \n }>\n Projects\n \n }>\n Contact\n \n \n
\n )\n})\n\nconst App = () => {\n const [sidenavCollapsed, setSidenavCollapsed] = useState(true);\n const [redrawSkillsTime, setRedrawSkillsTime] = useState(+new Date());\n const [clearErrorToggle, setClearErrorToggle] = useState(false);\n const location = useLocation();\n const clearErrorState = () => setClearErrorToggle(e => !e);\n const updateCollapsed = (collapsed: boolean) => { \n setSidenavCollapsed((wasCollapsed) => {\n if (wasCollapsed !== collapsed) {\n setRedrawSkillsTime(+new Date());\n }\n return collapsed;\n });\n }\n const onSidebarOptionClick = () => {\n clearErrorState();\n updateCollapsed(true);\n }\n\n const ref = useRef(null);\n useOutsideAlerter(ref, useCallback(() => {\n updateCollapsed(true);\n }, []))\n\n return (\n \n \n onSidebarOptionClick()}>\n \n \n \n { !!sidenavCollapsed &&\n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n)};\n\nexport default App;\n","import { BrowserRouter as Router } from 'react-router-dom';\nimport Portfolio from './Portfolio';\n\nconst App = () => (\n \n \n \n)\n\nexport default App;","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\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","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Sider\":\"App_Sider__25rUn\",\"MenuButton\":\"App_MenuButton__HHlYh\",\"Container\":\"App_Container__3mTNK\",\"Collapsed\":\"App_Collapsed__2nMn0\"};","import { useEffect, useState } from 'react';\n\nexport function useOutsideAlerter(ref: any, callback: Function) {\n useEffect(() => {\n function hadleClickOutside(event: any) {\n if (ref.current && !ref.current.contains(event.target)) {\n callback(event);\n }\n }\n\n document.addEventListener('mousedown', hadleClickOutside);\n document.addEventListener('touchstart', hadleClickOutside)\n return () => {\n document.removeEventListener('mousedown', hadleClickOutside);\n document.removeEventListener('touchstart', hadleClickOutside);\n }\n }, [ref, callback]);\n}\n\n\nexport function useMediaQuery(query: string) {\n const [matches, setMatches] = useState(false);\n \n useEffect(() => {\n const media = window.matchMedia(query);\n setMatches(media.matches);\n\n const listener = (ev: MediaQueryListEvent): any => {\n setMatches(ev.matches);\n }\n media.addEventListener('change', listener);\n\n return () => media.removeEventListener('change', listener);\n }, [query]);\n\n return matches;\n}\n\nexport function deepCopy(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}"],"sourceRoot":""}