mobile
|
|
@ -21,7 +21,7 @@ const Announcement = ({
|
|||
variant="interactive"
|
||||
sx={{
|
||||
variant: 'cards.translucent',
|
||||
mx: 'auto',
|
||||
// mx: 'auto',
|
||||
maxWidth: 'narrow',
|
||||
width: '100%',
|
||||
textAlign: 'left',
|
||||
|
|
|
|||
|
|
@ -125,7 +125,8 @@ export default function Signup() {
|
|||
eventName,
|
||||
teamType,
|
||||
teamNumber,
|
||||
userEmail
|
||||
userEmail,
|
||||
category: 'robotics team'
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
|||
3
components/comma.js
Normal 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
|
|
@ -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'
|
||||
}}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
153
components/index/cards/bank.js
Normal 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>
|
||||
)
|
||||
}
|
||||
77
components/index/cards/button.js
Normal 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>
|
||||
)
|
||||
}
|
||||
156
components/index/cards/card-model.js
Normal 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
|
||||
119
components/index/cards/clubs.js
Normal 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>
|
||||
)
|
||||
}
|
||||
205
components/index/cards/epoch.js
Normal 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, we’ll build the
|
||||
unexpected, share what we’ve 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>
|
||||
)
|
||||
}
|
||||
102
components/index/cards/events.js
Normal 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 don’t 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>
|
||||
)
|
||||
}
|
||||
257
components/index/cards/hackathons.js
Normal 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>
|
||||
)
|
||||
}
|
||||
269
components/index/cards/inspect.js
Normal 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>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
117
components/index/cards/sinerider.js
Normal 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 that’s 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>
|
||||
)
|
||||
}
|
||||
237
components/index/cards/slack.js
Normal 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 doesn’t 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>
|
||||
)
|
||||
}
|
||||
123
components/index/cards/sprig-console.js
Normal 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>
|
||||
)
|
||||
}
|
||||
303
components/index/cards/sprig.js
Normal 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>
|
||||
)
|
||||
}
|
||||
21
components/index/cards/tilt.js
Normal 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
|
||||
173
components/index/cards/winter.js
Normal 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>
|
||||
)
|
||||
}
|
||||
135
components/index/cards/workshops.js
Normal 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>
|
||||
)
|
||||
}
|
||||
80
components/index/carousel-cards.js
Normal 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>
|
||||
)
|
||||
}
|
||||
134
components/index/carousel.js
Normal 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
|
|
@ -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
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
|
@ -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>
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
// `
|
||||
|
|
@ -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.
|
||||
</>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,7 +92,8 @@ export default function Signup() {
|
|||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
eventName,
|
||||
userEmail
|
||||
userEmail,
|
||||
category: 'hardware grant'
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 />
|
||||
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
14
package.json
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
||||
}
|
||||
15
pages/api/sprig-console.js
Normal 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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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="Don’t 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
|
||||
}}
|
||||
>
|
||||
Don’t run your coding club alone.
|
||||
</Text>
|
||||
Make it a{' '}
|
||||
<Text
|
||||
as="span"
|
||||
sx={{
|
||||
WebkitTextStroke: 'currentColor',
|
||||
WebkitTextStrokeWidth: ['2px', '3px'],
|
||||
WebkitTextFillColor: 'transparent'
|
||||
}}
|
||||
>
|
||||
Hack 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 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 (that’s 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, you’re 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 City 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 hack’s 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 shouldn’t be taught like a
|
||||
class — it should be a creative, inclusive space. To foster this
|
||||
environment,{' '}
|
||||
<Highlight>every Hack 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 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>, you’ll be
|
||||
invited to a space for Hack 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 Club
|
||||
benefits: Zoom Pro, stickers, our Slack community,{' '}
|
||||
<a href="https://workshops.hackclub.com/">workshops</a>, the
|
||||
works. They’re welcome to use the “Hack 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">
|
||||
It’s all-online, free, & takes under an hour. We’ll 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 & who’s 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 club’s 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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 />
|
||||
|
|
|
|||
1702
pages/index.js
BIN
public/home/ama.png
Normal file
|
After Width: | Height: | Size: 4.9 MiB |
BIN
public/home/assemble-group.JPG
Normal file
|
After Width: | Height: | Size: 8.6 MiB |
BIN
public/home/assemble-hardware.JPG
Normal file
|
After Width: | Height: | Size: 3.3 MiB |
BIN
public/home/bank-computer.webp
Normal file
|
After Width: | Height: | Size: 8 KiB |
BIN
public/home/bank-screen.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/home/clubs-bg.webp
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
public/home/epoch-bg.webp
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/home/hackathons-bg.webp
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
public/home/map.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
public/home/sinerider-bg.webp
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
public/home/slack_ama.webp
Normal file
|
After Width: | Height: | Size: 132 KiB |
BIN
public/home/sprig-bg.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
public/home/sprig-logo.webp
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
public/home/winter-bg.webp
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/home/workshops/particle_physics.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/home/workshops/splatter_paint.png
Normal file
|
After Width: | Height: | Size: 355 KiB |
BIN
public/home/zephyr-spacex.jpeg
Normal file
|
After Width: | Height: | Size: 463 KiB |
BIN
public/stickers/HackHackClub.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
public/stickers/bank_sheet.png
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
public/stickers/epoch.png
Normal file
|
After Width: | Height: | Size: 567 KiB |
BIN
public/stickers/epoch_"h".png
Normal file
|
After Width: | Height: | Size: 585 KiB |
BIN
public/stickers/epoch_among_us.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
public/stickers/epoch_bubbly.png
Normal file
|
After Width: | Height: | Size: 279 KiB |
BIN
public/stickers/hacky_new_year.png
Normal file
|
After Width: | Height: | Size: 231 KiB |
BIN
public/stickers/orpheus_goes_to_FIRST_robotics.png
Normal file
|
After Width: | Height: | Size: 584 KiB |
BIN
public/stickers/ship.png
Normal file
|
After Width: | Height: | Size: 535 KiB |
BIN
public/stickers/sledding.png
Normal file
|
After Width: | Height: | Size: 301 KiB |
BIN
public/stickers/sprig_holographic.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
public/stickers/swiss_miss.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
public/test.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
344
yarn.lock
|
|
@ -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"
|
||||
|
|
|
|||