This commit is contained in:
Belle 2022-12-16 18:22:38 -05:00
commit 9420d1a7ac
80 changed files with 5482 additions and 871 deletions

View file

@ -21,7 +21,7 @@ const Announcement = ({
variant="interactive"
sx={{
variant: 'cards.translucent',
mx: 'auto',
// mx: 'auto',
maxWidth: 'narrow',
width: '100%',
textAlign: 'left',

View file

@ -125,7 +125,8 @@ export default function Signup() {
eventName,
teamType,
teamNumber,
userEmail
userEmail,
category: 'robotics team'
})
})

3
components/comma.js Normal file
View file

@ -0,0 +1,3 @@
export default function Comma({ children }) {
return(children.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','))
}

30
components/dot.js Normal file
View file

@ -0,0 +1,30 @@
import { Text } from "theme-ui"
import { keyframes } from '@emotion/react'
const flashing = keyframes({
from: { opacity: 0 },
'50%': { opacity: 1 },
to: { opacity: 0 }
})
export default function Dot() {
return (
<Text
sx={{
bg: 'green',
color: 'white',
borderRadius: 'circle',
display: 'inline-block',
lineHeight: 0,
width: '.4em',
height: '.4em',
marginRight: '.4em',
marginBottom: '.12em',
animationName: `${flashing}`,
animationDuration: '3s',
animationTimingFunction: 'ease-in-out',
animationIterationCount: 'infinite'
}}
/>
)
}

View file

