- ${this.RowDiscriminator(name, icon)}
- ${this.RowStat(
- 'Winrate',
- `${(winrate * 100).toFixed(2)}%`,
- `${(careerWinrate * 100).toFixed(2)}%`,
- winrate - careerWinrate,
- )}
- ${this.RowStat(
- 'Damage',
- averageDamage.toFixed(2),
- careerAverageDamage.toFixed(2),
- averageDamage - careerAverageDamage,
- )}
- ${this.RowStat(
- 'Survival',
- `${(survival * 100).toFixed(2)}%`,
- `${(careerSurvival * 100).toFixed(2)}%`,
- survival - careerSurvival,
- )}
- ${this.RowStat('Battles', battles.toFixed(0), careerBattles.toFixed(0))}
-
- `;
-
- /*
- ${this.RowStat(
- 'WN8',
- wn8.toFixed(0),
- careerWn8.toFixed(0),
- wn8 - careerWn8,
- )}
- */
- },
-
- RowDiscriminator(name: string, icon?: string) {
- return `
-
-
-
- ${columns.map((column) => GenericStatsColumn(column)).join('\n')}
+ return (
+
+ {columns.map((stats) => (
+ stat[0]).join('-')}
+ stats={stats}
+ />
+ ))}
- `;
+ );
}
diff --git a/src/components/NoBattlesInPeriod.ts b/src/components/NoBattlesInPeriod.ts
deleted file mode 100644
index b243662db..000000000
--- a/src/components/NoBattlesInPeriod.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-export default function NoBattlesInPeriod() {
- return `
-
-
-
- No battles played in this period
-
- `;
-}
diff --git a/src/components/NoBattlesInPeriod.tsx b/src/components/NoBattlesInPeriod.tsx
new file mode 100644
index 000000000..2e3dc0805
--- /dev/null
+++ b/src/components/NoBattlesInPeriod.tsx
@@ -0,0 +1,15 @@
+export default function NoBattlesInPeriod() {
+ return (
+
+
+ No battles played in this period
+
+
+ );
+}
diff --git a/src/components/PoweredByBlitzStars.ts b/src/components/PoweredByBlitzStars.ts
deleted file mode 100644
index 581145730..000000000
--- a/src/components/PoweredByBlitzStars.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-export default function PoweredByBlitzStars() {
- return `
-
-
-
-

-
Powered by BlitzStars
-
- `;
-}
diff --git a/src/components/PoweredByBlitzStars.tsx b/src/components/PoweredByBlitzStars.tsx
new file mode 100644
index 000000000..bd2349bc0
--- /dev/null
+++ b/src/components/PoweredByBlitzStars.tsx
@@ -0,0 +1,13 @@
+export default function PoweredByBlitzStars() {
+ return (
+
+

+
+ Powered by BlitzStars
+
+
+ );
+}
diff --git a/src/components/Root.ts b/src/components/Root.ts
deleted file mode 100644
index 23d627caf..000000000
--- a/src/components/Root.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import Children from './Children.js';
-
-export default function Root(...children: string[]) {
- return `
-
-
-
- ${Children(children)}
-
- `;
-}
diff --git a/src/components/TitleBar.ts b/src/components/TitleBar.ts
deleted file mode 100644
index 4886d4136..000000000
--- a/src/components/TitleBar.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-export default function TitleBar(
- name: string,
- nameDiscriminator: string,
- image?: string,
- description?: string,
-) {
- return `
-
-
-
-
- ${image ? `

` : ''}
-
-
-
- ${name}
- ${nameDiscriminator}
-
-
- ${description}
-
-
-
-

