From 29adb2a244f3122b3a4f56e6dd7dccfbe8ac45d4 Mon Sep 17 00:00:00 2001 From: Djobbo Date: Thu, 12 Oct 2023 20:34:13 +0000 Subject: [PATCH] migrate website to app dir #96 --- .devcontainer/.zshrc | 19 - .devcontainer/Dockerfile | 28 +- .devcontainer/corehalla.zsh-theme | 55 - .devcontainer/devcontainer.json | 58 +- .devcontainer/zsh/.zshrc | 7 + .devcontainer/zsh/devcontainer.zsh-theme | 26 + .eslintrc.js | 56 + .eslintrc.yml | 45 - app/.gitignore | 38 + app/.prettierrc | 6 + app/README.md | 55 +- app/app/(rankings)/BracketSelection.tsx | 73 + app/app/(rankings)/RankingsPagination.tsx | 20 + .../(rankings)}/RankingsTableItem.tsx | 2 +- app/app/(rankings)/SearchInput.tsx | 50 + app/app/(rankings)/SearchProvider.tsx | 49 + .../ClansTable.tsx | 57 + .../[[...clansRankingsOptions]]/constants.ts | 1 + .../[[...clansRankingsOptions]]/page.tsx | 95 + .../[[...rankingsOptions]]/layout.tsx | 43 + .../[[...rankingsOptions]]/page.tsx | 3 + .../@ranked1v1/Rankings1v1Table.tsx | 53 + .../@ranked1v1/page.tsx | 82 + .../@ranked2v2/Rankings2v2Table.tsx | 40 + .../@ranked2v2/page.tsx | 69 + .../@rotating/RankingsRotatingTable.tsx | 53 + .../[[...rankingsOptions]]/@rotating/page.tsx | 85 + .../ranked/[[...rankingsOptions]]/layout.tsx | 55 + app/app/(rankings)/ranked/queue/page.tsx | 3 + app/app/(stats)/TabContentLoader.tsx | 9 + .../(stats)/clan/[clanId]}/ClanMember.tsx | 3 +- .../(stats)/clan/[clanId]/ClanStatsHeader.tsx | 49 + .../clan/[clanId]/ClanStatsProvider.tsx | 43 + app/app/(stats)/clan/[clanId]/layout.tsx | 45 + app/app/(stats)/clan/[clanId]/page.tsx | 38 + .../player/[playerId]/2v2}/TeamCard.tsx | 12 +- .../(stats)/player/[playerId]/2v2/loading.tsx | 5 + .../(stats)/player/[playerId]/2v2/page.tsx} | 22 +- .../player/[playerId]/PlayerStatsHeader.tsx | 122 + .../player/[playerId]/PlayerStatsProvider.tsx | 87 + .../player/[playerId]/PlayerStatsTabs.tsx | 67 + .../[playerId]/_overview}/ClanContent.tsx | 20 +- .../[playerId]/_overview}/RankedContent.tsx | 25 +- app/app/(stats)/player/[playerId]/layout.tsx | 65 + .../player/[playerId]/legends}/Legend.tsx | 9 +- .../[playerId]/legends}/RankedContent.tsx | 9 +- .../legends}/WeaponDistribution.tsx | 6 +- .../player/[playerId]/legends/loading.tsx | 5 + .../player/[playerId]/legends/page.tsx} | 24 +- app/app/(stats)/player/[playerId]/loading.tsx | 5 + .../(stats)/player/[playerId]/page.tsx} | 84 +- .../[playerId]/weapons}/RankedContent.tsx | 7 +- .../player/[playerId]/weapons}/Weapon.tsx | 9 +- .../player/[playerId]/weapons/loading.tsx | 5 + .../player/[playerId]/weapons/page.tsx} | 23 +- .../_landing}/DiscordCard.tsx | 6 +- .../_landing}/LandingBackground.tsx | 2 + app/app/_landing/LandingFavorites.tsx | 42 + .../_landing}/WeeklyRotation.tsx | 10 +- .../layout => app/_layout}/AlertBar.tsx | 2 +- .../layout => app/_layout}/Footer.tsx | 0 .../layout => app/_layout}/Header.tsx | 19 +- .../_layout/LayoutContent.tsx} | 8 +- .../layout => app/_layout}/SideNav.tsx | 29 +- app/app/_trpc/TRPCProvider.tsx | 36 + app/app/_trpc/client.ts | 5 + app/app/api/trpc/[trpc]/route.ts | 14 + .../calc.tsx => app/calculator/page.tsx} | 81 +- app/app/favicon.ico | Bin 0 -> 25931 bytes app/app/globals.css | 75 + app/app/layout.tsx | 90 + app/app/me/favorites/FavoritesContent.tsx | 18 + app/app/me/favorites/page.tsx | 16 + app/{pages/index.tsx => app/page.tsx} | 89 +- app/components.json | 16 + app/components/BackToTopButton.tsx | 11 +- app/components/FirstTimePopup.tsx | 20 +- app/components/SEO.tsx | 91 - app/components/articles/ArticlePreview.tsx | 18 +- .../articles/ArticlePreviewGrid.tsx | 17 +- app/components/favorites/FavoritesGrid.tsx | 6 +- app/components/layout/AppNav.tsx | 58 - app/components/layout/CollapsibleContent.tsx | 1 + app/components/layout/ErrorPageContent.tsx | 60 - app/components/search/KBarProvider.tsx | 3 + app/components/search/RankedPlayerItem.tsx | 87 - app/components/search/SearchButton.tsx | 4 + app/components/search/Searchbox.tsx | 300 - app/components/stats/StatsHeader.tsx | 22 +- .../stats/player/Player2v2Tab/index.tsx | 1 - .../stats/player/PlayerLegendsTab/index.ts | 1 - .../stats/player/PlayerOverviewTab/index.ts | 1 - .../stats/player/PlayerWeaponsTab/index.ts | 1 - .../stats/rankings/RankingsLayout.tsx | 116 - app/components/ui/button.tsx | 57 + app/components/ui/slider.tsx | 29 + app/db/index.ts | 13 + app/db/migrate.ts | 9 + app/db/schema/index.ts | 1 + app/db/schema/users.ts | 12 + app/drizzle.config.ts | 11 + app/hooks/stats/useClan.ts | 10 - app/hooks/stats/useClansRankings.ts | 13 - app/hooks/stats/usePlayerAliases.ts | 16 - app/hooks/stats/usePlayerRanked.ts | 10 - app/hooks/stats/usePlayerSearch.ts | 18 - app/hooks/stats/usePlayerStats.ts | 10 - app/hooks/stats/usePowerRankings.ts | 22 - app/hooks/stats/useRankings.ts | 35 - app/hooks/useBrawlhallaArticles.ts | 26 - app/hooks/useFeatures.ts | 8 - app/hooks/useWeeklyRotation.ts | 14 - app/lib/utils.ts | 6 + app/next-sitemap.config.js | 6 - app/next.config.js | 66 +- app/package.json | 117 +- app/pages/404.tsx | 8 - app/pages/500.tsx | 8 - app/pages/@me/favorites.tsx | 22 - app/pages/_app.tsx | 71 - app/pages/_error.tsx | 8 - app/pages/api/bh-articles.ts | 29 - app/pages/api/rankings/clans.ts | 39 - app/pages/api/rankings/index.ts | 26 - app/pages/api/rankings/power.ts | 25 - app/pages/api/rankings/search/player.ts | 45 - app/pages/api/stats/clan/[clanId].ts | 20 - .../api/stats/player/[playerId]/aliases.ts | 27 - .../api/stats/player/[playerId]/ranked.ts | 20 - .../api/stats/player/[playerId]/stats.ts | 19 - app/pages/api/trpc/[trpc].ts | 31 - app/pages/api/weekly-rotation.ts | 19 - .../rankings/1v1/[[...rankingsOptions]].tsx | 145 - .../rankings/2v2/[[...rankingsOptions]].tsx | 115 - .../rankings/clans/[[...clansOptions]].tsx | 126 - .../global/[[...rankingsOptions]].tsx | 135 - .../rankings/power/[[...rankingsOptions]].tsx | 268 - app/pages/stats/clan/[clanId].tsx | 91 - app/pages/stats/player/[playerId].tsx | 235 - app/pnpm-lock.yaml | 4048 +++++++++++++ app/providers/SideNavProvider.tsx | 2 + app/providers/auth/AuthProvider.tsx | 10 +- app/providers/auth/useUserFavorites.ts | 2 +- app/public/sitemap-0.xml | 6 - app/public/sitemap.xml | 4 - app/server/index.ts | 1 + app/server/router/index.ts | 8 + app/server/router/users/getSingleUser.ts | 14 + app/server/router/users/index.ts | 6 + app/server/trpc.ts | 9 + app/store/useFeatures.tsx | 55 + app/styles/globals.css | 32 - app/styles/nprogress.css | 25 - app/tailwind.config.js | 20 - app/tailwind.config.ts | 86 + app/tsconfig.json | 54 +- app/util/alerts.tsx | 18 +- app/util/features.ts | 23 - app/util/trpc.ts | 68 - app/vercel.json | 12 - package.json | 14 +- packages/bhapi/constants.ts | 32 +- packages/bhapi/index.ts | 64 +- packages/bhapi/legends.ts | 122 +- packages/bhapi/package.json | 4 +- packages/common/helpers/isDefined.ts | 1 + packages/common/hooks/useDebounce.ts | 15 + packages/common/hooks/useWindowScroll.ts | 2 + packages/common/package.json | 10 +- packages/db/package.json | 6 +- packages/dl-roster-images/package.json | 2 +- packages/logger/package.json | 2 +- .../server/mutations/updateDBPlayerData.ts | 2 +- packages/server/package.json | 14 +- packages/server/router/stats/getRankings.ts | 6 +- packages/ui/base/AnimatedLogo.tsx | 2 + packages/ui/base/Pagination.tsx | 17 +- packages/ui/base/Paginator.tsx | 61 +- packages/ui/base/Progress.tsx | 2 + packages/ui/base/Select.tsx | 1 + packages/ui/base/Tooltip.tsx | 2 + packages/ui/icons.tsx | 14 + packages/ui/package.json | 34 +- packages/ui/theme/index.ts | 2 +- packages/web-parser/common/dev.ts | 52 + packages/web-parser/common/index.ts | 262 + packages/web-parser/package.json | 5 +- pnpm-lock.yaml | 5179 +++++++++++------ pnpm-workspace.yaml | 1 + worker/package.json | 16 +- 190 files changed, 10867 insertions(+), 5023 deletions(-) delete mode 100644 .devcontainer/.zshrc delete mode 100644 .devcontainer/corehalla.zsh-theme create mode 100644 .devcontainer/zsh/.zshrc create mode 100644 .devcontainer/zsh/devcontainer.zsh-theme create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.yml create mode 100644 app/.gitignore create mode 100644 app/.prettierrc create mode 100644 app/app/(rankings)/BracketSelection.tsx create mode 100644 app/app/(rankings)/RankingsPagination.tsx rename app/{components/stats => app/(rankings)}/RankingsTableItem.tsx (99%) create mode 100644 app/app/(rankings)/SearchInput.tsx create mode 100644 app/app/(rankings)/SearchProvider.tsx create mode 100644 app/app/(rankings)/clans/[[...clansRankingsOptions]]/ClansTable.tsx create mode 100644 app/app/(rankings)/clans/[[...clansRankingsOptions]]/constants.ts create mode 100644 app/app/(rankings)/clans/[[...clansRankingsOptions]]/page.tsx create mode 100644 app/app/(rankings)/power-rankings/[[...rankingsOptions]]/layout.tsx create mode 100644 app/app/(rankings)/power-rankings/[[...rankingsOptions]]/page.tsx create mode 100644 app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/Rankings1v1Table.tsx create mode 100644 app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/page.tsx create mode 100644 app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/Rankings2v2Table.tsx create mode 100644 app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/page.tsx create mode 100644 app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/RankingsRotatingTable.tsx create mode 100644 app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/page.tsx create mode 100644 app/app/(rankings)/ranked/[[...rankingsOptions]]/layout.tsx create mode 100644 app/app/(rankings)/ranked/queue/page.tsx create mode 100644 app/app/(stats)/TabContentLoader.tsx rename app/{components/stats/clan => app/(stats)/clan/[clanId]}/ClanMember.tsx (95%) create mode 100644 app/app/(stats)/clan/[clanId]/ClanStatsHeader.tsx create mode 100644 app/app/(stats)/clan/[clanId]/ClanStatsProvider.tsx create mode 100644 app/app/(stats)/clan/[clanId]/layout.tsx create mode 100644 app/app/(stats)/clan/[clanId]/page.tsx rename app/{components/stats => app/(stats)/player/[playerId]/2v2}/TeamCard.tsx (92%) create mode 100644 app/app/(stats)/player/[playerId]/2v2/loading.tsx rename app/{components/stats/player/Player2v2Tab/Player2v2Tab.tsx => app/(stats)/player/[playerId]/2v2/page.tsx} (93%) create mode 100644 app/app/(stats)/player/[playerId]/PlayerStatsHeader.tsx create mode 100644 app/app/(stats)/player/[playerId]/PlayerStatsProvider.tsx create mode 100644 app/app/(stats)/player/[playerId]/PlayerStatsTabs.tsx rename app/{components/stats/player/PlayerOverviewTab => app/(stats)/player/[playerId]/_overview}/ClanContent.tsx (78%) rename app/{components/stats/player/PlayerOverviewTab => app/(stats)/player/[playerId]/_overview}/RankedContent.tsx (86%) create mode 100644 app/app/(stats)/player/[playerId]/layout.tsx rename app/{components/stats/player/PlayerLegendsTab => app/(stats)/player/[playerId]/legends}/Legend.tsx (92%) rename app/{components/stats/player/PlayerLegendsTab => app/(stats)/player/[playerId]/legends}/RankedContent.tsx (88%) rename app/{components/stats/player/PlayerLegendsTab => app/(stats)/player/[playerId]/legends}/WeaponDistribution.tsx (98%) create mode 100644 app/app/(stats)/player/[playerId]/legends/loading.tsx rename app/{components/stats/player/PlayerLegendsTab/PlayerLegendsTab.tsx => app/(stats)/player/[playerId]/legends/page.tsx} (96%) create mode 100644 app/app/(stats)/player/[playerId]/loading.tsx rename app/{components/stats/player/PlayerOverviewTab/PlayerOverviewTab.tsx => app/(stats)/player/[playerId]/page.tsx} (72%) rename app/{components/stats/player/PlayerWeaponsTab => app/(stats)/player/[playerId]/weapons}/RankedContent.tsx (96%) rename app/{components/stats/player/PlayerWeaponsTab => app/(stats)/player/[playerId]/weapons}/Weapon.tsx (94%) create mode 100644 app/app/(stats)/player/[playerId]/weapons/loading.tsx rename app/{components/stats/player/PlayerWeaponsTab/PlayerWeaponsTab.tsx => app/(stats)/player/[playerId]/weapons/page.tsx} (93%) rename app/{components => app/_landing}/DiscordCard.tsx (97%) rename app/{components/layout => app/_landing}/LandingBackground.tsx (99%) create mode 100644 app/app/_landing/LandingFavorites.tsx rename app/{components => app/_landing}/WeeklyRotation.tsx (88%) rename app/{components/layout => app/_layout}/AlertBar.tsx (92%) rename app/{components/layout => app/_layout}/Footer.tsx (100%) rename app/{components/layout => app/_layout}/Header.tsx (92%) rename app/{components/layout/Layout.tsx => app/_layout/LayoutContent.tsx} (82%) rename app/{components/layout => app/_layout}/SideNav.tsx (95%) create mode 100644 app/app/_trpc/TRPCProvider.tsx create mode 100644 app/app/_trpc/client.ts create mode 100644 app/app/api/trpc/[trpc]/route.ts rename app/{pages/calc.tsx => app/calculator/page.tsx} (67%) create mode 100644 app/app/favicon.ico create mode 100644 app/app/globals.css create mode 100644 app/app/layout.tsx create mode 100644 app/app/me/favorites/FavoritesContent.tsx create mode 100644 app/app/me/favorites/page.tsx rename app/{pages/index.tsx => app/page.tsx} (56%) create mode 100644 app/components.json delete mode 100644 app/components/SEO.tsx delete mode 100644 app/components/layout/AppNav.tsx delete mode 100644 app/components/layout/ErrorPageContent.tsx create mode 100644 app/components/search/KBarProvider.tsx delete mode 100644 app/components/search/RankedPlayerItem.tsx delete mode 100644 app/components/search/Searchbox.tsx delete mode 100644 app/components/stats/player/Player2v2Tab/index.tsx delete mode 100644 app/components/stats/player/PlayerLegendsTab/index.ts delete mode 100644 app/components/stats/player/PlayerOverviewTab/index.ts delete mode 100644 app/components/stats/player/PlayerWeaponsTab/index.ts delete mode 100644 app/components/stats/rankings/RankingsLayout.tsx create mode 100644 app/components/ui/button.tsx create mode 100644 app/components/ui/slider.tsx create mode 100644 app/db/index.ts create mode 100644 app/db/migrate.ts create mode 100644 app/db/schema/index.ts create mode 100644 app/db/schema/users.ts create mode 100644 app/drizzle.config.ts delete mode 100644 app/hooks/stats/useClan.ts delete mode 100644 app/hooks/stats/useClansRankings.ts delete mode 100644 app/hooks/stats/usePlayerAliases.ts delete mode 100644 app/hooks/stats/usePlayerRanked.ts delete mode 100644 app/hooks/stats/usePlayerSearch.ts delete mode 100644 app/hooks/stats/usePlayerStats.ts delete mode 100644 app/hooks/stats/usePowerRankings.ts delete mode 100644 app/hooks/stats/useRankings.ts delete mode 100644 app/hooks/useBrawlhallaArticles.ts delete mode 100644 app/hooks/useFeatures.ts delete mode 100644 app/hooks/useWeeklyRotation.ts create mode 100644 app/lib/utils.ts delete mode 100644 app/next-sitemap.config.js delete mode 100644 app/pages/404.tsx delete mode 100644 app/pages/500.tsx delete mode 100644 app/pages/@me/favorites.tsx delete mode 100644 app/pages/_app.tsx delete mode 100644 app/pages/_error.tsx delete mode 100644 app/pages/api/bh-articles.ts delete mode 100644 app/pages/api/rankings/clans.ts delete mode 100644 app/pages/api/rankings/index.ts delete mode 100644 app/pages/api/rankings/power.ts delete mode 100644 app/pages/api/rankings/search/player.ts delete mode 100644 app/pages/api/stats/clan/[clanId].ts delete mode 100644 app/pages/api/stats/player/[playerId]/aliases.ts delete mode 100644 app/pages/api/stats/player/[playerId]/ranked.ts delete mode 100644 app/pages/api/stats/player/[playerId]/stats.ts delete mode 100644 app/pages/api/trpc/[trpc].ts delete mode 100644 app/pages/api/weekly-rotation.ts delete mode 100644 app/pages/rankings/1v1/[[...rankingsOptions]].tsx delete mode 100644 app/pages/rankings/2v2/[[...rankingsOptions]].tsx delete mode 100644 app/pages/rankings/clans/[[...clansOptions]].tsx delete mode 100644 app/pages/rankings/global/[[...rankingsOptions]].tsx delete mode 100644 app/pages/rankings/power/[[...rankingsOptions]].tsx delete mode 100644 app/pages/stats/clan/[clanId].tsx delete mode 100644 app/pages/stats/player/[playerId].tsx create mode 100644 app/pnpm-lock.yaml delete mode 100644 app/public/sitemap-0.xml delete mode 100644 app/public/sitemap.xml create mode 100644 app/server/index.ts create mode 100644 app/server/router/index.ts create mode 100644 app/server/router/users/getSingleUser.ts create mode 100644 app/server/router/users/index.ts create mode 100644 app/server/trpc.ts create mode 100644 app/store/useFeatures.tsx delete mode 100644 app/styles/globals.css delete mode 100644 app/styles/nprogress.css delete mode 100644 app/tailwind.config.js create mode 100644 app/tailwind.config.ts delete mode 100644 app/util/features.ts delete mode 100644 app/util/trpc.ts delete mode 100644 app/vercel.json create mode 100644 packages/common/helpers/isDefined.ts create mode 100644 packages/common/hooks/useDebounce.ts create mode 100644 packages/web-parser/common/dev.ts create mode 100644 packages/web-parser/common/index.ts diff --git a/.devcontainer/.zshrc b/.devcontainer/.zshrc deleted file mode 100644 index 183c9404..00000000 --- a/.devcontainer/.zshrc +++ /dev/null @@ -1,19 +0,0 @@ -export ZSH="$HOME/.oh-my-zsh" - -ZSH_THEME="corehalla" -ZSH_CUSTOM=$HOME/.oh-my-zsh/custom - -plugins=(git) - -cd /home/corehalla/workspace - -# Source -source $ZSH/oh-my-zsh.sh - -# pnpm -export PNPM_HOME="/home/corehalla/.local/share/pnpm" -case ":$PATH:" in - *":$PNPM_HOME:"*) ;; - *) export PATH="$PNPM_HOME:$PATH" ;; -esac -# pnpm end \ No newline at end of file diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index ffcb56a5..2b5bda96 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,34 +1,14 @@ FROM node:18 -RUN userdel -r node - -ARG USERNAME=corehalla -ARG USER_UID=1001 -ARG USER_GID=$USER_UID - -# Create the user -RUN groupadd --gid $USER_GID $USERNAME \ - && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ - # - && apt-get update \ - && apt-get install -y sudo \ - && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ - && chmod 0440 /etc/sudoers.d/$USERNAME - RUN apt-get update RUN apt-get install -y \ curl \ zsh -# set home -ENV HOME /home/$USERNAME -ENV WORKSPACE_PATH $HOME/workspace +RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" -ENV SHELL /bin/zsh - -# Install Oh-My-Zsh -RUN wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh || true - -USER $USERNAME +RUN npm install -g pnpm ENV NODE_ENV development + +RUN git config --global --add safe.directory /workspace diff --git a/.devcontainer/corehalla.zsh-theme b/.devcontainer/corehalla.zsh-theme deleted file mode 100644 index e72ef7f5..00000000 --- a/.devcontainer/corehalla.zsh-theme +++ /dev/null @@ -1,55 +0,0 @@ -local LC_ALL="" LC_CTYPE="en_US.UTF-8" - -black=%F{0} -red=%F{1} -green=%F{2} -yellow=%F{3} -blue=%F{4} -magenta=%F{5} -cyan=%F{6} -gray=%F{7} - -bblack=%F{8} -bred=%F{9} -bgreen=%F{10} -byellow=%F{11} -bblue=%F{12} -bmagenta=%F{13} -bcyan=%F{14} -bgray=%F{15} - -reset=%f - -prompt_user() { - echo -n $yellow%n$reset -} - -prompt_dir() { - echo -n $reset:%~ -} - -prompt_git() { - setopt prompt_subst - autoload -Uz vcs_info - - zstyle ':vcs_info:*' enable git - zstyle ':vcs_info:git:*' check-for-changes true - zstyle ':vcs_info:git:*' stagedstr "$green➕" - zstyle ':vcs_info:git:*' unstagedstr "$yellow●" - zstyle ':vcs_info:*' formats "$black::$reset%b%u%c" - vcs_info - - echo -n ${vcs_info_msg_0_}$reset -} - -build_prompt() { - RETVAL=$? - prompt_user - prompt_dir - prompt_git - echo -n $reset› -} - -export LS_COLORS='di=1;4;34'; - -export PROMPT='$(build_prompt)' \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index bc0a1c76..fc767d1e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,22 +1,11 @@ { "name": "Corehalla", - "dockerComposeFile": "docker-compose.yml", - "service": "app", + "workspaceFolder": "/workspace", "mounts": [ - "source=${localWorkspaceFolder},target=/home/corehalla/workspace,type=bind", - "source=${localWorkspaceFolder}/.devcontainer/.zshrc,target=/home/corehalla/.zshrc,type=bind", - "source=${localWorkspaceFolder}/.devcontainer/corehalla.zsh-theme,target=/home/corehalla/.oh-my-zsh/custom/themes/corehalla.zsh-theme,type=bind" + "source=${localWorkspaceFolder},target=/workspace,type=bind", + "source=${localWorkspaceFolder}/.devcontainer/zsh/.zshrc,target=/root/.zshrc,type=bind", + "source=${localWorkspaceFolder}/.devcontainer/zsh/devcontainer.zsh-theme,target=/root/.oh-my-zsh/custom/themes/devcontainer.zsh-theme,type=bind" ], - "workspaceFolder": "/home/corehalla/workspace", - "settings": { - "terminal.integrated.defaultProfile.linux": "zsh", - "terminal.integrated.profiles.linux": { - "zsh": { - "path": "/bin/zsh" - } - } - }, - "customizations": { "vscode": { "extensions": [ @@ -25,28 +14,37 @@ "Prisma.prisma", "eamodio.gitlens", "mhutchie.git-graph", - "GitHub.vscode-pull-request-github" - ] + "GitHub.vscode-pull-request-github", + "ms-azuretools.vscode-docker", + "usernamehw.errorlens" + ], + "settings": { + "terminal.integrated.defaultProfile.linux": "zsh", + "terminal.integrated.profiles.linux": { + "zsh": { + "path": "/bin/zsh" + } + } + } } }, - - "forwardPorts": [3000, 3001, 3002], - + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "forwardPorts": [ + 3000, + 3001, + 3002 + ], "portsAttributes": { "3000": { - "label": "Corehalla Web", - "onAutoForward": "notify" + "label": "Corehalla Web" }, "3001": { - "label": "Supabase Studio", - "onAutoForward": "notify" + "label": "Supabase Studio" }, "3002": { - "label": "Corehalla Worker", - "onAutoForward": "notify" + "label": "Corehalla Worker" } }, - "postCreateCommand": "sudo curl -fsSL https://get.pnpm.io/install.sh | sh - && pnpm ci:install && pnpm setup:env", - "containerUser": "corehalla", - "remoteUser": "corehalla" -} + "postStartCommand": "pnpm ci:install && pnpm setup:env" +} \ No newline at end of file diff --git a/.devcontainer/zsh/.zshrc b/.devcontainer/zsh/.zshrc new file mode 100644 index 00000000..7ea0e7f0 --- /dev/null +++ b/.devcontainer/zsh/.zshrc @@ -0,0 +1,7 @@ +ZSH_THEME="devcontainer" + +plugins=(git) + +source $HOME/.oh-my-zsh/oh-my-zsh.sh + +cd /workspace diff --git a/.devcontainer/zsh/devcontainer.zsh-theme b/.devcontainer/zsh/devcontainer.zsh-theme new file mode 100644 index 00000000..2b74a72b --- /dev/null +++ b/.devcontainer/zsh/devcontainer.zsh-theme @@ -0,0 +1,26 @@ +local LC_ALL="" LC_CTYPE="en_US.UTF-8" +autoload -U colors && colors + +prompt_git() { + setopt prompt_subst + autoload -Uz vcs_info + + zstyle ':vcs_info:*' enable git + zstyle ':vcs_info:git:*' check-for-changes true + zstyle ':vcs_info:git:*' stagedstr "%{$fg_bold[green]%}!%{$reset_color%}" + zstyle ':vcs_info:git:*' unstagedstr "%{$fg_bold[yellow]%}?%{$reset_color%}" + zstyle ':vcs_info:*' formats " › %b%c%u" + zstyle ':vcs_info:*' actionformats " › %b%c%u %{$fg_bold[red]%}[%a]%{$reset_color%}" + vcs_info + + echo -n ${vcs_info_msg_0_}$reset +} + +build_prompt() { + echo -n "%{$fg[gray]%}corehalla%{$reset_color%}%{$fg[blue]%}%~%{$reset_color%}" + prompt_git + echo + echo "🚀 › " +} + +export PROMPT='$(build_prompt)' diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..873b85be --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,56 @@ +module.exports = { + root: true, + extends: [ + "next/core-web-vitals", + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:jsx-a11y/strict", + ], + parser: "@typescript-eslint/parser", + plugins: [ + "@typescript-eslint", + "jsx-a11y", + "sort-imports-es6-autofix", + "prettier", + ], + settings: { + next: { + rootDir: ["app/", "packages/*/"], + }, + }, + rules: { + "no-console": "error", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + }, + ], + "prettier/prettier": "error", + "no-var": "error", + "sort-imports-es6-autofix/sort-imports-es6": [ + "error", + { + ignoreCase: false, + ignoreMemberSort: false, + memberSyntaxSortOrder: ["none", "all", "multiple", "single"], + }, + ], + "@typescript-eslint/consistent-type-imports": [ + "error", + { + prefer: "type-imports", + fixStyle: "inline-type-imports", + }, + ], + "object-shorthand": [ + 2, + "always", + { + avoidExplicitReturnArrows: true, + }, + ], + }, +} diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 9f7758d6..00000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,45 +0,0 @@ -root: true -extends: - - eslint:recommended - - next - - plugin:@typescript-eslint/recommended - - plugin:jsx-a11y/strict -parser: "@typescript-eslint/parser" -plugins: - - "@typescript-eslint" - - jsx-a11y - - sort-imports-es6-autofix - - prettier -settings: - next: - rootDir: [app/, packages/*/] -rules: - no-console: 2 - no-unused-vars: 0 - "@typescript-eslint/no-unused-vars": 2 - prettier/prettier: 2 - react/function-component-definition: - - 2 - - namedComponents: "arrow-function" - unnamedComponents: "arrow-function" - no-var: 2 - sort-imports-es6-autofix/sort-imports-es6: - - 2 - - ignoreCase: false - ignoreMemberSort: false - memberSyntaxSortOrder: - - none - - all - - multiple - - single - "@typescript-eslint/consistent-type-imports": - - 2 - - prefer: "type-imports" - object-shorthand: - - 2 - - always - - avoidExplicitReturnArrows: true - no-restricted-imports: - - 2 - - paths: - - next/link \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 00000000..2d9a422e --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# pnpm +.pnpm-store \ No newline at end of file diff --git a/app/.prettierrc b/app/.prettierrc new file mode 100644 index 00000000..494b872b --- /dev/null +++ b/app/.prettierrc @@ -0,0 +1,6 @@ +{ + "semi": false, + "printWidth": 80, + "tabWidth": 4, + "trailingComma": "all" +} \ No newline at end of file diff --git a/app/README.md b/app/README.md index 6641737e..7a532868 100644 --- a/app/README.md +++ b/app/README.md @@ -1,23 +1,32 @@ -

- - -

Corehalla

- -

- View official rankings, player and clan stats, or find a community, and join the fight! -

-

-

- - - - - - - - - - - - -

+# Corehalla Web App + +## Pages -> App Dir Migration + +- [x] new app with nextjs appdir + - [x] me + - [x] favorites + - [x] rankings + - [x] 1v1 + - [x] 2v2 + - [x] clans + - [x] global (legends/weapons...) + - [x] power + - [x] stats + - [x] clan [clanId] + tabs + - [x] player [playerId] + tabs + - [ ] 400 / 500 +- [ ] validate bhapi with zod +- [ ] rename all zod "validators" to "schemas" +- [ ] reduce usage of 'use client' in components +- [ ] clean "replays" from copy paste +- [ ] trpc +- [ ] replace prisma with drizzle +- [x] seo metadata +- [ ] change components to shadcn +- [ ] readd adsense +- [ ] rename favorites to bookmarks +- [ ] add up to 5 localstorage favorites? +- [ ] history? +- [ ] check deadcode +- [ ] migrate providers to zustand +- [ ] sitemap diff --git a/app/app/(rankings)/BracketSelection.tsx b/app/app/(rankings)/BracketSelection.tsx new file mode 100644 index 00000000..16505425 --- /dev/null +++ b/app/app/(rankings)/BracketSelection.tsx @@ -0,0 +1,73 @@ +import { Paginator } from "ui/base/Paginator" +import { type ReactNode } from "react" + +const getRankedPages = (region?: string, isRanked?: boolean) => { + const showRegion = isRanked && !!region && region !== "all" + const regionSuffix = showRegion ? `/${region}` : "" + + return [ + { + id: "1v1", + href: `/ranked/1v1${regionSuffix}`, + }, + { + id: "2v2", + href: `/ranked/2v2${regionSuffix}`, + }, + { + id: "rotating", + href: `/ranked/rotating${regionSuffix}`, + label: "Rotating", + }, + ] +} + +const getPowerPages = (region?: string, isPower?: boolean) => { + const showRegion = isPower && !!region + const regionSuffix = showRegion ? `/${region}` : "/na" + + return [ + { + id: "power1v1", + href: `/power-rankings/1v1${regionSuffix}`, + label: "Power 1v1", + }, + { + id: "power2v2", + href: `/power-rankings/2v2${regionSuffix}`, + label: "Power 2v2", + }, + ] +} + +type BracketSelectionProps = { + isRanked?: boolean + isPower?: boolean + region?: string + children?: ReactNode +} + +export const BracketSelection = ({ + isRanked, + isPower, + region, + children, +}: BracketSelectionProps) => { + return ( +
+ + {children} +
+ ) +} diff --git a/app/app/(rankings)/RankingsPagination.tsx b/app/app/(rankings)/RankingsPagination.tsx new file mode 100644 index 00000000..360b6db9 --- /dev/null +++ b/app/app/(rankings)/RankingsPagination.tsx @@ -0,0 +1,20 @@ +import { Pagination } from "ui/base/Pagination" + +type RankingsPaginationProps = { + page: number + baseHref: string +} + +export const RankingsPagination = ({ + page, + baseHref, +}: RankingsPaginationProps) => { + return ( + + ) +} diff --git a/app/components/stats/RankingsTableItem.tsx b/app/app/(rankings)/RankingsTableItem.tsx similarity index 99% rename from app/components/stats/RankingsTableItem.tsx rename to app/app/(rankings)/RankingsTableItem.tsx index 6378fded..e2e89128 100644 --- a/app/components/stats/RankingsTableItem.tsx +++ b/app/app/(rankings)/RankingsTableItem.tsx @@ -1,4 +1,4 @@ -import { Image } from "@components/Image" +import { Image } from "@/components/Image" import { Progress } from "ui/base/Progress" import { calculateWinrate } from "bhapi/helpers/calculateWinrate" import { cn } from "common/helpers/classnames" diff --git a/app/app/(rankings)/SearchInput.tsx b/app/app/(rankings)/SearchInput.tsx new file mode 100644 index 00000000..f1b0149c --- /dev/null +++ b/app/app/(rankings)/SearchInput.tsx @@ -0,0 +1,50 @@ +"use client" + +import { useDebounce } from "common/hooks/useDebounce" +import { usePathname, useRouter } from "next/navigation" +import { useSearch } from "./SearchProvider" + +export const Search = ({ + subtitle, + placeholder, + searchParamName, +}: { + subtitle?: string + placeholder?: string + searchParamName: string +}) => { + const router = useRouter() + const pathname = usePathname() + const { search, setSearch, defaultSearch } = useSearch((state) => state) + const debouncedSearch = useDebounce(search, 500) + + const shouldUpdateSearch = debouncedSearch !== defaultSearch + + if (shouldUpdateSearch) { + router.push( + debouncedSearch + ? `${pathname}?${new URLSearchParams({ + [searchParamName]: debouncedSearch, + })}` + : pathname, + ) + } + + return ( + <> + { + setSearch?.(e.target.value) + }} + className="w-full mt-4 px-4 py-2 border bg-bgVar2 border-bg rounded-lg" + placeholder={placeholder} + /> + {subtitle && ( +

+ {subtitle} +

+ )} + + ) +} diff --git a/app/app/(rankings)/SearchProvider.tsx b/app/app/(rankings)/SearchProvider.tsx new file mode 100644 index 00000000..d22e04a3 --- /dev/null +++ b/app/app/(rankings)/SearchProvider.tsx @@ -0,0 +1,49 @@ +"use client" + +import { type ReactNode, createContext, useContext } from "react" +import { createStore, useStore } from "zustand" + +interface SearchStoreProps { + defaultSearch?: string +} + +type SearchStore = ReturnType + +type SearchState = { + defaultSearch: string + search: string + setSearch: (search: string) => void +} + +const createSearchStore = ({ defaultSearch = "" }: SearchStoreProps) => { + return createStore()((set) => ({ + defaultSearch, + search: defaultSearch || "", + setSearch: (search) => set({ search }), + })) +} + +const searchContext = createContext(null) + +export function useSearch(selector: (state: SearchState) => T): T { + const store = useContext(searchContext) + if (!store) throw new Error("Missing searchContext.Provider in the tree") + return useStore(store, selector) +} + +type SearchProviderProps = SearchStoreProps & { + children: ReactNode +} + +export const SearchProvider = ({ + children, + defaultSearch, +}: SearchProviderProps) => { + const store = createSearchStore({ defaultSearch }) + + return ( + + {children} + + ) +} diff --git a/app/app/(rankings)/clans/[[...clansRankingsOptions]]/ClansTable.tsx b/app/app/(rankings)/clans/[[...clansRankingsOptions]]/ClansTable.tsx new file mode 100644 index 00000000..f3a593ef --- /dev/null +++ b/app/app/(rankings)/clans/[[...clansRankingsOptions]]/ClansTable.tsx @@ -0,0 +1,57 @@ +"use client" + +import { type BHClan } from "db/generated/client" +import { CLANS_RANKINGS_PER_PAGE } from "./constants" +import { cleanString } from "common/helpers/cleanString" +import { cn } from "common/helpers/classnames" +import { formatUnixTime } from "common/helpers/date" +import { useSearch } from "../../SearchProvider" +import Link from "next/link" + +type ClansTableProps = { + clans: BHClan[] + page: number +} + +export const ClansTable = ({ clans, page }: ClansTableProps) => { + const { search, defaultSearch } = useSearch((state) => state) + + const showClanRank = !defaultSearch + + return ( +
+ {clans + .filter((clan) => + clan.name.toLowerCase().startsWith(search.toLowerCase()), + ) + .map((clan, index) => ( +
+ {showClanRank && ( +

+ {(page - 1) * CLANS_RANKINGS_PER_PAGE + + index + + 1} +

+ )} +

+ + {cleanString(clan.name)} + +

+
+ {!!clan.created && clan.created > 0 + ? formatUnixTime(clan.created) + : "N/A"} +
+

{clan.xp}

+
+ ))} +
+ ) +} diff --git a/app/app/(rankings)/clans/[[...clansRankingsOptions]]/constants.ts b/app/app/(rankings)/clans/[[...clansRankingsOptions]]/constants.ts new file mode 100644 index 00000000..f84dad7c --- /dev/null +++ b/app/app/(rankings)/clans/[[...clansRankingsOptions]]/constants.ts @@ -0,0 +1 @@ +export const CLANS_RANKINGS_PER_PAGE = 50 diff --git a/app/app/(rankings)/clans/[[...clansRankingsOptions]]/page.tsx b/app/app/(rankings)/clans/[[...clansRankingsOptions]]/page.tsx new file mode 100644 index 00000000..68b8d75f --- /dev/null +++ b/app/app/(rankings)/clans/[[...clansRankingsOptions]]/page.tsx @@ -0,0 +1,95 @@ +import { type BHClan } from "db/generated/client" +import { BracketSelection } from "../../BracketSelection" +import { CLANS_RANKINGS_PER_PAGE } from "./constants" +import { ClansTable } from "./ClansTable" +import { type Metadata } from "next" +import { RankingsPagination } from "../../RankingsPagination" +import { Search } from "@/app/(rankings)/SearchInput" +import { SearchProvider } from "@/app/(rankings)/SearchProvider" +import { supabaseService } from "db/supabase/service" +import { z } from "zod" + +type RankingsClansPageProps = { + params: { + clansRankingsOptions?: string[] + } + searchParams: { + clan?: string + } +} + +const fetchClansRankings = async (page: number, name?: string) => { + let query = supabaseService.from("BHClan").select("*") + + const cleanName = name?.trim().replace(/'/g, "\\'") || "" + + if (cleanName.length > 0) { + query = query.ilike("name", `${cleanName}%`) + } else { + query = query.select("*") + } + + const { data, error } = await query + .order("xp", { ascending: false }) + .range( + (page - 1) * CLANS_RANKINGS_PER_PAGE, + page * CLANS_RANKINGS_PER_PAGE - 1, + ) + + if (error) { + throw error + } + + // TODO: type check this with zod + return data +} + +const getClansRankingsOptions = (clansRankingsOptions: string[]) => { + const page = z.coerce.number().catch(1).parse(clansRankingsOptions[0]) + + return { + page, + } +} + +export const generateMetadata = ({ + params: { clansRankingsOptions = [] }, + searchParams: { clan: clanSearch = "" }, +}: RankingsClansPageProps): Metadata => { + const { page } = getClansRankingsOptions(clansRankingsOptions) + + const title = `Brawlhalla Clans - Page ${page}${ + clanSearch ? ` - ${clanSearch}` : "" + } • Corehalla` + + return { + title, + description: title, + } +} + +export default async function RankingsClansPage({ + params: { clansRankingsOptions = [] }, + searchParams: { clan: clanSearch }, +}: RankingsClansPageProps) { + const { page } = getClansRankingsOptions(clansRankingsOptions) + const clans = await fetchClansRankings(page, clanSearch) + + const pagination = + + return ( + <> + + + + {pagination} + + {pagination} + + + ) +} diff --git a/app/app/(rankings)/power-rankings/[[...rankingsOptions]]/layout.tsx b/app/app/(rankings)/power-rankings/[[...rankingsOptions]]/layout.tsx new file mode 100644 index 00000000..81f8d1a8 --- /dev/null +++ b/app/app/(rankings)/power-rankings/[[...rankingsOptions]]/layout.tsx @@ -0,0 +1,43 @@ +import { BracketSelection } from "../../BracketSelection" +import { Paginator } from "ui/base/Paginator" +import { type ReactNode } from "react" +import { powerRankedRegionSchema, powerRankedRegions } from "bhapi/constants" +import { z } from "zod" + +type RankingsLayoutProps = { + children: ReactNode + params: { + rankingsOptions?: string[] + } +} + +export default async function RankingsLayout({ + children, + params: { rankingsOptions = [] }, +}: RankingsLayoutProps) { + const bracket = z + .enum(["1v1", "2v2"]) + .catch("1v1") + .parse(rankingsOptions[1]) + + const region = powerRankedRegionSchema.parse(rankingsOptions[1]) + + const regionPages = powerRankedRegions.map((region) => ({ + id: region, + label: region, + href: `/power-rankings/${bracket}/${region}`, + })) + + return ( + <> + + + + {children} + + ) +} diff --git a/app/app/(rankings)/power-rankings/[[...rankingsOptions]]/page.tsx b/app/app/(rankings)/power-rankings/[[...rankingsOptions]]/page.tsx new file mode 100644 index 00000000..bcd3b278 --- /dev/null +++ b/app/app/(rankings)/power-rankings/[[...rankingsOptions]]/page.tsx @@ -0,0 +1,3 @@ +export default function RankingsRotatingPage() { + return <>Power rankings Coming soon™ +} diff --git a/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/Rankings1v1Table.tsx b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/Rankings1v1Table.tsx new file mode 100644 index 00000000..946792f7 --- /dev/null +++ b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/Rankings1v1Table.tsx @@ -0,0 +1,53 @@ +"use client" + +import { Image } from "@/components/Image" +import { type Ranking1v1 } from "bhapi/types" +import { RankingsTableItem } from "@/app/(rankings)/RankingsTableItem" +import { cleanString } from "common/helpers/cleanString" +import { legendsMap } from "bhapi/legends" +import { useSearch } from "@/app/(rankings)/SearchProvider" +import Link from "next/link" + +type Rankings1v1TableProps = { + rankings: Ranking1v1[] +} + +export const Rankings1v1Table = ({ rankings }: Rankings1v1TableProps) => { + const { search } = useSearch((state) => state) + + return ( +
+ {rankings + ?.filter((player) => + player.name.toLowerCase().startsWith(search.toLowerCase()), + ) + .map((player, i) => { + const legend = legendsMap[player.best_legend] + + return ( + + {legend && ( + {legend.bio_name} + )} + {cleanString(player.name)} + + } + {...player} + /> + ) + })} +
+ ) +} diff --git a/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/page.tsx b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/page.tsx new file mode 100644 index 00000000..723bc267 --- /dev/null +++ b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked1v1/page.tsx @@ -0,0 +1,82 @@ +import { type Metadata } from "next" +import { Rankings1v1Table } from "./Rankings1v1Table" +import { RankingsPagination } from "@/app/(rankings)/RankingsPagination" +import { Search } from "@/app/(rankings)/SearchInput" +import { SearchProvider } from "@/app/(rankings)/SearchProvider" +import { get1v1Rankings } from "bhapi" +import { rankedRegionSchema } from "bhapi/constants" +import { z } from "zod" + +type Rankings1v1PageProps = { + params: { + rankingsOptions?: string[] + } + searchParams: { + player: string + } +} + +const getRankingsOptions = (rankingsOptions: string[]) => { + const region = rankedRegionSchema.parse(rankingsOptions[1]) + const page = z.coerce.number().catch(1).parse(rankingsOptions[2]) + + return { + region, + page, + } +} + +export const generateMetadata = ({ + params: { rankingsOptions = [] }, + searchParams: { player: playerSearch = "" }, +}: Rankings1v1PageProps): Metadata => { + if (rankingsOptions[0] !== "1v1") return {} + + const { region, page } = getRankingsOptions(rankingsOptions) + + const title = `Brawlhalla ${ + region === "all" ? "Global" : region.toUpperCase() + } 1v1 Rankings - Page ${page}${ + playerSearch ? ` - ${playerSearch}` : "" + } • Corehalla` + + return { + title, + description: title, + } +} + +export default async function Rankings1v1Page({ + params: { rankingsOptions = [] }, + searchParams: { player: playerSearch = "" }, +}: Rankings1v1PageProps) { + const { region, page } = getRankingsOptions(rankingsOptions) + const rankings = await get1v1Rankings(region, page, playerSearch) + + const pagination = ( + + ) + + return ( + + + {pagination} +
+

Rank

+

Tier

+

Region

+

Name

+

Games

+

W/L

+

Winrate

+

Elo

+
+ + {pagination} +
+ ) +} diff --git a/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/Rankings2v2Table.tsx b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/Rankings2v2Table.tsx new file mode 100644 index 00000000..18579916 --- /dev/null +++ b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/Rankings2v2Table.tsx @@ -0,0 +1,40 @@ +import { type Ranking2v2 } from "bhapi/types" +import { RankingsTableItem } from "@/app/(rankings)/RankingsTableItem" +import { cleanString } from "common/helpers/cleanString" +import { getTeamPlayers } from "bhapi/helpers/getTeamPlayers" +import Link from "next/link" + +type Rankings2v2TableProps = { + rankings: Ranking2v2[] +} + +export const Rankings2v2Table = ({ rankings }: Rankings2v2TableProps) => { + return ( +
+ {rankings.map((team, i) => { + const [player1, player2] = getTeamPlayers(team) + return ( + +

+ + {cleanString(player1.name)} + +

+

+ + {cleanString(player2.name)} + +

+ + } + {...team} + /> + ) + })} +
+ ) +} diff --git a/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/page.tsx b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/page.tsx new file mode 100644 index 00000000..38adeaf8 --- /dev/null +++ b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@ranked2v2/page.tsx @@ -0,0 +1,69 @@ +import { type Metadata } from "next" +import { Rankings2v2Table } from "./Rankings2v2Table" +import { RankingsPagination } from "@/app/(rankings)/RankingsPagination" +import { get2v2Rankings } from "bhapi" +import { rankedRegionSchema } from "bhapi/constants" +import { z } from "zod" + +type Rankings2v2PageProps = { + params: { + rankingsOptions?: string[] + } +} + +const getRankingsOptions = (rankingsOptions: string[]) => { + const region = rankedRegionSchema.parse(rankingsOptions[1]) + const page = z.coerce.number().catch(1).parse(rankingsOptions[2]) + + return { + region, + page, + } +} + +export const generateMetadata = ({ + params: { rankingsOptions = [] }, +}: Rankings2v2PageProps): Metadata => { + if (rankingsOptions[0] !== "2v2") return {} + + const { region, page } = getRankingsOptions(rankingsOptions) + + const title = `Brawlhalla ${ + region === "all" ? "Global" : region.toUpperCase() + } 2v2 Rankings - Page ${page} • Corehalla` + + return { + title, + description: title, + } +} + +export default async function Rankings2v2Page({ + params: { rankingsOptions = [] }, +}: Rankings2v2PageProps) { + const { region, page } = getRankingsOptions(rankingsOptions) + const rankings = await get2v2Rankings(region, page) + + const pagination = ( + + ) + + return ( + <> + {pagination} +
+

Rank

+

Tier

+

Region

+

Player 1

+

Player 2

+

Games

+

W/L

+

Winrate

+

Elo

+
+ + {pagination} + + ) +} diff --git a/app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/RankingsRotatingTable.tsx b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/RankingsRotatingTable.tsx new file mode 100644 index 00000000..00f7bc60 --- /dev/null +++ b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/RankingsRotatingTable.tsx @@ -0,0 +1,53 @@ +"use client" + +import { Image } from "@/components/Image" +import { type Ranking1v1 } from "bhapi/types" +import { RankingsTableItem } from "@/app/(rankings)/RankingsTableItem" +import { cleanString } from "common/helpers/cleanString" +import { legendsMap } from "bhapi/legends" +import { useSearch } from "@/app/(rankings)/SearchProvider" +import Link from "next/link" + +type Rankings1v1TableProps = { + rankings: Ranking1v1[] +} + +export const RankingsRotatingTable = ({ rankings }: Rankings1v1TableProps) => { + const { search } = useSearch((state) => state) + + return ( +
+ {rankings + ?.filter((player) => + player.name.toLowerCase().startsWith(search.toLowerCase()), + ) + .map((player, i) => { + const legend = legendsMap[player.best_legend] + + return ( + + {legend && ( + {legend.bio_name} + )} + {cleanString(player.name)} + + } + {...player} + /> + ) + })} +
+ ) +} diff --git a/app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/page.tsx b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/page.tsx new file mode 100644 index 00000000..7349537f --- /dev/null +++ b/app/app/(rankings)/ranked/[[...rankingsOptions]]/@rotating/page.tsx @@ -0,0 +1,85 @@ +import { type Metadata } from "next" +import { RankingsPagination } from "@/app/(rankings)/RankingsPagination" +import { RankingsRotatingTable } from "./RankingsRotatingTable" +import { Search } from "@/app/(rankings)/SearchInput" +import { SearchProvider } from "@/app/(rankings)/SearchProvider" +import { getRotatingRankings } from "bhapi" +import { rankedRegionSchema } from "bhapi/constants" +import { z } from "zod" + +type RankingsRotatingPageProps = { + params: { + rankingsOptions?: string[] + } + searchParams: { + player: string + } +} + +const getRankingsOptions = (rankingsOptions: string[]) => { + const region = rankedRegionSchema.parse(rankingsOptions[1]) + const page = z.coerce.number().catch(1).parse(rankingsOptions[2]) + + return { + region, + page, + } +} + +export const generateMetadata = ({ + params: { rankingsOptions = [] }, + searchParams: { player: playerSearch = "" }, +}: RankingsRotatingPageProps): Metadata => { + if (rankingsOptions[0] !== "rotating") return {} + + const { region, page } = getRankingsOptions(rankingsOptions) + + const title = `Brawlhalla ${ + region === "all" ? "Global" : region.toUpperCase() + } Rotating Rankings - Page ${page}${ + playerSearch ? ` - ${playerSearch}` : "" + } • Corehalla` + + return { + title, + description: title, + } +} + +export default async function RankingsRotatingPage({ + params: { rankingsOptions = [] }, + searchParams: { player: playerSearch = "" }, +}: RankingsRotatingPageProps) { + const { region, page } = getRankingsOptions(rankingsOptions) + const rankings = await getRotatingRankings(region, page, playerSearch) + + const pagination = ( + + ) + + return ( + + + {pagination} +
+

Rank

+

Tier

+

Region

+

Name

+

Games

+

W/L

+

Winrate

+

Elo

+
+ + {pagination} +
+ ) +} diff --git a/app/app/(rankings)/ranked/[[...rankingsOptions]]/layout.tsx b/app/app/(rankings)/ranked/[[...rankingsOptions]]/layout.tsx new file mode 100644 index 00000000..5223391a --- /dev/null +++ b/app/app/(rankings)/ranked/[[...rankingsOptions]]/layout.tsx @@ -0,0 +1,55 @@ +import { BracketSelection } from "../../BracketSelection" +import { Paginator } from "ui/base/Paginator" +import { type ReactNode } from "react" +import { rankedRegionSchema, rankedRegions } from "bhapi/constants" +import { z } from "zod" + +type RankingsLayoutProps = { + ranked1v1: ReactNode + ranked2v2: ReactNode + rotating: ReactNode + params: { + rankingsOptions?: string[] + } +} + +const getRankingsOptions = (rankingsOptions: string[]) => { + const bracket = z + .enum(["1v1", "2v2", "rotating"]) + .catch("1v1") + .parse(rankingsOptions[0]) + + const region = rankedRegionSchema.parse(rankingsOptions[1]) + + return { bracket, region } +} + +export default async function RankingsLayout({ + ranked1v1, + ranked2v2, + rotating, + params: { rankingsOptions = [] }, +}: RankingsLayoutProps) { + const { bracket, region } = getRankingsOptions(rankingsOptions) + + const regionPages = rankedRegions.map((region) => ({ + id: region, + label: region, + href: `/ranked/${bracket}/${region}`, + })) + + return ( + <> + + + + {bracket === "1v1" && ranked1v1} + {bracket === "2v2" && ranked2v2} + {bracket === "rotating" && rotating} + + ) +} diff --git a/app/app/(rankings)/ranked/queue/page.tsx b/app/app/(rankings)/ranked/queue/page.tsx new file mode 100644 index 00000000..ce9bfd93 --- /dev/null +++ b/app/app/(rankings)/ranked/queue/page.tsx @@ -0,0 +1,3 @@ +export default function RankedQueuePage() { + return
RankedQueuePage Coming soon™
+} diff --git a/app/app/(stats)/TabContentLoader.tsx b/app/app/(stats)/TabContentLoader.tsx new file mode 100644 index 00000000..cf52557d --- /dev/null +++ b/app/app/(stats)/TabContentLoader.tsx @@ -0,0 +1,9 @@ +import { AnimatedLogo } from "ui/base/AnimatedLogo" + +export const TabContentLoader = () => { + return ( +
+ +
+ ) +} diff --git a/app/components/stats/clan/ClanMember.tsx b/app/app/(stats)/clan/[clanId]/ClanMember.tsx similarity index 95% rename from app/components/stats/clan/ClanMember.tsx rename to app/app/(stats)/clan/[clanId]/ClanMember.tsx index 5317d18d..5adc09f8 100644 --- a/app/components/stats/clan/ClanMember.tsx +++ b/app/app/(stats)/clan/[clanId]/ClanMember.tsx @@ -2,13 +2,12 @@ import { AppLink } from "ui/base/AppLink" import { Card } from "ui/base/Card" import { FaCrown } from "react-icons/fa" import { HiStar, HiUser, HiUserAdd } from "react-icons/hi" -import { MiscStatGroup } from "../MiscStatGroup" +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" import { cleanString } from "common/helpers/cleanString" import { formatUnixTime } from "common/helpers/date" import type { Clan } from "bhapi/types" import type { ClanRank } from "bhapi/constants" import type { IconType } from "react-icons" -import type { MiscStat } from "../MiscStatGroup" type ClanMemberProps = { member: Clan["clan"][number] diff --git a/app/app/(stats)/clan/[clanId]/ClanStatsHeader.tsx b/app/app/(stats)/clan/[clanId]/ClanStatsHeader.tsx new file mode 100644 index 00000000..fae62336 --- /dev/null +++ b/app/app/(stats)/clan/[clanId]/ClanStatsHeader.tsx @@ -0,0 +1,49 @@ +"use client" + +import { type MiscStat } from "@/components/stats/MiscStatGroup" +import { StatsHeader } from "@/components/stats/StatsHeader" +import { cleanString } from "common/helpers/cleanString" +import { formatUnixTime } from "common/helpers/date" +import { useClanStats } from "./ClanStatsProvider" + +export const ClanStatsHeader = () => { + const { clan } = useClanStats() + + const clanStats: MiscStat[] = [ + { + name: "Created on", + value: formatUnixTime(clan.clan_create_date), + desc: `Date when ${cleanString(clan.clan_name)} was created`, + }, + // { + // name: "Level", + // value: "TBA", + // }, + { + name: "XP", + value: clan.clan_xp, + desc: `XP earned by ${cleanString( + clan.clan_name, + )} members since creation`, + }, + { + name: "Members", + value: clan.clan.length, + desc: `Number of members in ${cleanString(clan.clan_name)}`, + }, + ] + + return ( + + ) +} diff --git a/app/app/(stats)/clan/[clanId]/ClanStatsProvider.tsx b/app/app/(stats)/clan/[clanId]/ClanStatsProvider.tsx new file mode 100644 index 00000000..a58d7151 --- /dev/null +++ b/app/app/(stats)/clan/[clanId]/ClanStatsProvider.tsx @@ -0,0 +1,43 @@ +"use client" + +import { type Clan } from "bhapi/types" +import { type ReactNode, createContext, useContext } from "react" + +type ClanStatsContext = { + clan: Clan | null +} + +export const clanStatsContext = createContext({ + clan: null, +}) + +export const useClanStats = () => { + const context = useContext(clanStatsContext) + if (!context) { + throw new Error(`useClanStats must be used within a ClanStatsProvider`) + } + + const { clan } = context + + if (!clan) { + throw new Error(`useClanStats must be used with a valid clan`) + } + + return { clan } +} + +type ClanStatsProviderProps = { + children: ReactNode + clan: Clan +} + +export const ClanStatsProvider = ({ + children, + clan, +}: ClanStatsProviderProps) => { + return ( + + {children} + + ) +} diff --git a/app/app/(stats)/clan/[clanId]/layout.tsx b/app/app/(stats)/clan/[clanId]/layout.tsx new file mode 100644 index 00000000..3bbcf2e1 --- /dev/null +++ b/app/app/(stats)/clan/[clanId]/layout.tsx @@ -0,0 +1,45 @@ +import { ClanStatsHeader } from "./ClanStatsHeader" +import { ClanStatsProvider } from "./ClanStatsProvider" +import { type Metadata } from "next" +import { type ReactNode, cache } from "react" +import { getClan } from "bhapi" + +type ClanStatsLayoutProps = { + children: ReactNode + params: { + clanId: string + } +} + +const fetchClanData = cache(async (clanId: string) => { + const clan = await getClan(clanId) + + return { + clan, + } +}) + +export const generateMetadata = async ({ + params: { clanId }, +}: ClanStatsLayoutProps): Promise => { + const { clan } = await fetchClanData(clanId) + + return { + title: `${clan.clan_name} - Clan Stats • Corehalla`, + description: `${clan.clan_name} Stats - Brawlhalla Clan Stats • Corehalla`, + } +} + +export default async function ClanStatsLayout({ + params: { clanId }, + children, +}: ClanStatsLayoutProps) { + const { clan } = await fetchClanData(clanId) + + return ( + + + {children} + + ) +} diff --git a/app/app/(stats)/clan/[clanId]/page.tsx b/app/app/(stats)/clan/[clanId]/page.tsx new file mode 100644 index 00000000..50fe951b --- /dev/null +++ b/app/app/(stats)/clan/[clanId]/page.tsx @@ -0,0 +1,38 @@ +"use client" + +import { ClanMember } from "./ClanMember" +import { useClanStats } from "./ClanStatsProvider" +import type { ClanRank } from "bhapi/constants" + +const clanRankWeights: Record = { + Leader: 0, + Officer: 1, + Member: 2, + Recruit: 3, +} as const + +export default function ClanStatsPage() { + const { clan } = useClanStats() + + const sortedMembers = clan.clan.sort((a, b) => { + if (a.rank === b.rank) { + return a.join_date - b.join_date + } + + return clanRankWeights[a.rank] - clanRankWeights[b.rank] + }) + + return ( + <> +
+ {sortedMembers.map((member) => ( + + ))} +
+ + ) +} diff --git a/app/components/stats/TeamCard.tsx b/app/app/(stats)/player/[playerId]/2v2/TeamCard.tsx similarity index 92% rename from app/components/stats/TeamCard.tsx rename to app/app/(stats)/player/[playerId]/2v2/TeamCard.tsx index b7c8c113..2f0458bd 100644 --- a/app/components/stats/TeamCard.tsx +++ b/app/app/(stats)/player/[playerId]/2v2/TeamCard.tsx @@ -2,17 +2,17 @@ import { getPlayerTeam } from "bhapi/helpers/getTeamPlayers" import { rankedRegions } from "bhapi/constants" import type { PlayerRanked } from "bhapi/types" -import { AppLink } from "ui/base/AppLink" import { Card } from "ui/base/Card" -import { Image } from "@components/Image" -import { MiscStatGroup } from "./MiscStatGroup" -import { RatingDisplay } from "./RatingDisplay" +import { Image } from "@/components/Image" +import { MiscStatGroup } from "@/components/stats/MiscStatGroup" +import { RatingDisplay } from "@/components/stats/RatingDisplay" import { calculateWinrate } from "bhapi/helpers/calculateWinrate" import { cleanString } from "common/helpers/cleanString" import { cn } from "common/helpers/classnames" import { css } from "ui/theme" import { getLegendEloReset } from "bhapi/calculator" import { getTierFromRating } from "bhapi/helpers/getTierFromRating" +import Link from "next/link" type TeamCardProps = { playerId: number @@ -34,7 +34,7 @@ export const TeamCard = ({ playerId, team }: TeamCardProps) => { const eloReset = getLegendEloReset(team.rating) return ( - + { ]} /> - + ) } diff --git a/app/app/(stats)/player/[playerId]/2v2/loading.tsx b/app/app/(stats)/player/[playerId]/2v2/loading.tsx new file mode 100644 index 00000000..a49b159e --- /dev/null +++ b/app/app/(stats)/player/[playerId]/2v2/loading.tsx @@ -0,0 +1,5 @@ +import { TabContentLoader } from "@/app/(stats)/TabContentLoader" + +export default function Loading() { + return +} diff --git a/app/components/stats/player/Player2v2Tab/Player2v2Tab.tsx b/app/app/(stats)/player/[playerId]/2v2/page.tsx similarity index 93% rename from app/components/stats/player/Player2v2Tab/Player2v2Tab.tsx rename to app/app/(stats)/player/[playerId]/2v2/page.tsx index 77944bc1..b3c3b33f 100644 --- a/app/components/stats/player/Player2v2Tab/Player2v2Tab.tsx +++ b/app/app/(stats)/player/[playerId]/2v2/page.tsx @@ -1,15 +1,13 @@ -import { MiscStatGroup } from "../../MiscStatGroup" +"use client" + +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" +import { type PlayerRanked } from "bhapi/types" import { Select } from "ui/base/Select" import { SortAscendingIcon, SortDescendingIcon } from "ui/icons" import { SortDirection, useSortBy } from "common/hooks/useSortBy" -import { TeamCard } from "../../TeamCard" +import { TeamCard } from "./TeamCard" import { calculateWinrate } from "bhapi/helpers/calculateWinrate" -import type { MiscStat } from "../../MiscStatGroup" -import type { PlayerRanked } from "bhapi/types" - -type Player2v2TabProps = { - ranked: PlayerRanked -} +import { usePlayerStats } from "../PlayerStatsProvider" type TeamSortOption = | "games" @@ -19,7 +17,13 @@ type TeamSortOption = | "rating" | "peak_rating" -export const Player2v2Tab = ({ ranked }: Player2v2TabProps) => { +export default function PlayerStats2v2Page() { + const { ranked } = usePlayerStats() + + if (!ranked) { + throw new Error("404") + } + const teams = ranked["2v2"] const { totalWins, totalGames, totalRating, totalPeakRating } = ranked[ "2v2" diff --git a/app/app/(stats)/player/[playerId]/PlayerStatsHeader.tsx b/app/app/(stats)/player/[playerId]/PlayerStatsHeader.tsx new file mode 100644 index 00000000..e5f012b2 --- /dev/null +++ b/app/app/(stats)/player/[playerId]/PlayerStatsHeader.tsx @@ -0,0 +1,122 @@ +"use client" + +import { Image } from "@/components/Image" +import { MAX_SHOWN_ALIASES } from "@/util/constants" +import { type MiscStat } from "@/components/stats/MiscStatGroup" +import { StatsHeader } from "@/components/stats/StatsHeader" +import { cleanString } from "common/helpers/cleanString" +import { formatTime } from "common/helpers/date" +import { usePlayerStats } from "./PlayerStatsProvider" + +export const PlayerStatsHeader = () => { + const { + stats, + ranked, + aliases, + legends, + legendsAccumulativeData: { matchtime }, + weapons, + } = usePlayerStats() + + const legendsSortedByLevel = legends + .slice(0) + .sort((a, b) => (b.stats?.matchtime ?? 0) - (a.stats?.matchtime ?? 0)) + + const accountStats: MiscStat[] = [ + { + name: "Account level", + value: stats.level, + desc: `${stats.name}'s account level`, + }, + { + name: "Account XP", + value: stats.xp, + desc: `${stats.name}'s account XP`, + }, + { + name: "Game time", + value: formatTime(matchtime), + desc: `Time ${stats.name} spent in game`, + }, + { + name: "Main legends", + value: ( +
+ {legendsSortedByLevel.slice(0, 3).map((legend) => ( + {legend.bio_name} + ))} +
+ ), + desc: `${stats.name}'s main legends`, + }, + { + name: "Main weapons", + value: ( +
+ {weapons + .map(({ weapon, legends }) => ({ + weapon, + matchtime: legends.reduce((acc, legend) => { + const matchtime = + weapon === legend.weapon_one + ? legend.stats?.timeheldweaponone + : legend.stats?.timeheldweapontwo + return acc + (matchtime ?? 0) + }, 0), + })) + .sort((a, b) => b.matchtime - a.matchtime) + .slice(0, 3) + .map((weapon) => ( + {weapon.weapon} + ))} +
+ ), + desc: `${stats.name}'s main weapons`, + }, + ] + + return ( + alias.public) + .map((alias) => alias.alias) + .slice(0, MAX_SHOWN_ALIASES)} + miscStats={accountStats} + icon={ + ranked?.region && ( + Region Flag + ) + } + favorite={{ + type: "player", + id: stats.brawlhalla_id.toString(), + name: cleanString(stats.name), + meta: { + icon: { + type: "legend", + legend_id: legendsSortedByLevel[0].legend_id, + }, + }, + }} + /> + ) +} diff --git a/app/app/(stats)/player/[playerId]/PlayerStatsProvider.tsx b/app/app/(stats)/player/[playerId]/PlayerStatsProvider.tsx new file mode 100644 index 00000000..56f7d492 --- /dev/null +++ b/app/app/(stats)/player/[playerId]/PlayerStatsProvider.tsx @@ -0,0 +1,87 @@ +"use client" + +import { type BHPlayerAlias } from "db/generated/client" +import { + type FullLegend, + type FullWeapon, + defaultLegendAccumulativeData, + defaultWeaponlessData, + getFullLegends, + getFullWeapons, + getLegendsAccumulativeData, + getWeaponlessData, +} from "bhapi/legends" +import { type PlayerRanked, type PlayerStats } from "bhapi/types" +import { type ReactNode, createContext, useContext } from "react" + +type PlayerStatsContext = { + stats: PlayerStats | null + ranked: PlayerRanked | null + aliases: BHPlayerAlias[] + legends: FullLegend[] + legendsAccumulativeData: ReturnType + weapons: FullWeapon[] + weaponLessData: ReturnType +} + +const playerStatsContext = createContext({ + stats: null, + ranked: null, + aliases: [], + legends: [], + weapons: [], + legendsAccumulativeData: defaultLegendAccumulativeData, + weaponLessData: defaultWeaponlessData, +}) + +export const usePlayerStats = () => { + const context = useContext(playerStatsContext) + if (!context) { + throw new Error( + `usePlayerStats must be used within a PlayerStatsProvider`, + ) + } + + const { stats, ...rest } = context + + if (!stats) { + throw new Error(`usePlayerStats must be used with a valid player`) + } + + return { stats, ...rest } +} + +type PlayerStatsProviderProps = { + children: ReactNode + stats: PlayerStats + ranked: PlayerRanked + aliases: BHPlayerAlias[] +} + +export const PlayerStatsProvider = ({ + children, + stats, + ranked, + aliases, +}: PlayerStatsProviderProps) => { + const legends = getFullLegends(stats.legends || [], ranked?.legends) + const legendsAccumulativeData = getLegendsAccumulativeData(legends) + const weapons = getFullWeapons(legends) + const weaponLessData = getWeaponlessData(legends) + + return ( + + {children} + + ) +} diff --git a/app/app/(stats)/player/[playerId]/PlayerStatsTabs.tsx b/app/app/(stats)/player/[playerId]/PlayerStatsTabs.tsx new file mode 100644 index 00000000..2e6c623b --- /dev/null +++ b/app/app/(stats)/player/[playerId]/PlayerStatsTabs.tsx @@ -0,0 +1,67 @@ +"use client" + +import { cn } from "common/helpers/classnames" +import { css, theme } from "ui/theme" +import { usePlayerStats } from "./PlayerStatsProvider" +import { useSelectedLayoutSegment } from "next/navigation" +import Link from "next/link" + +const tabClassName = cn( + "px-6 py-4 uppercase text-xs border-b-2 z-10 whitespace-nowrap", + css({ + borderColor: "transparent", + color: theme.colors.textVar1, + '&[data-state="active"]': { + borderColor: theme.colors.accent, + color: theme.colors.text, + }, + "&:hover": { + backgroundColor: theme.colors.bgVar2, + borderColor: theme.colors.text, + color: theme.colors.text, + }, + })(), +) + +export const PlayerStatsTabs = () => { + const { + stats: { brawlhalla_id: playerId }, + ranked, + } = usePlayerStats() + const segment = useSelectedLayoutSegment() + + return ( + + ) +} diff --git a/app/components/stats/player/PlayerOverviewTab/ClanContent.tsx b/app/app/(stats)/player/[playerId]/_overview/ClanContent.tsx similarity index 78% rename from app/components/stats/player/PlayerOverviewTab/ClanContent.tsx rename to app/app/(stats)/player/[playerId]/_overview/ClanContent.tsx index 6cba49ef..3505763b 100644 --- a/app/components/stats/player/PlayerOverviewTab/ClanContent.tsx +++ b/app/app/(stats)/player/[playerId]/_overview/ClanContent.tsx @@ -1,19 +1,15 @@ import { AppLink } from "ui/base/AppLink" import { ClanIcon } from "ui/icons" -import { CollapsibleSection } from "@components/layout/CollapsibleSection" -import { MiscStatGroup } from "../../MiscStatGroup" +import { CollapsibleSection } from "@/components/layout/CollapsibleSection" +import { MiscStatGroup } from "@/components/stats/MiscStatGroup" import { cleanString } from "common/helpers/cleanString" import { cn } from "common/helpers/classnames" -import type { PlayerStats } from "bhapi/types" +import { usePlayerStats } from "../PlayerStatsProvider" -type PlayerOverviewClanContentProps = { - playerStats: PlayerStats -} - -export const PlayerOverviewClanContent = ({ - playerStats, -}: PlayerOverviewClanContentProps) => { - const { name: playerName, clan } = playerStats +export const ClanContent = () => { + const { + stats: { name: playerName, clan }, + } = usePlayerStats() if (!clan) return null @@ -28,7 +24,7 @@ export const PlayerOverviewClanContent = ({ >

{ + const { ranked } = usePlayerStats() + + if (!ranked) { + return null + } -export const PlayerOverviewRankedContent = ({ - ranked, -}: PlayerOverviewRankedContentProps) => { const glory = getGlory(ranked) const eloReset = getPersonalEloReset(ranked.rating) diff --git a/app/app/(stats)/player/[playerId]/layout.tsx b/app/app/(stats)/player/[playerId]/layout.tsx new file mode 100644 index 00000000..7b4935f3 --- /dev/null +++ b/app/app/(stats)/player/[playerId]/layout.tsx @@ -0,0 +1,65 @@ +import { type BHPlayerAlias } from "db/generated/client" +import { type Metadata } from "next" +import { PlayerStatsHeader } from "./PlayerStatsHeader" +import { PlayerStatsProvider } from "./PlayerStatsProvider" +import { PlayerStatsTabs } from "./PlayerStatsTabs" +import { type ReactNode, cache } from "react" +import { getPlayerRanked, getPlayerStats } from "bhapi" +import { supabaseService } from "db/supabase/service" + +type PlayerStatsLayoutProps = { + children: ReactNode + params: { + playerId: string + } +} + +const fetchPlayerData = cache(async (playerId: string) => { + const [stats, ranked, aliases] = await Promise.all([ + getPlayerStats(playerId), + getPlayerRanked(playerId), + (async () => { + const { data, error } = await supabaseService + .from("BHPlayerAlias") + .select("*") + .order("createdAt", { ascending: false }) + .match({ playerId, public: true }) + + if (error) throw error + + return data + })(), + ]) + + return { + stats, + ranked, + aliases, + } +}) + +export const generateMetadata = async ({ + params: { playerId }, +}: PlayerStatsLayoutProps): Promise => { + const { stats } = await fetchPlayerData(playerId) + + return { + title: `${stats.name} - Player Stats • Corehalla`, + description: `${stats.name} Stats - Brawlhalla Player Stats • Corehalla`, + } +} + +export default async function PlayerStatsLayout({ + params: { playerId }, + children, +}: PlayerStatsLayoutProps) { + const { stats, ranked, aliases } = await fetchPlayerData(playerId) + + return ( + + + + {children} + + ) +} diff --git a/app/components/stats/player/PlayerLegendsTab/Legend.tsx b/app/app/(stats)/player/[playerId]/legends/Legend.tsx similarity index 92% rename from app/components/stats/player/PlayerLegendsTab/Legend.tsx rename to app/app/(stats)/player/[playerId]/legends/Legend.tsx index 8d4a3dcd..105ac65d 100644 --- a/app/components/stats/player/PlayerLegendsTab/Legend.tsx +++ b/app/app/(stats)/player/[playerId]/legends/Legend.tsx @@ -1,12 +1,11 @@ -import { CollapsibleContent } from "../../../layout/CollapsibleContent" -import { GeneralStats } from "../../GeneralStats" -import { Image } from "@components/Image" -import { MiscStatGroup } from "../../MiscStatGroup" +import { CollapsibleContent } from "@/components/layout/CollapsibleContent" +import { GeneralStats } from "@/components/stats/GeneralStats" +import { Image } from "@/components/Image" +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" import { PlayerLegendRankedContent } from "./RankedContent" import { PlayerLegendWeaponDistribution } from "./WeaponDistribution" import { formatTime } from "common/helpers/date" import type { FullLegend } from "bhapi/legends" -import type { MiscStat } from "../../MiscStatGroup" type LegendProps = { legend: FullLegend diff --git a/app/components/stats/player/PlayerLegendsTab/RankedContent.tsx b/app/app/(stats)/player/[playerId]/legends/RankedContent.tsx similarity index 88% rename from app/components/stats/player/PlayerLegendsTab/RankedContent.tsx rename to app/app/(stats)/player/[playerId]/legends/RankedContent.tsx index fbf3754c..cde18181 100644 --- a/app/components/stats/player/PlayerLegendsTab/RankedContent.tsx +++ b/app/app/(stats)/player/[playerId]/legends/RankedContent.tsx @@ -1,12 +1,11 @@ -import { CollapsibleSection } from "@components/layout/CollapsibleSection" -import { Image } from "@components/Image" -import { MiscStatGroup } from "../../MiscStatGroup" -import { RatingDisplay } from "../../RatingDisplay" +import { CollapsibleSection } from "@/components/layout/CollapsibleSection" +import { Image } from "@/components/Image" +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" +import { RatingDisplay } from "@/components/stats/RatingDisplay" import { calculateWinrate } from "bhapi/helpers/calculateWinrate" import { getLegendEloReset } from "bhapi/calculator" import { getTierFromRating } from "bhapi/helpers/getTierFromRating" import type { FullLegend } from "bhapi/legends" -import type { MiscStat } from "../../MiscStatGroup" type PlayerLegendRankedContentProps = { ranked: FullLegend["ranked"] diff --git a/app/components/stats/player/PlayerLegendsTab/WeaponDistribution.tsx b/app/app/(stats)/player/[playerId]/legends/WeaponDistribution.tsx similarity index 98% rename from app/components/stats/player/PlayerLegendsTab/WeaponDistribution.tsx rename to app/app/(stats)/player/[playerId]/legends/WeaponDistribution.tsx index f61b2b77..e979ee64 100644 --- a/app/components/stats/player/PlayerLegendsTab/WeaponDistribution.tsx +++ b/app/app/(stats)/player/[playerId]/legends/WeaponDistribution.tsx @@ -1,7 +1,7 @@ import { Card } from "ui/base/Card" -import { CollapsibleSection } from "@components/layout/CollapsibleSection" -import { Image } from "@components/Image" -import { MiscStatGroup } from "@components/stats/MiscStatGroup" +import { CollapsibleSection } from "@/components/layout/CollapsibleSection" +import { Image } from "@/components/Image" +import { MiscStatGroup } from "@/components/stats/MiscStatGroup" import { formatTime } from "common/helpers/date" import type { FullLegend } from "bhapi/legends" diff --git a/app/app/(stats)/player/[playerId]/legends/loading.tsx b/app/app/(stats)/player/[playerId]/legends/loading.tsx new file mode 100644 index 00000000..a49b159e --- /dev/null +++ b/app/app/(stats)/player/[playerId]/legends/loading.tsx @@ -0,0 +1,5 @@ +import { TabContentLoader } from "@/app/(stats)/TabContentLoader" + +export default function Loading() { + return +} diff --git a/app/components/stats/player/PlayerLegendsTab/PlayerLegendsTab.tsx b/app/app/(stats)/player/[playerId]/legends/page.tsx similarity index 96% rename from app/components/stats/player/PlayerLegendsTab/PlayerLegendsTab.tsx rename to app/app/(stats)/player/[playerId]/legends/page.tsx index 9236b731..6599238c 100644 --- a/app/components/stats/player/PlayerLegendsTab/PlayerLegendsTab.tsx +++ b/app/app/(stats)/player/[playerId]/legends/page.tsx @@ -1,22 +1,18 @@ +"use client" + import { Legend } from "./Legend" -import { MiscStatGroup } from "../../MiscStatGroup" +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" import { Select } from "ui/base/Select" import { SortAscendingIcon, SortDescendingIcon } from "ui/icons" import { SortDirection, useSortBy } from "common/hooks/useSortBy" import { calculateWinrate } from "bhapi/helpers/calculateWinrate" import { formatTime } from "common/helpers/date" import { useMemo, useState } from "react" +import { usePlayerStats } from "../PlayerStatsProvider" import { weapons } from "bhapi/constants" import type { FullLegend } from "bhapi/legends" -import type { MiscStat } from "../../MiscStatGroup" import type { Weapon } from "bhapi/constants" -type PlayerLegendsTabProps = { - legends: FullLegend[] - matchtime: number - games: number -} - type LegendSortOption = | "name" | "xp" @@ -28,11 +24,13 @@ type LegendSortOption = | "peak_rating" | "matchtime" -export const PlayerLegendsTab = ({ - legends, - matchtime, - games, -}: PlayerLegendsTabProps) => { +export default function PlayerLegendsTab() { + const { + legends, + stats: { games }, + legendsAccumulativeData: { matchtime }, + } = usePlayerStats() + const [weaponFilter, setWeaponFilter] = useState("") const { sortedArray: sortedLegends, diff --git a/app/app/(stats)/player/[playerId]/loading.tsx b/app/app/(stats)/player/[playerId]/loading.tsx new file mode 100644 index 00000000..a49b159e --- /dev/null +++ b/app/app/(stats)/player/[playerId]/loading.tsx @@ -0,0 +1,5 @@ +import { TabContentLoader } from "@/app/(stats)/TabContentLoader" + +export default function Loading() { + return +} diff --git a/app/components/stats/player/PlayerOverviewTab/PlayerOverviewTab.tsx b/app/app/(stats)/player/[playerId]/page.tsx similarity index 72% rename from app/components/stats/player/PlayerOverviewTab/PlayerOverviewTab.tsx rename to app/app/(stats)/player/[playerId]/page.tsx index af5427bb..6e640a37 100644 --- a/app/components/stats/player/PlayerOverviewTab/PlayerOverviewTab.tsx +++ b/app/app/(stats)/player/[playerId]/page.tsx @@ -1,43 +1,35 @@ -import { CollapsibleSection } from "@components/layout/CollapsibleSection" -import { FiTarget } from "react-icons/fi" -import { GeneralStats } from "../../GeneralStats" -import { HiChartBar, HiFire, HiHand } from "react-icons/hi" -import { MiscStatGroup } from "../../MiscStatGroup" -import { PlayerOverviewClanContent } from "./ClanContent" -import { PlayerOverviewRankedContent } from "./RankedContent" -import { formatTime } from "common/helpers/date" -import { getWeaponlessData } from "bhapi/legends" -import type { FullLegend } from "bhapi/legends" -import type { MiscStat } from "../../MiscStatGroup" -import type { PlayerRanked, PlayerStats } from "bhapi/types" +"use client" -type PlayerOverviewTabProps = { - stats: PlayerStats - ranked?: PlayerRanked - legends: FullLegend[] - kos: number - falls: number - suicides: number - teamkos: number - damageDealt: number - damageTaken: number - matchtime: number -} +import { ClanContent } from "./_overview/ClanContent" +import { CollapsibleSection } from "@/components/layout/CollapsibleSection" +import { + GadgetsIcon, + GeneralStatsIcon, + UnarmedIcon, + WeaponThrowsIcon, +} from "ui/icons" +import { GeneralStats } from "@/components/stats/GeneralStats" +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" +import { RankedContent } from "./_overview/RankedContent" +import { formatTime } from "common/helpers/date" +import { usePlayerStats } from "./PlayerStatsProvider" -export const PlayerOverviewTab = ({ - stats, - ranked, - legends, - kos, - falls, - suicides, - teamkos, - damageDealt, - damageTaken, - matchtime, -}: PlayerOverviewTabProps) => { +export default function PlayerStatsPage() { + const { + stats, + ranked, + legendsAccumulativeData: { + matchtime, + kos, + falls, + suicides, + teamkos, + damageDealt, + damageTaken, + }, + weaponLessData: { unarmed, gadgets, throws }, + } = usePlayerStats() const { clan } = stats - const { unarmed, gadgets, throws } = getWeaponlessData(legends) const generalStats: MiscStat[] = [ { @@ -127,12 +119,15 @@ export const PlayerOverviewTab = ({ return ( <> - {ranked && } - {clan && } + {ranked && } + {clan && } - + General Stats } @@ -153,7 +148,7 @@ export const PlayerOverviewTab = ({ - + Unarmed } @@ -163,7 +158,10 @@ export const PlayerOverviewTab = ({ - + Weapon Throws } @@ -173,7 +171,7 @@ export const PlayerOverviewTab = ({ - + Gadgets } diff --git a/app/components/stats/player/PlayerWeaponsTab/RankedContent.tsx b/app/app/(stats)/player/[playerId]/weapons/RankedContent.tsx similarity index 96% rename from app/components/stats/player/PlayerWeaponsTab/RankedContent.tsx rename to app/app/(stats)/player/[playerId]/weapons/RankedContent.tsx index af04a7c7..2675876e 100644 --- a/app/components/stats/player/PlayerWeaponsTab/RankedContent.tsx +++ b/app/app/(stats)/player/[playerId]/weapons/RankedContent.tsx @@ -1,10 +1,9 @@ -import { Image } from "@components/Image" -import { MiscStatGroup } from "../../MiscStatGroup" -import { SectionTitle } from "../../../layout/SectionTitle" +import { Image } from "@/components/Image" +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" +import { SectionTitle } from "@/components/layout/SectionTitle" import { calculateWinrate } from "bhapi/helpers/calculateWinrate" import { memo } from "react" import type { FullLegend, FullWeapon } from "bhapi/legends" -import type { MiscStat } from "../../MiscStatGroup" type PlayerWeaponRankedContentProps = { weapon: FullWeapon diff --git a/app/components/stats/player/PlayerWeaponsTab/Weapon.tsx b/app/app/(stats)/player/[playerId]/weapons/Weapon.tsx similarity index 94% rename from app/components/stats/player/PlayerWeaponsTab/Weapon.tsx rename to app/app/(stats)/player/[playerId]/weapons/Weapon.tsx index f32446f0..13f5dacb 100644 --- a/app/components/stats/player/PlayerWeaponsTab/Weapon.tsx +++ b/app/app/(stats)/player/[playerId]/weapons/Weapon.tsx @@ -1,12 +1,11 @@ import { Card } from "ui/base/Card" -import { CollapsibleContent } from "../../../layout/CollapsibleContent" -import { GamesDisplay } from "../../GamesDisplay" -import { Image } from "@components/Image" -import { MiscStatGroup } from "../../MiscStatGroup" +import { CollapsibleContent } from "@/components/layout/CollapsibleContent" +import { GamesDisplay } from "@/components/stats/GamesDisplay" +import { Image } from "@/components/Image" +import { type MiscStat, MiscStatGroup } from "@/components/stats/MiscStatGroup" import { PlayerWeaponRankedContent } from "./RankedContent" import { formatTime } from "common/helpers/date" import type { FullWeapon } from "bhapi/legends" -import type { MiscStat } from "../../MiscStatGroup" type Weapon = FullWeapon & { games: number diff --git a/app/app/(stats)/player/[playerId]/weapons/loading.tsx b/app/app/(stats)/player/[playerId]/weapons/loading.tsx new file mode 100644 index 00000000..a49b159e --- /dev/null +++ b/app/app/(stats)/player/[playerId]/weapons/loading.tsx @@ -0,0 +1,5 @@ +import { TabContentLoader } from "@/app/(stats)/TabContentLoader" + +export default function Loading() { + return +} diff --git a/app/components/stats/player/PlayerWeaponsTab/PlayerWeaponsTab.tsx b/app/app/(stats)/player/[playerId]/weapons/page.tsx similarity index 93% rename from app/components/stats/player/PlayerWeaponsTab/PlayerWeaponsTab.tsx rename to app/app/(stats)/player/[playerId]/weapons/page.tsx index 69276528..f73b978e 100644 --- a/app/components/stats/player/PlayerWeaponsTab/PlayerWeaponsTab.tsx +++ b/app/app/(stats)/player/[playerId]/weapons/page.tsx @@ -1,3 +1,5 @@ +"use client" + import { Select } from "ui/base/Select" import { SortAscendingIcon, SortDescendingIcon } from "ui/icons" import { SortDirection, useSortBy } from "common/hooks/useSortBy" @@ -6,13 +8,7 @@ import { calculateWinrate } from "bhapi/helpers/calculateWinrate" import { formatTime } from "common/helpers/date" import { getWeaponsAccumulativeData } from "bhapi/legends" import { useMemo } from "react" -import type { FullWeapon } from "bhapi/legends" - -type PlayerWeaponsTabProps = { - weapons: FullWeapon[] - matchtime: number - games: number -} +import { usePlayerStats } from "../PlayerStatsProvider" type WeaponSortOption = | "name" @@ -23,11 +19,12 @@ type WeaponSortOption = | "winrate" | "matchtime" -export const PlayerWeaponsTab = ({ - weapons, - matchtime, - games, -}: PlayerWeaponsTabProps) => { +export default function PlayerWeaponsTab() { + const { + weapons, + stats: { games }, + legendsAccumulativeData: { matchtime }, + } = usePlayerStats() const weaponsStats = useMemo( () => getWeaponsAccumulativeData(weapons), [weapons], @@ -41,7 +38,7 @@ export const PlayerWeaponsTab = ({ changeSortDirection: changeWeaponSortDirection, sortDirection: weaponSortDirection, displaySortFn: displayWeaponSortFn, - } = useSortBy( + } = useSortBy<(typeof weaponsStats)[number], WeaponSortOption>( weaponsStats, { name: { diff --git a/app/components/DiscordCard.tsx b/app/app/_landing/DiscordCard.tsx similarity index 97% rename from app/components/DiscordCard.tsx rename to app/app/_landing/DiscordCard.tsx index 6110ea8e..f5fae22c 100644 --- a/app/components/DiscordCard.tsx +++ b/app/app/_landing/DiscordCard.tsx @@ -1,6 +1,8 @@ +"use client" + import { ArrowSmRightIcon, DiscordIcon, KofiIcon } from "ui/icons" import { Button } from "ui/base/Button" -import { Image } from "@components/Image" +import { Image } from "@/components/Image" import { clamp } from "common/helpers/math" import { useEffect, useRef } from "react" @@ -68,7 +70,7 @@ export const DiscordCard = () => { containerClassName="w-20 h-20 rounded-3xl -mt-10 ml-6 border-8 border-bgVar2 overflow-hidden" /> - 2k+ discord members, and growing! + 3.5k+ discord members, and growing!

diff --git a/app/components/layout/LandingBackground.tsx b/app/app/_landing/LandingBackground.tsx similarity index 99% rename from app/components/layout/LandingBackground.tsx rename to app/app/_landing/LandingBackground.tsx index 0520c7df..6aa2a008 100644 --- a/app/components/layout/LandingBackground.tsx +++ b/app/app/_landing/LandingBackground.tsx @@ -17,8 +17,10 @@ export const LandingBackground = ({ className }: LandingBackgroundProps) => { fill="#212531" d="M96.97 446.437c0 2.2 52.911-69.446 94.8-37.479L89.254 590.84s-5.512 25.353 14.33 30.865c19.842 5.512 37.479-13.228 37.479-13.228s97-176.37 98.106-177.472c44.093 8.818 18.739 98.106 19.842 98.106 77.162 12.125 233.69-76.06 170.858-288.806 1.1 2.2-34.172 54.013-90.39 46.3 0 0 11.023-41.888-16.535-57.32-27.558-15.432-51.808 16.535-51.808 16.535s-38.581-38.581-5.512-110.231c0-1.106-259.044 45.191-168.654 310.848Zm1627.62 21.971c.66.333-12.59-26.169 3.21-33.757l38.43 57.85s6.68 5.463 11.31.414c4.63-5.048 1.74-13.105 1.74-13.105s-37.63-55.387-37.79-55.879c9.28-11.737 31.91 9.262 32.08 8.935 15.24-21.038 12.75-80.748-59.8-94.255.82.005 10.85 18.285.07 33.782 0 0-10.75-9.593-19.48-3.756-8.74 5.837-2.93 17.852-2.93 17.852s-17.26 5.609-33.5-15.014c-.33-.164-25.72 83.604 66.66 96.933ZM354.176 611.626c-1.124.375 32.233-1.5 16.116 68.963 1.124.75 3 22.113 28.485 11.619 0-.375-12.743-35.231 24.737-34.856.75.375 6.746-31.108 43.477-34.856 36.731-3.748 2.249-65.59 2.249-65.59s-105.319 25.111-115.064 54.72Zm514.198-177.868c.599.479-12.167-16.95 31.719-33.03.01-.874 10.935-9.415-3.733-19.539-.203.132-14.616 19.32-27.615-1.136-.06-.538-19.245 7.3-34.215-11.298-14.971-18.598-36.359 21.885-36.359 21.885s50.714 48.263 70.203 43.118ZM83.733 1092.2c-.114.76 8.595-19 44.443 10.96.761-.43 13.614 4.76 15.048-12.99-.215-.11-24.028-3-12.814-24.48.436-.32-15.935-13.01-7.315-35.26 8.62-22.25-37.111-20.54-37.111-20.54s-16.442 68.01-2.25 82.31ZM1646.44 67.407l43.43-27.36-2.63 54.664-15.3-8.506-45.52 106.311 11.66 35.691-13.53 30.019-17.06-41.759-37.73 3.021 16.92-30.104 27.08-5.957 45-106.195-12.32-9.825Z" /> + + { + const { isLoggedIn, signIn } = useAuth() + const { favorites } = useFavorites() + return ( +
+ {favorites.length > 0 ? ( + + ) : ( +

+ {isLoggedIn ? ( + <> + You don't have any favorites yet, you can a + player or a clan as favorite when visiting their + profile page. + + + ) : ( + <> + + Here you{"'"}ll be able to see your favorite + players and clans + + + + )} +

+ )} +
+ ) +} diff --git a/app/components/WeeklyRotation.tsx b/app/app/_landing/WeeklyRotation.tsx similarity index 88% rename from app/components/WeeklyRotation.tsx rename to app/app/_landing/WeeklyRotation.tsx index 224b908e..5b184553 100644 --- a/app/components/WeeklyRotation.tsx +++ b/app/app/_landing/WeeklyRotation.tsx @@ -1,13 +1,11 @@ -import { Image } from "@components/Image" +import { Image } from "@/components/Image" import { Tooltip } from "ui/base/Tooltip" import { UnknownIcon } from "ui/icons" -import type { Legend } from "bhapi/types" +import { getWeeklyRotation } from "web-parser/common" -type WeeklyRotationProps = { - weeklyRotation: Legend[] -} +export const WeeklyRotation = async () => { + const weeklyRotation = await getWeeklyRotation() -export const WeeklyRotation = ({ weeklyRotation }: WeeklyRotationProps) => { return (
diff --git a/app/components/layout/AlertBar.tsx b/app/app/_layout/AlertBar.tsx similarity index 92% rename from app/components/layout/AlertBar.tsx rename to app/app/_layout/AlertBar.tsx index 3987f06b..c333558f 100644 --- a/app/components/layout/AlertBar.tsx +++ b/app/app/_layout/AlertBar.tsx @@ -1,5 +1,5 @@ import { InfoIcon } from "ui/icons" -import { alerts } from "@util/alerts" +import { alerts } from "@/util/alerts" const CURRENT_ALERT = process.env.NEXT_PUBLIC_ALERT as | keyof typeof alerts diff --git a/app/components/layout/Footer.tsx b/app/app/_layout/Footer.tsx similarity index 100% rename from app/components/layout/Footer.tsx rename to app/app/_layout/Footer.tsx diff --git a/app/components/layout/Header.tsx b/app/app/_layout/Header.tsx similarity index 92% rename from app/components/layout/Header.tsx rename to app/app/_layout/Header.tsx index dd7120b6..72297f86 100644 --- a/app/components/layout/Header.tsx +++ b/app/app/_layout/Header.tsx @@ -1,14 +1,19 @@ +"use client" + import { AlertBar } from "./AlertBar" import { AppLink } from "ui/base/AppLink" import { Button } from "ui/base/Button" import { DiscordIcon, GithubIcon, TwitterIcon } from "ui/icons" import { HamburgerMenuIcon } from "ui/icons" -import { Image } from "@components/Image" -import { SearchButton, SearchButtonIcon } from "../search/SearchButton" +import { Image } from "@/components/Image" +import { + SearchButton, + SearchButtonIcon, +} from "@/components/search/SearchButton" import { cn } from "common/helpers/classnames" -import { useAuth } from "@ctx/auth/AuthProvider" -import { useRouter } from "next/router" -import { useSideNav } from "@ctx/SideNavProvider" +import { useAuth } from "@/providers/auth/AuthProvider" +import { usePathname } from "next/navigation" +import { useSideNav } from "@/providers/SideNavProvider" type HeaderProps = { className?: string @@ -16,11 +21,11 @@ type HeaderProps = { export const Header = ({ className }: HeaderProps) => { const { isLoggedIn, signIn, signOut, userProfile } = useAuth() - const router = useRouter() + const pathname = usePathname() const { openSideNav } = useSideNav() - const isLandingPage = router.pathname === "/" + const isLandingPage = pathname === "/" return ( <> diff --git a/app/components/layout/Layout.tsx b/app/app/_layout/LayoutContent.tsx similarity index 82% rename from app/components/layout/Layout.tsx rename to app/app/_layout/LayoutContent.tsx index 5138b81f..ba7d09fc 100644 --- a/app/components/layout/Layout.tsx +++ b/app/app/_layout/LayoutContent.tsx @@ -1,13 +1,13 @@ -import { FirstTimePopup } from "@components/FirstTimePopup" +import { FirstTimePopup } from "@/components/FirstTimePopup" import { Footer } from "./Footer" import { Header } from "./Header" -import { LandingBackground } from "./LandingBackground" +import { LandingBackground } from "../_landing/LandingBackground" import { SideNav } from "./SideNav" import { bgVar1 } from "ui/theme/theme" import { styled } from "ui/theme" import type { ReactNode } from "react" -export type LayoutProps = { +export type LayoutContentProps = { children: ReactNode } @@ -17,7 +17,7 @@ const BackgroundContainer = styled("div", { }, }) -export const Layout = ({ children }: LayoutProps) => { +export const LayoutContent = ({ children }: LayoutContentProps) => { return ( <> diff --git a/app/components/layout/SideNav.tsx b/app/app/_layout/SideNav.tsx similarity index 95% rename from app/components/layout/SideNav.tsx rename to app/app/_layout/SideNav.tsx index b6079f11..9647e525 100644 --- a/app/components/layout/SideNav.tsx +++ b/app/app/_layout/SideNav.tsx @@ -1,3 +1,5 @@ +"use client" + import { AppLink } from "ui/base/AppLink" import { DiscordIcon } from "ui/icons" import { @@ -10,15 +12,16 @@ import { HiUsers, HiX, } from "react-icons/hi" -import { Image } from "@components/Image" +// TODO: replace react-icons with lucide +import { Image } from "@/components/Image" import { Tooltip } from "ui/base/Tooltip" import { cleanString } from "common/helpers/cleanString" import { cn } from "common/helpers/classnames" import { css } from "ui/theme" import { legendsMap } from "bhapi/legends" -import { useFavorites } from "@ctx/auth/AuthProvider" -import { useRouter } from "next/router" -import { useSideNav } from "@ctx/SideNavProvider" +import { useFavorites } from "@/providers/auth/AuthProvider" +import { useParams, usePathname } from "next/navigation" +import { useSideNav } from "@/providers/SideNavProvider" import type { ReactNode } from "react" type SideNavIconProps = { @@ -121,23 +124,23 @@ const defaultNav: { { name: "1v1 Rankings", icon: , - href: "/rankings/1v1", + href: "/ranked/1v1", exact: false, }, { name: "2v2 Rankings", icon: , - href: "/rankings/2v2", + href: "/ranked/2v2", exact: false, }, { name: "Power Rankings", - href: "/rankings/power", + href: "/power-rankings", icon: , }, { name: "Clans", - href: "/rankings/clans", + href: "/clans", icon: , }, { @@ -160,12 +163,12 @@ type SideNavProps = { export const SideNav = ({ className }: SideNavProps) => { const { favorites, removeFavorite } = useFavorites() - const router = useRouter() const { isSideNavOpen, closeSideNav } = useSideNav() - const { pathname } = router - const { playerId, clanId } = router.query + const pathname = usePathname() + + const { playerId, clanId } = useParams() const nav = defaultNav.concat( favorites.length > 0 @@ -243,7 +246,7 @@ export const SideNav = ({ className }: SideNavProps) => { active={ pathname === "/stats/player/[playerId]" && - playerId === favorite.id.toString() + playerId === favorite.id } onRemove={() => { removeFavorite(favorite) @@ -260,7 +263,7 @@ export const SideNav = ({ className }: SideNavProps) => { active={ pathname === "/stats/clan/[clanId]" && - clanId === favorite.id.toString() + clanId === favorite.id } onRemove={() => { removeFavorite(favorite) diff --git a/app/app/_trpc/TRPCProvider.tsx b/app/app/_trpc/TRPCProvider.tsx new file mode 100644 index 00000000..ab5c8a0b --- /dev/null +++ b/app/app/_trpc/TRPCProvider.tsx @@ -0,0 +1,36 @@ +"use client" + +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import { type ReactNode, useState } from "react" +import { httpBatchLink } from "@trpc/client" +import { trpc } from "./client" +import SuperJSON from "superjson" + +type TRPCProviderProps = { + children: ReactNode +} + +export const TRPCProvider = ({ children }: TRPCProviderProps) => { + const [queryClient] = useState(() => new QueryClient()) + const [trpcClient] = useState(() => { + return trpc.createClient({ + transformer: SuperJSON, + links: [ + httpBatchLink({ + url: `${ + process.env.NEXT_PUBLIC_API_URL || + "http://localhost:3000" + }/api/trpc`, + }), + ], + }) + }) + + return ( + + + {children} + + + ) +} diff --git a/app/app/_trpc/client.ts b/app/app/_trpc/client.ts new file mode 100644 index 00000000..90116704 --- /dev/null +++ b/app/app/_trpc/client.ts @@ -0,0 +1,5 @@ +import { createTRPCReact } from "@trpc/react-query" + +import { type AppRouter } from "@/server" + +export const trpc = createTRPCReact({}) diff --git a/app/app/api/trpc/[trpc]/route.ts b/app/app/api/trpc/[trpc]/route.ts new file mode 100644 index 00000000..5c49a09d --- /dev/null +++ b/app/app/api/trpc/[trpc]/route.ts @@ -0,0 +1,14 @@ +import { fetchRequestHandler } from "@trpc/server/adapters/fetch" + +import { appRouter } from "@/server" + +const handler = (req: Request) => { + return fetchRequestHandler({ + endpoint: "/api/trpc", + router: appRouter, + req, + createContext: () => ({}), + }) +} + +export { handler as GET, handler as POST } diff --git a/app/pages/calc.tsx b/app/app/calculator/page.tsx similarity index 67% rename from app/pages/calc.tsx rename to app/app/calculator/page.tsx index 3afb91e5..f360ea38 100644 --- a/app/pages/calc.tsx +++ b/app/app/calculator/page.tsx @@ -1,5 +1,8 @@ +"use client" + import { Card } from "ui/base/Card" -import { SectionTitle } from "@components/layout/SectionTitle" +import { SectionTitle } from "@/components/layout/SectionTitle" +import { create } from "zustand" import { getGloryFromBestRating, getGloryFromWins, @@ -7,25 +10,59 @@ import { getPersonalEloReset, } from "bhapi/calculator" import { getTierFromRating } from "bhapi/helpers/getTierFromRating" -import { useState } from "react" -import type { NextPage } from "next" const inputClassName = "w-full px-4 py-2 border bg-bgVar2 border-bg rounded-lg block mb-4" const resultClassName = "text-xl font-semibold block text-center" -const CalcPage: NextPage = () => { - const [hasPlayed10Games, setHasPlayed10Games] = useState(false) - const [wins, setWins] = useState("0") - const [rating, setRating] = useState("0") - const [personalRating, setPersonalRating] = useState("0") - const [heroRating, setHeroRating] = useState("0") +type CalculatorState = { + hasPlayed10Games: boolean + wins: number + rating: number + personalRating: number + heroRating: number +} + +type CalculatorActions = { + setHasPlayed10Games: (hasPlayed10Games: boolean) => void + setWins: (wins: number) => void + setRating: (rating: number) => void + setPersonalRating: (personalRating: number) => void + setHeroRating: (heroRating: number) => void +} - const gloryWins = getGloryFromWins(parseInt(wins || "0")) - const gloryRating = getGloryFromBestRating(parseInt(rating || "200")) +const useCalculator = create((set) => ({ + hasPlayed10Games: false, + wins: 0, + rating: 0, + personalRating: 0, + heroRating: 0, + setHasPlayed10Games: (hasPlayed10Games) => set({ hasPlayed10Games }), + setWins: (wins) => set({ wins }), + setRating: (rating) => set({ rating }), + setPersonalRating: (personalRating) => set({ personalRating }), + setHeroRating: (heroRating) => set({ heroRating }), +})) - const squashPersonal = getPersonalEloReset(parseInt(personalRating || "0")) - const squashHero = getLegendEloReset(parseInt(heroRating || "0")) +export default function CalculatorPage() { + const { + hasPlayed10Games, + setHasPlayed10Games, + wins, + setWins, + rating, + setRating, + personalRating, + setPersonalRating, + heroRating, + setHeroRating, + } = useCalculator() + + const gloryWins = getGloryFromWins(wins || 0) + const gloryRating = getGloryFromBestRating(rating || 200) + + const squashPersonal = getPersonalEloReset(personalRating || 0) + const squashHero = getLegendEloReset(heroRating || 0) return ( <> @@ -54,7 +91,9 @@ const CalcPage: NextPage = () => { setWins(e.target.value)} + onChange={(e) => + setWins(e.target.valueAsNumber) + } min={0} max={10000} /> @@ -68,7 +107,9 @@ const CalcPage: NextPage = () => { setRating(e.target.value)} + onChange={(e) => + setRating(e.target.valueAsNumber) + } min={200} max={4000} /> @@ -94,7 +135,9 @@ const CalcPage: NextPage = () => { setPersonalRating(e.target.value)} + onChange={(e) => + setPersonalRating(e.target.valueAsNumber) + } min={200} max={4000} /> @@ -108,7 +151,9 @@ const CalcPage: NextPage = () => { setHeroRating(e.target.value)} + onChange={(e) => + setHeroRating(e.target.valueAsNumber) + } min={200} max={4000} /> @@ -122,5 +167,3 @@ const CalcPage: NextPage = () => { ) } - -export default CalcPage diff --git a/app/app/favicon.ico b/app/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 zcmeHv30#a{`}aL_*G&7qml|y<+KVaDM2m#dVr!KsA!#An?kSQM(q<_dDNCpjEux83 zLb9Z^XxbDl(w>%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1 zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4UlIWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyTDrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z?J;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1edAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/app/app/globals.css b/app/app/globals.css new file mode 100644 index 00000000..8fee109a --- /dev/null +++ b/app/app/globals.css @@ -0,0 +1,75 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 234 34% 4%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + + --radius: 0.5rem; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} + +* { + scroll-behavior: smooth; +} + +html, body { + @apply bg-bgVar1 text-text; + font-family: "Montserrat", sans-serif; +} + +::-webkit-scrollbar { + @apply w-0 hashover:w-2; +} + +::-webkit-scrollbar-track { + @apply bg-transparent; +} + +::-webkit-scrollbar-thumb { + @apply bg-bg rounded-full hover:bg-accent; +} + +.p-link { + @apply text-accent hover:underline; +} + +.text-fill-none { + -webkit-text-fill-color: transparent +} diff --git a/app/app/layout.tsx b/app/app/layout.tsx new file mode 100644 index 00000000..58c8a0a8 --- /dev/null +++ b/app/app/layout.tsx @@ -0,0 +1,90 @@ +import "./globals.css" + +import { AuthProvider } from "@/providers/auth/AuthProvider" +import { BackToTopButton } from "@/components/BackToTopButton" +import { FeatureFlagsProvider } from "@/store/useFeatures" +import { KBarProvider } from "@/components/search/KBarProvider" +import { LayoutContent } from "./_layout/LayoutContent" +import { type Metadata } from "next" +import { Montserrat } from "next/font/google" +import { type ReactNode } from "react" +import { SideNavProvider } from "@/providers/SideNavProvider" +import { TRPCProvider } from "./_trpc/TRPCProvider" +import { Toaster } from "react-hot-toast" + +const montserrat = Montserrat({ subsets: ["latin"] }) + +export const metadata: Metadata = { + title: "Track your Brawlhalla stats, view rankings, and more! • Corehalla", + description: + "Improve your Brawlhalla Game, and find your place among the Elite with our in-depth Player and Clan stats tracking and live leaderboards.", + applicationName: "Corehalla", + authors: [ + { + name: "Djobbo", + url: "https://djobbo.com", + }, + ], + creator: "Djobbo", + openGraph: { + type: "website", + url: "https://corehalla.com", + siteName: "Corehalla", + title: "Corehalla", + description: + "Improve your Brawlhalla Game, and find your place among the Elite with our in-depth Player and Clan stats tracking and live leaderboards.", + images: [ + { + url: "/images/og/main-og.jpg", + width: 1200, + height: 630, + alt: "Corehalla", + }, + ], + }, + twitter: { + title: "Corehalla", + description: + "Improve your Brawlhalla Game, and find your place among the Elite with our in-depth Player and Clan stats tracking and live leaderboards.", + images: [ + { + url: "/images/og/main-og.jpg", + width: 1200, + height: 630, + alt: "Corehalla", + }, + ], + creator: "@djobbo_", + site: "@Corehalla", + }, +} + +type RootLayoutProps = { + children: ReactNode +} + +export default function RootLayout({ children }: RootLayoutProps) { + return ( + + + + {/* TODO: reactivate GAScripts Google Analytics */} + {/* */} + + + {/* TODO: change kbar for shadcn ui search */} + + + + {children} + {/* */} + + + + + + + + + ) +} diff --git a/app/app/me/favorites/FavoritesContent.tsx b/app/app/me/favorites/FavoritesContent.tsx new file mode 100644 index 00000000..5fe0506c --- /dev/null +++ b/app/app/me/favorites/FavoritesContent.tsx @@ -0,0 +1,18 @@ +"use client" + +import { FavoritesGrid } from "@/components/favorites/FavoritesGrid" +import { SectionTitle } from "@/components/layout/SectionTitle" +import { useFavorites } from "@/providers/auth/AuthProvider" + +export const FavoritesContent = () => { + const { playerFavorites, clanFavorites } = useFavorites() + + return ( + <> + Players + + Clans + + + ) +} diff --git a/app/app/me/favorites/page.tsx b/app/app/me/favorites/page.tsx new file mode 100644 index 00000000..ea6b9113 --- /dev/null +++ b/app/app/me/favorites/page.tsx @@ -0,0 +1,16 @@ +import { FavoritesContent } from "./FavoritesContent" +import { type Metadata } from "next" + +export const metadata: Metadata = { + title: "My Favorites • Corehalla", + description: "View your favorite players and clans.", +} + +export default function FavoritesPage() { + return ( + <> +

Favorites

+ + + ) +} diff --git a/app/pages/index.tsx b/app/app/page.tsx similarity index 56% rename from app/pages/index.tsx rename to app/app/page.tsx index bd1d484b..8d050dbd 100644 --- a/app/pages/index.tsx +++ b/app/app/page.tsx @@ -1,37 +1,30 @@ -import { ArrowSmRightIcon, DiscordIcon } from "ui/icons" -import { ArticlePreviewGrid } from "@components/articles/ArticlePreviewGrid" +import { ArrowSmRightIcon } from "ui/icons" +import { ArticlePreviewGrid } from "@/components/articles/ArticlePreviewGrid" import { Button } from "ui/base/Button" -import { DiscordCard } from "@components/DiscordCard" -import { FavoritesGrid } from "@components/favorites/FavoritesGrid" -import { SEO } from "@components/SEO" -import { SearchButton } from "@components/search/SearchButton" -import { SectionTitle } from "@components/layout/SectionTitle" -import { WeeklyRotation } from "@components/WeeklyRotation" +import { DiscordCard } from "./_landing/DiscordCard" +import { LandingFavorites } from "./_landing/LandingFavorites" +import { SearchButton } from "@/components/search/SearchButton" +import { SectionTitle } from "@/components/layout/SectionTitle" +import { Suspense } from "react" +import { WeeklyRotation } from "./_landing/WeeklyRotation" import { cn } from "common/helpers/classnames" import { css } from "ui/theme" -import { useAuth, useFavorites } from "@ctx/auth/AuthProvider" -import { useBrawlhallaArticles } from "@hooks/useBrawlhallaArticles" -import { useWeeklyRotation } from "@hooks/useWeeklyRotation" +import Link from "next/link" const landingClassName = css({ height: "60vh", minHeight: "400px", })() -const Page = () => { - const { isLoggedIn, signIn } = useAuth() - const { favorites } = useFavorites() - const { articles } = useBrawlhallaArticles("1", "", 3) - const { weeklyRotation } = useWeeklyRotation() +export const metadata = { + title: "Corehalla - Track your Brawlhalla stats, view rankings, and more!", + description: + "Improve your Brawlhalla Game, and find your place among the Elite with our in-depth Player and Clan stats tracking and live leaderboards.", +} +export default async function Home() { return ( <> -
{ 'after:content[""] after:absolute after:inset-0 after:bg-accent after:blur-[256px] after:opacity-[0.15] after:-z-10', )} > - { Discord - +

{

-
- {favorites.length > 0 ? ( - - ) : ( -

- {isLoggedIn ? ( - <> - You don't have any favorites yet, you can a - player or a clan as favorite when visiting their - profile page. - - - ) : ( - <> - - Here you{"'"}ll be able to see your favorite - players and clans - - - - )} -

- )} -
- + + Loading free legend rotation...
}> + + Latest News - {articles.length > 0 && ( - <> - - - )} + Loading articles...
}> + + ) } - -export default Page diff --git a/app/components.json b/app/components.json new file mode 100644 index 00000000..48c34e4c --- /dev/null +++ b/app/components.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "app/globals.css", + "baseColor": "slate", + "cssVariables": true + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} \ No newline at end of file diff --git a/app/components/BackToTopButton.tsx b/app/components/BackToTopButton.tsx index 8e2b928b..85a2c625 100644 --- a/app/components/BackToTopButton.tsx +++ b/app/components/BackToTopButton.tsx @@ -1,10 +1,19 @@ +"use client" + import { BackToTopIcon } from "ui/icons" import { Tooltip } from "ui/base/Tooltip" import { cn } from "common/helpers/classnames" +import { useEffect, useState } from "react" import { useWindowScroll } from "common/hooks/useWindowScroll" export const BackToTopButton = () => { const { y: scrollY } = useWindowScroll() + const [mounted, setMounted] = useState(false) + useEffect(() => { + setMounted(true) + }, []) + + if (!mounted) return null return (
{ type="button" className="relative w-12 h-12 mx-4 mb-4 rounded-full bg-accent flex items-center justify-center shadow-md" style={{ - transition: "0.15s opacity ease", + transition: "1s opacity ease", }} onClick={() => { window.scrollTo({ diff --git a/app/components/FirstTimePopup.tsx b/app/components/FirstTimePopup.tsx index 0afd4d8a..c56e74f6 100644 --- a/app/components/FirstTimePopup.tsx +++ b/app/components/FirstTimePopup.tsx @@ -1,7 +1,9 @@ -import { AppLink } from "ui/base/AppLink" +"use client" + import { Button } from "ui/base/Button" import { CloseIcon, DiscordIcon, GithubIcon, TwitterIcon } from "ui/icons" import { useLocalStorageState } from "common/hooks/useLocalStorageState" +import Link from "next/link" export const FirstTimePopup = () => { const [showPopup, setShowPopup] = useLocalStorageState( @@ -20,37 +22,37 @@ export const FirstTimePopup = () => {
Join us: - - - + - - + - + If you want, you can still visit the legacy website here:{" "} - old.corehalla.com - +

-
- - -
-
-
- ) -} diff --git a/app/components/search/KBarProvider.tsx b/app/components/search/KBarProvider.tsx new file mode 100644 index 00000000..21767b65 --- /dev/null +++ b/app/components/search/KBarProvider.tsx @@ -0,0 +1,3 @@ +"use client" + +export { KBarProvider } from "kbar" diff --git a/app/components/search/RankedPlayerItem.tsx b/app/components/search/RankedPlayerItem.tsx deleted file mode 100644 index e416acb3..00000000 --- a/app/components/search/RankedPlayerItem.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { HiOutlineStar, HiStar } from "react-icons/hi2" -import { Image } from "@components/Image" -import { SearchboxItem } from "./SearchboxItem" -import { cleanString } from "common/helpers/cleanString" -import { legendsMap } from "bhapi/legends" -import { useAuth, useFavorites } from "@ctx/auth/AuthProvider" -import type { Ranking1v1 } from "bhapi/types" - -type RankedPlayerItemProps = { - player: Ranking1v1 -} - -export const RankedPlayerItem = ({ player }: RankedPlayerItemProps) => { - const { isLoggedIn } = useAuth() - const { addFavorite, isFavorite, removeFavorite } = useFavorites() - - const legend = legendsMap[player.best_legend] - - const icon = legend && ( - {legend.bio_name} - ) - - const isFav = isFavorite({ - id: player.brawlhalla_id.toString(), - type: "player", - }) - - return ( - - {player.rating} / {player.peak_rating} peak ({player.tier}) - - } - rightContent={ - isLoggedIn && ( - - ) - } - /> - ) -} diff --git a/app/components/search/SearchButton.tsx b/app/components/search/SearchButton.tsx index c2caf120..9ac063c7 100644 --- a/app/components/search/SearchButton.tsx +++ b/app/components/search/SearchButton.tsx @@ -1,9 +1,13 @@ +"use client" + import { Kbd } from "ui/base/Kbd" import { SearchIcon } from "ui/icons" import { cn } from "common/helpers/classnames" import { useDevice } from "common/hooks/useDevice" import { useKBar } from "kbar" +// TODO: replace kbar with shadcn ui search + type SearchButtonProps = { className?: string bg?: string diff --git a/app/components/search/Searchbox.tsx b/app/components/search/Searchbox.tsx deleted file mode 100644 index 86760824..00000000 --- a/app/components/search/Searchbox.tsx +++ /dev/null @@ -1,300 +0,0 @@ -import { HiArrowUp } from "react-icons/hi" -import { - KBarAnimator, - KBarPortal, - KBarPositioner, - KBarSearch, - useKBar, -} from "kbar" -import { MAX_SHOWN_ALIASES } from "@util/constants" -import { RankedPlayerItem } from "./RankedPlayerItem" -import { SearchboxItem } from "./SearchboxItem" -import { Spinner } from "ui/base/Spinner" -import { UserIcon } from "ui/icons" -import { cleanString } from "common/helpers/cleanString" -import { cn } from "common/helpers/classnames" -import { css } from "@stitches/react" -import { gaEvent } from "common/analytics/gtag" -import { numericLiteralValidator } from "common/helpers/validators" -import { styled, theme } from "ui/theme" -import { trpc } from "@util/trpc" -import { useDebouncedState } from "common/hooks/useDebouncedState" -import { useEffect, useState } from "react" -import { usePlayerSearch } from "@hooks/stats/usePlayerSearch" -import type { Ranking1v1 } from "bhapi/types" - -const __DEV = process.env.NODE_ENV === "development" - -const ResultsContainer = styled("div", { - maxHeight: "calc(100vh - 14vh - 100px)", -}) - -type AliasesSubtitleProps = { - immediateSearch: string - aliases?: string[] -} - -const AliasesSubtitle = ({ - immediateSearch, - aliases, -}: AliasesSubtitleProps) => { - if (!aliases || aliases.length === 0) { - return null - } - - return ( - - {aliases.map((alias) => { - const cleanAlias = cleanString(alias) - - if (cleanAlias.length < 2 || cleanAlias.endsWith("•2")) return - - return ( - - {cleanAlias} - - ) - })} - - ) -} - -export const Searchbox = () => { - const [rankings, setRankings] = useState([]) - const [search, setSearch, immediateSearch, isDebouncingSearch] = - useDebouncedState("", __DEV ? 250 : 750) - - const { rankings1v1, aliases, isLoading } = usePlayerSearch(search) - - const isPotentialBrawlhallaId = !!numericLiteralValidator - .catch("") - .parse(search) - - const { data: potentialBrawlhallaIdAliases } = - trpc.getPlayerAliases.useQuery( - { playerId: search }, - { - enabled: isPotentialBrawlhallaId, - }, - ) - - const { - query: { toggle }, - } = useKBar() - - useEffect(() => { - // open searchbox on "/" - const onKeyDown = (e: KeyboardEvent) => { - if (document.activeElement?.tagName === "INPUT") return - - if (e.key === "/") { - e.preventDefault() - toggle() - } - } - - document.addEventListener("keydown", onKeyDown) - return () => document.removeEventListener("keydown", onKeyDown) - }, [toggle]) - - useEffect(() => { - if (isLoading) return - - gaEvent({ - action: "use_searchbox", - category: "app", - label: `player ${search}`, - }) - - setRankings(rankings1v1 ?? []) - }, [rankings1v1, isLoading, search]) - - const filteredRankings = rankings.filter((player) => - player.name.toLowerCase().startsWith(immediateSearch.toLowerCase()), - ) - - const categoryTitleClassName = - "text-xs font-semibold text-textVar1 px-4 py-2" - - return ( - - - -
-
- { - setSearch(e.target.value) - }} - value={search} - /> - {immediateSearch.length > 0 && - (isLoading || isDebouncingSearch) && ( - - )} -
- {/* TODO: add tabs for searching for clans, tournaments, etc */} - -
- {immediateSearch && - (rankings.length > 0 || - aliases.length > 0 || - isPotentialBrawlhallaId) ? ( - <> - {isPotentialBrawlhallaId && ( - <> -

- Search by Brawlhalla ID -

- } - href={`/stats/player/${search}`} - title={`Player#${search}`} - subtitle={ - - } - /> - - )} - {filteredRankings.length > 0 && ( - <> -

- Ranked players -

- {filteredRankings.map( - (player) => ( - - ), - )} - - )} - {aliases.length > 0 && ( - <> -

- Other players with similar - names -

- {aliases.map( - ({ - playerId, - mainAlias, - otherAliases, - }) => ( - - } - href={`/stats/player/${playerId}`} - title={cleanString( - mainAlias, - )} - subtitle={ - - } - /> - ), - )} - - )} - - ) : ( -
- -

- {!!immediateSearch && - !isLoading && - !isDebouncingSearch && ( - <> - - No players found - - - )} - Search for a player (must start with - exact match) -
- - Only players that have completed - their 10 placement matches are - shown. - -

- -
- )} -
-
-

- If you{"'"}re having trouble finding a player by - name, trying using their brawlhalla id instead. -
- Join our{" "} - - Discord - {" "} - if you need help. -

-
-
-
-
- ) -} diff --git a/app/components/stats/StatsHeader.tsx b/app/components/stats/StatsHeader.tsx index 456d3404..d9e05784 100644 --- a/app/components/stats/StatsHeader.tsx +++ b/app/components/stats/StatsHeader.tsx @@ -1,16 +1,16 @@ -import { AdsenseStatsHeader } from "common/analytics/Adsense" +"use client" + +import { AddFavoriteIcon, DiscordIcon, RemoveFavoriteIcon } from "ui/icons" +// import { AdsenseStatsHeader } from "common/analytics/Adsense" import { Button } from "ui/base/Button" -import { DiscordIcon } from "ui/icons" -import { HiUserAdd, HiUserRemove } from "react-icons/hi" import { MiscStatGroup } from "./MiscStatGroup" import { ShareIcon } from "ui/icons" import { cleanString } from "common/helpers/cleanString" import { cn } from "common/helpers/classnames" -import { useAuth, useFavorites } from "@ctx/auth/AuthProvider" +import { useAuth, useFavorites } from "@/providers/auth/AuthProvider" import { useCopyToClipboard } from "common/hooks/useCopyToClipboard" -import { useFeatureFlags } from "@hooks/useFeatures" import toast from "react-hot-toast" -import type { Favorite } from "@ctx/auth/useUserFavorites" +import type { Favorite } from "@/providers/auth/useUserFavorites" import type { MiscStat } from "./MiscStatGroup" import type { ReactNode } from "react" @@ -23,6 +23,7 @@ type StatsHeaderProps = { favorite?: Favorite } +// TODO: replcae react-hot-toast with shadcn ui toast export const StatsHeader = ({ name, id, @@ -34,7 +35,7 @@ export const StatsHeader = ({ const { isLoggedIn, signIn } = useAuth() const { isFavorite, removeFavorite, addFavorite } = useFavorites() const copyToClipboard = useCopyToClipboard() - const { shouldShowAds } = useFeatureFlags() + // const { shouldShowAds } = useFeatureFlags() const isItemFavorite = favorite && isFavorite(favorite) @@ -48,7 +49,8 @@ export const StatsHeader = ({ backgroundSize: "cover", }} > - {shouldShowAds && } + {/* TODO: Adsense */} + {/* {shouldShowAds && } */}
{isLoggedIn ? ( @@ -64,12 +66,12 @@ export const StatsHeader = ({ {isItemFavorite ? ( <> Remove Favorite - + ) : ( <> Add favorite - + )} diff --git a/app/components/stats/player/Player2v2Tab/index.tsx b/app/components/stats/player/Player2v2Tab/index.tsx deleted file mode 100644 index a5d6c215..00000000 --- a/app/components/stats/player/Player2v2Tab/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { Player2v2Tab } from "./Player2v2Tab" diff --git a/app/components/stats/player/PlayerLegendsTab/index.ts b/app/components/stats/player/PlayerLegendsTab/index.ts deleted file mode 100644 index 1a0c032a..00000000 --- a/app/components/stats/player/PlayerLegendsTab/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { PlayerLegendsTab } from "./PlayerLegendsTab" diff --git a/app/components/stats/player/PlayerOverviewTab/index.ts b/app/components/stats/player/PlayerOverviewTab/index.ts deleted file mode 100644 index b0b13ae6..00000000 --- a/app/components/stats/player/PlayerOverviewTab/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { PlayerOverviewTab } from "./PlayerOverviewTab" diff --git a/app/components/stats/player/PlayerWeaponsTab/index.ts b/app/components/stats/player/PlayerWeaponsTab/index.ts deleted file mode 100644 index 57679c5c..00000000 --- a/app/components/stats/player/PlayerWeaponsTab/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { PlayerWeaponsTab } from "./PlayerWeaponsTab" diff --git a/app/components/stats/rankings/RankingsLayout.tsx b/app/components/stats/rankings/RankingsLayout.tsx deleted file mode 100644 index 0e06bfd3..00000000 --- a/app/components/stats/rankings/RankingsLayout.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { Pagination } from "ui/base/Pagination" -import { Paginator } from "ui/base/Paginator" -import { cn } from "common/helpers/classnames" -import type { Dispatch, ReactNode, SetStateAction } from "react" -import type { PaginatorPage } from "ui/base/Paginator" - -type RankingsLayoutProps = { - children: ReactNode - currentBracket: string - brackets: PaginatorPage[] - currentRegion?: string - regions: PaginatorPage[] | null - currentPage?: string - hasPagination?: boolean - hasSearch?: boolean - search?: string - setSearch?: Dispatch> - searchClassName?: string - searchPlaceholder?: string - searchSubtitle?: string - defaultRegion?: string - defaultBracket?: string -} - -export const RankingsLayout = ({ - children, - brackets, - currentBracket, - regions, - currentRegion, - currentPage, - hasPagination = false, - hasSearch = false, - search, - setSearch, - searchClassName, - searchPlaceholder = "Search...", - searchSubtitle, - defaultRegion = "all", - defaultBracket = "1v1", -}: RankingsLayoutProps) => { - const region = regions - ? regions.map(({ page }) => page).includes(currentRegion ?? "") - ? currentRegion - : defaultRegion - : null - const bracket = brackets.map(({ page }) => page).includes(currentBracket) - ? currentBracket - : defaultBracket - const pagination = - (currentPage && hasPagination && ( - - region - ? `/rankings/${bracket}/${region}${ - page ? `/${page}` : "" - }` - : `/rankings/${bracket}${page ? `/${page}` : ""}` - } - currentPage={parseInt(currentPage)} - firstPage={1} - className="mt-4 justify-end" - /> - )) || - null - - return ( - <> -
- - region - ? `/rankings/${bracket}/${region}` - : `/rankings/${bracket}` - } - responsive - /> - {regions && regions.length > 0 && ( - - `/rankings/${bracket}/${region}` - } - responsive - /> - )} -
- {hasSearch && ( - <> - { - setSearch?.(e.target.value) - }} - className={cn( - "w-full mt-4 px-4 py-2 border bg-bgVar2 border-bg rounded-lg", - searchClassName, - )} - placeholder={searchPlaceholder} - /> - {searchSubtitle && ( -

- {searchSubtitle} -

- )} - - )} - {pagination} -
{children}
- {pagination} - - ) -} diff --git a/app/components/ui/button.tsx b/app/components/ui/button.tsx new file mode 100644 index 00000000..9e23f369 --- /dev/null +++ b/app/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { type VariantProps, cva } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + }, +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/app/components/ui/slider.tsx b/app/components/ui/slider.tsx new file mode 100644 index 00000000..d3d6b5f8 --- /dev/null +++ b/app/components/ui/slider.tsx @@ -0,0 +1,29 @@ +"use client" + +import * as React from "react" +import * as SliderPrimitive from "@radix-ui/react-slider" + +import { cn } from "@/lib/utils" + +const Slider = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + + + +)) +Slider.displayName = SliderPrimitive.Root.displayName + +export { Slider } diff --git a/app/db/index.ts b/app/db/index.ts new file mode 100644 index 00000000..01f5335b --- /dev/null +++ b/app/db/index.ts @@ -0,0 +1,13 @@ +import * as schema from "./schema" +import { Pool } from "pg" +import { drizzle } from "drizzle-orm/node-postgres" +import { z } from "zod" +export * from "./schema" + +const connectionString = z.string().parse(process.env.DATABASE_URL) + +const pool = new Pool({ + connectionString, +}) + +export const db = drizzle(pool, { schema }) diff --git a/app/db/migrate.ts b/app/db/migrate.ts new file mode 100644 index 00000000..7f5cad3a --- /dev/null +++ b/app/db/migrate.ts @@ -0,0 +1,9 @@ +import { migrate } from "drizzle-orm/node-postgres/migrator" + +import { db } from "." + +const main = async () => { + await migrate(db, { migrationsFolder: "db/migrations" }) +} + +main() diff --git a/app/db/schema/index.ts b/app/db/schema/index.ts new file mode 100644 index 00000000..056d6e56 --- /dev/null +++ b/app/db/schema/index.ts @@ -0,0 +1 @@ +export * from "./users" diff --git a/app/db/schema/users.ts b/app/db/schema/users.ts new file mode 100644 index 00000000..906d3b6b --- /dev/null +++ b/app/db/schema/users.ts @@ -0,0 +1,12 @@ +import { createInsertSchema, createSelectSchema } from "drizzle-zod" +import { pgTable, uuid } from "drizzle-orm/pg-core" + +export const users = pgTable("users", { + id: uuid("id").defaultRandom().primaryKey(), +}) + +export type User = typeof users.$inferSelect +export const insertUserSchema = createInsertSchema(users) + +export type NewUser = typeof users.$inferInsert +export const selectUserSchema = createSelectSchema(users) diff --git a/app/drizzle.config.ts b/app/drizzle.config.ts new file mode 100644 index 00000000..e68aa82f --- /dev/null +++ b/app/drizzle.config.ts @@ -0,0 +1,11 @@ +import { z } from "zod" +import type { Config } from "drizzle-kit" + +export default { + schema: "./db/schema/index.ts", + out: "./db/migrations", + driver: "pg", + dbCredentials: { + connectionString: z.string().parse(process.env.DATABASE_URL), + }, +} satisfies Config diff --git a/app/hooks/stats/useClan.ts b/app/hooks/stats/useClan.ts deleted file mode 100644 index 6d5c7f1c..00000000 --- a/app/hooks/stats/useClan.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { trpc } from "@util/trpc" - -export const useClan = (clanId: string) => { - const { data, ...query } = trpc.getClanStats.useQuery({ clanId }) - - return { - clan: data, - ...query, - } -} diff --git a/app/hooks/stats/useClansRankings.ts b/app/hooks/stats/useClansRankings.ts deleted file mode 100644 index 492bfa6b..00000000 --- a/app/hooks/stats/useClansRankings.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { trpc } from "@util/trpc" - -export const useClansRankings = (page: string, name: string) => { - const { data, ...query } = trpc.getClansRankings.useQuery({ - name, - page, - }) - - return { - clans: data ?? [], - ...query, - } -} diff --git a/app/hooks/stats/usePlayerAliases.ts b/app/hooks/stats/usePlayerAliases.ts deleted file mode 100644 index dd8637ad..00000000 --- a/app/hooks/stats/usePlayerAliases.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { cleanString } from "common/helpers/cleanString" -import { trpc } from "@util/trpc" - -export const usePlayerAliases = (playerId: string) => { - const { data, ...query } = trpc.getPlayerAliases.useQuery({ playerId }) - - return { - playerAliases: - data - ?.map((alias) => cleanString(alias)) - .filter( - (alias) => alias.length >= 2 && !alias.endsWith("•2"), - ) ?? [], - ...query, - } -} diff --git a/app/hooks/stats/usePlayerRanked.ts b/app/hooks/stats/usePlayerRanked.ts deleted file mode 100644 index 903d0ac6..00000000 --- a/app/hooks/stats/usePlayerRanked.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { trpc } from "@util/trpc" - -export const usePlayerRanked = (playerId: string) => { - const { data, ...query } = trpc.getPlayerRanked.useQuery({ playerId }) - - return { - playerRanked: data, - ...query, - } -} diff --git a/app/hooks/stats/usePlayerSearch.ts b/app/hooks/stats/usePlayerSearch.ts deleted file mode 100644 index 15127983..00000000 --- a/app/hooks/stats/usePlayerSearch.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { trpc } from "@util/trpc" -import { useRankings1v1 } from "./useRankings" - -export const usePlayerSearch = (search: string) => { - const { rankings1v1, isLoading } = useRankings1v1("all", "1", search, { - enabled: !!search, - }) - const { data: aliases } = trpc.searchPlayerAlias.useQuery( - { alias: search, page: "1" }, - { enabled: !!search }, - ) - - return { - rankings1v1, - isLoading, - aliases: aliases ?? [], - } -} diff --git a/app/hooks/stats/usePlayerStats.ts b/app/hooks/stats/usePlayerStats.ts deleted file mode 100644 index 8d64254e..00000000 --- a/app/hooks/stats/usePlayerStats.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { trpc } from "@util/trpc" - -export const usePlayerStats = (playerId: string) => { - const { data, ...query } = trpc.getPlayerStats.useQuery({ playerId }) - - return { - playerStats: data, - ...query, - } -} diff --git a/app/hooks/stats/usePowerRankings.ts b/app/hooks/stats/usePowerRankings.ts deleted file mode 100644 index 0c10c39c..00000000 --- a/app/hooks/stats/usePowerRankings.ts +++ /dev/null @@ -1,22 +0,0 @@ -// TS2742: https://github.com/microsoft/TypeScript/issues/47663 -import {} from "@tanstack/query-core" -import { trpc } from "@util/trpc" -import type { - PowerRankingsBracket, - PowerRankingsRegion, -} from "web-parser/power-rankings/parsePowerRankingsPage" - -export const usePowerRankings = ( - bracket: PowerRankingsBracket, - region: PowerRankingsRegion, -) => { - const { data: powerRankings, ...query } = trpc.getPowerRankings.useQuery({ - bracket, - region, - }) - - return { - powerRankings, - ...query, - } -} diff --git a/app/hooks/stats/useRankings.ts b/app/hooks/stats/useRankings.ts deleted file mode 100644 index 5759347c..00000000 --- a/app/hooks/stats/useRankings.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { trpc } from "@util/trpc" -import type { RankedRegion } from "bhapi/constants" - -export const useRankings1v1 = ( - region: RankedRegion, - page: string, - name = "", - options: { enabled?: boolean } = {}, -) => { - const { data, ...query } = trpc.get1v1Rankings.useQuery( - { - region, - page, - name, - }, - options, - ) - - return { - rankings1v1: data, - ...query, - } -} - -export const useRankings2v2 = (region: RankedRegion, page: string) => { - const { data, ...query } = trpc.get2v2Rankings.useQuery({ - region, - page, - }) - - return { - rankings2v2: data, - ...query, - } -} diff --git a/app/hooks/useBrawlhallaArticles.ts b/app/hooks/useBrawlhallaArticles.ts deleted file mode 100644 index f66fe114..00000000 --- a/app/hooks/useBrawlhallaArticles.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { trpc } from "@util/trpc" -import type { BHArticleType } from "web-parser/bh-articles/parseBHArticlesPage" - -export const useBrawlhallaArticles = ( - page = "1", - type?: BHArticleType, - max?: number, -) => { - const { data, ...query } = trpc.getBHArticles.useQuery( - { - page, - type, - max, - }, - { - trpc: { - ssr: false, - }, - }, - ) - - return { - articles: data ?? [], - ...query, - } -} diff --git a/app/hooks/useFeatures.ts b/app/hooks/useFeatures.ts deleted file mode 100644 index d917cbef..00000000 --- a/app/hooks/useFeatures.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { getFeatureFlags } from "@util/features" -import { useAuth } from "@ctx/auth/AuthProvider" - -export const useFeatureFlags = () => { - const authContext = useAuth() - - return getFeatureFlags({ authContext }) -} diff --git a/app/hooks/useWeeklyRotation.ts b/app/hooks/useWeeklyRotation.ts deleted file mode 100644 index 6a465d67..00000000 --- a/app/hooks/useWeeklyRotation.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { trpc } from "@util/trpc" - -export const useWeeklyRotation = () => { - const { data, ...query } = trpc.getWeeklyRotation.useQuery(void 0, { - trpc: { - ssr: false, - }, - }) - - return { - weeklyRotation: data ?? [], - ...query, - } -} diff --git a/app/lib/utils.ts b/app/lib/utils.ts new file mode 100644 index 00000000..03aaa4b6 --- /dev/null +++ b/app/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/app/next-sitemap.config.js b/app/next-sitemap.config.js deleted file mode 100644 index 04d8051d..00000000 --- a/app/next-sitemap.config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('next-sitemap').IConfig} */ -module.exports = { - siteUrl: process.env.SITE_URL ?? "https://dev.corehalla.com", - generateRobotsTxt: true, - priority: 1.0, -} diff --git a/app/next.config.js b/app/next.config.js index 94549d0f..48ad4845 100644 --- a/app/next.config.js +++ b/app/next.config.js @@ -4,34 +4,19 @@ const COREHALLA_GITHUB_URL = "https://github.com/djobbo/corehalla" const COREHALLA_TWITTER_URL = "https://twitter.com/Corehalla" const COREHALLA_KOFI_URL = "https://ko-fi.com/corehalla" -// TODO: remove this when upgrading to next@13.1+ -// eslint-disable-next-line @typescript-eslint/no-var-requires -const withTM = require("next-transpile-modules")([ - "bhapi", - "ui", - "logger", - "common", - "db", - "web-parser", - "server", -]) - /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, - // TODO: uncomment this when upgrading to next@13.1+ - // transpilePackages: [ - // "bhapi", - // "ui", - // "logger", - // "common", - // "db", - // "web-parser", - // "server", - // ], + transpilePackages: ["bhapi", "common", "db", "ui"], images: { domains: ["cdn.discordapp.com", "www.brawlhalla.com"], }, + experimental: { + logging: { + level: "verbose", + fullUrl: true, + }, + }, async redirects() { return [ { @@ -70,27 +55,52 @@ const nextConfig = { permanent: true, }, { - source: "/rankings", - destination: "/rankings/1v1", + source: "/rankings/:path*", + destination: "/ranked/:path*", + permanent: true, + }, + { + source: "/ranked", + destination: "/ranked/1v1", permanent: true, }, { source: "/leaderboard/:path*", - destination: "/rankings", + destination: "/ranked", + permanent: true, + }, + { + source: "/stats/player/:path*", + destination: "/player/:path*", + permanent: true, + }, + { + source: "/stats/clan/:path*", + destination: "/clan/:path*", permanent: true, }, { source: "/p/:path*", - destination: "/stats/player/:path*", + destination: "/player/:path*", permanent: true, }, { source: "/c/:path*", - destination: "/stats/clan/:path*", + destination: "/clan/:path*", + permanent: true, + }, + { + source: "/calc/:path*", + destination: "/calculator/:path*", + permanent: true, + }, + { + source: "/@me/:path*", + destination: "/me/:path*", permanent: true, }, ] }, } -module.exports = withTM(nextConfig) +module.exports = nextConfig diff --git a/app/package.json b/app/package.json index 8a5dbeab..9cf3313e 100644 --- a/app/package.json +++ b/app/package.json @@ -1,52 +1,69 @@ { - "name": "app", - "version": "0.0.0", - "private": true, - "sideEffects": false, - "scripts": { - "dev": "next dev", - "dev:prod": "NEXT_PUBLIC_FORCE_PRODUCTION_WEBSITE=true next dev", - "build": "next build && pnpm gen:sitemap", - "start": "next start", - "ts:check": "tsc --noEmit", - "gen:sitemap": "next-sitemap" - }, - "dependencies": { - "@fontsource/montserrat": "^4.5.13", - "@radix-ui/react-collapsible": "^1.0.1", - "@radix-ui/react-tabs": "^1.0.1", - "@stitches/react": "^1.2.8", - "@tanstack/react-query": "^4.22.0", - "@trpc/client": "10.9.0", - "@trpc/next": "10.9.0", - "@trpc/react-query": "10.9.0", - "@trpc/server": "10.9.0", - "bhapi": "workspace:*", - "common": "workspace:*", - "db": "workspace:*", - "encoding": "^0.1.13", - "kbar": "0.1.0-beta.39", - "logger": "workspace:*", - "next": "13.0.6", - "next-sitemap": "^3.1.43", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-hot-toast": "^2.4.0", - "react-icons": "^4.7.1", - "server": "workspace:*", - "ui": "workspace:*", - "web-parser": "workspace:*", - "zod": "^3.20.2" - }, - "devDependencies": { - "@tanstack/query-core": "^4.22.0", - "@types/node": "^18.11.18", - "@types/react": "^18.0.26", - "autoprefixer": "^10.4.13", - "next-transpile-modules": "10.0.0", - "postcss": "^8.4.20", - "tailwindcss": "^3.2.4", - "tsconfig": "workspace:*", - "typescript": "^4.9.4" - } + "name": "vid-replay", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "dev:prod": "NEXT_PUBLIC_FORCE_PRODUCTION_WEBSITE=true next dev", + "build": "next build", + "start": "next start", + "db:gen": "drizzle-kit generate:pg", + "db:studio": "drizzle-kit studio", + "db:push": "pnpm db:gen && tsx ./db/migrate.ts", + "ts:check": "tsc --noEmit" + }, + "dependencies": { + "@radix-ui/react-collapsible": "^1.0.3", + "@radix-ui/react-slider": "^1.1.2", + "@radix-ui/react-slot": "^1.0.2", + "@tanstack/react-query": "^4.35.7", + "@trpc/client": "^10.40.0", + "@trpc/react-query": "^10.40.0", + "@trpc/server": "^10.40.0", + "@types/node": "20.8.3", + "@types/react": "18.2.25", + "@types/react-dom": "18.2.11", + "autoprefixer": "10.4.16", + "bhapi": "workspace:*", + "class-variance-authority": "^0.7.0", + "clsx": "^2.0.0", + "common": "workspace:*", + "db": "workspace:*", + "drizzle-orm": "^0.28.6", + "drizzle-zod": "^0.5.1", + "eslint": "8.51.0", + "eslint-config-next": "13.5.4", + "immer": "^10.0.3", + "kbar": "0.1.0-beta.39", + "logger": "workspace:*", + "lucide-react": "^0.284.0", + "next": "13.5.4", + "pg": "^8.11.3", + "postcss": "8.4.31", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-hot-toast": "^2.4.1", + "react-icons": "^4.7.1", + "react-youtube": "^10.1.0", + "superjson": "^1.13.3", + "tailwind-merge": "^1.14.0", + "tailwindcss": "3.3.3", + "tailwindcss-animate": "^1.0.7", + "typescript": "5.2.2", + "ui": "workspace:*", + "uuid": "^9.0.1", + "web-parser": "workspace:*", + "zod": "^3.22.4", + "zustand": "^4.4.3" + }, + "devDependencies": { + "@types/pg": "^8.10.3", + "@types/uuid": "^9.0.5", + "@types/youtube-player": "^5.5.8", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "drizzle-kit": "^0.19.13", + "eslint-plugin-prettier": "^5.0.0", + "prettier": "^3.0.3", + "tsx": "^3.13.0" + } } \ No newline at end of file diff --git a/app/pages/404.tsx b/app/pages/404.tsx deleted file mode 100644 index 8140b95c..00000000 --- a/app/pages/404.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { ErrorPageContent } from "@components/layout/ErrorPageContent" -import type { NextPage } from "next" - -const ErrorPage: NextPage = () => { - return -} - -export default ErrorPage diff --git a/app/pages/500.tsx b/app/pages/500.tsx deleted file mode 100644 index 879a244b..00000000 --- a/app/pages/500.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { ErrorPageContent } from "@components/layout/ErrorPageContent" -import type { NextPage } from "next" - -const ErrorPage: NextPage = () => { - return -} - -export default ErrorPage diff --git a/app/pages/@me/favorites.tsx b/app/pages/@me/favorites.tsx deleted file mode 100644 index ab81a110..00000000 --- a/app/pages/@me/favorites.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { FavoritesGrid } from "@components/favorites/FavoritesGrid" -import { SEO } from "@components/SEO" -import { SectionTitle } from "@components/layout/SectionTitle" -import { useFavorites } from "@ctx/auth/AuthProvider" -import type { NextPage } from "next" - -const Page: NextPage = () => { - const { playerFavorites, clanFavorites } = useFavorites() - - return ( - <> - -

Favorites

- Players - - Clans - - - ) -} - -export default Page diff --git a/app/pages/_app.tsx b/app/pages/_app.tsx deleted file mode 100644 index b869f0c2..00000000 --- a/app/pages/_app.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import "../styles/globals.css" -import "../styles/nprogress.css" -import "@fontsource/montserrat/400.css" -import "@fontsource/montserrat/600.css" -import "@fontsource/montserrat/700.css" - -import { AnimatedLogo } from "ui/base/AnimatedLogo" -import { AuthProvider } from "@ctx/auth/AuthProvider" -// dynamic breaks with next >= v13.0.7 -//Will be fixed (maybe?) by https://github.com/vercel/next.js/pull/44832 -const BackToTopButton = dynamic( - () => - import("@components/BackToTopButton").then( - (mod) => mod.BackToTopButton, - ), - { - ssr: false, - }, -) -import { GAScripts } from "common/analytics/GAScripts" -import { KBarProvider } from "kbar" -import { Layout } from "@components/layout/Layout" -import { PageLoader } from "ui/base/PageLoader" -import { SEO } from "@components/SEO" -import { Searchbox } from "@components/search/Searchbox" -import { SideNavProvider } from "@ctx/SideNavProvider" -import { Toaster } from "react-hot-toast" -import { trpc } from "@util/trpc" -import Head from "next/head" -import dynamic from "next/dynamic" -import type { AppProps } from "next/app" - -const App = ({ - Component, - pageProps, -}: AppProps<{ dehydratedState: unknown }>) => { - return ( - <> - - - - - - - - - - - -
- Loading... - -
-
- - - - - - -
-
-
- - ) -} - -export default trpc.withTRPC(App) diff --git a/app/pages/_error.tsx b/app/pages/_error.tsx deleted file mode 100644 index c880095a..00000000 --- a/app/pages/_error.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { ErrorPageContent } from "@components/layout/ErrorPageContent" -import type { NextPage } from "next" - -const ErrorPage: NextPage = () => { - return -} - -export default ErrorPage diff --git a/app/pages/api/bh-articles.ts b/app/pages/api/bh-articles.ts deleted file mode 100644 index bf19f0d3..00000000 --- a/app/pages/api/bh-articles.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { parseBHArticlesPage } from "web-parser/bh-articles/parseBHArticlesPage" -import type { BHArticleType } from "web-parser/bh-articles/parseBHArticlesPage" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - const { page = "1", type = "patch-notes", max } = req.query - - try { - const pageNum = parseInt(page as string) - const articles = await parseBHArticlesPage( - pageNum, - type.toString() as BHArticleType, - ) - - res.setHeader( - "Cache-Control", - "public, s-maxage=3600, stale-while-revalidate=7200", - ) - - if (max) { - return res.json(articles.slice(0, parseInt(max.toString()))) - } - res.json(articles) - } catch { - res.status(404).json({ error: "Page not found" }) - } -} - -export default handler diff --git a/app/pages/api/rankings/clans.ts b/app/pages/api/rankings/clans.ts deleted file mode 100644 index cda0f44a..00000000 --- a/app/pages/api/rankings/clans.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { CLANS_RANKINGS_PER_PAGE } from "server/helpers/constants" -import { supabaseService } from "db/supabase/service" -import type { BHClan } from "db/generated/client" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - const { name = "", page = "1" } = req.query - - try { - let query = supabaseService - .from("BHClan") - .select("*") - .order("xp", { ascending: false }) - - if (name) { - query = query.match({ name }) - } - - const pageNum = parseInt(page as string) - - const { data, error } = await query.range( - (pageNum - 1) * CLANS_RANKINGS_PER_PAGE, - pageNum * CLANS_RANKINGS_PER_PAGE - 1, - ) - - if (error) throw error - - res.setHeader( - "Cache-Control", - "public, s-maxage=300, stale-while-revalidate=480", - ) - - res.status(200).json(data ?? []) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/rankings/index.ts b/app/pages/api/rankings/index.ts deleted file mode 100644 index acc2c09e..00000000 --- a/app/pages/api/rankings/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { getRankings } from "bhapi" -import type { Bracket } from "bhapi/types" -import type { NextApiHandler } from "next" -import type { RankedRegion } from "bhapi/constants" - -const handler: NextApiHandler = async (req, res) => { - res.setHeader( - "Cache-Control", - "public, s-maxage=300, stale-while-revalidate=480", - ) - - try { - const { bracket, region, page, name } = req.query - const data = await getRankings( - bracket as Bracket, - region as RankedRegion, - page as string, - name as string, - ) - res.status(200).json(data) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/rankings/power.ts b/app/pages/api/rankings/power.ts deleted file mode 100644 index e9f8707a..00000000 --- a/app/pages/api/rankings/power.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { parsePowerRankingsPage } from "web-parser/power-rankings/parsePowerRankingsPage" -import type { Bracket } from "bhapi/types" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - try { - const { bracket, region } = req.query - const data = await parsePowerRankingsPage( - bracket as Bracket, - // @ts-expect-error typecheck region - region, - ) - - res.setHeader( - "Cache-Control", - "public, s-maxage=300, stale-while-revalidate=480", - ) - - res.status(200).json(data) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/rankings/search/player.ts b/app/pages/api/rankings/search/player.ts deleted file mode 100644 index 028fd2d1..00000000 --- a/app/pages/api/rankings/search/player.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { SEARCH_PLAYERS_ALIASES_PER_PAGE } from "server/helpers/constants" -import { supabaseService } from "db/supabase/service" -import type { BHPlayerAlias } from "db/generated/client" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - res.setHeader( - "Cache-Control", - "public, s-maxage=600, stale-while-revalidate=3600", - ) - - const { search, page = "1" } = req.query - - if (!search) { - return res.status(403).json({ error: "Bad request" }) - } - - try { - let query = supabaseService - .from("BHPlayerAlias") - .select("*") - .order("alias", { ascending: true }) - - if (search) { - query = query.match({ alias: search }) - } - - const pageNum = parseInt(page as string) - - const { data, error } = await query.range( - (pageNum - 1) * SEARCH_PLAYERS_ALIASES_PER_PAGE, - pageNum * SEARCH_PLAYERS_ALIASES_PER_PAGE - 1, - ) - - if (error) throw error - - //TODO: fetch all aliases used by players - - res.status(200).json(data ?? []) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/stats/clan/[clanId].ts b/app/pages/api/stats/clan/[clanId].ts deleted file mode 100644 index 8ccf2a02..00000000 --- a/app/pages/api/stats/clan/[clanId].ts +++ /dev/null @@ -1,20 +0,0 @@ -import { getClan } from "bhapi" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - try { - const { clanId } = req.query - const data = await getClan(parseInt(clanId as string)) - - res.setHeader( - "Cache-Control", - "public, s-maxage=300, stale-while-revalidate=480", - ) - - res.status(200).json(data) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/stats/player/[playerId]/aliases.ts b/app/pages/api/stats/player/[playerId]/aliases.ts deleted file mode 100644 index 93f7abc5..00000000 --- a/app/pages/api/stats/player/[playerId]/aliases.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { supabaseService } from "db/supabase/service" -import type { BHPlayerAlias } from "db/generated/client" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - res.setHeader( - "Cache-Control", - "public, s-maxage=300, stale-while-revalidate=480", - ) - - const { playerId } = req.query - - try { - const { data, error } = await supabaseService - .from("BHPlayerAlias") - .select("*") - .match({ playerId }) - - if (error) throw error - - res.status(200).json(data.map((alias) => alias.alias)) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/stats/player/[playerId]/ranked.ts b/app/pages/api/stats/player/[playerId]/ranked.ts deleted file mode 100644 index 8300879e..00000000 --- a/app/pages/api/stats/player/[playerId]/ranked.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { getPlayerRanked } from "bhapi" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - try { - const { playerId } = req.query - const data = await getPlayerRanked(parseInt(playerId as string)) - - res.setHeader( - "Cache-Control", - "public, s-maxage=300, stale-while-revalidate=480", - ) - - res.status(200).json(data) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/stats/player/[playerId]/stats.ts b/app/pages/api/stats/player/[playerId]/stats.ts deleted file mode 100644 index c4c95de4..00000000 --- a/app/pages/api/stats/player/[playerId]/stats.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { getPlayerStats } from "bhapi" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - res.setHeader( - "Cache-Control", - "public, s-maxage=300, stale-while-revalidate=480", - ) - - try { - const { playerId } = req.query - const data = await getPlayerStats(parseInt(playerId as string)) - res.status(200).json(data) - } catch (error) { - res.status(500).json({ error: "something went wrong" }) - } -} - -export default handler diff --git a/app/pages/api/trpc/[trpc].ts b/app/pages/api/trpc/[trpc].ts deleted file mode 100644 index 0160ffcc..00000000 --- a/app/pages/api/trpc/[trpc].ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as trpcNext from "@trpc/server/adapters/next" -import { appRouter } from "server/router" - -export default trpcNext.createNextApiHandler({ - router: appRouter, - createContext: () => ({}), - batching: { - enabled: false, - }, - responseMeta({ paths, type, errors }) { - // assuming you have all your public routes with the keyword `public` in them - const allPublic = - paths && paths.every((path) => path.includes("public")) - // checking that no procedures errored - const allOk = errors.length === 0 - // checking we're doing a query request - const isQuery = type === "query" - if (allPublic && allOk && isQuery) { - // cache for 1 day + revalidate once every 15 minutes - const CACHE_TIME = 60 * 60 * 24 - const REVALIDATE_TIME = 60 * 15 - - return { - headers: { - "cache-control": `s-maxage=${REVALIDATE_TIME}, stale-while-revalidate=${CACHE_TIME}`, - }, - } - } - return {} - }, -}) diff --git a/app/pages/api/weekly-rotation.ts b/app/pages/api/weekly-rotation.ts deleted file mode 100644 index b4cff67e..00000000 --- a/app/pages/api/weekly-rotation.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { getWeeklyRotation } from "web-parser/weekly-rotation/getWeeklyRotation" -import type { NextApiHandler } from "next" - -const handler: NextApiHandler = async (req, res) => { - try { - const weeklyRotation = await getWeeklyRotation() - - res.setHeader( - "Cache-Control", - "public, s-maxage=3600, stale-while-revalidate=7200", - ) - - res.status(200).json(weeklyRotation) - } catch (error) { - res.status(500).json({ error: "Failed to fetch weekly rotation" }) - } -} - -export default handler diff --git a/app/pages/rankings/1v1/[[...rankingsOptions]].tsx b/app/pages/rankings/1v1/[[...rankingsOptions]].tsx deleted file mode 100644 index 4b8f7b5a..00000000 --- a/app/pages/rankings/1v1/[[...rankingsOptions]].tsx +++ /dev/null @@ -1,145 +0,0 @@ -import { AppLink } from "ui/base/AppLink" -import { Image } from "@components/Image" -import { RankingsLayout } from "@components/stats/rankings/RankingsLayout" -import { RankingsTableItem } from "@components/stats/RankingsTableItem" -import { SEO } from "@components/SEO" -import { Spinner } from "ui/base/Spinner" -import { cleanString } from "common/helpers/cleanString" -import { legendsMap } from "bhapi/legends" -import { useDebouncedState } from "common/hooks/useDebouncedState" -import { useEffect } from "react" -import { useRankings1v1 } from "@hooks/stats/useRankings" -import { useRouter } from "next/router" -import type { NextPage } from "next" - -const Page: NextPage = () => { - const router = useRouter() - - const { rankingsOptions, player = "" } = router.query - - const [search, setSearch, immediateSearch] = useDebouncedState( - player.toString(), - 500, - ) - - const [region = "all", page = "1"] = Array.isArray(rankingsOptions) - ? rankingsOptions - : [] - - const { rankings1v1, isLoading, isError } = useRankings1v1( - // @ts-expect-error TODO: Typecheck this - region, - page, - search, - ) - - useEffect(() => { - window.history.replaceState( - "", - "", - `/rankings/1v1/${region}/${page}?player=${search}`, - ) - }, [region, page, search]) - - if (isError || (!isLoading && !rankings1v1)) return
Error
- - return ( - - -
-

Rank

-

Tier

-

Region

-

Name

-

Games

-

W/L

-

Winrate

-

Elo

-
- {isLoading && !rankings1v1 ? ( -
- -
- ) : ( -
- {rankings1v1 - ?.filter((player) => - player.name - .toLowerCase() - .startsWith(immediateSearch), - ) - .map((player, i) => { - const legend = legendsMap[player.best_legend] - - return ( - - {legend && ( - {legend.bio_name} - )} - {cleanString(player.name)} - - } - {...player} - /> - ) - })} -
- )} -
- ) -} - -export default Page diff --git a/app/pages/rankings/2v2/[[...rankingsOptions]].tsx b/app/pages/rankings/2v2/[[...rankingsOptions]].tsx deleted file mode 100644 index dd549607..00000000 --- a/app/pages/rankings/2v2/[[...rankingsOptions]].tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { AppLink } from "ui/base/AppLink" -import { RankingsLayout } from "@components/stats/rankings/RankingsLayout" -import { RankingsTableItem } from "@components/stats/RankingsTableItem" -import { SEO } from "@components/SEO" -import { Spinner } from "ui/base/Spinner" -import { cleanString } from "common/helpers/cleanString" -import { getTeamPlayers } from "bhapi/helpers/getTeamPlayers" -import { useRankings2v2 } from "@hooks/stats/useRankings" -import { useRouter } from "next/router" -import type { NextPage } from "next" - -const Page: NextPage = () => { - const router = useRouter() - - const { rankingsOptions } = router.query - - const [region = "all", page = "1"] = Array.isArray(rankingsOptions) - ? rankingsOptions - : [] - - const { rankings2v2, isLoading, isError } = useRankings2v2( - // @ts-expect-error TODO: Typecheck this - region, - page, - ) - - if (isError || (!isLoading && !rankings2v2)) return
Error
- - return ( - - -
-

Rank

-

Tier

-

Region

-

Player 1

-

Player 2

-

Games

-

W/L

-

Winrate

-

Elo

-
- {isLoading ? ( -
- -
- ) : ( -
- {rankings2v2?.map((team, i) => { - const [player1, player2] = getTeamPlayers(team) - return ( - -

- - {cleanString(player1.name)} - -

-

- - {cleanString(player2.name)} - -

- - } - {...team} - /> - ) - })} -
- )} -
- ) -} - -export default Page diff --git a/app/pages/rankings/clans/[[...clansOptions]].tsx b/app/pages/rankings/clans/[[...clansOptions]].tsx deleted file mode 100644 index d755e89d..00000000 --- a/app/pages/rankings/clans/[[...clansOptions]].tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { AppLink } from "ui/base/AppLink" -import { CLANS_RANKINGS_PER_PAGE } from "server/helpers/constants" -import { RankingsLayout } from "@components/stats/rankings/RankingsLayout" -import { SEO } from "@components/SEO" -import { Spinner } from "ui/base/Spinner" -import { cleanString } from "common/helpers/cleanString" -import { cn } from "common/helpers/classnames" -import { formatUnixTime } from "common/helpers/date" -import { useClansRankings } from "@hooks/stats/useClansRankings" -import { useDebouncedState } from "common/hooks/useDebouncedState" -import { useRouter } from "next/router" -import { z } from "zod" -import type { NextPage } from "next" - -const ClansPage: NextPage = () => { - const router = useRouter() - - const { clansOptions, clan } = router.query - - let clanName = "" - let page = "1" - - // TODO: ZOD (next version) will allow us to do this: - // const clanName = z.string().catch("").parse(clan) - try { - clanName = z.string().parse(clan) - } catch { - // do nothing, we use the default value - } - - try { - const validClanOptions = z.array(z.string()).parse(clansOptions) - const [pageToValidate] = validClanOptions - - // TODO: ZOD (next version) will allow us to do this: - // const validPage = z.string().regex(/^\d+$/).catch("1").parse(pageToValidate) - const validPage = z.string().regex(/^\d+$/).parse(pageToValidate) - - page = validPage - } catch { - // do nothing, we use the default value - } - - const [search, setSearch, immediateSearch] = useDebouncedState( - clanName.toString(), - 500, - ) - - const { clans, isLoading, isError } = useClansRankings(page, search) - - if (isError || (!isLoading && !clans)) return
Error
- - const showClanRank = !search - - return ( - - -
- {showClanRank &&

Rank

} -

Name

-

Created on

-

XP

-
- {isLoading ? ( -
- -
- ) : ( -
- {clans.map((clan, index) => ( -
- {showClanRank && ( -

- {(parseInt(page, 10) - 1) * - CLANS_RANKINGS_PER_PAGE + - index + - 1} -

- )} -

- - {cleanString(clan.name)} - -

-
- {!!clan.created && clan.created > 0 - ? formatUnixTime(clan.created) - : "N/A"} -
-

{clan.xp}

-
- ))} -
- )} -
- ) -} - -export default ClansPage diff --git a/app/pages/rankings/global/[[...rankingsOptions]].tsx b/app/pages/rankings/global/[[...rankingsOptions]].tsx deleted file mode 100644 index 4a83a5f1..00000000 --- a/app/pages/rankings/global/[[...rankingsOptions]].tsx +++ /dev/null @@ -1,135 +0,0 @@ -import { AppLink } from "ui/base/AppLink" -import { GLOBAL_PLAYER_RANKINGS_PER_PAGE } from "server/helpers/constants" -import { Select } from "ui/base/Select" -import { cleanString } from "common/helpers/cleanString" -import { cn } from "common/helpers/classnames" -import { trpc } from "@util/trpc" -import { useState } from "react" -import type { NextPage } from "next" -import type { SortablePlayerProp } from "server/mutations/updateDBPlayerData" - -const Page: NextPage = () => { - const page = "1" - - const [sortBy, setSortBy] = useState("xp") - const { data: players } = trpc.getGlobalPlayerRankings.useQuery({ - page, - sortBy, - }) - - return ( - <> - - className="flex-1" - onChange={setSortBy} - value={sortBy} - options={[ - { - label: "Account XP", - value: "xp", - }, - { - label: "Games", - value: "games", - }, - { - label: "Wins", - value: "wins", - }, - { - label: "Ranked Games", - value: "rankedGames", - }, - { - label: "Ranked Wins", - value: "rankedWins", - }, - { - label: "Damage Dealt", - value: "damageDealt", - }, - { - label: "Damage Taken", - value: "damageTaken", - }, - { - label: "KOs", - value: "kos", - }, - { - label: "Falls", - value: "falls", - }, - { - label: "Suicides", - value: "suicides", - }, - { - label: "Team KOs", - value: "teamKos", - }, - { - label: "Match Time", - value: "matchTime", - }, - { - label: "Damage Unarmed", - value: "damageUnarmed", - }, - { - label: "KOs Unarmed", - value: "koUnarmed", - }, - { - label: "Match Time Unarmed", - value: "matchTimeUnarmed", - }, - { - label: "KOs Thrown Item", - value: "koThrownItem", - }, - { - label: "Damage Thrown Item", - value: "damageThrownItem", - }, - { - label: "KOs Gadgets", - value: "koGadgets", - }, - { - label: "Damage Gadgets", - value: "damageGadgets", - }, - ]} - /> -
- {players?.map((player, index) => ( -
-

- {(parseInt(page, 10) - 1) * - GLOBAL_PLAYER_RANKINGS_PER_PAGE + - index + - 1} -

-

- - {cleanString(player.name)} - -

-
- {player.prop} -
-
- ))} -
- - ) -} - -export default Page diff --git a/app/pages/rankings/power/[[...rankingsOptions]].tsx b/app/pages/rankings/power/[[...rankingsOptions]].tsx deleted file mode 100644 index 373c8c94..00000000 --- a/app/pages/rankings/power/[[...rankingsOptions]].tsx +++ /dev/null @@ -1,268 +0,0 @@ -import { MiscStatGroup } from "@components/stats/MiscStatGroup" -import { RankingsLayout } from "@components/stats/rankings/RankingsLayout" -import { SEO } from "@components/SEO" -import { Select } from "ui/base/Select" -import { Spinner } from "ui/base/Spinner" -import { Tooltip } from "ui/base/Tooltip" -import { cleanString } from "common/helpers/cleanString" -import { cn } from "common/helpers/classnames" -import { - powerRankingsBracketValidator, - powerRankingsRegionValidator, -} from "web-parser/power-rankings/parsePowerRankingsPage" -import { useDebouncedState } from "common/hooks/useDebouncedState" -import { usePowerRankings } from "@hooks/stats/usePowerRankings" -import { useRouter } from "next/router" -import { useSortBy } from "common/hooks/useSortBy" -import { z } from "zod" -import type { MiscStat } from "@components/stats/MiscStatGroup" -import type { NextPage } from "next" -import type { - PR, - PowerRankingsBracket, - PowerRankingsRegion, -} from "web-parser/power-rankings/parsePowerRankingsPage" - -type PRSortOption = - | "rank" - | "name" - | "earnings" - | "t1" - | "t2" - | "t3" - | "t8" - | "t32" - -const Page: NextPage = () => { - const router = useRouter() - - const { rankingsOptions } = router.query - - let bracket: PowerRankingsBracket = "1v1", - region: PowerRankingsRegion = "us-e" - - // TODO: ZOD (next version) will allow us to do this: - // const bracket = powerRankingsBracketValidator.catch("1v1").parse(bracket) - // const region = powerRankingsRegionValidator.catch("us-e").parse(region) - try { - const validRankingsOptions = z.array(z.string()).parse(rankingsOptions) - const [bracketToValidate, regionToValidate] = validRankingsOptions - - try { - const validBracket = - powerRankingsBracketValidator.parse(bracketToValidate) - - bracket = validBracket - } catch { - // do nothing, we use the default value - } - try { - const validRegion = - powerRankingsRegionValidator.parse(regionToValidate) - - region = validRegion - } catch { - // do nothing, we use the default value - } - } catch { - // do nothing, we use the default values - } - - const { powerRankings, isLoading, isError } = usePowerRankings( - bracket, - region, - ) - - const { - sortedArray: sortedPowerRankings, - setSortBy, - sortBy, - options: sortOptions, - } = useSortBy( - powerRankings ?? [], - { - rank: { label: "PR", sortFn: (a, b) => a.rank - b.rank }, - name: { - label: "Name", - sortFn: (a, b) => a.name.localeCompare(b.name), - }, - earnings: { - label: "Earnings (Not implemented)", - sortFn: () => 0, // TOODO: Sort by earnings - }, - t1: { label: "T1", sortFn: (a, b) => b.t1 - a.t1 }, - t2: { label: "T2", sortFn: (a, b) => b.t2 - a.t2 }, - t3: { label: "T3", sortFn: (a, b) => b.t3 - a.t3 }, - t8: { label: "T8", sortFn: (a, b) => b.t8 - a.t8 }, - t32: { label: "T32", sortFn: (a, b) => b.t32 - a.t32 }, - }, - "rank", - ) - - const [search, setSearch, immediateSearch] = useDebouncedState("", 250) - - if (isError || (!isLoading && !powerRankings)) return
Error
- - const filteredlPowerRankings = - sortedPowerRankings.filter(({ name }) => - cleanString(name).toLowerCase().startsWith(search.toLowerCase()), - ) ?? [] - - const goldMedalists = filteredlPowerRankings.filter(({ t1 }) => t1 > 0) - const silverMedalists = filteredlPowerRankings.filter(({ t2 }) => t2 > 0) - const bronzeMedalists = filteredlPowerRankings.filter(({ t3 }) => t3 > 0) - const podiumedPlayers = filteredlPowerRankings.filter( - ({ t1, t2, t3 }) => t1 + t2 + t3 > 0, - ) - const t8Finalists = filteredlPowerRankings.filter(({ t8 }) => t8 > 0) - const t32Finalists = filteredlPowerRankings.filter(({ t32 }) => t32 > 0) - - const globalStats: MiscStat[] = [ - { - name: `Players ranked`, - value: filteredlPowerRankings.length, - desc: `${filteredlPowerRankings.length} players ${ - search !== "" ? `starting with ${search}` : "" - } are currently power ranked`, - }, - { - name: `Gold medalists`, - value: goldMedalists.length, - desc: `${goldMedalists.length} players ${ - search !== "" ? `starting with ${search}` : "" - } have a gold medal`, - }, - { - name: `Silver medalists`, - value: silverMedalists.length, - desc: `${silverMedalists.length} players ${ - search !== "" ? `starting with ${search}` : "" - } have a silver medal`, - }, - { - name: `Bronze medalists`, - value: bronzeMedalists.length, - desc: `${bronzeMedalists.length} players ${ - search !== "" ? `starting with ${search}` : "" - } have a bronze medal`, - }, - { - name: `Podiumed players`, - value: podiumedPlayers.length, - desc: `${podiumedPlayers.length} players ${ - search !== "" ? `starting with ${search}` : "" - } have a podium`, - }, - { - name: `Top 8 finalists`, - value: t8Finalists.length, - desc: `${t8Finalists.length} players ${ - search !== "" ? `starting with ${search}` : "" - } have a top 8 finish`, - }, - { - name: `Top 32 finalists`, - value: t32Finalists.length, - desc: `${t32Finalists.length} players ${ - search !== "" ? `starting with ${search}` : "" - } have a top 32 finish`, - }, - ] - - return ( - - - - className="flex-1" - onChange={setSortBy} - value={sortBy} - options={sortOptions} - /> - -
-

Rank

-

Name

-

Earnings

-

Gold

-

Silver

-

Bronze

-

Top 8

-

Top 32

-
- {isLoading ? ( -
- -
- ) : filteredlPowerRankings.length > 0 ? ( -
- {filteredlPowerRankings.map((player, i) => ( -
-

{player.rank}

-

{cleanString(player.name)}

-

{player.earnings}

-

- {player.t1 ? `${player.t1} 🏆` : "-"} -

-

- {player.t2 ? `${player.t2} 🥈` : "-"} -

-

- {player.t3 ? `${player.t3} 🥉` : "-"} -

-

- {player.t8 || "-"} -

-

- {player.t32 || "-"} -

-
- ))} -
- ) : ( - -
- No results found in {bracket} {region.toUpperCase()}{" "} - Power Rankings -
-
- )} -
- ) -} - -export default Page diff --git a/app/pages/stats/clan/[clanId].tsx b/app/pages/stats/clan/[clanId].tsx deleted file mode 100644 index ef416e8c..00000000 --- a/app/pages/stats/clan/[clanId].tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { ClanMember } from "@components/stats/clan/ClanMember" -import { SEO } from "@components/SEO" -import { StatsHeader } from "@components/stats/StatsHeader" -import { cleanString } from "common/helpers/cleanString" -import { formatUnixTime } from "common/helpers/date" -import { useClan } from "@hooks/stats/useClan" -import { useRouter } from "next/router" -import type { ClanRank } from "bhapi/constants" -import type { MiscStat } from "@components/stats/MiscStatGroup" -import type { NextPage } from "next" - -const clanRankWeights: Record = { - Leader: 0, - Officer: 1, - Member: 2, - Recruit: 3, -} as const - -const Page: NextPage = () => { - const router = useRouter() - const { clanId } = router.query - - const { clan, isLoading, isError } = useClan(clanId as string) - - if (isLoading) return

Loading...

- - if (isError || !clan) return

Error fetching clan stats

- - const clanStats: MiscStat[] = [ - { - name: "Created on", - value: formatUnixTime(clan.clan_create_date), - desc: `Date when ${cleanString(clan.clan_name)} was created`, - }, - // { - // name: "Level", - // value: "TBA", - // }, - { - name: "XP", - value: clan.clan_xp, - desc: `XP earned by ${cleanString( - clan.clan_name, - )} members since creation`, - }, - { - name: "Members", - value: clan.clan.length, - desc: `Number of members in ${cleanString(clan.clan_name)}`, - }, - ] - - const sortedMembers = clan.clan.sort((a, b) => { - if (a.rank === b.rank) { - return a.join_date - b.join_date - } - - return clanRankWeights[a.rank] - clanRankWeights[b.rank] - }) - - return ( - <> - - -
- {sortedMembers.map((member) => ( - - ))} -
- - ) -} - -export default Page diff --git a/app/pages/stats/player/[playerId].tsx b/app/pages/stats/player/[playerId].tsx deleted file mode 100644 index e6869ce8..00000000 --- a/app/pages/stats/player/[playerId].tsx +++ /dev/null @@ -1,235 +0,0 @@ -import { Image } from "@components/Image" -import { MAX_SHOWN_ALIASES } from "@util/constants" -import { Player2v2Tab } from "@components/stats/player/Player2v2Tab" -import { PlayerLegendsTab } from "@components/stats/player/PlayerLegendsTab" -import { PlayerOverviewTab } from "@components/stats/player/PlayerOverviewTab" -import { PlayerWeaponsTab } from "@components/stats/player/PlayerWeaponsTab" -import { SEO } from "@components/SEO" -import { StatsHeader } from "@components/stats/StatsHeader" -import { - Root as Tabs, - TabsContent, - TabsList, - TabsTrigger, -} from "@radix-ui/react-tabs" -import { cleanString } from "common/helpers/cleanString" -import { cn } from "common/helpers/classnames" -import { css, theme } from "ui/theme" -import { formatTime } from "common/helpers/date" -import { - getFullLegends, - getFullWeapons, - getLegendsAccumulativeData, -} from "bhapi/legends" -import { usePlayerAliases } from "@hooks/stats/usePlayerAliases" -import { usePlayerRanked } from "@hooks/stats/usePlayerRanked" -import { usePlayerStats } from "@hooks/stats/usePlayerStats" -import { useRouter } from "next/router" -import type { MiscStat } from "@components/stats/MiscStatGroup" -import type { NextPage } from "next" - -const tabClassName = cn( - "px-6 py-4 uppercase text-xs border-b-2 z-10 whitespace-nowrap", - css({ - borderColor: "transparent", - color: theme.colors.textVar1, - '&[data-state="active"]': { - borderColor: theme.colors.accent, - color: theme.colors.text, - }, - "&:hover": { - backgroundColor: theme.colors.bgVar2, - borderColor: theme.colors.text, - color: theme.colors.text, - }, - })(), -) - -const Page: NextPage = () => { - const router = useRouter() - const { playerId } = router.query - const { playerStats, isLoading, isError } = usePlayerStats( - playerId as string, - ) - const { playerRanked } = usePlayerRanked(playerId as string) - const { playerAliases } = usePlayerAliases(playerId as string) - - if (isLoading) return

Loading...

- - if (isError || !playerStats) return

Error

- - const fullLegends = getFullLegends( - playerStats.legends, - playerRanked?.legends, - ) - - const { - matchtime, - kos, - falls, - suicides, - teamkos, - damagedealt, - damagetaken, - } = getLegendsAccumulativeData(fullLegends) - - const weapons = getFullWeapons(fullLegends) - - const legendsSortedByLevel = fullLegends - .slice(0) - .sort((a, b) => (b.stats?.matchtime ?? 0) - (a.stats?.matchtime ?? 0)) - - const accountStats: MiscStat[] = [ - { - name: "Account level", - value: playerStats.level, - desc: `${playerStats.name}'s account level`, - }, - { - name: "Account XP", - value: playerStats.xp, - desc: `${playerStats.name}'s account XP`, - }, - { - name: "Game time", - value: formatTime(matchtime), - desc: `Time ${playerStats.name} spent in game`, - }, - { - name: "Main legends", - value: ( -
- {legendsSortedByLevel.slice(0, 3).map((legend) => ( - {legend.bio_name} - ))} -
- ), - desc: `${playerStats.name}'s main legends`, - }, - { - name: "Main weapons", - value: ( -
- {weapons - .map(({ weapon, legends }) => ({ - weapon, - matchtime: legends.reduce((acc, legend) => { - const matchtime = - weapon === legend.weapon_one - ? legend.stats?.timeheldweaponone - : legend.stats?.timeheldweapontwo - return acc + (matchtime ?? 0) - }, 0), - })) - .sort((a, b) => b.matchtime - a.matchtime) - .slice(0, 3) - .map((weapon) => ( - {weapon.weapon} - ))} -
- ), - desc: `${playerStats.name}'s main weapons`, - }, - ] - - return ( - <> - - - ) - } - favorite={{ - type: "player", - id: playerStats.brawlhalla_id.toString(), - name: cleanString(playerStats.name), - meta: { - icon: { - type: "legend", - legend_id: legendsSortedByLevel[0].legend_id, - }, - }, - }} - /> - - - - Overview - - {playerRanked && playerRanked["2v2"].length > 0 && ( - - 2v2 Ranked - - )} - - Legends - - - Weapons - - - - - - {playerRanked && playerRanked["2v2"].length > 0 && ( - - - - )} - - - - - - - - - ) -} - -export default Page diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml new file mode 100644 index 00000000..943e676b --- /dev/null +++ b/app/pnpm-lock.yaml @@ -0,0 +1,4048 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@radix-ui/react-slider': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@tanstack/react-query': + specifier: ^4.35.7 + version: 4.35.7(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': + specifier: ^10.40.0 + version: 10.40.0(@trpc/server@10.40.0) + '@trpc/react-query': + specifier: ^10.40.0 + version: 10.40.0(@tanstack/react-query@4.35.7)(@trpc/client@10.40.0)(@trpc/server@10.40.0)(react-dom@18.2.0)(react@18.2.0) + '@trpc/server': + specifier: ^10.40.0 + version: 10.40.0 + '@types/node': + specifier: 20.8.3 + version: 20.8.3 + '@types/react': + specifier: 18.2.25 + version: 18.2.25 + '@types/react-dom': + specifier: 18.2.11 + version: 18.2.11 + autoprefixer: + specifier: 10.4.16 + version: 10.4.16(postcss@8.4.31) + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.0.0 + version: 2.0.0 + drizzle-orm: + specifier: ^0.28.6 + version: 0.28.6(@types/pg@8.10.3)(pg@8.11.3) + drizzle-zod: + specifier: ^0.5.1 + version: 0.5.1(drizzle-orm@0.28.6)(zod@3.22.4) + eslint: + specifier: 8.51.0 + version: 8.51.0 + eslint-config-next: + specifier: 13.5.4 + version: 13.5.4(eslint@8.51.0)(typescript@5.2.2) + immer: + specifier: ^10.0.3 + version: 10.0.3 + lucide-react: + specifier: ^0.284.0 + version: 0.284.0(react@18.2.0) + next: + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) + pg: + specifier: ^8.11.3 + version: 8.11.3 + postcss: + specifier: 8.4.31 + version: 8.4.31 + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + react-youtube: + specifier: ^10.1.0 + version: 10.1.0(react@18.2.0) + superjson: + specifier: ^1.13.3 + version: 1.13.3 + tailwind-merge: + specifier: ^1.14.0 + version: 1.14.0 + tailwindcss: + specifier: 3.3.3 + version: 3.3.3 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.3.3) + typescript: + specifier: 5.2.2 + version: 5.2.2 + uuid: + specifier: ^9.0.1 + version: 9.0.1 + zod: + specifier: ^3.22.4 + version: 3.22.4 + zustand: + specifier: ^4.4.3 + version: 4.4.3(@types/react@18.2.25)(immer@10.0.3)(react@18.2.0) + +devDependencies: + '@types/pg': + specifier: ^8.10.3 + version: 8.10.3 + '@types/uuid': + specifier: ^9.0.5 + version: 9.0.5 + '@types/youtube-player': + specifier: ^5.5.8 + version: 5.5.8 + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.4 + version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@5.2.2) + drizzle-kit: + specifier: ^0.19.13 + version: 0.19.13 + eslint-plugin-prettier: + specifier: ^5.0.0 + version: 5.0.0(eslint@8.51.0)(prettier@3.0.3) + prettier: + specifier: ^3.0.3 + version: 3.0.3 + tsx: + specifier: ^3.13.0 + version: 3.13.0 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: false + + /@babel/runtime@7.23.1: + resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: false + + /@drizzle-team/studio@0.0.5: + resolution: {integrity: sha512-ps5qF0tMxWRVu+V5gvCRrQNqlY92aTnIKdq27gm9LZMSdaKYZt6AVvSK1dlUMzs6Rt0Jm80b+eWct6xShBKhIw==} + dev: true + + /@esbuild-kit/core-utils@3.3.2: + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + dev: true + + /@esbuild-kit/esm-loader@2.6.5: + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.2 + dev: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.51.0 + eslint-visitor-keys: 3.4.3 + + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/js@8.51.0: + resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /@humanwhocodes/config-array@0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + dev: false + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: false + + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + + /@next/env@13.5.4: + resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==} + dev: false + + /@next/eslint-plugin-next@13.5.4: + resolution: {integrity: sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==} + dependencies: + glob: 7.1.7 + dev: false + + /@next/swc-darwin-arm64@13.5.4: + resolution: {integrity: sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@13.5.4: + resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@13.5.4: + resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@13.5.4: + resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@13.5.4: + resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@13.5.4: + resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@13.5.4: + resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@13.5.4: + resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@13.5.4: + resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.1 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + + /@radix-ui/number@1.0.1: + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + dependencies: + '@babel/runtime': 7.23.1 + dev: false + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.23.1 + dev: false + + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-direction@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slider@1.1.2(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@rushstack/eslint-patch@1.5.1: + resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} + dev: false + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@tanstack/query-core@4.35.7: + resolution: {integrity: sha512-PgDJtX75ubFS0WCYFM7DqEoJ4QbxU3S5OH3gJSI40xr7UVVax3/J4CM3XUMOTs+EOT5YGEfssi3tfRVGte4DEw==} + dev: false + + /@tanstack/react-query@4.35.7(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-0MankquP/6EOM2ATfEov6ViiKemey5uTbjGlFMX1xGotwNaqC76YKDMJdHumZupPbZcZPWAeoPGEHQmVKIKoOQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@tanstack/query-core': 4.35.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + + /@trpc/client@10.40.0(@trpc/server@10.40.0): + resolution: {integrity: sha512-bT6BcdWjj0KzGQiimE6rB2tIaRYX0Ear4Gthb5szN/c01wrP0yC1Fbz2uCcm/QTVAwu4Lve5M+YjPoEaTHG6lg==} + peerDependencies: + '@trpc/server': 10.40.0 + dependencies: + '@trpc/server': 10.40.0 + dev: false + + /@trpc/react-query@10.40.0(@tanstack/react-query@4.35.7)(@trpc/client@10.40.0)(@trpc/server@10.40.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DpJrV3lmYNo9xtPtcg49lfh9CUFap3ZivjhlSmfe4QPf7H6xBjAE+ml4OdJ0RmKvSTFvbLSOiNdB1k5O8zIdzQ==} + peerDependencies: + '@tanstack/react-query': ^4.18.0 + '@trpc/client': 10.40.0 + '@trpc/server': 10.40.0 + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@tanstack/react-query': 4.35.7(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': 10.40.0(@trpc/server@10.40.0) + '@trpc/server': 10.40.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@trpc/server@10.40.0: + resolution: {integrity: sha512-49SUOMWzSZtu5+OdrADmJD+u+sjSE0qj1cWgYk2FY4jLkPJunLuNRuhzM7aOeBhiUjyfhg2YTfur8FN1WBmvEw==} + dev: false + + /@types/json-schema@7.0.13: + resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: false + + /@types/node@20.8.3: + resolution: {integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==} + + /@types/pg@8.10.3: + resolution: {integrity: sha512-BACzsw64lCZesclRpZGu55tnqgFAYcrCBP92xLh1KLypZLCOsvJTSTgaoFVTy3lCys/aZTQzfeDxtjwrvdzL2g==} + dependencies: + '@types/node': 20.8.3 + pg-protocol: 1.6.0 + pg-types: 4.0.1 + + /@types/prop-types@15.7.8: + resolution: {integrity: sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==} + dev: false + + /@types/react-dom@18.2.11: + resolution: {integrity: sha512-zq6Dy0EiCuF9pWFW6I6k6W2LdpUixLE4P6XjXU1QHLfak3GPACQfLwEuHzY5pOYa4hzj1d0GxX/P141aFjZsyg==} + dependencies: + '@types/react': 18.2.25 + dev: false + + /@types/react@18.2.25: + resolution: {integrity: sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw==} + dependencies: + '@types/prop-types': 15.7.8 + '@types/scheduler': 0.16.4 + csstype: 3.1.2 + dev: false + + /@types/scheduler@0.16.4: + resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} + dev: false + + /@types/semver@7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + dev: true + + /@types/uuid@9.0.5: + resolution: {integrity: sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ==} + dev: true + + /@types/youtube-player@5.5.8: + resolution: {integrity: sha512-WU6l9UyIp1TKEK3xN8K5Y1nZpP4FTnrz4ArAPjQknReNNkN9UeLbmAuFu2F69YthLkLkOAMWi9O3a6kJCIWH5g==} + dev: true + + /@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/type-utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.51.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.7.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.51.0 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/scope-manager@6.7.4: + resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + + /@typescript-eslint/type-utils@6.7.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + debug: 4.3.4 + eslint: 8.51.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.7.4: + resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==} + engines: {node: ^16.0.0 || >=18.0.0} + + /@typescript-eslint/typescript-estree@6.7.4(typescript@5.2.2): + resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/utils@6.7.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + eslint: 8.51.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.7.4: + resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.4 + eslint-visitor-keys: 3.4.3 + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: false + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: false + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + is-string: 1.0.7 + dev: false + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: false + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: false + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: false + + /ast-types-flow@0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: false + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: false + + /autoprefixer@10.4.16(postcss@8.4.31): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.1 + caniuse-lite: 1.0.30001546 + fraction.js: 4.3.6 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: false + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: false + + /axe-core@4.8.2: + resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==} + engines: {node: '>=4'} + dev: false + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001546 + electron-to-chromium: 1.4.544 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: false + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-writer@2.0.0: + resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} + engines: {node: '>=4'} + dev: false + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: false + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false + + /camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + dev: true + + /caniuse-lite@1.0.30001546: + resolution: {integrity: sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==} + dev: false + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false + + /cli-color@2.0.3: + resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-iterator: 2.0.3 + memoizee: 0.4.15 + timers-ext: 0.1.7 + dev: true + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: false + + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.15 + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: false + + /d@1.0.1: + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + dependencies: + es5-ext: 0.10.62 + type: 1.2.0 + dev: true + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-data-property@1.1.0: + resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: false + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.0 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + + /difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + dependencies: + heap: 0.2.7 + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + + /dreamopt@0.8.0: + resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} + engines: {node: '>=0.4.0'} + dependencies: + wordwrap: 1.0.0 + dev: true + + /drizzle-kit@0.19.13: + resolution: {integrity: sha512-Rba5VW1O2JfJlwVBeZ8Zwt2E2us5oZ08PQBDiVSGlug53TOc8hzXjblZFuF+dnll9/RQEHrkzBmJFgqTvn5Rxg==} + hasBin: true + dependencies: + '@drizzle-team/studio': 0.0.5 + '@esbuild-kit/esm-loader': 2.6.5 + camelcase: 7.0.1 + chalk: 5.3.0 + commander: 9.5.0 + esbuild: 0.18.20 + esbuild-register: 3.5.0(esbuild@0.18.20) + glob: 8.1.0 + hanji: 0.0.5 + json-diff: 0.9.0 + minimatch: 7.4.6 + zod: 3.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /drizzle-orm@0.28.6(@types/pg@8.10.3)(pg@8.11.3): + resolution: {integrity: sha512-yBe+F9htrlYER7uXgDJUQsTHFoIrI5yMm5A0bg0GiZ/kY5jNXTWoEy4KQtg35cE27sw1VbgzoMWHAgCckUUUww==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@vercel/postgres': '*' + better-sqlite3: '>=7' + bun-types: '*' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + dependencies: + '@types/pg': 8.10.3 + pg: 8.11.3 + dev: false + + /drizzle-zod@0.5.1(drizzle-orm@0.28.6)(zod@3.22.4): + resolution: {integrity: sha512-C/8bvzUH/zSnVfwdSibOgFjLhtDtbKYmkbPbUCq46QZyZCH6kODIMSOgZ8R7rVjoI+tCj3k06MRJMDqsIeoS4A==} + peerDependencies: + drizzle-orm: '>=0.23.13' + zod: '*' + dependencies: + drizzle-orm: 0.28.6(@types/pg@8.10.3)(pg@8.11.3) + zod: 3.22.4 + dev: false + + /electron-to-chromium@1.4.544: + resolution: {integrity: sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==} + dev: false + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false + + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: false + + /es-abstract@1.22.2: + resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.4 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: false + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-set-tostringtag: 2.0.1 + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: false + + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.4 + has-tostringtag: 1.0.0 + dev: false + + /es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.4 + dev: false + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: false + + /es5-ext@0.10.62: + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.1.0 + dev: true + + /es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-symbol: 3.1.3 + dev: true + + /es6-symbol@3.1.3: + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + dependencies: + d: 1.0.1 + ext: 1.7.0 + dev: true + + /es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + dev: true + + /esbuild-register@3.5.0(esbuild@0.18.20): + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4 + esbuild: 0.18.20 + transitivePeerDependencies: + - supports-color + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: false + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /eslint-config-next@13.5.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 13.5.4 + '@rushstack/eslint-patch': 1.5.1 + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + eslint: 8.51.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.51.0) + eslint-plugin-react: 7.33.2(eslint@8.51.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.51.0) + typescript: 5.2.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.6 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.51.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + fast-glob: 3.3.1 + get-tsconfig: 4.7.2 + is-core-module: 2.13.0 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + debug: 3.2.7 + eslint: 8.51.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.51.0) + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0): + resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.51.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.51.0) + has: 1.0.4 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.51.0): + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.1 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.7 + axe-core: 4.8.2 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.51.0 + has: 1.0.4 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + semver: 6.3.1 + dev: false + + /eslint-plugin-prettier@5.0.0(eslint@8.51.0)(prettier@3.0.3): + resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.51.0 + prettier: 3.0.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 + dev: true + + /eslint-plugin-react-hooks@4.6.0(eslint@8.51.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.51.0 + dev: false + + /eslint-plugin-react@7.33.2(eslint@8.51.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.51.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: false + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /eslint@8.51.0: + resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/regexpp': 4.9.1 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.51.0 + '@humanwhocodes/config-array': 0.11.11 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.1.1 + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} + dependencies: + flatted: 3.2.9 + keyv: 4.5.3 + rimraf: 3.0.2 + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + + /fraction.js@4.3.6: + resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: false + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + functions-have-names: 1.2.3 + dev: false + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.4 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: false + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: false + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: false + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.1 + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: false + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + /hanji@0.0.5: + resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} + dependencies: + lodash.throttle: 4.1.1 + sisteransi: 1.0.5 + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.1 + dev: false + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + /immer@10.0.3: + resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==} + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.4 + side-channel: 1.0.4 + dev: false + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: false + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false + + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.4 + dev: false + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: false + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: false + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: false + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + dev: false + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: false + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: false + + /is-what@4.1.15: + resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} + engines: {node: '>=12.13'} + dev: false + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: false + + /jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + hasBin: true + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + /json-diff@0.9.0: + resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} + hasBin: true + dependencies: + cli-color: 2.0.3 + difflib: 0.2.4 + dreamopt: 0.8.0 + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.4 + object.values: 1.1.7 + dev: false + + /keyv@4.5.3: + resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + dependencies: + json-buffer: 3.0.1 + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: false + + /language-tags@1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: false + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: false + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: false + + /load-script@1.0.0: + resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==} + dev: false + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + dependencies: + es5-ext: 0.10.62 + dev: true + + /lucide-react@0.284.0(react@18.2.0): + resolution: {integrity: sha512-dVSMHYAya/TeY3+vsk+VQJEKNQN2AhIo0+Dp09B2qpzvcBuu93H98YZykFcjIAfmanFiDd8nqfXFR38L757cyQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /memoizee@0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: true + + /next@13.5.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==} + engines: {node: '>=16.14.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.5.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001546 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 13.5.4 + '@next/swc-darwin-x64': 13.5.4 + '@next/swc-linux-arm64-gnu': 13.5.4 + '@next/swc-linux-arm64-musl': 13.5.4 + '@next/swc-linux-x64-gnu': 13.5.4 + '@next/swc-linux-x64-musl': 13.5.4 + '@next/swc-win32-arm64-msvc': 13.5.4 + '@next/swc-win32-ia32-msvc': 13.5.4 + '@next/swc-win32-x64-msvc': 13.5.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: false + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: false + + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + dev: false + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false + + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /packet-reader@1.0.0: + resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: false + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + requiresBuild: true + dev: false + optional: true + + /pg-connection-string@2.6.2: + resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + dev: false + + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + /pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + + /pg-pool@3.6.1(pg@8.11.3): + resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + peerDependencies: + pg: '>=8.0' + dependencies: + pg: 8.11.3 + dev: false + + /pg-protocol@1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + + /pg-types@4.0.1: + resolution: {integrity: sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==} + engines: {node: '>=10'} + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.2 + postgres-bytea: 3.0.0 + postgres-date: 2.0.1 + postgres-interval: 3.0.0 + postgres-range: 1.1.3 + + /pg@8.11.3: + resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-connection-string: 2.6.2 + pg-pool: 3.6.1(pg@8.11.3) + pg-protocol: 1.6.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + dev: false + + /pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + dependencies: + split2: 4.2.0 + dev: false + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: false + + /postcss-import@15.1.0(postcss@8.4.31): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.6 + dev: false + + /postcss-js@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.31 + dev: false + + /postcss-load-config@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.31 + yaml: 2.3.2 + dev: false + + /postcss-nested@6.0.1(postcss@8.4.31): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + dev: false + + /postgres-array@3.0.2: + resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} + engines: {node: '>=12'} + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + dependencies: + obuf: 1.1.2 + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date@2.0.1: + resolution: {integrity: sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==} + engines: {node: '>=12'} + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + + /postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + /postgres-range@1.1.3: + resolution: {integrity: sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==} + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react-youtube@10.1.0(react@18.2.0): + resolution: {integrity: sha512-ZfGtcVpk0SSZtWCSTYOQKhfx5/1cfyEW1JN/mugGNfAxT3rmVJeMbGpA9+e78yG21ls5nc/5uZJETE3cm3knBg==} + engines: {node: '>= 14.x'} + peerDependencies: + react: '>=0.14.1' + dependencies: + fast-deep-equal: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + youtube-player: 5.5.2 + transitivePeerDependencies: + - supports-color + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: false + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: false + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + /resolve@1.22.6: + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /resolve@2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: false + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: false + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.0 + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + dev: false + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sister@3.0.2: + resolution: {integrity: sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==} + dev: false + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + dev: false + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: false + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + /styled-jsx@5.1.1(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.2.0 + dev: false + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: false + + /superjson@1.13.3: + resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} + engines: {node: '>=10'} + dependencies: + copy-anything: 3.0.5 + dev: false + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: false + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + + /tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.3.3): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.3.3 + dev: false + + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.20.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-import: 15.1.0(postcss@8.4.31) + postcss-js: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.1(postcss@8.4.31) + postcss-nested: 6.0.1(postcss@8.4.31) + postcss-selector-parser: 6.0.13 + resolve: 1.22.6 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: false + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + + /timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + dependencies: + es5-ext: 0.10.62 + next-tick: 1.1.0 + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false + + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: false + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /tsx@3.13.0: + resolution: {integrity: sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A==} + hasBin: true + dependencies: + esbuild: 0.18.20 + get-tsconfig: 4.7.2 + source-map-support: 0.5.21 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + /type@1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + dev: true + + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: false + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: false + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: false + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + + /use-sync-external-store@1.2.0(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false + + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: false + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.11 + dev: false + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: false + + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: false + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + engines: {node: '>= 14'} + dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + /youtube-player@5.5.2: + resolution: {integrity: sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==} + dependencies: + debug: 2.6.9 + load-script: 1.0.0 + sister: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + + /zustand@4.4.3(@types/react@18.2.25)(immer@10.0.3)(react@18.2.0): + resolution: {integrity: sha512-oRy+X3ZazZvLfmv6viIaQmtLOMeij1noakIsK/Y47PWYhT8glfXzQ4j0YcP5i0P0qI1A4rIB//SGROGyZhx91A==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.25 + immer: 10.0.3 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false diff --git a/app/providers/SideNavProvider.tsx b/app/providers/SideNavProvider.tsx index bc93e608..5092928d 100644 --- a/app/providers/SideNavProvider.tsx +++ b/app/providers/SideNavProvider.tsx @@ -1,3 +1,5 @@ +"use client" + import { createContext, useContext, useState } from "react" import type { ReactNode } from "react" diff --git a/app/providers/auth/AuthProvider.tsx b/app/providers/auth/AuthProvider.tsx index 6a2ecbec..db55338f 100644 --- a/app/providers/auth/AuthProvider.tsx +++ b/app/providers/auth/AuthProvider.tsx @@ -1,3 +1,5 @@ +"use client" + import { createContext, useContext, useEffect, useState } from "react" import { signIn, signOut } from "db/supabase/auth" import { supabase } from "db/supabase/client" @@ -38,7 +40,13 @@ const authContext = createContext({ }, }) -export const useAuth = (): AuthContext => useContext(authContext) +export const useAuth = (): AuthContext => { + const context = useContext(authContext) + if (!context) { + throw new Error(`useAuth must be used within a AuthProvider`) + } + return context +} export const useFavorites = () => useAuth().userFavorites interface Props { diff --git a/app/providers/auth/useUserFavorites.ts b/app/providers/auth/useUserFavorites.ts index 96b9db9d..9ade7354 100644 --- a/app/providers/auth/useUserFavorites.ts +++ b/app/providers/auth/useUserFavorites.ts @@ -1,7 +1,7 @@ import { supabase } from "db/supabase/client" import { toast } from "react-hot-toast" import { useCallback, useEffect, useMemo, useState } from "react" -import { useFeatureFlags } from "@hooks/useFeatures" +import { useFeatureFlags } from "@/store/useFeatures" import type { Prisma, UserFavorite } from "db/generated/client" import type { Session } from "db/supabase/client" diff --git a/app/public/sitemap-0.xml b/app/public/sitemap-0.xml deleted file mode 100644 index 7da55564..00000000 --- a/app/public/sitemap-0.xml +++ /dev/null @@ -1,6 +0,0 @@ - - -https://dev.corehalla.com2022-12-10T02:46:10.414Zdaily1 -https://dev.corehalla.com/@me/favorites2022-12-10T02:46:10.414Zdaily1 -https://dev.corehalla.com/calc2022-12-10T02:46:10.414Zdaily1 - \ No newline at end of file diff --git a/app/public/sitemap.xml b/app/public/sitemap.xml deleted file mode 100644 index 1e48a201..00000000 --- a/app/public/sitemap.xml +++ /dev/null @@ -1,4 +0,0 @@ - - -https://dev.corehalla.com/sitemap-0.xml - \ No newline at end of file diff --git a/app/server/index.ts b/app/server/index.ts new file mode 100644 index 00000000..c098a683 --- /dev/null +++ b/app/server/index.ts @@ -0,0 +1 @@ +export * from "./router" diff --git a/app/server/router/index.ts b/app/server/router/index.ts new file mode 100644 index 00000000..757c1c13 --- /dev/null +++ b/app/server/router/index.ts @@ -0,0 +1,8 @@ +import { router } from "../trpc" +import { usersRouter } from "./users" + +export const appRouter = router({ + users: usersRouter, +}) + +export type AppRouter = typeof appRouter diff --git a/app/server/router/users/getSingleUser.ts b/app/server/router/users/getSingleUser.ts new file mode 100644 index 00000000..abd2dc52 --- /dev/null +++ b/app/server/router/users/getSingleUser.ts @@ -0,0 +1,14 @@ +import { db, users } from "@/db" +import { eq } from "drizzle-orm" +import { publicProcedure } from "../../trpc" +import { z } from "zod" + +export const getSingleReplay = publicProcedure + .input(z.string().optional().nullable()) + .query(async ({ input: id }) => { + if (!id) return null + + const result = await db.select().from(users).where(eq(users.id, id)) + + return result[0] || null + }) diff --git a/app/server/router/users/index.ts b/app/server/router/users/index.ts new file mode 100644 index 00000000..1b556d7c --- /dev/null +++ b/app/server/router/users/index.ts @@ -0,0 +1,6 @@ +import { getSingleReplay } from "./getSingleUser" +import { router } from "../../trpc" + +export const usersRouter = router({ + getSingle: getSingleReplay, +}) diff --git a/app/server/trpc.ts b/app/server/trpc.ts new file mode 100644 index 00000000..7e2d092f --- /dev/null +++ b/app/server/trpc.ts @@ -0,0 +1,9 @@ +import { initTRPC } from "@trpc/server" +import SuperJSON from "superjson" + +const t = initTRPC.create({ + transformer: SuperJSON, +}) + +export const router = t.router +export const publicProcedure = t.procedure diff --git a/app/store/useFeatures.tsx b/app/store/useFeatures.tsx new file mode 100644 index 00000000..2e7a3c1d --- /dev/null +++ b/app/store/useFeatures.tsx @@ -0,0 +1,55 @@ +"use client" + +import { type AuthContext } from "@/providers/auth/AuthProvider" +import { type ReactNode, createContext, useContext } from "react" + +const __DEV = process.env.NODE_ENV === "development" + +import { createStore, useStore } from "zustand" + +interface FeatureFlagsStoreProps { + authContext?: AuthContext +} + +type FeatureFlagsStore = ReturnType + +type FeatureFlagsState = { + // shouldUseVercelImageOptimization: boolean + shouldShowDummyFavorites: boolean + shouldShowInfoTooltips: boolean + shouldShowAds: boolean +} + +const createFeatureFlagsStore = ({ authContext }: FeatureFlagsStoreProps) => { + return createStore()(() => ({ + shouldShowDummyFavorites: false && __DEV && !authContext?.isLoggedIn, + shouldShowInfoTooltips: true, // TODO: Add setting to toggle this + shouldShowAds: true, // TODO: premium?? + })) +} + +const featureFlagsContext = createContext(null) + +export function useFeatureFlags() { + const store = useContext(featureFlagsContext) + if (!store) + throw new Error("Missing featureFlagsContext.Provider in the tree") + return useStore(store, (state) => state) +} + +type FeatureFlagsProviderProps = FeatureFlagsStoreProps & { + children: ReactNode +} + +export const FeatureFlagsProvider = ({ + children, + authContext, +}: FeatureFlagsProviderProps) => { + const store = createFeatureFlagsStore({ authContext }) + + return ( + + {children} + + ) +} diff --git a/app/styles/globals.css b/app/styles/globals.css deleted file mode 100644 index 4916b9a9..00000000 --- a/app/styles/globals.css +++ /dev/null @@ -1,32 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -* { - scroll-behavior: smooth; -} - -html, body { - @apply bg-bgVar1 text-text; - font-family: "Montserrat", sans-serif; -} - -::-webkit-scrollbar { - @apply w-0 hashover:w-2; -} - -::-webkit-scrollbar-track { - @apply bg-transparent; -} - -::-webkit-scrollbar-thumb { - @apply bg-bg rounded-full hover:bg-accent; -} - -.p-link { - @apply text-accent hover:underline; -} - -.text-fill-none { - -webkit-text-fill-color: transparent -} diff --git a/app/styles/nprogress.css b/app/styles/nprogress.css deleted file mode 100644 index 9c2f2b11..00000000 --- a/app/styles/nprogress.css +++ /dev/null @@ -1,25 +0,0 @@ -/* Make clicks pass-through */ -#nprogress { - pointer-events: none; -} - -#nprogress .bar { - background: #ffffffaa; - - position: fixed; - z-index: 5000; - top: 0; - left: 0; - - width: 100%; - height: 2px; -} - -.nprogress-custom-parent { - overflow: hidden; - position: relative; -} - -.nprogress-custom-parent #nprogress .bar { - position: absolute; -} \ No newline at end of file diff --git a/app/tailwind.config.js b/app/tailwind.config.js deleted file mode 100644 index 38aa16f4..00000000 --- a/app/tailwind.config.js +++ /dev/null @@ -1,20 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-var-requires -const colors = require("ui/theme/theme") - -module.exports = { - content: [ - "./pages/**/*.{js,ts,jsx,tsx}", - "./components/**/*.{js,ts,jsx,tsx}", - "../packages/ui/theme/**/*.{js,ts,jsx,tsx}", - "../packages/ui/base/**/*.{js,ts,jsx,tsx}", - ], - theme: { - extend: { - colors, - screens: { - hashover: { raw: "(hover: hover)" }, - }, - }, - }, - plugins: [], -} diff --git a/app/tailwind.config.ts b/app/tailwind.config.ts new file mode 100644 index 00000000..5fbbd725 --- /dev/null +++ b/app/tailwind.config.ts @@ -0,0 +1,86 @@ +import colors from "ui/theme/theme" +import type { Config } from "tailwindcss" + +const config: Config = { + darkMode: ["class"], + content: [ + "./pages/**/*.{ts,tsx}", + "./components/**/*.{ts,tsx}", + "./app/**/*.{ts,tsx}", + "./src/**/*.{ts,tsx}", + "../packages/ui/theme/**/*.{js,ts,jsx,tsx}", + "../packages/ui/base/**/*.{js,ts,jsx,tsx}", + ], + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + ...colors, + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + // accent: { + // DEFAULT: "hsl(var(--accent))", + // foreground: "hsl(var(--accent-foreground))", + // }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + screens: { + hashover: { raw: "(hover: hover)" }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +} + +export default config diff --git a/app/tsconfig.json b/app/tsconfig.json index 6bf9d4e9..9fe39ace 100644 --- a/app/tsconfig.json +++ b/app/tsconfig.json @@ -1,28 +1,40 @@ { - "extends": "tsconfig/nextjs.json", + "compilerOptions": { + "target": "esnext", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./*" + ] + } + }, "include": [ "next-env.d.ts", "**/*.ts", - "**/*.tsx" + "**/*.tsx", + ".next/types/**/*.ts" ], "exclude": [ "node_modules" - ], - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@hooks/*": [ - "hooks/*" - ], - "@components/*": [ - "components/*" - ], - "@ctx/*": [ - "providers/*" - ], - "@util/*": [ - "util/*" - ] - } - } -} + ] +} \ No newline at end of file diff --git a/app/util/alerts.tsx b/app/util/alerts.tsx index 02a23ed9..cdfc5658 100644 --- a/app/util/alerts.tsx +++ b/app/util/alerts.tsx @@ -1,16 +1,16 @@ -import { AppLink } from "ui/base/AppLink" +import Link from "next/link" export const alerts = { BH_MAINTENANCE: ( Brawlhalla maintenance ongoing. More info{" "} - here - {" "} + {" "} ! ), @@ -18,13 +18,13 @@ export const alerts = { Known issues with fetching stats from Brawlhalla{"'"}s servers, don {"'"}t panic. Updates{" "} - here - {" "} + {" "} ! ), @@ -32,13 +32,13 @@ export const alerts = { Authentication server is down, and so favorites aren{"'"}t accessible, sorry for the inconvenience. Updates{" "} - here - {" "} + {" "} ! ), @@ -46,13 +46,13 @@ export const alerts = { Authentication server is back online, you can reconnect! Don{"'"}t forget to join our{" "} - Discord - {" "} + {" "} ! ), diff --git a/app/util/features.ts b/app/util/features.ts deleted file mode 100644 index 2a1f7a8a..00000000 --- a/app/util/features.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { AuthContext } from "@ctx/auth/AuthProvider" - -export type FeatureFlags = keyof ReturnType - -const __DEV = process.env.NODE_ENV === "development" - -export const getFeatureFlags = ({ - authContext, -}: { - authContext?: AuthContext -}) => { - // const isSSR = typeof window === "undefined" - // const isProductionWebsite = - // process.env.NEXT_PUBLIC_FORCE_PRODUCTION_WEBSITE || - // (!isSSR && window.location.hostname === "corehalla.com") - - return { - // shouldUseVercelImageOptimization: false, - shouldShowDummyFavorites: false && __DEV && !authContext?.isLoggedIn, - shouldShowInfoTooltips: true, // TODO: Add setting to toggle this - shouldShowAds: true, // TODO: premium?? - } as const -} diff --git a/app/util/trpc.ts b/app/util/trpc.ts deleted file mode 100644 index 13866a51..00000000 --- a/app/util/trpc.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { createTRPCNext } from "@trpc/next" -import { httpLink } from "@trpc/client" -import type { AppRouter } from "server/router" -// TS2742: https://github.com/microsoft/TypeScript/issues/47663 -import type {} from "@trpc/react-query" - -const getBaseUrl = () => { - if (typeof window !== "undefined") - // browser should use relative path - return "" - - if (process.env.VERCEL_URL) - // reference for vercel.com - return `https://${process.env.VERCEL_URL}` - - // fallback to localhost - return `http://localhost:${process.env.PORT ?? 3000}` -} - -export const trpc = createTRPCNext({ - config() { - return { - links: [ - httpLink({ - /** - * If you want to use SSR, you need to use the server's full URL - * @link https://trpc.io/docs/ssr - **/ - url: `${getBaseUrl()}/api/trpc`, - }), - ], - /** - * @link https://tanstack.com/query/v4/docs/reference/QueryClient - **/ - queryClientConfig: { - defaultOptions: { - queries: { - staleTime: 60, - refetchOnWindowFocus: false, - refetchOnMount: false, - retry: 3, - retryDelay: (attemptIndex) => - Math.min(1000 * 2 ** attemptIndex, 30000), - }, - }, - }, - } - }, - /** - * @link https://trpc.io/docs/ssr - **/ - ssr: true, - responseMeta({ clientErrors }) { - if (clientErrors.length) { - // propagate first http error from API calls - return { - status: clientErrors[0].data?.httpStatus ?? 500, - } - } - - // cache full page for 1 day + revalidate once every 15 minutes - const CACHE_TIME = 60 * 60 * 24 - const REVALIDATE_TIME = 60 * 15 - return { - "Cache-Control": `s-maxage=${REVALIDATE_TIME}, stale-while-revalidate=${CACHE_TIME}`, - } - }, -}) diff --git a/app/vercel.json b/app/vercel.json deleted file mode 100644 index c141be88..00000000 --- a/app/vercel.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "functions": { - "pages/**/*.ts": { - "memory": 1024, - "maxDuration": 4 - }, - "pages/**/*.tsx": { - "memory": 1024, - "maxDuration": 4 - } - } -} \ No newline at end of file diff --git a/package.json b/package.json index 51ad731f..fbe5a165 100644 --- a/package.json +++ b/package.json @@ -20,17 +20,17 @@ "setup:env": "zx setup.zx.mjs" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.48.0", - "@typescript-eslint/parser": "^5.48.0", - "eslint": "^8.31.0", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", + "eslint": "^8.51.0", "eslint-config-next": "^13.1.1", "eslint-plugin-jsx-a11y": "^6.6.1", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-sort-imports-es6-autofix": "^0.6.0", - "prettier": "^2.8.1", - "turbo": "^1.9.4", + "prettier": "^3.0.3", + "turbo": "^1.10.15", "typescript": "^4.9.4", - "zx": "^7.1.1" + "zx": "^7.2.3" }, "engines": { "npm": ">=7.0.0", diff --git a/packages/bhapi/constants.ts b/packages/bhapi/constants.ts index 32b5a663..0f8575a5 100644 --- a/packages/bhapi/constants.ts +++ b/packages/bhapi/constants.ts @@ -12,7 +12,7 @@ export const rankedTierNames = [ "Diamond", ] -export type RankedTierName = typeof rankedTierNames[number] +export type RankedTierName = (typeof rankedTierNames)[number] export const rankedTiers = [ ["Diamond", 2000], @@ -46,9 +46,9 @@ export const rankedTiers = [ export const rankedTiersComplete = rankedTiers.map(([tier]) => tier) -export type RankedTier = typeof rankedTiersComplete[number] | "Valhallan" +export type RankedTier = (typeof rankedTiersComplete)[number] | "Valhallan" -const rankedRegionsValidators = [ +const rankedRegionsSchemas = [ z.literal("all"), z.literal("us-e"), z.literal("eu"), @@ -61,13 +61,29 @@ const rankedRegionsValidators = [ z.literal("me"), ] as const -export const rankedRegionValidator = z.union(rankedRegionsValidators) +export const rankedRegionSchema = z.union(rankedRegionsSchemas).catch("all") -export const rankedRegions = rankedRegionsValidators.map( +export const rankedRegions = rankedRegionsSchemas.map( (validator) => validator.value, ) -export type RankedRegion = z.infer +const powerRankedRegionsSchemas = [ + z.literal("na"), + z.literal("eu"), + z.literal("sa"), + z.literal("sea"), + z.literal("aus"), +] as const + +export const powerRankedRegionSchema = z + .union(powerRankedRegionsSchemas) + .catch("na") + +export const powerRankedRegions = powerRankedRegionsSchemas.map( + (validator) => validator.value, +) + +export type RankedRegion = z.infer export const weapons = [ "Grapple Hammer", @@ -86,8 +102,8 @@ export const weapons = [ "Battle Boots", ] as const -export type Weapon = typeof weapons[number] +export type Weapon = (typeof weapons)[number] export const clanRanks = ["Leader", "Officer", "Member", "Recruit"] as const -export type ClanRank = typeof clanRanks[number] +export type ClanRank = (typeof clanRanks)[number] diff --git a/packages/bhapi/index.ts b/packages/bhapi/index.ts index 10a5aeca..8b574f4b 100644 --- a/packages/bhapi/index.ts +++ b/packages/bhapi/index.ts @@ -5,7 +5,6 @@ import { rankings1v1Mock } from "./mocks/rankings1v1" import { rankings2v2Mock } from "./mocks/rankings2v2" import axios from "axios" import type { - Bracket, Clan, PlayerRanked, PlayerStats, @@ -18,6 +17,8 @@ const __DEV = process.env.NODE_ENV === "development" const BH_API_BASE = "https://api.brawlhalla.com" +// TODO: Validate responses with zod + const getBhApi = async ( path: string, params: Record = {}, @@ -35,44 +36,51 @@ export const getIdBySteamId = (steamId: string) => name: string }>("/search", { steamid: steamId }) -export const getRankings = async < - BracketType extends Bracket, - RankingType extends BracketType extends "1v1" ? Ranking1v1 : Ranking2v2, ->( - bracket: BracketType, +export const get1v1Rankings = async ( region: RankedRegion, - page: string | number, - name?: string, + page: number, + name = "", ) => { if (!__DEV) - return getBhApi( - `/rankings/${bracket}/${region}/${page}`, - { - name, - }, - ) - - switch (bracket) { - case "1v1": - return rankings1v1Mock.filter((r) => - r.name.toLowerCase().startsWith(name?.toLowerCase() || ""), - ) as RankingType[] - case "2v2": - return rankings2v2Mock as RankingType[] - default: - return [] - } + return getBhApi(`/rankings/1v1/${region}/${page}`, { + name, + }) + + return rankings1v1Mock.filter((r) => + r.name.toLowerCase().startsWith(name?.toLowerCase() || ""), + ) +} + +export const getRotatingRankings = async ( + region: RankedRegion, + page: number, + name = "", +) => { + if (!__DEV) + return getBhApi(`/rankings/rotating/${region}/${page}`, { + name, + }) + + return rankings1v1Mock.filter((r) => + r.name.toLowerCase().startsWith(name?.toLowerCase() || ""), + ) +} + +export const get2v2Rankings = async (region: RankedRegion, page: number) => { + if (!__DEV) return getBhApi(`/rankings/2v2/${region}/${page}`) + + return rankings2v2Mock } -export const getPlayerStats = async (playerId: number) => +export const getPlayerStats = async (playerId: string) => __DEV ? playerStatsMock : getBhApi(`/player/${playerId}/stats`) -export const getPlayerRanked = async (playerId: number) => +export const getPlayerRanked = async (playerId: string) => __DEV ? playerRankedMock : getBhApi(`/player/${playerId}/ranked`) -export const getClan = async (clanId: number) => +export const getClan = async (clanId: string) => __DEV ? clanMock : getBhApi(`/clan/${clanId}`) export const getAllLegends = async () => getBhApi("/legend/all") diff --git a/packages/bhapi/legends.ts b/packages/bhapi/legends.ts index d9e89f77..8a1a3725 100644 --- a/packages/bhapi/legends.ts +++ b/packages/bhapi/legends.ts @@ -699,6 +699,18 @@ export const legends: Legend[] = [ defense: "3", speed: "9", }, + { + legend_id: 17, + legend_name_key: "redraptor", + bio_name: "Red Raptor", + bio_aka: "The Last Sentai", + weapon_one: "Battle Boots", + weapon_two: "Orb", + strength: "6", + dexterity: "6", + defense: "4", + speed: "6", + }, ] export const legendsMap = arrayToMap(legends, "legend_id") @@ -732,6 +744,16 @@ export const getFullLegends = ( : Object.values(fullLegends).filter((legend) => legend.stats?.games) } +export const defaultLegendAccumulativeData = { + matchtime: 0, + kos: 0, + falls: 0, + suicides: 0, + teamkos: 0, + damageDealt: 0, + damageTaken: 0, +} + export const getLegendsAccumulativeData = (fullLegends: FullLegend[]) => { return fullLegends.reduce<{ matchtime: number @@ -739,34 +761,21 @@ export const getLegendsAccumulativeData = (fullLegends: FullLegend[]) => { falls: number suicides: number teamkos: number - damagedealt: number - damagetaken: number - }>( - (acc, legend) => { - if (!legend.stats) return acc + damageDealt: number + damageTaken: number + }>((acc, legend) => { + if (!legend.stats) return acc - return { - matchtime: acc.matchtime + legend.stats.matchtime, - kos: acc.kos + legend.stats.kos, - falls: acc.falls + legend.stats.falls, - suicides: acc.suicides + legend.stats.suicides, - teamkos: acc.teamkos + legend.stats.teamkos, - damagedealt: - acc.damagedealt + parseInt(legend.stats.damagedealt), - damagetaken: - acc.damagetaken + parseInt(legend.stats.damagetaken), - } - }, - { - matchtime: 0, - kos: 0, - falls: 0, - suicides: 0, - teamkos: 0, - damagedealt: 0, - damagetaken: 0, - }, - ) + return { + matchtime: acc.matchtime + legend.stats.matchtime, + kos: acc.kos + legend.stats.kos, + falls: acc.falls + legend.stats.falls, + suicides: acc.suicides + legend.stats.suicides, + teamkos: acc.teamkos + legend.stats.teamkos, + damageDealt: acc.damageDealt + parseInt(legend.stats.damagedealt), + damageTaken: acc.damageTaken + parseInt(legend.stats.damagetaken), + } + }, defaultLegendAccumulativeData) } export type FullWeapon = { @@ -775,18 +784,21 @@ export type FullWeapon = { } export const getFullWeapons = (legends: FullLegend[]): FullWeapon[] => { - const weaponsMap = legends.reduce((acc, legend) => { - const legendData = legendsMap[legend.legend_id] - acc[legendData.weapon_one] = [ - ...(acc[legendData.weapon_one] ?? []), - legend, - ] - acc[legendData.weapon_two] = [ - ...(acc[legendData.weapon_two] ?? []), - legend, - ] - return acc - }, {} as Record) + const weaponsMap = legends.reduce( + (acc, legend) => { + const legendData = legendsMap[legend.legend_id] + acc[legendData.weapon_one] = [ + ...(acc[legendData.weapon_one] ?? []), + legend, + ] + acc[legendData.weapon_two] = [ + ...(acc[legendData.weapon_two] ?? []), + legend, + ] + return acc + }, + {} as Record, + ) const weapons = Object.entries(weaponsMap).map(([weapon, legends]) => ({ weapon, @@ -796,6 +808,22 @@ export const getFullWeapons = (legends: FullLegend[]): FullWeapon[] => { return weapons } +export const defaultWeaponlessData = { + unarmed: { + kos: 0, + damageDealt: 0, + matchtime: 0, + }, + gadgets: { + kos: 0, + damageDealt: 0, + }, + throws: { + kos: 0, + damageDealt: 0, + }, +} + export const getWeaponlessData = (legends: FullLegend[]) => { return legends.reduce( (acc, legend) => ({ @@ -825,21 +853,7 @@ export const getWeaponlessData = (legends: FullLegend[]) => { parseInt(legend.stats?.damagethrownitem ?? "0"), }, }), - { - unarmed: { - kos: 0, - damageDealt: 0, - matchtime: 0, - }, - gadgets: { - kos: 0, - damageDealt: 0, - }, - throws: { - kos: 0, - damageDealt: 0, - }, - }, + defaultWeaponlessData, ) } diff --git a/packages/bhapi/package.json b/packages/bhapi/package.json index 4b7c6c9f..2855239c 100644 --- a/packages/bhapi/package.json +++ b/packages/bhapi/package.json @@ -2,7 +2,7 @@ "name": "bhapi", "version": "0.0.0", "devDependencies": { - "@types/node": "^18.11.18", + "@types/node": "^20.8.3", "tsconfig": "workspace:*", "typescript": "^4.9.4" }, @@ -14,6 +14,6 @@ "common": "workspace:*", "react": "^18.2.0", "react-dom": "^18.2.0", - "zod": "^3.20.2" + "zod": "^3.22.4" } } \ No newline at end of file diff --git a/packages/common/helpers/isDefined.ts b/packages/common/helpers/isDefined.ts new file mode 100644 index 00000000..7fde1345 --- /dev/null +++ b/packages/common/helpers/isDefined.ts @@ -0,0 +1 @@ +export const isDefined = (obj: T | null): obj is T => !!obj diff --git a/packages/common/hooks/useDebounce.ts b/packages/common/hooks/useDebounce.ts new file mode 100644 index 00000000..0ddbe555 --- /dev/null +++ b/packages/common/hooks/useDebounce.ts @@ -0,0 +1,15 @@ +import { useEffect, useState } from "react" + +export function useDebounce(value: T, delay?: number): T { + const [debouncedValue, setDebouncedValue] = useState(value) + + useEffect(() => { + const timer = setTimeout(() => setDebouncedValue(value), delay || 500) + + return () => { + clearTimeout(timer) + } + }, [value, delay]) + + return debouncedValue +} diff --git a/packages/common/hooks/useWindowScroll.ts b/packages/common/hooks/useWindowScroll.ts index e2bdfa44..fce1992c 100644 --- a/packages/common/hooks/useWindowScroll.ts +++ b/packages/common/hooks/useWindowScroll.ts @@ -1 +1,3 @@ +"use client" + export { useWindowScroll } from "react-use" diff --git a/packages/common/package.json b/packages/common/package.json index c0301719..baf2668f 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,8 +2,8 @@ "name": "common", "version": "0.0.0", "devDependencies": { - "@types/node": "^18.11.18", - "@types/react": "^18.0.26", + "@types/node": "^20.8.3", + "@types/react": "^18.2.25", "tsconfig": "workspace:*", "typescript": "^4.9.4" }, @@ -12,11 +12,11 @@ }, "dependencies": { "classnames": "^2.3.2", - "dayjs": "^1.11.7", - "next": "13.1.2", + "dayjs": "^1.11.10", + "next": "13.5.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-use": "^17.4.0", - "zod": "^3.20.2" + "zod": "^3.22.4" } } \ No newline at end of file diff --git a/packages/db/package.json b/packages/db/package.json index 1cca87b1..415bcd6e 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -22,14 +22,14 @@ "prisma": "prisma" }, "devDependencies": { - "@types/react": "^18.0.26", + "@types/react": "^18.2.25", "discord-api-types": "^0.37.25", - "prisma": "^4.8.0", + "prisma": "^5.4.1", "tsconfig": "workspace:*", "typescript": "^4.9.4" }, "dependencies": { - "@prisma/client": "^4.8.0", + "@prisma/client": "^5.4.1", "@supabase/supabase-js": "^1.35.7", "axios": "1.1.3", "logger": "workspace:*", diff --git a/packages/dl-roster-images/package.json b/packages/dl-roster-images/package.json index 86954ab6..8e2d9ee2 100644 --- a/packages/dl-roster-images/package.json +++ b/packages/dl-roster-images/package.json @@ -15,7 +15,7 @@ "logger": "workspace:*" }, "devDependencies": { - "@types/node": "^18.11.18", + "@types/node": "^20.8.3", "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", "tsconfig": "workspace:*", diff --git a/packages/logger/package.json b/packages/logger/package.json index b499b160..78a01cc0 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "main": "index.ts", "devDependencies": { - "@types/node": "^18.11.18", + "@types/node": "^20.8.3", "tsconfig": "workspace:*", "typescript": "^4.9.4" }, diff --git a/packages/server/mutations/updateDBPlayerData.ts b/packages/server/mutations/updateDBPlayerData.ts index df67280c..a8c586eb 100644 --- a/packages/server/mutations/updateDBPlayerData.ts +++ b/packages/server/mutations/updateDBPlayerData.ts @@ -39,7 +39,7 @@ export const sortablePlayerProps = [ "damageGadgets", ] as const satisfies readonly (keyof BHPlayerData)[] -export type SortablePlayerProp = typeof sortablePlayerProps[number] +export type SortablePlayerProp = (typeof sortablePlayerProps)[number] export const updateDBPlayerData = async ( playerStats: PlayerStats, diff --git a/packages/server/package.json b/packages/server/package.json index 7e68c806..f64295f0 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -5,20 +5,20 @@ "ts:check": "tsc --noEmit" }, "dependencies": { - "@tanstack/react-query": "^4.22.0", - "@trpc/client": "10.9.0", - "@trpc/next": "10.9.0", - "@trpc/react-query": "10.9.0", - "@trpc/server": "10.9.0", + "@tanstack/react-query": "^4.36.1", + "@trpc/client": "10.40.0", + "@trpc/next": "10.40.0", + "@trpc/react-query": "10.40.0", + "@trpc/server": "10.40.0", "bhapi": "workspace:*", "common": "workspace:*", "db": "workspace:*", "logger": "workspace:*", "web-parser": "workspace:*", - "zod": "^3.20.2" + "zod": "^3.22.4" }, "devDependencies": { - "@types/node": "^18.11.18", + "@types/node": "^20.8.3", "tsconfig": "workspace:*" } } \ No newline at end of file diff --git a/packages/server/router/stats/getRankings.ts b/packages/server/router/stats/getRankings.ts index 5ca0cb47..845d3ff4 100644 --- a/packages/server/router/stats/getRankings.ts +++ b/packages/server/router/stats/getRankings.ts @@ -2,14 +2,14 @@ import { getRankings } from "bhapi" import { logInfo } from "logger" import { numericLiteralValidator } from "common/helpers/validators" import { publicProcedure } from "../../trpc" -import { rankedRegionValidator } from "bhapi/constants" +import { rankedRegionSchema } from "bhapi/constants" import { withTimeLog } from "../../helpers/withTimeLog" import { z } from "zod" export const get1v1Rankings = publicProcedure // .input( z.object({ - region: rankedRegionValidator, + region: rankedRegionSchema, page: numericLiteralValidator, name: z.optional(z.string()), }), @@ -55,7 +55,7 @@ export const get1v1Rankings = publicProcedure // export const get2v2Rankings = publicProcedure // .input( z.object({ - region: rankedRegionValidator, + region: rankedRegionSchema, page: numericLiteralValidator, }), ) diff --git a/packages/ui/base/AnimatedLogo.tsx b/packages/ui/base/AnimatedLogo.tsx index ad5cc383..fc4f655a 100644 --- a/packages/ui/base/AnimatedLogo.tsx +++ b/packages/ui/base/AnimatedLogo.tsx @@ -1,3 +1,5 @@ +"use client" + import { keyframes, styled } from "../theme" const centerAnimation = keyframes({ diff --git a/packages/ui/base/Pagination.tsx b/packages/ui/base/Pagination.tsx index 81cb5082..903a30a6 100644 --- a/packages/ui/base/Pagination.tsx +++ b/packages/ui/base/Pagination.tsx @@ -4,26 +4,29 @@ import { HiChevronRight, } from "react-icons/hi" import { Paginator } from "./Paginator" +import { isDefined } from "common/helpers/isDefined" type PaginationProps = { firstPage?: number lastPage?: number currentPage: number - getPageHref: (page: string) => string + baseHref: string span?: number className?: string } export const Pagination = ({ currentPage, - getPageHref, + baseHref, firstPage = 0, span = 1, className, }: PaginationProps) => { + const getPageHref = (page: string) => `${baseHref}/${page}` + const pages = [ { - page: firstPage.toString(), + id: firstPage.toString(), label: ( {currentPage !== firstPage && ( @@ -32,6 +35,7 @@ export const Pagination = ({ top ), + href: getPageHref(firstPage.toString()), }, ...Array.from({ length: 2 * span + 1 }, (_, i) => { const page = currentPage + i - span @@ -54,15 +58,16 @@ export const Pagination = ({ ) return { - page: page.toString(), + id: page.toString(), label, + href: getPageHref(page.toString()), } }), - ] + ].filter(isDefined) + return ( diff --git a/packages/ui/base/Paginator.tsx b/packages/ui/base/Paginator.tsx index ba62b2d9..4feb4728 100644 --- a/packages/ui/base/Paginator.tsx +++ b/packages/ui/base/Paginator.tsx @@ -1,30 +1,43 @@ +"use client" + import { AppLink } from "./AppLink" +import { type ReactNode } from "react" import { Select } from "./Select" import { cn } from "common/helpers/classnames" -import { useRouter } from "next/router" -import type { ReactNode } from "react" +import { usePathname, useRouter } from "next/navigation" export type PaginatorPage = { - page: string + id: string label?: ReactNode + href: string + exact?: boolean } type PaginatorProps = { - pages: (PaginatorPage | null)[] - currentPage: string - getPageHref: (page: string) => string + pages: PaginatorPage[] className?: string responsive?: boolean + currentPage?: string } export const Paginator = ({ pages, - currentPage, - getPageHref, className, responsive, + currentPage: page, }: PaginatorProps) => { const router = useRouter() + const pathname = usePathname() + + if (pages.length === 0) { + return null + } + + const currentPage = + page ?? + pages.find(({ href, exact }) => + exact ? href === pathname : pathname.startsWith(href), + )?.id return ( <> @@ -34,15 +47,15 @@ export const Paginator = ({ hidden: !responsive, })} onChange={(page) => { - router.push(getPageHref(page)) + const href = pages.find(({ id }) => id === page)?.href + if (!href) return + + router.push(href) }} - value={currentPage} - options={pages.map((page) => ({ - label: - typeof page?.label === "string" - ? page.label - : page?.page ?? "", - value: page?.page ?? "", + value={currentPage || pages[0].id} + options={pages.map(({ id, label }) => ({ + value: id, + label: (typeof label === "string" && label) || id, }))} />
- {pages.map((pageData) => { - if (!pageData) return null - - const { page, label } = pageData - + {pages.map(({ id, label, href }) => { return ( - {label ?? page} + {label ?? id} ) })} diff --git a/packages/ui/base/Progress.tsx b/packages/ui/base/Progress.tsx index 652379a7..7325f783 100644 --- a/packages/ui/base/Progress.tsx +++ b/packages/ui/base/Progress.tsx @@ -1,3 +1,5 @@ +"use client" + import { Indicator as ProgressIndicator, Root } from "@radix-ui/react-progress" type ProgressProps = { diff --git a/packages/ui/base/Select.tsx b/packages/ui/base/Select.tsx index 404044e3..d4e70888 100644 --- a/packages/ui/base/Select.tsx +++ b/packages/ui/base/Select.tsx @@ -18,6 +18,7 @@ type SelectProps = { label?: string } +// TODO: switch Select to shadcn ui export const Select = ({ onChange, options, diff --git a/packages/ui/base/Tooltip.tsx b/packages/ui/base/Tooltip.tsx index 80653f34..da6e5952 100644 --- a/packages/ui/base/Tooltip.tsx +++ b/packages/ui/base/Tooltip.tsx @@ -1,3 +1,5 @@ +"use client" + import * as RadixTooltip from "@radix-ui/react-tooltip" import { cn } from "common/helpers/classnames" import type { ReactNode } from "react" diff --git a/packages/ui/icons.tsx b/packages/ui/icons.tsx index ab5ef596..70515bdc 100644 --- a/packages/ui/icons.tsx +++ b/packages/ui/icons.tsx @@ -1,8 +1,12 @@ +import { FiTarget } from "react-icons/fi" import { HiArrowSmRight, + HiChartBar, HiChevronDoubleUp, HiChevronDown, HiChevronUp, + HiFire, + HiHand, HiLightningBolt, HiMenu, HiOutlineInformationCircle, @@ -12,7 +16,9 @@ import { HiSortAscending, HiSortDescending, HiUser, + HiUserAdd, HiUserGroup, + HiUserRemove, HiUsers, HiX, } from "react-icons/hi" @@ -37,6 +43,14 @@ export const UserIcon = HiUser export const Rankings1v1Icon = HiChevronDoubleUp export const Rankings2v2Icon = HiUsers export const RankingsPowerIcon = HiLightningBolt +export const GeneralStatsIcon = HiChartBar +export const UnarmedIcon = HiHand +export const WeaponThrowsIcon = FiTarget +export const GadgetsIcon = HiFire + +export const AddFavoriteIcon = HiUserAdd +export const RemoveFavoriteIcon = HiUserRemove + // export const FavoritesIcon = export const ClanIcon = HiUserGroup diff --git a/packages/ui/package.json b/packages/ui/package.json index 3d802473..1f6dca33 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -4,38 +4,38 @@ "main": "./index.tsx", "types": "./index.tsx", "devDependencies": { - "@types/nprogress": "^0.2.0", - "@types/react": "^18.0.26", - "@types/react-dom": "^18.0.10", - "@types/react-table": "^7.7.13", - "autoprefixer": "^10.4.13", - "postcss": "^8.4.20", - "tailwindcss": "^3.2.4", + "@types/nprogress": "^0.2.1", + "@types/react": "^18.2.25", + "@types/react-dom": "^18.2.11", + "@types/react-table": "^7.7.16", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.31", + "tailwindcss": "^3.3.3", "tsconfig": "workspace:*", "typescript": "^4.9.4" }, "dependencies": { - "@radix-ui/colors": "^0.1.8", - "@radix-ui/react-collapsible": "^1.0.1", - "@radix-ui/react-dialog": "^1.0.2", - "@radix-ui/react-dropdown-menu": "^2.0.1", - "@radix-ui/react-navigation-menu": "^1.1.1", - "@radix-ui/react-popover": "^1.0.2", - "@radix-ui/react-progress": "^1.0.1", - "@radix-ui/react-tooltip": "^1.0.2", + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-collapsible": "^1.0.3", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-navigation-menu": "^1.1.4", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-progress": "^1.0.3", + "@radix-ui/react-tooltip": "^1.0.7", "@stitches/react": "^1.2.8", "bhapi": "workspace:*", "common": "workspace:*", "db": "workspace:*", "kbar": "0.1.0-beta.39", "logger": "workspace:*", - "next": "13.1.2", + "next": "13.5.4", "nprogress": "^0.2.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^4.7.1", "react-phone-input-2": "^2.15.1", - "react-select": "^5.7.0", + "react-select": "^5.7.7", "react-table": "^7.8.0" }, "scripts": { diff --git a/packages/ui/theme/index.ts b/packages/ui/theme/index.ts index ffb636c8..05d85b80 100644 --- a/packages/ui/theme/index.ts +++ b/packages/ui/theme/index.ts @@ -17,7 +17,7 @@ export const { }) const setColor = - (prop: string) => (color: keyof typeof theme["colors"], state?: string) => + (prop: string) => (color: keyof (typeof theme)["colors"], state?: string) => css( state ? { [state]: { [prop]: theme.colors[color] } } diff --git a/packages/web-parser/common/dev.ts b/packages/web-parser/common/dev.ts new file mode 100644 index 00000000..08f2f129 --- /dev/null +++ b/packages/web-parser/common/dev.ts @@ -0,0 +1,52 @@ +import { getBrawlhallaArticle, getBrawlhallaArticles } from "./index" +import { legends } from "bhapi/legends" +import { load } from "cheerio" +import { logInfo } from "logger" +import type { BrawlhallaArticle } from "./index" +import type { Legend } from "bhapi/types" + +const findWeeklyRotation = ({ content }: BrawlhallaArticle) => { + const $ = load(content) + + const legendRotationSubtitle = $("p") + .filter((_, el) => + $(el).text().includes("free-to-play Legend rotation"), + ) + .first() + + if (!legendRotationSubtitle) { + logInfo("No legend rotation subtitle found") + return [] + } + + const rawLegendsNames = legendRotationSubtitle + .next("ul") + .find("li") + .map((_, el) => $(el).text()) + .get() + .map((s) => s.slice(0, s.indexOf(" – ")).trim()) + + const legendsNames = rawLegendsNames.filter((name) => + legends.find((l) => l.bio_name === name), + ) as unknown as Legend[] + + logInfo("Found legends names", legendsNames) + return legendsNames +} + +const main = async () => { + const [article] = await getBrawlhallaArticles({ + category: "weekly-rotation", + first: 1, + }).then(({ posts: { nodes: posts } }) => posts) + + if (!article) { + logInfo("No article found") + return + } + + const post = await getBrawlhallaArticle(article.slug) + findWeeklyRotation(post) +} + +main() diff --git a/packages/web-parser/common/index.ts b/packages/web-parser/common/index.ts new file mode 100644 index 00000000..a3a43092 --- /dev/null +++ b/packages/web-parser/common/index.ts @@ -0,0 +1,262 @@ +import { legends } from "bhapi/legends" +import { load as loadHtml } from "cheerio" +import axios from "axios" + +const BRAWLHALLA_GRAPHQL_API_URL = "https://cms.brawlhalla.com/graphql" +const BRAWLHALLA_WP_API_URL = "https://cms.brawlhalla.com/wp-json/wp/v2" + +const BRAWLHALLA_GRAPHQL_API_HEADERS = { + "Content-Type": "application/json", +} + +export const getBrawlhallaGraphQLAPI = async ( + query: string, + variables?: Record, +): Promise => { + const { data } = await axios.post( + BRAWLHALLA_GRAPHQL_API_URL, + { + query, + variables, + }, + { + headers: BRAWLHALLA_GRAPHQL_API_HEADERS, + }, + ) + + return data +} + +export type BrawlhallaArticleVariables = { + first: number | null + category: string | null + after: number | null +} + +const defaultBrawlhallaArticleVariables: BrawlhallaArticleVariables = { + first: 6, + category: null, + after: null, +} + +export type BHArticle = Awaited< + ReturnType +>[number] + +export const getBrawlhallaArticles = async ( + variables?: Partial, +) => { + const query = ` + query ($category: String, $after: String, $first: Int = 6) { + posts(first: $first, after: $after, where: {categoryName: $category}) { + pageInfo { + endCursor + } + nodes { + title + slug + dateGmt + excerpt + author { + node { + databaseId + name + } + } + categories { + nodes { + name + slug + } + } + featuredImage { + node { + sourceUrl + mediaDetails { + height + width + sizes { + name + mimeType + sourceUrl + width + height + } + } + } + } + } + } + }` + + const { data } = await getBrawlhallaGraphQLAPI<{ + data: { + posts: { + nodes: { + title: string + slug: string + dateGmt: string + excerpt: string + categories: { + nodes: { + name: string + slug: string + }[] + } + featuredImage: { + node: { + sourceUrl: string + mediaDetails: { + height: number + width: number + sizes: { + name: string + mimeType: string + sourceUrl: string + width: number + height: number + }[] + } + } + } + }[] + pageInfo: { + endCursor: string + } + } + } + }>(query, { + ...defaultBrawlhallaArticleVariables, + ...variables, + }) + + return data.posts.nodes.map((node) => ({ + title: node.title, + slug: node.slug, + dateGmt: node.dateGmt, + excerpt: node.excerpt, + categories: node.categories.nodes.map(({ name, slug }) => ({ + name, + slug, + })), + featuredImage: node.featuredImage.node, + })) +} + +export const getWeeklyRotation = async () => { + const latestWeeklyRotationArticle = await getBrawlhallaArticles({ + category: "weekly-rotation", + first: 1, + }) + + if (latestWeeklyRotationArticle.length < 1) { + return [] + } + + const { slug } = latestWeeklyRotationArticle[0] + + const { content } = await getBrawlhallaArticle(slug) + + if (!content) return [] + + const $ = loadHtml(content) + + // Find the paragraph containing the required "free-to-play" phrase + const foundParagraph = $("p") + .filter((index, element) => { + const paragraphText = $(element).text().toLowerCase() + return paragraphText.includes("free-to-play legend rotation") + }) + .first() + + if (!foundParagraph.length) { + return [] + } + // Select all list items within the
    following the found paragraph + const listItems = foundParagraph.next("ul").find("li") + + // Extract the legend names + const weeklyRotation = listItems + .map((index, element) => { + const text = $(element).text() + const legendName = text.split(" – ")[0] // Extracts the name before the hyphen + + const legend = legends.find( + (legend) => legend.bio_name === legendName, + ) + + return legend + }) + .get() + + return weeklyRotation +} + +export const getBrawlhallaArticle = async (slug: string) => { + const url = `${BRAWLHALLA_WP_API_URL}/posts?_embed&slug=${slug}` + + const { data } = await axios.get< + { + id: number + date: string + date_gmt: string + guid: { + rendered: string + } + modified: string + modified_gmt: string + slug: string + status: string + type: string + link: string + title: { + rendered: string + } + content: { + rendered: string + protected: boolean + } + yoast_head_json: { + title: string + canonical: string + og_title: string + og_description: string + og_url: string + og_site_name: string + article_published_time: string + article_modified_time: string + og_image: { + width: number + height: number + url: string + type: string + }[] + } + _embedded: { + "wp:term": [ + { + id: number + name: string + slug: string + }[], + ] + } + }[] + >(url) + + const [post] = data + + return { + title: post.yoast_head_json.title, + slug: post.slug, + dateGmt: post.date_gmt, + description: post.yoast_head_json.og_description, + content: post.content.rendered, + tags: post._embedded["wp:term"][0].map(({ name, slug }) => ({ + name, + slug, + })), + } +} + +export type BrawlhallaArticle = Awaited> diff --git a/packages/web-parser/package.json b/packages/web-parser/package.json index d1045ae5..184a2afb 100644 --- a/packages/web-parser/package.json +++ b/packages/web-parser/package.json @@ -7,6 +7,7 @@ "parse-bh-articles:dev": "tsnd --respawn ./bh-articles/dev.ts", "parse-pr:dev": "tsnd --respawn ./power-rankings/dev.ts", "parse-weekly-rot:dev": "tsnd --respawn ./weekly-rotation/dev.ts", + "new-api:dev": "tsnd --respawn ./common/dev.ts", "ts:check": "tsc --noEmit" }, "dependencies": { @@ -14,10 +15,10 @@ "bhapi": "workspace:*", "cheerio": "1.0.0-rc.12", "logger": "workspace:*", - "zod": "^3.20.2" + "zod": "^3.22.4" }, "devDependencies": { - "@types/node": "^18.11.18", + "@types/node": "^20.8.3", "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", "tsconfig": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9dfb5b04..7410d3f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,42 +1,46 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + importers: .: devDependencies: '@typescript-eslint/eslint-plugin': - specifier: ^5.48.0 - version: 5.48.0(@typescript-eslint/parser@5.48.0)(eslint@8.31.0)(typescript@4.9.4) + specifier: ^6.7.4 + version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@4.9.4) '@typescript-eslint/parser': - specifier: ^5.48.0 - version: 5.48.0(eslint@8.31.0)(typescript@4.9.4) + specifier: ^6.7.4 + version: 6.7.4(eslint@8.51.0)(typescript@4.9.4) eslint: - specifier: ^8.31.0 - version: 8.31.0 + specifier: ^8.51.0 + version: 8.51.0 eslint-config-next: specifier: ^13.1.1 - version: 13.1.1(eslint@8.31.0)(typescript@4.9.4) + version: 13.1.1(eslint@8.51.0)(typescript@4.9.4) eslint-plugin-jsx-a11y: specifier: ^6.6.1 - version: 6.6.1(eslint@8.31.0) + version: 6.6.1(eslint@8.51.0) eslint-plugin-prettier: - specifier: ^4.2.1 - version: 4.2.1(eslint@8.31.0)(prettier@2.8.1) + specifier: ^5.0.0 + version: 5.0.0(eslint@8.51.0)(prettier@3.0.3) eslint-plugin-sort-imports-es6-autofix: specifier: ^0.6.0 - version: 0.6.0(eslint@8.31.0) + version: 0.6.0(eslint@8.51.0) prettier: - specifier: ^2.8.1 - version: 2.8.1 + specifier: ^3.0.3 + version: 3.0.3 turbo: - specifier: ^1.9.4 - version: 1.9.4 + specifier: ^1.10.15 + version: 1.10.15 typescript: specifier: ^4.9.4 version: 4.9.4 zx: - specifier: ^7.1.1 - version: 7.1.1 + specifier: ^7.2.3 + version: 7.2.3 app: dependencies: @@ -44,29 +48,29 @@ importers: specifier: ^4.5.13 version: 4.5.13 '@radix-ui/react-collapsible': - specifier: ^1.0.1 - version: 1.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tabs': - specifier: ^1.0.1 - version: 1.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@stitches/react': specifier: ^1.2.8 version: 1.2.8(react@18.2.0) '@tanstack/react-query': - specifier: ^4.22.0 - version: 4.22.0(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.36.1 + version: 4.36.1(react-dom@18.2.0)(react@18.2.0) '@trpc/client': - specifier: 10.9.0 - version: 10.9.0(@trpc/server@10.9.0) + specifier: 10.40.0 + version: 10.40.0(@trpc/server@10.40.0) '@trpc/next': - specifier: 10.9.0 - version: 10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/react-query@10.9.0)(@trpc/server@10.9.0)(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) + specifier: 10.40.0 + version: 10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/react-query@10.40.0)(@trpc/server@10.40.0)(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) '@trpc/react-query': - specifier: 10.9.0 - version: 10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/server@10.9.0)(react-dom@18.2.0)(react@18.2.0) + specifier: 10.40.0 + version: 10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/server@10.40.0)(react-dom@18.2.0)(react@18.2.0) '@trpc/server': - specifier: 10.9.0 - version: 10.9.0 + specifier: 10.40.0 + version: 10.40.0 bhapi: specifier: workspace:* version: link:../packages/bhapi @@ -81,16 +85,16 @@ importers: version: 0.1.13 kbar: specifier: 0.1.0-beta.39 - version: 0.1.0-beta.39(react-dom@18.2.0)(react@18.2.0) + version: 0.1.0-beta.39(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) logger: specifier: workspace:* version: link:../packages/logger next: - specifier: 13.0.6 - version: 13.0.6(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) next-sitemap: - specifier: ^3.1.43 - version: 3.1.44(@next/env@13.1.2)(next@13.0.6) + specifier: ^4.2.3 + version: 4.2.3(next@13.5.4) react: specifier: ^18.2.0 version: 18.2.0 @@ -98,8 +102,8 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-hot-toast: - specifier: ^2.4.0 - version: 2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.4.1 + version: 2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) react-icons: specifier: ^4.7.1 version: 4.7.1(react@18.2.0) @@ -113,30 +117,30 @@ importers: specifier: workspace:* version: link:../packages/web-parser zod: - specifier: ^3.20.2 - version: 3.20.2 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@tanstack/query-core': - specifier: ^4.22.0 - version: 4.22.0 + specifier: ^4.36.1 + version: 4.36.1 '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 '@types/react': - specifier: ^18.0.26 - version: 18.0.26 + specifier: ^18.2.25 + version: 18.2.25 autoprefixer: - specifier: ^10.4.13 - version: 10.4.13(postcss@8.4.20) + specifier: ^10.4.16 + version: 10.4.16(postcss@8.4.31) next-transpile-modules: - specifier: 10.0.0 - version: 10.0.0 + specifier: 10.0.1 + version: 10.0.1 postcss: - specifier: ^8.4.20 - version: 8.4.20 + specifier: ^8.4.31 + version: 8.4.31 tailwindcss: - specifier: ^3.2.4 - version: 3.2.4(postcss@8.4.20) + specifier: ^3.3.3 + version: 3.3.3 tsconfig: specifier: workspace:* version: link:../packages/tsconfig @@ -144,6 +148,160 @@ importers: specifier: ^4.9.4 version: 4.9.4 + neue: + dependencies: + '@radix-ui/react-collapsible': + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slider': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@tanstack/react-query': + specifier: ^4.35.7 + version: 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': + specifier: ^10.40.0 + version: 10.40.0(@trpc/server@10.40.0) + '@trpc/react-query': + specifier: ^10.40.0 + version: 10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/server@10.40.0)(react-dom@18.2.0)(react@18.2.0) + '@trpc/server': + specifier: ^10.40.0 + version: 10.40.0 + '@types/node': + specifier: 20.8.3 + version: 20.8.3 + '@types/react': + specifier: 18.2.25 + version: 18.2.25 + '@types/react-dom': + specifier: 18.2.11 + version: 18.2.11 + autoprefixer: + specifier: 10.4.16 + version: 10.4.16(postcss@8.4.31) + bhapi: + specifier: workspace:* + version: link:../packages/bhapi + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.0.0 + version: 2.0.0 + common: + specifier: workspace:* + version: link:../packages/common + db: + specifier: workspace:* + version: link:../packages/db + drizzle-orm: + specifier: ^0.28.6 + version: 0.28.6(@types/pg@8.10.3)(pg@8.11.3) + drizzle-zod: + specifier: ^0.5.1 + version: 0.5.1(drizzle-orm@0.28.6)(zod@3.22.4) + eslint: + specifier: 8.51.0 + version: 8.51.0 + eslint-config-next: + specifier: 13.5.4 + version: 13.5.4(eslint@8.51.0)(typescript@5.2.2) + immer: + specifier: ^10.0.3 + version: 10.0.3 + kbar: + specifier: 0.1.0-beta.39 + version: 0.1.0-beta.39(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + logger: + specifier: workspace:* + version: link:../packages/logger + lucide-react: + specifier: ^0.284.0 + version: 0.284.0(react@18.2.0) + next: + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) + pg: + specifier: ^8.11.3 + version: 8.11.3 + postcss: + specifier: 8.4.31 + version: 8.4.31 + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + react-hot-toast: + specifier: ^2.4.1 + version: 2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) + react-icons: + specifier: ^4.7.1 + version: 4.7.1(react@18.2.0) + react-youtube: + specifier: ^10.1.0 + version: 10.1.0(react@18.2.0) + superjson: + specifier: ^1.13.3 + version: 1.13.3 + tailwind-merge: + specifier: ^1.14.0 + version: 1.14.0 + tailwindcss: + specifier: 3.3.3 + version: 3.3.3 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.3.3) + typescript: + specifier: 5.2.2 + version: 5.2.2 + ui: + specifier: workspace:* + version: link:../packages/ui + uuid: + specifier: ^9.0.1 + version: 9.0.1 + web-parser: + specifier: workspace:* + version: link:../packages/web-parser + zod: + specifier: ^3.22.4 + version: 3.22.4 + zustand: + specifier: ^4.4.3 + version: 4.4.3(@types/react@18.2.25)(immer@10.0.3)(react@18.2.0) + devDependencies: + '@types/pg': + specifier: ^8.10.3 + version: 8.10.3 + '@types/uuid': + specifier: ^9.0.5 + version: 9.0.5 + '@types/youtube-player': + specifier: ^5.5.8 + version: 5.5.8 + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.4 + version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@5.2.2) + drizzle-kit: + specifier: ^0.19.13 + version: 0.19.13 + eslint-plugin-prettier: + specifier: ^5.0.0 + version: 5.0.0(eslint@8.51.0)(prettier@3.0.3) + prettier: + specifier: ^3.0.3 + version: 3.0.3 + tsx: + specifier: ^3.13.0 + version: 3.13.0 + packages/bhapi: dependencies: axios: @@ -159,12 +317,12 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) zod: - specifier: ^3.20.2 - version: 3.20.2 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -178,11 +336,11 @@ importers: specifier: ^2.3.2 version: 2.3.2 dayjs: - specifier: ^1.11.7 - version: 1.11.7 + specifier: ^1.11.10 + version: 1.11.10 next: - specifier: 13.1.2 - version: 13.1.2(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -193,15 +351,15 @@ importers: specifier: ^17.4.0 version: 17.4.0(react-dom@18.2.0)(react@18.2.0) zod: - specifier: ^3.20.2 - version: 3.20.2 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 '@types/react': - specifier: ^18.0.26 - version: 18.0.26 + specifier: ^18.2.25 + version: 18.2.25 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -212,8 +370,8 @@ importers: packages/db: dependencies: '@prisma/client': - specifier: ^4.8.0 - version: 4.8.0(prisma@4.8.0) + specifier: ^5.4.1 + version: 5.4.1(prisma@5.4.1) '@supabase/supabase-js': specifier: ^1.35.7 version: 1.35.7 @@ -228,14 +386,14 @@ importers: version: 18.2.0 devDependencies: '@types/react': - specifier: ^18.0.26 - version: 18.0.26 + specifier: ^18.2.25 + version: 18.2.25 discord-api-types: specifier: ^0.37.25 version: 0.37.25 prisma: - specifier: ^4.8.0 - version: 4.8.0 + specifier: ^5.4.1 + version: 5.4.1 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -259,14 +417,14 @@ importers: version: link:../logger devDependencies: '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.11.18)(typescript@4.9.4) + version: 10.9.1(@types/node@20.8.3)(typescript@4.9.4) ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@18.11.18)(typescript@4.9.4) + version: 2.0.0(@types/node@20.8.3)(typescript@4.9.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -277,8 +435,8 @@ importers: packages/logger: devDependencies: '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -289,20 +447,20 @@ importers: packages/server: dependencies: '@tanstack/react-query': - specifier: ^4.22.0 - version: 4.22.0(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.36.1 + version: 4.36.1(react-dom@18.2.0)(react@18.2.0) '@trpc/client': - specifier: 10.9.0 - version: 10.9.0(@trpc/server@10.9.0) + specifier: 10.40.0 + version: 10.40.0(@trpc/server@10.40.0) '@trpc/next': - specifier: 10.9.0 - version: 10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/react-query@10.9.0)(@trpc/server@10.9.0)(next@13.1.2)(react-dom@18.2.0)(react@18.2.0) + specifier: 10.40.0 + version: 10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/react-query@10.40.0)(@trpc/server@10.40.0)(next@13.5.4)(react-dom@18.2.0)(react@18.2.0) '@trpc/react-query': - specifier: 10.9.0 - version: 10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/server@10.9.0)(react-dom@18.2.0)(react@18.2.0) + specifier: 10.40.0 + version: 10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/server@10.40.0)(react-dom@18.2.0)(react@18.2.0) '@trpc/server': - specifier: 10.9.0 - version: 10.9.0 + specifier: 10.40.0 + version: 10.40.0 bhapi: specifier: workspace:* version: link:../bhapi @@ -319,12 +477,12 @@ importers: specifier: workspace:* version: link:../web-parser zod: - specifier: ^3.20.2 - version: 3.20.2 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -334,29 +492,29 @@ importers: packages/ui: dependencies: '@radix-ui/colors': - specifier: ^0.1.8 - version: 0.1.8 + specifier: ^3.0.0 + version: 3.0.0 '@radix-ui/react-collapsible': - specifier: ^1.0.1 - version: 1.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': - specifier: ^1.0.2 - version: 1.0.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dropdown-menu': - specifier: ^2.0.1 - version: 2.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.0.6 + version: 2.0.6(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-navigation-menu': - specifier: ^1.1.1 - version: 1.1.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-popover': - specifier: ^1.0.2 - version: 1.0.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-progress': - specifier: ^1.0.1 - version: 1.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tooltip': - specifier: ^1.0.2 - version: 1.0.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@stitches/react': specifier: ^1.2.8 version: 1.2.8(react@18.2.0) @@ -371,13 +529,13 @@ importers: version: link:../db kbar: specifier: 0.1.0-beta.39 - version: 0.1.0-beta.39(react-dom@18.2.0)(react@18.2.0) + version: 0.1.0-beta.39(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) logger: specifier: workspace:* version: link:../logger next: - specifier: 13.1.2 - version: 13.1.2(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) nprogress: specifier: ^0.2.0 version: 0.2.0 @@ -394,33 +552,33 @@ importers: specifier: ^2.15.1 version: 2.15.1(react-dom@18.2.0)(react@18.2.0) react-select: - specifier: ^5.7.0 - version: 5.7.0(@babel/core@7.20.12)(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) + specifier: ^5.7.7 + version: 5.7.7(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) react-table: specifier: ^7.8.0 version: 7.8.0(react@18.2.0) devDependencies: '@types/nprogress': - specifier: ^0.2.0 - version: 0.2.0 + specifier: ^0.2.1 + version: 0.2.1 '@types/react': - specifier: ^18.0.26 - version: 18.0.26 + specifier: ^18.2.25 + version: 18.2.25 '@types/react-dom': - specifier: ^18.0.10 - version: 18.0.10 + specifier: ^18.2.11 + version: 18.2.11 '@types/react-table': - specifier: ^7.7.13 - version: 7.7.14 + specifier: ^7.7.16 + version: 7.7.16 autoprefixer: - specifier: ^10.4.13 - version: 10.4.13(postcss@8.4.20) + specifier: ^10.4.16 + version: 10.4.16(postcss@8.4.31) postcss: - specifier: ^8.4.20 - version: 8.4.20 + specifier: ^8.4.31 + version: 8.4.31 tailwindcss: - specifier: ^3.2.4 - version: 3.2.4(postcss@8.4.20) + specifier: ^3.3.3 + version: 3.3.3 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -443,18 +601,18 @@ importers: specifier: workspace:* version: link:../logger zod: - specifier: ^3.20.2 - version: 3.20.2 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.11.18)(typescript@4.9.4) + version: 10.9.1(@types/node@20.8.3)(typescript@4.9.4) ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@18.11.18)(typescript@4.9.4) + version: 2.0.0(@types/node@20.8.3)(typescript@4.9.4) tsconfig: specifier: workspace:* version: link:../tsconfig @@ -465,11 +623,11 @@ importers: worker: dependencies: '@trpc/client': - specifier: 10.9.0 - version: 10.9.0(@trpc/server@10.9.0) + specifier: 10.40.0 + version: 10.40.0(@trpc/server@10.40.0) '@trpc/server': - specifier: 10.9.0 - version: 10.9.0 + specifier: 10.40.0 + version: 10.40.0 bhapi: specifier: workspace:* version: link:../packages/bhapi @@ -486,8 +644,8 @@ importers: specifier: ^14.7.1 version: 14.7.1 dotenv: - specifier: ^16.0.3 - version: 16.0.3 + specifier: ^16.3.1 + version: 16.3.1 express: specifier: ^4.18.2 version: 4.18.2 @@ -496,7 +654,7 @@ importers: version: link:../packages/logger reaccord: specifier: 0.0.1-dev.1669742731656.1c2e96f - version: 0.0.1-dev.1669742731656.1c2e96f(@babel/core@7.20.12)(ajv@8.11.2)(discord.js@14.7.1)(typescript@4.9.4) + version: 0.0.1-dev.1669742731656.1c2e96f(@babel/core@7.23.0)(ajv@8.11.2)(discord.js@14.7.1)(typescript@4.9.4) react: specifier: ^18.2.0 version: 18.2.0 @@ -505,214 +663,204 @@ importers: version: link:../packages/server ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.11.18)(typescript@4.9.4) + version: 10.9.1(@types/node@20.8.3)(typescript@4.9.4) ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@18.11.18)(typescript@4.9.4) + version: 2.0.0(@types/node@20.8.3)(typescript@4.9.4) web-parser: specifier: workspace:* version: link:../packages/web-parser zod: - specifier: ^3.20.2 - version: 3.20.2 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@types/cors': - specifier: ^2.8.13 - version: 2.8.13 + specifier: ^2.8.14 + version: 2.8.14 '@types/express': - specifier: ^4.17.15 - version: 4.17.15 + specifier: ^4.17.18 + version: 4.17.18 '@types/node': - specifier: ^18.11.18 - version: 18.11.18 + specifier: ^20.8.3 + version: 20.8.3 '@types/react': - specifier: ^18.0.26 - version: 18.0.26 + specifier: ^18.2.25 + version: 18.2.25 typescript: specifier: ^4.9.4 version: 4.9.4 packages: - /@ampproject/remapping@2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 dev: false - /@babel/code-frame@7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.20 + chalk: 2.4.2 dev: false - /@babel/compat-data@7.20.10: - resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} + /@babel/compat-data@7.22.20: + resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} engines: {node: '>=6.9.0'} dev: false - /@babel/core@7.20.12: - resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} + /@babel/core@7.23.0: + resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) - '@babel/helper-module-transforms': 7.20.11 - '@babel/helpers': 7.20.7 - '@babel/parser': 7.20.7 - '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 - convert-source-map: 1.9.0 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) + '@babel/helpers': 7.23.1 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/generator@7.20.7: - resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==} + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 - '@jridgewell/gen-mapping': 0.3.2 + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 dev: false - /@babel/helper-compilation-targets@7.20.7(@babel/core@7.20.12): - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.10 - '@babel/core': 7.20.12 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 + '@babel/compat-data': 7.22.20 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 lru-cache: 5.1.1 - semver: 6.3.0 + semver: 6.3.1 dev: false - /@babel/helper-environment-visitor@7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-function-name@7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 dev: false - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.23.0 dev: false - /@babel/helper-module-imports@7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.23.0 dev: false - /@babel/helper-module-transforms@7.20.11: - resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-plugin-utils@7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} - engines: {node: '>=6.9.0'} + '@babel/core': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 dev: false - /@babel/helper-simple-access@7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.23.0 dev: false - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.23.0 dev: false - /@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-validator-option@7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} dev: false - /@babel/helpers@7.20.7: - resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==} + /@babel/helpers@7.23.1: + resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 - '@babel/types': 7.20.7 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color dev: false - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: false - /@babel/parser@7.20.7: - resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.7 - dev: false - - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.20.12): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/types': 7.23.0 dev: false /@babel/runtime-corejs3@7.19.6: @@ -728,51 +876,52 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.10 + dev: true - /@babel/runtime@7.20.7: - resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} + /@babel/runtime@7.23.1: + resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: 0.14.0 - /@babel/template@7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.7 - '@babel/types': 7.20.7 + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 dev: false - /@babel/traverse@7.20.12: - resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==} + /@babel/traverse@7.23.0: + resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.7 - '@babel/types': 7.20.7 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: false - /@babel/types@7.20.7: - resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: false - /@corex/deepmerge@4.0.29: - resolution: {integrity: sha512-q/yVUnqckA8Do+EvAfpy7RLdumnBy9ZsducMUtZTvpdbJC7azEf1hGtnYYxm0QfphYxjwggv6XtH64prvS1W+A==} + /@corex/deepmerge@4.0.43: + resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} dev: false /@cspotcode/source-map-support@0.8.1: @@ -831,468 +980,544 @@ packages: engines: {node: '>=16.9.0'} dev: false - /@emotion/babel-plugin@11.10.5(@babel/core@7.20.12): - resolution: {integrity: sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==} - peerDependencies: - '@babel/core': ^7.0.0 + /@drizzle-team/studio@0.0.5: + resolution: {integrity: sha512-ps5qF0tMxWRVu+V5gvCRrQNqlY92aTnIKdq27gm9LZMSdaKYZt6AVvSK1dlUMzs6Rt0Jm80b+eWct6xShBKhIw==} + dev: true + + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.20.12) - '@babel/runtime': 7.20.7 - '@emotion/hash': 0.9.0 - '@emotion/memoize': 0.8.0 - '@emotion/serialize': 1.1.1 + '@babel/helper-module-imports': 7.22.15 + '@babel/runtime': 7.23.1 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.2 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 find-root: 1.1.0 source-map: 0.5.7 - stylis: 4.1.3 + stylis: 4.2.0 dev: false - /@emotion/cache@11.10.5: - resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==} + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} dependencies: - '@emotion/memoize': 0.8.0 - '@emotion/sheet': 1.2.1 - '@emotion/utils': 1.2.0 - '@emotion/weak-memoize': 0.3.0 - stylis: 4.1.3 + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 dev: false - /@emotion/hash@0.9.0: - resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} dev: false - /@emotion/memoize@0.8.0: - resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: false - /@emotion/react@11.10.5(@babel/core@7.20.12)(@types/react@18.0.26)(react@18.2.0): - resolution: {integrity: sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==} + /@emotion/react@11.11.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} peerDependencies: - '@babel/core': ^7.0.0 '@types/react': '*' react: '>=16.8.0' peerDependenciesMeta: - '@babel/core': - optional: true '@types/react': optional: true dependencies: - '@babel/core': 7.20.12 - '@babel/runtime': 7.20.7 - '@emotion/babel-plugin': 11.10.5(@babel/core@7.20.12) - '@emotion/cache': 11.10.5 - '@emotion/serialize': 1.1.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) - '@emotion/utils': 1.2.0 - '@emotion/weak-memoize': 0.3.0 - '@types/react': 18.0.26 + '@babel/runtime': 7.23.1 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.25 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false - /@emotion/serialize@1.1.1: - resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==} + /@emotion/serialize@1.1.2: + resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} dependencies: - '@emotion/hash': 0.9.0 - '@emotion/memoize': 0.8.0 - '@emotion/unitless': 0.8.0 - '@emotion/utils': 1.2.0 - csstype: 3.1.1 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.2 dev: false - /@emotion/sheet@1.2.1: - resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} dev: false - /@emotion/unitless@0.8.0: - resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} dev: false - /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@18.2.0): - resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: react: '>=16.8.0' dependencies: react: 18.2.0 dev: false - /@emotion/utils@1.2.0: - resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==} - dev: false - - /@emotion/weak-memoize@0.3.0: - resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} - dev: false - - /@eslint/eslintrc@1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.4.1 - globals: 13.19.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@floating-ui/core@0.7.3: - resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} - dev: false - - /@floating-ui/core@1.0.5: - resolution: {integrity: sha512-iDdOsaCHZH/0FM0yNBYt+cJxJF9S5jrYWNtDZOiDFMiZ7uxMJ/71h8eTwoVifEAruv9p9rlMPYCGIgMjOz95FQ==} - dev: false - - /@floating-ui/dom@0.5.4: - resolution: {integrity: sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==} - dependencies: - '@floating-ui/core': 0.7.3 - dev: false - - /@floating-ui/dom@1.1.0: - resolution: {integrity: sha512-TSogMPVxbRe77QCj1dt8NmRiJasPvuc+eT5jnJ6YpLqgOD2zXc5UA3S1qwybN+GVCDNdKfpKy1oj8RpzLJvh6A==} - dependencies: - '@floating-ui/core': 1.0.5 - dev: false - - /@floating-ui/react-dom@0.7.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/dom': 0.5.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.26)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} dev: false - /@fontsource/montserrat@4.5.13: - resolution: {integrity: sha512-/XlcNsMFjdWX4Away8Ax/4NgND8Ckk9gVDwgz1sfxF6h+gFHChLOV0IvPrUfCQjZ1F35igg+nR9bSxmjsYEskQ==} + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false - /@humanwhocodes/config-array@0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} - engines: {node: '>=10.10.0'} + /@esbuild-kit/core-utils@3.3.2: + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + esbuild: 0.18.20 + source-map-support: 0.5.21 dev: true - /@jridgewell/gen-mapping@0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: false - - /@jridgewell/gen-mapping@0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 - dev: false - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: false - - /@jridgewell/source-map@0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} - dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - dev: false - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - - /@jridgewell/trace-mapping@0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: false - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - - /@next/env@13.0.6: - resolution: {integrity: sha512-yceT6DCHKqPRS1cAm8DHvDvK74DLIkDQdm5iV+GnIts8h0QbdHvkUIkdOvQoOODgpr6018skbmSQp12z5OWIQQ==} - dev: false - - /@next/env@13.1.2: - resolution: {integrity: sha512-PpT4UZIX66VMTqXt4HKEJ+/PwbS+tWmmhZlazaws1a+dbUA5pPdjntQ46Jvj616i3ZKN9doS9LHx3y50RLjAWg==} - dev: false - - /@next/eslint-plugin-next@13.1.1: - resolution: {integrity: sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==} + /@esbuild-kit/esm-loader@2.6.5: + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} dependencies: - glob: 7.1.7 + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.2 dev: true - /@next/swc-android-arm-eabi@13.0.6: - resolution: {integrity: sha512-FGFSj3v2Bluw8fD/X+1eXIEB0PhoJE0zfutsAauRhmNpjjZshLDgoXMWm1jTRL/04K/o9gwwO2+A8+sPVCH1uw==} - engines: {node: '>= 10'} - cpu: [arm] + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] os: [android] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-android-arm-eabi@13.1.2: - resolution: {integrity: sha512-7mRz1owoGsbfIcdOJA3kk7KEwPZ+OvVT1z9DkR/yru4QdVLF69h/1SHy0vlUNQMxDRllabhxCfkoZCB34GOGAg==} - engines: {node: '>= 10'} + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-android-arm64@13.0.6: - resolution: {integrity: sha512-7MgbtU7kimxuovVsd7jSJWMkIHBDBUsNLmmlkrBRHTvgzx5nDBXogP0hzZm7EImdOPwVMPpUHRQMBP9mbsiJYQ==} - engines: {node: '>= 10'} - cpu: [arm64] + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] os: [android] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-android-arm64@13.1.2: - resolution: {integrity: sha512-mgjZ2eJSayovQm1LcE54BLSI4jjnnnLtq5GY5g+DdPuUiCT644gKtjZ/w2BQvuIecCqqBO+Ph9yzo/wUTq7NLg==} - engines: {node: '>= 10'} + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} cpu: [arm64] - os: [android] + os: [darwin] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-darwin-arm64@13.0.6: - resolution: {integrity: sha512-AUVEpVTxbP/fxdFsjVI9d5a0CFn6NVV7A/RXOb0Y+pXKIIZ1V5rFjPwpYfIfyOo2lrqgehMNQcyMRoTrhq04xg==} - engines: {node: '>= 10'} - cpu: [arm64] + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] os: [darwin] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-darwin-arm64@13.1.2: - resolution: {integrity: sha512-RikoQqy109r2222UJlyGs4dZw2BibkfPqpeFdW5JEGv+L2PStlHID8DwyVYbmHfQ0VIBGvbf/NAUtFakAWlhwg==} - engines: {node: '>= 10'} + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} cpu: [arm64] - os: [darwin] + os: [freebsd] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-darwin-x64@13.0.6: - resolution: {integrity: sha512-SasCDJlshglsPnbzhWaIF6VEGkQy2NECcAOxPwaPr0cwbbt4aUlZ7QmskNzgolr5eAjFS/xTr7CEeKJtZpAAtQ==} - engines: {node: '>= 10'} + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} cpu: [x64] - os: [darwin] + os: [freebsd] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-darwin-x64@13.1.2: - resolution: {integrity: sha512-JbDZjaTvL8gyPC5TAH6OnD4jmXPkyUxRYPvu08ZmhT/XAFBb/Cso0BdXyDax/BPCG70mimP9d3hXNKNq+A0VtQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-freebsd-x64@13.0.6: - resolution: {integrity: sha512-6Lbxd9gAdXneTkwHyYW/qtX1Tdw7ND9UbiGsGz/SP43ZInNWnW6q0au4hEVPZ9bOWWRKzcVoeTBdoMpQk9Hx9w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-freebsd-x64@13.1.2: - resolution: {integrity: sha512-ax4j8VrdFQ/xc3W7Om0u1vnDxVApQHKsChBbAMynCrnycZmpbqK4MZu4ZkycT+mx2eccCiqZROpbzDbEdPosEw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-arm-gnueabihf@13.0.6: - resolution: {integrity: sha512-wNdi5A519e1P+ozEuYOhWPzzE6m1y7mkO6NFwn6watUwO0X9nZs7fT9THmnekvmFQpaZ6U+xf2MQ9poQoCh6jQ==} - engines: {node: '>= 10'} - cpu: [arm] + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-arm-gnueabihf@13.1.2: - resolution: {integrity: sha512-NcRHTesnCxnUvSJa637PQJffBBkmqi5XS/xVWGY7dI6nyJ+pC96Oj7kd+mcjnFUQI5lHKbg39qBWKtOzbezc4w==} - engines: {node: '>= 10'} - cpu: [arm] + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-arm64-gnu@13.0.6: - resolution: {integrity: sha512-e8KTRnleQY1KLk5PwGV5hrmvKksCc74QRpHl5ffWnEEAtL2FE0ave5aIkXqErsPdXkiKuA/owp3LjQrP+/AH7Q==} - engines: {node: '>= 10'} - cpu: [arm64] + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-arm64-gnu@13.1.2: - resolution: {integrity: sha512-AxJdjocLtPrsBY4P2COSBIc3crT5bpjgGenNuINoensOlXhBkYM0aRDYZdydwXOhG+kN2ngUvfgitop9pa204w==} - engines: {node: '>= 10'} - cpu: [arm64] + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-arm64-musl@13.0.6: - resolution: {integrity: sha512-/7RF03C3mhjYpHN+pqOolgME3guiHU5T3TsejuyteqyEyzdEyLHod+jcYH6ft7UZ71a6TdOewvmbLOtzHW2O8A==} - engines: {node: '>= 10'} - cpu: [arm64] + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-arm64-musl@13.1.2: - resolution: {integrity: sha512-JmNimDkcCRq7P5zpkdqeaSZ69qKDntEPtyIaMNWqy5M0WUJxGim0Fs6Qzxayiyvuuh9Guxks4woQ/j/ZvX/c8Q==} - engines: {node: '>= 10'} - cpu: [arm64] + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-x64-gnu@13.0.6: - resolution: {integrity: sha512-kxyEXnYHpOEkFnmrlwB1QlzJtjC6sAJytKcceIyFUHbCaD3W/Qb5tnclcnHKTaFccizZRePXvV25Ok/eUSpKTw==} - engines: {node: '>= 10'} + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} cpu: [x64] - os: [linux] + os: [netbsd] requiresBuild: true - dev: false + dev: true optional: true - /@next/swc-linux-x64-gnu@13.1.2: - resolution: {integrity: sha512-TsLsjZwUlgmvI42neTuIoD6K9RlXCUzqPtvIClgXxVO0um0DiZwK+M+0zX/uVXhMVphfPY2c5YeR1zFSIONY4A==} - engines: {node: '>= 10'} + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} cpu: [x64] - os: [linux] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.51.0 + eslint-visitor-keys: 3.4.3 + + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/js@8.51.0: + resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /@floating-ui/core@1.5.0: + resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} + dependencies: + '@floating-ui/utils': 0.1.6 + dev: false + + /@floating-ui/dom@1.5.3: + resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + dependencies: + '@floating-ui/core': 1.5.0 + '@floating-ui/utils': 0.1.6 + dev: false + + /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.5.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@floating-ui/utils@0.1.6: + resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + dev: false + + /@fontsource/montserrat@4.5.13: + resolution: {integrity: sha512-/XlcNsMFjdWX4Away8Ax/4NgND8Ckk9gVDwgz1sfxF6h+gFHChLOV0IvPrUfCQjZ1F35igg+nR9bSxmjsYEskQ==} + dev: false + + /@humanwhocodes/config-array@0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + + /@jridgewell/gen-mapping@0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 + dev: false + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/source-map@0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + dev: false + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: false + + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + + /@next/env@13.5.4: + resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==} + dev: false + + /@next/eslint-plugin-next@13.1.1: + resolution: {integrity: sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==} + dependencies: + glob: 7.1.7 + dev: true + + /@next/eslint-plugin-next@13.5.4: + resolution: {integrity: sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==} + dependencies: + glob: 7.1.7 + dev: false + + /@next/swc-darwin-arm64@13.5.4: + resolution: {integrity: sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] requiresBuild: true dev: false optional: true - /@next/swc-linux-x64-musl@13.0.6: - resolution: {integrity: sha512-N0c6gubS3WW1oYYgo02xzZnNatfVQP/CiJq2ax+DJ55ePV62IACbRCU99TZNXXg+Kos6vNW4k+/qgvkvpGDeyA==} + /@next/swc-darwin-x64@13.5.4: + resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==} engines: {node: '>= 10'} cpu: [x64] - os: [linux] + os: [darwin] requiresBuild: true dev: false optional: true - /@next/swc-linux-x64-musl@13.1.2: - resolution: {integrity: sha512-eSkyXgCXydEFPTkcncQOGepafedPte6JT/OofB9uvruucrrMVBagCASOuPxodWEMrlfEKSXVnExMKIlfmQMD7A==} + /@next/swc-linux-arm64-gnu@13.5.4: + resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==} engines: {node: '>= 10'} - cpu: [x64] + cpu: [arm64] os: [linux] requiresBuild: true dev: false optional: true - /@next/swc-win32-arm64-msvc@13.0.6: - resolution: {integrity: sha512-QjeMB2EBqBFPb/ac0CYr7GytbhUkrG4EwFWbcE0vsRp4H8grt25kYpFQckL4Jak3SUrp7vKfDwZ/SwO7QdO8vw==} + /@next/swc-linux-arm64-musl@13.5.4: + resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==} engines: {node: '>= 10'} cpu: [arm64] - os: [win32] + os: [linux] requiresBuild: true dev: false optional: true - /@next/swc-win32-arm64-msvc@13.1.2: - resolution: {integrity: sha512-DmXFaRTgt2KrV9dmRLifDJE+cYiutHVFIw5/C9BtnwXH39uf3YbPxeD98vNrtqqqZVVLXY/1ySaSIwzYnqeY9g==} + /@next/swc-linux-x64-gnu@13.5.4: + resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==} engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [linux] requiresBuild: true dev: false optional: true - /@next/swc-win32-ia32-msvc@13.0.6: - resolution: {integrity: sha512-EQzXtdqRTcmhT/tCq81rIwE36Y3fNHPInaCuJzM/kftdXfa0F+64y7FAoMO13npX8EG1+SamXgp/emSusKrCXg==} + /@next/swc-linux-x64-musl@13.5.4: + resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==} engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] + cpu: [x64] + os: [linux] requiresBuild: true dev: false optional: true - /@next/swc-win32-ia32-msvc@13.1.2: - resolution: {integrity: sha512-3+nBkuFs/wT+lmRVQNH5SyDT7I4vUlNPntosEaEP63FuYQdPLaxz0GvcR66MdFSFh2fsvazpe4wciOwVS4FItQ==} + /@next/swc-win32-arm64-msvc@13.5.4: + resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==} engines: {node: '>= 10'} - cpu: [ia32] + cpu: [arm64] os: [win32] requiresBuild: true dev: false optional: true - /@next/swc-win32-x64-msvc@13.0.6: - resolution: {integrity: sha512-pSkqZ//UP/f2sS9T7IvHLfEWDPTX0vRyXJnAUNisKvO3eF3e1xdhDX7dix/X3Z3lnN4UjSwOzclAI87JFbOwmQ==} + /@next/swc-win32-ia32-msvc@13.5.4: + resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==} engines: {node: '>= 10'} - cpu: [x64] + cpu: [ia32] os: [win32] requiresBuild: true dev: false optional: true - /@next/swc-win32-x64-msvc@13.1.2: - resolution: {integrity: sha512-avsyveEvcvH42PvKjR4Pb8JlLttuGURr2H3ZhS2b85pHOiZ7yjH3rMUoGnNzuLMApyxYaCvd4MedPrLhnNhkog==} + /@next/swc-win32-x64-msvc@13.5.4: + resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1306,12 +1531,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -1319,7 +1542,6 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true /@pkgr/utils@2.3.1: resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} @@ -1331,6 +1553,17 @@ packages: picocolors: 1.0.0 tiny-glob: 0.2.9 tslib: 2.4.1 + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.1 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 dev: true /@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.14.0)(webpack@5.75.0): @@ -1372,9 +1605,9 @@ packages: webpack: 5.75.0 dev: false - /@prisma/client@4.8.0(prisma@4.8.0): - resolution: {integrity: sha512-Y1riB0p2W52kh3zgssP/YAhln3RjBFcJy3uwEiyjmU+TQYh6QTZDRFBo3JtBWuq2FyMOl1Rye8jxzUP+n0l5Cg==} - engines: {node: '>=14.17'} + /@prisma/client@5.4.1(prisma@5.4.1): + resolution: {integrity: sha512-xyD0DJ3gRNfLbPsC+YfMBBuLJtZKQfy1OD2qU/PZg+HKrr7SO+09174LMeTlWP0YF2wca9LxtVd4HnAiB5ketQ==} + engines: {node: '>=16.13'} requiresBuild: true peerDependencies: prisma: '*' @@ -1382,510 +1615,772 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe - prisma: 4.8.0 + '@prisma/engines-version': 5.4.1-1.2f302df92bd8945e20ad4595a73def5b96afa54f + prisma: 5.4.1 dev: false - /@prisma/engines-version@4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe: - resolution: {integrity: sha512-MHSOSexomRMom8QN4t7bu87wPPD+pa+hW9+71JnVcF3DqyyO/ycCLhRL1we3EojRpZxKvuyGho2REQsMCvxcJw==} + /@prisma/engines-version@5.4.1-1.2f302df92bd8945e20ad4595a73def5b96afa54f: + resolution: {integrity: sha512-+nUQM/y8C+1GG5Ioeqcu6itFslCfxvQSAUVSMC9XM2G2Fcq0F4Afnp6m0pXF6X6iUBWen7jZBPmM9Qlq4Nr3/A==} dev: false - /@prisma/engines@4.8.0: - resolution: {integrity: sha512-A1Asn2rxZMlLAj1HTyfaCv0VQrLUv034jVay05QlqZg1qiHPeA3/pGTfNMijbsMYCsGVxfWEJuaZZuNxXGMCrA==} + /@prisma/engines@5.4.1: + resolution: {integrity: sha512-vJTdY4la/5V3N7SFvWRmSMUh4mIQnyb/MNoDjzVbh9iLmEC+uEykj/1GPviVsorvfz7DbYSQC4RiwmlEpTEvGA==} requiresBuild: true - /@radix-ui/colors@0.1.8: - resolution: {integrity: sha512-jwRMXYwC0hUo0mv6wGpuw254Pd9p/R6Td5xsRpOmaWkUHlooNWqVcadgyzlRumMq3xfOTXwJReU0Jv+EIy4Jbw==} + /@radix-ui/colors@3.0.0: + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} dev: false - /@radix-ui/primitive@1.0.0: - resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} + /@radix-ui/number@1.0.1: + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.23.1 + dev: false + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.23.1 dev: false - /@radix-ui/react-arrow@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==} + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collapsible@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0maX4q91iYa4gjt3PsNf7dq/yqSR+HGAE8I5p54dQ6gnveS+ETWlMoijxrhmgV1k8svxpm34mQAtqIrJt4XZmA==} + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==} + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.20.7 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.1(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): - resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.0(react@18.2.0): - resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} + /@radix-ui/react-context@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-dialog@1.0.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==} + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.1(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) - aria-hidden: 1.2.1(@types/react@18.0.26)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 + aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.26)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' + react-remove-scroll: 2.5.5(@types/react@18.2.25)(react@18.2.0) dev: false - /@radix-ui/react-direction@1.0.0(react@18.2.0): - resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} + /@radix-ui/react-direction@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-dismissable-layer@1.0.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==} + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.2(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dropdown-menu@2.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-WDZqmwsNuxdBMkvgB85UeSPAT0wSBd+ojxtzX7lU7uYYh47gacCj6Spo0l9+X4TMe3JA1BBMN9c7OhIMaQeKbg==} + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-menu': 2.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@types/react' dev: false - /@radix-ui/react-focus-guards@1.0.0(react@18.2.0): - resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-focus-scope@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==} + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-id@1.0.0(react@18.2.0): - resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} + /@radix-ui/react-id@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.1 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + react: 18.2.0 + dev: false + + /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 + aria-hidden: 1.2.3 react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.25)(react@18.2.0) dev: false - /@radix-ui/react-menu@2.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-I5FFZQxCl2fHoJ7R0m5/oWA9EX8/ttH4AbgneoCH7DAXQioFeb0XMAYnOVSp1GgJZ1Nx/mohxNQSeTMcaF1YPw==} + /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-direction': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-popper': 1.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.1(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - aria-hidden: 1.2.1(@types/react@18.0.26)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.26)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' dev: false - /@radix-ui/react-navigation-menu@1.1.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Khgf+LwqYfUpbFAHcFPDMj6ZrWxnwCgC96liLYwE48x9YJbXGlutOWzZaSzrgl82xS+PwoPLQunfDe/i4ZITRA==} + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-direction': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.0(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 + aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.25)(react@18.2.0) dev: false - /@radix-ui/react-popover@1.0.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4tqZEl9w95R5mlZ/sFdgBnfhCBOEPepLIurBA5kt/qaAhldJ1tNQd0ngr0ET0AHbPotT4mwxMPr7a+MA/wbK0g==} + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-popper': 1.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.1(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) - aria-hidden: 1.2.1(@types/react@18.0.26)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.0.26)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' dev: false - /@radix-ui/react-popper@1.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==} + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@floating-ui/react-dom': 0.7.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.0(react@18.2.0) - '@radix-ui/react-use-size': 1.0.0(react@18.2.0) - '@radix-ui/rect': 1.0.0 + '@babel/runtime': 7.23.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@types/react' dev: false - /@radix-ui/react-portal@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==} + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.20.7 - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==} + /@radix-ui/react-progress@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-slot': 1.0.1(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-progress@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QbDf9eguM5QtkvGcGHe/nUgloM9yfRGpJTB/Te5cn4WmVHvcbhHyHw39/rbCZxNX4E+GEPp5Vs6+mEoyIotUbg==} + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-TB76u5TIxKpqMpUAuYH2VqMhHYKa+4Vs1NHygo/llLvlffN6mLVsFhz0AnSFlSBAvTBYVHYAkHAyEt7x1gPJOA==} + /@radix-ui/react-slider@1.1.2(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-direction': 1.0.0(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-slot@1.0.1(react@18.2.0): - resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} + /@radix-ui/react-slot@1.0.2(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.20.7 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-tabs@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-mVNEwHwgjy2G9F7b39f9VY+jF0QUZykTm0Sdv+Uz6KC4KOEIa4HLDiHU8MeEZluRtZE3aqGYDhl93O7QbJDwhg==} + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-direction': 1.0.0(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-tooltip@1.0.2(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-11gUlok2rv5mu+KBtxniOKKNKjqC/uTbgFHWoQdbF46vMV+zjDaBvCtVDK9+MTddlpmlisGPGvvojX7Qm0yr+g==} + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) - '@radix-ui/react-context': 1.0.0(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.0(react@18.2.0) - '@radix-ui/react-popper': 1.0.1(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.1(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - transitivePeerDependencies: - - '@types/react' dev: false - /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0): - resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0): - resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.2(react@18.2.0): - resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): - resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-previous@1.0.0(react@18.2.0): - resolution: {integrity: sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==} + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.23.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.0(react@18.2.0): - resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/rect': 1.0.0 + '@babel/runtime': 7.23.1 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.0(react@18.2.0): - resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.25)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: + '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-visually-hidden@1.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-K1hJcCMfWfiYUibRqf3V8r5Drpyf7rh44jnrwAbdvI5iCCijilBBeyQv9SKidYNZIopMdCyR9FnIjkHxHN0FcQ==} + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.19.4 - '@radix-ui/react-primitive': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.23.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 + '@types/react-dom': 18.2.11 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/rect@1.0.0: - resolution: {integrity: sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg==} + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.19.4 + '@babel/runtime': 7.23.1 dev: false /@reach/observe-rect@1.2.0: @@ -1931,6 +2426,10 @@ packages: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} dev: true + /@rushstack/eslint-patch@1.5.1: + resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} + dev: false + /@sapphire/async-queue@1.5.0: resolution: {integrity: sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} @@ -2011,17 +2510,17 @@ packages: - supports-color dev: false - /@swc/helpers@0.4.14: - resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: - tslib: 2.4.1 + tslib: 2.6.2 dev: false - /@tanstack/query-core@4.22.0: - resolution: {integrity: sha512-OeLyBKBQoT265f5G9biReijeP8mBxNFwY7ZUu1dKL+YzqpG5q5z7J/N1eT8aWyKuhyDTiUHuKm5l+oIVzbtrjw==} + /@tanstack/query-core@4.36.1: + resolution: {integrity: sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==} - /@tanstack/react-query@4.22.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-P9o+HjG42uB/xHR6dMsJaPhtZydSe4v0xdG5G/cEj1oHZAXelMlm67/rYJNQGKgBamKElKogj+HYGF+NY2yHYg==} + /@tanstack/react-query@4.36.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -2032,7 +2531,7 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.22.0 + '@tanstack/query-core': 4.36.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) @@ -2042,74 +2541,53 @@ packages: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} dev: false - /@trpc/client@10.9.0(@trpc/server@10.9.0): - resolution: {integrity: sha512-id6318qpgqllNOuBp7nuciXFPXCe+zae5d4r1hze6Eyp5fFFNO58TqA+4Q44KIcHgpfWyW2egs6iPeql3PrdKA==} - peerDependencies: - '@trpc/server': 10.9.0 - dependencies: - '@trpc/server': 10.9.0 - dev: false - - /@trpc/next@10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/react-query@10.9.0)(@trpc/server@10.9.0)(next@13.0.6)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-h/W8VHMki/fw7vHNMs1Ku7bLqccjpiKCE1wkqbvHfBOO1ARDmarRbuK6dLqJilip/f7jkFXcrxwB+eNgK4+6Wg==} + /@trpc/client@10.40.0(@trpc/server@10.40.0): + resolution: {integrity: sha512-bT6BcdWjj0KzGQiimE6rB2tIaRYX0Ear4Gthb5szN/c01wrP0yC1Fbz2uCcm/QTVAwu4Lve5M+YjPoEaTHG6lg==} peerDependencies: - '@tanstack/react-query': ^4.3.8 - '@trpc/client': 10.9.0 - '@trpc/react-query': ^10.8.0 - '@trpc/server': 10.9.0 - next: '*' - react: '>=16.8.0' - react-dom: '>=16.8.0' + '@trpc/server': 10.40.0 dependencies: - '@tanstack/react-query': 4.22.0(react-dom@18.2.0)(react@18.2.0) - '@trpc/client': 10.9.0(@trpc/server@10.9.0) - '@trpc/react-query': 10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/server@10.9.0)(react-dom@18.2.0)(react@18.2.0) - '@trpc/server': 10.9.0 - next: 13.0.6(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-ssr-prepass: 1.5.0(react@18.2.0) + '@trpc/server': 10.40.0 dev: false - /@trpc/next@10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/react-query@10.9.0)(@trpc/server@10.9.0)(next@13.1.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-h/W8VHMki/fw7vHNMs1Ku7bLqccjpiKCE1wkqbvHfBOO1ARDmarRbuK6dLqJilip/f7jkFXcrxwB+eNgK4+6Wg==} + /@trpc/next@10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/react-query@10.40.0)(@trpc/server@10.40.0)(next@13.5.4)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GMOiN+2DIfUXxS2DuTuTT3FOzkuB5p6+1QglY5M9ywKFWBVTGkBnbLkTgoPGuglq+dPfcZbcSajRN22AUv5Qtg==} peerDependencies: - '@tanstack/react-query': ^4.3.8 - '@trpc/client': 10.9.0 - '@trpc/react-query': ^10.8.0 - '@trpc/server': 10.9.0 + '@tanstack/react-query': ^4.18.0 + '@trpc/client': 10.40.0 + '@trpc/react-query': 10.40.0 + '@trpc/server': 10.40.0 next: '*' react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@tanstack/react-query': 4.22.0(react-dom@18.2.0)(react@18.2.0) - '@trpc/client': 10.9.0(@trpc/server@10.9.0) - '@trpc/react-query': 10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/server@10.9.0)(react-dom@18.2.0)(react@18.2.0) - '@trpc/server': 10.9.0 - next: 13.1.2(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': 10.40.0(@trpc/server@10.40.0) + '@trpc/react-query': 10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/server@10.40.0)(react-dom@18.2.0)(react@18.2.0) + '@trpc/server': 10.40.0 + next: 13.5.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-ssr-prepass: 1.5.0(react@18.2.0) dev: false - /@trpc/react-query@10.9.0(@tanstack/react-query@4.22.0)(@trpc/client@10.9.0)(@trpc/server@10.9.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-I7xtdFj/AETwc9HfY2bGxKINij39r26LvfIiTBfz2pBj1ELrcgucWmPeI2eS6pon/uI1E9Nqa6fQCg/zkg764Q==} + /@trpc/react-query@10.40.0(@tanstack/react-query@4.36.1)(@trpc/client@10.40.0)(@trpc/server@10.40.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DpJrV3lmYNo9xtPtcg49lfh9CUFap3ZivjhlSmfe4QPf7H6xBjAE+ml4OdJ0RmKvSTFvbLSOiNdB1k5O8zIdzQ==} peerDependencies: - '@tanstack/react-query': ^4.3.8 - '@trpc/client': 10.9.0 - '@trpc/server': 10.9.0 + '@tanstack/react-query': ^4.18.0 + '@trpc/client': 10.40.0 + '@trpc/server': 10.40.0 react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@tanstack/react-query': 4.22.0(react-dom@18.2.0)(react@18.2.0) - '@trpc/client': 10.9.0(@trpc/server@10.9.0) - '@trpc/server': 10.9.0 + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': 10.40.0(@trpc/server@10.40.0) + '@trpc/server': 10.40.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@trpc/server@10.9.0: - resolution: {integrity: sha512-5psyZgbvy29pJND32hwkWTMbv6s86IbsPOeDopsgNF0VegZT6Dsijmb7Ub/TDhuJVQVq5u4u5briMXi3SxmBkw==} + /@trpc/server@10.40.0: + resolution: {integrity: sha512-49SUOMWzSZtu5+OdrADmJD+u+sjSE0qj1cWgYk2FY4jLkPJunLuNRuhzM7aOeBhiUjyfhg2YTfur8FN1WBmvEw==} dev: false /@tsconfig/node10@1.0.9: @@ -2124,23 +2602,23 @@ packages: /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + /@types/body-parser@1.19.3: + resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} dependencies: - '@types/connect': 3.4.35 - '@types/node': 18.11.18 + '@types/connect': 3.4.36 + '@types/node': 20.8.3 dev: true - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + /@types/connect@3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.8.3 dev: true - /@types/cors@2.8.13: - resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} + /@types/cors@2.8.14: + resolution: {integrity: sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.8.3 dev: true /@types/eslint-scope@3.7.4: @@ -2165,27 +2643,33 @@ packages: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: false - /@types/express-serve-static-core@4.17.31: - resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} + /@types/express-serve-static-core@4.17.37: + resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} dependencies: - '@types/node': 18.11.18 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 + '@types/node': 20.8.3 + '@types/qs': 6.9.8 + '@types/range-parser': 1.2.5 + '@types/send': 0.17.2 dev: true - /@types/express@4.17.15: - resolution: {integrity: sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==} + /@types/express@4.17.18: + resolution: {integrity: sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==} dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.31 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 + '@types/body-parser': 1.19.3 + '@types/express-serve-static-core': 4.17.37 + '@types/qs': 6.9.8 + '@types/serve-static': 1.15.3 dev: true - /@types/fs-extra@9.0.13: - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + /@types/fs-extra@11.0.2: + resolution: {integrity: sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==} dependencies: - '@types/node': 18.11.18 + '@types/jsonfile': 6.1.2 + '@types/node': 20.8.3 + dev: true + + /@types/http-errors@2.0.2: + resolution: {integrity: sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==} dev: true /@types/js-cookie@2.2.7: @@ -2194,86 +2678,118 @@ packages: /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: false + + /@types/json-schema@7.0.13: + resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + /@types/jsonfile@6.1.2: + resolution: {integrity: sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w==} + dependencies: + '@types/node': 20.8.3 + dev: true + + /@types/mime@1.3.3: + resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==} dev: true - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + /@types/mime@3.0.2: + resolution: {integrity: sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ==} dev: true - /@types/minimist@1.2.2: - resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + /@types/minimist@1.2.3: + resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} dev: true - /@types/node@18.11.18: - resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} + /@types/node@18.18.4: + resolution: {integrity: sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==} + dev: true + + /@types/node@20.8.3: + resolution: {integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==} - /@types/nprogress@0.2.0: - resolution: {integrity: sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==} + /@types/nprogress@0.2.1: + resolution: {integrity: sha512-TYuyVnp+nOnimgdOydDIDYIxv2kSeuJZw4tF0p/KG7hpzcMF1WkHaREwM8O4blqfT1F7rq0nht6Ko2KVUfWzBA==} dev: true /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: false + /@types/pg@8.10.3: + resolution: {integrity: sha512-BACzsw64lCZesclRpZGu55tnqgFAYcrCBP92xLh1KLypZLCOsvJTSTgaoFVTy3lCys/aZTQzfeDxtjwrvdzL2g==} + dependencies: + '@types/node': 20.8.3 + pg-protocol: 1.6.0 + pg-types: 4.0.1 + /@types/phoenix@1.5.4: resolution: {integrity: sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==} dev: false - /@types/prop-types@15.7.5: - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + /@types/prop-types@15.7.8: + resolution: {integrity: sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==} - /@types/ps-tree@1.1.2: - resolution: {integrity: sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw==} + /@types/ps-tree@1.1.3: + resolution: {integrity: sha512-J8IrehehphLtxpABSekURTw9jthrlLcM4llH1I2fZ0zKaxq8jI/O1+Q/tabAJgBY/ffoqDxPRNYBM1lFUXm0lw==} dev: true - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + /@types/qs@6.9.8: + resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} dev: true - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + /@types/range-parser@1.2.5: + resolution: {integrity: sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==} dev: true - /@types/react-dom@18.0.10: - resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} + /@types/react-dom@18.2.11: + resolution: {integrity: sha512-zq6Dy0EiCuF9pWFW6I6k6W2LdpUixLE4P6XjXU1QHLfak3GPACQfLwEuHzY5pOYa4hzj1d0GxX/P141aFjZsyg==} dependencies: - '@types/react': 18.0.26 - dev: true + '@types/react': 18.2.25 - /@types/react-table@7.7.14: - resolution: {integrity: sha512-TYrv7onCiakaG1uAu/UpQ9FojNEt/4/ht87EgJQaEGFoWV606ZLWUZAcUHzMxgc3v1mywP1cDyz3qB4ho3hWOw==} + /@types/react-table@7.7.16: + resolution: {integrity: sha512-khfVwkNkvFnQV+Dx5Z/4jeMWIi+qytR8/Hl89fMPQ3aGiIgVlnghwdnyrq45UVSU+9wTqQFL0kUmIk4MGaM20Q==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 dev: true - /@types/react-transition-group@4.4.5: - resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==} + /@types/react-transition-group@4.4.7: + resolution: {integrity: sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 dev: false - /@types/react@18.0.26: - resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==} + /@types/react@18.2.25: + resolution: {integrity: sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw==} dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.2 - csstype: 3.1.1 + '@types/prop-types': 15.7.8 + '@types/scheduler': 0.16.4 + csstype: 3.1.2 - /@types/scheduler@0.16.2: - resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + /@types/scheduler@0.16.4: + resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} + + /@types/semver@7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + dev: true - /@types/semver@7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/send@0.17.2: + resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} + dependencies: + '@types/mime': 1.3.3 + '@types/node': 20.8.3 dev: true - /@types/serve-static@1.15.0: - resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + /@types/serve-static@1.15.3: + resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==} dependencies: - '@types/mime': 3.0.1 - '@types/node': 18.11.18 + '@types/http-errors': 2.0.2 + '@types/mime': 3.0.2 + '@types/node': 20.8.3 dev: true /@types/strip-bom@3.0.0: @@ -2282,45 +2798,84 @@ packages: /@types/strip-json-comments@0.0.30: resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} - /@types/which@2.0.1: - resolution: {integrity: sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==} + /@types/uuid@9.0.5: + resolution: {integrity: sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ==} + dev: true + + /@types/which@3.0.0: + resolution: {integrity: sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ==} dev: true /@types/ws@8.5.3: resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.8.3 dev: false - /@typescript-eslint/eslint-plugin@5.48.0(@typescript-eslint/parser@5.48.0)(eslint@8.31.0)(typescript@4.9.4): - resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@types/youtube-player@5.5.8: + resolution: {integrity: sha512-WU6l9UyIp1TKEK3xN8K5Y1nZpP4FTnrz4ArAPjQknReNNkN9UeLbmAuFu2F69YthLkLkOAMWi9O3a6kJCIWH5g==} + dev: true + + /@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@4.9.4): + resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.0(eslint@8.31.0)(typescript@4.9.4) - '@typescript-eslint/scope-manager': 5.48.0 - '@typescript-eslint/type-utils': 5.48.0(eslint@8.31.0)(typescript@4.9.4) - '@typescript-eslint/utils': 5.48.0(eslint@8.31.0)(typescript@4.9.4) + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@4.9.4) + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/type-utils': 6.7.4(eslint@8.51.0)(typescript@4.9.4) + '@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@4.9.4) + '@typescript-eslint/visitor-keys': 6.7.4 debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.51.0 + graphemer: 1.4.0 ignore: 5.2.4 - natural-compare-lite: 1.4.0 - regexpp: 3.2.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@4.9.4) + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@4.9.4) typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.48.0(eslint@8.31.0)(typescript@4.9.4): - resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==} + /@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/type-utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.51.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.62.0(eslint@8.51.0)(typescript@4.9.4): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2329,51 +2884,123 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.48.0 - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/typescript-estree': 5.48.0(typescript@4.9.4) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.4) debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.51.0 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.48.0: - resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.7.4(eslint@8.51.0)(typescript@4.9.4): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/visitor-keys': 5.48.0 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@4.9.4) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.51.0 + typescript: 4.9.4 + transitivePeerDependencies: + - supports-color dev: true - /@typescript-eslint/type-utils@5.48.0(eslint@8.31.0)(typescript@4.9.4): - resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==} + /@typescript-eslint/parser@6.7.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + eslint: 8.51.0 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/scope-manager@6.7.4: + resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + + /@typescript-eslint/type-utils@6.7.4(eslint@8.51.0)(typescript@4.9.4): + resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.48.0(typescript@4.9.4) - '@typescript-eslint/utils': 5.48.0(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/typescript-estree': 6.7.4(typescript@4.9.4) + '@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@4.9.4) debug: 4.3.4 - eslint: 8.31.0 - tsutils: 3.21.0(typescript@4.9.4) + eslint: 8.51.0 + ts-api-utils: 1.0.3(typescript@4.9.4) typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.48.0: - resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==} + /@typescript-eslint/type-utils@6.7.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + debug: 4.3.4 + eslint: 8.51.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.48.0(typescript@4.9.4): - resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==} + /@typescript-eslint/types@6.7.4: + resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==} + engines: {node: ^16.0.0 || >=18.0.0} + + /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.4): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2381,46 +3008,112 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/visitor-keys': 5.48.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 + semver: 7.5.4 tsutils: 3.21.0(typescript@4.9.4) typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.48.0(eslint@8.31.0)(typescript@4.9.4): - resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@6.7.4(typescript@4.9.4): + resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.48.0 - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/typescript-estree': 5.48.0(typescript@4.9.4) - eslint: 8.31.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.31.0) - semver: 7.3.8 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@4.9.4) + typescript: 4.9.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.7.4(typescript@5.2.2): + resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/utils@6.7.4(eslint@8.51.0)(typescript@4.9.4): + resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@4.9.4) + eslint: 8.51.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.7.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + eslint: 8.51.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.48.0: - resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==} + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.0 - eslint-visitor-keys: 3.3.0 + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 dev: true + /@typescript-eslint/visitor-keys@6.7.4: + resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.7.4 + eslint-visitor-keys: 3.4.3 + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: @@ -2555,36 +3248,21 @@ packages: acorn: 8.8.1 dev: false - /acorn-jsx@5.3.2(acorn@8.8.1): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.1 - dev: true - - /acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - dev: true - - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true + acorn: 8.10.0 /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn@8.8.1: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} @@ -2659,8 +3337,11 @@ packages: dependencies: color-convert: 2.0.1 - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 @@ -2671,35 +3352,38 @@ packages: /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - /aria-hidden@1.2.1(@types/react@18.0.26)(react@18.2.0): - resolution: {integrity: sha512-PN344VAf9j1EAi+jyVHOJ8XidQdPVssGco39eNcsGdM4wcsILtxrKLkbuiMfLWYROK1FjRQasMWCBttrhjnr6A==} + /aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} 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 dependencies: - '@types/react': 18.0.26 - react: 18.2.0 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /aria-query@4.2.2: resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} engines: {node: '>=6.0'} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.23.1 '@babel/runtime-corejs3': 7.19.6 dev: true + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: false + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: false + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false @@ -2724,12 +3408,21 @@ packages: es-abstract: 1.20.5 get-intrinsic: 1.1.3 is-string: 1.0.7 - dev: true /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: false /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} @@ -2739,7 +3432,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.20.5 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.flatmap@1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} @@ -2749,7 +3441,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.20.5 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.tosorted@1.1.1: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} @@ -2759,37 +3450,63 @@ packages: es-abstract: 1.20.5 es-shim-unscopables: 1.0.0 get-intrinsic: 1.1.3 - dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: false /ast-types-flow@0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - dev: true + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: false /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /autoprefixer@10.4.13(postcss@8.4.20): - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + /autoprefixer@10.4.16(postcss@8.4.31): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001434 - fraction.js: 4.2.0 + browserslist: 4.22.1 + caniuse-lite: 1.0.30001546 + fraction.js: 4.3.6 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.20 + postcss: 8.4.31 postcss-value-parser: 4.2.0 - dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: false /axe-core@4.5.0: resolution: {integrity: sha512-4+rr8eQ7+XXS5nZrKcMO/AikHL0hVqy+lHWAnE3xdHl+aguag8SOQ6eEqLexwLNWgXIMfunGuD3ON1/6Kyet0A==} engines: {node: '>=4'} dev: true + /axe-core@4.8.2: + resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==} + engines: {node: '>=4'} + dev: false + /axios@1.1.3: resolution: {integrity: sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==} dependencies: @@ -2804,14 +3521,20 @@ packages: resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} dev: true - /babel-loader@9.1.0(@babel/core@7.20.12)(webpack@5.75.0): + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: false + + /babel-loader@9.1.0(@babel/core@7.23.0)(webpack@5.75.0): resolution: {integrity: sha512-Antt61KJPinUMwHwIIz9T5zfMgevnfZkEVWYDWlG888fgdvRRGD0JTuf/fFozQnfT+uq64sk1bmdHDy/mOEWnA==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5' dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.23.0 find-cache-dir: 3.3.2 schema-utils: 4.0.0 webpack: 5.75.0 @@ -2821,14 +3544,19 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.23.1 cosmiconfig: 7.1.0 - resolve: 1.22.1 + resolve: 1.22.6 dev: false /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: false @@ -2861,31 +3589,49 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: false + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist@4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001443 - electron-to-chromium: 1.4.284 - node-releases: 2.0.6 - update-browserslist-db: 1.0.10(browserslist@4.21.4) + caniuse-lite: 1.0.30001546 + electron-to-chromium: 1.4.544 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + /buffer-writer@2.0.0: + resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} + engines: {node: '>=4'} + dev: false + /bufferutil@4.0.7: resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} engines: {node: '>=6.14.2'} @@ -2894,6 +3640,13 @@ packages: node-gyp-build: 4.5.0 dev: false + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -2919,14 +3672,14 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: true - /caniuse-lite@1.0.30001434: - resolution: {integrity: sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==} + /camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001443: - resolution: {integrity: sha512-jUo8svymO8+Mkj3qbUbVjR8zv8LUGpGkUM/jKvc9SO2BvjCI980dp9fQbf/dyLs6RascPzgR4nhAKFA4OHeSaA==} + /caniuse-lite@1.0.30001546: + resolution: {integrity: sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==} /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -2944,8 +3697,8 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@5.1.2: - resolution: {integrity: sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==} + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true @@ -2977,7 +3730,7 @@ packages: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: - anymatch: 3.1.2 + anymatch: 3.1.3 braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 @@ -2985,17 +3738,34 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: false + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false + /classnames@2.3.2: resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} dev: false + /cli-color@2.0.3: + resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-iterator: 2.0.3 + memoizee: 0.4.15 + timers-ext: 0.1.7 + dev: true + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false @@ -3009,6 +3779,11 @@ packages: wrap-ansi: 7.0.0 dev: false + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -3043,6 +3818,15 @@ packages: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + dev: true + /common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} dev: false @@ -3070,6 +3854,10 @@ packages: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: false + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: false + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: false @@ -3079,6 +3867,13 @@ packages: engines: {node: '>= 0.6'} dev: false + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.15 + dev: false + /copy-to-clipboard@3.3.2: resolution: {integrity: sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==} dependencies: @@ -3126,7 +3921,6 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /css-in-js-utils@2.0.1: resolution: {integrity: sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==} @@ -3162,29 +3956,30 @@ packages: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: true /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + dev: false + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} /d@1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: es5-ext: 0.10.62 type: 1.2.0 - dev: false /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true - /data-uri-to-buffer@4.0.0: - resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} dev: true - /dayjs@1.11.7: - resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} dev: false /debug@2.6.9: @@ -3206,7 +4001,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: true /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -3221,11 +4015,41 @@ packages: /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 dev: true + /define-data-property@1.1.0: + resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: false + /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} dev: true /define-properties@1.1.4: @@ -3234,11 +4058,15 @@ packages: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 - dev: true - /defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - dev: true + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.0 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: false /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -3250,6 +4078,11 @@ packages: engines: {node: '>= 0.8'} dev: false + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -3259,30 +4092,24 @@ packages: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dev: false - /detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - hasBin: true - dependencies: - acorn-node: 1.8.2 - defined: 1.0.1 - minimist: 1.2.7 - dev: true - /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + /difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + dependencies: + heap: 0.2.7 + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 - dev: true /discord-api-types@0.37.25: resolution: {integrity: sha512-aCwA2sWnL1zPQgTELkkMzQneuWyCXXUjZCUKswesiE6RDCfOfxAPXOHg6ZTlBA5layPSikGCBBRjyh8S3Wzd+A==} @@ -3310,27 +4137,24 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 - dev: true /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 - dev: true /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.20.7 - csstype: 3.1.1 + '@babel/runtime': 7.23.1 + csstype: 3.1.2 dev: false /dom-serializer@2.0.0: @@ -3360,11 +4184,114 @@ packages: domhandler: 5.0.3 dev: false - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: false + /dreamopt@0.8.0: + resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} + engines: {node: '>=0.4.0'} + dependencies: + wordwrap: 1.0.0 + dev: true + + /drizzle-kit@0.19.13: + resolution: {integrity: sha512-Rba5VW1O2JfJlwVBeZ8Zwt2E2us5oZ08PQBDiVSGlug53TOc8hzXjblZFuF+dnll9/RQEHrkzBmJFgqTvn5Rxg==} + hasBin: true + dependencies: + '@drizzle-team/studio': 0.0.5 + '@esbuild-kit/esm-loader': 2.6.5 + camelcase: 7.0.1 + chalk: 5.3.0 + commander: 9.5.0 + esbuild: 0.18.20 + esbuild-register: 3.5.0(esbuild@0.18.20) + glob: 8.1.0 + hanji: 0.0.5 + json-diff: 0.9.0 + minimatch: 7.4.6 + zod: 3.22.4 + transitivePeerDependencies: + - supports-color + dev: true + + /drizzle-orm@0.28.6(@types/pg@8.10.3)(pg@8.11.3): + resolution: {integrity: sha512-yBe+F9htrlYER7uXgDJUQsTHFoIrI5yMm5A0bg0GiZ/kY5jNXTWoEy4KQtg35cE27sw1VbgzoMWHAgCckUUUww==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@vercel/postgres': '*' + better-sqlite3: '>=7' + bun-types: '*' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + dependencies: + '@types/pg': 8.10.3 + pg: 8.11.3 + dev: false + + /drizzle-zod@0.5.1(drizzle-orm@0.28.6)(zod@3.22.4): + resolution: {integrity: sha512-C/8bvzUH/zSnVfwdSibOgFjLhtDtbKYmkbPbUCq46QZyZCH6kODIMSOgZ8R7rVjoI+tCj3k06MRJMDqsIeoS4A==} + peerDependencies: + drizzle-orm: '>=0.23.13' + zod: '*' + dependencies: + drizzle-orm: 0.28.6(@types/pg@8.10.3)(pg@8.11.3) + zod: 3.22.4 + dev: false + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -3378,8 +4305,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /electron-to-chromium@1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + /electron-to-chromium@1.4.544: + resolution: {integrity: sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==} /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3387,7 +4314,6 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} @@ -3405,20 +4331,20 @@ packages: iconv-lite: 0.6.3 dev: false - /enhanced-resolve@5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} + /enhanced-resolve@5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.10 tapable: 2.2.1 - dev: true - /enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 + dev: true /entities@4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} @@ -3496,17 +4422,88 @@ packages: string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 unbox-primitive: 1.0.2 - dev: true + + /es-abstract@1.22.2: + resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.4 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: false + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-set-tostringtag: 2.0.1 + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: false /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: false + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.4 + has-tostringtag: 1.0.0 + dev: false + /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 - dev: true /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -3515,7 +4512,6 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true /es5-ext@0.10.62: resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} @@ -3525,7 +4521,6 @@ packages: es6-iterator: 2.0.3 es6-symbol: 3.1.3 next-tick: 1.1.0 - dev: false /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} @@ -3533,14 +4528,62 @@ packages: d: 1.0.1 es5-ext: 0.10.62 es6-symbol: 3.1.3 - dev: false /es6-symbol@3.1.3: resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} dependencies: d: 1.0.1 ext: 1.7.0 - dev: false + + /es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + dev: true + + /esbuild-register@3.5.0(esbuild@0.18.20): + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4 + esbuild: 0.18.20 + transitivePeerDependencies: + - supports-color + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -3559,7 +4602,7 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-config-next@13.1.1(eslint@8.31.0)(typescript@4.9.4): + /eslint-config-next@13.1.1(eslint@8.51.0)(typescript@4.9.4): resolution: {integrity: sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -3570,20 +4613,45 @@ packages: dependencies: '@next/eslint-plugin-next': 13.1.1 '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.48.0(eslint@8.31.0)(typescript@4.9.4) - eslint: 8.31.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.51.0)(typescript@4.9.4) + eslint: 8.51.0 eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.31.0) - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.48.0)(eslint-import-resolver-typescript@3.5.2)(eslint@8.31.0) - eslint-plugin-jsx-a11y: 6.6.1(eslint@8.31.0) - eslint-plugin-react: 7.31.11(eslint@8.31.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.31.0) + eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.51.0) + eslint-plugin-import: 2.26.0(@typescript-eslint/parser@6.7.4)(eslint@8.51.0) + eslint-plugin-jsx-a11y: 6.6.1(eslint@8.51.0) + eslint-plugin-react: 7.31.11(eslint@8.51.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.51.0) typescript: 4.9.4 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true + /eslint-config-next@13.5.4(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 13.5.4 + '@rushstack/eslint-patch': 1.5.1 + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + eslint: 8.51.0 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.28.1)(eslint@8.51.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.5.2)(eslint@8.51.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.51.0) + eslint-plugin-react: 7.33.2(eslint@8.51.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.51.0) + typescript: 5.2.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: false + /eslint-import-resolver-node@0.3.6: resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} dependencies: @@ -3591,9 +4659,38 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - supports-color + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.6 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.26.0)(eslint@8.51.0): + resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.12.0 + eslint: 8.51.0 + eslint-plugin-import: 2.26.0(@typescript-eslint/parser@6.7.4)(eslint@8.51.0) + get-tsconfig: 4.2.0 + globby: 13.1.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + synckit: 0.8.4 + transitivePeerDependencies: + - supports-color dev: true - /eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.26.0)(eslint@8.31.0): + /eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.28.1)(eslint@8.51.0): resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3602,8 +4699,8 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.12.0 - eslint: 8.31.0 - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.48.0)(eslint-import-resolver-typescript@3.5.2)(eslint@8.31.0) + eslint: 8.51.0 + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.5.2)(eslint@8.51.0) get-tsconfig: 4.2.0 globby: 13.1.3 is-core-module: 2.11.0 @@ -3611,9 +4708,9 @@ packages: synckit: 0.8.4 transitivePeerDependencies: - supports-color - dev: true + dev: false - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.48.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.31.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.6)(eslint@8.51.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -3634,16 +4731,45 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.48.0(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@4.9.4) debug: 3.2.7 - eslint: 8.31.0 + eslint: 8.51.0 eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.31.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.48.0)(eslint-import-resolver-typescript@3.5.2)(eslint@8.31.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.51.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + debug: 3.2.7 + eslint: 8.51.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.28.1)(eslint@8.51.0) + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-import@2.26.0(@typescript-eslint/parser@6.7.4)(eslint@8.51.0): resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: @@ -3653,14 +4779,14 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.48.0(eslint@8.31.0)(typescript@4.9.4) + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@4.9.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.31.0 + eslint: 8.51.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.48.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.31.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.6)(eslint@8.51.0) has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -3674,7 +4800,42 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y@6.6.1(eslint@8.31.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.5.2)(eslint@8.51.0): + resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.7.4(eslint@8.51.0)(typescript@5.2.2) + array-includes: 3.1.6 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.51.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.51.0) + has: 1.0.4 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.6 + object.groupby: 1.0.1 + object.values: 1.1.6 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-jsx-a11y@6.6.1(eslint@8.51.0): resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} engines: {node: '>=4.0'} peerDependencies: @@ -3688,7 +4849,7 @@ packages: axobject-query: 2.2.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.31.0 + eslint: 8.51.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -3696,32 +4857,60 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-prettier@4.2.1(eslint@8.31.0)(prettier@2.8.1): - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.51.0): + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.1 + aria-query: 5.3.0 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + ast-types-flow: 0.0.7 + axe-core: 4.8.2 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.51.0 + has: 1.0.4 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + semver: 6.3.1 + dev: false + + /eslint-plugin-prettier@5.0.0(eslint@8.51.0)(prettier@3.0.3): + resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=7.28.0' + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' eslint-config-prettier: '*' - prettier: '>=2.0.0' + prettier: '>=3.0.0' peerDependenciesMeta: + '@types/eslint': + optional: true eslint-config-prettier: optional: true dependencies: - eslint: 8.31.0 - prettier: 2.8.1 + eslint: 8.51.0 + prettier: 3.0.3 prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.31.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.51.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.31.0 - dev: true + eslint: 8.51.0 - /eslint-plugin-react@7.31.11(eslint@8.31.0): + /eslint-plugin-react@7.31.11(eslint@8.51.0): resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==} engines: {node: '>=4'} peerDependencies: @@ -3731,7 +4920,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.31.0 + eslint: 8.51.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -3745,12 +4934,37 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-sort-imports-es6-autofix@0.6.0(eslint@8.31.0): + /eslint-plugin-react@7.33.2(eslint@8.51.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.51.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.1 + string.prototype.matchall: 4.0.8 + dev: false + + /eslint-plugin-sort-imports-es6-autofix@0.6.0(eslint@8.51.0): resolution: {integrity: sha512-2NVaBGF9NN+727Fyq+jJYihdIeegjXeUUrZED9Q8FVB8MsV3YQEyXG96GVnXqWt0pmn7xfCZOZf3uKnIhBrfeQ==} peerDependencies: eslint: '>=7.7.0' dependencies: - eslint: 8.31.0 + eslint: 8.51.0 dev: true /eslint-scope@5.1.1: @@ -3759,42 +4973,29 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 + dev: false - /eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-utils@3.0.0(eslint@8.31.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.31.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /eslint@8.31.0: - resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} + /eslint@8.51.0: + resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.11.8 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/regexpp': 4.9.1 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.51.0 + '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -3803,54 +5004,46 @@ packages: debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.31.0) - eslint-visitor-keys: 3.3.0 - espree: 9.4.1 - esquery: 1.4.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 - grapheme-splitter: 1.0.4 + globals: 13.23.0 + graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.2.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.4.1: - resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2(acorn@8.8.1) - eslint-visitor-keys: 3.3.0 - dev: true + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 - /esquery@1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 - dev: true /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -3861,6 +5054,7 @@ packages: /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} + dev: false /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} @@ -3873,13 +5067,19 @@ packages: /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: false + /event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + dev: true + /event-stream@3.3.4: resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: @@ -3897,6 +5097,36 @@ packages: engines: {node: '>=0.8.x'} dev: false + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + /express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -3940,13 +5170,12 @@ packages: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: type: 2.7.2 - dev: false /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true /fast-equals@2.0.4: @@ -3962,14 +5191,22 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true /fast-shallow-equal@1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} @@ -3983,7 +5220,6 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: true /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} @@ -3997,8 +5233,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 - dev: true + flat-cache: 3.1.1 /file-type@18.0.0: resolution: {integrity: sha512-jjMwFpnW8PKofLE/4ohlhqwDk5k0NC6iy0UHAJFKoY1fQeGMN0GDdLgHQrvCbSpMwbqzoCZhRI5dETCZna5qVA==} @@ -4058,17 +5293,16 @@ packages: locate-path: 6.0.0 path-exists: 4.0.0 - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} /follow-redirects@1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} @@ -4080,6 +5314,12 @@ packages: optional: true dev: false + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -4101,9 +5341,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /fraction.js@4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: true + /fraction.js@4.3.6: + resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} @@ -4114,11 +5353,11 @@ packages: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} dev: true - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -4126,8 +5365,8 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -4144,10 +5383,23 @@ packages: define-properties: 1.1.4 es-abstract: 1.20.5 functions-have-names: 1.2.3 - dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + functions-have-names: 1.2.3 + dev: false /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + /fx@30.2.0: + resolution: {integrity: sha512-rIYQBmx85Jfhd3pkSw06YPgvSvfTi022ZXTeFDkcCZGCs5nt3sjqFBGtcMFe1TR2S00RDz63be0ab5mhCiOLBw==} + hasBin: true dev: true /gensync@1.0.0-beta.2: @@ -4167,21 +5419,39 @@ packages: has: 1.0.3 has-symbols: 1.0.3 + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.4 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: false + /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} dev: false + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.3 - dev: true /get-tsconfig@4.2.0: resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==} + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 dev: true /glob-parent@5.1.2: @@ -4195,12 +5465,21 @@ packages: engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: @@ -4210,7 +5489,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -4222,21 +5500,37 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: false - /globals@13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 - dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: false /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -4244,14 +5538,13 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: true - /globby@13.1.2: - resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==} + /globby@13.1.3: + resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 @@ -4259,14 +5552,13 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 - dev: true - /globby@13.1.3: - resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 @@ -4274,32 +5566,38 @@ packages: /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true - /goober@2.1.11(csstype@3.1.1): - resolution: {integrity: sha512-5SS2lmxbhqH0u9ABEWq7WPU69a4i2pYcHeCxqaNq6Cw3mnrF0ghWNM4tEGid4dKy8XNIAUbuThuozDHHKJVh3A==} + /goober@2.1.13(csstype@3.1.2): + resolution: {integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==} peerDependencies: csstype: ^3.0.10 dependencies: - csstype: 3.1.1 + csstype: 3.1.2 dev: false /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.1.3 - dev: true /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + /hanji@0.0.5: + resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} + dependencies: + lodash.throttle: 4.1.1 + sisteransi: 1.0.5 dev: true /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -4314,7 +5612,11 @@ packages: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.1.3 - dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} @@ -4325,7 +5627,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} @@ -4333,6 +5634,14 @@ packages: dependencies: function-bind: 1.1.1 + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + dev: true + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -4363,6 +5672,16 @@ packages: toidentifier: 1.0.1 dev: false + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + /hyphenate-style-name@1.0.4: resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} dev: false @@ -4388,7 +5707,10 @@ packages: /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} - dev: true + + /immer@10.0.3: + resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==} + dev: false /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -4400,7 +5722,6 @@ packages: /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - dev: true /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -4424,7 +5745,15 @@ packages: get-intrinsic: 1.1.3 has: 1.0.3 side-channel: 1.0.4 - dev: true + + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.4 + side-channel: 1.0.4 + dev: false /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -4437,15 +5766,29 @@ packages: engines: {node: '>= 0.10'} dev: false + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: false + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 - dev: true /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} @@ -4459,57 +5802,87 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: true /is-core-module@2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.4 + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true dev: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.2 + dev: false + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: false + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: false + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} - dev: true /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -4518,6 +5891,9 @@ packages: /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} dev: true /is-regex@1.1.4: @@ -4526,12 +5902,24 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: false /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true /is-string@1.0.7: @@ -4539,58 +5927,90 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + dev: false /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: false + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: false + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 - dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: false + + /is-what@4.1.15: + resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} + engines: {node: '>=12.13'} + dev: false /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} dev: false + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: false + /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.8.3 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false + /jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + hasBin: true + /js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} dev: false - /js-sdsl@4.2.0: - resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} - dev: true - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4599,7 +6019,6 @@ packages: hasBin: true dependencies: argparse: 2.0.1 - dev: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} @@ -4607,6 +6026,18 @@ packages: hasBin: true dev: false + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + /json-diff@0.9.0: + resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} + hasBin: true + dependencies: + cli-color: 2.0.3 + difflib: 0.2.4 + dreamopt: 0.8.0 + dev: true + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false @@ -4620,7 +6051,6 @@ packages: /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true /json5@1.0.1: resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} @@ -4629,6 +6059,13 @@ packages: minimist: 1.2.7 dev: true + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + /json5@2.2.2: resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==} engines: {node: '>=6'} @@ -4646,7 +6083,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsx-ast-utils@3.3.3: @@ -4655,32 +6092,37 @@ packages: dependencies: array-includes: 3.1.6 object.assign: 4.1.4 - dev: true - /kbar@0.1.0-beta.39(react-dom@18.2.0)(react@18.2.0): + /kbar@0.1.0-beta.39(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Gjn0m3MV2V/rEYTDAhIMzxD75Rz65tuMB6v6w71B8PuU4vQzZ7dWVKEI4b56Cf47T49zrax6tqsijxcsAFpLSg==} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - '@radix-ui/react-portal': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.11)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) command-score: 0.1.2 fast-equals: 2.0.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-virtual: 2.10.4(react@18.2.0) tiny-invariant: 1.3.1 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' dev: false + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true /language-tags@1.0.5: resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} dependencies: language-subtag-registry: 0.3.22 - dev: true /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -4688,15 +6130,16 @@ packages: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lilconfig@2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /load-script@1.0.0: + resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==} dev: false /loader-runner@4.3.0: @@ -4736,7 +6179,6 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true /lodash.reduce@4.6.0: resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==} @@ -4750,6 +6192,10 @@ packages: resolution: {integrity: sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==} dev: false + /lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: false @@ -4772,11 +6218,25 @@ packages: dependencies: yallist: 4.0.0 + /lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + dependencies: + es5-ext: 0.10.62 + dev: true + + /lucide-react@0.284.0(react@18.2.0): + resolution: {integrity: sha512-dVSMHYAya/TeY3+vsk+VQJEKNQN2AhIo0+Dp09B2qpzvcBuu93H98YZykFcjIAfmanFiDd8nqfXFR38L757cyQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 dev: false /make-error@1.3.6: @@ -4799,18 +6259,29 @@ packages: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} dev: false + /memoizee@0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + dev: true + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: false /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} @@ -4842,14 +6313,41 @@ packages: hasBin: true dev: false + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -4864,6 +6362,13 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + /nano-css@5.3.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==} peerDependencies: @@ -4882,18 +6387,13 @@ packages: stylis: 4.1.3 dev: false - /nanoid@3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} @@ -4904,113 +6404,63 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: false - /next-sitemap@3.1.44(@next/env@13.1.2)(next@13.0.6): - resolution: {integrity: sha512-dg+qGfOpQemAb+LGShJmaJHyuf36rVqsIbkCBt0ldu10sAx+eMowVx6DzEtf2HoIIGWc7J+kfy//YsBCPdj47Q==} + /next-sitemap@4.2.3(next@13.5.4): + resolution: {integrity: sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==} engines: {node: '>=14.18'} hasBin: true peerDependencies: - '@next/env': '*' next: '*' dependencies: - '@corex/deepmerge': 4.0.29 - '@next/env': 13.1.2 - minimist: 1.2.7 - next: 13.0.6(react-dom@18.2.0)(react@18.2.0) + '@corex/deepmerge': 4.0.43 + '@next/env': 13.5.4 + fast-glob: 3.3.1 + minimist: 1.2.8 + next: 13.5.4(react-dom@18.2.0)(react@18.2.0) dev: false /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - dev: false - /next-transpile-modules@10.0.0: - resolution: {integrity: sha512-FyeJ++Lm2Fq31gbThiRCrJlYpIY9QaI7A3TjuhQLzOix8ChQrvn5ny4MhfIthS5cy6+uK1AhDRvxVdW17y3Xdw==} + /next-transpile-modules@10.0.1: + resolution: {integrity: sha512-4VX/LCMofxIYAVV58UmD+kr8jQflpLWvas/BQ4Co0qWLWzVh06FoZkECkrX5eEZT6oJFqie6+kfbTA3EZCVtdQ==} dependencies: - enhanced-resolve: 5.10.0 + enhanced-resolve: 5.15.0 dev: true - /next@13.0.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA==} - engines: {node: '>=14.6.0'} - hasBin: true - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^6.0.0 || ^7.0.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - dependencies: - '@next/env': 13.0.6 - '@swc/helpers': 0.4.14 - caniuse-lite: 1.0.30001443 - postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.0(react@18.2.0) - optionalDependencies: - '@next/swc-android-arm-eabi': 13.0.6 - '@next/swc-android-arm64': 13.0.6 - '@next/swc-darwin-arm64': 13.0.6 - '@next/swc-darwin-x64': 13.0.6 - '@next/swc-freebsd-x64': 13.0.6 - '@next/swc-linux-arm-gnueabihf': 13.0.6 - '@next/swc-linux-arm64-gnu': 13.0.6 - '@next/swc-linux-arm64-musl': 13.0.6 - '@next/swc-linux-x64-gnu': 13.0.6 - '@next/swc-linux-x64-musl': 13.0.6 - '@next/swc-win32-arm64-msvc': 13.0.6 - '@next/swc-win32-ia32-msvc': 13.0.6 - '@next/swc-win32-x64-msvc': 13.0.6 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - - /next@13.1.2(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Rdnnb2YH///w78FEOR/IQ6TXga+qpth4OqFSem48ng1PYYKr6XBsIk1XVaRcIGM3o6iiHnun0nJvkJHDf+ICyQ==} - engines: {node: '>=14.6.0'} + /next@13.5.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==} + engines: {node: '>=16.14.0'} hasBin: true peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^6.0.0 || ^7.0.0 + '@opentelemetry/api': ^1.1.0 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 peerDependenciesMeta: - fibers: - optional: true - node-sass: + '@opentelemetry/api': optional: true sass: optional: true dependencies: - '@next/env': 13.1.2 - '@swc/helpers': 0.4.14 - caniuse-lite: 1.0.30001443 - postcss: 8.4.14 + '@next/env': 13.5.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001546 + postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.20.12)(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 optionalDependencies: - '@next/swc-android-arm-eabi': 13.1.2 - '@next/swc-android-arm64': 13.1.2 - '@next/swc-darwin-arm64': 13.1.2 - '@next/swc-darwin-x64': 13.1.2 - '@next/swc-freebsd-x64': 13.1.2 - '@next/swc-linux-arm-gnueabihf': 13.1.2 - '@next/swc-linux-arm64-gnu': 13.1.2 - '@next/swc-linux-arm64-musl': 13.1.2 - '@next/swc-linux-x64-gnu': 13.1.2 - '@next/swc-linux-x64-musl': 13.1.2 - '@next/swc-win32-arm64-msvc': 13.1.2 - '@next/swc-win32-ia32-msvc': 13.1.2 - '@next/swc-win32-x64-msvc': 13.1.2 + '@next/swc-darwin-arm64': 13.5.4 + '@next/swc-darwin-x64': 13.5.4 + '@next/swc-linux-arm64-gnu': 13.5.4 + '@next/swc-linux-arm64-musl': 13.5.4 + '@next/swc-linux-x64-gnu': 13.5.4 + '@next/swc-linux-x64-musl': 13.5.4 + '@next/swc-win32-arm64-msvc': 13.5.4 + '@next/swc-win32-ia32-msvc': 13.5.4 + '@next/swc-win32-x64-msvc': 13.5.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -5033,11 +6483,11 @@ packages: whatwg-url: 5.0.0 dev: false - /node-fetch@3.2.10: - resolution: {integrity: sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==} + /node-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - data-uri-to-buffer: 4.0.0 + data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 dev: true @@ -5047,8 +6497,8 @@ packages: hasBin: true dev: false - /node-releases@2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -5057,6 +6507,19 @@ packages: /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 dev: true /nprogress@0.2.0: @@ -5076,15 +6539,17 @@ packages: /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true /object-inspect@1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: false + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - dev: true /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} @@ -5094,7 +6559,6 @@ packages: define-properties: 1.1.4 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true /object.entries@1.1.6: resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} @@ -5103,7 +6567,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.5 - dev: true /object.fromentries@2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} @@ -5112,14 +6575,21 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.5 - dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + dev: false /object.hasown@1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: define-properties: 1.1.4 es-abstract: 1.20.5 - dev: true /object.values@1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} @@ -5128,7 +6598,9 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.5 - dev: true + + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -5142,6 +6614,20 @@ packages: dependencies: wrappy: 1.0.2 + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /open@8.4.0: resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} engines: {node: '>=12'} @@ -5149,19 +6635,27 @@ packages: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 dev: true - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 - dev: true /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -5194,6 +6688,10 @@ packages: engines: {node: '>=6'} dev: false + /packet-reader@1.0.0: + resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + dev: false + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5204,7 +6702,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -5239,6 +6737,10 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} dev: true /path-parse@1.0.7: @@ -5263,6 +6765,84 @@ packages: engines: {node: '>=14.16'} dev: false + /pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + requiresBuild: true + dev: false + optional: true + + /pg-connection-string@2.6.2: + resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + dev: false + + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + /pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + + /pg-pool@3.6.1(pg@8.11.3): + resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + peerDependencies: + pg: '>=8.0' + dependencies: + pg: 8.11.3 + dev: false + + /pg-protocol@1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + + /pg-types@4.0.1: + resolution: {integrity: sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==} + engines: {node: '>=10'} + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.2 + postgres-bytea: 3.0.0 + postgres-date: 2.0.1 + postgres-interval: 3.0.0 + postgres-range: 1.1.3 + + /pg@8.11.3: + resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-connection-string: 2.6.2 + pg-pool: 3.6.1(pg@8.11.3) + pg-protocol: 1.6.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + dev: false + + /pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + dependencies: + split2: 4.2.0 + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -5273,7 +6853,10 @@ packages: /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -5282,31 +6865,29 @@ packages: find-up: 4.1.0 dev: false - /postcss-import@14.1.0(postcss@8.4.20): - resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} - engines: {node: '>=10.0.0'} + /postcss-import@15.1.0(postcss@8.4.31): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.20 + postcss: 8.4.31 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.1 - dev: true + resolve: 1.22.6 - /postcss-js@4.0.0(postcss@8.4.20): - resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + /postcss-js@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: ^8.3.3 + postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.20 - dev: true + postcss: 8.4.31 - /postcss-load-config@3.1.4(postcss@8.4.20): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} + /postcss-load-config@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' ts-node: '>=9.0.0' @@ -5316,76 +6897,104 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.0.6 - postcss: 8.4.20 - yaml: 1.10.2 - dev: true + lilconfig: 2.1.0 + postcss: 8.4.31 + yaml: 2.3.2 - /postcss-nested@6.0.0(postcss@8.4.20): - resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + /postcss-nested@6.0.1(postcss@8.4.31): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.20 - postcss-selector-parser: 6.0.11 - dev: true + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 - /postcss-selector-parser@6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - /postcss@8.4.14: - resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.4 + nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 + + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} dev: false - /postcss@8.4.20: - resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} - engines: {node: ^10 || ^12 || >=14} + /postgres-array@3.0.2: + resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} + engines: {node: '>=12'} + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} dependencies: - nanoid: 3.3.4 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true + obuf: 1.1.2 + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date@2.0.1: + resolution: {integrity: sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==} + engines: {node: '>=12'} + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + + /postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + /postgres-range@1.1.3: + resolution: {integrity: sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==} /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - dev: true /prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: - fast-diff: 1.2.0 + fast-diff: 1.3.0 dev: true - /prettier@2.8.1: - resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} - engines: {node: '>=10.13.0'} + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} hasBin: true dev: true - /prisma@4.8.0: - resolution: {integrity: sha512-DWIhxvxt8f4h6MDd35mz7BJff+fu7HItW3WPDIEpCR3RzcOWyiHBbLQW5/DOgmf+pRLTjwXQob7kuTZVYUAw5w==} - engines: {node: '>=14.17'} + /prisma@5.4.1: + resolution: {integrity: sha512-op9PmU8Bcw5dNAas82wBYTG0yHnpq9/O3bhxbDBrNzwZTwBqsVCxxYRLf6wHNh9HVaDGhgjjHlu1+BcW8qdnBg==} + engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 4.8.0 + '@prisma/engines': 5.4.1 /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -5426,13 +7035,7 @@ packages: dev: false /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -5455,7 +7058,7 @@ packages: unpipe: 1.0.0 dev: false - /reaccord@0.0.1-dev.1669742731656.1c2e96f(@babel/core@7.20.12)(ajv@8.11.2)(discord.js@14.7.1)(typescript@4.9.4): + /reaccord@0.0.1-dev.1669742731656.1c2e96f(@babel/core@7.23.0)(ajv@8.11.2)(discord.js@14.7.1)(typescript@4.9.4): resolution: {integrity: sha512-YzougHMHn48G2I+/lBMEvQ5/jH6bPf0hrAQgd3b+Fcr/RBF+bPCrKUAR+6jFgZaMI37cKfe5uiGEuKVK00RMgQ==} hasBin: true peerDependencies: @@ -5466,7 +7069,7 @@ packages: '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.14.0)(webpack@5.75.0) '@rollup/plugin-typescript': 10.0.1(rollup@3.7.1)(tslib@2.4.1)(typescript@4.9.4) ajv: 8.11.2 - babel-loader: 9.1.0(@babel/core@7.20.12)(webpack@5.75.0) + babel-loader: 9.1.0(@babel/core@7.23.0)(webpack@5.75.0) discord-api-types: 0.37.25 discord.js: 14.7.1 react: 18.2.0 @@ -5476,7 +7079,7 @@ packages: ts-loader: 9.4.1(typescript@4.9.4)(webpack@5.75.0) ts-pattern: 4.0.6 tslib: 2.4.1 - uuid: 9.0.0 + uuid: 9.0.1 webpack: 5.75.0 webpack-node-externals: 3.0.0 yargs: 17.6.2 @@ -5505,14 +7108,14 @@ packages: scheduler: 0.23.0 dev: false - /react-hot-toast@2.4.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==} + /react-hot-toast@2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} engines: {node: '>=10'} peerDependencies: react: '>=16' react-dom: '>=16' dependencies: - goober: 2.1.11(csstype@3.1.1) + goober: 2.1.13(csstype@3.1.2) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -5562,7 +7165,7 @@ packages: engines: {node: '>=0.10.0'} dev: false - /react-remove-scroll-bar@2.3.4(@types/react@18.0.26)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -5572,13 +7175,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.0.26)(react@18.2.0) - tslib: 2.4.1 + react-style-singleton: 2.2.1(@types/react@18.2.25)(react@18.2.0) + tslib: 2.6.2 dev: false - /react-remove-scroll@2.5.5(@types/react@18.0.26)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -5588,34 +7191,33 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.0.26)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.0.26)(react@18.2.0) - tslib: 2.4.1 - use-callback-ref: 1.3.0(@types/react@18.0.26)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.0.26)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.2.25)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.25)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.25)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.25)(react@18.2.0) dev: false - /react-select@5.7.0(@babel/core@7.20.12)(@types/react@18.0.26)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ==} + /react-select@5.7.7(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.7 - '@emotion/cache': 11.10.5 - '@emotion/react': 11.10.5(@babel/core@7.20.12)(@types/react@18.0.26)(react@18.2.0) - '@floating-ui/dom': 1.1.0 - '@types/react-transition-group': 4.4.5 + '@babel/runtime': 7.23.1 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.1(@types/react@18.2.25)(react@18.2.0) + '@floating-ui/dom': 1.5.3 + '@types/react-transition-group': 4.4.7 memoize-one: 6.0.0 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.26)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.25)(react@18.2.0) transitivePeerDependencies: - - '@babel/core' - '@types/react' dev: false @@ -5627,7 +7229,7 @@ packages: react: 18.2.0 dev: false - /react-style-singleton@2.2.1(@types/react@18.0.26)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -5637,11 +7239,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /react-table@7.8.0(react@18.2.0): @@ -5658,7 +7260,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.23.1 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -5709,6 +7311,20 @@ packages: react: 18.2.0 dev: false + /react-youtube@10.1.0(react@18.2.0): + resolution: {integrity: sha512-ZfGtcVpk0SSZtWCSTYOQKhfx5/1cfyEW1JN/mugGNfAxT3rmVJeMbGpA9+e78yG21ls5nc/5uZJETE3cm3knBg==} + engines: {node: '>= 14.x'} + peerDependencies: + react: '>=0.14.1' + dependencies: + fast-deep-equal: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + youtube-player: 5.5.2 + transitivePeerDependencies: + - supports-color + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -5720,7 +7336,6 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: true /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} @@ -5744,11 +7359,28 @@ packages: dependencies: picomatch: 2.3.1 + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: false + /regenerator-runtime@0.13.10: resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==} + dev: true /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} @@ -5757,12 +7389,15 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 functions-have-names: 1.2.3 - dev: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: false /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -5782,6 +7417,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true @@ -5790,6 +7429,14 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /resolve@1.22.6: + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true @@ -5797,12 +7444,10 @@ packages: is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} @@ -5815,27 +7460,42 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: true /rollup@3.7.1: resolution: {integrity: sha512-ek6+FORvI79VQTNlIYtXpIrGEPRlYSNZO+5EcmaozKkRL5L6KLvGDUbM5E+bd6jnHW9fgcK0DKTdWjIsEmNb4g==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: false /rtl-css-js@1.16.0: resolution: {integrity: sha512-Oc7PnzwIEU4M0K1J4h/7qUUaljXhQ0kCObRsZjxs2HjkpKsnoTMvSmvJ4sqgJZd0zBoEfAyTdnK/jMIYvrjySQ==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.23.1 dev: false + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: false /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -5847,7 +7507,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.1.3 is-regex: 1.1.4 - dev: true /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -5886,9 +7545,15 @@ packages: /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false - /semver@7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -5933,6 +7598,15 @@ packages: - supports-color dev: false + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.0 + dev: false + /set-harmonic-interval@1.0.1: resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} engines: {node: '>=6.9'} @@ -5947,12 +7621,10 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -5961,15 +7633,25 @@ packages: get-intrinsic: 1.1.3 object-inspect: 1.12.2 + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sister@3.0.2: + resolution: {integrity: sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==} + dev: false + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true /slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - dev: true /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} @@ -6005,6 +7687,11 @@ packages: deprecated: Please use @jridgewell/sourcemap-codec instead dev: false + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + /split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: @@ -6072,7 +7759,15 @@ packages: internal-slot: 1.0.4 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 - dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} @@ -6080,7 +7775,14 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.5 - dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} @@ -6088,7 +7790,14 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.5 - dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: false /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -6106,6 +7815,16 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -6113,7 +7832,6 @@ packages: /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true /strtok3@7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} @@ -6123,24 +7841,7 @@ packages: peek-readable: 5.0.0 dev: false - /styled-jsx@5.1.0(react@18.2.0): - resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - dependencies: - client-only: 0.0.1 - react: 18.2.0 - dev: false - - /styled-jsx@5.1.1(@babel/core@7.20.12)(react@18.2.0): + /styled-jsx@5.1.1(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -6153,7 +7854,6 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.20.12 client-only: 0.0.1 react: 18.2.0 dev: false @@ -6162,6 +7862,30 @@ packages: resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} dev: false + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + /superjson@1.13.3: + resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} + engines: {node: '>=10'} + dependencies: + copy-anything: 3.0.5 + dev: false + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -6192,41 +7916,56 @@ packages: dependencies: '@pkgr/utils': 2.3.1 tslib: 2.4.1 + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 dev: true - /tailwindcss@3.2.4(postcss@8.4.20): - resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} - engines: {node: '>=12.13.0'} - hasBin: true + /tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.3.3): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: - postcss: ^8.0.9 + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.3.3 + dev: false + + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true dependencies: + '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.5.3 - color-name: 1.1.4 - detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 + fast-glob: 3.3.1 glob-parent: 6.0.2 is-glob: 4.0.3 - lilconfig: 2.0.6 + jiti: 1.20.0 + lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.20 - postcss-import: 14.1.0(postcss@8.4.20) - postcss-js: 4.0.0(postcss@8.4.20) - postcss-load-config: 3.1.4(postcss@8.4.20) - postcss-nested: 6.0.0(postcss@8.4.20) - postcss-selector-parser: 6.0.11 - postcss-value-parser: 4.2.0 - quick-lru: 5.1.1 - resolve: 1.22.1 + postcss: 8.4.31 + postcss-import: 15.1.0(postcss@8.4.31) + postcss-js: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.1(postcss@8.4.31) + postcss-nested: 6.0.1(postcss@8.4.31) + postcss-selector-parser: 6.0.13 + resolve: 1.22.6 + sucrase: 3.34.0 transitivePeerDependencies: - ts-node - dev: true /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -6269,7 +8008,17 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 /throttle-debounce@3.0.1: resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} @@ -6280,17 +8029,28 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + dependencies: + es5-ext: 0.10.62 + next-tick: 1.1.0 + dev: true + /tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: true /tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} dev: false + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -6327,10 +8087,30 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + /ts-api-utils@1.0.3(typescript@4.9.4): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 4.9.4 + dev: true + + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + /ts-easing@0.2.0: resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} dev: false + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /ts-loader@9.4.1(typescript@4.9.4)(webpack@5.75.0): resolution: {integrity: sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==} engines: {node: '>=12.0.0'} @@ -6341,7 +8121,7 @@ packages: chalk: 4.1.2 enhanced-resolve: 5.12.0 micromatch: 4.0.5 - semver: 7.3.8 + semver: 7.5.4 typescript: 4.9.4 webpack: 5.75.0 dev: false @@ -6350,7 +8130,7 @@ packages: resolution: {integrity: sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==} dev: false - /ts-node-dev@2.0.0(@types/node@18.11.18)(typescript@4.9.4): + /ts-node-dev@2.0.0(@types/node@20.8.3)(typescript@4.9.4): resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} engines: {node: '>=0.8.0'} hasBin: true @@ -6369,7 +8149,7 @@ packages: rimraf: 2.7.1 source-map-support: 0.5.21 tree-kill: 1.2.2 - ts-node: 10.9.1(@types/node@18.11.18)(typescript@4.9.4) + ts-node: 10.9.1(@types/node@20.8.3)(typescript@4.9.4) tsconfig: 7.0.0 typescript: 4.9.4 transitivePeerDependencies: @@ -6377,7 +8157,7 @@ packages: - '@swc/wasm' - '@types/node' - /ts-node@10.9.1(@types/node@18.11.18)(typescript@4.9.4): + /ts-node@10.9.1(@types/node@20.8.3)(typescript@4.9.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6396,7 +8176,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.11.18 + '@types/node': 20.8.3 acorn: 8.8.1 acorn-walk: 8.2.0 arg: 4.1.3 @@ -6420,6 +8200,15 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: false + /tsconfig@7.0.0: resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} dependencies: @@ -6435,6 +8224,9 @@ packages: /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tsutils@3.21.0(typescript@4.9.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -6445,65 +8237,75 @@ packages: typescript: 4.9.4 dev: true - /turbo-darwin-64@1.9.4: - resolution: {integrity: sha512-kCmDmxyUWWI+BstTZQKNM87UbNx40C0ZHUTFqs9tmeH7d5+gA2QhqrSoBuwQYw7YYNLpbkqu1ObbppsUlIFPdQ==} + /tsx@3.13.0: + resolution: {integrity: sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A==} + hasBin: true + dependencies: + esbuild: 0.18.20 + get-tsconfig: 4.7.2 + source-map-support: 0.5.21 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /turbo-darwin-64@1.10.15: + resolution: {integrity: sha512-Sik5uogjkRTe1XVP9TC2GryEMOJCaKE2pM/O9uLn4koQDnWKGcLQv+mDU+H+9DXvKLnJnKCD18OVRkwK5tdpoA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.9.4: - resolution: {integrity: sha512-Of64jMEaDDHx0dzU7RwdOuh1lP021vtQun9wmEHhT0Hk/TQF+kDCywoHcY7R5nlSRcssFjysVyhCeZW6CkWrrA==} + /turbo-darwin-arm64@1.10.15: + resolution: {integrity: sha512-xwqyFDYUcl2xwXyGPmHkmgnNm4Cy0oNzMpMOBGRr5x64SErS7QQLR4VHb0ubiR+VAb8M+ECPklU6vD1Gm+wekg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.9.4: - resolution: {integrity: sha512-kajvUnXlUNtgVzLW3Y/RoHrC64G+G0Ky/o1F+oP6QK/T85H8NwNHXq2F6hyIrZPNGbKpPgpetuQ1waIibxJ0rA==} + /turbo-linux-64@1.10.15: + resolution: {integrity: sha512-dM07SiO3RMAJ09Z+uB2LNUSkPp3I1IMF8goH5eLj+d8Kkwoxd/+qbUZOj9RvInyxU/IhlnO9w3PGd3Hp14m/nA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.9.4: - resolution: {integrity: sha512-11P9Y8MoimqUzib3SU3md4g1loLF0FRHpYCbPzUTWPT3beOcdM2nop2u/yFHyBnbSxz1rTWczRJPnNoAki0B/Q==} + /turbo-linux-arm64@1.10.15: + resolution: {integrity: sha512-MkzKLkKYKyrz4lwfjNXH8aTny5+Hmiu4SFBZbx+5C0vOlyp6fV5jZANDBvLXWiDDL4DSEAuCEK/2cmN6FVH1ow==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.9.4: - resolution: {integrity: sha512-2tFcFhuqs1c1DGFAk2wjU0TXrOXKoPdma9vxrTVdwvtz5Nc8XPF8RNW+1jbmRjpumGUkXou6Pe973GSvPjvD5w==} + /turbo-windows-64@1.10.15: + resolution: {integrity: sha512-3TdVU+WEH9ThvQGwV3ieX/XHebtYNHv9HARHauPwmVj3kakoALkpGxLclkHFBLdLKkqDvmHmXtcsfs6cXXRHJg==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.9.4: - resolution: {integrity: sha512-wJfEwUyWXxn6VKD2Vbycke6cm99gJ0llkr9gUnbR06eaRu1TiLY24FcFqN95/wftp0n5nne7b6K7Wz1TLh1fJQ==} + /turbo-windows-arm64@1.10.15: + resolution: {integrity: sha512-l+7UOBCbfadvPMYsX08hyLD+UIoAkg6ojfH+E8aud3gcA1padpjCJTh9gMpm3QdMbKwZteT5uUM+wyi6Rbbyww==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.9.4: - resolution: {integrity: sha512-PqhlMCmu6sOqcVswt1tYL0TV/O0uQ8kUZWfmlEl0EHPusc2R3nzg7KVXrZbXTHXzQH5HE2oJm9iUI0mYz31i7Q==} + /turbo@1.10.15: + resolution: {integrity: sha512-mKKkqsuDAQy1wCCIjCdG+jOCwUflhckDMSRoeBPcIL/CnCl7c5yRDFe7SyaXloUUkt4tUR0rvNIhVCcT7YeQpg==} hasBin: true - requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.9.4 - turbo-darwin-arm64: 1.9.4 - turbo-linux-64: 1.9.4 - turbo-linux-arm64: 1.9.4 - turbo-windows-64: 1.9.4 - turbo-windows-arm64: 1.9.4 + turbo-darwin-64: 1.10.15 + turbo-darwin-arm64: 1.10.15 + turbo-linux-64: 1.10.15 + turbo-linux-arm64: 1.10.15 + turbo-windows-64: 1.10.15 + turbo-windows-arm64: 1.10.15 dev: true /type-check@0.4.0: @@ -6511,12 +8313,10 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 - dev: true /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - dev: true /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} @@ -6528,10 +8328,46 @@ packages: /type@1.2.0: resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - dev: false /type@2.7.2: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: false + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 dev: false /typedarray-to-buffer@3.1.5: @@ -6545,6 +8381,11 @@ packages: engines: {node: '>=4.2.0'} hasBin: true + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -6552,7 +8393,6 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true /undici@5.14.0: resolution: {integrity: sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==} @@ -6571,13 +8411,18 @@ packages: engines: {node: '>= 0.8'} dev: false - /update-browserslist-db@1.0.10(browserslist@4.21.4): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.4 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 @@ -6586,7 +8431,7 @@ packages: dependencies: punycode: 2.1.1 - /use-callback-ref@1.3.0(@types/react@18.0.26)(react@18.2.0): + /use-callback-ref@1.3.0(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -6596,12 +8441,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 react: 18.2.0 - tslib: 2.4.1 + tslib: 2.6.2 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.26)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -6610,11 +8455,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /use-sidecar@1.1.2(@types/react@18.0.26)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -6624,10 +8469,10 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.26 + '@types/react': 18.2.25 detect-node-es: 1.1.0 react: 18.2.0 - tslib: 2.4.1 + tslib: 2.6.2 dev: false /use-sync-external-store@1.2.0(react@18.2.0): @@ -6654,8 +8499,8 @@ packages: engines: {node: '>= 0.4.0'} dev: false - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true dev: false @@ -6672,7 +8517,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: false /web-streams-polyfill@3.2.1: @@ -6711,7 +8556,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.8.1 acorn-import-assertions: 1.8.0(acorn@8.8.1) - browserslist: 4.21.4 + browserslist: 4.22.1 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 es-module-lexer: 0.9.3 @@ -6734,6 +8579,11 @@ packages: - uglify-js dev: false + /webpod@0.0.2: + resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} + hasBin: true + dev: true + /websocket@1.0.34: resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} engines: {node: '>=4.0.0'} @@ -6763,7 +8613,44 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.5 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.11 + dev: false + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: false + + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: false /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -6771,11 +8658,17 @@ packages: hasBin: true dependencies: isexe: 2.0.0 + + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 2.0.0 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true /wrap-ansi@7.0.0: @@ -6827,11 +8720,11 @@ packages: /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + dev: false - /yaml@2.1.3: - resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==} + /yaml@2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} engines: {node: '>= 14'} - dev: true /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -6859,26 +8752,58 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /zod@3.20.2: - resolution: {integrity: sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ==} + /youtube-player@5.5.2: + resolution: {integrity: sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==} + dependencies: + debug: 2.6.9 + load-script: 1.0.0 + sister: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + + /zustand@4.4.3(@types/react@18.2.25)(immer@10.0.3)(react@18.2.0): + resolution: {integrity: sha512-oRy+X3ZazZvLfmv6viIaQmtLOMeij1noakIsK/Y47PWYhT8glfXzQ4j0YcP5i0P0qI1A4rIB//SGROGyZhx91A==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + dependencies: + '@types/react': 18.2.25 + immer: 10.0.3 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /zx@7.1.1: - resolution: {integrity: sha512-5YlTO2AJ+Ku2YuZKSSSqnUKuagcM/f/j4LmHs15O84Ch80Z9gzR09ZK3gR7GV+rc8IFpz2H/XNFtFVmj31yrZA==} + /zx@7.2.3: + resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} engines: {node: '>= 16.0.0'} hasBin: true dependencies: - '@types/fs-extra': 9.0.13 - '@types/minimist': 1.2.2 - '@types/node': 18.11.18 - '@types/ps-tree': 1.1.2 - '@types/which': 2.0.1 - chalk: 5.1.2 - fs-extra: 10.1.0 - globby: 13.1.2 - minimist: 1.2.7 - node-fetch: 3.2.10 + '@types/fs-extra': 11.0.2 + '@types/minimist': 1.2.3 + '@types/node': 18.18.4 + '@types/ps-tree': 1.1.3 + '@types/which': 3.0.0 + chalk: 5.3.0 + fs-extra: 11.1.1 + fx: 30.2.0 + globby: 13.2.2 + minimist: 1.2.8 + node-fetch: 3.3.1 ps-tree: 1.2.0 - which: 2.0.2 - yaml: 2.1.3 + webpod: 0.0.2 + which: 3.0.1 + yaml: 2.3.2 dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 11ac5aec..76b88a6a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: - "app" + - "neue" - "worker" - "packages/*" diff --git a/worker/package.json b/worker/package.json index 71926387..3caac3a7 100644 --- a/worker/package.json +++ b/worker/package.json @@ -13,21 +13,21 @@ "author": "", "license": "ISC", "devDependencies": { - "@types/cors": "^2.8.13", - "@types/express": "^4.17.15", - "@types/node": "^18.11.18", - "@types/react": "^18.0.26", + "@types/cors": "^2.8.14", + "@types/express": "^4.17.18", + "@types/node": "^20.8.3", + "@types/react": "^18.2.25", "typescript": "^4.9.4" }, "dependencies": { - "@trpc/client": "10.9.0", - "@trpc/server": "10.9.0", + "@trpc/client": "10.40.0", + "@trpc/server": "10.40.0", "bhapi": "workspace:*", "common": "workspace:*", "cors": "^2.8.5", "db": "workspace:*", "discord.js": "^14.7.1", - "dotenv": "^16.0.3", + "dotenv": "^16.3.1", "express": "^4.18.2", "logger": "workspace:*", "reaccord": "0.0.1-dev.1669742731656.1c2e96f", @@ -36,6 +36,6 @@ "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", "web-parser": "workspace:*", - "zod": "^3.20.2" + "zod": "^3.22.4" } } \ No newline at end of file