{"version":3,"sources":["components/admin/styles/Manage.module.css","components/admin/shows/styles/ListShows.module.css","pages/Admin/Login/styles/Login.module.css","components/admin/styles/ManageYoutube.module.css","components/admin/styles/ManageSpotify.module.css","pages/Admin/Home/styles/AdminHome.module.css","components/contact/styles/SocialsBar.module.css","components/styles/CustomHeader.module.css","pages/Music/styles/Music.module.css","components/admin/common/styles/TextInput.module.css","components/admin/shows/styles/ManageShows.module.css","components/media/styles/SpotifyLink.module.css","components/media/styles/YoutubeGrid.module.css","components/admin/styles/ManageBio.module.css","components/admin/shows/styles/AddShow.module.css","components/media/styles/AlbumGrid.module.css","components/other/styles/Banner.module.css","assets/fonts/Claxton-Bold.otf","assets/fonts/Claxton-Light.otf","assets/fonts/Claxton.otf","assets/band3_flat2.png","assets/tyler_square.png","config.ts","utils/formatter.ts","components/about/Show.tsx","components/about/ShowsList.tsx","components/about/Shows.tsx","components/CustomHeader.tsx","components/other/Banner.tsx","components/other/Responsive.tsx","pages/About/About.tsx","components/admin/ManageBio.tsx","components/admin/common/TextInput.tsx","components/admin/ManageSpotify.tsx","utils/auth.ts","components/admin/ManageUser.tsx","components/admin/ManageYoutube.tsx","components/admin/shows/AddShow.tsx","components/admin/shows/ListShows.tsx","components/admin/shows/ManageShows.tsx","pages/Admin/Home/AdminHome.tsx","assets/logo_black.png","pages/Admin/Login/Login.tsx","pages/Admin/PrivateRoute.tsx","components/other/socials/IconBase.tsx","components/other/socials/FacebookIcon.tsx","assets/Facebook_White.png","assets/Spotify_White.png","components/other/socials/SpotifyIcon.tsx","assets/Instagram_Black.png","components/other/socials/InstagramIcon.tsx","components/other/socials/TwitterIcon.tsx","assets/Twitter_White_Circle.png","assets/sig_white.png","pages/index.tsx","components/Navbar/NavbarDesktop.tsx","components/Navbar/NavbarMobile.tsx","utils/cookieInfo.ts","pages/Body.tsx","components/contact/BookingForm.tsx","assets/Facebook_Black.png","assets/Twitter_Black.png","components/contact/SocialsBar.tsx","pages/Contact/Contact.tsx","assets/loading.png","assets/tyler_wall.jpg","components/home/Dropdown.tsx","assets/Spotify_Green.png","components/media/SpotifyLink.tsx","components/media/SpotifySong.tsx","utils/deselect.ts","components/other/Scrollbox.tsx","components/media/VolumeControl.tsx","components/home/MusicCard.tsx","components/home/ShowRow.tsx","components/home/ShowsCard.tsx","components/media/YoutubeVideo.tsx","components/home/VideoCard.tsx","components/home/DropdownList.tsx","components/Socials.tsx","components/home/NarrowVideos.tsx","components/home/NarrowContents.tsx","pages/Home/Home.tsx","components/media/SpotifyAlbum.tsx","components/media/AlbumGrid.tsx","components/media/YoutubeGrid.tsx","assets/devices_cropped.png","pages/Music/Music.tsx","app/App.tsx","index.tsx"],"names":["module","exports","BACKGROUND_GREY_GRADIENT","HIGHLIGHT_SONGS","HIGHLIGHT_VIDEOS","MAIN_VIDEOS","ALBUM_URL","MUSIC_HIGHLIGHTS_URL","VIDEO_HIGHLIGHTS_URL","SPOTIFY_PLAYLISTS_URL","YOUTUBE_PLAYLISTS_URL","YOUTUBE_URL","CONTACT_URL","ABOUT_URL","SHOWS_URL","CURRENT_USER","UPDATE_USER","LOGIN_URL","LOGOUT_URL","EXTEND_SESSION_URL","LOCAL_STORAGE","TWITTER","INSTAGRAM","FACEBOOK","formatDate","date","d","Date","getMonth","getDate","getFullYear","convertZeros","str","replace","AboutShow","props","useState","hovering","setHovering","expanded","setExpanded","contentHeight","setContentHeight","contentRef","useRef","useEffect","content","current","clientHeight","style","width","padding","ref","display","justifyContent","alignItems","fontSize","fontFamily","show","name","className","onMouseEnter","onMouseLeave","marginLeft","color","alt","opacity","cursor","onClick","height","toString","overflowY","transition","margin","location","textAlign","time","ShowsList","ulStyle","column","position","marginBottom","mixBlendMode","columnAlt","columnOverlay","top","left","zIndex","background","columnAltOverlay","liStyle","last","listStyle","borderBottom","title","showsList","length","map","idx","setUpcomingShows","setPastShows","a","axios","get","res","data","upcomingShows","pastShows","Shows","fetchData","err","console","error","CustomHeader","styles","component","this","col","value","bar","Component","Banner","css","minWidth","src","img","Desktop","children","useMediaQuery","Mobile","maxWidth","MOBILEWIDTH","Custom","CustomMobile","CustomDesktop","setState","text","About","setText","paragraph","split","subStr","paragraphStyle","window","scrollTo","e","contentDiv","desktop","flexDirection","paddingBottom","contentElem","textBox","borderRight","bandBanner","tylerPng","marginTop","borderRadius","ManageBio","state","bio","updateBio","errText","successText","put","withCredentials","updatedBio","response","errors","forEach","field","handleKeyPress","key","sharedStyles","item","bold","updateBioWrapper","id","onChange","target","onKeyPress","btn","fontStyle","TextInput","optional","manageInput","textInput","type","ManageSpotify","highlights","playlists","updatePlaylist","body","oldName","test","newUrl","newId","message","deletePlaylist","delete","playlistRow","row","classNames","rowElem","inputSection","textWrapper","headerRow","header","setLogin","now","loggedIn","diff","storage","localStorage","getItem","parseInt","expires","extendSession","setItem","fetchLogin","username","password","post","errMsg","ManageUser","setUsername","email","setEmail","updateUsername","setUpdateUsername","updateEmail","setUpdateEmail","setErrText","setSuccessText","navigate","useNavigate","currentUser","updateProfile","updatedUser","log","ManageYoutube","main","hover","filter","playlist","selectable","boxShadow","videoGrid","tableHeader","headerHighlight","headerId","highlight","AddShow","newName","newDate","newLocation","newTime","newDescription","fetchError","addShow","undefined","dateHelper","toISOString","description","setHours","getHours","ListShows","authorized","deleteShow","showCol","table","headerElem","bodyFont","shows","s","showItem","tableRow","WebkitTransition","MozTransition","transform","tableCol","altFont","replaceAll","ManageShows","push","added","leftCol","rightCol","MenuElement","mouseDown","setMouseDown","setHover","onMouseUp","document","onmouseup","inputStyle","selected","inputOverlay","selection","onMouseDown","setSelected","AdminHome","userName","spotifyName","youtubeName","showsName","opened","setOpened","redBar","grid","menu","rightBox","Login","setPassword","setErrMsg","login","loggedInEffect","centerCol","yLevel","graphic","logo","blackLine","box","personnel","greyLine","placeholder","loginInput","button","checkLoginHandler","nav","handler","PrivateRoute","checkLogin","addEventListener","removeEventListener","IconBase","componentStyle","href","iconWrapper","linkStyle","iconStyle","rel","FacebookIcon","SpotifyIcon","spotifyWhite","InstagramIcon","mouseIn","mouseOut","wrapperStyle","bind","instagramBlack","TwitterIcon","PAGES","endpoint","NavLink","page","pathname","NavbarDesktop","liIconStyle","backgroundColor","whiteSig","right","lineHeight","toUpperCase","NavbarMobile","open","setOpen","signature","maxHeight","menuLinks","lines","visibility","topHamburger","bottomHamburger","overlay","circle","circleSignature","whiteLine","space","COOKIE_TIMER","CookieButton","fontWeight","border","Body","showCookies","setShowCookies","timer","timerStr","shouldShowCookie","contents","minHeight","paddingTop","backgroundImage","logoBlack","backgroundSize","cookieBar","bottom","innerContainer","cookieInfo","overflowX","SUCCESS_MESSAGE","BookingForm","setName","venue","setVenue","comment","setComment","status","setStatus","isDesktop","query","pairMember","lineInput","statusDiv","resize","SocialsBar","socials","facebookBlack","url","at","twitterBlack","link","gold","followText","Contact","contentStyle","socialsBar","pageview","Dropdown","label","onEnter","onLeave","labelStyle","textShadow","dropdown","overflow","arrowBox","leftArrow","n","Math","sqrt","rightArrow","SpotifyLink","spotifyLogo","BUTTON_DIAMETER","SpotifySong","clicking","notHover","infoDesktop","track","album","releaseDate","IMAGE_DIAMETER","hoverable","whiteBackground","playMouseDown","playMouseUp","togglePlay","playing","pause","play","previewUrl","mainBackground","displayRow","imageNameDiv","imageDiv","image","nameLinkDiv","nameDiv","spotifyLinkDiv","playPositionDiv","playButtonDiv","correctButtonOffset","images","medium","externalUrl","icon","faPauseCircle","size","faPlayCircle","clearSelection","getSelection","removeAllRanges","SCROLLBAR_WIDTH","ScrollBox","scrollingRef","scrollBarRef","scrollHandleRef","scrollableRef","scrollable","beginScrolling","endScrolling","scrolling","scrollHover","scrollY","mouseY","isNarrow","scrollBarHeight","scrollingHeight","scrollHandleHeight","scrollableHeight","scrollBarRectTop","initState","scrollableDiv","offsetHeight","floor","initScrollBar","scrollBar","scrollHandle","getBoundingClientRect","narrow","clientWidth","maxHandleOffset","boundHandleOffset","offset","maxOffset","min","max","maxScrollingOffset","boundScrollingOffset","scroll","handleDiff","newTopHandle","divY","scrollWheel","deltaY","selectScrollBar","barRect","clientY","offsetTop","selectScrollHandle","onmousemove","moveScrollHandle","deselectScrollHandle","barTop","barHeight","mouseDiff","notScrollHover","innerScrollHandle","scrollingDiv","spotifySongDiv","React","createRef","shouldUpdate","onWheel","VOLUME_HEIGHT","MAX_LEVEL","MAX_VOLUME","volumeFunc","x","volume","exp","expVolume","VolumeControl","handleRef","selectorRef","playerRef","greenRef","setVolume","level","muted","select","setPosition","notSelect","slide","touchSelect","setTouchPosition","ontouchend","notTouchSelect","ontouchmove","touchSlide","handle","selector","bounds","mousePixel","clientX","pixel2volume","touches","mute","muteLevel","volume2pixel","unmute","toggleMute","componentRow","sliderWrapper","sliderSelector","slider","leftBar","paddingLeft","player","initialValue","muteHover","INITIAL_LEVEL","pixel","onTouchStart","faVolumeMute","faVolumeUp","MusicCard","changeSong","isPlaying","listDiv","volumeDiv","divLine","scrollBox","tracks","ShowRow","lineStyle","wordWrap","nameLine","locationLine","timeLine","dateLine","leftStyle","rightStyle","set","ShowsCard","dividerBox","divider","seeMoreLink","to","YoutubeVideo","iframeRef","videoStyle","allow","allowFullScreen","VideoCard","videoDiv","lineDiv","videos","DropdownList","linkRow","dropdownStyle","musicCard","showsCard","Socials","NarrowVideos","videoList","video","desktopUl","gridTemplateColumns","mobileUl","NarrowContents","musicLabel","musicDividerBox","musicDivider","showsWrapper","musicWrapper","videoWrapper","videoDividerBox","narrowVidDiv","vidBlue","socialsWrapper","socialsPositioning","socialsDividerBox","socialsStyle","customMobile","AllMobile","Home","setTracks","setVideos","setShows","loaded","setLoaded","globalStyle","desktopStyle","loadingThing","loadingImgStyle","animation","objectFit","backgroundRepeat","mobileQuery","mobileImage","loadingImg","wallImg","onLoad","QueryGTE780","QueryLTE780","albumType","numTracks","SpotifyCover","cover","large","SpotifyAlbum","clicked","setClicked","lte780","resizing","mobileStyle","dropdownOverlay","transitionDelay","fadeIn","topInfo","bottomInfo","year","QueryGTE1150","QueryLTE1150","AlbumGrid","albums","rowSize","Array","from","keys","i","albs","slice","AlbumRow","join","sort","b","YoutubeGrid","frame","Music","square","fetchAlbums","fetchVideos","componentDidMount","videoHeaderDiv","videoHeaderOverlayDiv","videoHeaderOverlay","banner","devicesBanner","App","path","element","index","ReactGA","initialize","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.8c693f9c.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"Manage_component__dT9bV\",\"padding\":\"Manage_padding__5kUIt\",\"item\":\"Manage_item__3RJwT\",\"bold\":\"Manage_bold__1YUNK\",\"manageInput\":\"Manage_manageInput__THVqO\",\"btn\":\"Manage_btn__1cbnW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"ListShows_component__1FZhY\",\"showCol\":\"ListShows_showCol__3Iq08\",\"table\":\"ListShows_table__2Bn_G\",\"tableRow\":\"ListShows_tableRow__2cDNu\",\"tableHeader\":\"ListShows_tableHeader__106nV\",\"headerElem\":\"ListShows_headerElem__1ME6i\",\"tableCol\":\"ListShows_tableCol__1isb-\",\"showItem\":\"ListShows_showItem__3g6Eu\",\"bodyFont\":\"ListShows_bodyFont__14jsN\",\"altFont\":\"ListShows_altFont__3r4Fo\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"Login_component__1BtPL\",\"centerCol\":\"Login_centerCol__2LGtW\",\"yLevel\":\"Login_yLevel__2Wl0o\",\"grid\":\"Login_grid__2-45I\",\"leftCol\":\"Login_leftCol__2--N1\",\"rightCol\":\"Login_rightCol__20fn8\",\"graphic\":\"Login_graphic__SdzpP\",\"logo\":\"Login_logo__2wLKF\",\"blackLine\":\"Login_blackLine__2e6NH\",\"description\":\"Login_description__2dwfW\",\"box\":\"Login_box__1-UQm\",\"loginInput\":\"Login_loginInput__Gvd6h\",\"button\":\"Login_button__GVPDd\",\"greyLine\":\"Login_greyLine__9QuPu\",\"personnel\":\"Login_personnel__M4VMz\",\"error\":\"Login_error__1rsfj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"col\":\"ManageYoutube_col__3hYG4\",\"videoGrid\":\"ManageYoutube_videoGrid__14Rk-\",\"item\":\"ManageYoutube_item__1nmKl\",\"row\":\"ManageYoutube_row__2RyUf\",\"video\":\"ManageYoutube_video__35tNw\",\"deleteIcon\":\"ManageYoutube_deleteIcon__1osjH\",\"inputSection\":\"ManageYoutube_inputSection__1lxRc\",\"deleteBtn\":\"ManageYoutube_deleteBtn__1k653\",\"checkboxItem\":\"ManageYoutube_checkboxItem__4gUKV\",\"customCheckbox\":\"ManageYoutube_customCheckbox__3AuyM\",\"checkbox\":\"ManageYoutube_checkbox__3qThq\",\"check\":\"ManageYoutube_check__2vOfj\",\"highlightText\":\"ManageYoutube_highlightText__1VNci\",\"tableHeader\":\"ManageYoutube_tableHeader__2ndwO\",\"headerVideo\":\"ManageYoutube_headerVideo__3r4Q6\",\"headerId\":\"ManageYoutube_headerId__27MiU\",\"headerHighlight\":\"ManageYoutube_headerHighlight__1Gjgh\",\"headerDelete\":\"ManageYoutube_headerDelete__3mlM5\",\"id\":\"ManageYoutube_id__3AfBV\",\"highlight\":\"ManageYoutube_highlight__1T-5q\",\"delete\":\"ManageYoutube_delete__n4DeA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"item\":\"ManageSpotify_item__206Zb\",\"col\":\"ManageSpotify_col__3PkDD\",\"inputSection\":\"ManageSpotify_inputSection__3dYVk\",\"row\":\"ManageSpotify_row__1lGzs\",\"headerRow\":\"ManageSpotify_headerRow__1O09K\",\"header\":\"ManageSpotify_header__23J2G\",\"rowElem\":\"ManageSpotify_rowElem__32rOI\",\"cover\":\"ManageSpotify_cover__KMZJH\",\"coverImg\":\"ManageSpotify_coverImg__3NlCB\",\"deleteIcon\":\"ManageSpotify_deleteIcon__3ZYac\",\"deleteBtn\":\"ManageSpotify_deleteBtn__3DTj6\",\"textWrapper\":\"ManageSpotify_textWrapper__HW3N3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"AdminHome_component__1KXOY\",\"redBar\":\"AdminHome_redBar__1ZgyB\",\"grid\":\"AdminHome_grid__1ulu7\",\"leftCol\":\"AdminHome_leftCol__13xZ0\",\"rightCol\":\"AdminHome_rightCol__2xEco\",\"menu\":\"AdminHome_menu__hS7Xp\",\"selection\":\"AdminHome_selection__2Inhl\",\"rightBox\":\"AdminHome_rightBox__3RJGk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"SocialsBar_component__3C8RQ\",\"gold\":\"SocialsBar_gold__2u02X\",\"content\":\"SocialsBar_content__35Mf0\",\"followText\":\"SocialsBar_followText__6L3uB\",\"item\":\"SocialsBar_item__1vFRg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"CustomHeader_component__eNy12\",\"col\":\"CustomHeader_col__HOzM3\",\"title\":\"CustomHeader_title__3n0Fw\",\"bar\":\"CustomHeader_bar__2MxZn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"Music_component__2T3ar\",\"banner\":\"Music_banner__1j834\",\"albums\":\"Music_albums__25A-n\",\"videos\":\"Music_videos__2ogGn\",\"title\":\"Music_title__aQKKT\",\"bar\":\"Music_bar__3dGR0\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"TextInput_component__3K_wy\",\"optional\":\"TextInput_optional__29_Qj\",\"textInput\":\"TextInput_textInput__3Q7BI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"ManageShows_component__HViaN\",\"row\":\"ManageShows_row__1UTry\",\"leftCol\":\"ManageShows_leftCol__3zaxy\",\"rightCol\":\"ManageShows_rightCol__11TPH\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"SpotifyLink_component__23fn3\",\"link\":\"SpotifyLink_link__1ueXe\",\"logo\":\"SpotifyLink_logo__1x3Bu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"YoutubeGrid_component__1L_LS\",\"grid\":\"YoutubeGrid_grid__1kWhs\",\"frame\":\"YoutubeGrid_frame__KIXDJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"updateBioWrapper\":\"ManageBio_updateBioWrapper__VlqCy\",\"updateBio\":\"ManageBio_updateBio__1Dh0z\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"AddShow_component__2ZUBV\",\"row\":\"AddShow_row__3D08Y\",\"title\":\"AddShow_title__3zpqo\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"AlbumGrid_component__C8P2W\",\"row\":\"AlbumGrid_row__qRmJd\",\"album\":\"AlbumGrid_album__3UBTP\",\"cover\":\"AlbumGrid_cover__3r9Yx\",\"albumInfo\":\"AlbumGrid_albumInfo__M6_n9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"component\":\"Banner_component__3vCIw\"};","export default __webpack_public_path__ + \"static/media/Claxton-Bold.6ba86be5.otf\";","export default __webpack_public_path__ + \"static/media/Claxton-Light.4479b133.otf\";","export default __webpack_public_path__ + \"static/media/Claxton.f44b300c.otf\";","export default __webpack_public_path__ + \"static/media/band3_flat2.518ee44e.png\";","export default __webpack_public_path__ + \"static/media/tyler_square.567b3a18.png\";","// const local = \"http://localhost:3000\";\r\n\r\nconst url = function (path: string) {\r\n // return local + path;\r\n return path;\r\n};\r\n\r\nexport const ORIGINAL = false;\r\nexport const POP_OUT = false;\r\nexport const POP_OUT_COLOR_SCHEME = false;\r\n\r\nexport const NAV_ELEMS_WIDTH = 340; // px\r\nexport const BACKGROUND_GREY = \"#303030\";\r\nexport const MUSIC_CARD_COLOR = BACKGROUND_GREY;\r\nexport const MOBILE_HOME_COLOR = \"#a4a4a4\";\r\nexport const BACKGROUND_GREY_GRADIENT =\r\n \"linear-gradient(0.35turn, #404040, 3%, #303030, 85%, #404040)\";\r\n// export const BACKGROUND_GREY = \"var(--primary-color)\";\r\nexport const WEBSITE_WIDTH = {\r\n STRING: \"1480px\",\r\n NUMBER: 1480,\r\n};\r\n\r\nexport const HIGHLIGHT_SONGS = \"highlightSongs\";\r\nexport const HIGHLIGHT_VIDEOS = \"highlightVideos\";\r\nexport const MAIN_VIDEOS = \"mainVideos\";\r\n\r\nexport const ALBUM_URL = url(\"/api/music/album\");\r\nexport const TOKEN_URL = url(\"/api/music/spotify-token\");\r\nexport const MUSIC_HIGHLIGHTS_URL = url(\r\n \"/api/music/playlists/\" + HIGHLIGHT_SONGS\r\n);\r\nexport const VIDEO_HIGHLIGHTS_URL = url(\r\n \"/api/videos/playlists/\" + HIGHLIGHT_VIDEOS\r\n);\r\nexport const SPOTIFY_PLAYLISTS_URL = url(\"/api/music/playlists\");\r\nexport const YOUTUBE_PLAYLISTS_URL = url(\"/api/videos/playlists\");\r\n\r\nexport const YOUTUBE_URL = url(\"/api/videos/playlists/\" + MAIN_VIDEOS);\r\nexport const CONTACT_URL = url(\"/api/contact\");\r\nexport const ABOUT_URL = url(\"/api/about\");\r\nexport const SHOWS_URL = url(\"/api/about/shows\");\r\nexport const CURRENT_USER = url(\"/api/users/current-user\");\r\nexport const UPDATE_USER = url(\"/api/users/update\");\r\nexport const LOGIN_URL = url(\"/api/users/signin\");\r\nexport const LOGOUT_URL = url(\"/api/users/signout\");\r\nexport const SIGNUP_URL = url(\"/api/users/signup\");\r\nexport const EXTEND_SESSION_URL = url(\"/api/users/extend-session\");\r\nexport const LOCAL_STORAGE = {\r\n LOGGED_IN: \"tctrioLoggedIn\",\r\n EXPIRATION: \"tctrioExpires\",\r\n};\r\nexport const LOGIN_ROUTE = \"login\";\r\n\r\nexport const MOBILEWIDTH = 650; // pixels\r\n\r\nexport const SPOTIFY =\r\n \"https://open.spotify.com/artist/63GbQYzf0EbxtI9D23IdrU?si=kLVHVQ3ISASnn7MB7mSvcA&dl_branch=1\";\r\n\r\nexport const YOUTUBE =\r\n \"https://www.youtube.com/channel/UCvRNBogmlEFFfBJyKIJqV-g\";\r\n\r\nexport const TWITTER = \"https://twitter.com/tctrio\";\r\n\r\nexport const INSTAGRAM = \"https://www.instagram.com/tctrio\";\r\n\r\nexport const FACEBOOK = \"https://www.facebook.com/tctrio\";\r\n","export const formatDate = (date?: string) => {\r\n if (date) {\r\n const d = new Date(date);\r\n return `${d.getMonth() + 1}/${d.getDate()}/${d.getFullYear()}`;\r\n } else return \"TBA\";\r\n};\r\n\r\nexport function convertZeros(str: string) {\r\n return str.replace(\"0\", \"O\");\r\n}\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { Show } from \"../../types/show\";\r\nimport { convertZeros, formatDate } from \"../../utils/formatter\";\r\n\r\ninterface AboutShowProps {\r\n show: Show;\r\n alt: boolean;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nfunction AboutShow(props: AboutShowProps) {\r\n const [hovering, setHovering] = useState(false);\r\n const [expanded, setExpanded] = useState(false);\r\n const [contentHeight, setContentHeight] = useState(0);\r\n const contentRef: React.RefObject = useRef(null);\r\n\r\n // set the height of the content\r\n useEffect(() => {\r\n const content = contentRef.current;\r\n if (!content) return;\r\n setContentHeight(content.clientHeight);\r\n }, [contentHeight]);\r\n\r\n // styles\r\n const collapseStyle = (): React.CSSProperties => {\r\n return {\r\n height: expanded ? contentHeight.toString() + \"px\" : \"0px\",\r\n overflowY: \"hidden\",\r\n transition: \"height 0.1s linear\",\r\n };\r\n };\r\n\r\n const minPadding: React.CSSProperties = {\r\n width: \"100%\",\r\n padding: \"2px 0px\",\r\n };\r\n\r\n const titleWrapper: React.CSSProperties = {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n };\r\n\r\n const expandStyle = (): React.CSSProperties => {\r\n return {\r\n fontFamily: \"var(--body-font)\",\r\n marginLeft: expanded ? \"5px\" : \"15px\",\r\n color: props.alt ? \"#ea9a00\" : \"var(--selected-color)\",\r\n opacity: hovering ? 0.75 : 1,\r\n cursor: \"pointer\",\r\n };\r\n };\r\n\r\n const titleStyle: React.CSSProperties = {\r\n fontSize: \"1.4rem\",\r\n fontFamily: \"var(--header-font)\",\r\n display: \"inline\",\r\n };\r\n\r\n const locationStyle: React.CSSProperties = {\r\n fontFamily: \"var(--body-font)\",\r\n fontSize: \"1.25rem\",\r\n margin: \"3px 0px\",\r\n };\r\n\r\n const timeStyle: React.CSSProperties = {\r\n fontFamily: \"var(--body-font)\",\r\n fontSize: \"1.25rem\",\r\n textAlign: \"end\",\r\n };\r\n\r\n const dateStyle: React.CSSProperties = {\r\n fontFamily: \"var(--body-font)\",\r\n fontSize: \"1.25rem\",\r\n textAlign: \"end\",\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

{props.show.name}

{\" \"}\r\n setHovering(true)}\r\n onMouseLeave={() => setHovering(false)}\r\n style={expandStyle()}\r\n onClick={() => setExpanded(!expanded)}\r\n >\r\n {expanded ? \"collapse\" : \"expand\"}\r\n

\r\n
\r\n
\r\n

{props.show.location || \"TBA\"}

\r\n

{props.show.time || \"TBA\"}

\r\n
\r\n

{convertZeros(formatDate(props.show.date))}

\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AboutShow;\r\n","import { Show } from \"../../types/show\";\r\nimport AboutShow from \"./Show\";\r\n\r\ninterface ShowsListProps {\r\n showsList: Show[];\r\n alt: boolean;\r\n title: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nexport function ShowsList(props: ShowsListProps) {\r\n // styles\r\n const ulStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n };\r\n\r\n const noShow: React.CSSProperties = {\r\n fontFamily: \"var(--body-font)\",\r\n textAlign: \"center\",\r\n };\r\n\r\n const column: React.CSSProperties = {\r\n position: \"relative\",\r\n marginBottom: \"10px\",\r\n padding: \"10px\",\r\n mixBlendMode: \"multiply\",\r\n color: \"white\",\r\n width: \"100%\",\r\n };\r\n\r\n const columnAlt: React.CSSProperties = {\r\n ...column,\r\n color: \"#333\",\r\n };\r\n\r\n const columnOverlay: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n zIndex: \"-1\",\r\n background: \"rgb(90, 90, 90)\",\r\n };\r\n\r\n const columnAltOverlay: React.CSSProperties = {\r\n ...columnOverlay,\r\n background: \"var(--white-color)\",\r\n };\r\n\r\n const barTitle: React.CSSProperties = {\r\n textAlign: \"center\",\r\n fontSize: \"2rem\",\r\n fontFamily: \"var(--header-font)\",\r\n };\r\n\r\n // dynamic styles\r\n const liStyle = (last: boolean): React.CSSProperties => {\r\n return {\r\n width: \"100%\",\r\n listStyle: \"none\",\r\n padding: \"10px\",\r\n borderBottom: last\r\n ? \"none\"\r\n : props.alt\r\n ? \"solid 1px black\"\r\n : \"solid 1px white\",\r\n };\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
{props.title}
\r\n
\r\n {props.showsList.length > 0 ? (\r\n
    \r\n {props.showsList.map((show, idx) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n })}\r\n
\r\n ) : (\r\n
    \r\n
  • \r\n

    ...None to display...

    \r\n
  • \r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { SHOWS_URL } from \"../../config\";\r\nimport { Show } from \"../../types/show\";\r\nimport { ShowsList } from \"./ShowsList\";\r\n\r\ninterface ShowsResponse {\r\n upcomingShows: Show[];\r\n pastShows: Show[];\r\n}\r\n\r\nexport async function fetchData(\r\n setUpcomingShows: (s: Show[]) => void,\r\n setPastShows: (s: Show[]) => void\r\n) {\r\n const res = await axios.get(SHOWS_URL);\r\n setUpcomingShows(res.data.upcomingShows);\r\n setPastShows(res.data.pastShows);\r\n}\r\n\r\ninterface ShowsProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\nfunction Shows(props: ShowsProps) {\r\n const [upcomingShows, setUpcomingShows] = useState([] as Show[]);\r\n const [pastShows, setPastShows] = useState([] as Show[]);\r\n\r\n useEffect(() => {\r\n try {\r\n fetchData(setUpcomingShows, setPastShows);\r\n } catch (err: any) {\r\n console.error(err);\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Shows;\r\n","import React, { Component } from \"react\";\r\n\r\nimport styles from \"./styles/CustomHeader.module.css\";\r\n\r\nclass CustomHeader extends Component<\r\n { value: string; color?: string; margin?: number },\r\n {}\r\n> {\r\n color = () => {\r\n if (this.props.color) return { color: this.props.color };\r\n return {};\r\n };\r\n background = () => {\r\n if (this.props.color) return { background: this.props.color };\r\n return {};\r\n };\r\n\r\n margin = () => {\r\n if (this.props.margin)\r\n return `${this.props.margin}px 0px ${this.props.margin - 20}px 0px`;\r\n else return `70px 0px 50px 0px`;\r\n };\r\n render() {\r\n return (\r\n \r\n
\r\n

\r\n {this.props.value}\r\n

\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default CustomHeader;\r\n","import React, { Component } from \"react\";\r\nimport styles from \"./styles/Banner.module.css\";\r\n\r\nclass Banner extends Component<{\r\n img: string;\r\n top?: string;\r\n left?: string;\r\n height?: string;\r\n width?: string;\r\n}> {\r\n style = () => {\r\n let css: React.CSSProperties = {};\r\n if (this.props.top) css.top = this.props.top;\r\n if (this.props.left) css.left = this.props.left;\r\n if (this.props.height) css.height = this.props.height;\r\n css.width = \"100%\";\r\n css.minWidth = this.props.width;\r\n return css;\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n \"Banner\"\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Banner;\r\n","// @ts-ignore\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { MOBILEWIDTH } from \"../../config\";\r\n\r\nexport const Desktop = ({ children }: { children: JSX.Element }) => {\r\n const isDesktop = useMediaQuery({ minWidth: MOBILEWIDTH });\r\n return isDesktop ? children : null;\r\n};\r\n\r\nexport const Mobile = ({ children }: { children: JSX.Element }) => {\r\n const isMobile = useMediaQuery({ maxWidth: MOBILEWIDTH - 1 });\r\n return isMobile ? children : null;\r\n};\r\n\r\nexport const Custom = (props: { maxWidth?: number; minWidth?: number }) => {\r\n const Custom$ = ({ children }: { children: JSX.Element }) => {\r\n const isMobile = useMediaQuery({\r\n maxWidth: props.maxWidth,\r\n minWidth: props.minWidth,\r\n });\r\n return isMobile ? children : null;\r\n };\r\n\r\n return Custom$;\r\n};\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport bandBanner from \"../../assets/band3_flat2.png\";\r\nimport tylerPng from \"../../assets/tyler_square.png\";\r\nimport Shows from \"../../components/about/Shows\";\r\nimport CustomHeader from \"../../components/CustomHeader\";\r\nimport Banner from \"../../components/other/Banner\";\r\nimport { Custom, Desktop, Mobile } from \"../../components/other/Responsive\";\r\nimport { ABOUT_URL } from \"../../config\";\r\n\r\nconst CustomMobile = Custom({ maxWidth: 850 });\r\nconst CustomDesktop = Custom({ minWidth: 850 });\r\n\r\ninterface AboutResponse {\r\n text: string;\r\n}\r\n\r\nasync function fetchData(setState: (s: string) => void) {\r\n const res = await axios.get(ABOUT_URL);\r\n setState(res.data.text);\r\n}\r\n\r\ninterface AboutProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\nfunction About(props: AboutProps) {\r\n const [text, setText] = useState(\"\");\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n // fetch data\r\n useEffect(() => {\r\n try {\r\n fetchData(setText);\r\n } catch (e: any) {\r\n console.error(e);\r\n }\r\n }, [text]);\r\n\r\n function paragraph(text: string) {\r\n const split = (text || \"...None to display...\").split(\"\\n\");\r\n return split.map((subStr, idx) => {\r\n return (\r\n

\r\n {subStr}\r\n

\r\n );\r\n });\r\n }\r\n\r\n // style\r\n const componentStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n };\r\n\r\n const banner: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"280px\",\r\n };\r\n\r\n const bannerOverlay: React.CSSProperties = {\r\n position: \"absolute\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n zIndex: \"1\",\r\n background: \"var(--primary-color)\",\r\n opacity: \"0.2\",\r\n };\r\n\r\n const contentDiv = (desktop: boolean): React.CSSProperties => {\r\n return {\r\n display: \"flex\",\r\n flexDirection: desktop ? \"row\" : \"column\",\r\n alignItems: desktop ? \"\" : \"center\",\r\n paddingBottom: \"40px\",\r\n };\r\n };\r\n\r\n const contentElem = (desktop: boolean): React.CSSProperties => {\r\n return {\r\n width: desktop ? \"47%\" : \"94%\",\r\n margin: \"0px 1.5%\",\r\n };\r\n };\r\n\r\n // const textBanner: React.CSSProperties = {\r\n // width: \"100%\",\r\n // display: \"flex\",\r\n // justifyContent: \"space-evenly\",\r\n // // background: \"goldenrod\",\r\n // background: \"var(--gold-gradient)\",\r\n // padding: \"30px 0px\",\r\n // mixBlendMode: \"multiply\",\r\n // // borderTop: \"solid 5px var(--primary-color)\",\r\n // // boxShadow: \"0px 1px 10px -3px var(--primary-color)\",\r\n // boxShadow: \"0px 1px 10px -3px goldenrod\",\r\n // };\r\n\r\n // const halfBox: React.CSSProperties = {\r\n // position: \"relative\",\r\n // height: \"auto\",\r\n // fontFamily: \"var(--body-font)\",\r\n // fontSize: \"2rem\",\r\n // lineHeight: \" 3.5rem\",\r\n // listStyle: \"none\",\r\n // color: \"black\",\r\n // };\r\n\r\n // const halfBoxOverlay: React.CSSProperties = {\r\n // position: \"absolute\",\r\n // bottom: \"0%\",\r\n // left: \"-10%\",\r\n // height: \"50%\",\r\n // width: \"120%\",\r\n // borderBottom: \"solid 1px black\",\r\n // borderRight: \"solid 1px black\",\r\n // borderLeft: \"solid 1px black\",\r\n // zIndex: 1,\r\n // };\r\n\r\n const paragraphStyle: React.CSSProperties = {\r\n marginBottom: \"1rem\",\r\n fontFamily: \"var(--alternate-font)\",\r\n fontSize: \"1.2rem\",\r\n textAlign: \"center\",\r\n };\r\n\r\n const textBox: React.CSSProperties = {\r\n /* width: 75%; */\r\n padding: \"20px 30px\",\r\n background: \"#f5f5f5\",\r\n color: \"black\",\r\n borderRight: \"solid 3px #90c4e3\",\r\n mixBlendMode: \"multiply\",\r\n };\r\n\r\n return (\r\n
\r\n \r\n <>\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
{paragraph(text)}
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
{paragraph(text)}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default About;\r\n","import axios from \"axios\";\r\nimport React, { Component } from \"react\";\r\nimport { ABOUT_URL } from \"../../config\";\r\n\r\nimport sharedStyles from \"./styles/Manage.module.css\";\r\nimport styles from \"./styles/ManageBio.module.css\";\r\n\r\nclass ManageBio extends Component {\r\n state = {\r\n bio: \"\",\r\n updateBio: \"\",\r\n errText: \"\",\r\n successText: \"\",\r\n };\r\n fetchData = async () => {\r\n try {\r\n const res = await axios.get<{\r\n text: string;\r\n }>(ABOUT_URL);\r\n const bio = res.data.text;\r\n this.setState({\r\n bio,\r\n updateBio: bio,\r\n });\r\n } catch (err) {}\r\n };\r\n\r\n async componentDidMount() {\r\n await this.fetchData();\r\n }\r\n\r\n updateBio = async () => {\r\n if (this.state.bio === this.state.updateBio) {\r\n this.setState({ errText: \"\", successText: \"\" });\r\n return;\r\n }\r\n\r\n try {\r\n const res = await axios.put<{ text: string }>(\r\n ABOUT_URL,\r\n {\r\n text: this.state.updateBio,\r\n },\r\n {\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n const updatedBio = res.data.text;\r\n\r\n this.setState({\r\n bio: updatedBio,\r\n errText: \"\",\r\n successText: \"Bio Updated\",\r\n });\r\n } catch (err: any) {\r\n if (err.response?.data?.errors) {\r\n err.response.data.errors.forEach(({ field }: { field: string }) => {\r\n if (field === \"text\") {\r\n this.setState({\r\n errText: \"Bio cannot be empty\",\r\n successText: \"\",\r\n });\r\n }\r\n });\r\n } else {\r\n }\r\n }\r\n };\r\n\r\n handleKeyPress = async (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\") {\r\n await this.updateBio();\r\n } else {\r\n this.setState({ errText: \"\", successText: \"\" });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n

Bio

\r\n
\r\n this.setState({ updateBio: e.target.value })}\r\n onKeyPress={this.handleKeyPress}\r\n >\r\n
\r\n
\r\n
\r\n \r\n {this.state.errText ? (\r\n \r\n {this.state.errText}\r\n

\r\n ) : this.state.successText ? (\r\n \r\n {this.state.successText}\r\n

\r\n ) : null}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ManageBio;\r\n","import React, { Component } from \"react\";\r\n\r\nimport styles from \"./styles/TextInput.module.css\";\r\nimport sharedStyles from \"../styles/Manage.module.css\";\r\n\r\nclass TextInput extends Component<\r\n {\r\n name: string;\r\n value: string;\r\n optional?: boolean;\r\n type?: string;\r\n onKeyPress?: (e: React.KeyboardEvent) => Promise;\r\n onChange: (e: React.ChangeEvent) => void;\r\n },\r\n {}\r\n> {\r\n render() {\r\n return (\r\n
\r\n

\r\n {this.props.name}{\" \"}\r\n {this.props.optional ? (\r\n (Optional)\r\n ) : null}\r\n

\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default TextInput;\r\n","import axios from \"axios\";\r\nimport classNames from \"classnames\";\r\nimport React, { Component } from \"react\";\r\nimport {\r\n MUSIC_HIGHLIGHTS_URL,\r\n SPOTIFY_PLAYLISTS_URL,\r\n HIGHLIGHT_SONGS,\r\n} from \"../../config\";\r\nimport TextInput from \"./common/TextInput\";\r\nimport sharedStyles from \"./styles/Manage.module.css\";\r\nimport styles from \"./styles/ManageSpotify.module.css\";\r\n\r\ninterface Playlist {\r\n name: string;\r\n id: string;\r\n}\r\n\r\nclass ManageSpotify extends Component {\r\n state = {\r\n id: \"\",\r\n\r\n highlights: {\r\n name: HIGHLIGHT_SONGS,\r\n id: \"\",\r\n },\r\n\r\n errText: \"\",\r\n };\r\n\r\n // Fetch playlists\r\n fetchData = async () => {\r\n try {\r\n const res = await axios.get<{ playlists: Playlist[] }>(\r\n SPOTIFY_PLAYLISTS_URL,\r\n {\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n if (res.data.playlists.length === 0) {\r\n console.error(\"Could not find playlist\");\r\n }\r\n this.setState({ highlights: res.data.playlists[0] });\r\n } catch (err) {}\r\n };\r\n\r\n componentDidMount() {\r\n this.fetchData();\r\n }\r\n\r\n updatePlaylist = async () => {\r\n if (!this.state.id) {\r\n this.setState({ errText: \"Invalid id/url\" });\r\n }\r\n try {\r\n let body: { newId?: string; newUrl?: string; oldName: string } = {\r\n oldName: HIGHLIGHT_SONGS,\r\n };\r\n if (/.*spotify.com.*/.test(this.state.id)) body.newUrl = this.state.id;\r\n else body.newId = this.state.id;\r\n const res: { data: { playlists: [{ id: string; name: string }] } } =\r\n await axios.put(SPOTIFY_PLAYLISTS_URL, body, {\r\n withCredentials: true,\r\n });\r\n\r\n this.setState({\r\n id: \"\",\r\n highlights: res.data.playlists[0],\r\n });\r\n } catch (err: any) {\r\n if (err.response) {\r\n console.error(err.response!.data);\r\n } else {\r\n console.error(err.message);\r\n }\r\n }\r\n };\r\n\r\n deletePlaylist = async (name: string) => {\r\n try {\r\n await axios.delete(MUSIC_HIGHLIGHTS_URL + \"/\" + name, {\r\n withCredentials: true,\r\n });\r\n\r\n this.state.highlights.name = \"\";\r\n this.setState({});\r\n } catch (err: any) {\r\n if (err.response?.data) {\r\n console.error(err.response!.data);\r\n } else {\r\n console.error(err.message);\r\n }\r\n }\r\n };\r\n\r\n onKeyPress = async (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\") {\r\n await this.updatePlaylist();\r\n }\r\n };\r\n\r\n playlistRow = () => {\r\n return (\r\n
\r\n
\r\n Front-page\r\n
\r\n
\r\n {this.state.highlights.id}\r\n
\r\n
\r\n );\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.setState({ id: e.target.value })}\r\n onKeyPress={this.onKeyPress}\r\n >\r\n
\r\n\r\n \r\n Update\r\n \r\n {this.state.errText ? (\r\n

\r\n {this.state.errText}\r\n

\r\n ) : null}\r\n
\r\n
\r\n
\r\n
Name
\r\n
ID
\r\n
\r\n {this.playlistRow()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ManageSpotify;\r\n","import axios from \"axios\";\r\nimport { EXTEND_SESSION_URL, LOCAL_STORAGE, LOGIN_URL } from \"../config\";\r\n\r\nconst sec = 1_000;\r\nconst minute = sec * 60;\r\n\r\nfunction expires() {\r\n const storage = localStorage.getItem(LOCAL_STORAGE.LOGGED_IN);\r\n if (storage) {\r\n return parseInt(storage);\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nasync function extendSession() {\r\n try {\r\n await axios.get(EXTEND_SESSION_URL, {\r\n withCredentials: true,\r\n });\r\n setLogin(Date.now() + 3600 * 1_000);\r\n } catch (err: any) {\r\n console.error(err);\r\n }\r\n}\r\n\r\nexport function loggedIn() {\r\n const diff = expires() - Date.now();\r\n if (diff > 15 * minute) return true; // return true if there is more than 15 mins of session\r\n if (diff <= 0) return false;\r\n\r\n // extend session if there are less than 15 minutes of session\r\n extendSession();\r\n return true;\r\n}\r\n\r\nexport function setLogin(expires: number) {\r\n localStorage.setItem(LOCAL_STORAGE.LOGGED_IN, expires.toString());\r\n}\r\n\r\ninterface LoginResponse {\r\n username: string;\r\n email: string;\r\n}\r\n\r\nexport async function fetchLogin(username: string, password: string) {\r\n try {\r\n await axios.post(\r\n LOGIN_URL,\r\n {\r\n username,\r\n password,\r\n },\r\n {\r\n withCredentials: true,\r\n }\r\n );\r\n setLogin(Date.now() + 3600 * 1_000);\r\n return {\r\n errMsg: \"\",\r\n };\r\n } catch (err: any) {\r\n if (err.response?.data?.errors) {\r\n return {\r\n errMsg: err.response.data.errors[0].message,\r\n };\r\n }\r\n console.error(err);\r\n return {\r\n errMsg: \"Something went wrong\",\r\n };\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { CURRENT_USER, LOGOUT_URL, UPDATE_USER } from \"../../config\";\r\nimport { setLogin } from \"../../utils/auth\";\r\nimport TextInput from \"./common/TextInput\";\r\nimport sharedStyles from \"./styles/Manage.module.css\";\r\n\r\nfunction ManageUser() {\r\n const [username, setUsername] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [updateUsername, setUpdateUsername] = useState(\"\");\r\n const [updateEmail, setUpdateEmail] = useState(\"\");\r\n const [errText, setErrText] = useState(\"\");\r\n const [successText, setSuccessText] = useState(\"\");\r\n const navigate = useNavigate();\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, []);\r\n\r\n async function fetchData() {\r\n try {\r\n const res = await axios.get<{\r\n currentUser: { username: string; email: string };\r\n }>(CURRENT_USER, { withCredentials: true });\r\n const { username, email } = res.data.currentUser;\r\n setUsername(username);\r\n setEmail(email);\r\n setUpdateUsername(username);\r\n setUpdateEmail(email);\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n async function updateProfile() {\r\n if (username === updateUsername && email === updateEmail) {\r\n setErrText(\"\");\r\n setSuccessText(\"\");\r\n return;\r\n }\r\n\r\n try {\r\n const res = await axios.put<{\r\n updatedUser: { username: string; email: string };\r\n }>(\r\n UPDATE_USER,\r\n {\r\n username: updateUsername,\r\n email: updateEmail,\r\n },\r\n { withCredentials: true }\r\n );\r\n\r\n const updatedUser = res.data.updatedUser;\r\n setUsername(updatedUser.username);\r\n setEmail(updatedUser.email);\r\n setErrText(\"\");\r\n setSuccessText(\"Profile Updated\");\r\n } catch (err: any) {\r\n if (err.response?.data?.errors) {\r\n err.response.data.errors.forEach(({ field }: { field: string }) => {\r\n if (field === \"username\" || field === \"email\") {\r\n setErrText(\"Username/Email cannot be empty\");\r\n setSuccessText(\"\");\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n async function handleKeyPress(e: React.KeyboardEvent) {\r\n if (e.key === \"Enter\") {\r\n await updateProfile();\r\n } else {\r\n setErrText(\"\");\r\n setSuccessText(\"\");\r\n }\r\n }\r\n\r\n async function logout() {\r\n try {\r\n await axios.post(LOGOUT_URL, {\r\n withCredentials: true,\r\n });\r\n setLogin(0);\r\n navigate(\"/login\");\r\n } catch (e: any) {\r\n console.log(e.message);\r\n }\r\n return;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {\r\n setUpdateUsername(e.target.value);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n {\r\n setUpdateEmail(e.target.value);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n \r\n {errText ? (\r\n \r\n {errText}\r\n

\r\n ) : successText ? (\r\n \r\n {successText}\r\n

\r\n ) : null}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default ManageUser;\r\n","import React, { Component } from \"react\";\r\nimport axios from \"axios\";\r\n\r\nimport {\r\n MAIN_VIDEOS,\r\n HIGHLIGHT_VIDEOS,\r\n YOUTUBE_PLAYLISTS_URL,\r\n} from \"../../config\";\r\nimport TextInput from \"./common/TextInput\";\r\n\r\nimport sharedStyles from \"./styles/Manage.module.css\";\r\nimport styles from \"./styles/ManageYoutube.module.css\";\r\n\r\ninterface Playlist {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nclass ManageYoutube extends Component {\r\n state = {\r\n main: {\r\n id: \"\",\r\n name: MAIN_VIDEOS,\r\n },\r\n highlights: {\r\n id: \"\",\r\n name: HIGHLIGHT_VIDEOS,\r\n },\r\n id: \"\",\r\n name: \"\",\r\n hover: \"\",\r\n errText: \"\",\r\n };\r\n\r\n fetchData = async () => {\r\n try {\r\n const res = await axios.get<{ playlists: Playlist[] }>(\r\n YOUTUBE_PLAYLISTS_URL,\r\n {\r\n withCredentials: true,\r\n }\r\n );\r\n\r\n const main = res.data.playlists.filter(\r\n (playlist: Playlist) => playlist.name === MAIN_VIDEOS\r\n );\r\n const highlights = res.data.playlists.filter(\r\n (playlist: Playlist) => playlist.name === HIGHLIGHT_VIDEOS\r\n );\r\n if (main.length === 0 || highlights.length === 0) {\r\n console.error(\"Could not get playlists\");\r\n return;\r\n }\r\n this.setState({ main: main[0], highlights: highlights[0] });\r\n } catch (err) {}\r\n };\r\n\r\n componentDidMount() {\r\n this.fetchData();\r\n }\r\n\r\n updatePlaylist = async () => {\r\n if (!this.state.name) {\r\n return;\r\n }\r\n\r\n if (!this.state.id) {\r\n this.setState({ errText: \"Invalid id/url\" });\r\n return;\r\n }\r\n try {\r\n let body: { newId?: string; newUrl?: string; oldName: string } = {\r\n oldName: this.state.name,\r\n };\r\n if (/.*youtube.com.*/.test(this.state.id)) body.newUrl = this.state.id;\r\n else body.newId = this.state.id;\r\n const res: { data: { playlists: [{ id: string; name: string }] } } =\r\n await axios.put(YOUTUBE_PLAYLISTS_URL, body, {\r\n withCredentials: true,\r\n });\r\n\r\n if (this.state.name === HIGHLIGHT_VIDEOS) {\r\n this.state.highlights.id = res.data.playlists[0].id;\r\n this.setState({ id: \"\", name: \"\" });\r\n }\r\n\r\n if (this.state.name === MAIN_VIDEOS) {\r\n this.state.main.id = res.data.playlists[0].id;\r\n this.setState({ id: \"\", name: \"\" });\r\n }\r\n } catch (err: any) {\r\n console.log(err.response!.data);\r\n }\r\n };\r\n\r\n onKeyPress = async (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\") {\r\n await this.updatePlaylist();\r\n }\r\n };\r\n\r\n selectable = (name: string): React.CSSProperties => {\r\n return {\r\n background: this.state.name === name ? \"rgb(102, 255, 255, 0.65)\" : \"\",\r\n opacity: this.state.hover === name && this.state.name !== name ? 0.5 : 1,\r\n color: this.state.name === name ? \"black\" : \"white\",\r\n boxShadow: this.state.name === name ? \"2px 2px 20px 0px black\" : \"none\",\r\n cursor: this.state.hover === name ? \"pointer\" : \"default\",\r\n };\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n this.setState({ id: e.target.value })}\r\n onKeyPress={this.onKeyPress}\r\n >\r\n \r\n Update\r\n \r\n {this.state.errText ? (\r\n

