From 502dcf4e54a34afd11f94a7a147f7c5d40532ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 14 Sep 2024 19:43:14 -0500 Subject: [PATCH] feat: more migration --- .github/workflows/cd-assets.yml | 2 +- .github/workflows/cd-averages.yml | 2 +- .github/workflows/cd-rating-asia.yml | 2 +- .github/workflows/cd-rating-eu.yml | 2 +- .github/workflows/cd-rating-latest.yml | 2 +- .github/workflows/cd-rating-na.yml | 2 +- bun.lockb | Bin 425979 -> 427565 bytes package.json | 3 +- .../api/src/app/patreon/auth/[code]/route.ts | 6 +- .../src/app/patreon/refresh/[token]/route.ts | 2 +- .../bot/src/commands/breakdown/render.tsx | 2 +- packages/bot/src/commands/ownedTanks.tsx | 2 +- .../bot/src/commands/ratingLeaderboard.tsx | 2 +- packages/bot/src/commands/replay.tsx | 2 +- .../Graph/components/Margin/index.tsx | 2 +- .../Graph/components/Root/index.tsx | 2 +- .../bot/src/core/discord/addTierChoices.ts | 2 +- packages/core/src/blitz/fetchBlitz.ts | 2 +- packages/core/src/blitz/isValidBlitzId.ts | 2 +- packages/core/src/blitzkit/asset.ts | 4 +- .../blitzkit/getArchivedLatestSeasonNumber.ts | 2 +- packages/core/src/blitzkit/index.ts | 8 +- packages/core/src/blitzkit/tankNames.ts | 2 +- packages/core/src/blitzkit/uniqueGuns.ts | 2 +- packages/core/src/index.ts | 2 +- packages/core/src/patreon/patreonLoginUrl.ts | 4 +- packages/core/src/streams/bkrl.ts | 2 +- packages/core/src/streams/cdon.ts | 2 +- packages/core/src/streams/dds.ts | 2 +- packages/core/src/streams/dids.ts | 2 +- packages/core/src/streams/pvr.ts | 2 +- packages/core/src/streams/rts.ts | 2 +- packages/core/src/streams/scpg.ts | 2 +- packages/scripts/src/averages.ts | 2 +- .../scripts/src/buildAssets/definitions.ts | 2 +- .../scripts/src/buildRatingLeaderboard.ts | 2 +- .../scripts/src/core/blitz/extractArmor.ts | 2 +- .../src/core/blitz/extractModel/index.ts | 2 +- .../scripts/src/core/github/assetCommit.ts | 16 +- .../scripts/src/core/github/commitAssets.ts | 4 +- .../scripts/src/core/github/createBlob.ts | 2 +- .../src/core/github/fetchPreDiscoveredIds.ts | 2 +- packages/scripts/src/discoverIds.ts | 2 +- packages/scripts/src/reviews.ts | 4 +- packages/website-legacy/package.json | 3 +- .../src/app/auth/[provider]/page.tsx | 2 - .../src/app/components/Checks.tsx | 4 +- .../app/docs/[directory]/[document]/page.tsx | 2 +- packages/website-legacy/src/app/layout.tsx | 2 - packages/website-legacy/src/app/not-found.tsx | 2 - packages/website-legacy/src/app/page.tsx | 4 +- .../website-legacy/src/app/settings/page.tsx | 2 - .../components/CompareSectionTitle.tsx | 2 +- .../tools/compare/components/CompareTable.tsx | 2 +- .../src/app/tools/compare/page.tsx | 2 - .../src/app/tools/embed/[embed]/host/page.tsx | 4 +- .../src/app/tools/embed/[embed]/page.tsx | 6 +- .../website-legacy/src/app/tools/layout.tsx | 2 - .../performance/components/BodyLoader.tsx | 2 +- .../tools/performance/components/Header.tsx | 2 - .../app/tools/performance/components/Info.tsx | 8 +- .../components/PlayerCountControl.tsx | 2 - .../performance/components/RowLoader.tsx | 2 +- .../tools/performance/components/Table.tsx | 2 - .../tools/performance/components/Tanks.tsx | 11 +- .../performance/components/TierBreakdown.tsx | 4 +- .../rating/components/PageTurner/index.tsx | 2 +- .../src/app/tools/rating/page.tsx | 4 +- .../src/app/tools/session/page.tsx | 4 +- .../components/Miscellaneous.tsx | 10 +- .../[id]/components/Characteristics/index.tsx | 2 +- .../tankopedia/[id]/components/Content.tsx | 2 - .../MetaSection/components/Stars/index.tsx | 2 +- .../MetaSection/components/Votes/index.tsx | 2 - .../components/Model/MetaSection/index.tsx | 7 +- .../tankopedia/[id]/components/SceneProps.tsx | 2 +- .../src/app/tools/tankopedia/[id]/page.tsx | 2 - .../tankopedia/components/FilterControl.tsx | 4 +- .../tools/tankopedia/components/QuickLink.tsx | 2 +- .../tools/tankopedia/components/SearchBar.tsx | 2 +- .../components/TankSearch/index.tsx | 4 +- .../tankopedia/components/TierFilter.tsx | 2 +- packages/website/package.json | 5 +- packages/website/src/components/Ad.tsx | 4 +- .../Armor/components/ShotDisplay.tsx | 4 +- .../Armor/components/ShotDisplayCard.tsx | 2 +- .../SpacedArmorSceneComponent/index.tsx | 11 +- .../components/StaticArmorSceneComponent.tsx | 2 +- .../src/components/BlitzkitButtonGrayIcon.tsx | 2 +- .../ClassIcon/components/ClassHeavy.tsx | 2 +- .../ClassIcon/components/ClassLight.tsx | 2 +- .../ClassIcon/components/ClassMedium.tsx | 2 +- .../components/ClassTankDestroyer.tsx | 2 +- .../website/src/components/ClassIcon/index.ts | 4 +- .../website/src/components/CopyButton.tsx | 2 +- .../website/src/components/DatePicker.tsx | 2 +- packages/website/src/components/DummyLink.tsx | 2 +- .../src/components/EquipmentManager.tsx | 2 +- .../website/src/components/ExperimentIcon.tsx | 2 +- packages/website/src/components/Footer.astro | 158 +++++++++++++++ .../Footer/components/WoTBVersion.tsx | 13 -- .../src/components/Footer/index.css.ts | 14 -- .../website/src/components/Footer/index.tsx | 182 ------------------ .../website/src/components/HomeHero.astro | 6 +- packages/website/src/components/Link.tsx | 44 ----- .../ModuleButtons/TankComponentButton.tsx | 2 +- .../components/WargamingAccountName.tsx | 34 ++-- .../components/WargamingLoginButton.tsx | 5 +- .../website/src/components/Navbar/index.tsx | 63 +++--- .../website/src/components/PageWrapper.tsx | 2 +- packages/website/src/components/Party3.astro | 13 ++ packages/website/src/components/Party3.tsx | 44 ----- .../website/src/components/PatreonIcon.tsx | 2 +- packages/website/src/components/Plugs.tsx | 15 +- .../website/src/components/ResearchedIcon.tsx | 2 +- .../website/src/components/ScienceIcon.tsx | 2 +- .../website/src/components/ScienceOffIcon.tsx | 2 +- .../website/src/components/Skeleton/index.tsx | 2 +- .../src/components/StickyTableRoot.tsx | 2 - .../website/src/components/TanksEmbed.tsx | 2 +- .../website/src/components/VerifiedIcon.tsx | 2 +- .../website/src/components/WargamingIcon.tsx | 2 +- .../src/core/blitz/applyPitchYawLimits.ts | 2 +- .../src/core/blitzkit/tankToCompareMember.ts | 2 +- .../zustand/createContextualSafeStore.tsx | 2 - packages/website/src/hooks/useAdExempt.ts | 17 +- packages/website/src/hooks/useEccentricity.ts | 2 +- .../src/hooks/useTankModelDefinition.ts | 2 - packages/website/src/layouts/RootLayout.astro | 9 +- packages/website/src/pages/index.astro | 113 ++++++----- packages/website/src/stores/app/index.ts | 20 +- .../website/src/stores/compareEphemeral.ts | 2 - .../website/src/stores/comparePersistent.ts | 4 +- packages/website/src/stores/duel/index.ts | 2 - .../website/src/stores/embedState/index.ts | 2 - packages/website/src/stores/patreonLogin.ts | 15 ++ packages/website/src/stores/session.ts | 4 +- packages/website/src/stores/tankFilters.ts | 2 - .../stores/tankPerformancePersistent/index.ts | 4 +- .../src/stores/tankPerformanceSort/index.ts | 2 - .../website/src/stores/tankopediaEphemeral.ts | 2 - .../src/stores/tankopediaPersistent/index.ts | 4 +- packages/website/src/stores/tankopediaSort.ts | 2 - packages/website/src/stores/wargamingLogin.ts | 15 ++ packages/website/src/types/global.d.ts | 5 + packages/website/tsconfig.json | 4 +- 146 files changed, 481 insertions(+), 666 deletions(-) create mode 100644 packages/website/src/components/Footer.astro delete mode 100644 packages/website/src/components/Footer/components/WoTBVersion.tsx delete mode 100644 packages/website/src/components/Footer/index.css.ts delete mode 100644 packages/website/src/components/Footer/index.tsx delete mode 100644 packages/website/src/components/Link.tsx create mode 100644 packages/website/src/components/Party3.astro delete mode 100644 packages/website/src/components/Party3.tsx create mode 100644 packages/website/src/stores/patreonLogin.ts create mode 100644 packages/website/src/stores/wargamingLogin.ts create mode 100644 packages/website/src/types/global.d.ts diff --git a/.github/workflows/cd-assets.yml b/.github/workflows/cd-assets.yml index 90a9323fa..5f020d874 100644 --- a/.github/workflows/cd-assets.yml +++ b/.github/workflows/cd-assets.yml @@ -120,6 +120,6 @@ jobs: DATABASE_URL: ${{ secrets.DATABASE_URL }} VIDEOS_SHEET: ${{ secrets.VIDEOS_SHEET }} GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} - NEXT_PUBLIC_ASSET_BRANCH: ${{ github.event.inputs.cdn_branch }} + PUBLIC_ASSET_BRANCH: ${{ github.event.inputs.cdn_branch }} WOTB_GLOSSARY: ${{ secrets.WOTB_GLOSSARY }} run: bun build:assets --all-targets --depot --production diff --git a/.github/workflows/cd-averages.yml b/.github/workflows/cd-averages.yml index d7ad4f52c..4c4773ad2 100644 --- a/.github/workflows/cd-averages.yml +++ b/.github/workflows/cd-averages.yml @@ -22,7 +22,7 @@ jobs: - name: Build averages env: - NEXT_PUBLIC_ASSET_BRANCH: main + PUBLIC_ASSET_BRANCH: main DISCORD_CLIENT_ID: ${{ secrets.DISCORD_CLIENT_ID }} GH_TOKEN: ${{ secrets.GH_TOKEN }} DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} diff --git a/.github/workflows/cd-rating-asia.yml b/.github/workflows/cd-rating-asia.yml index 60892adeb..ece687b9c 100644 --- a/.github/workflows/cd-rating-asia.yml +++ b/.github/workflows/cd-rating-asia.yml @@ -17,7 +17,7 @@ jobs: - name: Generate leaderboard env: - NEXT_PUBLIC_ASSET_BRANCH: main + PUBLIC_ASSET_BRANCH: main DISCORD_CLIENT_ID: ${{ secrets.DISCORD_CLIENT_ID }} GH_TOKEN: ${{ secrets.GH_TOKEN }} DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} diff --git a/.github/workflows/cd-rating-eu.yml b/.github/workflows/cd-rating-eu.yml index 5f3f11b46..b719dbcdc 100644 --- a/.github/workflows/cd-rating-eu.yml +++ b/.github/workflows/cd-rating-eu.yml @@ -17,7 +17,7 @@ jobs: - name: Generate leaderboard env: - NEXT_PUBLIC_ASSET_BRANCH: main + PUBLIC_ASSET_BRANCH: main DISCORD_CLIENT_ID: ${{ secrets.DISCORD_CLIENT_ID }} GH_TOKEN: ${{ secrets.GH_TOKEN }} DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} diff --git a/.github/workflows/cd-rating-latest.yml b/.github/workflows/cd-rating-latest.yml index 187a7ef57..802a4ee82 100644 --- a/.github/workflows/cd-rating-latest.yml +++ b/.github/workflows/cd-rating-latest.yml @@ -17,7 +17,7 @@ jobs: - name: Generate all leaderboards env: - NEXT_PUBLIC_ASSET_BRANCH: main + PUBLIC_ASSET_BRANCH: main DISCORD_CLIENT_ID: ${{ secrets.DISCORD_CLIENT_ID }} GH_TOKEN: ${{ secrets.GH_TOKEN }} DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} diff --git a/.github/workflows/cd-rating-na.yml b/.github/workflows/cd-rating-na.yml index edb5af4fc..b9b2e4795 100644 --- a/.github/workflows/cd-rating-na.yml +++ b/.github/workflows/cd-rating-na.yml @@ -17,7 +17,7 @@ jobs: - name: Generate leaderboard env: - NEXT_PUBLIC_ASSET_BRANCH: main + PUBLIC_ASSET_BRANCH: main DISCORD_CLIENT_ID: ${{ secrets.DISCORD_CLIENT_ID }} GH_TOKEN: ${{ secrets.GH_TOKEN }} DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }} diff --git a/bun.lockb b/bun.lockb index 6babcd457d3f4a3a5830eb9ec09b0364472496b3..0deb31d5762e22bf9d09e127e8cd209546a2b3c0 100644 GIT binary patch delta 72547 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 s={aD4CwDuHJKCi`y$LhA=e3lYR2RsxC delta 71110 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 IqIBi|2iP)E>;M1& diff --git a/package.json b/package.json index 0c00fafba..eb7837365 100644 --- a/package.json +++ b/package.json @@ -32,9 +32,10 @@ }, "license": "MIT", "dependencies": { - "lodash": "^4.17.21" + "lodash-es": "^4.17.21" }, "devDependencies": { + "@types/lodash-es": "^4.17.12", "@types/bun": "latest", "@types/node": "^22.5.4", "esbuild": "^0.19.12", diff --git a/packages/api/src/app/patreon/auth/[code]/route.ts b/packages/api/src/app/patreon/auth/[code]/route.ts index 8ec284a7a..714cb846b 100644 --- a/packages/api/src/app/patreon/auth/[code]/route.ts +++ b/packages/api/src/app/patreon/auth/[code]/route.ts @@ -9,12 +9,10 @@ export async function GET( `https://www.patreon.com/api/oauth2/token?code=${ params.code }&grant_type=authorization_code&client_id=${assertSecret( - process.env.NEXT_PUBLIC_PATREON_CLIENT_ID, + process.env.PUBLIC_PATREON_CLIENT_ID, )}&client_secret=${assertSecret( process.env.PATREON_CLIENT_SECRET, - )}&redirect_uri=${assertSecret( - process.env.NEXT_PUBLIC_PATREON_REDIRECT_URI, - )}`, + )}&redirect_uri=${assertSecret(process.env.PUBLIC_PATREON_REDIRECT_URI)}`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, diff --git a/packages/api/src/app/patreon/refresh/[token]/route.ts b/packages/api/src/app/patreon/refresh/[token]/route.ts index 22106a448..bf58e39b7 100644 --- a/packages/api/src/app/patreon/refresh/[token]/route.ts +++ b/packages/api/src/app/patreon/refresh/[token]/route.ts @@ -9,7 +9,7 @@ export async function GET( `https://www.patreon.com/api/oauth2/token?grant_type=refresh_token&refresh_token=${ params.token }&client_id=${assertSecret( - process.env.NEXT_PUBLIC_PATREON_CLIENT_ID, + process.env.PUBLIC_PATREON_CLIENT_ID, )}&client_secret=${assertSecret(process.env.PATREON_CLIENT_SECRET)}`, { method: 'POST' }, ); diff --git a/packages/bot/src/commands/breakdown/render.tsx b/packages/bot/src/commands/breakdown/render.tsx index 0182c8d13..c804674eb 100644 --- a/packages/bot/src/commands/breakdown/render.tsx +++ b/packages/bot/src/commands/breakdown/render.tsx @@ -12,7 +12,7 @@ import { tankDefinitions, } from '@blitzkit/core'; import { Locale } from 'discord.js'; -import { chunk } from 'lodash'; +import { chunk } from 'lodash-es'; import * as Breakdown from '../../components/Breakdown'; import { CommandWrapper } from '../../components/CommandWrapper'; import { NoData } from '../../components/NoData'; diff --git a/packages/bot/src/commands/ownedTanks.tsx b/packages/bot/src/commands/ownedTanks.tsx index b42f2f41f..e20a25369 100644 --- a/packages/bot/src/commands/ownedTanks.tsx +++ b/packages/bot/src/commands/ownedTanks.tsx @@ -9,7 +9,7 @@ import { getTankStats, tankDefinitions, } from '@blitzkit/core'; -import { chunk } from 'lodash'; +import { chunk } from 'lodash-es'; import markdownEscape from 'markdown-escape'; import { addTierChoices } from '../core/discord/addTierChoices'; import { addUsernameChoices } from '../core/discord/addUsernameChoices'; diff --git a/packages/bot/src/commands/ratingLeaderboard.tsx b/packages/bot/src/commands/ratingLeaderboard.tsx index ceccfeeaf..3eca65e3f 100644 --- a/packages/bot/src/commands/ratingLeaderboard.tsx +++ b/packages/bot/src/commands/ratingLeaderboard.tsx @@ -20,7 +20,7 @@ import { Locale, SlashCommandSubcommandBuilder, } from 'discord.js'; -import { range } from 'lodash'; +import { range } from 'lodash-es'; import markdownEscape from 'markdown-escape'; import { CommandWrapper } from '../components/CommandWrapper'; import * as Leaderboard from '../components/Leaderboard'; diff --git a/packages/bot/src/commands/replay.tsx b/packages/bot/src/commands/replay.tsx index 021cb0ead..dbe2b27a0 100644 --- a/packages/bot/src/commands/replay.tsx +++ b/packages/bot/src/commands/replay.tsx @@ -9,7 +9,7 @@ import { tankIcon, TIER_ROMAN_NUMERALS, } from '@blitzkit/core'; -import { clamp } from 'lodash'; +import { clamp } from 'lodash-es'; import { CommandWrapper } from '../components/CommandWrapper'; import { TitleBar } from '../components/TitleBar'; import { iconPng } from '../core/blitzkit/iconPng'; diff --git a/packages/bot/src/components/Graph/components/Margin/index.tsx b/packages/bot/src/components/Graph/components/Margin/index.tsx index 66b64df5e..049eda311 100644 --- a/packages/bot/src/components/Graph/components/Margin/index.tsx +++ b/packages/bot/src/components/Graph/components/Margin/index.tsx @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { theme } from '../../../../stitches.config'; import { MarginInputProps } from '../Root'; import { MarginOrientation } from './constants'; diff --git a/packages/bot/src/components/Graph/components/Root/index.tsx b/packages/bot/src/components/Graph/components/Root/index.tsx index 6f621f07d..9d13064bb 100644 --- a/packages/bot/src/components/Graph/components/Root/index.tsx +++ b/packages/bot/src/components/Graph/components/Root/index.tsx @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { ReactNode } from 'react'; import { theme } from '../../../../stitches.config'; import { Margin } from '../Margin'; diff --git a/packages/bot/src/core/discord/addTierChoices.ts b/packages/bot/src/core/discord/addTierChoices.ts index 30ed76f22..70f8bdfde 100644 --- a/packages/bot/src/core/discord/addTierChoices.ts +++ b/packages/bot/src/core/discord/addTierChoices.ts @@ -4,7 +4,7 @@ import { Locale, SlashCommandStringOption, } from 'discord.js'; -import { range } from 'lodash'; +import { range } from 'lodash-es'; import { translator } from '../localization/translator'; import { localizationObject } from './localizationObject'; diff --git a/packages/core/src/blitz/fetchBlitz.ts b/packages/core/src/blitz/fetchBlitz.ts index 5592d8dcd..cffaacc87 100644 --- a/packages/core/src/blitz/fetchBlitz.ts +++ b/packages/core/src/blitz/fetchBlitz.ts @@ -73,7 +73,7 @@ export function fetchBlitz( queue.push({ url: `https://api.wotblitz.${region}/wotb/${path}/?${Object.entries({ application_id: assertSecret( - process.env.NEXT_PUBLIC_WARGAMING_APPLICATION_ID, + process.env.PUBLIC_WARGAMING_APPLICATION_ID, ), ...params, }) diff --git a/packages/core/src/blitz/isValidBlitzId.ts b/packages/core/src/blitz/isValidBlitzId.ts index cc992d555..89ee96b03 100644 --- a/packages/core/src/blitz/isValidBlitzId.ts +++ b/packages/core/src/blitz/isValidBlitzId.ts @@ -11,7 +11,7 @@ export async function isValidBlitzId(id: number, token?: string) { const json = await fetch( `https://api.wotblitz.${region}/wotb/account/info/?account_id=${id}&application_id=${assertSecret( - process.env.NEXT_PUBLIC_WARGAMING_APPLICATION_ID, + process.env.PUBLIC_WARGAMING_APPLICATION_ID, )}${ token === undefined ? '' : `&access_token=${token}` }&fields=account_id%2C-account_id`, diff --git a/packages/core/src/blitzkit/asset.ts b/packages/core/src/blitzkit/asset.ts index f4b06452b..7a288b465 100644 --- a/packages/core/src/blitzkit/asset.ts +++ b/packages/core/src/blitzkit/asset.ts @@ -2,6 +2,6 @@ import { assertSecret } from './assertSecret'; export function asset(path: string) { return `https://raw.githubusercontent.com/${assertSecret( - process.env.NEXT_PUBLIC_ASSET_REPO, - )}/${assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH)}/${path}`; + process.env.PUBLIC_ASSET_REPO, + )}/${assertSecret(process.env.PUBLIC_ASSET_BRANCH)}/${path}`; } diff --git a/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts b/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts index 7ba551583..9da80ed52 100644 --- a/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts +++ b/packages/core/src/blitzkit/getArchivedLatestSeasonNumber.ts @@ -17,7 +17,7 @@ export async function getArchivedLatestSeasonNumber() { const regionsURL = ( (await fetch( `https://api.github.com/repos/tresabhi/${assertSecret( - process.env.NEXT_PUBLIC_ASSET_REPO, + process.env.PUBLIC_ASSET_REPO, )}/git/trees/main`, ).then((response) => response.json())) as GitHubTrees ).tree.find(({ path }) => path === 'regions')!.url; diff --git a/packages/core/src/blitzkit/index.ts b/packages/core/src/blitzkit/index.ts index 6efb3af1c..b994b5c4f 100644 --- a/packages/core/src/blitzkit/index.ts +++ b/packages/core/src/blitzkit/index.ts @@ -12,10 +12,10 @@ export * from './assertSecret'; // export * from './discoveredIdDefinitions'; // export * from './emblemURL'; // export * from './equipmentDefinitions'; -// export * from './eventManager'; +export * from './eventManager'; // export * from './fetchCdonLz4'; // export * from './flagUserActivity'; -// export * from './gameDefinitions'; +export * from './gameDefinitions'; // export * from './getArchivedLatestSeasonNumber'; // export * from './getArchivedRatingInfo'; // export * from './getArchivedRatingLeaderboard'; @@ -36,8 +36,8 @@ export * from './assertSecret'; // export * from './reviews'; // export * from './skillDefinitions'; // export * from './sum'; -// export * from './superCompress'; -// export * from './superDecompress'; +export * from './superCompress'; +export * from './superDecompress'; // export * from './tankDefinitions'; // export * from './tankIcon'; // export * from './tankNames'; diff --git a/packages/core/src/blitzkit/tankNames.ts b/packages/core/src/blitzkit/tankNames.ts index 643b28afd..9cfb469c8 100644 --- a/packages/core/src/blitzkit/tankNames.ts +++ b/packages/core/src/blitzkit/tankNames.ts @@ -1,4 +1,4 @@ -import { deburr } from 'lodash'; +import { deburr } from 'lodash-es'; import { camouflageDefinitions, tankDefinitionsArray } from '.'; export const tankNames = Promise.all([ diff --git a/packages/core/src/blitzkit/uniqueGuns.ts b/packages/core/src/blitzkit/uniqueGuns.ts index f6af5ac55..b9db83f25 100644 --- a/packages/core/src/blitzkit/uniqueGuns.ts +++ b/packages/core/src/blitzkit/uniqueGuns.ts @@ -1,4 +1,4 @@ -import { forEachRight } from 'lodash'; +import { forEachRight } from 'lodash-es'; import { GunDefinition, TurretDefinition } from './tankDefinitions'; export function uniqueGuns(turrets: TurretDefinition[]) { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index d8237e00d..43e808fdd 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,4 +1,4 @@ -// export * from './blitz'; +export * from './blitz'; export * from './blitzkit'; // export * from './blitzstars'; // export * from './databases'; diff --git a/packages/core/src/patreon/patreonLoginUrl.ts b/packages/core/src/patreon/patreonLoginUrl.ts index 4bdf9b5e6..3341bdab4 100644 --- a/packages/core/src/patreon/patreonLoginUrl.ts +++ b/packages/core/src/patreon/patreonLoginUrl.ts @@ -3,8 +3,8 @@ import { assertSecret } from '../blitzkit/assertSecret'; export function patreonLoginUrl() { const params = new URLSearchParams({ response_type: 'code', - client_id: assertSecret(process.env.NEXT_PUBLIC_PATREON_CLIENT_ID), - redirect_uri: assertSecret(process.env.NEXT_PUBLIC_PATREON_REDIRECT_URI), + client_id: assertSecret(process.env.PUBLIC_PATREON_CLIENT_ID), + redirect_uri: assertSecret(process.env.PUBLIC_PATREON_REDIRECT_URI), scope: 'identity', }); diff --git a/packages/core/src/streams/bkrl.ts b/packages/core/src/streams/bkrl.ts index 19bdf31d9..113797907 100644 --- a/packages/core/src/streams/bkrl.ts +++ b/packages/core/src/streams/bkrl.ts @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { ReadStream, WriteStream } from './buffer'; export enum BkrlFormat { diff --git a/packages/core/src/streams/cdon.ts b/packages/core/src/streams/cdon.ts index f9257b8fb..ecf66521f 100644 --- a/packages/core/src/streams/cdon.ts +++ b/packages/core/src/streams/cdon.ts @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { ReadStream, WriteStream } from './buffer'; enum ValueType { diff --git a/packages/core/src/streams/dds.ts b/packages/core/src/streams/dds.ts index a57bf589a..816db8710 100644 --- a/packages/core/src/streams/dds.ts +++ b/packages/core/src/streams/dds.ts @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { Vector3Tuple, Vector4Tuple } from 'three'; import { WindowsReadStream } from './windows'; diff --git a/packages/core/src/streams/dids.ts b/packages/core/src/streams/dids.ts index ac57cd59e..e2c70e042 100644 --- a/packages/core/src/streams/dids.ts +++ b/packages/core/src/streams/dids.ts @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { ReadStream, WriteStream } from './buffer'; export class DidsReadStream extends ReadStream { diff --git a/packages/core/src/streams/pvr.ts b/packages/core/src/streams/pvr.ts index d23360ddf..979b9c396 100644 --- a/packages/core/src/streams/pvr.ts +++ b/packages/core/src/streams/pvr.ts @@ -1,4 +1,4 @@ -import { clamp, isEqual, times } from 'lodash'; +import { clamp, isEqual, times } from 'lodash-es'; import { ReadStream } from './buffer'; export enum PvrFlags { diff --git a/packages/core/src/streams/rts.ts b/packages/core/src/streams/rts.ts index 657ef046b..5fba32c74 100644 --- a/packages/core/src/streams/rts.ts +++ b/packages/core/src/streams/rts.ts @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { IndividualTankStats } from '..'; import { BlitzStats } from '../statistics/compositeStats/constants'; import { ReadStream, WriteStream } from './buffer'; diff --git a/packages/core/src/streams/scpg.ts b/packages/core/src/streams/scpg.ts index 8d8401b71..f02d655c2 100644 --- a/packages/core/src/streams/scpg.ts +++ b/packages/core/src/streams/scpg.ts @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { ReadStream } from './buffer'; enum KAType { diff --git a/packages/scripts/src/averages.ts b/packages/scripts/src/averages.ts index bd5337984..7d54ab84a 100644 --- a/packages/scripts/src/averages.ts +++ b/packages/scripts/src/averages.ts @@ -14,7 +14,7 @@ import { getTankStats, idToRegion, } from '@blitzkit/core'; -import { chunk, times } from 'lodash'; +import { chunk, times } from 'lodash-es'; import { commitAssets } from './core/github/commitAssets'; import { fetchPreDiscoveredIds } from './core/github/fetchPreDiscoveredIds'; diff --git a/packages/scripts/src/buildAssets/definitions.ts b/packages/scripts/src/buildAssets/definitions.ts index 6972e68c9..852a19f3e 100644 --- a/packages/scripts/src/buildAssets/definitions.ts +++ b/packages/scripts/src/buildAssets/definitions.ts @@ -451,7 +451,7 @@ export async function definitions() { const wargamingTankopedia = (await fetch( `https://api.wotblitz.com/wotb/encyclopedia/vehicles/?application_id=${assertSecret( - process.env.NEXT_PUBLIC_WARGAMING_APPLICATION_ID, + process.env.PUBLIC_WARGAMING_APPLICATION_ID, )}&fields=description`, ).then((response) => response.json())) as { data: { [key: number]: { description: null | string } }; diff --git a/packages/scripts/src/buildRatingLeaderboard.ts b/packages/scripts/src/buildRatingLeaderboard.ts index 352a9b73f..af54dc6b0 100644 --- a/packages/scripts/src/buildRatingLeaderboard.ts +++ b/packages/scripts/src/buildRatingLeaderboard.ts @@ -14,7 +14,7 @@ import { regionSubdomainToRegion, superCompress, } from '@blitzkit/core'; -import { chunk } from 'lodash'; +import { chunk } from 'lodash-es'; import { argv } from 'process'; import { commitAssets } from './core/github/commitAssets'; import { FileChange } from './core/github/commitMultipleFiles'; diff --git a/packages/scripts/src/core/blitz/extractArmor.ts b/packages/scripts/src/core/blitz/extractArmor.ts index fc30d840c..a5c6e6b2d 100644 --- a/packages/scripts/src/core/blitz/extractArmor.ts +++ b/packages/scripts/src/core/blitz/extractArmor.ts @@ -5,7 +5,7 @@ import { VertexAttribute, } from '@blitzkit/core'; import { Accessor, Document, Node, Scene } from '@gltf-transform/core'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { vertexAttributeGLTFName, vertexAttributeGltfVectorSizes, diff --git a/packages/scripts/src/core/blitz/extractModel/index.ts b/packages/scripts/src/core/blitz/extractModel/index.ts index abb0fdcac..64281df2b 100644 --- a/packages/scripts/src/core/blitz/extractModel/index.ts +++ b/packages/scripts/src/core/blitz/extractModel/index.ts @@ -6,7 +6,7 @@ import { VertexAttribute, } from '@blitzkit/core'; import { Document, Material, Node, Scene } from '@gltf-transform/core'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { dirname } from 'path'; import { Matrix4, Quaternion, Vector3, Vector4Tuple } from 'three'; import { readDVPLFile } from '../readDVPLFile'; diff --git a/packages/scripts/src/core/github/assetCommit.ts b/packages/scripts/src/core/github/assetCommit.ts index 8ab1f9438..40ab2b77d 100644 --- a/packages/scripts/src/core/github/assetCommit.ts +++ b/packages/scripts/src/core/github/assetCommit.ts @@ -11,7 +11,7 @@ export class AssetCommit { const blob = await createBlob( 'tresabhi', - assertSecret(process.env.NEXT_PUBLIC_ASSET_REPO), + assertSecret(process.env.PUBLIC_ASSET_REPO), { content, encoding, @@ -28,14 +28,14 @@ export class AssetCommit { const latestCommitSha = ( await octokit.git.getRef({ owner: 'tresabhi', - repo: assertSecret(process.env.NEXT_PUBLIC_ASSET_REPO), - ref: `heads/${assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH)}`, + repo: assertSecret(process.env.PUBLIC_ASSET_REPO), + ref: `heads/${assertSecret(process.env.PUBLIC_ASSET_BRANCH)}`, }) ).data.object.sha; const treeSha = ( await octokit.git.getCommit({ owner: 'tresabhi', - repo: assertSecret(process.env.NEXT_PUBLIC_ASSET_REPO), + repo: assertSecret(process.env.PUBLIC_ASSET_REPO), commit_sha: latestCommitSha, }) ).data.tree.sha; @@ -43,21 +43,21 @@ export class AssetCommit { const { data: treeData } = await octokit.git.createTree({ owner: 'tresabhi', - repo: assertSecret(process.env.NEXT_PUBLIC_ASSET_REPO), + repo: assertSecret(process.env.PUBLIC_ASSET_REPO), base_tree: treeSha, tree: blobs, }); const { data: newCommitData } = await octokit.git.createCommit({ owner: 'tresabhi', - repo: assertSecret(process.env.NEXT_PUBLIC_ASSET_REPO), + repo: assertSecret(process.env.PUBLIC_ASSET_REPO), message: this.message, tree: treeData.sha, parents: [latestCommitSha], }); await octokit.git.updateRef({ owner: 'tresabhi', - repo: assertSecret(process.env.NEXT_PUBLIC_ASSET_REPO), - ref: `heads/${assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH)}`, + repo: assertSecret(process.env.PUBLIC_ASSET_REPO), + ref: `heads/${assertSecret(process.env.PUBLIC_ASSET_BRANCH)}`, sha: newCommitData.sha, }); } diff --git a/packages/scripts/src/core/github/commitAssets.ts b/packages/scripts/src/core/github/commitAssets.ts index 6d0ee075d..5b9ab72e0 100644 --- a/packages/scripts/src/core/github/commitAssets.ts +++ b/packages/scripts/src/core/github/commitAssets.ts @@ -8,8 +8,8 @@ export async function commitAssets(message: string, changes: FileChange[]) { await commitMultipleFiles( 'tresabhi', - assertSecret(process.env.NEXT_PUBLIC_ASSET_REPO), - assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH), + assertSecret(process.env.PUBLIC_ASSET_REPO), + assertSecret(process.env.PUBLIC_ASSET_BRANCH), `${message} - ${new Date().toDateString()}`, changes, ); diff --git a/packages/scripts/src/core/github/createBlob.ts b/packages/scripts/src/core/github/createBlob.ts index 2677521da..45ccd7cd7 100644 --- a/packages/scripts/src/core/github/createBlob.ts +++ b/packages/scripts/src/core/github/createBlob.ts @@ -1,4 +1,4 @@ -import { throttle } from 'lodash'; +import { throttle } from 'lodash-es'; import { FileChange } from './commitMultipleFiles'; import { octokit } from './octokit'; diff --git a/packages/scripts/src/core/github/fetchPreDiscoveredIds.ts b/packages/scripts/src/core/github/fetchPreDiscoveredIds.ts index 7f37658cd..c14d779ae 100644 --- a/packages/scripts/src/core/github/fetchPreDiscoveredIds.ts +++ b/packages/scripts/src/core/github/fetchPreDiscoveredIds.ts @@ -3,7 +3,7 @@ import { DidsReadStream, DiscoveredIdsDefinitions, } from '@blitzkit/core'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { decompress } from 'lz4js'; import ProgressBar from 'progress'; diff --git a/packages/scripts/src/discoverIds.ts b/packages/scripts/src/discoverIds.ts index f28c3c481..0123f6181 100644 --- a/packages/scripts/src/discoverIds.ts +++ b/packages/scripts/src/discoverIds.ts @@ -10,7 +10,7 @@ import { idToRegion, retryAbleBlitzFetchEvent, } from '@blitzkit/core'; -import { chunk, times, uniq } from 'lodash'; +import { chunk, times, uniq } from 'lodash-es'; import { compress, decompress } from 'lz4js'; import { commitAssets } from './core/github/commitAssets'; diff --git a/packages/scripts/src/reviews.ts b/packages/scripts/src/reviews.ts index 9d1edf111..655b8ab18 100644 --- a/packages/scripts/src/reviews.ts +++ b/packages/scripts/src/reviews.ts @@ -9,7 +9,7 @@ import { } from '@blitzkit/core'; import { readdir } from 'fs/promises'; import { google } from 'googleapis'; -import { cloneDeep, uniqBy } from 'lodash'; +import { cloneDeep, uniqBy } from 'lodash-es'; import { parse as parseYaml } from 'yaml'; import { DATA } from './buildAssets/constants'; import { @@ -118,7 +118,7 @@ for (const tank of tanksSanitized) { ({ id: item.id!.videoId!, author: item.snippet!.channelId!, - } satisfies Video), + }) satisfies Video, ), }; diff --git a/packages/website-legacy/package.json b/packages/website-legacy/package.json index b3a7306d8..56aed9621 100644 --- a/packages/website-legacy/package.json +++ b/packages/website-legacy/package.json @@ -29,8 +29,7 @@ "react-fuzzysort": "^1.0.1", "immer": "^10.1.1", "@vanilla-extract/dynamic": "^2.1.2", - "zustand": "^4.5.5", - "react-promise-suspense": "^0.3.4" + "zustand": "^4.5.5" }, "devDependencies": { "@types/react-dom": "^18", diff --git a/packages/website-legacy/src/app/auth/[provider]/page.tsx b/packages/website-legacy/src/app/auth/[provider]/page.tsx index b98096fab..a3e9773e7 100644 --- a/packages/website-legacy/src/app/auth/[provider]/page.tsx +++ b/packages/website-legacy/src/app/auth/[provider]/page.tsx @@ -1,5 +1,3 @@ -'use client'; - import { Flex, Heading, Text } from '@radix-ui/themes'; import { useRouter } from 'next/navigation'; import { useEffect } from 'react'; diff --git a/packages/website-legacy/src/app/components/Checks.tsx b/packages/website-legacy/src/app/components/Checks.tsx index 1962110e8..7f08b73b6 100644 --- a/packages/website-legacy/src/app/components/Checks.tsx +++ b/packages/website-legacy/src/app/components/Checks.tsx @@ -1,5 +1,3 @@ -'use client'; - import { assertSecret, idToRegion } from '@blitzkit/core'; import { Button, Flex, Heading, Link, Text } from '@radix-ui/themes'; import { usePathname } from 'next/navigation'; @@ -78,7 +76,7 @@ export function Checks() { `https://api.worldoftanks.${idToRegion( wargaming.id, )}/wot/auth/prolongate/?application_id=${assertSecret( - process.env.NEXT_PUBLIC_WARGAMING_APPLICATION_ID, + process.env.PUBLIC_WARGAMING_APPLICATION_ID, )}&access_token=${wargaming.token}`, ) .then((response) => response.json() as Promise) diff --git a/packages/website-legacy/src/app/docs/[directory]/[document]/page.tsx b/packages/website-legacy/src/app/docs/[directory]/[document]/page.tsx index 779eb7d31..22cc6cfd9 100644 --- a/packages/website-legacy/src/app/docs/[directory]/[document]/page.tsx +++ b/packages/website-legacy/src/app/docs/[directory]/[document]/page.tsx @@ -13,7 +13,7 @@ export default function Page({ const markdown = use( fetch( `https://raw.githubusercontent.com/tresabhi/blitzkit/${assertSecret( - process.env.NEXT_PUBLIC_ASSET_BRANCH, + process.env.PUBLIC_ASSET_BRANCH, )}/docs/${params.directory}/${params.document}.md`, ).then((response) => response.text()), ); diff --git a/packages/website-legacy/src/app/layout.tsx b/packages/website-legacy/src/app/layout.tsx index 50f64de05..fa14e9662 100644 --- a/packages/website-legacy/src/app/layout.tsx +++ b/packages/website-legacy/src/app/layout.tsx @@ -1,5 +1,3 @@ -'use client'; - import { Flex, Theme } from '@radix-ui/themes'; import '@radix-ui/themes/styles.css'; import { Roboto_Flex } from 'next/font/google'; diff --git a/packages/website-legacy/src/app/not-found.tsx b/packages/website-legacy/src/app/not-found.tsx index b9b9e6510..2909fce86 100644 --- a/packages/website-legacy/src/app/not-found.tsx +++ b/packages/website-legacy/src/app/not-found.tsx @@ -1,5 +1,3 @@ -'use client'; - import { DiscordLogoIcon, HomeIcon } from '@radix-ui/react-icons'; import { Button, Flex, Heading, Text } from '@radix-ui/themes'; import Link from 'next/link'; diff --git a/packages/website-legacy/src/app/page.tsx b/packages/website-legacy/src/app/page.tsx index 2372f5682..cdc95374a 100644 --- a/packages/website-legacy/src/app/page.tsx +++ b/packages/website-legacy/src/app/page.tsx @@ -1,7 +1,6 @@ -'use client'; - import { Flex, Heading } from '@radix-ui/themes'; import { Hero } from '../../../website/src/components/Hero'; +import { Plugs } from '../../../website/src/components/Plugs'; import { ToolCard } from '../../../website/src/components/ToolCard'; import { compareTool, @@ -14,7 +13,6 @@ import { } from '../../../website/src/constants/tools'; import { AdMidSectionResponsive } from '../components/AdMidSectionResponsive'; import { useAdExempt } from '../hooks/useAdExempt'; -import { Plugs } from '../../../website/src/components/Plugs'; export default function Page() { const exempt = useAdExempt(); diff --git a/packages/website-legacy/src/app/settings/page.tsx b/packages/website-legacy/src/app/settings/page.tsx index 35cb4902c..0ab5fc4f0 100644 --- a/packages/website-legacy/src/app/settings/page.tsx +++ b/packages/website-legacy/src/app/settings/page.tsx @@ -1,5 +1,3 @@ -'use client'; - import { Flex, Heading, Switch, Text } from '@radix-ui/themes'; import { PageWrapper } from '../../components/PageWrapper'; import * as App from '../../stores/app'; diff --git a/packages/website-legacy/src/app/tools/compare/components/CompareSectionTitle.tsx b/packages/website-legacy/src/app/tools/compare/components/CompareSectionTitle.tsx index 83009f647..bc6b3481f 100644 --- a/packages/website-legacy/src/app/tools/compare/components/CompareSectionTitle.tsx +++ b/packages/website-legacy/src/app/tools/compare/components/CompareSectionTitle.tsx @@ -1,5 +1,5 @@ import { Heading, Table } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { StickyColumnHeaderCell } from '../../../../components/StickyColumnHeaderCell'; import * as CompareEphemeral from '../../../../stores/compareEphemeral'; diff --git a/packages/website-legacy/src/app/tools/compare/components/CompareTable.tsx b/packages/website-legacy/src/app/tools/compare/components/CompareTable.tsx index da34495d8..dd2560342 100644 --- a/packages/website-legacy/src/app/tools/compare/components/CompareTable.tsx +++ b/packages/website-legacy/src/app/tools/compare/components/CompareTable.tsx @@ -10,7 +10,7 @@ import { } from '@blitzkit/core'; import { ComponentPlaceholderIcon } from '@radix-ui/react-icons'; import { Button, Flex, Popover, Slider, Table, Text } from '@radix-ui/themes'; -import { debounce, times } from 'lodash'; +import { debounce, times } from 'lodash-es'; import { use } from 'react'; import { BlitzkitButtonGrayIcon } from '../../../../components/BlitzkitButtonGrayIcon'; import { ConsumablesManager } from '../../../../components/ConsumablesManager'; diff --git a/packages/website-legacy/src/app/tools/compare/page.tsx b/packages/website-legacy/src/app/tools/compare/page.tsx index 1af189176..7470dc6d2 100644 --- a/packages/website-legacy/src/app/tools/compare/page.tsx +++ b/packages/website-legacy/src/app/tools/compare/page.tsx @@ -1,5 +1,3 @@ -'use client'; - import { createDefaultSkills, equipmentDefinitions, diff --git a/packages/website-legacy/src/app/tools/embed/[embed]/host/page.tsx b/packages/website-legacy/src/app/tools/embed/[embed]/host/page.tsx index 8d8f7d815..56de3c850 100644 --- a/packages/website-legacy/src/app/tools/embed/[embed]/host/page.tsx +++ b/packages/website-legacy/src/app/tools/embed/[embed]/host/page.tsx @@ -1,13 +1,11 @@ -'use client'; - import { Code, Heading } from '@radix-ui/themes'; import { useSearchParams } from 'next/navigation'; import { useMemo } from 'react'; -import { PageWrapper } from '../../../../../components/PageWrapper'; import { configurations, extractEmbedConfigDefaults, } from '../../../../../../../website/src/constants/embeds'; +import { PageWrapper } from '../../../../../components/PageWrapper'; import * as EmbedState from '../../../../../stores/embedState'; export interface EmbedPreviewControllerProps { diff --git a/packages/website-legacy/src/app/tools/embed/[embed]/page.tsx b/packages/website-legacy/src/app/tools/embed/[embed]/page.tsx index 72c33be8d..c586f512c 100644 --- a/packages/website-legacy/src/app/tools/embed/[embed]/page.tsx +++ b/packages/website-legacy/src/app/tools/embed/[embed]/page.tsx @@ -1,5 +1,3 @@ -'use client'; - import { imgur } from '@blitzkit/core'; import { CodeIcon, @@ -11,12 +9,12 @@ import { WidthIcon, } from '@radix-ui/react-icons'; import { Box, Button, Flex, Heading, ScrollArea, Text } from '@radix-ui/themes'; -import { capitalize, startCase } from 'lodash'; +import { capitalize, startCase } from 'lodash-es'; import { ReactNode, useEffect, useRef, useState } from 'react'; import { stringify } from 'urlon'; +import { configurations } from '../../../../../../website/src/constants/embeds'; import { CopyButton } from '../../../../components/CopyButton'; import { PageWrapper } from '../../../../components/PageWrapper'; -import { configurations } from '../../../../../../website/src/constants/embeds'; import * as App from '../../../../stores/app'; import * as EmbedState from '../../../../stores/embedState'; import { EmbedConfig } from '../../../../stores/embedState'; diff --git a/packages/website-legacy/src/app/tools/layout.tsx b/packages/website-legacy/src/app/tools/layout.tsx index bbbb7e8c7..e240bf8bd 100644 --- a/packages/website-legacy/src/app/tools/layout.tsx +++ b/packages/website-legacy/src/app/tools/layout.tsx @@ -1,5 +1,3 @@ -'use client'; - import { imgur, ImgurSize } from '@blitzkit/core'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; diff --git a/packages/website-legacy/src/app/tools/performance/components/BodyLoader.tsx b/packages/website-legacy/src/app/tools/performance/components/BodyLoader.tsx index 21daa866e..e48bd88d2 100644 --- a/packages/website-legacy/src/app/tools/performance/components/BodyLoader.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/BodyLoader.tsx @@ -1,5 +1,5 @@ import { Table } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { RowLoader } from './RowLoader'; export function BodyLoader() { diff --git a/packages/website-legacy/src/app/tools/performance/components/Header.tsx b/packages/website-legacy/src/app/tools/performance/components/Header.tsx index 3c3693ffc..2dbf46c42 100644 --- a/packages/website-legacy/src/app/tools/performance/components/Header.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/Header.tsx @@ -1,5 +1,3 @@ -'use client'; - import { CaretDownIcon, CaretSortIcon, diff --git a/packages/website-legacy/src/app/tools/performance/components/Info.tsx b/packages/website-legacy/src/app/tools/performance/components/Info.tsx index 0e270a7a5..c7b07ac08 100644 --- a/packages/website-legacy/src/app/tools/performance/components/Info.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/Info.tsx @@ -1,6 +1,8 @@ -'use client'; - -import { averageDefinitions, discoveredIdsDefinitions, formatCompact } from '@blitzkit/core'; +import { + averageDefinitions, + discoveredIdsDefinitions, + formatCompact, +} from '@blitzkit/core'; import { InfoCircledIcon } from '@radix-ui/react-icons'; import { Callout, Flex } from '@radix-ui/themes'; import { use } from 'react'; diff --git a/packages/website-legacy/src/app/tools/performance/components/PlayerCountControl.tsx b/packages/website-legacy/src/app/tools/performance/components/PlayerCountControl.tsx index a9b164fd1..550194f75 100644 --- a/packages/website-legacy/src/app/tools/performance/components/PlayerCountControl.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/PlayerCountControl.tsx @@ -1,5 +1,3 @@ -'use client'; - import { Flex, Select, Text } from '@radix-ui/themes'; import * as TankPerformancePersistent from '../../../../stores/tankPerformancePersistent'; import { PlayerCountPeriod } from '../../../../stores/tankPerformancePersistent/constants'; diff --git a/packages/website-legacy/src/app/tools/performance/components/RowLoader.tsx b/packages/website-legacy/src/app/tools/performance/components/RowLoader.tsx index a019b5285..5349eecc0 100644 --- a/packages/website-legacy/src/app/tools/performance/components/RowLoader.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/RowLoader.tsx @@ -1,5 +1,5 @@ import { Skeleton, Table } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { memo, useRef } from 'react'; import { useIntersection } from '../../../../hooks/useIntersection'; import { TankPerformanceSortTypeNamesArray } from '../../../../stores/tankPerformanceSort/constants'; diff --git a/packages/website-legacy/src/app/tools/performance/components/Table.tsx b/packages/website-legacy/src/app/tools/performance/components/Table.tsx index f0b028119..bc448aa38 100644 --- a/packages/website-legacy/src/app/tools/performance/components/Table.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/Table.tsx @@ -1,5 +1,3 @@ -'use client'; - import { Flex } from '@radix-ui/themes'; import { Suspense } from 'react'; import { StickyTableRoot } from '../../../../components/StickyTableRoot'; diff --git a/packages/website-legacy/src/app/tools/performance/components/Tanks.tsx b/packages/website-legacy/src/app/tools/performance/components/Tanks.tsx index d1de89eff..c2e9f64c5 100644 --- a/packages/website-legacy/src/app/tools/performance/components/Tanks.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/Tanks.tsx @@ -1,19 +1,14 @@ -'use client'; - -import { - averageDefinitionsArray, - tankDefinitions, -} from '@blitzkit/core'; +import { averageDefinitionsArray, tankDefinitions } from '@blitzkit/core'; import { Table } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { Suspense, use, useEffect, useMemo, useState } from 'react'; +import { filterTank } from '../../../../core/blitzkit/filterTank'; import * as TankFilters from '../../../../stores/tankFilters'; import * as TankPerformancePersistent from '../../../../stores/tankPerformancePersistent'; import * as TankPerformanceSort from '../../../../stores/tankPerformanceSort'; import { RowLoader } from './RowLoader'; import { TankRow } from './TankRow'; import { Total } from './Total'; -import { filterTank } from '../../../../core/blitzkit/filterTank'; const PREVIEW_COUNT = 10; const DEFAULT_LOADED_ROWS = 25; diff --git a/packages/website-legacy/src/app/tools/performance/components/TierBreakdown.tsx b/packages/website-legacy/src/app/tools/performance/components/TierBreakdown.tsx index 9ed96da21..687a7c06b 100644 --- a/packages/website-legacy/src/app/tools/performance/components/TierBreakdown.tsx +++ b/packages/website-legacy/src/app/tools/performance/components/TierBreakdown.tsx @@ -1,5 +1,3 @@ -'use client'; - import { averageDefinitionsArray, formatCompact, @@ -12,7 +10,7 @@ import { import strings from '@blitzkit/core/lang/en-US.json'; import { ResponsiveBar } from '@nivo/bar'; import { Box, Flex, Heading } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { use } from 'react'; import { nivoTheme } from '../../../../core/nivo/theme'; diff --git a/packages/website-legacy/src/app/tools/rating/components/PageTurner/index.tsx b/packages/website-legacy/src/app/tools/rating/components/PageTurner/index.tsx index 0d2eee532..6b6566e1a 100644 --- a/packages/website-legacy/src/app/tools/rating/components/PageTurner/index.tsx +++ b/packages/website-legacy/src/app/tools/rating/components/PageTurner/index.tsx @@ -4,7 +4,7 @@ import { SymbolIcon, } from '@radix-ui/react-icons'; import { Flex, IconButton, TextField } from '@radix-ui/themes'; -import { range } from 'lodash'; +import { range } from 'lodash-es'; import { useEffect, useRef } from 'react'; import { infiniteSpin } from './index.css'; diff --git a/packages/website-legacy/src/app/tools/rating/page.tsx b/packages/website-legacy/src/app/tools/rating/page.tsx index 02761dd83..d54a126e8 100644 --- a/packages/website-legacy/src/app/tools/rating/page.tsx +++ b/packages/website-legacy/src/app/tools/rating/page.tsx @@ -1,5 +1,3 @@ -'use client'; - import { AccountList, AccountListItem, @@ -33,7 +31,7 @@ import { TextField, } from '@radix-ui/themes'; import { produce } from 'immer'; -import { debounce, range } from 'lodash'; +import { debounce, range } from 'lodash-es'; import { ChangeEvent, useEffect, useRef, useState } from 'react'; import { create } from 'zustand'; import { PageWrapper } from '../../../components/PageWrapper'; diff --git a/packages/website-legacy/src/app/tools/session/page.tsx b/packages/website-legacy/src/app/tools/session/page.tsx index d299591b9..e3d719cd4 100644 --- a/packages/website-legacy/src/app/tools/session/page.tsx +++ b/packages/website-legacy/src/app/tools/session/page.tsx @@ -1,5 +1,3 @@ -'use client'; - import { AccountListWithServer, IndividualAccountInfo, @@ -37,7 +35,7 @@ import { Text, TextField, } from '@radix-ui/themes'; -import { debounce } from 'lodash'; +import { debounce } from 'lodash-es'; import { use, useEffect, useMemo, useRef, useState } from 'react'; import { PageWrapper } from '../../../components/PageWrapper'; import { TankRowHeaderCell } from '../../../components/TankRowHeaderCell'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx index 661bc62c9..231987ac6 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/components/Miscellaneous.tsx @@ -1,6 +1,6 @@ import { asset } from '@blitzkit/core'; import { Flex, Heading, Slider, TextField } from '@radix-ui/themes'; -import { clamp, debounce } from 'lodash'; +import { clamp, debounce } from 'lodash-es'; import { useEffect, useMemo, useRef, useState } from 'react'; import { GenericTankComponentButton } from '../../../../../../../components/ModuleButtons/GenericTankComponentButton'; import * as Duel from '../../../../../../../stores/duel'; @@ -61,10 +61,10 @@ export function Miscellaneous() { cooldownBooster === 0 ? undefined : cooldownBooster === 1 - ? '#afb0abc0' - : cooldownBooster === 2 - ? '#5f72cbc0' - : '#9b3cc0c0' + ? '#afb0abc0' + : cooldownBooster === 2 + ? '#5f72cbc0' + : '#9b3cc0c0' } iconStyles={{ transform: 'translate(-50%, -50%) scale(0.8)', diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx index b8b9a1309..f550af9ab 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx @@ -19,7 +19,7 @@ import { TextField, Tooltip, } from '@radix-ui/themes'; -import { debounce } from 'lodash'; +import { debounce } from 'lodash-es'; import { Fragment, use, useEffect, useRef, useState } from 'react'; import { lerp } from 'three/src/math/MathUtils'; import { Ad, AdType } from '../../../../../../components/Ad'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Content.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Content.tsx index 264c102c2..20b4a0929 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Content.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Content.tsx @@ -1,5 +1,3 @@ -'use client'; - import { TIER_ROMAN_NUMERALS } from '@blitzkit/core'; import strings from '@blitzkit/core/lang/en-US.json'; import { invalidate } from '@react-three/fiber'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx index 094198b66..71ed692d7 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Stars/index.tsx @@ -1,6 +1,6 @@ import { StarsInt } from '@blitzkit/core'; import { Flex, Text, TextProps } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { PartialStar } from './components/PartialStar'; type StarsProps = TextProps & { diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx index d975d0387..a79806b4a 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/components/Votes/index.tsx @@ -1,5 +1,3 @@ -'use client'; - import { formatCompact } from '@blitzkit/core'; import { Flex, Heading, Skeleton, Text } from '@radix-ui/themes'; import { memo } from 'react'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx index ea218c42b..123cd61db 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/Model/MetaSection/index.tsx @@ -51,8 +51,7 @@ export function MetaSection() { - {assertSecret(process.env.NEXT_PUBLIC_PROMOTE_OPENTEST) === - 'true' && ( + {assertSecret(process.env.PUBLIC_PROMOTE_OPENTEST) === 'true' && ( @@ -134,8 +133,8 @@ export function MetaSection() { protagonist.treeType === 'collector' ? 'blue' : protagonist.treeType === 'premium' - ? 'amber' - : undefined + ? 'amber' + : undefined } > {strings.common.tree_type[protagonist.treeType]} diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/SceneProps.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/SceneProps.tsx index da465f980..9a6a3ed32 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/components/SceneProps.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/components/SceneProps.tsx @@ -1,5 +1,5 @@ import { useFrame, useLoader } from '@react-three/fiber'; -import { clamp } from 'lodash'; +import { clamp } from 'lodash-es'; import { useRef } from 'react'; import { MeshStandardMaterial, TextureLoader } from 'three'; import * as TankopediaPersistent from '../../../../../stores/tankopediaPersistent'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/[id]/page.tsx b/packages/website-legacy/src/app/tools/tankopedia/[id]/page.tsx index 5793a5ee3..e0d1a78fa 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/[id]/page.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/[id]/page.tsx @@ -1,5 +1,3 @@ -'use client'; - import { TIER_ROMAN_NUMERALS } from '@blitzkit/core'; import strings from '@blitzkit/core/lang/en-US.json'; import { invalidate } from '@react-three/fiber'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/components/FilterControl.tsx b/packages/website-legacy/src/app/tools/tankopedia/components/FilterControl.tsx index 2bdb186fb..7aeee58fa 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/components/FilterControl.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/components/FilterControl.tsx @@ -1,5 +1,3 @@ -'use client'; - import { asset, gameDefinitions, @@ -10,7 +8,7 @@ import { import strings from '@blitzkit/core/lang/en-US.json'; import { ReloadIcon } from '@radix-ui/react-icons'; import { Box, Flex, IconButton, Text, Tooltip } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { use } from 'react'; import { classIcons } from '../../../../components/ClassIcon'; import { ExperimentIcon } from '../../../../components/ExperimentIcon'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/components/QuickLink.tsx b/packages/website-legacy/src/app/tools/tankopedia/components/QuickLink.tsx index 36e000abe..6d408f2ad 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/components/QuickLink.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/components/QuickLink.tsx @@ -1,4 +1,4 @@ -import { TankDefinition } from '@blitzkit/core'; +import { type TankDefinition } from '@blitzkit/core'; import { CaretRightIcon } from '@radix-ui/react-icons'; import { Button, Link, TextField } from '@radix-ui/themes'; import * as TankFilters from '../../../../stores/tankFilters'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/components/SearchBar.tsx b/packages/website-legacy/src/app/tools/tankopedia/components/SearchBar.tsx index 04cd2c07d..0472d7a5e 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/components/SearchBar.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/components/SearchBar.tsx @@ -1,7 +1,7 @@ import { TankDefinition } from '@blitzkit/core'; import { MagnifyingGlassIcon } from '@radix-ui/react-icons'; import { Flex, Spinner, TextField } from '@radix-ui/themes'; -import { debounce } from 'lodash'; +import { debounce } from 'lodash-es'; import { useRouter } from 'next/navigation'; import { KeyboardEventHandler, useCallback, useRef } from 'react'; import * as TankFilters from '../../../../stores/tankFilters'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/components/TankSearch/index.tsx b/packages/website-legacy/src/app/tools/tankopedia/components/TankSearch/index.tsx index 13dde8be1..0717dd230 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/components/TankSearch/index.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/components/TankSearch/index.tsx @@ -1,5 +1,3 @@ -'use client'; - import { TANK_CLASSES, TankDefinition, @@ -15,7 +13,7 @@ import { } from '@blitzkit/core'; import { Callout, Flex, FlexProps, Link, Text } from '@radix-ui/themes'; import { go } from 'fuzzysort'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { Fragment, memo, use, useEffect, useMemo, useState } from 'react'; import { AdMidSectionResponsive } from '../../../../../components/AdMidSectionResponsive'; import { ExperimentIcon } from '../../../../../components/ExperimentIcon'; diff --git a/packages/website-legacy/src/app/tools/tankopedia/components/TierFilter.tsx b/packages/website-legacy/src/app/tools/tankopedia/components/TierFilter.tsx index 96189e4df..82f25238b 100644 --- a/packages/website-legacy/src/app/tools/tankopedia/components/TierFilter.tsx +++ b/packages/website-legacy/src/app/tools/tankopedia/components/TierFilter.tsx @@ -1,6 +1,6 @@ import { Tier, TIER_ROMAN_NUMERALS } from '@blitzkit/core'; import { Flex, IconButton, Text } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { memo } from 'react'; import * as TankFilters from '../../../../stores/tankFilters'; import * as TankopediaSort from '../../../../stores/tankopediaSort'; diff --git a/packages/website/package.json b/packages/website/package.json index 82f0c0e61..08c09a1b5 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -12,6 +12,8 @@ "@astrojs/check": "^0.9.3", "@astrojs/react": "^3.6.2", "@blitzkit/core": "workspace:*", + "@nanostores/persistent": "^0.10.2", + "@nanostores/react": "^0.7.3", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/themes": "^3.1.3", "@vanilla-extract/css": "^1.15.5", @@ -20,7 +22,8 @@ "nanostores": "^0.11.3", "purgecss": "^6.0.0", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "react-promise-suspense": "^0.3.4" }, "devDependencies": { "@vanilla-extract/vite-plugin": "^4.0.15" diff --git a/packages/website/src/components/Ad.tsx b/packages/website/src/components/Ad.tsx index 2168892c0..57921965e 100644 --- a/packages/website/src/components/Ad.tsx +++ b/packages/website/src/components/Ad.tsx @@ -1,8 +1,6 @@ -'use client'; - import { imgur } from '@blitzkit/core'; import { Box, BoxProps, Text } from '@radix-ui/themes'; -import { uniqueId } from 'lodash'; +import { uniqueId } from 'lodash-es'; import { useEffect, useRef } from 'react'; import { Vector2Tuple } from 'three'; diff --git a/packages/website/src/components/Armor/components/ShotDisplay.tsx b/packages/website/src/components/Armor/components/ShotDisplay.tsx index a7d240ccf..2c7e7c92b 100644 --- a/packages/website/src/components/Armor/components/ShotDisplay.tsx +++ b/packages/website/src/components/Armor/components/ShotDisplay.tsx @@ -2,8 +2,8 @@ import { J_HAT, K_HAT } from '@blitzkit/core'; import { Box, Flex, Text } from '@radix-ui/themes'; import { Html } from '@react-three/drei'; import { useFrame } from '@react-three/fiber'; -import { clamp } from 'lodash'; -import { ComponentProps, useEffect, useRef } from 'react'; +import { clamp } from 'lodash-es'; +import { type ComponentProps, useEffect, useRef } from 'react'; import { BufferGeometry, DoubleSide, diff --git a/packages/website/src/components/Armor/components/ShotDisplayCard.tsx b/packages/website/src/components/Armor/components/ShotDisplayCard.tsx index 5b04e564f..544d97d6e 100644 --- a/packages/website/src/components/Armor/components/ShotDisplayCard.tsx +++ b/packages/website/src/components/Armor/components/ShotDisplayCard.tsx @@ -6,7 +6,7 @@ import { Separator, Text, } from '@radix-ui/themes'; -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; import { radToDeg } from 'three/src/math/MathUtils'; import * as TankopediaEphemeral from '../../../../../website-legacy/src/stores/tankopediaEphemeral'; import { shotStatusColors } from './ShotDisplay'; diff --git a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx index 7c654e0ae..79b549ef9 100644 --- a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx @@ -1,5 +1,5 @@ import { - ShellType, + type ShellType, isExplosive, resolveNearPenetration, resolvePenetrationCoefficient, @@ -7,7 +7,7 @@ import { import { useThree } from '@react-three/fiber'; import { useCallback } from 'react'; import { - Intersection, + type Intersection, MeshBasicMaterial, Object3D, Plane, @@ -17,11 +17,8 @@ import { Vector3, } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; -import { hasEquipment } from '../../../../../../website-legacy/src/core/blitzkit/hasEquipment'; -import { jsxTree } from '../../../../../../website-legacy/src/core/blitzkit/jsxTree'; -import { discardClippingPlane } from '../../../../../../website-legacy/src/core/three/discardClippingPlane'; -import * as Duel from '../../../../../../website-legacy/src/stores/duel'; -import * as TankopediaEphemeral from '../../../../../../website-legacy/src/stores/tankopediaEphemeral'; +import * as Duel from '../../../../stores/duel'; +import * as TankopediaEphemeral from '../../../../stores/tankopediaEphemeral'; import { ArmorType } from '../SpacedArmorScene'; import { SpacedArmorSubExternal } from './components/SpacedArmorSubExternal'; import { SpacedArmorSubSpaced } from './components/SpacedArmorSubSpaced'; diff --git a/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx b/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx index 198f70349..6466ee9cf 100644 --- a/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx +++ b/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx @@ -1,6 +1,6 @@ import { I_HAT, J_HAT } from '@blitzkit/core'; import { MeshProps, useThree } from '@react-three/fiber'; -import { clamp } from 'lodash'; +import { clamp } from 'lodash-es'; import { useEffect, useMemo } from 'react'; import { Box3, diff --git a/packages/website/src/components/BlitzkitButtonGrayIcon.tsx b/packages/website/src/components/BlitzkitButtonGrayIcon.tsx index 3778d78f0..bbf6d0a8e 100644 --- a/packages/website/src/components/BlitzkitButtonGrayIcon.tsx +++ b/packages/website/src/components/BlitzkitButtonGrayIcon.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; export function BlitzkitButtonGrayIcon(props: ComponentProps<'svg'>) { return ( diff --git a/packages/website/src/components/ClassIcon/components/ClassHeavy.tsx b/packages/website/src/components/ClassIcon/components/ClassHeavy.tsx index a2da4e599..a21b5badd 100644 --- a/packages/website/src/components/ClassIcon/components/ClassHeavy.tsx +++ b/packages/website/src/components/ClassIcon/components/ClassHeavy.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; export function ClassHeavy(props: ComponentProps<'svg'>) { return ( diff --git a/packages/website/src/components/ClassIcon/components/ClassLight.tsx b/packages/website/src/components/ClassIcon/components/ClassLight.tsx index 39c2e6916..9db2a1e79 100644 --- a/packages/website/src/components/ClassIcon/components/ClassLight.tsx +++ b/packages/website/src/components/ClassIcon/components/ClassLight.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; export function ClassLight(props: ComponentProps<'svg'>) { return ( diff --git a/packages/website/src/components/ClassIcon/components/ClassMedium.tsx b/packages/website/src/components/ClassIcon/components/ClassMedium.tsx index 1276e3220..a43521887 100644 --- a/packages/website/src/components/ClassIcon/components/ClassMedium.tsx +++ b/packages/website/src/components/ClassIcon/components/ClassMedium.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; export function ClassMedium(props: ComponentProps<'svg'>) { return ( diff --git a/packages/website/src/components/ClassIcon/components/ClassTankDestroyer.tsx b/packages/website/src/components/ClassIcon/components/ClassTankDestroyer.tsx index b908dce03..900c15e28 100644 --- a/packages/website/src/components/ClassIcon/components/ClassTankDestroyer.tsx +++ b/packages/website/src/components/ClassIcon/components/ClassTankDestroyer.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; export function ClassTankDestroyer(props: ComponentProps<'svg'>) { return ( diff --git a/packages/website/src/components/ClassIcon/index.ts b/packages/website/src/components/ClassIcon/index.ts index 5ef1cfdd5..430de4ec5 100644 --- a/packages/website/src/components/ClassIcon/index.ts +++ b/packages/website/src/components/ClassIcon/index.ts @@ -1,5 +1,5 @@ -import { TankClass } from '@blitzkit/core'; -import { ComponentProps, ReactNode } from 'react'; +import { type TankClass } from '@blitzkit/core'; +import type { ComponentProps, ReactNode } from 'react'; import { ClassHeavy } from './components/ClassHeavy'; import { ClassLight } from './components/ClassLight'; import { ClassMedium } from './components/ClassMedium'; diff --git a/packages/website/src/components/CopyButton.tsx b/packages/website/src/components/CopyButton.tsx index 71074c015..1365316ca 100644 --- a/packages/website/src/components/CopyButton.tsx +++ b/packages/website/src/components/CopyButton.tsx @@ -1,4 +1,4 @@ -import { Button, ButtonProps, Tooltip } from '@radix-ui/themes'; +import { Button, type ButtonProps, Tooltip } from '@radix-ui/themes'; import { useState } from 'react'; interface CopyButtonProps extends ButtonProps { diff --git a/packages/website/src/components/DatePicker.tsx b/packages/website/src/components/DatePicker.tsx index 315f14ba9..158727d00 100644 --- a/packages/website/src/components/DatePicker.tsx +++ b/packages/website/src/components/DatePicker.tsx @@ -14,7 +14,7 @@ import { Popover, Text, } from '@radix-ui/themes'; -import { times } from 'lodash'; +import { times } from 'lodash-es'; import { useState } from 'react'; const DAY_TITLES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; diff --git a/packages/website/src/components/DummyLink.tsx b/packages/website/src/components/DummyLink.tsx index 726a27bde..51dd7ad89 100644 --- a/packages/website/src/components/DummyLink.tsx +++ b/packages/website/src/components/DummyLink.tsx @@ -1,4 +1,4 @@ -import { Link, LinkProps } from '@radix-ui/themes'; +import { Link, type LinkProps } from '@radix-ui/themes'; export function DummyLink({ href = '#', onClick, ...props }: LinkProps) { return ( diff --git a/packages/website/src/components/EquipmentManager.tsx b/packages/website/src/components/EquipmentManager.tsx index 445708f0d..ff3ef35c0 100644 --- a/packages/website/src/components/EquipmentManager.tsx +++ b/packages/website/src/components/EquipmentManager.tsx @@ -1,6 +1,6 @@ import { EquipmentPreset } from '@blitzkit/core'; import { Flex } from '@radix-ui/themes'; -import { cloneDeep } from 'lodash'; +import { cloneDeep } from 'lodash-es'; import { EquipmentMatrix } from '../../../website-legacy/src/stores/duel'; import { EquipmentButton } from './ModuleButtons/EquipmentButton'; diff --git a/packages/website/src/components/ExperimentIcon.tsx b/packages/website/src/components/ExperimentIcon.tsx index f0d2ab841..1af6844b8 100644 --- a/packages/website/src/components/ExperimentIcon.tsx +++ b/packages/website/src/components/ExperimentIcon.tsx @@ -1,4 +1,4 @@ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; export function ExperimentIcon(props: ComponentProps<'svg'>) { return ( diff --git a/packages/website/src/components/Footer.astro b/packages/website/src/components/Footer.astro new file mode 100644 index 000000000..02885c710 --- /dev/null +++ b/packages/website/src/components/Footer.astro @@ -0,0 +1,158 @@ +--- +import { gameDefinitions } from '@blitzkit/core'; +import { Code, Flex, Heading, Link, Text } from '@radix-ui/themes'; +import packageJson from '../../../../package.json'; + +const awaitedGameDefinitions = await gameDefinitions; +--- + + + + + BlitzKit + Everything World of Tanks Blitz + + Unaffiliated with Wargaming or any service + + + + + + About + + Credits + + Discord + + + GitHub + + Patches + + {/* patreon supporters? */} + + + + + Legal + + + Privacy policy + + + Terms of service + + + Ad settings + + + + + + + + + BlitzKit + WoT Blitz + CDN + + + + + {packageJson.version} + + + {awaitedGameDefinitions.version} + + + {process.env.PUBLIC_ASSET_BRANCH} + + + + + + BlitzKit + + {packageJson.version} + + WoT Blitz + + {awaitedGameDefinitions.version} + + CDN + + {process.env.PUBLIC_ASSET_BRANCH} + + + diff --git a/packages/website/src/components/Footer/components/WoTBVersion.tsx b/packages/website/src/components/Footer/components/WoTBVersion.tsx deleted file mode 100644 index 78d77545c..000000000 --- a/packages/website/src/components/Footer/components/WoTBVersion.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { gameDefinitions } from '@blitzkit/core'; -import { Code } from '@radix-ui/themes'; -import { use } from 'react'; - -export function WoTBVersion() { - const awaitedGameDefinitions = use(gameDefinitions); - - return ( - - {awaitedGameDefinitions.version} - - ); -} diff --git a/packages/website/src/components/Footer/index.css.ts b/packages/website/src/components/Footer/index.css.ts deleted file mode 100644 index eafaf4c11..000000000 --- a/packages/website/src/components/Footer/index.css.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { style } from '@vanilla-extract/css'; - -export const containerInner = style({ - justifyContent: 'space-between', - width: '100%', - maxWidth: 1024, - padding: '0 16px', - - '@media': { - 'screen and (max-width: 640px)': { - justifyContent: 'center', - }, - }, -}); diff --git a/packages/website/src/components/Footer/index.tsx b/packages/website/src/components/Footer/index.tsx deleted file mode 100644 index 723ac9e15..000000000 --- a/packages/website/src/components/Footer/index.tsx +++ /dev/null @@ -1,182 +0,0 @@ -'use client'; - -import { gameDefinitions } from '@blitzkit/core'; -import { Code, Flex, Heading, Text, Theme } from '@radix-ui/themes'; -import { use } from 'react'; -import packageJson from '../../../../../package.json'; -import { Link } from '../Link'; - -export function Footer() { - const awaitedGameDefinitions = use(gameDefinitions); - - return ( - - - - - BlitzKit - Everything World of Tanks Blitz - - Unaffiliated with Wargaming or any service - - - - - - About - - - Credits - - - Discord - - - GitHub - - - Patches - - - {/* patreon supporters? */} - - - - - Legal - - - Privacy policy - - - Terms of service - - - Ad settings - - - - - - - - - - BlitzKit - - - WoT Blitz - - - CDN - - - - - - {packageJson.version} - - - {awaitedGameDefinitions.version} - - - {process.env.NEXT_PUBLIC_ASSET_BRANCH} - - - - - - - BlitzKit - - - {packageJson.version} - - - WoT Blitz - - - {awaitedGameDefinitions.version} - - - CDN - - - {process.env.NEXT_PUBLIC_ASSET_BRANCH} - - - - - ); -} diff --git a/packages/website/src/components/HomeHero.astro b/packages/website/src/components/HomeHero.astro index 26134a38e..73f4db226 100644 --- a/packages/website/src/components/HomeHero.astro +++ b/packages/website/src/components/HomeHero.astro @@ -4,8 +4,8 @@ import { Code, Flex, Heading, Text } from '@radix-ui/themes'; import { BRANCH_NAMES } from '../constants/branches'; const isBranchNamed = - process.env.NEXT_PUBLIC_ASSET_BRANCH && - BRANCH_NAMES[process.env.NEXT_PUBLIC_ASSET_BRANCH]; + process.env.PUBLIC_ASSET_BRANCH && + BRANCH_NAMES[process.env.PUBLIC_ASSET_BRANCH]; ---