{"version":3,"sources":["features/about-me/AboutMe.module.scss","features/modal/UgraphicModal.module.scss","features/header/AppHeader.module.scss","features/layout/Layout.tsx","app/hooks.ts","app/data-service.ts","features/portfolio/portfolio.data.service.ts","features/design-process/design-process.data.service.ts","features/portfolio-details/portfolio-details.data.service.ts","features/contact/contact.data.service.ts","features/about-me/about-me.data.service.ts","features/markdown/markdownSlice.ts","features/collapsible/UgraphicCollapsible.tsx","features/modal/UgraphicModal.tsx","features/portfolio-details/PortfolioDetails.tsx","features/portfolio/Portfolio.tsx","features/header/AppHeader.tsx","features/design-process/DesignProcess.tsx","features/contact/Contact.tsx","features/about-me/AboutMe.tsx","features/footer/AppFooter.tsx","App.tsx","features/counter/counterSlice.ts","app/store.ts","index.tsx","features/layout/Layout.module.scss","features/design-process/DesignProcess.module.scss","features/portfolio-details/PortfolioDetails.module.scss","features/footer/AppFooter.module.scss","features/portfolio/Portfolio.module.scss","features/contact/Contact.module.scss"],"names":["module","exports","Layout","header","portfolio","designProcess","contact","aboutMe","footer","Fragment","className","styles","layout__wrapper","layout__header","id","layout__anchor","layout__portfolio","layout__design","layout__aboutMe","layout__contact","layout__footer","useAppSelector","useSelector","useAppDetectMobile","useMediaQuery","query","httpClient","axios","create","baseURL","process","timeout","getPortfolioMd$","a","get","catch","error","Promise","reject","result","resolve","data","md","getDesignProcessMd$","getPortfolioDetailsMd$","getContactMd$","getAboutMeMd$","getPortfolioMarkdown$","createAsyncThunk","getDesignProcessMarkdown$","getPortfolioDetailsMarkdown$","getContactMarkdown$","getAboutMeMarkdown$","markdownSlice","createSlice","name","initialState","markdown","portfolioDetails","status","reducers","extraReducers","builder","addCase","pending","state","fulfilled","action","payload","rejected","console","log","selectPortfolioMarkdown","markdowns","selectDesignProcessMarkdown","selectPortfolioDetailsMarkdown","selectContactMarkdown","selectAboutMeMarkdown","UgraphicCollapsible","children","open","onToggle","collapsibleStart","useRef","toggle","scrollToTop","current","scrollIntoView","style","transform","transition","ref","transitionTime","trigger","onClick","icon","UgraphicModal","props","Modal","scrollable","show","fullscreen","Body","modal__close","handleHide","content","IMAGE_NAME_REGEX","IMAGE_URL_REGEX","IMAGE_EXTENSION","PortfolioDetails","componentProps","isScrolling","swipeStartPositionX","swipeStartPositionY","dispatch","useDispatch","isMobile","containerRef","carouselRef","useEffect","handleScroll","handle","clearTimeout","setTimeout","handleSlide","scroll","handleTouch","touchEvent","changedTouches","clientX","clientY","handleTouchEnd","directionX","directionY","Math","abs","refObject","prev","next","elements","remarkPlugins","deflist","components","hr","h3","blockquote","carouselContainer","onScroll","onTouchStart","onTouchEnd","Carousel","nextIcon","navigationIconRight","prevIcon","navigationIconLeft","controls","custom","wrap","indicators","touch","defaultActiveIndex","activeIndex","onSlide","interval","filter","c","node","tagName","map","el","element","Item","sliderElement","key","dl","dt","img","properties","src","alt","imageSource","imageUrl","match","imageName","imageExtension","dd","hasImage","some","imageContainer","descriptionContainer","getHeaderFromMarkdown","require","portfolioDetails__container","Portfolio","useState","showModal","setShowModal","modalContent","setModalContent","selectedImage","setSelectedImage","isMoreOpen","setIsMoreOpen","document","querySelectorAll","forEach","image","index","indexToOpen","onclick","openModal","scrollPos","window","scrollY","getElementsByTagName","scrollTop","handleToggleMore","prevOpen","portfolio__markdown","includeElementIndex","portfolio__arrow","title","scrollTo","top","behavior","AppHeader","setOpen","headerElements","anchor","handleMenuChange","header__container","header__logo","href","header__logoDesktop","header__logoMobile","header__menu","navigationDesktop","navigation__navHorizontal","navigation__item","navigationMobile","type","onChange","checked","navigation__checkbox","htmlFor","navigation__button","navigation__icon1","navigation__icon2","navigation__icon3","navigation__background","navigation__nav","navigation__list","navigation__link","DesignProcess","remarkGfm","designProcess__markdown","li","elementKey","random","designProcess__listItem","table","heads","Map","child","mainIndex","childElement","head","renderKey","position","start","line","set","designProcess__tableCell","designProcess__tableCellHeader","row","rowIndex","cell","push","tableElements","values","i","designProcess__tableRow","designProcess__table","Contact","contact__markdown","contact__content","target","rel","AboutMe","aboutMe__markdown","aboutMe__content","AppFooter","footer__impressum","footer__ajanlat","viewBox","d","textLength","xlinkHref","library","add","faChevronDown","faChevronLeft","faChevronRight","faTimes","App","incrementAsync","amount","response","counterSlice","value","increment","decrement","incrementByAmount","actions","store","configureStore","reducer","counter","counterReducer","markdownsReducer","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.b349f5a2.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"aboutMe__markdown\":\"AboutMe_aboutMe__markdown__2YWQL\",\"aboutMe__content\":\"AboutMe_aboutMe__content__3U0nm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modal__close\":\"UgraphicModal_modal__close__3DC0N\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header__container\":\"AppHeader_header__container__3ZacR\",\"header__logoDesktop\":\"AppHeader_header__logoDesktop__GdXT4\",\"header__logoMobile\":\"AppHeader_header__logoMobile__2J8zi\",\"header__logo\":\"AppHeader_header__logo__3Am3z\",\"header__menu\":\"AppHeader_header__menu__3vWW4\",\"navigation__checkbox\":\"AppHeader_navigation__checkbox__2rz3w\",\"navigation__button\":\"AppHeader_navigation__button__1eBqZ\",\"navigation__background\":\"AppHeader_navigation__background__1pw4Q\",\"navigation__list\":\"AppHeader_navigation__list__1hfY5\",\"navigation__item\":\"AppHeader_navigation__item__1T6zV\",\"navigation__navHorizontal\":\"AppHeader_navigation__navHorizontal__3Pspy\",\"navigation__nav\":\"AppHeader_navigation__nav__1wE-Y\",\"navigation__icon1\":\"AppHeader_navigation__icon1__3rV9R\",\"navigation__icon2\":\"AppHeader_navigation__icon2__3pXlL\",\"navigation__icon3\":\"AppHeader_navigation__icon3__27pNX\",\"navigation__link\":\"AppHeader_navigation__link__11Znq\",\"navigationMobile\":\"AppHeader_navigationMobile__3B329\",\"navigationDesktop\":\"AppHeader_navigationDesktop__Sal88\"};","import React from 'react';\r\nimport styles from './Layout.module.scss';\r\n\r\nexport interface LayoutProps {\r\n header: JSX.Element;\r\n portfolio: JSX.Element;\r\n designProcess: JSX.Element;\r\n contact: JSX.Element;\r\n aboutMe: JSX.Element;\r\n footer: JSX.Element;\r\n}\r\n\r\nexport const Layout = ({ header, portfolio, designProcess, contact, aboutMe, footer }: LayoutProps) => {\r\n return (\r\n \r\n
\r\n
{header}
\r\n \r\n
{portfolio}
\r\n \r\n
{designProcess}
\r\n \r\n
{aboutMe}
\r\n \r\n
{contact}
\r\n
{footer}
\r\n
\r\n
\r\n );\r\n};\r\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\r\nimport { useMediaQuery } from 'react-responsive';\r\nimport type { RootState, AppDispatch } from './store';\r\n\r\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\r\nexport const useAppDispatch = () => useDispatch();\r\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\r\nexport const useAppDetectMobile = () => useMediaQuery({ query: `(max-width: 760px)` });","import axios from 'axios';\r\n\r\nexport const httpClient = axios.create({\r\n baseURL: process.env.REACT_APP_API_URL,\r\n timeout: 15000,\r\n});","import { httpClient } from \"../../app/data-service\";\r\n\r\nexport const getPortfolioMd$ = async (): Promise => {\r\n const result = await httpClient.get('getMarkdown/portfolio').catch((error) => Promise.reject(error));\r\n return Promise.resolve(result.data.data.md);\r\n}","import { httpClient } from \"../../app/data-service\"\r\n\r\nexport const getDesignProcessMd$ = async () => {\r\n const result = await httpClient.get('getMarkdown/szolgaltatas').catch((error) => Promise.reject(error));\r\n return Promise.resolve(result.data.data.md);\r\n}","import { httpClient } from \"../../app/data-service\"\r\n\r\nexport const getPortfolioDetailsMd$ = async () => {\r\n const result = await httpClient.get('getMarkdown/portfolio-reszletek').catch((error) => Promise.reject(error));\r\n return Promise.resolve(result.data.data.md);\r\n}","import { httpClient } from \"../../app/data-service\"\r\n\r\nexport const getContactMd$ = async () => {\r\n const result = await httpClient.get('getMarkdown/kapcsolat').catch((error) => Promise.reject(error));\r\n return Promise.resolve(result.data.data.md);\r\n}","import { httpClient } from \"../../app/data-service\"\r\n\r\nexport const getAboutMeMd$ = async () => {\r\n const result = await httpClient.get('getMarkdown/rolam').catch((error) => Promise.reject(error));\r\n return Promise.resolve(result.data.data.md);\r\n}","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\r\nimport { RootState } from '../../app/store';\r\nimport { PageMarkdowns } from './markdowns.model';\r\nimport { getPortfolioMd$ } from '../portfolio/portfolio.data.service';\r\nimport { getDesignProcessMd$ } from '../design-process/design-process.data.service';\r\nimport { getPortfolioDetailsMd$ } from '../portfolio-details/portfolio-details.data.service';\r\nimport { getContactMd$ } from '../contact/contact.data.service';\r\nimport { getAboutMeMd$ } from '../about-me/about-me.data.service';\r\nexport interface MarkdownState {\r\n markdown: PageMarkdowns,\r\n status: 'idle' | 'loading' | 'failed';\r\n}\r\n\r\nconst initialState: MarkdownState = {\r\n markdown: {\r\n portfolio: '',\r\n designProcess: '',\r\n aboutMe: '',\r\n contact: '',\r\n portfolioDetails: ''\r\n },\r\n status: 'idle',\r\n};\r\nexport const getPortfolioMarkdown$ = createAsyncThunk(\r\n 'markdown/fetchPortfolioMarkdown',\r\n async () => {\r\n return await getPortfolioMd$();\r\n }\r\n);\r\n\r\nexport const getDesignProcessMarkdown$ = createAsyncThunk(\r\n 'markdown/fetchDesignProcessMarkdown',\r\n async () => {\r\n return await getDesignProcessMd$();\r\n }\r\n);\r\n\r\nexport const getPortfolioDetailsMarkdown$ = createAsyncThunk(\r\n 'markdown/fetchPortfolioDetailsMarkdown',\r\n async () => {\r\n return await getPortfolioDetailsMd$();\r\n }\r\n);\r\n\r\nexport const getContactMarkdown$ = createAsyncThunk(\r\n 'markdown/fetchContactMarkdown',\r\n async () => {\r\n return await getContactMd$();\r\n }\r\n);\r\n\r\nexport const getAboutMeMarkdown$ = createAsyncThunk(\r\n 'markdown/fetchAboutMeMarkdown',\r\n async () => {\r\n return await getAboutMeMd$();\r\n }\r\n);\r\n\r\nexport const markdownSlice = createSlice({\r\n name: 'markdown',\r\n initialState,\r\n reducers: {},\r\n extraReducers: (builder) => {\r\n builder\r\n .addCase(getPortfolioMarkdown$.pending, (state) => {\r\n state.status = 'loading';\r\n })\r\n .addCase(getPortfolioMarkdown$.fulfilled, (state, action) => {\r\n state.status = 'idle';\r\n state.markdown.portfolio = action.payload;\r\n })\r\n .addCase(getPortfolioMarkdown$.rejected, (state, action) => {\r\n state.status = 'failed';\r\n console.log(action.error);\r\n })\r\n .addCase(getDesignProcessMarkdown$.pending, (state) => {\r\n state.status = 'loading';\r\n })\r\n .addCase(getDesignProcessMarkdown$.fulfilled, (state, action) => {\r\n state.status = 'idle';\r\n state.markdown.designProcess = action.payload;\r\n })\r\n .addCase(getDesignProcessMarkdown$.rejected, (state, action) => {\r\n state.status = 'failed';\r\n console.log(action.error);\r\n })\r\n .addCase(getPortfolioDetailsMarkdown$.pending, (state) => {\r\n state.status = 'loading';\r\n })\r\n .addCase(getPortfolioDetailsMarkdown$.fulfilled, (state, action) => {\r\n state.status = 'idle';\r\n state.markdown.portfolioDetails = action.payload;\r\n })\r\n .addCase(getPortfolioDetailsMarkdown$.rejected, (state, action) => {\r\n state.status = 'failed';\r\n console.log(action.error);\r\n })\r\n .addCase(getContactMarkdown$.pending, (state) => {\r\n state.status = 'loading';\r\n })\r\n .addCase(getContactMarkdown$.fulfilled, (state, action) => {\r\n state.status = 'idle';\r\n state.markdown.contact = action.payload;\r\n })\r\n .addCase(getContactMarkdown$.rejected, (state, action) => {\r\n state.status = 'failed';\r\n console.log(action.error);\r\n })\r\n .addCase(getAboutMeMarkdown$.pending, (state) => {\r\n state.status = 'loading';\r\n })\r\n .addCase(getAboutMeMarkdown$.fulfilled, (state, action) => {\r\n state.status = 'idle';\r\n state.markdown.aboutMe = action.payload;\r\n })\r\n .addCase(getAboutMeMarkdown$.rejected, (state, action) => {\r\n state.status = 'failed';\r\n console.log(action.error);\r\n })\r\n },\r\n});\r\n\r\nexport const selectPortfolioMarkdown = (state: RootState) =>\r\n state.markdowns.markdown.portfolio;\r\n\r\nexport const selectDesignProcessMarkdown = (state: RootState) =>\r\n state.markdowns.markdown.designProcess;\r\n\r\nexport const selectPortfolioDetailsMarkdown = (state: RootState) =>\r\n state.markdowns.markdown.portfolioDetails;\r\n\r\nexport const selectContactMarkdown = (state: RootState) =>\r\n state.markdowns.markdown.contact;\r\n\r\nexport const selectAboutMeMarkdown = (state: RootState) =>\r\n state.markdowns.markdown.aboutMe;\r\n\r\nexport default markdownSlice.reducer;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport React, { ReactNode, useRef } from \"react\";\r\nimport Collapsible from \"react-collapsible\";\r\n\r\nexport type UgraphicCollapsibleProps = {\r\n children: ReactNode[],\r\n className: string,\r\n open: boolean,\r\n onToggle: () => void\r\n}\r\n\r\nexport const UgraphicCollapsible = ({ children, className, open, onToggle }: UgraphicCollapsibleProps) => {\r\n const collapsibleStart = useRef(null);\r\n\r\n const toggle = () => {\r\n if (open) {\r\n scrollToTop();\r\n }\r\n onToggle();\r\n }\r\n\r\n const scrollToTop = () => collapsibleStart.current?.scrollIntoView();\r\n\r\n const style = {\r\n transform: open ? 'rotate(180deg)' : '',\r\n transition: 'transform 400ms ease', // smooth transition\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n {children}\r\n \r\n {\r\n !open ?
\r\n \r\n {Több}\r\n
:
\r\n Kevesebb
\r\n }\r\n
\r\n )\r\n}","import { Modal } from \"react-bootstrap\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport styles from './UgraphicModal.module.scss';\r\n\r\nexport type UgraphicModalProps = {\r\n title: string;\r\n content: JSX.Element;\r\n show: boolean;\r\n handleHide: () => void\r\n}\r\n\r\nexport const UgraphicModal = (props: UgraphicModalProps) => {\r\n return (\r\n <>\r\n \r\n \r\n
\r\n { props.handleHide(); }} icon='times' />\r\n
\r\n {props.content}\r\n
\r\n
\r\n \r\n );\r\n}","import React, { useEffect, useRef } from 'react'\r\nimport ReactMarkdown from 'react-markdown';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Carousel } from 'react-bootstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { CarouselRef } from 'react-bootstrap/esm/Carousel';\r\n\r\nimport { useAppDetectMobile, useAppSelector } from '../../app/hooks';\r\nimport { selectPortfolioDetailsMarkdown, getPortfolioDetailsMarkdown$ } from '../markdown/markdownSlice';\r\n\r\nimport styles from './PortfolioDetails.module.scss';\r\nimport deflist from 'remark-deflist/lib';\r\n\r\nexport type PortfolioDetailsProps = {\r\n activeIndex: number;\r\n}\r\n\r\nexport const IMAGE_NAME_REGEX = /([^/]+)(?=\\.\\w+$)/;\r\nexport const IMAGE_URL_REGEX = /.*\\/(.*)\\//;\r\nexport const IMAGE_EXTENSION = /\\.\\w{3,4}($|\\?)/;\r\n\r\nexport const PortfolioDetails = (componentProps: PortfolioDetailsProps) => {\r\n let isScrolling = false;\r\n let swipeStartPositionX = 0;\r\n let swipeStartPositionY = 0;\r\n const markdown = useAppSelector(selectPortfolioDetailsMarkdown);\r\n const dispatch = useDispatch();\r\n const isMobile = useAppDetectMobile();\r\n const containerRef = useRef(null);\r\n const carouselRef = useRef(null);\r\n\r\n useEffect(() => {\r\n dispatch(getPortfolioDetailsMarkdown$());\r\n }, [dispatch]);\r\n\r\n const scrollTop = () => {\r\n if (!!containerRef) {\r\n (containerRef as React.MutableRefObject).current.scroll(0, 0);\r\n }\r\n };\r\n\r\n const handleScroll = () => {\r\n let handle: any = null;\r\n if (handle) {\r\n clearTimeout(handle);\r\n }\r\n if (!isScrolling) {\r\n isScrolling = true;\r\n }\r\n handle = setTimeout(() => {\r\n isScrolling = false;\r\n }, 200);\r\n };\r\n\r\n const handleSlide = () => {\r\n scrollTop();\r\n }\r\n\r\n const handleTouch = (touchEvent: any) => {\r\n swipeStartPositionX = touchEvent.changedTouches[0].clientX;\r\n swipeStartPositionY = touchEvent.changedTouches[0].clientY;\r\n }\r\n\r\n const handleTouchEnd = (touchEvent: any) => {\r\n const directionX = (touchEvent.changedTouches[0].clientX - swipeStartPositionX);\r\n const directionY = Math.abs(touchEvent.changedTouches[0].clientY - swipeStartPositionY);\r\n if (!!carouselRef && (!isScrolling && directionY < 50)) {\r\n const refObject = (carouselRef as React.MutableRefObject).current;\r\n if (directionX) {\r\n directionX > 0 ? refObject.prev() : refObject.next();\r\n }\r\n }\r\n }\r\n\r\n const getHeaderFromMarkdown = () => {\r\n const header = markdown.match('^###.*');\r\n return header && header[0] ? header[0] : '';\r\n }\r\n\r\n const elements = \r\n }\r\n prevIcon={
}\r\n controls={!isMobile}\r\n className={styles.custom}\r\n wrap\r\n indicators={false}\r\n touch={false}\r\n defaultActiveIndex={componentProps.activeIndex}\r\n onSlide={handleSlide}\r\n interval={null}>\r\n {\r\n children.filter(c => {\r\n return typeof c === 'object' && (c as React.ReactElement)?.props?.node?.tagName === 'dl'\r\n }).map(el => {\r\n const element = el as React.ReactElement;\r\n return \r\n
\r\n {element}\r\n
\r\n \r\n })\r\n }\r\n \r\n \r\n },\r\n dl({ children }) { return
{children}
},\r\n dt({ children }): JSX.Element { return

{children}

},\r\n img({ node }) {\r\n const { src, alt } = node.properties as { src: string, alt: string };\r\n let imageSource = src;\r\n if (isMobile) {\r\n const imageUrl = src.match(IMAGE_URL_REGEX);\r\n const imageName = src.match(IMAGE_NAME_REGEX);\r\n const imageExtension = src.match(IMAGE_EXTENSION);\r\n imageSource = imageUrl && imageName && imageExtension ? `${imageUrl[0]}${imageName[0]}--mobil${imageExtension[0]}` : src;\r\n }\r\n return {alt};\r\n },\r\n dd({ children }) {\r\n const hasImage = children.some(c => (typeof c !== 'string'));\r\n return

{children}

\r\n },\r\n }}\r\n />\r\n\r\n return (\r\n \r\n
\r\n \r\n {markdown ?
\r\n {elements}\r\n
: ''}\r\n
\r\n
\r\n )\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { useAppSelector } from '../../app/hooks';\r\nimport { useDispatch } from 'react-redux';\r\nimport ReactMarkdown from 'react-markdown';\r\nimport { getPortfolioMarkdown$, selectPortfolioMarkdown } from '../markdown/markdownSlice';\r\nimport { UgraphicCollapsible } from '../collapsible/UgraphicCollapsible';\r\nimport styles from './Portfolio.module.scss';\r\nimport { UgraphicModal } from '../modal/UgraphicModal';\r\nimport { PortfolioDetails } from '../portfolio-details/PortfolioDetails';\r\n\r\nexport function Portfolio() {\r\n const [showModal, setShowModal] = useState(false);\r\n const [modalContent, setModalContent] = useState(
);\r\n const [selectedImage, setSelectedImage] = useState(0);\r\n const markdown = useAppSelector(selectPortfolioMarkdown);\r\n const [isMoreOpen, setIsMoreOpen] = useState(false);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(getPortfolioMarkdown$()); \r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n const images = document.querySelectorAll('.portfolio img');\r\n images.forEach((image, index) => {\r\n const indexToOpen = (index as number) - 1 < 0 ? 0 : (index as number) - 1;\r\n (image as HTMLElement).onclick = () => openModal(indexToOpen);\r\n });\r\n });\r\n\r\n const openModal = (index: number) => {\r\n let scrollPos = window.scrollY || document.getElementsByTagName(\"html\")[0].scrollTop;\r\n setSelectedImage(scrollPos);\r\n setModalContent();\r\n setShowModal(true);\r\n }\r\n\r\n const closeModal = () => { \r\n setShowModal(false);\r\n window.scrollTo({\r\n top: selectedImage,\r\n behavior: 'auto'\r\n });\r\n }\r\n\r\n const handleToggleMore = () => { \r\n setIsMoreOpen(prevOpen => !prevOpen);\r\n }\r\n\r\n return (\r\n \r\n \r\n },\r\n blockquote({ node, className, children, index, ...props }) {\r\n return \r\n }\r\n }}\r\n />\r\n \r\n \r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport styles from './AppHeader.module.scss';\r\n\r\nexport function AppHeader() {\r\n const [open, setOpen] = useState(false);\r\n const headerElements = [\r\n { name: 'portfólió', anchor: '#portfolio' },\r\n { name: 'szolgáltatás', anchor: '#szolgaltatas' },\r\n { name: 'rólam', anchor: '#rolam' },\r\n { name: 'kapcsolat', anchor: '#kapcsolat' }];\r\n const handleMenuChange = () => {\r\n setOpen(prevOpen => !prevOpen);\r\n }\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n
 
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import React, { useEffect } from 'react';\r\nimport ReactMarkdown from 'react-markdown';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useAppSelector } from '../../app/hooks';\r\nimport { getDesignProcessMarkdown$, selectDesignProcessMarkdown } from '../markdown/markdownSlice';\r\nimport styles from './DesignProcess.module.scss';\r\nimport remarkGfm from 'remark-gfm';\r\n\r\nexport function DesignProcess() {\r\n const dispatch = useDispatch();\r\n const markdown = useAppSelector(selectDesignProcessMarkdown);\r\n useEffect(() => {\r\n dispatch(getDesignProcessMarkdown$())\r\n }, [dispatch]);\r\n\r\n return (\r\n \r\n
{children}
\r\n },\r\n table({ children, ...props }) {\r\n const heads = new Map();\r\n children.forEach((child, mainIndex) => {\r\n const childElement = (child as React.ReactElement);\r\n if (childElement.type === 'thead') {\r\n const headRow = childElement.props.children[0] as React.ReactElement;\r\n const headList = headRow.props.children as React.ReactElement[];\r\n headList.forEach((head, index) => {\r\n const renderKey = `${props.node.tagName}-${props.node.type}-${props.node.position?.start.line}-${mainIndex}-${index}`;\r\n heads.set(index, [head.props && head.props.children ?\r\n
{head.props.children[0]}
\r\n :
])\r\n });\r\n\r\n } else if (childElement.type === 'tbody') {\r\n const bodyRows = childElement.props.children as React.ReactElement[];\r\n bodyRows.forEach((row, rowIndex) => {\r\n const cells = row.props.children as React.ReactElement[];\r\n cells.forEach((cell, index) => {\r\n const renderKey = `${props.node.tagName}-${props.node.type}-${props.node.position?.start.line}-${mainIndex}-${rowIndex}-${index}`;\r\n heads.get(index)?.push(cell.props && cell.props.children ?\r\n
{cell.props.children[0]}
:\r\n
)\r\n });\r\n });\r\n }\r\n });\r\n const tableElements = [];\r\n let index = 0;\r\n for (let i of heads.values()) {\r\n tableElements.push(\r\n
\r\n {i}\r\n
)\r\n index++;\r\n }\r\n return
\r\n {tableElements}\r\n
\r\n }\r\n }}\r\n />\r\n
\r\n )\r\n}","import React, { useEffect } from 'react';\r\nimport ReactMarkdown from 'react-markdown';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useAppSelector } from '../../app/hooks';\r\nimport { getContactMarkdown$, selectContactMarkdown } from '../markdown/markdownSlice';\r\nimport styles from './Contact.module.scss';\r\n\r\nexport function Contact() {\r\n const markdown = useAppSelector(selectContactMarkdown);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(getContactMarkdown$());\r\n }, [dispatch]);\r\n\r\n const getHeaderFromMarkdown = () => {\r\n const header = markdown.match('^###.*');\r\n return header && header[0] ? header[0] : '';\r\n }\r\n return (\r\n \r\n
\r\n \r\n
\r\n {children} }\r\n }\r\n }\r\n\r\n />\r\n
\r\n
\r\n
\r\n )\r\n}","import React, { useEffect } from 'react';\r\nimport ReactMarkdown from 'react-markdown';\r\nimport { useDispatch } from 'react-redux';\r\nimport { useAppSelector } from '../../app/hooks';\r\nimport { getAboutMeMarkdown$, selectAboutMeMarkdown } from '../markdown/markdownSlice';\r\nimport styles from './AboutMe.module.scss';\r\n\r\nexport function AboutMe() {\r\n const markdown = useAppSelector(selectAboutMeMarkdown);\r\n const dispatch = useDispatch();\r\n useEffect(() => {\r\n dispatch(getAboutMeMarkdown$());\r\n }, [dispatch]);\r\n\r\n const getHeaderFromMarkdown = () => {\r\n const header = markdown.match('^###.*');\r\n return header && header[0] ? header[0] : '';\r\n }\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n}","import React from \"react\";\r\nimport { useAppDetectMobile } from \"../../app/hooks\";\r\nimport styles from './AppFooter.module.scss';\r\n\r\nexport function AppFooter() {\r\n const isMobile = useAppDetectMobile();\r\n return (\r\n \r\n
\r\n
\r\n

