From c54a6e584c1a2ebb759e5dbabc242bc8379f5f4a Mon Sep 17 00:00:00 2001 From: sverg84 <134344913+sverg84@users.noreply.github.com> Date: Wed, 31 Jan 2024 08:50:47 -0800 Subject: [PATCH] Updates --- asset-manifest.json | 18 +++++++++--------- index.html | 2 +- static/js/101.2074eee1.chunk.js | 2 -- static/js/101.2074eee1.chunk.js.map | 1 - static/js/101.9f7b58b4.chunk.js | 2 ++ static/js/101.9f7b58b4.chunk.js.map | 1 + ...895d1c8.chunk.js => 154.bcf6d50a.chunk.js} | 4 ++-- static/js/154.bcf6d50a.chunk.js.map | 1 + static/js/154.c895d1c8.chunk.js.map | 1 - static/js/996.4de58764.chunk.js | 2 ++ static/js/996.4de58764.chunk.js.map | 1 + static/js/996.9edb47c4.chunk.js | 2 -- static/js/996.9edb47c4.chunk.js.map | 1 - .../js/{main.3f8c9e47.js => main.b9cd00bb.js} | 6 +++--- ...CENSE.txt => main.b9cd00bb.js.LICENSE.txt} | 0 ...n.3f8c9e47.js.map => main.b9cd00bb.js.map} | 2 +- sverg_resume.pdf | Bin 17214 -> 22100 bytes 17 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 static/js/101.2074eee1.chunk.js delete mode 100644 static/js/101.2074eee1.chunk.js.map create mode 100644 static/js/101.9f7b58b4.chunk.js create mode 100644 static/js/101.9f7b58b4.chunk.js.map rename static/js/{154.c895d1c8.chunk.js => 154.bcf6d50a.chunk.js} (96%) create mode 100644 static/js/154.bcf6d50a.chunk.js.map delete mode 100644 static/js/154.c895d1c8.chunk.js.map create mode 100644 static/js/996.4de58764.chunk.js create mode 100644 static/js/996.4de58764.chunk.js.map delete mode 100644 static/js/996.9edb47c4.chunk.js delete mode 100644 static/js/996.9edb47c4.chunk.js.map rename static/js/{main.3f8c9e47.js => main.b9cd00bb.js} (99%) rename static/js/{main.3f8c9e47.js.LICENSE.txt => main.b9cd00bb.js.LICENSE.txt} (100%) rename static/js/{main.3f8c9e47.js.map => main.b9cd00bb.js.map} (99%) diff --git a/asset-manifest.json b/asset-manifest.json index 27f0a3e..c1765f6 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,41 +1,41 @@ { "files": { "main.css": "/static/css/main.37d981fa.css", - "main.js": "/static/js/main.3f8c9e47.js", + "main.js": "/static/js/main.b9cd00bb.js", "static/css/101.b341df98.chunk.css": "/static/css/101.b341df98.chunk.css", - "static/js/101.2074eee1.chunk.js": "/static/js/101.2074eee1.chunk.js", + "static/js/101.9f7b58b4.chunk.js": "/static/js/101.9f7b58b4.chunk.js", "static/css/996.62743da9.chunk.css": "/static/css/996.62743da9.chunk.css", - "static/js/996.9edb47c4.chunk.js": "/static/js/996.9edb47c4.chunk.js", + "static/js/996.4de58764.chunk.js": "/static/js/996.4de58764.chunk.js", "static/js/217.9e819b16.chunk.js": "/static/js/217.9e819b16.chunk.js", "static/css/306.25be4d54.chunk.css": "/static/css/306.25be4d54.chunk.css", "static/js/306.7c9b72c8.chunk.js": "/static/js/306.7c9b72c8.chunk.js", "static/css/560.81e016d9.chunk.css": "/static/css/560.81e016d9.chunk.css", "static/js/560.030f6d1d.chunk.js": "/static/js/560.030f6d1d.chunk.js", "static/css/154.f132b2bf.chunk.css": "/static/css/154.f132b2bf.chunk.css", - "static/js/154.c895d1c8.chunk.js": "/static/js/154.c895d1c8.chunk.js", + "static/js/154.bcf6d50a.chunk.js": "/static/js/154.bcf6d50a.chunk.js", "static/js/782.d8fa23c9.chunk.js": "/static/js/782.d8fa23c9.chunk.js", "static/js/176.9f4fecd5.chunk.js": "/static/js/176.9f4fecd5.chunk.js", "static/js/577.12a942c8.chunk.js": "/static/js/577.12a942c8.chunk.js", "index.html": "/index.html", "main.37d981fa.css.map": "/static/css/main.37d981fa.css.map", - "main.3f8c9e47.js.map": "/static/js/main.3f8c9e47.js.map", + "main.b9cd00bb.js.map": "/static/js/main.b9cd00bb.js.map", "101.b341df98.chunk.css.map": "/static/css/101.b341df98.chunk.css.map", - "101.2074eee1.chunk.js.map": "/static/js/101.2074eee1.chunk.js.map", + "101.9f7b58b4.chunk.js.map": "/static/js/101.9f7b58b4.chunk.js.map", "996.62743da9.chunk.css.map": "/static/css/996.62743da9.chunk.css.map", - "996.9edb47c4.chunk.js.map": "/static/js/996.9edb47c4.chunk.js.map", + "996.4de58764.chunk.js.map": "/static/js/996.4de58764.chunk.js.map", "217.9e819b16.chunk.js.map": "/static/js/217.9e819b16.chunk.js.map", "306.25be4d54.chunk.css.map": "/static/css/306.25be4d54.chunk.css.map", "306.7c9b72c8.chunk.js.map": "/static/js/306.7c9b72c8.chunk.js.map", "560.81e016d9.chunk.css.map": "/static/css/560.81e016d9.chunk.css.map", "560.030f6d1d.chunk.js.map": "/static/js/560.030f6d1d.chunk.js.map", "154.f132b2bf.chunk.css.map": "/static/css/154.f132b2bf.chunk.css.map", - "154.c895d1c8.chunk.js.map": "/static/js/154.c895d1c8.chunk.js.map", + "154.bcf6d50a.chunk.js.map": "/static/js/154.bcf6d50a.chunk.js.map", "782.d8fa23c9.chunk.js.map": "/static/js/782.d8fa23c9.chunk.js.map", "176.9f4fecd5.chunk.js.map": "/static/js/176.9f4fecd5.chunk.js.map", "577.12a942c8.chunk.js.map": "/static/js/577.12a942c8.chunk.js.map" }, "entrypoints": [ "static/css/main.37d981fa.css", - "static/js/main.3f8c9e47.js" + "static/js/main.b9cd00bb.js" ] } \ No newline at end of file diff --git a/index.html b/index.html index 5b6ea10..39a0067 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Stephen Vergara
\ No newline at end of file +Stephen Vergara
\ No newline at end of file diff --git a/static/js/101.2074eee1.chunk.js b/static/js/101.2074eee1.chunk.js deleted file mode 100644 index 058bb13..0000000 --- a/static/js/101.2074eee1.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunksverg84_github_io=self.webpackChunksverg84_github_io||[]).push([[101],{1101:(e,t,n)=>{n.r(t),n.d(t,{Component:()=>_e});var s=n(2791),a=n(8025);const i={bg:"background_bg__rHR4m",bg3:"background_bg3__WZ4Pm",bg2:"background_bg2__XB2Tl",slide:"background_slide__Sq8xw"};var r=n(184);function o(){const e=function(){const{color:e}=(0,s.useContext)(a.Z);return{backgroundImage:"linear-gradient(-60deg, ".concat(e," 50%, white 50%)")}}();return(0,r.jsx)(r.Fragment,{children:[i.bg,i.bg2,i.bg3].map((t=>(0,r.jsx)("div",{className:t,style:e},t)))})}var l=n(8957),c=n(2982),d=n(8188),u=n(1694),m=n.n(u),h=n(2426),g=n.n(h),p=n(1087),x=n(4769);const f={bold:"text_bold__TiUuq",italic:"text_italic__fvjzk"},j=new Date("1998-05-06T10:47:00.000-06:00");function _(e){let{language:t}=e;const n=(0,x.Z)();return(0,r.jsx)("span",{className:f.bold,style:n,children:t})}function b(){const e=(0,x.Z)(),t=g().duration(g()().diff(j)).years();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l.Z.Text,{as:"h2",className:m()("text-center","text-xl-start"),style:e,children:"About Me"}),(0,r.jsx)(l.Z.Text,{as:"h6",className:m()(f.italic,"text-center","text-xl-start"),children:"Front-End Software Engineer, Web Developer"}),(0,r.jsxs)(l.Z.Text,{children:["Hi there! My name is"," ",(0,r.jsx)("span",{className:m()(f.bold,f.italic),style:e,children:c.Z}),". I am a ",t," year-old software engineer with a fondness for user interface and user experience (UI/UX) development."]}),(0,r.jsxs)(l.Z.Text,{children:["I started learning to code during my senior year of high school when I took an introduction course to ",(0,r.jsx)(_,{language:"Java"})," on a whim, and I loved learning as much as I could since then! Throughout my time at university, I applied myself to a substantial amount of coursework in"," ",(0,r.jsx)(_,{language:"C++"})," and ",(0,r.jsx)(_,{language:"Python"})," with a splash of ",(0,r.jsx)(_,{language:"JavaScript"}),","," ",(0,r.jsx)(_,{language:"OCaml"}),", and ",(0,r.jsx)(_,{language:"C#"}),"."]}),(0,r.jsxs)(l.Z.Text,{children:["All of my full-time experience (as of Summer 2023) stems from my time at Meta where I challenged myself further in exploring web programming, learning ",(0,r.jsx)(_,{language:"PHP"})," and"," ",(0,r.jsx)(_,{language:"React"})," for the first time in a rigorous, fast-paced environment."]}),(0,r.jsxs)(l.Z.Text,{children:["Since parting with Meta, I have been self-teaching"," ",(0,r.jsx)(_,{language:"TypeScript"})," in order to keep my UI-building skills fresh, replete with ",(0,r.jsx)(_,{language:"SCSS"})," modules."]}),(0,r.jsxs)(l.Z.Text,{children:["Click"," ",(0,r.jsx)(p.rU,{className:f.bold,style:e,to:"/personal",children:"here"})," ","if you would like to learn more about me beyond my career!"]})]})}function y(){return(0,r.jsx)(d.Z,{alt:"Picture of ".concat(c.Z),src:"/sverg.jpeg",children:(0,r.jsx)(b,{})})}var v=n(2677),Z=n(9743),k=n(775),w=n(9841),M=n(9806),C=n(3360),N=n(2381);const S={button:"email_button__FW+sr"};function I(){const{isHovering:e,...t}=(0,N.Z)();return(0,r.jsx)(C.Z,{className:S.button,href:"mailto:sverg84@gmail.com",...t,children:(0,r.jsx)(M.G,{fade:e,icon:w.FU,size:"2xl"})})}var T=n(8036),L=n(5943),P=n(1791);function E(){return(0,r.jsx)(P.Z,{className:L.Z.github,href:"https://github.com/sverg84",icon:T.zh})}var R=n(1561);function H(){return(0,r.jsx)(P.Z,{className:L.Z.linkedin,href:"https://www.linkedin.com/in/stephen-vergara-2bab8614b/",icon:R.D9})}var z=n(517),F=n(5791);const B={resume:"resume_resume__92JEE"};function K(){const{isHovering:e,...t}=(0,N.Z)(),n=function(e){const{color:t}=s.useContext(a.Z),n=(0,F.Z)(),i=e?n:t;return{backgroundColor:e?t:void 0,borderColor:i,boxShadow:"4px 4px ".concat(t),color:i}}(e);return(0,r.jsxs)(C.Z,{className:B.resume,href:"/sverg_resume.pdf",style:n,target:"_blank",variant:"outline-light",...t,children:[(0,r.jsx)("span",{children:"Download resume"}),(0,r.jsx)(M.G,{beat:e,icon:z.q7})]})}function U(){return(0,r.jsx)(l.Z.Footer,{children:(0,r.jsxs)(Z.Z,{className:"gy-3",xs:1,sm:2,md:2,lg:3,children:[(0,r.jsx)(v.Z,{className:k.Z.resume,children:(0,r.jsx)(K,{})}),(0,r.jsx)(v.Z,{className:k.Z.resume,children:(0,r.jsx)(I,{})}),(0,r.jsxs)(v.Z,{className:k.Z.buttons,sm:12,md:12,children:[(0,r.jsx)(E,{}),(0,r.jsx)(H,{})]})]})})}function D(){return(0,r.jsxs)(l.Z,{id:"about",children:[(0,r.jsx)(y,{}),(0,r.jsx)(U,{})]})}const A={header:"card_header__C3ziB"};function q(e){let{children:t,id:n,title:s}=e;const a=(0,x.Z)();return(0,r.jsxs)(l.Z,{id:n,children:[(0,r.jsx)(l.Z.Header,{as:"h2",className:A.header,style:a,children:s}),(0,r.jsx)(l.Z.Body,{children:t})]})}var O=n(7093);const G={timeline:"timeline_timeline__VfjcF",bar:"timeline_bar__V3BAE"};var Q=n(949),W=n(3441);const J={item:"timelineItem_item__005F5",circle:"timelineItem_circle__ADJyP",in:"timelineItem_in__PSeNd",fadeInLeft:"timelineItem_fadeInLeft__vvxlT",content:"timelineItem_content__izpwq",fadeInRight:"timelineItem_fadeInRight__uPKi+",header:"timelineItem_header__H24TC",tag:"timelineItem_tag__k8jMy"},V={list:"skillsList_list__-3yy3",skills:"skillsList_skills__Q4+OB"};function Y(e){let{skillsList:t,style:n}=e;return(0,r.jsxs)("p",{className:V.list,children:[(0,r.jsxs)("span",{className:V.skills,style:n,children:["Skills:"," "]}),t.join(", ")]})}function X(e){let{data:t,isOdd:n}=e;const i=(0,O.Z)(),o=function(){const{color:e}=s.useContext(a.Z);return{borderColor:e}}(),l=(0,x.Z)(),{inView:c,ref:d}=(0,W.YD)({triggerOnce:!0,rootMargin:"-200px 0px"}),u=(0,r.jsx)("span",{className:J.tag,style:i,children:t.tag}),h=(0,r.jsx)("time",{children:t.timeframe}),g=n?(0,r.jsxs)(r.Fragment,{children:[u,h]}):(0,r.jsxs)(r.Fragment,{children:[h,u]});return(0,r.jsxs)("div",{className:J.item,children:[(0,r.jsxs)("div",{className:m()(J.content,c?J.in:"opacity-0"),ref:d,children:[(0,r.jsx)("div",{className:J.header,children:g}),(0,r.jsx)("h6",{style:l,children:t.title}),(0,r.jsx)("img",{loading:"lazy",src:t.src,width:"100%"}),t.description,(0,r.jsx)(Y,{style:l,skillsList:t.skillsList})]}),(0,r.jsx)("span",{className:J.circle,style:o})]})}const $=[{description:(0,r.jsx)("p",{children:"Full-stack product software engineer (PHP/Hack and JS/React) for the Org Effectiveness team within the Enterprise Engineering division. Released multiple high-priority stakeholder feature requests pertaining to HR-sensitive employee data. Leader of team app performance optimization opportunities."}),skillsList:["PHP","React","GraphQL","MySQL"],src:"/meta.gif",tag:"Meta Platforms, Inc.",timeframe:"2020-2023",title:"Software Engineer"},{description:(0,r.jsx)("p",{children:"Intern for the Traffic Analytics team within the Infrastructure division. Created monitoring tool for team oncall to measure network packet failures with interactive web page."}),skillsList:["C++","Python","Apache Thrift","MySQL"],src:"/meta.gif",tag:"Meta Platforms, Inc.",timeframe:"Summer 2019",title:"Software Engineer Intern"},{description:(0,r.jsxs)("p",{children:["Assistant at the university's Transportation Research Institute as part of the Undergraduate Research Opportunity Program (UROP). Participated in"," ",(0,r.jsx)(Q.Z,{content:"anthropometric",tooltip:"of or relating to the scientific study of the measurements and proportions of the human body"})," ","study for Defence Research & Development Canada (DRDC)."]}),skillsList:["MATLAB","Wolfram Mathematica"],src:"/umich.jpeg",tag:"University of Michigan",timeframe:"2016-2017",title:"Research Assistant"}];function ee(){const e=(0,O.Z)();return(0,r.jsxs)("div",{className:G.timeline,children:[(0,r.jsx)("div",{className:G.bar,style:e}),$.map(((e,t)=>(0,r.jsx)(X,{data:e,isOdd:t%2!==0},e.title)))]})}function te(){return(0,r.jsx)(q,{id:"experience",title:"Experience",children:(0,r.jsx)(ee,{})})}var ne=n(5364),se=n(4559);const ae={cpp:"C++",csharp:"C#",graphql:"GraphQL",hack:"Hack",mysql:"MySQL",python:"Python",react:"React",typescript:"TypeScript"};var ie=n(6055),re=n(7749),oe=n(7361),le=n(9578),ce=n(5912),de=n(7333);const ue={button:"item_button__GmSRm",expand:"item_expand__4Sxrl",firstExpand:"item_firstExpand__kSWZa",collapse:"item_collapse__JYgde",header:"item_header__w8Yjy"};function me(e){let{eventKey:t}=e;const{activeEventKey:n}=s.useContext(ce.Z),a=(0,O.Z)(),i=(0,de.k)(t),o=n===t,l=[];return o?l.push(t===ae.react?ue.firstExpand:ue.expand):l.push(ue.collapse),(0,r.jsxs)("button",{className:m()(l),style:o?a:void 0,onClick:i,children:[t,(0,r.jsx)(M.G,{icon:o?le.mT:oe.pt})]})}function he(e){let{children:t,eventKey:n}=e;return(0,r.jsxs)(re.Z,{eventKey:n,children:[(0,r.jsx)(me,{eventKey:n}),(0,r.jsx)(ie.Z,{eventKey:n,children:(0,r.jsx)(l.Z.Body,{children:t})})]})}function ge(){return(0,r.jsx)(q,{id:"skills",title:"Skills",children:(0,r.jsxs)(se.Z,{defaultActiveKey:ae.react,children:[(0,r.jsx)(he,{eventKey:ae.react,children:"Ramped up on React skills while transitioning from web infra (PHP) to UI programming in my full-time position at Meta. Developed an expertise in applying Hooks, code-splitting APIs, and React18 concurrency features to create seamless user experiences while optimizing app/page performance. Expanding upon Meta-internal skills with public React app building (e.g., this web page!)."}),(0,r.jsx)(he,{eventKey:ae.typescript,children:'Self-taught during the summer of 2023 in order to create a modern React app at home while still enforcing type safety. Very similar to Meta\'s "Flow" but with broader appeal.'}),(0,r.jsx)(he,{eventKey:ae.hack,children:"First programming language learned while working full-time at Meta. Built multiple scalable features by focusing on asynchronous programming. Moved to implementing GraphQL queries and mutations on the server side in addition to server-calling React routes and their corresponding components."}),(0,r.jsx)(he,{eventKey:ae.graphql,children:"Learned back-end GraphQL field implementation skills while learning Hack, and gained client-side GraphQL experience in tandem with coding in React while full-time at Meta."}),(0,r.jsx)(he,{eventKey:ae.mysql,children:"Database management skills applied during both the internship and full-time Meta experiences. MySQL queries created for mass aggregates of traffic data in C++/Python, queries and mutations optimized for employee directory information in Hack."}),(0,r.jsx)(he,{eventKey:ae.python,children:"First applied in class projects around web development (e.g., Flask, Jinja, REST) while at the University of Michigan, later used to create data pipeline jobs for traffic aggregation as an intern at Meta. Presently, using FastAPI and PostgreSQL for personal projects."}),(0,r.jsx)(he,{eventKey:ae.cpp,children:"First programming language learned as an undergraduate at the University of Michigan. Used for package building and app compression while coding as a Meta intern. Skills in asynchronous programming (e.g., threads, mutexes, semaphores, etc.) and file system management as part of a course on operating systems."}),(0,r.jsx)(he,{eventKey:ae.csharp,children:"Onboarded as part of university senior capstone project at Michigan. Gained experience in C# in order to create a video game as part of a team of four (4) using the Unity game engine."})]})})}function pe(){return(0,r.jsxs)(ne.Z,{children:[(0,r.jsx)(D,{}),(0,r.jsx)(te,{}),(0,r.jsx)(ge,{})]})}const xe=835;function fe(){const[e,t]=s.useState(window.innerWidth>xe),[a,i]=s.useState(null),o=()=>{t(window.innerWidth>xe)};return s.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o))),[]),s.useEffect((()=>{(async()=>{i(s.lazy((async()=>await(e?n.e(306).then(n.bind(n,9306)):n.e(560).then(n.bind(n,560))))))})()}),[e]),null!=a?(0,r.jsx)(s.Suspense,{fallback:null,children:(0,r.jsx)(a,{})}):null}var je=n(9911);function _e(){return(0,r.jsx)(je.Z,{background:(0,r.jsx)(o,{}),breadcrumbs:(0,r.jsx)(fe,{}),children:(0,r.jsx)(pe,{})})}},949:(e,t,n)=>{n.d(t,{Z:()=>l});n(2791);var s=n(5862),a=n(2576),i=n(3441);const r={tooltip:"tooltip_tooltip__5pJPW"};var o=n(184);function l(e){let{content:t,tooltip:n}=e;const{ref:l,entry:c}=(0,i.YD)({rootMargin:"-50% 0px 0px"});return(0,o.jsx)(s.Z,{placement:null!==c&&void 0!==c&&c.isIntersecting?"top":"bottom",overlay:(0,o.jsx)(a.Z,{children:n}),children:(0,o.jsx)("span",{className:r.tooltip,ref:l,children:t})})}},9911:(e,t,n)=>{n.d(t,{Z:()=>I});var s=n(2791),a=n(8025),i=n(1694),r=n.n(i),o=n(7022),l=n(2677),c=n(2251),d=n(1087),u=n(2982),m=n(7093);const h={brand:"navbar_brand__zDvLc",navbar:"navbar_navbar__pEuvw",pushTime:"navbar_pushTime__jdH3p",rightContent:"navbar_rightContent__ikOZ0"};var g=n(5),p=n(5088),x=n(9806),f=n(192),j=n(4849);const _={fallback:"colorPicker_fallback__pvhTA"};var b=n(9415),y=n(184);const v=(0,b.Z)((()=>n.e(154).then(n.bind(n,1154))));function Z(){return(0,y.jsx)(f.Z,{align:"end",className:_.icon,renderMenuOnMount:!1,title:(0,y.jsx)(x.G,{icon:p.q2,bounce:!0}),onMouseEnter:()=>{v.preload()},children:(0,y.jsx)(s.Suspense,{fallback:(0,y.jsx)("div",{className:_.fallback,children:(0,y.jsx)(j.Z,{animation:"border",variant:"secondary"})}),children:(0,y.jsx)(v,{})})})}var k=n(949);const w=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),M=[{unit:"year",ms:31536e6},{unit:"month",ms:2628e6},{unit:"day",ms:864e5},{unit:"hour",ms:36e5},{unit:"minute",ms:6e4},{unit:"second",ms:1e3}];function C(e){for(const{unit:t,ms:n}of M)if(Math.abs(e)>=n||"second"===t)return w.format(Math.round(e/n),t);return""}function N(){const[e,t]=s.useState(null);if(s.useEffect((()=>{(async()=>{try{const e=await fetch("https://api.github.com/repos/sverg84/sverg84.github.io");if(!e.ok)throw new Error("".concat(e.status,": ").concat(e.statusText));const n=(await e.json()).pushed_at;t(new Date(n))}catch(e){console.warn(e)}})()}),[]),null==e)return null;const n=e.getTime()-(new Date).getTime();return(0,y.jsxs)(y.Fragment,{children:["Last Updated:"," ",(0,y.jsx)(k.Z,{content:C(n),tooltip:e.toLocaleString(void 0)})]})}function S(e){let{breadcrumbs:t}=e;const n=(0,m.Z)();return(0,y.jsx)(c.Z,{expand:!1,sticky:"top",style:n,children:(0,y.jsxs)(o.Z,{className:r()(g.Z.page,h.navbar),children:[(0,y.jsx)(l.Z,{children:(0,y.jsx)(d.rU,{className:h.brand,to:"/",children:u.Z})}),(0,y.jsx)(l.Z,{className:h.pushTime,children:(0,y.jsx)(N,{})}),(0,y.jsxs)(l.Z,{className:h.rightContent,children:[t,(0,y.jsx)(Z,{})]})]})})}function I(e){let{background:t,breadcrumbs:n,children:i}=e;const[r,o]=(0,s.useState)("#2e3134");return(0,y.jsxs)(a.Z.Provider,{value:{color:r,setColor:o},children:[t,(0,y.jsx)(S,{breadcrumbs:n}),i]})}},5364:(e,t,n)=>{n.d(t,{Z:()=>l});var s=n(1694),a=n.n(s);n(2791);const i={body:"pageBody_body__aNOKo"};var r=n(5),o=n(184);function l(e){let{children:t}=e;return(0,o.jsx)("div",{className:a()(r.Z.page,i.body),children:t})}},8188:(e,t,n)=>{n.d(t,{Z:()=>h});var s=n(2791),a=n(8957),i=n(2677),r=n(7022),o=n(9743),l=n(6638),c=n(5267),d=n(184);const u=s.lazy((async()=>await n.e(217).then(n.bind(n,1217))));function m(e){return(0,d.jsx)(s.Suspense,{fallback:(0,d.jsx)(c.Z,{animation:"wave",as:"div",bg:"secondary",className:l.Z.glimmer}),children:(0,d.jsx)(u,{...e})})}function h(e){let{children:t,...n}=e;return(0,d.jsx)(a.Z.Body,{children:(0,d.jsx)(r.Z,{children:(0,d.jsxs)(o.Z,{className:l.Z.body,xs:1,children:[(0,d.jsx)(i.Z,{className:l.Z.imageColumn,xl:4,children:(0,d.jsx)(m,{...n})}),(0,d.jsx)(i.Z,{xl:8,children:t})]})})})}},1791:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(9806),a=(n(2791),n(3360)),i=n(2381),r=n(184);function o(e){let{className:t,href:n,icon:o}=e;const{isHovering:l,...c}=(0,i.Z)();return(0,r.jsx)(a.Z,{className:t,href:n,target:"_blank",variant:"link",...c,children:(0,r.jsx)(s.G,{icon:o,size:"2xl"})})}},2982:(e,t,n)=>{n.d(t,{Z:()=>s});const s="Stephen Vergara"},8025:(e,t,n)=>{n.d(t,{Z:()=>s});const s=(0,n(2791).createContext)({color:"#2e3134",setColor:()=>{}})},7093:(e,t,n)=>{n.d(t,{Z:()=>r});var s=n(2791),a=n(8025),i=n(5791);function r(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const{color:t}=s.useContext(a.Z),n=(0,i.Z)();return{backgroundColor:"".concat(t).concat(e),color:n}}},4769:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(2791),a=n(8025);function i(){const{color:e}=s.useContext(a.Z);return{color:e}}},2381:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(2791);function a(){const[e,t]=s.useState(!1);return{isHovering:e,onMouseEnter:()=>{t(!0)},onMouseLeave:()=>{t(!1)}}}},5791:(e,t,n)=>{n.d(t,{Z:()=>c});var s=n(2791),a=n(8025);const i=128,r=.299,o=.587,l=.114;function c(){const{color:e}=s.useContext(a.Z);return s.useMemo((()=>{const t=Math.floor((e.length-1)/3),n=((e,t)=>e.match(new RegExp(".{".concat(t,"}"),"g")))(e.slice(1),t),[s,a,c]=(null!==n&&void 0!==n?n:[]).map((e=>parseInt(e.repeat(2/e.length),16)));return Math.round((null!==s&&void 0!==s?s:0)*r+(null!==a&&void 0!==a?a:0)*o+(null!==c&&void 0!==c?c:0)*l)>i?"black":"white"}),[e])}},9415:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(2791);function a(e){return Object.assign(s.lazy(e),{preload:e})}},6638:(e,t,n)=>{n.d(t,{Z:()=>s});const s={body:"aboutMeCardBody_body__px0Z-",base:"aboutMeCardBody_base__HWSO5",image:"aboutMeCardBody_image__r0pwR",glimmer:"aboutMeCardBody_glimmer__ztngv",imageColumn:"aboutMeCardBody_imageColumn__Decwz"}},775:(e,t,n)=>{n.d(t,{Z:()=>s});const s={buttons:"footer_buttons__X-wEA",resume:"footer_resume__j2AKe"}},5943:(e,t,n)=>{n.d(t,{Z:()=>s});const s={github:"linkButton_github__ltM-y",linkedin:"linkButton_linkedin__MRpaF",steam:"linkButton_steam__qizUa",discord:"linkButton_discord__zToU1"}},5:(e,t,n)=>{n.d(t,{Z:()=>s});const s={page:"pageMargin_page__oYkHI"}}}]); -//# sourceMappingURL=101.2074eee1.chunk.js.map \ No newline at end of file diff --git a/static/js/101.2074eee1.chunk.js.map b/static/js/101.2074eee1.chunk.js.map deleted file mode 100644 index b1a9fbf..0000000 --- a/static/js/101.2074eee1.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/101.2074eee1.chunk.js","mappings":"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","sources":["webpack://sverg84.github.io/./src/impl/styles/background.module.scss?ebba","impl/components/AppBackground.tsx","impl/hooks/useBackgroundStyle.ts","webpack://sverg84.github.io/./src/impl/styles/body/about/text.module.scss?83aa","impl/components/body/about/AboutMeText.tsx","impl/components/body/about/AboutMeCardBody.tsx","webpack://sverg84.github.io/./src/impl/styles/body/buttons/email.module.scss?9739","impl/components/buttons/EmailButton.tsx","impl/components/buttons/GitHubButton.tsx","impl/components/buttons/LinkedInButton.tsx","webpack://sverg84.github.io/./src/impl/styles/body/buttons/resume.module.scss?5a4c","impl/components/buttons/ResumeButton.tsx","impl/hooks/usePageColorButtonStyle.ts","impl/components/body/about/AboutMeCardFooter.tsx","impl/components/body/about/AboutMeCard.tsx","webpack://sverg84.github.io/./src/impl/styles/body/experience/card.module.scss?9595","impl/components/body/BodyCard.tsx","webpack://sverg84.github.io/./src/impl/styles/body/experience/timeline.module.scss?0093","webpack://sverg84.github.io/./src/impl/styles/body/experience/timelineItem.module.scss?2c42","webpack://sverg84.github.io/./src/impl/styles/body/experience/skillsList.module.scss?e95e","impl/components/body/experience/ExperienceTimelineSkillsList.tsx","impl/components/body/experience/ExperienceTimelineItem.tsx","impl/hooks/useBorderColorStyle.ts","impl/components/body/experience/ExperienceTimeline.tsx","impl/components/body/experience/ExperienceCard.tsx","impl/consts/EventKeys.ts","webpack://sverg84.github.io/./src/impl/styles/body/skills/item.module.scss?a30c","impl/components/body/skills/SkillsItemToggle.tsx","impl/components/body/skills/SkillsItem.tsx","impl/components/body/skills/SkillsCard.tsx","impl/components/body/JobSeekerBody.tsx","impl/components/nav/JobSeekerNavWrapper.tsx","impl/components/AppJobSeeker.tsx","webpack://sverg84.github.io/./src/impl/styles/tooltip.module.scss?f869","impl/components/AppTooltip.tsx","webpack://sverg84.github.io/./src/impl/styles/nav/navbar.module.scss?5af6","webpack://sverg84.github.io/./src/impl/styles/nav/colorPicker.module.scss?f351","impl/components/nav/PageNavColorPicker.tsx","impl/components/nav/PageNavLatestPushTimestamp.tsx","impl/components/nav/PageNavBar.tsx","impl/components/Page.tsx","webpack://sverg84.github.io/./src/impl/styles/pageBody.module.scss?5416","impl/components/body/PageBody.tsx","impl/components/body/about/AboutMeCardLazyImage.tsx","impl/components/body/about/AboutMeCardBodyContainer.tsx","impl/components/buttons/ExternalLinkButton.tsx","impl/consts/MyName.ts","impl/contexts/ColorContext.ts","impl/hooks/useBackgroundColorStyle.ts","impl/hooks/useColorStyle.ts","impl/hooks/useHover.ts","impl/hooks/useTextColorForCustomBackground.ts","impl/utils/lazyWithPreload.ts","webpack://sverg84.github.io/./src/impl/styles/body/about/aboutMeCardBody.module.scss?747a","webpack://sverg84.github.io/./src/impl/styles/body/about/footer.module.scss?b32c","webpack://sverg84.github.io/./src/impl/styles/body/buttons/linkButton.module.scss?4ee4","webpack://sverg84.github.io/./src/impl/styles/pageMargin.module.scss?e8bc"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"bg\":\"background_bg__rHR4m\",\"bg3\":\"background_bg3__WZ4Pm\",\"bg2\":\"background_bg2__XB2Tl\",\"slide\":\"background_slide__Sq8xw\"};","import * as React from 'react';\n\nimport useBackgroundStyle from '../hooks/useBackgroundStyle';\nimport styles from '../styles/background.module.scss';\n\nexport default function AppBackground(): React.JSX.Element {\n\tconst color = useBackgroundStyle();\n\treturn (\n\t\t<>\n\t\t\t{[styles.bg, styles.bg2, styles.bg3].map(bg => (\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n}\n","import { useContext } from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useBackgroundStyle(): React.CSSProperties {\n\tconst {color} = useContext(ColorContext);\n\treturn {backgroundImage: `linear-gradient(-60deg, ${color} 50%, white 50%)`};\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"bold\":\"text_bold__TiUuq\",\"italic\":\"text_italic__fvjzk\"};","import classNames from 'classnames';\nimport moment from 'moment';\nimport * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\nimport { Link } from 'react-router-dom';\n\nimport MyName from '../../../consts/MyName';\nimport useColorStyle from '../../../hooks/useColorStyle';\nimport styles from '../../../styles/body/about/text.module.scss';\n\nconst BIRTHDATE: Date = new Date('1998-05-06T10:47:00.000-06:00'); // 6 May 1998 11:47 A.M. US Central Time\n\nfunction Language({language}: {language: string}): React.JSX.Element {\n\tconst color = useColorStyle();\n\treturn (\n\t\t\n\t\t\t{language}\n\t\t\n\t);\n}\n\nexport default function AboutMeText(): React.JSX.Element {\n\tconst color = useColorStyle();\n\tconst age = moment.duration(moment().diff(BIRTHDATE)).years();\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tAbout Me\n\t\t\t\n\t\t\t\n\t\t\t\tFront-End Software Engineer, Web Developer\n\t\t\t\n\t\t\t\n\t\t\t\tHi there! My name is{' '}\n\t\t\t\t\n\t\t\t\t\t{MyName}\n\t\t\t\t\n\t\t\t\t. I am a {age} year-old software engineer with a fondness for user\n\t\t\t\tinterface and user experience (UI/UX) development.\n\t\t\t\n\t\t\t\n\t\t\t\tI started learning to code during my senior year of high school when I\n\t\t\t\ttook an introduction course to {} on a whim,\n\t\t\t\tand I loved learning as much as I could since then! Throughout my time\n\t\t\t\tat university, I applied myself to a substantial amount of coursework in{' '}\n\t\t\t\t{} and {} with\n\t\t\t\ta splash of {},{' '}\n\t\t\t\t{}, and {}.\n\t\t\t\n\t\t\t\n\t\t\t\tAll of my full-time experience (as of Summer 2023) stems from my time at\n\t\t\t\tMeta where I challenged myself further in exploring web programming,\n\t\t\t\tlearning {} and{' '}\n\t\t\t\t{} for the first time in a rigorous,\n\t\t\t\tfast-paced environment.\n\t\t\t\n\t\t\t\n\t\t\t\tSince parting with Meta, I have been self-teaching{' '}\n\t\t\t\t{} in order to keep my UI-building\n\t\t\t\tskills fresh, replete with {} modules.\n\t\t\t\n\t\t\t\n\t\t\t\tClick{' '}\n\t\t\t\t{\n\t\t\t\t\t\n\t\t\t\t\t\there\n\t\t\t\t\t\n\t\t\t\t}{' '}\n\t\t\t\tif you would like to learn more about me beyond my career!\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport MyName from '../../../consts/MyName';\nimport AboutMeCardBodyContainer from './AboutMeCardBodyContainer';\nimport AboutMeText from './AboutMeText';\n\nexport default function AboutMeCardBody(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"email_button__FW+sr\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport useHover from '../../hooks/useHover';\nimport styles from '../../styles/body/buttons/email.module.scss';\n\nexport default function EmailButton(): React.JSX.Element {\n\tconst {isHovering, ...mouseEvents} = useHover();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function GitHubButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function LinkedInButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"resume\":\"resume_resume__92JEE\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport Button from 'react-bootstrap/Button';\n\nimport useHover from '../../hooks/useHover';\nimport usePageColorButtonStyle from '../../hooks/usePageColorButtonStyle';\nimport styles from '../../styles/body/buttons/resume.module.scss';\n\nexport default function ResumeButton(): React.JSX.Element {\n\tconst {isHovering, ...mouseEvents} = useHover();\n\tconst style = usePageColorButtonStyle(isHovering);\n\n\treturn (\n\t\t\n\t\t\tDownload resume\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport useTextColorForCustomBackground from './useTextColorForCustomBackground';\n\nexport default function usePageColorButtonStyle(\n\tisHovering: boolean,\n): React.CSSProperties {\n\tconst {color} = React.useContext(ColorContext);\n\tconst hoverTextColor = useTextColorForCustomBackground();\n\n\tconst borderAndTextColor = isHovering ? hoverTextColor : color;\n\n\treturn {\n\t\tbackgroundColor: isHovering ? color : undefined,\n\t\tborderColor: borderAndTextColor,\n\t\tboxShadow: `4px 4px ${color}`,\n\t\tcolor: borderAndTextColor,\n\t};\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\n\nimport styles from '../../../styles/body/about/footer.module.scss';\nimport EmailButton from '../../buttons/EmailButton';\nimport GitHubButton from '../../buttons/GitHubButton';\nimport LinkedInButton from '../../buttons/LinkedInButton';\nimport ResumeButton from '../../buttons/ResumeButton';\n\nexport default function AboutMeCardFooter(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\n\nimport AboutMeCardBody from './AboutMeCardBody';\nimport AboutMeCardFooter from './AboutMeCardFooter';\n\nexport default function AboutMeCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"card_header__C3ziB\"};","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\n\nimport useColorStyle from '../../hooks/useColorStyle';\nimport styles from '../../styles/body/experience/card.module.scss';\n\ntype Props = Readonly<{\n\tchildren: React.JSX.Element;\n\tid?: string;\n\ttitle: string;\n}>;\n\nexport default function BodyCard({\n\tchildren,\n\tid,\n\ttitle,\n}: Props): React.JSX.Element {\n\tconst color = useColorStyle();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{title}\n\t\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"timeline\":\"timeline_timeline__VfjcF\",\"bar\":\"timeline_bar__V3BAE\"};","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"timelineItem_item__005F5\",\"circle\":\"timelineItem_circle__ADJyP\",\"in\":\"timelineItem_in__PSeNd\",\"fadeInLeft\":\"timelineItem_fadeInLeft__vvxlT\",\"content\":\"timelineItem_content__izpwq\",\"fadeInRight\":\"timelineItem_fadeInRight__uPKi+\",\"header\":\"timelineItem_header__H24TC\",\"tag\":\"timelineItem_tag__k8jMy\"};","// extracted by mini-css-extract-plugin\nexport default {\"list\":\"skillsList_list__-3yy3\",\"skills\":\"skillsList_skills__Q4+OB\"};","import * as React from 'react';\n\nimport styles from '../../../styles/body/experience/skillsList.module.scss';\n\ntype Props = Readonly<{\n\tskillsList: ReadonlyArray;\n\tstyle?: React.CSSProperties;\n}>;\n\nexport default function ExperienceTimelineSkillsList({\n\tskillsList,\n\tstyle,\n}: Props): React.JSX.Element {\n\treturn (\n\t\t

\n\t\t\t\n\t\t\t\tSkills:{' '}\n\t\t\t\n\t\t\t{skillsList.join(', ')}\n\t\t

\n\t);\n}\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useInView } from 'react-intersection-observer';\n\nimport useBackgroundColorStyle from '../../../hooks/useBackgroundColorStyle';\nimport useBorderColorStyle from '../../../hooks/useBorderColorStyle';\nimport useColorStyle from '../../../hooks/useColorStyle';\nimport styles from '../../../styles/body/experience/timelineItem.module.scss';\nimport type { TimelineItemData } from './ExperienceTimeline';\nimport ExperienceTimelineSkillsList from './ExperienceTimelineSkillsList';\n\ntype Props = Readonly<{\n\tdata: TimelineItemData;\n\tisOdd: boolean;\n}>;\n\nexport default function ExperienceTimelineItem({\n\tdata,\n\tisOdd,\n}: Props): React.JSX.Element {\n\tconst background = useBackgroundColorStyle();\n\tconst border = useBorderColorStyle();\n\tconst color = useColorStyle();\n\n\tconst {inView, ref} = useInView({\n\t\ttriggerOnce: true,\n\t\trootMargin: '-200px 0px',\n\t});\n\n\tconst tag = (\n\t\t{data.tag}\n\t);\n\tconst time = ;\n\n\tconst header = isOdd ? (\n\t\t<>\n\t\t\t{tag}\n\t\t\t{time}\n\t\t\n\t) : (\n\t\t<>\n\t\t\t{time}\n\t\t\t{tag}\n\t\t\n\t);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t
{header}
\n\t\t\t\t
{data.title}
\n\t\t\t\t\n\t\t\t\t{data.description}\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useBorderColorStyle(): React.CSSProperties {\n\tconst {color} = React.useContext(ColorContext);\n\n\treturn {borderColor: color};\n}\n","import * as React from 'react';\n\nimport useBackgroundColorStyle from '../../../hooks/useBackgroundColorStyle';\nimport styles from '../../../styles/body/experience/timeline.module.scss';\nimport AppTooltip from '../../AppTooltip';\nimport ExperienceTimelineItem from './ExperienceTimelineItem';\n\nexport type TimelineItemData = Readonly<{\n\tdescription: React.JSX.Element;\n\tskillsList: ReadonlyArray;\n\tsrc: string;\n\ttag: string;\n\ttimeframe: string;\n\ttitle: string;\n}>;\n\nconst items: ReadonlyArray = [\n\t{\n\t\tdescription: (\n\t\t\t

\n\t\t\t\tFull-stack product software engineer (PHP/Hack and JS/React) for the Org\n\t\t\t\tEffectiveness team within the Enterprise Engineering division. Released\n\t\t\t\tmultiple high-priority stakeholder feature requests pertaining to\n\t\t\t\tHR-sensitive employee data. Leader of team app performance optimization\n\t\t\t\topportunities.\n\t\t\t

\n\t\t),\n\t\tskillsList: ['PHP', 'React', 'GraphQL', 'MySQL'],\n\t\tsrc: '/meta.gif',\n\t\ttag: 'Meta Platforms, Inc.',\n\t\ttimeframe: '2020-2023',\n\t\ttitle: 'Software Engineer',\n\t},\n\n\t{\n\t\tdescription: (\n\t\t\t

\n\t\t\t\tIntern for the Traffic Analytics team within the Infrastructure\n\t\t\t\tdivision. Created monitoring tool for team oncall to measure network\n\t\t\t\tpacket failures with interactive web page.\n\t\t\t

\n\t\t),\n\t\tskillsList: ['C++', 'Python', 'Apache Thrift', 'MySQL'],\n\t\tsrc: '/meta.gif',\n\t\ttag: 'Meta Platforms, Inc.',\n\t\ttimeframe: 'Summer 2019',\n\t\ttitle: 'Software Engineer Intern',\n\t},\n\t{\n\t\tdescription: (\n\t\t\t

\n\t\t\t\tAssistant at the university's Transportation Research Institute as part\n\t\t\t\tof the Undergraduate Research Opportunity Program (UROP). Participated\n\t\t\t\tin{' '}\n\t\t\t\t{' '}\n\t\t\t\tstudy for Defence Research & Development Canada (DRDC).\n\t\t\t

\n\t\t),\n\t\tskillsList: ['MATLAB', 'Wolfram Mathematica'],\n\t\tsrc: '/umich.jpeg',\n\t\ttag: 'University of Michigan',\n\t\ttimeframe: '2016-2017',\n\t\ttitle: 'Research Assistant',\n\t},\n];\n\nexport default function ExperienceTimeline(): React.JSX.Element {\n\tconst color = useBackgroundColorStyle();\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t{items.map((item, idx) => (\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t);\n}\n","import * as React from 'react';\n\nimport BodyCard from '../BodyCard';\nimport ExperienceTimeline from './ExperienceTimeline';\n\nexport default function ExperienceCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","const EventKeys = {\n\tcpp: 'C++',\n\tcsharp: 'C#',\n\tgraphql: 'GraphQL',\n\thack: 'Hack',\n\tmysql: 'MySQL',\n\tpython: 'Python',\n\treact: 'React',\n\ttypescript: 'TypeScript',\n} as const;\n\nexport default EventKeys;\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"item_button__GmSRm\",\"expand\":\"item_expand__4Sxrl\",\"firstExpand\":\"item_firstExpand__kSWZa\",\"collapse\":\"item_collapse__JYgde\",\"header\":\"item_header__w8Yjy\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport EventKeys from '../../../consts/EventKeys';\nimport useBackgroundColorStyle from '../../../hooks/useBackgroundColorStyle';\nimport styles from '../../../styles/body/skills/item.module.scss';\n\ntype Props = Readonly<{\n\teventKey: string;\n}>;\n\nexport default function SkillsItemToggle({eventKey}: Props): React.JSX.Element {\n\tconst {activeEventKey} = React.useContext(AccordionContext);\n\tconst color = useBackgroundColorStyle();\n\tconst onClick = useAccordionButton(eventKey);\n\n\tconst isCurrentEventKey = activeEventKey === eventKey;\n\n\tconst classnames: Array = [];\n\n\tif (isCurrentEventKey) {\n\t\tclassnames.push(\n\t\t\teventKey === EventKeys.react ? styles.firstExpand : styles.expand,\n\t\t);\n\t} else {\n\t\tclassnames.push(styles.collapse);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{eventKey}\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport AccordionCollapse from 'react-bootstrap/esm/AccordionCollapse';\nimport AccordionItem from 'react-bootstrap/esm/AccordionItem';\nimport Card from 'react-bootstrap/esm/Card';\n\nimport SkillsItemToggle from './SkillsItemToggle';\n\ntype Props = Readonly<{\n\tchildren: React.ReactNode;\n\teventKey: string;\n}>;\n\nexport default function SkillsItem({\n\tchildren,\n\teventKey,\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Accordion from 'react-bootstrap/Accordion';\n\nimport EventKeys from '../../../consts/EventKeys';\nimport BodyCard from '../BodyCard';\nimport SkillsItem from './SkillsItem';\n\nexport default function SkillsCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tRamped up on React skills while transitioning from web infra (PHP) to\n\t\t\t\t\tUI programming in my full-time position at Meta. Developed an\n\t\t\t\t\texpertise in applying Hooks, code-splitting APIs, and React18\n\t\t\t\t\tconcurrency features to create seamless user experiences while\n\t\t\t\t\toptimizing app/page performance. Expanding upon Meta-internal skills\n\t\t\t\t\twith public React app building (e.g., this web page!).\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tSelf-taught during the summer of 2023 in order to create a modern\n\t\t\t\t\tReact app at home while still enforcing type safety. Very similar to\n\t\t\t\t\tMeta's \"Flow\" but with broader appeal.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tFirst programming language learned while working full-time at Meta.\n\t\t\t\t\tBuilt multiple scalable features by focusing on asynchronous\n\t\t\t\t\tprogramming. Moved to implementing GraphQL queries and mutations on\n\t\t\t\t\tthe server side in addition to server-calling React routes and their\n\t\t\t\t\tcorresponding components.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tLearned back-end GraphQL field implementation skills while learning\n\t\t\t\t\tHack, and gained client-side GraphQL experience in tandem with coding\n\t\t\t\t\tin React while full-time at Meta.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tDatabase management skills applied during both the internship and\n\t\t\t\t\tfull-time Meta experiences. MySQL queries created for mass aggregates\n\t\t\t\t\tof traffic data in C++/Python, queries and mutations optimized for\n\t\t\t\t\temployee directory information in Hack.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tFirst applied in class projects around web development (e.g., Flask,\n\t\t\t\t\tJinja, REST) while at the University of Michigan, later used to create\n\t\t\t\t\tdata pipeline jobs for traffic aggregation as an intern at Meta.\n\t\t\t\t\tPresently, using FastAPI and PostgreSQL for personal projects.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tFirst programming language learned as an undergraduate at the\n\t\t\t\t\tUniversity of Michigan. Used for package building and app compression\n\t\t\t\t\twhile coding as a Meta intern. Skills in asynchronous programming\n\t\t\t\t\t(e.g., threads, mutexes, semaphores, etc.) and file system management\n\t\t\t\t\tas part of a course on operating systems.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tOnboarded as part of university senior capstone project at Michigan.\n\t\t\t\t\tGained experience in C# in order to create a video game as part of a\n\t\t\t\t\tteam of four (4) using the Unity game engine.\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport AboutMeCard from './about/AboutMeCard';\nimport ExperienceCard from './experience/ExperienceCard';\nimport PageBody from './PageBody';\nimport SkillsCard from './skills/SkillsCard';\n\nexport default function JobSeekerBody(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nconst SCREEN_WIDTH_BREAKPOINT = 835;\n\nexport default function JobSeekerNavWrapper(): React.JSX.Element | null {\n\tconst [isDesktop, setIsDesktop] = React.useState(\n\t\twindow.innerWidth > SCREEN_WIDTH_BREAKPOINT,\n\t);\n\n\tconst [Module, setModule] = React.useState React.JSX.Element\n\t> | null>(null);\n\n\tconst updateMedia = () => {\n\t\tsetIsDesktop(window.innerWidth > SCREEN_WIDTH_BREAKPOINT);\n\t};\n\n\tReact.useEffect(() => {\n\t\twindow.addEventListener('resize', updateMedia);\n\t\treturn () => window.removeEventListener('resize', updateMedia);\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tconst conditionalImport = async () => {\n\t\t\tsetModule(\n\t\t\t\tReact.lazy(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait (isDesktop\n\t\t\t\t\t\t\t? import('./JobSeekerNavBreadcrumbs')\n\t\t\t\t\t\t\t: import('./JobSeekerNavDropdown')),\n\t\t\t\t),\n\t\t\t);\n\t\t};\n\t\tconditionalImport();\n\t}, [isDesktop]);\n\n\treturn Module != null ? (\n\t\t\n\t\t\t\n\t\t\n\t) : null;\n}\n","import * as React from 'react';\n\nimport AppBackground from './AppBackground';\nimport JobSeekerBody from './body/JobSeekerBody';\nimport JobSeekerNavWrapper from './nav/JobSeekerNavWrapper';\nimport Page from './Page';\n\nexport function Component(): React.JSX.Element {\n\treturn (\n\t\t}\n\t\t\tbreadcrumbs={}>\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tooltip\":\"tooltip_tooltip__5pJPW\"};","import * as React from 'react';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport { useInView } from 'react-intersection-observer';\n\nimport styles from '../styles/tooltip.module.scss';\n\ntype Props = Readonly<{\n\tcontent: string;\n\ttooltip: string;\n}>;\n\nexport default function AppTooltip({\n\tcontent,\n\ttooltip,\n}: Props): React.JSX.Element {\n\tconst {ref, entry} = useInView({\n\t\trootMargin: '-50% 0px 0px',\n\t});\n\n\treturn (\n\t\t{tooltip}}>\n\t\t\t{content}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"brand\":\"navbar_brand__zDvLc\",\"navbar\":\"navbar_navbar__pEuvw\",\"pushTime\":\"navbar_pushTime__jdH3p\",\"rightContent\":\"navbar_rightContent__ikOZ0\"};","// extracted by mini-css-extract-plugin\nexport default {\"fallback\":\"colorPicker_fallback__pvhTA\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport NavDropdown from 'react-bootstrap/esm/NavDropdown';\nimport Spinner from 'react-bootstrap/Spinner';\n\nimport styles from '../../styles/nav/colorPicker.module.scss';\nimport lazyWithPreload from '../../utils/lazyWithPreload.ts';\n\nconst PageNavColorPickerMenu = lazyWithPreload(() =>\n\timport('./PageNavColorPickerMenu.tsx'),\n);\n\nexport default function PageNavColorPicker(): React.JSX.Element {\n\tconst onMouseEnter = () => {\n\t\tPageNavColorPickerMenu.preload();\n\t};\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t\tonMouseEnter={onMouseEnter}>\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}>\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport AppTooltip from '../AppTooltip';\n\n// https://stackoverflow.com/questions/6108819/javascript-timestamp-to-relative-time\nconst RTF = new Intl.RelativeTimeFormat(undefined, {numeric: 'auto'});\n\nconst UNITS: {unit: Intl.RelativeTimeFormatUnit; ms: number}[] = [\n\t{unit: 'year', ms: 31536000000},\n\t{unit: 'month', ms: 2628000000},\n\t{unit: 'day', ms: 86400000},\n\t{unit: 'hour', ms: 3600000},\n\t{unit: 'minute', ms: 60000},\n\t{unit: 'second', ms: 1000},\n];\n\nfunction relativeTimeFromElapsed(elapsed: number): string {\n\tfor (const {unit, ms} of UNITS) {\n\t\tif (Math.abs(elapsed) >= ms || unit === 'second') {\n\t\t\treturn RTF.format(Math.round(elapsed / ms), unit);\n\t\t}\n\t}\n\treturn '';\n}\n\nexport default function PageNavLatestPushTimestamp(): React.JSX.Element | null {\n\tconst [lastUpdatedTime, setLastUpdatedTime] = React.useState(\n\t\tnull,\n\t);\n\n\tReact.useEffect(() => {\n\t\tconst fetchTime = async () => {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\n\t\t\t\t\t'https://api.github.com/repos/sverg84/sverg84.github.io',\n\t\t\t\t);\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`${response.status}: ${response.statusText}`);\n\t\t\t\t}\n\t\t\t\tconst data = await response.json();\n\t\t\t\tconst updateTime: string = data['pushed_at'];\n\t\t\t\tsetLastUpdatedTime(new Date(updateTime));\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(error);\n\t\t\t}\n\t\t};\n\n\t\tfetchTime();\n\t}, []);\n\n\tif (lastUpdatedTime == null) {\n\t\treturn null;\n\t}\n\n\tconst timeSinceLastUpdate = lastUpdatedTime.getTime() - new Date().getTime();\n\n\treturn (\n\t\t<>\n\t\t\tLast Updated:{' '}\n\t\t\t\n\t\t\n\t);\n}\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport Container from 'react-bootstrap/Container';\nimport Col from 'react-bootstrap/esm/Col';\nimport Navbar from 'react-bootstrap/Navbar';\nimport { Link } from 'react-router-dom';\n\nimport MyName from '../../consts/MyName.ts';\nimport useBackgroundColorStyle from '../../hooks/useBackgroundColorStyle.ts';\nimport navStyles from '../../styles/nav/navbar.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\nimport PageNavColorPicker from './PageNavColorPicker.tsx';\nimport PageNavLatestPushTimestamp from './PageNavLatestPushTimestamp.tsx';\n\ntype Props = Readonly<{\n\tbreadcrumbs?: React.JSX.Element | undefined;\n}>;\n\nexport default function PageNavBar({breadcrumbs}: Props): React.JSX.Element {\n\tconst style = useBackgroundColorStyle();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{MyName}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{breadcrumbs}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport PageNavBar from './nav/PageNavBar';\n\ntype Props = Readonly<{\n\tbackground: React.JSX.Element;\n\tbreadcrumbs?: React.JSX.Element;\n\tchildren: React.ReactNode;\n}>;\n\nexport default function Page({\n\tbackground,\n\tbreadcrumbs,\n\tchildren,\n}: Props): React.JSX.Element {\n\tconst [hex, setHex] = useState('#2e3134');\n\n\treturn (\n\t\t\n\t\t\t{background}\n\t\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"pageBody_body__aNOKo\"};","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport pageBodyStyles from '../../styles/pageBody.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\n\ntype Props = Readonly<{\n\tchildren: React.ReactNode;\n}>;\n\nexport default function PageBody({children}: Props): React.JSX.Element {\n\treturn (\n\t\t
\n\t\t\t{children}\n\t\t
\n\t);\n}\n","import * as React from 'react';\nimport Placeholder from 'react-bootstrap/esm/Placeholder';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from '../about/AboutMeCardImage';\n\nconst AboutMeCardImage = React.lazy(\n\tasync () => await import('../about/AboutMeCardImage'),\n);\n\nexport default function AboutMeCardLazyImage(\n\tprops: ImageProps,\n): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t}>\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Col from 'react-bootstrap/Col';\nimport Container from 'react-bootstrap/Container';\nimport Row from 'react-bootstrap/Row';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from './AboutMeCardImage';\nimport AboutMeCardLazyImage from './AboutMeCardLazyImage';\n\ntype Props = Readonly<{\n\tchildren: React.JSX.Element;\n}> &\n\tImageProps;\n\nexport default function AboutMeCardBodyContainer({\n\tchildren,\n\t...imageProps\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport Button from 'react-bootstrap/Button';\n\nimport useHover from '../../hooks/useHover';\n\ntype Props = Readonly<{\n\tclassName?: string;\n\thref: string;\n\ticon: IconProp;\n}>;\n\nexport default function ExternalLinkButton({\n\tclassName,\n\thref,\n\ticon,\n}: Props): React.JSX.Element {\n\tconst {isHovering: _isHovering, ...mouseEvents} = useHover();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","const MyName: string = \"Stephen Vergara\";\n\nexport default MyName;\n","import { createContext } from 'react';\n\ntype ContextType = Readonly<{\n\tcolor: string;\n\tsetColor: React.Dispatch>;\n}>;\n\nexport default createContext({\n\tcolor: '#2e3134',\n\tsetColor: () => {},\n});\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport useTextColorForCustomBackground from './useTextColorForCustomBackground';\n\nexport default function useBackgroundColorStyle(\n\talpha: string = '',\n): React.CSSProperties {\n\tconst {color} = React.useContext(ColorContext);\n\tconst textColor = useTextColorForCustomBackground();\n\n\treturn {backgroundColor: `${color}${alpha}`, color: textColor};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useColorStyle(): React.CSSProperties {\n const {color} = React.useContext(ColorContext);\n\n return {color};\n}","import * as React from 'react';\n\ntype ReturnType = Readonly<{\n\tisHovering: boolean;\n\tonMouseEnter: () => void;\n\tonMouseLeave: () => void;\n}>;\n\nexport default function useHover(): ReturnType {\n\tconst [isHovering, setIsHovering] = React.useState(false);\n\n\tconst onMouseEnter = () => {\n\t\tsetIsHovering(true);\n\t};\n\n\tconst onMouseLeave = () => {\n\t\tsetIsHovering(false);\n\t};\n\n\treturn {isHovering, onMouseEnter, onMouseLeave};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nconst BRIGHTNESS_THRESHOLD = 128;\n\n// NTSC luminance formula (linear approximation): Y = .299r' + .587g' + .114b'\nconst RED_LUMINANCE_COEFFICIENT = 0.299;\nconst GREEN_LUMINANCE_COEFFICIENT = 0.587;\nconst BLUE_LUMINANCE_COEFFICIENT = 0.114;\n\nexport default function useTextColorForCustomBackground(): string {\n\tconst {color} = React.useContext(ColorContext);\n\n\treturn React.useMemo(() => {\n\t\tconst getChunksFromString = (st: string, chunkSize: number) =>\n\t\t\tst.match(new RegExp(`.{${chunkSize}}`, 'g'));\n\n\t\tconst convertHexUnitTo256 = (hexStr: string) =>\n\t\t\tparseInt(hexStr.repeat(2 / hexStr.length), 16);\n\n\t\tconst chunkSize = Math.floor((color.length - 1) / 3);\n\t\tconst hexArr = getChunksFromString(color.slice(1), chunkSize);\n\n\t\tconst [red, green, blue] = (hexArr ?? []).map(convertHexUnitTo256);\n\n\t\tconst brightness = Math.round(\n\t\t\t(red ?? 0) * RED_LUMINANCE_COEFFICIENT +\n\t\t\t\t(green ?? 0) * GREEN_LUMINANCE_COEFFICIENT +\n\t\t\t\t(blue ?? 0) * BLUE_LUMINANCE_COEFFICIENT,\n\t\t);\n\n\t\treturn brightness > BRIGHTNESS_THRESHOLD ? 'black' : 'white';\n\t}, [color]);\n}\n","import * as React from 'react';\n\ninterface PreloadedExoticComponent>\n\textends React.LazyExoticComponent {\n\tpreload: () => {};\n}\n\nexport default function lazyWithPreload>(\n\tfactory: () => Promise<{\n\t\tdefault: T;\n\t}>,\n): PreloadedExoticComponent {\n\treturn Object.assign(React.lazy(factory), {preload: factory});\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"aboutMeCardBody_body__px0Z-\",\"base\":\"aboutMeCardBody_base__HWSO5\",\"image\":\"aboutMeCardBody_image__r0pwR\",\"glimmer\":\"aboutMeCardBody_glimmer__ztngv\",\"imageColumn\":\"aboutMeCardBody_imageColumn__Decwz\"};","// extracted by mini-css-extract-plugin\nexport default {\"buttons\":\"footer_buttons__X-wEA\",\"resume\":\"footer_resume__j2AKe\"};","// extracted by mini-css-extract-plugin\nexport default {\"github\":\"linkButton_github__ltM-y\",\"linkedin\":\"linkButton_linkedin__MRpaF\",\"steam\":\"linkButton_steam__qizUa\",\"discord\":\"linkButton_discord__zToU1\"};","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"pageMargin_page__oYkHI\"};"],"names":["AppBackground","color","useContext","ColorContext","backgroundImage","concat","useBackgroundStyle","_jsx","_Fragment","children","styles","bg","bg2","bg3","map","className","style","BIRTHDATE","Date","Language","_ref","language","useColorStyle","bold","AboutMeText","age","moment","diff","years","_jsxs","Card","Text","as","classNames","italic","MyName","Link","to","AboutMeCardBody","AboutMeCardBodyContainer","alt","src","EmailButton","isHovering","mouseEvents","useHover","Button","button","href","FontAwesomeIcon","fade","icon","_faEnvelope","size","GitHubButton","ExternalLinkButton","github","_faGithub","LinkedInButton","linkedin","_faLinkedin","ResumeButton","React","hoverTextColor","useTextColorForCustomBackground","borderAndTextColor","backgroundColor","undefined","borderColor","boxShadow","usePageColorButtonStyle","resume","target","variant","beat","_faDownload","AboutMeCardFooter","Footer","Row","xs","sm","md","lg","Col","buttons","AboutMeCard","id","BodyCard","title","Header","header","Body","ExperienceTimelineSkillsList","skillsList","list","skills","join","ExperienceTimelineItem","data","isOdd","background","useBackgroundColorStyle","border","useBorderColorStyle","inView","ref","useInView","triggerOnce","rootMargin","tag","time","timeframe","item","content","in","loading","width","description","circle","items","AppTooltip","tooltip","ExperienceTimeline","timeline","bar","idx","ExperienceCard","cpp","csharp","graphql","hack","mysql","python","react","typescript","SkillsItemToggle","eventKey","activeEventKey","AccordionContext","onClick","useAccordionButton","isCurrentEventKey","classnames","push","EventKeys","firstExpand","expand","collapse","_faChevronUp","_faChevronDown","SkillsItem","AccordionItem","AccordionCollapse","SkillsCard","Accordion","defaultActiveKey","JobSeekerBody","PageBody","SCREEN_WIDTH_BREAKPOINT","JobSeekerNavWrapper","isDesktop","setIsDesktop","window","innerWidth","Module","setModule","updateMedia","addEventListener","removeEventListener","async","conditionalImport","fallback","Component","Page","breadcrumbs","entry","OverlayTrigger","placement","isIntersecting","overlay","Tooltip","PageNavColorPickerMenu","lazyWithPreload","PageNavColorPicker","NavDropdown","align","renderMenuOnMount","_faPalette","bounce","onMouseEnter","preload","Spinner","animation","RTF","Intl","RelativeTimeFormat","numeric","UNITS","unit","ms","relativeTimeFromElapsed","elapsed","Math","abs","format","round","PageNavLatestPushTimestamp","lastUpdatedTime","setLastUpdatedTime","response","fetch","ok","Error","status","statusText","updateTime","json","error","console","warn","fetchTime","timeSinceLastUpdate","getTime","toLocaleString","PageNavBar","Navbar","sticky","Container","pageStyles","page","navStyles","navbar","brand","pushTime","rightContent","hex","setHex","useState","Provider","value","setColor","pageBodyStyles","body","AboutMeCardImage","AboutMeCardLazyImage","props","Placeholder","glimmer","imageProps","imageColumn","xl","_isHovering","createContext","alpha","arguments","length","textColor","setIsHovering","onMouseLeave","BRIGHTNESS_THRESHOLD","RED_LUMINANCE_COEFFICIENT","GREEN_LUMINANCE_COEFFICIENT","BLUE_LUMINANCE_COEFFICIENT","chunkSize","floor","hexArr","getChunksFromString","st","match","RegExp","slice","red","green","blue","hexStr","parseInt","repeat","factory","Object","assign"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/101.9f7b58b4.chunk.js b/static/js/101.9f7b58b4.chunk.js new file mode 100644 index 0000000..71bcfc8 --- /dev/null +++ b/static/js/101.9f7b58b4.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunksverg84_github_io=self.webpackChunksverg84_github_io||[]).push([[101],{1101:(e,t,n)=>{n.r(t),n.d(t,{Component:()=>_e});var s=n(2791),a=n(8025);const i={bg:"background_bg__rHR4m",bg3:"background_bg3__WZ4Pm",bg2:"background_bg2__XB2Tl",slide:"background_slide__Sq8xw"};var r=n(184);function o(){const e=function(){const[e]=(0,s.useContext)(a.Z);return{backgroundImage:"linear-gradient(-60deg, ".concat(e," 50%, white 50%)")}}();return(0,r.jsx)(r.Fragment,{children:[i.bg,i.bg2,i.bg3].map((t=>(0,r.jsx)("div",{className:t,style:e},t)))})}var l=n(8957),c=n(2982),d=n(8188),u=n(1694),m=n.n(u),h=n(2426),g=n.n(h),p=n(1087),x=n(4769);const f={bold:"text_bold__TiUuq",italic:"text_italic__fvjzk"},j=new Date("1998-05-06T10:47:00.000-06:00");function _(e){let{language:t}=e;const n=(0,x.Z)();return(0,r.jsx)("span",{className:f.bold,style:n,children:t})}function b(){const e=(0,x.Z)(),t=g().duration(g()().diff(j)).years();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l.Z.Text,{as:"h2",className:m()("text-center","text-xl-start"),style:e,children:"About Me"}),(0,r.jsx)(l.Z.Text,{as:"h6",className:m()(f.italic,"text-center","text-xl-start"),children:"Front-End Software Engineer, Web Developer"}),(0,r.jsxs)(l.Z.Text,{children:["Hi there! My name is"," ",(0,r.jsx)("span",{className:m()(f.bold,f.italic),style:e,children:c.Z}),". I am a ",t," year-old software engineer with a fondness for user interface and user experience (UI/UX) development."]}),(0,r.jsxs)(l.Z.Text,{children:["I started learning to code during my senior year of high school when I took an introduction course to ",(0,r.jsx)(_,{language:"Java"})," on a whim, and I loved learning as much as I could since then! Throughout my time at university, I applied myself to a substantial amount of coursework in"," ",(0,r.jsx)(_,{language:"C++"})," and ",(0,r.jsx)(_,{language:"Python"})," with a splash of ",(0,r.jsx)(_,{language:"JavaScript"}),","," ",(0,r.jsx)(_,{language:"OCaml"}),", and ",(0,r.jsx)(_,{language:"C#"}),"."]}),(0,r.jsxs)(l.Z.Text,{children:["All of my full-time experience (as of Summer 2023) stems from my time at Meta where I challenged myself further in exploring web programming, learning ",(0,r.jsx)(_,{language:"PHP"})," and"," ",(0,r.jsx)(_,{language:"React"})," for the first time in a rigorous, fast-paced environment."]}),(0,r.jsxs)(l.Z.Text,{children:["Since parting with Meta, I have been self-teaching"," ",(0,r.jsx)(_,{language:"TypeScript"})," in order to keep my UI-building skills fresh, replete with ",(0,r.jsx)(_,{language:"SCSS"})," modules."]}),(0,r.jsxs)(l.Z.Text,{children:["Click"," ",(0,r.jsx)(p.rU,{className:f.bold,style:e,to:"/personal",children:"here"})," ","if you would like to learn more about me beyond my career!"]})]})}function v(){return(0,r.jsx)(d.Z,{alt:"Picture of ".concat(c.Z),src:"/sverg.jpeg",children:(0,r.jsx)(b,{})})}var y=n(2677),Z=n(9743),k=n(775),w=n(9841),M=n(9806),C=n(3360),S=n(2381);const N={button:"email_button__FW+sr"};function I(){const{isHovering:e,...t}=(0,S.Z)();return(0,r.jsx)(C.Z,{className:N.button,href:"mailto:sverg84@gmail.com",...t,children:(0,r.jsx)(M.G,{fade:e,icon:w.FU,size:"2xl"})})}var T=n(8036),E=n(5943),L=n(1791);function P(){return(0,r.jsx)(L.Z,{className:E.Z.github,href:"https://github.com/sverg84",icon:T.zh})}var R=n(1561);function H(){return(0,r.jsx)(L.Z,{className:E.Z.linkedin,href:"https://www.linkedin.com/in/stephen-vergara-2bab8614b/",icon:R.D9})}var z=n(517),F=n(5791);const B={resume:"resume_resume__92JEE"};function K(){const{isHovering:e,...t}=(0,S.Z)(),n=function(e){const[t]=s.useContext(a.Z),n=(0,F.Z)(),i=e?n:t;return{backgroundColor:e?t:void 0,borderColor:i,boxShadow:"4px 4px ".concat(t),color:i}}(e);return(0,r.jsxs)(C.Z,{className:B.resume,href:"/sverg_resume.pdf",style:n,target:"_blank",variant:"outline-light",...t,children:[(0,r.jsx)("span",{children:"Download resume"}),(0,r.jsx)(M.G,{beat:e,icon:z.q7})]})}function U(){return(0,r.jsx)(l.Z.Footer,{children:(0,r.jsxs)(Z.Z,{className:"gy-3",xs:1,sm:2,md:2,lg:3,children:[(0,r.jsx)(y.Z,{className:k.Z.resume,children:(0,r.jsx)(K,{})}),(0,r.jsx)(y.Z,{className:k.Z.resume,children:(0,r.jsx)(I,{})}),(0,r.jsxs)(y.Z,{className:k.Z.buttons,sm:12,md:12,children:[(0,r.jsx)(P,{}),(0,r.jsx)(H,{})]})]})})}function D(){return(0,r.jsxs)(l.Z,{id:"about",children:[(0,r.jsx)(v,{}),(0,r.jsx)(U,{})]})}const A={header:"card_header__C3ziB"};function q(e){let{children:t,id:n,title:s}=e;const a=(0,x.Z)();return(0,r.jsxs)(l.Z,{id:n,children:[(0,r.jsx)(l.Z.Header,{as:"h2",className:A.header,style:a,children:s}),(0,r.jsx)(l.Z.Body,{children:t})]})}var O=n(7093);const G={timeline:"timeline_timeline__VfjcF",bar:"timeline_bar__V3BAE"};var Q=n(949),W=n(3441);const J={item:"timelineItem_item__005F5",circle:"timelineItem_circle__ADJyP",in:"timelineItem_in__PSeNd",fadeInLeft:"timelineItem_fadeInLeft__vvxlT",content:"timelineItem_content__izpwq",fadeInRight:"timelineItem_fadeInRight__uPKi+",header:"timelineItem_header__H24TC",tag:"timelineItem_tag__k8jMy"},V={list:"skillsList_list__-3yy3",skills:"skillsList_skills__Q4+OB"};function Y(e){let{skillsList:t,style:n}=e;return(0,r.jsxs)("p",{className:V.list,children:[(0,r.jsxs)("span",{className:V.skills,style:n,children:["Skills:"," "]}),t.join(", ")]})}function X(e){let{data:t,isOdd:n}=e;const i=(0,O.Z)(),o=function(){const[e]=s.useContext(a.Z);return{borderColor:e}}(),l=(0,x.Z)(),{inView:c,ref:d}=(0,W.YD)({triggerOnce:!0,rootMargin:"-200px 0px"}),u=(0,r.jsx)("span",{className:J.tag,style:i,children:t.tag}),h=(0,r.jsx)("time",{children:t.timeframe}),g=n?(0,r.jsxs)(r.Fragment,{children:[u,h]}):(0,r.jsxs)(r.Fragment,{children:[h,u]});return(0,r.jsxs)("div",{className:J.item,children:[(0,r.jsxs)("div",{className:m()(J.content,c?J.in:"opacity-0"),ref:d,children:[(0,r.jsx)("div",{className:J.header,children:g}),(0,r.jsx)("h6",{style:l,children:t.title}),(0,r.jsx)("img",{loading:"lazy",src:t.src,width:"100%"}),t.description,(0,r.jsx)(Y,{style:l,skillsList:t.skillsList})]}),(0,r.jsx)("span",{className:J.circle,style:o})]})}const $=[{description:(0,r.jsx)("p",{children:"Full-stack product software engineer (PHP/Hack and JS/React) for the Org Effectiveness team within the Enterprise Engineering division. Released multiple high-priority stakeholder feature requests pertaining to HR-sensitive employee data. Leader of team app performance optimization opportunities."}),skillsList:["PHP","React","GraphQL","MySQL"],src:"/meta.gif",tag:"Meta Platforms, Inc.",timeframe:"2020-2023",title:"Software Engineer"},{description:(0,r.jsx)("p",{children:"Intern for the Traffic Analytics team within the Infrastructure division. Created monitoring tool for team oncall to measure network packet failures with interactive web page."}),skillsList:["C++","Python","Apache Thrift","MySQL"],src:"/meta.gif",tag:"Meta Platforms, Inc.",timeframe:"Summer 2019",title:"Software Engineer Intern"},{description:(0,r.jsxs)("p",{children:["Assistant at the university's Transportation Research Institute as part of the Undergraduate Research Opportunity Program (UROP). Participated in"," ",(0,r.jsx)(Q.Z,{content:"anthropometric",tooltip:"of or relating to the scientific study of the measurements and proportions of the human body"})," ","study for Defence Research & Development Canada (DRDC)."]}),skillsList:["MATLAB","Wolfram Mathematica"],src:"/umich.jpeg",tag:"University of Michigan",timeframe:"2016-2017",title:"Research Assistant"}];function ee(){const e=(0,O.Z)();return(0,r.jsxs)("div",{className:G.timeline,children:[(0,r.jsx)("div",{className:G.bar,style:e}),$.map(((e,t)=>(0,r.jsx)(X,{data:e,isOdd:t%2!==0},e.title)))]})}function te(){return(0,r.jsx)(q,{id:"experience",title:"Experience",children:(0,r.jsx)(ee,{})})}var ne=n(5364),se=n(4559);const ae={cpp:"C++",csharp:"C#",graphql:"GraphQL",hack:"Hack",mysql:"MySQL",python:"Python",react:"React",typescript:"TypeScript"};var ie=n(6055),re=n(7749),oe=n(7361),le=n(9578),ce=n(5912),de=n(7333);const ue={button:"item_button__GmSRm",expand:"item_expand__4Sxrl",firstExpand:"item_firstExpand__kSWZa",collapse:"item_collapse__JYgde",header:"item_header__w8Yjy"};function me(e){let{eventKey:t}=e;const{activeEventKey:n}=s.useContext(ce.Z),a=(0,O.Z)(),i=(0,de.k)(t),o=n===t,l=[];return o?l.push(t===ae.react?ue.firstExpand:ue.expand):l.push(ue.collapse),(0,r.jsxs)("button",{className:m()(l),style:o?a:void 0,onClick:i,children:[t,(0,r.jsx)(M.G,{icon:o?le.mT:oe.pt})]})}function he(e){let{children:t,eventKey:n}=e;return(0,r.jsxs)(re.Z,{eventKey:n,children:[(0,r.jsx)(me,{eventKey:n}),(0,r.jsx)(ie.Z,{eventKey:n,children:(0,r.jsx)(l.Z.Body,{children:t})})]})}function ge(){return(0,r.jsx)(q,{id:"skills",title:"Skills",children:(0,r.jsxs)(se.Z,{defaultActiveKey:ae.react,children:[(0,r.jsx)(he,{eventKey:ae.react,children:"Ramped up on React skills while transitioning from web infra (PHP) to UI programming in my full-time position at Meta. Developed an expertise in applying Hooks, code-splitting APIs, and React18 concurrency features to create seamless user experiences while optimizing app/page performance. Expanding upon Meta-internal skills with public React app building (e.g., this web page!)."}),(0,r.jsx)(he,{eventKey:ae.typescript,children:'Self-taught during the summer of 2023 in order to create a modern React app at home while still enforcing type safety. Very similar to Meta\'s "Flow" but with broader appeal.'}),(0,r.jsx)(he,{eventKey:ae.hack,children:"First programming language learned while working full-time at Meta. Built multiple scalable features by focusing on asynchronous programming. Moved to implementing GraphQL queries and mutations on the server side in addition to server-calling React routes and their corresponding components."}),(0,r.jsx)(he,{eventKey:ae.graphql,children:"Learned back-end GraphQL field implementation skills while learning Hack, and gained client-side GraphQL experience in tandem with coding in React while full-time at Meta."}),(0,r.jsx)(he,{eventKey:ae.mysql,children:"Database management skills applied during both the internship and full-time Meta experiences. MySQL queries created for mass aggregates of traffic data in C++/Python, queries and mutations optimized for employee directory information in Hack."}),(0,r.jsx)(he,{eventKey:ae.python,children:"First applied in class projects around web development (e.g., Flask, Jinja, REST) while at the University of Michigan, later used to create data pipeline jobs for traffic aggregation as an intern at Meta. Presently, using FastAPI and PostgreSQL for personal projects."}),(0,r.jsx)(he,{eventKey:ae.cpp,children:"First programming language learned as an undergraduate at the University of Michigan. Used for package building and app compression while coding as a Meta intern. Skills in asynchronous programming (e.g., threads, mutexes, semaphores, etc.) and file system management as part of a course on operating systems."}),(0,r.jsx)(he,{eventKey:ae.csharp,children:"Onboarded as part of university senior capstone project at Michigan. Gained experience in C# in order to create a video game as part of a team of four (4) using the Unity game engine."})]})})}function pe(){return(0,r.jsxs)(ne.Z,{children:[(0,r.jsx)(D,{}),(0,r.jsx)(te,{}),(0,r.jsx)(ge,{})]})}const xe=835;function fe(){const[e,t]=s.useState(window.innerWidth>xe),[a,i]=s.useState(null),o=()=>{t(window.innerWidth>xe)};return s.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o))),[]),s.useEffect((()=>{(async()=>{i(s.lazy((async()=>await(e?n.e(306).then(n.bind(n,9306)):n.e(560).then(n.bind(n,560))))))})()}),[e]),null!=a?(0,r.jsx)(s.Suspense,{fallback:null,children:(0,r.jsx)(a,{})}):null}var je=n(9911);function _e(){return(0,r.jsx)(je.Z,{background:(0,r.jsx)(o,{}),breadcrumbs:(0,r.jsx)(fe,{}),children:(0,r.jsx)(pe,{})})}},949:(e,t,n)=>{n.d(t,{Z:()=>l});n(2791);var s=n(5862),a=n(2576),i=n(3441);const r={tooltip:"tooltip_tooltip__5pJPW"};var o=n(184);function l(e){let{content:t,tooltip:n}=e;const{ref:l,entry:c}=(0,i.YD)({rootMargin:"-50% 0px 0px"});return(0,o.jsx)(s.Z,{placement:null!==c&&void 0!==c&&c.isIntersecting?"top":"bottom",overlay:(0,o.jsx)(a.Z,{children:n}),children:(0,o.jsx)("span",{className:r.tooltip,ref:l,children:t})})}},9911:(e,t,n)=>{n.d(t,{Z:()=>T});var s=n(2791),a=n(8025),i=n(1694),r=n.n(i),o=n(7022),l=n(2677),c=n(2251),d=n(1087),u=n(2982),m=n(7093);const h={brand:"navbar_brand__zDvLc",navbar:"navbar_navbar__pEuvw",pushTime:"navbar_pushTime__jdH3p",rightContent:"navbar_rightContent__ikOZ0"};var g=n(5),p=n(5088),x=n(9806),f=n(192),j=n(4849);const _={fallback:"colorPicker_fallback__pvhTA"};var b=n(9415),v=n(184);const y=(0,b.Z)((()=>n.e(154).then(n.bind(n,1154))));function Z(){return(0,v.jsx)(f.Z,{align:"end",className:_.icon,renderMenuOnMount:!1,title:(0,v.jsx)(x.G,{icon:p.q2,bounce:!0}),onMouseEnter:()=>{y.preload()},children:(0,v.jsx)(s.Suspense,{fallback:(0,v.jsx)("div",{className:_.fallback,children:(0,v.jsx)(j.Z,{animation:"border",variant:"secondary"})}),children:(0,v.jsx)(y,{})})})}var k=n(949);const w=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),M=[{unit:"year",ms:31536e6},{unit:"month",ms:2628e6},{unit:"day",ms:864e5},{unit:"hour",ms:36e5},{unit:"minute",ms:6e4},{unit:"second",ms:1e3}];function C(e){for(const{unit:t,ms:n}of M)if(Math.abs(e)>=n||"second"===t)return w.format(Math.round(e/n),t);return""}function S(){const[e,t]=s.useState(null);if(s.useEffect((()=>{(async()=>{try{const e=await fetch("https://api.github.com/repos/sverg84/sverg84.github.io");if(!e.ok)throw new Error("".concat(e.status,": ").concat(e.statusText));const n=(await e.json()).pushed_at;t(new Date(n))}catch(e){console.warn(e)}})()}),[]),null==e)return null;const n=e.getTime()-(new Date).getTime();return(0,v.jsxs)(v.Fragment,{children:["Last Updated:"," ",(0,v.jsx)(k.Z,{content:C(n),tooltip:e.toLocaleString(void 0)})]})}function N(e){let{breadcrumbs:t}=e;const n=(0,m.Z)();return(0,v.jsx)(c.Z,{expand:!1,sticky:"top",style:n,children:(0,v.jsxs)(o.Z,{className:r()(g.Z.page,h.navbar),children:[(0,v.jsx)(l.Z,{children:(0,v.jsx)(d.rU,{className:h.brand,to:"/",children:u.Z})}),(0,v.jsx)(l.Z,{className:h.pushTime,children:(0,v.jsx)(S,{})}),(0,v.jsxs)(l.Z,{className:h.rightContent,children:[t,(0,v.jsx)(Z,{})]})]})})}const I="#2e3134";function T(e){var t;let{background:n,breadcrumbs:i,children:r}=e;const o=null!==(t=localStorage.getItem("color"))&&void 0!==t?t:I,[l,c]=s.useState(o);return s.useEffect((()=>{localStorage.setItem("color",l)}),[l]),(0,v.jsxs)(a.Z.Provider,{value:[l,c],children:[n,(0,v.jsx)(N,{breadcrumbs:i}),r]})}},5364:(e,t,n)=>{n.d(t,{Z:()=>l});var s=n(1694),a=n.n(s);n(2791);const i={body:"pageBody_body__aNOKo"};var r=n(5),o=n(184);function l(e){let{children:t}=e;return(0,o.jsx)("div",{className:a()(r.Z.page,i.body),children:t})}},8188:(e,t,n)=>{n.d(t,{Z:()=>h});var s=n(2791),a=n(8957),i=n(2677),r=n(7022),o=n(9743),l=n(6638),c=n(5267),d=n(184);const u=s.lazy((async()=>await n.e(217).then(n.bind(n,1217))));function m(e){return(0,d.jsx)(s.Suspense,{fallback:(0,d.jsx)(c.Z,{animation:"wave",as:"div",bg:"secondary",className:l.Z.glimmer}),children:(0,d.jsx)(u,{...e})})}function h(e){let{children:t,...n}=e;return(0,d.jsx)(a.Z.Body,{children:(0,d.jsx)(r.Z,{children:(0,d.jsxs)(o.Z,{className:l.Z.body,xs:1,children:[(0,d.jsx)(i.Z,{className:l.Z.imageColumn,xl:4,children:(0,d.jsx)(m,{...n})}),(0,d.jsx)(i.Z,{xl:8,children:t})]})})})}},1791:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(9806),a=(n(2791),n(3360)),i=n(2381),r=n(184);function o(e){let{className:t,href:n,icon:o}=e;const{isHovering:l,...c}=(0,i.Z)();return(0,r.jsx)(a.Z,{className:t,href:n,target:"_blank",variant:"link",...c,children:(0,r.jsx)(s.G,{icon:o,size:"2xl"})})}},2982:(e,t,n)=>{n.d(t,{Z:()=>s});const s="Stephen Vergara"},8025:(e,t,n)=>{n.d(t,{Z:()=>s});const s=(0,n(2791).createContext)(["#2e3134",()=>{}])},7093:(e,t,n)=>{n.d(t,{Z:()=>r});var s=n(2791),a=n(8025),i=n(5791);function r(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const[t]=s.useContext(a.Z),n=(0,i.Z)();return{backgroundColor:"".concat(t).concat(e),color:n}}},4769:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(2791),a=n(8025);function i(){const[e]=s.useContext(a.Z);return{color:e}}},2381:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(2791);function a(){const[e,t]=s.useState(!1);return{isHovering:e,onMouseEnter:()=>{t(!0)},onMouseLeave:()=>{t(!1)}}}},5791:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(2791),a=n(8025),i=n(456);const r=128;function o(){const[e]=s.useContext(a.Z);return s.useMemo((()=>(0,i.Z)(e)>r?"black":"white"),[e])}},456:(e,t,n)=>{n.d(t,{Z:()=>r});const s=.299,a=.587,i=.114;function r(e){const t=Math.floor((e.length-1)/3),n=((e,t)=>e.match(new RegExp(".{".concat(t,"}"),"g")))(e.slice(1),t),[r,o,l]=(null!==n&&void 0!==n?n:[]).map((e=>parseInt(e.repeat(2/e.length),16)));return Math.round((null!==r&&void 0!==r?r:0)*s+(null!==o&&void 0!==o?o:0)*a+(null!==l&&void 0!==l?l:0)*i)}},9415:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(2791);function a(e){return Object.assign(s.lazy(e),{preload:e})}},6638:(e,t,n)=>{n.d(t,{Z:()=>s});const s={body:"aboutMeCardBody_body__px0Z-",base:"aboutMeCardBody_base__HWSO5",image:"aboutMeCardBody_image__r0pwR",glimmer:"aboutMeCardBody_glimmer__ztngv",imageColumn:"aboutMeCardBody_imageColumn__Decwz"}},775:(e,t,n)=>{n.d(t,{Z:()=>s});const s={buttons:"footer_buttons__X-wEA",resume:"footer_resume__j2AKe"}},5943:(e,t,n)=>{n.d(t,{Z:()=>s});const s={github:"linkButton_github__ltM-y",linkedin:"linkButton_linkedin__MRpaF",steam:"linkButton_steam__qizUa",discord:"linkButton_discord__zToU1"}},5:(e,t,n)=>{n.d(t,{Z:()=>s});const s={page:"pageMargin_page__oYkHI"}}}]); +//# sourceMappingURL=101.9f7b58b4.chunk.js.map \ No newline at end of file diff --git a/static/js/101.9f7b58b4.chunk.js.map b/static/js/101.9f7b58b4.chunk.js.map new file mode 100644 index 0000000..13bc9e3 --- /dev/null +++ b/static/js/101.9f7b58b4.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/101.9f7b58b4.chunk.js","mappings":"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","sources":["webpack://sverg84.github.io/./src/impl/styles/background.module.scss?ebba","impl/components/AppBackground.tsx","impl/hooks/useBackgroundStyle.ts","webpack://sverg84.github.io/./src/impl/styles/body/about/text.module.scss?83aa","impl/components/body/about/AboutMeText.tsx","impl/components/body/about/AboutMeCardBody.tsx","webpack://sverg84.github.io/./src/impl/styles/body/buttons/email.module.scss?9739","impl/components/buttons/EmailButton.tsx","impl/components/buttons/GitHubButton.tsx","impl/components/buttons/LinkedInButton.tsx","webpack://sverg84.github.io/./src/impl/styles/body/buttons/resume.module.scss?5a4c","impl/components/buttons/ResumeButton.tsx","impl/hooks/usePageColorButtonStyle.ts","impl/components/body/about/AboutMeCardFooter.tsx","impl/components/body/about/AboutMeCard.tsx","webpack://sverg84.github.io/./src/impl/styles/body/experience/card.module.scss?9595","impl/components/body/BodyCard.tsx","webpack://sverg84.github.io/./src/impl/styles/body/experience/timeline.module.scss?0093","webpack://sverg84.github.io/./src/impl/styles/body/experience/timelineItem.module.scss?2c42","webpack://sverg84.github.io/./src/impl/styles/body/experience/skillsList.module.scss?e95e","impl/components/body/experience/ExperienceTimelineSkillsList.tsx","impl/components/body/experience/ExperienceTimelineItem.tsx","impl/hooks/useBorderColorStyle.ts","impl/components/body/experience/ExperienceTimeline.tsx","impl/components/body/experience/ExperienceCard.tsx","impl/consts/EventKeys.ts","webpack://sverg84.github.io/./src/impl/styles/body/skills/item.module.scss?a30c","impl/components/body/skills/SkillsItemToggle.tsx","impl/components/body/skills/SkillsItem.tsx","impl/components/body/skills/SkillsCard.tsx","impl/components/body/JobSeekerBody.tsx","impl/components/nav/JobSeekerNavWrapper.tsx","impl/components/AppJobSeeker.tsx","webpack://sverg84.github.io/./src/impl/styles/tooltip.module.scss?f869","impl/components/AppTooltip.tsx","webpack://sverg84.github.io/./src/impl/styles/nav/navbar.module.scss?5af6","webpack://sverg84.github.io/./src/impl/styles/nav/colorPicker.module.scss?f351","impl/components/nav/PageNavColorPicker.tsx","impl/components/nav/PageNavLatestPushTimestamp.tsx","impl/components/nav/PageNavBar.tsx","impl/components/Page.tsx","webpack://sverg84.github.io/./src/impl/styles/pageBody.module.scss?5416","impl/components/body/PageBody.tsx","impl/components/body/about/AboutMeCardLazyImage.tsx","impl/components/body/about/AboutMeCardBodyContainer.tsx","impl/components/buttons/ExternalLinkButton.tsx","impl/consts/MyName.ts","impl/contexts/ColorContext.ts","impl/hooks/useBackgroundColorStyle.ts","impl/hooks/useColorStyle.ts","impl/hooks/useHover.ts","impl/hooks/useTextColorForCustomBackground.ts","impl/utils/brightnessFromHexCode.ts","impl/utils/lazyWithPreload.ts","webpack://sverg84.github.io/./src/impl/styles/body/about/aboutMeCardBody.module.scss?747a","webpack://sverg84.github.io/./src/impl/styles/body/about/footer.module.scss?b32c","webpack://sverg84.github.io/./src/impl/styles/body/buttons/linkButton.module.scss?4ee4","webpack://sverg84.github.io/./src/impl/styles/pageMargin.module.scss?e8bc"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"bg\":\"background_bg__rHR4m\",\"bg3\":\"background_bg3__WZ4Pm\",\"bg2\":\"background_bg2__XB2Tl\",\"slide\":\"background_slide__Sq8xw\"};","import * as React from 'react';\n\nimport useBackgroundStyle from '../hooks/useBackgroundStyle';\nimport styles from '../styles/background.module.scss';\n\nexport default function AppBackground(): React.JSX.Element {\n\tconst color = useBackgroundStyle();\n\treturn (\n\t\t<>\n\t\t\t{[styles.bg, styles.bg2, styles.bg3].map(bg => (\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n}\n","import { useContext } from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useBackgroundStyle(): React.CSSProperties {\n\tconst [color] = useContext(ColorContext);\n\treturn {backgroundImage: `linear-gradient(-60deg, ${color} 50%, white 50%)`};\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"bold\":\"text_bold__TiUuq\",\"italic\":\"text_italic__fvjzk\"};","import classNames from 'classnames';\nimport moment from 'moment';\nimport * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\nimport { Link } from 'react-router-dom';\n\nimport MyName from '../../../consts/MyName';\nimport useColorStyle from '../../../hooks/useColorStyle';\nimport styles from '../../../styles/body/about/text.module.scss';\n\nconst BIRTHDATE: Date = new Date('1998-05-06T10:47:00.000-06:00'); // 6 May 1998 11:47 A.M. US Central Time\n\nfunction Language({language}: {language: string}): React.JSX.Element {\n\tconst color = useColorStyle();\n\treturn (\n\t\t\n\t\t\t{language}\n\t\t\n\t);\n}\n\nexport default function AboutMeText(): React.JSX.Element {\n\tconst color = useColorStyle();\n\tconst age = moment.duration(moment().diff(BIRTHDATE)).years();\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tAbout Me\n\t\t\t\n\t\t\t\n\t\t\t\tFront-End Software Engineer, Web Developer\n\t\t\t\n\t\t\t\n\t\t\t\tHi there! My name is{' '}\n\t\t\t\t\n\t\t\t\t\t{MyName}\n\t\t\t\t\n\t\t\t\t. I am a {age} year-old software engineer with a fondness for user\n\t\t\t\tinterface and user experience (UI/UX) development.\n\t\t\t\n\t\t\t\n\t\t\t\tI started learning to code during my senior year of high school when I\n\t\t\t\ttook an introduction course to {} on a whim,\n\t\t\t\tand I loved learning as much as I could since then! Throughout my time\n\t\t\t\tat university, I applied myself to a substantial amount of coursework in{' '}\n\t\t\t\t{} and {} with\n\t\t\t\ta splash of {},{' '}\n\t\t\t\t{}, and {}.\n\t\t\t\n\t\t\t\n\t\t\t\tAll of my full-time experience (as of Summer 2023) stems from my time at\n\t\t\t\tMeta where I challenged myself further in exploring web programming,\n\t\t\t\tlearning {} and{' '}\n\t\t\t\t{} for the first time in a rigorous,\n\t\t\t\tfast-paced environment.\n\t\t\t\n\t\t\t\n\t\t\t\tSince parting with Meta, I have been self-teaching{' '}\n\t\t\t\t{} in order to keep my UI-building\n\t\t\t\tskills fresh, replete with {} modules.\n\t\t\t\n\t\t\t\n\t\t\t\tClick{' '}\n\t\t\t\t{\n\t\t\t\t\t\n\t\t\t\t\t\there\n\t\t\t\t\t\n\t\t\t\t}{' '}\n\t\t\t\tif you would like to learn more about me beyond my career!\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport MyName from '../../../consts/MyName';\nimport AboutMeCardBodyContainer from './AboutMeCardBodyContainer';\nimport AboutMeText from './AboutMeText';\n\nexport default function AboutMeCardBody(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"email_button__FW+sr\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport { Button } from 'react-bootstrap';\n\nimport useHover from '../../hooks/useHover';\nimport styles from '../../styles/body/buttons/email.module.scss';\n\nexport default function EmailButton(): React.JSX.Element {\n\tconst {isHovering, ...mouseEvents} = useHover();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function GitHubButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function LinkedInButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"resume\":\"resume_resume__92JEE\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport Button from 'react-bootstrap/Button';\n\nimport useHover from '../../hooks/useHover';\nimport usePageColorButtonStyle from '../../hooks/usePageColorButtonStyle';\nimport styles from '../../styles/body/buttons/resume.module.scss';\n\nexport default function ResumeButton(): React.JSX.Element {\n\tconst {isHovering, ...mouseEvents} = useHover();\n\tconst style = usePageColorButtonStyle(isHovering);\n\n\treturn (\n\t\t\n\t\t\tDownload resume\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport useTextColorForCustomBackground from './useTextColorForCustomBackground';\n\nexport default function usePageColorButtonStyle(\n\tisHovering: boolean,\n): React.CSSProperties {\n\tconst [color] = React.useContext(ColorContext);\n\tconst hoverTextColor = useTextColorForCustomBackground();\n\n\tconst borderAndTextColor = isHovering ? hoverTextColor : color;\n\n\treturn {\n\t\tbackgroundColor: isHovering ? color : undefined,\n\t\tborderColor: borderAndTextColor,\n\t\tboxShadow: `4px 4px ${color}`,\n\t\tcolor: borderAndTextColor,\n\t};\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\n\nimport styles from '../../../styles/body/about/footer.module.scss';\nimport EmailButton from '../../buttons/EmailButton';\nimport GitHubButton from '../../buttons/GitHubButton';\nimport LinkedInButton from '../../buttons/LinkedInButton';\nimport ResumeButton from '../../buttons/ResumeButton';\n\nexport default function AboutMeCardFooter(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\n\nimport AboutMeCardBody from './AboutMeCardBody';\nimport AboutMeCardFooter from './AboutMeCardFooter';\n\nexport default function AboutMeCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"card_header__C3ziB\"};","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\n\nimport useColorStyle from '../../hooks/useColorStyle';\nimport styles from '../../styles/body/experience/card.module.scss';\n\ntype Props = Readonly<{\n\tchildren: React.JSX.Element;\n\tid?: string;\n\ttitle: string;\n}>;\n\nexport default function BodyCard({\n\tchildren,\n\tid,\n\ttitle,\n}: Props): React.JSX.Element {\n\tconst color = useColorStyle();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{title}\n\t\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"timeline\":\"timeline_timeline__VfjcF\",\"bar\":\"timeline_bar__V3BAE\"};","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"timelineItem_item__005F5\",\"circle\":\"timelineItem_circle__ADJyP\",\"in\":\"timelineItem_in__PSeNd\",\"fadeInLeft\":\"timelineItem_fadeInLeft__vvxlT\",\"content\":\"timelineItem_content__izpwq\",\"fadeInRight\":\"timelineItem_fadeInRight__uPKi+\",\"header\":\"timelineItem_header__H24TC\",\"tag\":\"timelineItem_tag__k8jMy\"};","// extracted by mini-css-extract-plugin\nexport default {\"list\":\"skillsList_list__-3yy3\",\"skills\":\"skillsList_skills__Q4+OB\"};","import * as React from 'react';\n\nimport styles from '../../../styles/body/experience/skillsList.module.scss';\n\ntype Props = Readonly<{\n\tskillsList: ReadonlyArray;\n\tstyle?: React.CSSProperties;\n}>;\n\nexport default function ExperienceTimelineSkillsList({\n\tskillsList,\n\tstyle,\n}: Props): React.JSX.Element {\n\treturn (\n\t\t

\n\t\t\t\n\t\t\t\tSkills:{' '}\n\t\t\t\n\t\t\t{skillsList.join(', ')}\n\t\t

\n\t);\n}\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useInView } from 'react-intersection-observer';\n\nimport useBackgroundColorStyle from '../../../hooks/useBackgroundColorStyle';\nimport useBorderColorStyle from '../../../hooks/useBorderColorStyle';\nimport useColorStyle from '../../../hooks/useColorStyle';\nimport styles from '../../../styles/body/experience/timelineItem.module.scss';\nimport type { TimelineItemData } from './ExperienceTimeline';\nimport ExperienceTimelineSkillsList from './ExperienceTimelineSkillsList';\n\ntype Props = Readonly<{\n\tdata: TimelineItemData;\n\tisOdd: boolean;\n}>;\n\nexport default function ExperienceTimelineItem({\n\tdata,\n\tisOdd,\n}: Props): React.JSX.Element {\n\tconst background = useBackgroundColorStyle();\n\tconst border = useBorderColorStyle();\n\tconst color = useColorStyle();\n\n\tconst {inView, ref} = useInView({\n\t\ttriggerOnce: true,\n\t\trootMargin: '-200px 0px',\n\t});\n\n\tconst tag = (\n\t\t{data.tag}\n\t);\n\tconst time = ;\n\n\tconst header = isOdd ? (\n\t\t<>\n\t\t\t{tag}\n\t\t\t{time}\n\t\t\n\t) : (\n\t\t<>\n\t\t\t{time}\n\t\t\t{tag}\n\t\t\n\t);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t
{header}
\n\t\t\t\t
{data.title}
\n\t\t\t\t\n\t\t\t\t{data.description}\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useBorderColorStyle(): React.CSSProperties {\n\tconst [color] = React.useContext(ColorContext);\n\n\treturn {borderColor: color};\n}\n","import * as React from 'react';\n\nimport useBackgroundColorStyle from '../../../hooks/useBackgroundColorStyle';\nimport styles from '../../../styles/body/experience/timeline.module.scss';\nimport AppTooltip from '../../AppTooltip';\nimport ExperienceTimelineItem from './ExperienceTimelineItem';\n\nexport type TimelineItemData = Readonly<{\n\tdescription: React.JSX.Element;\n\tskillsList: ReadonlyArray;\n\tsrc: string;\n\ttag: string;\n\ttimeframe: string;\n\ttitle: string;\n}>;\n\nconst items: ReadonlyArray = [\n\t{\n\t\tdescription: (\n\t\t\t

\n\t\t\t\tFull-stack product software engineer (PHP/Hack and JS/React) for the Org\n\t\t\t\tEffectiveness team within the Enterprise Engineering division. Released\n\t\t\t\tmultiple high-priority stakeholder feature requests pertaining to\n\t\t\t\tHR-sensitive employee data. Leader of team app performance optimization\n\t\t\t\topportunities.\n\t\t\t

\n\t\t),\n\t\tskillsList: ['PHP', 'React', 'GraphQL', 'MySQL'],\n\t\tsrc: '/meta.gif',\n\t\ttag: 'Meta Platforms, Inc.',\n\t\ttimeframe: '2020-2023',\n\t\ttitle: 'Software Engineer',\n\t},\n\n\t{\n\t\tdescription: (\n\t\t\t

\n\t\t\t\tIntern for the Traffic Analytics team within the Infrastructure\n\t\t\t\tdivision. Created monitoring tool for team oncall to measure network\n\t\t\t\tpacket failures with interactive web page.\n\t\t\t

\n\t\t),\n\t\tskillsList: ['C++', 'Python', 'Apache Thrift', 'MySQL'],\n\t\tsrc: '/meta.gif',\n\t\ttag: 'Meta Platforms, Inc.',\n\t\ttimeframe: 'Summer 2019',\n\t\ttitle: 'Software Engineer Intern',\n\t},\n\t{\n\t\tdescription: (\n\t\t\t

\n\t\t\t\tAssistant at the university's Transportation Research Institute as part\n\t\t\t\tof the Undergraduate Research Opportunity Program (UROP). Participated\n\t\t\t\tin{' '}\n\t\t\t\t{' '}\n\t\t\t\tstudy for Defence Research & Development Canada (DRDC).\n\t\t\t

\n\t\t),\n\t\tskillsList: ['MATLAB', 'Wolfram Mathematica'],\n\t\tsrc: '/umich.jpeg',\n\t\ttag: 'University of Michigan',\n\t\ttimeframe: '2016-2017',\n\t\ttitle: 'Research Assistant',\n\t},\n];\n\nexport default function ExperienceTimeline(): React.JSX.Element {\n\tconst color = useBackgroundColorStyle();\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t{items.map((item, idx) => (\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t);\n}\n","import * as React from 'react';\n\nimport BodyCard from '../BodyCard';\nimport ExperienceTimeline from './ExperienceTimeline';\n\nexport default function ExperienceCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","const EventKeys = {\n\tcpp: 'C++',\n\tcsharp: 'C#',\n\tgraphql: 'GraphQL',\n\thack: 'Hack',\n\tmysql: 'MySQL',\n\tpython: 'Python',\n\treact: 'React',\n\ttypescript: 'TypeScript',\n} as const;\n\nexport default EventKeys;\n","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"item_button__GmSRm\",\"expand\":\"item_expand__4Sxrl\",\"firstExpand\":\"item_firstExpand__kSWZa\",\"collapse\":\"item_collapse__JYgde\",\"header\":\"item_header__w8Yjy\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { AccordionContext, useAccordionButton } from 'react-bootstrap';\n\nimport EventKeys from '../../../consts/EventKeys';\nimport useBackgroundColorStyle from '../../../hooks/useBackgroundColorStyle';\nimport styles from '../../../styles/body/skills/item.module.scss';\n\ntype Props = Readonly<{\n\teventKey: string;\n}>;\n\nexport default function SkillsItemToggle({eventKey}: Props): React.JSX.Element {\n\tconst {activeEventKey} = React.useContext(AccordionContext);\n\tconst color = useBackgroundColorStyle();\n\tconst onClick = useAccordionButton(eventKey);\n\n\tconst isCurrentEventKey = activeEventKey === eventKey;\n\n\tconst classnames: Array = [];\n\n\tif (isCurrentEventKey) {\n\t\tclassnames.push(\n\t\t\teventKey === EventKeys.react ? styles.firstExpand : styles.expand,\n\t\t);\n\t} else {\n\t\tclassnames.push(styles.collapse);\n\t}\n\n\treturn (\n\t\t\n\t\t\t{eventKey}\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport AccordionCollapse from 'react-bootstrap/esm/AccordionCollapse';\nimport AccordionItem from 'react-bootstrap/esm/AccordionItem';\nimport Card from 'react-bootstrap/esm/Card';\n\nimport SkillsItemToggle from './SkillsItemToggle';\n\ntype Props = Readonly<{\n\tchildren: React.ReactNode;\n\teventKey: string;\n}>;\n\nexport default function SkillsItem({\n\tchildren,\n\teventKey,\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Accordion from 'react-bootstrap/Accordion';\n\nimport EventKeys from '../../../consts/EventKeys';\nimport BodyCard from '../BodyCard';\nimport SkillsItem from './SkillsItem';\n\nexport default function SkillsCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tRamped up on React skills while transitioning from web infra (PHP) to\n\t\t\t\t\tUI programming in my full-time position at Meta. Developed an\n\t\t\t\t\texpertise in applying Hooks, code-splitting APIs, and React18\n\t\t\t\t\tconcurrency features to create seamless user experiences while\n\t\t\t\t\toptimizing app/page performance. Expanding upon Meta-internal skills\n\t\t\t\t\twith public React app building (e.g., this web page!).\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tSelf-taught during the summer of 2023 in order to create a modern\n\t\t\t\t\tReact app at home while still enforcing type safety. Very similar to\n\t\t\t\t\tMeta's \"Flow\" but with broader appeal.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tFirst programming language learned while working full-time at Meta.\n\t\t\t\t\tBuilt multiple scalable features by focusing on asynchronous\n\t\t\t\t\tprogramming. Moved to implementing GraphQL queries and mutations on\n\t\t\t\t\tthe server side in addition to server-calling React routes and their\n\t\t\t\t\tcorresponding components.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tLearned back-end GraphQL field implementation skills while learning\n\t\t\t\t\tHack, and gained client-side GraphQL experience in tandem with coding\n\t\t\t\t\tin React while full-time at Meta.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tDatabase management skills applied during both the internship and\n\t\t\t\t\tfull-time Meta experiences. MySQL queries created for mass aggregates\n\t\t\t\t\tof traffic data in C++/Python, queries and mutations optimized for\n\t\t\t\t\temployee directory information in Hack.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tFirst applied in class projects around web development (e.g., Flask,\n\t\t\t\t\tJinja, REST) while at the University of Michigan, later used to create\n\t\t\t\t\tdata pipeline jobs for traffic aggregation as an intern at Meta.\n\t\t\t\t\tPresently, using FastAPI and PostgreSQL for personal projects.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tFirst programming language learned as an undergraduate at the\n\t\t\t\t\tUniversity of Michigan. Used for package building and app compression\n\t\t\t\t\twhile coding as a Meta intern. Skills in asynchronous programming\n\t\t\t\t\t(e.g., threads, mutexes, semaphores, etc.) and file system management\n\t\t\t\t\tas part of a course on operating systems.\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tOnboarded as part of university senior capstone project at Michigan.\n\t\t\t\t\tGained experience in C# in order to create a video game as part of a\n\t\t\t\t\tteam of four (4) using the Unity game engine.\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport AboutMeCard from './about/AboutMeCard';\nimport ExperienceCard from './experience/ExperienceCard';\nimport PageBody from './PageBody';\nimport SkillsCard from './skills/SkillsCard';\n\nexport default function JobSeekerBody(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nconst SCREEN_WIDTH_BREAKPOINT = 835;\n\nexport default function JobSeekerNavWrapper(): React.JSX.Element | null {\n\tconst [isDesktop, setIsDesktop] = React.useState(\n\t\twindow.innerWidth > SCREEN_WIDTH_BREAKPOINT,\n\t);\n\n\tconst [Module, setModule] = React.useState React.JSX.Element\n\t> | null>(null);\n\n\tconst updateMedia = () => {\n\t\tsetIsDesktop(window.innerWidth > SCREEN_WIDTH_BREAKPOINT);\n\t};\n\n\tReact.useEffect(() => {\n\t\twindow.addEventListener('resize', updateMedia);\n\t\treturn () => window.removeEventListener('resize', updateMedia);\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tconst conditionalImport = async () => {\n\t\t\tsetModule(\n\t\t\t\tReact.lazy(\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tawait (isDesktop\n\t\t\t\t\t\t\t? import('./JobSeekerNavBreadcrumbs')\n\t\t\t\t\t\t\t: import('./JobSeekerNavDropdown')),\n\t\t\t\t),\n\t\t\t);\n\t\t};\n\t\tconditionalImport();\n\t}, [isDesktop]);\n\n\treturn Module != null ? (\n\t\t\n\t\t\t\n\t\t\n\t) : null;\n}\n","import * as React from 'react';\n\nimport AppBackground from './AppBackground';\nimport JobSeekerBody from './body/JobSeekerBody';\nimport JobSeekerNavWrapper from './nav/JobSeekerNavWrapper';\nimport Page from './Page';\n\nexport function Component(): React.JSX.Element {\n\treturn (\n\t\t}\n\t\t\tbreadcrumbs={}>\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tooltip\":\"tooltip_tooltip__5pJPW\"};","import * as React from 'react';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport { useInView } from 'react-intersection-observer';\n\nimport styles from '../styles/tooltip.module.scss';\n\ntype Props = Readonly<{\n\tcontent: string;\n\ttooltip: string;\n}>;\n\nexport default function AppTooltip({\n\tcontent,\n\ttooltip,\n}: Props): React.JSX.Element {\n\tconst {ref, entry} = useInView({\n\t\trootMargin: '-50% 0px 0px',\n\t});\n\n\treturn (\n\t\t{tooltip}}>\n\t\t\t{content}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"brand\":\"navbar_brand__zDvLc\",\"navbar\":\"navbar_navbar__pEuvw\",\"pushTime\":\"navbar_pushTime__jdH3p\",\"rightContent\":\"navbar_rightContent__ikOZ0\"};","// extracted by mini-css-extract-plugin\nexport default {\"fallback\":\"colorPicker_fallback__pvhTA\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport NavDropdown from 'react-bootstrap/esm/NavDropdown';\nimport Spinner from 'react-bootstrap/Spinner';\n\nimport styles from '../../styles/nav/colorPicker.module.scss';\nimport lazyWithPreload from '../../utils/lazyWithPreload.ts';\n\nconst PageNavColorPickerMenu = lazyWithPreload(() =>\n\timport('./PageNavColorPickerMenu.tsx'),\n);\n\nexport default function PageNavColorPicker(): React.JSX.Element {\n\tconst onMouseEnter = () => {\n\t\tPageNavColorPickerMenu.preload();\n\t};\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t\tonMouseEnter={onMouseEnter}>\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}>\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport AppTooltip from '../AppTooltip';\n\n// https://stackoverflow.com/questions/6108819/javascript-timestamp-to-relative-time\nconst RTF = new Intl.RelativeTimeFormat(undefined, {numeric: 'auto'});\n\nconst UNITS: {unit: Intl.RelativeTimeFormatUnit; ms: number}[] = [\n\t{unit: 'year', ms: 31536000000},\n\t{unit: 'month', ms: 2628000000},\n\t{unit: 'day', ms: 86400000},\n\t{unit: 'hour', ms: 3600000},\n\t{unit: 'minute', ms: 60000},\n\t{unit: 'second', ms: 1000},\n];\n\nfunction relativeTimeFromElapsed(elapsed: number): string {\n\tfor (const {unit, ms} of UNITS) {\n\t\tif (Math.abs(elapsed) >= ms || unit === 'second') {\n\t\t\treturn RTF.format(Math.round(elapsed / ms), unit);\n\t\t}\n\t}\n\treturn '';\n}\n\nexport default function PageNavLatestPushTimestamp(): React.JSX.Element | null {\n\tconst [lastUpdatedTime, setLastUpdatedTime] = React.useState(\n\t\tnull,\n\t);\n\n\tReact.useEffect(() => {\n\t\tconst fetchTime = async () => {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\n\t\t\t\t\t'https://api.github.com/repos/sverg84/sverg84.github.io',\n\t\t\t\t);\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`${response.status}: ${response.statusText}`);\n\t\t\t\t}\n\t\t\t\tconst data = await response.json();\n\t\t\t\tconst updateTime: string = data['pushed_at'];\n\t\t\t\tsetLastUpdatedTime(new Date(updateTime));\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(error);\n\t\t\t}\n\t\t};\n\n\t\tfetchTime();\n\t}, []);\n\n\tif (lastUpdatedTime == null) {\n\t\treturn null;\n\t}\n\n\tconst timeSinceLastUpdate = lastUpdatedTime.getTime() - new Date().getTime();\n\n\treturn (\n\t\t<>\n\t\t\tLast Updated:{' '}\n\t\t\t\n\t\t\n\t);\n}\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport Container from 'react-bootstrap/Container';\nimport Col from 'react-bootstrap/esm/Col';\nimport Navbar from 'react-bootstrap/Navbar';\nimport { Link } from 'react-router-dom';\n\nimport MyName from '../../consts/MyName.ts';\nimport useBackgroundColorStyle from '../../hooks/useBackgroundColorStyle.ts';\nimport navStyles from '../../styles/nav/navbar.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\nimport PageNavColorPicker from './PageNavColorPicker.tsx';\nimport PageNavLatestPushTimestamp from './PageNavLatestPushTimestamp.tsx';\n\ntype Props = Readonly<{\n\tbreadcrumbs?: React.JSX.Element | undefined;\n}>;\n\nexport default function PageNavBar({breadcrumbs}: Props): React.JSX.Element {\n\tconst style = useBackgroundColorStyle();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{MyName}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{breadcrumbs}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport PageNavBar from './nav/PageNavBar';\n\nconst DEFAULT_COLOR = '#2e3134';\n\ntype Props = Readonly<{\n\tbackground: React.JSX.Element;\n\tbreadcrumbs?: React.JSX.Element;\n\tchildren: React.ReactNode;\n}>;\n\nexport default function Page({\n\tbackground,\n\tbreadcrumbs,\n\tchildren,\n}: Props): React.JSX.Element {\n\tconst localStorageColorOrDefault =\n\t\tlocalStorage.getItem('color') ?? DEFAULT_COLOR;\n\tconst [hex, setHex] = React.useState(localStorageColorOrDefault);\n\n\tReact.useEffect(() => {\n\t\tlocalStorage.setItem('color', hex);\n\t}, [hex]);\n\n\treturn (\n\t\t\n\t\t\t{background}\n\t\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"pageBody_body__aNOKo\"};","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport pageBodyStyles from '../../styles/pageBody.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\n\ntype Props = Readonly<{\n\tchildren: React.ReactNode;\n}>;\n\nexport default function PageBody({children}: Props): React.JSX.Element {\n\treturn (\n\t\t
\n\t\t\t{children}\n\t\t
\n\t);\n}\n","import * as React from 'react';\nimport Placeholder from 'react-bootstrap/esm/Placeholder';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from '../about/AboutMeCardImage';\n\nconst AboutMeCardImage = React.lazy(\n\tasync () => await import('../about/AboutMeCardImage'),\n);\n\nexport default function AboutMeCardLazyImage(\n\tprops: ImageProps,\n): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t}>\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Col from 'react-bootstrap/Col';\nimport Container from 'react-bootstrap/Container';\nimport Row from 'react-bootstrap/Row';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from './AboutMeCardImage';\nimport AboutMeCardLazyImage from './AboutMeCardLazyImage';\n\ntype Props = Readonly<{\n\tchildren: React.JSX.Element;\n}> &\n\tImageProps;\n\nexport default function AboutMeCardBodyContainer({\n\tchildren,\n\t...imageProps\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport Button from 'react-bootstrap/Button';\n\nimport useHover from '../../hooks/useHover';\n\ntype Props = Readonly<{\n\tclassName?: string;\n\thref: string;\n\ticon: IconProp;\n}>;\n\nexport default function ExternalLinkButton({\n\tclassName,\n\thref,\n\ticon,\n}: Props): React.JSX.Element {\n\tconst {isHovering: _isHovering, ...mouseEvents} = useHover();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","const MyName: string = \"Stephen Vergara\";\n\nexport default MyName;\n","import { createContext } from 'react';\n\ntype ContextType = Readonly<\n\t[string, React.Dispatch>]\n>;\n\nexport default createContext(['#2e3134', () => {}]);\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport useTextColorForCustomBackground from './useTextColorForCustomBackground';\n\nexport default function useBackgroundColorStyle(\n\talpha: string = '',\n): React.CSSProperties {\n\tconst [color] = React.useContext(ColorContext);\n\tconst textColor = useTextColorForCustomBackground();\n\n\treturn {backgroundColor: `${color}${alpha}`, color: textColor};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useColorStyle(): React.CSSProperties {\n const [color] = React.useContext(ColorContext);\n\n return {color};\n}","import * as React from 'react';\n\ntype ReturnType = Readonly<{\n\tisHovering: boolean;\n\tonMouseEnter: () => void;\n\tonMouseLeave: () => void;\n}>;\n\nexport default function useHover(): ReturnType {\n\tconst [isHovering, setIsHovering] = React.useState(false);\n\n\tconst onMouseEnter = () => {\n\t\tsetIsHovering(true);\n\t};\n\n\tconst onMouseLeave = () => {\n\t\tsetIsHovering(false);\n\t};\n\n\treturn {isHovering, onMouseEnter, onMouseLeave};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport brightnessFromHexCode from '../utils/brightnessFromHexCode';\n\nconst BRIGHTNESS_THRESHOLD = 128;\n\nexport default function useTextColorForCustomBackground(): string {\n\tconst [color] = React.useContext(ColorContext);\n\n\treturn React.useMemo(() => {\n\t\tconst brightness = brightnessFromHexCode(color);\n\t\treturn brightness > BRIGHTNESS_THRESHOLD ? 'black' : 'white';\n\t}, [color]);\n}\n","// NTSC luminance formula (linear approximation): Y = .299r' + .587g' + .114b'\nconst RED_LUMINANCE_COEFFICIENT = 0.299;\nconst GREEN_LUMINANCE_COEFFICIENT = 0.587;\nconst BLUE_LUMINANCE_COEFFICIENT = 0.114;\n\nexport default function brightnessFromHexCode(color: string) {\n\tconst getChunksFromString = (st: string, chunkSize: number) =>\n\t\tst.match(new RegExp(`.{${chunkSize}}`, 'g'));\n\n\tconst convertHexUnitTo256 = (hexStr: string) =>\n\t\tparseInt(hexStr.repeat(2 / hexStr.length), 16);\n\n\tconst chunkSize = Math.floor((color.length - 1) / 3);\n\tconst hexArr = getChunksFromString(color.slice(1), chunkSize);\n\n\tconst [red, green, blue] = (hexArr ?? []).map(convertHexUnitTo256);\n\n\tconst brightness = Math.round(\n\t\t(red ?? 0) * RED_LUMINANCE_COEFFICIENT +\n\t\t\t(green ?? 0) * GREEN_LUMINANCE_COEFFICIENT +\n\t\t\t(blue ?? 0) * BLUE_LUMINANCE_COEFFICIENT,\n\t);\n\n\treturn brightness;\n}\n","import * as React from 'react';\n\ninterface PreloadedExoticComponent>\n\textends React.LazyExoticComponent {\n\tpreload: () => {};\n}\n\nexport default function lazyWithPreload>(\n\tfactory: () => Promise<{\n\t\tdefault: T;\n\t}>,\n): PreloadedExoticComponent {\n\treturn Object.assign(React.lazy(factory), {preload: factory});\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"aboutMeCardBody_body__px0Z-\",\"base\":\"aboutMeCardBody_base__HWSO5\",\"image\":\"aboutMeCardBody_image__r0pwR\",\"glimmer\":\"aboutMeCardBody_glimmer__ztngv\",\"imageColumn\":\"aboutMeCardBody_imageColumn__Decwz\"};","// extracted by mini-css-extract-plugin\nexport default {\"buttons\":\"footer_buttons__X-wEA\",\"resume\":\"footer_resume__j2AKe\"};","// extracted by mini-css-extract-plugin\nexport default {\"github\":\"linkButton_github__ltM-y\",\"linkedin\":\"linkButton_linkedin__MRpaF\",\"steam\":\"linkButton_steam__qizUa\",\"discord\":\"linkButton_discord__zToU1\"};","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"pageMargin_page__oYkHI\"};"],"names":["AppBackground","color","useContext","ColorContext","backgroundImage","concat","useBackgroundStyle","_jsx","_Fragment","children","styles","bg","bg2","bg3","map","className","style","BIRTHDATE","Date","Language","_ref","language","useColorStyle","bold","AboutMeText","age","moment","diff","years","_jsxs","Card","Text","as","classNames","italic","MyName","Link","to","AboutMeCardBody","AboutMeCardBodyContainer","alt","src","EmailButton","isHovering","mouseEvents","useHover","Button","button","href","FontAwesomeIcon","fade","icon","_faEnvelope","size","GitHubButton","ExternalLinkButton","github","_faGithub","LinkedInButton","linkedin","_faLinkedin","ResumeButton","React","hoverTextColor","useTextColorForCustomBackground","borderAndTextColor","backgroundColor","undefined","borderColor","boxShadow","usePageColorButtonStyle","resume","target","variant","beat","_faDownload","AboutMeCardFooter","Footer","Row","xs","sm","md","lg","Col","buttons","AboutMeCard","id","BodyCard","title","Header","header","Body","ExperienceTimelineSkillsList","skillsList","list","skills","join","ExperienceTimelineItem","data","isOdd","background","useBackgroundColorStyle","border","useBorderColorStyle","inView","ref","useInView","triggerOnce","rootMargin","tag","time","timeframe","item","content","in","loading","width","description","circle","items","AppTooltip","tooltip","ExperienceTimeline","timeline","bar","idx","ExperienceCard","cpp","csharp","graphql","hack","mysql","python","react","typescript","SkillsItemToggle","eventKey","activeEventKey","AccordionContext","onClick","useAccordionButton","isCurrentEventKey","classnames","push","EventKeys","firstExpand","expand","collapse","_faChevronUp","_faChevronDown","SkillsItem","AccordionItem","AccordionCollapse","SkillsCard","Accordion","defaultActiveKey","JobSeekerBody","PageBody","SCREEN_WIDTH_BREAKPOINT","JobSeekerNavWrapper","isDesktop","setIsDesktop","window","innerWidth","Module","setModule","updateMedia","addEventListener","removeEventListener","async","conditionalImport","fallback","Component","Page","breadcrumbs","entry","OverlayTrigger","placement","isIntersecting","overlay","Tooltip","PageNavColorPickerMenu","lazyWithPreload","PageNavColorPicker","NavDropdown","align","renderMenuOnMount","_faPalette","bounce","onMouseEnter","preload","Spinner","animation","RTF","Intl","RelativeTimeFormat","numeric","UNITS","unit","ms","relativeTimeFromElapsed","elapsed","Math","abs","format","round","PageNavLatestPushTimestamp","lastUpdatedTime","setLastUpdatedTime","response","fetch","ok","Error","status","statusText","updateTime","json","error","console","warn","fetchTime","timeSinceLastUpdate","getTime","toLocaleString","PageNavBar","Navbar","sticky","Container","pageStyles","page","navStyles","navbar","brand","pushTime","rightContent","DEFAULT_COLOR","_localStorage$getItem","localStorageColorOrDefault","localStorage","getItem","hex","setHex","setItem","Provider","value","pageBodyStyles","body","AboutMeCardImage","AboutMeCardLazyImage","props","Placeholder","glimmer","imageProps","imageColumn","xl","_isHovering","createContext","alpha","arguments","length","textColor","setIsHovering","onMouseLeave","BRIGHTNESS_THRESHOLD","brightnessFromHexCode","RED_LUMINANCE_COEFFICIENT","GREEN_LUMINANCE_COEFFICIENT","BLUE_LUMINANCE_COEFFICIENT","chunkSize","floor","hexArr","getChunksFromString","st","match","RegExp","slice","red","green","blue","hexStr","parseInt","repeat","factory","Object","assign"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/154.c895d1c8.chunk.js b/static/js/154.bcf6d50a.chunk.js similarity index 96% rename from static/js/154.c895d1c8.chunk.js rename to static/js/154.bcf6d50a.chunk.js index 4f74865..69481e2 100644 --- a/static/js/154.c895d1c8.chunk.js +++ b/static/js/154.bcf6d50a.chunk.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunksverg84_github_io=self.webpackChunksverg84_github_io||[]).push([[154],{1154:(e,r,t)=>{t.r(r),t.d(r,{default:()=>J});var n=t(2791),o=t(192);function a(){return(a=Object.assign||function(e){for(var r=1;r=0||(o[t]=e[t]);return o}function c(e){var r=(0,n.useRef)(e),t=(0,n.useRef)((function(e){r.current&&r.current(e)}));return r.current=e,t.current}var l=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=1),e>t?t:e0:e.buttons>0)&&l.current?h(f(l.current,e,p.current)):t(!1)},r=function(){return t(!1)};function t(t){var n=g.current,o=s(l.current),a=t?o.addEventListener:o.removeEventListener;a(n?"touchmove":"mousemove",e),a(n?"touchend":"mouseup",r)}return[function(e){var r=e.nativeEvent,n=l.current;if(n&&(v(r),!function(e,r){return r&&!i(e)}(r,g.current)&&n)){if(i(r)){g.current=!0;var o=r.changedTouches||[];o.length&&(p.current=o[0].identifier)}n.focus(),h(f(n,r,p.current)),t(!0)}},function(e){var r=e.which||e.keyCode;r<37||r>40||(e.preventDefault(),d({left:39===r?.05:37===r?-.05:0,top:40===r?.05:38===r?-.05:0}))},t]}),[d,h]),_=m[0],b=m[1],x=m[2];return(0,n.useEffect)((function(){return x}),[x]),n.createElement("div",a({},o,{onTouchStart:_,onMouseDown:_,className:"react-colorful__interactive",ref:l,onKeyDown:b,tabIndex:0,role:"slider"}))})),d=function(e){return e.filter(Boolean).join(" ")},p=function(e){var r=e.color,t=e.left,o=e.top,a=void 0===o?.5:o,u=d(["react-colorful__pointer",e.className]);return n.createElement("div",{className:u,style:{top:100*a+"%",left:100*t+"%"}},n.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:r}}))},g=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=Math.pow(10,r)),Math.round(t*e)/t},m=(Math.PI,function(e){return M(_(e))}),_=function(e){return"#"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?g(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?g(parseInt(e.substring(6,8),16)/255,2):1}},b=function(e){return E(w(e))},x=function(e){var r=e.s,t=e.v,n=e.a,o=(200-r)*t/100;return{h:g(e.h),s:g(o>0&&o<200?r*t/100/(o<=100?o:200-o)*100:0),l:g(o/2),a:g(n,2)}},C=function(e){var r=x(e);return"hsl("+r.h+", "+r.s+"%, "+r.l+"%)"},w=function(e){var r=e.h,t=e.s,n=e.v,o=e.a;r=r/360*6,t/=100,n/=100;var a=Math.floor(r),u=n*(1-t),c=n*(1-(r-a)*t),l=n*(1-(1-r+a)*t),i=a%6;return{r:g(255*[n,c,u,u,l,n][i]),g:g(255*[l,n,n,c,u,u][i]),b:g(255*[u,u,l,n,n,c][i]),a:g(o,2)}},k=function(e){var r=e.toString(16);return r.length<2?"0"+r:r},E=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=o<1?k(g(255*o)):"";return"#"+k(r)+k(t)+k(n)+a},M=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=Math.max(r,t,n),u=a-Math.min(r,t,n),c=u?a===r?(t-n)/u:a===t?2+(n-r)/u:4+(r-t)/u:0;return{h:g(60*(c<0?c+6:c)),s:g(a?u/a*100:0),v:g(a/255*100),a:o}},y=n.memo((function(e){var r=e.hue,t=e.onChange,o=d(["react-colorful__hue",e.className]);return n.createElement("div",{className:o},n.createElement(h,{onMove:function(e){t({h:360*e.left})},onKey:function(e){t({h:l(r+360*e.left,0,360)})},"aria-label":"Hue","aria-valuenow":g(r),"aria-valuemax":"360","aria-valuemin":"0"},n.createElement(p,{className:"react-colorful__hue-pointer",left:r/360,color:C({h:r,s:100,v:100,a:1})})))})),N=n.memo((function(e){var r=e.hsva,t=e.onChange,o={backgroundColor:C({h:r.h,s:100,v:100,a:1})};return n.createElement("div",{className:"react-colorful__saturation",style:o},n.createElement(h,{onMove:function(e){t({s:100*e.left,v:100-100*e.top})},onKey:function(e){t({s:l(r.s+100*e.left,0,100),v:l(r.v-100*e.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+g(r.s)+"%, Brightness "+g(r.v)+"%"},n.createElement(p,{className:"react-colorful__saturation-pointer",top:1-r.v/100,left:r.s/100,color:C(r)})))})),I=function(e,r){if(e===r)return!0;for(var t in e)if(e[t]!==r[t])return!1;return!0},j=function(e,r){return e.toLowerCase()===r.toLowerCase()||I(_(e),_(r))};function H(e,r,t){var o=c(t),a=(0,n.useState)((function(){return e.toHsva(r)})),u=a[0],l=a[1],i=(0,n.useRef)({color:r,hsva:u});(0,n.useEffect)((function(){if(!e.equal(r,i.current.color)){var t=e.toHsva(r);i.current={hsva:t,color:r},l(t)}}),[r,e]),(0,n.useEffect)((function(){var r;I(u,i.current.hsva)||e.equal(r=e.fromHsva(u),i.current.color)||(i.current={hsva:u,color:r},o(r))}),[u,e,o]);var s=(0,n.useCallback)((function(e){l((function(r){return Object.assign({},r,e)}))}),[]);return[u,s]}var O,R="undefined"!=typeof window?n.useLayoutEffect:n.useEffect,z=new Map,B=function(e){R((function(){var r=e.current?e.current.ownerDocument:document;if(void 0!==r&&!z.has(r)){var n=r.createElement("style");n.innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\'data:image/svg+xml;charset=utf-8,\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}',z.set(r,n);var o=O||t.nc;o&&n.setAttribute("nonce",o),r.head.appendChild(n)}}),[])},D=function(e){var r=e.className,t=e.colorModel,o=e.color,c=void 0===o?t.defaultColor:o,l=e.onChange,i=u(e,["className","colorModel","color","onChange"]),s=(0,n.useRef)(null);B(s);var f=H(t,c,l),v=f[0],h=f[1],p=d(["react-colorful",r]);return n.createElement("div",a({},i,{ref:s,className:p}),n.createElement(N,{hsva:v,onChange:h}),n.createElement(y,{hue:v.h,onChange:h,className:"react-colorful__last-control"}))},L={defaultColor:"000",toHsva:m,fromHsva:function(e){return b({h:e.h,s:e.s,v:e.v,a:1})},equal:j},P=function(e){return n.createElement(D,a({},e,{colorModel:L}))},K=/^#?([0-9A-F]{3,8})$/i,S=function(e){var r=e.color,t=void 0===r?"":r,o=e.onChange,l=e.onBlur,i=e.escape,s=e.validate,f=e.format,v=e.process,h=u(e,["color","onChange","onBlur","escape","validate","format","process"]),d=(0,n.useState)((function(){return i(t)})),p=d[0],g=d[1],m=c(o),_=c(l),b=(0,n.useCallback)((function(e){var r=i(e.target.value);g(r),s(r)&&m(v?v(r):r)}),[i,v,s,m]),x=(0,n.useCallback)((function(e){s(e.target.value)||g(i(t)),_(e)}),[t,i,s,_]);return(0,n.useEffect)((function(){g(i(t))}),[t,i]),n.createElement("input",a({},h,{value:f?f(p):p,spellCheck:"false",onChange:b,onBlur:x}))},q=function(e){return"#"+e},T=function(e){var r=e.prefixed,t=e.alpha,o=u(e,["prefixed","alpha"]),c=(0,n.useCallback)((function(e){return e.replace(/([^0-9A-F]+)/gi,"").substring(0,t?8:6)}),[t]),l=(0,n.useCallback)((function(e){return function(e,r){var t=K.exec(e),n=t?t[1].length:0;return 3===n||6===n||!!r&&4===n||!!r&&8===n}(e,t)}),[t]);return n.createElement(S,a({},o,{escape:c,format:r?q:void 0,process:q,validate:l}))},A=t(8025);const F={header:"colorPickerMenu_header__OJJvr",picker:"colorPickerMenu_picker__6xE7X",dropdown:"colorPickerMenu_dropdown__qTmIa"};var X=t(184);function J(){const{color:e,setColor:r}=n.useContext(A.Z);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(o.Z.Header,{className:F.header,children:"Color Picker"}),(0,X.jsxs)("div",{className:F.picker,children:[(0,X.jsx)(P,{color:e,onChange:r}),(0,X.jsx)(T,{color:e,onChange:r})]})]})}}}]); -//# sourceMappingURL=154.c895d1c8.chunk.js.map \ No newline at end of file +"use strict";(self.webpackChunksverg84_github_io=self.webpackChunksverg84_github_io||[]).push([[154],{1154:(e,r,t)=>{t.r(r),t.d(r,{default:()=>J});var n=t(2791),o=t(192);function a(){return(a=Object.assign||function(e){for(var r=1;r=0||(o[t]=e[t]);return o}function c(e){var r=(0,n.useRef)(e),t=(0,n.useRef)((function(e){r.current&&r.current(e)}));return r.current=e,t.current}var l=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=1),e>t?t:e0:e.buttons>0)&&l.current?h(f(l.current,e,p.current)):t(!1)},r=function(){return t(!1)};function t(t){var n=g.current,o=s(l.current),a=t?o.addEventListener:o.removeEventListener;a(n?"touchmove":"mousemove",e),a(n?"touchend":"mouseup",r)}return[function(e){var r=e.nativeEvent,n=l.current;if(n&&(v(r),!function(e,r){return r&&!i(e)}(r,g.current)&&n)){if(i(r)){g.current=!0;var o=r.changedTouches||[];o.length&&(p.current=o[0].identifier)}n.focus(),h(f(n,r,p.current)),t(!0)}},function(e){var r=e.which||e.keyCode;r<37||r>40||(e.preventDefault(),d({left:39===r?.05:37===r?-.05:0,top:40===r?.05:38===r?-.05:0}))},t]}),[d,h]),_=m[0],b=m[1],x=m[2];return(0,n.useEffect)((function(){return x}),[x]),n.createElement("div",a({},o,{onTouchStart:_,onMouseDown:_,className:"react-colorful__interactive",ref:l,onKeyDown:b,tabIndex:0,role:"slider"}))})),d=function(e){return e.filter(Boolean).join(" ")},p=function(e){var r=e.color,t=e.left,o=e.top,a=void 0===o?.5:o,u=d(["react-colorful__pointer",e.className]);return n.createElement("div",{className:u,style:{top:100*a+"%",left:100*t+"%"}},n.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:r}}))},g=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=Math.pow(10,r)),Math.round(t*e)/t},m=(Math.PI,function(e){return M(_(e))}),_=function(e){return"#"===e[0]&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?g(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:8===e.length?g(parseInt(e.substring(6,8),16)/255,2):1}},b=function(e){return E(w(e))},x=function(e){var r=e.s,t=e.v,n=e.a,o=(200-r)*t/100;return{h:g(e.h),s:g(o>0&&o<200?r*t/100/(o<=100?o:200-o)*100:0),l:g(o/2),a:g(n,2)}},C=function(e){var r=x(e);return"hsl("+r.h+", "+r.s+"%, "+r.l+"%)"},w=function(e){var r=e.h,t=e.s,n=e.v,o=e.a;r=r/360*6,t/=100,n/=100;var a=Math.floor(r),u=n*(1-t),c=n*(1-(r-a)*t),l=n*(1-(1-r+a)*t),i=a%6;return{r:g(255*[n,c,u,u,l,n][i]),g:g(255*[l,n,n,c,u,u][i]),b:g(255*[u,u,l,n,n,c][i]),a:g(o,2)}},k=function(e){var r=e.toString(16);return r.length<2?"0"+r:r},E=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=o<1?k(g(255*o)):"";return"#"+k(r)+k(t)+k(n)+a},M=function(e){var r=e.r,t=e.g,n=e.b,o=e.a,a=Math.max(r,t,n),u=a-Math.min(r,t,n),c=u?a===r?(t-n)/u:a===t?2+(n-r)/u:4+(r-t)/u:0;return{h:g(60*(c<0?c+6:c)),s:g(a?u/a*100:0),v:g(a/255*100),a:o}},y=n.memo((function(e){var r=e.hue,t=e.onChange,o=d(["react-colorful__hue",e.className]);return n.createElement("div",{className:o},n.createElement(h,{onMove:function(e){t({h:360*e.left})},onKey:function(e){t({h:l(r+360*e.left,0,360)})},"aria-label":"Hue","aria-valuenow":g(r),"aria-valuemax":"360","aria-valuemin":"0"},n.createElement(p,{className:"react-colorful__hue-pointer",left:r/360,color:C({h:r,s:100,v:100,a:1})})))})),N=n.memo((function(e){var r=e.hsva,t=e.onChange,o={backgroundColor:C({h:r.h,s:100,v:100,a:1})};return n.createElement("div",{className:"react-colorful__saturation",style:o},n.createElement(h,{onMove:function(e){t({s:100*e.left,v:100-100*e.top})},onKey:function(e){t({s:l(r.s+100*e.left,0,100),v:l(r.v-100*e.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+g(r.s)+"%, Brightness "+g(r.v)+"%"},n.createElement(p,{className:"react-colorful__saturation-pointer",top:1-r.v/100,left:r.s/100,color:C(r)})))})),I=function(e,r){if(e===r)return!0;for(var t in e)if(e[t]!==r[t])return!1;return!0},j=function(e,r){return e.toLowerCase()===r.toLowerCase()||I(_(e),_(r))};function H(e,r,t){var o=c(t),a=(0,n.useState)((function(){return e.toHsva(r)})),u=a[0],l=a[1],i=(0,n.useRef)({color:r,hsva:u});(0,n.useEffect)((function(){if(!e.equal(r,i.current.color)){var t=e.toHsva(r);i.current={hsva:t,color:r},l(t)}}),[r,e]),(0,n.useEffect)((function(){var r;I(u,i.current.hsva)||e.equal(r=e.fromHsva(u),i.current.color)||(i.current={hsva:u,color:r},o(r))}),[u,e,o]);var s=(0,n.useCallback)((function(e){l((function(r){return Object.assign({},r,e)}))}),[]);return[u,s]}var O,R="undefined"!=typeof window?n.useLayoutEffect:n.useEffect,z=new Map,B=function(e){R((function(){var r=e.current?e.current.ownerDocument:document;if(void 0!==r&&!z.has(r)){var n=r.createElement("style");n.innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\'data:image/svg+xml;charset=utf-8,\')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}',z.set(r,n);var o=O||t.nc;o&&n.setAttribute("nonce",o),r.head.appendChild(n)}}),[])},D=function(e){var r=e.className,t=e.colorModel,o=e.color,c=void 0===o?t.defaultColor:o,l=e.onChange,i=u(e,["className","colorModel","color","onChange"]),s=(0,n.useRef)(null);B(s);var f=H(t,c,l),v=f[0],h=f[1],p=d(["react-colorful",r]);return n.createElement("div",a({},i,{ref:s,className:p}),n.createElement(N,{hsva:v,onChange:h}),n.createElement(y,{hue:v.h,onChange:h,className:"react-colorful__last-control"}))},L={defaultColor:"000",toHsva:m,fromHsva:function(e){return b({h:e.h,s:e.s,v:e.v,a:1})},equal:j},P=function(e){return n.createElement(D,a({},e,{colorModel:L}))},K=/^#?([0-9A-F]{3,8})$/i,S=function(e){var r=e.color,t=void 0===r?"":r,o=e.onChange,l=e.onBlur,i=e.escape,s=e.validate,f=e.format,v=e.process,h=u(e,["color","onChange","onBlur","escape","validate","format","process"]),d=(0,n.useState)((function(){return i(t)})),p=d[0],g=d[1],m=c(o),_=c(l),b=(0,n.useCallback)((function(e){var r=i(e.target.value);g(r),s(r)&&m(v?v(r):r)}),[i,v,s,m]),x=(0,n.useCallback)((function(e){s(e.target.value)||g(i(t)),_(e)}),[t,i,s,_]);return(0,n.useEffect)((function(){g(i(t))}),[t,i]),n.createElement("input",a({},h,{value:f?f(p):p,spellCheck:"false",onChange:b,onBlur:x}))},q=function(e){return"#"+e},T=function(e){var r=e.prefixed,t=e.alpha,o=u(e,["prefixed","alpha"]),c=(0,n.useCallback)((function(e){return e.replace(/([^0-9A-F]+)/gi,"").substring(0,t?8:6)}),[t]),l=(0,n.useCallback)((function(e){return function(e,r){var t=K.exec(e),n=t?t[1].length:0;return 3===n||6===n||!!r&&4===n||!!r&&8===n}(e,t)}),[t]);return n.createElement(S,a({},o,{escape:c,format:r?q:void 0,process:q,validate:l}))},A=t(8025);const F={header:"colorPickerMenu_header__OJJvr",picker:"colorPickerMenu_picker__6xE7X",dropdown:"colorPickerMenu_dropdown__qTmIa"};var X=t(184);function J(){const[e,r]=n.useContext(A.Z);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(o.Z.Header,{className:F.header,children:"Color Picker"}),(0,X.jsxs)("div",{className:F.picker,children:[(0,X.jsx)(P,{color:e,onChange:r}),(0,X.jsx)(T,{color:e,onChange:r})]})]})}}}]); +//# sourceMappingURL=154.bcf6d50a.chunk.js.map \ No newline at end of file diff --git a/static/js/154.bcf6d50a.chunk.js.map b/static/js/154.bcf6d50a.chunk.js.map new file mode 100644 index 0000000..e60c8f8 --- /dev/null +++ b/static/js/154.bcf6d50a.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/154.bcf6d50a.chunk.js","mappings":"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","sources":["../node_modules/react-colorful/src/hooks/useEventCallback.ts","../node_modules/react-colorful/src/utils/clamp.ts","../node_modules/react-colorful/src/components/common/Interactive.tsx","../node_modules/react-colorful/src/utils/format.ts","../node_modules/react-colorful/src/components/common/Pointer.tsx","../node_modules/react-colorful/src/utils/round.ts","../node_modules/react-colorful/src/utils/convert.ts","../node_modules/react-colorful/src/components/common/Hue.tsx","../node_modules/react-colorful/src/components/common/Saturation.tsx","../node_modules/react-colorful/src/utils/compare.ts","../node_modules/react-colorful/src/hooks/useColorManipulation.ts","../node_modules/react-colorful/src/utils/nonce.ts","../node_modules/react-colorful/src/hooks/useIsomorphicLayoutEffect.ts","../node_modules/react-colorful/src/hooks/useStyleSheet.ts","../node_modules/react-colorful/src/components/common/ColorPicker.tsx","../node_modules/react-colorful/src/components/HexColorPicker.tsx","../node_modules/react-colorful/src/utils/validate.ts","../node_modules/react-colorful/src/components/common/ColorInput.tsx","../node_modules/react-colorful/src/components/HexColorInput.tsx","webpack://sverg84.github.io/./src/impl/styles/nav/colorPickerMenu.module.scss?0d60","impl/components/nav/PageNavColorPickerMenu.tsx"],"sourcesContent":["import { useRef } from \"react\";\n\n// Saves incoming handler to the ref in order to avoid \"useCallback hell\"\nexport function useEventCallback(handler?: (value: T) => void): (value: T) => void {\n const callbackRef = useRef(handler);\n const fn = useRef((value: T) => {\n callbackRef.current && callbackRef.current(value);\n });\n callbackRef.current = handler;\n\n return fn.current;\n}\n","// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport const clamp = (number: number, min = 0, max = 1): number => {\n return number > max ? max : number < min ? min : number;\n};\n","import React, { useRef, useMemo, useEffect } from \"react\";\n\nimport { useEventCallback } from \"../../hooks/useEventCallback\";\nimport { clamp } from \"../../utils/clamp\";\n\nexport interface Interaction {\n left: number;\n top: number;\n}\n\n// Check if an event was triggered by touch\nconst isTouch = (event: MouseEvent | TouchEvent): event is TouchEvent => \"touches\" in event;\n\n// Finds a proper touch point by its identifier\nconst getTouchPoint = (touches: TouchList, touchId: null | number): Touch => {\n for (let i = 0; i < touches.length; i++) {\n if (touches[i].identifier === touchId) return touches[i];\n }\n return touches[0];\n};\n\n// Finds the proper window object to fix iframe embedding issues\nconst getParentWindow = (node?: HTMLDivElement | null): Window => {\n return (node && node.ownerDocument.defaultView) || self;\n};\n\n// Returns a relative position of the pointer inside the node's bounding box\nconst getRelativePosition = (\n node: HTMLDivElement,\n event: MouseEvent | TouchEvent,\n touchId: null | number\n): Interaction => {\n const rect = node.getBoundingClientRect();\n\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\n const pointer = isTouch(event) ? getTouchPoint(event.touches, touchId) : (event as MouseEvent);\n\n return {\n left: clamp((pointer.pageX - (rect.left + getParentWindow(node).pageXOffset)) / rect.width),\n top: clamp((pointer.pageY - (rect.top + getParentWindow(node).pageYOffset)) / rect.height),\n };\n};\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nconst preventDefaultMove = (event: MouseEvent | TouchEvent): void => {\n !isTouch(event) && event.preventDefault();\n};\n\n// Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n// If we detected a touch interaction before, we prefer reacting to touch events only.\nconst isInvalid = (event: MouseEvent | TouchEvent, hasTouch: boolean): boolean => {\n return hasTouch && !isTouch(event);\n};\n\ninterface Props {\n onMove: (interaction: Interaction) => void;\n onKey: (offset: Interaction) => void;\n children: React.ReactNode;\n}\n\nconst InteractiveBase = ({ onMove, onKey, ...rest }: Props) => {\n const container = useRef(null);\n const onMoveCallback = useEventCallback(onMove);\n const onKeyCallback = useEventCallback(onKey);\n const touchId = useRef(null);\n const hasTouch = useRef(false);\n\n const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = useMemo(() => {\n const handleMoveStart = ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\n const el = container.current;\n if (!el) return;\n\n // Prevent text selection\n preventDefaultMove(nativeEvent);\n\n if (isInvalid(nativeEvent, hasTouch.current) || !el) return;\n\n if (isTouch(nativeEvent)) {\n hasTouch.current = true;\n const changedTouches = nativeEvent.changedTouches || [];\n if (changedTouches.length) touchId.current = changedTouches[0].identifier;\n }\n\n el.focus();\n onMoveCallback(getRelativePosition(el, nativeEvent, touchId.current));\n toggleDocumentEvents(true);\n };\n\n const handleMove = (event: MouseEvent | TouchEvent) => {\n // Prevent text selection\n preventDefaultMove(event);\n\n // If user moves the pointer outside of the window or iframe bounds and release it there,\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\n // without pressing it down\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0;\n\n if (isDown && container.current) {\n onMoveCallback(getRelativePosition(container.current, event, touchId.current));\n } else {\n toggleDocumentEvents(false);\n }\n };\n\n const handleMoveEnd = () => toggleDocumentEvents(false);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const keyCode = event.which || event.keyCode;\n\n // Ignore all keys except arrow ones\n if (keyCode < 37 || keyCode > 40) return;\n // Do not scroll page by arrow keys when document is focused on the element\n event.preventDefault();\n // Send relative offset to the parent component.\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\n // to reduce the size of the library\n onKeyCallback({\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\n });\n };\n\n function toggleDocumentEvents(state?: boolean) {\n const touch = hasTouch.current;\n const el = container.current;\n const parentWindow = getParentWindow(el);\n\n // Add or remove additional pointer event listeners\n const toggleEvent = state ? parentWindow.addEventListener : parentWindow.removeEventListener;\n toggleEvent(touch ? \"touchmove\" : \"mousemove\", handleMove);\n toggleEvent(touch ? \"touchend\" : \"mouseup\", handleMoveEnd);\n }\n\n return [handleMoveStart, handleKeyDown, toggleDocumentEvents];\n }, [onKeyCallback, onMoveCallback]);\n\n // Remove window event listeners before unmounting\n useEffect(() => toggleDocumentEvents, [toggleDocumentEvents]);\n\n return (\n \n );\n};\n\nexport const Interactive = React.memo(InteractiveBase);\n","export const formatClassName = (names: unknown[]): string => names.filter(Boolean).join(\" \");\n","import React from \"react\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props {\n className?: string;\n top?: number;\n left: number;\n color: string;\n}\n\nexport const Pointer = ({ className, color, left, top = 0.5 }: Props): JSX.Element => {\n const nodeClassName = formatClassName([\"react-colorful__pointer\", className]);\n\n const style = {\n top: `${top * 100}%`,\n left: `${left * 100}%`,\n };\n\n return (\n
\n
\n
\n );\n};\n","export const round = (number: number, digits = 0, base = Math.pow(10, digits)): number => {\n return Math.round(base * number) / base;\n};\n","import { round } from \"./round\";\nimport { RgbaColor, RgbColor, HslaColor, HslColor, HsvaColor, HsvColor } from \"../types\";\n\n/**\n * Valid CSS units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nconst angleUnits: Record = {\n grad: 360 / 400,\n turn: 360,\n rad: 360 / (Math.PI * 2),\n};\n\nexport const hexToHsva = (hex: string): HsvaColor => rgbaToHsva(hexToRgba(hex));\n\nexport const hexToRgba = (hex: string): RgbaColor => {\n if (hex[0] === \"#\") hex = hex.substring(1);\n\n if (hex.length < 6) {\n return {\n r: parseInt(hex[0] + hex[0], 16),\n g: parseInt(hex[1] + hex[1], 16),\n b: parseInt(hex[2] + hex[2], 16),\n a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1,\n };\n }\n\n return {\n r: parseInt(hex.substring(0, 2), 16),\n g: parseInt(hex.substring(2, 4), 16),\n b: parseInt(hex.substring(4, 6), 16),\n a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1,\n };\n};\n\nexport const parseHue = (value: string, unit = \"deg\"): number => {\n return Number(value) * (angleUnits[unit] || 1);\n};\n\nexport const hslaStringToHsva = (hslString: string): HsvaColor => {\n const matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hslString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return hslaToHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n l: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hslStringToHsva = hslaStringToHsva;\n\nexport const hslaToHsva = ({ h, s, l, a }: HslaColor): HsvaColor => {\n s *= (l < 50 ? l : 100 - l) / 100;\n\n return {\n h: h,\n s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0,\n v: l + s,\n a,\n };\n};\n\nexport const hsvaToHex = (hsva: HsvaColor): string => rgbaToHex(hsvaToRgba(hsva));\n\nexport const hsvaToHsla = ({ h, s, v, a }: HsvaColor): HslaColor => {\n const hh = ((200 - s) * v) / 100;\n\n return {\n h: round(h),\n s: round(hh > 0 && hh < 200 ? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100 : 0),\n l: round(hh / 2),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToHslString = (hsva: HsvaColor): string => {\n const { h, s, l } = hsvaToHsla(hsva);\n return `hsl(${h}, ${s}%, ${l}%)`;\n};\n\nexport const hsvaToHsvString = (hsva: HsvaColor): string => {\n const { h, s, v } = roundHsva(hsva);\n return `hsv(${h}, ${s}%, ${v}%)`;\n};\n\nexport const hsvaToHsvaString = (hsva: HsvaColor): string => {\n const { h, s, v, a } = roundHsva(hsva);\n return `hsva(${h}, ${s}%, ${v}%, ${a})`;\n};\n\nexport const hsvaToHslaString = (hsva: HsvaColor): string => {\n const { h, s, l, a } = hsvaToHsla(hsva);\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n};\n\nexport const hsvaToRgba = ({ h, s, v, a }: HsvaColor): RgbaColor => {\n h = (h / 360) * 6;\n s = s / 100;\n v = v / 100;\n\n const hh = Math.floor(h),\n b = v * (1 - s),\n c = v * (1 - (h - hh) * s),\n d = v * (1 - (1 - h + hh) * s),\n module = hh % 6;\n\n return {\n r: round([v, c, b, b, d, v][module] * 255),\n g: round([d, v, v, c, b, b][module] * 255),\n b: round([b, b, d, v, v, c][module] * 255),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToRgbString = (hsva: HsvaColor): string => {\n const { r, g, b } = hsvaToRgba(hsva);\n return `rgb(${r}, ${g}, ${b})`;\n};\n\nexport const hsvaToRgbaString = (hsva: HsvaColor): string => {\n const { r, g, b, a } = hsvaToRgba(hsva);\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\n\nexport const hsvaStringToHsva = (hsvString: string): HsvaColor => {\n const matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hsvString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return roundHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n v: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hsvStringToHsva = hsvaStringToHsva;\n\nexport const rgbaStringToHsva = (rgbaString: string): HsvaColor => {\n const matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(rgbaString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return rgbaToHsva({\n r: Number(match[1]) / (match[2] ? 100 / 255 : 1),\n g: Number(match[3]) / (match[4] ? 100 / 255 : 1),\n b: Number(match[5]) / (match[6] ? 100 / 255 : 1),\n a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1),\n });\n};\n\nexport const rgbStringToHsva = rgbaStringToHsva;\n\nconst format = (number: number) => {\n const hex = number.toString(16);\n return hex.length < 2 ? \"0\" + hex : hex;\n};\n\nexport const rgbaToHex = ({ r, g, b, a }: RgbaColor): string => {\n const alphaHex = a < 1 ? format(round(a * 255)) : \"\";\n return \"#\" + format(r) + format(g) + format(b) + alphaHex;\n};\n\nexport const rgbaToHsva = ({ r, g, b, a }: RgbaColor): HsvaColor => {\n const max = Math.max(r, g, b);\n const delta = max - Math.min(r, g, b);\n\n // prettier-ignore\n const hh = delta\n ? max === r\n ? (g - b) / delta\n : max === g\n ? 2 + (b - r) / delta\n : 4 + (r - g) / delta\n : 0;\n\n return {\n h: round(60 * (hh < 0 ? hh + 6 : hh)),\n s: round(max ? (delta / max) * 100 : 0),\n v: round((max / 255) * 100),\n a,\n };\n};\n\nexport const roundHsva = (hsva: HsvaColor): HsvaColor => ({\n h: round(hsva.h),\n s: round(hsva.s),\n v: round(hsva.v),\n a: round(hsva.a, 2),\n});\n\nexport const rgbaToRgb = ({ r, g, b }: RgbaColor): RgbColor => ({ r, g, b });\n\nexport const hslaToHsl = ({ h, s, l }: HslaColor): HslColor => ({ h, s, l });\n\nexport const hsvaToHsv = (hsva: HsvaColor): HsvColor => {\n const { h, s, v } = roundHsva(hsva);\n return { h, s, v };\n};\n","import React from \"react\";\n\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\n\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { formatClassName } from \"../../utils/format\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n className?: string;\n hue: number;\n onChange: (newHue: { h: number }) => void;\n}\n\nconst HueBase = ({ className, hue, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({ h: 360 * interaction.left });\n };\n\n const handleKey = (offset: Interaction) => {\n // Hue measured in degrees of the color circle ranging from 0 to 360\n onChange({\n h: clamp(hue + offset.left * 360, 0, 360),\n });\n };\n\n const nodeClassName = formatClassName([\"react-colorful__hue\", className]);\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport const Hue = React.memo(HueBase);\n","import React from \"react\";\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\nimport { HsvaColor } from \"../../types\";\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n hsva: HsvaColor;\n onChange: (newColor: { s: number; v: number }) => void;\n}\n\nconst SaturationBase = ({ hsva, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({\n s: interaction.left * 100,\n v: 100 - interaction.top * 100,\n });\n };\n\n const handleKey = (offset: Interaction) => {\n // Saturation and brightness always fit into [0, 100] range\n onChange({\n s: clamp(hsva.s + offset.left * 100, 0, 100),\n v: clamp(hsva.v - offset.top * 100, 0, 100),\n });\n };\n\n const containerStyle = {\n backgroundColor: hsvaToHslString({ h: hsva.h, s: 100, v: 100, a: 1 }),\n };\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport const Saturation = React.memo(SaturationBase);\n","import { hexToRgba } from \"./convert\";\nimport { ObjectColor } from \"../types\";\n\nexport const equalColorObjects = (first: ObjectColor, second: ObjectColor): boolean => {\n if (first === second) return true;\n\n for (const prop in first) {\n // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n // we must cast our object to unknown (as RGB demands `r` be a key, while `Record` does not care if\n // there is or not), and then as a type TS can iterate over.\n if (\n ((first as unknown) as Record)[prop] !==\n ((second as unknown) as Record)[prop]\n )\n return false;\n }\n\n return true;\n};\n\nexport const equalColorString = (first: string, second: string): boolean => {\n return first.replace(/\\s/g, \"\") === second.replace(/\\s/g, \"\");\n};\n\nexport const equalHex = (first: string, second: string): boolean => {\n if (first.toLowerCase() === second.toLowerCase()) return true;\n\n // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { ColorModel, AnyColor, HsvaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { useEventCallback } from \"./useEventCallback\";\n\nexport function useColorManipulation(\n colorModel: ColorModel,\n color: T,\n onChange?: (color: T) => void\n): [HsvaColor, (color: Partial) => void] {\n // Save onChange callback in the ref for avoiding \"useCallback hell\"\n const onChangeCallback = useEventCallback(onChange);\n\n // No matter which color model is used (HEX, RGB(A) or HSL(A)),\n // all internal calculations are based on HSVA model\n const [hsva, updateHsva] = useState(() => colorModel.toHsva(color));\n\n // By using this ref we're able to prevent extra updates\n // and the effects recursion during the color conversion\n const cache = useRef({ color, hsva });\n\n // Update local HSVA-value if `color` property value is changed,\n // but only if that's not the same color that we just sent to the parent\n useEffect(() => {\n if (!colorModel.equal(color, cache.current.color)) {\n const newHsva = colorModel.toHsva(color);\n cache.current = { hsva: newHsva, color };\n updateHsva(newHsva);\n }\n }, [color, colorModel]);\n\n // Trigger `onChange` callback only if an updated color is different from cached one;\n // save the new color to the ref to prevent unnecessary updates\n useEffect(() => {\n let newColor;\n if (\n !equalColorObjects(hsva, cache.current.hsva) &&\n !colorModel.equal((newColor = colorModel.fromHsva(hsva)), cache.current.color)\n ) {\n cache.current = { hsva, color: newColor };\n onChangeCallback(newColor);\n }\n }, [hsva, colorModel, onChangeCallback]);\n\n // Merge the current HSVA color object with updated params.\n // For example, when a child component sends `h` or `s` only\n const handleChange = useCallback((params: Partial) => {\n updateHsva((current) => Object.assign({}, current, params));\n }, []);\n\n return [hsva, handleChange];\n}\n","declare const __webpack_nonce__: string | undefined;\nlet nonce: string | undefined;\n\n/**\n * Returns a nonce hash included by Webpack or the one defined manually by developer.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce\n * https://webpack.js.org/guides/csp/\n */\nexport const getNonce = (): string | undefined => {\n if (nonce) return nonce;\n if (typeof __webpack_nonce__ !== \"undefined\") return __webpack_nonce__;\n return undefined;\n};\n\n/**\n * Signs the style tag with a base64-encoded string (nonce) to conforms to Content Security Policies.\n * This function has to be invoked before any picker is rendered if you aren't using Webpack for CSP.\n */\nexport const setNonce = (hash: string): void => {\n nonce = hash;\n};\n","import { useLayoutEffect, useEffect } from \"react\";\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { RefObject } from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { getNonce } from \"../utils/nonce\";\n\n// Bundler is configured to load this as a processed minified CSS-string\nimport styles from \"../css/styles.css\";\n\nconst styleElementMap: Map = new Map();\n\n/**\n * Injects CSS code into the document's \n */\nexport const useStyleSheet = (nodeRef: RefObject): void => {\n useIsomorphicLayoutEffect(() => {\n const parentDocument = nodeRef.current ? nodeRef.current.ownerDocument : document;\n\n if (typeof parentDocument !== \"undefined\" && !styleElementMap.has(parentDocument)) {\n const styleElement = parentDocument.createElement(\"style\");\n styleElement.innerHTML = styles;\n styleElementMap.set(parentDocument, styleElement);\n\n // Conform to CSP rules by setting `nonce` attribute to the inline styles\n const nonce = getNonce();\n if (nonce) styleElement.setAttribute(\"nonce\", nonce);\n\n parentDocument.head.appendChild(styleElement);\n }\n }, []);\n};\n","import React, { useRef } from \"react\";\n\nimport { Hue } from \"./Hue\";\nimport { Saturation } from \"./Saturation\";\n\nimport { ColorModel, ColorPickerBaseProps, AnyColor } from \"../../types\";\nimport { useColorManipulation } from \"../../hooks/useColorManipulation\";\nimport { useStyleSheet } from \"../../hooks/useStyleSheet\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props extends Partial> {\n colorModel: ColorModel;\n}\n\nexport const ColorPicker = ({\n className,\n colorModel,\n color = colorModel.defaultColor,\n onChange,\n ...rest\n}: Props): JSX.Element => {\n const nodeRef = useRef(null);\n useStyleSheet(nodeRef);\n\n const [hsva, updateHsva] = useColorManipulation(colorModel, color, onChange);\n\n const nodeClassName = formatClassName([\"react-colorful\", className]);\n\n return (\n
\n \n \n
\n );\n};\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalHex } from \"../utils/compare\";\nimport { hexToHsva, hsvaToHex } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"000\",\n toHsva: hexToHsva,\n fromHsva: ({ h, s, v }) => hsvaToHex({ h, s, v, a: 1 }),\n equal: equalHex,\n};\n\nexport const HexColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","const matcher = /^#?([0-9A-F]{3,8})$/i;\n\nexport const validHex = (value: string, alpha?: boolean): boolean => {\n const match = matcher.exec(value);\n const length = match ? match[1].length : 0;\n\n return (\n length === 3 || // '#rgb' format\n length === 6 || // '#rrggbb' format\n (!!alpha && length === 4) || // '#rgba' format\n (!!alpha && length === 8) // '#rrggbbaa' format\n );\n};\n","import React, { useState, useEffect, useCallback } from \"react\";\n\nimport { useEventCallback } from \"../../hooks/useEventCallback\";\nimport { ColorInputBaseProps } from \"../../types\";\n\ninterface Props extends ColorInputBaseProps {\n /** Blocks typing invalid characters and limits string length */\n escape: (value: string) => string;\n /** Checks that value is valid color string */\n validate: (value: string) => boolean;\n /** Processes value before displaying it in the input */\n format?: (value: string) => string;\n /** Processes value before sending it in `onChange` */\n process?: (value: string) => string;\n}\n\nexport const ColorInput = (props: Props): JSX.Element => {\n const { color = \"\", onChange, onBlur, escape, validate, format, process, ...rest } = props;\n const [value, setValue] = useState(() => escape(color));\n const onChangeCallback = useEventCallback(onChange);\n const onBlurCallback = useEventCallback>(onBlur);\n\n // Trigger `onChange` handler only if the input value is a valid color\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const inputValue = escape(e.target.value);\n setValue(inputValue);\n if (validate(inputValue)) onChangeCallback(process ? process(inputValue) : inputValue);\n },\n [escape, process, validate, onChangeCallback]\n );\n\n // Take the color from props if the last typed color (in local state) is not valid\n const handleBlur = useCallback(\n (e: React.FocusEvent) => {\n if (!validate(e.target.value)) setValue(escape(color));\n onBlurCallback(e);\n },\n [color, escape, validate, onBlurCallback]\n );\n\n // Update the local state when `color` property value is changed\n useEffect(() => {\n setValue(escape(color));\n }, [color, escape]);\n\n return (\n \n );\n};\n","import React, { useCallback } from \"react\";\nimport { ColorInputBaseProps } from \"../types\";\n\nimport { validHex } from \"../utils/validate\";\nimport { ColorInput } from \"./common/ColorInput\";\n\ninterface HexColorInputProps extends ColorInputBaseProps {\n /** Enables `#` prefix displaying */\n prefixed?: boolean;\n /** Allows `#rgba` and `#rrggbbaa` color formats */\n alpha?: boolean;\n}\n\n/** Adds \"#\" symbol to the beginning of the string */\nconst prefix = (value: string) => \"#\" + value;\n\nexport const HexColorInput = (props: HexColorInputProps): JSX.Element => {\n const { prefixed, alpha, ...rest } = props;\n\n /** Escapes all non-hexadecimal characters including \"#\" */\n const escape = useCallback(\n (value: string) => value.replace(/([^0-9A-F]+)/gi, \"\").substring(0, alpha ? 8 : 6),\n [alpha]\n );\n\n /** Validates hexadecimal strings */\n const validate = useCallback((value: string) => validHex(value, alpha), [alpha]);\n\n return (\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"colorPickerMenu_header__OJJvr\",\"picker\":\"colorPickerMenu_picker__6xE7X\",\"dropdown\":\"colorPickerMenu_dropdown__qTmIa\"};","import * as React from 'react';\nimport NavDropdown from 'react-bootstrap/esm/NavDropdown';\nimport { HexColorInput, HexColorPicker } from 'react-colorful';\n\nimport ColorContext from '../../contexts/ColorContext';\nimport styles from '../../styles/nav/colorPickerMenu.module.scss';\n\nexport default function PageNavColorPickerMenu(): React.JSX.Element {\n\tconst [color, setColor] = React.useContext(ColorContext);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tColor Picker\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n}\n"],"names":["i","e","t","r","n","current","s","f","v","ownerDocument","defaultView","self","d","getBoundingClientRect","o","length","identifier","touches","left","pageX","pageXOffset","width","top","pageY","pageYOffset","height","h","preventDefault","m","a","onMove","l","onKey","c","g","p","b","_","x","buttons","addEventListener","removeEventListener","nativeEvent","changedTouches","focus","which","keyCode","C","E","H","u","onTouchStart","onMouseDown","className","ref","onKeyDown","tabIndex","role","filter","Boolean","join","color","style","backgroundColor","Math","pow","round","PI","L","substring","parseInt","w","K","I","y","q","floor","D","toString","max","min","S","hue","onChange","T","hsva","F","X","toLowerCase","Y","toHsva","equal","fromHsva","Object","assign","R","V","window","J","Map","Q","document","has","createElement","innerHTML","set","__webpack_nonce__","setAttribute","head","appendChild","U","colorModel","defaultColor","W","Z","qe","ke","onBlur","escape","validate","format","process","target","value","spellCheck","Ie","Oe","prefixed","alpha","replace","exec","PageNavColorPickerMenu","setColor","React","ColorContext","_jsxs","_Fragment","children","_jsx","NavDropdown","Header","styles","header","picker","HexColorPicker","HexColorInput"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/154.c895d1c8.chunk.js.map b/static/js/154.c895d1c8.chunk.js.map deleted file mode 100644 index 3dc48b3..0000000 --- a/static/js/154.c895d1c8.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/154.c895d1c8.chunk.js","mappings":"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","sources":["../node_modules/react-colorful/src/hooks/useEventCallback.ts","../node_modules/react-colorful/src/utils/clamp.ts","../node_modules/react-colorful/src/components/common/Interactive.tsx","../node_modules/react-colorful/src/utils/format.ts","../node_modules/react-colorful/src/components/common/Pointer.tsx","../node_modules/react-colorful/src/utils/round.ts","../node_modules/react-colorful/src/utils/convert.ts","../node_modules/react-colorful/src/components/common/Hue.tsx","../node_modules/react-colorful/src/components/common/Saturation.tsx","../node_modules/react-colorful/src/utils/compare.ts","../node_modules/react-colorful/src/hooks/useColorManipulation.ts","../node_modules/react-colorful/src/utils/nonce.ts","../node_modules/react-colorful/src/hooks/useIsomorphicLayoutEffect.ts","../node_modules/react-colorful/src/hooks/useStyleSheet.ts","../node_modules/react-colorful/src/components/common/ColorPicker.tsx","../node_modules/react-colorful/src/components/HexColorPicker.tsx","../node_modules/react-colorful/src/utils/validate.ts","../node_modules/react-colorful/src/components/common/ColorInput.tsx","../node_modules/react-colorful/src/components/HexColorInput.tsx","webpack://sverg84.github.io/./src/impl/styles/nav/colorPickerMenu.module.scss?0d60","impl/components/nav/PageNavColorPickerMenu.tsx"],"sourcesContent":["import { useRef } from \"react\";\n\n// Saves incoming handler to the ref in order to avoid \"useCallback hell\"\nexport function useEventCallback(handler?: (value: T) => void): (value: T) => void {\n const callbackRef = useRef(handler);\n const fn = useRef((value: T) => {\n callbackRef.current && callbackRef.current(value);\n });\n callbackRef.current = handler;\n\n return fn.current;\n}\n","// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport const clamp = (number: number, min = 0, max = 1): number => {\n return number > max ? max : number < min ? min : number;\n};\n","import React, { useRef, useMemo, useEffect } from \"react\";\n\nimport { useEventCallback } from \"../../hooks/useEventCallback\";\nimport { clamp } from \"../../utils/clamp\";\n\nexport interface Interaction {\n left: number;\n top: number;\n}\n\n// Check if an event was triggered by touch\nconst isTouch = (event: MouseEvent | TouchEvent): event is TouchEvent => \"touches\" in event;\n\n// Finds a proper touch point by its identifier\nconst getTouchPoint = (touches: TouchList, touchId: null | number): Touch => {\n for (let i = 0; i < touches.length; i++) {\n if (touches[i].identifier === touchId) return touches[i];\n }\n return touches[0];\n};\n\n// Finds the proper window object to fix iframe embedding issues\nconst getParentWindow = (node?: HTMLDivElement | null): Window => {\n return (node && node.ownerDocument.defaultView) || self;\n};\n\n// Returns a relative position of the pointer inside the node's bounding box\nconst getRelativePosition = (\n node: HTMLDivElement,\n event: MouseEvent | TouchEvent,\n touchId: null | number\n): Interaction => {\n const rect = node.getBoundingClientRect();\n\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\n const pointer = isTouch(event) ? getTouchPoint(event.touches, touchId) : (event as MouseEvent);\n\n return {\n left: clamp((pointer.pageX - (rect.left + getParentWindow(node).pageXOffset)) / rect.width),\n top: clamp((pointer.pageY - (rect.top + getParentWindow(node).pageYOffset)) / rect.height),\n };\n};\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nconst preventDefaultMove = (event: MouseEvent | TouchEvent): void => {\n !isTouch(event) && event.preventDefault();\n};\n\n// Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n// If we detected a touch interaction before, we prefer reacting to touch events only.\nconst isInvalid = (event: MouseEvent | TouchEvent, hasTouch: boolean): boolean => {\n return hasTouch && !isTouch(event);\n};\n\ninterface Props {\n onMove: (interaction: Interaction) => void;\n onKey: (offset: Interaction) => void;\n children: React.ReactNode;\n}\n\nconst InteractiveBase = ({ onMove, onKey, ...rest }: Props) => {\n const container = useRef(null);\n const onMoveCallback = useEventCallback(onMove);\n const onKeyCallback = useEventCallback(onKey);\n const touchId = useRef(null);\n const hasTouch = useRef(false);\n\n const [handleMoveStart, handleKeyDown, toggleDocumentEvents] = useMemo(() => {\n const handleMoveStart = ({ nativeEvent }: React.MouseEvent | React.TouchEvent) => {\n const el = container.current;\n if (!el) return;\n\n // Prevent text selection\n preventDefaultMove(nativeEvent);\n\n if (isInvalid(nativeEvent, hasTouch.current) || !el) return;\n\n if (isTouch(nativeEvent)) {\n hasTouch.current = true;\n const changedTouches = nativeEvent.changedTouches || [];\n if (changedTouches.length) touchId.current = changedTouches[0].identifier;\n }\n\n el.focus();\n onMoveCallback(getRelativePosition(el, nativeEvent, touchId.current));\n toggleDocumentEvents(true);\n };\n\n const handleMove = (event: MouseEvent | TouchEvent) => {\n // Prevent text selection\n preventDefaultMove(event);\n\n // If user moves the pointer outside of the window or iframe bounds and release it there,\n // `mouseup`/`touchend` won't be fired. In order to stop the picker from following the cursor\n // after the user has moved the mouse/finger back to the document, we check `event.buttons`\n // and `event.touches`. It allows us to detect that the user is just moving his pointer\n // without pressing it down\n const isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0;\n\n if (isDown && container.current) {\n onMoveCallback(getRelativePosition(container.current, event, touchId.current));\n } else {\n toggleDocumentEvents(false);\n }\n };\n\n const handleMoveEnd = () => toggleDocumentEvents(false);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const keyCode = event.which || event.keyCode;\n\n // Ignore all keys except arrow ones\n if (keyCode < 37 || keyCode > 40) return;\n // Do not scroll page by arrow keys when document is focused on the element\n event.preventDefault();\n // Send relative offset to the parent component.\n // We use codes (37←, 38↑, 39→, 40↓) instead of keys ('ArrowRight', 'ArrowDown', etc)\n // to reduce the size of the library\n onKeyCallback({\n left: keyCode === 39 ? 0.05 : keyCode === 37 ? -0.05 : 0,\n top: keyCode === 40 ? 0.05 : keyCode === 38 ? -0.05 : 0,\n });\n };\n\n function toggleDocumentEvents(state?: boolean) {\n const touch = hasTouch.current;\n const el = container.current;\n const parentWindow = getParentWindow(el);\n\n // Add or remove additional pointer event listeners\n const toggleEvent = state ? parentWindow.addEventListener : parentWindow.removeEventListener;\n toggleEvent(touch ? \"touchmove\" : \"mousemove\", handleMove);\n toggleEvent(touch ? \"touchend\" : \"mouseup\", handleMoveEnd);\n }\n\n return [handleMoveStart, handleKeyDown, toggleDocumentEvents];\n }, [onKeyCallback, onMoveCallback]);\n\n // Remove window event listeners before unmounting\n useEffect(() => toggleDocumentEvents, [toggleDocumentEvents]);\n\n return (\n \n );\n};\n\nexport const Interactive = React.memo(InteractiveBase);\n","export const formatClassName = (names: unknown[]): string => names.filter(Boolean).join(\" \");\n","import React from \"react\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props {\n className?: string;\n top?: number;\n left: number;\n color: string;\n}\n\nexport const Pointer = ({ className, color, left, top = 0.5 }: Props): JSX.Element => {\n const nodeClassName = formatClassName([\"react-colorful__pointer\", className]);\n\n const style = {\n top: `${top * 100}%`,\n left: `${left * 100}%`,\n };\n\n return (\n
\n
\n
\n );\n};\n","export const round = (number: number, digits = 0, base = Math.pow(10, digits)): number => {\n return Math.round(base * number) / base;\n};\n","import { round } from \"./round\";\nimport { RgbaColor, RgbColor, HslaColor, HslColor, HsvaColor, HsvColor } from \"../types\";\n\n/**\n * Valid CSS units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nconst angleUnits: Record = {\n grad: 360 / 400,\n turn: 360,\n rad: 360 / (Math.PI * 2),\n};\n\nexport const hexToHsva = (hex: string): HsvaColor => rgbaToHsva(hexToRgba(hex));\n\nexport const hexToRgba = (hex: string): RgbaColor => {\n if (hex[0] === \"#\") hex = hex.substring(1);\n\n if (hex.length < 6) {\n return {\n r: parseInt(hex[0] + hex[0], 16),\n g: parseInt(hex[1] + hex[1], 16),\n b: parseInt(hex[2] + hex[2], 16),\n a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1,\n };\n }\n\n return {\n r: parseInt(hex.substring(0, 2), 16),\n g: parseInt(hex.substring(2, 4), 16),\n b: parseInt(hex.substring(4, 6), 16),\n a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1,\n };\n};\n\nexport const parseHue = (value: string, unit = \"deg\"): number => {\n return Number(value) * (angleUnits[unit] || 1);\n};\n\nexport const hslaStringToHsva = (hslString: string): HsvaColor => {\n const matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hslString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return hslaToHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n l: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hslStringToHsva = hslaStringToHsva;\n\nexport const hslaToHsva = ({ h, s, l, a }: HslaColor): HsvaColor => {\n s *= (l < 50 ? l : 100 - l) / 100;\n\n return {\n h: h,\n s: s > 0 ? ((2 * s) / (l + s)) * 100 : 0,\n v: l + s,\n a,\n };\n};\n\nexport const hsvaToHex = (hsva: HsvaColor): string => rgbaToHex(hsvaToRgba(hsva));\n\nexport const hsvaToHsla = ({ h, s, v, a }: HsvaColor): HslaColor => {\n const hh = ((200 - s) * v) / 100;\n\n return {\n h: round(h),\n s: round(hh > 0 && hh < 200 ? ((s * v) / 100 / (hh <= 100 ? hh : 200 - hh)) * 100 : 0),\n l: round(hh / 2),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToHslString = (hsva: HsvaColor): string => {\n const { h, s, l } = hsvaToHsla(hsva);\n return `hsl(${h}, ${s}%, ${l}%)`;\n};\n\nexport const hsvaToHsvString = (hsva: HsvaColor): string => {\n const { h, s, v } = roundHsva(hsva);\n return `hsv(${h}, ${s}%, ${v}%)`;\n};\n\nexport const hsvaToHsvaString = (hsva: HsvaColor): string => {\n const { h, s, v, a } = roundHsva(hsva);\n return `hsva(${h}, ${s}%, ${v}%, ${a})`;\n};\n\nexport const hsvaToHslaString = (hsva: HsvaColor): string => {\n const { h, s, l, a } = hsvaToHsla(hsva);\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n};\n\nexport const hsvaToRgba = ({ h, s, v, a }: HsvaColor): RgbaColor => {\n h = (h / 360) * 6;\n s = s / 100;\n v = v / 100;\n\n const hh = Math.floor(h),\n b = v * (1 - s),\n c = v * (1 - (h - hh) * s),\n d = v * (1 - (1 - h + hh) * s),\n module = hh % 6;\n\n return {\n r: round([v, c, b, b, d, v][module] * 255),\n g: round([d, v, v, c, b, b][module] * 255),\n b: round([b, b, d, v, v, c][module] * 255),\n a: round(a, 2),\n };\n};\n\nexport const hsvaToRgbString = (hsva: HsvaColor): string => {\n const { r, g, b } = hsvaToRgba(hsva);\n return `rgb(${r}, ${g}, ${b})`;\n};\n\nexport const hsvaToRgbaString = (hsva: HsvaColor): string => {\n const { r, g, b, a } = hsvaToRgba(hsva);\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\n\nexport const hsvaStringToHsva = (hsvString: string): HsvaColor => {\n const matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(hsvString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return roundHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n v: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1),\n });\n};\n\nexport const hsvStringToHsva = hsvaStringToHsva;\n\nexport const rgbaStringToHsva = (rgbaString: string): HsvaColor => {\n const matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n const match = matcher.exec(rgbaString);\n\n if (!match) return { h: 0, s: 0, v: 0, a: 1 };\n\n return rgbaToHsva({\n r: Number(match[1]) / (match[2] ? 100 / 255 : 1),\n g: Number(match[3]) / (match[4] ? 100 / 255 : 1),\n b: Number(match[5]) / (match[6] ? 100 / 255 : 1),\n a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? 100 : 1),\n });\n};\n\nexport const rgbStringToHsva = rgbaStringToHsva;\n\nconst format = (number: number) => {\n const hex = number.toString(16);\n return hex.length < 2 ? \"0\" + hex : hex;\n};\n\nexport const rgbaToHex = ({ r, g, b, a }: RgbaColor): string => {\n const alphaHex = a < 1 ? format(round(a * 255)) : \"\";\n return \"#\" + format(r) + format(g) + format(b) + alphaHex;\n};\n\nexport const rgbaToHsva = ({ r, g, b, a }: RgbaColor): HsvaColor => {\n const max = Math.max(r, g, b);\n const delta = max - Math.min(r, g, b);\n\n // prettier-ignore\n const hh = delta\n ? max === r\n ? (g - b) / delta\n : max === g\n ? 2 + (b - r) / delta\n : 4 + (r - g) / delta\n : 0;\n\n return {\n h: round(60 * (hh < 0 ? hh + 6 : hh)),\n s: round(max ? (delta / max) * 100 : 0),\n v: round((max / 255) * 100),\n a,\n };\n};\n\nexport const roundHsva = (hsva: HsvaColor): HsvaColor => ({\n h: round(hsva.h),\n s: round(hsva.s),\n v: round(hsva.v),\n a: round(hsva.a, 2),\n});\n\nexport const rgbaToRgb = ({ r, g, b }: RgbaColor): RgbColor => ({ r, g, b });\n\nexport const hslaToHsl = ({ h, s, l }: HslaColor): HslColor => ({ h, s, l });\n\nexport const hsvaToHsv = (hsva: HsvaColor): HsvColor => {\n const { h, s, v } = roundHsva(hsva);\n return { h, s, v };\n};\n","import React from \"react\";\n\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\n\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { formatClassName } from \"../../utils/format\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n className?: string;\n hue: number;\n onChange: (newHue: { h: number }) => void;\n}\n\nconst HueBase = ({ className, hue, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({ h: 360 * interaction.left });\n };\n\n const handleKey = (offset: Interaction) => {\n // Hue measured in degrees of the color circle ranging from 0 to 360\n onChange({\n h: clamp(hue + offset.left * 360, 0, 360),\n });\n };\n\n const nodeClassName = formatClassName([\"react-colorful__hue\", className]);\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport const Hue = React.memo(HueBase);\n","import React from \"react\";\nimport { Interactive, Interaction } from \"./Interactive\";\nimport { Pointer } from \"./Pointer\";\nimport { HsvaColor } from \"../../types\";\nimport { hsvaToHslString } from \"../../utils/convert\";\nimport { clamp } from \"../../utils/clamp\";\nimport { round } from \"../../utils/round\";\n\ninterface Props {\n hsva: HsvaColor;\n onChange: (newColor: { s: number; v: number }) => void;\n}\n\nconst SaturationBase = ({ hsva, onChange }: Props) => {\n const handleMove = (interaction: Interaction) => {\n onChange({\n s: interaction.left * 100,\n v: 100 - interaction.top * 100,\n });\n };\n\n const handleKey = (offset: Interaction) => {\n // Saturation and brightness always fit into [0, 100] range\n onChange({\n s: clamp(hsva.s + offset.left * 100, 0, 100),\n v: clamp(hsva.v - offset.top * 100, 0, 100),\n });\n };\n\n const containerStyle = {\n backgroundColor: hsvaToHslString({ h: hsva.h, s: 100, v: 100, a: 1 }),\n };\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport const Saturation = React.memo(SaturationBase);\n","import { hexToRgba } from \"./convert\";\nimport { ObjectColor } from \"../types\";\n\nexport const equalColorObjects = (first: ObjectColor, second: ObjectColor): boolean => {\n if (first === second) return true;\n\n for (const prop in first) {\n // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n // we must cast our object to unknown (as RGB demands `r` be a key, while `Record` does not care if\n // there is or not), and then as a type TS can iterate over.\n if (\n ((first as unknown) as Record)[prop] !==\n ((second as unknown) as Record)[prop]\n )\n return false;\n }\n\n return true;\n};\n\nexport const equalColorString = (first: string, second: string): boolean => {\n return first.replace(/\\s/g, \"\") === second.replace(/\\s/g, \"\");\n};\n\nexport const equalHex = (first: string, second: string): boolean => {\n if (first.toLowerCase() === second.toLowerCase()) return true;\n\n // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { ColorModel, AnyColor, HsvaColor } from \"../types\";\nimport { equalColorObjects } from \"../utils/compare\";\nimport { useEventCallback } from \"./useEventCallback\";\n\nexport function useColorManipulation(\n colorModel: ColorModel,\n color: T,\n onChange?: (color: T) => void\n): [HsvaColor, (color: Partial) => void] {\n // Save onChange callback in the ref for avoiding \"useCallback hell\"\n const onChangeCallback = useEventCallback(onChange);\n\n // No matter which color model is used (HEX, RGB(A) or HSL(A)),\n // all internal calculations are based on HSVA model\n const [hsva, updateHsva] = useState(() => colorModel.toHsva(color));\n\n // By using this ref we're able to prevent extra updates\n // and the effects recursion during the color conversion\n const cache = useRef({ color, hsva });\n\n // Update local HSVA-value if `color` property value is changed,\n // but only if that's not the same color that we just sent to the parent\n useEffect(() => {\n if (!colorModel.equal(color, cache.current.color)) {\n const newHsva = colorModel.toHsva(color);\n cache.current = { hsva: newHsva, color };\n updateHsva(newHsva);\n }\n }, [color, colorModel]);\n\n // Trigger `onChange` callback only if an updated color is different from cached one;\n // save the new color to the ref to prevent unnecessary updates\n useEffect(() => {\n let newColor;\n if (\n !equalColorObjects(hsva, cache.current.hsva) &&\n !colorModel.equal((newColor = colorModel.fromHsva(hsva)), cache.current.color)\n ) {\n cache.current = { hsva, color: newColor };\n onChangeCallback(newColor);\n }\n }, [hsva, colorModel, onChangeCallback]);\n\n // Merge the current HSVA color object with updated params.\n // For example, when a child component sends `h` or `s` only\n const handleChange = useCallback((params: Partial) => {\n updateHsva((current) => Object.assign({}, current, params));\n }, []);\n\n return [hsva, handleChange];\n}\n","declare const __webpack_nonce__: string | undefined;\nlet nonce: string | undefined;\n\n/**\n * Returns a nonce hash included by Webpack or the one defined manually by developer.\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce\n * https://webpack.js.org/guides/csp/\n */\nexport const getNonce = (): string | undefined => {\n if (nonce) return nonce;\n if (typeof __webpack_nonce__ !== \"undefined\") return __webpack_nonce__;\n return undefined;\n};\n\n/**\n * Signs the style tag with a base64-encoded string (nonce) to conforms to Content Security Policies.\n * This function has to be invoked before any picker is rendered if you aren't using Webpack for CSP.\n */\nexport const setNonce = (hash: string): void => {\n nonce = hash;\n};\n","import { useLayoutEffect, useEffect } from \"react\";\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { RefObject } from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { getNonce } from \"../utils/nonce\";\n\n// Bundler is configured to load this as a processed minified CSS-string\nimport styles from \"../css/styles.css\";\n\nconst styleElementMap: Map = new Map();\n\n/**\n * Injects CSS code into the document's \n */\nexport const useStyleSheet = (nodeRef: RefObject): void => {\n useIsomorphicLayoutEffect(() => {\n const parentDocument = nodeRef.current ? nodeRef.current.ownerDocument : document;\n\n if (typeof parentDocument !== \"undefined\" && !styleElementMap.has(parentDocument)) {\n const styleElement = parentDocument.createElement(\"style\");\n styleElement.innerHTML = styles;\n styleElementMap.set(parentDocument, styleElement);\n\n // Conform to CSP rules by setting `nonce` attribute to the inline styles\n const nonce = getNonce();\n if (nonce) styleElement.setAttribute(\"nonce\", nonce);\n\n parentDocument.head.appendChild(styleElement);\n }\n }, []);\n};\n","import React, { useRef } from \"react\";\n\nimport { Hue } from \"./Hue\";\nimport { Saturation } from \"./Saturation\";\n\nimport { ColorModel, ColorPickerBaseProps, AnyColor } from \"../../types\";\nimport { useColorManipulation } from \"../../hooks/useColorManipulation\";\nimport { useStyleSheet } from \"../../hooks/useStyleSheet\";\nimport { formatClassName } from \"../../utils/format\";\n\ninterface Props extends Partial> {\n colorModel: ColorModel;\n}\n\nexport const ColorPicker = ({\n className,\n colorModel,\n color = colorModel.defaultColor,\n onChange,\n ...rest\n}: Props): JSX.Element => {\n const nodeRef = useRef(null);\n useStyleSheet(nodeRef);\n\n const [hsva, updateHsva] = useColorManipulation(colorModel, color, onChange);\n\n const nodeClassName = formatClassName([\"react-colorful\", className]);\n\n return (\n
\n \n \n
\n );\n};\n","import React from \"react\";\n\nimport { ColorPicker } from \"./common/ColorPicker\";\nimport { ColorModel, ColorPickerBaseProps } from \"../types\";\nimport { equalHex } from \"../utils/compare\";\nimport { hexToHsva, hsvaToHex } from \"../utils/convert\";\n\nconst colorModel: ColorModel = {\n defaultColor: \"000\",\n toHsva: hexToHsva,\n fromHsva: ({ h, s, v }) => hsvaToHex({ h, s, v, a: 1 }),\n equal: equalHex,\n};\n\nexport const HexColorPicker = (props: Partial>): JSX.Element => (\n \n);\n","const matcher = /^#?([0-9A-F]{3,8})$/i;\n\nexport const validHex = (value: string, alpha?: boolean): boolean => {\n const match = matcher.exec(value);\n const length = match ? match[1].length : 0;\n\n return (\n length === 3 || // '#rgb' format\n length === 6 || // '#rrggbb' format\n (!!alpha && length === 4) || // '#rgba' format\n (!!alpha && length === 8) // '#rrggbbaa' format\n );\n};\n","import React, { useState, useEffect, useCallback } from \"react\";\n\nimport { useEventCallback } from \"../../hooks/useEventCallback\";\nimport { ColorInputBaseProps } from \"../../types\";\n\ninterface Props extends ColorInputBaseProps {\n /** Blocks typing invalid characters and limits string length */\n escape: (value: string) => string;\n /** Checks that value is valid color string */\n validate: (value: string) => boolean;\n /** Processes value before displaying it in the input */\n format?: (value: string) => string;\n /** Processes value before sending it in `onChange` */\n process?: (value: string) => string;\n}\n\nexport const ColorInput = (props: Props): JSX.Element => {\n const { color = \"\", onChange, onBlur, escape, validate, format, process, ...rest } = props;\n const [value, setValue] = useState(() => escape(color));\n const onChangeCallback = useEventCallback(onChange);\n const onBlurCallback = useEventCallback>(onBlur);\n\n // Trigger `onChange` handler only if the input value is a valid color\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n const inputValue = escape(e.target.value);\n setValue(inputValue);\n if (validate(inputValue)) onChangeCallback(process ? process(inputValue) : inputValue);\n },\n [escape, process, validate, onChangeCallback]\n );\n\n // Take the color from props if the last typed color (in local state) is not valid\n const handleBlur = useCallback(\n (e: React.FocusEvent) => {\n if (!validate(e.target.value)) setValue(escape(color));\n onBlurCallback(e);\n },\n [color, escape, validate, onBlurCallback]\n );\n\n // Update the local state when `color` property value is changed\n useEffect(() => {\n setValue(escape(color));\n }, [color, escape]);\n\n return (\n \n );\n};\n","import React, { useCallback } from \"react\";\nimport { ColorInputBaseProps } from \"../types\";\n\nimport { validHex } from \"../utils/validate\";\nimport { ColorInput } from \"./common/ColorInput\";\n\ninterface HexColorInputProps extends ColorInputBaseProps {\n /** Enables `#` prefix displaying */\n prefixed?: boolean;\n /** Allows `#rgba` and `#rrggbbaa` color formats */\n alpha?: boolean;\n}\n\n/** Adds \"#\" symbol to the beginning of the string */\nconst prefix = (value: string) => \"#\" + value;\n\nexport const HexColorInput = (props: HexColorInputProps): JSX.Element => {\n const { prefixed, alpha, ...rest } = props;\n\n /** Escapes all non-hexadecimal characters including \"#\" */\n const escape = useCallback(\n (value: string) => value.replace(/([^0-9A-F]+)/gi, \"\").substring(0, alpha ? 8 : 6),\n [alpha]\n );\n\n /** Validates hexadecimal strings */\n const validate = useCallback((value: string) => validHex(value, alpha), [alpha]);\n\n return (\n \n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"colorPickerMenu_header__OJJvr\",\"picker\":\"colorPickerMenu_picker__6xE7X\",\"dropdown\":\"colorPickerMenu_dropdown__qTmIa\"};","import * as React from 'react';\nimport NavDropdown from 'react-bootstrap/esm/NavDropdown';\nimport { HexColorInput, HexColorPicker } from 'react-colorful';\n\nimport ColorContext from '../../contexts/ColorContext';\nimport styles from '../../styles/nav/colorPickerMenu.module.scss';\n\nexport default function PageNavColorPickerMenu(): React.JSX.Element {\n\tconst {color, setColor} = React.useContext(ColorContext);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tColor Picker\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n}\n"],"names":["i","e","t","r","n","current","s","f","v","ownerDocument","defaultView","self","d","getBoundingClientRect","o","length","identifier","touches","left","pageX","pageXOffset","width","top","pageY","pageYOffset","height","h","preventDefault","m","a","onMove","l","onKey","c","g","p","b","_","x","buttons","addEventListener","removeEventListener","nativeEvent","changedTouches","focus","which","keyCode","C","E","H","u","onTouchStart","onMouseDown","className","ref","onKeyDown","tabIndex","role","filter","Boolean","join","color","style","backgroundColor","Math","pow","round","PI","L","substring","parseInt","w","K","I","y","q","floor","D","toString","max","min","S","hue","onChange","T","hsva","F","X","toLowerCase","Y","toHsva","equal","fromHsva","Object","assign","R","V","window","J","Map","Q","document","has","createElement","innerHTML","set","__webpack_nonce__","setAttribute","head","appendChild","U","colorModel","defaultColor","W","Z","qe","ke","onBlur","escape","validate","format","process","target","value","spellCheck","Ie","Oe","prefixed","alpha","replace","exec","PageNavColorPickerMenu","setColor","React","ColorContext","_jsxs","_Fragment","children","_jsx","NavDropdown","Header","styles","header","picker","HexColorPicker","HexColorInput"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/996.4de58764.chunk.js b/static/js/996.4de58764.chunk.js new file mode 100644 index 0000000..5ef3a80 --- /dev/null +++ b/static/js/996.4de58764.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunksverg84_github_io=self.webpackChunksverg84_github_io||[]).push([[996],{4996:(e,n,t)=>{t.r(n),t.d(n,{Component:()=>ne});var a=t(2791),r=t(8025);const s={background:"background_background__jno86",stars:"background_stars__SBhqV",animStar:"background_animStar__vPf6G",stars2:"background_stars2__qibmf",stars3:"background_stars3__sA9u9"};var c=t(456),o=t(184);const l="#1B2735",i=[{className:s.stars,numStars:700},{className:s.stars2,numStars:200},{className:s.stars3,numStars:100}];function u(e){let{className:n,numStars:t}=e;const[s]=a.useContext(r.Z),i=a.useMemo((()=>(0,c.Z)(s)>2*(0,c.Z)(l)?s:"white"),[s]),u=a.useMemo((()=>{const e=()=>Math.floor(2e3*Math.random()+1),n=()=>"".concat(e(),"px ").concat(e(),"px ").concat(i);let a=n();for(let r=2;r<=t;r++)a="".concat(a,", ").concat(n());return a}),[i,t]);return(0,o.jsx)("div",{className:n,style:{boxShadow:u}})}function d(){return(0,o.jsx)("div",{className:s.background,children:i.map((e=>(0,a.createElement)(u,{...e,key:e.className})))})}var m=t(5364),h=t(8957),v=t(7022),f=t(775),x=t(280),p=t(5943),b=t(1791);function _(){return(0,o.jsx)(b.Z,{className:p.Z.discord,href:"https://discord.com/users/652354605497188370",icon:x.om})}var Z=t(4018);function j(){return(0,o.jsx)(b.Z,{className:p.Z.steam,href:"https://steamcommunity.com/profiles/76561198060926980/",icon:Z.vs})}function g(){return(0,o.jsx)(h.Z.Footer,{children:(0,o.jsxs)(v.Z,{className:f.Z.buttons,children:[(0,o.jsx)(j,{}),(0,o.jsx)(_,{})]})})}var k=t(7469),y=t(7093),N=t(4769);const C={header:"header_header__dljDF",wavy:"header_wavy__GVntJ"},M="88",S="Oh, Hello!";function w(){const e=(0,N.Z)(),n=(0,y.Z)(M);return(0,o.jsx)(k.Z,{as:"h2",className:C.header,style:{...n,...e},children:S.split("").map(((e,n,t)=>(0,o.jsx)("span",{children:e},e+(n>0?t[n-1]:""))))})}var E=t(9007);const I=function(e,n){const t=(0,a.useRef)(!0);(0,a.useEffect)((()=>{if(!t.current)return e();t.current=!1}),n)};var T=t(7904),B=t(9726),A=t(6445),D=t(1694),R=t.n(D),z=t(8580);const L=(0,t(6543).Z)("carousel-caption");var O=t(162);const F=a.forwardRef(((e,n)=>{let{as:t="div",bsPrefix:a,className:r,...s}=e;const c=R()(r,(0,O.vE)(a,"carousel-item"));return(0,o.jsx)(t,{ref:n,...s,className:c})}));F.displayName="CarouselItem";const H=F;function P(e,n){let t=0;return a.Children.map(e,(e=>a.isValidElement(e)?n(e,t++):e))}var V=t(933),q=t(7202),G=t(5007);const K=a.forwardRef(((e,n)=>{let{defaultActiveIndex:t=0,...r}=e;const{as:s="div",bsPrefix:c,slide:l=!0,fade:i=!1,controls:u=!0,indicators:d=!0,indicatorLabels:m=[],activeIndex:h,onSelect:v,onSlide:f,onSlid:x,interval:p=5e3,keyboard:b=!0,onKeyDown:_,pause:Z="hover",onMouseOver:j,onMouseOut:g,wrap:k=!0,touch:y=!0,onTouchStart:N,onTouchMove:C,onTouchEnd:M,prevIcon:S=(0,o.jsx)("span",{"aria-hidden":"true",className:"carousel-control-prev-icon"}),prevLabel:w="Previous",nextIcon:D=(0,o.jsx)("span",{"aria-hidden":"true",className:"carousel-control-next-icon"}),nextLabel:L="Next",variant:F,className:H,children:K,...U}=(0,z.Ch)({defaultActiveIndex:t,...r},{activeIndex:"onSelect"}),X=(0,O.vE)(c,"carousel"),J=(0,O.SC)(),W=(0,a.useRef)(null),[Y,Q]=(0,a.useState)("next"),[$,ee]=(0,a.useState)(!1),[ne,te]=(0,a.useState)(!1),[ae,re]=(0,a.useState)(h||0);(0,a.useEffect)((()=>{ne||h===ae||(W.current?Q(W.current):Q((h||0)>ae?"next":"prev"),l&&te(!0),re(h||0))}),[h,ne,ae,l]),(0,a.useEffect)((()=>{W.current&&(W.current=null)}));let se,ce=0;!function(e,n){let t=0;a.Children.forEach(e,(e=>{a.isValidElement(e)&&n(e,t++)}))}(K,((e,n)=>{++ce,n===h&&(se=e.props.interval)}));const oe=(0,T.Z)(se),le=(0,a.useCallback)((e=>{if(ne)return;let n=ae-1;if(n<0){if(!k)return;n=ce-1}W.current="prev",null==v||v(n,e)}),[ne,ae,v,k,ce]),ie=(0,E.Z)((e=>{if(ne)return;let n=ae+1;if(n>=ce){if(!k)return;n=0}W.current="next",null==v||v(n,e)})),ue=(0,a.useRef)();(0,a.useImperativeHandle)(n,(()=>({element:ue.current,prev:le,next:ie})));const de=(0,E.Z)((()=>{!document.hidden&&function(e){if(!e||!e.style||!e.parentNode||!e.parentNode.style)return!1;const n=getComputedStyle(e);return"none"!==n.display&&"hidden"!==n.visibility&&"none"!==getComputedStyle(e.parentNode).display}(ue.current)&&(J?le():ie())})),me="next"===Y?"start":"end";I((()=>{l||(null==f||f(ae,me),null==x||x(ae,me))}),[ae]);const he="".concat(X,"-item-").concat(Y),ve="".concat(X,"-item-").concat(me),fe=(0,a.useCallback)((e=>{(0,q.Z)(e),null==f||f(ae,me)}),[f,ae,me]),xe=(0,a.useCallback)((()=>{te(!1),null==x||x(ae,me)}),[x,ae,me]),pe=(0,a.useCallback)((e=>{if(b&&!/input|textarea/i.test(e.target.tagName))switch(e.key){case"ArrowLeft":return e.preventDefault(),void(J?ie(e):le(e));case"ArrowRight":return e.preventDefault(),void(J?le(e):ie(e))}null==_||_(e)}),[b,_,le,ie,J]),be=(0,a.useCallback)((e=>{"hover"===Z&&ee(!0),null==j||j(e)}),[Z,j]),_e=(0,a.useCallback)((e=>{ee(!1),null==g||g(e)}),[g]),Ze=(0,a.useRef)(0),je=(0,a.useRef)(0),ge=(0,B.Z)(),ke=(0,a.useCallback)((e=>{Ze.current=e.touches[0].clientX,je.current=0,"hover"===Z&&ee(!0),null==N||N(e)}),[Z,N]),ye=(0,a.useCallback)((e=>{e.touches&&e.touches.length>1?je.current=0:je.current=e.touches[0].clientX-Ze.current,null==C||C(e)}),[C]),Ne=(0,a.useCallback)((e=>{if(y){const n=je.current;Math.abs(n)>40&&(n>0?le(e):ie(e))}"hover"===Z&&ge.set((()=>{ee(!1)}),p||void 0),null==M||M(e)}),[y,Z,le,ie,ge,p,M]),Ce=null!=p&&!$&&!ne,Me=(0,a.useRef)();(0,a.useEffect)((()=>{var e,n;if(!Ce)return;const t=J?le:ie;return Me.current=window.setInterval(document.visibilityState?de:t,null!=(e=null!=(n=oe.current)?n:p)?e:void 0),()=>{null!==Me.current&&clearInterval(Me.current)}}),[Ce,le,ie,oe,p,de,J]);const Se=(0,a.useMemo)((()=>d&&Array.from({length:ce},((e,n)=>e=>{null==v||v(n,e)}))),[d,ce,v]);return(0,o.jsxs)(s,{ref:ue,...U,onKeyDown:pe,onMouseOver:be,onMouseOut:_e,onTouchStart:ke,onTouchMove:ye,onTouchEnd:Ne,className:R()(H,X,l&&"slide",i&&"".concat(X,"-fade"),F&&"".concat(X,"-").concat(F)),children:[d&&(0,o.jsx)("div",{className:"".concat(X,"-indicators"),children:P(K,((e,n)=>(0,o.jsx)("button",{type:"button","data-bs-target":"","aria-label":null!=m&&m.length?m[n]:"Slide ".concat(n+1),className:n===ae?"active":void 0,onClick:Se?Se[n]:void 0,"aria-current":n===ae},n)))}),(0,o.jsx)("div",{className:"".concat(X,"-inner"),children:P(K,((e,n)=>{const t=n===ae;return l?(0,o.jsx)(G.Z,{in:t,onEnter:t?fe:void 0,onEntered:t?xe:void 0,addEndListener:V.Z,children:(n,r)=>a.cloneElement(e,{...r,className:R()(e.props.className,t&&"entered"!==n&&he,("entered"===n||"exiting"===n)&&"active",("entering"===n||"exiting"===n)&&ve)})}):a.cloneElement(e,{className:R()(e.props.className,t&&"active")})}))}),u&&(0,o.jsxs)(o.Fragment,{children:[(k||0!==h)&&(0,o.jsxs)(A.Z,{className:"".concat(X,"-control-prev"),onClick:le,children:[S,w&&(0,o.jsx)("span",{className:"visually-hidden",children:w})]}),(k||h!==ce-1)&&(0,o.jsxs)(A.Z,{className:"".concat(X,"-control-next"),onClick:ie,children:[D,L&&(0,o.jsx)("span",{className:"visually-hidden",children:L})]})]})]})}));K.displayName="Carousel";const U=Object.assign(K,{Caption:L,Item:H});var X=t(8188);function J(e){let{src:n}=e;return(0,o.jsx)(X.Z,{src:n,children:(0,o.jsx)(h.Z.Text,{children:"Blep"})})}const W=["/portrait-mode.jpg","/pinksuit.jpeg","/dokidoki.jpeg"];function Y(){return(0,o.jsx)(U,{controls:!1,fade:!0,indicators:!1,interval:4e3,wrap:!0,children:W.map((e=>(0,o.jsx)(U.Item,{children:(0,o.jsx)(J,{src:e})},e)))})}function Q(){return(0,o.jsxs)(h.Z,{children:[(0,o.jsx)(w,{}),(0,o.jsx)(h.Z.Body,{children:(0,o.jsx)(Y,{})}),(0,o.jsx)(g,{})]})}function $(){return(0,o.jsx)(m.Z,{children:(0,o.jsx)(Q,{})})}var ee=t(9911);function ne(){return(0,o.jsx)(ee.Z,{background:(0,o.jsx)(d,{}),children:(0,o.jsx)($,{})})}},949:(e,n,t)=>{t.d(n,{Z:()=>l});t(2791);var a=t(5862),r=t(2576),s=t(3441);const c={tooltip:"tooltip_tooltip__5pJPW"};var o=t(184);function l(e){let{content:n,tooltip:t}=e;const{ref:l,entry:i}=(0,s.YD)({rootMargin:"-50% 0px 0px"});return(0,o.jsx)(a.Z,{placement:null!==i&&void 0!==i&&i.isIntersecting?"top":"bottom",overlay:(0,o.jsx)(r.Z,{children:t}),children:(0,o.jsx)("span",{className:c.tooltip,ref:l,children:n})})}},9911:(e,n,t)=>{t.d(n,{Z:()=>I});var a=t(2791),r=t(8025),s=t(1694),c=t.n(s),o=t(7022),l=t(2677),i=t(2251),u=t(1087),d=t(2982),m=t(7093);const h={brand:"navbar_brand__zDvLc",navbar:"navbar_navbar__pEuvw",pushTime:"navbar_pushTime__jdH3p",rightContent:"navbar_rightContent__ikOZ0"};var v=t(5),f=t(5088),x=t(9806),p=t(192),b=t(4849);const _={fallback:"colorPicker_fallback__pvhTA"};var Z=t(9415),j=t(184);const g=(0,Z.Z)((()=>t.e(154).then(t.bind(t,1154))));function k(){return(0,j.jsx)(p.Z,{align:"end",className:_.icon,renderMenuOnMount:!1,title:(0,j.jsx)(x.G,{icon:f.q2,bounce:!0}),onMouseEnter:()=>{g.preload()},children:(0,j.jsx)(a.Suspense,{fallback:(0,j.jsx)("div",{className:_.fallback,children:(0,j.jsx)(b.Z,{animation:"border",variant:"secondary"})}),children:(0,j.jsx)(g,{})})})}var y=t(949);const N=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),C=[{unit:"year",ms:31536e6},{unit:"month",ms:2628e6},{unit:"day",ms:864e5},{unit:"hour",ms:36e5},{unit:"minute",ms:6e4},{unit:"second",ms:1e3}];function M(e){for(const{unit:n,ms:t}of C)if(Math.abs(e)>=t||"second"===n)return N.format(Math.round(e/t),n);return""}function S(){const[e,n]=a.useState(null);if(a.useEffect((()=>{(async()=>{try{const e=await fetch("https://api.github.com/repos/sverg84/sverg84.github.io");if(!e.ok)throw new Error("".concat(e.status,": ").concat(e.statusText));const t=(await e.json()).pushed_at;n(new Date(t))}catch(e){console.warn(e)}})()}),[]),null==e)return null;const t=e.getTime()-(new Date).getTime();return(0,j.jsxs)(j.Fragment,{children:["Last Updated:"," ",(0,j.jsx)(y.Z,{content:M(t),tooltip:e.toLocaleString(void 0)})]})}function w(e){let{breadcrumbs:n}=e;const t=(0,m.Z)();return(0,j.jsx)(i.Z,{expand:!1,sticky:"top",style:t,children:(0,j.jsxs)(o.Z,{className:c()(v.Z.page,h.navbar),children:[(0,j.jsx)(l.Z,{children:(0,j.jsx)(u.rU,{className:h.brand,to:"/",children:d.Z})}),(0,j.jsx)(l.Z,{className:h.pushTime,children:(0,j.jsx)(S,{})}),(0,j.jsxs)(l.Z,{className:h.rightContent,children:[n,(0,j.jsx)(k,{})]})]})})}const E="#2e3134";function I(e){var n;let{background:t,breadcrumbs:s,children:c}=e;const o=null!==(n=localStorage.getItem("color"))&&void 0!==n?n:E,[l,i]=a.useState(o);return a.useEffect((()=>{localStorage.setItem("color",l)}),[l]),(0,j.jsxs)(r.Z.Provider,{value:[l,i],children:[t,(0,j.jsx)(w,{breadcrumbs:s}),c]})}},5364:(e,n,t)=>{t.d(n,{Z:()=>l});var a=t(1694),r=t.n(a);t(2791);const s={body:"pageBody_body__aNOKo"};var c=t(5),o=t(184);function l(e){let{children:n}=e;return(0,o.jsx)("div",{className:r()(c.Z.page,s.body),children:n})}},8188:(e,n,t)=>{t.d(n,{Z:()=>h});var a=t(2791),r=t(8957),s=t(2677),c=t(7022),o=t(9743),l=t(6638),i=t(5267),u=t(184);const d=a.lazy((async()=>await t.e(217).then(t.bind(t,1217))));function m(e){return(0,u.jsx)(a.Suspense,{fallback:(0,u.jsx)(i.Z,{animation:"wave",as:"div",bg:"secondary",className:l.Z.glimmer}),children:(0,u.jsx)(d,{...e})})}function h(e){let{children:n,...t}=e;return(0,u.jsx)(r.Z.Body,{children:(0,u.jsx)(c.Z,{children:(0,u.jsxs)(o.Z,{className:l.Z.body,xs:1,children:[(0,u.jsx)(s.Z,{className:l.Z.imageColumn,xl:4,children:(0,u.jsx)(m,{...t})}),(0,u.jsx)(s.Z,{xl:8,children:n})]})})})}},1791:(e,n,t)=>{t.d(n,{Z:()=>o});var a=t(9806),r=(t(2791),t(3360)),s=t(2381),c=t(184);function o(e){let{className:n,href:t,icon:o}=e;const{isHovering:l,...i}=(0,s.Z)();return(0,c.jsx)(r.Z,{className:n,href:t,target:"_blank",variant:"link",...i,children:(0,c.jsx)(a.G,{icon:o,size:"2xl"})})}},2982:(e,n,t)=>{t.d(n,{Z:()=>a});const a="Stephen Vergara"},8025:(e,n,t)=>{t.d(n,{Z:()=>a});const a=(0,t(2791).createContext)(["#2e3134",()=>{}])},7093:(e,n,t)=>{t.d(n,{Z:()=>c});var a=t(2791),r=t(8025),s=t(5791);function c(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const[n]=a.useContext(r.Z),t=(0,s.Z)();return{backgroundColor:"".concat(n).concat(e),color:t}}},4769:(e,n,t)=>{t.d(n,{Z:()=>s});var a=t(2791),r=t(8025);function s(){const[e]=a.useContext(r.Z);return{color:e}}},2381:(e,n,t)=>{t.d(n,{Z:()=>r});var a=t(2791);function r(){const[e,n]=a.useState(!1);return{isHovering:e,onMouseEnter:()=>{n(!0)},onMouseLeave:()=>{n(!1)}}}},5791:(e,n,t)=>{t.d(n,{Z:()=>o});var a=t(2791),r=t(8025),s=t(456);const c=128;function o(){const[e]=a.useContext(r.Z);return a.useMemo((()=>(0,s.Z)(e)>c?"black":"white"),[e])}},456:(e,n,t)=>{t.d(n,{Z:()=>c});const a=.299,r=.587,s=.114;function c(e){const n=Math.floor((e.length-1)/3),t=((e,n)=>e.match(new RegExp(".{".concat(n,"}"),"g")))(e.slice(1),n),[c,o,l]=(null!==t&&void 0!==t?t:[]).map((e=>parseInt(e.repeat(2/e.length),16)));return Math.round((null!==c&&void 0!==c?c:0)*a+(null!==o&&void 0!==o?o:0)*r+(null!==l&&void 0!==l?l:0)*s)}},9415:(e,n,t)=>{t.d(n,{Z:()=>r});var a=t(2791);function r(e){return Object.assign(a.lazy(e),{preload:e})}},280:(e,n)=>{var t="discord",a=[],r="f392",s="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z";n.DF={prefix:"fab",iconName:t,icon:[640,512,a,r,s]},n.om=n.DF},4018:(e,n)=>{var t="steam",a=[],r="f1b6",s="M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z";n.DF={prefix:"fab",iconName:t,icon:[496,512,a,r,s]},n.vs=n.DF},6638:(e,n,t)=>{t.d(n,{Z:()=>a});const a={body:"aboutMeCardBody_body__px0Z-",base:"aboutMeCardBody_base__HWSO5",image:"aboutMeCardBody_image__r0pwR",glimmer:"aboutMeCardBody_glimmer__ztngv",imageColumn:"aboutMeCardBody_imageColumn__Decwz"}},775:(e,n,t)=>{t.d(n,{Z:()=>a});const a={buttons:"footer_buttons__X-wEA",resume:"footer_resume__j2AKe"}},5943:(e,n,t)=>{t.d(n,{Z:()=>a});const a={github:"linkButton_github__ltM-y",linkedin:"linkButton_linkedin__MRpaF",steam:"linkButton_steam__qizUa",discord:"linkButton_discord__zToU1"}},5:(e,n,t)=>{t.d(n,{Z:()=>a});const a={page:"pageMargin_page__oYkHI"}}}]); +//# sourceMappingURL=996.4de58764.chunk.js.map \ No newline at end of file diff --git a/static/js/996.4de58764.chunk.js.map b/static/js/996.4de58764.chunk.js.map new file mode 100644 index 0000000..ce3d77d --- /dev/null +++ b/static/js/996.4de58764.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/996.4de58764.chunk.js","mappings":"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","sources":["webpack://sverg84.github.io/./src/impl/styles/body/personal/background.module.scss?368e","impl/components/body/personal/PersonalBackground.tsx","impl/components/buttons/DiscordButton.tsx","impl/components/buttons/SteamButton.tsx","impl/components/body/personal/about/PersonalAboutMeCardFooter.tsx","webpack://sverg84.github.io/./src/impl/styles/body/personal/about/header.module.scss?19f6","impl/components/body/personal/about/PersonalAboutMeCardHeader.tsx","../node_modules/@restart/hooks/esm/useUpdateEffect.js","../node_modules/react-bootstrap/esm/CarouselCaption.js","../node_modules/react-bootstrap/esm/CarouselItem.js","../node_modules/react-bootstrap/esm/ElementChildren.js","../node_modules/react-bootstrap/esm/Carousel.js","impl/components/body/personal/about/PersonalAboutMeCarouselItem.tsx","impl/components/body/personal/about/PersonalAboutMePhotoCarousel.tsx","impl/components/body/personal/about/PersonalAboutMeCard.tsx","impl/components/body/PersonalBody.tsx","impl/components/AppPersonal.tsx","webpack://sverg84.github.io/./src/impl/styles/tooltip.module.scss?f869","impl/components/AppTooltip.tsx","webpack://sverg84.github.io/./src/impl/styles/nav/navbar.module.scss?5af6","webpack://sverg84.github.io/./src/impl/styles/nav/colorPicker.module.scss?f351","impl/components/nav/PageNavColorPicker.tsx","impl/components/nav/PageNavLatestPushTimestamp.tsx","impl/components/nav/PageNavBar.tsx","impl/components/Page.tsx","webpack://sverg84.github.io/./src/impl/styles/pageBody.module.scss?5416","impl/components/body/PageBody.tsx","impl/components/body/about/AboutMeCardLazyImage.tsx","impl/components/body/about/AboutMeCardBodyContainer.tsx","impl/components/buttons/ExternalLinkButton.tsx","impl/consts/MyName.ts","impl/contexts/ColorContext.ts","impl/hooks/useBackgroundColorStyle.ts","impl/hooks/useColorStyle.ts","impl/hooks/useHover.ts","impl/hooks/useTextColorForCustomBackground.ts","impl/utils/brightnessFromHexCode.ts","impl/utils/lazyWithPreload.ts","../node_modules/@fortawesome/free-brands-svg-icons/faDiscord.js","../node_modules/@fortawesome/free-brands-svg-icons/faSteam.js","webpack://sverg84.github.io/./src/impl/styles/body/about/aboutMeCardBody.module.scss?747a","webpack://sverg84.github.io/./src/impl/styles/body/about/footer.module.scss?b32c","webpack://sverg84.github.io/./src/impl/styles/body/buttons/linkButton.module.scss?4ee4","webpack://sverg84.github.io/./src/impl/styles/pageMargin.module.scss?e8bc"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"background\":\"background_background__jno86\",\"stars\":\"background_stars__SBhqV\",\"animStar\":\"background_animStar__vPf6G\",\"stars2\":\"background_stars2__qibmf\",\"stars3\":\"background_stars3__sA9u9\"};","import * as React from 'react';\n\nimport ColorContext from '../../../contexts/ColorContext';\nimport styles from '../../../styles/body/personal/background.module.scss';\nimport brightnessFromHexCode from '../../../utils/brightnessFromHexCode';\n\ntype StarsProps = Readonly<{\n\tclassName: string;\n\tnumStars: number;\n}>;\n\nconst BACKGROUND_COLOR = '#1B2735';\n\nconst STARS: ReadonlyArray = [\n\t{className: styles.stars, numStars: 700},\n\t{className: styles.stars2, numStars: 200},\n\t{className: styles.stars3, numStars: 100},\n];\n\nfunction Stars({className, numStars}: StarsProps): React.JSX.Element {\n\tconst [color] = React.useContext(ColorContext);\n\n\tconst colorForStars = React.useMemo(() => {\n\t\tconst colorBrightness = brightnessFromHexCode(color);\n\t\tconst backgroundBrightness = brightnessFromHexCode(BACKGROUND_COLOR);\n\t\treturn colorBrightness > backgroundBrightness * 2 ? color : 'white';\n\t}, [color]);\n\n\tconst boxShadow = React.useMemo(() => {\n\t\tconst rand = () => Math.floor(Math.random() * 2000 + 1);\n\t\tconst calc = () => `${rand()}px ${rand()}px ${colorForStars}`;\n\n\t\tlet shadow = calc();\n\n\t\tfor (let i = 2; i <= numStars; i++) {\n\t\t\tshadow = `${shadow}, ${calc()}`;\n\t\t}\n\n\t\treturn shadow;\n\t}, [colorForStars, numStars]);\n\n\treturn (\n\t\t\n\t);\n}\n\nexport default function PersonalBackground(): React.JSX.Element {\n\treturn (\n\t\t
\n\t\t\t{STARS.map(props => (\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function DiscordButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function SteamButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\nimport Container from 'react-bootstrap/esm/Container';\n\nimport styles from '../../../../styles/body/about/footer.module.scss';\nimport DiscordButton from '../../../buttons/DiscordButton';\nimport SteamButton from '../../../buttons/SteamButton';\n\nexport default function PersonalAboutMeCardFooter(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"header_header__dljDF\",\"wavy\":\"header_wavy__GVntJ\"};","import * as React from 'react';\nimport CardHeader from 'react-bootstrap/esm/CardHeader';\n\nimport useBackgroundColorStyle from '../../../../hooks/useBackgroundColorStyle';\nimport useColorStyle from '../../../../hooks/useColorStyle';\nimport styles from '../../../../styles/body/personal/about/header.module.scss';\n\nconst HALF_OPACITY = '88';\nconst HEADER_LABEL = 'Oh, Hello!';\n\nexport default function PersonalAboutMeCardHeader(): React.JSX.Element {\n\tconst color = useColorStyle();\n\tconst bg = useBackgroundColorStyle(HALF_OPACITY);\n\n\treturn (\n\t\t\n\t\t\t{HEADER_LABEL.split('').map((character, index, label) => (\n\t\t\t\t 0 ? label[index - 1] : '')}>\n\t\t\t\t\t{character}\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * Runs an effect only when the dependencies have changed, skipping the\n * initial \"on mount\" run. Caution, if the dependency list never changes,\n * the effect is **never run**\n *\n * ```ts\n * const ref = useRef(null);\n *\n * // focuses an element only if the focus changes, and not on mount\n * useUpdateEffect(() => {\n * const element = ref.current?.children[focusedIdx] as HTMLElement\n *\n * element?.focus()\n *\n * }, [focusedIndex])\n * ```\n * @param effect An effect to run on mount\n *\n * @category effects\n */\nfunction useUpdateEffect(fn, deps) {\n const isFirst = useRef(true);\n useEffect(() => {\n if (isFirst.current) {\n isFirst.current = false;\n return;\n }\n return fn();\n }, deps);\n}\nexport default useUpdateEffect;","import createWithBsPrefix from './createWithBsPrefix';\nexport default createWithBsPrefix('carousel-caption');","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst CarouselItem = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n ...props\n}, ref) => {\n const finalClassName = classNames(className, useBootstrapPrefix(bsPrefix, 'carousel-item'));\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: finalClassName\n });\n});\nCarouselItem.displayName = 'CarouselItem';\nexport default CarouselItem;","import * as React from 'react';\n\n/**\n * Iterates through children that are typically specified as `props.children`,\n * but only maps over children that are \"valid elements\".\n *\n * The mapFunction provided index will be normalised to the components mapped,\n * so an invalid component would not increase the index.\n *\n */\nfunction map(children, func) {\n let index = 0;\n return React.Children.map(children, child => /*#__PURE__*/React.isValidElement(child) ? func(child, index++) : child);\n}\n\n/**\n * Iterates through children that are \"valid elements\".\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child with the index reflecting the position relative to \"valid components\".\n */\nfunction forEach(children, func) {\n let index = 0;\n React.Children.forEach(children, child => {\n if ( /*#__PURE__*/React.isValidElement(child)) func(child, index++);\n });\n}\n\n/**\n * Finds whether a component's `children` prop includes a React element of the\n * specified type.\n */\nfunction hasChildOfType(children, type) {\n return React.Children.toArray(children).some(child => /*#__PURE__*/React.isValidElement(child) && child.type === type);\n}\nexport { map, forEach, hasChildOfType };","import useEventCallback from '@restart/hooks/useEventCallback';\nimport useUpdateEffect from '@restart/hooks/useUpdateEffect';\nimport useCommittedRef from '@restart/hooks/useCommittedRef';\nimport useTimeout from '@restart/hooks/useTimeout';\nimport Anchor from '@restart/ui/Anchor';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport CarouselCaption from './CarouselCaption';\nimport CarouselItem from './CarouselItem';\nimport { map, forEach } from './ElementChildren';\nimport { useBootstrapPrefix, useIsRTL } from './ThemeProvider';\nimport transitionEndListener from './transitionEndListener';\nimport triggerBrowserReflow from './triggerBrowserReflow';\nimport TransitionWrapper from './TransitionWrapper';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nconst SWIPE_THRESHOLD = 40;\nfunction isVisible(element) {\n if (!element || !element.style || !element.parentNode || !element.parentNode.style) {\n return false;\n }\n const elementStyle = getComputedStyle(element);\n return elementStyle.display !== 'none' && elementStyle.visibility !== 'hidden' && getComputedStyle(element.parentNode).display !== 'none';\n}\nconst Carousel = /*#__PURE__*/React.forwardRef(({\n defaultActiveIndex = 0,\n ...uncontrolledProps\n}, ref) => {\n const {\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n slide = true,\n fade = false,\n controls = true,\n indicators = true,\n indicatorLabels = [],\n activeIndex,\n onSelect,\n onSlide,\n onSlid,\n interval = 5000,\n keyboard = true,\n onKeyDown,\n pause = 'hover',\n onMouseOver,\n onMouseOut,\n wrap = true,\n touch = true,\n onTouchStart,\n onTouchMove,\n onTouchEnd,\n prevIcon = /*#__PURE__*/_jsx(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"carousel-control-prev-icon\"\n }),\n prevLabel = 'Previous',\n nextIcon = /*#__PURE__*/_jsx(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"carousel-control-next-icon\"\n }),\n nextLabel = 'Next',\n variant,\n className,\n children,\n ...props\n } = useUncontrolled({\n defaultActiveIndex,\n ...uncontrolledProps\n }, {\n activeIndex: 'onSelect'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'carousel');\n const isRTL = useIsRTL();\n const nextDirectionRef = useRef(null);\n const [direction, setDirection] = useState('next');\n const [paused, setPaused] = useState(false);\n const [isSliding, setIsSliding] = useState(false);\n const [renderedActiveIndex, setRenderedActiveIndex] = useState(activeIndex || 0);\n useEffect(() => {\n if (!isSliding && activeIndex !== renderedActiveIndex) {\n if (nextDirectionRef.current) {\n setDirection(nextDirectionRef.current);\n } else {\n setDirection((activeIndex || 0) > renderedActiveIndex ? 'next' : 'prev');\n }\n if (slide) {\n setIsSliding(true);\n }\n setRenderedActiveIndex(activeIndex || 0);\n }\n }, [activeIndex, isSliding, renderedActiveIndex, slide]);\n useEffect(() => {\n if (nextDirectionRef.current) {\n nextDirectionRef.current = null;\n }\n });\n let numChildren = 0;\n let activeChildInterval;\n\n // Iterate to grab all of the children's interval values\n // (and count them, too)\n forEach(children, (child, index) => {\n ++numChildren;\n if (index === activeIndex) {\n activeChildInterval = child.props.interval;\n }\n });\n const activeChildIntervalRef = useCommittedRef(activeChildInterval);\n const prev = useCallback(event => {\n if (isSliding) {\n return;\n }\n let nextActiveIndex = renderedActiveIndex - 1;\n if (nextActiveIndex < 0) {\n if (!wrap) {\n return;\n }\n nextActiveIndex = numChildren - 1;\n }\n nextDirectionRef.current = 'prev';\n onSelect == null ? void 0 : onSelect(nextActiveIndex, event);\n }, [isSliding, renderedActiveIndex, onSelect, wrap, numChildren]);\n\n // This is used in the setInterval, so it should not invalidate.\n const next = useEventCallback(event => {\n if (isSliding) {\n return;\n }\n let nextActiveIndex = renderedActiveIndex + 1;\n if (nextActiveIndex >= numChildren) {\n if (!wrap) {\n return;\n }\n nextActiveIndex = 0;\n }\n nextDirectionRef.current = 'next';\n onSelect == null ? void 0 : onSelect(nextActiveIndex, event);\n });\n const elementRef = useRef();\n useImperativeHandle(ref, () => ({\n element: elementRef.current,\n prev,\n next\n }));\n\n // This is used in the setInterval, so it should not invalidate.\n const nextWhenVisible = useEventCallback(() => {\n if (!document.hidden && isVisible(elementRef.current)) {\n if (isRTL) {\n prev();\n } else {\n next();\n }\n }\n });\n const slideDirection = direction === 'next' ? 'start' : 'end';\n useUpdateEffect(() => {\n if (slide) {\n // These callbacks will be handled by the callbacks.\n return;\n }\n onSlide == null ? void 0 : onSlide(renderedActiveIndex, slideDirection);\n onSlid == null ? void 0 : onSlid(renderedActiveIndex, slideDirection);\n }, [renderedActiveIndex]);\n const orderClassName = `${prefix}-item-${direction}`;\n const directionalClassName = `${prefix}-item-${slideDirection}`;\n const handleEnter = useCallback(node => {\n triggerBrowserReflow(node);\n onSlide == null ? void 0 : onSlide(renderedActiveIndex, slideDirection);\n }, [onSlide, renderedActiveIndex, slideDirection]);\n const handleEntered = useCallback(() => {\n setIsSliding(false);\n onSlid == null ? void 0 : onSlid(renderedActiveIndex, slideDirection);\n }, [onSlid, renderedActiveIndex, slideDirection]);\n const handleKeyDown = useCallback(event => {\n if (keyboard && !/input|textarea/i.test(event.target.tagName)) {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n if (isRTL) {\n next(event);\n } else {\n prev(event);\n }\n return;\n case 'ArrowRight':\n event.preventDefault();\n if (isRTL) {\n prev(event);\n } else {\n next(event);\n }\n return;\n default:\n }\n }\n onKeyDown == null ? void 0 : onKeyDown(event);\n }, [keyboard, onKeyDown, prev, next, isRTL]);\n const handleMouseOver = useCallback(event => {\n if (pause === 'hover') {\n setPaused(true);\n }\n onMouseOver == null ? void 0 : onMouseOver(event);\n }, [pause, onMouseOver]);\n const handleMouseOut = useCallback(event => {\n setPaused(false);\n onMouseOut == null ? void 0 : onMouseOut(event);\n }, [onMouseOut]);\n const touchStartXRef = useRef(0);\n const touchDeltaXRef = useRef(0);\n const touchUnpauseTimeout = useTimeout();\n const handleTouchStart = useCallback(event => {\n touchStartXRef.current = event.touches[0].clientX;\n touchDeltaXRef.current = 0;\n if (pause === 'hover') {\n setPaused(true);\n }\n onTouchStart == null ? void 0 : onTouchStart(event);\n }, [pause, onTouchStart]);\n const handleTouchMove = useCallback(event => {\n if (event.touches && event.touches.length > 1) {\n touchDeltaXRef.current = 0;\n } else {\n touchDeltaXRef.current = event.touches[0].clientX - touchStartXRef.current;\n }\n onTouchMove == null ? void 0 : onTouchMove(event);\n }, [onTouchMove]);\n const handleTouchEnd = useCallback(event => {\n if (touch) {\n const touchDeltaX = touchDeltaXRef.current;\n if (Math.abs(touchDeltaX) > SWIPE_THRESHOLD) {\n if (touchDeltaX > 0) {\n prev(event);\n } else {\n next(event);\n }\n }\n }\n if (pause === 'hover') {\n touchUnpauseTimeout.set(() => {\n setPaused(false);\n }, interval || undefined);\n }\n onTouchEnd == null ? void 0 : onTouchEnd(event);\n }, [touch, pause, prev, next, touchUnpauseTimeout, interval, onTouchEnd]);\n const shouldPlay = interval != null && !paused && !isSliding;\n const intervalHandleRef = useRef();\n useEffect(() => {\n var _ref, _activeChildIntervalR;\n if (!shouldPlay) {\n return undefined;\n }\n const nextFunc = isRTL ? prev : next;\n intervalHandleRef.current = window.setInterval(document.visibilityState ? nextWhenVisible : nextFunc, (_ref = (_activeChildIntervalR = activeChildIntervalRef.current) != null ? _activeChildIntervalR : interval) != null ? _ref : undefined);\n return () => {\n if (intervalHandleRef.current !== null) {\n clearInterval(intervalHandleRef.current);\n }\n };\n }, [shouldPlay, prev, next, activeChildIntervalRef, interval, nextWhenVisible, isRTL]);\n const indicatorOnClicks = useMemo(() => indicators && Array.from({\n length: numChildren\n }, (_, index) => event => {\n onSelect == null ? void 0 : onSelect(index, event);\n }), [indicators, numChildren, onSelect]);\n return /*#__PURE__*/_jsxs(Component, {\n ref: elementRef,\n ...props,\n onKeyDown: handleKeyDown,\n onMouseOver: handleMouseOver,\n onMouseOut: handleMouseOut,\n onTouchStart: handleTouchStart,\n onTouchMove: handleTouchMove,\n onTouchEnd: handleTouchEnd,\n className: classNames(className, prefix, slide && 'slide', fade && `${prefix}-fade`, variant && `${prefix}-${variant}`),\n children: [indicators && /*#__PURE__*/_jsx(\"div\", {\n className: `${prefix}-indicators`,\n children: map(children, (_, index) => /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n \"data-bs-target\": \"\" // Bootstrap requires this in their css.\n ,\n \"aria-label\": indicatorLabels != null && indicatorLabels.length ? indicatorLabels[index] : `Slide ${index + 1}`,\n className: index === renderedActiveIndex ? 'active' : undefined,\n onClick: indicatorOnClicks ? indicatorOnClicks[index] : undefined,\n \"aria-current\": index === renderedActiveIndex\n }, index))\n }), /*#__PURE__*/_jsx(\"div\", {\n className: `${prefix}-inner`,\n children: map(children, (child, index) => {\n const isActive = index === renderedActiveIndex;\n return slide ? /*#__PURE__*/_jsx(TransitionWrapper, {\n in: isActive,\n onEnter: isActive ? handleEnter : undefined,\n onEntered: isActive ? handleEntered : undefined,\n addEndListener: transitionEndListener,\n children: (status, innerProps) => /*#__PURE__*/React.cloneElement(child, {\n ...innerProps,\n className: classNames(child.props.className, isActive && status !== 'entered' && orderClassName, (status === 'entered' || status === 'exiting') && 'active', (status === 'entering' || status === 'exiting') && directionalClassName)\n })\n }) : /*#__PURE__*/React.cloneElement(child, {\n className: classNames(child.props.className, isActive && 'active')\n });\n })\n }), controls && /*#__PURE__*/_jsxs(_Fragment, {\n children: [(wrap || activeIndex !== 0) && /*#__PURE__*/_jsxs(Anchor, {\n className: `${prefix}-control-prev`,\n onClick: prev,\n children: [prevIcon, prevLabel && /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: prevLabel\n })]\n }), (wrap || activeIndex !== numChildren - 1) && /*#__PURE__*/_jsxs(Anchor, {\n className: `${prefix}-control-next`,\n onClick: next,\n children: [nextIcon, nextLabel && /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: nextLabel\n })]\n })]\n })]\n });\n});\nCarousel.displayName = 'Carousel';\nexport default Object.assign(Carousel, {\n Caption: CarouselCaption,\n Item: CarouselItem\n});","import * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\n\nimport AboutMeCardBodyContainer from '../../about/AboutMeCardBodyContainer';\n\ntype Props = Readonly<{\n\tsrc: string;\n}>;\n\nexport default function PersonalAboutMeCarouselItem({\n\tsrc,\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\tBlep\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Carousel from 'react-bootstrap/esm/Carousel';\n\nimport PersonalAboutMeCarouselItem from './PersonalAboutMeCarouselItem';\n\nconst IMAGES = ['/portrait-mode.jpg', '/pinksuit.jpeg', '/dokidoki.jpeg'];\n\nexport default function PersonalAboutMePhotoCarousel(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t{IMAGES.map(img => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\n\nimport PersonalAboutMeCardFooter from './PersonalAboutMeCardFooter';\nimport PersonalAboutMeCardHeader from './PersonalAboutMeCardHeader';\nimport PersonalAboutMePhotoCarousel from './PersonalAboutMePhotoCarousel';\n\nexport default function PersonalAboutMeCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport PageBody from './PageBody';\nimport PersonalAboutMeCard from './personal/about/PersonalAboutMeCard';\n\nexport default function PersonalBody(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport PersonalBackground from './body/personal/PersonalBackground';\nimport PersonalBody from './body/PersonalBody';\nimport Page from './Page';\n\nexport function Component(): React.JSX.Element {\n\treturn (\n\t\t}>\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tooltip\":\"tooltip_tooltip__5pJPW\"};","import * as React from 'react';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport { useInView } from 'react-intersection-observer';\n\nimport styles from '../styles/tooltip.module.scss';\n\ntype Props = Readonly<{\n\tcontent: string;\n\ttooltip: string;\n}>;\n\nexport default function AppTooltip({\n\tcontent,\n\ttooltip,\n}: Props): React.JSX.Element {\n\tconst {ref, entry} = useInView({\n\t\trootMargin: '-50% 0px 0px',\n\t});\n\n\treturn (\n\t\t{tooltip}}>\n\t\t\t{content}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"brand\":\"navbar_brand__zDvLc\",\"navbar\":\"navbar_navbar__pEuvw\",\"pushTime\":\"navbar_pushTime__jdH3p\",\"rightContent\":\"navbar_rightContent__ikOZ0\"};","// extracted by mini-css-extract-plugin\nexport default {\"fallback\":\"colorPicker_fallback__pvhTA\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport NavDropdown from 'react-bootstrap/esm/NavDropdown';\nimport Spinner from 'react-bootstrap/Spinner';\n\nimport styles from '../../styles/nav/colorPicker.module.scss';\nimport lazyWithPreload from '../../utils/lazyWithPreload.ts';\n\nconst PageNavColorPickerMenu = lazyWithPreload(() =>\n\timport('./PageNavColorPickerMenu.tsx'),\n);\n\nexport default function PageNavColorPicker(): React.JSX.Element {\n\tconst onMouseEnter = () => {\n\t\tPageNavColorPickerMenu.preload();\n\t};\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t\tonMouseEnter={onMouseEnter}>\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}>\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport AppTooltip from '../AppTooltip';\n\n// https://stackoverflow.com/questions/6108819/javascript-timestamp-to-relative-time\nconst RTF = new Intl.RelativeTimeFormat(undefined, {numeric: 'auto'});\n\nconst UNITS: {unit: Intl.RelativeTimeFormatUnit; ms: number}[] = [\n\t{unit: 'year', ms: 31536000000},\n\t{unit: 'month', ms: 2628000000},\n\t{unit: 'day', ms: 86400000},\n\t{unit: 'hour', ms: 3600000},\n\t{unit: 'minute', ms: 60000},\n\t{unit: 'second', ms: 1000},\n];\n\nfunction relativeTimeFromElapsed(elapsed: number): string {\n\tfor (const {unit, ms} of UNITS) {\n\t\tif (Math.abs(elapsed) >= ms || unit === 'second') {\n\t\t\treturn RTF.format(Math.round(elapsed / ms), unit);\n\t\t}\n\t}\n\treturn '';\n}\n\nexport default function PageNavLatestPushTimestamp(): React.JSX.Element | null {\n\tconst [lastUpdatedTime, setLastUpdatedTime] = React.useState(\n\t\tnull,\n\t);\n\n\tReact.useEffect(() => {\n\t\tconst fetchTime = async () => {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\n\t\t\t\t\t'https://api.github.com/repos/sverg84/sverg84.github.io',\n\t\t\t\t);\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`${response.status}: ${response.statusText}`);\n\t\t\t\t}\n\t\t\t\tconst data = await response.json();\n\t\t\t\tconst updateTime: string = data['pushed_at'];\n\t\t\t\tsetLastUpdatedTime(new Date(updateTime));\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(error);\n\t\t\t}\n\t\t};\n\n\t\tfetchTime();\n\t}, []);\n\n\tif (lastUpdatedTime == null) {\n\t\treturn null;\n\t}\n\n\tconst timeSinceLastUpdate = lastUpdatedTime.getTime() - new Date().getTime();\n\n\treturn (\n\t\t<>\n\t\t\tLast Updated:{' '}\n\t\t\t\n\t\t\n\t);\n}\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport Container from 'react-bootstrap/Container';\nimport Col from 'react-bootstrap/esm/Col';\nimport Navbar from 'react-bootstrap/Navbar';\nimport { Link } from 'react-router-dom';\n\nimport MyName from '../../consts/MyName.ts';\nimport useBackgroundColorStyle from '../../hooks/useBackgroundColorStyle.ts';\nimport navStyles from '../../styles/nav/navbar.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\nimport PageNavColorPicker from './PageNavColorPicker.tsx';\nimport PageNavLatestPushTimestamp from './PageNavLatestPushTimestamp.tsx';\n\ntype Props = Readonly<{\n\tbreadcrumbs?: React.JSX.Element | undefined;\n}>;\n\nexport default function PageNavBar({breadcrumbs}: Props): React.JSX.Element {\n\tconst style = useBackgroundColorStyle();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{MyName}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{breadcrumbs}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport PageNavBar from './nav/PageNavBar';\n\nconst DEFAULT_COLOR = '#2e3134';\n\ntype Props = Readonly<{\n\tbackground: React.JSX.Element;\n\tbreadcrumbs?: React.JSX.Element;\n\tchildren: React.ReactNode;\n}>;\n\nexport default function Page({\n\tbackground,\n\tbreadcrumbs,\n\tchildren,\n}: Props): React.JSX.Element {\n\tconst localStorageColorOrDefault =\n\t\tlocalStorage.getItem('color') ?? DEFAULT_COLOR;\n\tconst [hex, setHex] = React.useState(localStorageColorOrDefault);\n\n\tReact.useEffect(() => {\n\t\tlocalStorage.setItem('color', hex);\n\t}, [hex]);\n\n\treturn (\n\t\t\n\t\t\t{background}\n\t\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"pageBody_body__aNOKo\"};","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport pageBodyStyles from '../../styles/pageBody.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\n\ntype Props = Readonly<{\n\tchildren: React.ReactNode;\n}>;\n\nexport default function PageBody({children}: Props): React.JSX.Element {\n\treturn (\n\t\t
\n\t\t\t{children}\n\t\t
\n\t);\n}\n","import * as React from 'react';\nimport Placeholder from 'react-bootstrap/esm/Placeholder';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from '../about/AboutMeCardImage';\n\nconst AboutMeCardImage = React.lazy(\n\tasync () => await import('../about/AboutMeCardImage'),\n);\n\nexport default function AboutMeCardLazyImage(\n\tprops: ImageProps,\n): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t}>\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Col from 'react-bootstrap/Col';\nimport Container from 'react-bootstrap/Container';\nimport Row from 'react-bootstrap/Row';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from './AboutMeCardImage';\nimport AboutMeCardLazyImage from './AboutMeCardLazyImage';\n\ntype Props = Readonly<{\n\tchildren: React.JSX.Element;\n}> &\n\tImageProps;\n\nexport default function AboutMeCardBodyContainer({\n\tchildren,\n\t...imageProps\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport Button from 'react-bootstrap/Button';\n\nimport useHover from '../../hooks/useHover';\n\ntype Props = Readonly<{\n\tclassName?: string;\n\thref: string;\n\ticon: IconProp;\n}>;\n\nexport default function ExternalLinkButton({\n\tclassName,\n\thref,\n\ticon,\n}: Props): React.JSX.Element {\n\tconst {isHovering: _isHovering, ...mouseEvents} = useHover();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","const MyName: string = \"Stephen Vergara\";\n\nexport default MyName;\n","import { createContext } from 'react';\n\ntype ContextType = Readonly<\n\t[string, React.Dispatch>]\n>;\n\nexport default createContext(['#2e3134', () => {}]);\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport useTextColorForCustomBackground from './useTextColorForCustomBackground';\n\nexport default function useBackgroundColorStyle(\n\talpha: string = '',\n): React.CSSProperties {\n\tconst [color] = React.useContext(ColorContext);\n\tconst textColor = useTextColorForCustomBackground();\n\n\treturn {backgroundColor: `${color}${alpha}`, color: textColor};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useColorStyle(): React.CSSProperties {\n const [color] = React.useContext(ColorContext);\n\n return {color};\n}","import * as React from 'react';\n\ntype ReturnType = Readonly<{\n\tisHovering: boolean;\n\tonMouseEnter: () => void;\n\tonMouseLeave: () => void;\n}>;\n\nexport default function useHover(): ReturnType {\n\tconst [isHovering, setIsHovering] = React.useState(false);\n\n\tconst onMouseEnter = () => {\n\t\tsetIsHovering(true);\n\t};\n\n\tconst onMouseLeave = () => {\n\t\tsetIsHovering(false);\n\t};\n\n\treturn {isHovering, onMouseEnter, onMouseLeave};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport brightnessFromHexCode from '../utils/brightnessFromHexCode';\n\nconst BRIGHTNESS_THRESHOLD = 128;\n\nexport default function useTextColorForCustomBackground(): string {\n\tconst [color] = React.useContext(ColorContext);\n\n\treturn React.useMemo(() => {\n\t\tconst brightness = brightnessFromHexCode(color);\n\t\treturn brightness > BRIGHTNESS_THRESHOLD ? 'black' : 'white';\n\t}, [color]);\n}\n","// NTSC luminance formula (linear approximation): Y = .299r' + .587g' + .114b'\nconst RED_LUMINANCE_COEFFICIENT = 0.299;\nconst GREEN_LUMINANCE_COEFFICIENT = 0.587;\nconst BLUE_LUMINANCE_COEFFICIENT = 0.114;\n\nexport default function brightnessFromHexCode(color: string) {\n\tconst getChunksFromString = (st: string, chunkSize: number) =>\n\t\tst.match(new RegExp(`.{${chunkSize}}`, 'g'));\n\n\tconst convertHexUnitTo256 = (hexStr: string) =>\n\t\tparseInt(hexStr.repeat(2 / hexStr.length), 16);\n\n\tconst chunkSize = Math.floor((color.length - 1) / 3);\n\tconst hexArr = getChunksFromString(color.slice(1), chunkSize);\n\n\tconst [red, green, blue] = (hexArr ?? []).map(convertHexUnitTo256);\n\n\tconst brightness = Math.round(\n\t\t(red ?? 0) * RED_LUMINANCE_COEFFICIENT +\n\t\t\t(green ?? 0) * GREEN_LUMINANCE_COEFFICIENT +\n\t\t\t(blue ?? 0) * BLUE_LUMINANCE_COEFFICIENT,\n\t);\n\n\treturn brightness;\n}\n","import * as React from 'react';\n\ninterface PreloadedExoticComponent>\n\textends React.LazyExoticComponent {\n\tpreload: () => {};\n}\n\nexport default function lazyWithPreload>(\n\tfactory: () => Promise<{\n\t\tdefault: T;\n\t}>,\n): PreloadedExoticComponent {\n\treturn Object.assign(React.lazy(factory), {preload: factory});\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar prefix = 'fab';\nvar iconName = 'discord';\nvar width = 640;\nvar height = 512;\nvar aliases = [];\nvar unicode = 'f392';\nvar svgPathData = 'M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z';\n\nexports.definition = {\n prefix: prefix,\n iconName: iconName,\n icon: [\n width,\n height,\n aliases,\n unicode,\n svgPathData\n ]};\n\nexports.faDiscord = exports.definition;\nexports.prefix = prefix;\nexports.iconName = iconName;\nexports.width = width;\nexports.height = height;\nexports.ligatures = aliases;\nexports.unicode = unicode;\nexports.svgPathData = svgPathData;\nexports.aliases = aliases;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar prefix = 'fab';\nvar iconName = 'steam';\nvar width = 496;\nvar height = 512;\nvar aliases = [];\nvar unicode = 'f1b6';\nvar svgPathData = 'M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z';\n\nexports.definition = {\n prefix: prefix,\n iconName: iconName,\n icon: [\n width,\n height,\n aliases,\n unicode,\n svgPathData\n ]};\n\nexports.faSteam = exports.definition;\nexports.prefix = prefix;\nexports.iconName = iconName;\nexports.width = width;\nexports.height = height;\nexports.ligatures = aliases;\nexports.unicode = unicode;\nexports.svgPathData = svgPathData;\nexports.aliases = aliases;","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"aboutMeCardBody_body__px0Z-\",\"base\":\"aboutMeCardBody_base__HWSO5\",\"image\":\"aboutMeCardBody_image__r0pwR\",\"glimmer\":\"aboutMeCardBody_glimmer__ztngv\",\"imageColumn\":\"aboutMeCardBody_imageColumn__Decwz\"};","// extracted by mini-css-extract-plugin\nexport default {\"buttons\":\"footer_buttons__X-wEA\",\"resume\":\"footer_resume__j2AKe\"};","// extracted by mini-css-extract-plugin\nexport default {\"github\":\"linkButton_github__ltM-y\",\"linkedin\":\"linkButton_linkedin__MRpaF\",\"steam\":\"linkButton_steam__qizUa\",\"discord\":\"linkButton_discord__zToU1\"};","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"pageMargin_page__oYkHI\"};"],"names":["BACKGROUND_COLOR","STARS","className","styles","stars","numStars","stars2","stars3","Stars","_ref","color","React","ColorContext","colorForStars","brightnessFromHexCode","boxShadow","rand","Math","floor","random","calc","concat","shadow","i","_jsx","style","PersonalBackground","background","children","map","props","_createElement","key","DiscordButton","ExternalLinkButton","discord","href","icon","_faDiscord","SteamButton","steam","_faSteam","PersonalAboutMeCardFooter","Card","Footer","_jsxs","Container","buttons","HALF_OPACITY","HEADER_LABEL","PersonalAboutMeCardHeader","useColorStyle","bg","useBackgroundColorStyle","CardHeader","as","header","split","character","index","label","fn","deps","isFirst","useRef","useEffect","current","createWithBsPrefix","CarouselItem","ref","Component","bsPrefix","finalClassName","classNames","useBootstrapPrefix","displayName","func","child","Carousel","_ref2","defaultActiveIndex","uncontrolledProps","slide","fade","controls","indicators","indicatorLabels","activeIndex","onSelect","onSlide","onSlid","interval","keyboard","onKeyDown","pause","onMouseOver","onMouseOut","wrap","touch","onTouchStart","onTouchMove","onTouchEnd","prevIcon","prevLabel","nextIcon","nextLabel","variant","useUncontrolled","prefix","isRTL","useIsRTL","nextDirectionRef","direction","setDirection","useState","paused","setPaused","isSliding","setIsSliding","renderedActiveIndex","setRenderedActiveIndex","activeChildInterval","numChildren","forEach","activeChildIntervalRef","useCommittedRef","prev","useCallback","event","nextActiveIndex","next","useEventCallback","elementRef","useImperativeHandle","element","nextWhenVisible","document","hidden","parentNode","elementStyle","getComputedStyle","display","visibility","isVisible","slideDirection","useUpdateEffect","orderClassName","directionalClassName","handleEnter","node","triggerBrowserReflow","handleEntered","handleKeyDown","test","target","tagName","preventDefault","handleMouseOver","handleMouseOut","touchStartXRef","touchDeltaXRef","touchUnpauseTimeout","useTimeout","handleTouchStart","touches","clientX","handleTouchMove","length","handleTouchEnd","touchDeltaX","abs","set","undefined","shouldPlay","intervalHandleRef","_activeChildIntervalR","nextFunc","window","setInterval","visibilityState","clearInterval","indicatorOnClicks","useMemo","Array","from","_","type","onClick","isActive","TransitionWrapper","in","onEnter","onEntered","addEndListener","transitionEndListener","status","innerProps","_Fragment","Anchor","Object","assign","Caption","CarouselCaption","Item","PersonalAboutMeCarouselItem","src","AboutMeCardBodyContainer","Text","IMAGES","PersonalAboutMePhotoCarousel","img","PersonalAboutMeCard","Body","PersonalBody","PageBody","Page","AppTooltip","content","tooltip","entry","useInView","rootMargin","OverlayTrigger","placement","isIntersecting","overlay","Tooltip","PageNavColorPickerMenu","lazyWithPreload","PageNavColorPicker","NavDropdown","align","renderMenuOnMount","title","FontAwesomeIcon","_faPalette","bounce","onMouseEnter","preload","fallback","Spinner","animation","RTF","Intl","RelativeTimeFormat","numeric","UNITS","unit","ms","relativeTimeFromElapsed","elapsed","format","round","PageNavLatestPushTimestamp","lastUpdatedTime","setLastUpdatedTime","async","response","fetch","ok","Error","statusText","updateTime","json","Date","error","console","warn","fetchTime","timeSinceLastUpdate","getTime","toLocaleString","PageNavBar","breadcrumbs","Navbar","expand","sticky","pageStyles","page","navStyles","navbar","Col","Link","brand","to","MyName","pushTime","rightContent","DEFAULT_COLOR","_localStorage$getItem","localStorageColorOrDefault","localStorage","getItem","hex","setHex","setItem","Provider","value","pageBodyStyles","body","AboutMeCardImage","AboutMeCardLazyImage","Placeholder","glimmer","imageProps","Row","xs","imageColumn","xl","isHovering","_isHovering","mouseEvents","useHover","Button","size","createContext","alpha","arguments","textColor","useTextColorForCustomBackground","backgroundColor","setIsHovering","onMouseLeave","BRIGHTNESS_THRESHOLD","RED_LUMINANCE_COEFFICIENT","GREEN_LUMINANCE_COEFFICIENT","BLUE_LUMINANCE_COEFFICIENT","chunkSize","hexArr","getChunksFromString","st","match","RegExp","slice","red","green","blue","hexStr","parseInt","repeat","factory","iconName","aliases","unicode","svgPathData","exports"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/996.9edb47c4.chunk.js b/static/js/996.9edb47c4.chunk.js deleted file mode 100644 index f8db821..0000000 --- a/static/js/996.9edb47c4.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunksverg84_github_io=self.webpackChunksverg84_github_io||[]).push([[996],{4996:(e,n,t)=>{t.r(n),t.d(n,{Component:()=>$});var r=t(2791),a=t(8025);const s={background:"background_background__jno86",stars:"background_stars__SBhqV",animStar:"background_animStar__vPf6G",stars2:"background_stars2__qibmf",stars3:"background_stars3__sA9u9"};var o=t(184);const c=[{className:s.stars,numStars:700},{className:s.stars2,numStars:200},{className:s.stars3,numStars:100}];function l(e){let{className:n,numStars:t}=e;const{color:s}=r.useContext(a.Z),c=r.useMemo((()=>{const e=()=>Math.floor(2e3*Math.random()+1),n=()=>"".concat(e(),"px ").concat(e(),"px ").concat(s);let r=n();for(let a=2;a<=t;a++)r="".concat(r,", ").concat(n());return r}),[s,t]);return(0,o.jsx)("div",{className:n,style:{boxShadow:c}})}function i(){return(0,o.jsx)("div",{className:s.background,children:c.map((e=>(0,r.createElement)(l,{...e,key:e.className})))})}var u=t(5364),d=t(8957),m=t(7022),h=t(775),v=t(280),x=t(5943),f=t(1791);function p(){return(0,o.jsx)(f.Z,{className:x.Z.discord,href:"https://discord.com/users/652354605497188370",icon:v.om})}var b=t(4018);function _(){return(0,o.jsx)(f.Z,{className:x.Z.steam,href:"https://steamcommunity.com/profiles/76561198060926980/",icon:b.vs})}function j(){return(0,o.jsx)(d.Z.Footer,{children:(0,o.jsxs)(m.Z,{className:h.Z.buttons,children:[(0,o.jsx)(_,{}),(0,o.jsx)(p,{})]})})}var Z=t(7469),g=t(7093),k=t(4769);const y={header:"header_header__dljDF",wavy:"header_wavy__GVntJ"},N="88",C="Oh, Hello!";function M(){const e=(0,k.Z)(),n=(0,g.Z)(N);return(0,o.jsx)(Z.Z,{as:"h2",className:y.header,style:{...n,...e},children:C.split("").map(((e,n,t)=>(0,o.jsx)("span",{children:e},e+(n>0?t[n-1]:""))))})}var S=t(9007);const w=function(e,n){const t=(0,r.useRef)(!0);(0,r.useEffect)((()=>{if(!t.current)return e();t.current=!1}),n)};var E=t(7904),I=t(9726),T=t(6445),A=t(1694),B=t.n(A),D=t(8580);const R=(0,t(6543).Z)("carousel-caption");var z=t(162);const L=r.forwardRef(((e,n)=>{let{as:t="div",bsPrefix:r,className:a,...s}=e;const c=B()(a,(0,z.vE)(r,"carousel-item"));return(0,o.jsx)(t,{ref:n,...s,className:c})}));L.displayName="CarouselItem";const O=L;function F(e,n){let t=0;return r.Children.map(e,(e=>r.isValidElement(e)?n(e,t++):e))}var H=t(933),P=t(7202),V=t(5007);const q=r.forwardRef(((e,n)=>{let{defaultActiveIndex:t=0,...a}=e;const{as:s="div",bsPrefix:c,slide:l=!0,fade:i=!1,controls:u=!0,indicators:d=!0,indicatorLabels:m=[],activeIndex:h,onSelect:v,onSlide:x,onSlid:f,interval:p=5e3,keyboard:b=!0,onKeyDown:_,pause:j="hover",onMouseOver:Z,onMouseOut:g,wrap:k=!0,touch:y=!0,onTouchStart:N,onTouchMove:C,onTouchEnd:M,prevIcon:A=(0,o.jsx)("span",{"aria-hidden":"true",className:"carousel-control-prev-icon"}),prevLabel:R="Previous",nextIcon:L=(0,o.jsx)("span",{"aria-hidden":"true",className:"carousel-control-next-icon"}),nextLabel:O="Next",variant:q,className:G,children:K,...U}=(0,D.Ch)({defaultActiveIndex:t,...a},{activeIndex:"onSelect"}),X=(0,z.vE)(c,"carousel"),J=(0,z.SC)(),W=(0,r.useRef)(null),[Y,Q]=(0,r.useState)("next"),[$,ee]=(0,r.useState)(!1),[ne,te]=(0,r.useState)(!1),[re,ae]=(0,r.useState)(h||0);(0,r.useEffect)((()=>{ne||h===re||(W.current?Q(W.current):Q((h||0)>re?"next":"prev"),l&&te(!0),ae(h||0))}),[h,ne,re,l]),(0,r.useEffect)((()=>{W.current&&(W.current=null)}));let se,oe=0;!function(e,n){let t=0;r.Children.forEach(e,(e=>{r.isValidElement(e)&&n(e,t++)}))}(K,((e,n)=>{++oe,n===h&&(se=e.props.interval)}));const ce=(0,E.Z)(se),le=(0,r.useCallback)((e=>{if(ne)return;let n=re-1;if(n<0){if(!k)return;n=oe-1}W.current="prev",null==v||v(n,e)}),[ne,re,v,k,oe]),ie=(0,S.Z)((e=>{if(ne)return;let n=re+1;if(n>=oe){if(!k)return;n=0}W.current="next",null==v||v(n,e)})),ue=(0,r.useRef)();(0,r.useImperativeHandle)(n,(()=>({element:ue.current,prev:le,next:ie})));const de=(0,S.Z)((()=>{!document.hidden&&function(e){if(!e||!e.style||!e.parentNode||!e.parentNode.style)return!1;const n=getComputedStyle(e);return"none"!==n.display&&"hidden"!==n.visibility&&"none"!==getComputedStyle(e.parentNode).display}(ue.current)&&(J?le():ie())})),me="next"===Y?"start":"end";w((()=>{l||(null==x||x(re,me),null==f||f(re,me))}),[re]);const he="".concat(X,"-item-").concat(Y),ve="".concat(X,"-item-").concat(me),xe=(0,r.useCallback)((e=>{(0,P.Z)(e),null==x||x(re,me)}),[x,re,me]),fe=(0,r.useCallback)((()=>{te(!1),null==f||f(re,me)}),[f,re,me]),pe=(0,r.useCallback)((e=>{if(b&&!/input|textarea/i.test(e.target.tagName))switch(e.key){case"ArrowLeft":return e.preventDefault(),void(J?ie(e):le(e));case"ArrowRight":return e.preventDefault(),void(J?le(e):ie(e))}null==_||_(e)}),[b,_,le,ie,J]),be=(0,r.useCallback)((e=>{"hover"===j&&ee(!0),null==Z||Z(e)}),[j,Z]),_e=(0,r.useCallback)((e=>{ee(!1),null==g||g(e)}),[g]),je=(0,r.useRef)(0),Ze=(0,r.useRef)(0),ge=(0,I.Z)(),ke=(0,r.useCallback)((e=>{je.current=e.touches[0].clientX,Ze.current=0,"hover"===j&&ee(!0),null==N||N(e)}),[j,N]),ye=(0,r.useCallback)((e=>{e.touches&&e.touches.length>1?Ze.current=0:Ze.current=e.touches[0].clientX-je.current,null==C||C(e)}),[C]),Ne=(0,r.useCallback)((e=>{if(y){const n=Ze.current;Math.abs(n)>40&&(n>0?le(e):ie(e))}"hover"===j&&ge.set((()=>{ee(!1)}),p||void 0),null==M||M(e)}),[y,j,le,ie,ge,p,M]),Ce=null!=p&&!$&&!ne,Me=(0,r.useRef)();(0,r.useEffect)((()=>{var e,n;if(!Ce)return;const t=J?le:ie;return Me.current=window.setInterval(document.visibilityState?de:t,null!=(e=null!=(n=ce.current)?n:p)?e:void 0),()=>{null!==Me.current&&clearInterval(Me.current)}}),[Ce,le,ie,ce,p,de,J]);const Se=(0,r.useMemo)((()=>d&&Array.from({length:oe},((e,n)=>e=>{null==v||v(n,e)}))),[d,oe,v]);return(0,o.jsxs)(s,{ref:ue,...U,onKeyDown:pe,onMouseOver:be,onMouseOut:_e,onTouchStart:ke,onTouchMove:ye,onTouchEnd:Ne,className:B()(G,X,l&&"slide",i&&"".concat(X,"-fade"),q&&"".concat(X,"-").concat(q)),children:[d&&(0,o.jsx)("div",{className:"".concat(X,"-indicators"),children:F(K,((e,n)=>(0,o.jsx)("button",{type:"button","data-bs-target":"","aria-label":null!=m&&m.length?m[n]:"Slide ".concat(n+1),className:n===re?"active":void 0,onClick:Se?Se[n]:void 0,"aria-current":n===re},n)))}),(0,o.jsx)("div",{className:"".concat(X,"-inner"),children:F(K,((e,n)=>{const t=n===re;return l?(0,o.jsx)(V.Z,{in:t,onEnter:t?xe:void 0,onEntered:t?fe:void 0,addEndListener:H.Z,children:(n,a)=>r.cloneElement(e,{...a,className:B()(e.props.className,t&&"entered"!==n&&he,("entered"===n||"exiting"===n)&&"active",("entering"===n||"exiting"===n)&&ve)})}):r.cloneElement(e,{className:B()(e.props.className,t&&"active")})}))}),u&&(0,o.jsxs)(o.Fragment,{children:[(k||0!==h)&&(0,o.jsxs)(T.Z,{className:"".concat(X,"-control-prev"),onClick:le,children:[A,R&&(0,o.jsx)("span",{className:"visually-hidden",children:R})]}),(k||h!==oe-1)&&(0,o.jsxs)(T.Z,{className:"".concat(X,"-control-next"),onClick:ie,children:[L,O&&(0,o.jsx)("span",{className:"visually-hidden",children:O})]})]})]})}));q.displayName="Carousel";const G=Object.assign(q,{Caption:R,Item:O});var K=t(8188);function U(e){let{src:n}=e;return(0,o.jsx)(K.Z,{src:n,children:(0,o.jsx)(d.Z.Text,{children:"Blep"})})}const X=["/portrait-mode.jpg","/pinksuit.jpeg","/dokidoki.jpeg"];function J(){return(0,o.jsx)(G,{controls:!1,fade:!0,indicators:!1,interval:4e3,wrap:!0,children:X.map((e=>(0,o.jsx)(G.Item,{children:(0,o.jsx)(U,{src:e})},e)))})}function W(){return(0,o.jsxs)(d.Z,{children:[(0,o.jsx)(M,{}),(0,o.jsx)(d.Z.Body,{children:(0,o.jsx)(J,{})}),(0,o.jsx)(j,{})]})}function Y(){return(0,o.jsx)(u.Z,{children:(0,o.jsx)(W,{})})}var Q=t(9911);function $(){return(0,o.jsx)(Q.Z,{background:(0,o.jsx)(i,{}),children:(0,o.jsx)(Y,{})})}},949:(e,n,t)=>{t.d(n,{Z:()=>l});t(2791);var r=t(5862),a=t(2576),s=t(3441);const o={tooltip:"tooltip_tooltip__5pJPW"};var c=t(184);function l(e){let{content:n,tooltip:t}=e;const{ref:l,entry:i}=(0,s.YD)({rootMargin:"-50% 0px 0px"});return(0,c.jsx)(r.Z,{placement:null!==i&&void 0!==i&&i.isIntersecting?"top":"bottom",overlay:(0,c.jsx)(a.Z,{children:t}),children:(0,c.jsx)("span",{className:o.tooltip,ref:l,children:n})})}},9911:(e,n,t)=>{t.d(n,{Z:()=>E});var r=t(2791),a=t(8025),s=t(1694),o=t.n(s),c=t(7022),l=t(2677),i=t(2251),u=t(1087),d=t(2982),m=t(7093);const h={brand:"navbar_brand__zDvLc",navbar:"navbar_navbar__pEuvw",pushTime:"navbar_pushTime__jdH3p",rightContent:"navbar_rightContent__ikOZ0"};var v=t(5),x=t(5088),f=t(9806),p=t(192),b=t(4849);const _={fallback:"colorPicker_fallback__pvhTA"};var j=t(9415),Z=t(184);const g=(0,j.Z)((()=>t.e(154).then(t.bind(t,1154))));function k(){return(0,Z.jsx)(p.Z,{align:"end",className:_.icon,renderMenuOnMount:!1,title:(0,Z.jsx)(f.G,{icon:x.q2,bounce:!0}),onMouseEnter:()=>{g.preload()},children:(0,Z.jsx)(r.Suspense,{fallback:(0,Z.jsx)("div",{className:_.fallback,children:(0,Z.jsx)(b.Z,{animation:"border",variant:"secondary"})}),children:(0,Z.jsx)(g,{})})})}var y=t(949);const N=new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}),C=[{unit:"year",ms:31536e6},{unit:"month",ms:2628e6},{unit:"day",ms:864e5},{unit:"hour",ms:36e5},{unit:"minute",ms:6e4},{unit:"second",ms:1e3}];function M(e){for(const{unit:n,ms:t}of C)if(Math.abs(e)>=t||"second"===n)return N.format(Math.round(e/t),n);return""}function S(){const[e,n]=r.useState(null);if(r.useEffect((()=>{(async()=>{try{const e=await fetch("https://api.github.com/repos/sverg84/sverg84.github.io");if(!e.ok)throw new Error("".concat(e.status,": ").concat(e.statusText));const t=(await e.json()).pushed_at;n(new Date(t))}catch(e){console.warn(e)}})()}),[]),null==e)return null;const t=e.getTime()-(new Date).getTime();return(0,Z.jsxs)(Z.Fragment,{children:["Last Updated:"," ",(0,Z.jsx)(y.Z,{content:M(t),tooltip:e.toLocaleString(void 0)})]})}function w(e){let{breadcrumbs:n}=e;const t=(0,m.Z)();return(0,Z.jsx)(i.Z,{expand:!1,sticky:"top",style:t,children:(0,Z.jsxs)(c.Z,{className:o()(v.Z.page,h.navbar),children:[(0,Z.jsx)(l.Z,{children:(0,Z.jsx)(u.rU,{className:h.brand,to:"/",children:d.Z})}),(0,Z.jsx)(l.Z,{className:h.pushTime,children:(0,Z.jsx)(S,{})}),(0,Z.jsxs)(l.Z,{className:h.rightContent,children:[n,(0,Z.jsx)(k,{})]})]})})}function E(e){let{background:n,breadcrumbs:t,children:s}=e;const[o,c]=(0,r.useState)("#2e3134");return(0,Z.jsxs)(a.Z.Provider,{value:{color:o,setColor:c},children:[n,(0,Z.jsx)(w,{breadcrumbs:t}),s]})}},5364:(e,n,t)=>{t.d(n,{Z:()=>l});var r=t(1694),a=t.n(r);t(2791);const s={body:"pageBody_body__aNOKo"};var o=t(5),c=t(184);function l(e){let{children:n}=e;return(0,c.jsx)("div",{className:a()(o.Z.page,s.body),children:n})}},8188:(e,n,t)=>{t.d(n,{Z:()=>h});var r=t(2791),a=t(8957),s=t(2677),o=t(7022),c=t(9743),l=t(6638),i=t(5267),u=t(184);const d=r.lazy((async()=>await t.e(217).then(t.bind(t,1217))));function m(e){return(0,u.jsx)(r.Suspense,{fallback:(0,u.jsx)(i.Z,{animation:"wave",as:"div",bg:"secondary",className:l.Z.glimmer}),children:(0,u.jsx)(d,{...e})})}function h(e){let{children:n,...t}=e;return(0,u.jsx)(a.Z.Body,{children:(0,u.jsx)(o.Z,{children:(0,u.jsxs)(c.Z,{className:l.Z.body,xs:1,children:[(0,u.jsx)(s.Z,{className:l.Z.imageColumn,xl:4,children:(0,u.jsx)(m,{...t})}),(0,u.jsx)(s.Z,{xl:8,children:n})]})})})}},1791:(e,n,t)=>{t.d(n,{Z:()=>c});var r=t(9806),a=(t(2791),t(3360)),s=t(2381),o=t(184);function c(e){let{className:n,href:t,icon:c}=e;const{isHovering:l,...i}=(0,s.Z)();return(0,o.jsx)(a.Z,{className:n,href:t,target:"_blank",variant:"link",...i,children:(0,o.jsx)(r.G,{icon:c,size:"2xl"})})}},2982:(e,n,t)=>{t.d(n,{Z:()=>r});const r="Stephen Vergara"},8025:(e,n,t)=>{t.d(n,{Z:()=>r});const r=(0,t(2791).createContext)({color:"#2e3134",setColor:()=>{}})},7093:(e,n,t)=>{t.d(n,{Z:()=>o});var r=t(2791),a=t(8025),s=t(5791);function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const{color:n}=r.useContext(a.Z),t=(0,s.Z)();return{backgroundColor:"".concat(n).concat(e),color:t}}},4769:(e,n,t)=>{t.d(n,{Z:()=>s});var r=t(2791),a=t(8025);function s(){const{color:e}=r.useContext(a.Z);return{color:e}}},2381:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(2791);function a(){const[e,n]=r.useState(!1);return{isHovering:e,onMouseEnter:()=>{n(!0)},onMouseLeave:()=>{n(!1)}}}},5791:(e,n,t)=>{t.d(n,{Z:()=>i});var r=t(2791),a=t(8025);const s=128,o=.299,c=.587,l=.114;function i(){const{color:e}=r.useContext(a.Z);return r.useMemo((()=>{const n=Math.floor((e.length-1)/3),t=((e,n)=>e.match(new RegExp(".{".concat(n,"}"),"g")))(e.slice(1),n),[r,a,i]=(null!==t&&void 0!==t?t:[]).map((e=>parseInt(e.repeat(2/e.length),16)));return Math.round((null!==r&&void 0!==r?r:0)*o+(null!==a&&void 0!==a?a:0)*c+(null!==i&&void 0!==i?i:0)*l)>s?"black":"white"}),[e])}},9415:(e,n,t)=>{t.d(n,{Z:()=>a});var r=t(2791);function a(e){return Object.assign(r.lazy(e),{preload:e})}},280:(e,n)=>{var t="discord",r=[],a="f392",s="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z";n.DF={prefix:"fab",iconName:t,icon:[640,512,r,a,s]},n.om=n.DF},4018:(e,n)=>{var t="steam",r=[],a="f1b6",s="M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z";n.DF={prefix:"fab",iconName:t,icon:[496,512,r,a,s]},n.vs=n.DF},6638:(e,n,t)=>{t.d(n,{Z:()=>r});const r={body:"aboutMeCardBody_body__px0Z-",base:"aboutMeCardBody_base__HWSO5",image:"aboutMeCardBody_image__r0pwR",glimmer:"aboutMeCardBody_glimmer__ztngv",imageColumn:"aboutMeCardBody_imageColumn__Decwz"}},775:(e,n,t)=>{t.d(n,{Z:()=>r});const r={buttons:"footer_buttons__X-wEA",resume:"footer_resume__j2AKe"}},5943:(e,n,t)=>{t.d(n,{Z:()=>r});const r={github:"linkButton_github__ltM-y",linkedin:"linkButton_linkedin__MRpaF",steam:"linkButton_steam__qizUa",discord:"linkButton_discord__zToU1"}},5:(e,n,t)=>{t.d(n,{Z:()=>r});const r={page:"pageMargin_page__oYkHI"}}}]); -//# sourceMappingURL=996.9edb47c4.chunk.js.map \ No newline at end of file diff --git a/static/js/996.9edb47c4.chunk.js.map b/static/js/996.9edb47c4.chunk.js.map deleted file mode 100644 index 4efba49..0000000 --- a/static/js/996.9edb47c4.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/996.9edb47c4.chunk.js","mappings":"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","sources":["webpack://sverg84.github.io/./src/impl/styles/body/personal/background.module.scss?368e","impl/components/body/personal/PersonalBackground.tsx","impl/components/buttons/DiscordButton.tsx","impl/components/buttons/SteamButton.tsx","impl/components/body/personal/about/PersonalAboutMeCardFooter.tsx","webpack://sverg84.github.io/./src/impl/styles/body/personal/about/header.module.scss?19f6","impl/components/body/personal/about/PersonalAboutMeCardHeader.tsx","../node_modules/@restart/hooks/esm/useUpdateEffect.js","../node_modules/react-bootstrap/esm/CarouselCaption.js","../node_modules/react-bootstrap/esm/CarouselItem.js","../node_modules/react-bootstrap/esm/ElementChildren.js","../node_modules/react-bootstrap/esm/Carousel.js","impl/components/body/personal/about/PersonalAboutMeCarouselItem.tsx","impl/components/body/personal/about/PersonalAboutMePhotoCarousel.tsx","impl/components/body/personal/about/PersonalAboutMeCard.tsx","impl/components/body/PersonalBody.tsx","impl/components/AppPersonal.tsx","webpack://sverg84.github.io/./src/impl/styles/tooltip.module.scss?f869","impl/components/AppTooltip.tsx","webpack://sverg84.github.io/./src/impl/styles/nav/navbar.module.scss?5af6","webpack://sverg84.github.io/./src/impl/styles/nav/colorPicker.module.scss?f351","impl/components/nav/PageNavColorPicker.tsx","impl/components/nav/PageNavLatestPushTimestamp.tsx","impl/components/nav/PageNavBar.tsx","impl/components/Page.tsx","webpack://sverg84.github.io/./src/impl/styles/pageBody.module.scss?5416","impl/components/body/PageBody.tsx","impl/components/body/about/AboutMeCardLazyImage.tsx","impl/components/body/about/AboutMeCardBodyContainer.tsx","impl/components/buttons/ExternalLinkButton.tsx","impl/consts/MyName.ts","impl/contexts/ColorContext.ts","impl/hooks/useBackgroundColorStyle.ts","impl/hooks/useColorStyle.ts","impl/hooks/useHover.ts","impl/hooks/useTextColorForCustomBackground.ts","impl/utils/lazyWithPreload.ts","../node_modules/@fortawesome/free-brands-svg-icons/faDiscord.js","../node_modules/@fortawesome/free-brands-svg-icons/faSteam.js","webpack://sverg84.github.io/./src/impl/styles/body/about/aboutMeCardBody.module.scss?747a","webpack://sverg84.github.io/./src/impl/styles/body/about/footer.module.scss?b32c","webpack://sverg84.github.io/./src/impl/styles/body/buttons/linkButton.module.scss?4ee4","webpack://sverg84.github.io/./src/impl/styles/pageMargin.module.scss?e8bc"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"background\":\"background_background__jno86\",\"stars\":\"background_stars__SBhqV\",\"animStar\":\"background_animStar__vPf6G\",\"stars2\":\"background_stars2__qibmf\",\"stars3\":\"background_stars3__sA9u9\"};","import * as React from 'react';\n\nimport ColorContext from '../../../contexts/ColorContext';\nimport styles from '../../../styles/body/personal/background.module.scss';\n\ntype StarsProps = Readonly<{\n\tclassName: string;\n\tnumStars: number;\n}>;\n\nconst STARS: ReadonlyArray = [\n\t{className: styles.stars, numStars: 700},\n\t{className: styles.stars2, numStars: 200},\n\t{className: styles.stars3, numStars: 100},\n];\n\nfunction Stars({className, numStars}: StarsProps): React.JSX.Element {\n\tconst {color} = React.useContext(ColorContext);\n\n\tconst boxShadow = React.useMemo(() => {\n\t\tconst rand = () => Math.floor(Math.random() * 2000 + 1);\n\t\tconst calc = () => `${rand()}px ${rand()}px ${color}`;\n\n\t\tlet shadow = calc();\n\n\t\tfor (let i = 2; i <= numStars; i++) {\n\t\t\tshadow = `${shadow}, ${calc()}`;\n\t\t}\n\n\t\treturn shadow;\n\t}, [color, numStars]);\n\n\treturn
;\n}\n\nexport default function PersonalBackground(): React.JSX.Element {\n\treturn (\n\t\t
\n\t\t\t{STARS.map(props => (\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function DiscordButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","import { brands } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport * as React from 'react';\n\nimport styles from '../../styles/body/buttons/linkButton.module.scss';\nimport ExternalLinkButton from './ExternalLinkButton';\n\nexport default function SteamButton(): React.JSX.Element {\n\treturn (\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\nimport Container from 'react-bootstrap/esm/Container';\n\nimport styles from '../../../../styles/body/about/footer.module.scss';\nimport DiscordButton from '../../../buttons/DiscordButton';\nimport SteamButton from '../../../buttons/SteamButton';\n\nexport default function PersonalAboutMeCardFooter(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"header_header__dljDF\",\"wavy\":\"header_wavy__GVntJ\"};","import * as React from 'react';\nimport CardHeader from 'react-bootstrap/esm/CardHeader';\n\nimport useBackgroundColorStyle from '../../../../hooks/useBackgroundColorStyle';\nimport useColorStyle from '../../../../hooks/useColorStyle';\nimport styles from '../../../../styles/body/personal/about/header.module.scss';\n\nconst HALF_OPACITY = '88';\nconst HEADER_LABEL = 'Oh, Hello!';\n\nexport default function PersonalAboutMeCardHeader(): React.JSX.Element {\n\tconst color = useColorStyle();\n\tconst bg = useBackgroundColorStyle(HALF_OPACITY);\n\n\treturn (\n\t\t\n\t\t\t{HEADER_LABEL.split('').map((character, index, label) => (\n\t\t\t\t 0 ? label[index - 1] : '')}>\n\t\t\t\t\t{character}\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * Runs an effect only when the dependencies have changed, skipping the\n * initial \"on mount\" run. Caution, if the dependency list never changes,\n * the effect is **never run**\n *\n * ```ts\n * const ref = useRef(null);\n *\n * // focuses an element only if the focus changes, and not on mount\n * useUpdateEffect(() => {\n * const element = ref.current?.children[focusedIdx] as HTMLElement\n *\n * element?.focus()\n *\n * }, [focusedIndex])\n * ```\n * @param effect An effect to run on mount\n *\n * @category effects\n */\nfunction useUpdateEffect(fn, deps) {\n const isFirst = useRef(true);\n useEffect(() => {\n if (isFirst.current) {\n isFirst.current = false;\n return;\n }\n return fn();\n }, deps);\n}\nexport default useUpdateEffect;","import createWithBsPrefix from './createWithBsPrefix';\nexport default createWithBsPrefix('carousel-caption');","import classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst CarouselItem = /*#__PURE__*/React.forwardRef(({\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n className,\n ...props\n}, ref) => {\n const finalClassName = classNames(className, useBootstrapPrefix(bsPrefix, 'carousel-item'));\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: finalClassName\n });\n});\nCarouselItem.displayName = 'CarouselItem';\nexport default CarouselItem;","import * as React from 'react';\n\n/**\n * Iterates through children that are typically specified as `props.children`,\n * but only maps over children that are \"valid elements\".\n *\n * The mapFunction provided index will be normalised to the components mapped,\n * so an invalid component would not increase the index.\n *\n */\nfunction map(children, func) {\n let index = 0;\n return React.Children.map(children, child => /*#__PURE__*/React.isValidElement(child) ? func(child, index++) : child);\n}\n\n/**\n * Iterates through children that are \"valid elements\".\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child with the index reflecting the position relative to \"valid components\".\n */\nfunction forEach(children, func) {\n let index = 0;\n React.Children.forEach(children, child => {\n if ( /*#__PURE__*/React.isValidElement(child)) func(child, index++);\n });\n}\n\n/**\n * Finds whether a component's `children` prop includes a React element of the\n * specified type.\n */\nfunction hasChildOfType(children, type) {\n return React.Children.toArray(children).some(child => /*#__PURE__*/React.isValidElement(child) && child.type === type);\n}\nexport { map, forEach, hasChildOfType };","import useEventCallback from '@restart/hooks/useEventCallback';\nimport useUpdateEffect from '@restart/hooks/useUpdateEffect';\nimport useCommittedRef from '@restart/hooks/useCommittedRef';\nimport useTimeout from '@restart/hooks/useTimeout';\nimport Anchor from '@restart/ui/Anchor';\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { useUncontrolled } from 'uncontrollable';\nimport CarouselCaption from './CarouselCaption';\nimport CarouselItem from './CarouselItem';\nimport { map, forEach } from './ElementChildren';\nimport { useBootstrapPrefix, useIsRTL } from './ThemeProvider';\nimport transitionEndListener from './transitionEndListener';\nimport triggerBrowserReflow from './triggerBrowserReflow';\nimport TransitionWrapper from './TransitionWrapper';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nconst SWIPE_THRESHOLD = 40;\nfunction isVisible(element) {\n if (!element || !element.style || !element.parentNode || !element.parentNode.style) {\n return false;\n }\n const elementStyle = getComputedStyle(element);\n return elementStyle.display !== 'none' && elementStyle.visibility !== 'hidden' && getComputedStyle(element.parentNode).display !== 'none';\n}\nconst Carousel = /*#__PURE__*/React.forwardRef(({\n defaultActiveIndex = 0,\n ...uncontrolledProps\n}, ref) => {\n const {\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n bsPrefix,\n slide = true,\n fade = false,\n controls = true,\n indicators = true,\n indicatorLabels = [],\n activeIndex,\n onSelect,\n onSlide,\n onSlid,\n interval = 5000,\n keyboard = true,\n onKeyDown,\n pause = 'hover',\n onMouseOver,\n onMouseOut,\n wrap = true,\n touch = true,\n onTouchStart,\n onTouchMove,\n onTouchEnd,\n prevIcon = /*#__PURE__*/_jsx(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"carousel-control-prev-icon\"\n }),\n prevLabel = 'Previous',\n nextIcon = /*#__PURE__*/_jsx(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"carousel-control-next-icon\"\n }),\n nextLabel = 'Next',\n variant,\n className,\n children,\n ...props\n } = useUncontrolled({\n defaultActiveIndex,\n ...uncontrolledProps\n }, {\n activeIndex: 'onSelect'\n });\n const prefix = useBootstrapPrefix(bsPrefix, 'carousel');\n const isRTL = useIsRTL();\n const nextDirectionRef = useRef(null);\n const [direction, setDirection] = useState('next');\n const [paused, setPaused] = useState(false);\n const [isSliding, setIsSliding] = useState(false);\n const [renderedActiveIndex, setRenderedActiveIndex] = useState(activeIndex || 0);\n useEffect(() => {\n if (!isSliding && activeIndex !== renderedActiveIndex) {\n if (nextDirectionRef.current) {\n setDirection(nextDirectionRef.current);\n } else {\n setDirection((activeIndex || 0) > renderedActiveIndex ? 'next' : 'prev');\n }\n if (slide) {\n setIsSliding(true);\n }\n setRenderedActiveIndex(activeIndex || 0);\n }\n }, [activeIndex, isSliding, renderedActiveIndex, slide]);\n useEffect(() => {\n if (nextDirectionRef.current) {\n nextDirectionRef.current = null;\n }\n });\n let numChildren = 0;\n let activeChildInterval;\n\n // Iterate to grab all of the children's interval values\n // (and count them, too)\n forEach(children, (child, index) => {\n ++numChildren;\n if (index === activeIndex) {\n activeChildInterval = child.props.interval;\n }\n });\n const activeChildIntervalRef = useCommittedRef(activeChildInterval);\n const prev = useCallback(event => {\n if (isSliding) {\n return;\n }\n let nextActiveIndex = renderedActiveIndex - 1;\n if (nextActiveIndex < 0) {\n if (!wrap) {\n return;\n }\n nextActiveIndex = numChildren - 1;\n }\n nextDirectionRef.current = 'prev';\n onSelect == null ? void 0 : onSelect(nextActiveIndex, event);\n }, [isSliding, renderedActiveIndex, onSelect, wrap, numChildren]);\n\n // This is used in the setInterval, so it should not invalidate.\n const next = useEventCallback(event => {\n if (isSliding) {\n return;\n }\n let nextActiveIndex = renderedActiveIndex + 1;\n if (nextActiveIndex >= numChildren) {\n if (!wrap) {\n return;\n }\n nextActiveIndex = 0;\n }\n nextDirectionRef.current = 'next';\n onSelect == null ? void 0 : onSelect(nextActiveIndex, event);\n });\n const elementRef = useRef();\n useImperativeHandle(ref, () => ({\n element: elementRef.current,\n prev,\n next\n }));\n\n // This is used in the setInterval, so it should not invalidate.\n const nextWhenVisible = useEventCallback(() => {\n if (!document.hidden && isVisible(elementRef.current)) {\n if (isRTL) {\n prev();\n } else {\n next();\n }\n }\n });\n const slideDirection = direction === 'next' ? 'start' : 'end';\n useUpdateEffect(() => {\n if (slide) {\n // These callbacks will be handled by the callbacks.\n return;\n }\n onSlide == null ? void 0 : onSlide(renderedActiveIndex, slideDirection);\n onSlid == null ? void 0 : onSlid(renderedActiveIndex, slideDirection);\n }, [renderedActiveIndex]);\n const orderClassName = `${prefix}-item-${direction}`;\n const directionalClassName = `${prefix}-item-${slideDirection}`;\n const handleEnter = useCallback(node => {\n triggerBrowserReflow(node);\n onSlide == null ? void 0 : onSlide(renderedActiveIndex, slideDirection);\n }, [onSlide, renderedActiveIndex, slideDirection]);\n const handleEntered = useCallback(() => {\n setIsSliding(false);\n onSlid == null ? void 0 : onSlid(renderedActiveIndex, slideDirection);\n }, [onSlid, renderedActiveIndex, slideDirection]);\n const handleKeyDown = useCallback(event => {\n if (keyboard && !/input|textarea/i.test(event.target.tagName)) {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n if (isRTL) {\n next(event);\n } else {\n prev(event);\n }\n return;\n case 'ArrowRight':\n event.preventDefault();\n if (isRTL) {\n prev(event);\n } else {\n next(event);\n }\n return;\n default:\n }\n }\n onKeyDown == null ? void 0 : onKeyDown(event);\n }, [keyboard, onKeyDown, prev, next, isRTL]);\n const handleMouseOver = useCallback(event => {\n if (pause === 'hover') {\n setPaused(true);\n }\n onMouseOver == null ? void 0 : onMouseOver(event);\n }, [pause, onMouseOver]);\n const handleMouseOut = useCallback(event => {\n setPaused(false);\n onMouseOut == null ? void 0 : onMouseOut(event);\n }, [onMouseOut]);\n const touchStartXRef = useRef(0);\n const touchDeltaXRef = useRef(0);\n const touchUnpauseTimeout = useTimeout();\n const handleTouchStart = useCallback(event => {\n touchStartXRef.current = event.touches[0].clientX;\n touchDeltaXRef.current = 0;\n if (pause === 'hover') {\n setPaused(true);\n }\n onTouchStart == null ? void 0 : onTouchStart(event);\n }, [pause, onTouchStart]);\n const handleTouchMove = useCallback(event => {\n if (event.touches && event.touches.length > 1) {\n touchDeltaXRef.current = 0;\n } else {\n touchDeltaXRef.current = event.touches[0].clientX - touchStartXRef.current;\n }\n onTouchMove == null ? void 0 : onTouchMove(event);\n }, [onTouchMove]);\n const handleTouchEnd = useCallback(event => {\n if (touch) {\n const touchDeltaX = touchDeltaXRef.current;\n if (Math.abs(touchDeltaX) > SWIPE_THRESHOLD) {\n if (touchDeltaX > 0) {\n prev(event);\n } else {\n next(event);\n }\n }\n }\n if (pause === 'hover') {\n touchUnpauseTimeout.set(() => {\n setPaused(false);\n }, interval || undefined);\n }\n onTouchEnd == null ? void 0 : onTouchEnd(event);\n }, [touch, pause, prev, next, touchUnpauseTimeout, interval, onTouchEnd]);\n const shouldPlay = interval != null && !paused && !isSliding;\n const intervalHandleRef = useRef();\n useEffect(() => {\n var _ref, _activeChildIntervalR;\n if (!shouldPlay) {\n return undefined;\n }\n const nextFunc = isRTL ? prev : next;\n intervalHandleRef.current = window.setInterval(document.visibilityState ? nextWhenVisible : nextFunc, (_ref = (_activeChildIntervalR = activeChildIntervalRef.current) != null ? _activeChildIntervalR : interval) != null ? _ref : undefined);\n return () => {\n if (intervalHandleRef.current !== null) {\n clearInterval(intervalHandleRef.current);\n }\n };\n }, [shouldPlay, prev, next, activeChildIntervalRef, interval, nextWhenVisible, isRTL]);\n const indicatorOnClicks = useMemo(() => indicators && Array.from({\n length: numChildren\n }, (_, index) => event => {\n onSelect == null ? void 0 : onSelect(index, event);\n }), [indicators, numChildren, onSelect]);\n return /*#__PURE__*/_jsxs(Component, {\n ref: elementRef,\n ...props,\n onKeyDown: handleKeyDown,\n onMouseOver: handleMouseOver,\n onMouseOut: handleMouseOut,\n onTouchStart: handleTouchStart,\n onTouchMove: handleTouchMove,\n onTouchEnd: handleTouchEnd,\n className: classNames(className, prefix, slide && 'slide', fade && `${prefix}-fade`, variant && `${prefix}-${variant}`),\n children: [indicators && /*#__PURE__*/_jsx(\"div\", {\n className: `${prefix}-indicators`,\n children: map(children, (_, index) => /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n \"data-bs-target\": \"\" // Bootstrap requires this in their css.\n ,\n \"aria-label\": indicatorLabels != null && indicatorLabels.length ? indicatorLabels[index] : `Slide ${index + 1}`,\n className: index === renderedActiveIndex ? 'active' : undefined,\n onClick: indicatorOnClicks ? indicatorOnClicks[index] : undefined,\n \"aria-current\": index === renderedActiveIndex\n }, index))\n }), /*#__PURE__*/_jsx(\"div\", {\n className: `${prefix}-inner`,\n children: map(children, (child, index) => {\n const isActive = index === renderedActiveIndex;\n return slide ? /*#__PURE__*/_jsx(TransitionWrapper, {\n in: isActive,\n onEnter: isActive ? handleEnter : undefined,\n onEntered: isActive ? handleEntered : undefined,\n addEndListener: transitionEndListener,\n children: (status, innerProps) => /*#__PURE__*/React.cloneElement(child, {\n ...innerProps,\n className: classNames(child.props.className, isActive && status !== 'entered' && orderClassName, (status === 'entered' || status === 'exiting') && 'active', (status === 'entering' || status === 'exiting') && directionalClassName)\n })\n }) : /*#__PURE__*/React.cloneElement(child, {\n className: classNames(child.props.className, isActive && 'active')\n });\n })\n }), controls && /*#__PURE__*/_jsxs(_Fragment, {\n children: [(wrap || activeIndex !== 0) && /*#__PURE__*/_jsxs(Anchor, {\n className: `${prefix}-control-prev`,\n onClick: prev,\n children: [prevIcon, prevLabel && /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: prevLabel\n })]\n }), (wrap || activeIndex !== numChildren - 1) && /*#__PURE__*/_jsxs(Anchor, {\n className: `${prefix}-control-next`,\n onClick: next,\n children: [nextIcon, nextLabel && /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: nextLabel\n })]\n })]\n })]\n });\n});\nCarousel.displayName = 'Carousel';\nexport default Object.assign(Carousel, {\n Caption: CarouselCaption,\n Item: CarouselItem\n});","import * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\n\nimport AboutMeCardBodyContainer from '../../about/AboutMeCardBodyContainer';\n\ntype Props = Readonly<{\n\tsrc: string;\n}>;\n\nexport default function PersonalAboutMeCarouselItem({\n\tsrc,\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\tBlep\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Carousel from 'react-bootstrap/esm/Carousel';\n\nimport PersonalAboutMeCarouselItem from './PersonalAboutMeCarouselItem';\n\nconst IMAGES = ['/portrait-mode.jpg', '/pinksuit.jpeg', '/dokidoki.jpeg'];\n\nexport default function PersonalAboutMePhotoCarousel(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t{IMAGES.map(img => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/esm/Card';\n\nimport PersonalAboutMeCardFooter from './PersonalAboutMeCardFooter';\nimport PersonalAboutMeCardHeader from './PersonalAboutMeCardHeader';\nimport PersonalAboutMePhotoCarousel from './PersonalAboutMePhotoCarousel';\n\nexport default function PersonalAboutMeCard(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport PageBody from './PageBody';\nimport PersonalAboutMeCard from './personal/about/PersonalAboutMeCard';\n\nexport default function PersonalBody(): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport PersonalBackground from './body/personal/PersonalBackground';\nimport PersonalBody from './body/PersonalBody';\nimport Page from './Page';\n\nexport function Component(): React.JSX.Element {\n\treturn (\n\t\t}>\n\t\t\t\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tooltip\":\"tooltip_tooltip__5pJPW\"};","import * as React from 'react';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport { useInView } from 'react-intersection-observer';\n\nimport styles from '../styles/tooltip.module.scss';\n\ntype Props = Readonly<{\n\tcontent: string;\n\ttooltip: string;\n}>;\n\nexport default function AppTooltip({\n\tcontent,\n\ttooltip,\n}: Props): React.JSX.Element {\n\tconst {ref, entry} = useInView({\n\t\trootMargin: '-50% 0px 0px',\n\t});\n\n\treturn (\n\t\t{tooltip}}>\n\t\t\t{content}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"brand\":\"navbar_brand__zDvLc\",\"navbar\":\"navbar_navbar__pEuvw\",\"pushTime\":\"navbar_pushTime__jdH3p\",\"rightContent\":\"navbar_rightContent__ikOZ0\"};","// extracted by mini-css-extract-plugin\nexport default {\"fallback\":\"colorPicker_fallback__pvhTA\"};","import { solid } from '@fortawesome/fontawesome-svg-core/import.macro';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport NavDropdown from 'react-bootstrap/esm/NavDropdown';\nimport Spinner from 'react-bootstrap/Spinner';\n\nimport styles from '../../styles/nav/colorPicker.module.scss';\nimport lazyWithPreload from '../../utils/lazyWithPreload.ts';\n\nconst PageNavColorPickerMenu = lazyWithPreload(() =>\n\timport('./PageNavColorPickerMenu.tsx'),\n);\n\nexport default function PageNavColorPicker(): React.JSX.Element {\n\tconst onMouseEnter = () => {\n\t\tPageNavColorPickerMenu.preload();\n\t};\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t\tonMouseEnter={onMouseEnter}>\n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}>\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\n\nimport AppTooltip from '../AppTooltip';\n\n// https://stackoverflow.com/questions/6108819/javascript-timestamp-to-relative-time\nconst RTF = new Intl.RelativeTimeFormat(undefined, {numeric: 'auto'});\n\nconst UNITS: {unit: Intl.RelativeTimeFormatUnit; ms: number}[] = [\n\t{unit: 'year', ms: 31536000000},\n\t{unit: 'month', ms: 2628000000},\n\t{unit: 'day', ms: 86400000},\n\t{unit: 'hour', ms: 3600000},\n\t{unit: 'minute', ms: 60000},\n\t{unit: 'second', ms: 1000},\n];\n\nfunction relativeTimeFromElapsed(elapsed: number): string {\n\tfor (const {unit, ms} of UNITS) {\n\t\tif (Math.abs(elapsed) >= ms || unit === 'second') {\n\t\t\treturn RTF.format(Math.round(elapsed / ms), unit);\n\t\t}\n\t}\n\treturn '';\n}\n\nexport default function PageNavLatestPushTimestamp(): React.JSX.Element | null {\n\tconst [lastUpdatedTime, setLastUpdatedTime] = React.useState(\n\t\tnull,\n\t);\n\n\tReact.useEffect(() => {\n\t\tconst fetchTime = async () => {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\n\t\t\t\t\t'https://api.github.com/repos/sverg84/sverg84.github.io',\n\t\t\t\t);\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`${response.status}: ${response.statusText}`);\n\t\t\t\t}\n\t\t\t\tconst data = await response.json();\n\t\t\t\tconst updateTime: string = data['pushed_at'];\n\t\t\t\tsetLastUpdatedTime(new Date(updateTime));\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(error);\n\t\t\t}\n\t\t};\n\n\t\tfetchTime();\n\t}, []);\n\n\tif (lastUpdatedTime == null) {\n\t\treturn null;\n\t}\n\n\tconst timeSinceLastUpdate = lastUpdatedTime.getTime() - new Date().getTime();\n\n\treturn (\n\t\t<>\n\t\t\tLast Updated:{' '}\n\t\t\t\n\t\t\n\t);\n}\n","import classNames from 'classnames';\nimport * as React from 'react';\nimport Container from 'react-bootstrap/Container';\nimport Col from 'react-bootstrap/esm/Col';\nimport Navbar from 'react-bootstrap/Navbar';\nimport { Link } from 'react-router-dom';\n\nimport MyName from '../../consts/MyName.ts';\nimport useBackgroundColorStyle from '../../hooks/useBackgroundColorStyle.ts';\nimport navStyles from '../../styles/nav/navbar.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\nimport PageNavColorPicker from './PageNavColorPicker.tsx';\nimport PageNavLatestPushTimestamp from './PageNavLatestPushTimestamp.tsx';\n\ntype Props = Readonly<{\n\tbreadcrumbs?: React.JSX.Element | undefined;\n}>;\n\nexport default function PageNavBar({breadcrumbs}: Props): React.JSX.Element {\n\tconst style = useBackgroundColorStyle();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{MyName}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{breadcrumbs}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport PageNavBar from './nav/PageNavBar';\n\ntype Props = Readonly<{\n\tbackground: React.JSX.Element;\n\tbreadcrumbs?: React.JSX.Element;\n\tchildren: React.ReactNode;\n}>;\n\nexport default function Page({\n\tbackground,\n\tbreadcrumbs,\n\tchildren,\n}: Props): React.JSX.Element {\n\tconst [hex, setHex] = useState('#2e3134');\n\n\treturn (\n\t\t\n\t\t\t{background}\n\t\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"pageBody_body__aNOKo\"};","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport pageBodyStyles from '../../styles/pageBody.module.scss';\nimport pageStyles from '../../styles/pageMargin.module.scss';\n\ntype Props = Readonly<{\n\tchildren: React.ReactNode;\n}>;\n\nexport default function PageBody({children}: Props): React.JSX.Element {\n\treturn (\n\t\t
\n\t\t\t{children}\n\t\t
\n\t);\n}\n","import * as React from 'react';\nimport Placeholder from 'react-bootstrap/esm/Placeholder';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from '../about/AboutMeCardImage';\n\nconst AboutMeCardImage = React.lazy(\n\tasync () => await import('../about/AboutMeCardImage'),\n);\n\nexport default function AboutMeCardLazyImage(\n\tprops: ImageProps,\n): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t}>\n\t\t\t\n\t\t\n\t);\n}\n","import * as React from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Col from 'react-bootstrap/Col';\nimport Container from 'react-bootstrap/Container';\nimport Row from 'react-bootstrap/Row';\n\nimport styles from '../../../styles/body/about/aboutMeCardBody.module.scss';\nimport type { Props as ImageProps } from './AboutMeCardImage';\nimport AboutMeCardLazyImage from './AboutMeCardLazyImage';\n\ntype Props = Readonly<{\n\tchildren: React.JSX.Element;\n}> &\n\tImageProps;\n\nexport default function AboutMeCardBodyContainer({\n\tchildren,\n\t...imageProps\n}: Props): React.JSX.Element {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n}\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport Button from 'react-bootstrap/Button';\n\nimport useHover from '../../hooks/useHover';\n\ntype Props = Readonly<{\n\tclassName?: string;\n\thref: string;\n\ticon: IconProp;\n}>;\n\nexport default function ExternalLinkButton({\n\tclassName,\n\thref,\n\ticon,\n}: Props): React.JSX.Element {\n\tconst {isHovering: _isHovering, ...mouseEvents} = useHover();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n}\n","const MyName: string = \"Stephen Vergara\";\n\nexport default MyName;\n","import { createContext } from 'react';\n\ntype ContextType = Readonly<{\n\tcolor: string;\n\tsetColor: React.Dispatch>;\n}>;\n\nexport default createContext({\n\tcolor: '#2e3134',\n\tsetColor: () => {},\n});\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\nimport useTextColorForCustomBackground from './useTextColorForCustomBackground';\n\nexport default function useBackgroundColorStyle(\n\talpha: string = '',\n): React.CSSProperties {\n\tconst {color} = React.useContext(ColorContext);\n\tconst textColor = useTextColorForCustomBackground();\n\n\treturn {backgroundColor: `${color}${alpha}`, color: textColor};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nexport default function useColorStyle(): React.CSSProperties {\n const {color} = React.useContext(ColorContext);\n\n return {color};\n}","import * as React from 'react';\n\ntype ReturnType = Readonly<{\n\tisHovering: boolean;\n\tonMouseEnter: () => void;\n\tonMouseLeave: () => void;\n}>;\n\nexport default function useHover(): ReturnType {\n\tconst [isHovering, setIsHovering] = React.useState(false);\n\n\tconst onMouseEnter = () => {\n\t\tsetIsHovering(true);\n\t};\n\n\tconst onMouseLeave = () => {\n\t\tsetIsHovering(false);\n\t};\n\n\treturn {isHovering, onMouseEnter, onMouseLeave};\n}\n","import * as React from 'react';\n\nimport ColorContext from '../contexts/ColorContext';\n\nconst BRIGHTNESS_THRESHOLD = 128;\n\n// NTSC luminance formula (linear approximation): Y = .299r' + .587g' + .114b'\nconst RED_LUMINANCE_COEFFICIENT = 0.299;\nconst GREEN_LUMINANCE_COEFFICIENT = 0.587;\nconst BLUE_LUMINANCE_COEFFICIENT = 0.114;\n\nexport default function useTextColorForCustomBackground(): string {\n\tconst {color} = React.useContext(ColorContext);\n\n\treturn React.useMemo(() => {\n\t\tconst getChunksFromString = (st: string, chunkSize: number) =>\n\t\t\tst.match(new RegExp(`.{${chunkSize}}`, 'g'));\n\n\t\tconst convertHexUnitTo256 = (hexStr: string) =>\n\t\t\tparseInt(hexStr.repeat(2 / hexStr.length), 16);\n\n\t\tconst chunkSize = Math.floor((color.length - 1) / 3);\n\t\tconst hexArr = getChunksFromString(color.slice(1), chunkSize);\n\n\t\tconst [red, green, blue] = (hexArr ?? []).map(convertHexUnitTo256);\n\n\t\tconst brightness = Math.round(\n\t\t\t(red ?? 0) * RED_LUMINANCE_COEFFICIENT +\n\t\t\t\t(green ?? 0) * GREEN_LUMINANCE_COEFFICIENT +\n\t\t\t\t(blue ?? 0) * BLUE_LUMINANCE_COEFFICIENT,\n\t\t);\n\n\t\treturn brightness > BRIGHTNESS_THRESHOLD ? 'black' : 'white';\n\t}, [color]);\n}\n","import * as React from 'react';\n\ninterface PreloadedExoticComponent>\n\textends React.LazyExoticComponent {\n\tpreload: () => {};\n}\n\nexport default function lazyWithPreload>(\n\tfactory: () => Promise<{\n\t\tdefault: T;\n\t}>,\n): PreloadedExoticComponent {\n\treturn Object.assign(React.lazy(factory), {preload: factory});\n}\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar prefix = 'fab';\nvar iconName = 'discord';\nvar width = 640;\nvar height = 512;\nvar aliases = [];\nvar unicode = 'f392';\nvar svgPathData = 'M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z';\n\nexports.definition = {\n prefix: prefix,\n iconName: iconName,\n icon: [\n width,\n height,\n aliases,\n unicode,\n svgPathData\n ]};\n\nexports.faDiscord = exports.definition;\nexports.prefix = prefix;\nexports.iconName = iconName;\nexports.width = width;\nexports.height = height;\nexports.ligatures = aliases;\nexports.unicode = unicode;\nexports.svgPathData = svgPathData;\nexports.aliases = aliases;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar prefix = 'fab';\nvar iconName = 'steam';\nvar width = 496;\nvar height = 512;\nvar aliases = [];\nvar unicode = 'f1b6';\nvar svgPathData = 'M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z';\n\nexports.definition = {\n prefix: prefix,\n iconName: iconName,\n icon: [\n width,\n height,\n aliases,\n unicode,\n svgPathData\n ]};\n\nexports.faSteam = exports.definition;\nexports.prefix = prefix;\nexports.iconName = iconName;\nexports.width = width;\nexports.height = height;\nexports.ligatures = aliases;\nexports.unicode = unicode;\nexports.svgPathData = svgPathData;\nexports.aliases = aliases;","// extracted by mini-css-extract-plugin\nexport default {\"body\":\"aboutMeCardBody_body__px0Z-\",\"base\":\"aboutMeCardBody_base__HWSO5\",\"image\":\"aboutMeCardBody_image__r0pwR\",\"glimmer\":\"aboutMeCardBody_glimmer__ztngv\",\"imageColumn\":\"aboutMeCardBody_imageColumn__Decwz\"};","// extracted by mini-css-extract-plugin\nexport default {\"buttons\":\"footer_buttons__X-wEA\",\"resume\":\"footer_resume__j2AKe\"};","// extracted by mini-css-extract-plugin\nexport default {\"github\":\"linkButton_github__ltM-y\",\"linkedin\":\"linkButton_linkedin__MRpaF\",\"steam\":\"linkButton_steam__qizUa\",\"discord\":\"linkButton_discord__zToU1\"};","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"pageMargin_page__oYkHI\"};"],"names":["STARS","className","styles","stars","numStars","stars2","stars3","Stars","_ref","color","React","ColorContext","boxShadow","rand","Math","floor","random","calc","concat","shadow","i","_jsx","style","PersonalBackground","background","children","map","props","_createElement","key","DiscordButton","ExternalLinkButton","discord","href","icon","_faDiscord","SteamButton","steam","_faSteam","PersonalAboutMeCardFooter","Card","Footer","_jsxs","Container","buttons","HALF_OPACITY","HEADER_LABEL","PersonalAboutMeCardHeader","useColorStyle","bg","useBackgroundColorStyle","CardHeader","as","header","split","character","index","label","fn","deps","isFirst","useRef","useEffect","current","createWithBsPrefix","CarouselItem","ref","Component","bsPrefix","finalClassName","classNames","useBootstrapPrefix","displayName","func","child","Carousel","_ref2","defaultActiveIndex","uncontrolledProps","slide","fade","controls","indicators","indicatorLabels","activeIndex","onSelect","onSlide","onSlid","interval","keyboard","onKeyDown","pause","onMouseOver","onMouseOut","wrap","touch","onTouchStart","onTouchMove","onTouchEnd","prevIcon","prevLabel","nextIcon","nextLabel","variant","useUncontrolled","prefix","isRTL","useIsRTL","nextDirectionRef","direction","setDirection","useState","paused","setPaused","isSliding","setIsSliding","renderedActiveIndex","setRenderedActiveIndex","activeChildInterval","numChildren","forEach","activeChildIntervalRef","useCommittedRef","prev","useCallback","event","nextActiveIndex","next","useEventCallback","elementRef","useImperativeHandle","element","nextWhenVisible","document","hidden","parentNode","elementStyle","getComputedStyle","display","visibility","isVisible","slideDirection","useUpdateEffect","orderClassName","directionalClassName","handleEnter","node","triggerBrowserReflow","handleEntered","handleKeyDown","test","target","tagName","preventDefault","handleMouseOver","handleMouseOut","touchStartXRef","touchDeltaXRef","touchUnpauseTimeout","useTimeout","handleTouchStart","touches","clientX","handleTouchMove","length","handleTouchEnd","touchDeltaX","abs","set","undefined","shouldPlay","intervalHandleRef","_activeChildIntervalR","nextFunc","window","setInterval","visibilityState","clearInterval","indicatorOnClicks","useMemo","Array","from","_","type","onClick","isActive","TransitionWrapper","in","onEnter","onEntered","addEndListener","transitionEndListener","status","innerProps","_Fragment","Anchor","Object","assign","Caption","CarouselCaption","Item","PersonalAboutMeCarouselItem","src","AboutMeCardBodyContainer","Text","IMAGES","PersonalAboutMePhotoCarousel","img","PersonalAboutMeCard","Body","PersonalBody","PageBody","Page","AppTooltip","content","tooltip","entry","useInView","rootMargin","OverlayTrigger","placement","isIntersecting","overlay","Tooltip","PageNavColorPickerMenu","lazyWithPreload","PageNavColorPicker","NavDropdown","align","renderMenuOnMount","title","FontAwesomeIcon","_faPalette","bounce","onMouseEnter","preload","fallback","Spinner","animation","RTF","Intl","RelativeTimeFormat","numeric","UNITS","unit","ms","relativeTimeFromElapsed","elapsed","format","round","PageNavLatestPushTimestamp","lastUpdatedTime","setLastUpdatedTime","async","response","fetch","ok","Error","statusText","updateTime","json","Date","error","console","warn","fetchTime","timeSinceLastUpdate","getTime","toLocaleString","PageNavBar","breadcrumbs","Navbar","expand","sticky","pageStyles","page","navStyles","navbar","Col","Link","brand","to","MyName","pushTime","rightContent","hex","setHex","Provider","value","setColor","pageBodyStyles","body","AboutMeCardImage","AboutMeCardLazyImage","Placeholder","glimmer","imageProps","Row","xs","imageColumn","xl","isHovering","_isHovering","mouseEvents","useHover","Button","size","createContext","alpha","arguments","textColor","useTextColorForCustomBackground","backgroundColor","setIsHovering","onMouseLeave","BRIGHTNESS_THRESHOLD","RED_LUMINANCE_COEFFICIENT","GREEN_LUMINANCE_COEFFICIENT","BLUE_LUMINANCE_COEFFICIENT","chunkSize","hexArr","getChunksFromString","st","match","RegExp","slice","red","green","blue","hexStr","parseInt","repeat","factory","iconName","aliases","unicode","svgPathData","exports"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.3f8c9e47.js b/static/js/main.b9cd00bb.js similarity index 99% rename from static/js/main.3f8c9e47.js rename to static/js/main.b9cd00bb.js index 7f06bd0..40e5a39 100644 --- a/static/js/main.3f8c9e47.js +++ b/static/js/main.b9cd00bb.js @@ -1,3 +1,3 @@ -/*! For license information please see main.3f8c9e47.js.LICENSE.txt */ -(()=>{var e={8278:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;td,J0:()=>i,RQ:()=>O,WK:()=>B,X3:()=>j,Zn:()=>z,Zq:()=>D,aU:()=>a,cP:()=>f,fp:()=>g,iQ:()=>A,lX:()=>l,p7:()=>Z,pC:()=>M}),function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(a||(a={}));const o="popstate";function l(e){return void 0===e&&(e={}),p((function(e,t){let{pathname:n,search:r,hash:a}=e.location;return c("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"===typeof t?t:d(t)}),null,e)}function i(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function u(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(n){}}}function s(e,t){return{usr:e.state,key:e.key,idx:t}}function c(e,t,n,a){return void 0===n&&(n=null),r({pathname:"string"===typeof e?e:e.pathname,search:"",hash:""},"string"===typeof t?f(t):t,{state:n,key:t&&t.key||a||Math.random().toString(36).substr(2,8)})}function d(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function f(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function p(e,t,n,l){void 0===l&&(l={});let{window:u=document.defaultView,v5Compat:f=!1}=l,p=u.history,h=a.Pop,m=null,v=g();function g(){return(p.state||{idx:null}).idx}function y(){h=a.Pop;let e=g(),t=null==e?null:e-v;v=e,m&&m({action:h,location:w.location,delta:t})}function b(e){let t="null"!==u.location.origin?u.location.origin:u.location.href,n="string"===typeof e?e:d(e);return i(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==v&&(v=0,p.replaceState(r({},p.state,{idx:v}),""));let w={get action(){return h},get location(){return e(u,p)},listen(e){if(m)throw new Error("A history only accepts one active listener");return u.addEventListener(o,y),m=e,()=>{u.removeEventListener(o,y),m=null}},createHref:e=>t(u,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){h=a.Push;let r=c(w.location,e,t);n&&n(r,e),v=g()+1;let o=s(r,v),l=w.createHref(r);try{p.pushState(o,"",l)}catch(i){if(i instanceof DOMException&&"DataCloneError"===i.name)throw i;u.location.assign(l)}f&&m&&m({action:h,location:w.location,delta:1})},replace:function(e,t){h=a.Replace;let r=c(w.location,e,t);n&&n(r,e),v=g();let o=s(r,v),l=w.createHref(r);p.replaceState(o,"",l),f&&m&&m({action:h,location:w.location,delta:0})},go:e=>p.go(e)};return w}var h;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(h||(h={}));const m=new Set(["lazy","caseSensitive","path","id","index","children"]);function v(e,t,n,a){return void 0===n&&(n=[]),void 0===a&&(a={}),e.map(((e,o)=>{let l=[...n,o],u="string"===typeof e.id?e.id:l.join("-");if(i(!0!==e.index||!e.children,"Cannot specify children on an index route"),i(!a[u],'Found a route id collision on id "'+u+"\". Route id's must be globally unique within Data Router usages"),function(e){return!0===e.index}(e)){let n=r({},e,t(e),{id:u});return a[u]=n,n}{let n=r({},e,t(e),{id:u,children:void 0});return a[u]=n,e.children&&(n.children=v(e.children,t,l,a)),n}}))}function g(e,t,n){void 0===n&&(n="/");let r=z(("string"===typeof t?f(t):t).pathname||"/",n);if(null==r)return null;let a=y(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let o=null;for(let l=0;null==o&&l{let l={relativePath:void 0===o?e.path||"":o,caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};l.relativePath.startsWith("/")&&(i(l.relativePath.startsWith(r),'Absolute route path "'+l.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),l.relativePath=l.relativePath.slice(r.length));let u=O([r,l.relativePath]),s=n.concat(l);e.children&&e.children.length>0&&(i(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+u+'".'),y(e.children,t,s,u)),(null!=e.path||e.index)&&t.push({path:u,score:P(u,e.index),routesMeta:s})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of b(e.path))a(e,t,r);else a(e,t)})),t}function b(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(0===r.length)return a?[o,""]:[o];let l=b(r.join("/")),i=[];return i.push(...l.map((e=>""===e?o:[o,e].join("/")))),a&&i.push(...l),i.map((t=>e.startsWith("/")&&""===t?"/":t))}const w=/^:\w+$/,k=3,S=2,E=1,x=10,C=-2,_=e=>"*"===e;function P(e,t){let n=e.split("/"),r=n.length;return n.some(_)&&(r+=C),t&&(r+=S),n.filter((e=>!_(e))).reduce(((e,t)=>e+(w.test(t)?k:""===t?E:x)),r)}function R(e,t){let{routesMeta:n}=e,r={},a="/",o=[];for(let l=0;l(r.push(t),"/([^\\/]+)")));e.endsWith("*")?(r.push("*"),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":""!==e&&"/"!==e&&(a+="(?:(?=\\/|$))");let o=new RegExp(a,t?void 0:"i");return[o,r]}(e.path,e.caseSensitive,e.end),a=t.match(n);if(!a)return null;let o=a[0],l=o.replace(/(.)\/+$/,"$1"),i=a.slice(1);return{params:r.reduce(((e,t,n)=>{if("*"===t){let e=i[n]||"";l=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(n){return u(!1,'The value for the URL param "'+t+'" will not be decoded because the string "'+e+'" is a malformed URL segment. This is probably due to a bad percent encoding ('+n+")."),e}}(i[n]||"",t),e}),{}),pathname:o,pathnameBase:l,pattern:e}}function N(e){try{return decodeURI(e)}catch(t){return u(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function z(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function T(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function D(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function M(e,t,n,a){let o;void 0===a&&(a=!1),"string"===typeof e?o=f(e):(o=r({},e),i(!o.pathname||!o.pathname.includes("?"),T("?","pathname","search",o)),i(!o.pathname||!o.pathname.includes("#"),T("#","pathname","hash",o)),i(!o.search||!o.search.includes("#"),T("#","search","hash",o)));let l,u=""===e||""===o.pathname,s=u?"/":o.pathname;if(a||null==s)l=n;else{let e=t.length-1;if(s.startsWith("..")){let t=s.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}l=e>=0?t[e]:"/"}let c=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:a=""}="string"===typeof e?f(e):e,o=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:o,search:F(r),hash:I(a)}}(o,l),d=s&&"/"!==s&&s.endsWith("/"),p=(u||"."===s)&&n.endsWith("/");return c.pathname.endsWith("/")||!d&&!p||(c.pathname+="/"),c}const O=e=>e.join("/").replace(/\/\/+/g,"/"),U=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),F=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",I=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class j extends Error{}class A{constructor(e,t,n,r){void 0===r&&(r=!1),this.status=e,this.statusText=t||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}}function B(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const W=["post","put","patch","delete"],$=new Set(W),H=["get",...W],V=new Set(H),Q=new Set([301,302,303,307,308]),q=new Set([307,308]),K={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Y={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},J={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},X=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,G=e=>({hasErrorBoundary:Boolean(e.hasErrorBoundary)});function Z(e){const t=e.window?e.window:"undefined"!==typeof window?window:void 0,n="undefined"!==typeof t&&"undefined"!==typeof t.document&&"undefined"!==typeof t.document.createElement,o=!n;let l;if(i(e.routes.length>0,"You must provide a non-empty routes array to createRouter"),e.mapRouteProperties)l=e.mapRouteProperties;else if(e.detectErrorBoundary){let t=e.detectErrorBoundary;l=e=>({hasErrorBoundary:t(e)})}else l=G;let s,d={},f=v(e.routes,l,void 0,d),p=e.basename||"/",m=r({v7_normalizeFormMethod:!1,v7_prependBasename:!1},e.future),y=null,b=new Set,w=null,k=null,S=null,E=null!=e.hydrationData,x=g(f,e.history.location,p),C=null;if(null==x){let t=ve(404,{pathname:e.history.location.pathname}),{matches:n,route:r}=me(f);x=n,C={[r.id]:t}}let _,P,R=!x.some((e=>e.route.lazy))&&(!x.some((e=>e.route.loader))||null!=e.hydrationData),L={historyAction:e.history.action,location:e.history.location,matches:x,initialized:R,navigation:K,restoreScrollPosition:null==e.hydrationData&&null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||C,fetchers:new Map,blockers:new Map},N=a.Pop,T=!1,D=!1,M=!1,O=[],U=[],F=new Map,I=0,j=-1,A=new Map,B=new Set,W=new Map,$=new Map,H=new Map,V=!1;function Q(e){L=r({},L,e),b.forEach((e=>e(L)))}function Z(t,n){var o,l;let i,u=null!=L.actionData&&null!=L.navigation.formMethod&&xe(L.navigation.formMethod)&&"loading"===L.navigation.state&&!0!==(null==(o=t.state)?void 0:o._isRedirect);i=n.actionData?Object.keys(n.actionData).length>0?n.actionData:null:u?L.actionData:null;let c=n.loaderData?pe(L.loaderData,n.loaderData,n.matches||[],n.errors):L.loaderData,d=L.blockers;d.size>0&&(d=new Map(d),d.forEach(((e,t)=>d.set(t,J))));let p=!0===T||null!=L.navigation.formMethod&&xe(L.navigation.formMethod)&&!0!==(null==(l=t.state)?void 0:l._isRedirect);s&&(f=s,s=void 0),D||N===a.Pop||(N===a.Push?e.history.push(t,t.state):N===a.Replace&&e.history.replace(t,t.state)),Q(r({},n,{actionData:i,loaderData:c,historyAction:N,location:t,initialized:!0,navigation:K,revalidation:"idle",restoreScrollPosition:Ie(t,n.matches||L.matches),preventScrollReset:p,blockers:d})),N=a.Pop,T=!1,D=!1,M=!1,O=[],U=[]}async function ne(t,n,o){P&&P.abort(),P=null,N=t,D=!0===(o&&o.startUninterruptedRevalidation),function(e,t){if(w&&S){let n=Fe(e,t);w[n]=S()}}(L.location,L.matches),T=!0===(o&&o.preventScrollReset);let i=s||f,u=o&&o.overrideNavigation,c=g(i,n,p);if(!c){let e=ve(404,{pathname:n.pathname}),{matches:t,route:r}=me(i);return Ue(),void Z(n,{matches:t,loaderData:{},errors:{[r.id]:e}})}if(L.initialized&&!M&&function(e,t){if(e.pathname!==t.pathname||e.search!==t.search)return!1;if(""===e.hash)return""!==t.hash;if(e.hash===t.hash)return!0;if(""!==t.hash)return!0;return!1}(L.location,n)&&!(o&&o.submission&&xe(o.submission.formMethod)))return void Z(n,{matches:c});P=new AbortController;let m,v,y=ue(e.history,n,P.signal,o&&o.submission);if(o&&o.pendingError)v={[he(c).route.id]:o.pendingError};else if(o&&o.submission&&xe(o.submission.formMethod)){let e=await async function(e,t,n,r,o){void 0===o&&(o={});se();let i,u=function(e,t){let n={state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text};return n}(t,n);Q({navigation:u});let s=Re(r,t);if(s.route.action||s.route.lazy){if(i=await ie("action",e,s,r,d,l,p),e.signal.aborted)return{shortCircuited:!0}}else i={type:h.error,error:ve(405,{method:e.method,pathname:t.pathname,routeId:s.route.id})};if(ke(i)){let e;return e=o&&null!=o.replace?o.replace:i.location===L.location.pathname+L.location.search,await oe(L,i,{submission:n,replace:e}),{shortCircuited:!0}}if(we(i)){let e=he(r,s.route.id);return!0!==(o&&o.replace)&&(N=a.Push),{pendingActionData:{},pendingActionError:{[e.route.id]:i.error}}}if(be(i))throw ve(400,{type:"defer-action"});return{pendingActionData:{[s.route.id]:i.data}}}(y,n,o.submission,c,{replace:o.replace});if(e.shortCircuited)return;m=e.pendingActionData,v=e.pendingActionError,u=Ne(n,o.submission),y=new Request(y.url,{signal:y.signal})}let{shortCircuited:b,loaderData:k,errors:E}=await async function(t,n,a,o,l,i,u,c,d){let h=o||Ne(n,l),m=l||i||Le(h),v=s||f,[g,y]=re(e.history,L,a,m,n,M,O,U,W,B,v,p,c,d);if(Ue((e=>!(a&&a.some((t=>t.route.id===e)))||g&&g.some((t=>t.route.id===e)))),j=++I,0===g.length&&0===y.length){let e=Ee();return Z(n,r({matches:a,loaderData:{},errors:d||null},c?{actionData:c}:{},e?{fetchers:new Map(L.fetchers)}:{})),{shortCircuited:!0}}if(!D){y.forEach((e=>{let t=L.fetchers.get(e.key),n=ze(void 0,t?t.data:void 0);L.fetchers.set(e.key,n)}));let e=c||L.actionData;Q(r({navigation:h},e?0===Object.keys(e).length?{actionData:null}:{actionData:e}:{},y.length>0?{fetchers:new Map(L.fetchers)}:{}))}y.forEach((e=>{F.has(e.key)&&ye(e.key),e.controller&&F.set(e.key,e.controller)}));let b=()=>y.forEach((e=>ye(e.key)));P&&P.signal.addEventListener("abort",b);let{results:w,loaderResults:k,fetcherResults:S}=await le(L.matches,a,g,y,t);if(t.signal.aborted)return{shortCircuited:!0};P&&P.signal.removeEventListener("abort",b);y.forEach((e=>F.delete(e.key)));let E=ge(w);if(E){if(E.idx>=g.length){let e=y[E.idx-g.length].key;B.add(e)}return await oe(L,E.result,{replace:u}),{shortCircuited:!0}}let{loaderData:x,errors:C}=fe(L,a,g,k,d,y,S,$);$.forEach(((e,t)=>{e.subscribe((n=>{(n||e.done)&&$.delete(t)}))}));let _=Ee(),R=Pe(j),N=_||R||y.length>0;return r({loaderData:x,errors:C},N?{fetchers:new Map(L.fetchers)}:{})}(y,n,c,u,o&&o.submission,o&&o.fetcherSubmission,o&&o.replace,m,v);b||(P=null,Z(n,r({matches:c},m?{actionData:m}:{},{loaderData:k,errors:E})))}function ae(e){return L.fetchers.get(e)||Y}async function oe(o,l,u){let{submission:s,replace:d,isFetchActionRedirect:f}=void 0===u?{}:u;l.revalidate&&(M=!0);let h=c(o.location,l.location,r({_isRedirect:!0},f?{_isFetchActionRedirect:!0}:{}));if(i(h,"Expected a location on the redirect navigation"),X.test(l.location)&&n){let n=e.history.createURL(l.location),r=null==z(n.pathname,p);if(t.location.origin!==n.origin||r)return void(d?t.location.replace(l.location):t.location.assign(l.location))}P=null;let m=!0===d?a.Replace:a.Push,v=s||Le(o.navigation);if(q.has(l.status)&&v&&xe(v.formMethod))await ne(m,h,{submission:r({},v,{formAction:l.location}),preventScrollReset:T});else if(f)await ne(m,h,{overrideNavigation:Ne(h),fetcherSubmission:v,preventScrollReset:T});else{let e=Ne(h,v);await ne(m,h,{overrideNavigation:e,preventScrollReset:T})}}async function le(t,n,r,a,o){let i=await Promise.all([...r.map((e=>ie("loader",o,e,n,d,l,p))),...a.map((t=>{if(t.matches&&t.match&&t.controller)return ie("loader",ue(e.history,t.path,t.controller.signal),t.match,t.matches,d,l,p);return{type:h.error,error:ve(404,{pathname:t.path})}}))]),u=i.slice(0,r.length),s=i.slice(r.length);return await Promise.all([Ce(t,r,u,u.map((()=>o.signal)),!1,L.loaderData),Ce(t,a.map((e=>e.match)),s,a.map((e=>e.controller?e.controller.signal:null)),!0)]),{results:i,loaderResults:u,fetcherResults:s}}function se(){M=!0,O.push(...Ue()),W.forEach(((e,t)=>{F.has(t)&&(U.push(t),ye(t))}))}function ce(e,t,n){let r=he(L.matches,t);de(e),Q({errors:{[r.route.id]:n},fetchers:new Map(L.fetchers)})}function de(e){let t=L.fetchers.get(e);!F.has(e)||t&&"loading"===t.state&&A.has(e)||ye(e),W.delete(e),A.delete(e),B.delete(e),L.fetchers.delete(e)}function ye(e){let t=F.get(e);i(t,"Expected fetch controller: "+e),t.abort(),F.delete(e)}function Se(e){for(let t of e){let e=Te(ae(t).data);L.fetchers.set(t,e)}}function Ee(){let e=[],t=!1;for(let n of B){let r=L.fetchers.get(n);i(r,"Expected fetcher: "+n),"loading"===r.state&&(B.delete(n),e.push(n),t=!0)}return Se(e),t}function Pe(e){let t=[];for(let[n,r]of A)if(r0}function De(e){L.blockers.delete(e),H.delete(e)}function Me(e,t){let n=L.blockers.get(e)||J;i("unblocked"===n.state&&"blocked"===t.state||"blocked"===n.state&&"blocked"===t.state||"blocked"===n.state&&"proceeding"===t.state||"blocked"===n.state&&"unblocked"===t.state||"proceeding"===n.state&&"unblocked"===t.state,"Invalid blocker state transition: "+n.state+" -> "+t.state);let r=new Map(L.blockers);r.set(e,t),Q({blockers:r})}function Oe(e){let{currentLocation:t,nextLocation:n,historyAction:r}=e;if(0===H.size)return;H.size>1&&u(!1,"A router only supports one blocker at a time");let a=Array.from(H.entries()),[o,l]=a[a.length-1],i=L.blockers.get(o);return i&&"proceeding"===i.state?void 0:l({currentLocation:t,nextLocation:n,historyAction:r})?o:void 0}function Ue(e){let t=[];return $.forEach(((n,r)=>{e&&!e(r)||(n.cancel(),t.push(r),$.delete(r))})),t}function Fe(e,t){if(k){return k(e,t.map((e=>function(e,t){let{route:n,pathname:r,params:a}=e;return{id:n.id,pathname:r,params:a,data:t[n.id],handle:n.handle}}(e,L.loaderData))))||e.key}return e.key}function Ie(e,t){if(w){let n=Fe(e,t),r=w[n];if("number"===typeof r)return r}return null}return _={get basename(){return p},get state(){return L},get routes(){return f},initialize:function(){return y=e.history.listen((t=>{let{action:n,location:r,delta:a}=t;if(V)return void(V=!1);u(0===H.size||null!=a,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let o=Oe({currentLocation:L.location,nextLocation:r,historyAction:n});return o&&null!=a?(V=!0,e.history.go(-1*a),void Me(o,{state:"blocked",location:r,proceed(){Me(o,{state:"proceeding",proceed:void 0,reset:void 0,location:r}),e.history.go(a)},reset(){let e=new Map(L.blockers);e.set(o,J),Q({blockers:e})}})):ne(n,r)})),L.initialized||ne(a.Pop,L.location),_},subscribe:function(e){return b.add(e),()=>b.delete(e)},enableScrollRestoration:function(e,t,n){if(w=e,S=t,k=n||null,!E&&L.navigation===K){E=!0;let e=Ie(L.location,L.matches);null!=e&&Q({restoreScrollPosition:e})}return()=>{w=null,S=null,k=null}},navigate:async function t(n,o){if("number"===typeof n)return void e.history.go(n);let l=ee(L.location,L.matches,p,m.v7_prependBasename,n,null==o?void 0:o.fromRouteId,null==o?void 0:o.relative),{path:i,submission:u,error:s}=te(m.v7_normalizeFormMethod,!1,l,o),d=L.location,f=c(L.location,i,o&&o.state);f=r({},f,e.history.encodeLocation(f));let h=o&&null!=o.replace?o.replace:void 0,v=a.Push;!0===h?v=a.Replace:!1===h||null!=u&&xe(u.formMethod)&&u.formAction===L.location.pathname+L.location.search&&(v=a.Replace);let g=o&&"preventScrollReset"in o?!0===o.preventScrollReset:void 0,y=Oe({currentLocation:d,nextLocation:f,historyAction:v});if(!y)return await ne(v,f,{submission:u,pendingError:s,preventScrollReset:g,replace:o&&o.replace});Me(y,{state:"blocked",location:f,proceed(){Me(y,{state:"proceeding",proceed:void 0,reset:void 0,location:f}),t(n,o)},reset(){let e=new Map(L.blockers);e.set(y,J),Q({blockers:e})}})},fetch:function(t,n,a,u){if(o)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");F.has(t)&&ye(t);let c=s||f,h=ee(L.location,L.matches,p,m.v7_prependBasename,a,n,null==u?void 0:u.relative),v=g(c,h,p);if(!v)return void ce(t,n,ve(404,{pathname:h}));let{path:y,submission:b,error:w}=te(m.v7_normalizeFormMethod,!0,h,u);if(w)return void ce(t,n,w);let k=Re(v,y);T=!0===(u&&u.preventScrollReset),b&&xe(b.formMethod)?async function(t,n,a,o,u,c){if(se(),W.delete(t),!o.route.action&&!o.route.lazy){let e=ve(405,{method:c.formMethod,pathname:a,routeId:n});return void ce(t,n,e)}let h=L.fetchers.get(t),m=function(e,t){let n={state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0," _hasFetcherDoneAnything ":!0};return n}(c,h);L.fetchers.set(t,m),Q({fetchers:new Map(L.fetchers)});let v=new AbortController,y=ue(e.history,a,v.signal,c);F.set(t,v);let b=I,w=await ie("action",y,o,u,d,l,p);if(y.signal.aborted)return void(F.get(t)===v&&F.delete(t));if(ke(w)){if(F.delete(t),j>b){let e=Te(void 0);return L.fetchers.set(t,e),void Q({fetchers:new Map(L.fetchers)})}{B.add(t);let e=ze(c);return L.fetchers.set(t,e),Q({fetchers:new Map(L.fetchers)}),oe(L,w,{submission:c,isFetchActionRedirect:!0})}}if(we(w))return void ce(t,n,w.error);if(be(w))throw ve(400,{type:"defer-action"});let k=L.navigation.location||L.location,S=ue(e.history,k,v.signal),E=s||f,x="idle"!==L.navigation.state?g(E,L.navigation.location,p):L.matches;i(x,"Didn't find any matches after fetcher action");let C=++I;A.set(t,C);let _=ze(c,w.data);L.fetchers.set(t,_);let[R,z]=re(e.history,L,x,c,k,M,O,U,W,B,E,p,{[o.route.id]:w.data},void 0);z.filter((e=>e.key!==t)).forEach((e=>{let t=e.key,n=L.fetchers.get(t),r=ze(void 0,n?n.data:void 0);L.fetchers.set(t,r),F.has(t)&&ye(t),e.controller&&F.set(t,e.controller)})),Q({fetchers:new Map(L.fetchers)});let T=()=>z.forEach((e=>ye(e.key)));v.signal.addEventListener("abort",T);let{results:D,loaderResults:H,fetcherResults:V}=await le(L.matches,x,R,z,S);if(v.signal.aborted)return;v.signal.removeEventListener("abort",T),A.delete(t),F.delete(t),z.forEach((e=>F.delete(e.key)));let q=ge(D);if(q){if(q.idx>=R.length){let e=z[q.idx-R.length].key;B.add(e)}return oe(L,q.result)}let{loaderData:K,errors:Y}=fe(L,L.matches,R,H,void 0,z,V,$);if(L.fetchers.has(t)){let e=Te(w.data);L.fetchers.set(t,e)}let J=Pe(C);"loading"===L.navigation.state&&C>j?(i(N,"Expected pending action"),P&&P.abort(),Z(L.navigation.location,{matches:x,loaderData:K,errors:Y,fetchers:new Map(L.fetchers)})):(Q(r({errors:Y,loaderData:pe(L.loaderData,K,x,Y)},J||z.length>0?{fetchers:new Map(L.fetchers)}:{})),M=!1)}(t,n,y,k,v,b):(W.set(t,{routeId:n,path:y}),async function(t,n,r,a,o,u){let s=L.fetchers.get(t),c=ze(u,s?s.data:void 0);L.fetchers.set(t,c),Q({fetchers:new Map(L.fetchers)});let f=new AbortController,h=ue(e.history,r,f.signal);F.set(t,f);let m=I,v=await ie("loader",h,a,o,d,l,p);be(v)&&(v=await _e(v,h.signal,!0)||v);F.get(t)===f&&F.delete(t);if(h.signal.aborted)return;if(ke(v)){if(j>m){let e=Te(void 0);return L.fetchers.set(t,e),void Q({fetchers:new Map(L.fetchers)})}return B.add(t),void await oe(L,v)}if(we(v)){let e=he(L.matches,n);return L.fetchers.delete(t),void Q({fetchers:new Map(L.fetchers),errors:{[e.route.id]:v.error}})}i(!be(v),"Unhandled fetcher deferred data");let g=Te(v.data);L.fetchers.set(t,g),Q({fetchers:new Map(L.fetchers)})}(t,n,y,k,v,b))},revalidate:function(){se(),Q({revalidation:"loading"}),"submitting"!==L.navigation.state&&("idle"!==L.navigation.state?ne(N||L.historyAction,L.navigation.location,{overrideNavigation:L.navigation}):ne(L.historyAction,L.location,{startUninterruptedRevalidation:!0}))},createHref:t=>e.history.createHref(t),encodeLocation:t=>e.history.encodeLocation(t),getFetcher:ae,deleteFetcher:de,dispose:function(){y&&y(),b.clear(),P&&P.abort(),L.fetchers.forEach(((e,t)=>de(t))),L.blockers.forEach(((e,t)=>De(t)))},getBlocker:function(e,t){let n=L.blockers.get(e)||J;return H.get(e)!==t&&H.set(e,t),n},deleteBlocker:De,_internalFetchControllers:F,_internalActiveDeferreds:$,_internalSetRoutes:function(e){d={},s=v(e,l,void 0,d)}},_}Symbol("deferred");function ee(e,t,n,r,a,o,l){let i,u;if(null!=o&&"path"!==l){i=[];for(let e of t)if(i.push(e),e.route.id===o){u=e;break}}else i=t,u=t[t.length-1];let s=M(a||".",D(i).map((e=>e.pathnameBase)),z(e.pathname,n)||e.pathname,"path"===l);return null==a&&(s.search=e.search,s.hash=e.hash),null!=a&&""!==a&&"."!==a||!u||!u.route.index||Pe(s.search)||(s.search=s.search?s.search.replace(/^\?/,"?index&"):"?index"),r&&"/"!==n&&(s.pathname="/"===s.pathname?n:O([n,s.pathname])),d(s)}function te(e,t,n,r){if(!r||!function(e){return null!=e&&("formData"in e&&null!=e.formData||"body"in e&&void 0!==e.body)}(r))return{path:n};if(r.formMethod&&!Ee(r.formMethod))return{path:n,error:ve(405,{method:r.formMethod})};let a,o,l=()=>({path:n,error:ve(400,{type:"invalid-body"})}),u=r.formMethod||"get",s=e?u.toUpperCase():u.toLowerCase(),c=ye(n);if(void 0!==r.body){if("text/plain"===r.formEncType){if(!xe(s))return l();let e="string"===typeof r.body?r.body:r.body instanceof FormData||r.body instanceof URLSearchParams?Array.from(r.body.entries()).reduce(((e,t)=>{let[n,r]=t;return""+e+n+"="+r+"\n"}),""):String(r.body);return{path:n,submission:{formMethod:s,formAction:c,formEncType:r.formEncType,formData:void 0,json:void 0,text:e}}}if("application/json"===r.formEncType){if(!xe(s))return l();try{let e="string"===typeof r.body?JSON.parse(r.body):r.body;return{path:n,submission:{formMethod:s,formAction:c,formEncType:r.formEncType,formData:void 0,json:e,text:void 0}}}catch(m){return l()}}}if(i("function"===typeof FormData,"FormData is not available in this environment"),r.formData)a=se(r.formData),o=r.formData;else if(r.body instanceof FormData)a=se(r.body),o=r.body;else if(r.body instanceof URLSearchParams)a=r.body,o=ce(a);else if(null==r.body)a=new URLSearchParams,o=new FormData;else try{a=new URLSearchParams(r.body),o=ce(a)}catch(m){return l()}let p={formMethod:s,formAction:c,formEncType:r&&r.formEncType||"application/x-www-form-urlencoded",formData:o,json:void 0,text:void 0};if(xe(p.formMethod))return{path:n,submission:p};let h=f(n);return t&&h.search&&Pe(h.search)&&a.append("index",""),h.search="?"+a,{path:d(h),submission:p}}function ne(e,t){let n=e;if(t){let r=e.findIndex((e=>e.route.id===t));r>=0&&(n=e.slice(0,r))}return n}function re(e,t,n,a,o,l,i,u,s,c,d,f,p,h){let m=h?Object.values(h)[0]:p?Object.values(p)[0]:void 0,v=e.createURL(t.location),y=e.createURL(o),b=h?Object.keys(h)[0]:void 0,w=ne(n,b).filter(((e,n)=>{if(e.route.lazy)return!0;if(null==e.route.loader)return!1;if(function(e,t,n){let r=!t||n.route.id!==t.route.id,a=void 0===e[n.route.id];return r||a}(t.loaderData,t.matches[n],e)||i.some((t=>t===e.route.id)))return!0;let o=t.matches[n],u=e;return oe(e,r({currentUrl:v,currentParams:o.params,nextUrl:y,nextParams:u.params},a,{actionResult:m,defaultShouldRevalidate:l||v.pathname+v.search===y.pathname+y.search||v.search!==y.search||ae(o,u)}))})),k=[];return s.forEach(((e,o)=>{if(!n.some((t=>t.route.id===e.routeId)))return;let i=g(d,e.path,f);if(!i)return void k.push({key:o,routeId:e.routeId,path:e.path,matches:null,match:null,controller:null});let s=t.fetchers.get(o),p=Re(i,e.path),h=!1;h=!c.has(o)&&(!!u.includes(o)||(s&&"idle"!==s.state&&void 0===s.data?l:oe(p,r({currentUrl:v,currentParams:t.matches[t.matches.length-1].params,nextUrl:y,nextParams:n[n.length-1].params},a,{actionResult:m,defaultShouldRevalidate:l})))),h&&k.push({key:o,routeId:e.routeId,path:e.path,matches:i,match:p,controller:new AbortController})})),[w,k]}function ae(e,t){let n=e.route.path;return e.pathname!==t.pathname||null!=n&&n.endsWith("*")&&e.params["*"]!==t.params["*"]}function oe(e,t){if(e.route.shouldRevalidate){let n=e.route.shouldRevalidate(t);if("boolean"===typeof n)return n}return t.defaultShouldRevalidate}async function le(e,t,n){if(!e.lazy)return;let a=await e.lazy();if(!e.lazy)return;let o=n[e.id];i(o,"No route found in manifest");let l={};for(let r in a){let e=void 0!==o[r]&&"hasErrorBoundary"!==r;u(!e,'Route "'+o.id+'" has a static property "'+r+'" defined but its lazy function is also returning a value for this property. The lazy route property "'+r+'" will be ignored.'),e||m.has(r)||(l[r]=a[r])}Object.assign(o,l),Object.assign(o,r({},t(o),{lazy:void 0}))}async function ie(e,t,n,r,a,o,l,u){let s,c,d;void 0===u&&(u={});let f=e=>{let r,a=new Promise(((e,t)=>r=t));return d=()=>r(),t.signal.addEventListener("abort",d),Promise.race([e({request:t,params:n.params,context:u.requestContext}),a])};try{let r=n.route[e];if(n.route.lazy)if(r){c=(await Promise.all([f(r),le(n.route,o,a)]))[0]}else{if(await le(n.route,o,a),r=n.route[e],!r){if("action"===e){let e=new URL(t.url),r=e.pathname+e.search;throw ve(405,{method:t.method,pathname:r,routeId:n.route.id})}return{type:h.data,data:void 0}}c=await f(r)}else{if(!r){let e=new URL(t.url);throw ve(404,{pathname:e.pathname+e.search})}c=await f(r)}i(void 0!==c,"You defined "+("action"===e?"an action":"a loader")+' for route "'+n.route.id+"\" but didn't return anything from your `"+e+"` function. Please return a value or `null`.")}catch(v){s=h.error,c=v}finally{d&&t.signal.removeEventListener("abort",d)}if(Se(c)){let e,a=c.status;if(Q.has(a)){let e=c.headers.get("Location");if(i(e,"Redirects returned/thrown from loaders/actions must have a Location header"),X.test(e)){if(!u.isStaticRequest){let n=new URL(t.url),r=e.startsWith("//")?new URL(n.protocol+e):new URL(e),a=null!=z(r.pathname,l);r.origin===n.origin&&a&&(e=r.pathname+r.search+r.hash)}}else e=ee(new URL(t.url),r.slice(0,r.indexOf(n)+1),l,!0,e);if(u.isStaticRequest)throw c.headers.set("Location",e),c;return{type:h.redirect,status:a,location:e,revalidate:null!==c.headers.get("X-Remix-Revalidate")}}if(u.isRouteRequest)throw{type:s||h.data,response:c};let o=c.headers.get("Content-Type");return e=o&&/\bapplication\/json\b/.test(o)?await c.json():await c.text(),s===h.error?{type:s,error:new A(a,c.statusText,e),headers:c.headers}:{type:h.data,data:e,statusCode:c.status,headers:c.headers}}return s===h.error?{type:s,error:c}:function(e){let t=e;return t&&"object"===typeof t&&"object"===typeof t.data&&"function"===typeof t.subscribe&&"function"===typeof t.cancel&&"function"===typeof t.resolveData}(c)?{type:h.deferred,deferredData:c,statusCode:null==(p=c.init)?void 0:p.status,headers:(null==(m=c.init)?void 0:m.headers)&&new Headers(c.init.headers)}:{type:h.data,data:c};var p,m}function ue(e,t,n,r){let a=e.createURL(ye(t)).toString(),o={signal:n};if(r&&xe(r.formMethod)){let{formMethod:e,formEncType:t}=r;o.method=e.toUpperCase(),"application/json"===t?(o.headers=new Headers({"Content-Type":t}),o.body=JSON.stringify(r.json)):"text/plain"===t?o.body=r.text:"application/x-www-form-urlencoded"===t&&r.formData?o.body=se(r.formData):o.body=r.formData}return new Request(a,o)}function se(e){let t=new URLSearchParams;for(let[n,r]of e.entries())t.append(n,"string"===typeof r?r:r.name);return t}function ce(e){let t=new FormData;for(let[n,r]of e.entries())t.append(n,r);return t}function de(e,t,n,r,a){let o,l={},u=null,s=!1,c={};return n.forEach(((n,d)=>{let f=t[d].route.id;if(i(!ke(n),"Cannot handle redirect results in processLoaderData"),we(n)){let t=he(e,f),a=n.error;r&&(a=Object.values(r)[0],r=void 0),u=u||{},null==u[t.route.id]&&(u[t.route.id]=a),l[f]=void 0,s||(s=!0,o=B(n.error)?n.error.status:500),n.headers&&(c[f]=n.headers)}else be(n)?(a.set(f,n.deferredData),l[f]=n.deferredData.data):l[f]=n.data,null==n.statusCode||200===n.statusCode||s||(o=n.statusCode),n.headers&&(c[f]=n.headers)})),r&&(u=r,l[Object.keys(r)[0]]=void 0),{loaderData:l,errors:u,statusCode:o||200,loaderHeaders:c}}function fe(e,t,n,a,o,l,u,s){let{loaderData:c,errors:d}=de(t,n,a,o,s);for(let f=0;fe.route.id===t))+1):[...e]).reverse().find((e=>!0===e.route.hasErrorBoundary))||e[0]}function me(e){let t=e.find((e=>e.index||!e.path||"/"===e.path))||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function ve(e,t){let{pathname:n,routeId:r,method:a,type:o}=void 0===t?{}:t,l="Unknown Server Error",i="Unknown @remix-run/router error";return 400===e?(l="Bad Request",a&&n&&r?i="You made a "+a+' request to "'+n+'" but did not provide a `loader` for route "'+r+'", so there is no way to handle the request.':"defer-action"===o?i="defer() is not supported in actions":"invalid-body"===o&&(i="Unable to encode submission body")):403===e?(l="Forbidden",i='Route "'+r+'" does not match URL "'+n+'"'):404===e?(l="Not Found",i='No route matches URL "'+n+'"'):405===e&&(l="Method Not Allowed",a&&n&&r?i="You made a "+a.toUpperCase()+' request to "'+n+'" but did not provide an `action` for route "'+r+'", so there is no way to handle the request.':a&&(i='Invalid request method "'+a.toUpperCase()+'"')),new A(e||500,l,new Error(i),!0)}function ge(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(ke(n))return{result:n,idx:t}}}function ye(e){return d(r({},"string"===typeof e?f(e):e,{hash:""}))}function be(e){return e.type===h.deferred}function we(e){return e.type===h.error}function ke(e){return(e&&e.type)===h.redirect}function Se(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"object"===typeof e.headers&&"undefined"!==typeof e.body}function Ee(e){return V.has(e.toLowerCase())}function xe(e){return $.has(e.toLowerCase())}async function Ce(e,t,n,r,a,o){for(let l=0;le.route.id===s.route.id)),d=null!=c&&!ae(c,s)&&void 0!==(o&&o[s.route.id]);if(be(u)&&(a||d)){let e=r[l];i(e,"Expected an AbortSignal for revalidating fetcher deferred result"),await _e(u,e,a).then((e=>{e&&(n[l]=e||n[l])}))}}}async function _e(e,t,n){if(void 0===n&&(n=!1),!await e.deferredData.resolveData(t)){if(n)try{return{type:h.data,data:e.deferredData.unwrappedData}}catch(r){return{type:h.error,error:r}}return{type:h.data,data:e.deferredData.data}}}function Pe(e){return new URLSearchParams(e).getAll("index").some((e=>""===e))}function Re(e,t){let n="string"===typeof t?f(t).search:t.search;if(e[e.length-1].route.index&&Pe(n||""))return e[e.length-1];let r=D(e);return r[r.length-1]}function Le(e){let{formMethod:t,formAction:n,formEncType:r,text:a,formData:o,json:l}=e;if(t&&n&&r)return null!=a?{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:void 0,text:a}:null!=o?{formMethod:t,formAction:n,formEncType:r,formData:o,json:void 0,text:void 0}:void 0!==l?{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:l,text:void 0}:void 0}function Ne(e,t){if(t){return{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}return{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function ze(e,t){if(e){return{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t," _hasFetcherDoneAnything ":!0}}return{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t," _hasFetcherDoneAnything ":!0}}function Te(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e," _hasFetcherDoneAnything ":!0}}},1694:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t{"use strict";n.d(t,{Z:()=>s});var r=n(1694),a=n.n(r),o=n(2791),l=n(162),i=n(184);const u=o.forwardRef(((e,t)=>{let{bsPrefix:n,variant:r,animation:o="border",size:u,as:s="div",className:c,...d}=e;n=(0,l.vE)(n,"spinner");const f="".concat(n,"-").concat(o);return(0,i.jsx)(s,{ref:t,...d,className:a()(c,f,u&&"".concat(f,"-").concat(u),r&&"text-".concat(r))})}));u.displayName="Spinner";const s=u},162:(e,t,n)=>{"use strict";n.d(t,{SC:()=>f,pi:()=>c,vE:()=>s,zG:()=>d});var r=n(2791);n(184);const a=["xxl","xl","lg","md","sm","xs"],o="xs",l=r.createContext({prefixes:{},breakpoints:a,minBreakpoint:o}),{Consumer:i,Provider:u}=l;function s(e,t){const{prefixes:n}=(0,r.useContext)(l);return e||n[t]||t}function c(){const{breakpoints:e}=(0,r.useContext)(l);return e}function d(){const{minBreakpoint:e}=(0,r.useContext)(l);return e}function f(){const{dir:e}=(0,r.useContext)(l);return"rtl"===e}},4463:(e,t,n)=>{"use strict";var r=n(2791),a=n(5296);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n