-
- `;
-}
diff --git a/src/components/TitleBar.tsx b/src/components/TitleBar.tsx
new file mode 100644
index 000000000..ac008c88d
--- /dev/null
+++ b/src/components/TitleBar.tsx
@@ -0,0 +1,50 @@
+export interface TitleBarProps {
+ name: string;
+ nameDiscriminator?: string;
+ image?: string;
+ description?: string;
+}
+
+export default function TitleBar({
+ name,
+ nameDiscriminator,
+ image,
+ description,
+}: TitleBarProps) {
+ return (
+
+
+ {image &&

}
+
+
+
+ {name}
+ {nameDiscriminator && (
+ {nameDiscriminator}
+ )}
+
+
+ {description}
+
+
+
+

+
+ );
+}
diff --git a/src/components/Wrapper.ts b/src/components/Wrapper.ts
deleted file mode 100644
index a6fbc4b3c..000000000
--- a/src/components/Wrapper.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import Children from './Children.js';
-
-export default function Wrapper(...children: string[]) {
- return `
-
-
-
- ${Children(children)}
-
- `;
-}
diff --git a/src/components/Wrapper.tsx b/src/components/Wrapper.tsx
new file mode 100644
index 000000000..dc3aeed22
--- /dev/null
+++ b/src/components/Wrapper.tsx
@@ -0,0 +1,23 @@
+import { ReactNode } from 'react';
+
+export interface WrapperProps {
+ children: ReactNode;
+}
+
+export default function Wrapper({ children }: WrapperProps) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/core/ui/render.tsx b/src/core/ui/render.tsx
new file mode 100644
index 000000000..c2cae26cf
--- /dev/null
+++ b/src/core/ui/render.tsx
@@ -0,0 +1,22 @@
+import { Resvg } from '@resvg/resvg-js';
+import { readFileSync } from 'fs';
+import { ReactNode } from 'react';
+import satori from 'satori';
+
+const robotoFlex = readFileSync('src/assets/fonts/Roboto.ttf');
+const robotoFlexBold = readFileSync('src/assets/fonts/Roboto-Bold.ttf');
+const robotoFlexBlack = readFileSync('src/assets/fonts/Roboto-Black.ttf');
+
+export default async function render(element: ReactNode) {
+ const svg = await satori(element, {
+ width: 640,
+ fonts: [
+ { data: robotoFlex, name: 'Roboto Flex', weight: 400 },
+ { data: robotoFlexBold, name: 'Roboto Flex', weight: 700 },
+ { data: robotoFlexBlack, name: 'Roboto Flex', weight: 900 },
+ ],
+ });
+ const png = new Resvg(svg).render().asPng();
+
+ return png;
+}
diff --git a/src/core/ui/screenshotHTML.ts b/src/core/ui/screenshotHTML.ts
deleted file mode 100644
index 9d2fcbf01..000000000
--- a/src/core/ui/screenshotHTML.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import Root from '../../components/Root.js';
-import { browser } from '../../index.js';
-
-export default async function screenshotHTML(children: string) {
- const page = await browser.newPage();
- await page.setViewportSize({ width: 640, height: 1 });
- await page.setContent(Root(children));
- const screenshot = await page
- .locator('#root')
- .screenshot({ omitBackground: true, scale: 'css' });
- await page.close();
-
- return screenshot;
-}
diff --git a/src/index.ts b/src/index.ts
index 8d06a4c65..bd3cf6eee 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,4 +1,3 @@
-import { chromium } from '@playwright/test';
import { Client, GatewayIntentBits } from 'discord.js';
import { args } from './core/process/args.js';
import { registerErrorHandlers } from './events/error.js';
@@ -17,5 +16,3 @@ client
.on('guildMemberAdd', guildMemberAdd)
.on('interactionCreate', interactionCreate)
.login(args['discord-token']);
-
-export const browser = await chromium.launch();
diff --git a/src/reset.d.ts b/src/types/reset.d.ts
similarity index 100%
rename from src/reset.d.ts
rename to src/types/reset.d.ts
diff --git a/tsconfig.json b/tsconfig.json
index 6d0579eb4..ccc1693c1 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -8,6 +8,7 @@
"strict": true,
"skipLibCheck": true,
"noEmit": true,
- "resolveJsonModule": true
+ "resolveJsonModule": true,
+ "jsx": "react-jsx"
}
}
diff --git a/yarn.lock b/yarn.lock
index cf809819f..db2c7e77a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -156,15 +156,83 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061"
integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==
-"@playwright/test@^1.34.2":
- version "1.34.2"
- resolved "https://registry.npmjs.org/@playwright/test/-/test-1.34.2.tgz"
- integrity sha512-v/LBnwzD0225q8xEv3t9DmNPX61yvNnEbiA8PoNk1fbkxApJFCWYLPpQbdVWzHaARdZD9g1PYBoOvnffortfKw==
- dependencies:
- "@types/node" "*"
- playwright-core "1.34.2"
+"@resvg/resvg-js-android-arm-eabi@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.4.1.tgz#49dc9722f95096f8aff70186deae8e148d60dce5"
+ integrity sha512-AA6f7hS0FAPpvQMhBCf6f1oD1LdlqNXKCxAAPpKh6tR11kqV0YIB9zOlIYgITM14mq2YooLFl6XIbbvmY+jwUw==
+
+"@resvg/resvg-js-android-arm64@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.4.1.tgz#fdb7c9362ea27a228831d047cfd1ea240daed780"
+ integrity sha512-/QleoRdPfsEuH9jUjilYcDtKK/BkmWcK+1LXM8L2nsnf/CI8EnFyv7ZzCj4xAIvZGAy9dTYr/5NZBcTwxG2HQg==
+
+"@resvg/resvg-js-darwin-arm64@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.4.1.tgz#5ef093f1276149340b9f5a5c487717c4de87bee7"
+ integrity sha512-U1oMNhea+kAXgiEXgzo7EbFGCD1Edq5aSlQoe6LMly6UjHzgx2W3N5kEXCwU/CgN5FiQhZr7PlSJSlcr7mdhfg==
+
+"@resvg/resvg-js-darwin-x64@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.4.1.tgz#18dd758184f4877be1f6ac80d2f37999581c998c"
+ integrity sha512-avyVh6DpebBfHHtTQTZYSr6NG1Ur6TEilk1+H0n7V+g4F7x7WPOo8zL00ZhQCeRQ5H4f8WXNWIEKL8fwqcOkYw==
+
+"@resvg/resvg-js-linux-arm-gnueabihf@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.4.1.tgz#eee8f8166763aacc935a53e223e7b9c31b10c94a"
+ integrity sha512-isY/mdKoBWH4VB5v621co+8l101jxxYjuTkwOLsbW+5RK9EbLciPlCB02M99ThAHzI2MYxIUjXNmNgOW8btXvw==
+
+"@resvg/resvg-js-linux-arm64-gnu@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.4.1.tgz#826569e1ee08f07879ce32850822ede2ee1192ef"
+ integrity sha512-uY5voSCrFI8TH95vIYBm5blpkOtltLxLRODyhKJhGfskOI7XkRw5/t1u0sWAGYD8rRSNX+CA+np86otKjubrNg==
+
+"@resvg/resvg-js-linux-arm64-musl@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.4.1.tgz#faf63d873666078ca74604454d40e4fecc22beb4"
+ integrity sha512-6mT0+JBCsermKMdi/O2mMk3m7SqOjwi9TKAwSngRZ/nQoL3Z0Z5zV+572ztgbWr0GODB422uD8e9R9zzz38dRQ==
+
+"@resvg/resvg-js-linux-x64-gnu@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.4.1.tgz#37b4c16c488aac3834a069c3725f017285d94b1e"
+ integrity sha512-60KnrscLj6VGhkYOJEmmzPlqqfcw1keDh6U+vMcNDjPhV3B5vRSkpP/D/a8sfokyeh4VEacPSYkWGezvzS2/mg==
+
+"@resvg/resvg-js-linux-x64-musl@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.4.1.tgz#6099cf57c958832549b0671991246e06bb44df27"
+ integrity sha512-0AMyZSICC1D7ge115cOZQW8Pcad6PjWuZkBFF3FJuSxC6Dgok0MQnLTs2MfMdKBlAcwO9dXsf3bv9tJZj8pATA==
+
+"@resvg/resvg-js-win32-arm64-msvc@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.4.1.tgz#10c9472a20198a218d8c3b6d8fbb3fcba213b670"
+ integrity sha512-76XDFOFSa3d0QotmcNyChh2xHwk+JTFiEQBVxMlHpHMeq7hNrQJ1IpE1zcHSQvrckvkdfLboKRrlGB86B10Qjw==
+
+"@resvg/resvg-js-win32-ia32-msvc@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.4.1.tgz#bfc1d37ed485d72ca5717138b99ba40788fa2720"
+ integrity sha512-odyVFGrEWZIzzJ89KdaFtiYWaIJh9hJRW/frcEcG3agJ464VXkN/2oEVF5ulD+5mpGlug9qJg7htzHcKxDN8sg==
+
+"@resvg/resvg-js-win32-x64-msvc@2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.4.1.tgz#83cae82dfe27121f85492eb4dc03f6fe33d8a703"
+ integrity sha512-vY4kTLH2S3bP+puU5x7hlAxHv+ulFgcK6Zn3efKSr0M0KnZ9A3qeAjZteIpkowEFfUeMPNg2dvvoFRJA9zqxSw==
+
+"@resvg/resvg-js@^2.4.1":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@resvg/resvg-js/-/resvg-js-2.4.1.tgz#07e9cd57f3c925a5fb075a313a0640fc74cba4a2"
+ integrity sha512-wTOf1zerZX8qYcMmLZw3czR4paI4hXqPjShNwJRh5DeHxvgffUS5KM7XwxtbIheUW6LVYT5fhT2AJiP6mU7U4A==
optionalDependencies:
- fsevents "2.3.2"
+ "@resvg/resvg-js-android-arm-eabi" "2.4.1"
+ "@resvg/resvg-js-android-arm64" "2.4.1"
+ "@resvg/resvg-js-darwin-arm64" "2.4.1"
+ "@resvg/resvg-js-darwin-x64" "2.4.1"
+ "@resvg/resvg-js-linux-arm-gnueabihf" "2.4.1"
+ "@resvg/resvg-js-linux-arm64-gnu" "2.4.1"
+ "@resvg/resvg-js-linux-arm64-musl" "2.4.1"
+ "@resvg/resvg-js-linux-x64-gnu" "2.4.1"
+ "@resvg/resvg-js-linux-x64-musl" "2.4.1"
+ "@resvg/resvg-js-win32-arm64-msvc" "2.4.1"
+ "@resvg/resvg-js-win32-ia32-msvc" "2.4.1"
+ "@resvg/resvg-js-win32-x64-msvc" "2.4.1"
"@sapphire/async-queue@^1.5.0":
version "1.5.0"
@@ -184,6 +252,14 @@
resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.2.tgz"
integrity sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g==
+"@shuding/opentype.js@1.4.0-beta.0":
+ version "1.4.0-beta.0"
+ resolved "https://registry.yarnpkg.com/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b"
+ integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==
+ dependencies:
+ fflate "^0.7.3"
+ string.prototype.codepointat "^0.2.1"
+
"@tokenizer/token@^0.3.0":
version "0.3.0"
resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz"
@@ -226,6 +302,25 @@
resolved "https://registry.npmjs.org/@types/node/-/node-20.2.1.tgz"
integrity sha512-DqJociPbZP1lbZ5SQPk4oag6W7AyaGMO6gSfRwq3PWl4PXTwJpRQJhDq4W0kzrg3w6tJ1SwlvGZ5uKFHY13LIg==
+"@types/prop-types@*":
+ version "15.7.5"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
+ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
+
+"@types/react@^18.2.7":
+ version "18.2.7"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.7.tgz#dfb4518042a3117a045b8c222316f83414a783b3"
+ integrity sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
+"@types/scheduler@*":
+ version "0.16.3"
+ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5"
+ integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==
+
"@types/ws@^8.5.4":
version "8.5.4"
resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz"
@@ -238,6 +333,11 @@ acorn@^8.8.2:
resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
+base64-js@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978"
+ integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==
+
busboy@^1.6.0:
version "1.6.0"
resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz"
@@ -250,6 +350,45 @@ cac@^6.7.14:
resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz"
integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
+camelize@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
+ integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
+
+color-name@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+css-background-parser@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b"
+ integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==
+
+css-box-shadow@1.0.0-3:
+ version "1.0.0-3"
+ resolved "https://registry.yarnpkg.com/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713"
+ integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==
+
+css-color-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+ integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
+
+css-to-react-native@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32"
+ integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==
+ dependencies:
+ camelize "^1.0.0"
+ css-color-keywords "^1.0.0"
+ postcss-value-parser "^4.0.2"
+
+csstype@^3.0.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
+ integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
data-uri-to-buffer@^4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz"
@@ -286,6 +425,11 @@ discord.js@^14.9.0:
undici "^5.21.0"
ws "^8.13.0"
+emoji-regex@^10.2.1:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f"
+ integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==
+
esbuild@^0.17.5:
version "0.17.19"
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz"
@@ -332,6 +476,11 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4:
node-domexception "^1.0.0"
web-streams-polyfill "^3.0.3"
+fflate@^0.7.3:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50"
+ integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==
+
file-type@^18.2.1:
version "18.2.1"
resolved "https://registry.npmjs.org/file-type/-/file-type-18.2.1.tgz"
@@ -348,7 +497,7 @@ formdata-polyfill@^4.0.10:
dependencies:
fetch-blob "^3.1.2"
-fsevents@2.3.2, fsevents@~2.3.2:
+fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
@@ -358,6 +507,11 @@ fuzzysort@^2.0.4:
resolved "https://registry.npmjs.org/fuzzysort/-/fuzzysort-2.0.4.tgz"
integrity sha512-Api1mJL+Ad7W7vnDZnWq5pGaXJjyencT+iKGia2PlHUcSsSzWwIQ3S1isiMpwpavjYtGd2FzhUIhnnhOULZgDw==
+hex-rgb@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776"
+ integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==
+
ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
@@ -368,11 +522,24 @@ inherits@^2.0.3:
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+"js-tokens@^3.0.0 || ^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
jsonc-parser@^3.2.0:
version "3.2.0"
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz"
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
+linebreak@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b"
+ integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==
+ dependencies:
+ base64-js "0.0.8"
+ unicode-trie "^2.0.0"
+
lodash.snakecase@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz"
@@ -388,6 +555,13 @@ lodash@^4.17.21:
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+loose-envify@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
markdown-escape@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/markdown-escape/-/markdown-escape-2.0.0.tgz"
@@ -427,6 +601,19 @@ node-fetch@^3.3.1:
fetch-blob "^3.1.4"
formdata-polyfill "^4.0.10"
+pako@^0.2.5:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
+
+parse-css-color@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9"
+ integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==
+ dependencies:
+ color-name "^1.1.4"
+ hex-rgb "^4.1.0"
+
pathe@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz"
@@ -451,10 +638,10 @@ pkg-types@^1.0.3:
mlly "^1.2.0"
pathe "^1.1.0"
-playwright-core@1.34.2:
- version "1.34.2"
- resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.34.2.tgz"
- integrity sha512-MrkgGWLANc5qthXduvIY1a/tuafROyTORVd86fwKwgoYrmnBooN/GgeZSBm7ljTLV2FCWNSXV3se7qeScKn83g==
+postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@^8.4.23:
version "8.4.23"
@@ -465,6 +652,13 @@ postcss@^8.4.23:
picocolors "^1.0.0"
source-map-js "^1.0.2"
+react@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
readable-stream@^3.6.0:
version "3.6.2"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz"
@@ -493,6 +687,21 @@ safe-buffer@~5.2.0:
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+satori@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/satori/-/satori-0.9.1.tgz#59380f59be44ff825e58b5e2c8d0598240e15365"
+ integrity sha512-2ggMOiY8O8rIxQ6vywiw3LlBheWHbsOzu5hZdMXTDFKzE9sDHUOtJegGmGE+e9aRSO1ttttgXrcHVsHPKYU2GQ==
+ dependencies:
+ "@shuding/opentype.js" "1.4.0-beta.0"
+ css-background-parser "^0.1.0"
+ css-box-shadow "1.0.0-3"
+ css-to-react-native "^3.0.0"
+ emoji-regex "^10.2.1"
+ linebreak "^1.1.0"
+ parse-css-color "^0.2.1"
+ postcss-value-parser "^4.2.0"
+ yoga-wasm-web "^0.3.3"
+
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
@@ -503,6 +712,11 @@ streamsearch@^1.1.0:
resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
+string.prototype.codepointat@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc"
+ integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==
+
string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
@@ -518,6 +732,11 @@ strtok3@^7.0.0:
"@tokenizer/token" "^0.3.0"
peek-readable "^5.0.0"
+tiny-inflate@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
+ integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==
+
token-types@^5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz"
@@ -553,6 +772,14 @@ undici@^5.21.0:
dependencies:
busboy "^1.6.0"
+unicode-trie@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8"
+ integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==
+ dependencies:
+ pako "^0.2.5"
+ tiny-inflate "^1.0.0"
+
util-deprecate@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
@@ -590,3 +817,8 @@ ws@^8.13.0:
version "8.13.0"
resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz"
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+
+yoga-wasm-web@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba"
+ integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==