©2021 ugraphic.hu

\r\n

ugraphic.u@gmail.com

\r\n
\r\n \r\n
\r\n
\r\n )\r\n}","import './App.scss';\r\nimport { Layout } from './features/layout/Layout';\r\nimport { Portfolio } from './features/portfolio/Portfolio';\r\nimport { library } from '@fortawesome/fontawesome-svg-core'\r\nimport { faChevronDown, faChevronLeft, faChevronRight, faTimes } from '@fortawesome/free-solid-svg-icons'\r\nimport { AppHeader } from './features/header/AppHeader';\r\nimport { DesignProcess } from './features/design-process/DesignProcess';\r\nimport { Contact } from './features/contact/Contact';\r\nimport { AboutMe } from './features/about-me/AboutMe';\r\nimport { AppFooter } from './features/footer/AppFooter';\r\n\r\nlibrary.add(faChevronDown, faChevronLeft, faChevronRight, faTimes);\r\n\r\nfunction App() {\r\n return (\r\n
\r\n }\r\n portfolio={}\r\n designProcess={}\r\n contact={}\r\n aboutMe={}\r\n footer={}\r\n />\r\n
\r\n );\r\n}\r\n\r\nexport default App;\r\n","import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';\r\nimport { RootState, AppThunk } from '../../app/store';\r\n\r\nexport interface CounterState {\r\n value: number;\r\n status: 'idle' | 'loading' | 'failed';\r\n}\r\n\r\nconst initialState: CounterState = {\r\n value: 0,\r\n status: 'idle',\r\n};\r\n\r\n// The function below is called a thunk and allows us to perform async logic. It\r\n// can be dispatched like a regular action: `dispatch(incrementAsync(10))`. This\r\n// will call the thunk with the `dispatch` function as the first argument. Async\r\n// code can then be executed and other actions can be dispatched. Thunks are\r\n// typically used to make async requests.\r\nexport const incrementAsync = createAsyncThunk(\r\n 'counter/fetchCount',\r\n async (amount: number) => {\r\n const response = await fetchCount(amount);\r\n // The value we return becomes the `fulfilled` action payload\r\n return response.data;\r\n }\r\n);\r\n\r\nexport const counterSlice = createSlice({\r\n name: 'counter',\r\n initialState,\r\n // The `reducers` field lets us define reducers and generate associated actions\r\n reducers: {\r\n increment: (state) => {\r\n // Redux Toolkit allows us to write 'mutating' logic in reducers. It\r\n // doesn't actually mutate the state because it uses the Immer library,\r\n // which detects changes to a 'draft state' and produces a brand new\r\n // immutable state based off those changes\r\n state.value += 1;\r\n },\r\n decrement: (state) => {\r\n state.value -= 1;\r\n },\r\n // Use the PayloadAction type to declare the contents of `action.payload`\r\n incrementByAmount: (state, action: PayloadAction) => {\r\n state.value += action.payload;\r\n },\r\n },\r\n // The `extraReducers` field lets the slice handle actions defined elsewhere,\r\n // including actions generated by createAsyncThunk or in other slices.\r\n extraReducers: (builder) => {\r\n builder\r\n .addCase(incrementAsync.pending, (state) => {\r\n state.status = 'loading';\r\n })\r\n .addCase(incrementAsync.fulfilled, (state, action) => {\r\n state.status = 'idle';\r\n state.value += action.payload;\r\n });\r\n },\r\n});\r\n\r\nexport const { increment, decrement, incrementByAmount } = counterSlice.actions;\r\n\r\n// The function below is called a selector and allows us to select a value from\r\n// the state. Selectors can also be defined inline where they're used instead of\r\n// in the slice file. For example: `useSelector((state: RootState) => state.counter.value)`\r\nexport const selectCount = (state: RootState) => state.counter.value;\r\n\r\n// We can also write thunks by hand, which may contain both sync and async logic.\r\n// Here's an example of conditionally dispatching actions based on current state.\r\nexport const incrementIfOdd =\r\n (amount: number): AppThunk =>\r\n (dispatch, getState) => {\r\n const currentValue = selectCount(getState());\r\n if (currentValue % 2 === 1) {\r\n dispatch(incrementByAmount(amount));\r\n }\r\n };\r\n\r\nexport default counterSlice.reducer;\r\nfunction fetchCount(amount: number) {\r\n return { data: 0 };\r\n}\r\n\r\n","import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';\r\nimport counterReducer from '../features/counter/counterSlice';\r\nimport markdownsReducer from '../features/markdown/markdownSlice';\r\n\r\nexport const store = configureStore({\r\n reducer: {\r\n counter: counterReducer,\r\n markdowns: markdownsReducer\r\n },\r\n});\r\n\r\nexport type AppDispatch = typeof store.dispatch;\r\nexport type RootState = ReturnType;\r\nexport type AppThunk = ThunkAction<\r\n ReturnType,\r\n RootState,\r\n unknown,\r\n Action\r\n>;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport { store } from './app/store';\r\nimport { Provider } from 'react-redux';\r\nimport './styles/styles.scss';\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"layout__wrapper\":\"Layout_layout__wrapper__2RyqE\",\"layout__design\":\"Layout_layout__design__1Kf9d\",\"layout__portfolioDetails\":\"Layout_layout__portfolioDetails__l6KFA\",\"layout__aboutMe\":\"Layout_layout__aboutMe__3YJW4\",\"layout__contact\":\"Layout_layout__contact__2ISh0\",\"layout__header\":\"Layout_layout__header__1Aww0\",\"layout__anchor\":\"Layout_layout__anchor__3pqoI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"designProcess__markdown\":\"DesignProcess_designProcess__markdown__2dhFO\",\"designProcess__table\":\"DesignProcess_designProcess__table__234zT\",\"designProcess__tableCell\":\"DesignProcess_designProcess__tableCell__xw4oY\",\"designProcess__tableRow\":\"DesignProcess_designProcess__tableRow__1ZB8r\",\"designProcess__tableCellHeader\":\"DesignProcess_designProcess__tableCellHeader__wAM2d\",\"designProcess__listItem\":\"DesignProcess_designProcess__listItem__l8hsL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"portfolioDetails\":\"PortfolioDetails_portfolioDetails__3KQ2E\",\"portfolioDetails__container\":\"PortfolioDetails_portfolioDetails__container__2xsdI\",\"custom\":\"PortfolioDetails_custom__1IQTB\",\"sliderElement\":\"PortfolioDetails_sliderElement__2dCPV\",\"carouselContainer\":\"PortfolioDetails_carouselContainer__2eamY\",\"navigationMobile\":\"PortfolioDetails_navigationMobile__20Xan\",\"navigationIconLeft\":\"PortfolioDetails_navigationIconLeft__3tb0L\",\"navigationIconRight\":\"PortfolioDetails_navigationIconRight__8-tQt\",\"imageContainer\":\"PortfolioDetails_imageContainer__3d8VO\",\"descriptionContainer\":\"PortfolioDetails_descriptionContainer__1rMF4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"AppFooter_footer__2DpQz\",\"footer__impressum\":\"AppFooter_footer__impressum__CapLu\",\"footer__ajanlat\":\"AppFooter_footer__ajanlat__21IE6\",\"backandforth\":\"AppFooter_backandforth__3ZJV-\",\"upanddown\":\"AppFooter_upanddown__3PFo-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"portfolio__markdown\":\"Portfolio_portfolio__markdown__PqA2o\",\"portfolio__arrow\":\"Portfolio_portfolio__arrow__3ZdBU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"contact__markdown\":\"Contact_contact__markdown__joU2v\",\"contact__content\":\"Contact_contact__content__3XQoW\"};"],"sourceRoot":""}