@ -85,15 +85,6 @@ const Footer = ({ dark = false, children, ...props }) => (
<Heading as="h2" variant="subheadline" mb={3}>
Hack Club
</Heading>
<NextLink href="/slack" passHref>
<Link>Slack</Link>
</NextLink>
<NextLink href="/hackathons" passHref>
<Link>Hackathons</Link>
</NextLink>
<NextLink href="/opensource" passHref>
<Link>Open Source</Link>
</NextLink>
<NextLink href="/philosophy" passHref>
<Link>Philosophy</Link>
</NextLink>
@ -117,14 +108,6 @@ const Footer = ({ dark = false, children, ...props }) => (
<Heading as="h2" variant="subheadline" mb={3}>
Resources
</Heading>
<Link href="https://workshops.hackclub.com/">Workshops</Link>
<NextLink href="/bank" passHref>
<Link>Fiscal Sponsorship</Link>
</NextLink>
<Link href="https://sprig.hackclub.com/">Sprig</Link>
<Link href="https://hackathons.hackclub.com/">
Upcoming Hackathons
</Link>
<Link href="https://events.hackclub.com/">Community Events</Link>
<Link href="https://toolbox.hackclub.com/">Toolbox</Link>
<Link href="https://hackclub.com/map">Clubs Map</Link>

View file

@ -9,41 +9,63 @@ import {
Image,
Link
} from 'theme-ui'
import { useState } from 'react'
import { keyframes } from '@emotion/react'
import Tilt from '../tilt'
import NextLink from 'next/link'
import PageVisibility from 'react-page-visibility'
import { formatAddress } from '../../lib/helpers'
export default function ScrollingHackathons({ eventData }) {
export default function ScrollingHackathons({
eventData,
mode,
title,
...props
}) {
const [pageIsVisible, setPageIsVisible] = useState(true)
const handleVisibilityChange = isVisible => {
setPageIsVisible(isVisible)
}
return (
<>
<Container sx={{ mb: 5 }}>
<Heading
sx={{
fontSize: [36, 48],
color: 'black'
}}
>
Upcoming high school hackathons...
</Heading>
<Dot />
<Text variant="lead" sx={{ mb: 4, color: 'muted', mr: 2 }}>
from{' '}
<NextLink href="https://hackathons.hackclub.com" passHref>
<Link sx={{ color: 'currentcolor' }}>hackathons.hackclub.com</Link>
</NextLink>
, last updated just now.
</Text>
</Container>
<Ticker mode="string">
{() => (
<Box as="div" sx={{ display: 'flex', py: 3 }}>
{eventData.map(({ ...props }) => (
<EventCard key={eventData.id} {...props} />
))}
</Box>
{title ? (
<Container sx={{ mb: 5 }}>
<Heading
sx={{
fontSize: [36, 48],
color: 'black'
}}
>
Upcoming high school hackathons...
</Heading>
<Dot />
<Text variant="lead" sx={{ mb: 4, color: 'muted', mr: 2 }}>
from{' '}
<NextLink href="https://hackathons.hackclub.com" passHref>
<Link sx={{ color: 'currentcolor' }}>
hackathons.hackclub.com
</Link>
</NextLink>
, last updated just now.
</Text>
</Container>
) : (
<></>
)}
<PageVisibility onChange={handleVisibilityChange}>
{pageIsVisible && (
<Ticker mode={mode || 'string'} {...props}>
{() => (
<Box as="div" sx={{ display: 'flex', py: 3 }}>
{eventData.map(({ ...props }) => (
<EventCard key={eventData.id} {...props} />
))}
</Box>
)}
</Ticker>
)}
</Ticker>
</PageVisibility>
</>
)
}

View file

@ -0,0 +1,153 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import { Fade } from 'react-reveal'
import Buttons from './button'
/** @jsxImportSource theme-ui */
export default function Bank({ data }) {
return (
<Box sx={{ position: 'relative' }}>
<CardModel
color="white"
sx={{
backgroundColor: 'dark',
minHeight: ['300px', '400px', '380px'],
backgroundColor: 'darkless',
backgroundImage: `url('https://icons.hackclub.com/api/icons/0x29282C/glyph:bank-account.svg')`,
backgroundSize: '40px 40px',
backgroundRepeat: 'repeat',
backgroundPosition: '10% 10%',
color: 'snow'
}}
badge
text={data[0]}
>
<Text variant="title" sx={{ color: 'red', fontSize: ['36px', 4, 5] }}>
Hack Club Bank
</Text>
<Grid columns={[1, '1.3fr 1fr', 2]}>
<Box>
<Text as="p" variant="subtitle">
Become a 501(c)3 nonprofit and join 700+ teams using Hack Club
Bank to run world-class events.
</Text>
<Text as="p" variant="subtitle">
This platform is built and maintained by the Hack Club team.
</Text>
<Box
sx={{
position: 'relative',
width: '100%',
display: [null, 'none', 'none'],
mb: '-50px',
mt: 3
}}
>
<Box
sx={{
width: '100%',
height: '250px',
position: 'relative',
display: 'block',
textAlign: 'center',
'&:before': {
content: '""',
backgroundImage: 'url(/home/bank-computer.webp)',
backgroundSize: '100%',
backgroundRepeat: 'no-repeat',
width: '100%',
height: '100%',
marginX: 'auto',
display: 'block'
}
}}
>
<Box
sx={{
backgroundImage: 'url(/home/bank-screen.webp)',
zIndex: 2,
position: 'absolute',
margin: 'auto',
top: '8px',
left: '35px',
width: '75%',
height: '70%',
backgroundSize: '100%',
backgroundRepeat: 'no-repeat'
}}
></Box>
</Box>
</Box>
<Buttons
id="27"
icon="bank-account"
link="/bank"
primary="red"
sx={{ mt: [0, 3, 4] }}
>
Start banking!
</Buttons>
</Box>
</Grid>
</CardModel>
<Box
sx={{
position: 'absolute',
right: [0, '-120px', '-30px'],
bottom: [0, '-30px', '-60px'],
display: ['none', 'block', 'block'],
zIndex: 3
}}
>
{' '}
<Box
sx={{
width: ['250px', '500px'],
height: ['180px', '360px'],
position: 'relative',
display: 'block',
textAlign: 'center',
'&:before': {
content: '""',
backgroundImage: 'url(/home/bank-computer.webp)',
backgroundSize: '100%',
backgroundRepeat: 'no-repeat',
width: '100%',
height: '100%',
marginX: 'auto',
display: 'block'
}
}}
>
<Box
sx={{
backgroundImage: 'url(/home/bank-screen.webp)',
zIndex: 2,
position: 'absolute',
margin: 'auto',
top: '13px',
left: '70px',
width: '75%',
height: '80%',
backgroundSize: '100%',
backgroundRepeat: 'no-repeat'
}}
></Box>
</Box>
</Box>
</Box>
)
}

View file

@ -0,0 +1,77 @@
import React, { useState } from 'react'
import {
Box,
Button,
Card,
Container,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import ReactTooltip from 'react-tooltip'
import Icon from '@hackclub/icons'
/** @jsxImportSource theme-ui */
export default function Buttons({ children, icon, id, content, link, primary, ...props }) {
let fontWeight = primary != null ? '700' : '400'
return (
<Box
py={1}
>
<Button
data-place="right"
data-for={id}
data-effect="solid"
data-tip
sx={{
background: primary || 'rgb(255, 255, 255, 0.3)',
borderRadius: '100px',
border: 'none',
display: 'flex',
alignItems: 'center',
color: 'inherit',
px: '3',
py: primary != null ? '5px' : 1,
width: 'fit-content',
textTransform: 'none',
fontWeight: '400',
fontSize: primary != null ? ['18px', '20px', '22px'] : [1, '16px', '18px'],
backdropFilter: 'blur(2px)',
fontWeight: fontWeight
}}
as={"a"}
href={link || '/'}
target="_blank"
rel="noreferrer"
{...props}
>
<Icon
glyph={icon || 'plus-fill'}
sx={{ color: 'inherit', marginRight: 2 }}
size={24}
mr={2}
/>
<Text sx={{ fontFamily: 'Phantom Sans', textAlign: 'left' }}>{children}</Text>
</Button>
<ReactTooltip
id={id}
delayShow={150}
delayHide={100}
delayUpdate={500}
clickable={true}
getContent={() => {
return null
}}
className="custom-tooltip-radius custom-arrow-radius"
arrowRadius="2"
tooltipRadius="4"
>
{content}
</ReactTooltip>
</Box>
)
}

View file

@ -0,0 +1,156 @@
import Tilt from './tilt'
import Icon from '../../icon'
import {
Box,
Button,
Card,
Flex,
Container,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import { Zoom } from 'react-reveal'
import ReactTooltip from 'react-tooltip'
import Comma from '../../comma'
/** @jsxImportSource theme-ui */
const CardModel = ({
background,
children,
link,
highlight,
github_link,
badge,
text,
color,
stars,
delay,
position,
...props
}) => (
// <Zoom delay={delay}>
<Card
sx={{
position: 'relative',
width: '100%',
color: color,
my: [4, 5],
p: '24px',
backgroundSize: 'cover',
backgroundImage: `url(${background})` || '',
backgroundPosition: 'center bottom',
backgroundRepeat: 'no-repeat',
'& p': {
fontSize: ['18px', '20px', '22px']
}
}}
{...props}
>
{badge && (
<Box
sx={{
position: ['relative', 'relative', 'relative', 'absolute'],
width: 'fit-content',
// float: 'right',
right: [0, 0, 0, 3],
top: [0, 0, 0, 3],
zIndex: 3,
px: 3,
py: 2,
mb: 2,
float: [null, 'right', null],
background: 'rgba(255,255,255,0.2)',
borderRadius: 'extra',
fontWeight: 'bold'
}}
>
{text || 'Happening now'}
</Box>
)}
{github_link != null ? (
<Box>
{position == 'bottom' ? (
<Flex
sx={{
position: 'absolute',
left: 3,
bottom: 2,
alignItems: 'center',
zIndex: 2
}}
>
<Link
href={github_link}
sx={{ mr: 2 }}
target="_blank"
rel="noopener"
>
<Icon
glyph="github"
size={42}
color="#2351fs"
sx={{
color: '#000',
'&:hover': {
color: highlight || color
}
}}
/>
</Link>
{stars != null ? (
<Text as="h2">
<Comma>{stars}</Comma>
</Text>
) : (
<></>
)}
</Flex>
) : (
<Flex
sx={{
position: 'absolute',
right: 2,
top: 2,
alignItems: 'center',
zIndex: 2
// flexDirection: ['column', 'row', 'row']
}}
>
{stars != null ? (
<Text as="h2" sx={{ fontSize: ['20px', '24px', '28px'] }}>
<Comma>{stars}</Comma>
</Text>
) : (
<></>
)}
<Link href={github_link} sx={{ ml: 2 }}>
<Icon
glyph="github"
size={42}
sx={{
color: color,
transition: '0.4s',
'&:hover': {
color: highlight || color
}
}}
/>
</Link>
</Flex>
)}
</Box>
) : (
<></>
)}
{children}
<ReactTooltip />
</Card>
// </Zoom>
)
export default CardModel

View file

@ -0,0 +1,119 @@
import React, { useState } from 'react'
import Buttons from './button'
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Grid,
Flex,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import ReactTooltip from 'react-tooltip'
/** @jsxImportSource theme-ui */
const Cover = () => (
<Box
sx={{
position: 'absolute',
bottom: 0,
top: 0,
left: 0,
right: 0,
backgroundImage:
'linear-gradient(to bottom,rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.5))',
opacity: 0.8,
zIndex: 1
}}
/>
)
export default function Clubs() {
// let [fooRef, setFooRef] = useState('')
// let [toggle, setToggle] = useState(true)
return (
<CardModel
color="white"
sx={{
backgroundColor: 'red'
}}
>
<Image
src="/home/clubs-bg.webp"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '120%',
height: '120%',
ml: ['-24px', '-32px', '-32px', '-32px'],
mt: ['-24px', '-32px', '-32px', '-32px'],
zIndex: 0
}}
/>
<Cover />
<Text
variant="title"
sx={{
borderRadius: 'default',
px: 2,
mx: [-2, 0],
whiteSpace: [null, 'nowrap', 'nowrap'],
color: ['white', 'red', 'red'],
bg: ['transparent', 'white', 'white'],
fontSize: ['36px', 4, 5],
position: 'relative',
zIndex: 2
}}
>
Network of 400+ coding clubs
</Text>
<Grid columns={[1, 1, 2]} sx={{ position: 'relative', zIndex: 2 }}>
<Box>
<Text
as="p"
variant="subtitle"
sx={{ textShadow: '1px 1px 5px black' }}
>
Join or start a Hack Club and be part of a network of high quality
coding clubs where you learn to code entirely through building
things.
</Text>
<Text
as="p"
variant="subtitle"
sx={{ textShadow: '1px 1px 5px black' }}
>
You can start with no experience and build and ship a project every
meeting.
</Text>
<Flex sx={{ flexDirection: 'column', mt: [3, 3, 4] }}>
<Buttons
content="we'll support you with meeting content, stickers, and more"
id="2"
icon="welcome"
link="https://apply.hackclub.com/"
primary="red"
>
Start a club
</Buttons>
{/* <Buttons
content="click for our clubs map and reach out to team@hackclub.com to be connected"
id="1"
icon="rep"
link="/map"
>
Join a Hack Club near you
</Buttons> */}
</Flex>
</Box>
</Grid>
</CardModel>
)
}

View file

@ -0,0 +1,205 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Buttons from './button'
import Dot from '../../dot'
/** @jsxImportSource theme-ui */
import { useEffect, useState } from 'react'
export default function Epoch() {
const calculateTimeLeft = () => {
const difference = +new Date(`2022-12-30T23:00:00.000Z`) - +new Date()
let timeLeft = {}
if (difference > 0) {
timeLeft = {
days: Math.floor(difference / (1000 * 60 * 60 * 24)),
hours: Math.floor((difference / (1000 * 60 * 60)) % 24),
min: Math.floor((difference / 1000 / 60) % 60),
sec: Math.floor((difference / 1000) % 60)
}
}
return timeLeft
}
const [timeLeft, setTimeLeft] = useState(calculateTimeLeft())
useEffect(() => {
const timer = setTimeout(() => {
setTimeLeft(calculateTimeLeft())
}, 1000)
return () => clearTimeout(timer)
})
const timer = []
Object.keys(timeLeft).forEach(e => {
if (!timeLeft[e]) {
if (e == 'days') {
return
} else if (e == 'hours') {
if (!timeLeft['days']) {
return
}
} else if (e == 'min') {
if (!timeLeft['days'] && !timeLeft['hours']) {
return
}
} else {
if (!timeLeft['days'] && !timeLeft['hours'] && !timeLeft['min']) {
return
}
}
}
var name = ''
if (e == 'days') {
if (timeLeft[e] == 1 || timeLeft[e] == 0) {
name = 'day'
} else {
name = 'days'
}
} else if (e == 'hours') {
if (timeLeft[e] == 1 || timeLeft[e] == 0) {
name = 'hour'
} else {
name = 'hours'
}
} else if (e == 'min') {
name = 'min'
} else {
name = 'sec'
}
timer.push(
<Box
sx={theme => ({
color: '#FF4794',
position: 'relative',
width: [null, '85%', '80%'],
height: [null, '50%', '85%'],
border: 'none',
borderColor: '#FF4794',
fontSize: [3, 4],
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
textAlign: 'center',
opacity: 0.7
})}
>
<Box>
<Text
sx={{
color: '#FF4794'
}}
>
{timeLeft[e]}{' '}
</Text>
<Text
sx={{
color: 'white',
position: 'relative',
fontSize: [1, '16px', '20px'],
display: 'block',
pb: '15px'
}}
>
{name}
</Text>
</Box>
</Box>
)
})
return (
<CardModel
id="epoch"
color="white"
sx={{
backgroundColor: '#000'
}}
>
<Image
src="/home/epoch-bg.webp"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '100%',
height: '100%',
ml: ['-24px', '-32px', '-32px', '-32px'],
mt: ['-24px', '-32px', '-32px', '-32px'],
}}
/>
<Grid columns={[1, 1, '1fr 1.5fr']} sx={{ position: 'relative' }}>
<Box>
<img
src="https://cloud-jzsq7jfvg-hack-club-bot.vercel.app/0group_9.png"
sx={{
width: ['220px', '220px', '240px', '350px'],
position: 'relative',
zIndex: 2
}}
/>
<Box>
{timer.length ? (
<Grid
key="{e}"
columns={['1fr 1fr 1fr 1fr']}
sx={{ mr: 2, mt: 2 }}
>
{timer}
</Grid>
) : (
<></>
)}
</Box>
</Box>
<Box ml={[0, 0, 3]}>
<Text as="p" variant="subtitle" sx={{mt: 0}}>
Join us this winter as 150+ teenage hackers from all around the
world travel to Delhi, India for Epoch! Together, well build the
unexpected, share what weve learnt in 2022, and experience the
thrill of being in-person together.
</Text>
<Text as="p" variant="subtitle">
In <Link sx={{color: '#FF4794' }} href="https://hackclub.slack.com/archives/C04CGDDLC72" target="_blank" rel="noopener">Austin</Link>, <Link sx={{color: '#FF4794' }} href="https://epochba.hackclub.com/" target="_blank" rel="noopener">Bay Area</Link>, or <Link sx={{color: '#FF4794' }} href="https://epochvt.hackclub.com/" target="_blank" rel="noopener">Vermont</Link>? Join a regional Epoch event!
</Text>
<Flex sx={{ flexDirection: 'column', mt: [4, 3, 4], position: 'relative' }}>
<Buttons
// content="travel stipends available"
id="17"
link="https://epoch.hackclub.com"
icon="post"
primary="#FF4794"
>
Sign up and attend Epoch
</Buttons>
<Buttons
content="join #epoch-bts on Slack"
id="18"
link="/slack"
icon="idea"
>
Help plan the hackathon
</Buttons>
</Flex>
</Box>
</Grid>
</CardModel>
)
}

View file

@ -0,0 +1,102 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Buttons from './button'
import Event from '../events'
/** @jsxImportSource theme-ui */
export default function Events({ data, stars, events }) {
return (
<CardModel
color="white"
sx={{
backgroundColor: 'elevated',
background:
'linear-gradient(to bottom,rgba(0, 0, 0, 0.4),rgba(0, 0, 0, 0.6) 25%,rgba(0, 0, 0, 0.7) 50%, rgba(0, 0, 0, 0.8) 100%), url("https://hackclub.com/_next/image/?url=https://cdn.glitch.com/a7605379-7582-4aac-8f44-45bbdfca0cfa%252F2020-05-16_screenshot.jpeg?v%3D1589633885855&w=2048&q=75")',
backgroundPositon: 'center center',
backgroundSize: '100% auto'
}}
>
<Text variant="title" sx={{ fontSize: ['36px', 4, 5], zIndex: 2 }}>
Virtual Events
</Text>
<Grid columns={[1, '0.6fr 1fr']}>
<Box>
<Text as="p" variant="subtitle">
Hack Clubbers run events that dont suck. From live coding sessions
to movie nights, we like to hangout on calls.
</Text>
<Text as="p" variant="subtitle">
Sometimes, we also invite someone we really want to speak to (like{' '}
<Link
href="https://www.youtube.com/watch?v=qiLiyQ_2gho"
target="_blank"
rel="noopener"
sx={{
color: 'inherit',
fontStyle: 'italic',
textDecoration: 'none'
}}
>
Sal Khan
</Link>
,{' '}
<Link
href="https://www.youtube.com/watch?v=h3nAdaz5fOg"
target="_blank"
rel="noopener"
sx={{
color: 'inherit',
fontStyle: 'italic',
textDecoration: 'none'
}}
>
George Hotz
</Link>
, and{' '}
<Link
href="https://www.youtube.com/watch?v=IWFtj9cCaB0"
target="_blank"
rel="noopener"
sx={{
color: 'inherit',
fontStyle: 'italic',
textDecoration: 'none'
}}
>
Lady Ada
</Link>
) and host an{' '}
<Link
href="/amas"
target="_blank"
rel="noopener"
sx={{ color: 'inherit' }}
>
AMA
</Link>{' '}
with them.{' '}
</Text>
<Button variant="primary" mt={3}>
Find an event
</Button>
</Box>
<Box>
<Event events={events} />
</Box>
</Grid>
</CardModel>
)
}

View file

@ -0,0 +1,257 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import { useState, useEffect } from 'react'
import Buttons from './button'
import ScrollingHackathons from '../../hackathons/scrolling-hackathons'
import Dot from '../../dot'
/** @jsxImportSource theme-ui */
const Cover = () => (
<Box
sx={{
position: 'absolute',
bottom: 0,
top: 0,
left: 0,
right: 0,
backgroundImage:
'linear-gradient(to bottom,rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.6))',
opacity: 0.8,
zIndex: 1
}}
/>
)
export default function Hackathons({ data, stars }) {
// let [count, setCount] = useState(0)
// useEffect(() => {
// function add() {
// if (count < data.length) {
// setCount(count + 1)
// } else {
// setCount(0)
// }
// }
// setInterval(add, 2000)
// }, [count])
return (
<CardModel
color="white"
sx={{
backgroundColor: 'dark' // background:
// 'linear-gradient(to bottom,rgba(0, 0, 0, 0.2),rgba(0, 0, 0, 0.4) 25%,rgba(0, 0, 0, 0.5) 50%, rgba(0, 0, 0, 0.6) 100%), url("https://hackclub.com/bank/bg.webp")',
// backgroundPositon: 'center center',
// backgroundSize: '100% auto'
}}
stars={stars}
github_link="https://github.com/hackclub/hackathons"
highlight="blue"
// background="https://hackclub.com/bank/bg.webp"
>
<Image
src="/home/hackathons-bg.webp"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '100%',
height: '100%',
ml: -4,
mt: -4,
zIndex: 0
}}
/>
<Cover />
<Text
variant="title"
sx={{ fontSize: ['36px', 4, 5], position: 'relative', zIndex: 2 }}
>
High school hackathons
</Text>
<Grid
columns={[1, 1, 2]}
sx={{ position: 'relative', zIndex: 2, minHeight: '200px' }}
>
<Box>
<Text as="p" variant="subtitle">
We support the largest network of high school hackathons in the
world. From an online community of organizers to free stickers and
more!{' '}
</Text>
<Flex sx={{ flexDirection: 'column', mt: [3, 3, 4] }}>
<Buttons
id="19"
icon="event-code"
link="https://hackathons.hackclub.com"
primary="blue"
>
Browse hackathons
</Buttons>
<Buttons
// content="learn more about available resources"
id="20"
icon="bolt"
link="/hackathons"
>
Organizer? Learn more
</Buttons>
</Flex>
{/* <Button
variant="primary"
sx={{ bg: 'blue' }}
mt={3}
as="a"
href="https://editor.sprig.hackclub.com"
target="_blank"
rel="noopener"
>
Find a hackathon
</Button> */}
</Box>
<Flex
sx={{
flexDirection: 'column',
alignItems: 'flex-end',
alignSelf: 'flex-end',
position: ['absolute', 'absolute', 'relative'],
right: 0,
bottom: 0,
display: ['none', 'none', 'block']
}}
>
<Box sx={{ width: 'fit-content', float: 'right' }}>
<Text sx={{ fontSize: 'small', width: 'fit-content' }}>
Upcoming hackathons <Dot />
</Text>
{data.slice(0, 5).map(data => (
<Box
sx={{
zIndex: '1',
// bg: 'rgb(255, 255, 255, 0.3)',
color: 'white',
textDecoration: 'none',
fontWeight: 'normal',
width: 'fit-content',
display: 'flex',
alignItems: 'center',
fontSize: 'small',
my: 2,
a: {
textDecoration: 'none',
color: 'white'
}
}}
key={data.name}
>
{data.logo && (
<Box
sx={{
backgroundImage: `linear-gradient(rgba(0,0,0,0) 0%, rgba(0,0,0,0.375) 75%), url('${data.banner}')`,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 'circle',
height: ['20px', '25px', '30px'],
width: ['20px', '25px', '30px']
}}
>
<Image
src={data.logo}
alt={`${data.name} logo`}
loading="lazy"
sx={{
height: '70%',
width: '70%',
objectFit: 'contain',
borderRadius: 'default'
}}
/>
</Box>
)}
<Link href={data.website}>
{data.name} |{' '}
{new Intl.DateTimeFormat('en-US', { month: 'long' }).format(
new Date(data.start).getMonth()
)}{' '}
{new Date(data.start).getUTCDate()}
</Link>
</Box>
))}
</Box>
</Flex>
</Grid>
<Flex
sx={{
flexDirection: 'row',
position: 'relative',
alignItems: 'center',
mt: 2,
justifyContent: 'space-between',
display: ['block', 'block', 'none']
}}
>
<Text sx={{ fontSize: 'small' }}>Upcoming hackathon:</Text>
{data.slice(0, 1).map(data => (
<Box
sx={{
zIndex: '1',
// bg: 'rgb(255, 255, 255, 0.3)',
color: 'white',
textDecoration: 'none',
fontWeight: 'normal',
width: 'fit-content',
display: 'flex',
alignItems: 'center',
fontSize: 'small',
my: 2,
a: {
textDecoration: 'none',
color: 'white'
}
}}
key={data.name}
>
{data.logo && (
<Box
sx={{
backgroundImage: `linear-gradient(rgba(0,0,0,0) 0%, rgba(0,0,0,0.375) 75%), url('${data.banner}')`,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 'circle',
height: ['20px', '25px', '30px'],
width: ['20px', '25px', '30px']
}}
>
<Image
src={data.logo}
alt={`${data.name} logo`}
loading="lazy"
sx={{
height: '70%',
width: '70%',
objectFit: 'contain',
borderRadius: 'default'
}}
/>
</Box>
)}
<Link href={data.website}>{data.name}</Link>
</Box>
))}
</Flex>
</CardModel>
)
}

View file

@ -0,0 +1,269 @@
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import { keyframes } from '@emotion/react'
import styled from '@emotion/styled'
import usePrefersMotion from '../lib/use-prefers-motion'
export default function Inspect() {
const prefersMotion = usePrefersMotion()
const cursor = keyframes` 0% {
cursor: grabbing
}
5% {
cursor: grab
}
10% {
cursor: zoom-out
}
15% {
cursor: all-scroll
}
20% {
cursor: row-resize
}
25% {
cursor: zoom-in
}
30% {
cursor: text
}
35% {
cursor: crosshair
}
40% {
cursor: wait
}
45% {
cursor: progress
}
50% {
cursor: pointer
}
55% {
cursor: context-menu
}
60% {
cursor: none
}
65% {
cursor: help
}
70% {
cursor: vertical-text
}
75% {
cursor: alias
}
80% {
cursor: copy
}
85% {
cursor: move
}
90% {
cursor: no-drop
}
95% {
cursor: not-allowed
}
100% {
cursor: ew-resize
}`
const animation1 = keyframes`
0% {
clip: rect(57px, 9999px, 7px, 0);
}
5% {
clip: rect(61px, 9999px, 22px, 0);
}
10% {
clip: rect(34px, 9999px, 47px, 0);
}
15% {
clip: rect(92px, 9999px, 40px, 0);
}
20% {
clip: rect(6px, 9999px, 40px, 0);
}
25% {
clip: rect(39px, 9999px, 46px, 0);
}
30% {
clip: rect(33px, 9999px, 17px, 0);
}
35% {
clip: rect(5px, 9999px, 17px, 0);
}
40% {
clip: rect(40px, 9999px, 70px, 0);
}
45% {
clip: rect(14px, 9999px, 34px, 0);
}
50% {
clip: rect(26px, 9999px, 30px, 0);
}
55% {
clip: rect(15px, 9999px, 100px, 0);
}
60% {
clip: rect(10px, 9999px, 32px, 0);
}
65% {
clip: rect(49px, 9999px, 61px, 0);
}
70% {
clip: rect(61px, 9999px, 22px, 0);
}
75% {
clip: rect(85px, 9999px, 36px, 0);
}
80% {
clip: rect(38px, 9999px, 59px, 0);
}
85% {
clip: rect(21px, 9999px, 88px, 0);
}
90% {
clip: rect(46px, 9999px, 16px, 0);
}
95% {
clip: rect(13px, 9999px, 35px, 0);
}
100% {
clip: rect(75px, 9999px, 13px, 0);
}
`
const animation2 = keyframes`
0% {
clip: rect(62px, 9999px, 68px, 0);
}
5% {
clip: rect(45px, 9999px, 9px, 0);
}
10% {
clip: rect(9px, 9999px, 76px, 0);
}
15% {
clip: rect(89px, 9999px, 83px, 0);
}
20% {
clip: rect(44px, 9999px, 8px, 0);
}
25% {
clip: rect(59px, 9999px, 24px, 0);
}
30% {
clip: rect(96px, 9999px, 51px, 0);
}
35% {
clip: rect(38px, 9999px, 28px, 0);
}
40% {
clip: rect(92px, 9999px, 1px, 0);
}
45% {
clip: rect(63px, 9999px, 80px, 0);
}
50% {
clip: rect(1px, 9999px, 49px, 0);
}
55% {
clip: rect(7px, 9999px, 49px, 0);
}
60% {
clip: rect(35px, 9999px, 16px, 0);
}
65% {
clip: rect(93px, 9999px, 72px, 0);
}
70% {
clip: rect(55px, 9999px, 52px, 0);
}
75% {
clip: rect(58px, 9999px, 68px, 0);
}
80% {
clip: rect(94px, 9999px, 95px, 0);
}
85% {
clip: rect(81px, 9999px, 24px, 0);
}
90% {
clip: rect(98px, 9999px, 12px, 0);
}
95% {
clip: rect(2px, 9999px, 96px, 0);
}
100% {
clip: rect(95px, 9999px, 47px, 0);
}
`
const Glitch = styled(Text)`
color: #000;
text-decoration: none;
bottom: 50px;
left: 15px;
font-size: 1em;
display: inline-block;
text-align: left;
animation: ${cursor} 3s infinite ease-in-out;
&:hover,
&:hover:before,
&:hover:after {
font-weight: normal;
text-decoration: underline;
}
,
&:before,
&:after {
color: #000;
content: 'Hacker? Inspect 🔍 this page to learn more.';
position: absolute;
// background: #303039;
width: fit-content;
height: fit-content;
overflow: hidden;
// clip: rect(0, 256px, 0, 0);
}
,
&:before {
left: 2px;
text-shadow: -1px 0 red;
animation: ${animation1} 2s infinite linear alternate-reverse;
}
,
&:after {
left: -2px;
text-shadow: -1px 0 green;
animation: ${animation2} 4s infinite linear alternate-reverse;
}
`
return (
<>
{prefersMotion ? (
<Glitch>Hacker? Inspect 🔍 this page to learn more.</Glitch>
) : (
<Text sx={{ display: 'absolute', bottom: '50px', left: 0 }}>
Hacker? Inspect 🔍 this page to learn more
</Text>
)}
</>
)
}

View file

@ -0,0 +1,117 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Buttons from './button'
/** @jsxImportSource theme-ui */
export default function Sinerider({ stars }) {
return (
<CardModel
github_link="https://github.com/hackclub/sinerider/"
// link="https://sprig.hackclub.com"
stars={stars}
color="white"
sx={{
backgroundSize: 'cover',
// backgroundImage:
// 'url(https://cloud-pwqxgzqdg-hack-club-bot.vercel.app/0initial-bg__1_.png)',
// backgroundPosition: 'center -60px',
// backgroundRepeat: 'no-repeat',
backgroundColor: '#271932'
}}
position={[null, 'bottom', 'bottom']}
highlight="#271932"
>
<Image
src="/home/sinerider-bg.webp"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '100%',
height: '100%',
ml: ['-24px', '-32px', '-32px', '-32px'],
mt: ['-24px', '-32px', '-32px', '-32px'],
zIndex: 0
}}
/>
<Image
src="https://cloud-9cei11221-hack-club-bot.vercel.app/0logo_text_2.png"
sx={{
width: ['200px', '250px', '300px'],
mt: ['-10px', '-20px', '-20px'],
position: 'relative',
zIndex: 2
}}
/>
<Grid columns={[1, 1, 2]} sx={{ position: 'relative', zIndex: 2 }}>
<Box></Box>
<Box sx={{ mt: ['-40px', '-40px', '-150px'] }}>
<Text as="p" variant="subtitle">
A game about love and graphing, coming 2023! This project is powered
by teenage hackers of all kinds: artists, musicians, programmers,
storytellers so if thats you, come join us; we need your help to
make this thing real!
</Text>
<Flex sx={{ flexDirection: 'column', mt: [3, 3, 4] }}>
<Buttons
// content="you could create the art, be a scene maker, or write graphics rendering code"
id="4"
icon="rainbow"
href="https://github.com/hackclub/sinerider/#readme"
target="_blank"
rel="noopener"
primary="#CAB4D4"
sx={{ color: '#271932' }}
>
Join the development
</Buttons>
{/* <Buttons
// content="DM @cwalker in Slack to learn more"
id="5"
icon="view"
// href="/slack"
target="_blank"
rel="noopener"
>
Be a scene maker
</Buttons> */}
<Buttons
// content="DM @cwalker in Slack to learn more"
id="26"
icon="view"
href="https://sinerider.com"
target="_blank"
rel="noopener"
>
View a game preview
</Buttons>
</Flex>
{/* <Button
variant="primary"
sx={{
backgroundColor: '#CAB4D4',
color: '#271932',
mt: 3
}}
as="a"
href="https://github.com/hackclub/sinerider/#readme"
>
Join the development
</Button> */}
</Box>
</Grid>
</CardModel>
)
}

View file