\r\n {this.state.errText}\r\n

\r\n ) : null}\r\n
\r\n
\r\n
\r\n
\r\n

Name

\r\n

ID

\r\n
\r\n
\r\n this.setState({ name: MAIN_VIDEOS })}\r\n onMouseEnter={() => this.setState({ hover: MAIN_VIDEOS })}\r\n onMouseLeave={() => this.setState({ hover: \"\" })}\r\n style={this.selectable(MAIN_VIDEOS)}\r\n >\r\n
Music-page
\r\n
\r\n

{this.state.main.id}

\r\n
\r\n
\r\n
\r\n
\r\n this.setState({ name: HIGHLIGHT_VIDEOS })}\r\n onMouseEnter={() =>\r\n this.setState({ hover: HIGHLIGHT_VIDEOS })\r\n }\r\n onMouseLeave={() => this.setState({ hover: \"\" })}\r\n style={this.selectable(HIGHLIGHT_VIDEOS)}\r\n >\r\n
Front-page
\r\n
\r\n

{this.state.highlights.id}

\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ManageYoutube;\r\n","import React, { Component } from \"react\";\r\nimport TextInput from \"../common/TextInput\";\r\nimport sharedStyles from \"../styles/Manage.module.css\";\r\nimport styles from \"./styles/AddShow.module.css\";\r\n\r\ninterface AddShowType {\r\n name?: string;\r\n location?: string;\r\n date?: string;\r\n time?: string;\r\n description?: string;\r\n}\r\n\r\nclass AddShow extends Component<\r\n { addShow: (show: AddShowType) => Promise },\r\n {}\r\n> {\r\n state = {\r\n newName: \"\",\r\n newDate: \"\",\r\n newLocation: \"\",\r\n newTime: \"\",\r\n newDescription: \"\",\r\n errText: \"\",\r\n fetchError: null,\r\n };\r\n\r\n addShow = async () => {\r\n try {\r\n const show = {\r\n name: this.state.newName || undefined,\r\n date: this.state.newDate\r\n ? dateHelper(new Date(this.state.newDate)).toISOString()\r\n : undefined,\r\n location: this.state.newLocation || undefined,\r\n time: this.state.newTime || undefined,\r\n description: this.state.newDescription || undefined,\r\n };\r\n await this.props.addShow(show);\r\n this.setState({\r\n newName: \"\",\r\n newDate: \"\",\r\n newLocation: \"\",\r\n newTime: \"\",\r\n newDescription: \"\",\r\n });\r\n } catch (err: any) {\r\n if (err.response?.data?.errors) {\r\n let errText = \"Invalid fields: \";\r\n err.response.data.errors.forEach(({ field }: { field: string }) => {\r\n if (field) {\r\n errText += `\"${field}\" `;\r\n }\r\n });\r\n if (errText !== \"Invalid fields: \") {\r\n this.setState({\r\n errText,\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n handleKeyPress = async (e: React.KeyboardEvent) => {\r\n if (e.key === \"Enter\") {\r\n await this.addShow();\r\n } else {\r\n this.setState({ errText: \"\" });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n

New

\r\n
\r\n ) => {\r\n this.setState({ newName: e.target.value });\r\n }}\r\n onKeyPress={this.handleKeyPress}\r\n />\r\n
\r\n
\r\n ) => {\r\n this.setState({ newDate: e.target.value });\r\n }}\r\n onKeyPress={this.handleKeyPress}\r\n />\r\n
\r\n
\r\n ) => {\r\n this.setState({ newTime: e.target.value });\r\n }}\r\n onKeyPress={this.handleKeyPress}\r\n />\r\n
\r\n
\r\n ) => {\r\n this.setState({ newLocation: e.target.value });\r\n }}\r\n onKeyPress={this.handleKeyPress}\r\n />\r\n
\r\n
\r\n \r\n {this.state.errText ? (\r\n \r\n {this.state.errText}\r\n

\r\n ) : null}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nfunction dateHelper(d: Date) {\r\n d.setHours(d.getHours() + 6);\r\n return d;\r\n}\r\n\r\nexport default AddShow;\r\n","import classNames from \"classnames\";\r\nimport React, { Component } from \"react\";\r\nimport { formatDate } from \"../../../utils/formatter\";\r\nimport styles from \"./styles/ListShows.module.css\";\r\n\r\ninterface Show {\r\n id: number;\r\n name: string;\r\n location: string;\r\n date: string;\r\n time: string;\r\n description: string;\r\n}\r\n\r\ninterface ListShowsProps {\r\n shows: Show[];\r\n deleteShow: (id: number) => Promise;\r\n}\r\n\r\nclass ListShows extends Component {\r\n state = {\r\n hover: -1,\r\n authorized: true,\r\n };\r\n\r\n deleteShow = async (id: number) => {\r\n try {\r\n await this.props.deleteShow(id);\r\n this.setState({ hover: -1 });\r\n } catch (err: any) {}\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Name

