From a1721eb05ea3e9dc3981194828ff5a5d6dfeaa62 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 18:32:36 -0500 Subject: [PATCH] feat: moved to astro --- bun.lockb | Bin 425620 -> 425979 bytes packages/core/src/index.ts | 2 +- .../src/app/components/Hero/index.tsx | 69 --------- packages/website-legacy/src/app/page.tsx | 140 +++++++++--------- .../components/PreviewWrapper/index.tsx | 2 +- .../src/app/tools/embed/[embed]/host/page.tsx | 2 +- .../src/app/tools/embed/[embed]/layout.tsx | 2 +- .../src/app/tools/embed/[embed]/page.tsx | 2 +- .../tools/embed/configurations/breakdown.tsx | 2 +- packages/website-legacy/tsconfig.json | 9 +- packages/website/package.json | 1 + .../src/components/Ad.tsx | 0 .../src/components/AdMidSectionNarrowOnly.tsx | 0 .../src/components/AdMidSectionResponsive.tsx | 0 .../src/components/AdMidSectionWideOnly.tsx | 0 .../Armor/components/ArmorPlateDisplay.tsx | 8 +- .../Armor/components/ModelTankWrapper.tsx | 0 .../Armor/components/PrimaryArmorScene.tsx | 14 +- .../PrimaryArmorSceneComponent/index.tsx | 8 +- .../shaders/fragment.glsl | 0 .../shaders/vertex.glsl | 0 .../PrimaryArmorSceneComponent/target.tsx | 0 .../Armor/components/ShotDisplay.tsx | 4 +- .../Armor/components/ShotDisplayCard.tsx | 2 +- .../Armor/components/SpacedArmorScene.tsx | 16 +- .../SpacedArmorSubExternal/index.tsx | 6 +- .../shaders/fragment.glsl | 0 .../shaders/vertex.glsl | 0 .../components/SpacedArmorSubSpaced/index.tsx | 6 +- .../shaders/fragment.glsl | 0 .../SpacedArmorSubSpaced/shaders/vertex.glsl | 0 .../SpacedArmorSceneComponent/index.tsx | 10 +- .../Armor/components/StaticArmor.tsx | 26 ++-- .../components/StaticArmorSceneComponent.tsx | 10 +- .../src/components/Armor/index.tsx | 0 .../src/components/BlitzkitButtonGrayIcon.tsx | 0 .../ClassIcon/components/ClassHeavy.tsx | 0 .../ClassIcon/components/ClassLight.tsx | 0 .../ClassIcon/components/ClassMedium.tsx | 0 .../components/ClassTankDestroyer.tsx | 0 .../src/components/ClassIcon/index.ts | 0 .../src/components/ConsumablesManager.tsx | 0 .../src/components/CopyButton.tsx | 0 .../src/components/CrewSkillManager.tsx | 0 .../src/components/DatePicker.tsx | 0 .../src/components/DummyLink.tsx | 0 .../src/components/EquipmentManager.tsx | 2 +- .../src/components/ExperimentIcon.tsx | 0 .../Footer/components/WoTBVersion.tsx | 0 .../src/components/Footer/index.css.ts | 0 .../src/components/Footer/index.tsx | 0 .../website/src/components/HomeHero.astro | 77 ++++++++++ .../src/components/Link.tsx | 0 .../ModuleButtons/ConsumableButton.tsx | 2 +- .../ModuleButtons/EquipmentButton.tsx | 0 .../GenericTankComponentButton.tsx | 0 .../components/ModuleButtons/ModuleButton.tsx | 0 .../ModuleButtons/ProvisionButton.tsx | 0 .../components/ModuleButtons/ShellButton.tsx | 0 .../ModuleButtons/TankComponentButton.tsx | 0 .../src/components/ModuleManager.tsx | 0 .../components/WargamingAccountName.tsx | 2 +- .../components/WargamingLoginButton.tsx | 0 .../src/components/Navbar/index.css.ts | 0 .../src/components/Navbar/index.tsx | 6 +- .../src/components/PageWrapper.tsx | 2 +- .../src/components/Party3.tsx | 0 .../src/components/PatreonIcon.tsx | 0 .../app => website/src}/components/Plugs.tsx | 6 +- .../src/components/ProvisionsManager.tsx | 0 .../src/components/ResearchedIcon.tsx | 0 .../src/components/ScienceIcon.tsx | 0 .../src/components/ScienceOffIcon.tsx | 0 .../src/components/Skeleton/index.css.ts | 0 .../src/components/Skeleton/index.tsx | 0 .../src/components/SmallTankIcon.tsx | 0 .../src/components/Speedometer.tsx | 0 .../src/components/StickyColumnHeaderCell.tsx | 0 .../src/components/StickyRowHeaderCell.tsx | 0 .../src/components/StickyTableRoot.tsx | 0 .../src/components/TankRowHeaderCell.tsx | 0 .../src/components/TanksEmbed.tsx | 4 +- .../website/src/components/ToolCard.astro | 14 +- .../src/components/VerifiedIcon.tsx | 0 .../src/components/WargamingIcon.tsx | 0 .../src/constants/branches.ts} | 0 .../src/constants/embeds.ts | 6 +- .../src/core/blitz/applyPitchYawLimits.ts | 0 .../src/core/blitz/correctZYTuple.ts | 0 .../src/core/blitz/rotateDavaVector.ts | 0 .../src/core/blitz/unrotateDavaVector.ts | 0 .../src/core/blitzkit/filterTank.ts | 0 .../src/core/blitzkit/hasEquipment.ts | 0 .../src/core/blitzkit/jsxTree.tsx | 0 .../src/core/blitzkit/modelTransform.ts | 0 .../src/core/blitzkit/nameToArmorId.ts | 0 .../src/core/blitzkit/pose.ts | 0 .../src/core/blitzkit/pushTankopediaPath.ts | 0 .../src/core/blitzkit/resolveArmorIndex.ts | 0 .../src/core/blitzkit/resolveReload.ts | 0 .../src/core/blitzkit/resolveThickness.ts | 0 .../src/core/blitzkit/tankCharacteristics.ts | 0 .../src/core/blitzkit/tankToCompareMember.ts | 0 .../src/core/blitzkit/tankToDuelMember.ts | 0 .../src/core/nivo/theme.ts | 0 .../src/core/radix/utils.ts | 0 .../src/core/radix/var.ts | 0 .../src/core/three/discardClippingPlane.ts | 0 .../zustand/createContextualSafeStore.tsx} | 13 +- .../src/hooks/useAdExempt.ts | 0 .../src/hooks/useAppliedEquipments.ts | 0 .../src/hooks/useArmor.ts | 0 .../src/hooks/useAveragesExclusionRatio.ts | 0 .../src/hooks/useAwait.ts | 0 .../src/hooks/useDelta.ts | 0 .../src/hooks/useEccentricity.ts | 0 .../src/hooks/useEquipment.ts | 0 .../src/hooks/useEquipmentPreset.ts | 0 .../src/hooks/useFullScreen.ts | 0 .../src/hooks/useFullscreenAvailability.ts | 0 .../src/hooks/useIntersection.ts | 0 .../src/hooks/useModel.ts | 0 .../src/hooks/useOnScreen.ts | 0 .../src/hooks/useProvision.ts | 0 .../src/hooks/useTankModelDefinition.ts | 0 .../src/hooks/useTankTransform.ts | 0 .../src/hooks/useTankVotes.ts | 0 packages/website/src/pages/index.astro | 115 +++++++------- .../src/stores/app/constants.ts | 0 .../src/stores/app/index.ts | 8 +- .../src/stores/compareEphemeral.ts | 7 +- .../src/stores/comparePersistent.ts | 12 +- .../src/stores/duel/constants.ts | 0 .../src/stores/duel/index.ts | 51 +++---- .../src/stores/embedState/constants.ts | 2 +- .../src/stores/embedState/index.ts | 11 +- .../src/stores/embedState/utilities.ts | 0 .../src/stores/session.ts | 12 +- .../src/stores/tankFilters.ts | 8 +- .../tankPerformancePersistent/constants.ts | 0 .../stores/tankPerformancePersistent/index.ts | 12 +- .../stores/tankPerformanceSort/constants.ts | 0 .../src/stores/tankPerformanceSort/index.ts | 8 +- .../src/stores/tankopediaEphemeral.ts | 8 +- .../stores/tankopediaPersistent/constants.ts | 0 .../src/stores/tankopediaPersistent/index.ts | 12 +- .../src/stores/tankopediaSort.ts | 8 +- .../src/types/glsl.d.ts | 0 .../src/types/proto.d.ts | 0 .../src/types/urlon.d.ts | 0 150 files changed, 386 insertions(+), 363 deletions(-) delete mode 100644 packages/website-legacy/src/app/components/Hero/index.tsx rename packages/{website-legacy => website}/src/components/Ad.tsx (100%) rename packages/{website-legacy => website}/src/components/AdMidSectionNarrowOnly.tsx (100%) rename packages/{website-legacy => website}/src/components/AdMidSectionResponsive.tsx (100%) rename packages/{website-legacy => website}/src/components/AdMidSectionWideOnly.tsx (100%) rename packages/{website-legacy => website}/src/components/Armor/components/ArmorPlateDisplay.tsx (95%) rename packages/{website-legacy => website}/src/components/Armor/components/ModelTankWrapper.tsx (100%) rename packages/{website-legacy => website}/src/components/Armor/components/PrimaryArmorScene.tsx (87%) rename packages/{website-legacy => website}/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx (93%) rename packages/{website-legacy => website}/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/fragment.glsl (100%) rename packages/{website-legacy => website}/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/vertex.glsl (100%) rename packages/{website-legacy => website}/src/components/Armor/components/PrimaryArmorSceneComponent/target.tsx (100%) rename packages/{website-legacy => website}/src/components/Armor/components/ShotDisplay.tsx (97%) rename packages/{website-legacy => website}/src/components/Armor/components/ShotDisplayCard.tsx (98%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorScene.tsx (90%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx (92%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl (100%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl (100%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx (93%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/fragment.glsl (100%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/vertex.glsl (100%) rename packages/{website-legacy => website}/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx (96%) rename packages/{website-legacy => website}/src/components/Armor/components/StaticArmor.tsx (92%) rename packages/{website-legacy => website}/src/components/Armor/components/StaticArmorSceneComponent.tsx (94%) rename packages/{website-legacy => website}/src/components/Armor/index.tsx (100%) rename packages/{website-legacy => website}/src/components/BlitzkitButtonGrayIcon.tsx (100%) rename packages/{website-legacy => website}/src/components/ClassIcon/components/ClassHeavy.tsx (100%) rename packages/{website-legacy => website}/src/components/ClassIcon/components/ClassLight.tsx (100%) rename packages/{website-legacy => website}/src/components/ClassIcon/components/ClassMedium.tsx (100%) rename packages/{website-legacy => website}/src/components/ClassIcon/components/ClassTankDestroyer.tsx (100%) rename packages/{website-legacy => website}/src/components/ClassIcon/index.ts (100%) rename packages/{website-legacy => website}/src/components/ConsumablesManager.tsx (100%) rename packages/{website-legacy => website}/src/components/CopyButton.tsx (100%) rename packages/{website-legacy => website}/src/components/CrewSkillManager.tsx (100%) rename packages/{website-legacy => website}/src/components/DatePicker.tsx (100%) rename packages/{website-legacy => website}/src/components/DummyLink.tsx (100%) rename packages/{website-legacy => website}/src/components/EquipmentManager.tsx (96%) rename packages/{website-legacy => website}/src/components/ExperimentIcon.tsx (100%) rename packages/{website-legacy => website}/src/components/Footer/components/WoTBVersion.tsx (100%) rename packages/{website-legacy => website}/src/components/Footer/index.css.ts (100%) rename packages/{website-legacy => website}/src/components/Footer/index.tsx (100%) create mode 100644 packages/website/src/components/HomeHero.astro rename packages/{website-legacy => website}/src/components/Link.tsx (100%) rename packages/{website-legacy => website}/src/components/ModuleButtons/ConsumableButton.tsx (96%) rename packages/{website-legacy => website}/src/components/ModuleButtons/EquipmentButton.tsx (100%) rename packages/{website-legacy => website}/src/components/ModuleButtons/GenericTankComponentButton.tsx (100%) rename packages/{website-legacy => website}/src/components/ModuleButtons/ModuleButton.tsx (100%) rename packages/{website-legacy => website}/src/components/ModuleButtons/ProvisionButton.tsx (100%) rename packages/{website-legacy => website}/src/components/ModuleButtons/ShellButton.tsx (100%) rename packages/{website-legacy => website}/src/components/ModuleButtons/TankComponentButton.tsx (100%) rename packages/{website-legacy => website}/src/components/ModuleManager.tsx (100%) rename packages/{website-legacy => website}/src/components/Navbar/components/WargamingAccountName.tsx (90%) rename packages/{website-legacy => website}/src/components/Navbar/components/WargamingLoginButton.tsx (100%) rename packages/{website-legacy => website}/src/components/Navbar/index.css.ts (100%) rename packages/{website-legacy => website}/src/components/Navbar/index.tsx (98%) rename packages/{website-legacy => website}/src/components/PageWrapper.tsx (93%) rename packages/{website-legacy => website}/src/components/Party3.tsx (100%) rename packages/{website-legacy => website}/src/components/PatreonIcon.tsx (100%) rename packages/{website-legacy/src/app => website/src}/components/Plugs.tsx (93%) rename packages/{website-legacy => website}/src/components/ProvisionsManager.tsx (100%) rename packages/{website-legacy => website}/src/components/ResearchedIcon.tsx (100%) rename packages/{website-legacy => website}/src/components/ScienceIcon.tsx (100%) rename packages/{website-legacy => website}/src/components/ScienceOffIcon.tsx (100%) rename packages/{website-legacy => website}/src/components/Skeleton/index.css.ts (100%) rename packages/{website-legacy => website}/src/components/Skeleton/index.tsx (100%) rename packages/{website-legacy => website}/src/components/SmallTankIcon.tsx (100%) rename packages/{website-legacy => website}/src/components/Speedometer.tsx (100%) rename packages/{website-legacy => website}/src/components/StickyColumnHeaderCell.tsx (100%) rename packages/{website-legacy => website}/src/components/StickyRowHeaderCell.tsx (100%) rename packages/{website-legacy => website}/src/components/StickyTableRoot.tsx (100%) rename packages/{website-legacy => website}/src/components/TankRowHeaderCell.tsx (100%) rename packages/{website-legacy => website}/src/components/TanksEmbed.tsx (95%) rename packages/{website-legacy => website}/src/components/VerifiedIcon.tsx (100%) rename packages/{website-legacy => website}/src/components/WargamingIcon.tsx (100%) rename packages/{website-legacy/src/app/components/Hero/constants.ts => website/src/constants/branches.ts} (100%) rename packages/{website-legacy => website}/src/constants/embeds.ts (91%) rename packages/{website-legacy => website}/src/core/blitz/applyPitchYawLimits.ts (100%) rename packages/{website-legacy => website}/src/core/blitz/correctZYTuple.ts (100%) rename packages/{website-legacy => website}/src/core/blitz/rotateDavaVector.ts (100%) rename packages/{website-legacy => website}/src/core/blitz/unrotateDavaVector.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/filterTank.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/hasEquipment.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/jsxTree.tsx (100%) rename packages/{website-legacy => website}/src/core/blitzkit/modelTransform.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/nameToArmorId.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/pose.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/pushTankopediaPath.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/resolveArmorIndex.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/resolveReload.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/resolveThickness.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/tankCharacteristics.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/tankToCompareMember.ts (100%) rename packages/{website-legacy => website}/src/core/blitzkit/tankToDuelMember.ts (100%) rename packages/{website-legacy => website}/src/core/nivo/theme.ts (100%) rename packages/{website-legacy => website}/src/core/radix/utils.ts (100%) rename packages/{website-legacy => website}/src/core/radix/var.ts (100%) rename packages/{website-legacy => website}/src/core/three/discardClippingPlane.ts (100%) rename packages/{website-legacy/src/core/zustand/createNextSafeStore.tsx => website/src/core/zustand/createContextualSafeStore.tsx} (87%) rename packages/{website-legacy => website}/src/hooks/useAdExempt.ts (100%) rename packages/{website-legacy => website}/src/hooks/useAppliedEquipments.ts (100%) rename packages/{website-legacy => website}/src/hooks/useArmor.ts (100%) rename packages/{website-legacy => website}/src/hooks/useAveragesExclusionRatio.ts (100%) rename packages/{website-legacy => website}/src/hooks/useAwait.ts (100%) rename packages/{website-legacy => website}/src/hooks/useDelta.ts (100%) rename packages/{website-legacy => website}/src/hooks/useEccentricity.ts (100%) rename packages/{website-legacy => website}/src/hooks/useEquipment.ts (100%) rename packages/{website-legacy => website}/src/hooks/useEquipmentPreset.ts (100%) rename packages/{website-legacy => website}/src/hooks/useFullScreen.ts (100%) rename packages/{website-legacy => website}/src/hooks/useFullscreenAvailability.ts (100%) rename packages/{website-legacy => website}/src/hooks/useIntersection.ts (100%) rename packages/{website-legacy => website}/src/hooks/useModel.ts (100%) rename packages/{website-legacy => website}/src/hooks/useOnScreen.ts (100%) rename packages/{website-legacy => website}/src/hooks/useProvision.ts (100%) rename packages/{website-legacy => website}/src/hooks/useTankModelDefinition.ts (100%) rename packages/{website-legacy => website}/src/hooks/useTankTransform.ts (100%) rename packages/{website-legacy => website}/src/hooks/useTankVotes.ts (100%) rename packages/{website-legacy => website}/src/stores/app/constants.ts (100%) rename packages/{website-legacy => website}/src/stores/app/index.ts (75%) rename packages/{website-legacy => website}/src/stores/compareEphemeral.ts (72%) rename packages/{website-legacy => website}/src/stores/comparePersistent.ts (63%) rename packages/{website-legacy => website}/src/stores/duel/constants.ts (100%) rename packages/{website-legacy => website}/src/stores/duel/index.ts (55%) rename packages/{website-legacy => website}/src/stores/embedState/constants.ts (90%) rename packages/{website-legacy => website}/src/stores/embedState/index.ts (89%) rename packages/{website-legacy => website}/src/stores/embedState/utilities.ts (100%) rename packages/{website-legacy => website}/src/stores/session.ts (71%) rename packages/{website-legacy => website}/src/stores/tankFilters.ts (73%) rename packages/{website-legacy => website}/src/stores/tankPerformancePersistent/constants.ts (100%) rename packages/{website-legacy => website}/src/stores/tankPerformancePersistent/index.ts (61%) rename packages/{website-legacy => website}/src/stores/tankPerformanceSort/constants.ts (100%) rename packages/{website-legacy => website}/src/stores/tankPerformanceSort/index.ts (67%) rename packages/{website-legacy => website}/src/stores/tankopediaEphemeral.ts (92%) rename packages/{website-legacy => website}/src/stores/tankopediaPersistent/constants.ts (100%) rename packages/{website-legacy => website}/src/stores/tankopediaPersistent/index.ts (87%) rename packages/{website-legacy => website}/src/stores/tankopediaSort.ts (65%) rename packages/{website-legacy => website}/src/types/glsl.d.ts (100%) rename packages/{website-legacy => website}/src/types/proto.d.ts (100%) rename packages/{website-legacy => website}/src/types/urlon.d.ts (100%) diff --git a/bun.lockb b/bun.lockb index 8f65d7598478725a8392ce106211dd26b472ca33..6babcd457d3f4a3a5830eb9ec09b0364472496b3 100644 GIT binary patch delta 38171 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 cy{QkYl29c}Nnoyi+k^lez delta 37768 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 qzh;m27HRt9q?beGRXdKyW7d_a -
- - - - - - BlitzKit - {isBranchNamed && ( - - {BRANCH_NAMES[process.env.NEXT_PUBLIC_ASSET_BRANCH!]} - - )} - - - - {!isBranchNamed && ( - - Everything World of Tanks Blitz - - )} - - - - ); -} diff --git a/packages/website-legacy/src/app/page.tsx b/packages/website-legacy/src/app/page.tsx index 326237588..2372f5682 100644 --- a/packages/website-legacy/src/app/page.tsx +++ b/packages/website-legacy/src/app/page.tsx @@ -1,7 +1,8 @@ 'use client'; import { Flex, Heading } from '@radix-ui/themes'; -import { AdMidSectionResponsive } from '../components/AdMidSectionResponsive'; +import { Hero } from '../../../website/src/components/Hero'; +import { ToolCard } from '../../../website/src/components/ToolCard'; import { compareTool, discordTool, @@ -11,96 +12,95 @@ import { tankopediaTool, tankPerformanceTool, } from '../../../website/src/constants/tools'; +import { AdMidSectionResponsive } from '../components/AdMidSectionResponsive'; import { useAdExempt } from '../hooks/useAdExempt'; -import { Hero } from './components/Hero'; -import { Plugs } from './components/Plugs'; -import { ToolCard } from '../../../website/src/components/ToolCard'; +import { Plugs } from '../../../website/src/components/Plugs'; export default function Page() { const exempt = useAdExempt(); return ( <> - + - + - - - + + + - - {/* */} - - - - - {!exempt && ( - - + + {/* */} + + - )} - - - {/* */} - - + {!exempt && ( + + + + )} - {!exempt && ( - - + + + {/* */} + - )} - - - - + {!exempt && ( + + + + )} - {!exempt && } + + + + - Other cool projects + {!exempt && } - - - + Other cool projects + + + + + - -
+
); } diff --git a/packages/website-legacy/src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx b/packages/website-legacy/src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx index e55e4559c..65932bdc5 100644 --- a/packages/website-legacy/src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx +++ b/packages/website-legacy/src/app/tools/embed/[embed]/components/PreviewWrapper/index.tsx @@ -1,6 +1,6 @@ import { Box } from '@radix-ui/themes'; import { useEffect, useRef } from 'react'; -import { previews } from '../../../../../../constants/embeds'; +import { previews } from '../../../../../../../../website/src/constants/embeds'; import { useEmbedStateCurry } from '../../../../../../stores/embedState/utilities'; import * as styles from './index.css'; 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 792b628db..8d8f7d815 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 @@ -7,7 +7,7 @@ import { PageWrapper } from '../../../../../components/PageWrapper'; import { configurations, extractEmbedConfigDefaults, -} from '../../../../../constants/embeds'; +} from '../../../../../../../website/src/constants/embeds'; import * as EmbedState from '../../../../../stores/embedState'; export interface EmbedPreviewControllerProps { diff --git a/packages/website-legacy/src/app/tools/embed/[embed]/layout.tsx b/packages/website-legacy/src/app/tools/embed/[embed]/layout.tsx index 35bf1c583..08bdcc4e7 100644 --- a/packages/website-legacy/src/app/tools/embed/[embed]/layout.tsx +++ b/packages/website-legacy/src/app/tools/embed/[embed]/layout.tsx @@ -2,7 +2,7 @@ import { useMemo } from 'react'; import { configurations, extractEmbedConfigDefaults, -} from '../../../../constants/embeds'; +} from '../../../../../../website/src/constants/embeds'; import * as EmbedState from '../../../../stores/embedState'; export function generateStaticParams() { 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 f5940325b..72c33be8d 100644 --- a/packages/website-legacy/src/app/tools/embed/[embed]/page.tsx +++ b/packages/website-legacy/src/app/tools/embed/[embed]/page.tsx @@ -16,7 +16,7 @@ import { ReactNode, useEffect, useRef, useState } from 'react'; import { stringify } from 'urlon'; import { CopyButton } from '../../../../components/CopyButton'; import { PageWrapper } from '../../../../components/PageWrapper'; -import { configurations } from '../../../../constants/embeds'; +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/embed/configurations/breakdown.tsx b/packages/website-legacy/src/app/tools/embed/configurations/breakdown.tsx index 27f248ac8..afbab35f3 100644 --- a/packages/website-legacy/src/app/tools/embed/configurations/breakdown.tsx +++ b/packages/website-legacy/src/app/tools/embed/configurations/breakdown.tsx @@ -5,7 +5,7 @@ import { BreakdownEmbedCard, BreakdownEmbedWrapper, } from '../../../../components/TanksEmbed'; -import { breakdownConfig } from '../../../../constants/embeds'; +import { breakdownConfig } from '../../../../../../website/src/constants/embeds'; import { useEmbedStateCurry } from '../../../../stores/embedState/utilities'; export const compositeStatsKeysOptions = compositeStatsKeys.map((value) => ({ diff --git a/packages/website-legacy/tsconfig.json b/packages/website-legacy/tsconfig.json index fb7e7fe17..baabeb9b6 100644 --- a/packages/website-legacy/tsconfig.json +++ b/packages/website-legacy/tsconfig.json @@ -11,6 +11,11 @@ "src/**/*", ".next/types/**/*.ts", "../../dist/website/types/**/*.ts", - "dist/website/types/**/*.ts" -, "../website/src/components/ToolCard.tsx", "../website/src/constants/tools.tsx" ] + "dist/website/types/**/*.ts", + "../website/src/components/ToolCard.tsx", + "../website/src/constants/tools.tsx", + "../website/src/components/Plugs.tsx", + "../website/src/constants/embeds.ts", + "../website/src/types" + ] } diff --git a/packages/website/package.json b/packages/website/package.json index f53c81947..82f0c0e61 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -17,6 +17,7 @@ "@vanilla-extract/css": "^1.15.5", "astro": "^4.15.6", "astro-purgecss": "^4.6.0", + "nanostores": "^0.11.3", "purgecss": "^6.0.0", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/packages/website-legacy/src/components/Ad.tsx b/packages/website/src/components/Ad.tsx similarity index 100% rename from packages/website-legacy/src/components/Ad.tsx rename to packages/website/src/components/Ad.tsx diff --git a/packages/website-legacy/src/components/AdMidSectionNarrowOnly.tsx b/packages/website/src/components/AdMidSectionNarrowOnly.tsx similarity index 100% rename from packages/website-legacy/src/components/AdMidSectionNarrowOnly.tsx rename to packages/website/src/components/AdMidSectionNarrowOnly.tsx diff --git a/packages/website-legacy/src/components/AdMidSectionResponsive.tsx b/packages/website/src/components/AdMidSectionResponsive.tsx similarity index 100% rename from packages/website-legacy/src/components/AdMidSectionResponsive.tsx rename to packages/website/src/components/AdMidSectionResponsive.tsx diff --git a/packages/website-legacy/src/components/AdMidSectionWideOnly.tsx b/packages/website/src/components/AdMidSectionWideOnly.tsx similarity index 100% rename from packages/website-legacy/src/components/AdMidSectionWideOnly.tsx rename to packages/website/src/components/AdMidSectionWideOnly.tsx diff --git a/packages/website-legacy/src/components/Armor/components/ArmorPlateDisplay.tsx b/packages/website/src/components/Armor/components/ArmorPlateDisplay.tsx similarity index 95% rename from packages/website-legacy/src/components/Armor/components/ArmorPlateDisplay.tsx rename to packages/website/src/components/Armor/components/ArmorPlateDisplay.tsx index 6de3400cb..ebd92b17a 100644 --- a/packages/website-legacy/src/components/Armor/components/ArmorPlateDisplay.tsx +++ b/packages/website/src/components/Armor/components/ArmorPlateDisplay.tsx @@ -10,10 +10,10 @@ import { import { Html } from '@react-three/drei'; import { useRef } from 'react'; import { radToDeg } from 'three/src/math/MathUtils'; -import { resolveArmorIndex } from '../../../core/blitzkit/resolveArmorIndex'; -import * as App from '../../../stores/app'; -import * as Duel from '../../../stores/duel'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; +import { resolveArmorIndex } from '../../../../../website-legacy/src/core/blitzkit/resolveArmorIndex'; +import * as App from '../../../../../website-legacy/src/stores/app'; +import * as Duel from '../../../../../website-legacy/src/stores/duel'; +import * as TankopediaEphemeral from '../../../../../website-legacy/src/stores/tankopediaEphemeral'; import { layerTypeNames } from './ShotDisplayCard'; import { ArmorType } from './SpacedArmorScene'; diff --git a/packages/website-legacy/src/components/Armor/components/ModelTankWrapper.tsx b/packages/website/src/components/Armor/components/ModelTankWrapper.tsx similarity index 100% rename from packages/website-legacy/src/components/Armor/components/ModelTankWrapper.tsx rename to packages/website/src/components/Armor/components/ModelTankWrapper.tsx diff --git a/packages/website-legacy/src/components/Armor/components/PrimaryArmorScene.tsx b/packages/website/src/components/Armor/components/PrimaryArmorScene.tsx similarity index 87% rename from packages/website-legacy/src/components/Armor/components/PrimaryArmorScene.tsx rename to packages/website/src/components/Armor/components/PrimaryArmorScene.tsx index 378e54227..73b32a5ac 100644 --- a/packages/website-legacy/src/components/Armor/components/PrimaryArmorScene.tsx +++ b/packages/website/src/components/Armor/components/PrimaryArmorScene.tsx @@ -1,12 +1,12 @@ import { memo, useRef } from 'react'; import { Group } from 'three'; -import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; -import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId'; -import { resolveArmor } from '../../../core/blitzkit/resolveThickness'; -import { useArmor } from '../../../hooks/useArmor'; -import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; -import { useTankTransform } from '../../../hooks/useTankTransform'; -import * as Duel from '../../../stores/duel'; +import { correctZYTuple } from '../../../../../website-legacy/src/core/blitz/correctZYTuple'; +import { nameToArmorId } from '../../../../../website-legacy/src/core/blitzkit/nameToArmorId'; +import { resolveArmor } from '../../../../../website-legacy/src/core/blitzkit/resolveThickness'; +import { useArmor } from '../../../../../website-legacy/src/hooks/useArmor'; +import { useTankModelDefinition } from '../../../../../website-legacy/src/hooks/useTankModelDefinition'; +import { useTankTransform } from '../../../../../website-legacy/src/hooks/useTankTransform'; +import * as Duel from '../../../../../website-legacy/src/stores/duel'; import { ModelTankWrapper } from './ModelTankWrapper'; import { PrimaryArmorSceneComponent } from './PrimaryArmorSceneComponent'; diff --git a/packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx similarity index 93% rename from packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx rename to packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx index 7eee326e2..51ad3a6e9 100644 --- a/packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx +++ b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx @@ -9,10 +9,10 @@ import { useFrame } from '@react-three/fiber'; import { useEffect } from 'react'; import { MeshBasicMaterial, Object3D, ShaderMaterial, Vector2 } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; -import { hasEquipment } from '../../../../core/blitzkit/hasEquipment'; -import { jsxTree } from '../../../../core/blitzkit/jsxTree'; -import * as Duel from '../../../../stores/duel'; -import * as TankopediaPersistent from '../../../../stores/tankopediaPersistent'; +import { hasEquipment } from '../../../../../../website-legacy/src/core/blitzkit/hasEquipment'; +import { jsxTree } from '../../../../../../website-legacy/src/core/blitzkit/jsxTree'; +import * as Duel from '../../../../../../website-legacy/src/stores/duel'; +import * as TankopediaPersistent from '../../../../../../website-legacy/src/stores/tankopediaPersistent'; import fragmentShader from './shaders/fragment.glsl'; import vertexShader from './shaders/vertex.glsl'; import { spacedArmorRenderTarget } from './target'; diff --git a/packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/fragment.glsl b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/fragment.glsl similarity index 100% rename from packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/fragment.glsl rename to packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/fragment.glsl diff --git a/packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/vertex.glsl b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/vertex.glsl similarity index 100% rename from packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/vertex.glsl rename to packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/shaders/vertex.glsl diff --git a/packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/target.tsx b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/target.tsx similarity index 100% rename from packages/website-legacy/src/components/Armor/components/PrimaryArmorSceneComponent/target.tsx rename to packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/target.tsx diff --git a/packages/website-legacy/src/components/Armor/components/ShotDisplay.tsx b/packages/website/src/components/Armor/components/ShotDisplay.tsx similarity index 97% rename from packages/website-legacy/src/components/Armor/components/ShotDisplay.tsx rename to packages/website/src/components/Armor/components/ShotDisplay.tsx index 2da89a27e..a7d240ccf 100644 --- a/packages/website-legacy/src/components/Armor/components/ShotDisplay.tsx +++ b/packages/website/src/components/Armor/components/ShotDisplay.tsx @@ -16,8 +16,8 @@ import { Path, Quaternion, } from 'three'; -import { useFullScreen } from '../../../hooks/useFullScreen'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; +import { useFullScreen } from '../../../../../website-legacy/src/hooks/useFullScreen'; +import * as TankopediaEphemeral from '../../../../../website-legacy/src/stores/tankopediaEphemeral'; import { ShotDisplayCard } from './ShotDisplayCard'; export const shotStatusColors: Record< diff --git a/packages/website-legacy/src/components/Armor/components/ShotDisplayCard.tsx b/packages/website/src/components/Armor/components/ShotDisplayCard.tsx similarity index 98% rename from packages/website-legacy/src/components/Armor/components/ShotDisplayCard.tsx rename to packages/website/src/components/Armor/components/ShotDisplayCard.tsx index cc54c0add..5b04e564f 100644 --- a/packages/website-legacy/src/components/Armor/components/ShotDisplayCard.tsx +++ b/packages/website/src/components/Armor/components/ShotDisplayCard.tsx @@ -8,7 +8,7 @@ import { } from '@radix-ui/themes'; import { ComponentProps } from 'react'; import { radToDeg } from 'three/src/math/MathUtils'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; +import * as TankopediaEphemeral from '../../../../../website-legacy/src/stores/tankopediaEphemeral'; import { shotStatusColors } from './ShotDisplay'; import { ArmorType } from './SpacedArmorScene'; import { ExternalModuleVariant } from './SpacedArmorSceneComponent'; diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorScene.tsx b/packages/website/src/components/Armor/components/SpacedArmorScene.tsx similarity index 90% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorScene.tsx rename to packages/website/src/components/Armor/components/SpacedArmorScene.tsx index b691debb2..1313832b8 100644 --- a/packages/website-legacy/src/components/Armor/components/SpacedArmorScene.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorScene.tsx @@ -1,13 +1,13 @@ import { memo, useRef } from 'react'; import { Group, Plane, Scene, Vector3 } from 'three'; -import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; -import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId'; -import { resolveArmor } from '../../../core/blitzkit/resolveThickness'; -import { useArmor } from '../../../hooks/useArmor'; -import { useModel } from '../../../hooks/useModel'; -import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; -import { useTankTransform } from '../../../hooks/useTankTransform'; -import * as Duel from '../../../stores/duel'; +import { correctZYTuple } from '../../../../../website-legacy/src/core/blitz/correctZYTuple'; +import { nameToArmorId } from '../../../../../website-legacy/src/core/blitzkit/nameToArmorId'; +import { resolveArmor } from '../../../../../website-legacy/src/core/blitzkit/resolveThickness'; +import { useArmor } from '../../../../../website-legacy/src/hooks/useArmor'; +import { useModel } from '../../../../../website-legacy/src/hooks/useModel'; +import { useTankModelDefinition } from '../../../../../website-legacy/src/hooks/useTankModelDefinition'; +import { useTankTransform } from '../../../../../website-legacy/src/hooks/useTankTransform'; +import * as Duel from '../../../../../website-legacy/src/stores/duel'; import { ModelTankWrapper } from './ModelTankWrapper'; import { SpacedArmorSceneComponent } from './SpacedArmorSceneComponent'; diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx similarity index 92% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx rename to packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx index a489e8002..760d05198 100644 --- a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx @@ -12,9 +12,9 @@ import { ShaderMaterial, } from 'three'; import { ArmorUserData, ExternalModuleVariant } from '../..'; -import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment'; -import { jsxTree } from '../../../../../../core/blitzkit/jsxTree'; -import * as Duel from '../../../../../../stores/duel'; +import { hasEquipment } from '../../../../../../../../website-legacy/src/core/blitzkit/hasEquipment'; +import { jsxTree } from '../../../../../../../../website-legacy/src/core/blitzkit/jsxTree'; +import * as Duel from '../../../../../../../../website-legacy/src/stores/duel'; import { ArmorType } from '../../../SpacedArmorScene'; import fragmentShader from './shaders/fragment.glsl'; import vertexShader from './shaders/vertex.glsl'; diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl similarity index 100% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl rename to packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl similarity index 100% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl rename to packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx similarity index 93% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx rename to packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx index b61204754..85064ce16 100644 --- a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx @@ -13,9 +13,9 @@ import { } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; import { ArmorUserData } from '../..'; -import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment'; -import { jsxTree } from '../../../../../../core/blitzkit/jsxTree'; -import * as Duel from '../../../../../../stores/duel'; +import { hasEquipment } from '../../../../../../../../website-legacy/src/core/blitzkit/hasEquipment'; +import { jsxTree } from '../../../../../../../../website-legacy/src/core/blitzkit/jsxTree'; +import * as Duel from '../../../../../../../../website-legacy/src/stores/duel'; import { ArmorType } from '../../../SpacedArmorScene'; import fragmentShader from './shaders/fragment.glsl'; import vertexShader from './shaders/vertex.glsl'; diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/fragment.glsl b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/fragment.glsl similarity index 100% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/fragment.glsl rename to packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/fragment.glsl diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/vertex.glsl b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/vertex.glsl similarity index 100% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/vertex.glsl rename to packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/shaders/vertex.glsl diff --git a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx similarity index 96% rename from packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx rename to packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx index 33aeaa185..7c654e0ae 100644 --- a/packages/website-legacy/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx @@ -17,11 +17,11 @@ import { Vector3, } from 'three'; import { degToRad } from 'three/src/math/MathUtils'; -import { hasEquipment } from '../../../../core/blitzkit/hasEquipment'; -import { jsxTree } from '../../../../core/blitzkit/jsxTree'; -import { discardClippingPlane } from '../../../../core/three/discardClippingPlane'; -import * as Duel from '../../../../stores/duel'; -import * as TankopediaEphemeral from '../../../../stores/tankopediaEphemeral'; +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 { ArmorType } from '../SpacedArmorScene'; import { SpacedArmorSubExternal } from './components/SpacedArmorSubExternal'; import { SpacedArmorSubSpaced } from './components/SpacedArmorSubSpaced'; diff --git a/packages/website-legacy/src/components/Armor/components/StaticArmor.tsx b/packages/website/src/components/Armor/components/StaticArmor.tsx similarity index 92% rename from packages/website-legacy/src/components/Armor/components/StaticArmor.tsx rename to packages/website/src/components/Armor/components/StaticArmor.tsx index 92b1a3566..eccfaf02c 100644 --- a/packages/website-legacy/src/components/Armor/components/StaticArmor.tsx +++ b/packages/website/src/components/Armor/components/StaticArmor.tsx @@ -2,19 +2,19 @@ import { normalizeAngleRad } from '@blitzkit/core'; import { ThreeEvent, useThree } from '@react-three/fiber'; import { memo, useRef } from 'react'; import { Group, Plane, Vector2, Vector3 } from 'three'; -import { applyPitchYawLimits } from '../../../core/blitz/applyPitchYawLimits'; -import { correctZYTuple } from '../../../core/blitz/correctZYTuple'; -import { hasEquipment } from '../../../core/blitzkit/hasEquipment'; -import { modelTransformEvent } from '../../../core/blitzkit/modelTransform'; -import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId'; -import { resolveArmor } from '../../../core/blitzkit/resolveThickness'; -import { useArmor } from '../../../hooks/useArmor'; -import { useModel } from '../../../hooks/useModel'; -import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition'; -import { useTankTransform } from '../../../hooks/useTankTransform'; -import * as Duel from '../../../stores/duel'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; -import * as TankopediaPersistent from '../../../stores/tankopediaPersistent'; +import { applyPitchYawLimits } from '../../../../../website-legacy/src/core/blitz/applyPitchYawLimits'; +import { correctZYTuple } from '../../../../../website-legacy/src/core/blitz/correctZYTuple'; +import { hasEquipment } from '../../../../../website-legacy/src/core/blitzkit/hasEquipment'; +import { modelTransformEvent } from '../../../../../website-legacy/src/core/blitzkit/modelTransform'; +import { nameToArmorId } from '../../../../../website-legacy/src/core/blitzkit/nameToArmorId'; +import { resolveArmor } from '../../../../../website-legacy/src/core/blitzkit/resolveThickness'; +import { useArmor } from '../../../../../website-legacy/src/hooks/useArmor'; +import { useModel } from '../../../../../website-legacy/src/hooks/useModel'; +import { useTankModelDefinition } from '../../../../../website-legacy/src/hooks/useTankModelDefinition'; +import { useTankTransform } from '../../../../../website-legacy/src/hooks/useTankTransform'; +import * as Duel from '../../../../../website-legacy/src/stores/duel'; +import * as TankopediaEphemeral from '../../../../../website-legacy/src/stores/tankopediaEphemeral'; +import * as TankopediaPersistent from '../../../../../website-legacy/src/stores/tankopediaPersistent'; import { ModelTankWrapper } from './ModelTankWrapper'; import { ArmorType } from './SpacedArmorScene'; import { StaticArmorSceneComponent } from './StaticArmorSceneComponent'; diff --git a/packages/website-legacy/src/components/Armor/components/StaticArmorSceneComponent.tsx b/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx similarity index 94% rename from packages/website-legacy/src/components/Armor/components/StaticArmorSceneComponent.tsx rename to packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx index d6c3ddb1d..198f70349 100644 --- a/packages/website-legacy/src/components/Armor/components/StaticArmorSceneComponent.tsx +++ b/packages/website/src/components/Armor/components/StaticArmorSceneComponent.tsx @@ -15,14 +15,14 @@ import { Quaternion, Vector3, } from 'three'; -import { unrotateDavaVector } from '../../../core/blitz/unrotateDavaVector'; -import { jsxTree } from '../../../core/blitzkit/jsxTree'; +import { unrotateDavaVector } from '../../../../../website-legacy/src/core/blitz/unrotateDavaVector'; +import { jsxTree } from '../../../../../website-legacy/src/core/blitzkit/jsxTree'; import { ModelTransformEventData, modelTransformEvent, -} from '../../../core/blitzkit/modelTransform'; -import { discardClippingPlane } from '../../../core/three/discardClippingPlane'; -import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral'; +} from '../../../../../website-legacy/src/core/blitzkit/modelTransform'; +import { discardClippingPlane } from '../../../../../website-legacy/src/core/three/discardClippingPlane'; +import * as TankopediaEphemeral from '../../../../../website-legacy/src/stores/tankopediaEphemeral'; import { ArmorType } from './SpacedArmorScene'; import { ArmorUserData, diff --git a/packages/website-legacy/src/components/Armor/index.tsx b/packages/website/src/components/Armor/index.tsx similarity index 100% rename from packages/website-legacy/src/components/Armor/index.tsx rename to packages/website/src/components/Armor/index.tsx diff --git a/packages/website-legacy/src/components/BlitzkitButtonGrayIcon.tsx b/packages/website/src/components/BlitzkitButtonGrayIcon.tsx similarity index 100% rename from packages/website-legacy/src/components/BlitzkitButtonGrayIcon.tsx rename to packages/website/src/components/BlitzkitButtonGrayIcon.tsx diff --git a/packages/website-legacy/src/components/ClassIcon/components/ClassHeavy.tsx b/packages/website/src/components/ClassIcon/components/ClassHeavy.tsx similarity index 100% rename from packages/website-legacy/src/components/ClassIcon/components/ClassHeavy.tsx rename to packages/website/src/components/ClassIcon/components/ClassHeavy.tsx diff --git a/packages/website-legacy/src/components/ClassIcon/components/ClassLight.tsx b/packages/website/src/components/ClassIcon/components/ClassLight.tsx similarity index 100% rename from packages/website-legacy/src/components/ClassIcon/components/ClassLight.tsx rename to packages/website/src/components/ClassIcon/components/ClassLight.tsx diff --git a/packages/website-legacy/src/components/ClassIcon/components/ClassMedium.tsx b/packages/website/src/components/ClassIcon/components/ClassMedium.tsx similarity index 100% rename from packages/website-legacy/src/components/ClassIcon/components/ClassMedium.tsx rename to packages/website/src/components/ClassIcon/components/ClassMedium.tsx diff --git a/packages/website-legacy/src/components/ClassIcon/components/ClassTankDestroyer.tsx b/packages/website/src/components/ClassIcon/components/ClassTankDestroyer.tsx similarity index 100% rename from packages/website-legacy/src/components/ClassIcon/components/ClassTankDestroyer.tsx rename to packages/website/src/components/ClassIcon/components/ClassTankDestroyer.tsx diff --git a/packages/website-legacy/src/components/ClassIcon/index.ts b/packages/website/src/components/ClassIcon/index.ts similarity index 100% rename from packages/website-legacy/src/components/ClassIcon/index.ts rename to packages/website/src/components/ClassIcon/index.ts diff --git a/packages/website-legacy/src/components/ConsumablesManager.tsx b/packages/website/src/components/ConsumablesManager.tsx similarity index 100% rename from packages/website-legacy/src/components/ConsumablesManager.tsx rename to packages/website/src/components/ConsumablesManager.tsx diff --git a/packages/website-legacy/src/components/CopyButton.tsx b/packages/website/src/components/CopyButton.tsx similarity index 100% rename from packages/website-legacy/src/components/CopyButton.tsx rename to packages/website/src/components/CopyButton.tsx diff --git a/packages/website-legacy/src/components/CrewSkillManager.tsx b/packages/website/src/components/CrewSkillManager.tsx similarity index 100% rename from packages/website-legacy/src/components/CrewSkillManager.tsx rename to packages/website/src/components/CrewSkillManager.tsx diff --git a/packages/website-legacy/src/components/DatePicker.tsx b/packages/website/src/components/DatePicker.tsx similarity index 100% rename from packages/website-legacy/src/components/DatePicker.tsx rename to packages/website/src/components/DatePicker.tsx diff --git a/packages/website-legacy/src/components/DummyLink.tsx b/packages/website/src/components/DummyLink.tsx similarity index 100% rename from packages/website-legacy/src/components/DummyLink.tsx rename to packages/website/src/components/DummyLink.tsx diff --git a/packages/website-legacy/src/components/EquipmentManager.tsx b/packages/website/src/components/EquipmentManager.tsx similarity index 96% rename from packages/website-legacy/src/components/EquipmentManager.tsx rename to packages/website/src/components/EquipmentManager.tsx index 9503dc55a..445708f0d 100644 --- a/packages/website-legacy/src/components/EquipmentManager.tsx +++ b/packages/website/src/components/EquipmentManager.tsx @@ -1,7 +1,7 @@ import { EquipmentPreset } from '@blitzkit/core'; import { Flex } from '@radix-ui/themes'; import { cloneDeep } from 'lodash'; -import { EquipmentMatrix } from '../stores/duel'; +import { EquipmentMatrix } from '../../../website-legacy/src/stores/duel'; import { EquipmentButton } from './ModuleButtons/EquipmentButton'; interface EquipmentManagerProps { diff --git a/packages/website-legacy/src/components/ExperimentIcon.tsx b/packages/website/src/components/ExperimentIcon.tsx similarity index 100% rename from packages/website-legacy/src/components/ExperimentIcon.tsx rename to packages/website/src/components/ExperimentIcon.tsx diff --git a/packages/website-legacy/src/components/Footer/components/WoTBVersion.tsx b/packages/website/src/components/Footer/components/WoTBVersion.tsx similarity index 100% rename from packages/website-legacy/src/components/Footer/components/WoTBVersion.tsx rename to packages/website/src/components/Footer/components/WoTBVersion.tsx diff --git a/packages/website-legacy/src/components/Footer/index.css.ts b/packages/website/src/components/Footer/index.css.ts similarity index 100% rename from packages/website-legacy/src/components/Footer/index.css.ts rename to packages/website/src/components/Footer/index.css.ts diff --git a/packages/website-legacy/src/components/Footer/index.tsx b/packages/website/src/components/Footer/index.tsx similarity index 100% rename from packages/website-legacy/src/components/Footer/index.tsx rename to packages/website/src/components/Footer/index.tsx diff --git a/packages/website/src/components/HomeHero.astro b/packages/website/src/components/HomeHero.astro new file mode 100644 index 000000000..26134a38e --- /dev/null +++ b/packages/website/src/components/HomeHero.astro @@ -0,0 +1,77 @@ +--- +import { imgur } from '@blitzkit/core'; +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]; +--- + + + + +
+
+ + + + + + BlitzKit + { + isBranchNamed && ( + + {BRANCH_NAMES[process.env.NEXT_PUBLIC_ASSET_BRANCH!]} + + ) + } + + + + { + !isBranchNamed && ( + + Everything World of Tanks Blitz + + ) + } + + +
diff --git a/packages/website-legacy/src/components/Link.tsx b/packages/website/src/components/Link.tsx similarity index 100% rename from packages/website-legacy/src/components/Link.tsx rename to packages/website/src/components/Link.tsx diff --git a/packages/website-legacy/src/components/ModuleButtons/ConsumableButton.tsx b/packages/website/src/components/ModuleButtons/ConsumableButton.tsx similarity index 96% rename from packages/website-legacy/src/components/ModuleButtons/ConsumableButton.tsx rename to packages/website/src/components/ModuleButtons/ConsumableButton.tsx index af21d5fb7..ff659e32e 100644 --- a/packages/website-legacy/src/components/ModuleButtons/ConsumableButton.tsx +++ b/packages/website/src/components/ModuleButtons/ConsumableButton.tsx @@ -2,7 +2,7 @@ import { asset, consumableDefinitions } from '@blitzkit/core'; import { ClockIcon, ReloadIcon } from '@radix-ui/react-icons'; import { Flex, Text } from '@radix-ui/themes'; import { use } from 'react'; -import { useDelta } from '../../hooks/useDelta'; +import { useDelta } from '../../../../website-legacy/src/hooks/useDelta'; import { GenericTankComponentButton } from './GenericTankComponentButton'; import { TankComponentButtonProps } from './TankComponentButton'; diff --git a/packages/website-legacy/src/components/ModuleButtons/EquipmentButton.tsx b/packages/website/src/components/ModuleButtons/EquipmentButton.tsx similarity index 100% rename from packages/website-legacy/src/components/ModuleButtons/EquipmentButton.tsx rename to packages/website/src/components/ModuleButtons/EquipmentButton.tsx diff --git a/packages/website-legacy/src/components/ModuleButtons/GenericTankComponentButton.tsx b/packages/website/src/components/ModuleButtons/GenericTankComponentButton.tsx similarity index 100% rename from packages/website-legacy/src/components/ModuleButtons/GenericTankComponentButton.tsx rename to packages/website/src/components/ModuleButtons/GenericTankComponentButton.tsx diff --git a/packages/website-legacy/src/components/ModuleButtons/ModuleButton.tsx b/packages/website/src/components/ModuleButtons/ModuleButton.tsx similarity index 100% rename from packages/website-legacy/src/components/ModuleButtons/ModuleButton.tsx rename to packages/website/src/components/ModuleButtons/ModuleButton.tsx diff --git a/packages/website-legacy/src/components/ModuleButtons/ProvisionButton.tsx b/packages/website/src/components/ModuleButtons/ProvisionButton.tsx similarity index 100% rename from packages/website-legacy/src/components/ModuleButtons/ProvisionButton.tsx rename to packages/website/src/components/ModuleButtons/ProvisionButton.tsx diff --git a/packages/website-legacy/src/components/ModuleButtons/ShellButton.tsx b/packages/website/src/components/ModuleButtons/ShellButton.tsx similarity index 100% rename from packages/website-legacy/src/components/ModuleButtons/ShellButton.tsx rename to packages/website/src/components/ModuleButtons/ShellButton.tsx diff --git a/packages/website-legacy/src/components/ModuleButtons/TankComponentButton.tsx b/packages/website/src/components/ModuleButtons/TankComponentButton.tsx similarity index 100% rename from packages/website-legacy/src/components/ModuleButtons/TankComponentButton.tsx rename to packages/website/src/components/ModuleButtons/TankComponentButton.tsx diff --git a/packages/website-legacy/src/components/ModuleManager.tsx b/packages/website/src/components/ModuleManager.tsx similarity index 100% rename from packages/website-legacy/src/components/ModuleManager.tsx rename to packages/website/src/components/ModuleManager.tsx diff --git a/packages/website-legacy/src/components/Navbar/components/WargamingAccountName.tsx b/packages/website/src/components/Navbar/components/WargamingAccountName.tsx similarity index 90% rename from packages/website-legacy/src/components/Navbar/components/WargamingAccountName.tsx rename to packages/website/src/components/Navbar/components/WargamingAccountName.tsx index 45a16d352..c1eaf502e 100644 --- a/packages/website-legacy/src/components/Navbar/components/WargamingAccountName.tsx +++ b/packages/website/src/components/Navbar/components/WargamingAccountName.tsx @@ -1,7 +1,7 @@ import { getAccountInfo, idToRegion } from '@blitzkit/core'; import { Text } from '@radix-ui/themes'; import { use, useMemo } from 'react'; -import * as App from '../../../stores/app'; +import * as App from '../../../../../website-legacy/src/stores/app'; export function WargamingAccountName() { const wargaming = App.use((state) => state.logins.wargaming!); diff --git a/packages/website-legacy/src/components/Navbar/components/WargamingLoginButton.tsx b/packages/website/src/components/Navbar/components/WargamingLoginButton.tsx similarity index 100% rename from packages/website-legacy/src/components/Navbar/components/WargamingLoginButton.tsx rename to packages/website/src/components/Navbar/components/WargamingLoginButton.tsx diff --git a/packages/website-legacy/src/components/Navbar/index.css.ts b/packages/website/src/components/Navbar/index.css.ts similarity index 100% rename from packages/website-legacy/src/components/Navbar/index.css.ts rename to packages/website/src/components/Navbar/index.css.ts diff --git a/packages/website-legacy/src/components/Navbar/index.tsx b/packages/website/src/components/Navbar/index.tsx similarity index 98% rename from packages/website-legacy/src/components/Navbar/index.tsx rename to packages/website/src/components/Navbar/index.tsx index 2ebbafce1..41c833112 100644 --- a/packages/website-legacy/src/components/Navbar/index.tsx +++ b/packages/website/src/components/Navbar/index.tsx @@ -29,9 +29,9 @@ import { } from '@radix-ui/themes'; import { usePathname } from 'next/navigation'; import { Fragment, Suspense, useState } from 'react'; -import { BRANCH_NAMES } from '../../app/components/Hero/constants'; -import { homeTool, TOOLS } from '../../../../website/src/constants/tools'; -import * as App from '../../stores/app'; +import * as App from '../../../../website-legacy/src/stores/app'; +import { BRANCH_NAMES } from '../../../../website/src/components/Hero/constants'; +import { homeTool, TOOLS } from '../../constants/tools'; import { Link } from '../Link'; import { PatreonIcon } from '../PatreonIcon'; import { WargamingIcon } from '../WargamingIcon'; diff --git a/packages/website-legacy/src/components/PageWrapper.tsx b/packages/website/src/components/PageWrapper.tsx similarity index 93% rename from packages/website-legacy/src/components/PageWrapper.tsx rename to packages/website/src/components/PageWrapper.tsx index f9c34766f..1c733cc63 100644 --- a/packages/website-legacy/src/components/PageWrapper.tsx +++ b/packages/website/src/components/PageWrapper.tsx @@ -1,6 +1,6 @@ import { Flex, FlexProps, Theme } from '@radix-ui/themes'; import { ComponentProps } from 'react'; -import { RadixSize } from '../stores/embedState'; +import { RadixSize } from '../../../website-legacy/src/stores/embedState'; type PageWrapperProps = FlexProps & { color?: ComponentProps['accentColor']; diff --git a/packages/website-legacy/src/components/Party3.tsx b/packages/website/src/components/Party3.tsx similarity index 100% rename from packages/website-legacy/src/components/Party3.tsx rename to packages/website/src/components/Party3.tsx diff --git a/packages/website-legacy/src/components/PatreonIcon.tsx b/packages/website/src/components/PatreonIcon.tsx similarity index 100% rename from packages/website-legacy/src/components/PatreonIcon.tsx rename to packages/website/src/components/PatreonIcon.tsx diff --git a/packages/website-legacy/src/app/components/Plugs.tsx b/packages/website/src/components/Plugs.tsx similarity index 93% rename from packages/website-legacy/src/app/components/Plugs.tsx rename to packages/website/src/components/Plugs.tsx index 844d51982..46f5beb27 100644 --- a/packages/website-legacy/src/app/components/Plugs.tsx +++ b/packages/website/src/components/Plugs.tsx @@ -12,9 +12,9 @@ import { Text, } from '@radix-ui/themes'; import { useLayoutEffect, useState } from 'react'; -import { PatreonIcon } from '../../components/PatreonIcon'; -import { useAdExempt } from '../../hooks/useAdExempt'; -import * as App from '../../stores/app'; +import { useAdExempt } from '../hooks/useAdExempt'; +import * as App from '../stores/app'; +import { PatreonIcon } from './PatreonIcon'; export function Plugs() { const [hasPatreon, setHasPatreon] = useState(false); diff --git a/packages/website-legacy/src/components/ProvisionsManager.tsx b/packages/website/src/components/ProvisionsManager.tsx similarity index 100% rename from packages/website-legacy/src/components/ProvisionsManager.tsx rename to packages/website/src/components/ProvisionsManager.tsx diff --git a/packages/website-legacy/src/components/ResearchedIcon.tsx b/packages/website/src/components/ResearchedIcon.tsx similarity index 100% rename from packages/website-legacy/src/components/ResearchedIcon.tsx rename to packages/website/src/components/ResearchedIcon.tsx diff --git a/packages/website-legacy/src/components/ScienceIcon.tsx b/packages/website/src/components/ScienceIcon.tsx similarity index 100% rename from packages/website-legacy/src/components/ScienceIcon.tsx rename to packages/website/src/components/ScienceIcon.tsx diff --git a/packages/website-legacy/src/components/ScienceOffIcon.tsx b/packages/website/src/components/ScienceOffIcon.tsx similarity index 100% rename from packages/website-legacy/src/components/ScienceOffIcon.tsx rename to packages/website/src/components/ScienceOffIcon.tsx diff --git a/packages/website-legacy/src/components/Skeleton/index.css.ts b/packages/website/src/components/Skeleton/index.css.ts similarity index 100% rename from packages/website-legacy/src/components/Skeleton/index.css.ts rename to packages/website/src/components/Skeleton/index.css.ts diff --git a/packages/website-legacy/src/components/Skeleton/index.tsx b/packages/website/src/components/Skeleton/index.tsx similarity index 100% rename from packages/website-legacy/src/components/Skeleton/index.tsx rename to packages/website/src/components/Skeleton/index.tsx diff --git a/packages/website-legacy/src/components/SmallTankIcon.tsx b/packages/website/src/components/SmallTankIcon.tsx similarity index 100% rename from packages/website-legacy/src/components/SmallTankIcon.tsx rename to packages/website/src/components/SmallTankIcon.tsx diff --git a/packages/website-legacy/src/components/Speedometer.tsx b/packages/website/src/components/Speedometer.tsx similarity index 100% rename from packages/website-legacy/src/components/Speedometer.tsx rename to packages/website/src/components/Speedometer.tsx diff --git a/packages/website-legacy/src/components/StickyColumnHeaderCell.tsx b/packages/website/src/components/StickyColumnHeaderCell.tsx similarity index 100% rename from packages/website-legacy/src/components/StickyColumnHeaderCell.tsx rename to packages/website/src/components/StickyColumnHeaderCell.tsx diff --git a/packages/website-legacy/src/components/StickyRowHeaderCell.tsx b/packages/website/src/components/StickyRowHeaderCell.tsx similarity index 100% rename from packages/website-legacy/src/components/StickyRowHeaderCell.tsx rename to packages/website/src/components/StickyRowHeaderCell.tsx diff --git a/packages/website-legacy/src/components/StickyTableRoot.tsx b/packages/website/src/components/StickyTableRoot.tsx similarity index 100% rename from packages/website-legacy/src/components/StickyTableRoot.tsx rename to packages/website/src/components/StickyTableRoot.tsx diff --git a/packages/website-legacy/src/components/TankRowHeaderCell.tsx b/packages/website/src/components/TankRowHeaderCell.tsx similarity index 100% rename from packages/website-legacy/src/components/TankRowHeaderCell.tsx rename to packages/website/src/components/TankRowHeaderCell.tsx diff --git a/packages/website-legacy/src/components/TanksEmbed.tsx b/packages/website/src/components/TanksEmbed.tsx similarity index 95% rename from packages/website-legacy/src/components/TanksEmbed.tsx rename to packages/website/src/components/TanksEmbed.tsx index 12ae5b44c..f5ef4cfcd 100644 --- a/packages/website-legacy/src/components/TanksEmbed.tsx +++ b/packages/website/src/components/TanksEmbed.tsx @@ -8,9 +8,9 @@ import { amberDark, blueDark } from '@radix-ui/colors'; import { Flex, Text } from '@radix-ui/themes'; import { times } from 'lodash'; import { ReactNode } from 'react'; +import { toRadiusVar } from '../../../website-legacy/src/core/radix/utils'; +import { useEmbedStateCurry } from '../../../website-legacy/src/stores/embedState/utilities'; import { breakdownConfig } from '../constants/embeds'; -import { toRadiusVar } from '../core/radix/utils'; -import { useEmbedStateCurry } from '../stores/embedState/utilities'; import { ClassHeavy } from './ClassIcon/components/ClassHeavy'; import { ClassLight } from './ClassIcon/components/ClassLight'; import { ClassMedium } from './ClassIcon/components/ClassMedium'; diff --git a/packages/website/src/components/ToolCard.astro b/packages/website/src/components/ToolCard.astro index d82413ddb..3d90c7140 100644 --- a/packages/website/src/components/ToolCard.astro +++ b/packages/website/src/components/ToolCard.astro @@ -12,6 +12,8 @@ const { tool } = Astro.props; const disabled = tool.branches?.every( (branch) => branch !== assertSecret(process.env.PUBLIC_ASSET_BRANCH), ); + +console.log(process.env); --- @@ -65,7 +67,7 @@ const disabled = tool.branches?.every( = { children: ReactNode; @@ -22,9 +22,10 @@ type ExtractState = S extends { ? T : never; -export function createNextSafeStore, InitData>( - initialize: (data: InitData) => Store, -) { +export function createContextualSafeStore< + Store extends StoreApi, + InitData, +>(initialize: (data: InitData) => Store) { type Type = Store extends StoreApi ? T : never; const Context = createContext(undefined); diff --git a/packages/website-legacy/src/hooks/useAdExempt.ts b/packages/website/src/hooks/useAdExempt.ts similarity index 100% rename from packages/website-legacy/src/hooks/useAdExempt.ts rename to packages/website/src/hooks/useAdExempt.ts diff --git a/packages/website-legacy/src/hooks/useAppliedEquipments.ts b/packages/website/src/hooks/useAppliedEquipments.ts similarity index 100% rename from packages/website-legacy/src/hooks/useAppliedEquipments.ts rename to packages/website/src/hooks/useAppliedEquipments.ts diff --git a/packages/website-legacy/src/hooks/useArmor.ts b/packages/website/src/hooks/useArmor.ts similarity index 100% rename from packages/website-legacy/src/hooks/useArmor.ts rename to packages/website/src/hooks/useArmor.ts diff --git a/packages/website-legacy/src/hooks/useAveragesExclusionRatio.ts b/packages/website/src/hooks/useAveragesExclusionRatio.ts similarity index 100% rename from packages/website-legacy/src/hooks/useAveragesExclusionRatio.ts rename to packages/website/src/hooks/useAveragesExclusionRatio.ts diff --git a/packages/website-legacy/src/hooks/useAwait.ts b/packages/website/src/hooks/useAwait.ts similarity index 100% rename from packages/website-legacy/src/hooks/useAwait.ts rename to packages/website/src/hooks/useAwait.ts diff --git a/packages/website-legacy/src/hooks/useDelta.ts b/packages/website/src/hooks/useDelta.ts similarity index 100% rename from packages/website-legacy/src/hooks/useDelta.ts rename to packages/website/src/hooks/useDelta.ts diff --git a/packages/website-legacy/src/hooks/useEccentricity.ts b/packages/website/src/hooks/useEccentricity.ts similarity index 100% rename from packages/website-legacy/src/hooks/useEccentricity.ts rename to packages/website/src/hooks/useEccentricity.ts diff --git a/packages/website-legacy/src/hooks/useEquipment.ts b/packages/website/src/hooks/useEquipment.ts similarity index 100% rename from packages/website-legacy/src/hooks/useEquipment.ts rename to packages/website/src/hooks/useEquipment.ts diff --git a/packages/website-legacy/src/hooks/useEquipmentPreset.ts b/packages/website/src/hooks/useEquipmentPreset.ts similarity index 100% rename from packages/website-legacy/src/hooks/useEquipmentPreset.ts rename to packages/website/src/hooks/useEquipmentPreset.ts diff --git a/packages/website-legacy/src/hooks/useFullScreen.ts b/packages/website/src/hooks/useFullScreen.ts similarity index 100% rename from packages/website-legacy/src/hooks/useFullScreen.ts rename to packages/website/src/hooks/useFullScreen.ts diff --git a/packages/website-legacy/src/hooks/useFullscreenAvailability.ts b/packages/website/src/hooks/useFullscreenAvailability.ts similarity index 100% rename from packages/website-legacy/src/hooks/useFullscreenAvailability.ts rename to packages/website/src/hooks/useFullscreenAvailability.ts diff --git a/packages/website-legacy/src/hooks/useIntersection.ts b/packages/website/src/hooks/useIntersection.ts similarity index 100% rename from packages/website-legacy/src/hooks/useIntersection.ts rename to packages/website/src/hooks/useIntersection.ts diff --git a/packages/website-legacy/src/hooks/useModel.ts b/packages/website/src/hooks/useModel.ts similarity index 100% rename from packages/website-legacy/src/hooks/useModel.ts rename to packages/website/src/hooks/useModel.ts diff --git a/packages/website-legacy/src/hooks/useOnScreen.ts b/packages/website/src/hooks/useOnScreen.ts similarity index 100% rename from packages/website-legacy/src/hooks/useOnScreen.ts rename to packages/website/src/hooks/useOnScreen.ts diff --git a/packages/website-legacy/src/hooks/useProvision.ts b/packages/website/src/hooks/useProvision.ts similarity index 100% rename from packages/website-legacy/src/hooks/useProvision.ts rename to packages/website/src/hooks/useProvision.ts diff --git a/packages/website-legacy/src/hooks/useTankModelDefinition.ts b/packages/website/src/hooks/useTankModelDefinition.ts similarity index 100% rename from packages/website-legacy/src/hooks/useTankModelDefinition.ts rename to packages/website/src/hooks/useTankModelDefinition.ts diff --git a/packages/website-legacy/src/hooks/useTankTransform.ts b/packages/website/src/hooks/useTankTransform.ts similarity index 100% rename from packages/website-legacy/src/hooks/useTankTransform.ts rename to packages/website/src/hooks/useTankTransform.ts diff --git a/packages/website-legacy/src/hooks/useTankVotes.ts b/packages/website/src/hooks/useTankVotes.ts similarity index 100% rename from packages/website-legacy/src/hooks/useTankVotes.ts rename to packages/website/src/hooks/useTankVotes.ts diff --git a/packages/website/src/pages/index.astro b/packages/website/src/pages/index.astro index e9d511483..35305e503 100644 --- a/packages/website/src/pages/index.astro +++ b/packages/website/src/pages/index.astro @@ -1,5 +1,7 @@ --- import { Flex, Heading } from '@radix-ui/themes'; +import HomeHero from '../components/HomeHero.astro'; +import { Plugs } from '../components/Plugs.tsx'; import ToolCard from '../components/ToolCard.astro'; import { compareTool, @@ -11,24 +13,26 @@ import { tankPerformanceTool, } from '../constants/tools'; import RootLayout from '../layouts/RootLayout.astro'; +import * as App from '../stores/app'; --- - - + + + - + - - - + + + - - {/* */} - - - + + {/* */} + + + - - - - {/* */} - - + + + {/* */} + + - - - - - + + + + - + - Other cool projects + Other cool projects - - - + + + + - -
-
+
+
+ diff --git a/packages/website-legacy/src/stores/app/constants.ts b/packages/website/src/stores/app/constants.ts similarity index 100% rename from packages/website-legacy/src/stores/app/constants.ts rename to packages/website/src/stores/app/constants.ts diff --git a/packages/website-legacy/src/stores/app/index.ts b/packages/website/src/stores/app/index.ts similarity index 75% rename from packages/website-legacy/src/stores/app/index.ts rename to packages/website/src/stores/app/index.ts index e2b36e328..8732badd8 100644 --- a/packages/website-legacy/src/stores/app/index.ts +++ b/packages/website/src/stores/app/index.ts @@ -1,9 +1,9 @@ 'use client'; -import { merge } from 'lodash'; +import lodash from 'lodash'; import { create } from 'zustand'; import { persist } from 'zustand/middleware'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../../core/zustand/createContextualSafeStore'; interface WargamingLogin { id: number; @@ -27,7 +27,7 @@ export interface App { } export const { Provider, use, useMutation, useStore, useDeferred } = - createNextSafeStore(() => + createContextualSafeStore(() => create()( persist( (set) => ({ @@ -35,7 +35,7 @@ export const { Provider, use, useMutation, useStore, useDeferred } = policiesAgreementIndex: -1, logins: {}, }), - { name: 'app', merge: (a, b) => merge(b, a) }, + { name: 'app', merge: (a, b) => lodash.merge(b, a) }, ), ), ); diff --git a/packages/website-legacy/src/stores/compareEphemeral.ts b/packages/website/src/stores/compareEphemeral.ts similarity index 72% rename from packages/website-legacy/src/stores/compareEphemeral.ts rename to packages/website/src/stores/compareEphemeral.ts index d4c1c96b5..c3baacd43 100644 --- a/packages/website-legacy/src/stores/compareEphemeral.ts +++ b/packages/website/src/stores/compareEphemeral.ts @@ -1,7 +1,6 @@ 'use client'; import { create } from 'zustand'; -import { createNextSafeStore } from '../core/zustand/createNextSafeStore'; import { DuelMember } from './duel'; export interface CompareMember extends DuelMember { @@ -17,10 +16,10 @@ export interface CompareEphemeral { }; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()(() => ({ crewSkills: {}, members: [], })), -); + ); diff --git a/packages/website-legacy/src/stores/comparePersistent.ts b/packages/website/src/stores/comparePersistent.ts similarity index 63% rename from packages/website-legacy/src/stores/comparePersistent.ts rename to packages/website/src/stores/comparePersistent.ts index fa4522873..e770087df 100644 --- a/packages/website-legacy/src/stores/comparePersistent.ts +++ b/packages/website/src/stores/comparePersistent.ts @@ -1,17 +1,17 @@ 'use client'; -import { merge } from 'lodash'; +import lodash from 'lodash'; import { create } from 'zustand'; import { persist, subscribeWithSelector } from 'zustand/middleware'; -import { createNextSafeStore } from '../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../core/zustand/createContextualSafeStore'; export type DeltaMode = 'none' | 'percentage' | 'absolute'; export interface ComparePersistent { deltaMode: DeltaMode; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()( persist( subscribeWithSelector(() => ({ @@ -19,8 +19,8 @@ export const { Provider, use, useMutation, useStore } = createNextSafeStore( })), { name: 'compare', - merge: (a, b) => merge(b, a), + merge: (a, b) => lodash.merge(b, a), }, ), ), -); + ); diff --git a/packages/website-legacy/src/stores/duel/constants.ts b/packages/website/src/stores/duel/constants.ts similarity index 100% rename from packages/website-legacy/src/stores/duel/constants.ts rename to packages/website/src/stores/duel/constants.ts diff --git a/packages/website-legacy/src/stores/duel/index.ts b/packages/website/src/stores/duel/index.ts similarity index 55% rename from packages/website-legacy/src/stores/duel/index.ts rename to packages/website/src/stores/duel/index.ts index 908fc6de6..47181ff64 100644 --- a/packages/website-legacy/src/stores/duel/index.ts +++ b/packages/website/src/stores/duel/index.ts @@ -1,18 +1,18 @@ 'use client'; import { - EngineDefinition, - GunDefinition, - ProvisionDefinitions, - ShellDefinition, - TankDefinition, - TrackDefinition, - TurretDefinition, + type EngineDefinition, + type GunDefinition, + type ProvisionDefinitions, + type ShellDefinition, + type TankDefinition, + type TrackDefinition, + type TurretDefinition, } from '@blitzkit/core'; import { create } from 'zustand'; import { subscribeWithSelector } from 'zustand/middleware'; import { tankToDuelMember } from '../../core/blitzkit/tankToDuelMember'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../../core/zustand/createContextualSafeStore'; type EquipmentMatrixItem = -1 | 0 | 1; type EquipmentMatrixRow = [ @@ -48,21 +48,22 @@ export interface Duel { antagonist: DuelMember; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - ({ - tank, - provisionDefinitions, - }: { - tank: TankDefinition; - provisionDefinitions: ProvisionDefinitions; - }) => { - const protagonist = tankToDuelMember(tank, provisionDefinitions); +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore( + ({ + tank, + provisionDefinitions, + }: { + tank: TankDefinition; + provisionDefinitions: ProvisionDefinitions; + }) => { + const protagonist = tankToDuelMember(tank, provisionDefinitions); - return create()( - subscribeWithSelector(() => ({ - protagonist, - antagonist: protagonist, - })), - ); - }, -); + return create()( + subscribeWithSelector(() => ({ + protagonist, + antagonist: protagonist, + })), + ); + }, + ); diff --git a/packages/website-legacy/src/stores/embedState/constants.ts b/packages/website/src/stores/embedState/constants.ts similarity index 90% rename from packages/website-legacy/src/stores/embedState/constants.ts rename to packages/website/src/stores/embedState/constants.ts index 771659ed7..95ea7b555 100644 --- a/packages/website-legacy/src/stores/embedState/constants.ts +++ b/packages/website/src/stores/embedState/constants.ts @@ -1,4 +1,4 @@ -import { EmbedConfigItem } from '.'; +import type { EmbedConfigItem } from '.'; export enum EmbedItemType { Radius, diff --git a/packages/website-legacy/src/stores/embedState/index.ts b/packages/website/src/stores/embedState/index.ts similarity index 89% rename from packages/website-legacy/src/stores/embedState/index.ts rename to packages/website/src/stores/embedState/index.ts index 4740e1b5a..62c34848f 100644 --- a/packages/website-legacy/src/stores/embedState/index.ts +++ b/packages/website/src/stores/embedState/index.ts @@ -2,9 +2,9 @@ import * as radixColors from '@radix-ui/colors'; import { create } from 'zustand'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../../core/zustand/createContextualSafeStore'; import { - EmbedConfigItemType, + type EmbedConfigItemType, EmbedItemType, radixGrays, radixTextWeights, @@ -106,6 +106,7 @@ export type EmbedConfigItem = ( export type EmbedState = Record; -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - (init: EmbedState) => create()(() => init), -); +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore((init: EmbedState) => + create()(() => init), + ); diff --git a/packages/website-legacy/src/stores/embedState/utilities.ts b/packages/website/src/stores/embedState/utilities.ts similarity index 100% rename from packages/website-legacy/src/stores/embedState/utilities.ts rename to packages/website/src/stores/embedState/utilities.ts diff --git a/packages/website-legacy/src/stores/session.ts b/packages/website/src/stores/session.ts similarity index 71% rename from packages/website-legacy/src/stores/session.ts rename to packages/website/src/stores/session.ts index 7f479bf01..945df78c4 100644 --- a/packages/website-legacy/src/stores/session.ts +++ b/packages/website/src/stores/session.ts @@ -1,10 +1,10 @@ 'use client'; import { IndividualTankStats, Region, Stat } from '@blitzkit/core'; -import { merge } from 'lodash'; +import lodash from 'lodash'; import { create } from 'zustand'; import { persist } from 'zustand/middleware'; -import { createNextSafeStore } from '../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../core/zustand/createContextualSafeStore'; interface SessionBase { columns: Stat[]; @@ -26,15 +26,15 @@ interface SessionNotTracking extends SessionBase { type Session = SessionTracking | SessionNotTracking; -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()( persist( (set) => ({ columns: ['battles', 'winrate', 'wn8', 'averageDamage'], tracking: false, }), - { name: 'session-2', merge: (a, b) => merge(b, a) }, + { name: 'session-2', merge: (a, b) => lodash.merge(b, a) }, ), ), -); + ); diff --git a/packages/website-legacy/src/stores/tankFilters.ts b/packages/website/src/stores/tankFilters.ts similarity index 73% rename from packages/website-legacy/src/stores/tankFilters.ts rename to packages/website/src/stores/tankFilters.ts index c96b625bf..5d6db5d62 100644 --- a/packages/website-legacy/src/stores/tankFilters.ts +++ b/packages/website/src/stores/tankFilters.ts @@ -2,7 +2,7 @@ import { TankClass, Tier, TreeType } from '@blitzkit/core'; import { create } from 'zustand'; -import { createNextSafeStore } from '../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../core/zustand/createContextualSafeStore'; export interface TankFilters { tiers: Tier[]; @@ -14,8 +14,8 @@ export interface TankFilters { searching: boolean; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()(() => ({ tiers: [], nations: [], @@ -25,4 +25,4 @@ export const { Provider, use, useMutation, useStore } = createNextSafeStore( search: undefined, searching: false, })), -); + ); diff --git a/packages/website-legacy/src/stores/tankPerformancePersistent/constants.ts b/packages/website/src/stores/tankPerformancePersistent/constants.ts similarity index 100% rename from packages/website-legacy/src/stores/tankPerformancePersistent/constants.ts rename to packages/website/src/stores/tankPerformancePersistent/constants.ts diff --git a/packages/website-legacy/src/stores/tankPerformancePersistent/index.ts b/packages/website/src/stores/tankPerformancePersistent/index.ts similarity index 61% rename from packages/website-legacy/src/stores/tankPerformancePersistent/index.ts rename to packages/website/src/stores/tankPerformancePersistent/index.ts index 6cebe3476..7976a4e55 100644 --- a/packages/website-legacy/src/stores/tankPerformancePersistent/index.ts +++ b/packages/website/src/stores/tankPerformancePersistent/index.ts @@ -1,23 +1,23 @@ 'use client'; -import { merge } from 'lodash'; +import lodash from 'lodash'; import { create } from 'zustand'; import { persist, subscribeWithSelector } from 'zustand/middleware'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../../core/zustand/createContextualSafeStore'; import { PlayerCountPeriod } from './constants'; export interface TankPerformancePersistent { playerCountPeriod: PlayerCountPeriod; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()( persist( subscribeWithSelector(() => ({ playerCountPeriod: PlayerCountPeriod.ThisMonth, })), - { name: 'tank-performance', merge: (a, b) => merge(b, a) }, + { name: 'tank-performance', merge: (a, b) => lodash.merge(b, a) }, ), ), -); + ); diff --git a/packages/website-legacy/src/stores/tankPerformanceSort/constants.ts b/packages/website/src/stores/tankPerformanceSort/constants.ts similarity index 100% rename from packages/website-legacy/src/stores/tankPerformanceSort/constants.ts rename to packages/website/src/stores/tankPerformanceSort/constants.ts diff --git a/packages/website-legacy/src/stores/tankPerformanceSort/index.ts b/packages/website/src/stores/tankPerformanceSort/index.ts similarity index 67% rename from packages/website-legacy/src/stores/tankPerformanceSort/index.ts rename to packages/website/src/stores/tankPerformanceSort/index.ts index 86893965d..4c085ea63 100644 --- a/packages/website-legacy/src/stores/tankPerformanceSort/index.ts +++ b/packages/website/src/stores/tankPerformanceSort/index.ts @@ -1,7 +1,7 @@ 'use client'; import { create } from 'zustand'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../../core/zustand/createContextualSafeStore'; import { TankPerformanceSortTypeNames } from './constants'; export type TankPerformanceSortType = keyof typeof TankPerformanceSortTypeNames; @@ -11,10 +11,10 @@ export interface TankPerformanceSort { direction: -1 | 1; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()(() => ({ type: 'winrate', direction: -1, })), -); + ); diff --git a/packages/website-legacy/src/stores/tankopediaEphemeral.ts b/packages/website/src/stores/tankopediaEphemeral.ts similarity index 92% rename from packages/website-legacy/src/stores/tankopediaEphemeral.ts rename to packages/website/src/stores/tankopediaEphemeral.ts index 064239bf1..a674c41ff 100644 --- a/packages/website-legacy/src/stores/tankopediaEphemeral.ts +++ b/packages/website/src/stores/tankopediaEphemeral.ts @@ -7,7 +7,7 @@ import { subscribeWithSelector } from 'zustand/middleware'; import { XP_MULTIPLIERS } from '../app/tools/tankopedia/[id]/components/Model/TechTreeSection'; import { ArmorType } from '../components/Armor/components/SpacedArmorScene'; import { ExternalModuleVariant } from '../components/Armor/components/SpacedArmorSceneComponent'; -import { createNextSafeStore } from '../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../core/zustand/createContextualSafeStore'; interface TankopediaEphemeral { shot?: Shot; @@ -91,8 +91,8 @@ export type ArmorPiercingLayer = gap: number; }; -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - (model: ModelDefinition) => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore((model: ModelDefinition) => create()( subscribeWithSelector(() => ({ editStatic: false, @@ -102,4 +102,4 @@ export const { Provider, use, useMutation, useStore } = createNextSafeStore( xpMultiplier: 1, })), ), -); + ); diff --git a/packages/website-legacy/src/stores/tankopediaPersistent/constants.ts b/packages/website/src/stores/tankopediaPersistent/constants.ts similarity index 100% rename from packages/website-legacy/src/stores/tankopediaPersistent/constants.ts rename to packages/website/src/stores/tankopediaPersistent/constants.ts diff --git a/packages/website-legacy/src/stores/tankopediaPersistent/index.ts b/packages/website/src/stores/tankopediaPersistent/index.ts similarity index 87% rename from packages/website-legacy/src/stores/tankopediaPersistent/index.ts rename to packages/website/src/stores/tankopediaPersistent/index.ts index 980753e42..23995fb5a 100644 --- a/packages/website-legacy/src/stores/tankopediaPersistent/index.ts +++ b/packages/website/src/stores/tankopediaPersistent/index.ts @@ -1,11 +1,11 @@ 'use client'; import { TankClass, Tier, TreeType } from '@blitzkit/core'; -import { merge } from 'lodash'; +import lodash from 'lodash'; import { create } from 'zustand'; import { persist, subscribeWithSelector } from 'zustand/middleware'; import { ENVIRONMENTS } from '../../app/tools/tankopedia/[id]/components/Lighting'; -import { createNextSafeStore } from '../../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../../core/zustand/createContextualSafeStore'; import { SORT_NAMES, TankopediaDisplay } from './constants'; export type TankopediaSortBy = keyof typeof SORT_NAMES; @@ -40,8 +40,8 @@ export interface TankopediaPersistent { display: TankopediaDisplay; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()( persist( subscribeWithSelector(() => ({ @@ -72,7 +72,7 @@ export const { Provider, use, useMutation, useStore } = createNextSafeStore( }, display: TankopediaDisplay.Model, })), - { name: 'tankopedia', merge: (a, b) => merge(b, a) }, + { name: 'tankopedia', merge: (a, b) => lodash.merge(b, a) }, ), ), -); + ); diff --git a/packages/website-legacy/src/stores/tankopediaSort.ts b/packages/website/src/stores/tankopediaSort.ts similarity index 65% rename from packages/website-legacy/src/stores/tankopediaSort.ts rename to packages/website/src/stores/tankopediaSort.ts index 0eb0a0e71..1db83f790 100644 --- a/packages/website-legacy/src/stores/tankopediaSort.ts +++ b/packages/website/src/stores/tankopediaSort.ts @@ -1,7 +1,7 @@ 'use client'; import { create } from 'zustand'; -import { createNextSafeStore } from '../core/zustand/createNextSafeStore'; +import { createContextualSafeStore } from '../core/zustand/createContextualSafeStore'; import { TankopediaSortBy, TankopediaSortDirection, @@ -12,10 +12,10 @@ export interface TankopediaSort { direction: TankopediaSortDirection; } -export const { Provider, use, useMutation, useStore } = createNextSafeStore( - () => +export const { Provider, use, useMutation, useStore } = + createContextualSafeStore(() => create()(() => ({ by: 'meta.none', direction: 'descending', })), -); + ); diff --git a/packages/website-legacy/src/types/glsl.d.ts b/packages/website/src/types/glsl.d.ts similarity index 100% rename from packages/website-legacy/src/types/glsl.d.ts rename to packages/website/src/types/glsl.d.ts diff --git a/packages/website-legacy/src/types/proto.d.ts b/packages/website/src/types/proto.d.ts similarity index 100% rename from packages/website-legacy/src/types/proto.d.ts rename to packages/website/src/types/proto.d.ts diff --git a/packages/website-legacy/src/types/urlon.d.ts b/packages/website/src/types/urlon.d.ts similarity index 100% rename from packages/website-legacy/src/types/urlon.d.ts rename to packages/website/src/types/urlon.d.ts