@ -0,0 +1,237 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Buttons from './button'
import usePrefersMotion from '../../../lib/use-prefers-motion'
import useHasMounted from '../../../lib/use-has-mounted'
import { keyframes } from '@emotion/react'
import SlackEvents from '../../slack/slack-events'
import Event from '../events'
import Dot from '../../dot'
import Comma from '../../comma'
import RelativeTime from 'react-relative-time'
/** @jsxImportSource theme-ui */
const Cover = () => (
<Box
sx={{
position: 'absolute',
bottom: 0,
top: 0,
left: 0,
right: 0,
backgroundImage:
'linear-gradient(to bottom,rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.85))',
opacity: 0.8,
zIndex: 1
}}
/>
)
export default function Slack({ data, slackKey, events }) {
const hasMounted = useHasMounted()
const prefersMotion = usePrefersMotion()
return (
<CardModel
color="white"
sx={{
position: 'relative',
overflow: 'hidden',
backgroundImage: t => t.util.gx('cyan', 'purple')
// background:
// 'linear-gradient(to bottom,rgba(0, 0, 0, 0.4),rgba(0, 0, 0, 0.6) 25%,rgba(0, 0, 0, 0.7) 50%, rgba(0, 0, 0, 0.8) 100%), url("https://hackclub.com/_next/image/?url=https://cdn.glitch.com/a7605379-7582-4aac-8f44-45bbdfca0cfa%252F2020-05-16_screenshot.jpeg?v%3D1589633885855&w=2048&q=75")',
// backgroundPositon: 'center center',
// backgroundSize: '100% auto'
}}
>
<Image
src="/home/slack_ama.webp"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '100%',
height: '100%',
ml: ['-24px', '-32px', '-32px', '-32px'],
mt: ['-24px', '-32px', '-32px', '-32px']
}}
/>
<Cover />
<Grid sx={{ zIndex: 2 }}>
<Text
variant="title"
sx={{
fontSize: ['36px', 4, 5],
zIndex: 2,
maxWidth: [null, null, '70%', null]
}}
>
Our online community
</Text>
</Grid>
<Grid columns={[1, 1, '1.6fr 1fr', '1.6fr 1fr']} sx={{ zIndex: 2 }}>
<Box
sx={{
zIndex: 2
}}
>
<Text
variant="subtitle"
as="p"
sx={{ fontSize: [1, '16px', '20px'] }}
>
Coding doesnt have to be a solidary activity. At Hack Club, we make
things together and in our Slack, you'll find awesome people to
hangout with to. Code together, find your programming community, or
just hang out.
</Text>
<Text as="p" variant="subtitle">
Sometimes, we also invite someone we really want to speak to (like
Sal Khan, George Hotz, and Lady Ada) and host an{' '}
<Link
href="/amas"
target="_blank"
rel="noopener"
sx={{ color: 'inherit' }}
>
AMA
</Link>{' '}
with them.{' '}
</Text>
<Event events={events} />
<Buttons
id="13"
link="/slack"
icon="slack"
primary="red"
sx={{ mt: [3, 3, 4] }}
>
Join our Slack
</Buttons>
<Grid sx={{ zIndex: 2 }}>
<Box
sx={{
background: 'rgb(0,0,0,0.6)',
height: ['200px', '170px', '170px', '100%'],
position: ['relative', 'relative', 'absolute'],
zIndex: 3,
width: ['120%', '120%', '260px'],
right: 0,
top: [null, null, 0],
mt: [3, 3, 0],
ml: ['-10%', '-10%', '-5%'],
mb: ['-10%', '-10%', '-5%'],
p: 4,
pt: [3, 3, 4]
}}
>
<Flex
sx={{
flexDirection: ['column', 'row', 'row', 'column'],
justifyContent: 'space-between'
}}
>
<Text variant="eyebrow" as="p" sx={{ color: 'white' }}>
<Dot />
Live from Slack
</Text>
<Text sx={{ color: 'muted' }}>
As of{' '}
<RelativeTime value={data.ds} titleFormat="YYYY-MM-DD" />
</Text>
</Flex>
<Flex
sx={{
flexDirection: ['row', 'row', 'column'],
justifyContent: 'space-between',
flexWrap: 'wrap'
}}
>
<Box>
<Heading
variant="headline"
sx={{ mb: 0, pt: 2, fontSize: ['28px', '36px', '38px'] }}
>
<Comma>{data.readers_count_1d}</Comma>
</Heading>
<Text
sx={{
textTransform: 'uppercase',
color: 'muted',
fontSize: ['14px', '16px', '18px']
}}
>
Online
</Text>
</Box>
<Box sx={{ display: ['none', 'block', 'block'] }}>
<Heading
variant="headline"
sx={{ mb: 0, pt: 2, fontSize: ['28px', '36px', '38px'] }}
>
<Comma>{data.chats_channels_count_1d}</Comma>
</Heading>
<Text
sx={{
textTransform: 'uppercase',
color: 'muted',
fontSize: ['14px', '16px', '18px']
}}
>
Total channels
</Text>
</Box>
<Box>
<Heading
variant="headline"
sx={{ mb: 0, pt: 2, fontSize: ['28px', '36px', '38px'] }}
>
<Comma>{data.messages_count_1d}</Comma>
</Heading>
<Text
sx={{
textTransform: 'uppercase',
color: 'muted',
fontSize: ['14px', '16px', '18px']
}}
>
Daily messages
</Text>
</Box>
<Box>
<Heading
variant="headline"
sx={{ mb: 0, pt: 2, fontSize: ['28px', '36px', '38px'] }}
>
<Comma>{data.total_members_count}</Comma>
</Heading>
<Text
sx={{
textTransform: 'uppercase',
color: 'muted',
fontSize: ['14px', '16px', '18px']
}}
>
Total members
</Text>
</Box>
</Flex>
</Box>
</Grid>
</Box>
</Grid>
</CardModel>
)
}

View file

@ -0,0 +1,123 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Buttons from './button'
import useSWR from 'swr'
import fetcher from '../../../lib/fetcher'
/** @jsxImportSource theme-ui */
export default function SprigConsole({ stars, consoleCount }) {
return (
<Box sx={{ position: 'relative' }}>
<CardModel
github_link="https://github.com/hackclub/sprig-hardware"
stars={stars}
// link="https://sprig.hackclub.com"
color="white"
sx={{
backgroundSize: 'cover',
backgroundColor: '#2E5626',
backgroundPosition: 'center center',
backgroundRepeat: 'no-repeat',
minHeight: ['300px', '400px', '400px']
}}
highlight="#427A43"
>
<Image
src="https://sprig.hackclub.com/pcb.svg"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '100%',
height: '120%',
ml: '-24px',
opacity: '0.4',
mt: '-24px',
zIndex: 0
}}
/>
<Image
src="https://cloud-8u6hh0ho9-hack-club-bot.vercel.app/0sprig_console.svg"
sx={{
width: ['90%', '450px', '500px'],
mt: ['42px', 0, 0],
position: 'relative',
zIndex: 2
}}
/>
<Text
as="p"
variant="subheadline"
sx={{
background: 'white',
px: 2,
py: 1,
width: 'fit-content',
borderRadius: 'extra',
color: '#016535',
zIndex: 2,
position: ['absolute', 'relative', 'relative'],
top: ['24px', 0, '5px']
}}
>
{420 - consoleCount} consoles left
</Text>
<Grid
columns={[1, '1.2fr 1fr']}
sx={{ zIndex: 2, position: 'relative' }}
>
<Box>
<Image
src="https://cloud-b8z9l7ihq-hack-club-bot.vercel.app/0sprig-light-top-min.png"
sx={{
width: ['120%', '', ''],
maxWidth: ['120%', '', ''],
ml: ['-10%', '', ''],
display: [null, 'none', 'none']
}}
/>
<Text as="p" variant="subtitle" mt={[0, null, null]}>
Play your own Sprig games on this console, which you can assemble
and disassemble. Each kit includes parts needed for getting
started with hardware engineering and embedded systems
programming.{' '}
</Text>
<Buttons
id="6"
icon="emoji"
link="https://github.com/hackclub/sprig/blob/main/docs/GET_A_SPRIG.md"
primary="#427A43"
sx={{ mt: [3, 3, 4] }}
>
Build a game and get your console
</Buttons>
</Box>
<Box></Box>
</Grid>
</CardModel>
<Image
src="https://cloud-b8z9l7ihq-hack-club-bot.vercel.app/0sprig-light-top-min.png"
sx={{
position: 'absolute',
right: ['', '-50%', '-35%','-25%'],
top: ['', '12%', '20%', '10%'],
width: ['', '100%', '85%','70%'],
pointerEvents: 'none',
userSelect: 'none',
display: ['none', 'block', 'block']
}}
/>
</Box>
)
}

View file

@ -0,0 +1,303 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Buttons from './button'
import styled from '@emotion/styled'
import RelativeTime from 'react-relative-time'
/** @jsxImportSource theme-ui */
function Game({ game, gameImage, gameImage1, ...props }) {
return (
<Box
as="div"
sx={{
position: 'relative',
display: 'flex',
flexDirection: 'column',
width: '14rem',
background: 'rgba(54, 66, 85, 0.75)',
borderStyle: 'solid',
borderWidth: '4px',
boxSizing: 'border-box',
borderImageRepeat: 'stretch',
borderImageSlice: '3',
borderImageWidth: '3',
borderImageSource: `url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8" ?><svg version="1.1" width="8" height="8" xmlns="http://www.w3.org/2000/svg"><path d="M3 1 h1 v1 h-1 z M4 1 h1 v1 h-1 z M2 2 h1 v1 h-1 z M5 2 h1 v1 h-1 z M1 3 h1 v1 h-1 z M6 3 h1 v1 h-1 z M1 4 h1 v1 h-1 z M6 4 h1 v1 h-1 z M2 5 h1 v1 h-1 z M5 5 h1 v1 h-1 z M3 6 h1 v1 h-1 z M4 6 h1 v1 h-1 z" fill="rgb(118, 118, 143)" /></svg>')`,
borderImageOutset: '2',
boxShadow: '0 8px 8px rgba(0, 0, 0, 0.2)',
'&:hover': {
transform: 'scale(1.05)',
background: 'rgba(77, 90, 114, 0.8)'
}
}}
{...props}
>
<Box
as="a"
href={`https://editor.sprig.hackclub.com/?file=https://raw.githubusercontent.com/hackclub/sprig/main/games/${game.filename}.js`}
target="_blank"
rel="noopener noreferrer"
sx={{
borderStyle: 'solid',
borderWidth: '4px',
padding: '0.6rem 0.6rem 0 0.6rem',
borderImageRepeat: 'stretch',
borderImageSlice: '3',
borderImageWidth: '3',
borderImageSource: `url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8" ?><svg version="1.1" width="8" height="8" xmlns="http://www.w3.org/2000/svg"><path d="M3 1 h1 v1 h-1 z M4 1 h1 v1 h-1 z M2 2 h1 v1 h-1 z M5 2 h1 v1 h-1 z M1 3 h1 v1 h-1 z M6 3 h1 v1 h-1 z M1 4 h1 v1 h-1 z M6 4 h1 v1 h-1 z M2 5 h1 v1 h-1 z M5 5 h1 v1 h-1 z M3 6 h1 v1 h-1 z M4 6 h1 v1 h-1 z" fill="rgb(167, 171, 185)" /></svg>')`,
borderImageOutset: '2',
height: '100%',
textDecoration: 'none'
}}
>
{/* <Box
sx={{
width: '100%',
height: '65%',
paddingBottom: 'calc(100%-8px)',
border: '4px solid rgb(118, 118, 143)',
margin: 0,
position: 'relative',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
background: 'white',
boxShadow: '0 4px 0px rgba(0, 0, 0, 0.1)',
'&:after': {
content: '""',
position: 'absolute',
top: 0,
height: '100%',
width: '8px',
backgroundImage:
'linear-gradient(rgb(167, 171, 185) 5px, rgb(167, 171, 185) 5px)',
backgroundSize: '8px 8px',
backgroundPosition: 'top center',
backgroundRepeat: 'no-repeat',
zIndex: 2,
left: 0
},
'&:before': {
content: '""',
position: 'absolute',
top: 0,
height: '100%',
width: '8px',
backgroundImage:
'linear-gradient(rgb(167, 171, 185) 5px, rgb(167, 171, 185) 5px)',
backgroundSize: '8px 8px',
backgroundPosition: 'bottom center',
backgroundRepeat: 'no-repeat',
zIndex: 2,
right: 0
}
}}
>
<img
src={gameImage || gameImage1}
alt="game preview"
sx={{
position: 'absolute',
top: 0,
bottom: 0,
left: 0,
objectFit: 'contain',
objectPosition: 'center',
imageRendering: 'pixelated',
width: '100%',
height: '100%',
margin: 0,
padding: 0,
background: 'white'
}}
/>
</Box> */}
<Box sx={{ display: 'flex', flex: '60% 40%', flexWrap: 'wrap' }}>
<Text
as="h3"
sx={{
textTransform: 'lowercase',
textOverflow: 'ellipsis',
width: '100%',
overflow: 'hidden',
color: 'white',
whiteSpace: 'nowrap',
margin: '0.8rem 0 0.8rem 0',
fontSize: '1.4rem',
fontWeight: '400',
my: 0,
lineHeight: '1.4rem'
}}
>
{game.title}
</Text>
<Text
as="span"
sx={{
fontWeight: '300',
fontSize: '1.1rem',
color: 'rgb(151, 166, 187)',
padding: 0,
textOverflow: 'ellipsis',
width: '100%',
overflow: 'hidden',
whiteSpace: 'nowrap',
mt: 0,
lineHeight: '1rem'
}}
>
by {game.author}
</Text>
<Text
as="span"
sx={{
fontWeight: '300',
fontSize: '0.8rem',
color: 'snow',
padding: 0,
opacity: 0.3,
mb: 1
}}
>
<RelativeTime value={game.addedOn} titleFormat="YYYY-MM-DD" />
</Text>
</Box>
</Box>
</Box>
)
}
export default function Sprig({ stars, game, gameImage, gameImage1 }) {
return (
<CardModel
github_link="https://github.com/hackclub/sprig/"
color="white"
// background="https://sprig.hackclub.com/background.jpg"
stars={stars}
highlight="#FFDE4D"
sx={{ backgroundColor: '#0C0C16' }}
>
<Image
src="/home/sprig-bg.webp"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '100%',
height: '100%',
ml: ['-24px', '-32px', '-32px', '-32px'],
mt: ['-24px', '-32px', '-32px', '-32px'],
zIndex: 0
}}
/>
<Image
src="/home/sprig-logo.webp"
sx={{
width: ['150px', '180px', '220px'],
zIndex: 3,
position: 'relative'
}}
/>
<Grid columns={[1, 2]}>
<Box>
<Text
as="p"
variant="subtitle"
sx={{ zIndex: 2, position: 'relative' }}
>
Draw, make music, and craft games in our web-based JavaScript game
editor, which has been used by 7k+ makers around the world.
</Text>
<Flex sx={{ flexDirection: 'column', mt: [3, 3, 4] }}>
<Buttons
content="click here to get started in our editor"
id="6"
icon="emoji"
link="https://editor.sprig.hackclub.com"
primary="#FFDE4D"
sx={{ color: 'black' }}
>
Build a Sprig game
</Buttons>
<Buttons
content="learn more on our github"
id="8"
link="https://github.com/hackclub/sprig"
>
Review games / build the engine
</Buttons>
<Buttons
// content="we're all hanging out in #sprig on Slack"
id="9"
icon="friend"
link="/slack"
>
Connect with other game devs
</Buttons>
</Flex>
</Box>
<Box sx={{ mt: [0, -4, -4] }}>
<Text
sx={{
fontStyle: 'italic',
fontSize: [1, '14px', '16px'],
position: 'relative'
}}
>
New from{' '}
<Link
href="https://sprig.hackclub.com/gallery"
sx={{ textDecoration: 'none', color: 'inherit' }}
>
the gallery
</Link>
...
</Text>
<Grid
columns={[1, 1, 1, 2]}
sx={{
// height: ['250px', '80%', '80%'],
ml: [0, 4, 0],
gap: '20px',
mt: [2, 0, 3],
ml: [1, 0, 0],
mb: [1, 0, 0],
width: ['100%', '90%', '90%']
}}
>
<Game
game={game[0]}
// gameImage={gameImage}
/>
<Game
game={game[1]}
// gameImage1={gameImage1}
sx={{ display: ['none', 'flex', 'flex'] }}
/>
<Game
game={game[2]}
// gameImage={gameImage}
sx={{ display: ['none', 'none', 'flex'] }}
/>
<Game
game={game[3]}
// gameImage1={gameImage1}
sx={{ display: ['none', 'none', 'none', 'flex'] }}
/>
</Grid>
</Box>
</Grid>
</CardModel>
)
}

View file

@ -0,0 +1,21 @@
import React, { useEffect, useRef } from 'react'
import VanillaTilt from 'vanilla-tilt'
// NOTE(@lachlanjc): only pass one child!
const Tilt = ({ options = {}, children, ...props }) => {
const root = useRef(null)
useEffect(() => {
VanillaTilt.init(root.current, {
max: 2,
scale: 1.05,
speed: 600,
glare: false,
'max-glare': 0.25,
gyroscope: false,
...options
})
}, [])
return React.cloneElement(children, { ref: root })
}
export default Tilt

View file

