diff --git a/app/components/Planner.tsx b/app/components/Planner.tsx new file mode 100644 index 000000000..98fd66585 --- /dev/null +++ b/app/components/Planner.tsx @@ -0,0 +1,252 @@ +import type { TDImageAsset } from "@tldraw/tldraw"; +import { + Tldraw, + ColorStyle, + type TldrawApp, + TDShapeType, + TDAssetType, +} from "@tldraw/tldraw"; +import clsx from "clsx"; +import * as React from "react"; +import { useForceRefreshOnMount } from "~/hooks/useForceRefresh"; +import { useTranslation } from "~/hooks/useTranslation"; +import type { MainWeaponId, ModeShort, StageId } from "~/modules/in-game-lists"; +import { stageIds } from "~/modules/in-game-lists"; +import { mainWeaponIds } from "~/modules/in-game-lists"; +import { modesShort } from "~/modules/in-game-lists/modes"; +import { + mainWeaponImageUrl, + modeImageUrl, + outlinedMainWeaponImageUrl, + stageMinimapImageUrlWithEnding, + TLDRAW_URL, +} from "~/utils/urls"; +import { Button } from "./Button"; +import { Image } from "./Image"; +import { nanoid } from "nanoid"; +import randomInt from "just-random-integer"; +import type { LanguageCode } from "~/modules/i18n"; + +export default function Planner() { + const { t } = useTranslation(["common", "weapons"]); + const { i18n } = useTranslation(); + const appRef = React.useRef(); + const app = appRef.current!; + + useForceRefreshOnMount(); + + const handleMount = React.useCallback( + (mountedApp: TldrawApp) => { + appRef.current = mountedApp; + mountedApp.setSetting( + "language", + ourLanguageToTldrawLanguage(i18n.language) + ); + mountedApp.style({ color: ColorStyle.Red }); + }, + [i18n] + ); + + const handleAddImage = React.useCallback( + ({ + src, + size, + isLocked, + point, + cb, + }: { + src: string; + size: number[]; + isLocked: boolean; + point: number[]; + cb?: () => void; + }) => { + if (!app) return; + + const asset: TDImageAsset = { + id: src, + type: TDAssetType.Image, + fileName: "img", + src, + size, + }; + + // tldraw creator: + // "So image shapes in tldraw work like this: we add an asset to the app.assets table, then we reference that asset in the shape object itself. + // This lets us have multiple copies of an image on the canvas without having all of those take up memory individually" + + app.insertContent({ + assets: [asset], + shapes: [], + }); + + app.createShapes({ + id: nanoid(), + type: TDShapeType.Image, + assetId: src, + size, + isAspectRatioLocked: true, + isLocked, + point, + }); + cb?.(); + }, + [app] + ); + + const handleAddWeapon = React.useCallback( + (weaponId: MainWeaponId) => { + handleAddImage({ + src: `${outlinedMainWeaponImageUrl(weaponId)}.png`, + size: [45, 45], + isLocked: false, + point: [randomInt(250, 1000), randomInt(250, 750)], + cb: () => app.selectTool("select"), + }); + }, + [app, handleAddImage] + ); + + const handleAddBackgroundImage = React.useCallback( + ({ stageId, modeShort }: { stageId: StageId; modeShort: ModeShort }) => { + app.resetDocument(); + handleAddImage({ + src: stageMinimapImageUrlWithEnding({ stageId, modeShort }), + size: [1600, 900], + isLocked: true, + point: [65, 20], + }); + }, + [app, handleAddImage] + ); + + return ( + <> + +
+ {mainWeaponIds.map((weaponId) => { + return ( + + ); + })} +
+
+ + {t("common:plans.poweredBy", { name: "tldraw" })} + +
+ + + ); +} + +function StageBackgroundSelector({ + onAddBackground, +}: { + onAddBackground: ({ + stageId, + modeShort, + }: { + stageId: StageId; + modeShort: ModeShort; + }) => void; +}) { + const { t } = useTranslation(["game-misc", "common"]); + const [stageId, setStageId] = React.useState(stageIds[0]); + const [selectedMode, setSelectedMode] = React.useState("SZ"); + + return ( +
+ +
+ {modesShort.map((mode) => { + const selected = mode === selectedMode; + return ( + + ); + })} +
+ +
+ ); +} + +// when adding new language check from Tldraw codebase what is the matching +// language in TRANSLATIONS constant, or default to english if none found +const ourLanguageToTldrawLanguageMap: Record = { + "es-US": "es", + "es-ES": "es", + ko: "ko-kr", + nl: "en", + zh: "zh-ch", + // map to itself + da: "da", + de: "de", + en: "en", + fr: "fr", + it: "it", + ja: "ja", + ru: "ru", +}; +function ourLanguageToTldrawLanguage(ourLanguageUserSelected: string) { + for (const [ourLanguage, tldrawLanguage] of Object.entries( + ourLanguageToTldrawLanguageMap + )) { + if (ourLanguage === ourLanguageUserSelected) { + return tldrawLanguage; + } + } + + console.error(`No tldraw language found for: ${ourLanguageUserSelected}`); + return "en"; +} diff --git a/app/components/layout/nav-items.json b/app/components/layout/nav-items.json index 6cdf24785..322463aae 100644 --- a/app/components/layout/nav-items.json +++ b/app/components/layout/nav-items.json @@ -11,6 +11,11 @@ "url": "object-damage-calculator", "prefetch": true }, + { + "name": "plans", + "url": "plans", + "prefetch": false + }, { "name": "calendar", "url": "calendar", "prefetch": false }, { "name": "maps", "url": "maps", "prefetch": false }, { "name": "badges", "url": "badges", "prefetch": false }, diff --git a/app/hooks/useForceRefresh.tsx b/app/hooks/useForceRefresh.tsx new file mode 100644 index 000000000..db558bd5b --- /dev/null +++ b/app/hooks/useForceRefresh.tsx @@ -0,0 +1,9 @@ +import * as React from "react"; + +export function useForceRefreshOnMount() { + const [, setOne] = React.useState(0); + + React.useEffect(() => { + setOne(1); + }, []); +} diff --git a/app/modules/i18n/config.ts b/app/modules/i18n/config.ts index 80d84dd38..b01e33ca1 100644 --- a/app/modules/i18n/config.ts +++ b/app/modules/i18n/config.ts @@ -51,6 +51,8 @@ export const languages = [ }, ] as const; +export type LanguageCode = typeof languages[number]["code"]; + export const config = { supportedLngs: languages.map((lang) => lang.code), fallbackLng: DEFAULT_LANGUAGE, diff --git a/app/modules/i18n/index.ts b/app/modules/i18n/index.ts index d46768a1f..1214ba1bf 100644 --- a/app/modules/i18n/index.ts +++ b/app/modules/i18n/index.ts @@ -1,4 +1,4 @@ export { i18nLoader } from "./loader"; export { i18Instance } from "./loader.server"; export { i18next, i18nCookie } from "./i18next.server"; -export { DEFAULT_LANGUAGE, languages } from "./config"; +export { DEFAULT_LANGUAGE, languages, type LanguageCode } from "./config"; diff --git a/app/routes/contributions.tsx b/app/routes/contributions.tsx index 96776ee4c..03a0b21ce 100644 --- a/app/routes/contributions.tsx +++ b/app/routes/contributions.tsx @@ -9,6 +9,7 @@ import { GITHUB_CONTRIBUTORS_URL, LEAN_TWITTER, SENDOU_TWITTER_URL, + TWIG_TWITTER, UBERU_TWITTER, } from "~/utils/urls"; import { type SendouRouteHandle } from "~/utils/remix"; @@ -24,6 +25,8 @@ export const handle: SendouRouteHandle = { i18n: "contributions", }; +const PROGRAMMERS = ["DoubleCookies", "ElementUser", "remmycat"] as const; + const TRANSLATORS: Array<{ translators: Array; language: typeof languages[number]["code"]; @@ -83,6 +86,7 @@ export default function ContributionsPage() {

  • + {PROGRAMMERS.join(", ")} -{" "} {t("contributions:code")} @@ -105,6 +109,12 @@ export default function ContributionsPage() { {" "} - {t("contributions:uberu")}
  • +
  • + + Twig + {" "} + - {t("contributions:twig")} +
  • {TRANSLATORS.map(({ translators, language }) => (
  • {translators.join(", ")} - {t("contributions:translation")} ( diff --git a/app/routes/index.tsx b/app/routes/index.tsx index 44c0d46b3..758b8661a 100644 --- a/app/routes/index.tsx +++ b/app/routes/index.tsx @@ -24,6 +24,7 @@ import { mapsPage, navIconUrl, objectDamageCalculatorPage, + PLANNER_URL, plusSuggestionPage, userPage, } from "~/utils/urls"; @@ -108,6 +109,12 @@ export default function Index() { description={t("front:maps.description")} to={mapsPage()} /> + diff --git a/app/routes/plans.tsx b/app/routes/plans.tsx new file mode 100644 index 000000000..c2a999228 --- /dev/null +++ b/app/routes/plans.tsx @@ -0,0 +1,22 @@ +import { lazy, Suspense } from "react"; +import type { LinksFunction } from "@remix-run/node"; +import styles from "~/styles/plans.css"; +import type { SendouRouteHandle } from "~/utils/remix"; + +export const handle: SendouRouteHandle = { + i18n: ["weapons"], +}; + +export const links: LinksFunction = () => { + return [{ rel: "stylesheet", href: styles }]; +}; + +const Planner = lazy(() => import("~/components/Planner")); + +export default function MapPlannerPage() { + return ( + }> + + + ); +} diff --git a/app/styles/common.css b/app/styles/common.css index 9262e916b..86252d76a 100644 --- a/app/styles/common.css +++ b/app/styles/common.css @@ -266,7 +266,7 @@ select { font-size: var(--fonts-sm); font-weight: 500; padding-block: 3.5px; - padding-inline: var(--s-3) var(--s-7); + padding-inline: var(--s-3) var(--s-8); } /* Temporary solution for issue: https://github.com/Sendouc/sendou.ink/issues/1141 */ diff --git a/app/styles/plans.css b/app/styles/plans.css new file mode 100644 index 000000000..2ec185e1e --- /dev/null +++ b/app/styles/plans.css @@ -0,0 +1,92 @@ +div { + box-shadow: none !important; +} + +/** Hacky selector to remove the question mark popup on bottom left */ +button[data-state="closed"][aria-haspopup="dialog"] { + display: none; +} + +/* stylelint-disable selector-id-pattern */ +#TD-MenuPanel { + display: none; +} +/* stylelint-enable selector-id-pattern */ + +.layout__header { + display: none; +} + +.tl-canvas { + background-color: var(--bg); +} + +.plans__placeholder { + min-height: 100%; +} + +.plans__top-section { + position: fixed; + z-index: 10; + top: 3%; + left: 50%; + display: flex; + align-items: center; + padding: var(--s-3); + border: 1px solid var(--theme-very-transparent); + border-radius: 0 0 var(--rounded) var(--rounded); + background-color: var(--bg-darker); + gap: var(--s-4); + transform: translate(-50%, -42%); +} + +.plans__mode-buttons { + display: flex; + width: 100%; + align-items: center; + justify-content: center; +} + +.plans__mode-button { + padding: 0; + padding: var(--s-1-5); + border: none; + border-radius: var(--rounded-full); + background-color: transparent; + color: var(--theme); + opacity: 1 !important; + outline: initial; +} + +.plans__mode-button.selected { + background-color: var(--bg-mode-active); +} + +.plans__mode-img:not(.selected) { + filter: var(--inactive-image-filter); + opacity: 0.6; +} + +.plans__weapons-section { + position: fixed; + z-index: 10; + top: 15%; + display: flex; + width: 130px; + flex-wrap: wrap; + justify-content: center; + padding: var(--s-2); + border: 1px solid var(--theme-very-transparent); + border-radius: 0 var(--rounded) var(--rounded) 0; + background: var(--bg-darker); + gap: 2px; +} + +.plans__powered-by { + position: fixed; + z-index: 10; + right: 0.5%; + bottom: 0.5%; + color: var(--text-lighter); + font-size: var(--fonts-xxxs); +} diff --git a/app/utils/urls.ts b/app/utils/urls.ts index 4beabb755..7e8a9441b 100644 --- a/app/utils/urls.ts +++ b/app/utils/urls.ts @@ -12,8 +12,8 @@ import type { AbilityWithUnknown, MainWeaponId, SpecialWeaponId, - StageId, SubWeaponId, + StageId, } from "~/modules/in-game-lists/types"; import type navItems from "~/components/layout/nav-items.json"; import { type AuthErrorCode } from "~/modules/auth"; @@ -27,9 +27,11 @@ export const SENDOU_INK_PATREON_URL = "https://patreon.com/sendou"; export const SENDOU_INK_GITHUB_URL = "https://github.com/Sendouc/sendou.ink"; export const GITHUB_CONTRIBUTORS_URL = "https://github.com/Sendouc/sendou.ink/graphs/contributors"; +export const TLDRAW_URL = "https://www.tldraw.com/"; export const BORZOIC_TWITTER = "https://twitter.com/borzoic_"; export const LEAN_TWITTER = "https://twitter.com/LeanYoshi"; export const UBERU_TWITTER = "https://twitter.com/uberu5"; +export const TWIG_TWITTER = "https://twitter.com/TwigTheBluePik"; export const ipLabsMaps = (pool: string) => `https://maps.iplabs.ink/?3&pool=${pool}`; @@ -44,6 +46,7 @@ export const BUILDS_PAGE = "/builds"; export const CALENDAR_PAGE = "/calendar"; export const STOP_IMPERSONATING_URL = "/auth/impersonate/stop"; export const SEED_URL = "/seed"; +export const PLANNER_URL = "/plans"; export const COMMON_PREVIEW_IMAGE = "/img/layout/common-preview.png"; export const ERROR_GIRL_IMAGE_PATH = `/img/layout/error-girl`; @@ -125,6 +128,8 @@ export const weaponCategoryUrl = ( ) => `/img/weapon-categories/${category}`; export const mainWeaponImageUrl = (mainWeaponSplId: MainWeaponId) => `/img/main-weapons/${mainWeaponSplId}`; +export const outlinedMainWeaponImageUrl = (mainWeaponSplId: MainWeaponId) => + `/img/main-weapons-outlined/${mainWeaponSplId}`; export const subWeaponImageUrl = (subWeaponSplId: SubWeaponId) => `/img/sub-weapons/${subWeaponSplId}`; export const specialWeaponImageUrl = (specialWeaponSplId: SpecialWeaponId) => @@ -133,6 +138,13 @@ export const abilityImageUrl = (ability: AbilityWithUnknown) => `/img/abilities/${ability}`; export const modeImageUrl = (mode: ModeShort) => `/img/modes/${mode}`; export const stageImageUrl = (stageId: StageId) => `/img/stages/${stageId}`; +export const stageMinimapImageUrlWithEnding = ({ + stageId, + modeShort, +}: { + stageId: StageId; + modeShort: ModeShort; +}) => `/img/stage-minimaps/${stageId}-${modeShort}.jpeg`; export function resolveBaseUrl(url: string) { return new URL(url).host; diff --git a/package-lock.json b/package-lock.json index 448958095..51dfb2e4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@remix-run/node": "^1.7.4", "@remix-run/react": "^1.7.4", "@remix-run/serve": "^1.7.4", + "@tldraw/tldraw": "^1.26.2", "better-sqlite3": "^7.6.2", "clsx": "^1.2.1", "countries-list": "^2.6.1", @@ -24,8 +25,10 @@ "i18next-http-backend": "^1.4.4", "just-capitalize": "^3.1.1", "just-clone": "^6.1.1", + "just-random-integer": "^4.1.1", "just-shuffle": "^4.1.1", "markdown-to-jsx": "^7.1.7", + "nanoid": "^4.0.0", "node-cron": "3.0.2", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -2194,6 +2197,118 @@ "npm": ">=6.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", + "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" + }, + "node_modules/@floating-ui/dom": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", + "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", + "dependencies": { + "@floating-ui/core": "^0.7.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", + "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", + "dependencies": { + "@floating-ui/dom": "^0.5.3", + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.13.0.tgz", + "integrity": "sha512-CQ8Ykd51jYD1n05dtoX6ns6B9n/+6ZAxnWUAonvHC4kkuAemROYBhHkEB4tm1uVrRlE7gLDqXkAnY51Y0pRCWQ==", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.6.tgz", + "integrity": "sha512-9CWZ3+wCkClKHX+i5j+NyoBVqGf0pIskTo6Xl6ihGokYM2yqSSS68JIgeo+99UIHc+7vi9L3/SDSz/dWI9SNlA==", + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.10.tgz", + "integrity": "sha512-KkRMxhifWkRC45dhM9tqm0GXbb6NPYTGVYY3xx891IKc6p++DQrZTnmkVSNNO47OEERLfuP2KkPFPJBuu8z/wg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/icu-skeleton-parser": "1.3.14", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.14.tgz", + "integrity": "sha512-7bv60HQQcBb3+TSj+45tOb/CHV5z1hOpwdtS50jsSBXfB+YpGhnoRsZxSRksXeCxMy6xn6tA6VY2601BrrK+OA==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.13.0", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/intl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.5.1.tgz", + "integrity": "sha512-P01ZGuDDlcN8bHHBCEHspJPvs8WJeO8SXlUIcVGWhS3IN5vUgz0QKUXcKBFnJbEHhONJ+azlObVwvlDKsE+kUg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/fast-memoize": "1.2.6", + "@formatjs/icu-messageformat-parser": "2.1.10", + "@formatjs/intl-displaynames": "6.1.4", + "@formatjs/intl-listformat": "7.1.3", + "intl-messageformat": "10.2.1", + "tslib": "2.4.0" + }, + "peerDependencies": { + "typescript": "^4.7" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@formatjs/intl-displaynames": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.1.4.tgz", + "integrity": "sha512-sEbziGLsWQo6nA8ZUBcsDRlZzPg+uMVjDmbTalgGqRWLbdXuxMldTYdaCK+UptyJhkmNVM/erz3csTiyqamXHQ==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/intl-listformat": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.1.3.tgz", + "integrity": "sha512-rs0Kxl78PeRCedx2cmFoBqcun2Kf0bCQrF8ycna54sfePpDhMskvODWeI4G/xBioW01FjK7CJSvtJJ87hrr79A==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.31", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz", + "integrity": "sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA==", + "dependencies": { + "tslib": "2.4.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -2423,6 +2538,810 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.0.2.tgz", + "integrity": "sha512-0MtxV53FaEEBOKRgyLnEqHZKKDS5BldQ9oUBsKVXWI5FHbl2jp35qs+0aJET+K5hJDsc40kQUzP7g+wC7tqrqA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dialog": "1.0.2", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.0.tgz", + "integrity": "sha512-1MUuv24HCdepi41+qfv125EwMuxgQ+U+h0A9K3BjCO/J8nVRREKHHpkD9clwfnjEDk9hgGzCnff4aUKCPiRepw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.0.tgz", + "integrity": "sha512-8i1pf5dKjnq90Z8udnnXKzdCEV3/FYrfw0n/b6NvB6piXEn3fO1bOh7HBcpG8XrnIXzxlYu2oCcR38QpyLS/mg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context-menu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-1.0.0.tgz", + "integrity": "sha512-JkwOgdXwErwEEpsmgu0Ob8zD3gzWS1brPXnNGPyZEtR6/EYyDgruQYKiihXVsCrPCdrNUHawop9I1+6JTdXPTA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-menu": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context-menu/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context-menu/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.2.tgz", + "integrity": "sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.2.tgz", + "integrity": "sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-1.0.0.tgz", + "integrity": "sha512-Ptben3TxPWrZLbInO7zjAK73kmjYuStsxfg6ujgt+EywJyREoibhZYnsSNqC+UiOtl4PdW/MOHhxVDtew5fouQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", + "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.1.tgz", + "integrity": "sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.1.1.tgz", + "integrity": "sha512-xc3wQC59rsFylVbSusQCrrM+6695ppF730Q6yqzhRdqDcRNWIm2R6ngpzBoSOQMcwnq4p805F+Gr7xo4fmtN1A==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", + "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-1.0.0.tgz", + "integrity": "sha512-icW4C64T6nHh3Z4Q1fxO1RlSShouFF4UpUmPV8FLaJZfphDljannKErDuALDx4ClRLihAPZ9i+PrLNPoWS2DMA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.0", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.0.0", + "@radix-ui/react-portal": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-roving-focus": "1.0.0", + "@radix-ui/react-slot": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.4" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz", + "integrity": "sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz", + "integrity": "sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.0.tgz", + "integrity": "sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz", + "integrity": "sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz", + "integrity": "sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.2.tgz", + "integrity": "sha512-4tqZEl9w95R5mlZ/sFdgBnfhCBOEPepLIurBA5kt/qaAhldJ1tNQd0ngr0ET0AHbPotT4mwxMPr7a+MA/wbK0g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.0.1", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-arrow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", + "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.1.tgz", + "integrity": "sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.0.tgz", + "integrity": "sha512-k2dDd+1Wl0XWAMs9ZvAxxYsB9sOsEhrFQV4CINd7IUZf0wfdye4OHen9siwxvZImbzhgVeKTJi68OQmPRvVdMg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", + "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.0.tgz", + "integrity": "sha512-lHvO4MhvoWpeNbiJAoyDsEtbKqP2jkkdwsMVJ3kfqbkC71J/aXE6Th6gkZA1xHEqSku+t+UgoDjvE7Z3gsBpcg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.2.tgz", + "integrity": "sha512-11gUlok2rv5mu+KBtxniOKKNKjqC/uTbgFHWoQdbF46vMV+zjDaBvCtVDK9+MTddlpmlisGPGvvojX7Qm0yr+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.0.1", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-arrow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", + "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-popper": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.1.tgz", + "integrity": "sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", + "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", + "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", + "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.1.tgz", + "integrity": "sha512-K1hJcCMfWfiYUibRqf3V8r5Drpyf7rh44jnrwAbdvI5iCCijilBBeyQv9SKidYNZIopMdCyR9FnIjkHxHN0FcQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", + "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, "node_modules/@remix-run/dev": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-1.7.4.tgz", @@ -2701,6 +3620,14 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@stitches/react": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/react/-/react-1.2.8.tgz", + "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", + "peerDependencies": { + "react": ">= 16.3.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -2732,6 +3659,64 @@ "node": ">=12" } }, + "node_modules/@tldraw/core": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/@tldraw/core/-/core-1.20.1.tgz", + "integrity": "sha512-DEeu64TvgttifJPt51hFYrzc6fwpYpjDMcvlqN6RZ4CfQftv9ZaZJA2KWbqf9EQGJT01ujYH9UM6MdkWp3lTyg==", + "dependencies": { + "@tldraw/intersect": "^1.8.0", + "@tldraw/vec": "^1.8.0", + "@use-gesture/react": "^10.2.19", + "perfect-freehand": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tldraw/intersect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@tldraw/intersect/-/intersect-1.8.0.tgz", + "integrity": "sha512-0UarshNpyq2+O4o0xHMJIBgF0E630mes5CkMoO+D5xgYppSBIkeqYDcv0ujsmAhMKX1O6Y0ShuuHeflBEULUoQ==", + "dependencies": { + "@tldraw/vec": "^1.8.0" + } + }, + "node_modules/@tldraw/tldraw": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@tldraw/tldraw/-/tldraw-1.26.2.tgz", + "integrity": "sha512-quNY068Nq6geN4oGvTyGBjILYMi/XpaV8DTPes/JFWxqKxfOLlj9hsziwug+zIjPDa2k9EO4Q+yc0+z1RSFI9A==", + "dependencies": { + "@radix-ui/react-alert-dialog": "^1.0.0", + "@radix-ui/react-context-menu": "^1.0.0", + "@radix-ui/react-dialog": "^1.0.0", + "@radix-ui/react-dropdown-menu": "^1.0.0", + "@radix-ui/react-icons": "^1.1.1", + "@radix-ui/react-popover": "^1.0.0", + "@radix-ui/react-tooltip": "^1.0.0", + "@stitches/react": "^1.2.8", + "@tldraw/core": "^1.20.1", + "@tldraw/intersect": "^1.8.0", + "@tldraw/vec": "^1.8.0", + "browser-fs-access": "^0.31.0", + "idb-keyval": "^6.2.0", + "perfect-freehand": "^1.2.0", + "react-error-boundary": "^3.1.4", + "react-hotkeys-hook": "^3.4.7", + "react-intl": "^6.1.1", + "tslib": "^2.4.0", + "zustand": "^4.1.1" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tldraw/vec": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@tldraw/vec/-/vec-1.8.0.tgz", + "integrity": "sha512-GiS5Df3CzXY/fPBFcM0CKFERZfI4Cg1X33VPZX+NLo7Fwm/h9zu/aU24N1mG75Q9LuMnwKm7woxKr8BiUXGYCg==" + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -2849,6 +3834,15 @@ "@types/unist": "*" } }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -2962,14 +3956,12 @@ "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { "version": "18.0.24", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.24.tgz", "integrity": "sha512-wRJWT6ouziGUy+9uX0aW4YOJxAY0bG6/AOk5AW5QSvZqI7dk6VBIbXvcVgIw/W5Jrl24f77df98GEKTJGOLx7Q==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2997,8 +3989,7 @@ "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/semver": { "version": "7.3.12", @@ -3319,6 +4310,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@use-gesture/core": { + "version": "10.2.22", + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.2.22.tgz", + "integrity": "sha512-Ek0JZFYfk+hicLmoG094gm3YOuDMBNckHb988e59YOZoAkETT8dQSzT+g3QkSHSiP1m5wFXAGPSgxvOuwvGKHQ==" + }, + "node_modules/@use-gesture/react": { + "version": "10.2.22", + "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.2.22.tgz", + "integrity": "sha512-ECo7ig16SxBE06ENIURO1woKEB6TC8qY3a0rugJjQ2f1o0Tj28xS/eYNyJuqzQB5YT0q5IrF7ZFpbx1p/5ohYA==", + "dependencies": { + "@use-gesture/core": "10.2.22" + }, + "peerDependencies": { + "react": ">= 16.8.0" + } + }, "node_modules/@web3-storage/multipart-parser": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", @@ -3564,6 +4571,26 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/aria-hidden": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.2.tgz", + "integrity": "sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.9.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/aria-query": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.2.tgz", @@ -4067,6 +5094,11 @@ "node": ">=8" } }, + "node_modules/browser-fs-access": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/browser-fs-access/-/browser-fs-access-0.31.1.tgz", + "integrity": "sha512-jMz9f56DkLM7LyA8wZYO7CtpoF3RdUk1/FXrnRNybgV0R5eqk/fgFWR0k5IMjPYgK4jmZecytP/UDO5WBi9Dhg==" + }, "node_modules/browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", @@ -5232,6 +6264,11 @@ "node": ">=8" } }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -7545,6 +8582,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -8084,12 +9129,30 @@ "@babel/runtime": "^7.7.6" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "node_modules/hotkeys-js": { + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.4.tgz", + "integrity": "sha512-2zuLt85Ta+gIyvs4N88pCYskNrxf1TFv3LR9t5mdAZIX8BcgQQ48F2opUptvHa6m8zsy5v/a0i9mWzTrlNWU0Q==" + }, "node_modules/html-parse-stringify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", @@ -8288,6 +9351,14 @@ "node": ">=0.10.0" } }, + "node_modules/idb-keyval": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", + "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", + "dependencies": { + "safari-14-idb-fix": "^3.0.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -8438,6 +9509,17 @@ "node": ">= 0.4" } }, + "node_modules/intl-messageformat": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.2.1.tgz", + "integrity": "sha512-1lrJG2qKzcC1TVzYu1VuB1yiY68LU5rwpbHa2THCzA67Vutkz7+1lv5U20K3Lz5RAiH78zxNztMEtchokMWv8A==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/fast-memoize": "1.2.6", + "@formatjs/icu-messageformat-parser": "2.1.10", + "tslib": "2.4.0" + } + }, "node_modules/intl-parse-accept-language": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/intl-parse-accept-language/-/intl-parse-accept-language-1.0.0.tgz", @@ -8446,6 +9528,14 @@ "node": ">=14" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ip": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", @@ -9240,6 +10330,11 @@ "resolved": "https://registry.npmjs.org/just-clone/-/just-clone-6.1.1.tgz", "integrity": "sha512-V24KLIid8uaG7ayOymGfheNHtxgrbpzj1UznQnF9vQZMHlKGTSLT3WWmFx62OXSQPwk1Tn+uo+H5/Xhb4bL9pA==" }, + "node_modules/just-random-integer": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/just-random-integer/-/just-random-integer-4.1.1.tgz", + "integrity": "sha512-4BjDeKr8tJgi7G2YrUF9FY1DkiwO/ToJ6tzzXM0seLGXJCeBwZ/QiEaNECYuA+QFPqV5zJALo6LG9hHPCAwQEA==" + }, "node_modules/just-shuffle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/just-shuffle/-/just-shuffle-4.1.1.tgz", @@ -10716,15 +11811,14 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", + "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^14 || ^16 || >=18" } }, "node_modules/nanomatch": { @@ -11439,6 +12533,11 @@ "through2": "^2.0.3" } }, + "node_modules/perfect-freehand": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.0.tgz", + "integrity": "sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw==" + }, "node_modules/periscopic": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", @@ -11592,6 +12691,18 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/prebuild-install": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.0.tgz", @@ -11951,6 +13062,21 @@ "react": "^18.2.0" } }, + "node_modules/react-error-boundary": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", + "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13.1" + } + }, "node_modules/react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", @@ -11973,6 +13099,18 @@ "react-dom": ">= 16.x" } }, + "node_modules/react-hotkeys-hook": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-3.4.7.tgz", + "integrity": "sha512-+bbPmhPAl6ns9VkXkNNyxlmCAIyDAcWbB76O4I0ntr3uWCRuIQf/aRLartUahe9chVMPj+OEzzfk3CQSjclUEQ==", + "dependencies": { + "hotkeys-js": "3.9.4" + }, + "peerDependencies": { + "react": ">=16.8.1", + "react-dom": ">=16.8.1" + } + }, "node_modules/react-i18next": { "version": "11.18.6", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", @@ -11994,6 +13132,32 @@ } } }, + "node_modules/react-intl": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.2.1.tgz", + "integrity": "sha512-hYxcSamgoA3Mvc55nwhTF1v15T0NUSkaV/EScMNVZXg0kRyaMAoNHkCi9/9H+TnXWNiWrcWH9bjlMlJwrG2V7g==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/icu-messageformat-parser": "2.1.10", + "@formatjs/intl": "2.5.1", + "@formatjs/intl-displaynames": "6.1.4", + "@formatjs/intl-listformat": "7.1.3", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "10.2.1", + "tslib": "2.4.0" + }, + "peerDependencies": { + "react": "^16.6.0 || 17 || 18", + "typescript": "^4.7" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -12014,6 +13178,51 @@ "react-dom": "^16.8.0 || ^17 || ^18" } }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-router": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", @@ -12038,6 +13247,28 @@ "react-dom": ">=16.8" } }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-universal-interface": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", @@ -12719,6 +13950,11 @@ "node": ">=6" } }, + "node_modules/safari-14-idb-fix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", + "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -14524,7 +15760,7 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14905,6 +16141,26 @@ "node": ">=0.10.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-consistent-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/use-consistent-value/-/use-consistent-value-1.0.0.tgz", @@ -14919,6 +16175,48 @@ "react": ">=16" } }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -15407,6 +16705,29 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "node_modules/zustand": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.4.tgz", + "integrity": "sha512-k2jVOlWo8p4R83mQ+/uyB8ILPO2PCJOf+QVjcL+1PbMCk1w5OoPYpAIxy9zd93FSfmJqoH6lGdwzzjwqJIRU5A==", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "immer": ">=9.0", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, "node_modules/zwitch": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", @@ -16889,6 +18210,106 @@ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz", "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==" }, + "@floating-ui/core": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", + "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==" + }, + "@floating-ui/dom": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", + "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", + "requires": { + "@floating-ui/core": "^0.7.3" + } + }, + "@floating-ui/react-dom": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz", + "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==", + "requires": { + "@floating-ui/dom": "^0.5.3", + "use-isomorphic-layout-effect": "^1.1.1" + } + }, + "@formatjs/ecma402-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.13.0.tgz", + "integrity": "sha512-CQ8Ykd51jYD1n05dtoX6ns6B9n/+6ZAxnWUAonvHC4kkuAemROYBhHkEB4tm1uVrRlE7gLDqXkAnY51Y0pRCWQ==", + "requires": { + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + } + }, + "@formatjs/fast-memoize": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.6.tgz", + "integrity": "sha512-9CWZ3+wCkClKHX+i5j+NyoBVqGf0pIskTo6Xl6ihGokYM2yqSSS68JIgeo+99UIHc+7vi9L3/SDSz/dWI9SNlA==", + "requires": { + "tslib": "2.4.0" + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.10.tgz", + "integrity": "sha512-KkRMxhifWkRC45dhM9tqm0GXbb6NPYTGVYY3xx891IKc6p++DQrZTnmkVSNNO47OEERLfuP2KkPFPJBuu8z/wg==", + "requires": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/icu-skeleton-parser": "1.3.14", + "tslib": "2.4.0" + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.14.tgz", + "integrity": "sha512-7bv60HQQcBb3+TSj+45tOb/CHV5z1hOpwdtS50jsSBXfB+YpGhnoRsZxSRksXeCxMy6xn6tA6VY2601BrrK+OA==", + "requires": { + "@formatjs/ecma402-abstract": "1.13.0", + "tslib": "2.4.0" + } + }, + "@formatjs/intl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.5.1.tgz", + "integrity": "sha512-P01ZGuDDlcN8bHHBCEHspJPvs8WJeO8SXlUIcVGWhS3IN5vUgz0QKUXcKBFnJbEHhONJ+azlObVwvlDKsE+kUg==", + "requires": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/fast-memoize": "1.2.6", + "@formatjs/icu-messageformat-parser": "2.1.10", + "@formatjs/intl-displaynames": "6.1.4", + "@formatjs/intl-listformat": "7.1.3", + "intl-messageformat": "10.2.1", + "tslib": "2.4.0" + } + }, + "@formatjs/intl-displaynames": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.1.4.tgz", + "integrity": "sha512-sEbziGLsWQo6nA8ZUBcsDRlZzPg+uMVjDmbTalgGqRWLbdXuxMldTYdaCK+UptyJhkmNVM/erz3csTiyqamXHQ==", + "requires": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + } + }, + "@formatjs/intl-listformat": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.1.3.tgz", + "integrity": "sha512-rs0Kxl78PeRCedx2cmFoBqcun2Kf0bCQrF8ycna54sfePpDhMskvODWeI4G/xBioW01FjK7CJSvtJJ87hrr79A==", + "requires": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/intl-localematcher": "0.2.31", + "tslib": "2.4.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.31", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz", + "integrity": "sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA==", + "requires": { + "tslib": "2.4.0" + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -17062,6 +18483,630 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, + "@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-alert-dialog": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.0.2.tgz", + "integrity": "sha512-0MtxV53FaEEBOKRgyLnEqHZKKDS5BldQ9oUBsKVXWI5FHbl2jp35qs+0aJET+K5hJDsc40kQUzP7g+wC7tqrqA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dialog": "1.0.2", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-arrow": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.0.tgz", + "integrity": "sha512-1MUuv24HCdepi41+qfv125EwMuxgQ+U+h0A9K3BjCO/J8nVRREKHHpkD9clwfnjEDk9hgGzCnff4aUKCPiRepw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + } + } + }, + "@radix-ui/react-collection": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.0.tgz", + "integrity": "sha512-8i1pf5dKjnq90Z8udnnXKzdCEV3/FYrfw0n/b6NvB6piXEn3fO1bOh7HBcpG8XrnIXzxlYu2oCcR38QpyLS/mg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-slot": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + } + } + }, + "@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context-menu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-1.0.0.tgz", + "integrity": "sha512-JkwOgdXwErwEEpsmgu0Ob8zD3gzWS1brPXnNGPyZEtR6/EYyDgruQYKiihXVsCrPCdrNUHawop9I1+6JTdXPTA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-menu": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + } + } + }, + "@radix-ui/react-dialog": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.2.tgz", + "integrity": "sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + } + }, + "@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-dismissable-layer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.2.tgz", + "integrity": "sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + } + }, + "@radix-ui/react-dropdown-menu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-1.0.0.tgz", + "integrity": "sha512-Ptben3TxPWrZLbInO7zjAK73kmjYuStsxfg6ujgt+EywJyREoibhZYnsSNqC+UiOtl4PdW/MOHhxVDtew5fouQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + } + } + }, + "@radix-ui/react-focus-guards": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", + "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.1.tgz", + "integrity": "sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-icons": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.1.1.tgz", + "integrity": "sha512-xc3wQC59rsFylVbSusQCrrM+6695ppF730Q6yqzhRdqDcRNWIm2R6ngpzBoSOQMcwnq4p805F+Gr7xo4fmtN1A==", + "requires": {} + }, + "@radix-ui/react-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", + "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-menu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-1.0.0.tgz", + "integrity": "sha512-icW4C64T6nHh3Z4Q1fxO1RlSShouFF4UpUmPV8FLaJZfphDljannKErDuALDx4ClRLihAPZ9i+PrLNPoWS2DMA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.0", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.0.0", + "@radix-ui/react-portal": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-roving-focus": "1.0.0", + "@radix-ui/react-slot": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.4" + }, + "dependencies": { + "@radix-ui/react-dismissable-layer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz", + "integrity": "sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.0" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz", + "integrity": "sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-portal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.0.tgz", + "integrity": "sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-use-escape-keydown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz", + "integrity": "sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "react-remove-scroll": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz", + "integrity": "sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==", + "requires": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + } + } + } + }, + "@radix-ui/react-popover": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.2.tgz", + "integrity": "sha512-4tqZEl9w95R5mlZ/sFdgBnfhCBOEPepLIurBA5kt/qaAhldJ1tNQd0ngr0ET0AHbPotT4mwxMPr7a+MA/wbK0g==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.0.1", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "dependencies": { + "@radix-ui/react-arrow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", + "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + } + }, + "@radix-ui/react-popper": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.1.tgz", + "integrity": "sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + } + } + } + }, + "@radix-ui/react-popper": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.0.tgz", + "integrity": "sha512-k2dDd+1Wl0XWAMs9ZvAxxYsB9sOsEhrFQV4CINd7IUZf0wfdye4OHen9siwxvZImbzhgVeKTJi68OQmPRvVdMg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + } + } + }, + "@radix-ui/react-portal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", + "integrity": "sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + } + }, + "@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-roving-focus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.0.tgz", + "integrity": "sha512-lHvO4MhvoWpeNbiJAoyDsEtbKqP2jkkdwsMVJ3kfqbkC71J/aXE6Th6gkZA1xHEqSku+t+UgoDjvE7Z3gsBpcg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.0", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", + "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.0" + } + }, + "@radix-ui/react-slot": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", + "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + } + } + }, + "@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-tooltip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.2.tgz", + "integrity": "sha512-11gUlok2rv5mu+KBtxniOKKNKjqC/uTbgFHWoQdbF46vMV+zjDaBvCtVDK9+MTddlpmlisGPGvvojX7Qm0yr+g==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.0.1", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.1" + }, + "dependencies": { + "@radix-ui/react-arrow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", + "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + } + }, + "@radix-ui/react-popper": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.0.1.tgz", + "integrity": "sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + } + } + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", + "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-escape-keydown": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.2.tgz", + "integrity": "sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", + "integrity": "sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.0" + } + }, + "@radix-ui/react-use-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz", + "integrity": "sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-visually-hidden": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.1.tgz", + "integrity": "sha512-K1hJcCMfWfiYUibRqf3V8r5Drpyf7rh44jnrwAbdvI5iCCijilBBeyQv9SKidYNZIopMdCyR9FnIjkHxHN0FcQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + } + }, + "@radix-ui/rect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", + "integrity": "sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, "@remix-run/dev": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-1.7.4.tgz", @@ -17276,6 +19321,12 @@ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, + "@stitches/react": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/react/-/react-1.2.8.tgz", + "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", + "requires": {} + }, "@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -17301,6 +19352,56 @@ "pretty-format": "^27.0.2" } }, + "@tldraw/core": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/@tldraw/core/-/core-1.20.1.tgz", + "integrity": "sha512-DEeu64TvgttifJPt51hFYrzc6fwpYpjDMcvlqN6RZ4CfQftv9ZaZJA2KWbqf9EQGJT01ujYH9UM6MdkWp3lTyg==", + "requires": { + "@tldraw/intersect": "^1.8.0", + "@tldraw/vec": "^1.8.0", + "@use-gesture/react": "^10.2.19", + "perfect-freehand": "^1.1.0" + } + }, + "@tldraw/intersect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@tldraw/intersect/-/intersect-1.8.0.tgz", + "integrity": "sha512-0UarshNpyq2+O4o0xHMJIBgF0E630mes5CkMoO+D5xgYppSBIkeqYDcv0ujsmAhMKX1O6Y0ShuuHeflBEULUoQ==", + "requires": { + "@tldraw/vec": "^1.8.0" + } + }, + "@tldraw/tldraw": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@tldraw/tldraw/-/tldraw-1.26.2.tgz", + "integrity": "sha512-quNY068Nq6geN4oGvTyGBjILYMi/XpaV8DTPes/JFWxqKxfOLlj9hsziwug+zIjPDa2k9EO4Q+yc0+z1RSFI9A==", + "requires": { + "@radix-ui/react-alert-dialog": "^1.0.0", + "@radix-ui/react-context-menu": "^1.0.0", + "@radix-ui/react-dialog": "^1.0.0", + "@radix-ui/react-dropdown-menu": "^1.0.0", + "@radix-ui/react-icons": "^1.1.1", + "@radix-ui/react-popover": "^1.0.0", + "@radix-ui/react-tooltip": "^1.0.0", + "@stitches/react": "^1.2.8", + "@tldraw/core": "^1.20.1", + "@tldraw/intersect": "^1.8.0", + "@tldraw/vec": "^1.8.0", + "browser-fs-access": "^0.31.0", + "idb-keyval": "^6.2.0", + "perfect-freehand": "^1.2.0", + "react-error-boundary": "^3.1.4", + "react-hotkeys-hook": "^3.4.7", + "react-intl": "^6.1.1", + "tslib": "^2.4.0", + "zustand": "^4.1.1" + } + }, + "@tldraw/vec": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@tldraw/vec/-/vec-1.8.0.tgz", + "integrity": "sha512-GiS5Df3CzXY/fPBFcM0CKFERZfI4Cg1X33VPZX+NLo7Fwm/h9zu/aU24N1mG75Q9LuMnwKm7woxKr8BiUXGYCg==" + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -17415,6 +19516,15 @@ "@types/unist": "*" } }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -17528,14 +19638,12 @@ "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/react": { "version": "18.0.24", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.24.tgz", "integrity": "sha512-wRJWT6ouziGUy+9uX0aW4YOJxAY0bG6/AOk5AW5QSvZqI7dk6VBIbXvcVgIw/W5Jrl24f77df98GEKTJGOLx7Q==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -17563,8 +19671,7 @@ "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/semver": { "version": "7.3.12", @@ -17765,6 +19872,19 @@ } } }, + "@use-gesture/core": { + "version": "10.2.22", + "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.2.22.tgz", + "integrity": "sha512-Ek0JZFYfk+hicLmoG094gm3YOuDMBNckHb988e59YOZoAkETT8dQSzT+g3QkSHSiP1m5wFXAGPSgxvOuwvGKHQ==" + }, + "@use-gesture/react": { + "version": "10.2.22", + "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.2.22.tgz", + "integrity": "sha512-ECo7ig16SxBE06ENIURO1woKEB6TC8qY3a0rugJjQ2f1o0Tj28xS/eYNyJuqzQB5YT0q5IrF7ZFpbx1p/5ohYA==", + "requires": { + "@use-gesture/core": "10.2.22" + } + }, "@web3-storage/multipart-parser": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", @@ -17954,6 +20074,14 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "aria-hidden": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.2.tgz", + "integrity": "sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==", + "requires": { + "tslib": "^2.0.0" + } + }, "aria-query": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.2.tgz", @@ -18331,6 +20459,11 @@ "fill-range": "^7.0.1" } }, + "browser-fs-access": { + "version": "0.31.1", + "resolved": "https://registry.npmjs.org/browser-fs-access/-/browser-fs-access-0.31.1.tgz", + "integrity": "sha512-jMz9f56DkLM7LyA8wZYO7CtpoF3RdUk1/FXrnRNybgV0R5eqk/fgFWR0k5IMjPYgK4jmZecytP/UDO5WBi9Dhg==" + }, "browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", @@ -19191,6 +21324,11 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -20845,6 +22983,11 @@ "has-symbols": "^1.0.1" } }, + "get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==" + }, "get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -21262,12 +23405,32 @@ "@babel/runtime": "^7.7.6" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "hotkeys-js": { + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-3.9.4.tgz", + "integrity": "sha512-2zuLt85Ta+gIyvs4N88pCYskNrxf1TFv3LR9t5mdAZIX8BcgQQ48F2opUptvHa6m8zsy5v/a0i9mWzTrlNWU0Q==" + }, "html-parse-stringify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", @@ -21415,6 +23578,14 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "idb-keyval": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", + "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", + "requires": { + "safari-14-idb-fix": "^3.0.0" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -21527,11 +23698,30 @@ "side-channel": "^1.0.4" } }, + "intl-messageformat": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.2.1.tgz", + "integrity": "sha512-1lrJG2qKzcC1TVzYu1VuB1yiY68LU5rwpbHa2THCzA67Vutkz7+1lv5U20K3Lz5RAiH78zxNztMEtchokMWv8A==", + "requires": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/fast-memoize": "1.2.6", + "@formatjs/icu-messageformat-parser": "2.1.10", + "tslib": "2.4.0" + } + }, "intl-parse-accept-language": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/intl-parse-accept-language/-/intl-parse-accept-language-1.0.0.tgz", "integrity": "sha512-YFMSV91JNBOSjw1cOfw2tup6hDP7mkz+2AUV7W1L1AM6ntgI75qC1ZeFpjPGMrWp+upmBRTX2fJWQ8c7jsUWpA==" }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "ip": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", @@ -22118,6 +24308,11 @@ "resolved": "https://registry.npmjs.org/just-clone/-/just-clone-6.1.1.tgz", "integrity": "sha512-V24KLIid8uaG7ayOymGfheNHtxgrbpzj1UznQnF9vQZMHlKGTSLT3WWmFx62OXSQPwk1Tn+uo+H5/Xhb4bL9pA==" }, + "just-random-integer": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/just-random-integer/-/just-random-integer-4.1.1.tgz", + "integrity": "sha512-4BjDeKr8tJgi7G2YrUF9FY1DkiwO/ToJ6tzzXM0seLGXJCeBwZ/QiEaNECYuA+QFPqV5zJALo6LG9hHPCAwQEA==" + }, "just-shuffle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/just-shuffle/-/just-shuffle-4.1.1.tgz", @@ -23128,10 +25323,9 @@ } }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", + "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==" }, "nanomatch": { "version": "1.2.13", @@ -23660,6 +25854,11 @@ "through2": "^2.0.3" } }, + "perfect-freehand": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.0.tgz", + "integrity": "sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw==" + }, "periscopic": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", @@ -23726,6 +25925,14 @@ "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" + }, + "dependencies": { + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + } } }, "postcss-media-query-parser": { @@ -24043,6 +26250,14 @@ "scheduler": "^0.23.0" } }, + "react-error-boundary": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", + "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "requires": { + "@babel/runtime": "^7.12.5" + } + }, "react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", @@ -24057,6 +26272,14 @@ "prop-types": "^15.5.7" } }, + "react-hotkeys-hook": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-3.4.7.tgz", + "integrity": "sha512-+bbPmhPAl6ns9VkXkNNyxlmCAIyDAcWbB76O4I0ntr3uWCRuIQf/aRLartUahe9chVMPj+OEzzfk3CQSjclUEQ==", + "requires": { + "hotkeys-js": "3.9.4" + } + }, "react-i18next": { "version": "11.18.6", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", @@ -24066,6 +26289,23 @@ "html-parse-stringify": "^3.0.1" } }, + "react-intl": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.2.1.tgz", + "integrity": "sha512-hYxcSamgoA3Mvc55nwhTF1v15T0NUSkaV/EScMNVZXg0kRyaMAoNHkCi9/9H+TnXWNiWrcWH9bjlMlJwrG2V7g==", + "requires": { + "@formatjs/ecma402-abstract": "1.13.0", + "@formatjs/icu-messageformat-parser": "2.1.10", + "@formatjs/intl": "2.5.1", + "@formatjs/intl-displaynames": "6.1.4", + "@formatjs/intl-listformat": "7.1.3", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "10.2.1", + "tslib": "2.4.0" + } + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -24081,6 +26321,27 @@ "warning": "^4.0.2" } }, + "react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "requires": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + } + }, + "react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "requires": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + } + }, "react-router": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", @@ -24098,6 +26359,16 @@ "react-router": "6.3.0" } }, + "react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "requires": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + } + }, "react-universal-interface": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", @@ -24621,6 +26892,11 @@ "mri": "^1.1.0" } }, + "safari-14-idb-fix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", + "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -26019,7 +28295,7 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true + "devOptional": true }, "unbox-primitive": { "version": "1.0.2", @@ -26280,6 +28556,14 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "requires": { + "tslib": "^2.0.0" + } + }, "use-consistent-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/use-consistent-value/-/use-consistent-value-1.0.0.tgz", @@ -26288,6 +28572,27 @@ "fast-deep-equal": "^3.1.3" } }, + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} + }, + "use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "requires": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, "util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -26646,6 +28951,14 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz", "integrity": "sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==" }, + "zustand": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.4.tgz", + "integrity": "sha512-k2jVOlWo8p4R83mQ+/uyB8ILPO2PCJOf+QVjcL+1PbMCk1w5OoPYpAIxy9zd93FSfmJqoH6lGdwzzjwqJIRU5A==", + "requires": { + "use-sync-external-store": "1.2.0" + } + }, "zwitch": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", diff --git a/package.json b/package.json index d188eea50..bd66b176d 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "check-translation-jsons": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/check-translation-jsons.ts", "check-translation-jsons:no-write": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/check-translation-jsons.ts --no-write", "replace-img-names": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/replace-img-names.ts", + "replace-weapon-names": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/replace-weapon-names.ts", "remove-bad-custom-urls": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register scripts/remove-bad-custom-urls.ts", "lint:ts": "eslint . --ext .ts,.tsx", "lint:styles": "stylelint \"app/styles/**/*.css\"", @@ -36,6 +37,7 @@ "@remix-run/node": "^1.7.4", "@remix-run/react": "^1.7.4", "@remix-run/serve": "^1.7.4", + "@tldraw/tldraw": "^1.26.2", "better-sqlite3": "^7.6.2", "clsx": "^1.2.1", "countries-list": "^2.6.1", @@ -48,8 +50,10 @@ "i18next-http-backend": "^1.4.4", "just-capitalize": "^3.1.1", "just-clone": "^6.1.1", + "just-random-integer": "^4.1.1", "just-shuffle": "^4.1.1", "markdown-to-jsx": "^7.1.7", + "nanoid": "^4.0.0", "node-cron": "3.0.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/public/img/layout/plans.avif b/public/img/layout/plans.avif new file mode 100644 index 000000000..8ccb3a6ef Binary files /dev/null and b/public/img/layout/plans.avif differ diff --git a/public/img/layout/plans.png b/public/img/layout/plans.png new file mode 100644 index 000000000..cbae7d7fe Binary files /dev/null and b/public/img/layout/plans.png differ diff --git a/public/img/main-weapons-outlined/0.avif b/public/img/main-weapons-outlined/0.avif new file mode 100644 index 000000000..84a6c1343 Binary files /dev/null and b/public/img/main-weapons-outlined/0.avif differ diff --git a/public/img/main-weapons-outlined/0.png b/public/img/main-weapons-outlined/0.png new file mode 100644 index 000000000..97634fb25 Binary files /dev/null and b/public/img/main-weapons-outlined/0.png differ diff --git a/public/img/main-weapons-outlined/10.avif b/public/img/main-weapons-outlined/10.avif new file mode 100644 index 000000000..08f07e939 Binary files /dev/null and b/public/img/main-weapons-outlined/10.avif differ diff --git a/public/img/main-weapons-outlined/10.png b/public/img/main-weapons-outlined/10.png new file mode 100644 index 000000000..45f803f42 Binary files /dev/null and b/public/img/main-weapons-outlined/10.png differ diff --git a/public/img/main-weapons-outlined/1000.avif b/public/img/main-weapons-outlined/1000.avif new file mode 100644 index 000000000..31209f488 Binary files /dev/null and b/public/img/main-weapons-outlined/1000.avif differ diff --git a/public/img/main-weapons-outlined/1000.png b/public/img/main-weapons-outlined/1000.png new file mode 100644 index 000000000..066f359ed Binary files /dev/null and b/public/img/main-weapons-outlined/1000.png differ diff --git a/public/img/main-weapons-outlined/1010.avif b/public/img/main-weapons-outlined/1010.avif new file mode 100644 index 000000000..bd8388299 Binary files /dev/null and b/public/img/main-weapons-outlined/1010.avif differ diff --git a/public/img/main-weapons-outlined/1010.png b/public/img/main-weapons-outlined/1010.png new file mode 100644 index 000000000..999a18df4 Binary files /dev/null and b/public/img/main-weapons-outlined/1010.png differ diff --git a/public/img/main-weapons-outlined/1020.avif b/public/img/main-weapons-outlined/1020.avif new file mode 100644 index 000000000..71855ec07 Binary files /dev/null and b/public/img/main-weapons-outlined/1020.avif differ diff --git a/public/img/main-weapons-outlined/1020.png b/public/img/main-weapons-outlined/1020.png new file mode 100644 index 000000000..025ec3cd7 Binary files /dev/null and b/public/img/main-weapons-outlined/1020.png differ diff --git a/public/img/main-weapons-outlined/1030.avif b/public/img/main-weapons-outlined/1030.avif new file mode 100644 index 000000000..2323a1ba0 Binary files /dev/null and b/public/img/main-weapons-outlined/1030.avif differ diff --git a/public/img/main-weapons-outlined/1030.png b/public/img/main-weapons-outlined/1030.png new file mode 100644 index 000000000..727983698 Binary files /dev/null and b/public/img/main-weapons-outlined/1030.png differ diff --git a/public/img/main-weapons-outlined/1100.avif b/public/img/main-weapons-outlined/1100.avif new file mode 100644 index 000000000..0cbdf2c8c Binary files /dev/null and b/public/img/main-weapons-outlined/1100.avif differ diff --git a/public/img/main-weapons-outlined/1100.png b/public/img/main-weapons-outlined/1100.png new file mode 100644 index 000000000..7a2c517ea Binary files /dev/null and b/public/img/main-weapons-outlined/1100.png differ diff --git a/public/img/main-weapons-outlined/1110.avif b/public/img/main-weapons-outlined/1110.avif new file mode 100644 index 000000000..56360cf3c Binary files /dev/null and b/public/img/main-weapons-outlined/1110.avif differ diff --git a/public/img/main-weapons-outlined/1110.png b/public/img/main-weapons-outlined/1110.png new file mode 100644 index 000000000..9ae118099 Binary files /dev/null and b/public/img/main-weapons-outlined/1110.png differ diff --git a/public/img/main-weapons-outlined/20.avif b/public/img/main-weapons-outlined/20.avif new file mode 100644 index 000000000..7e8247c9c Binary files /dev/null and b/public/img/main-weapons-outlined/20.avif differ diff --git a/public/img/main-weapons-outlined/20.png b/public/img/main-weapons-outlined/20.png new file mode 100644 index 000000000..908663be5 Binary files /dev/null and b/public/img/main-weapons-outlined/20.png differ diff --git a/public/img/main-weapons-outlined/200.avif b/public/img/main-weapons-outlined/200.avif new file mode 100644 index 000000000..ff0a61498 Binary files /dev/null and b/public/img/main-weapons-outlined/200.avif differ diff --git a/public/img/main-weapons-outlined/200.png b/public/img/main-weapons-outlined/200.png new file mode 100644 index 000000000..86e4c24a0 Binary files /dev/null and b/public/img/main-weapons-outlined/200.png differ diff --git a/public/img/main-weapons-outlined/2000.avif b/public/img/main-weapons-outlined/2000.avif new file mode 100644 index 000000000..7482e9302 Binary files /dev/null and b/public/img/main-weapons-outlined/2000.avif differ diff --git a/public/img/main-weapons-outlined/2000.png b/public/img/main-weapons-outlined/2000.png new file mode 100644 index 000000000..fd083f1b2 Binary files /dev/null and b/public/img/main-weapons-outlined/2000.png differ diff --git a/public/img/main-weapons-outlined/2010.avif b/public/img/main-weapons-outlined/2010.avif new file mode 100644 index 000000000..19ab746c2 Binary files /dev/null and b/public/img/main-weapons-outlined/2010.avif differ diff --git a/public/img/main-weapons-outlined/2010.png b/public/img/main-weapons-outlined/2010.png new file mode 100644 index 000000000..d72cbd066 Binary files /dev/null and b/public/img/main-weapons-outlined/2010.png differ diff --git a/public/img/main-weapons-outlined/2020.avif b/public/img/main-weapons-outlined/2020.avif new file mode 100644 index 000000000..482dbaba5 Binary files /dev/null and b/public/img/main-weapons-outlined/2020.avif differ diff --git a/public/img/main-weapons-outlined/2020.png b/public/img/main-weapons-outlined/2020.png new file mode 100644 index 000000000..e7fd5fd9e Binary files /dev/null and b/public/img/main-weapons-outlined/2020.png differ diff --git a/public/img/main-weapons-outlined/2030.avif b/public/img/main-weapons-outlined/2030.avif new file mode 100644 index 000000000..044a840e5 Binary files /dev/null and b/public/img/main-weapons-outlined/2030.avif differ diff --git a/public/img/main-weapons-outlined/2030.png b/public/img/main-weapons-outlined/2030.png new file mode 100644 index 000000000..dc502a533 Binary files /dev/null and b/public/img/main-weapons-outlined/2030.png differ diff --git a/public/img/main-weapons-outlined/2040.avif b/public/img/main-weapons-outlined/2040.avif new file mode 100644 index 000000000..b8bad01e5 Binary files /dev/null and b/public/img/main-weapons-outlined/2040.avif differ diff --git a/public/img/main-weapons-outlined/2040.png b/public/img/main-weapons-outlined/2040.png new file mode 100644 index 000000000..0ffd5613c Binary files /dev/null and b/public/img/main-weapons-outlined/2040.png differ diff --git a/public/img/main-weapons-outlined/2050.avif b/public/img/main-weapons-outlined/2050.avif new file mode 100644 index 000000000..4548a62a7 Binary files /dev/null and b/public/img/main-weapons-outlined/2050.avif differ diff --git a/public/img/main-weapons-outlined/2050.png b/public/img/main-weapons-outlined/2050.png new file mode 100644 index 000000000..30e5c7c0b Binary files /dev/null and b/public/img/main-weapons-outlined/2050.png differ diff --git a/public/img/main-weapons-outlined/2060.avif b/public/img/main-weapons-outlined/2060.avif new file mode 100644 index 000000000..0d169c0d3 Binary files /dev/null and b/public/img/main-weapons-outlined/2060.avif differ diff --git a/public/img/main-weapons-outlined/2060.png b/public/img/main-weapons-outlined/2060.png new file mode 100644 index 000000000..b10d47ab0 Binary files /dev/null and b/public/img/main-weapons-outlined/2060.png differ diff --git a/public/img/main-weapons-outlined/210.avif b/public/img/main-weapons-outlined/210.avif new file mode 100644 index 000000000..072a0bcdf Binary files /dev/null and b/public/img/main-weapons-outlined/210.avif differ diff --git a/public/img/main-weapons-outlined/210.png b/public/img/main-weapons-outlined/210.png new file mode 100644 index 000000000..fed578229 Binary files /dev/null and b/public/img/main-weapons-outlined/210.png differ diff --git a/public/img/main-weapons-outlined/220.avif b/public/img/main-weapons-outlined/220.avif new file mode 100644 index 000000000..689d5c73d Binary files /dev/null and b/public/img/main-weapons-outlined/220.avif differ diff --git a/public/img/main-weapons-outlined/220.png b/public/img/main-weapons-outlined/220.png new file mode 100644 index 000000000..3cd8388ef Binary files /dev/null and b/public/img/main-weapons-outlined/220.png differ diff --git a/public/img/main-weapons-outlined/230.avif b/public/img/main-weapons-outlined/230.avif new file mode 100644 index 000000000..910b75ccf Binary files /dev/null and b/public/img/main-weapons-outlined/230.avif differ diff --git a/public/img/main-weapons-outlined/230.png b/public/img/main-weapons-outlined/230.png new file mode 100644 index 000000000..c7c634f8e Binary files /dev/null and b/public/img/main-weapons-outlined/230.png differ diff --git a/public/img/main-weapons-outlined/240.avif b/public/img/main-weapons-outlined/240.avif new file mode 100644 index 000000000..c59c32bae Binary files /dev/null and b/public/img/main-weapons-outlined/240.avif differ diff --git a/public/img/main-weapons-outlined/240.png b/public/img/main-weapons-outlined/240.png new file mode 100644 index 000000000..d11c1e6a8 Binary files /dev/null and b/public/img/main-weapons-outlined/240.png differ diff --git a/public/img/main-weapons-outlined/250.avif b/public/img/main-weapons-outlined/250.avif new file mode 100644 index 000000000..509dc7730 Binary files /dev/null and b/public/img/main-weapons-outlined/250.avif differ diff --git a/public/img/main-weapons-outlined/250.png b/public/img/main-weapons-outlined/250.png new file mode 100644 index 000000000..d56dcb96d Binary files /dev/null and b/public/img/main-weapons-outlined/250.png differ diff --git a/public/img/main-weapons-outlined/30.avif b/public/img/main-weapons-outlined/30.avif new file mode 100644 index 000000000..eaf1f1656 Binary files /dev/null and b/public/img/main-weapons-outlined/30.avif differ diff --git a/public/img/main-weapons-outlined/30.png b/public/img/main-weapons-outlined/30.png new file mode 100644 index 000000000..075a61027 Binary files /dev/null and b/public/img/main-weapons-outlined/30.png differ diff --git a/public/img/main-weapons-outlined/300.avif b/public/img/main-weapons-outlined/300.avif new file mode 100644 index 000000000..6a9fadb09 Binary files /dev/null and b/public/img/main-weapons-outlined/300.avif differ diff --git a/public/img/main-weapons-outlined/300.png b/public/img/main-weapons-outlined/300.png new file mode 100644 index 000000000..962c5de56 Binary files /dev/null and b/public/img/main-weapons-outlined/300.png differ diff --git a/public/img/main-weapons-outlined/3000.avif b/public/img/main-weapons-outlined/3000.avif new file mode 100644 index 000000000..91a838799 Binary files /dev/null and b/public/img/main-weapons-outlined/3000.avif differ diff --git a/public/img/main-weapons-outlined/3000.png b/public/img/main-weapons-outlined/3000.png new file mode 100644 index 000000000..0a164e159 Binary files /dev/null and b/public/img/main-weapons-outlined/3000.png differ diff --git a/public/img/main-weapons-outlined/3010.avif b/public/img/main-weapons-outlined/3010.avif new file mode 100644 index 000000000..e6403b576 Binary files /dev/null and b/public/img/main-weapons-outlined/3010.avif differ diff --git a/public/img/main-weapons-outlined/3010.png b/public/img/main-weapons-outlined/3010.png new file mode 100644 index 000000000..cdfa9cf13 Binary files /dev/null and b/public/img/main-weapons-outlined/3010.png differ diff --git a/public/img/main-weapons-outlined/3020.avif b/public/img/main-weapons-outlined/3020.avif new file mode 100644 index 000000000..cb8213082 Binary files /dev/null and b/public/img/main-weapons-outlined/3020.avif differ diff --git a/public/img/main-weapons-outlined/3020.png b/public/img/main-weapons-outlined/3020.png new file mode 100644 index 000000000..6052f9467 Binary files /dev/null and b/public/img/main-weapons-outlined/3020.png differ diff --git a/public/img/main-weapons-outlined/3030.avif b/public/img/main-weapons-outlined/3030.avif new file mode 100644 index 000000000..312c2c628 Binary files /dev/null and b/public/img/main-weapons-outlined/3030.avif differ diff --git a/public/img/main-weapons-outlined/3030.png b/public/img/main-weapons-outlined/3030.png new file mode 100644 index 000000000..edf7ced35 Binary files /dev/null and b/public/img/main-weapons-outlined/3030.png differ diff --git a/public/img/main-weapons-outlined/3040.avif b/public/img/main-weapons-outlined/3040.avif new file mode 100644 index 000000000..94379e68d Binary files /dev/null and b/public/img/main-weapons-outlined/3040.avif differ diff --git a/public/img/main-weapons-outlined/3040.png b/public/img/main-weapons-outlined/3040.png new file mode 100644 index 000000000..900d643cc Binary files /dev/null and b/public/img/main-weapons-outlined/3040.png differ diff --git a/public/img/main-weapons-outlined/310.avif b/public/img/main-weapons-outlined/310.avif new file mode 100644 index 000000000..cdb3e022c Binary files /dev/null and b/public/img/main-weapons-outlined/310.avif differ diff --git a/public/img/main-weapons-outlined/310.png b/public/img/main-weapons-outlined/310.png new file mode 100644 index 000000000..46a6c9947 Binary files /dev/null and b/public/img/main-weapons-outlined/310.png differ diff --git a/public/img/main-weapons-outlined/40.avif b/public/img/main-weapons-outlined/40.avif new file mode 100644 index 000000000..07a7e37f1 Binary files /dev/null and b/public/img/main-weapons-outlined/40.avif differ diff --git a/public/img/main-weapons-outlined/40.png b/public/img/main-weapons-outlined/40.png new file mode 100644 index 000000000..e1364df15 Binary files /dev/null and b/public/img/main-weapons-outlined/40.png differ diff --git a/public/img/main-weapons-outlined/400.avif b/public/img/main-weapons-outlined/400.avif new file mode 100644 index 000000000..82b80e814 Binary files /dev/null and b/public/img/main-weapons-outlined/400.avif differ diff --git a/public/img/main-weapons-outlined/400.png b/public/img/main-weapons-outlined/400.png new file mode 100644 index 000000000..be93e7216 Binary files /dev/null and b/public/img/main-weapons-outlined/400.png differ diff --git a/public/img/main-weapons-outlined/4000.avif b/public/img/main-weapons-outlined/4000.avif new file mode 100644 index 000000000..b49fe9e1a Binary files /dev/null and b/public/img/main-weapons-outlined/4000.avif differ diff --git a/public/img/main-weapons-outlined/4000.png b/public/img/main-weapons-outlined/4000.png new file mode 100644 index 000000000..9f3095620 Binary files /dev/null and b/public/img/main-weapons-outlined/4000.png differ diff --git a/public/img/main-weapons-outlined/4010.avif b/public/img/main-weapons-outlined/4010.avif new file mode 100644 index 000000000..d9e05841f Binary files /dev/null and b/public/img/main-weapons-outlined/4010.avif differ diff --git a/public/img/main-weapons-outlined/4010.png b/public/img/main-weapons-outlined/4010.png new file mode 100644 index 000000000..bf680d13d Binary files /dev/null and b/public/img/main-weapons-outlined/4010.png differ diff --git a/public/img/main-weapons-outlined/4020.avif b/public/img/main-weapons-outlined/4020.avif new file mode 100644 index 000000000..aae9139c3 Binary files /dev/null and b/public/img/main-weapons-outlined/4020.avif differ diff --git a/public/img/main-weapons-outlined/4020.png b/public/img/main-weapons-outlined/4020.png new file mode 100644 index 000000000..73148caf0 Binary files /dev/null and b/public/img/main-weapons-outlined/4020.png differ diff --git a/public/img/main-weapons-outlined/4030.avif b/public/img/main-weapons-outlined/4030.avif new file mode 100644 index 000000000..96ca29fd1 Binary files /dev/null and b/public/img/main-weapons-outlined/4030.avif differ diff --git a/public/img/main-weapons-outlined/4030.png b/public/img/main-weapons-outlined/4030.png new file mode 100644 index 000000000..e91c22e6e Binary files /dev/null and b/public/img/main-weapons-outlined/4030.png differ diff --git a/public/img/main-weapons-outlined/4040.avif b/public/img/main-weapons-outlined/4040.avif new file mode 100644 index 000000000..42677443c Binary files /dev/null and b/public/img/main-weapons-outlined/4040.avif differ diff --git a/public/img/main-weapons-outlined/4040.png b/public/img/main-weapons-outlined/4040.png new file mode 100644 index 000000000..1f06f22ef Binary files /dev/null and b/public/img/main-weapons-outlined/4040.png differ diff --git a/public/img/main-weapons-outlined/45.avif b/public/img/main-weapons-outlined/45.avif new file mode 100644 index 000000000..c4efb313d Binary files /dev/null and b/public/img/main-weapons-outlined/45.avif differ diff --git a/public/img/main-weapons-outlined/45.png b/public/img/main-weapons-outlined/45.png new file mode 100644 index 000000000..106a79f07 Binary files /dev/null and b/public/img/main-weapons-outlined/45.png differ diff --git a/public/img/main-weapons-outlined/50.avif b/public/img/main-weapons-outlined/50.avif new file mode 100644 index 000000000..5e7cb7a4c Binary files /dev/null and b/public/img/main-weapons-outlined/50.avif differ diff --git a/public/img/main-weapons-outlined/50.png b/public/img/main-weapons-outlined/50.png new file mode 100644 index 000000000..a99884d05 Binary files /dev/null and b/public/img/main-weapons-outlined/50.png differ diff --git a/public/img/main-weapons-outlined/5000.avif b/public/img/main-weapons-outlined/5000.avif new file mode 100644 index 000000000..1bf3a50ae Binary files /dev/null and b/public/img/main-weapons-outlined/5000.avif differ diff --git a/public/img/main-weapons-outlined/5000.png b/public/img/main-weapons-outlined/5000.png new file mode 100644 index 000000000..9d6dfb6f5 Binary files /dev/null and b/public/img/main-weapons-outlined/5000.png differ diff --git a/public/img/main-weapons-outlined/5010.avif b/public/img/main-weapons-outlined/5010.avif new file mode 100644 index 000000000..b6c6e768c Binary files /dev/null and b/public/img/main-weapons-outlined/5010.avif differ diff --git a/public/img/main-weapons-outlined/5010.png b/public/img/main-weapons-outlined/5010.png new file mode 100644 index 000000000..8d38a1e81 Binary files /dev/null and b/public/img/main-weapons-outlined/5010.png differ diff --git a/public/img/main-weapons-outlined/5020.avif b/public/img/main-weapons-outlined/5020.avif new file mode 100644 index 000000000..0a2146d93 Binary files /dev/null and b/public/img/main-weapons-outlined/5020.avif differ diff --git a/public/img/main-weapons-outlined/5020.png b/public/img/main-weapons-outlined/5020.png new file mode 100644 index 000000000..165ba1e6b Binary files /dev/null and b/public/img/main-weapons-outlined/5020.png differ diff --git a/public/img/main-weapons-outlined/5030.avif b/public/img/main-weapons-outlined/5030.avif new file mode 100644 index 000000000..6e042c8bd Binary files /dev/null and b/public/img/main-weapons-outlined/5030.avif differ diff --git a/public/img/main-weapons-outlined/5030.png b/public/img/main-weapons-outlined/5030.png new file mode 100644 index 000000000..a95e6a94c Binary files /dev/null and b/public/img/main-weapons-outlined/5030.png differ diff --git a/public/img/main-weapons-outlined/5040.avif b/public/img/main-weapons-outlined/5040.avif new file mode 100644 index 000000000..88d29edeb Binary files /dev/null and b/public/img/main-weapons-outlined/5040.avif differ diff --git a/public/img/main-weapons-outlined/5040.png b/public/img/main-weapons-outlined/5040.png new file mode 100644 index 000000000..dd2285487 Binary files /dev/null and b/public/img/main-weapons-outlined/5040.png differ diff --git a/public/img/main-weapons-outlined/60.avif b/public/img/main-weapons-outlined/60.avif new file mode 100644 index 000000000..575657c13 Binary files /dev/null and b/public/img/main-weapons-outlined/60.avif differ diff --git a/public/img/main-weapons-outlined/60.png b/public/img/main-weapons-outlined/60.png new file mode 100644 index 000000000..cb6b717c2 Binary files /dev/null and b/public/img/main-weapons-outlined/60.png differ diff --git a/public/img/main-weapons-outlined/6000.avif b/public/img/main-weapons-outlined/6000.avif new file mode 100644 index 000000000..70454e436 Binary files /dev/null and b/public/img/main-weapons-outlined/6000.avif differ diff --git a/public/img/main-weapons-outlined/6000.png b/public/img/main-weapons-outlined/6000.png new file mode 100644 index 000000000..6d2a70aad Binary files /dev/null and b/public/img/main-weapons-outlined/6000.png differ diff --git a/public/img/main-weapons-outlined/6010.avif b/public/img/main-weapons-outlined/6010.avif new file mode 100644 index 000000000..f53128811 Binary files /dev/null and b/public/img/main-weapons-outlined/6010.avif differ diff --git a/public/img/main-weapons-outlined/6010.png b/public/img/main-weapons-outlined/6010.png new file mode 100644 index 000000000..fcd549b16 Binary files /dev/null and b/public/img/main-weapons-outlined/6010.png differ diff --git a/public/img/main-weapons-outlined/6020.avif b/public/img/main-weapons-outlined/6020.avif new file mode 100644 index 000000000..231d119a8 Binary files /dev/null and b/public/img/main-weapons-outlined/6020.avif differ diff --git a/public/img/main-weapons-outlined/6020.png b/public/img/main-weapons-outlined/6020.png new file mode 100644 index 000000000..1f66e1c63 Binary files /dev/null and b/public/img/main-weapons-outlined/6020.png differ diff --git a/public/img/main-weapons-outlined/70.avif b/public/img/main-weapons-outlined/70.avif new file mode 100644 index 000000000..5fa697968 Binary files /dev/null and b/public/img/main-weapons-outlined/70.avif differ diff --git a/public/img/main-weapons-outlined/70.png b/public/img/main-weapons-outlined/70.png new file mode 100644 index 000000000..b8e8b46ed Binary files /dev/null and b/public/img/main-weapons-outlined/70.png differ diff --git a/public/img/main-weapons-outlined/7010.avif b/public/img/main-weapons-outlined/7010.avif new file mode 100644 index 000000000..664ed927d Binary files /dev/null and b/public/img/main-weapons-outlined/7010.avif differ diff --git a/public/img/main-weapons-outlined/7010.png b/public/img/main-weapons-outlined/7010.png new file mode 100644 index 000000000..54c32be95 Binary files /dev/null and b/public/img/main-weapons-outlined/7010.png differ diff --git a/public/img/main-weapons-outlined/7020.avif b/public/img/main-weapons-outlined/7020.avif new file mode 100644 index 000000000..f43506f9c Binary files /dev/null and b/public/img/main-weapons-outlined/7020.avif differ diff --git a/public/img/main-weapons-outlined/7020.png b/public/img/main-weapons-outlined/7020.png new file mode 100644 index 000000000..59cc65582 Binary files /dev/null and b/public/img/main-weapons-outlined/7020.png differ diff --git a/public/img/main-weapons-outlined/80.avif b/public/img/main-weapons-outlined/80.avif new file mode 100644 index 000000000..e5c968ded Binary files /dev/null and b/public/img/main-weapons-outlined/80.avif differ diff --git a/public/img/main-weapons-outlined/80.png b/public/img/main-weapons-outlined/80.png new file mode 100644 index 000000000..ba0d5e2ba Binary files /dev/null and b/public/img/main-weapons-outlined/80.png differ diff --git a/public/img/main-weapons-outlined/8000.avif b/public/img/main-weapons-outlined/8000.avif new file mode 100644 index 000000000..da79c8cca Binary files /dev/null and b/public/img/main-weapons-outlined/8000.avif differ diff --git a/public/img/main-weapons-outlined/8000.png b/public/img/main-weapons-outlined/8000.png new file mode 100644 index 000000000..906e6a480 Binary files /dev/null and b/public/img/main-weapons-outlined/8000.png differ diff --git a/public/img/main-weapons-outlined/8010.avif b/public/img/main-weapons-outlined/8010.avif new file mode 100644 index 000000000..4f6f3924f Binary files /dev/null and b/public/img/main-weapons-outlined/8010.avif differ diff --git a/public/img/main-weapons-outlined/8010.png b/public/img/main-weapons-outlined/8010.png new file mode 100644 index 000000000..540c85e31 Binary files /dev/null and b/public/img/main-weapons-outlined/8010.png differ diff --git a/public/img/main-weapons-outlined/90.avif b/public/img/main-weapons-outlined/90.avif new file mode 100644 index 000000000..6aef90aa6 Binary files /dev/null and b/public/img/main-weapons-outlined/90.avif differ diff --git a/public/img/main-weapons-outlined/90.png b/public/img/main-weapons-outlined/90.png new file mode 100644 index 000000000..31c29bf2b Binary files /dev/null and b/public/img/main-weapons-outlined/90.png differ diff --git a/public/img/planner-maps/test.png b/public/img/planner-maps/test.png new file mode 100644 index 000000000..63b595fd2 Binary files /dev/null and b/public/img/planner-maps/test.png differ diff --git a/public/img/stage-minimaps/0-CB.jpeg b/public/img/stage-minimaps/0-CB.jpeg new file mode 100644 index 000000000..aba438bb2 Binary files /dev/null and b/public/img/stage-minimaps/0-CB.jpeg differ diff --git a/public/img/stage-minimaps/0-RM.jpeg b/public/img/stage-minimaps/0-RM.jpeg new file mode 100644 index 000000000..eb2ba3600 Binary files /dev/null and b/public/img/stage-minimaps/0-RM.jpeg differ diff --git a/public/img/stage-minimaps/0-SZ.jpeg b/public/img/stage-minimaps/0-SZ.jpeg new file mode 100644 index 000000000..feb0d5ce9 Binary files /dev/null and b/public/img/stage-minimaps/0-SZ.jpeg differ diff --git a/public/img/stage-minimaps/0-TC.jpeg b/public/img/stage-minimaps/0-TC.jpeg new file mode 100644 index 000000000..6a4799d62 Binary files /dev/null and b/public/img/stage-minimaps/0-TC.jpeg differ diff --git a/public/img/stage-minimaps/0-TW.jpeg b/public/img/stage-minimaps/0-TW.jpeg new file mode 100644 index 000000000..ff664faa1 Binary files /dev/null and b/public/img/stage-minimaps/0-TW.jpeg differ diff --git a/public/img/stage-minimaps/1-CB.jpeg b/public/img/stage-minimaps/1-CB.jpeg new file mode 100644 index 000000000..a7aceabce Binary files /dev/null and b/public/img/stage-minimaps/1-CB.jpeg differ diff --git a/public/img/stage-minimaps/1-RM.jpeg b/public/img/stage-minimaps/1-RM.jpeg new file mode 100644 index 000000000..63b595fd2 Binary files /dev/null and b/public/img/stage-minimaps/1-RM.jpeg differ diff --git a/public/img/stage-minimaps/1-SZ.jpeg b/public/img/stage-minimaps/1-SZ.jpeg new file mode 100644 index 000000000..00136cc02 Binary files /dev/null and b/public/img/stage-minimaps/1-SZ.jpeg differ diff --git a/public/img/stage-minimaps/1-TC.jpeg b/public/img/stage-minimaps/1-TC.jpeg new file mode 100644 index 000000000..e5535f4e9 Binary files /dev/null and b/public/img/stage-minimaps/1-TC.jpeg differ diff --git a/public/img/stage-minimaps/1-TW.jpeg b/public/img/stage-minimaps/1-TW.jpeg new file mode 100644 index 000000000..55cc04e3e Binary files /dev/null and b/public/img/stage-minimaps/1-TW.jpeg differ diff --git a/public/img/stage-minimaps/10-CB.jpeg b/public/img/stage-minimaps/10-CB.jpeg new file mode 100644 index 000000000..fe67d310f Binary files /dev/null and b/public/img/stage-minimaps/10-CB.jpeg differ diff --git a/public/img/stage-minimaps/10-RM.jpeg b/public/img/stage-minimaps/10-RM.jpeg new file mode 100644 index 000000000..7cd07a590 Binary files /dev/null and b/public/img/stage-minimaps/10-RM.jpeg differ diff --git a/public/img/stage-minimaps/10-SZ.jpeg b/public/img/stage-minimaps/10-SZ.jpeg new file mode 100644 index 000000000..ddc47e6e7 Binary files /dev/null and b/public/img/stage-minimaps/10-SZ.jpeg differ diff --git a/public/img/stage-minimaps/10-TC.jpeg b/public/img/stage-minimaps/10-TC.jpeg new file mode 100644 index 000000000..37b1bc7fa Binary files /dev/null and b/public/img/stage-minimaps/10-TC.jpeg differ diff --git a/public/img/stage-minimaps/10-TW.jpeg b/public/img/stage-minimaps/10-TW.jpeg new file mode 100644 index 000000000..047fcd800 Binary files /dev/null and b/public/img/stage-minimaps/10-TW.jpeg differ diff --git a/public/img/stage-minimaps/11-CB.jpeg b/public/img/stage-minimaps/11-CB.jpeg new file mode 100644 index 000000000..02e7e7484 Binary files /dev/null and b/public/img/stage-minimaps/11-CB.jpeg differ diff --git a/public/img/stage-minimaps/11-RM.jpeg b/public/img/stage-minimaps/11-RM.jpeg new file mode 100644 index 000000000..740333d16 Binary files /dev/null and b/public/img/stage-minimaps/11-RM.jpeg differ diff --git a/public/img/stage-minimaps/11-SZ.jpeg b/public/img/stage-minimaps/11-SZ.jpeg new file mode 100644 index 000000000..5ead03950 Binary files /dev/null and b/public/img/stage-minimaps/11-SZ.jpeg differ diff --git a/public/img/stage-minimaps/11-TC.jpeg b/public/img/stage-minimaps/11-TC.jpeg new file mode 100644 index 000000000..7ca504c35 Binary files /dev/null and b/public/img/stage-minimaps/11-TC.jpeg differ diff --git a/public/img/stage-minimaps/11-TW.jpeg b/public/img/stage-minimaps/11-TW.jpeg new file mode 100644 index 000000000..0d6a2d31a Binary files /dev/null and b/public/img/stage-minimaps/11-TW.jpeg differ diff --git a/public/img/stage-minimaps/2-CB.jpeg b/public/img/stage-minimaps/2-CB.jpeg new file mode 100644 index 000000000..be4ac5856 Binary files /dev/null and b/public/img/stage-minimaps/2-CB.jpeg differ diff --git a/public/img/stage-minimaps/2-RM.jpeg b/public/img/stage-minimaps/2-RM.jpeg new file mode 100644 index 000000000..08d056f7a Binary files /dev/null and b/public/img/stage-minimaps/2-RM.jpeg differ diff --git a/public/img/stage-minimaps/2-SZ.jpeg b/public/img/stage-minimaps/2-SZ.jpeg new file mode 100644 index 000000000..900241c14 Binary files /dev/null and b/public/img/stage-minimaps/2-SZ.jpeg differ diff --git a/public/img/stage-minimaps/2-TC.jpeg b/public/img/stage-minimaps/2-TC.jpeg new file mode 100644 index 000000000..2d08ab9c8 Binary files /dev/null and b/public/img/stage-minimaps/2-TC.jpeg differ diff --git a/public/img/stage-minimaps/2-TW.jpeg b/public/img/stage-minimaps/2-TW.jpeg new file mode 100644 index 000000000..e0efe0a79 Binary files /dev/null and b/public/img/stage-minimaps/2-TW.jpeg differ diff --git a/public/img/stage-minimaps/3-CB.jpeg b/public/img/stage-minimaps/3-CB.jpeg new file mode 100644 index 000000000..ba1b6d0b4 Binary files /dev/null and b/public/img/stage-minimaps/3-CB.jpeg differ diff --git a/public/img/stage-minimaps/3-RM.jpeg b/public/img/stage-minimaps/3-RM.jpeg new file mode 100644 index 000000000..c7e86887e Binary files /dev/null and b/public/img/stage-minimaps/3-RM.jpeg differ diff --git a/public/img/stage-minimaps/3-SZ.jpeg b/public/img/stage-minimaps/3-SZ.jpeg new file mode 100644 index 000000000..88b36e6bb Binary files /dev/null and b/public/img/stage-minimaps/3-SZ.jpeg differ diff --git a/public/img/stage-minimaps/3-TC.jpeg b/public/img/stage-minimaps/3-TC.jpeg new file mode 100644 index 000000000..3f65b9443 Binary files /dev/null and b/public/img/stage-minimaps/3-TC.jpeg differ diff --git a/public/img/stage-minimaps/3-TW.jpeg b/public/img/stage-minimaps/3-TW.jpeg new file mode 100644 index 000000000..617cbd345 Binary files /dev/null and b/public/img/stage-minimaps/3-TW.jpeg differ diff --git a/public/img/stage-minimaps/4-CB.jpeg b/public/img/stage-minimaps/4-CB.jpeg new file mode 100644 index 000000000..984e8caca Binary files /dev/null and b/public/img/stage-minimaps/4-CB.jpeg differ diff --git a/public/img/stage-minimaps/4-RM.jpeg b/public/img/stage-minimaps/4-RM.jpeg new file mode 100644 index 000000000..760f68bea Binary files /dev/null and b/public/img/stage-minimaps/4-RM.jpeg differ diff --git a/public/img/stage-minimaps/4-SZ.jpeg b/public/img/stage-minimaps/4-SZ.jpeg new file mode 100644 index 000000000..b0485caf3 Binary files /dev/null and b/public/img/stage-minimaps/4-SZ.jpeg differ diff --git a/public/img/stage-minimaps/4-TC.jpeg b/public/img/stage-minimaps/4-TC.jpeg new file mode 100644 index 000000000..0f59a9bd3 Binary files /dev/null and b/public/img/stage-minimaps/4-TC.jpeg differ diff --git a/public/img/stage-minimaps/4-TW.jpeg b/public/img/stage-minimaps/4-TW.jpeg new file mode 100644 index 000000000..219337aec Binary files /dev/null and b/public/img/stage-minimaps/4-TW.jpeg differ diff --git a/public/img/stage-minimaps/5-CB.jpeg b/public/img/stage-minimaps/5-CB.jpeg new file mode 100644 index 000000000..31510bcbf Binary files /dev/null and b/public/img/stage-minimaps/5-CB.jpeg differ diff --git a/public/img/stage-minimaps/5-RM.jpeg b/public/img/stage-minimaps/5-RM.jpeg new file mode 100644 index 000000000..547ca866a Binary files /dev/null and b/public/img/stage-minimaps/5-RM.jpeg differ diff --git a/public/img/stage-minimaps/5-SZ.jpeg b/public/img/stage-minimaps/5-SZ.jpeg new file mode 100644 index 000000000..75234cb2f Binary files /dev/null and b/public/img/stage-minimaps/5-SZ.jpeg differ diff --git a/public/img/stage-minimaps/5-TC.jpeg b/public/img/stage-minimaps/5-TC.jpeg new file mode 100644 index 000000000..136109116 Binary files /dev/null and b/public/img/stage-minimaps/5-TC.jpeg differ diff --git a/public/img/stage-minimaps/5-TW.jpeg b/public/img/stage-minimaps/5-TW.jpeg new file mode 100644 index 000000000..e857d01ae Binary files /dev/null and b/public/img/stage-minimaps/5-TW.jpeg differ diff --git a/public/img/stage-minimaps/6-CB.jpeg b/public/img/stage-minimaps/6-CB.jpeg new file mode 100644 index 000000000..ffa3961ce Binary files /dev/null and b/public/img/stage-minimaps/6-CB.jpeg differ diff --git a/public/img/stage-minimaps/6-RM.jpeg b/public/img/stage-minimaps/6-RM.jpeg new file mode 100644 index 000000000..378b224ad Binary files /dev/null and b/public/img/stage-minimaps/6-RM.jpeg differ diff --git a/public/img/stage-minimaps/6-SZ.jpeg b/public/img/stage-minimaps/6-SZ.jpeg new file mode 100644 index 000000000..f36e76cba Binary files /dev/null and b/public/img/stage-minimaps/6-SZ.jpeg differ diff --git a/public/img/stage-minimaps/6-TC.jpeg b/public/img/stage-minimaps/6-TC.jpeg new file mode 100644 index 000000000..36c2e1677 Binary files /dev/null and b/public/img/stage-minimaps/6-TC.jpeg differ diff --git a/public/img/stage-minimaps/6-TW.jpeg b/public/img/stage-minimaps/6-TW.jpeg new file mode 100644 index 000000000..901103dd3 Binary files /dev/null and b/public/img/stage-minimaps/6-TW.jpeg differ diff --git a/public/img/stage-minimaps/7-CB.jpeg b/public/img/stage-minimaps/7-CB.jpeg new file mode 100644 index 000000000..070b3d249 Binary files /dev/null and b/public/img/stage-minimaps/7-CB.jpeg differ diff --git a/public/img/stage-minimaps/7-RM.jpeg b/public/img/stage-minimaps/7-RM.jpeg new file mode 100644 index 000000000..605bfc1fd Binary files /dev/null and b/public/img/stage-minimaps/7-RM.jpeg differ diff --git a/public/img/stage-minimaps/7-SZ.jpeg b/public/img/stage-minimaps/7-SZ.jpeg new file mode 100644 index 000000000..38129069f Binary files /dev/null and b/public/img/stage-minimaps/7-SZ.jpeg differ diff --git a/public/img/stage-minimaps/7-TC.jpeg b/public/img/stage-minimaps/7-TC.jpeg new file mode 100644 index 000000000..394952018 Binary files /dev/null and b/public/img/stage-minimaps/7-TC.jpeg differ diff --git a/public/img/stage-minimaps/7-TW.jpeg b/public/img/stage-minimaps/7-TW.jpeg new file mode 100644 index 000000000..f553b3c64 Binary files /dev/null and b/public/img/stage-minimaps/7-TW.jpeg differ diff --git a/public/img/stage-minimaps/8-CB.jpeg b/public/img/stage-minimaps/8-CB.jpeg new file mode 100644 index 000000000..06a741d34 Binary files /dev/null and b/public/img/stage-minimaps/8-CB.jpeg differ diff --git a/public/img/stage-minimaps/8-RM.jpeg b/public/img/stage-minimaps/8-RM.jpeg new file mode 100644 index 000000000..8937bd9f3 Binary files /dev/null and b/public/img/stage-minimaps/8-RM.jpeg differ diff --git a/public/img/stage-minimaps/8-SZ.jpeg b/public/img/stage-minimaps/8-SZ.jpeg new file mode 100644 index 000000000..b0d7da44c Binary files /dev/null and b/public/img/stage-minimaps/8-SZ.jpeg differ diff --git a/public/img/stage-minimaps/8-TC.jpeg b/public/img/stage-minimaps/8-TC.jpeg new file mode 100644 index 000000000..43baf9829 Binary files /dev/null and b/public/img/stage-minimaps/8-TC.jpeg differ diff --git a/public/img/stage-minimaps/8-TW.jpeg b/public/img/stage-minimaps/8-TW.jpeg new file mode 100644 index 000000000..fa9075485 Binary files /dev/null and b/public/img/stage-minimaps/8-TW.jpeg differ diff --git a/public/img/stage-minimaps/9-CB.jpeg b/public/img/stage-minimaps/9-CB.jpeg new file mode 100644 index 000000000..a8d36064f Binary files /dev/null and b/public/img/stage-minimaps/9-CB.jpeg differ diff --git a/public/img/stage-minimaps/9-RM.jpeg b/public/img/stage-minimaps/9-RM.jpeg new file mode 100644 index 000000000..ba0906874 Binary files /dev/null and b/public/img/stage-minimaps/9-RM.jpeg differ diff --git a/public/img/stage-minimaps/9-SZ.jpeg b/public/img/stage-minimaps/9-SZ.jpeg new file mode 100644 index 000000000..7a1d9f97c Binary files /dev/null and b/public/img/stage-minimaps/9-SZ.jpeg differ diff --git a/public/img/stage-minimaps/9-TC.jpeg b/public/img/stage-minimaps/9-TC.jpeg new file mode 100644 index 000000000..c52870226 Binary files /dev/null and b/public/img/stage-minimaps/9-TC.jpeg differ diff --git a/public/img/stage-minimaps/9-TW.jpeg b/public/img/stage-minimaps/9-TW.jpeg new file mode 100644 index 000000000..391dcce65 Binary files /dev/null and b/public/img/stage-minimaps/9-TW.jpeg differ diff --git a/public/locales/da/contributions.json b/public/locales/da/contributions.json index ecd14e98e..eb0fc2a6a 100644 --- a/public/locales/da/contributions.json +++ b/public/locales/da/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink er et projekt af <2>Sendou med hjælp fra bidragsydere:", - "code": "Mange har bidraget til koden", "lean": "Hjalp med at fremvise Splatoons indre og skabte Lanista-botten", "borzoic": "lavede mærker, ikoner and forsidekunst", "uberu": "Tegnede mini-Judd mens han holder et hjerte-emoji", diff --git a/public/locales/de/contributions.json b/public/locales/de/contributions.json index 617691384..03a28f4aa 100644 --- a/public/locales/de/contributions.json +++ b/public/locales/de/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink ist ein Projekt von <2>Sendou - mit der Hilfe von Mitwirkenden:", - "code": "Viele mit Commits für den Code", "lean": "Hilft mit der Analyse von Splatoon-Internals und hat den Lanista-Bot erstellt", "borzoic": "Erstellte Abzeichen, Icons und Grafiken auf der Homepage", "uberu": "Zeichnete den Herz-haltenden Mini-Judd-Emoji", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 305a9433a..5ae678045 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -10,6 +10,7 @@ "pages.builds": "Builds", "pages.analyzer": "Build Analyzer", "pages.maps": "Map Lists", + "pages.plans": "Planner", "pages.object-damage-calculator": "Object DMG Calc", "header.profile": "Profile", @@ -45,6 +46,7 @@ "actions.clear": "Clear", "actions.selectAll": "Select All", "actions.search": "Search", + "actions.setBg": "Set background", "maps.createMapList": "Create map list", "maps.halfSz": "50% SZ", @@ -104,5 +106,7 @@ "theme.light": "Light", "theme.dark": "Dark", - "theme.auto": "Auto" + "theme.auto": "Auto", + + "plans.poweredBy": "Powered by {{name}}" } diff --git a/public/locales/en/contributions.json b/public/locales/en/contributions.json index 1fbafb48f..810deb1f1 100644 --- a/public/locales/en/contributions.json +++ b/public/locales/en/contributions.json @@ -1,8 +1,9 @@ { "project": "Sendou.ink is a project by <2>Sendou with help from contributors:", - "code": "Several made commits to the code", + "code": "See all code contributors", "lean": "Helped with uncovering Splatoon internals and created the Lanista bot", "borzoic": "Made badges, icons and front page art", "uberu": "Drew mini Judd holding heart emoji", + "twig": "Provided mini map pictures for planner tool", "translation": "Translation" } diff --git a/public/locales/en/front.json b/public/locales/en/front.json index f611f79b1..14184a7ac 100644 --- a/public/locales/en/front.json +++ b/public/locales/en/front.json @@ -7,6 +7,7 @@ "badges.description": "List of all the badges you can earn for your profile", "analyzer.description": "Find out what your builds actually do", "maps.description": "Turn pool of maps into a list to play on", + "plans.description": "Drawing tool to make plans using stage and weapon images", "object-damage-calculator.description": "Calculate damage dealt to different objects", "recentWinners": "Recent winners", "upcomingEvents": "Upcoming events", diff --git a/public/locales/es-ES/contributions.json b/public/locales/es-ES/contributions.json index 46da42be3..58d120fd1 100644 --- a/public/locales/es-ES/contributions.json +++ b/public/locales/es-ES/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink es un proyecto hecho por <2>Sendou con ayuda de contribuidores:", - "code": "Varios contribuidores ayudaron con el codigo", "lean": "Ayudó a descubrir partes internas de Splatoon y creó el bot Lanista", "borzoic": "Creó insignias, íconos y el arte de la página principal", "uberu": "Dibujó el emoji the Justito abrazando un corazón", diff --git a/public/locales/es-US/contributions.json b/public/locales/es-US/contributions.json index 46da42be3..58d120fd1 100644 --- a/public/locales/es-US/contributions.json +++ b/public/locales/es-US/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink es un proyecto hecho por <2>Sendou con ayuda de contribuidores:", - "code": "Varios contribuidores ayudaron con el codigo", "lean": "Ayudó a descubrir partes internas de Splatoon y creó el bot Lanista", "borzoic": "Creó insignias, íconos y el arte de la página principal", "uberu": "Dibujó el emoji the Justito abrazando un corazón", diff --git a/public/locales/ja/contributions.json b/public/locales/ja/contributions.json index cac6355d8..22d6a61dc 100644 --- a/public/locales/ja/contributions.json +++ b/public/locales/ja/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink は <2>Sendou によるプロジェクトで、以下のコントリビューターに支えられています:", - "code": "数名はコードにコミットしました", "lean": "Splatoon 内部理解のサポート、Lanista bot の作成", "borzoic": "バッジ、アイコン、トップページアートの作成", "uberu": "mini Judd holding heart 絵文字の作成", diff --git a/public/locales/ko/contributions.json b/public/locales/ko/contributions.json index 8e28f0776..7c7818670 100644 --- a/public/locales/ko/contributions.json +++ b/public/locales/ko/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink는 <2>Sendou가 기여자들의 도움을 받아 만든 프로젝트입니다:", - "code": "여러 사람들이 코드에 커밋했습니다", "lean": "스플래툰의 내부를 파헤치는 데에 도움을 주고 Lanista bot을 만들었습니다", "borzoic": "배지, 아이콘과 표지 그림을 만들었습니다", "uberu": "하트 이모티콘을 든 꼬마심판을 그렸습니다" diff --git a/public/locales/nl/contributions.json b/public/locales/nl/contributions.json index 355feb0d1..2cb18fc45 100644 --- a/public/locales/nl/contributions.json +++ b/public/locales/nl/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink is een project door <2>Sendou met behulp van de volgende bijdragers:", - "code": "Meerdere toevoegingen gedaan aan de code.", "lean": "Heeft geholpen met het onthullingen van de interne werkingen van Splatoon en heeft ook de Lanista bot ontwikkeld.", "borzoic": "Heeft badges, iconen en de voorpagina art gemaakt.", "uberu": "Heeft Justus jr. met een hart emoji getekend.", diff --git a/public/locales/ru/contributions.json b/public/locales/ru/contributions.json index 00bf866a1..bfbb3061e 100644 --- a/public/locales/ru/contributions.json +++ b/public/locales/ru/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink это проект, созданный <2>Sendou с поддержкой помощников:", - "code": "Помощники, внесшие изменения в код", "lean": "Помощь с исследованием внутренностей Splatoon и создатель бота Lanista", "borzoic": "Создатель рисунка на главной странице, а также значков и иконок", "uberu": "Нарисовал Судокотика, держащего эмодзи-сердце", diff --git a/public/locales/zh/contributions.json b/public/locales/zh/contributions.json index a0eaeda12..7f80b3306 100644 --- a/public/locales/zh/contributions.json +++ b/public/locales/zh/contributions.json @@ -1,6 +1,5 @@ { "project": "Sendou.ink是<2>Sendou在以下贡献者的帮助下创建的:", - "code": "提供代码", "lean": "帮助破解斯普拉遁并创建了Lanista bot", "borzoic": "制作徽章、图标,设计首页", "uberu": "制作小评审捧心的表情", diff --git a/scripts/replace-weapon-names.ts b/scripts/replace-weapon-names.ts new file mode 100644 index 000000000..2ae1bb65c --- /dev/null +++ b/scripts/replace-weapon-names.ts @@ -0,0 +1,42 @@ +/* eslint-disable */ +// @ts-nocheck + +import fs from "node:fs"; +import path from "node:path"; +import invariant from "tiny-invariant"; + +const DIR_PATH = path.join( + __dirname, + "..", + "public", + "img", + "main-weapons-outlined" +); +const WEAPON_JSON_PATH = path.join(__dirname, "output", "weapons.json"); + +async function main() { + const weapons = JSON.parse(fs.readFileSync(WEAPON_JSON_PATH, "utf8")); + const files = await fs.promises.readdir(DIR_PATH); + + for (const file of files) { + // did we already replace the name + if (file.includes(".webp") || file.includes("Lv01")) { + // delete file + await fs.promises.unlink(path.join(DIR_PATH, file)); + } + + const weapon: any = weapons.find((weapon: any) => + file.includes(weapon.internalName) + ); + invariant(weapon, `Could not find weapon for ${file}`); + + fs.renameSync( + path.join(DIR_PATH, file), + path.join(DIR_PATH, `${weapon.id}.png`) + ); + } + + console.log("done with all"); +} + +void main(); diff --git a/tsconfig.json b/tsconfig.json index fb7b42055..0be48cb13 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,7 @@ "exclude": ["discord-bot/*"], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2019"], + "module": "commonjs", "isolatedModules": true, "esModuleInterop": true, "jsx": "react-jsx",