\r\n
\r\n
\r\n

Date

\r\n
\r\n
\r\n

Time

\r\n
\r\n
\r\n

Location

\r\n
\r\n
\r\n {this.props.shows.map((s, idx) => {\r\n return (\r\n {\r\n this.setState({ hover: idx });\r\n }}\r\n onMouseLeave={() => {\r\n this.setState({ hover: -1 });\r\n }}\r\n onClick={() => {\r\n this.deleteShow(s.id);\r\n }}\r\n style={{\r\n cursor: this.state.hover === idx ? \"pointer\" : \"default\",\r\n boxShadow:\r\n this.state.hover === idx\r\n ? \"1px 2px 1px 0px black\"\r\n : \"none\",\r\n transition: \"all .02s ease\",\r\n WebkitTransition: \"all .02s ease\",\r\n MozTransition: \"all .02s ease\",\r\n transform:\r\n this.state.hover === idx\r\n ? \"translateX(3px) translateY(3px) scale(1.05)\"\r\n : \"none\",\r\n background:\r\n this.state.hover === idx\r\n ? \"rgb(218, 31, 31)\"\r\n : \"linear-gradient(0.85turn, #252c39, #3c485e)\",\r\n }}\r\n >\r\n
\r\n

{s.name}

\r\n
\r\n
\r\n

{formatDate(s.date)}

\r\n
\r\n
\r\n

{s.time || \"TBA\"}

\r\n
\r\n
\r\n

{s.location || \"TBA\"}

\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ListShows;\r\n","import axios from \"axios\";\r\nimport React, { Component } from \"react\";\r\nimport { SHOWS_URL } from \"../../../config\";\r\nimport AddShow from \"./AddShow\";\r\nimport ListShows from \"./ListShows\";\r\nimport sharedStyles from \"../styles/Manage.module.css\";\r\nimport styles from \"./styles/ManageShows.module.css\";\r\n\r\ninterface Show {\r\n id: number;\r\n name: string;\r\n location: string;\r\n date: string;\r\n time: string;\r\n description: string;\r\n}\r\n\r\ninterface AddShowType {\r\n name?: string;\r\n location?: string;\r\n date?: string;\r\n time?: string;\r\n description?: string;\r\n}\r\n\r\nclass ManageShows extends Component {\r\n state = {\r\n errText: \"\",\r\n fetchError: null,\r\n shows: [] as Show[],\r\n };\r\n\r\n fetchData = async () => {\r\n try {\r\n const res = await axios.get<{\r\n upcomingShows: Show[];\r\n pastShows: Show[];\r\n }>(SHOWS_URL);\r\n const { upcomingShows, pastShows } = res.data;\r\n this.state.shows.push(...upcomingShows, ...pastShows);\r\n this.setState({});\r\n } catch (err: any) {\r\n this.setState({ fetchError: err });\r\n }\r\n };\r\n\r\n async componentDidMount() {\r\n await this.fetchData();\r\n }\r\n\r\n addShow = async (show: AddShowType) => {\r\n try {\r\n const res = await axios.post<{ shows: Show[] }>(SHOWS_URL, show, {\r\n withCredentials: true,\r\n });\r\n if (!(res.data?.shows?.length >= 1)) return;\r\n const added = res.data.shows[0];\r\n this.state.shows.push(added);\r\n this.setState({});\r\n } catch (err: any) {}\r\n };\r\n\r\n deleteShow = async (id: number) => {\r\n try {\r\n await axios.delete(SHOWS_URL + `/${id}`, {\r\n withCredentials: true,\r\n });\r\n } catch (err: any) {}\r\n const shows = this.state.shows.filter((show) => show.id !== id);\r\n this.setState({ shows });\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ManageShows;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport ManageBio from \"../../../components/admin/ManageBio\";\r\nimport ManageSpotify from \"../../../components/admin/ManageSpotify\";\r\nimport ManageUser from \"../../../components/admin/ManageUser\";\r\nimport ManageYoutube from \"../../../components/admin/ManageYoutube\";\r\nimport ManageShows from \"../../../components/admin/shows/ManageShows\";\r\nimport styles from \"./styles/AdminHome.module.css\";\r\n\r\nfunction AdminHome() {\r\n const [selected, setSelected] = useState(\"\");\r\n const userName = \"User Settings\";\r\n const spotifyName = \"Spotify\";\r\n const youtubeName = \"Youtube\";\r\n const showsName = \"Shows\";\r\n const bioName = \"Bio\";\r\n const [opened, setOpened] = useState(<>);\r\n\r\n useEffect(() => {\r\n let opened: JSX.Element;\r\n if (selected === userName) opened = ;\r\n else if (selected === bioName) opened = ;\r\n else if (selected === showsName) opened = ;\r\n else if (selected === youtubeName) opened = ;\r\n else if (selected === spotifyName) opened = ;\r\n else opened =
;\r\n setOpened(opened);\r\n }, [selected]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
{opened}
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\ninterface MenuElementProps {\r\n name: string;\r\n setSelected: (selected: string) => void;\r\n selected: string; // not clicked, but selected\r\n}\r\n\r\nfunction MenuElement(props: MenuElementProps) {\r\n const [mouseDown, setMouseDown] = useState(false);\r\n const [hover, setHover] = useState(false);\r\n\r\n function onMouseDown(e: React.MouseEvent) {\r\n setMouseDown(true);\r\n props.setSelected(props.name);\r\n document.onmouseup = onMouseUp;\r\n }\r\n\r\n function onMouseUp() {\r\n document.onmouseup = null;\r\n }\r\n\r\n function isSelected() {\r\n return props.selected === props.name;\r\n }\r\n\r\n // styles\r\n const inputStyle: React.CSSProperties = {\r\n color: isSelected() ? (mouseDown ? \"#66ffff\" : \"#44dddd\") : \"black\",\r\n cursor: hover ? \"pointer\" : \"default\",\r\n transition: \"all .05s ease\",\r\n WebkitTransition: \"all .05s ease\",\r\n MozTransition: \"all .05s ease\",\r\n };\r\n\r\n const inputOverlay: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n background: hover ? (mouseDown ? \"#bfbfbf\" : \"#bbb\") : \"none\",\r\n zIndex: -1,\r\n transition: \"all .05s ease\",\r\n WebkitTransition: \"all .05s ease\",\r\n MozTransition: \"all .05s ease\",\r\n borderRadius: \"5px\",\r\n };\r\n\r\n return (\r\n
\r\n setHover(false)}\r\n onMouseEnter={() => setHover(true)}\r\n onMouseDown={onMouseDown}\r\n onMouseUp={onMouseUp}\r\n />\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AdminHome;\r\n","export default __webpack_public_path__ + \"static/media/logo_black.6abb0fc8.png\";","import classNames from \"classnames\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport logo from \"../../../assets/logo_black.png\";\r\nimport { fetchLogin, loggedIn } from \"../../../utils/auth\";\r\nimport styles from \"./styles/Login.module.css\";\r\n\r\nfunction Login() {\r\n const [username, setUsername] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [errMsg, setErrMsg] = useState(\"\");\r\n const navigate = useNavigate();\r\n\r\n async function loggedInEffect() {\r\n if (await loggedIn()) {\r\n navigate(\"/admin\");\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n loggedInEffect();\r\n });\r\n\r\n async function login() {\r\n const res = await fetchLogin(username, password);\r\n if (res.errMsg === \"\") {\r\n navigate(\"/admin\");\r\n } else {\r\n setErrMsg(res.errMsg);\r\n }\r\n }\r\n\r\n async function handleKeyPress(e: React.KeyboardEvent) {\r\n if (e.key === \"Enter\") {\r\n await login();\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"Logo\"\r\n
\r\n
\r\n
\r\n

Admin page

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Authorized

\r\n

personnel only

\r\n
\r\n
\r\n {\r\n setUsername(e.target.value);\r\n }}\r\n />\r\n {\r\n setPassword(e.target.value);\r\n }}\r\n />\r\n {errMsg ?

{errMsg}

: null}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Login;\r\n","import { useEffect } from \"react\";\r\nimport { NavigateFunction, useNavigate } from \"react-router-dom\";\r\nimport { loggedIn } from \"../../utils/auth\";\r\n\r\nvar checkLoginHandler = function (nav: NavigateFunction) {\r\n var handler = async function () {\r\n const logged = await loggedIn();\r\n if (!logged) {\r\n nav(\"/login\");\r\n }\r\n };\r\n return handler;\r\n};\r\n\r\ninterface PrivateRouteProps {\r\n children: JSX.Element;\r\n}\r\n\r\nfunction PrivateRoute(props: PrivateRouteProps) {\r\n const navigate = useNavigate();\r\n\r\n useEffect(() => {\r\n var checkLogin = checkLoginHandler(navigate);\r\n checkLogin();\r\n });\r\n\r\n useEffect(() => {\r\n var checkLogin = checkLoginHandler(navigate);\r\n document.addEventListener(\"mousedown\", checkLogin, true);\r\n document.addEventListener(\"keypress\", checkLogin, true);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", checkLogin, true);\r\n document.removeEventListener(\"keypress\", checkLogin, true);\r\n };\r\n });\r\n\r\n return props.children;\r\n}\r\n\r\nexport default PrivateRoute;\r\n","import React, { Component } from \"react\";\r\n\r\nexport interface IconProps {\r\n src: string;\r\n href: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass IconBase extends Component {\r\n componentStyle: React.CSSProperties;\r\n src: string;\r\n href: string;\r\n state: {\r\n hover: boolean;\r\n };\r\n\r\n constructor(props: IconProps) {\r\n super(props);\r\n this.componentStyle = {\r\n ...this.props.style,\r\n };\r\n this.src = this.props.src || \"\";\r\n this.href = this.props.href || \"\";\r\n this.state = {\r\n hover: false,\r\n };\r\n }\r\n\r\n iconWrapper: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n };\r\n\r\n linkStyle: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n zIndex: 1,\r\n };\r\n\r\n iconStyle = (): React.CSSProperties => {\r\n return {\r\n ...this.linkStyle,\r\n zIndex: 0,\r\n opacity: this.state.hover ? 0.8 : 1,\r\n transition: this.state.hover ? \"opacity 0.05s\" : \"opacity 0.02s\",\r\n };\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n this.setState({ hover: true })}\r\n onMouseLeave={() => this.setState({ hover: false })}\r\n >\r\n {\"\"}\r\n \r\n \"Facebook\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default IconBase;\r\n","import React, { Component } from \"react\";\r\nimport facebookWhite from \"../../../assets/Facebook_White.png\";\r\nimport IconBase from \"./IconBase\";\r\n\r\nconst FACEBOOK_LINK = \"https://www.facebook.com/tctrio\";\r\n\r\ninterface FacebookProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass FacebookIcon extends Component {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FacebookIcon;\r\n","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/Spotify_White.ecd54051.png\";","import React, { Component } from \"react\";\r\n\r\nimport spotifyWhite from \"../../../assets/Spotify_White.png\";\r\nimport IconBase from \"./IconBase\";\r\n\r\nconst SPOTIFY_LINK =\r\n \"https://open.spotify.com/artist/63GbQYzf0EbxtI9D23IdrU?si=kLVHVQ3ISASnn7MB7mSvcA&dl_branch=1\";\r\n\r\ninterface SpotifyProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass SpotifyIcon extends Component {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SpotifyIcon;\r\n","export default __webpack_public_path__ + \"static/media/Instagram_Black.aaa207e2.png\";","import React, { Component } from \"react\";\r\n\r\nimport instagramBlack from \"../../../assets/Instagram_Black.png\";\r\nimport IconBase from \"./IconBase\";\r\n\r\nconst INSTAGRAM_LINK = \"https://www.instagram.com/tctrio\";\r\n\r\ninterface InstagramProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass InstagramIcon extends Component {\r\n state = {\r\n hover: false,\r\n };\r\n\r\n constructor(props: InstagramProps) {\r\n super(props);\r\n\r\n this.mouseIn = this.mouseIn.bind(this);\r\n this.mouseOut = this.mouseOut.bind(this);\r\n }\r\n\r\n mouseIn = () => {\r\n this.setState({ hover: true });\r\n };\r\n\r\n mouseOut = () => {\r\n this.setState({ hover: false });\r\n };\r\n\r\n wrapperStyle = (): React.CSSProperties => {\r\n return {\r\n background: this.state.hover ? \"#d1d3d6\" : \"white\",\r\n borderRadius: \"35%\",\r\n transition: this.state.hover ? \"opacity 0.05s\" : \"opacity 0.02s\",\r\n };\r\n };\r\n\r\n iconStyle: React.CSSProperties = {\r\n ...this.props.style,\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default InstagramIcon;\r\n","import React, { Component } from \"react\";\r\n\r\nimport twitterWhite from \"../../../assets/Twitter_White_Circle.png\";\r\nimport IconBase from \"./IconBase\";\r\n\r\nconst TWITTER_LINK = \"https://twitter.com/tctrio\";\r\n\r\ninterface TwitterProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass TwitterIcon extends Component {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TwitterIcon;\r\n","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/sig_white.03d83b01.png\";","export interface Page {\r\n name: string;\r\n endpoint: string;\r\n}\r\n\r\nexport const PAGES: Page[] = [\r\n {\r\n name: \"Home\",\r\n endpoint: \"/\",\r\n },\r\n {\r\n name: \"Music\",\r\n endpoint: \"/music\",\r\n },\r\n {\r\n name: \"About\",\r\n endpoint: \"/about\",\r\n },\r\n {\r\n name: \"Contact\",\r\n endpoint: \"/contact\",\r\n },\r\n];\r\n","import classNames from \"classnames\";\r\nimport React, { useState } from \"react\";\r\n// @ts-ignore\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport FacebookIcon from \"../other/socials/FacebookIcon\";\r\nimport SpotifyIcon from \"../other/socials/SpotifyIcon\";\r\nimport InstagramIcon from \"../other/socials/InstagramIcon\";\r\nimport TwitterIcon from \"../other/socials/TwitterIcon\";\r\nimport whiteSig from \"../../assets/sig_white.png\";\r\nimport { PAGES, Page } from \"../../pages/index\";\r\n\r\nfunction NavbarDesktop() {\r\n const navigate = useNavigate();\r\n\r\n const componentStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"var(--menu-height)\",\r\n backgroundColor: \"var(--primary-color)\",\r\n zIndex: 1,\r\n overflowY: \"hidden\",\r\n };\r\n\r\n const menuStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n };\r\n\r\n const imageWrapper: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"var(--menu-height)\",\r\n width: \"calc(1200 / 675 * 80px)\",\r\n cursor: \"pointer\",\r\n };\r\n\r\n const imageStyle: React.CSSProperties = {\r\n position: \"absolute\",\r\n height: \"80px\",\r\n width: \"calc(1200 / 675 * 80px)\",\r\n top: \"-9px\",\r\n left: \"0px\",\r\n };\r\n\r\n const right: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n right: \"0px\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n };\r\n\r\n const socialList: React.CSSProperties = {\r\n margin: \"auto 0px\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n };\r\n\r\n const liIconStyle: React.CSSProperties = {\r\n listStyle: \"none\",\r\n padding: \"0rem 0.5rem\",\r\n };\r\n\r\n const iconStyle: React.CSSProperties = {\r\n height: \"calc(var(--menu-height) / 2)\",\r\n width: \"calc(var(--menu-height) / 2)\",\r\n };\r\n\r\n const navList: React.CSSProperties = {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n height: \"var(--menu-height)\",\r\n lineHeight: \"var(--menu-height)\",\r\n };\r\n\r\n const liStyle: React.CSSProperties = {\r\n listStyle: \"none\",\r\n padding: \"0rem 0.9rem\",\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
navigate(\"/\")}>\r\n \"Tyler's\r\n
\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n
    \r\n {PAGES.map((page: Page) => {\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\ninterface NavLinkProps {\r\n page: Page;\r\n}\r\n\r\nfunction NavLink({ page }: NavLinkProps) {\r\n const [hover, setHover] = useState(false);\r\n const navigate = useNavigate();\r\n\r\n function selected() {\r\n return document.location.pathname === page.endpoint;\r\n }\r\n\r\n // style\r\n const linkStyle: React.CSSProperties = {\r\n fontSize: \"1.4rem\",\r\n fontFamily: \"var(--header-font)\",\r\n color: selected() ? \"var(--vice-blue)\" : \"var(--white-color)\",\r\n opacity: hover ? 0.8 : 1,\r\n transition: hover ? \"opacity 0.05s\" : \"opacity 0.02s\",\r\n cursor: hover ? \"pointer\" : \"default\",\r\n };\r\n\r\n return (\r\n setHover(true)}\r\n onMouseLeave={() => setHover(false)}\r\n onMouseDown={() => navigate(page.endpoint)}\r\n >\r\n {page.name}\r\n \r\n );\r\n}\r\n\r\nexport default NavbarDesktop;\r\n","import React, { useState } from \"react\";\r\n// @ts-ignore\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport whiteSig from \"../../assets/sig_white.png\";\r\nimport { PAGES, Page } from \"../../pages/index\";\r\n\r\nfunction NavbarMobile() {\r\n const [open, setOpen] = useState(false);\r\n\r\n function toggleOpen() {\r\n setOpen(!open);\r\n }\r\n\r\n /* Common component class for navbar */\r\n const component: React.CSSProperties = {\r\n position: \"fixed\",\r\n width: \"100%\",\r\n height: \"var(--menu-height)\",\r\n background: \"var(--primary-color)\",\r\n zIndex: 1,\r\n };\r\n\r\n /* The logo on the nav bar */\r\n const signature: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"-13px\",\r\n left: \"10px\",\r\n maxHeight: \"100px\",\r\n maxWidth: \"150px\",\r\n\r\n opacity: open ? 0 : 1,\r\n transition: open ? \"opacity 0.4s ease\" : \"opacity 0.1s ease 0.1s\",\r\n };\r\n\r\n /* Menu (in the navbar for desktop) */\r\n const menuLinks: React.CSSProperties = {\r\n textAlign: \"center\",\r\n color: \"white\",\r\n transition: open ? \"opacity 0.4s ease 0.4s\" : \"opacity 0.4s ease\",\r\n opacity: open ? 1 : 0,\r\n };\r\n\r\n const liStyle: React.CSSProperties = {\r\n listStyle: \"none\",\r\n };\r\n\r\n /* The invisible toggle button */\r\n const toggler: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"10px\",\r\n right: \"30px\",\r\n zIndex: 2,\r\n cursor: \"pointer\",\r\n width: \"calc(var(--menu-height) - 20px)\",\r\n height: \"calc(var(--menu-height) - 10px)\",\r\n opacity: 0,\r\n };\r\n\r\n /* Visual for the hamburger menu (contains the lines) */\r\n const hamburger: React.CSSProperties = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n visibility: \"visible\",\r\n position: \"absolute\",\r\n top: \"5.5px\",\r\n right: \"30px\",\r\n width: \"40px\",\r\n height: \"50px\",\r\n zIndex: 1,\r\n };\r\n\r\n /* The middle hamburger line */\r\n const lines: React.CSSProperties = {\r\n visibility: \"visible\",\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"2px\",\r\n background: \"white\",\r\n transition: \"all 0.4s ease\",\r\n transform: open ? \"rotate(135deg)\" : \"\",\r\n };\r\n\r\n const topHamburger: React.CSSProperties = {\r\n content: \"\",\r\n position: \"absolute\",\r\n top: open ? \"0px\" : \"-10px\",\r\n width: \"100%\",\r\n height: \"2px\",\r\n background: \"white\",\r\n transition: \"all 0.4s ease\",\r\n transform: open ? \"rotate(90deg)\" : \"\",\r\n };\r\n\r\n const bottomHamburger: React.CSSProperties = {\r\n ...topHamburger,\r\n top: open ? \"0px\" : \"10px\",\r\n };\r\n const overlay: React.CSSProperties = {\r\n position: \"fixed\",\r\n top: \"0px\",\r\n right: \"0px\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n visibility: open ? \"visible\" : \"hidden\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n };\r\n\r\n /* The screen overlay when the menu is opened (mobile) */\r\n const circle: React.CSSProperties = {\r\n background: \"var(--primary-color)\",\r\n borderRadius: \"50%\",\r\n minWidth: \"200vh\",\r\n height: \"200vh\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n transform: open ? \"scale(1)\" : \"scale(0)\",\r\n transition: open ? \"all var(--menu-speed) ease\" : \"all 0s ease\",\r\n };\r\n\r\n const circleSignature: React.CSSProperties = {\r\n position: \"relative\",\r\n maxHeight: \"15%\",\r\n maxWidth: \"15%\",\r\n opacity: open ? 1 : 0,\r\n transition: open ? \"opacity 0.4s ease 0.4s\" : \"opacity 0.4s ease\",\r\n marginBottom: \"20px\",\r\n };\r\n\r\n const whiteLine: React.CSSProperties = {\r\n width: \"50vw\",\r\n height: \"1px\",\r\n backgroundColor: \"white\",\r\n opacity: 0.32,\r\n margin: \"10px 0px\",\r\n };\r\n\r\n const space: React.CSSProperties = {\r\n height: \"var(--header-height)\",\r\n width: \"100%\",\r\n };\r\n\r\n return (\r\n
\r\n \r\n \"Tyler's\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"Tyler's\r\n
 
\r\n
    \r\n {PAGES.map((page: Page, idx) => {\r\n return (\r\n
  • \r\n setOpen(false)} />\r\n {idx !== PAGES.length - 1 ?
    : null}\r\n
  • \r\n );\r\n })}\r\n
\r\n
 
\r\n
 
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\ninterface NavLinkProps {\r\n page: Page;\r\n onClick: () => void;\r\n}\r\n\r\nfunction NavLink(props: NavLinkProps) {\r\n const [hover, setHover] = useState(false);\r\n const navigate = useNavigate();\r\n\r\n function onClick() {\r\n props.onClick();\r\n navigate(props.page.endpoint);\r\n }\r\n\r\n function selected() {\r\n return document.location.pathname === props.page.endpoint;\r\n }\r\n\r\n const linkStyle: React.CSSProperties = {\r\n fontFamily: \"var(--header-font)\",\r\n fontSize: \"1.6rem\",\r\n transition: \"color 0.4s ease\",\r\n opacity: hover ? 0.5 : 1,\r\n padding: \"1rem\",\r\n cursor: \"pointer\",\r\n color: selected() ? \"var(--vice-blue)\" : \"var(--white-color)\",\r\n };\r\n\r\n return (\r\n setHover(true)}\r\n onMouseLeave={() => setHover(false)}\r\n >\r\n {props.page.name.toUpperCase()}\r\n
\r\n );\r\n}\r\n\r\nexport default NavbarMobile;\r\n","const COOKIE_TIMER = \"timer\";\r\n\r\n// get a timer to check if the user should be warned about cookie usage\r\nexport function shouldShowCookie() {\r\n const timerStr = localStorage.getItem(COOKIE_TIMER);\r\n if (!timerStr) return true;\r\n try {\r\n const timer = parseInt(timerStr);\r\n if (timer > Date.now()) return false;\r\n } catch (err: any) {\r\n localStorage.setItem(COOKIE_TIMER, \"\");\r\n return true;\r\n }\r\n}\r\n\r\nexport function setCookieTimer(timer: number) {\r\n localStorage.setItem(COOKIE_TIMER, timer.toString());\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { Outlet } from \"react-router-dom\";\r\nimport logoBlack from \"../assets/logo_black.png\";\r\nimport NavbarDesktop from \"../components/Navbar/NavbarDesktop\";\r\nimport NavbarMobile from \"../components/Navbar/NavbarMobile\";\r\nimport { Desktop, Mobile } from \"../components/other/Responsive\";\r\nimport { setCookieTimer, shouldShowCookie } from \"../utils/cookieInfo\";\r\n\r\nfunction Body() {\r\n const [showCookies, setShowCookies] = useState(false);\r\n\r\n useEffect(() => {\r\n if (shouldShowCookie()) {\r\n setCookieTimer(Date.now() + 3600);\r\n setShowCookies(true);\r\n }\r\n }, []);\r\n\r\n const componentStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n };\r\n const contents: React.CSSProperties = {\r\n position: \"relative\",\r\n minHeight: \"calc(100vh - var(--menu-height))\",\r\n width: \"100%\",\r\n background: \"none\",\r\n paddingTop: useMediaQuery({ minWidth: 650 }) ? \"0px\" : \"var(--menu-height)\",\r\n zIndex: 0,\r\n };\r\n\r\n const overlayWrapper: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n overflowX: \"hidden\",\r\n overflowY: \"hidden\",\r\n mixBlendMode: \"difference\",\r\n background:\r\n \"linear-gradient(0.3turn, var(--white-color), var(--bwite-color))\",\r\n zIndex: -1,\r\n };\r\n\r\n const overlay: React.CSSProperties = {\r\n position: \"absolute\",\r\n display: \"block\",\r\n backgroundImage: `url(${logoBlack})`,\r\n backgroundSize: \"33%\",\r\n opacity: 0.03,\r\n transform: \"rotate(5deg)\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n };\r\n\r\n const cookieBar: React.CSSProperties = {\r\n display: showCookies ? \"flex\" : \"none\",\r\n position: \"fixed\",\r\n bottom: \"0px\",\r\n left: \"0px\",\r\n width: \"100%\",\r\n background: \"var(--grey-gradient)\",\r\n fontFamily: \"var(--alternate-font)\",\r\n minHeight: \"84px\",\r\n alignItems: \"center\",\r\n };\r\n\r\n const container: React.CSSProperties = {\r\n width: \"100%\",\r\n maxWidth: \"1080px\",\r\n margin: \"0px auto\",\r\n height: \"100%\",\r\n };\r\n\r\n const innerContainer: React.CSSProperties = {\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexDirection: useMediaQuery({ minWidth: 650 }) ? \"row\" : \"column\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n height: \"100%\",\r\n };\r\n\r\n const cookieInfo: React.CSSProperties = {\r\n maxWidth: \"800px\",\r\n margin: useMediaQuery({ minWidth: 650 }) ? \"20px\" : \"20px 20px 0px 20px\",\r\n color: \"white\",\r\n };\r\n\r\n const buttonWrapper: React.CSSProperties = {\r\n margin: \"auto 0px\",\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n This site uses browser cookies to mange browser experience and to\r\n measure its audience. By continuing to use this website or\r\n clicking on \"Accept & Close\", you consent to the use of cookies on\r\n this site.\r\n
\r\n
\r\n setShowCookies(false)} />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\ninterface CookieButtonProps {\r\n mouseDown: () => void;\r\n}\r\n\r\nfunction CookieButton(props: CookieButtonProps) {\r\n const [hover, setHover] = useState(false);\r\n const [selected, setSelected] = useState(false);\r\n\r\n function mousedown() {\r\n setSelected(true);\r\n document.onmouseup = () => {\r\n props.mouseDown();\r\n setSelected(false);\r\n };\r\n }\r\n\r\n const button: React.CSSProperties = {\r\n color: \"white\",\r\n background: selected\r\n ? \"#27324b\"\r\n : hover\r\n ? \"#1f283b\"\r\n : \"var(--primary-color)\",\r\n fontSize: \"1.1rem\",\r\n fontWeight: \"lighter\",\r\n padding: \"10px 20px\",\r\n margin: \"10px 20px\",\r\n border: \"solid 1px rgb(255, 255, 255, 0.15)\",\r\n cursor: \"pointer\",\r\n };\r\n\r\n return (\r\n setHover(true)}\r\n onMouseLeave={() => setHover(false)}\r\n onMouseDown={mousedown}\r\n />\r\n );\r\n}\r\n\r\nexport default Body;\r\n","import axios from \"axios\";\r\nimport React, { useState } from \"react\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { CONTACT_URL } from \"../../config\";\r\n\r\nconst SUCCESS_MESSAGE = \"Form submitted successfully\";\r\n\r\nfunction BookingForm() {\r\n const [name, setName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [venue, setVenue] = useState(\"\");\r\n const [comment, setComment] = useState(\"\");\r\n const [hover, setHover] = useState(false);\r\n const [status, setStatus] = useState(\"\");\r\n\r\n const isDesktop = useMediaQuery({ query: \"(min-width: 650px)\" });\r\n\r\n async function sendForm() {\r\n try {\r\n await axios.post(CONTACT_URL, { name, email, venue, comment });\r\n setName(\"\");\r\n setEmail(\"\");\r\n setVenue(\"\");\r\n setComment(\"\");\r\n setStatus(SUCCESS_MESSAGE);\r\n } catch (err: any) {\r\n if (err.response?.data?.errors) {\r\n console.error(err.response.data.errors);\r\n setStatus(err.response.data.errors[0].message);\r\n } else {\r\n console.error(err);\r\n setStatus(\"Something went wrong. Please send booking requests to Booking@tylercochrantrio.com\");\r\n }\r\n }\r\n }\r\n\r\n // styles\r\n const component: React.CSSProperties = {\r\n position: \"relative\",\r\n };\r\n\r\n const form: React.CSSProperties = {\r\n margin: \"auto\",\r\n width: \"75%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n };\r\n\r\n const box: React.CSSProperties = {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: isDesktop ? \"row\" : \"column\",\r\n margin: isDesktop ? undefined : \"10px 0px\",\r\n padding: isDesktop ? \"10px 5px\" : \"0px\",\r\n alignItems: isDesktop ? undefined : \"center\",\r\n justifyContent: \"center\",\r\n };\r\n\r\n const row: React.CSSProperties = {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: isDesktop ? \"row\" : \"column\",\r\n margin: isDesktop ? undefined : \"0px\",\r\n padding: isDesktop ? \"10px 5px\" : \"0px\",\r\n alignItems: isDesktop ? undefined : \"center\",\r\n justifyContent: \"space-between\",\r\n };\r\n\r\n const pairMember: React.CSSProperties = {\r\n width: isDesktop ? \"48%\" : \"100%\",\r\n margin: isDesktop ? undefined : \"0px\",\r\n padding: isDesktop ? undefined : \"0px\",\r\n };\r\n\r\n const lineInput: React.CSSProperties = {\r\n width: \"100%\",\r\n margin: isDesktop ? undefined : \"10px 0px\",\r\n };\r\n\r\n const textInput: React.CSSProperties = {\r\n fontFamily: \"var(--alternate-font)\",\r\n fontSize: \"1rem\",\r\n lineHeight: \"2rem\",\r\n padding: \"5px 13px\",\r\n width: \"100%\",\r\n };\r\n\r\n const commentBox: React.CSSProperties = {\r\n fontFamily: \"var(--alternate-font)\",\r\n fontSize: \"1rem\",\r\n lineHeight: \"2rem\",\r\n padding: \"5px 13px\",\r\n width: \"100%\",\r\n minHeight: \" 250px\",\r\n resize: \"none\",\r\n };\r\n\r\n const button = (): React.CSSProperties => ({\r\n fontFamily: \"var(--alternate-font)\",\r\n fontSize: \"1rem\",\r\n lineHeight: \"2rem\",\r\n width: \"30%\",\r\n minWidth: \"122px\",\r\n background: \"var(--primary-color)\",\r\n color: \"var(--white-color)\",\r\n cursor: hover ? \"pointer\" : \"\",\r\n opacity: hover ? 0.9 : 1,\r\n });\r\n\r\n const statusDiv: React.CSSProperties = {\r\n color: status === SUCCESS_MESSAGE ? \"var(--selected-color)\" : \"red\",\r\n display: status === \"\" ? \"none\" : \"\",\r\n width: \"75%\",\r\n fontFamily: \"var(--alternate-font)\",\r\n margin: \"auto\",\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n setName(e.target.value)}\r\n placeholder=\"Name..\"\r\n />\r\n
\r\n
\r\n
\r\n
\r\n setEmail(e.target.value)}\r\n placeholder=\"Email...\"\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n setVenue(e.target.value)}\r\n placeholder=\"Venue (Optional)...\"\r\n />\r\n
\r\n
\r\n
\r\n setComment(e.target.value)}\r\n placeholder=\"Comment...\"\r\n >\r\n
\r\n
\r\n setHover(true)}\r\n onMouseLeave={() => setHover(false)}\r\n onClick={sendForm}\r\n />\r\n
\r\n
\r\n
{status}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default BookingForm;\r\n","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/Twitter_Black.9685c410.png\";","import classNames from \"classnames\";\r\nimport React, { Component } from \"react\";\r\nimport facebookBlack from \"../../assets/Facebook_Black.png\";\r\nimport instagramBlack from \"../../assets/Instagram_Black.png\";\r\nimport twitterBlack from \"../../assets/Twitter_Black.png\";\r\nimport { FACEBOOK, INSTAGRAM, TWITTER } from \"../../config\";\r\nimport styles from \"./styles/SocialsBar.module.css\";\r\n\r\nclass SocialsBar extends Component {\r\n state = {\r\n socials: [\r\n {\r\n name: \"facebook\",\r\n img: facebookBlack,\r\n url: FACEBOOK,\r\n at: \"@tctrio\",\r\n },\r\n {\r\n name: \"instagram\",\r\n img: instagramBlack,\r\n url: INSTAGRAM,\r\n at: \"@tctrio\",\r\n },\r\n {\r\n name: \"twitter\",\r\n img: twitterBlack,\r\n url: TWITTER,\r\n at: \"@tctrio\",\r\n },\r\n ],\r\n };\r\n\r\n socials = () => {\r\n return this.state.socials.map(({ name, img, url, at }) => {\r\n return (\r\n
  • \r\n
    \r\n {`${name}\r\n \r\n {\"\"}\r\n \r\n
    \r\n
  • \r\n );\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Or message me @tctrio

    \r\n
    \r\n
    \r\n
      {this.socials()}
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default SocialsBar;\r\n","import React, { Component } from \"react\";\r\nimport CustomHeader from \"../../components/CustomHeader\";\r\nimport BookingForm from \"../../components/contact/BookingForm\";\r\nimport SocialsBar from \"../../components/contact/SocialsBar\";\r\n\r\nimport { pageview } from \"react-ga\";\r\n\r\nclass Contact extends Component {\r\n componentDidMount() {\r\n pageview(window.location.pathname);\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n componentStyle: React.CSSProperties = {\r\n minHeight: \"calc(100vh - var(--menu-height))\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n };\r\n\r\n contentStyle: React.CSSProperties = {\r\n marginBottom: \"20px\",\r\n };\r\n\r\n socialsBar: React.CSSProperties = {};\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Contact;\r\n","export default __webpack_public_path__ + \"static/media/loading.b5759769.png\";","export default __webpack_public_path__ + \"static/media/tyler_wall.d0b9a17b.jpg\";","import React, { Component } from \"react\";\r\n\r\ninterface DropdownProps {\r\n label: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass Dropdown extends Component {\r\n componentStyle: React.CSSProperties;\r\n label: string;\r\n state: { hover: boolean };\r\n\r\n constructor(props: DropdownProps) {\r\n super(props);\r\n this.componentStyle = {\r\n ...props.style,\r\n };\r\n this.label = props.label;\r\n this.state = { hover: false };\r\n }\r\n\r\n onEnter = () => {\r\n this.setState({ hover: true });\r\n };\r\n\r\n onLeave = () => {\r\n this.setState({ hover: false });\r\n };\r\n\r\n contentDiv: React.CSSProperties = {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n };\r\n\r\n labelStyle = (): React.CSSProperties => {\r\n return {\r\n padding: \"10px 20px\",\r\n fontFamily: this.state.hover ? \"var(--body-font)\" : \"var(--header-font)\",\r\n fontSize: this.state.hover ? \"1.95rem\" : \"1.8rem\",\r\n cursor: \"default\",\r\n color: this.state.hover ? \"gold\" : \"white\",\r\n textShadow: \"4px 4px 30px black\",\r\n };\r\n };\r\n\r\n dropdown = (): React.CSSProperties => {\r\n return {\r\n height: this.state.hover ? \"100%\" : \"0px\",\r\n transition: this.state.hover\r\n ? \"height 0.3s ease-in\"\r\n : \"all 0.01s ease-out\",\r\n overflow: \"hidden\",\r\n };\r\n };\r\n\r\n arrowBox = (): React.CSSProperties => ({\r\n position: \"relative\",\r\n width: \"30px\",\r\n height: \"20px\",\r\n // background: \"red\",\r\n margin: \"auto\",\r\n });\r\n\r\n leftArrow = (n: number): React.CSSProperties => ({\r\n position: \"absolute\",\r\n top: `calc(50% + ${n}px)`,\r\n left: \"3px\",\r\n\r\n height: this.state.hover ? \"1px\" : \"2px\",\r\n width: `calc(${Math.sqrt(3) / 2} * 50%)`,\r\n background: this.state.hover ? \"gold\" : \"white\",\r\n boxShadow: \"0px 1px 5px 0px black\",\r\n transform: \"rotate(30deg)\",\r\n });\r\n\r\n rightArrow = (n: number): React.CSSProperties => ({\r\n position: \"absolute\",\r\n top: `calc(50% + ${n}px)`,\r\n right: \"3px\",\r\n\r\n height: this.state.hover ? \"1px\" : \"2px\",\r\n width: `calc(${Math.sqrt(3) / 2} * 50%)`,\r\n background: this.state.hover ? \"gold\" : \"white\",\r\n boxShadow: \"0px 1px 5px 0px black\",\r\n transform: \"rotate(-30deg)\",\r\n });\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n \r\n {this.label}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {this.props.children}\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Dropdown;\r\n","export default __webpack_public_path__ + \"static/media/Spotify_Green.cd66b8f6.png\";","import React, { Component } from \"react\";\r\n\r\n// import spotifyLogo from \"../../assets/Spotify_Logo_Green.png\";\r\nimport spotifyLogo from \"../../assets/Spotify_Green.png\";\r\nimport styles from \"./styles/SpotifyLink.module.css\";\r\n\r\nclass SpotifyLink extends Component<{ url: string }, {}> {\r\n render() {\r\n return (\r\n
    \r\n \"Spotify\r\n \r\n {\"\"}\r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default SpotifyLink;\r\n","import { faPauseCircle, faPlayCircle } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport React, { Component } from \"react\";\r\nimport { Track } from \"../../types/spotify\";\r\nimport SpotifyLink from \"./SpotifyLink\";\r\n\r\ninterface SpotifySongProps {\r\n track: Track;\r\n play: (src: string) => Promise;\r\n pause: () => void;\r\n playing: boolean;\r\n name: string;\r\n}\r\n\r\nconst IMAGE_DIAMETER = 85;\r\nconst ROW_PAD = 10;\r\nconst BUTTON_DIAMETER = 48;\r\n\r\nclass SpotifySong extends Component {\r\n state = {\r\n hover: false,\r\n clicking: false,\r\n };\r\n\r\n hover = () => this.setState({ hover: true });\r\n notHover = () => this.setState({ hover: false });\r\n\r\n infoDesktop = () => {\r\n return (\r\n
    \r\n

    {this.props.track.name.toUpperCase()}

    \r\n

    {this.props.track.album.releaseDate}

    \r\n
    \r\n );\r\n };\r\n\r\n component: React.CSSProperties = {\r\n width: \"100%\",\r\n height: `${IMAGE_DIAMETER + 2 * ROW_PAD}px`,\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n };\r\n\r\n hoverable: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n padding: `${ROW_PAD}px 17px`,\r\n background: \"none\",\r\n };\r\n\r\n whiteBackground = (): React.CSSProperties => {\r\n return {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n background: \"white\",\r\n opacity: this.state.hover ? 0.05 : 0,\r\n };\r\n };\r\n\r\n playMouseDown = () => {\r\n document.onmouseup = this.playMouseUp;\r\n this.setState({ clicking: true });\r\n };\r\n\r\n playMouseUp = async () => {\r\n document.onmouseup = null;\r\n await this.togglePlay();\r\n };\r\n\r\n togglePlay = async () => {\r\n if (this.props.playing) this.pause();\r\n else await this.play();\r\n };\r\n\r\n play = async () => {\r\n await this.props.play(this.props.track.previewUrl);\r\n this.setState({ clicking: false });\r\n };\r\n\r\n pause = () => {\r\n this.props.pause();\r\n this.setState({ clicking: false });\r\n };\r\n\r\n mainBackground: React.CSSProperties = {\r\n position: \"relative\",\r\n };\r\n\r\n displayRow: React.CSSProperties = {\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n };\r\n\r\n imageNameDiv: React.CSSProperties = {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"space-between\",\r\n };\r\n\r\n imageDiv: React.CSSProperties = {\r\n width: IMAGE_DIAMETER + \"px\",\r\n height: IMAGE_DIAMETER + \"px\",\r\n minWidth: IMAGE_DIAMETER + \"px\",\r\n minHeight: IMAGE_DIAMETER + \"px\",\r\n };\r\n\r\n image: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n // border: \"solid 1px rgb(0,0,0,0)\",\r\n boxShadow: \"2px 2px 10px 0px black\",\r\n };\r\n\r\n nameLinkDiv: React.CSSProperties = {\r\n position: \"relative\",\r\n margin: \"1px 0px 1px 10px\",\r\n };\r\n\r\n nameDiv: React.CSSProperties = {\r\n fontSize: \"1.1rem\",\r\n color: \"white\",\r\n boxShadow: \"none\",\r\n textShadow: \"none\",\r\n fontFamily: \"var(--alternate-font)\",\r\n fontWeight: \"100\",\r\n };\r\n\r\n spotifyLinkDiv: React.CSSProperties = {\r\n position: \"absolute\",\r\n bottom: \"0px\",\r\n width: \"25px\",\r\n height: \"25px\",\r\n };\r\n\r\n playPositionDiv: React.CSSProperties = {\r\n position: \"absolute\",\r\n height: \"100%\",\r\n top: \"0px\",\r\n right: \"3px\",\r\n width: `${BUTTON_DIAMETER}px`,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n };\r\n\r\n playButtonDiv: React.CSSProperties = {\r\n position: \"relative\",\r\n height: `${BUTTON_DIAMETER - 3}px`,\r\n width: `${BUTTON_DIAMETER - 3}px`,\r\n background: \"#222\",\r\n borderRadius: \"50%\",\r\n };\r\n\r\n correctButtonOffset: React.CSSProperties = {};\r\n\r\n render() {\r\n if (!this.props.track.name) {\r\n return null;\r\n }\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    {this.props.track.name}
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {this.props.playing ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default SpotifySong;\r\n","export function clearSelection() {\r\n window.getSelection()?.removeAllRanges();\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nimport { clearSelection } from \"../../utils/deselect\";\r\n\r\nconst SCROLLBAR_PADDING = 5; // px\r\nconst SCROLLBAR_WIDTH = 21 / 2; // px\r\n\r\nconst SCROLL_MULTIPLIER = 35 / 246;\r\n\r\ninterface ScrollboxProps {\r\n className?: string;\r\n style?: React.CSSProperties;\r\n}\r\n\r\n// NOTES:\r\n// If the component is collapsed in a parent div, then the height calculations\r\n// could get wonky.\r\n// It might be best to give the component a fixed size and then minimizing the\r\n// parent with overflow==false\r\n\r\nclass ScrollBox extends Component {\r\n componentStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"inherit\",\r\n width: \"100%\",\r\n };\r\n\r\n // maxHeight\r\n scrollingRef: React.RefObject; // element that is scrolled\r\n scrollBarRef: React.RefObject; // scrollbar\r\n scrollHandleRef: React.RefObject; // scrollbar handle\r\n scrollableRef: React.RefObject; // parent of the scrolling element\r\n state = {\r\n scrollable: false,\r\n beginScrolling: false,\r\n endScrolling: false,\r\n scrolling: false,\r\n scrollHover: false,\r\n scrollY: 0,\r\n mouseY: 0,\r\n isNarrow: false,\r\n scrollBarHeight: 0,\r\n scrollingHeight: 0, // height of all children added together\r\n scrollHandleHeight: 0,\r\n scrollableHeight: 0, // height of the parent scrollable div\r\n scrollBarRectTop: 0,\r\n };\r\n\r\n constructor(props: ScrollboxProps) {\r\n super(props);\r\n\r\n this.scrollingRef = React.createRef();\r\n this.scrollBarRef = React.createRef();\r\n this.scrollHandleRef = React.createRef();\r\n this.scrollableRef = React.createRef();\r\n\r\n if (props.style) {\r\n this.componentStyle = {\r\n ...props.style,\r\n };\r\n this.componentStyle.position = \"relative\";\r\n this.componentStyle.height = this.componentStyle.height || \"inherit\";\r\n this.componentStyle.width = this.componentStyle.width || \"100%\";\r\n }\r\n }\r\n\r\n // function is called after first render\r\n componentDidMount() {\r\n this.initState(); // determine if the box is scrollable and save some dimensions. Immediately call the componendDidUpate\r\n this.narrow();\r\n }\r\n\r\n shouldUpdate() {\r\n // componentDidUpdate is called whenever there is a setState() invocation.\r\n // Update if ...\r\n if (this.state.beginScrolling) {\r\n this.setState({ beginScrolling: false });\r\n return true;\r\n }\r\n\r\n if (this.state.endScrolling) {\r\n this.setState({ endScrolling: false });\r\n return true;\r\n }\r\n\r\n // 1. There is no component\r\n if (!this.scrollingRef.current || !this.scrollableRef.current) {\r\n return true;\r\n }\r\n\r\n // 2. The size of the main component changed\r\n const scrollable = this.scrollableRef.current;\r\n\r\n if (\r\n this.state.scrollableHeight !==\r\n (scrollable.clientHeight || scrollable.offsetHeight)\r\n ) {\r\n return true;\r\n }\r\n\r\n // 3. The content height did change (this.state.scrollingHeight)\r\n const scrolling = this.scrollingRef.current;\r\n if (\r\n this.state.scrollingHeight !==\r\n (scrolling.clientHeight || scrolling.offsetHeight)\r\n )\r\n return true;\r\n\r\n if (this.state.scrollable) {\r\n // 4. If scrollable and the scrollbar doesn't exist\r\n if (!this.scrollBarRef.current || !this.scrollHandleRef.current) {\r\n return true;\r\n }\r\n const scrollBar = this.scrollBarRef.current;\r\n const scrollHandle = this.scrollHandleRef.current;\r\n // 5. The scrollbar/handle heights did change (this.state.scrollBarHeight)\r\n if (\r\n this.state.scrollBarHeight !==\r\n (scrollBar.clientHeight || scrollBar.offsetHeight)\r\n )\r\n return true;\r\n if (\r\n this.state.scrollHandleHeight !==\r\n (scrollHandle.clientHeight || scrollHandle.offsetHeight)\r\n )\r\n return true;\r\n\r\n // 6. The component has not been widened\r\n if (!this.state.isNarrow) {\r\n return true;\r\n }\r\n }\r\n\r\n // Include info on scrolling (like scrollY and such)\r\n // Should be needed since rerender needs to occur whenever the page styles change\r\n return false;\r\n }\r\n\r\n // update when component size changes or after the initial componentDidMount()\r\n componentDidUpdate() {\r\n if (!this.props.children) {\r\n return;\r\n }\r\n\r\n if (!this.shouldUpdate()) return;\r\n\r\n // init the state again (recalculate the component dimensions)\r\n this.initState();\r\n this.initScrollBar();\r\n this.narrow();\r\n }\r\n\r\n // initialize the state\r\n // this function makes no assumption about the scrollability of the component. Rather, it determines it.\r\n initState = () => {\r\n if (!this.scrollingRef.current || !this.scrollableRef.current) {\r\n console.error(\"Could not render scrollbox\");\r\n return;\r\n }\r\n const scrolling = this.scrollingRef.current;\r\n const scrollableDiv = this.scrollableRef.current;\r\n\r\n // check if the component has more contents than it has space\r\n const scrollingHeight = scrolling.clientHeight || scrolling.offsetHeight;\r\n const scrollableHeight =\r\n scrollableDiv.clientHeight || scrollableDiv.offsetHeight;\r\n var scrollable = false;\r\n\r\n const scrollBarHeight = scrollableHeight - 10;\r\n const scrollHandleHeight = Math.floor(\r\n scrollBarHeight * (scrollableHeight / scrollingHeight)\r\n );\r\n if (scrollingHeight > scrollableHeight) {\r\n scrollable = true;\r\n }\r\n if (scrollableHeight <= 0) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n scrollingHeight,\r\n scrollableHeight,\r\n scrollable,\r\n scrollBarHeight,\r\n scrollHandleHeight,\r\n });\r\n };\r\n\r\n // initialize the scrollbar and the handle. This function\r\n // assumes that scrolling is possible and thus, that the\r\n // scrollbar & scrollhandle elements exist\r\n initScrollBar = () => {\r\n if (!this.scrollHandleRef.current || !this.scrollBarRef.current) {\r\n console.error(\"Could not initialize the scroll-bar. Refs do not exist\");\r\n return;\r\n }\r\n\r\n const scrollBar = this.scrollBarRef.current;\r\n const scrollHandle = this.scrollHandleRef.current;\r\n\r\n // set the desired scrollhandle height\r\n const height = this.state.scrollHandleHeight;\r\n if (height === 0) {\r\n console.error(\"Scroll handle height set to 0\");\r\n return;\r\n }\r\n scrollHandle.style.height = height.toString() + \"px\";\r\n\r\n // save the page Y-offset of the scrollbar (needed for mouse scrolling)\r\n const scrollBarRectTop = scrollBar.getBoundingClientRect().top;\r\n\r\n this.setState({\r\n scrollBarRectTop,\r\n });\r\n };\r\n\r\n // Widen the scrollbox to make room for the handl\r\n narrow = () => {\r\n const scrolling = this.scrollingRef.current;\r\n if (!scrolling || this.state.isNarrow) {\r\n return;\r\n }\r\n if (this.state.scrollable) {\r\n scrolling.style.width =\r\n (scrolling.clientWidth - SCROLLBAR_WIDTH).toString() + \"px\";\r\n // (scrolling.clientWidth).toString() + \"px\";\r\n this.setState({ isNarrow: true });\r\n }\r\n };\r\n\r\n // Returns the maximum y-offset that the scroll handle can have before it hits the bottom of the scroll bar\r\n maxHandleOffset = () => {\r\n return this.state.scrollBarHeight - this.state.scrollHandleHeight;\r\n };\r\n\r\n // Return the handle offset (bounded by 0 and the max possible value)\r\n boundHandleOffset = (offset: number, maxOffset?: number) => {\r\n maxOffset = maxOffset || this.maxHandleOffset();\r\n\r\n return Math.min(Math.max(0, offset), maxOffset);\r\n };\r\n\r\n maxScrollingOffset = () => {\r\n return this.state.scrollingHeight - this.state.scrollableHeight;\r\n };\r\n\r\n // Return the scrolling offset (bounded by 0 and the max possible offset)\r\n boundScrollingOffset = (offset: number) => {\r\n if (!this.state.scrollingHeight || !this.state.scrollableHeight) {\r\n return;\r\n }\r\n const maxOffset = this.maxScrollingOffset();\r\n\r\n return Math.min(Math.max(0, offset), maxOffset);\r\n };\r\n\r\n // Function to manage scrolling (handle and scrolling element)\r\n // Input is the pixel difference required for the handle (element is computed)\r\n scroll = (handleDiff: number) => {\r\n if (\r\n !this.scrollHandleRef.current ||\r\n !this.scrollingRef.current ||\r\n !this.state.scrollingHeight ||\r\n !this.state.scrollableHeight\r\n ) {\r\n return;\r\n }\r\n const scrollHandle = this.scrollHandleRef.current;\r\n const scrolling = this.scrollingRef.current;\r\n\r\n // maximum value that the top offset can be for the handle\r\n const maxOffset = this.maxHandleOffset();\r\n\r\n // scrollHandle Y (w.r.t scrollBar)\r\n const scrollY = this.state.scrollY;\r\n if (scrollY >= 0 && scrollY <= maxOffset) {\r\n // mouseDiff will also be the difference for scroll\r\n // define the new top offset for the handle\r\n const newTopHandle = this.boundHandleOffset(\r\n this.state.scrollY + handleDiff,\r\n maxOffset\r\n );\r\n\r\n // move the handle of the scrollbar\r\n scrollHandle.style.top = newTopHandle.toString() + \"px\";\r\n\r\n // define the new offset for the scrolling element\r\n const divY = -this.boundScrollingOffset(\r\n (newTopHandle / this.maxHandleOffset()) * this.maxScrollingOffset()\r\n )!;\r\n\r\n // move the scrolling element\r\n scrolling.style.top = divY.toString() + \"px\";\r\n\r\n // save the new scrollhandle y position\r\n this.setState({ scrollY: newTopHandle });\r\n }\r\n };\r\n\r\n // handles mouse scroll event\r\n scrollWheel = (e: React.WheelEvent) => {\r\n // delta \"scrolling offset\"\r\n const diff = SCROLL_MULTIPLIER * e.deltaY;\r\n\r\n this.scroll(diff);\r\n };\r\n\r\n // handle a click on the scrollbar (not the handle)\r\n selectScrollBar = (e: React.MouseEvent) => {\r\n if (\r\n this.state.scrollHover ||\r\n !this.scrollBarRef.current ||\r\n !this.state.scrollHandleHeight ||\r\n !this.scrollHandleRef.current\r\n ) {\r\n return;\r\n }\r\n const scrollBar = this.scrollBarRef.current as HTMLElement;\r\n const barRect = scrollBar.getBoundingClientRect();\r\n const scrollHandle = this.scrollHandleRef.current;\r\n\r\n // newOffset is the mouse position (w.r.t scrollbar) minus half\r\n // of the handle\r\n const newOffset =\r\n e.clientY - barRect.top - 0.5 * this.state.scrollHandleHeight;\r\n const diff = newOffset - scrollHandle.offsetTop;\r\n\r\n this.scroll(diff);\r\n this.selectScrollHandle(e);\r\n };\r\n\r\n // handle a click on the scrollHandle\r\n selectScrollHandle = (e: React.MouseEvent) => {\r\n if (!this.scrollHandleRef.current || !this.scrollBarRef.current) {\r\n return;\r\n }\r\n const scrollHandle = this.scrollHandleRef.current;\r\n\r\n // Mouse Y (w.r.t scrollBar)\r\n const mouseY = e.clientY - this.state.scrollBarRectTop;\r\n\r\n // ScrollHandle Y (w.r.t to scrollBar)\r\n const scrollY = scrollHandle.offsetTop;\r\n\r\n document.onmousemove = this.moveScrollHandle;\r\n document.onmouseup = this.deselectScrollHandle;\r\n this.setState({ scrolling: true, mouseY, scrollY, beginScrolling: true });\r\n };\r\n\r\n deselectScrollHandle = () => {\r\n document.onmousemove = null;\r\n document.onmouseup = null;\r\n clearSelection(); // having weird text selection issues\r\n this.setState({ scrolling: false, endScrolling: true });\r\n };\r\n\r\n moveScrollHandle = (e: MouseEvent) => {\r\n // have to pass barTop (for some reason, the bounding rectangle\r\n // changes over time).\r\n // include barHeight and handleHeight because why not\r\n if (!this.scrollHandleRef.current || !this.scrollingRef.current) {\r\n return;\r\n }\r\n\r\n const barTop = this.state.scrollBarRectTop;\r\n const barHeight = this.state.scrollBarHeight;\r\n\r\n // Mouse Y (w.r.t scrollBar)\r\n const mouseY = e.clientY - barTop;\r\n if (mouseY >= 0 && mouseY <= barHeight) {\r\n const mouseDiff = mouseY - this.state.mouseY;\r\n\r\n this.scroll(mouseDiff);\r\n this.setState({ mouseY });\r\n }\r\n };\r\n\r\n scrollHover = () => this.setState({ scrollHover: true });\r\n notScrollHover = () => this.setState({ scrollHover: false });\r\n\r\n scrollableDiv: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n maxHeight: \"inherit\",\r\n overflow: \"hidden\",\r\n };\r\n\r\n scrollBar = (): React.CSSProperties => {\r\n return {\r\n position: \"absolute\",\r\n height: `calc(100% - ${2 * SCROLLBAR_PADDING}px)`,\r\n width: this.state.scrollable ? SCROLLBAR_WIDTH + \"px\" : \"0px\",\r\n visibility: this.state.scrollable ? \"visible\" : \"collapse\",\r\n background: \"#353535\",\r\n top: \"5px\",\r\n right: `calc(1px)`,\r\n borderRadius: \"50px\",\r\n zIndex: 1,\r\n };\r\n };\r\n\r\n scrollHandle = (): React.CSSProperties => {\r\n const height =\r\n this.state.scrollHandleHeight >= 0\r\n ? `${this.state.scrollHandleHeight}px`\r\n : \"50%\";\r\n\r\n return {\r\n position: \"relative\",\r\n height: height,\r\n width: SCROLLBAR_WIDTH + 5 + \"px\",\r\n top: \"0px\",\r\n right: \"2.5px\",\r\n zIndex: 2,\r\n };\r\n };\r\n\r\n innerScrollHandle = (): React.CSSProperties => {\r\n return {\r\n margin: \"0px auto\",\r\n height: \"100%\",\r\n width: SCROLLBAR_WIDTH + \"px\",\r\n background:\r\n this.state.scrollHover || this.state.scrolling ? \"#777\" : \"#555\",\r\n borderRadius: \"5px\",\r\n transition: \"background 0.1s ease-in\",\r\n };\r\n };\r\n\r\n scrollingDiv: React.CSSProperties = {\r\n position: \"relative\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n width: \"100%\",\r\n // height: \"100%,\",\r\n overflow: \"hidden\",\r\n };\r\n\r\n spotifySongDiv: React.CSSProperties = {};\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {this.props.children}\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default ScrollBox;\r\n","import React, { Component } from \"react\";\r\n\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faVolumeUp, faVolumeMute } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { clearSelection } from \"../../utils/deselect\";\r\n\r\ninterface VolumeProps {\r\n player: React.RefObject;\r\n initialValue?: number;\r\n style?: React.CSSProperties;\r\n}\r\n\r\nconst VOLUME_HEIGHT = \"100%\";\r\nconst HANDLE_RADIUS = 7;\r\nconst MAX_LEVEL = 100;\r\nconst MAX_VOLUME = 0.7;\r\nconst INITIAL_LEVEL = 50;\r\n// const LOG_BASE = 40;\r\n\r\n// volumeFunc maps [0, MAX_LEVEL] to [0, 1]\r\nfunction volumeFunc(x: number) {\r\n // return logVolume(x);\r\n return expVolume(x);\r\n}\r\n\r\nfunction expVolume(x: number) {\r\n const volume = Math.exp((x * Math.log(1 + MAX_VOLUME)) / MAX_LEVEL) - 1;\r\n return Math.max(Math.min(volume, MAX_VOLUME), 0);\r\n}\r\n\r\n// const log = (x: number) => {\r\n// return Math.log(x) / Math.log(LOG_BASE);\r\n// };\r\n// const doubleLog = (x: number) => log(log(x));\r\n\r\n// const logVolume = (x: number) => {\r\n// const dLog = doubleLog(x + LOG_BASE) / doubleLog(MAX_LEVEL + LOG_BASE);\r\n\r\n// return Math.max(Math.min(dLog, MAX_LEVEL), 0);\r\n// };\r\n\r\nclass VolumeControl extends Component {\r\n handleRef: React.RefObject;\r\n selectorRef: React.RefObject;\r\n playerRef: React.RefObject;\r\n greenRef: React.RefObject;\r\n componentStyle: React.CSSProperties = {\r\n height: VOLUME_HEIGHT,\r\n position: \"relative\",\r\n };\r\n state: {\r\n level: number; // Percent value; an abstraction of the pixel value\r\n hover: boolean;\r\n muteHover: boolean;\r\n muteLevel: number;\r\n muted: boolean;\r\n selected: boolean;\r\n };\r\n\r\n constructor(props: VolumeProps) {\r\n super(props);\r\n\r\n // Div ref to access position values\r\n this.handleRef = React.createRef();\r\n this.selectorRef = React.createRef();\r\n this.greenRef = React.createRef();\r\n\r\n // Player ref to modify volume\r\n this.playerRef = props.player;\r\n\r\n // Volume level state is variable\r\n this.state = {\r\n level: this.props.initialValue || INITIAL_LEVEL,\r\n muteLevel: this.props.initialValue || INITIAL_LEVEL,\r\n hover: false,\r\n muteHover: false,\r\n muted: false,\r\n selected: false,\r\n };\r\n\r\n // Style for the component\r\n if (this.props.style) {\r\n this.componentStyle = {\r\n ...this.props.style,\r\n };\r\n this.componentStyle.height = this.componentStyle.height || VOLUME_HEIGHT;\r\n this.componentStyle.width = this.componentStyle.width || \"100%\";\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const player = this.playerRef.current;\r\n if (player) {\r\n player.volume = INITIAL_LEVEL / 100;\r\n }\r\n }\r\n\r\n setVolume = (level: number) => {\r\n if (!this.playerRef.current) {\r\n return;\r\n }\r\n this.playerRef.current.volume = volumeFunc(level);\r\n this.setState({ level, muted: level <= 0 });\r\n };\r\n\r\n volume2pixel(volume: number) {\r\n if (!this.selectorRef.current) {\r\n return 0;\r\n }\r\n const selector = this.selectorRef.current;\r\n const width = selector.clientWidth;\r\n return Math.min(\r\n (width * volume) / MAX_LEVEL - HANDLE_RADIUS,\r\n width - HANDLE_RADIUS\r\n );\r\n }\r\n\r\n pixel2volume(pixel: number) {\r\n if (!this.selectorRef.current) {\r\n return 0;\r\n }\r\n const width = this.selectorRef.current.clientWidth;\r\n return ((pixel + HANDLE_RADIUS) * MAX_LEVEL) / width;\r\n }\r\n\r\n // toggle hover state\r\n hover = () => this.setState({ hover: true });\r\n notHover = () => this.setState({ hover: false });\r\n\r\n // grab the handle\r\n select = (e: React.MouseEvent) => {\r\n this.setPosition(e);\r\n document.onmouseup = this.notSelect;\r\n document.onmousemove = this.slide;\r\n this.setState({ selected: true });\r\n };\r\n\r\n touchSelect = (e: React.TouchEvent) => {\r\n this.setTouchPosition(e);\r\n document.ontouchend = this.notTouchSelect;\r\n document.ontouchmove = this.touchSlide;\r\n console.log(\"Select\");\r\n this.setState({ selected: true });\r\n };\r\n\r\n notSelect = () => {\r\n document.onmouseup = null;\r\n document.onmousemove = null;\r\n this.setState({ selected: undefined });\r\n };\r\n\r\n notTouchSelect = () => {\r\n console.log(\"De-select\");\r\n\r\n document.ontouchend = null;\r\n document.ontouchmove = null;\r\n this.setState({ selected: undefined });\r\n };\r\n\r\n // slide the handle\r\n slide = (e: MouseEvent | React.MouseEvent) => {\r\n clearSelection();\r\n\r\n this.setPosition(e);\r\n };\r\n\r\n touchSlide = (e: TouchEvent) => {\r\n console.log(\"slide\");\r\n this.setTouchPosition(e);\r\n };\r\n\r\n setPosition = (\r\n e: MouseEvent | React.MouseEvent\r\n ) => {\r\n if (!this.handleRef.current || !this.selectorRef.current) {\r\n return;\r\n }\r\n const handle = this.handleRef.current;\r\n const selector = this.selectorRef.current;\r\n\r\n const target = selector as HTMLElement; // Need to get bounding box\r\n const bounds = target.getBoundingClientRect();\r\n\r\n var mousePixel = Math.min(\r\n Math.max(e.clientX - bounds.left - HANDLE_RADIUS, -HANDLE_RADIUS),\r\n selector.clientWidth - HANDLE_RADIUS\r\n );\r\n\r\n handle.style.left = `${mousePixel}px`;\r\n this.setVolume(this.pixel2volume(mousePixel));\r\n };\r\n\r\n setTouchPosition = (e: TouchEvent | React.TouchEvent) => {\r\n if (!this.handleRef.current || !this.selectorRef.current) {\r\n return;\r\n }\r\n const handle = this.handleRef.current;\r\n const selector = this.selectorRef.current;\r\n\r\n const target = selector as HTMLElement; // Need to get bounding box\r\n const bounds = target.getBoundingClientRect();\r\n\r\n var mousePixel = Math.min(\r\n Math.max(\r\n e.touches[0].clientX - bounds.left - HANDLE_RADIUS,\r\n -HANDLE_RADIUS\r\n ),\r\n selector.clientWidth - HANDLE_RADIUS\r\n );\r\n\r\n handle.style.left = `${mousePixel}px`;\r\n this.setVolume(this.pixel2volume(mousePixel));\r\n };\r\n\r\n mute = () => {\r\n if (!this.handleRef.current) {\r\n return;\r\n }\r\n const handle = this.handleRef.current;\r\n this.setState({ muted: true, muteLevel: this.state.level });\r\n this.setVolume(0);\r\n handle.style.left = `${this.volume2pixel(0)}px`;\r\n };\r\n\r\n unmute = () => {\r\n if (!this.handleRef.current) {\r\n return;\r\n }\r\n const handle = this.handleRef.current;\r\n this.setState({ muted: false });\r\n this.setVolume(this.state.muteLevel);\r\n handle.style.left = `${this.volume2pixel(this.state.muteLevel)}px`;\r\n };\r\n\r\n toggleMute = () => {\r\n if (this.state.muted) this.unmute();\r\n else this.mute();\r\n };\r\n\r\n componentRow: React.CSSProperties = {\r\n height: \"100%\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n };\r\n\r\n // sliderWrapper will center the volume slider to the center of the component\r\n sliderWrapper: React.CSSProperties = {\r\n height: \"100%\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n };\r\n\r\n // Hover over sliderSelector to trigger the hover effect (taller than the\r\n // visible slider)\r\n sliderSelector: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"14px\",\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n };\r\n\r\n // Volume bar\r\n slider: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"4px\",\r\n background: \"#aaa\",\r\n borderRadius: \"2px\",\r\n };\r\n\r\n leftBar = (): React.CSSProperties => {\r\n return {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n height: \"4px\",\r\n width: this.handleRef.current\r\n ? `${this.volume2pixel(this.state.level) + HANDLE_RADIUS}px`\r\n : \"50%\",\r\n borderRadius: \"2px\",\r\n background:\r\n this.state.hover || this.state.selected\r\n ? \"var(--selected-color)\"\r\n : \"var(--white-color)\",\r\n };\r\n };\r\n\r\n iconStyle: React.CSSProperties = {\r\n height: \"20px\",\r\n width: \"32px\",\r\n paddingLeft: \"8px\",\r\n };\r\n\r\n // Handle to change volume\r\n handle = (): React.CSSProperties => {\r\n return {\r\n position: \"absolute\",\r\n top: \"-5px\",\r\n left: `calc(${(100 * INITIAL_LEVEL) / MAX_LEVEL}% - ${HANDLE_RADIUS}px)`,\r\n height: `${2 * HANDLE_RADIUS}px`,\r\n width: `${2 * HANDLE_RADIUS}px`,\r\n background: \"white\",\r\n borderRadius: \"50%\",\r\n visibility:\r\n this.state.hover || this.state.selected ? \"visible\" : \"collapse\",\r\n };\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n this.setState({ muteHover: true, hover: true })}\r\n onMouseLeave={() =>\r\n this.setState({ muteHover: false, hover: false })\r\n }\r\n onClick={this.toggleMute}\r\n >\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default VolumeControl;\r\n","import React, { Component } from \"react\";\r\nimport { Track } from \"../../types/spotify\";\r\nimport SpotifySong from \"../media/SpotifySong\";\r\nimport ScrollBox from \"../other/Scrollbox\";\r\nimport VolumeControl from \"../media/VolumeControl\";\r\nimport { BACKGROUND_GREY_GRADIENT } from \"../../config\";\r\nimport { Desktop, Mobile } from \"../other/Responsive\";\r\n\r\ninterface CardProps {\r\n tracks: Track[];\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass MusicCard extends Component {\r\n componentStyle: React.CSSProperties = {\r\n background: BACKGROUND_GREY_GRADIENT,\r\n borderRadius: \"10px\",\r\n paddingTop: \"4px\",\r\n };\r\n playerRef: React.RefObject;\r\n state: { src: string; playing: string };\r\n\r\n constructor(props: CardProps) {\r\n super(props);\r\n\r\n this.changeSong = this.changeSong.bind(this);\r\n this.play = this.play.bind(this);\r\n this.pause = this.pause.bind(this);\r\n\r\n this.playerRef = React.createRef();\r\n this.state = {\r\n src: \"\",\r\n playing: \"\",\r\n };\r\n\r\n if (this.props.style) {\r\n this.componentStyle = {\r\n ...this.props.style,\r\n };\r\n this.componentStyle.background =\r\n this.componentStyle.background || BACKGROUND_GREY_GRADIENT;\r\n this.componentStyle.display = \"inline-block\";\r\n }\r\n }\r\n\r\n changeSong = (src: string) => {\r\n if (this.state.src !== src && this.playerRef.current) {\r\n const player = this.playerRef.current;\r\n\r\n player.src = src;\r\n this.setState({ src });\r\n }\r\n };\r\n\r\n play = async (src: string) => {\r\n if (!this.playerRef.current) {\r\n return;\r\n }\r\n const player = this.playerRef.current;\r\n\r\n // Check if song has changed\r\n if (this.state.src !== src) {\r\n this.pause();\r\n this.changeSong(src);\r\n }\r\n\r\n try {\r\n await player.play();\r\n this.setState({ playing: src });\r\n } catch (err) {\r\n console.error(\"Could not play song\");\r\n }\r\n };\r\n\r\n pause = () => {\r\n if (!this.playerRef.current) {\r\n return;\r\n }\r\n const player = this.playerRef.current;\r\n\r\n try {\r\n player.pause();\r\n this.setState({ playing: \"\" });\r\n } catch (err) {\r\n console.error(\"Could not pause\");\r\n }\r\n };\r\n\r\n isPlaying = (src: string) => {\r\n return this.state.playing === src;\r\n };\r\n\r\n // styles\r\n listDiv: React.CSSProperties = {};\r\n\r\n volumeDiv: React.CSSProperties = {\r\n padding: \"30px 30px 30px 30px\",\r\n };\r\n\r\n divLine: React.CSSProperties = {\r\n height: \"1px\",\r\n width: \"90%\",\r\n margin: \"10px auto 0px auto\",\r\n background: \"#555\",\r\n };\r\n\r\n spotifySongDiv: React.CSSProperties = {};\r\n\r\n scrollBox: React.CSSProperties = {\r\n maxHeight: \"350px\",\r\n };\r\n\r\n render() {\r\n if (this.props.tracks.length === 0) return null;\r\n return (\r\n
    \r\n \r\n \r\n \r\n {this.props.tracks.map((track) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n \r\n \r\n {this.props.tracks.map((track) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default MusicCard;\r\n","import React, { Component } from \"react\";\r\n\r\nimport { formatDate, convertZeros } from \"../../utils/formatter\";\r\nimport { Show } from \"../../types/show\";\r\n\r\ninterface ShowRowProps {\r\n show: Show;\r\n}\r\n\r\nclass ShowRow extends Component {\r\n name = \"TBA\";\r\n location = \"TBA\";\r\n date = \"TBA\";\r\n time = \"Time TBA\";\r\n constructor(props: ShowRowProps) {\r\n super(props);\r\n this.set();\r\n }\r\n\r\n set() {\r\n this.name = this.props.show.name || this.name;\r\n this.location = this.props.show.location || this.location;\r\n this.date = convertZeros(formatDate(this.props.show.date)) || this.date;\r\n this.time = this.props.show.time || this.time;\r\n }\r\n\r\n componentStyle: React.CSSProperties = {\r\n padding: \"10px 0px\",\r\n // width: \"250px\",\r\n width: \"90%\",\r\n margin: \"0px 11px\",\r\n };\r\n\r\n listStyle: React.CSSProperties = {\r\n // height: \"6.5rem\",\r\n listStyle: \"none\",\r\n color: \"#dddddd\",\r\n };\r\n\r\n lineStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n minHeight: \"1.5rem\",\r\n lineHeight: \"1.5rem\",\r\n wordWrap: \"break-word\",\r\n };\r\n\r\n nameLine: React.CSSProperties = {\r\n ...this.lineStyle,\r\n color: \"var(--white-color)\",\r\n textAlign: \"center\",\r\n fontSize: \"1.1rem\",\r\n height: \"2rem\",\r\n };\r\n\r\n locationLine: React.CSSProperties = {\r\n ...this.lineStyle,\r\n };\r\n\r\n timeLine: React.CSSProperties = {\r\n ...this.lineStyle,\r\n paddingTop: \"5px\",\r\n };\r\n\r\n dateLine: React.CSSProperties = {\r\n ...this.lineStyle,\r\n fontFamily: \"var(--body-font)\",\r\n fontSize: \"1.2rem\",\r\n };\r\n\r\n leftStyle: React.CSSProperties = {\r\n textAlign: \"start\",\r\n };\r\n\r\n rightStyle: React.CSSProperties = {\r\n textAlign: \"end\",\r\n };\r\n\r\n render() {\r\n return (\r\n <>\r\n {this.props.show ? (\r\n
    \r\n
      \r\n
    • \r\n

      {this.name}

      \r\n
    • \r\n
    • \r\n

      {this.location}

      \r\n
    • \r\n
    • \r\n

      {this.time}

      \r\n
    • \r\n
    • \r\n

      {this.date}

      \r\n
    • \r\n
    \r\n
    \r\n ) : null}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ShowRow;\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { BACKGROUND_GREY_GRADIENT } from \"../../config\";\r\nimport { Show } from \"../../types/show\";\r\n\r\nimport ScrollBox from \"../other/Scrollbox\";\r\nimport ShowRow from \"./ShowRow\";\r\n\r\nconst SHOWS_PAGE = \"/about\";\r\n\r\ninterface ShowsCardProps {\r\n shows: Show[];\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass ShowsCard extends Component {\r\n componentStyle: React.CSSProperties;\r\n constructor(props: ShowsCardProps) {\r\n super(props);\r\n\r\n this.componentStyle = {\r\n ...props.style,\r\n };\r\n\r\n this.componentStyle.background =\r\n this.componentStyle.background || BACKGROUND_GREY_GRADIENT;\r\n this.componentStyle.fontFamily = \"var(--alternate-font)\";\r\n this.componentStyle.color = \"white\";\r\n }\r\n\r\n scrollBox: React.CSSProperties = {\r\n maxHeight: \"430px\",\r\n width: \"100%\",\r\n };\r\n\r\n dividerBox: React.CSSProperties = {\r\n height: \"2px\",\r\n width: \"100%\",\r\n marginBottom: \"5px\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n };\r\n\r\n divider: React.CSSProperties = {\r\n background: \"#505050\",\r\n height: \"100%\",\r\n width: \"95%\",\r\n };\r\n\r\n seeMoreLink: React.CSSProperties = {\r\n width: \"100%\",\r\n marginTop: \"10px\",\r\n height: \"2rem\",\r\n color: \"var(--selected-color)\",\r\n textAlign: \"center\",\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n {this.props.shows.length > 0 ? (\r\n \r\n {this.props.shows.map((show, idx) => {\r\n return (\r\n
    \r\n \r\n {idx !== this.props.shows.length - 1 ? (\r\n
    \r\n
    \r\n
    \r\n ) : null}\r\n
    \r\n );\r\n })}\r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n See all shows\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default ShowsCard;\r\n","import React, { Component } from \"react\";\r\n\r\ninterface YoutubeVideoProps {\r\n id: string;\r\n width?: string;\r\n onWheel?: React.WheelEventHandler;\r\n}\r\n\r\nclass YoutubeVideo extends Component {\r\n iframeRef: React.RefObject;\r\n\r\n constructor(props: YoutubeVideoProps) {\r\n super(props);\r\n\r\n this.iframeRef = React.createRef();\r\n }\r\n\r\n componentStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"100%\",\r\n paddingBottom: \"56.25%\",\r\n zIndex: \"0\",\r\n };\r\n\r\n videoStyle: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0\",\r\n right: \"0\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n zIndex: \"0\",\r\n overflow: \"hidden\",\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default YoutubeVideo;\r\n","import React, { Component } from \"react\";\r\nimport YoutubeVideo from \"../media/YoutubeVideo\";\r\nimport { BACKGROUND_GREY_GRADIENT } from \"../../config\";\r\nimport { Video } from \"../../types/youtube\";\r\n\r\ninterface CardProps {\r\n videos: Video[];\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass VideoCard extends Component {\r\n componentStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n zIndex: \"0\",\r\n width: \"100%\",\r\n background: BACKGROUND_GREY_GRADIENT,\r\n borderRadius: \"5px\",\r\n boxShadow: \"0px 2px 10px 0px black\",\r\n };\r\n constructor(props: CardProps) {\r\n super(props);\r\n\r\n if (this.props.style) {\r\n this.componentStyle = {\r\n ...this.props.style,\r\n position: \"relative\",\r\n zIndex: \"0\",\r\n width: \"100%\",\r\n background: BACKGROUND_GREY_GRADIENT,\r\n borderRadius: \"5px\",\r\n boxShadow: \"0px 2px 10px 0px black\",\r\n };\r\n this.componentStyle.height = this.componentStyle.height || \"100%\";\r\n this.componentStyle.width = this.componentStyle.width || \"100%\";\r\n }\r\n }\r\n\r\n padding: React.CSSProperties = {\r\n padding: \"7px\",\r\n };\r\n\r\n videoDiv: React.CSSProperties = {\r\n width: \"370px\",\r\n padding: \"3px\",\r\n };\r\n\r\n lineDiv: React.CSSProperties = {\r\n background: \"#555\",\r\n width: \"90%\",\r\n height: \"2px\",\r\n margin: \"10px auto\",\r\n };\r\n\r\n render() {\r\n if (!this.props.videos) return null;\r\n return (\r\n
    \r\n
    \r\n
    \r\n {this.props.videos.map(({ id }) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default VideoCard;\r\n","import React, { Component } from \"react\";\r\nimport { POP_OUT_COLOR_SCHEME } from \"../../config\";\r\nimport { Show } from \"../../types/show\";\r\nimport { Track } from \"../../types/spotify\";\r\nimport { Video } from \"../../types/youtube\";\r\nimport Dropdown from \"./Dropdown\";\r\nimport MusicCard from \"./MusicCard\";\r\nimport ShowsCard from \"./ShowsCard\";\r\nimport VideoCard from \"./VideoCard\";\r\n\r\ninterface DropdownListProps {\r\n videos: Video[];\r\n tracks: Track[];\r\n shows: Show[];\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass DropdownList extends Component {\r\n componentStyle: React.CSSProperties;\r\n\r\n constructor(props: DropdownListProps) {\r\n super(props);\r\n\r\n this.componentStyle = {\r\n ...props.style,\r\n };\r\n }\r\n\r\n linkRow: React.CSSProperties = {\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n height: \"calc(100vh - 150px - var(--menu-height)\",\r\n };\r\n\r\n dropdownStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n };\r\n\r\n musicCard: React.CSSProperties = {\r\n width: \"450px\",\r\n borderRadius: \"10px\",\r\n background: POP_OUT_COLOR_SCHEME ? \"#121111\" : undefined,\r\n };\r\n\r\n showsCard: React.CSSProperties = {\r\n width: \"350px\",\r\n borderRadius: \"10px\",\r\n background: POP_OUT_COLOR_SCHEME ? \"#121111\" : undefined,\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default DropdownList;\r\n","import React, { Component } from \"react\";\r\nimport FacebookIcon from \"./other/socials/FacebookIcon\";\r\nimport InstagramIcon from \"./other/socials/InstagramIcon\";\r\nimport TwitterIcon from \"./other/socials/TwitterIcon\";\r\n\r\ninterface SocialsProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass Socials extends Component {\r\n iconStyle: React.CSSProperties = {\r\n height: \"30px\",\r\n width: \"30px\",\r\n };\r\n\r\n row: React.CSSProperties = {\r\n width: \"100%\",\r\n display: \"flex\",\r\n justifyContent: \"space-evenly\",\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n {/* */}\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Socials;\r\n","import React, { Component } from \"react\";\r\nimport { Video } from \"../../types/youtube\";\r\nimport YoutubeVideo from \"../media/YoutubeVideo\";\r\nimport { Custom } from \"../other/Responsive\";\r\n\r\nconst Mobile = Custom({ maxWidth: 570 });\r\nconst Desktop = Custom({ minWidth: 570 });\r\n\r\ninterface NarrowVideosProps {\r\n style?: React.CSSProperties;\r\n videos: Video[];\r\n}\r\n\r\nclass NarrowVideos extends Component {\r\n componentStyle: React.CSSProperties;\r\n\r\n constructor(props: NarrowVideosProps) {\r\n super(props);\r\n this.componentStyle = {\r\n ...props.style,\r\n };\r\n }\r\n\r\n videoList = () => {\r\n return this.props.videos.length > 0\r\n ? this.props.videos.map((video, idx) => {\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n })\r\n : null;\r\n };\r\n\r\n desktopUl: React.CSSProperties = {\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr 1fr\",\r\n };\r\n\r\n mobileUl: React.CSSProperties = {};\r\n\r\n liStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n listStyle: \"none\",\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n
      {this.videoList()}
    \r\n
    \r\n \r\n
      {this.videoList()}
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default NarrowVideos;\r\n","import React, { Component } from \"react\";\r\nimport { MOBILE_HOME_COLOR } from \"../../config\";\r\nimport { Show } from \"../../types/show\";\r\nimport { Track } from \"../../types/spotify\";\r\nimport { Video } from \"../../types/youtube\";\r\nimport { ShowsList } from \"../about/ShowsList\";\r\nimport CustomHeader from \"../CustomHeader\";\r\nimport Socials from \"../Socials\";\r\nimport MusicCard from \"./MusicCard\";\r\nimport NarrowVideos from \"./NarrowVideos\";\r\n\r\ninterface NarrowProps {\r\n videos: Video[];\r\n tracks: Track[];\r\n shows: Show[];\r\n style?: React.CSSProperties;\r\n}\r\n\r\nclass NarrowContents extends Component {\r\n componentStyle: React.CSSProperties;\r\n state: {\r\n hover: string;\r\n };\r\n\r\n constructor(props: NarrowProps) {\r\n super(props);\r\n\r\n this.componentStyle = {\r\n ...props.style,\r\n };\r\n\r\n this.state = {\r\n hover: \"\",\r\n };\r\n }\r\n\r\n musicLabel: React.CSSProperties = {\r\n textAlign: \"center\",\r\n fontFamily: \"var(--body-font)\",\r\n fontSize: \"2rem\",\r\n lineHeight: \"3rem\",\r\n // background: MOBILE_HOME_COLOR,\r\n // color: \"white\",\r\n };\r\n\r\n musicDividerBox: React.CSSProperties = {\r\n // background: MOBILE_HOME_COLOR,\r\n height: \"8px\",\r\n width: \"100%\",\r\n padding: \"3px 0px 16px 0px\",\r\n };\r\n\r\n musicDivider: React.CSSProperties = {\r\n background: `#505050`,\r\n margin: \"auto\",\r\n width: \"100%\",\r\n height: \"2px\",\r\n };\r\n\r\n showsWrapper: React.CSSProperties = {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n };\r\n\r\n musicWrapper: React.CSSProperties = {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n };\r\n\r\n musicCard: React.CSSProperties = {\r\n width: \"98%\",\r\n // borderRadius: \"10px\",\r\n paddingTop: \"10px\",\r\n background: \"#404040\",\r\n };\r\n\r\n videoWrapper: React.CSSProperties = {\r\n borderBottom: \"solid 8px var(--primary-color)\",\r\n };\r\n\r\n videoDividerBox: React.CSSProperties = {\r\n ...this.musicDividerBox,\r\n background: MOBILE_HOME_COLOR,\r\n };\r\n\r\n narrowVidDiv: React.CSSProperties = {\r\n position: \"relative\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n };\r\n\r\n vidBlue: React.CSSProperties = {\r\n position: \"absolute\",\r\n height: \"110px\",\r\n width: \"100%\",\r\n top: \"30px\",\r\n left: \"0px\",\r\n background: \"var(--primary-color)\",\r\n };\r\n\r\n socialsWrapper: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"90%\",\r\n height: \"1px\",\r\n margin: \"0px auto\",\r\n };\r\n\r\n socialsPositioning: React.CSSProperties = {\r\n position: \"absolute\",\r\n width: \"100%\",\r\n top: \"-45px\",\r\n background: \"var(--primary-color)\",\r\n borderRadius: \"10px\",\r\n opacity: 0.9,\r\n boxShadow: \"3px 3px 25px 4px black\",\r\n };\r\n\r\n socialsDividerBox: React.CSSProperties = {\r\n ...this.musicDividerBox,\r\n background: \"none\",\r\n };\r\n\r\n socialsStyle: React.CSSProperties = {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n justifyContent: \"center\",\r\n paddingBottom: \"10px\",\r\n paddingTop: \"10px\",\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default NarrowContents;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { pageview } from \"react-ga\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport loadingImg from \"../../assets/loading.png\";\r\nimport wallImg from \"../../assets/tyler_wall.jpg\";\r\nimport DropdownList from \"../../components/home/DropdownList\";\r\nimport NarrowContents from \"../../components/home/NarrowContents\";\r\nimport { Custom } from \"../../components/other/Responsive\";\r\nimport {\r\n MUSIC_HIGHLIGHTS_URL,\r\n SHOWS_URL,\r\n VIDEO_HIGHLIGHTS_URL,\r\n} from \"../../config\";\r\nimport { Show } from \"../../types/show\";\r\nimport { Playlist as SpotifyPlaylist, Track } from \"../../types/spotify\";\r\nimport { Playlist as YoutubePlaylist, Video } from \"../../types/youtube\";\r\n\r\nconst customMobile = 1185;\r\nconst AllMobile = Custom({ maxWidth: customMobile });\r\nconst Desktop = Custom({ minWidth: customMobile });\r\n\r\nfunction Home() {\r\n // when component mounts, load in media ids from database (no loading in the sub-components)\r\n const [tracks, setTracks] = useState([]);\r\n const [videos, setVideos] = useState([]);\r\n const [shows, setShows] = useState([]);\r\n const [loaded, setLoaded] = useState(false); // image loaded\r\n\r\n async function fetchData() {\r\n try {\r\n const res = await axios.get<{ playlist: SpotifyPlaylist }>(\r\n MUSIC_HIGHLIGHTS_URL\r\n );\r\n setTracks(res.data.playlist.tracks);\r\n } catch (err: any) {\r\n console.error(err);\r\n }\r\n try {\r\n const res = await axios.get<{ playlist: YoutubePlaylist }>(\r\n VIDEO_HIGHLIGHTS_URL\r\n );\r\n setVideos(res.data.playlist.videos);\r\n } catch (err: any) {\r\n console.error(err);\r\n }\r\n try {\r\n const res = await axios.get<{ upcomingShows: Show[]; pastShows: Show[] }>(\r\n SHOWS_URL\r\n );\r\n setShows(res.data.upcomingShows);\r\n } catch (err: any) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n pageview(window.location.pathname);\r\n window.scrollTo(0, 0);\r\n\r\n fetchData();\r\n }, []);\r\n\r\n // styles\r\n const globalStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"100vw\",\r\n height: useMediaQuery({ minWidth: customMobile })\r\n ? \"calc(100vh - var(--menu-height))\"\r\n : \"auto\",\r\n };\r\n\r\n const pageStyle: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n margin: \"auto\",\r\n zIndex: 0,\r\n };\r\n\r\n const desktopStyle: React.CSSProperties = {\r\n display: loaded ? \"\" : \"none\",\r\n };\r\n\r\n const loadingThing: React.CSSProperties = {\r\n display: loaded ? \"none\" : \"flex\",\r\n background: \"var(--primary-color)\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: \"var(--white-color)\",\r\n fontFamily: \"var(--header-font)\",\r\n fontSize: \"2rem\",\r\n opacity: 0.7,\r\n };\r\n\r\n const loadingImgStyle: React.CSSProperties = {\r\n margin: \"10px\",\r\n width: \"100%\",\r\n maxWidth: \"80px\",\r\n animation: \"spin 14s linear infinite\",\r\n };\r\n\r\n const desktopImageWrapper: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"calc(100vh - var(--menu-height))\",\r\n overflowY: \"hidden\",\r\n };\r\n\r\n const backgroundImage: React.CSSProperties = {\r\n display: loaded ? \"\" : \"\",\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: `0px`,\r\n height: \"140%\",\r\n width: \"100%\",\r\n filter: \"grayscale(40%)\",\r\n objectFit: \"cover\",\r\n backgroundRepeat: \"no-repeat\",\r\n zIndex: -2,\r\n };\r\n\r\n const mobileQuery = useMediaQuery({ maxWidth: 866 });\r\n\r\n const mobileImage: React.CSSProperties = {\r\n ...backgroundImage,\r\n height: mobileQuery ? \"100%\" : \"160%\",\r\n left: \"-80px\",\r\n width: \"125%\",\r\n top: \"0%\",\r\n };\r\n\r\n const backgroundColor: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: `0px`,\r\n height: \"100%\",\r\n width: \"100%\",\r\n background: \"var(--primary-color)\",\r\n opacity: 0.26,\r\n mixBlendMode: \"multiply\",\r\n };\r\n\r\n const bannerWrapper: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"433px\",\r\n overflowY: \"hidden\",\r\n };\r\n\r\n const narrowStyle: React.CSSProperties = {};\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n <>\r\n
    \r\n \"Loading\"\r\n ...Loading Image...\r\n
    \r\n
    \r\n
    \r\n {\r\n setLoaded(true);\r\n }}\r\n />\r\n
    \r\n
    \r\n\r\n \r\n
    \r\n \r\n
    \r\n\r\n {/* Mobile is defined wider than other pages due to dropdown issues */}\r\n \r\n <>\r\n
    \r\n
    \r\n
    \r\n \"\"\r\n ...Loading Image...\r\n
    \r\n
    \r\n
    \r\n {\r\n setLoaded(true);\r\n }}\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default Home;\r\n","import React, { useState } from \"react\";\r\nimport { useMediaQuery } from \"react-responsive\";\r\nimport { Album } from \"../../types/spotify\";\r\nimport { Custom } from \"../other/Responsive\";\r\nimport SpotifyLink from \"./SpotifyLink\";\r\n\r\nconst QueryGTE780 = Custom({ minWidth: 780 });\r\nconst QueryLTE780 = Custom({ maxWidth: 780 });\r\n\r\ninterface SpotifyAlbumProps {\r\n album: Album;\r\n}\r\n\r\nfunction SpotifyAlbum(props: SpotifyAlbumProps) {\r\n const [hover, setHover] = useState(false);\r\n const [clicked, setClicked] = useState(false);\r\n const desktop = useMediaQuery({ minWidth: 650 });\r\n const lte780 = useMediaQuery({ maxWidth: 780 });\r\n\r\n const style: React.CSSProperties = {\r\n position: \"relative\",\r\n height: lte780 ? \"45vw\" : \"360px\",\r\n width: lte780 ? \"45vw\" : \"360px\",\r\n paddingBottom: lte780 ? \"50%\" : \"\",\r\n };\r\n\r\n const resizing: React.CSSProperties = {\r\n position: \"absolute\",\r\n height: hover && desktop ? \"105%\" : \"100%\",\r\n width: hover && desktop ? \"105%\" : \"100%\",\r\n top: hover && desktop ? \"-2.5%\" : \"0\",\r\n left: hover && desktop ? \"-2.5%\" : \"0\",\r\n zIndex: hover && desktop ? 1 : 0,\r\n transition: \"all 750ms cubic-bezier(0.2, 1, 0.3, 1)\",\r\n };\r\n\r\n const resizedDiv: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n };\r\n\r\n const albumInfo: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n zIndex: 2,\r\n };\r\n\r\n const mobileStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: desktop ? \"\" : \"none\",\r\n };\r\n\r\n const desktopStyle: React.CSSProperties = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: desktop ? \"none\" : \"\",\r\n };\r\n\r\n // styles\r\n const dropdownOverlay: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n height: hover ? \"100%\" : \"0px\",\r\n width: \"100%\",\r\n opacity: hover ? 0.65 : 0,\r\n background: \"var(--primary-color)\",\r\n transition: \"all 750ms cubic-bezier(0.2, 1, 0.3, 1)\",\r\n transitionDelay: hover ? \"0.15s\" : \"0s\",\r\n boxShadow: \"0px 2px 10px 0px var(--primary-color)\",\r\n zIndex: 1,\r\n };\r\n\r\n const fadeIn: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n opacity: hover ? 1 : 0,\r\n background: \"var(--primary-gradient)\",\r\n transition: \"all 750ms cubic-bezier(0.2, 1, 0.3, 1)\",\r\n transitionDelay: hover ? \".35s\" : \"0s\",\r\n zIndex: 2,\r\n overflowY: \"hidden\",\r\n padding: \"30px 25px 20px 25px\",\r\n };\r\n\r\n const faded: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n };\r\n\r\n const paragraph: React.CSSProperties = {\r\n fontFamily: \"var(--body-font)\",\r\n fontSize: \"1.5rem\",\r\n margin: \"7px 0px\",\r\n paddingTop: \"20px\",\r\n paddingBottom: \"5px\",\r\n color: \"white\",\r\n };\r\n\r\n const header: React.CSSProperties = {\r\n display: \"inline\",\r\n fontFamily: \"var(--body-font)\",\r\n fontSize: \"2rem\",\r\n lineHeight: \"2rem\",\r\n fontWeight: \"bold\",\r\n paddingTop: \"10px\",\r\n color: \"white\",\r\n borderBottom: \"solid 2px goldenrod\",\r\n paddingBottom: \"15px\",\r\n };\r\n\r\n // Text in here\r\n const topInfo: React.CSSProperties = {\r\n height: desktop ? \"50%\" : \"100%\",\r\n paddingBottom: \"10px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n };\r\n\r\n // image in here\r\n const bottomInfo: React.CSSProperties = {\r\n position: \"absolute\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n top: \"50%\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n opacity: hover && desktop ? 1 : 0,\r\n transition: \"all 1.3s cubic-bezier(0.2, 1, 0.3, 1)\",\r\n transitionDelay: hover ? \"0.55s\" : \"0s\",\r\n };\r\n\r\n const coverWrapper: React.CSSProperties = {\r\n position: \"relative\",\r\n height: \"50%\",\r\n width: \"50%\",\r\n boxShadow: \"2px 2px 5px 1px black\",\r\n };\r\n\r\n // List the name and date;\r\n const year = props.album.releaseDate.split(\"-\")[0];\r\n return (\r\n
  • \r\n {\r\n if (desktop) setHover(true);\r\n }}\r\n onMouseLeave={() => {\r\n if (desktop) setHover(false);\r\n }}\r\n onClick={() => {\r\n if (!desktop) setClicked(!clicked);\r\n }}\r\n >\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    {props.album.name}

    \r\n

    \r\n {albumType(props.album)} / {year}\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n {props.album.name}\r\n

    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
  • \r\n
    \r\n \r\n );\r\n}\r\n\r\nfunction albumType(album: Album) {\r\n if (album.albumType === \"single\" && album.numTracks > 1) return \"EP\";\r\n return album.albumType;\r\n}\r\n\r\nfunction SpotifyIcon({\r\n url,\r\n style,\r\n}: {\r\n url: string;\r\n style?: React.CSSProperties;\r\n}) {\r\n const blackCircle: React.CSSProperties = {\r\n position: \"relative\",\r\n top: \"3%\",\r\n left: \"3%\",\r\n height: \"92%\",\r\n width: \"92%\",\r\n borderRadius: \"50%\",\r\n background: \"black\",\r\n zIndex: -1,\r\n boxShadow: \"2px 2px 5px 0px black\",\r\n };\r\n\r\n const link: React.CSSProperties = {\r\n position: \"absolute\",\r\n top: \"0px\",\r\n left: \"0px\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n ;\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nfunction SpotifyCover({ album, link }: { album: Album; link?: boolean }) {\r\n const cover: React.CSSProperties = {\r\n position: \"absolute\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n top: \"0\",\r\n left: \"0\",\r\n };\r\n\r\n const iconStyle: React.CSSProperties = {\r\n position: \"absolute\",\r\n right: \"5%\",\r\n bottom: \"5%\",\r\n height: \"25%\",\r\n width: \"25%\",\r\n zIndex: 2,\r\n };\r\n\r\n if (link) {\r\n return (\r\n <>\r\n \r\n <>\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SpotifyAlbum;\r\n","import React from \"react\";\r\nimport { Album } from \"../../types/spotify\";\r\nimport { Custom } from \"../other/Responsive\";\r\nimport SpotifyAlbum from \"./SpotifyAlbum\";\r\nimport styles from \"./styles/AlbumGrid.module.css\";\r\n\r\nconst QueryGTE1150 = Custom({ minWidth: 1150 });\r\nconst QueryLTE1150 = Custom({ maxWidth: 1150 });\r\n\r\ninterface AlbumGridProps {\r\n albums: Album[];\r\n}\r\n\r\nfunction AlbumGrid(props: AlbumGridProps) {\r\n // Returns a list of class-less uls\r\n function grid(albums: Album[], rowSize: number) {\r\n const n = Math.floor(albums.length / rowSize) + 1;\r\n return (\r\n
    \r\n {Array.from(Array(n).keys()).map((i) => {\r\n const albs = albums.slice(rowSize * i, rowSize * (i + 1));\r\n return (\r\n
    a.name).join(\"\")}>\r\n
      \r\n \r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n );\r\n }\r\n\r\n function AlbumRow({ albums }: { albums: Album[] }) {\r\n return (\r\n <>\r\n {albums.map((album) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n \r\n );\r\n }\r\n\r\n if (props.albums.length === 0) return null;\r\n\r\n const albums = props.albums.sort((a, b) => {\r\n const dateA = new Date(a.releaseDate);\r\n const dateB = new Date(b.releaseDate);\r\n return dateA > dateB ? 0 : 1;\r\n });\r\n\r\n return (\r\n
    \r\n {grid(albums, 3)}\r\n {grid(albums, 2)}\r\n
    \r\n );\r\n}\r\n\r\nexport default AlbumGrid;\r\n","import React, { Component } from \"react\";\r\nimport { Video } from \"../../types/youtube\";\r\nimport YoutubeVideo from \"./YoutubeVideo\";\r\n\r\nimport styles from \"./styles/YoutubeGrid.module.css\";\r\n\r\nclass YoutubeGrid extends Component<{ videos: Video[] }, {}> {\r\n render() {\r\n return (\r\n
    \r\n
    \r\n {this.props.videos.map(({ id }) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default YoutubeGrid;\r\n","export default __webpack_public_path__ + \"static/media/devices_cropped.b237d1f1.png\";","import React, { Component } from \"react\";\r\nimport { Desktop } from \"../../components/other/Responsive\";\r\nimport Banner from \"../../components/other/Banner\";\r\nimport AlbumGrid from \"../../components/media/AlbumGrid\";\r\nimport YoutubeGrid from \"../../components/media/YoutubeGrid\";\r\n\r\nimport { Album } from \"../../types/spotify\";\r\nimport { Playlist, Video } from \"../../types/youtube\";\r\nimport devicesBanner from \"../../assets/devices_cropped.png\";\r\nimport CustomHeader from \"../../components/CustomHeader\";\r\n\r\nimport axios from \"axios\";\r\nimport { ALBUM_URL, YOUTUBE_URL } from \"../../config\";\r\nimport styles from \"./styles/Music.module.css\";\r\nimport { pageview } from \"react-ga\";\r\n\r\nclass Music extends Component {\r\n state = {\r\n square: true,\r\n albums: [] as Album[],\r\n videos: [] as Video[],\r\n };\r\n\r\n fetchAlbums = async () => {\r\n const url = ALBUM_URL;\r\n try {\r\n const res = await axios.get<{ albums: Album[] }>(url);\r\n this.setState({ albums: res.data.albums });\r\n } catch (err: any) {\r\n console.log(\"Error getting albums\", err.response?.data);\r\n }\r\n };\r\n\r\n fetchVideos = async () => {\r\n try {\r\n console.log(YOUTUBE_URL);\r\n const res = await axios.get<{ playlist: Playlist }>(YOUTUBE_URL);\r\n const videos: Video[] = res.data.playlist.videos;\r\n this.setState({ videos });\r\n } catch (err: any) {\r\n console.log(\"Error getting youtube ids\", err);\r\n }\r\n };\r\n\r\n componentDidMount = async () => {\r\n pageview(window.location.pathname);\r\n\r\n window.scrollTo(0, 0);\r\n\r\n await this.fetchAlbums();\r\n await this.fetchVideos();\r\n };\r\n\r\n videoHeaderDiv: React.CSSProperties = {\r\n width: \"100%\",\r\n paddingBottom: \"20px\",\r\n };\r\n\r\n videoHeaderOverlayDiv: React.CSSProperties = {\r\n position: \"relative\",\r\n width: \"0px\",\r\n height: \"0px\",\r\n margin: \"0px auto\",\r\n zIndex: -1,\r\n overflowY: \"visible\",\r\n };\r\n\r\n videoHeaderOverlay: React.CSSProperties = {\r\n position: \"absolute\",\r\n width: \"100vw\",\r\n height: \"190px\",\r\n top: \"-170px\",\r\n left: \"-50vw\",\r\n background: \"var(--primary-color)\",\r\n opacity: \"0.9\",\r\n mixBlendMode: \"multiply\",\r\n zIndex: -1,\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {this.state.albums.length ? (\r\n
    \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {this.state.videos.length !== 0 ? (\r\n \r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport default Music;\r\n","// The app declaration\r\nimport React from \"react\";\r\n// @ts-ignore\r\nimport { Route, Routes } from \"react-router-dom\";\r\nimport \"../assets/fonts/Claxton-Bold.otf\";\r\nimport \"../assets/fonts/Claxton-Light.otf\";\r\nimport \"../assets/fonts/Claxton.otf\";\r\nimport About from \"../pages/About/About\";\r\nimport AdminHome from \"../pages/Admin/Home/AdminHome\";\r\nimport Login from \"../pages/Admin/Login/Login\";\r\nimport PrivateRoute from \"../pages/Admin/PrivateRoute\";\r\nimport Signup from \"../pages/Admin/Signup/Signup\";\r\nimport Body from \"../pages/Body\";\r\nimport Contact from \"../pages/Contact/Contact\";\r\nimport Home from \"../pages/Home/Home\";\r\nimport Music from \"../pages/Music/Music\";\r\nimport \"../styles/App.css\";\r\n\r\nfunction App() {\r\n return (\r\n \r\n }>\r\n } />\r\n } />\r\n } />\r\n } />\r\n \r\n \r\n \r\n }\r\n />\r\n } />\r\n } />\r\n \r\n\r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","// Entrypoint of the javascript application\r\n\r\nimport React from \"react\";\r\n// @ts-ignore\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./app/App\";\r\n// @ts-ignore\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport ReactGA from \"react-ga\";\r\n\r\nReactGA.initialize(\"UA-216009723-1\");\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n"],"sourceRoot":""}