@ -0,0 +1,173 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Buttons from './button'
import Icon from '@hackclub/icons'
import Dot from '../../dot'
/** @jsxImportSource theme-ui */
function BreakdownBox({
subtitle,
icon,
text,
description,
delay,
href,
color,
bg
}) {
return (
<Card
sx={{
color: 'white',
background: 'rgba(54,98,166,0.4)',
height: '100%',
cursor: `${href ? 'pointer' : 'default'}`,
display: 'flex',
flexDirection: 'column',
zIndex: 2,
p: [3, 3, 4]
// justifyContent: 'flex-end'
}}
>
{subtitle ? (
<Text
as="h1"
sx={{
fontSize: [2, 3, 4]
}}
>
{subtitle}
</Text>
) : (
<Box
as="span"
sx={{
width: 'fit-content',
bg: bg || 'white',
borderRadius: 10,
lineHeight: 0,
p: 2,
mb: 1,
display: 'inline-block',
transform: ['scale(0.75)', 'none'],
transformOrigin: 'bottom left',
boxShadow:
'inset 2px 2px 6px rgba(255,255,255,0.2), inset -2px -2px 6px rgba(0,0,0,0.1), 0 1px 4px rgba(0,0,0,0.1), 0 4px 8px rgba(0,0,0,0.1)'
}}
>
<Icon glyph={icon} size={32} color={color || 'white'} />
</Box>
)}
<Heading
sx={{
fontSize: ['16px', '16px', '24px', '26px'],
pt: [1, 2, 3]
}}
>
{text}
</Heading>
<Text
as="p"
sx={{
fontSize: ['18px', '20px', '22px'],
lineHeight: 1.25,
display: ['none', 'none', 'block', 'block']
}}
>
{description}
</Text>
</Card>
)
}
export default function Winter() {
return (
// <Box sx={{position: 'relative'}}>
<CardModel
color="white"
sx={{
backgroundSize: 'cover',
// backgroundImage:
// 'url(https://cloud-6h53svh6x-hack-club-bot.vercel.app/0group_5.png)',
// backgroundPosition: 'center top',
// backgroundRepeat: 'no-repeat',
backgroundColor: '#3561A4'
}}
position={[null, 'bottom', 'bottom']}
badge
>
<Image
src="/home/winter-bg.webp"
sx={{
objectFit: 'cover',
position: 'absolute',
width: '100%',
height: '100%',
ml: ['-24px', '-32px', '-32px', '-32px'],
mt: ['-24px', '-32px', '-32px', '-32px'],
zIndex: 0
}}
/>
<Text variant="title" sx={{ fontSize: ['36px', 4, 5] }}>
Winter hardware wonderland
</Text>
<Text as="p" variant="subtitle">
Get $250 to build your own electronics projects alongside hundreds of
other teenagers in the Hack Club community!
</Text>
<Box>
<Grid gap={[2, 2, 3]} columns={3} py={3}>
<BreakdownBox
icon="settings"
color="#5bc0de"
text="Free hardware"
description="We'll pay for up to $250 of your hardware to build your project."
delay="200"
/>
<BreakdownBox
icon="event-code"
color="#5bc0de"
text="Daily progress"
description={
<>
From <strong>Feb 14-23</strong>, work on your project, sharing
daily updates.
</>
}
delay="100"
/>
<BreakdownBox
icon="friend"
color="#5bc0de"
text="Friends"
description="Find support from our community of 20k+ teenagers in the Hack Club Slack."
delay="300"
/>
</Grid>
<Buttons
// content="click to learn more about how to submit a workshop"
id="13"
link="/winter"
icon="freeze"
primary="white"
sx={{ color: 'blue' }}
>
RSVP
</Buttons>
</Box>
</CardModel>
// </Box>
)
}

View file

@ -0,0 +1,135 @@
import CardModel from './card-model'
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import { useState } from 'react'
import Buttons from './button'
/** @jsxImportSource theme-ui */
const WorkshopCard = ({
slug,
name,
description,
img,
height,
section,
...props
}) => (
<Card
href={`https://workshops.hackclub.com/${slug}`}
passHref
as="a"
variant="interactive"
target="_blank"
rel="noopener"
sx={{
color: 'text',
textDecoration: 'none',
p: [0, 0],
lineHeight: 0,
display: 'flex',
flexDirection: 'column',
height: '80%',
'& span': {
lineHeight: 1.25
},
maxWidth: '250px',
}}
{...props}
>
<Box sx={{ p: 3, lineHeight: 'body' }}>
<Heading as="h3" sx={{ my: 1 }}>
{name}
</Heading>
<Text variant="caption">{description}</Text>
</Box>
<Box
sx={{
width: '100%',
height: '100%'
}}
>
<Image
alt={`${name} demo`}
src={img}
sx={{ width: '100%', height: 'auto' }}
/>
</Box>
</Card>
)
export default function Workshops({ data, stars }) {
return (
<CardModel
color="white"
sx={{
backgroundColor: 'elevated',
background:
'linear-gradient(32deg, rgba(51, 142, 218, 0.9) 0%, rgba(51, 214, 166, 0.9) 100%)'
}}
github_link="https://github.com/hackclub/workshops"
stars={stars}
highlight="blue"
>
<Text variant="title" sx={{ fontSize: ['36px', 4, 5] }}>
Workshops
</Text>
<Grid columns={[1, 2, 2]} >
<Flex sx={{ flexDirection: 'column' }}>
<Text as="p" variant="subtitle">
100+ community-contributed, self-guided coding tutorials and ideas.
Learn to code by building, one project at a time.
</Text>
<Buttons
id="14"
link="https://workshops.hackclub.com"
icon="code"
primary="white"
sx={{ color: 'blue', mt: [3, 3, 4] }}
>
Browse a workshop
</Buttons>
<Buttons
// content="click to learn more about how to submit a workshop"
id="13"
link="https://workshops.hackclub.com/submit-a-workshop/"
icon="event-add"
>
Build a workshop
</Buttons>
</Flex>
<Grid
sx={{ display: ['none', 'grid', 'grid'], gap: 3}}
columns={[1, 1, 1, 2]}
>
<WorkshopCard
key="splatter_paint"
slug="splatter_paint"
name="Splatter Paint"
description="Crazy colorful splatter paint in your browser with Paper.js"
img="/home/workshops/splatter_paint.png"
/>
<WorkshopCard
key="particle_physics"
slug="particle_physics"
name="Particle Physics"
description="Create a particle physics simulation and with p5.js"
img="/home/workshops/particle_physics.png"
sx={{display: ['none', 'none', 'none', 'flex']}}
/>
</Grid>
</Grid>
</CardModel>
)
}

View file

