Merge pull request #30 from ClicksMinutePer/dependabot/npm_and_yarn/loader-utils-2.0.4
diff --git a/.gitignore b/.gitignore
index 74b7586..211d86a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,3 +33,5 @@
# vercel
.vercel
+
+.direnv/
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 1a80597..5b6467b 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -4,6 +4,7 @@
"Captchas",
"Carrington",
"Cavendon",
+ "Clicksmas",
"Customise",
"RSMV",
"Statethis",
@@ -27,7 +28,11 @@
"slowmode",
"softban",
"svgr",
+ "tsparticles",
"unban",
"viewas"
+ ],
+ "githubPullRequests.ignoredPullRequestBranches": [
+ "production"
]
}
\ No newline at end of file
diff --git a/Components/Card.js b/Components/Card.js
index c4a31c6..7f9330f 100644
--- a/Components/Card.js
+++ b/Components/Card.js
@@ -40,7 +40,7 @@
} else if (this.props.icon) {
icons = <img alt={this.props.title} className={Styles.image} src={`https://assets.clicks.codes/${this.props.icon}.svg`} />
} else if (this.props.wave) {
- icons = <img alt={this.props.title} className={Styles.image} src={`https://assets.clicks.codes//${this.props.wave}.svg`} />
+ icons = <img alt={this.props.title} className={Styles.image} src={`https://assets.clicks.codes/web/waves/card/${this.props.wave}.svg`} />
}
return <>{icons}</>;
}
diff --git a/Components/Header.js b/Components/Header.js
index b89c0e0..f28c853 100644
--- a/Components/Header.js
+++ b/Components/Header.js
@@ -4,6 +4,7 @@
import Head from 'next/head';
import { useReward } from "react-rewards";
import ScrollContainer from 'react-indiana-drag-scroll'
+import { Paragraph } from "./Texttools.js"
const positive = [
"https://raw.githubusercontent.com/twitter/twemoji/master/assets/svg/1f389.svg",
@@ -34,76 +35,6 @@
function Header(props) {
const keys = Object.keys(props.effects ?? {});
- const changingSubtextEffect = keys.includes("changingSubtext");
- const typedEffect = keys.includes("type") || changingSubtextEffect;
-
-
- const [ clickTotal, setClickTotal ] = React.useState(0);
- const [ currText, setCurrentText ] = React.useState(typedEffect ? "" : (props.subtext ?? ""));
- const [ hasRendered, setHasRendered ] = React.useState(false);
-
- function typeText(currentText, toType) {
- let count = 0;
- let interval = setInterval(() => {
- setCurrentText(currentText + toType.substring(0, count));
- count++;
- if (count > toType.length) {
- clearInterval(interval);
- }
- }, props.effects.type ?? 50);
- return currentText + toType
- }
-
- function unTypeText(currentText, amount) {
- let count = 0;
- const permanentText = currentText.slice(0, currentText.length - amount);
- let toRemove = currentText.slice(currentText.length - amount, currentText.length);
- let interval = setInterval(() => {
- toRemove = toRemove.slice(0, toRemove.length - 1);
- setCurrentText(permanentText + toRemove);
- count++;
- if (count >= amount) {
- clearInterval(interval);
- }
- }, 500 / amount);
- return permanentText;
- }
-
- function startAnimations() {
- setHasRendered(true);
- if (!changingSubtextEffect && typedEffect) return typeText("", props.subtext);
- if (changingSubtextEffect && typedEffect) {
- let lastPicked = -1;
- function selectNextString() {
- if (Math.floor(Math.random() * 100) === 0) {
- return props.effects.changingSubtext.rare[Math.floor(Math.random() * props.effects.changingSubtext.rare.length)];
- }
- let selectedIndex = lastPicked
- while (selectedIndex === lastPicked) {
- selectedIndex = Math.floor(Math.random() * props.effects.changingSubtext.common.length);
- }
- lastPicked = selectedIndex;
- return props.effects.changingSubtext.common[selectedIndex];
- }
- let nextString = selectNextString();
- let currentText = typeText("", props.subtext + nextString);
- setTimeout(() => {
- function next() {
- setTimeout(() => {
- setTimeout(() => {
- nextString = selectNextString();
- currentText = typeText(currentText, nextString);
- }, 1000);
- currentText = unTypeText(currentText, nextString.length);
- }, 4000);
- }
- next()
- setInterval(() => {
- next()
- }, 5000);
- }, 3000);
- }
- }
const { reward: reward, isAnimating: isAnimating } = useReward('headerConfetti', 'confetti', {
elementSize: 10,
@@ -128,6 +59,7 @@
const all = positive.concat(negative)
const [imagesPreloaded, setImagesPreloaded] = useState(false)
+ const [clickTotal, setClickTotal] = useState(0)
useEffect(() => {
let isCancelled = false
async function effect() {
@@ -174,15 +106,16 @@
}
}
}
-
- if (!hasRendered) startAnimations();
+ const season = props.season ?? { season: "normal", filePath: "normal" };
return (
- <div className={Styles.header} style={{
+ <div className={Styles.header} style={{
margin: "0",
minHeight: props.fullscreen ? "calc(100vh - 42px)" : "calc(100vh - (4 * max(2em, 4vw)) - 1em)",
+ transform: season.season === "aprilFools" ? "rotate(2.5deg)" : "none",
+ transition: "transform 1s cubic-bezier(.47,1.64,.41,.8), background-color 0.3s ease-in-out"
}} id={props.id ? props.id : null}>
- <div className={Styles.container} style={{minHeight: props.fullscreen ? "calc(100vh - 42px)" : "calc(100vh - (4 * max(2em, 4vw)) - 1em)",}}>
+ <div className={Styles.container} style={{minHeight: props.fullscreen ? "calc(100vh - 42px)" : "calc(100vh - (4 * max(2em, 4vw)) - 1em)"}}>
{imagesPreloaded}
<div className={Styles.backgroundGradient} style={{
backgroundImage: `linear-gradient(69.44deg, #${props.gradient[0]} 0%, #${props.gradient[1]} 100%)`,
@@ -222,8 +155,11 @@
<h1 className={Styles.title}>{props.name}</h1>
</div>
<div className={Styles.textBar}>
- <p className={Styles.subtext + " " + (props.buttons.length ? Styles.subtextExtra : null)}>{currText}</p>
- { typedEffect ? <div className={Styles.typedEffect} /> : <></> }
+ {
+ typeof props.subtext === "string" ?
+ <p className={Styles.subtext + " " + (props.buttons.length ? Styles.subtextExtra : null)}>{props.subtext}</p> :
+ props.subtext
+ }
</div>
<a href="#skipNav" id="skipNav" style={{display: "none"}} />
{ props.buttons.length ?
diff --git a/Components/NavBar.js b/Components/NavBar.js
index 6ea02c9..2e620b4 100644
--- a/Components/NavBar.js
+++ b/Components/NavBar.js
@@ -18,17 +18,18 @@
}
render() {
+ const season = this.props.season.filePath;
return (
<div className={Styles.cutoffContainer}>
<div className={Styles.container + " " + (this.props.subBar ? Styles.slideUp : null)}>
<a href="#skipNav" className={Styles.skipNav}>Skip navigation</a>
<a className={Styles.icon} href="/"><img alt="Clicks" className={Styles.icon} src="https://assets.clicks.codes/web/logos/clicks.svg" /></a>
<Divider />
- <a className={Styles.icon} href="/gps"><img alt="GPS" className={Styles.icon} src="https://assets.clicks.codes/bots/gps/circle.svg" /></a>
- <a className={Styles.icon} href="/rsm"><img alt="RSM" className={Styles.icon} src="https://assets.clicks.codes/bots/rsm/circle.svg" /></a>
- {/* <a className={Styles.icon} href="/nucleus#"><img alt="Nucleus" className={Styles.icon} src="https://assets.clicks.codes/bots/nucleus/circle.svg" /></a> */}
- <a className={Styles.icon} href="/clicksforms"><img alt="ClicksForms" className={Styles.icon} src="https://assets.clicks.codes/bots/clicksforms/circle.svg" /></a>
- <a className={Styles.icon} href="/hooky"><img alt="Hooky" className={Styles.icon} src="https://assets.clicks.codes/bots/hooky/circle.svg" /></a>
+ <a className={Styles.icon} href="/gps"><img alt="GPS" className={Styles.icon} src={`https://assets.clicks.codes/bots/gps/${season}.svg`} /></a>
+ {/* <a className={Styles.icon} href="/rsm"><img alt="RSM" className={Styles.icon} src={`https://assets.clicks.codes/bots/rsm/${season}.svg`} /></a> */}
+ <a className={Styles.icon} href="/nucleus"><img alt="Nucleus" className={Styles.icon} src={`https://assets.clicks.codes/bots/nucleus/${season}.svg`} /></a>
+ <a className={Styles.icon} href="/clicksforms"><img alt="ClicksForms" className={Styles.icon} src={`https://assets.clicks.codes/bots/clicksforms/${season}.svg`} /></a>
+ <a className={Styles.icon} href="/hooky"><img alt="Hooky" className={Styles.icon} src={`https://assets.clicks.codes/bots/hooky/${season}.svg`} /></a>
<Divider />
<ThemeChangeButton/>
</div>
diff --git a/Components/Panels.js b/Components/Panels.js
index 7aaa658..b700cf7 100644
--- a/Components/Panels.js
+++ b/Components/Panels.js
@@ -6,6 +6,7 @@
class PanelClass extends Component {
constructor(props) {
super(props);
+ this.panel = react.createRef();
}
getStyle() {
@@ -16,12 +17,20 @@
}
render() {
- return <div className={Styles.panel} style={this.getStyle()} id={this.props.id} tabIndex={0}>
- {
- react.Children.toArray(this.props.children).map((child, index) => {
- return child;
- })
- }
+ let style = this.getStyle();
+ if (this.props.forceStyle) {
+ style = {...style, ...this.props.forceStyle};
+ if (this.props.forceStyle.transform) {
+ style = {...this.getStyle(), transition: "transform ease-in-out 0.5s"};
+ style.transform += " " + this.props.forceStyle.transform;
+ }
+ }
+ return <div className={Styles.panel} style={style} id={this.props.id} tabIndex={0}>
+ {
+ react.Children.toArray(this.props.children).map((child, index) => {
+ return child;
+ })
+ }
</div>
}
}
@@ -30,13 +39,12 @@
class AutoLayout extends Component {
constructor(props) {
super(props);
- this.children = react.Children.toArray(this.props.children)
this.validity = []
this.calculateValidity()
}
calculateValidity() {
- this.children.map((item, index) => {
+ react.Children.toArray(this.props.children).map((item, index) => {
if ( index > 0 && item.props.halfSize && this.validity[index - 1] === 'half1' ) {
this.validity[index] = 'half2';
} else if ( index > 0 && !item.props.halfSize && this.validity[index - 1] === 'half1' ) {
@@ -56,16 +64,17 @@
}
render() {
+ const children = react.Children.toArray(this.props.children)
return (
- <div className={Styles.container}>
+ <div className={Styles.container} ref={this.props.forwardedRef}>
{
- this.children.map((item, index) => {
+ children.map((item, index) => {
if ( this.validity[index] === 'full' ) {
- return this.children[index]
+ return children[index]
} else if ( this.validity[index] === 'half1' ) {
return <div key={index} className={Styles.doublePanel}>
- {this.children[index]}
- {this.children[index + 1]}
+ {children[index]}
+ {children[index + 1]}
</div>
}
})
diff --git a/Components/Texttools.js b/Components/Texttools.js
index 57fddc0..76fa8cf 100644
--- a/Components/Texttools.js
+++ b/Components/Texttools.js
@@ -48,11 +48,11 @@
}
render() {
- return <pre
+ return <span
className={Styles.code}
style={{color: `#${this.props.colour}`}}
onClick={this.props.clickable ? () => this.clicked() : () => this.clicked()}
- >{this.state.isPopoverOpen ? "Copied!" : this.props.children}</pre>
+ >{this.state.isPopoverOpen ? "Copied!" : this.props.children}</span>
}
}
diff --git a/Components/Transcripts/Attachment.js b/Components/Transcripts/Attachment.js
new file mode 100644
index 0000000..ddad85f
--- /dev/null
+++ b/Components/Transcripts/Attachment.js
@@ -0,0 +1,11 @@
+import Styles from "../../styles/Components/transcripts.module.css"
+
+function attachment(props) {
+ return (
+ <div className={Styles.attachment}>
+ <a className={Styles.attachmentLink} href={props.attachment.url} target="_blank" rel="noreferrer" >{props.attachment.name}</a>
+ </div>
+ )
+}
+
+export default attachment;
\ No newline at end of file
diff --git a/Components/Transcripts/Author.js b/Components/Transcripts/Author.js
new file mode 100644
index 0000000..c096b69
--- /dev/null
+++ b/Components/Transcripts/Author.js
@@ -0,0 +1,33 @@
+import Image from "next/image";
+import Styles from "../../styles/Components/transcripts.module.css"
+import * as hdate from 'human-date'
+
+function Author(props) {
+ const today = props.message.createdTimestamp - (1000 * 60 * 60 * 24) > 0;
+ const last2days = props.message.createdTimestamp - (1000 * 60 * 60 * 24 * 2) > 0;
+ const date = new Date(props.message.createdTimestamp)
+ let timeDelta;
+ if (today) {
+ timeDelta = "Today";
+ } else if (last2days) {
+ timeDelta = "Yesterday";
+ } else {
+ timeDelta = hdate.prettyPrint(date).split(", ")[0];
+ }
+ timeDelta += ` at ${date.getHours()}:${date.getMinutes()}`
+ return (
+ <div className={Styles.verticalFlex} style={{width: "calc(100vw - 60px - 40px)"}}>
+ <div className={Styles.horizontalFlex}>
+ <p style={{color: props.message.author.topRole.color ? props.message.author.topRole.color + " !important" : "var(--theme-ui-colors-text)"}} className={Styles.authorText}>
+ {props.message.author.username}#{props.message.author.discriminator}
+ </p>
+ {props.message.author.topRole.badge ? <Image src={props.message.author.topRole.badge} width={20} height={20} alt=""/> : null}
+ {props.message.author.bot ? <div className={Styles.botBadge}>BOT</div> : ""}
+ <p style={{color: "#888888", margin: "0", fontSize: "20px"}}>{timeDelta.toString()}</p>
+ </div>
+ </div>
+ )
+
+}
+
+export default Author;
diff --git a/Components/Transcripts/Embed.js b/Components/Transcripts/Embed.js
new file mode 100644
index 0000000..d793b98
--- /dev/null
+++ b/Components/Transcripts/Embed.js
@@ -0,0 +1,97 @@
+import Styles from "../../styles/Components/transcripts.module.css"
+import Image from "next/image";
+import Showdown from "showdown";
+import Axios from "axios";
+import { useEffect, useState } from "react";
+
+const bold = /(\*\*.+\*\*)/g;
+const italic = /(\*.+\*|\_.+\_)/g;
+const emoji = /(<a?:.+:\D+>)/g;
+const user = /(<@!?\d+>)/g;
+const underline = /(\_\_.+\_\_)/g;
+const strikethrough = /(\~\~.+\~\~)/g;
+const code = /(\`.+\`)/g;
+const codeBlock = /(\`\`\`.+\`\`\`)/g;
+const spoiler = /(\`\`\`.+\`\`\`)/g;
+
+const regex = /(\*\*\*.+\*\*\*|\*\*.+\*\*|\*.+\*|\_.+\_|\_\_.+\_\_|\~\~.+\~\~|\`.+\`|\`\`\`.+\`\`\`|\`\`\`.+\`\`\`|<a?:.+:\D+>|<@!?\d+>|<#\d+>)/g;
+
+async function parse(text) {
+ const splitText = text.split(regex);
+ console.log(splitText)
+ return await splitText.map( async (item, index) => {
+ if (item.match(bold)) {
+ return <b key={index}>{item.replaceAll(/\*\*/g, '')}</b>
+ }
+ if (item.match(underline)) {
+ return <u key={index}>{item.replaceAll(/\_\_/g, '')}</u>
+ }
+ if (item.match(italic)) {
+ return <i key={index}>{item.replaceAll(/\*/g, '')}</i>
+ }
+ if (item.match(code)) {
+ return <code key={index}>{item.replaceAll(/\`/g, '')}</code>
+ }
+ if (item.match(emoji)) {
+ return <Image key={index} src={`https://cdn.discord.com/emojis/${item.replaceAll(/\D/g, '')}`} width={20} height={20} alt="" />
+ }
+ if (item.match(user)) {
+ const username = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}users/${item.replaceAll(/\D/g, '')}`)).data;
+ console.log(username)
+ return <>{username}</>
+
+ }
+ return item
+ })
+
+
+}
+
+function Embed(props) {
+
+ let description = props.embed.description;
+ if (description) {
+ description = description.split("\n");
+ }
+
+ return (
+ <div className={Styles.embed} style={{borderColor: props.color ?? "#F27878"}}>
+ {
+ props.embed.author ?
+ <div className={Styles.embedAuthor}>
+ {
+ props.embed.author.iconURL ?
+ <Image src={props.embed.author.iconURL} alt=""/> :
+ null
+ }
+ {
+ props.embed.author.url ?
+ <a href={props.embed.author.url}>
+ {props.embed.author?.name ?? ""}
+ </a> :
+ <p>{props.embed.author?.name ?? ""}</p>
+ }
+ </div> :
+ null
+ }
+ {
+ props.embed.title ?
+ <div className={Styles.embedTitle}>{props.embed.title}</div> :
+ null
+ }
+ {
+ props.embed.description ?
+ <div className={Styles.embedDescription}>
+ {
+ description.map((item) => {
+ return <>{item}<br /></>;
+ })
+ }
+ </div>
+ : null
+ }
+ </div>
+ )
+}
+
+export default Embed;
diff --git a/Components/Transcripts/Message.js b/Components/Transcripts/Message.js
new file mode 100644
index 0000000..2a74d62
--- /dev/null
+++ b/Components/Transcripts/Message.js
@@ -0,0 +1,32 @@
+import Styles from "../../styles/Components/transcripts.module.css"
+import Author from "./Author";
+import Image from "next/image";
+import Attachment from "./Attachment";
+import Embed from "./Embed";
+
+function message(props) {
+
+ return (
+ <div className={Styles.container}>
+ <div className={Styles.verticalFlex} style={{width: "60px"}}>
+ <Image className={Styles.avatar} src={props.message.author.iconURL ?? "https://picsum.photos/50"} width={50} height={50} alt=""/> {/* TODO: Add a cync icon here as a default*/}
+ </div>
+ <div className={Styles.verticalFlex} style={{width: "calc(100vw - 60px - 40px)"}}>
+ <Author message={props.message} />
+ <p className={Styles.messageContent}>{props.message.content}</p>
+ {
+ props.message.embeds ? props.message.embeds.map((embed, index) => {
+ return <Embed key={index.toString()} embed={embed} />
+ }) : null
+ }
+ {
+ props.message.attachments ? props.message.attachments.map((attachment, index) => {
+ return <Attachment key={index.toString()} attachment={attachment} alt="" />
+ }) : null
+ }
+ </div>
+ </div>
+ )
+}
+
+export default message;
\ No newline at end of file
diff --git a/Components/overlays/christmas.js b/Components/overlays/christmas.js
new file mode 100644
index 0000000..dc2283e
--- /dev/null
+++ b/Components/overlays/christmas.js
@@ -0,0 +1,17 @@
+import React from "react";
+import Snowfall from 'react-snowfall'
+
+React.useLayoutEffect = React.useEffect
+
+function Christmas({ }) {
+ return (
+ <div style={{width: "100%", height: "100%"}}>
+ <Snowfall
+ snowflakeCount={100}
+ color="#C4C4C4AA"
+ />
+ </div>
+ )
+}
+
+export default Christmas;
diff --git a/embed/index.js b/embed/index.js
new file mode 100644
index 0000000..7ef2ced
--- /dev/null
+++ b/embed/index.js
@@ -0,0 +1,106 @@
+import HCaptcha from 'react-hcaptcha';
+import Axios from 'axios';
+import Router from 'next/router';
+import React from 'react';
+import Header from '../../../Components/Header'
+import { useReward } from 'react-rewards';
+import { Card, CardRow } from '../../../Components/Card';
+
+import { AutoLayout, Panel, Title, Text, Divider } from '../../../Components/Panels';
+import { List, ListItem } from '../../../Components/Texttools';
+import { useColorMode } from 'theme-ui';
+import Styles from '../../../styles/nucleus/embed.module.css';
+
+
+function Embed(props) {
+ const [clicked, setClicked] = React.useState(false);
+ const [theme, setTheme] = useColorMode()
+
+ const { reward: reward, isAnimating: isAnimating } = useReward('confetti', 'confetti', {
+ elementSize: 10,
+ elementCount: 150,
+ startVelocity: 35,
+ lifetime: 300,
+ decay: 0.94,
+ spread: 170,
+ position: "absolute",
+ colors: ["#68D49E"]
+ });
+
+ async function submitForm(tkn) {
+ if ( clicked ) {
+ Router.push('/nucleus/verify/alreadyVerified', '/nucleus/verify/success');
+ }
+ setClicked(true);
+ reward();
+ let code = await Axios.post('/api/nucleus/verify/complete', {
+ code: props.code,
+ tkn: tkn
+ });
+ setTimeout(() => {
+ if (code.data.success === true ) return Router.push('/nucleus/verify/success','/nucleus/verify')
+ else return Router.push('/nucleus/verify/failure','/nucleus/verify')
+ }, 2500);
+ }
+
+ return <>
+ <Header
+ name="Embed Editor"
+ subtext={`Editing embed in ${props.gName}`}
+ gradient={["F27878", "D96B6B"]}
+ wave="web/waves/header/nucleus"
+ buttons={[]}
+ />
+ <AutoLayout>
+ <Panel>
+ <Title>Preview</Title>
+ <Divider name="preview"/>
+ <div className={Styles.previewEmbed}>
+ <div className={Styles.left}></div>
+ <div className={Styles.title}><input ></input></div>
+ <div className={Styles.description}><input ></input></div>
+ </div>
+ <div className={Styles.right}>
+ <div className={Styles.uploadImage} />
+ </div>
+ <>
+
+ </>
+ <div className={Styles.footer}>
+ <ImageUpload size={64} />
+ </div>
+ </Panel>
+ <Panel halfSize={false} id="invite">
+ <Title>Invite</Title>
+ <Divider />
+ <CardRow>
+ <Card
+ wave="nucleus"
+ icon="bots/nucleus/circle"
+ buttonText={"FFFFFF"} gradient={["F27878", "D96B6B"]}
+ title="Nucleus"
+ subtext="Invite Nucleus to your server"
+ buttons={[
+ {color: "424242", link: "https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands", text: "Invite"}
+ ]}
+ url="https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands"
+ />
+ </CardRow>
+ </Panel>
+ </AutoLayout>
+ </>
+}
+
+export default Embed;
+export async function getServerSideProps(ctx) {
+ return {
+ props: {
+ gID: code.data.gID,
+ gName: code.data.gName,
+ mID: code.data.mID,
+ cID: code.data.cID,
+ headers: headers,
+ code: ctx.query.code
+ }
+ }
+}
\ No newline at end of file
diff --git a/next.config.js b/next.config.js
index 33c5c8e..4d67c66 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,3 +1,5 @@
+require('dotenv').config();
+
module.exports = {
reactStrictMode: true,
webpack(config) {
@@ -34,5 +36,11 @@
]
},
];
+ },
+ images: {
+ domains: ["picsum.photos", "cdn.discordapp.com"]
+ },
+ env: {
+ NUCLEUS_CALLBACK: process.env.NUCLEUS_CALLBACK,
}
-};
\ No newline at end of file
+};
diff --git a/package.json b/package.json
index 107f685..5f9eea4 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,7 @@
"build": "ANALYZE=true NODE_ENV=production next build",
"start": "next start",
"lint": "next lint",
- "windev": "next dev",
+ "windev": "next dev -p 3030",
"winbuild": "next build"
},
"dependencies": {
@@ -15,9 +15,14 @@
"@next/bundle-analyzer": "^12.1.6",
"@svgr/webpack": "^5.5.0",
"axios": "^0.21.1",
+ "dotenv": "^16.0.3",
+ "fs": "^0.0.1-security",
+ "human-date": "^1.4.0",
"js-cookie": "^3.0.1",
"js-cookies": "^1.0.4",
+ "jsdom": "^21.1.0",
"mongodb": "^4.1.1",
+ "net": "^1.0.2",
"next": "^12.2.2",
"next-redux-wrapper": "^7.0.4",
"next-safe": "^3.2.1",
@@ -27,14 +32,18 @@
"react-fade-in": "^2.0.1",
"react-fast-marquee": "^1.3.1",
"react-hcaptcha": "^0.1.1",
- "react-in-viewport": "^1.0.0-alpha.20",
+ "react-in-viewport": "^1.0.0-alpha.29",
"react-indiana-drag-scroll": "^2.1.0",
"react-redux": "^7.2.4",
"react-rewards": "^2.0.3",
+ "react-snowfall": "^1.2.1",
"react-tiny-popover": "^7.0.1",
"redux": "^4.1.1",
"redux-thunk": "^2.3.0",
- "theme-ui": "^0.12.0"
+ "showdown": "^2.1.0",
+ "theme-ui": "^0.12.0",
+ "tls": "^0.0.1",
+ "tsparticles": "^2.5.3"
},
"devDependencies": {
"eslint": "7.32.0",
diff --git a/pages/01189998819991197253.js b/pages/01189998819991197253.js
index 88b3f13..768763f 100644
--- a/pages/01189998819991197253.js
+++ b/pages/01189998819991197253.js
@@ -28,6 +28,7 @@
props.showMessage(quotes[Math.floor(Math.random() * quotes.length)])
})}]}
fullscreen={true}
+ season={props.season}
/>
</>
)
diff --git a/pages/403.js b/pages/403.js
index ca404b1..cb2127f 100644
--- a/pages/403.js
+++ b/pages/403.js
@@ -6,7 +6,6 @@
super(props);
}
-
render() {
return (
<>
@@ -17,6 +16,7 @@
wave="web/waves/header/rsm"
buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
fullscreen={true}
+ season={this.props.season}
/>
</>
)
diff --git a/pages/404.js b/pages/404.js
index a9bdce5..9e62237 100644
--- a/pages/404.js
+++ b/pages/404.js
@@ -6,7 +6,6 @@
super(props);
}
-
render() {
return (
<>
@@ -22,6 +21,7 @@
target: true
}]}
fullscreen={true}
+ season={this.props.season}
/>
</>
)
diff --git a/pages/418.js b/pages/418.js
index 68daf86..c240c21 100644
--- a/pages/418.js
+++ b/pages/418.js
@@ -6,7 +6,6 @@
super(props);
}
-
render() {
return (
<>
@@ -17,6 +16,7 @@
wave="web/waves/header/rsm"
buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
fullscreen={true}
+ season={this.props.season}
/>
</>
)
diff --git a/pages/500.js b/pages/500.js
index f0c12ef..7ec247d 100644
--- a/pages/500.js
+++ b/pages/500.js
@@ -6,7 +6,6 @@
super(props);
}
-
render() {
return (
<>
@@ -22,6 +21,7 @@
target: true
}]}
fullscreen={true}
+ season={this.props.season}
/>
</>
)
diff --git a/pages/_app.js b/pages/_app.js
index a94db64..f09cb57 100644
--- a/pages/_app.js
+++ b/pages/_app.js
@@ -1,8 +1,10 @@
import '../styles/globals.css';
import NavBar from '../Components/NavBar';
import { ThemeProvider } from 'theme-ui';
-import React from 'react';
+import React, {useEffect} from 'react';
+import { useRouter } from 'next/router';
import Styles from '../styles/globals.module.css';
+import Christmas from '../Components/overlays/christmas';
const theme = {
config: {
@@ -13,6 +15,7 @@
text: '#424242',
background: '#ffffff',
primary: '#6576CC',
+ highlight: '#78ECF2',
cardText: '#ffffff',
cardBackground: 'rgba(255, 255, 255, 0.65)',
cardBorder: '#C4C4C4',
@@ -31,6 +34,7 @@
text: '#ffffff',
background: '#000000',
primary: '#6576CC',
+ highlight: '#78ECF2',
cardText: '#424242',
cardBackground: 'rgba(0, 0, 0, 0.65)',
cardBorder: '#424242',
@@ -53,6 +57,22 @@
const [subBar, setSubBar] = React.useState(false);
const [currentElement, setElement] = React.useState(<></>);
+ const router = useRouter();
+ const [season, setSeason] = React.useState({ season: "normal", filePath: "normal" });
+
+ useEffect(() => async () => {
+ const params = router.query["theme"];
+ if (params) {
+ setSeason({season: params, filePath: "seasonal/" + params});
+ return;
+ }
+ let newSeason = await (await fetch("/api/season")).json();
+ // newSeason = {season: "trans", filePath: "seasonal/trans"}
+ setSeason({...newSeason });
+ // const params = "aprilFools"
+ // setSeason({season: params, filePath: "seasonal/" + params});
+ }, [season.season, router])
+
const showSubBar = (element, timeout, positioning="left") => {
setSubBar(true);
if (positioning === "center") {
@@ -61,7 +81,7 @@
setElement(element);
if (timeout) {
setTimeout(() => {
- setSubBar(false);
+ setSubBar(false);
setTimeout(() => {
setElement(<></>);
}, 0.31 * 1000)
@@ -77,6 +97,14 @@
showSubBar(<p className={Styles.message}>{text}</p>, 5, positioning);
}
+ let Overlay = <></>;
+ switch (season.season) {
+ case "christmas": {
+ Overlay = <Christmas />;
+ break;
+ }
+ }
+
return <>
<ThemeProvider theme={theme}>
<NavBar
@@ -86,16 +114,22 @@
setElement={setElement}
showMessage={showMessage}
showSubBar={showSubBar}
+ season={season}
/>
<Component
{...pageProps}
showSubBar={showSubBar}
hideSubBar={hideSubBar}
showMessage={showMessage}
+ season={season}
/>
+ <div className={Styles.container} style={{
+ pointerEvents: "none",
+ height: "1000vh"
+ }}>{Overlay}</div>
<div className={Styles.container} />
</ThemeProvider>
</>
}
-export default App
+export default App;
diff --git a/pages/api/nucleus/verify/complete.js b/pages/api/nucleus/verify/complete.js
index cdffc2e..d8b6a0f 100644
--- a/pages/api/nucleus/verify/complete.js
+++ b/pages/api/nucleus/verify/complete.js
@@ -11,7 +11,7 @@
return res.status(200).send({success: false})
}
try {
- await Axios.post(`${process.env.VERIFY_CALLBACK}/verify/${req.body.code}`, {
+ await Axios.post(`${process.env.NUCLEUS_CALLBACK}verify/${req.body.code}`, {
secret: process.env.VERIFY_SECRET
});
} catch (e) {
@@ -20,4 +20,4 @@
return res.status(200).send({success: true});
}
-export default Complete;
\ No newline at end of file
+export default Complete;
diff --git a/pages/api/rsmv/complete.js b/pages/api/rsmv/complete.js
deleted file mode 100644
index 9b2ea9e..0000000
--- a/pages/api/rsmv/complete.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import Axios from 'axios';
-
-const Complete = async (req, res) => {
- let code = await Axios.post('http://127.0.0.1:3000/api/rsmv/validate', {code:req.body.code});
- if (code.status !== 200) {
- return res.send(404);
- }
- if (code.data.user !== req.body.uid) return res.send(401)
- if (code.data.guild !== req.body.gid) return res.send(401)
- if (code.data.role !== req.body.rid) return res.send(401)
-
- let secret = process.env.VERIFY_SECRET;
- let resp = await Axios.get(
- `http://localhost:10000/verify/${req.body.gid}/${req.body.rid}/${req.body.uid}/${secret}/${req.body.code}`
- )
- return res.send(resp.status);
-}
-
-export default Complete;
\ No newline at end of file
diff --git a/pages/api/rsmv/validate.js b/pages/api/rsmv/validate.js
deleted file mode 100644
index e0c4de1..0000000
--- a/pages/api/rsmv/validate.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import Axios from 'axios';
-
-const Validate = async (req, res) => {
- try {
- var out = await Axios.get(`http://localhost:10000/verify/${req.body.code}`)
- out = out.data
- let props = {
- user: out.user,
- role: out.role,
- role_name: out.role_name,
- guild: out.guild,
- guild_name: out.guild_name,
- guild_icon_url: out.guild_icon_url,
- guild_size: out.guild_size
- }
- return res.status(200).send(props)
- } catch (err) {
- return res.status(400).end()
- }
-}
-
-export default Validate;
\ No newline at end of file
diff --git a/pages/api/rsmv/verifyTkn.js b/pages/api/rsmv/verifyTkn.js
deleted file mode 100644
index 50eb77e..0000000
--- a/pages/api/rsmv/verifyTkn.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import Axios from 'axios';
-import qs from 'querystring';
-
-const verifyTkn = async (req, res) => {
- const chk = await Axios.post('https://hcaptcha.com/siteverify', qs.stringify({
- response: req.body.tkn,
- secret: '0x19C699BFfce07b2a026121DE6702706BB2d51D6c',
- sitekey: '85074411-fa13-4d9b-b901-53095c6d1fc6'
- }))
-
- return res.send({ success: chk.data.success });
-}
-
-export default verifyTkn;
\ No newline at end of file
diff --git a/pages/api/season.js b/pages/api/season.js
new file mode 100644
index 0000000..fe3e262
--- /dev/null
+++ b/pages/api/season.js
@@ -0,0 +1,55 @@
+function daysIntoSeason(date) {
+ return Math.floor((new Date().getTime() - date.getTime()) / (1000 * 60 * 60 * 24))
+}
+
+function daysSinceDate(date) {
+ // If the date is after today, make it last year
+ if (date > new Date()) {
+ date.setFullYear(date.getFullYear() - 1);
+ }
+ return Math.floor((new Date().getTime() - date.getTime()) / (1000 * 60 * 60 * 24));
+}
+
+function getSeason() {
+ let year = new Date().getFullYear();
+
+ const dates = {
+ pride: [new Date(`${year}-6-1`), new Date(`${year}-6-31`)],
+ halloween: [new Date(`${year}-10-25`), new Date(`${year}-11-1`)],
+ trans: [new Date(`${year}-11-13`), new Date(`${year}-11-19`)],
+ christmas: [new Date(`${year}-12-1`), new Date(`${year}-12-26`)],
+ aprilFools: [new Date(`${year}-04-01`), new Date(`${year}-04-01`)]
+ }
+ const filePaths = {
+ normal: "normal",
+ halloween: "seasonal/halloween",
+ christmas: "seasonal/christmas",
+ pride: "seasonal/pride",
+ trans: "seasonal/trans",
+ aprilFools: "seasonal/aprilFools"
+ }
+
+ let current = new Date();
+ let currentSeason = Object.keys(dates).find((str) => current >= dates[str][0] && current <= dates[str][1]) || "normal";
+ let currentDaysIntoSeason;
+ if (currentSeason !== "normal") {
+ currentDaysIntoSeason = daysIntoSeason(dates[currentSeason][0])
+ } else {
+ // Calculate how many days it has been since each season ended
+ let days = Object.keys(dates).map((str) => daysSinceDate(dates[str][1]))
+ currentDaysIntoSeason = Math.min(...days) - 1;
+ }
+
+ return {
+ season: currentSeason,
+ filePath: filePaths[currentSeason],
+ daysIntoSeason: currentDaysIntoSeason
+ }
+}
+
+const Season = async (req, res) => {
+ return res.status(200).send(getSeason());
+}
+
+export default Season;
+export { getSeason };
diff --git a/pages/castaway.js b/pages/castaway.js
index 9ad8ca8..370156d 100644
--- a/pages/castaway.js
+++ b/pages/castaway.js
@@ -1,7 +1,7 @@
import Header from '../Components/Header'
import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../Components/Panels';
-export default function Home() {
+export default function Home(props) {
return (
<>
<Header
@@ -12,6 +12,7 @@
buttons={[
{color: "78ECF2", buttonText: "000000", link: "#timeline", text: "Timeline"}
]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={false} id="timeline">
diff --git a/pages/clicksforms.js b/pages/clicksforms.js
index 155d605..ebf9a09 100644
--- a/pages/clicksforms.js
+++ b/pages/clicksforms.js
@@ -33,6 +33,7 @@
{id: "invite", color: "775EBF", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
]}
callback={() => this.highlightSection()}
+ season={this.props.season}
/>
<AutoLayout>
<Panel halfSize={true} id="commands">
diff --git a/pages/clicksforms/error/deleted.js b/pages/clicksforms/error/deleted.js
index 0d7a49b..8d78a9f 100644
--- a/pages/clicksforms/error/deleted.js
+++ b/pages/clicksforms/error/deleted.js
@@ -15,6 +15,7 @@
wave="web/waves/header/rsm"
buttons={[]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/clicksforms/error/nocode.js b/pages/clicksforms/error/nocode.js
index dfb7b6e..f8955ec 100644
--- a/pages/clicksforms/error/nocode.js
+++ b/pages/clicksforms/error/nocode.js
@@ -15,6 +15,7 @@
wave="web/waves/header/rsm"
buttons={[]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/clicksforms/error/unknown.js b/pages/clicksforms/error/unknown.js
index e3ab125..4cd1e9c 100644
--- a/pages/clicksforms/error/unknown.js
+++ b/pages/clicksforms/error/unknown.js
@@ -15,6 +15,7 @@
wave="web/waves/header/rsm"
buttons={[]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/clicksforms/form.js b/pages/clicksforms/form.js
index aa1b032..38cfcb5 100644
--- a/pages/clicksforms/form.js
+++ b/pages/clicksforms/form.js
@@ -6,7 +6,7 @@
export default class Form extends Component {
constructor(props) {
super(props);
-}
+ }
render() {
return (
@@ -17,6 +17,7 @@
gradient={["71AFE5", "6576CC"]}
wave="web/waves/header/clicksforms"
buttons={[]}
+ season={this.props.season}
/>
<div className={Styles.form}>
<div className={Styles.header}>
diff --git a/pages/cpm.js b/pages/cpm.js
index 97bffee..a016676 100644
--- a/pages/cpm.js
+++ b/pages/cpm.js
@@ -4,7 +4,7 @@
import Header from '../Components/Header';
import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../Components/Panels';
-export default function Home() {
+export default function Home(props) {
return (
<>
<Header
@@ -13,6 +13,10 @@
gradient={["6576CC", "4B5899"]}
wave="web/waves/header/cmp"
buttons={[]}
+ index={true}
+ fullscreen={true}
+ showSubBar={props.showSubBar}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={false}>
@@ -103,7 +107,7 @@
<Text>Your parents were right, this place is terrifying</Text>
<CardRow>
<Card
- wave="discord" title="Discord" subtext="No, dat cord sorry for the confusion"
+ wave="discord" title="This cord" subtext="No, dat cord sorry for the confusion"
icon="web/icons/discord"
buttons={[
{color: "404EED", link: "https://discord.gg/bPaNnxe", text: "Join"}
diff --git a/pages/gps.js b/pages/gps.js
index 8b2e194..0e64c39 100644
--- a/pages/gps.js
+++ b/pages/gps.js
@@ -3,7 +3,7 @@
import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../Components/Panels';
import { List, ListItem, Code } from '../Components/Texttools';
-export default function Home() {
+export default function Home(props) {
return (
<>
<Header
@@ -16,6 +16,7 @@
{color: "71AFE5", buttonText: "FFFFFF", link: "#commands", text: "Commands"},
{color: "6576CC", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={false} id="features">
diff --git a/pages/hooky.js b/pages/hooky.js
index b204daf..921dde1 100644
--- a/pages/hooky.js
+++ b/pages/hooky.js
@@ -2,7 +2,7 @@
import Header from '../Components/Header'
import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../Components/Panels';
-export default function Home() {
+export default function Home(props) {
return (
<>
<Header
@@ -13,6 +13,7 @@
buttons={[
{color: "EDC575", buttonText: "000000", link: "#invite", text: "Invite"}
]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={false} id="invite">
diff --git a/pages/index.js b/pages/index.js
index dbd1779..cd06ddb 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -2,14 +2,31 @@
import Header from '../Components/Header';
import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../Components/Panels';
-const duplicate = (arr, numberOfRepetitions) => arr.flatMap(i => Array.from({ length: numberOfRepetitions }).fill(i));
export default function Home(props) {
+ let subtext = ""
+ switch (props.season.season) {
+ case "christmas": {
+ subtext = "Merry Christmas!"
+ break;
+ }
+ case "halloween": {
+ subtext = "Happy Halloween!"
+ break;
+ }
+ default: {
+ subtext = "Creating projects that click"
+ }
+ }
+ const aprilFoolsStyle = props.season.season === "aprilFools" ? {
+ transform: props.season.season === "aprilFools" ? "rotate(1deg)" : "none"
+ } : {};
+
return (
<>
<Header
name="Clicks"
- subtext="We develop "
+ subtext={subtext}
customImage="https://assets.clicks.codes/web/logos/clicks.svg"
embedImage="https://assets.clicks.codes/web/logos/clicks.png"
gradient={["6576CC", "4B5899"]}
@@ -18,14 +35,10 @@
index={true}
fullscreen={true}
showSubBar={props.showSubBar}
- effects={{ type: 50, changingSubtext: {
- common: [
- "websites", "Discord bots", "utilities", "APIs"
- ], rare: ["overly complicated header animations"]
- }}}
+ season={props.season}
/>
<AutoLayout>
- <Panel halfSize={false}>
+ <Panel halfSize={false} forceStyle={aprilFoolsStyle}>
<Title>Projects</Title>
<Divider />
<Text>{"Here's things we've released and are in the making"}</Text>
@@ -42,14 +55,14 @@
showMessage={props.showMessage}
/>
<Card
- wave="rsm" title="RSM" subtext="Moderation Redefined"
- icon="bots/rsm/circle"
+ wave="nucleus" title="Nucleus" subtext="The core of your server"
+ icon="bots/nucleus/circle"
buttons={[
- {color: "424242", link: "https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands",text:"Invite"},
- {color: "424242", link: "/rsm", text:"About"}
+ {color: "424242", link: "https://discordapp.com/api/oauth2/authorize?client_id=715989276382462053&permissions=396173372662&scope=bot%20applications.commands",text:"Invite"},
+ {color: "424242", link: "/nucleus", text:"About"}
]}
buttonText={"FFFFFF"} gradient={["F27878", "D96B6B"]}
- url="/rsm"
+ url="/nucleus"
showMessage={props.showMessage}
/>
<Card
@@ -92,7 +105,7 @@
/>
</CardRow>
</Panel>
- <Panel halfSize={true}>
+ <Panel halfSize={true} forceStyle={aprilFoolsStyle}>
<Title>Code Bases</Title>
<Divider />
<Text>We release open source projects in a few different places depending on the language and purpose</Text>
@@ -117,7 +130,7 @@
/>
</CardRow>
</Panel>
- <Panel halfSize={true}>
+ <Panel halfSize={true} forceStyle={aprilFoolsStyle}>
<Title>Socials</Title>
<Divider />
<Text>{"We've got Discord, feel free to ask us anything"}</Text>
diff --git a/pages/nucleus.js b/pages/nucleus.js
index 5155597..c287d0f 100644
--- a/pages/nucleus.js
+++ b/pages/nucleus.js
@@ -4,7 +4,7 @@
import { List, ListItem, Code } from '../Components/Texttools';
import { useColorMode } from 'theme-ui';
-export default function Home() {
+export default function Home(props) {
const [theme, setTheme] = useColorMode()
return (
@@ -22,6 +22,7 @@
{color: "424242", buttonText: "FFFFFF", link: "#privacy", text: "Privacy"},
{color: "F27878", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={true} id="commands">
diff --git "a/pages/nucleus/transcript/\133code\135/human.js" "b/pages/nucleus/transcript/\133code\135/human.js"
new file mode 100644
index 0000000..6af671e
--- /dev/null
+++ "b/pages/nucleus/transcript/\133code\135/human.js"
@@ -0,0 +1,31 @@
+import Axios from 'axios';
+
+const t = () => { return <></>}
+export default t
+export async function getServerSideProps(ctx) {
+ if(!ctx.params.code) {
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/about',
+ permanent: true
+ }
+ }
+ }
+ let code;
+ try {
+ code = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}transcript/${ctx.params.code}?key=${ctx.query.key}&iv=${ctx.query.iv}`))
+ } catch (e) {
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/invalid',
+ permanent: true
+ }
+ }
+ }
+ return {
+ redirect: {
+ destination: `${process.env.NUCLEUS_CALLBACK}transcript/${ctx.params.code}?key=${ctx.query.key}&iv=${ctx.query.iv}/human`,
+ permanent: true
+ }
+ }
+}
diff --git "a/pages/nucleus/transcript/\133code\135/index.js" "b/pages/nucleus/transcript/\133code\135/index.js"
new file mode 100644
index 0000000..55e9d51
--- /dev/null
+++ "b/pages/nucleus/transcript/\133code\135/index.js"
@@ -0,0 +1,166 @@
+import Axios from 'axios';
+import React from 'react';
+import Message from '../../../../Components/Transcripts/Message';
+import _ from 'lodash';
+
+const emojiRegex = /(<a?:.+:\D+>)/g;
+const userRegex = /(<@!?\d+>)/g;
+const channelRegex = /(<#\d+>)/g;
+
+async function parseText(text) {
+ const dict = {
+ "emojis": {},
+ "users": {},
+ "channels": {}
+ }
+ const emojis = text.match(emojiRegex);
+ if (emojis) {
+ for (let i = 0; i < emojis.length; i++) {
+ const emoji = emojis[i];
+ const emojiID = emoji.replaceAll(/\D/g, '');
+ const emojiURL = `https://cdn.discord.com/emojis/${emojiID}`;
+ dict["emojis"][emoji] = emojiURL;
+ }
+ }
+ const users = text.match(userRegex);
+ if (users) {
+ for (let i = 0; i < users.length; i++) {
+ const user = users[i];
+ const userID = user.replaceAll(/\D/g, '');
+ const username = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}users/${userID}`)).data;
+ dict["users"][user.replaceAll(/<@|>/g, '')] = username;
+ }
+ }
+ const channels = text.match(channelRegex);
+ if (channels) {
+ for (let i = 0; i < channels.length; i++) {
+ const channel = channels[i];
+ const channelID = channel.replaceAll(/\D/g, '');
+ const channelName = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}channels/${channelID}`)).data;
+ dict["channels"][channel] = channelName;
+ }
+ }
+ // console.log("parseText", dict)
+ return dict
+}
+
+async function parse(json) {
+ let dict = {
+ "emojis": {},
+ "users": {},
+ "channels": {}
+ }
+
+ await _.forEach(json, async (message, index) => {
+ let thisMessage = {}
+ if(message.content) {
+ let parsed = await parseText(message.content)
+ // console.log(parsed)
+ _.assign(thisMessage, parsed)
+ }
+ if(message.embeds) {
+ _.forEach(message.embeds, async (embed, _index) => {
+ // console.log(embed)
+ if(embed.description) {
+ let parsed = await parseText(embed.description)
+ _.assign(thisMessage, parsed)
+ }
+ if(embed.title) {
+ let parsed = await parseText(embed.title)
+ _.assign(thisMessage, parsed)
+ }
+ if(embed.fields) {
+ _.forEach(embed.fields, async (field, _index) => {
+ if(field.name) {
+ let parsed = await parseText(field.name)
+ _.assign(thisMessage, parsed)
+ }
+ if(field.value) {
+ let parsed = await parseText(field.value)
+ _.assign(thisMessage, parsed)
+ }
+ })
+ }
+ })
+ }
+ // console.log(thisMessage)
+ _.assign(dict, thisMessage)
+ // console.log(index, dict)
+ })
+
+ // console.log("dict", dict)
+ return dict;
+}
+
+function Index(props) {
+ return <div style={{overflowY: "scroll", overflowX: "hidden"}}>
+ <div style={{
+ width: "100vw",
+ height: "40px",
+ backgroundColor: "#F27878",
+ display: "flex",
+ justifyContent: "left",
+ alignItems: "center",
+ paddingLeft: "25px",
+ color: "white",
+ fontSize: "1.5em",
+ }}>Transcript for: {props.data.for.username}#{props.data.for.discriminator} | In #{<a style={{color: "var(--theme-ui-colors-highlight)", textDecoration: "underline"}} href={`https://discord.com/channels/${props.data.guild}/${props.data.channel}`}>{props.channelName}</a>} | Type: {props.data.type}</div>
+ <div style={{
+ width: "100vw",
+ backgroundColor: "var(--theme-ui-colors-background)", //Can we change this to be not black please. it's too contrast heavy
+ margintop: "-50px",
+ padding: "25px",
+ paddingTop: "10px",
+ transition: "all 0.3s ease-in-out"
+ }}>
+ {
+ props.data.messages.map((message, index) => {
+ return <Message key={index.toString()} message={message} />
+ })
+ }
+ </div>
+ </div>
+}
+
+export default Index;
+export async function getServerSideProps(ctx) {
+ if(!ctx.params.code) {
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/about',
+ permanent: true
+ }
+ }
+ }
+ /*return {
+ redirect: {
+ destination: `/nucleus/transcript/${ctx.params.code}/human?key=${ctx.query.key}&iv=${ctx.query.iv}`,
+ permanent: true
+ }
+ }*/
+ let code;
+ console.log("getting props")
+ try {
+ code = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}transcript/${ctx.params.code}?key=${ctx.query.key}&iv=${ctx.query.iv}`));
+ } catch (e) {
+ console.log(e)
+ console.log(`${process.env.NUCLEUS_CALLBACK}transcript/${ctx.params.code}?key=${ctx.query.key}&iv=${ctx.query.iv}`)
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/invalid',
+ permanent: true
+ }
+ }
+ }
+ const linkedData = await parse(code.data.messages)
+
+ const channelName = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}channels/${code.data.channel}`)).data;
+
+ return {
+ props: {
+ data: code.data,
+ linkedData,
+ channelName
+ }
+ }
+}
diff --git "a/pages/nucleus/transcript/\133code\135/raw.js" "b/pages/nucleus/transcript/\133code\135/raw.js"
new file mode 100644
index 0000000..f06c64f
--- /dev/null
+++ "b/pages/nucleus/transcript/\133code\135/raw.js"
@@ -0,0 +1,32 @@
+import Axios from 'axios';
+
+const t = () => { return <></>}
+export default t
+export async function getServerSideProps(ctx) {
+ console.log(ctx.req.url)
+ if(!ctx.params.code) {
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/about',
+ permanent: true
+ }
+ }
+ }
+ let code;
+ try {
+ code = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}transcript/${ctx.params.code}`))
+ } catch (e) {
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/invalid',
+ permanent: true
+ }
+ }
+ }
+ return {
+ redirect: {
+ destination: `${process.env.NUCLEUS_CALLBACK}transcript/${ctx.params.code}`,
+ permanent: true
+ }
+ }
+}
diff --git a/pages/nucleus/transcript/about.js b/pages/nucleus/transcript/about.js
new file mode 100644
index 0000000..088e2d3
--- /dev/null
+++ b/pages/nucleus/transcript/about.js
@@ -0,0 +1,71 @@
+import React, { Component } from 'react'
+import Header from '../../../Components/Header'
+import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../../../Components/Panels'
+import { Code } from '../../../Components/Texttools'
+import { Card, CardRow } from '../../../Components/Card'
+import HCaptcha from 'react-hcaptcha';
+import { useReward } from 'react-rewards';
+
+function About(props) {
+ const { reward, isAnimating } = useReward('confetti', 'confetti', {
+ elementSize: 12,
+ spread: 85,
+ position: "absolute",
+ colors: ["#F27878", "#E5AB71", "#E5DC71", "#A1CC65", "#68D49E", "#71AFE5", "#6576CC", "#8D58B2", "#BF5E9F"]
+ });
+
+ return (
+ <>
+ <Header
+ name="Nucleus Transcripts"
+ subtext="Review purged messages in a channel"
+ customImage={"https://assets.clicks.codes/web/logos/nucleus.svg"}
+ embedImage={"https://assets.clicks.codes/bots/nucleus/normal.png"}
+ gradient={["F27878", "D96B6B"]}
+ wave="web/waves/header/nucleus"
+ buttons={[
+ {color: "424242", buttonText: "FFFFFF", link: "#about", text: "About"},
+ {color: "424242", buttonText: "FFFFFF", link: "#privacy", text: "Privacy"},
+ {color: "F27878", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
+ ]}
+ season={props.season}
+ />
+ <AutoLayout>
+ <Panel halfSize={false} id="about">
+ <Title>About Transcripts</Title>
+ <Divider />
+ <Text>Transcripts are generated whenever a purge command is run, or a ticket is deleted (and transcripts are enabled).</Text>
+ <Text>These store the messages, authors, and the content for future reference.</Text>
+ <Text>When the transcript is created, you will get a link to our website to view it.</Text>
+ <Text>Images and files are not stored, and are not available in transcripts.</Text>
+ </Panel>
+ <Panel halfSize={true} id="privacy">
+ <Title>Privacy</Title>
+ <Divider />
+ <Text>Transcripts can be viewed by anyone online if they have the URL. These are random to avoid this happening by chance.</Text>
+ <Text>The code is long enough that it is hard to guess any specific code. The URL is not linked to your server in any way.</Text>
+ <Text>All transcripts for your server can be deleted from <Code colour="F27878">/privacy</Code>.</Text>
+ </Panel>
+ <Panel halfSize={true} id="invite">
+ <Title>Invite</Title>
+ <Divider />
+ <CardRow>
+ <Card
+ wave="nucleus"
+ icon="bots/nucleus/circle"
+ buttonText={"FFFFFF"} gradient={["F27878", "D96B6B"]}
+ title="Nucleus"
+ subtext="Invite Nucleus to your server"
+ buttons={[
+ {color: "424242", link: "https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands", text: "Invite"}
+ ]}
+ url="https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands"
+ />
+ </CardRow>
+ </Panel>
+ </AutoLayout>
+ </>
+ )
+}
+
+export default About;
\ No newline at end of file
diff --git a/pages/nucleus/transcript/invalid.js b/pages/nucleus/transcript/invalid.js
new file mode 100644
index 0000000..8491aeb
--- /dev/null
+++ b/pages/nucleus/transcript/invalid.js
@@ -0,0 +1,26 @@
+import { Component } from 'react'
+import Link from 'next/link'
+import Header from '../../../Components/Header'
+
+class Failed extends Component {
+ constructor(props) {
+ super(props)
+ }
+
+ render() {
+ return (
+ <Header
+ name="Transcript does not exist"
+ subtext={<p>No transcripts matched that code. If you believe this is a mistake, please submit a report in <Link href="https://discord.gg/bPaNnxe" target="_blank" rel="noopener noreferrer">our server</Link></p>}
+ gradient={["F27878", "D96B6B"]}
+ wave="web/waves/header/nucleus"
+ buttons={[]}
+ fullscreen={true}
+ season={this.props.season}
+ />
+ )
+ }
+
+}
+
+export default Failed;
\ No newline at end of file
diff --git a/pages/nucleus/transcript/testing.js b/pages/nucleus/transcript/testing.js
new file mode 100644
index 0000000..87e9a2c
--- /dev/null
+++ b/pages/nucleus/transcript/testing.js
@@ -0,0 +1,58 @@
+import React from 'react';
+
+function Testing(props) {
+ return <>
+ <div style={{
+ width: "100vw",
+ height: "40px",
+ backgroundColor: "#F27878",
+ display: "flex",
+ justifyContent: "left",
+ alignItems: "center",
+ paddingLeft: "25px",
+ color: "white",
+ fontSize: "1.5em",
+ }}>Nucleus Transcripts</div>
+ <div style={{
+ height: "100vw",
+ width: "100vw",
+ backgroundColor: "var(--theme-ui-colors-background)",
+ margintop: "-50px",
+ padding: "25px",
+ paddingTop: "10px",
+ transition: "all 0.3s ease-in-out"
+ }}>
+ {
+ props.humanReadable.split("\n").map((s, i) => {
+ return <p key={i}>{s}</p>
+ })
+ }
+ </div>
+ </>
+}
+
+export default Testing;
+export async function getServerSideProps(ctx) {
+ if(!ctx.query.code) {
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/about',
+ permanent: true
+ }
+ }
+ }
+ if (ctx.query.code === "test") {
+ return {
+ props: {
+ humanReadable: "This is a test string! It should render correctly on the page\nAnd a newline!"
+ }
+ }
+ } else {
+ return {
+ redirect: {
+ destination: '/nucleus/transcript/invalid',
+ permanent: true
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/pages/nucleus/verify/about.js b/pages/nucleus/verify/about.js
index 08e7f00..b827bac 100644
--- a/pages/nucleus/verify/about.js
+++ b/pages/nucleus/verify/about.js
@@ -28,6 +28,7 @@
{color: "424242", buttonText: "FFFFFF", link: "#privacy", text: "Privacy"},
{color: "F27878", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={false} id="about">
diff --git a/pages/nucleus/verify/alreadyVerified.js b/pages/nucleus/verify/alreadyVerified.js
index c31290a..4a49571 100644
--- a/pages/nucleus/verify/alreadyVerified.js
+++ b/pages/nucleus/verify/alreadyVerified.js
@@ -15,6 +15,7 @@
wave="web/waves/header/nucleus"
buttons={[]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/nucleus/verify/failure.js b/pages/nucleus/verify/failure.js
index 61b58d0..12fdc26 100644
--- a/pages/nucleus/verify/failure.js
+++ b/pages/nucleus/verify/failure.js
@@ -1,4 +1,5 @@
import { Component } from 'react'
+import Link from 'next/link'
import Header from '../../../Components/Header'
class Failed extends Component {
@@ -10,11 +11,14 @@
return (
<Header
name="Verification failed"
- subtext={<p>Please try again, and if the error persists please contact us at <a href="mailto:verification@clicks.codes" target="_blank" rel="noopener noreferrer">verification@clicks.codes</a></p>}
+ subtext={
+ <p>Please try again, and if the error persists please contact us at <Link href="mailto:verification@clicks.codes" target="_blank" rel="noopener noreferrer">verification@clicks.codes</Link></p>
+ }
gradient={["F27878", "D96B6B"]}
wave="web/waves/header/nucleus"
buttons={[]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/nucleus/verify/index.js b/pages/nucleus/verify/index.js
index 38a3aea..24a0a90 100644
--- a/pages/nucleus/verify/index.js
+++ b/pages/nucleus/verify/index.js
@@ -49,6 +49,7 @@
gradient={["F27878", "D96B6B"]}
wave="web/waves/header/nucleus"
buttons={[]}
+ season={props.season}
/>
<AutoLayout>
<Panel>
@@ -86,7 +87,7 @@
}
let code;
try {
- code = await Axios.get(`http://localhost:10000/verify/${ctx.query.code}`);
+ code = await Axios.get(`${process.env.NUCLEUS_CALLBACK}verify/${ctx.query.code}`);
} catch (e) {
return {
redirect: {
@@ -108,4 +109,4 @@
code: ctx.query.code
}
}
-}
\ No newline at end of file
+}
diff --git a/pages/nucleus/verify/success.js b/pages/nucleus/verify/success.js
index e5def5d..cc6e010 100644
--- a/pages/nucleus/verify/success.js
+++ b/pages/nucleus/verify/success.js
@@ -22,6 +22,7 @@
}
]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/nucleus/verify/testing.js b/pages/nucleus/verify/testing.js
index 42ac53d..e441110 100644
--- a/pages/nucleus/verify/testing.js
+++ b/pages/nucleus/verify/testing.js
@@ -50,6 +50,7 @@
gradient={["F27878", "D96B6B"]}
wave="web/waves/header/nucleus"
buttons={[]}
+ season={props.season}
/>
<AutoLayout>
<Panel>
diff --git a/pages/privacy.js b/pages/privacy.js
index 1652796..4f5f365 100644
--- a/pages/privacy.js
+++ b/pages/privacy.js
@@ -3,7 +3,7 @@
import { List, ListItem, Code } from '../Components/Texttools';
-export default function Home() {
+export default function Home(props) {
return (
<>
<Header
@@ -12,6 +12,7 @@
gradient={["71AFE5", "6576CC"]}
wave="web/waves/header/clicksforms"
buttons={[]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={true}>
diff --git a/pages/rsm.js b/pages/rsm.js
index b1e9233..2d0771f 100644
--- a/pages/rsm.js
+++ b/pages/rsm.js
@@ -14,7 +14,7 @@
// import FeatureStatistics from '../public/Features/RSM/Statistics.svg';
// import FeatureTags from '../public/Features/RSM/Tags.svg';
-export default function Home() {
+export default function Home(props) {
return (
<>
<Header
@@ -28,6 +28,7 @@
{color: "424242", buttonText: "FFFFFF", link: "#privacy", text: "Privacy"},
{color: "F27878", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={true} id="commands">
diff --git a/pages/rsmv/failure.js b/pages/rsmv/failure.js
index f3b0feb..5508d8e 100644
--- a/pages/rsmv/failure.js
+++ b/pages/rsmv/failure.js
@@ -15,6 +15,7 @@
wave="web/waves/header/rsm"
buttons={[]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/rsmv/index.js b/pages/rsmv/index.js
index 231bcc5..5740f6d 100644
--- a/pages/rsmv/index.js
+++ b/pages/rsmv/index.js
@@ -70,6 +70,7 @@
gradient={["F27878", "D96B6B"]}
wave="web/waves/header/rsm"
buttons={[]}
+ season={this.props.season}
/>
<AutoLayout>
<Panel>
diff --git a/pages/rsmv/rsmvtesting.js b/pages/rsmv/rsmvtesting.js
index e37f1f0..6410f25 100644
--- a/pages/rsmv/rsmvtesting.js
+++ b/pages/rsmv/rsmvtesting.js
@@ -66,6 +66,7 @@
gradient={["F27878", "D96B6B"]}
wave="web/waves/header/rsm"
buttons={[]}
+ season={this.props.season}
/>
<AutoLayout>
<Panel>
diff --git a/pages/rsmv/success.js b/pages/rsmv/success.js
index 3cf1e4f..8d0b1ea 100644
--- a/pages/rsmv/success.js
+++ b/pages/rsmv/success.js
@@ -15,6 +15,7 @@
wave="web/waves/header/rsm"
buttons={[]}
fullscreen={true}
+ season={this.props.season}
/>
)
}
diff --git a/pages/support.js b/pages/support.js
index 1c35a68..831ce5a 100644
--- a/pages/support.js
+++ b/pages/support.js
@@ -2,7 +2,7 @@
import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../Components/Panels';
import { List, ListItem, Code } from '../Components/Texttools';
-export default function Home() {
+export default function Home(props) {
return (
<>
<Header
@@ -11,6 +11,7 @@
gradient={["71AFE5", "6576CC"]}
wave="web/waves/header/clicksforms"
buttons={[]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={true}>
diff --git a/pages/supporters.js b/pages/supporters.js
index ac5c1b7..bd5305e 100644
--- a/pages/supporters.js
+++ b/pages/supporters.js
@@ -49,7 +49,7 @@
-export default function Home() {
+export default function Home(props) {
const groups = [
{ // Devs and testers
"TheCodedProf": "Programmer",
@@ -87,6 +87,7 @@
gradient={["71AFE5", "6576CC"]}
wave="web/waves/header/clicksforms"
buttons={[]}
+ season={props.season}
/>
<AutoLayout>
<Panel halfSize={false}>
diff --git a/styles/Components/header.module.css b/styles/Components/header.module.css
index 1c2e3f3..17d1ee4 100644
--- a/styles/Components/header.module.css
+++ b/styles/Components/header.module.css
@@ -165,22 +165,3 @@
margin-bottom: 0px;
margin-top: 25px;
}
-
-.typedEffect {
- animation: blink-caret 1s ease-in-out infinite;
- border-right: 0.08em solid var(--theme-ui-colors-text);
- margin-left: 5px;
- background-color: var(--theme-ui-colors-text);
- height: 1.5em;
- width: 2px;
-}
-
-@keyframes blink-caret {
- from,
- to {
- opacity: 0%;
- }
- 50% {
- opacity: 100%;
- }
-}
\ No newline at end of file
diff --git a/styles/Components/navbar.module.css b/styles/Components/navbar.module.css
index 2329643..394cba2 100644
--- a/styles/Components/navbar.module.css
+++ b/styles/Components/navbar.module.css
@@ -4,6 +4,7 @@
margin: 0;
padding: 0;
user-select: none;
+ border-radius: 100vw;
}
.themeChangeIcon {
diff --git a/styles/Components/transcripts.module.css b/styles/Components/transcripts.module.css
new file mode 100644
index 0000000..b527263
--- /dev/null
+++ b/styles/Components/transcripts.module.css
@@ -0,0 +1,120 @@
+.horizontalFlex {
+ width: 100vw;
+ display: flex;
+ flex-direction: row;
+ justify-content: left;
+ align-items: center;
+ gap: 10px;
+}
+
+.container {
+ width: calc(100vw - 20px);
+ display: flex;
+ flex-direction: row;
+ justify-content: left;
+ align-items: top;
+ gap: 10px;
+ margin-top: 20px;
+ margin-right: 20px;
+ height: auto;
+}
+
+.verticalFlex {
+ width: 100vw;
+ display: flex;
+ flex-direction: column;
+ justify-content: left;
+ align-items: flex-start;
+ gap: 10px;
+}
+
+.avatar {
+ border-radius: 25px;
+}
+
+.botBadge {
+ background-color: #6576CC;
+ color: white;
+ border-radius: 5px;
+ padding: 2px 5px;
+ font-size: 12px;
+}
+
+.messageContent {
+ width: 100%;
+ color: var(--theme-ui-colors-text);
+ margin-block: 0;
+ transition: color 0.3s ease-in-out;
+ font-size: 20px;
+}
+.authorText {
+ width: fit-content;
+ color: var(--theme-ui-colors-text);
+ margin-block: 0;
+ transition: color 0.3s ease-in-out;
+ font-size: 20px;
+}
+
+/* Box for single attachment */
+.attachment {
+
+}
+/* Blue Link for attachmentURL */
+.attachmentLink {
+
+}
+
+/* Embed box */
+.embed {
+ border-left: solid 5px red;
+ border-radius: 5px 0 0 5px;
+ padding-left: 10px;
+}
+
+/* Embed Title*/
+.embedTitle {
+ font-size: 22px;
+ font-weight: bold;
+}
+
+/* Embed Description */
+.embedDescription {
+
+}
+
+/* Embed Thumbnail */
+.embedThumbnail {
+
+}
+
+/* Embed Image */
+.embedImage {
+
+}
+
+/* Embed Footer */
+.embedFooter {
+
+}
+
+/* Embed Author Box (IconURL, Username) */
+.embedAuthor {
+
+}
+
+.embedAuthor a {
+
+}
+
+.embedAuthor p {
+
+}
+
+.embedAuthor Image {
+
+}
+
+/* Embed Field */
+.embedField {
+
+}
diff --git a/styles/nucleus/rolemenu.module.css b/styles/nucleus/rolemenu.module.css
new file mode 100644
index 0000000..174a5ae
--- /dev/null
+++ b/styles/nucleus/rolemenu.module.css
@@ -0,0 +1,32 @@
+.optionBox {
+ display: flex;
+ flex-direction: row;
+ justify-content: left;
+ align-items: center;
+ width: 100%;
+}
+
+/* .optionBox input {
+ position: absolute;
+ opacity: 0;
+ height: 0;
+ width: 0;
+} */
+
+.options {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ justify-content: left;
+ align-items: center;
+ width: fit-content;
+ height: 100%;
+}
+
+/* .option {
+ height: 20px;
+ width: 20px;
+ position: absolute;
+ border: solid 5px red !important;
+ background-color: blue;
+} */
\ No newline at end of file
diff --git a/todo/rolemenu/index.js b/todo/rolemenu/index.js
new file mode 100644
index 0000000..b233a45
--- /dev/null
+++ b/todo/rolemenu/index.js
@@ -0,0 +1,131 @@
+import Axios from 'axios';
+import Router from 'next/router';
+import React from 'react';
+import Header from '../../Components/Header'
+import { useReward } from 'react-rewards';
+
+import { AutoLayout, Panel, Title, Text, Divider } from '../../Components/Panels';
+import { useColorMode } from 'theme-ui';
+import Styles from '../../../styles/nucleus/rolemenu.module.css';
+
+function RoleMenu(props) {
+ const [clicked, setClicked] = React.useState(false);
+ const [formState, setFormState] = React.useState({});
+ const [theme, setTheme] = useColorMode()
+
+ const { reward: reward, isAnimating: isAnimating } = useReward('confetti', 'confetti', {
+ elementSize: 10,
+ elementCount: 150,
+ startVelocity: 35,
+ lifetime: 300,
+ decay: 0.94,
+ spread: 170,
+ position: "absolute",
+ colors: ["#68D49E"]
+ });
+
+ function handleChange(event) {
+ const { name, value } = event.target;
+ setFormState({ ...formState, [name]: value });
+ }
+
+ async function submitForm() {
+ if (!isAnimating) reward();
+ return
+ let code = await Axios.post('/api/nucleus/rolemenu/complete', {
+ code: props.code
+ });
+ setTimeout(() => {
+ if (code.data.success === true ) return Router.push('/nucleus/rolemenu/success','/nucleus/rolemenu')
+ else return Router.push('/nucleus/rolemenu/failure','/nucleus/rolemenu')
+ }, 2500);
+ }
+
+ return <>
+ <Header
+ name={props.guildName}
+ customImage={props.guildIcon}
+ roundImage={true}
+ subtext={`Welcome, ${props.username}`}
+ gradient={["F27878", "D96B6B"]}
+ wave="web/waves/header/nucleus"
+ buttons={[]}
+ />
+ <form onSubmit={submitForm}>
+ <AutoLayout>
+ {props.data.map((item, index) => {
+ return <Panel key={index} halfSize={true}>
+ <Title>{item.name}</Title>
+ <Divider/>
+ <Text>{item.description}</Text>
+ <div className={Styles.options}>
+ {
+ item.options.map((props, optionIndex) => {return <div key={optionIndex} className={Styles.optionBox}>
+ <input
+ type={item.max === 1 ? "radio" : "checkbox"}
+ style={{borderRadius: item.max === 1 ? "50%" : "5px"}}
+ className={Styles.option}
+ key={item.name + optionIndex}
+ id={item.name + optionIndex.toString()}
+ name={item.name}
+ value={props.name}
+ onChange={handleChange}
+ />
+ <label htmlFor={item.name + optionIndex.toString()}>{props.name}</label>
+ </div>})
+ }
+ </div>
+ </Panel>
+ })}
+ <Panel halfSize={false}>
+ <Title>Save</Title>
+ <Divider/>
+ <Text>
+ After selecting all your roles, click the button below to save your choices.
+ </Text>
+ <div id="confetti" />
+ <div className={Styles.submit}>
+ <button type="submit" disabled={isAnimating}>
+ {isAnimating ? "Saving..." : "Save"}
+ </button>
+ </div>
+ </Panel>
+ </AutoLayout>
+ </form>
+ </>
+}
+
+export default RoleMenu;
+export async function getServerSideProps(ctx) {
+ if(!ctx.query.code) {
+ return {
+ redirect: {
+ destination: '/nucleus',
+ permanent: true
+ }
+ }
+ }
+ let code;
+ try {
+ code = (await Axios.get(`${process.env.NUCLEUS_CALLBACK}rolemenu/${ctx.query.code}`)).data;
+ } catch (e) {
+ return {
+ redirect: {
+ destination: '/nucleus/rolemenu/failure',
+ permanent: true
+ }
+ }
+ }
+ let headers = ctx.req.headers;
+ return {
+ props: {
+ guild: code.guild,
+ guildName: code.guildName,
+ guildIcon: code.guildIcon,
+ user: code.user,
+ username: code.username,
+ data: code.data,
+ headers: headers
+ }
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index bf66de1..27f33d2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2269,6 +2269,11 @@
"@theme-ui/css" "0.12.1"
"@theme-ui/mdx" "0.12.1"
+"@tootallnate/once@2":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
"@trysound/sax@0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
@@ -2395,12 +2400,25 @@
"@typescript-eslint/types" "4.33.0"
eslint-visitor-keys "^2.0.0"
+abab@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+ integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+
+acorn-globals@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3"
+ integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==
+ dependencies:
+ acorn "^8.1.0"
+ acorn-walk "^8.0.2"
+
acorn-jsx@^5.3.1:
version "5.3.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-acorn-walk@^8.0.0:
+acorn-walk@^8.0.0, acorn-walk@^8.0.2:
version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
@@ -2415,6 +2433,18 @@
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
+acorn@^8.1.0, acorn@^8.8.1:
+ version "8.8.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
+ integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
ajv@^6.10.0, ajv@^6.12.4:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -2531,6 +2561,11 @@
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
axe-core@^4.4.3:
version "4.5.1"
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.1.tgz#04d561c11b6d76d096d34e9d14ba2c294fb20cdc"
@@ -2739,6 +2774,13 @@
resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43"
integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
commander@^6.2.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
@@ -2749,6 +2791,11 @@
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+commander@^9.0.0:
+ version "9.5.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
+ integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -2909,6 +2956,23 @@
dependencies:
css-tree "^1.1.2"
+cssom@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36"
+ integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
csstype@^3.0.10, csstype@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
@@ -2919,11 +2983,27 @@
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+data-urls@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
+ integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==
+ dependencies:
+ abab "^2.0.6"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^11.0.0"
+
debounce@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -2938,14 +3018,12 @@
dependencies:
ms "^2.1.1"
-debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
- dependencies:
- ms "2.1.2"
+decimal.js@^10.4.2:
+ version "10.4.3"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+ integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
-deep-is@^0.1.3:
+deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
@@ -2963,6 +3041,11 @@
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
denque@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
@@ -3016,6 +3099,13 @@
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+domexception@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
+ integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
+ dependencies:
+ webidl-conversions "^7.0.0"
+
domhandler@^4.2.0, domhandler@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
@@ -3040,6 +3130,11 @@
domelementtype "^2.2.0"
domhandler "^4.2.0"
+dotenv@^16.0.3:
+ version "16.0.3"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
+ integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
+
duplexer@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
@@ -3082,6 +3177,11 @@
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+entities@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
+ integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -3155,6 +3255,18 @@
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+escodegen@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
+ integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
eslint-config-next@11.1.2:
version "11.1.2"
resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-11.1.2.tgz#73c918f2fa6120d5f65080bf3fcf6b154905707e"
@@ -3339,7 +3451,7 @@
acorn-jsx "^5.3.1"
eslint-visitor-keys "^1.3.0"
-esprima@^4.0.0:
+esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
@@ -3394,7 +3506,7 @@
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@^2.0.6:
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
@@ -3450,11 +3562,25 @@
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+fs@^0.0.1-security:
+ version "0.0.1-security"
+ resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4"
+ integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==
+
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -3612,6 +3738,42 @@
dependencies:
react-is "^16.7.0"
+html-encoding-sniffer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
+ integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
+ dependencies:
+ whatwg-encoding "^2.0.0"
+
+http-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+ integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+ dependencies:
+ "@tootallnate/once" "2"
+ agent-base "6"
+ debug "4"
+
+https-proxy-agent@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+human-date@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/human-date/-/human-date-1.4.0.tgz#88bb62bd804d00fd12ee2f47dc3c3bbb1e55f99a"
+ integrity sha512-jhEvaL0yj8LZnphQqOylapYTLB91ZIaNuDnrHqDR/3/P1Mhil1kh1qgm75xQ/qi7iZSPKIjqrEx6kw9gTcdeuA==
+
+iconv-lite@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@@ -3740,6 +3902,11 @@
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+is-potential-custom-element-name@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+ integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -3804,6 +3971,38 @@
argparse "^1.0.7"
esprima "^4.0.0"
+jsdom@^21.1.0:
+ version "21.1.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.1.0.tgz#d56ba4a84ed478260d83bd53dc181775f2d8e6ef"
+ integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg==
+ dependencies:
+ abab "^2.0.6"
+ acorn "^8.8.1"
+ acorn-globals "^7.0.0"
+ cssom "^0.5.0"
+ cssstyle "^2.3.0"
+ data-urls "^3.0.2"
+ decimal.js "^10.4.2"
+ domexception "^4.0.0"
+ escodegen "^2.0.0"
+ form-data "^4.0.0"
+ html-encoding-sniffer "^3.0.0"
+ http-proxy-agent "^5.0.0"
+ https-proxy-agent "^5.0.1"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.2"
+ parse5 "^7.1.1"
+ saxes "^6.0.0"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.1.2"
+ w3c-xmlserializer "^4.0.0"
+ webidl-conversions "^7.0.0"
+ whatwg-encoding "^2.0.0"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^11.0.0"
+ ws "^8.11.0"
+ xml-name-validator "^4.0.0"
+
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
@@ -3835,9 +4034,9 @@
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
json5@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
- integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
dependencies:
minimist "^1.2.0"
@@ -3882,6 +4081,14 @@
prelude-ls "^1.2.1"
type-check "~0.4.0"
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
lilconfig@^2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4"
@@ -3973,6 +4180,18 @@
braces "^3.0.2"
picomatch "^2.3.1"
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -4043,6 +4262,11 @@
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+net@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/net/-/net-1.0.2.tgz#d1757ec9a7fb2371d83cf4755ce3e27e10829388"
+ integrity sha512-kbhcj2SVVR4caaVnGLJKmlk2+f+oLkjqdKeQlmUtz6nGzOpbcobwVIeSURNgraV/v3tlmGIX82OcPCl0K6RbHQ==
+
next-redux-wrapper@^7.0.4:
version "7.0.5"
resolved "https://registry.yarnpkg.com/next-redux-wrapper/-/next-redux-wrapper-7.0.5.tgz#109cd3fe02183b18fbd094924cfcbd21262039dc"
@@ -4103,6 +4327,11 @@
dependencies:
boolbase "^1.0.0"
+nwsapi@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0"
+ integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==
+
object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -4194,6 +4423,18 @@
last-call-webpack-plugin "^3.0.0"
postcss "^8.2.1"
+optionator@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
optionator@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
@@ -4223,6 +4464,13 @@
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse5@^7.1.1:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+ integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+ dependencies:
+ entities "^4.4.0"
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -4486,6 +4734,11 @@
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+
progress@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
@@ -4500,6 +4753,11 @@
object-assign "^4.1.1"
react-is "^16.13.1"
+psl@^1.1.33:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
@@ -4510,6 +4768,11 @@
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
+querystringify@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+ integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -4528,6 +4791,11 @@
resolved "https://registry.yarnpkg.com/react-fade-in/-/react-fade-in-2.0.1.tgz#b4bcd7dac63d6857ebcd68facbff2f5f9616278f"
integrity sha512-oqS/WT4znaXEHmL+yo0IDUDY7uC9K4RP35j1SdRUEBspR09B2iIC0i8oJ28tPOr6Ez/L2aktF9p89j+DbsTVNw==
+react-fast-compare@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
+ integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
+
react-fast-marquee@^1.3.1:
version "1.3.5"
resolved "https://registry.yarnpkg.com/react-fast-marquee/-/react-fast-marquee-1.3.5.tgz#e53995027102fbec92da90606d7ca89703db9903"
@@ -4538,10 +4806,10 @@
resolved "https://registry.yarnpkg.com/react-hcaptcha/-/react-hcaptcha-0.1.1.tgz#da21311166f0153054624caf5784cfd977ef31f5"
integrity sha512-p0s7uDOZAh28dbcmP2bXsox2NmIwQ6OtDTgjCYwfe49kHeCU67Omma1DhzYiGWQJRC6eTUZEikjsm+WT7bmy2g==
-react-in-viewport@^1.0.0-alpha.20:
- version "1.0.0-alpha.28"
- resolved "https://registry.yarnpkg.com/react-in-viewport/-/react-in-viewport-1.0.0-alpha.28.tgz#3957cb7931ec26582497acd14f7c3941f020fe75"
- integrity sha512-SjBVCPUIRfJb516BUev1u/dejBfI5jIcskDz4Irq2RezNG7D199eER8reRzZX+w/FLxz21rpdqRbJbagv5n37Q==
+react-in-viewport@^1.0.0-alpha.29:
+ version "1.0.0-alpha.29"
+ resolved "https://registry.yarnpkg.com/react-in-viewport/-/react-in-viewport-1.0.0-alpha.29.tgz#7550692dddbc2f129774d1cb3db40be7b27b9438"
+ integrity sha512-48woFq8EUWl3WWAPeyPu5T5KR26G3q8Gs64YXMRQq7aIP5YBzHIN2GvoFwdXDhT19pwcOPmlkSAYWMt0+d3ydw==
dependencies:
hoist-non-react-statics "^3.0.0"
@@ -4581,6 +4849,13 @@
resolved "https://registry.yarnpkg.com/react-rewards/-/react-rewards-2.0.4.tgz#617f6c1bb591f74bb0e0455cc6ff355ee6d36665"
integrity sha512-Lw7gIhD8yPDzC6boaVmcXwuTHRLSLAdqB3kZc+29YWvdHWsuc3fdAZlxI8Cm8fvD8fhP+3JkZBtzX224czw15w==
+react-snowfall@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/react-snowfall/-/react-snowfall-1.2.1.tgz#68cab6a1d05aa7c3211bce96a3a97977ca7dc57f"
+ integrity sha512-d2UR3nDq3F0DJGaTfJ0QNbBo76UZHtT9wHFj+ePxAl4FgSxWBhxB/Bjn06f5iDBwhgwiZ7CZmv3lwfNvjo6a+w==
+ dependencies:
+ react-fast-compare "^3.2.0"
+
react-tiny-popover@^7.0.1:
version "7.2.0"
resolved "https://registry.yarnpkg.com/react-tiny-popover/-/react-tiny-popover-7.2.0.tgz#e6277620efea6acea9c47efbfe5dcb473a552e99"
@@ -4672,6 +4947,11 @@
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -4723,6 +5003,11 @@
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
+"safer-buffer@>= 2.1.2 < 3.0.0":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
saslprep@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
@@ -4735,6 +5020,13 @@
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+saxes@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5"
+ integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==
+ dependencies:
+ xmlchars "^2.2.0"
+
scheduler@^0.23.0:
version "0.23.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
@@ -4766,6 +5058,13 @@
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+showdown@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5"
+ integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==
+ dependencies:
+ commander "^9.0.0"
+
side-channel@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
@@ -5004,6 +5303,11 @@
picocolors "^1.0.0"
stable "^0.1.8"
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
table@^6.0.9:
version "6.8.1"
resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf"
@@ -5032,6 +5336,11 @@
"@theme-ui/mdx" "0.12.1"
"@theme-ui/theme-provider" "0.12.1"
+tls@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/tls/-/tls-0.0.1.tgz#0ab2bf5968d71df2f8c0e1515d24a2240b98aac8"
+ integrity sha512-GzHpG+hwupY8VMR6rYsnAhTHqT/97zT45PG8WD5eTT1lq+dFE0nN+1PYpsoBcHJgSmTz5ceK2Cv88IkPmIPOtQ==
+
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@@ -5049,6 +5358,16 @@
resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"
integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==
+tough-cookie@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
+ integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.2.0"
+ url-parse "^1.5.3"
+
tr46@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
@@ -5076,6 +5395,338 @@
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
+tsparticles-engine@^2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/tsparticles-engine/-/tsparticles-engine-2.5.2.tgz#1772e857c452af806602ab0f33c90338d109f8b8"
+ integrity sha512-P2m1E/EIlvEnH9l7OEIpeKXxSn1ThNhWSp6zeRYvH/DntJpI5Oqa/AMrjum15rUzBkMDgRo7XFO4LqRWs8iB/Q==
+
+tsparticles-interaction-external-attract@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-attract/-/tsparticles-interaction-external-attract-2.5.3.tgz#18554439696ee04bb0c40afe893afcaee791ec67"
+ integrity sha512-W9w8ztCLjFK8ADROTpCBepyotTfwZdRqU6FMe0W0KU3Lj4GpR53dN7tk/YUuLtZut1DRFNH0SUh6IIuW4Oq2oQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-bounce@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-bounce/-/tsparticles-interaction-external-bounce-2.5.3.tgz#5acc056d69711f05203056112d00b4bb568f0cd5"
+ integrity sha512-z/3e8KSTm5n6kIU9KRpSr+XLz8ARDV4XuFqtDcRZBp0CXWcb2GVuuUQvHXhir1KPM3VzlHjHK8wxzqaE6TRfaw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-bubble@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-bubble/-/tsparticles-interaction-external-bubble-2.5.3.tgz#16e081b18be1cfa2560970292f7ee01ec82cdddf"
+ integrity sha512-cAXvn5ScwEku1e01CzWFMMGogvDkY/O/FnMr3kFvxztY3BeeSuj3RIwd+INp5U0L0D88hue0kL0BEIfPQLbfCA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-connect@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-connect/-/tsparticles-interaction-external-connect-2.5.3.tgz#c2cea19c60abd7658937266e3b530a73227a7f04"
+ integrity sha512-KOcNNxb4MxmDeTfnNawWtn72YaILjTvpN5zSNXRDDiYLJ9dFAuoU8jfXxTyb5EGtF6PNkU9er0KX2aA3hQNM1w==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-grab@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-grab/-/tsparticles-interaction-external-grab-2.5.3.tgz#8f6c7628c7cd59837bfbd6599151dbbd8b62e121"
+ integrity sha512-bVTdB8lojJsd+9Pm2kGuQQa9VrIq+hITn2lBQ2YVzlF+vJ4a02Nvw07PHKlnmu+EJDmMwlGmu5z1oAFaWaRGMA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-pause@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-pause/-/tsparticles-interaction-external-pause-2.5.3.tgz#bde967da09fa0a6eafaf973ab09a3678b2b40174"
+ integrity sha512-LPNcYCmo9/PoHdyTb+8nmZxvbtknYdqnjs70fYIngL4pNvdq8KwO38Z1anh7rBIVvHOlpm2w7NnwO3jeOnYOVQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-push@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-push/-/tsparticles-interaction-external-push-2.5.3.tgz#eaababd0f71f20e56f39520a783f280a85b98d80"
+ integrity sha512-5vfDVR9ciAGORVszq8ciqE6HYmpciDS2zom2++apHLvxM1AAQJKh/zRy3W3hl2qQ5aEvb67t/iaRiglTtQD2qA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-remove@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-remove/-/tsparticles-interaction-external-remove-2.5.3.tgz#2fd951732aa6a66f2fa2de801fa65bb557baed21"
+ integrity sha512-+goJgwiTHR6OFmuHZjqI7wO+VFeH8GObJEZzvRLzAZ1jRDZquc/Lm7bMLnQjKOS+pA44tLrZB4ErFT1/+VH1dg==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-repulse@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-repulse/-/tsparticles-interaction-external-repulse-2.5.3.tgz#3db55dd2170c92c100407d1e8b101640454d4214"
+ integrity sha512-6o/Xk8oTB/oGAlp291f8HllRvb5P7Qs6Z35imJ+hmLBuxXpu++TRbBJl9AyTuzhkaiX46cy765q79K4Nf71tTQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-slow@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-slow/-/tsparticles-interaction-external-slow-2.5.3.tgz#47216b262686aa9cadedbf4d1fb8a3e8075199ca"
+ integrity sha512-nWDtU2q3gLccu9CafmONAVJFA9gMvAJ26Uf7+jiqWPAG0R3p/oL8INZDyIwKtxd+OFkE6QwBWe1BJovOUjJfZw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-external-trail@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-external-trail/-/tsparticles-interaction-external-trail-2.5.3.tgz#10410f65c929f1a3561baab46cf97bddb909662a"
+ integrity sha512-Z0PuHPjgNHTUOHGSyM31dls03Brq1//6qrSfMu4zmVcfyb9wVZN2UeTd0OjqNLiz7gsBVdFWinRVe20EcOPYIQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-particles-attract@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-particles-attract/-/tsparticles-interaction-particles-attract-2.5.3.tgz#d764c564a825cac61685bc78ea30cc872728cdc5"
+ integrity sha512-vACi7Zdx3LtqFNbapCxylNuj/T52lhc8xN2vTq2oGMEm0f8JjBqrsfXYzvN7cpVVg4hQDiBWwWgAftQEwAHkJQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-particles-collisions@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-particles-collisions/-/tsparticles-interaction-particles-collisions-2.5.3.tgz#641ec461256be2600172b2f6a5266537c94319b4"
+ integrity sha512-KhlWgrMr8GD0rkj75yhhEZkvr56DJxIlk57YZfBHrYvpLVUyYDXO7iv5mVAPG7qtfxfMwggEXZSpCxbH5bfhbA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-interaction-particles-links@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-interaction-particles-links/-/tsparticles-interaction-particles-links-2.5.3.tgz#03f80105ec1e4f49fa7f877f89f79c5d45d80c2f"
+ integrity sha512-aT43l+90HV81IKuNPgVKUU/1aMwC6aVYQeqRwyUi1WMoW2n0JUuM/k2ifqEUsfNuoXOfedU9HRXk4+iXnKd0SQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-move-base@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-move-base/-/tsparticles-move-base-2.5.3.tgz#e0a735972a078348a4903c2740f5a09a8be9b91d"
+ integrity sha512-YOpTua9TfBoU6dmK6VdvVgXIpb2iU8PuA3lL+p/Qe6VLqGx4XgSt27pD63Qa5p7lFZTCxa4cnE+DcHFVSRWG1Q==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-move-parallax@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-move-parallax/-/tsparticles-move-parallax-2.5.3.tgz#c37143119779824738c45d09866f638bb08d3fe1"
+ integrity sha512-l9vgLZrdR9WIaiJ8lH7Nq2h60zg4/w+X/pvp76CWce3S7ochW3s5r/J9dnNJOSyHUEvs42s76yOdZA1apkFHvw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-particles.js@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-particles.js/-/tsparticles-particles.js-2.5.3.tgz#df7c777721a7da2841a578f88cabc47c7467b3cd"
+ integrity sha512-nksab+qsfpz+gA/qXqpiQJYaMznPh52FY77kdcttVUKj2b5vQLjMq2avewREKnsWJYqDl5LohekbEMXDznS2wQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-plugin-absorbers@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-plugin-absorbers/-/tsparticles-plugin-absorbers-2.5.3.tgz#7d1164f37f09be4e5fffbb2b4448c096991f182b"
+ integrity sha512-sN0Utyd62vMXr46Pko/0ncRbhTLUfkFNpY4x8Z7eCnkX4WnWkVMrcwT3ib7wn56/rtxn8rzWYCIquaioU8oOEQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-plugin-easing-quad@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-plugin-easing-quad/-/tsparticles-plugin-easing-quad-2.5.3.tgz#1244cea271c3b28fb56c0d76c4a8ac0cdce63439"
+ integrity sha512-rGhPbL4mJrQkziYu5wpcKtdDqj3srfvcWqfm6D3NBjdveWm5Q6o/fA8hlkNXuBPCIIpQG4cfwQYx8nc5BEtwgA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-plugin-emitters@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-plugin-emitters/-/tsparticles-plugin-emitters-2.5.3.tgz#a05815f74aa56111764d4df5bc30b82d845732ea"
+ integrity sha512-yF1qiGJu99EIG40nTLVGwV6JEgpB9NGCynd6chvqby7A01AWoqpaUaQ7AdyblcjpPq2WYkyMhJWdeNEk6YblFQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-shape-circle@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-shape-circle/-/tsparticles-shape-circle-2.5.3.tgz#1df7c5f43b26566734a2d7de6e0065a3c93b2fa9"
+ integrity sha512-D8zbbC/eaqaOjd3MjhmbkmMQ+uH97RKNJL3YyZ743s1YowCGPK4c6N5NUdVNqljWHn15ALpq0NV/GzY5oGVTNw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-shape-image@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-shape-image/-/tsparticles-shape-image-2.5.3.tgz#faf004a839cfb9fd7f467f00e5cb856029b5b4c1"
+ integrity sha512-hdSxxkTXlEC2vn1Hi//GDZNqIGCVyuRfoTmE8ex3hj9NA0YhZoBcmr+4kmFDfJRBvtvumIQk4V1JVruHgoVnuw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-shape-line@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-shape-line/-/tsparticles-shape-line-2.5.3.tgz#fbf1fe2361ee605fd06450a7522f1d31ab97db0d"
+ integrity sha512-ee+mA40mTfvbpetU0ohmsiZ1ClY7OCFwcAEfNlfTJc7BGUVQuvEN47RHR9UtL4k3REu9JNKr6J2EIuUOgRwwLw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-shape-polygon@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-shape-polygon/-/tsparticles-shape-polygon-2.5.3.tgz#08b3d280946db84839a9005277cacf38f807ada3"
+ integrity sha512-1w+6nke5LvKd/jEwCgj8QKDIi5qFLjm54Dg1fH4S1jhEtNAM25o28Law0JGfZeernmBWqaxBj5pV9BJGeqqfcw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-shape-square@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-shape-square/-/tsparticles-shape-square-2.5.3.tgz#43888f4df268a959b0a2185b278d08a4ec4f9430"
+ integrity sha512-LXS6UJJx0gCB7kS8kJb4N01owMnIwYkUaN5eVcN5h0b8Hc2cX+E962yImR2ZN+Hcq4P9lb7qXGj7SsAAa054WQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-shape-star@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-shape-star/-/tsparticles-shape-star-2.5.3.tgz#d499ff380c37b5fce776347f3e1c5849f3430ef2"
+ integrity sha512-/xvEP8XQ1TWcKBGMA0vTyu7EW/dcOz3jaOzgtAN3MvKgu9AQDiT02HUNW92QIUmqLStlCPAttf37eUss+JGTVw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-shape-text@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-shape-text/-/tsparticles-shape-text-2.5.3.tgz#5dbc92a3ce7729bc07dea30c499e9d6e0d8b0d4a"
+ integrity sha512-d6/xZVhBTAVtnMOH8K9nCamgfiO10M2q67rAUDTUVTscYES996jQYsTeDfg43IIO7eruXBH80LZVLt1MBZJ3DA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-slim@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-slim/-/tsparticles-slim-2.5.3.tgz#82634757ae64826248af929108fcddc9c86fba13"
+ integrity sha512-t44w8lrajWIOp2P14G9Hfp32v+EzpjjB4402jsbVHRyaQdm3vlgrtqA1H/2qQGdJHkl24lUZXNlLqX4fSoBZbg==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+ tsparticles-interaction-external-attract "^2.5.3"
+ tsparticles-interaction-external-bounce "^2.5.3"
+ tsparticles-interaction-external-bubble "^2.5.3"
+ tsparticles-interaction-external-connect "^2.5.3"
+ tsparticles-interaction-external-grab "^2.5.3"
+ tsparticles-interaction-external-pause "^2.5.3"
+ tsparticles-interaction-external-push "^2.5.3"
+ tsparticles-interaction-external-remove "^2.5.3"
+ tsparticles-interaction-external-repulse "^2.5.3"
+ tsparticles-interaction-external-slow "^2.5.3"
+ tsparticles-interaction-particles-attract "^2.5.3"
+ tsparticles-interaction-particles-collisions "^2.5.3"
+ tsparticles-interaction-particles-links "^2.5.3"
+ tsparticles-move-base "^2.5.3"
+ tsparticles-move-parallax "^2.5.3"
+ tsparticles-particles.js "^2.5.3"
+ tsparticles-plugin-easing-quad "^2.5.3"
+ tsparticles-shape-circle "^2.5.3"
+ tsparticles-shape-image "^2.5.3"
+ tsparticles-shape-line "^2.5.3"
+ tsparticles-shape-polygon "^2.5.3"
+ tsparticles-shape-square "^2.5.3"
+ tsparticles-shape-star "^2.5.3"
+ tsparticles-shape-text "^2.5.3"
+ tsparticles-updater-angle "^2.5.3"
+ tsparticles-updater-color "^2.5.3"
+ tsparticles-updater-life "^2.5.3"
+ tsparticles-updater-opacity "^2.5.3"
+ tsparticles-updater-out-modes "^2.5.3"
+ tsparticles-updater-size "^2.5.3"
+ tsparticles-updater-stroke-color "^2.5.3"
+
+tsparticles-updater-angle@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-angle/-/tsparticles-updater-angle-2.5.3.tgz#91a6ce3fa715d2ad44034f4debf82e1df4715c9f"
+ integrity sha512-2oQYSV5PC0FWnwRswcUZjXAeuHa8QQw0dK3NnyxG52PuyJorxGz38t8/INrPMxaNDA8LvSHO+CzYFi9CzQvXbg==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-color@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-color/-/tsparticles-updater-color-2.5.3.tgz#93da0ab8d81643b6646c95ec1b0a721c55fe4582"
+ integrity sha512-eNmyfkzk7AfghCLwCewt+480LAfK5uX2D5jnQC/Vo5VNxco1P0clGTx61g9pc3vVzUV1e5NEj6Gw1tCSb8f+nw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-destroy@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-destroy/-/tsparticles-updater-destroy-2.5.3.tgz#f41e0209b8b1ddf71741623b6ce2ef1f135ff38a"
+ integrity sha512-2G6haBy5PqpNmnOLVeUzmm82zjfx8YmSwu9qZ5nUEPLNDQCDkAN4u6mffrkZRajY0u/KmwTTaajIVK0ExIR9aw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-life@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-life/-/tsparticles-updater-life-2.5.3.tgz#68ae7b0d56825466aaf173f863bce990c4da702c"
+ integrity sha512-smK9iuNRPmK9rr74X9xzx9LPpVaSbRY+uri7/lI9NLvoi5b1PtYImYSIQGiXrPfFZ2/KL+MApddVnwqI/8MHqw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-opacity@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-opacity/-/tsparticles-updater-opacity-2.5.3.tgz#4f54110b1c12520e7655c01a62834fa61bde1f0b"
+ integrity sha512-1tLJYDq1uQM7sNn8QPO8s2yPTRAJONCxyETWl9SAc6ghTX0qrebcla3pGRBWMT0g0cIJb4qIsO9Nyaq9RYf0iQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-out-modes@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-out-modes/-/tsparticles-updater-out-modes-2.5.3.tgz#3fb366bec4aebb08755d673d72d7b1d30f434cd3"
+ integrity sha512-KyhA2YNA3j7TFv2lOwZN9JXuR5z1/N7fUmaFTVJGooI6Bf7WvTFaDFp0gvufrBSd4CqDwsQITqDOwV2J1sGDEQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-roll@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-roll/-/tsparticles-updater-roll-2.5.3.tgz#ff21b29fbfc77d3fede95f7474256bf931109ed1"
+ integrity sha512-jkiGkFW7s7TJBqfsiC4ZU0/gR/YCAeOkHAIIuHcVy4soM2rf0P2NKKzZxYMxSIyGQrCG0Hxw0GEGlLV5UiqK2w==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-size@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-size/-/tsparticles-updater-size-2.5.3.tgz#9c7ba5beb52462f993b559b6884e8922b5c4726a"
+ integrity sha512-kU1qyP8NKQd5XhAc2jp/VLn2AxakM+HFKozlzHIp8DPy+INW5lpgswo2Cc5e1ZXQCdOMQlQFn6cNCbct24kKcQ==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-stroke-color@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-stroke-color/-/tsparticles-updater-stroke-color-2.5.3.tgz#888088fc9a56788309d3ab4bf74730066611fcd2"
+ integrity sha512-XONraSFtepvtEqJXQWQSV+KOEWill9HtwVju8CsFgS/NtJYlYKfpSEbv41r7pWRhZRaFZN/BbOnMfwHCdLuBHw==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-tilt@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-tilt/-/tsparticles-updater-tilt-2.5.3.tgz#cb52b4f8898aae2ddcb0cc333b5b9390f9ab0d73"
+ integrity sha512-Njt3aR+WtYiuvaLWnJOsL6NGDfVAfMrVzzOGrrf7X4TZKpk4HMMYcxOQFbvBQnoQZhenq3/TJh09Xx44AX7Rag==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-twinkle@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-twinkle/-/tsparticles-updater-twinkle-2.5.3.tgz#ae8e30b19d5cc0830b60ce5a8298a395a3fa067f"
+ integrity sha512-YvfRIf00stfTqttQL5IZ5yHaVufR7XnXxPk+GZ9bLzw5SGoUD+EyLlKVoP6L9gbY6O3I6c64ZKrKmBWMoYWxDg==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles-updater-wobble@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles-updater-wobble/-/tsparticles-updater-wobble-2.5.3.tgz#7d8801c238f8693f5ea67c09768e4649f2dadf3b"
+ integrity sha512-uB4VdZU1Ha7T8ZtOe0SAdnrVVkoCCDeb/BIUTGp7nF1/fVlv57v7iI54GmbYE9Aabljc2KOvEaaiYPO+iBJqgA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+
+tsparticles@^2.5.3:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/tsparticles/-/tsparticles-2.5.3.tgz#670ad90fc3f92c7c2c44dc5fc78ae62483688755"
+ integrity sha512-qp3WdOKLQsZUgR11biq5mK5njmD6bhDcK2XpsLenj0oNvz6A/lHn8fv9KgWmLka6sBBHwTpAPpnFGBII5GMaqA==
+ dependencies:
+ tsparticles-engine "^2.5.2"
+ tsparticles-interaction-external-trail "^2.5.3"
+ tsparticles-plugin-absorbers "^2.5.3"
+ tsparticles-plugin-emitters "^2.5.3"
+ tsparticles-slim "^2.5.3"
+ tsparticles-updater-destroy "^2.5.3"
+ tsparticles-updater-roll "^2.5.3"
+ tsparticles-updater-tilt "^2.5.3"
+ tsparticles-updater-twinkle "^2.5.3"
+ tsparticles-updater-wobble "^2.5.3"
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -5090,6 +5741,13 @@
dependencies:
prelude-ls "^1.2.1"
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
+ dependencies:
+ prelude-ls "~1.1.2"
+
type-fest@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
@@ -5128,6 +5786,11 @@
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
+universalify@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+ integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
+
unquote@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
@@ -5148,6 +5811,14 @@
dependencies:
punycode "^2.1.0"
+url-parse@^1.5.3:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+ integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
use-sync-external-store@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
@@ -5178,6 +5849,13 @@
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+w3c-xmlserializer@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073"
+ integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==
+ dependencies:
+ xml-name-validator "^4.0.0"
+
webidl-conversions@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
@@ -5206,6 +5884,18 @@
source-list-map "^2.0.0"
source-map "~0.6.1"
+whatwg-encoding@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
+ integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
+ dependencies:
+ iconv-lite "0.6.3"
+
+whatwg-mimetype@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
+ integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
+
whatwg-url@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
@@ -5232,7 +5922,7 @@
dependencies:
isexe "^2.0.0"
-word-wrap@^1.2.3:
+word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
@@ -5247,6 +5937,21 @@
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+ws@^8.11.0:
+ version "8.12.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f"
+ integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==
+
+xml-name-validator@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
+ integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
+
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"