@ -0,0 +1,80 @@
import {
Box,
Button,
Card,
Container,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import Icon from '../icon'
/** @jsxImportSource theme-ui */
export default function CarouselCards({
background,
titleColor,
descriptionColor,
title,
description,
img,
link
}) {
return (
<Box
sx={{
position: 'relative',
display: 'inline-block',
transition: 'transform .125s ease-in-out, box-shadow .125s ease-in-out',
'&:hover': { transform: 'scale(1.0625)' }
}}
>
<Link
sx={{
textDecoration: 'none',
'&:hover': { cursor: 'pointer' },
'&:hover svg': { opacity: 0.5 }
}}
href={link}
target="_blank"
rel="noopener"
>
<Image
src={img}
sx={{ position: 'absolute', top: ["-26px", "-30px", "-40px"], left: ["10px", "12px", "15px"], zIndex: 2, width: ["42px", "50px", "58px"], height: ["42px", "50px", "58px"] }}
/>
<Card
// variant="interactive"
sx={{
mr: 3,
backgroundColor: background,
position: 'relative',
color: 'white',
width: ['200px', '300px', '300px'],
padding: ['12px !important', '16px !important', '20px !important'],
height: '100%'
}}
>
<Text
as="h2"
sx={{ color: titleColor, fontSize: ['20px', '21px', '22px'] }}
>
{title}
</Text>
<Text as="p" sx={{ color: descriptionColor, fontSize: [1, '16px', '20px']}}>
{description}
</Text>
<Icon
glyph="external"
size={32}
color="#E9E9E9"
sx={{ position: 'absolute', top: 2, right: 2, opacity: 0.3, fontSize: [1, '16px', '20px'] }}
/>
</Card>
</Link>
</Box>
)
}

View file

@ -0,0 +1,134 @@
import {
Box,
Button,
Card,
Container,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import CarouselCards from './carousel-cards'
import { keyframes } from '@emotion/react'
import React, { useEffect, useState } from 'react'
import Ticker from 'react-ticker'
import PageVisibility from 'react-page-visibility'
import { Fade } from 'react-reveal'
/** @jsxImportSource theme-ui */
export default function Carousel() {
let [speed, setSpeed] = useState(5)
const [pageIsVisible, setPageIsVisible] = useState(true)
const handleVisibilityChange = isVisible => {
setPageIsVisible(isVisible)
}
return (
<PageVisibility onChange={handleVisibilityChange}>
{pageIsVisible && (
<Box sx={{ mt: 4 }}>
<Text
variant="eyebrow"
as="div"
sx={{
fontSize: ['22px', 2, 3],
mt: 4,
maxWidth: 'layout',
width: '90vw',
margin: 'auto'
}}
>
Here are a few projects you could get involved in:
</Text>
<Ticker speed={speed} sx={{ overflowX: 'hidden' }}>
{() => (
<Box
as="div"
sx={{ display: 'flex', py: [4, 5, 5] }}
onMouseOver={() => setSpeed(3)}
onMouseOut={() => setSpeed(6)}
>
<CarouselCards
background="#000"
titleColor="yellow"
descriptionColor="white"
title="Sprig"
description="Join hundreds of teenagers making tile-based JavaScript games"
img="https://emoji.slack-edge.com/T0266FRGM/sprig-dino/6f01fec60b51b343.png"
link="https://sprig.hackclub.com"
/>
<CarouselCards
background="#000"
titleColor="#FF4794"
descriptionColor="white"
title="Epoch"
description="Attend the most epic high school hackathon this New Year's"
img="https://a.slack-edge.com/production-standard-emoji-assets/14.0/apple-large/1f386@2x.png"
link="https://epoch.hackclub.com"
/>
<CarouselCards
background="blue"
titleColor="white"
textColor="white"
title="Clubs network"
description="Join one of 400+ coding clubs around the world"
img="https://a.slack-edge.com/production-standard-emoji-assets/14.0/apple-large/1f5fa-fe0f@2x.png"
link="/clubs"
/>
<CarouselCards
background="dark"
titleColor="red"
textColor="white"
title="Hack Club Bank"
description="No. 1 fiscal sponsor for teenagers (we crossed $7 million in transactions)"
img="https://emoji.slack-edge.com/T0266FRGM/bank-hackclub-dark/8c6f85f387365072.png"
link="/bank"
/>
<CarouselCards
background="snow"
titleColor="dark"
descriptionColor="black"
title="Some Assembly Required"
description="The 4th most starred Assembly repository on GitHub"
img="https://emoji.slack-edge.com/T0266FRGM/someassemblyrequired/cfacfacaaa2d8b1d.png"
link="https://github.com/hackclub/some-assembly-required"
/>
<CarouselCards
background="#271932"
titleColor="#CAB4D4"
textColor="#CAB4D4"
title="SineRider"
description="Help build a game about love, math, and graphing 💖"
img="https://emoji.slack-edge.com/T0266FRGM/sinerider/68a0bc1208e885dd.png"
link="https://sinerider.com"
/>
<CarouselCards
background="black"
titleColor="yellow"
textColor="white"
title="High school hackathons"
description="🔍 A curated list of high school hackathons with hundreds of events"
img="https://a.slack-edge.com/production-standard-emoji-assets/14.0/apple-large/1f469-200d-1f4bb@2x.png"
link="/hackathons"
/>
<CarouselCards
background="snow"
titleColor="dark"
descriptionColor="black"
title="Workshops"
description="100+ coding workshops to build a project in under an hour"
img="https://a.slack-edge.com/production-standard-emoji-assets/14.0/apple-large/1f4bb@2x.png"
link="https://workshops.hackclub.com"
/>
</Box>
)}
</Ticker>
</Box>
)}
</PageVisibility>
)
}

177
components/index/events.js Normal file
View file

@ -0,0 +1,177 @@
import { Card, Box, Text, Grid, Badge, Flex, Avatar, Heading } from 'theme-ui'
import tt from 'tinytime'
import Link from 'next/link'
import { keyframes } from '@emotion/react'
const past = dt => new Date(dt) < new Date()
const now = (start, end) =>
new Date() > new Date(start) && new Date() < new Date(end)
const Event = ({ id, slug, title, desc, leader, avatar, start, end, cal }) => (
<Link
href={`https://events.hackclub.com/${slug}`}
as={`https://events.hackclub.com/${slug}`}
passHref
target="_blank"
rel="noopener"
>
<Box
as="a"
sx={{
position: 'relative',
textDecoration: 'none',
bg: 'elevated',
color: 'text',
p: [3, 3]
}}
>
<Box
sx={{
bg: past(end) ? 'sunken' : 'primary',
color: past(end) ? 'text' : 'white',
lineHeight: ['subheading', 'body'],
m: -3,
py: 2,
px: 3,
mb: 3,
strong: { display: ['block', 'inline'] }
}}
>
<Text>
<strong>{tt('{MM} {Do}').render(new Date(start))}</strong>{' '}
{tt('{h}:{mm}').render(new Date(start))}
{tt('{h}:{mm} {a}').render(new Date(end))}
</Text>
</Box>
<Heading variant="subheadline" sx={{ mt: 0, mb: 1 }}>
{title}
</Heading>
<Flex
sx={{
alignItems: 'center',
color: 'muted'
}}
>
{now(start, end)}
{!avatar.includes('emoji') && (
<Avatar
src={avatar}
alt={`${leader} profile picture`}
size={24}
sx={{ height: 24, mr: 2 }}
/>
)}
<Text as="span">{leader}</Text>
</Flex>
{/* {now(start, end) && (
<Sparkles
aria-hidden
style={{
pointerEvents: 'none',
position: 'absolute !important',
top: 0,
left: 0,
right: 0,
bottom: 0
}}
/>
)} */}
</Box>
</Link>
)
const flashing = keyframes({
from: { opacity: 0 },
'50%': { opacity: 1 },
to: { opacity: 0 }
})
function Dot() {
return (
<Text
sx={{
bg: 'green',
color: 'white',
borderRadius: 'circle',
display: 'inline-block',
lineHeight: 0,
width: '.5em',
height: '.5em',
marginRight: '.4em',
marginBottom: '.12em',
animationName: `${flashing}`,
animationDuration: '3s',
animationTimingFunction: 'ease-in-out',
animationIterationCount: 'infinite'
}}
/>
)
}
export default function Events({ events }) {
console.log(events.length)
return (
<Box mb={3}>
{/* <Heading>
Come hangout, talk to cool people*, and hack together at one of our {' '}
<Link href="https://events.hackclub.com" target="_blank">
upcoming events
</Link>
</Heading> */}
{/* <Text>
{events.map(e => !past(e.end)) ? <>Upcoming events <Dot /></> : <></>}
</Text> */}
<Grid
mt={3}
mb={2}
columns={[2, 3]}
gap="1px"
sx={{
bg: 'sunken',
borderRadius: 'extra',
overflow: 'hidden',
boxShadow: 'elevated'
}}
>
{events.map(event =>
!past(event.end) ? <Event {...event} key={event.id} /> : <></>
)}
</Grid>
<Text sx={{display: 'block'}}>
We just had these events:{' '}
{events.slice(0, 3).map(event =>
past(event.end) ? (
<Badge
variant="pill"
sx={{
zIndex: '1',
bg: 'rgb(255, 255, 255, 0.3)',
color: 'white',
textDecoration: 'none',
fontWeight: 'normal',
fontSize: 'small',
mr: 1,
my: 1,
':hover': { bg: 'rgb(255, 255, 255, 0.5)', cursor: 'pointer' },
transition: '0.3s ease',
a: {
textDecoration: 'none',
color: 'white'
}
}}
>
<Link href={`https://events.hackclub.com/${event.slug}`}>
{event.title}
</Link>
</Badge>
) : (
<></>
)
)}{' '}
</Text>
{/* <Link href="/amas" target="_blank">
*like George Hotz, Dylan Field, Sal Khan, and more
</Link> */}
</Box>
)
}

161
components/index/github.js Normal file
View file

@ -0,0 +1,161 @@
import {
Box,
Button,
Card,
Container,
Flex,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import { useEffect, useState } from 'react'
import RelativeTime from 'react-relative-time'
import Fade from 'react-reveal/Fade'
/** @jsxImportSource theme-ui */
export default function GitHub({
type,
img,
user,
key,
text,
time,
message,
...props
}) {
return (
<Box
sx={{
width: 'fit-content',
position: ['relative', 'relative', 'absolute'],
display: 'block',
top: [0, '-40px', '-55px'],
right: [null, '-40px', '-10px'],
// left: [0, null, null],
pb: ['42px', 4, 0]
}}
>
<Text
as="p"
sx={{
// transform: [null, null, 'rotate(3deg)'],
fontSize: ['8px', '8px', '10px'],
textAlign: ['left', 'right', 'right'],
width: '100%'
}}
>
Live from GitHub
</Text>
<Badge
variant="pill"
bg="snow"
sx={{
flexGrow: 1,
color: 'black',
fontWeight: '400 !important',
textAlign: ['left', 'left', 'right'],
zIndex: 4,
// transform: [null, null, 'rotate(3deg)'],
float: ['left', 'left', 'right']
}}
{...props}
>
<Fade appear spy={key}>
<Link
href="https://github.com/hackclub"
sx={{
textDecoration: 'none',
color: 'inherit',
fontWeight: '400 !important',
display: 'flex',
fontSize: ['11px', '11px', '14px'],
height: ['15px', '15px', '25px'],
position: 'relative',
alignItems: 'center'
}}
target="_blank"
rel="noopener"
>
{user != null ? (
user != 'dependabot[bot]' ? (
user != 'github-actions[bot]' ? (
<img
src={img}
sx={{ borderRadius: '100%', height: '90%', mr: 2 }}
/>
) : (
<></>
)
) : (
<></>
)
) : (
<></>
)}
{user != null ? (
user != 'dependabot[bot]' ? (
user != 'github-actions[bot]' ? (
<Text sx={{ mr: 2 }}>{user}</Text>
) : (
<></>
)
) : (
<></>
)
) : (
<></>
)}
{user != null ? (
user != 'dependabot[bot]' ? (
user != 'github-actions[bot]' ? (
<Text
sx={{
textOverflow: 'ellipsis',
maxWidth: '150px',
display: 'inline-block',
overflow: 'hidden',
whiteSpace: 'nowrap'
}}
>
{message}
</Text>
) : (
<></>
)
) : (
<></>
)
) : (
<></>
)}
{user != null ? (
user != 'dependabot[bot]' ? (
user != 'github-actions[bot]' ? (
<Text
as="span"
sx={{
fontSize: ['8px', '8px', '10px'],
color: 'inherit',
mx: 2
}}
>
<RelativeTime value={time} titleformat="iso8601" />
</Text>
) : (
<></>
)
) : (
<></>
)
) : (
<></>
)}
</Link>
</Fade>
</Badge>
</Box>
)
}

View file

@ -52,10 +52,12 @@ const Root = styled(Box)`
}
`
export const Content = styled(Container)`
export const Content = styled(Box)`
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1024px;
margin: auto;
position: relative;
z-index: 2;
padding-left: ${theme.space[3]}px;
@ -109,9 +111,7 @@ const layout = props =>
: css`
@media (min-width: 56em) {
display: flex;
position: absolute;
left: 50%;
transform: translateX(-50%);
justify-content: flex-end;
}
a {
font-size: ${theme.fontSizes[1]}px;
@ -136,17 +136,20 @@ const NavBar = styled(Box)`
const Navigation = props => (
<NavBar role="navigation" {...props}>
<NextLink href="/slack" passHref>
<Link>Slack</Link>
<NextLink href="/clubs" passHref>
<Link>Clubs</Link>
</NextLink>
<Link href="https://workshops.hackclub.com/">Workshops</Link>
<Link href="https://scrapbook.hackclub.com/">Scrapbook</Link>
<NextLink href="/bank" passHref>
<Link>Bank</Link>
</NextLink>
<NextLink href="/hackathons" passHref>
<Link>Hackathons</Link>
</NextLink>
<NextLink href="/slack" passHref>
<Link>Slack</Link>
</NextLink>
<Link href="https://events.hackclub.com/">Events</Link>
<Link href="https://workshops.hackclub.com/">Workshops</Link>
</NavBar>
)

View file

@ -16,7 +16,7 @@ const Caption = styled(Text)`
z-index: 0;
`
const Photo = ({ src, width, height, alt, showAlt, dark, ...props }) => {
const Photo = ({ src, width, height, alt, showAlt, dark, loading, ...props }) => {
const [colorMode] = useColorMode()
const showCaption = showAlt && alt
return (
@ -41,6 +41,7 @@ const Photo = ({ src, width, height, alt, showAlt, dark, ...props }) => {
width={width}
height={height}
layout="responsive"
loading={loading || 'lazy'}
/>
{showCaption && (
<Caption

130
components/secret.js Normal file
View file

@ -0,0 +1,130 @@
import { Box, Text } from "theme-ui"
import { useState, useEffect } from "react"
export default function Secret({ reveal, ...props }) {
const [img, setImage] = useState('')
useEffect(() => {
setImage('https://geta.dino.icu/dino.png')
},[])
return (
<Box
sx={{
position: 'fixed',
right: 5,
bottom: 0,
transform: `${reveal ? 'translateY(0)' : 'translateY(100%)'}`,
transition: '1s',
zIndex: 3
}}
{...props}
>
<Box
as="div"
sx={{
height: '200px',
width: '300px',
backgroundColor: 'black',
position: 'relative',
display: 'flex',
justifyContent: 'center',
zIndex: 0,
'&:hover > .lid-one': {
transform: 'rotateX(90deg)',
transitionDelay: '0s'
},
'&:hover > .lid-two': {
transform: 'rotateX(180deg)',
transitionDelay: '0.25s'
},
'&:hover > .letter': {
transform: 'translateY(-50px)',
transitionDelay: '0.5s'
}
}}
>
<Box
as="div"
className="lid-one"
sx={{
position: 'absolute',
height: '100%',
width: '100%',
top: 0,
left: 0,
borderRight: '150px solid transparent',
borderBottom: '100px solid transparent',
borderLeft: '150px solid transparent',
transformOrigin: 'top',
transition: 'transform 0.25s linear',
borderTop: '100px solid #8492a6',
transform: 'rotateX(0deg)',
zIndex: 3,
transitionDelay: '0.75s'
}}
></Box>
<Box
as="div"
className="lid-two"
sx={{
position: 'absolute',
height: '100%',
width: '100%',
top: 0,
left: 0,
borderRight: '150px solid transparent',
borderBottom: '100px solid transparent',
borderLeft: '150px solid transparent',
transformOrigin: 'top',
transition: 'transform 0.25s linear',
borderTop: '100px solid #8492a6',
transform: 'rotateX(90deg)',
zIndex: 1,
transitionDelay: '0.5s'
}}
></Box>
<Box
as="div"
className="envelope"
sx={{
position: 'absolute',
height: '100%',
width: '100%',
top: 0,
left: 0,
borderTop: '100px solid transparent',
borderRight: '150px solid #f9fafc',
borderBottom: '150px solid #f9fafc',
borderLeft: '150px solid #f9fafc',
zIndex: 3
}}
></Box>
<Box
as="div"
className="letter"
sx={{
position: 'absolute',
top: 0,
width: '80%',
height: '80%',
backgroundColor: 'white',
borderRadius: '5px',
border: '3px solid #e0e6ed',
zIndex: 2,
transition: '0.5s',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
mt: 3
}}
>
<img src={img} width="30%" sx={{ margin: 'auto' }} />
<Text>print kc</Text>
</Box>
</Box>
</Box>
)
}
// credits: https://codepen.io/Coding-Star/pen/WNpbvwB

View file

@ -37,14 +37,12 @@ const Content = () => (
Come for the skills, <br /> stay for the people.
</Heading>
<Text as="p" variant="lead" sx={{ maxWidth: 'copyPlus', mx: 'auto' }}>
Coding is often seen as an isolating activity. Plenty of groups exist for
Communication and planning for our open source projects happen in the Slack. Coding is often seen as an isolating activity. Plenty of groups exist for
kids who are interested in sports, theater, or chess, but the stereotype
of a programmer is a person who sits alone in a dark room.{' '}
<strong>It doesn't have to be this way</strong>in the Hack Club Slack
(Discord-style online groupchat), you'll find a group of {formatted}+{' '}
<Highlight>fabulous people</Highlight> to talk to, active at all hours.
For leaders, you'll be able to connect with other leaders and support one
another.
</Text>
<Link href="/slack" passHref>
<Button

View file

@ -43,7 +43,7 @@ const generateEvent = () => ({
const SlackEvents = ({ sx, ...props }) => {
const SlackEvents = ({ sx, color, textColor, ...props }) => {
const didUnmount = useRef(false)
const [events, setEvents] = useState([])
function createMockEvents(){
@ -104,7 +104,7 @@ const SlackEvents = ({ sx, ...props }) => {
listStyle: 'none',
lineHeight: 'heading',
pl: 0,
color: 'black',
color: textColor || 'black',
fontSize: 2,
overflowY: 'hidden',
position: 'relative',
@ -117,7 +117,7 @@ const SlackEvents = ({ sx, ...props }) => {
display: 'block',
height: '2em',
backgroundImage: theme =>
`linear-gradient(rgba(255,255,255,0), ${theme.colors.white})`
`linear-gradient(rgba(255,255,255,0), ${color || theme.colors.white})`
},
div: { mb: [1, 2] },
'circle:last-of-type': { animationDuration: '1s' },
@ -152,3 +152,15 @@ const SlackEvents = ({ sx, ...props }) => {
}
export default SlackEvents
// `
// 10-days-in-public amas assemble all-hands apple art bank books ib
// challenges code college-apps confessions cooking community coronavirus counttoamillion deals
// debate design the-democratic-republic-of-yishun dogs ethical-hacking epoch epoch-bts flutter film food
// gamedev gh go go-bears hack-night hackathons hardware
// homelab hours hq india javascript languages late-night-hw-club leaders lgbtq linux lounge
// mayhaps memes minecraft music neuroscience photography python orpheus-podcast
// rust scrapbook ship sink-my-ship sleep social studycorner support swift swim
// politics newsletter surroundings sprig hackathon-organizers hq hq-surroundings
// `

View file

@ -31,9 +31,7 @@ function Breakdown() {
fontStyle: 'italic'
}}
>
<Fade>
Dear high school hacker, we have a challenge for you:
</Fade>
<Fade>Dear high school hacker, we have a challenge for you:</Fade>
</Heading>
<Heading
variant="headline"
@ -45,9 +43,7 @@ function Breakdown() {
mt: 0
}}
>
<Fade>
What will you make this winter?
</Fade>
<Fade>What will you make this winter?</Fade>
</Heading>
</Slide>
<Fade>
@ -82,7 +78,7 @@ function Breakdown() {
text="Daily progress"
description={
<>
From <strong>Feb 15-25</strong>, work on your project, share
From <strong>Feb 14-23</strong>, work on your project, share
short photo/video updates each day.
</>
}

View file

@ -92,7 +92,8 @@ export default function Signup() {
method: 'POST',
body: JSON.stringify({
eventName,
userEmail
userEmail,
category: 'hardware grant'
})
})

View file

@ -6,9 +6,6 @@ import { useEffect } from 'react'
import Snowfall from 'react-snowfall'
import { Fade } from 'react-reveal'
import Rsvp from './rsvp'
import ScrollHint from '../scroll-hint'
import useSWR from 'swr'
import fetcher from '../../lib/fetcher'
import { keyframes } from '@emotion/react'
const flashing = keyframes({

View file

@ -123,7 +123,11 @@ const Cards = ({ avatar, username, description, image }) => {
>
<Flex
as="a"
href={username != 'cjmika110'? `https://scrapbook.hackclub.com/${username}`: 'https://scrapbook.hackclub.com' }
href={
username != 'cjmika110'
? `https://scrapbook.hackclub.com/${username}`
: 'https://scrapbook.hackclub.com'
}
sx={{
color: 'inherit',
textDecoration: 'none',
@ -221,10 +225,14 @@ export default function Projects() {
sx={{
textShadow: '0px 0px 21px #E1F1FF',
color: 'white',
fontSize: [4, 5, 6]
fontSize: [4, 5, 6],
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
gap: 1
}}
>
You could be building a{' '}
<Text>You could be building a</Text>
<Text
sx={{
backgroundColor: '#406BAB',
@ -232,14 +240,14 @@ export default function Projects() {
px: 3,
borderRadius: 10,
position: 'relative',
lineHeight: '1.5'
width: 'fit-content',
height: 'min-content',
cursor: 'pointer',
userSelect: 'none'
}}
onClick={() => setCount(count + 1)}
>
<Box
as="span"
sx={{ whiteSpace: 'nowrap', cursor: 'pointer' }}
>
<Box as="span" sx={{ whiteSpace: 'nowrap' }}>
{project_idea}
</Box>
<Image

View file

@ -119,8 +119,8 @@ const Rsvp = () => {
<Flex sx={{ flexDirection: 'column' }}>
<Label variant="labelHoriz" sx={{ m: 0, fontSize: 1, pt: 1 }}>
<Checkbox name="age" defaultChecked={false} />I am 18 years of age
or younger.
<Checkbox name="age" defaultChecked={false} />I am a current high
school student (or younger).
</Label>
<br />

View file

@ -30,7 +30,6 @@ const nextConfig = {
return [
{ source: '/grant/', destination: '/hackathons/grant', permanent: false },
{ source: '/start/', destination: '/', permanent: false },
{ source: '/clubs/', destination: '/', permanent: false },
{ source: '/repl/', destination: '/', permanent: true },
{ source: '/c9/', destination: '/deprecated/cloud9/', permanent: true },
{
@ -240,6 +239,10 @@ const nextConfig = {
{
source: '/how-to-organize-a-hackathon',
destination: 'https://expandables.hackclub.dev/organizing.html'
},
{
source: '/how-to-organize-a-hackathon/style.css',
destination: 'https://expandables.hackclub.dev/style.css'
}
]
},

View file

@ -11,8 +11,10 @@
"lint": "next lint"
},
"dependencies": {
"@apollo/client": "^3.7.1",
"@emotion/react": "^11.10.5",
"@emotion/styled": "^11.10.5",
"@github/time-elements": "^4.0.0",
"@hackclub/icons": "^0.0.12",
"@hackclub/meta": "1.1.32",
"@hackclub/theme": "^0.3.3",
@ -21,12 +23,17 @@
"@octokit/auth-app": "^4.0.7",
"@octokit/core": "^4.0.5",
"@octokit/rest": "^19.0.5",
"add": "^2.0.6",
"airtable-plus": "^1.0.4",
"animated-value": "^0.2.4",
"animejs": "^3.2.1",
"axios": "^1.2.0",
"country-list-js": "^3.1.7",
"cursor-effects": "^1.0.7",
"devtools-detect": "^4.0.0",
"form-data": "^4.0.0",
"globby": "^11.0.4",
"graphql": "^16.6.0",
"gsap": "^3.11.3",
"jquery": "^3.6.1",
"lodash": "^4.17.21",
@ -36,12 +43,16 @@
"react": "^17.0.2",
"react-before-after-slider-component": "^1.1.5",
"react-dom": "^17.0.2",
"react-konami-code": "^2.3.0",
"react-marquee-slider": "^1.1.5",
"react-masonry-css": "^1.0.16",
"react-page-visibility": "^7.0.0",
"react-relative-time": "^0.0.7",
"react-reveal": "^1.2.2",
"react-scrolllock": "^5.0.1",
"react-snowfall": "^1.2.1",
"react-ticker": "^1.3.2",
"react-tooltip": "^4.5.1",
"react-tsparticles": "^2.5.3",
"react-use-websocket": "3.0.0",
"recharts": "2.1.12",
@ -50,7 +61,8 @@
"theme-ui": "^0.14",
"tinytime": "^0.2.6",
"turndown": "^7.1.1",
"vanilla-tilt": "^1.7.3"
"vanilla-tilt": "^1.7.3",
"yarn": "^1.22.19"
},
"devDependencies": {
"eslint": "8.28.0",

View file

@ -17,7 +17,7 @@ export default async function handler(req, res) {
body: JSON.stringify({
email: data.userEmail,
name: data.eventName,
category: 'robotics team'
category: data.eventCategory
}),
method: 'POST',
headers: {

8
pages/api/games.js Normal file
View file

@ -0,0 +1,8 @@
export default async function getGames(req, res) {
let games = await fetch(
'https://editor.sprig.hackclub.com/metadata.json'
).then(res => res.json())
games = games.sort((a, b) => new Date(b.addedOn) - new Date(a.addedOn)).slice(0, 4)
return res.json(games)
}

45
pages/api/github.js Normal file
View file

@ -0,0 +1,45 @@
export default async function github(req, res) {
let initialGitHubData = await fetch(
'https://api.github.com/orgs/hackclub/events'
).then(r => r.json())
let gitHubData = initialGitHubData.map(x => ({
type: x.type,
user:
x.type === 'PushEvent'
? x.actor.login
: x.type === 'PullRequestEvent'
? x.actor.login
: x.type === 'WatchEvent'
? x.actor.login
: null,
userImage:
x.type === 'PushEvent'
? x.actor.avatar_url
: x.type === 'PullRequestEvent'
? x.actor.avatar_url
: x.type === 'WatchEvent'
? x.actor.avatar_url
: null,
message:
x.type === 'PushEvent'
? x.payload.commits[0].message
: x.type === 'PullRequestEvent'
? x.payload.pull_request.title
: x.type === 'WatchEvent'
? `starred ${x.repo.name}`
: null,
time: x.created_at
}))
gitHubData = gitHubData.filter(
x =>
x.type === 'PushEvent' ||
x.type === 'PullRequestEvent' ||
x.type === 'WatchEvent'
)
res.json(gitHubData)
}

23
pages/api/slack.js Normal file
View file

@ -0,0 +1,23 @@
import FormData from 'form-data'
export default async function Slack(req, res) {
const formData = new FormData()
formData.append('token', process.env.SLACK_API_TOKEN)
formData.append('date_range', '30d')
let slackData = await fetch(
'https://hackclub.slack.com/api/team.stats.timeSeries',
{
method: 'POST',
body: formData,
headers: {
Cookie: process.env.SLACK_API_COOKIE
}
}
).then(r => r.json())
slackData = slackData.stats.sort((a, b) => a.ds - b.ds).reverse()[0]
res.json(slackData)
}

View file

@ -0,0 +1,15 @@
export default async function getConsoles(req, res) {
let data = await fetch(
'https://airbridge.hackclub.com/v0.1/Sprig%20Waitlist/Requests'
).then(r => r.json())
function check(val) {
return val == 'Pending' || val == 'Approved'
}
const consoleCount = data
? data.filter(console => check(console.fields.Status)).length
: 100 // arbitrary fallback number
res.json(consoleCount)
}

47
pages/api/sprig-games.js Normal file
View file

@ -0,0 +1,47 @@
// export default async function getGames(req, res) {
// // let imgURL = undefined
// const decode = ({ data, width }) => {
// const decodedString = atob(data)
// const l = decodedString.length
// const buf = new Uint8ClampedArray(l)
// for (let i = 0; i < l; i++) {
// const char = decodedString[i]
// const byte = char.charCodeAt(0)
// buf[i] = byte
// }
// return new ImageData(buf, width)
// }
// async function load(title) {
// const res = await fetch(
// `https://editor.sprig.hackclub.com/api/thumbnail/${title}`
// )
// const json = await res.json()
// if (json.image.kind === 'png') {
// return `data:image/png;base64,${json.image.data}`
// } else {
// // Raw, hopefully
// // const imageData = decode(json.image)
// // const c = document.createElement('canvas')
// // c.width = imageData.width
// // c.height = imageData.height
// // c.getContext('2d').putImageData(imageData, 0, 0)
// // c.style['image-rendering'] = 'pixelated'
// // return c.toDataURL()
// return null
// }
// }
// // const fetcher = async function getImage() {
// // const thing0 = await load('Maze_Runner')
// // const thing1 = await load('randomworld')
// // setGameImage(thing0)
// // setGameImage1(thing1)
// // }
// let image = await load('Maze_Runner')
// res.json(image)
// // res.json(fetcher)
// }

32
pages/api/stars.js Normal file
View file

@ -0,0 +1,32 @@
import { graphql } from '@octokit/graphql'
export default async function handler(req, res) {
const { organization } = await graphql(
`
{
organization(login: "hackclub") {
sinerider: repository(name: "sinerider") {
stargazerCount
},
sprig: repository(name: "sprig") {
stargazerCount
},
hackclub: repository(name: "hackclub") {
stargazerCount
},
hackathons: repository(name: "hackathons") {
stargazerCount
},
sprigHardware: repository(name: "sprig-hardware") {
stargazerCount
},
}
}`,
{
headers: {
authorization: `token ${process.env.GITHUB_TOKEN}`
}
}
)
res.status(200).json(organization)
}

25
pages/api/stuff.js Normal file
View file

@ -0,0 +1,25 @@
import FormData from 'form-data'
export default async function (req, res) {
const formData = new FormData()
formData.append(
'token',
'xoxc-2210535565-1329510668482-3738018363764-a06090b7e70cef57099ae10c6d18f80013869ef9be48fcc389e5a40c90df2624'
)
formData.append('date_range', '30d')
const data = await fetch(
'https://hackclub.slack.com/api/team.stats.timeSeries',
{
method: 'POST',
body: formData,
headers: {
Cookie:
'd=xoxd-52SpoJa3LK%2BF%2FZA3OwTuxIhUHfsXCx%2Fq1hpcu1VdiH2OUhPuonSeXAYYGJefTNiJUZE8SjAIEfASlHsdYHeGkg%2FFZ584%2B7JbekY8Mz%2FbOEgEJxhGjRW7miVyqQvbPq3oQlSfwNoXb507TnD5VYOCLYUh3OuK2tc2GnfwC0MgPl9ZsAoDc1caaA%3D%3D'
}
}
).then(r => r.json())
res.json(data.stats.sort((a, b) => a.ds - b.ds).reverse()[0])
}

732
pages/clubs.js Normal file
View file

@ -0,0 +1,732 @@
import {
Box,
Button,
Card,
Container,
Grid,
Heading,
Image,
Badge,
Link,
Text
} from 'theme-ui'
import styled from '@emotion/styled'
import Head from 'next/head'
import NextLink from 'next/link'
import Meta from '@hackclub/meta'
import Nav from '../components/nav'
import Icon from '../components/icon'
import BGImg from '../components/background-image'
import ForceTheme from '../components/force-theme'
import SlideDown from '../components/slide-down'
import FadeIn from '../components/fade-in'
import Photo from '../components/photo'
import Footer from '../components/footer'
import FooterImgFile from '../public/home/footer.png'
import AssembleImgFile from '../public/home/assemble.jpg'
import Slack from '../components/slack'
import Announcement from '../components/announcement'
import Stage from '../components/stage'
let Highlight = styled(Text)`
color: inherit;
border-radius: 1em 0 1em 0;
background: linear-gradient(
-100deg,
rgba(250, 247, 133, 0.33),
rgba(250, 247, 133, 0.66) 95%,
rgba(250, 247, 133, 0.1)
);
`
Highlight = Highlight.withComponent('mark')
const Feature = ({ icon, color, name, desc, children, sx, ...props }) => (
<Box
sx={{
display: 'grid',
gridGap: [0, 4],
gridTemplateColumns: [null, 'auto 1fr'],
alignItems: 'start',
justifyContent: 'start',
bg: 'rgba(224, 230, 237, 0.25)',
p: [3, 4],
mt: [1, 1],
borderRadius: 'extra',
span: { transform: 'none', width: 'min-intrinsic' },
svg: { color: 'white' },
...sx
}}
>
{children || (
<Box
as="span"
sx={{
width: 'fit-content',
bg: color,
borderRadius: 18,
lineHeight: 0,
p: 2,
mb: 1,
display: 'inline-block',
transform: ['scale(0.75)', 'none'],
transformOrigin: 'bottom left',
boxShadow:
'inset 2px 2px 6px rgba(255,255,255,0.2), inset -2px -2px 6px rgba(0,0,0,0.1), 0 1px 4px rgba(0,0,0,0.1), 0 4px 8px rgba(0,0,0,0.1)'
}}
>
<Icon glyph={icon} size={48} />
</Box>
)}
<Box>
<Heading as="h3" variant="headline" mb={2} mt={0}>
{name}
</Heading>
<Text
as="p"
variant="subtitle"
sx={{ mt: 0, pb: 2, a: { variant: 'styles.a', color: 'blue' } }}
>
{desc}
</Text>
</Box>
</Box>
)
const Page = () => (
<>
<Meta
as={Head}
title="Dont run your coding club alone"
description="Hack Club is a global nonprofit network of high school makers & student-led coding clubs where young people build the agency, the network, & the technical talent to think big & do big things in the world."
image="https://cloud-epiki4yvg.vercel.app/2020-09-09_drbp62kayjuyyy0ek89mf9fwcp5t4kuz.jpeg"
/>
<Head>
<meta
property="og:logo"
content="https://assets.hackclub.com/icon-rounded.png"
size="512x512"
/>
</Head>
<ForceTheme theme="light" />
<Nav />
<Box
as="header"
sx={{
bg: 'dark',
pt: [5, 6],
pb: [2, 3],
textAlign: 'center',
position: 'relative',
overflow: 'hidden'
}}
>
<BGImg
src={AssembleImgFile}
alt="Hack Clubbers assemble at Figma HQ for the first IRL hackathon in SF since 2020: Assemble. 📸 Photo by Kunal Botla, Hack Clubber in MA!"
priority
/>
{/* <Announcement
copy="Epoch: celebrate the New Year with Hack Club."
caption="Join 150+ hackers in Delhi for a magical high-school hackathon!"
href="https://epoch.hackclub.com"
iconLeft="explore"
color="primary"
/> */}
<SlideDown duration={768}>
<Heading
as="h1"
variant="ultratitle"
sx={{
color: 'white',
textShadow: 'text',
filter: 'drop-shadow(0 -2px 4px rgba(0,0,0,0.5))',
WebkitFilter: 'drop-shadow(0 -2px 4px rgba(0,0,0,0.5))',
maxWidth: [null, 'copyUltra'],
my: [3, 4],
mx: 'auto',
zIndex: 1
}}
>
<Text
as="span"
sx={{
lineHeight: 0.875,
display: 'block',
pb: 3
}}
>
Dont run your coding&nbsp;club alone.
</Text>
Make it a{' '}
<Text
as="span"
sx={{
WebkitTextStroke: 'currentColor',
WebkitTextStrokeWidth: ['2px', '3px'],
WebkitTextFillColor: 'transparent'
}}
>
Hack&nbsp;Club
</Text>
.
</Heading>
</SlideDown>
<FadeIn duration={1024}>
<Text
as="p"
variant="lead"
sx={{
color: 'white',
textShadow: 'text',
maxWidth: 620,
mt: 0,
mx: 'auto',
mb: [3, 4]
}}
>
Hack Club is a nonprofit network of high school coding&nbsp;clubs and
makers around the world. <strong>Applications are now open.</strong>
</Text>
<Button
as="a"
variant="ctaLg"
href="https://apply.hackclub.com"
target="_blank"
rel="noopener"
>
Apply now
</Button>
<NextLink href="/slack" passHref>
<Button
as="a"
variant="ctaLg"
href="/slack"
sx={{
backgroundImage: t => t.util.gx('green', 'blue'),
ml: [0, 3],
mt: [3, 0]
}}
>
Join the Slack
</Button>
</NextLink>
</FadeIn>
<Box
sx={{
display: 'flex',
justifyContent: ['center', 'center', 'flex-end'],
marginRight: 2,
mt: [2, 2, 1]
}}
>
<Badge
as="a"
href="https://www.youtube.com/watch?v=PnK4gzO6S3Q"
variant="pill"
sx={{
zIndex: '1',
bg: '#000',
color: 'white',
opacity: 0.5,
textDecoration: 'none',
fontWeight: 'normal',
':hover': { opacity: 1 },
transition: '0.3s ease'
}}
title="📸 Photo by Kunal Botla, Hack Clubber in MA!"
>
Hackers at Assemble in SF
</Badge>
</Box>
</Box>
<Box as="section" sx={{ py: [4, 5], color: 'black' }}>
<Container>
<Text as="p" variant="eyebrow">
The rundown
</Text>
<Heading as="h2" variant="title">
Clubs discovering the{' '}
<Text
as="span"
sx={{
borderRadius: 'default',
px: 2,
mx: [-2, 0],
whiteSpace: 'nowrap',
color: '#5d114c',
bg: 'rgb(255, 212, 64)'
}}
>
joy of code
</Text>
.
</Heading>
<Text as="p" variant="lead" sx={{ maxWidth: 'copyPlus' }}>
Hack Clubs typically meet for 1.5 hours each week in high schools,
makerspaces, community centers, churches, and any other venue where
teenagers can gather. As a club leader, you get members (mostly
beginners) started on something to learn/create, then members work at
their own pace, building websites, apps, & games, and presenting them
at the end.
</Text>
<Grid columns={[null, null, 2, '3fr 2fr']} gap={[3, 4]} pt={[3, 3]}>
<Photo
src="https://dl.airtable.com/.attachmentThumbnails/904cf56ceac6b0921eceae02958dcd29/5851864a"
alt="Summer Creek Hack Club meeting, February 2020"
width={3000}
height={2550}
showAlt
/>
<Grid
columns="auto 1fr"
sx={{
gridColumnGap: 3,
span: {
width: 36,
height: 36,
borderRadius: 24,
display: 'inline-block',
fontSize: 2,
lineHeight: '30px',
textAlign: 'center',
fontWeight: 'bold',
border: '3px solid currentColor'
},
p: { my: 0 },
strong: { display: 'block' }
}}
>
<Text as="span" color="green">
1
</Text>
<Text as="p" variant="subtitle">
<strong>
A group of teens, many beginners, gather to start coding.
</strong>
The leader (thats you!) presents for a few minutes, getting the
group started building something new.
</Text>
<Text as="span" color="cyan">
2
</Text>
<Text
as="p"
variant="subtitle"
sx={{ mt: 0, a: { variant: 'styles.a', color: 'blue' } }}
>
<strong>Everyone gets hacking, individually.</strong> Not hacking
bank accounts, being creative and{' '}
<Link href="/ship">making something awesome</Link>.
</Text>
<Text as="span" color="blue">
3
</Text>
<Text as="p" variant="subtitle">
<strong>To end, everyone demos their work.</strong>
As a leader, youre cultivating a community of makers. Each member
showing off their work builds momentum & motivation.
</Text>
</Grid>
</Grid>
<Grid
columns={[null, '1fr 2fr']}
mt={[3, 5]}
sx={{ maxWidth: 'copyUltra', mx: 'auto' }}
>
<Heading as="h3" variant="headline" sx={{ fontSize: [4, 5], mb: 0 }}>
Go beyond club meetings.
</Heading>
<Text
as="p"
variant="lead"
sx={{ mt: 0, a: { variant: 'styles.a', color: 'blue' } }}
>
Hack Clubs attend and run{' '}
<NextLink href="/hackathons" passHref>
<a>hackathons</a>
</NextLink>{' '}
like <a href="https://windyhacks.com">Windy&nbsp;City&nbsp;Hacks</a>{' '}
&{' '}
<a href="https://www.sfchronicle.com/bayarea/article/Hack-the-Fog-makes-history-as-San-12729895.php">
Hack the Fog
</a>
, run summer programs like{' '}
<a href="https://web.archive.org/web/20200808171549/http://thecspn.com/?p=43434">
Hack Camp
</a>
, and compete in events like the{' '}
<a href="http://www.congressionalappchallenge.us">
Congressional App Challenge
</a>
. The&nbsp;hacks the limit.
</Text>
</Grid>
</Container>
</Box>
<Box
as="section"
sx={{
py: 6,
bg: 'dark',
color: 'white',
'h2,p': { textShadow: 'text' },
textAlign: [null, 'center'],
position: 'relative',
overflow: 'hidden'
}}
>
<BGImg
gradient="linear-gradient(rgba(0,0,0,0.25),rgba(0,0,0,0.625))"
src="https://cdn.glitch.com/a7605379-7582-4aac-8f44-45bbdfca0cfa%2F2020-05-16_screenshot.jpeg?v=1589633885855"
width={2048}
height={1170}
alt="Hack Clubbers gather at the Elon Musk AMA in 2020"
/>
<Container>
<Text as="p" variant="eyebrow" sx={{ color: 'white', opacity: 0.75 }}>
~ Welcome to Hackerland ~
</Text>
<Heading as="h2" variant="title">
By the students, for the students.
</Heading>
<Text as="p" variant="lead" sx={{ maxWidth: 'copyPlus', mx: 'auto' }}>
Learning to code is like gaining a superpower turning you from a
consumer of technology into a creator. It shouldnt be taught like a
class it should be a creative, inclusive space. To foster this
environment,{' '}
<Highlight>every&nbsp;Hack&nbsp;Club is student-led</Highlight> &
members make self-directed projects.
</Text>
<NextLink href="/philosophy" passHref>
<Button
as="a"
variant="ctaLg"
sx={{
background: 'linear-gradient(-32deg, #6f31b7 14%, #fb558e 82%)'
}}
>
Our philosophy
</Button>
</NextLink>
</Container>
</Box>
<Box as="section" sx={{ py: [4, 5, 6], color: 'black' }}>
<Container
sx={{
maxWidth: [null, 'copyUltra'],
svg: { filter: 'drop-shadow(0 2px 3px rgba(0,0,0,.125))' }
}}
>
<Box as="header" sx={{ textAlign: [null, 'center'], pb: [4, 5] }}>
<Text as="p" variant="eyebrow">
Hit the ground running
</Text>
<Heading as="h2" variant="title">
Get your club{' '}
<Text
as="span"
sx={{
borderRadius: 'default',
px: 2,
mx: [-2, 0],
bg: 'rgb(91, 255, 205)',
color: '#095365',
display: 'inline-block',
whiteSpace: ['wrap', 'nowrap']
}}
>
going & growing
</Text>
with Hack&nbsp;Club.
</Heading>
</Box>
<Grid
columns={[null, 1]}
gap={[2, 3]}
sx={{ alignItems: 'end', span: { color: 'white' } }}
>
<Feature
icon="slack-fill"
color="#5d114c"
name="Chat with 100s of club leaders"
desc={
<>
In our <Link href="/slack">Slack community</Link>, youll be
invited to a space for Hack&nbsp;Club leaders to ask questions &
chat, share projects, & attend weekly live events.
</>
}
/>
<Feature
icon="bolt"
color="green"
name="Tools to hack on"
desc={
<>
We build tools, such as{" "}
<a href="https://sprig.hackclub.com">Sprig</a>, that your members can
use to make projects with in meetings! Built more of them with us in our
{" "}<Link href="/slack">Slack community</Link>.
</>
}
></Feature>
<Feature
icon="docs"
color="red"
name="Meeting content"
desc={
<>
Come prepared to every meeting with over 100{' '}
<a href="https://workshops.hackclub.com">workshops</a> (3 years
worth!) that guide your club members through making fun,
creative projects.
</>
}
></Feature>
{/* <Feature
name="A comprehensive leader guide"
desc={
<>
Need help getting started? Watch real club leaders run meetings, and
learn how to run them in your own club, with{' '}
<a href="https://meetings.hackclub.com">Hack Club Meetings</a>.
</>
}
>
<Photo
src="/home/meetings.png"
alt="Claire running a workshop on Generative Art in an online meeting"
width={1000}
height={653}
sx={{ maxWidth: [null, 332] }}
/>
</Feature> */}
<Feature
name="Stickers"
desc={
<>
Get <Link href="/stickers">amazing stickers</Link> for marketing
your club shipped directly to you & your club members.
</>
}
color="purple"
icon="sticker"
></Feature>
<Feature
icon="bank-account"
color="black"
name="A nonprofit bank account"
desc={
<>
Use our 501(c)(3) status and a restricted fund with{' '}
<Link href="/bank">Hack Club Bank</Link> to fundraise, accept
donations, buy things!
</>
}
/>
<Feature
name="Weekly events"
desc={
<>
From <Link href="/night">Hack Night</Link> to{' '}
<Link href="/amas">AMAs</Link>
{' to '}
<a href="https://twitter.com/hackclub/status/1300494921997193217?s=21">
weirder events
</a>
, the Slack community has live events for leaders & members
alike every week.
</>
}
icon="event-code"
color="blue"
></Feature>
<Feature
icon="purse"
color="orange"
name="A basket of free tools"
desc={
<>
We're always building new tools for leaders, such as{' '}
<a href="https://sprig.hackclub.com">Sprig</a>! We've also got
free subscriptions to Figma Pro, Postman, and more for running a
great club.
</>
}
/>
{/* <Feature
icon="sam"
color="blue"
name="Free Zoom Pro"
desc="24/7 access to Zoom Pro enabled meeting rooms for your club (that means no time limit)."
/> */}
</Grid>
<Feature
icon="welcome"
color="rgb(255,88,88)"
name="Existing clubs welcome"
desc={
<>
When established CS clubs join, they get all the Hack&nbsp;Club
benefits: Zoom&nbsp;Pro, stickers, our Slack community,{' '}
<a href="https://workshops.hackclub.com/">workshops</a>, the
works. Theyre welcome to use the Hack&nbsp;Club name or keep
their existing one.
</>
}
as="aside"
sx={{
display: 'grid',
gridGap: [0, 4],
gridTemplateColumns: [null, 'auto 1fr'],
alignItems: 'start',
justifyContent: 'start',
bg: 'rgba(255,88,88,0.125)',
p: [3, 4],
mt: [3, 4],
borderRadius: 'extra',
span: { transform: 'none', width: 'min-intrinsic' },
svg: { color: 'white' }
}}
/>
</Container>
</Box>
<Slack />
<Box bg="snow" color="black" py={[5, 6]}>
<Container sx={{ textAlign: ['left', 'center'] }}>
<Text as="p" variant="eyebrow">
Next steps
</Text>
<Heading as="h2" variant="title">
Apply today to{' '}
<Text
as="span"
sx={{
borderRadius: 'default',
px: 2,
ml: [-2, 0],
whiteSpace: ['wrap', 'nowrap'],
color: 'white',
bg: '#6f31b7'
}}
>
start your club
</Text>
.
</Heading>
<Text as="p" variant="lead" mt={3} color="slate">
Its all-online, free, & takes under an hour. Well help from there!
</Text>
<Grid
pt={[3, 4]}
pb={[4, 5]}
gap={[4, 3, 4]}
columns={[null, 3]}
sx={{
textAlign: 'left',
'> a, > div': {
borderRadius: 'extra',
boxShadow: 'elevated',
px: [3, null, 4],
py: [4, null, 5]
},
span: {
boxShadow:
'-2px -2px 6px rgba(255,255,255,0.125), inset 2px 2px 6px rgba(0,0,0,0.1), 2px 2px 8px rgba(0,0,0,0.0625)'
},
svg: { fill: 'currentColor' }
}}
>
<Card
as="a"
href="https://apply.hackclub.com/"
variant="interactive"
sx={{
background:
'linear-gradient(32deg, rgba(51, 142, 218, 0.9) 0%, rgba(51, 214, 166, 0.9) 100%)',
color: 'white',
svg: { color: 'rgb(51, 142, 218)' }
}}
>
<Stage
icon="send"
color="white"
name="1. Application"
desc="Start by telling us about your club & whos leading it."
/>
</Card>
<Card
sx={{
background:
'linear-gradient(to bottom, rgba(255, 140, 55, 0.9) 0%, rgba(236, 55, 80, 0.9) 100%)',
color: 'white',
svg: { color: 'rgb(236, 55, 80)' }
}}
>
<Stage
icon="emoji"
color="white"
name="2. Onboarding call"
desc="Hop on a quick Zoom with someone from Hack Club HQ."
/>
</Card>
<Card
sx={{
background: 'linear-gradient(-32deg, #6f31b7 14%, #fb558e 82%)',
color: 'white',
svg: { color: '#fb558e' }
}}
>
<Stage
icon="event-check"
color="white"
name="3. First meeting"
desc="Schedule your clubs first meeting & get going!"
/>
</Card>
</Grid>
<Button
as="a"
href="https://apply.hackclub.com"
target="_blank"
rel="noopener"
variant="ctaLg"
>
Apply to Hack Club
</Button>
</Container>
</Box>
<Footer
dark
sx={{
backgroundColor: 'dark',
position: 'relative',
overflow: 'hidden',
textShadow: '0 1px 2px rgba(0,0,0,0.375)',
'h2,span,p,a': { color: 'white !important' },
'> div img': { objectPosition: ['left', 'center'] },
svg: {
fill: 'white',
filter: 'drop-shadow(0 1px 2px rgba(0,0,0,0.25))'
}
}}
>
<BGImg
width={2544}
height={2048}
gradient="linear-gradient(rgba(0,0,0,0.125), rgba(0,0,0,0.25))"
src={FooterImgFile}
placeholder="blur"
alt="Globe with hundreds of Hack Clubs"
/>
<style>
{`a{
color: #338eda
}`}
</style>
</Footer>
</>
)
export default Page

View file

@ -81,7 +81,7 @@ const HackathonGrant = () => {
<Meta
as={Head}
title="Hackathon Grant"
description="Hack Club is partnering with FIRST to provide $500 grants to in-person high school hackathons happening between August and December 31, 2022."
description="Hack Club is partnering with FIRST to provide $500 grants to in-person high school hackathons happening until June 30th, 2023."
image="https://cloud-7yw9f6xnv-hack-club-bot.vercel.app/0grant.png"
/>
<Box as="main" key="main">
@ -185,8 +185,8 @@ const HackathonGrant = () => {
Hack Club Bank
</Link>{' '}
fees) to <a sx={{ whiteSpace: 'nowrap' }}>in-person</a>{' '}
<a sx={{ whiteSpace: 'nowrap' }}>high school</a> hackathons this
semester (August - December 31, 2022).
<a sx={{ whiteSpace: 'nowrap' }}>high school</a> hackathons <s>this
semester between August and December 31, 2022</s> until June 30th, 2023.
</Box>
<Button variant="ctaLg" as="a" href="#apply" sx={{ mt: 2 }}>
{open ? 'Apply Now' : 'Coming Soon'}
@ -228,8 +228,7 @@ const HackathonGrant = () => {
>
We want to bring back high schooler-led events around the world,
so we're only offering this grant for high school hackathons that
take place this semester (from August 19th to December 31st,
2022).
take place this semester (until June 30th).
<br />
<br />
<Text

View file

@ -28,7 +28,7 @@ export default function Hackathons({ data }) {
<Box as="main">
<Landing />
<Overview />
<ScrollingHackathons eventData={data} />
<ScrollingHackathons eventData={data} title={true} />
<KeepExploring />
<Money />
<Slack />

File diff suppressed because it is too large Load diff

BIN
public/home/ama.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/home/clubs-bg.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
public/home/epoch-bg.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
public/home/map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
public/home/slack_ama.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
public/home/sprig-bg.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
public/home/sprig-logo.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
public/home/winter-bg.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

BIN
public/stickers/epoch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 KiB

BIN
public/stickers/ship.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
public/test.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

344
yarn.lock
View file

@ -2,6 +2,25 @@
# yarn lockfile v1
"@apollo/client@^3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.7.1.tgz#86ce47c18a0714e229231148b0306562550c2248"
integrity sha512-xu5M/l7p9gT9Fx7nF3AQivp0XukjB7TM7tOd5wifIpI8RskYveL4I+rpTijzWrnqCPZabkbzJKH7WEAKdctt9w==
dependencies:
"@graphql-typed-document-node/core" "^3.1.1"
"@wry/context" "^0.7.0"
"@wry/equality" "^0.5.0"
"@wry/trie" "^0.3.0"
graphql-tag "^2.12.6"
hoist-non-react-statics "^3.3.2"
optimism "^0.16.1"
prop-types "^15.7.2"
response-iterator "^0.2.6"
symbol-observable "^4.0.0"
ts-invariant "^0.10.3"
tslib "^2.3.0"
zen-observable-ts "^1.2.5"
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7":
version "7.16.7"
resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz"
@ -338,7 +357,7 @@
"@emotion/babel-plugin@^11.10.5":
version "11.10.5"
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c"
resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz"
integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==
dependencies:
"@babel/helper-module-imports" "^7.16.7"
@ -356,7 +375,7 @@
"@emotion/cache@^11.10.5":
version "11.10.5"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12"
resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz"
integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==
dependencies:
"@emotion/memoize" "^0.8.0"
@ -401,7 +420,7 @@
"@emotion/react@^11.10.5":
version "11.10.5"
resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d"
resolved "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz"
integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==
dependencies:
"@babel/runtime" "^7.18.3"
@ -415,7 +434,7 @@
"@emotion/serialize@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0"
resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz"
integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==
dependencies:
"@emotion/hash" "^0.9.0"
@ -426,12 +445,12 @@
"@emotion/sheet@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c"
resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz"
integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==
"@emotion/styled@^11.10.5":
version "11.10.5"
resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.5.tgz#1fe7bf941b0909802cb826457e362444e7e96a79"
resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz"
integrity sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==
dependencies:
"@babel/runtime" "^7.18.3"
@ -473,7 +492,7 @@
"@eslint/eslintrc@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95"
resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz"
integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==
dependencies:
ajv "^6.12.4"
@ -486,9 +505,19 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@github/time-elements@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@github/time-elements/-/time-elements-4.0.0.tgz#ca6aec5e9fbc18348d3fc980610b79c244b1b81f"
integrity sha512-oTPpERR/FylYCyUdVjufmF5MmlrIZ7gYzN59xe5mF3aQA+zn5IWiNj+5/D/6NgQWFNXoRB84DILnP/YlkETKhg==
"@graphql-typed-document-node/core@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052"
integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==
"@hackclub/icons@^0.0.12":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@hackclub/icons/-/icons-0.0.12.tgz#a82dd20fdbc263c956aaee3ec8689078965d22fa"
resolved "https://registry.npmjs.org/@hackclub/icons/-/icons-0.0.12.tgz"
integrity sha512-YXPpalHN0lEjgaUD++u43NucSfgXlaQRbNKH+CJusS9erCF1jyu0pUH0peXqmlWZybbIg1PnuYJyOvKDvACA2g==
"@hackclub/meta@1.1.32":
@ -503,7 +532,7 @@
"@humanwhocodes/config-array@^0.11.6":
version "0.11.6"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.6.tgz#6a51d603a3aaf8d4cf45b42b3f2ac9318a4adc4b"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz"
integrity sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==
dependencies:
"@humanwhocodes/object-schema" "^1.2.1"
@ -584,7 +613,7 @@
"@next/env@12.3.1":
version "12.3.1"
resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.1.tgz#18266bd92de3b4aa4037b1927aa59e6f11879260"
resolved "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz"
integrity sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==
"@next/eslint-plugin-next@13.0.5":
@ -595,9 +624,9 @@
glob "7.1.7"
"@next/mdx@^13.0.5":
version "13.0.5"
resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.0.5.tgz#e92c713fa1ca66b504962775e6b626cc593131e4"
integrity sha512-4BMiUpul73hlHH4127Z+/yun+V/C4uZEm3DvUeqPEeRpRc6ZvaN6YiCaHJXfVIuarl+ZsJlhoevCxV9oXe/5xw==
version "13.0.7"
resolved "https://registry.yarnpkg.com/@next/mdx/-/mdx-13.0.7.tgz#34275121ac690c11746780345fc96b456c9d9e72"
integrity sha512-ekuxCOO7j/Un7qxIYtuBAQN+bduDAtYDEMEf0OqBQ3ZDWJpQYrJ1kGr0uk1WjW5Z1OH7hV8ZlGwuBvhfjaao8Q==
dependencies:
source-map "^0.7.0"
@ -613,7 +642,7 @@
"@next/swc-darwin-arm64@12.3.1":
version "12.3.1"
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz#b105457d6760a7916b27e46c97cb1a40547114ae"
resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz"
integrity sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==
"@next/swc-darwin-x64@12.3.1":
@ -668,7 +697,7 @@
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
dependencies:
"@nodelib/fs.stat" "2.0.5"
@ -676,7 +705,7 @@
"@nodelib/fs.stat@2.0.5":
version "2.0.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
"@nodelib/fs.stat@^2.0.2":
@ -686,7 +715,7 @@
"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
version "1.2.8"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
dependencies:
"@nodelib/fs.scandir" "2.1.5"
@ -694,7 +723,7 @@
"@octokit/auth-app@^4.0.7":
version "4.0.7"
resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-4.0.7.tgz#417c327e6a7ada1e6e9651db681146f8c12728e3"
resolved "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.7.tgz"
integrity sha512-hjjVCoI/+1oLminVHJPPexguYb9FP4Q60hEHExgy1uAKMMJ5Zf8iJIeRJlIIqneTb4vt7NvUTEj4YDxBLZ1FLg==
dependencies:
"@octokit/auth-oauth-app" "^5.0.0"
@ -752,7 +781,7 @@
"@octokit/core@^4.0.5", "@octokit/core@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.1.0.tgz#b6b03a478f1716de92b3f4ec4fd64d05ba5a9251"
resolved "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz"
integrity sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==
dependencies:
"@octokit/auth-token" "^3.0.0"
@ -813,12 +842,12 @@
"@octokit/openapi-types@^14.0.0":
version "14.0.0"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a"
resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz"
integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==
"@octokit/plugin-paginate-rest@^5.0.0":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz#93d7e74f1f69d68ba554fa6b888c2a9cf1f99a83"
resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz"
integrity sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==
dependencies:
"@octokit/types" "^8.0.0"
@ -830,7 +859,7 @@
"@octokit/plugin-rest-endpoint-methods@^6.7.0":
version "6.7.0"
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz#2f6f17f25b6babbc8b41d2bb0a95a8839672ce7c"
resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz"
integrity sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==
dependencies:
"@octokit/types" "^8.0.0"
@ -880,7 +909,7 @@
"@octokit/rest@^19.0.5":
version "19.0.5"
resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.5.tgz#4dbde8ae69b27dca04b5f1d8119d282575818f6c"
resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.5.tgz"
integrity sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow==
dependencies:
"@octokit/core" "^4.1.0"
@ -897,14 +926,14 @@
"@octokit/types@^8.0.0":
version "8.0.0"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.0.0.tgz#93f0b865786c4153f0f6924da067fe0bb7426a9f"
resolved "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz"
integrity sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==
dependencies:
"@octokit/openapi-types" "^14.0.0"
"@pkgr/utils@^2.3.1":
version "2.3.1"
resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03"
resolved "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz"
integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==
dependencies:
cross-spawn "^7.0.3"
@ -1020,7 +1049,7 @@
"@swc/helpers@0.4.11":
version "0.4.11"
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de"
resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz"
integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==
dependencies:
tslib "^2.4.0"
@ -1151,7 +1180,7 @@
"@typescript-eslint/parser@^5.42.0":
version "5.42.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.42.1.tgz#3e66156f2f74b11690b45950d8f5f28a62751d35"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz"
integrity sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==
dependencies:
"@typescript-eslint/scope-manager" "5.42.1"
@ -1161,7 +1190,7 @@
"@typescript-eslint/scope-manager@5.42.1":
version "5.42.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz#05e5e1351485637d466464237e5259b49f609b18"
resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz"
integrity sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==
dependencies:
"@typescript-eslint/types" "5.42.1"
@ -1169,12 +1198,12 @@
"@typescript-eslint/types@5.42.1":
version "5.42.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.42.1.tgz#0d4283c30e9b70d2aa2391c36294413de9106df2"
resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz"
integrity sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==
"@typescript-eslint/typescript-estree@5.42.1":
version "5.42.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz#f9a223ecb547a781d37e07a5ac6ba9ff681eaef0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz"
integrity sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==
dependencies:
"@typescript-eslint/types" "5.42.1"
@ -1187,12 +1216,33 @@
"@typescript-eslint/visitor-keys@5.42.1":
version "5.42.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz#df10839adf6605e1cdb79174cf21e46df9be4872"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz"
integrity sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==
dependencies:
"@typescript-eslint/types" "5.42.1"
eslint-visitor-keys "^3.3.0"
"@wry/context@^0.7.0":
version "0.7.0"
resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.0.tgz#be88e22c0ddf62aeb0ae9f95c3d90932c619a5c8"
integrity sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ==
dependencies:
tslib "^2.3.0"
"@wry/equality@^0.5.0":
version "0.5.3"
resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.3.tgz#fafebc69561aa2d40340da89fa7dc4b1f6fb7831"
integrity sha512-avR+UXdSrsF2v8vIqIgmeTY0UR91UT+IyablCyKe/uk22uOJ8fusKZnH9JH9e1/EtLeNJBtagNmL3eJdnOV53g==
dependencies:
tslib "^2.3.0"
"@wry/trie@^0.3.0":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.2.tgz#a06f235dc184bd26396ba456711f69f8c35097e6"
integrity sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==
dependencies:
tslib "^2.3.0"
acorn-jsx@^5.3.2:
version "5.3.2"
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
@ -1203,6 +1253,11 @@ acorn@^8.8.0:
resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz"
integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==
add@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235"
integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==
airtable-plus@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/airtable-plus/-/airtable-plus-1.0.4.tgz"
@ -1293,7 +1348,7 @@ array-includes@^3.1.3, array-includes@^3.1.4:
array-includes@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz"
integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
dependencies:
call-bind "^1.0.2"
@ -1318,7 +1373,7 @@ array.prototype.flat@^1.2.5:
array.prototype.flatmap@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz"
integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
dependencies:
call-bind "^1.0.2"
@ -1364,9 +1419,9 @@ axe-core@^4.3.5:
integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==
axios@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.0.tgz#1cb65bd75162c70e9f8d118a905126c4a201d383"
integrity sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==
version "1.2.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.1.tgz#44cf04a3c9f0c2252ebd85975361c026cb9f864a"
integrity sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
@ -1518,7 +1573,7 @@ camelize@^1.0.0:
caniuse-lite@^1.0.30001406:
version "1.0.30001412"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz#30f67d55a865da43e0aeec003f073ea8764d5d7c"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz"
integrity sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA==
caseless@~0.12.0:
@ -1699,6 +1754,11 @@ csstype@^3.0.2:
resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz"
integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==
cursor-effects@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/cursor-effects/-/cursor-effects-1.0.7.tgz#782554feea4af814af1b39a2e4f4cdceb0aa0c37"
integrity sha512-v1RKMRuAtxR5ftVRokiBQH1maKIX7/Dja2i+N8nBUzaczCzM/pG1KMzqcp4DahcxarUTbcjiNqKD2zeYu35DJQ==
d3-array@2, d3-array@^2.3.0:
version "2.12.1"
resolved "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz"
@ -1810,7 +1870,7 @@ deepmerge@^4.2.2:
define-lazy-prop@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
define-properties@^1.1.3:
@ -1822,7 +1882,7 @@ define-properties@^1.1.3:
define-properties@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz"
integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
dependencies:
has-property-descriptors "^1.0.0"
@ -1850,6 +1910,11 @@ detab@2.0.4:
dependencies:
repeat-string "^1.5.4"
devtools-detect@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/devtools-detect/-/devtools-detect-4.0.0.tgz#a5bf7f990df093ba231a37ed301ec9ba157ecafb"
integrity sha512-BnCKIj1DDWite4sml9z8baFlkZWdtFH0rl1+HcBZ6ORm3HG7JSuehQUVzdOUxbPDLLVmEVuqkrvy3y8y2GOXyQ==
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
@ -1915,7 +1980,7 @@ emojis-list@^3.0.0:
enhanced-resolve@^5.10.0:
version "5.10.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6"
resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz"
integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==
dependencies:
graceful-fs "^4.2.4"
@ -1956,7 +2021,7 @@ es-abstract@^1.19.0, es-abstract@^1.19.1:
es-abstract@^1.19.2, es-abstract@^1.19.5:
version "1.20.3"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.3.tgz#90b143ff7aedc8b3d189bcfac7f1e3e3f81e9da1"
resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz"
integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==
dependencies:
call-bind "^1.0.2"
@ -1986,7 +2051,7 @@ es-abstract@^1.19.2, es-abstract@^1.19.5:
es-shim-unscopables@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz"
integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
dependencies:
has "^1.0.3"
@ -2035,7 +2100,7 @@ eslint-import-resolver-node@^0.3.6:
eslint-import-resolver-typescript@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz#9431acded7d898fd94591a08ea9eec3514c7de91"
resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz"
integrity sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==
dependencies:
debug "^4.3.4"
@ -2098,7 +2163,7 @@ eslint-plugin-react-hooks@^4.5.0:
eslint-plugin-react@^7.31.7:
version "7.31.8"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz#3a4f80c10be1bcbc8197be9e8b641b2a3ef219bf"
resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz"
integrity sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==
dependencies:
array-includes "^3.1.5"
@ -2143,7 +2208,7 @@ eslint-visitor-keys@^3.3.0:
eslint@8.28.0:
version "8.28.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz"
integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==
dependencies:
"@eslint/eslintrc" "^1.3.3"
@ -2256,7 +2321,7 @@ fast-equals@^2.0.0:
fast-glob@^3.2.11:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
@ -2342,7 +2407,7 @@ flatted@^3.1.0:
follow-redirects@^1.15.0:
version "1.15.2"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
forever-agent@~0.6.1:
@ -2380,7 +2445,7 @@ function-bind@^1.1.1:
function.prototype.name@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz"
integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
dependencies:
call-bind "^1.0.2"
@ -2390,7 +2455,7 @@ function.prototype.name@^1.1.5:
functions-have-names@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
gensync@^1.0.0-beta.1:
@ -2409,7 +2474,7 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
get-intrinsic@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz"
integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
dependencies:
function-bind "^1.1.1"
@ -2426,7 +2491,7 @@ get-symbol-description@^1.0.0:
get-tsconfig@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.2.0.tgz#ff368dd7104dab47bf923404eb93838245c66543"
resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz"
integrity sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==
getpass@^0.1.1:
@ -2445,7 +2510,7 @@ glob-parent@^5.1.2:
glob-parent@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
dependencies:
is-glob "^4.0.3"
@ -2496,7 +2561,7 @@ globals@^13.15.0:
globalyzer@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465"
resolved "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz"
integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==
globby@^11.0.4, globby@^11.1.0:
@ -2513,7 +2578,7 @@ globby@^11.0.4, globby@^11.1.0:
globby@^13.1.2:
version "13.1.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515"
resolved "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz"
integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==
dependencies:
dir-glob "^3.0.1"
@ -2524,7 +2589,7 @@ globby@^13.1.2:
globrex@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
resolved "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz"
integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
graceful-fs@^4.2.4:
@ -2537,6 +2602,18 @@ grapheme-splitter@^1.0.4:
resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz"
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
graphql-tag@^2.12.6:
version "2.12.6"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1"
integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==
dependencies:
tslib "^2.1.0"
graphql@^16.6.0:
version "16.6.0"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb"
integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==
gsap@^3.11.3:
version "3.11.3"
resolved "https://registry.yarnpkg.com/gsap/-/gsap-3.11.3.tgz#ca5be827f56fe8d5720e08343390f74fb89a05f3"
@ -2562,7 +2639,7 @@ has-bigints@^1.0.1:
has-bigints@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz"
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
has-flag@^3.0.0:
@ -2577,7 +2654,7 @@ has-flag@^4.0.0:
has-property-descriptors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz"
integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
dependencies:
get-intrinsic "^1.1.1"
@ -2589,7 +2666,7 @@ has-symbols@^1.0.1, has-symbols@^1.0.2:
has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
has-tostringtag@^1.0.0:
@ -2674,7 +2751,7 @@ hastscript@^6.0.0:
property-information "^5.0.0"
space-separated-tokens "^1.0.0"
hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.1:
hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@ -2812,12 +2889,12 @@ is-callable@^1.2.4:
is-callable@^1.2.6:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
is-core-module@^2.10.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz"
integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
dependencies:
has "^1.0.3"
@ -2862,7 +2939,7 @@ is-decimal@^1.0.0:
is-docker@^2.0.0, is-docker@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
is-extglob@^2.1.1:
@ -2894,7 +2971,7 @@ is-negative-zero@^2.0.1:
is-negative-zero@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz"
integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
is-number-object@^1.0.4:
@ -2909,7 +2986,7 @@ is-number@^7.0.0:
is-path-inside@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
is-plain-obj@^2.0.0:
@ -2937,7 +3014,7 @@ is-shared-array-buffer@^1.0.1:
is-shared-array-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz"
integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
dependencies:
call-bind "^1.0.2"
@ -2990,7 +3067,7 @@ is-word-character@^1.0.0:
is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz"
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
dependencies:
is-docker "^2.0.0"
@ -3012,7 +3089,7 @@ jquery@^3.6.1:
js-sdsl@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6"
resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz"
integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
@ -3374,14 +3451,14 @@ next-compose-plugins@^2.2.1:
next-transpile-modules@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/next-transpile-modules/-/next-transpile-modules-10.0.0.tgz#7152880048835acb64d05fc7aa34910cbe7994da"
resolved "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-10.0.0.tgz"
integrity sha512-FyeJ++Lm2Fq31gbThiRCrJlYpIY9QaI7A3TjuhQLzOix8ChQrvn5ny4MhfIthS5cy6+uK1AhDRvxVdW17y3Xdw==
dependencies:
enhanced-resolve "^5.10.0"
next@^12.3.1:
version "12.3.1"
resolved "https://registry.yarnpkg.com/next/-/next-12.3.1.tgz#127b825ad2207faf869b33393ec8c75fe61e50f1"
resolved "https://registry.npmjs.org/next/-/next-12.3.1.tgz"
integrity sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==
dependencies:
"@next/env" "12.3.1"
@ -3429,7 +3506,7 @@ object-inspect@^1.11.0:
object-inspect@^1.12.2:
version "1.12.2"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz"
integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
object-inspect@^1.9.0:
@ -3454,7 +3531,7 @@ object.assign@^4.1.2:
object.assign@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz"
integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
dependencies:
call-bind "^1.0.2"
@ -3482,7 +3559,7 @@ object.fromentries@^2.0.5:
object.hasown@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3"
resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz"
integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==
dependencies:
define-properties "^1.1.4"
@ -3506,13 +3583,21 @@ once@^1.3.0, once@^1.4.0:
open@^8.4.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz"
integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
dependencies:
define-lazy-prop "^2.0.0"
is-docker "^2.1.1"
is-wsl "^2.2.0"
optimism@^0.16.1:
version "0.16.2"
resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.2.tgz#519b0c78b3b30954baed0defe5143de7776bf081"
integrity sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==
dependencies:
"@wry/context" "^0.7.0"
"@wry/trie" "^0.3.0"
optionator@^0.9.1:
version "0.9.1"
resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz"
@ -3685,7 +3770,7 @@ prop-types@^15.5.10:
object-assign "^4.1.1"
react-is "^16.8.1"
prop-types@^15.6.2, prop-types@^15.8.1:
prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@ -3703,7 +3788,7 @@ property-information@^5.0.0, property-information@^5.3.0:
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
psl@^1.1.24:
@ -3748,7 +3833,7 @@ raw-body@2.3.2:
react-before-after-slider-component@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/react-before-after-slider-component/-/react-before-after-slider-component-1.1.5.tgz#affef71923b43b6147072b5ff3cc0f5fbcd30362"
resolved "https://registry.npmjs.org/react-before-after-slider-component/-/react-before-after-slider-component-1.1.5.tgz"
integrity sha512-I687klUpBNkn8RPqqyrErtlMf+epAQqzEQD+YZMpGTNKwEXb+CcIadFHGvZpoo5soEUDyXFH6ubdDSMlYtYCbA==
react-dom@^17.0.2:
@ -3770,6 +3855,13 @@ react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.1:
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-konami-code@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/react-konami-code/-/react-konami-code-2.3.0.tgz#c78759a098a769536a2a921b8a1412d7f43d3ccb"
integrity sha512-9x90HnzstiMXs2kFS9cYsb5a+ojKEB/iC24uzNKCoE9znorLJwUcy98tjsiW2i5AHB05GuqIMTzV5RaDpVSThw==
dependencies:
prop-types "^15.8.1"
react-lifecycles-compat@^3.0.4:
version "3.0.4"
resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz"
@ -3785,6 +3877,18 @@ react-masonry-css@^1.0.16:
resolved "https://registry.npmjs.org/react-masonry-css/-/react-masonry-css-1.0.16.tgz"
integrity sha512-KSW0hR2VQmltt/qAa3eXOctQDyOu7+ZBevtKgpNDSzT7k5LA/0XntNa9z9HKCdz3QlxmJHglTZ18e4sX4V8zZQ==
react-page-visibility@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/react-page-visibility/-/react-page-visibility-7.0.0.tgz#13dfe604790d061e70b900038bad1ca769a36cbc"
integrity sha512-d4Kq/8TtJSr8dQc8EJeAZcSKTrGzC5OPTm6UrMur9BnwP0fgTawI9+Nd+ZGB7vwCfn2yZS0qDF9DR3/QYTGazw==
dependencies:
prop-types "^15.7.2"
react-relative-time@^0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/react-relative-time/-/react-relative-time-0.0.7.tgz#9f7f4074286ebe6135b533eee1adea055df97183"
integrity sha512-1MufiuswxbmgPR0fdfKLkQpjlphkMTjC99IOOuCENRiF+7EmtlcNFi+kCNtmeCDk3gtizG3OiuYBevN0vljNYQ==
react-resize-detector@^7.1.2:
version "7.1.2"
resolved "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz"
@ -3826,9 +3930,17 @@ react-ticker@^1.3.2:
resolved "https://registry.npmjs.org/react-ticker/-/react-ticker-1.3.2.tgz"
integrity sha512-9sLgc9gFx/EMNxn2QcwUJAOf3jdEROKRyXZGbWrEbfJG/MTkHwR+WRrVtypv3iFXPpcrKmPD91+vatHq0BgR0Q==
react-tooltip@^4.5.1:
version "4.5.1"
resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.5.1.tgz#77eccccdf16adec804132e558ec20ca5783b866a"
integrity sha512-Zo+CSFUGXar1uV+bgXFFDe7VeS2iByeIp5rTgTcc2HqtuOS5D76QapejNNfx320MCY91TlhTQat36KGFTqgcvw==
dependencies:
prop-types "^15.8.1"
uuid "^7.0.3"
react-transition-group@2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz"
integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==
dependencies:
dom-helpers "^3.4.0"
@ -3838,7 +3950,7 @@ react-transition-group@2.9.0:
react-tsparticles@^2.5.3:
version "2.5.3"
resolved "https://registry.yarnpkg.com/react-tsparticles/-/react-tsparticles-2.5.3.tgz#689d1b9da20f3ec0880725d5a38c3c0b50f602aa"
resolved "https://registry.npmjs.org/react-tsparticles/-/react-tsparticles-2.5.3.tgz"
integrity sha512-4wIq3wGcKnnMKz5fXWCQDPWnibCWRoUi/KO13l8vFATg7kcwSkDF52I5mzGFdiftM6d3Amy5x86wDuXGj3dGHg==
dependencies:
fast-deep-equal "^3.1.3"
@ -3896,7 +4008,7 @@ regenerator-runtime@^0.13.4:
regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz"
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
dependencies:
call-bind "^1.0.2"
@ -4035,6 +4147,11 @@ resolve@^2.0.0-next.3:
is-core-module "^2.2.0"
path-parse "^1.0.6"
response-iterator@^0.2.6:
version "0.2.6"
resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da"
integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
@ -4066,7 +4183,7 @@ safe-buffer@~5.1.1:
safe-regex-test@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz"
integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
dependencies:
call-bind "^1.0.2"
@ -4098,7 +4215,7 @@ semver@^6.3.0:
semver@^7.3.7:
version "7.3.8"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
@ -4141,7 +4258,7 @@ slash@^3.0.0:
slash@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
source-map-js@^1.0.2:
@ -4156,7 +4273,7 @@ source-map@^0.5.0, source-map@^0.5.7:
source-map@^0.7.0:
version "0.7.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz"
integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
space-separated-tokens@^1.0.0:
@ -4191,7 +4308,7 @@ state-toggle@^1.0.0:
string.prototype.matchall@^4.0.7:
version "4.0.7"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz"
integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
dependencies:
call-bind "^1.0.2"
@ -4213,7 +4330,7 @@ string.prototype.trimend@^1.0.4:
string.prototype.trimend@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz"
integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
dependencies:
call-bind "^1.0.2"
@ -4230,7 +4347,7 @@ string.prototype.trimstart@^1.0.4:
string.prototype.trimstart@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz"
integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
dependencies:
call-bind "^1.0.2"
@ -4263,7 +4380,7 @@ style-to-object@0.3.0, style-to-object@^0.3.0:
styled-components@^5.3.6:
version "5.3.6"
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1"
resolved "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz"
integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
@ -4279,7 +4396,7 @@ styled-components@^5.3.6:
styled-jsx@5.0.7:
version "5.0.7"
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.7.tgz#be44afc53771b983769ac654d355ca8d019dff48"
resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz"
integrity sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==
styled-system@^5.1.5:
@ -4303,7 +4420,7 @@ styled-system@^5.1.5:
stylis@4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7"
resolved "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz"
integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==
supports-color@^5.3.0, supports-color@^5.5.0:
@ -4330,9 +4447,14 @@ swr@^1.3.0:
resolved "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz"
integrity sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==
symbol-observable@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205"
integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==
synckit@^0.8.4:
version "0.8.4"
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.4.tgz#0e6b392b73fafdafcde56692e3352500261d64ec"
resolved "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz"
integrity sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==
dependencies:
"@pkgr/utils" "^2.3.1"
@ -4362,7 +4484,7 @@ theme-ui@^0.14:
tiny-glob@^0.2.9:
version "0.2.9"
resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
resolved "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz"
integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==
dependencies:
globalyzer "0.1.0"
@ -4413,6 +4535,13 @@ trough@^1.0.0:
resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz"
integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
ts-invariant@^0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c"
integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==
dependencies:
tslib "^2.1.0"
tsconfig-paths@^3.14.1:
version "3.14.1"
resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz"
@ -4428,6 +4557,11 @@ tslib@^1.8.1:
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.1.0, tslib@^2.3.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
tslib@^2.4.0:
version "2.4.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz"
@ -4435,7 +4569,7 @@ tslib@^2.4.0:
tsparticles-engine@^2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/tsparticles-engine/-/tsparticles-engine-2.5.2.tgz#1772e857c452af806602ab0f33c90338d109f8b8"
resolved "https://registry.npmjs.org/tsparticles-engine/-/tsparticles-engine-2.5.2.tgz"
integrity sha512-P2m1E/EIlvEnH9l7OEIpeKXxSn1ThNhWSp6zeRYvH/DntJpI5Oqa/AMrjum15rUzBkMDgRo7XFO4LqRWs8iB/Q==
tsutils@^3.21.0:
@ -4488,7 +4622,7 @@ unbox-primitive@^1.0.1:
unbox-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz"
integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
dependencies:
call-bind "^1.0.2"
@ -4609,9 +4743,14 @@ uuid@^3.3.2:
resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
vanilla-tilt@^1.7.3:
version "1.7.3"
resolved "https://registry.yarnpkg.com/vanilla-tilt/-/vanilla-tilt-1.7.3.tgz#1c6a15c1c627e949571167e5421ee82cf465026a"
resolved "https://registry.npmjs.org/vanilla-tilt/-/vanilla-tilt-1.7.3.tgz"
integrity sha512-tdNVZ1JyDNsByplVCS1H3/i/zcGOIrFW5BQp7u9SyXKjNypZw7s89x+GA8kOhUxWOggF4A1E9N55jEF0ttpLjw==
verror@1.10.0:
@ -4717,11 +4856,28 @@ yaml@^1.10.0:
resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
yarn@^1.22.19:
version "1.22.19"
resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
zen-observable-ts@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58"
integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==
dependencies:
zen-observable "0.8.15"
zen-observable@0.8.15:
version "0.8.15"
resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
zwitch@^1.0.0:
version "1.0.5"
resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz"