diff --git a/packages/website/astro.config.mjs b/packages/website/astro.config.mjs index 5536116ff..4eb634a07 100644 --- a/packages/website/astro.config.mjs +++ b/packages/website/astro.config.mjs @@ -9,6 +9,9 @@ export default defineConfig({ i18n: { defaultLocale: 'en', locales: SUPPORTED_LOCALES, + routing: { + prefixDefaultLocale: false, + }, }, devToolbar: { enabled: false }, diff --git a/packages/website/src/components/Embeds/Boolean.tsx b/packages/website/src/components/Embeds/Boolean.tsx index 0ae6c06bf..d4a3180f6 100644 --- a/packages/website/src/components/Embeds/Boolean.tsx +++ b/packages/website/src/components/Embeds/Boolean.tsx @@ -1,5 +1,5 @@ import { Switch } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState } from '../../stores/embedState'; export function Boolean({ configKey }: EmbedPreviewControllerProps) { diff --git a/packages/website/src/components/Embeds/Color.tsx b/packages/website/src/components/Embeds/Color.tsx index cad88b7e3..259665bb6 100644 --- a/packages/website/src/components/Embeds/Color.tsx +++ b/packages/website/src/components/Embeds/Color.tsx @@ -1,4 +1,4 @@ -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState } from '../../stores/embedState'; import { ColorControllerRaw } from './ColorControllerRaw'; diff --git a/packages/website/src/components/Embeds/Enum.tsx b/packages/website/src/components/Embeds/Enum.tsx index b83bcbee6..865abb527 100644 --- a/packages/website/src/components/Embeds/Enum.tsx +++ b/packages/website/src/components/Embeds/Enum.tsx @@ -1,5 +1,5 @@ import { Select } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState } from '../../stores/embedState'; import type { EmbedConfigItemType, diff --git a/packages/website/src/components/Embeds/Radius.tsx b/packages/website/src/components/Embeds/Radius.tsx index cd4f2c05c..f770b43b0 100644 --- a/packages/website/src/components/Embeds/Radius.tsx +++ b/packages/website/src/components/Embeds/Radius.tsx @@ -1,5 +1,5 @@ import { Slider } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState, type RadixRadius } from '../../stores/embedState'; export function Radius({ configKey }: EmbedPreviewControllerProps) { diff --git a/packages/website/src/components/Embeds/RichText.tsx b/packages/website/src/components/Embeds/RichText.tsx index 76fe0acf2..ec5c6e24f 100644 --- a/packages/website/src/components/Embeds/RichText.tsx +++ b/packages/website/src/components/Embeds/RichText.tsx @@ -1,6 +1,6 @@ import { FontBoldIcon, FontSizeIcon } from '@radix-ui/react-icons'; import { Flex, Slider, Text } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState, type RadixSizeWithout0 } from '../../stores/embedState'; import { radixTextWeights, diff --git a/packages/website/src/components/Embeds/Size.tsx b/packages/website/src/components/Embeds/Size.tsx index 248cec4ea..c885b0b86 100644 --- a/packages/website/src/components/Embeds/Size.tsx +++ b/packages/website/src/components/Embeds/Size.tsx @@ -1,5 +1,5 @@ import { Slider } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState, type RadixSize } from '../../stores/embedState'; export function Size({ configKey }: EmbedPreviewControllerProps) { diff --git a/packages/website/src/components/Embeds/SizeWithout0.tsx b/packages/website/src/components/Embeds/SizeWithout0.tsx index ea0ed192f..c44625a4e 100644 --- a/packages/website/src/components/Embeds/SizeWithout0.tsx +++ b/packages/website/src/components/Embeds/SizeWithout0.tsx @@ -1,5 +1,5 @@ import { Slider } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState, type RadixSizeWithout0 } from '../../stores/embedState'; export function SizeWithout0({ configKey }: EmbedPreviewControllerProps) { diff --git a/packages/website/src/components/Embeds/Slider.tsx b/packages/website/src/components/Embeds/Slider.tsx index 6fe525684..e2b59f02a 100644 --- a/packages/website/src/components/Embeds/Slider.tsx +++ b/packages/website/src/components/Embeds/Slider.tsx @@ -1,5 +1,5 @@ import { Slider as RadixSlider } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState, type RadixSize } from '../../stores/embedState'; import type { EmbedConfigItemType, diff --git a/packages/website/src/components/Embeds/TextController.tsx b/packages/website/src/components/Embeds/TextController.tsx index 5e0c95cf0..5d819731f 100644 --- a/packages/website/src/components/Embeds/TextController.tsx +++ b/packages/website/src/components/Embeds/TextController.tsx @@ -1,5 +1,5 @@ import { TextField } from '@radix-ui/themes'; -import type { EmbedPreviewControllerProps } from '../../pages/tools/embed/[embed]/_index'; +import type { EmbedPreviewControllerProps } from '../../pages/[...locale]/tools/embed/[embed]/_index'; import { EmbedState } from '../../stores/embedState'; export function TextController({ configKey }: EmbedPreviewControllerProps) { diff --git a/packages/website/src/pages/auth/[provider]/_index.tsx b/packages/website/src/pages/[...locale]/auth/[provider]/_index.tsx similarity index 96% rename from packages/website/src/pages/auth/[provider]/_index.tsx rename to packages/website/src/pages/[...locale]/auth/[provider]/_index.tsx index a9dd5444c..f0c9c08ce 100644 --- a/packages/website/src/pages/auth/[provider]/_index.tsx +++ b/packages/website/src/pages/[...locale]/auth/[provider]/_index.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react'; -import { App } from '../../../stores/app'; +import { App } from '../../../../stores/app'; export const AUTH_PROVIDERS = ['wargaming'] as const; diff --git a/packages/website/src/pages/auth/[provider]/index.astro b/packages/website/src/pages/[...locale]/auth/[provider]/index.astro similarity index 92% rename from packages/website/src/pages/auth/[provider]/index.astro rename to packages/website/src/pages/[...locale]/auth/[provider]/index.astro index 6e6379f8c..42ebd3b22 100644 --- a/packages/website/src/pages/auth/[provider]/index.astro +++ b/packages/website/src/pages/[...locale]/auth/[provider]/index.astro @@ -1,7 +1,7 @@ --- import { Flex, Heading, Text } from '@radix-ui/themes'; import type { GetStaticPaths } from 'astro'; -import { PageWrapper } from '../../../components/PageWrapper'; +import { PageWrapper } from '../../../../components/PageWrapper'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { AUTH_PROVIDERS, AUTH_PROVIDER_NAMES, Authorize } from './_index'; diff --git a/packages/website/src/pages/docs/[directory]/[document]/_index.tsx b/packages/website/src/pages/[...locale]/docs/[directory]/[document]/_index.tsx similarity index 58% rename from packages/website/src/pages/docs/[directory]/[document]/_index.tsx rename to packages/website/src/pages/[...locale]/docs/[directory]/[document]/_index.tsx index 02ef84eb8..921bf79b2 100644 --- a/packages/website/src/pages/docs/[directory]/[document]/_index.tsx +++ b/packages/website/src/pages/[...locale]/docs/[directory]/[document]/_index.tsx @@ -1,5 +1,5 @@ -import { Markdown } from '../../../../components/Markdown'; -import { PageWrapper } from '../../../../components/PageWrapper'; +import { Markdown } from '../../../../../components/Markdown'; +import { PageWrapper } from '../../../../../components/PageWrapper'; interface PageProps { content: string; diff --git a/packages/website/src/pages/docs/[directory]/[document]/index.astro b/packages/website/src/pages/[...locale]/docs/[directory]/[document]/index.astro similarity index 100% rename from packages/website/src/pages/docs/[directory]/[document]/index.astro rename to packages/website/src/pages/[...locale]/docs/[directory]/[document]/index.astro diff --git a/packages/website/src/pages/docs/patches/index.astro b/packages/website/src/pages/[...locale]/docs/patches/index.astro similarity index 95% rename from packages/website/src/pages/docs/patches/index.astro rename to packages/website/src/pages/[...locale]/docs/patches/index.astro index d62a148ad..a77e39b75 100644 --- a/packages/website/src/pages/docs/patches/index.astro +++ b/packages/website/src/pages/[...locale]/docs/patches/index.astro @@ -2,7 +2,7 @@ import { MagicWandIcon, StarFilledIcon } from '@radix-ui/react-icons'; import { Flex, Heading, Link } from '@radix-ui/themes'; import { compareVersions } from 'compare-versions'; -import { PageWrapper } from '../../../components/PageWrapper'; +import { PageWrapper } from '../../../../components/PageWrapper'; import BaseLayout from '../../../layouts/BaseLayout.astro'; // this can't be used in template literal :( diff --git a/packages/website/src/pages/index.astro b/packages/website/src/pages/[...locale]/index.astro similarity index 78% rename from packages/website/src/pages/index.astro rename to packages/website/src/pages/[...locale]/index.astro index 88acb981e..02052ffdd 100644 --- a/packages/website/src/pages/index.astro +++ b/packages/website/src/pages/[...locale]/index.astro @@ -1,11 +1,12 @@ --- -import { assertSecret } from '@blitzkit/core'; +import { assertSecret, SUPPORTED_LOCALES } from '@blitzkit/core'; import { Box, Flex, Heading } from '@radix-ui/themes'; -import { AesonPlug } from '../components/AesonPlug'; -import HomeHero from '../components/HomeHero.astro'; -import { HomePageHotTanks } from '../components/HomePageHotTanks'; -import { Plugs } from '../components/Plugs.tsx'; -import ToolCard from '../components/ToolCard.astro'; +import type { GetStaticPaths } from 'astro'; +import { AesonPlug } from '../../components/AesonPlug'; +import HomeHero from '../../components/HomeHero.astro'; +import { HomePageHotTanks } from '../../components/HomePageHotTanks'; +import { Plugs } from '../../components/Plugs'; +import ToolCard from '../../components/ToolCard.astro'; import { compareTool, discordTool, @@ -16,10 +17,17 @@ import { sessionTool, tankopediaTool, tierListTool, -} from '../constants/tools'; -import BaseLayout from '../layouts/BaseLayout.astro'; +} from '../../constants/tools'; +import BaseLayout from '../../layouts/BaseLayout.astro'; const branch = assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH); + +export const getStaticPaths = (() => { + return [ + ...SUPPORTED_LOCALES.map((locale) => ({ params: { locale } })), + { params: { locale: undefined } }, + ]; +}) satisfies GetStaticPaths; --- diff --git a/packages/website/src/pages/settings/_index.tsx b/packages/website/src/pages/[...locale]/settings/_index.tsx similarity index 88% rename from packages/website/src/pages/settings/_index.tsx rename to packages/website/src/pages/[...locale]/settings/_index.tsx index d1693ebe8..783a2718f 100644 --- a/packages/website/src/pages/settings/_index.tsx +++ b/packages/website/src/pages/[...locale]/settings/_index.tsx @@ -1,6 +1,6 @@ import { Flex, Heading, Switch, Text } from '@radix-ui/themes'; -import { PageWrapper } from '../../components/PageWrapper'; -import { App } from '../../stores/app'; +import { PageWrapper } from '../../../components/PageWrapper'; +import { App } from '../../../stores/app'; export function Page() { return ( diff --git a/packages/website/src/pages/settings/index.astro b/packages/website/src/pages/[...locale]/settings/index.astro similarity index 100% rename from packages/website/src/pages/settings/index.astro rename to packages/website/src/pages/[...locale]/settings/index.astro diff --git a/packages/website/src/pages/tools/charts/_index.tsx b/packages/website/src/pages/[...locale]/tools/charts/_index.tsx similarity index 55% rename from packages/website/src/pages/tools/charts/_index.tsx rename to packages/website/src/pages/[...locale]/tools/charts/_index.tsx index 1dcd37693..d0fcbf9ab 100644 --- a/packages/website/src/pages/tools/charts/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/charts/_index.tsx @@ -1,9 +1,9 @@ import { Flex } from '@radix-ui/themes'; -import { ChartsControl } from '../../../components/Charts/ChartsControl'; -import { PlayersInPeriod } from '../../../components/Charts/PlayersInPeriod'; -import { PageWrapper } from '../../../components/PageWrapper'; -import { FilterControl } from '../../../components/TankSearch/components/FilterControl'; -import { Charts } from '../../../stores/charts'; +import { ChartsControl } from '../../../../components/Charts/ChartsControl'; +import { PlayersInPeriod } from '../../../../components/Charts/PlayersInPeriod'; +import { PageWrapper } from '../../../../components/PageWrapper'; +import { FilterControl } from '../../../../components/TankSearch/components/FilterControl'; +import { Charts } from '../../../../stores/charts'; export function Page() { return ( diff --git a/packages/website/src/pages/tools/charts/index.astro b/packages/website/src/pages/[...locale]/tools/charts/index.astro similarity index 74% rename from packages/website/src/pages/tools/charts/index.astro rename to packages/website/src/pages/[...locale]/tools/charts/index.astro index bf78728e5..bf316a9ee 100644 --- a/packages/website/src/pages/tools/charts/index.astro +++ b/packages/website/src/pages/[...locale]/tools/charts/index.astro @@ -1,5 +1,5 @@ --- -import { chartsTool } from '../../../constants/tools'; +import { chartsTool } from '../../../../constants/tools'; import ToolLayout from '../../../layouts/ToolLayout.astro'; import { Page } from './_index'; --- diff --git a/packages/website/src/pages/tools/compare/_index.tsx b/packages/website/src/pages/[...locale]/tools/compare/_index.tsx similarity index 79% rename from packages/website/src/pages/tools/compare/_index.tsx rename to packages/website/src/pages/[...locale]/tools/compare/_index.tsx index b89cf12fd..a8d74a7cd 100644 --- a/packages/website/src/pages/tools/compare/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/compare/_index.tsx @@ -2,21 +2,21 @@ import { createDefaultSkills } from '@blitzkit/core'; import { PlusIcon } from '@radix-ui/react-icons'; import { Flex, Heading, Text } from '@radix-ui/themes'; import { useEffect, useMemo, useState } from 'react'; -import { CompareTable } from '../../../components/Compare/CompareTable'; -import { Controls } from '../../../components/Compare/Controls'; -import { DamageWarning } from '../../../components/DamageWarning'; -import { PageWrapper } from '../../../components/PageWrapper'; -import { awaitableEquipmentDefinitions } from '../../../core/awaitables/equipmentDefinitions'; -import { awaitableModelDefinitions } from '../../../core/awaitables/modelDefinitions'; -import { awaitableProvisionDefinitions } from '../../../core/awaitables/provisionDefinitions'; -import { awaitableSkillDefinitions } from '../../../core/awaitables/skillDefinitions'; -import { awaitableTankDefinitions } from '../../../core/awaitables/tankDefinitions'; -import { tankCharacteristics } from '../../../core/blitzkit/tankCharacteristics'; -import { tankToCompareMember } from '../../../core/blitzkit/tankToCompareMember'; -import { App } from '../../../stores/app'; -import { CompareEphemeral } from '../../../stores/compareEphemeral'; -import { ComparePersistent } from '../../../stores/comparePersistent'; -import { TankopediaPersistent } from '../../../stores/tankopediaPersistent'; +import { CompareTable } from '../../../../components/Compare/CompareTable'; +import { Controls } from '../../../../components/Compare/Controls'; +import { DamageWarning } from '../../../../components/DamageWarning'; +import { PageWrapper } from '../../../../components/PageWrapper'; +import { awaitableEquipmentDefinitions } from '../../../../core/awaitables/equipmentDefinitions'; +import { awaitableModelDefinitions } from '../../../../core/awaitables/modelDefinitions'; +import { awaitableProvisionDefinitions } from '../../../../core/awaitables/provisionDefinitions'; +import { awaitableSkillDefinitions } from '../../../../core/awaitables/skillDefinitions'; +import { awaitableTankDefinitions } from '../../../../core/awaitables/tankDefinitions'; +import { tankCharacteristics } from '../../../../core/blitzkit/tankCharacteristics'; +import { tankToCompareMember } from '../../../../core/blitzkit/tankToCompareMember'; +import { App } from '../../../../stores/app'; +import { CompareEphemeral } from '../../../../stores/compareEphemeral'; +import { ComparePersistent } from '../../../../stores/comparePersistent'; +import { TankopediaPersistent } from '../../../../stores/tankopediaPersistent'; const [ modelDefinitions, diff --git a/packages/website/src/pages/tools/compare/index.astro b/packages/website/src/pages/[...locale]/tools/compare/index.astro similarity index 81% rename from packages/website/src/pages/tools/compare/index.astro rename to packages/website/src/pages/[...locale]/tools/compare/index.astro index 518668228..e54a46fc0 100644 --- a/packages/website/src/pages/tools/compare/index.astro +++ b/packages/website/src/pages/[...locale]/tools/compare/index.astro @@ -1,6 +1,6 @@ --- +import { compareTool } from '../../../../constants/tools'; import ToolOpenGraph from '../../../components/ToolOpenGraph.astro'; -import { compareTool } from '../../../constants/tools'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { Page } from './_index'; --- diff --git a/packages/website/src/pages/tools/embed/[embed]/_index.tsx b/packages/website/src/pages/[...locale]/tools/embed/[embed]/_index.tsx similarity index 85% rename from packages/website/src/pages/tools/embed/[embed]/_index.tsx rename to packages/website/src/pages/[...locale]/tools/embed/[embed]/_index.tsx index 8e3eb379f..adb33d8b4 100644 --- a/packages/website/src/pages/tools/embed/[embed]/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/embed/[embed]/_index.tsx @@ -10,28 +10,28 @@ import { import { Box, Button, Flex, Heading, ScrollArea, Text } from '@radix-ui/themes'; import { capitalize, startCase } from 'lodash-es'; import { useEffect, useRef, useState, type ReactNode } from 'react'; -import { CopyButton } from '../../../../components/CopyButton'; -import { Boolean } from '../../../../components/Embeds/Boolean'; -import { Color } from '../../../../components/Embeds/Color'; -import { Enum } from '../../../../components/Embeds/Enum'; -import { GenerateURL } from '../../../../components/Embeds/GenerateURL'; -import { Import } from '../../../../components/Embeds/Import'; -import { PreviewWrapper } from '../../../../components/Embeds/PreviewWrapper'; -import { Radius } from '../../../../components/Embeds/Radius'; -import { RichText } from '../../../../components/Embeds/RichText'; -import { Size } from '../../../../components/Embeds/Size'; -import { SizeWithout0 } from '../../../../components/Embeds/SizeWithout0'; -import { Slider } from '../../../../components/Embeds/Slider'; -import { TextController } from '../../../../components/Embeds/TextController'; -import { PageWrapper } from '../../../../components/PageWrapper'; +import { CopyButton } from '../../../../../components/CopyButton'; +import { Boolean } from '../../../../../components/Embeds/Boolean'; +import { Color } from '../../../../../components/Embeds/Color'; +import { Enum } from '../../../../../components/Embeds/Enum'; +import { GenerateURL } from '../../../../../components/Embeds/GenerateURL'; +import { Import } from '../../../../../components/Embeds/Import'; +import { PreviewWrapper } from '../../../../../components/Embeds/PreviewWrapper'; +import { Radius } from '../../../../../components/Embeds/Radius'; +import { RichText } from '../../../../../components/Embeds/RichText'; +import { Size } from '../../../../../components/Embeds/Size'; +import { SizeWithout0 } from '../../../../../components/Embeds/SizeWithout0'; +import { Slider } from '../../../../../components/Embeds/Slider'; +import { TextController } from '../../../../../components/Embeds/TextController'; +import { PageWrapper } from '../../../../../components/PageWrapper'; import { embedConfigurations, extractEmbedConfigDefaults, -} from '../../../../constants/embeds'; -import { NAVBAR_HEIGHT } from '../../../../constants/navbar'; -import { App } from '../../../../stores/app'; -import { EmbedState, type EmbedConfig } from '../../../../stores/embedState'; -import { EmbedItemType } from '../../../../stores/embedState/constants'; +} from '../../../../../constants/embeds'; +import { NAVBAR_HEIGHT } from '../../../../../constants/navbar'; +import { App } from '../../../../../stores/app'; +import { EmbedState, type EmbedConfig } from '../../../../../stores/embedState'; +import { EmbedItemType } from '../../../../../stores/embedState/constants'; export interface EmbedPreviewControllerProps { configKey: string; diff --git a/packages/website/src/pages/tools/embed/[embed]/host/_index.tsx b/packages/website/src/pages/[...locale]/tools/embed/[embed]/host/_index.tsx similarity index 83% rename from packages/website/src/pages/tools/embed/[embed]/host/_index.tsx rename to packages/website/src/pages/[...locale]/tools/embed/[embed]/host/_index.tsx index 74b70a5a0..fbdc1b54e 100644 --- a/packages/website/src/pages/tools/embed/[embed]/host/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/embed/[embed]/host/_index.tsx @@ -1,18 +1,18 @@ import { Box } from '@radix-ui/themes'; import { useMemo } from 'react'; import { parse } from 'urlon'; -import { BlitzKitTheme } from '../../../../../components/BlitzKitTheme'; +import { BlitzKitTheme } from '../../../../../../components/BlitzKitTheme'; import { embedConfigurations, embedRenderers, extractEmbedConfigDefaults, -} from '../../../../../constants/embeds'; +} from '../../../../../../constants/embeds'; import { EmbedState, type EmbedConfig, type ExtractEmbedConfigTypes, -} from '../../../../../stores/embedState'; -import { useEmbedStateCurry } from '../../../../../stores/embedState/utilities'; +} from '../../../../../../stores/embedState'; +import { useEmbedStateCurry } from '../../../../../../stores/embedState/utilities'; interface PageProps { embed: keyof typeof embedConfigurations; diff --git a/packages/website/src/pages/tools/embed/[embed]/host/index.astro b/packages/website/src/pages/[...locale]/tools/embed/[embed]/host/index.astro similarity index 100% rename from packages/website/src/pages/tools/embed/[embed]/host/index.astro rename to packages/website/src/pages/[...locale]/tools/embed/[embed]/host/index.astro diff --git a/packages/website/src/pages/tools/embed/[embed]/index.astro b/packages/website/src/pages/[...locale]/tools/embed/[embed]/index.astro similarity index 92% rename from packages/website/src/pages/tools/embed/[embed]/index.astro rename to packages/website/src/pages/[...locale]/tools/embed/[embed]/index.astro index cda65e038..7fef6fb00 100644 --- a/packages/website/src/pages/tools/embed/[embed]/index.astro +++ b/packages/website/src/pages/[...locale]/tools/embed/[embed]/index.astro @@ -1,7 +1,7 @@ --- import type { GetStaticPaths } from 'astro'; import { capitalize } from 'lodash-es'; -import { embedConfigurations } from '../../../../constants/embeds'; +import { embedConfigurations } from '../../../../../constants/embeds'; import BaseLayout from '../../../../layouts/BaseLayout.astro'; import { Page } from './_index'; diff --git a/packages/website/src/pages/tools/embed/_index.tsx b/packages/website/src/pages/[...locale]/tools/embed/_index.tsx similarity index 89% rename from packages/website/src/pages/tools/embed/_index.tsx rename to packages/website/src/pages/[...locale]/tools/embed/_index.tsx index 5d27fcb22..e1bd8a3a2 100644 --- a/packages/website/src/pages/tools/embed/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/embed/_index.tsx @@ -1,15 +1,15 @@ import { imgur, ImgurSize } from '@blitzkit/core'; import { Box, Flex, Link, Text } from '@radix-ui/themes'; import { capitalize } from 'lodash-es'; -import { PreviewWrapper } from '../../../components/Embeds/PreviewWrapper'; -import { PageWrapper } from '../../../components/PageWrapper'; +import { PreviewWrapper } from '../../../../components/Embeds/PreviewWrapper'; +import { PageWrapper } from '../../../../components/PageWrapper'; import { embedConfigurations, extractEmbedConfigDefaults, -} from '../../../constants/embeds'; -import { Var } from '../../../core/radix/var'; -import { App } from '../../../stores/app'; -import { EmbedState } from '../../../stores/embedState'; +} from '../../../../constants/embeds'; +import { Var } from '../../../../core/radix/var'; +import { App } from '../../../../stores/app'; +import { EmbedState } from '../../../../stores/embedState'; export function Page() { return ( diff --git a/packages/website/src/pages/tools/embed/index.astro b/packages/website/src/pages/[...locale]/tools/embed/index.astro similarity index 73% rename from packages/website/src/pages/tools/embed/index.astro rename to packages/website/src/pages/[...locale]/tools/embed/index.astro index 70f7dcf2c..23d116f1c 100644 --- a/packages/website/src/pages/tools/embed/index.astro +++ b/packages/website/src/pages/[...locale]/tools/embed/index.astro @@ -1,5 +1,5 @@ --- -import { embedTool } from '../../../constants/tools'; +import { embedTool } from '../../../../constants/tools'; import ToolLayout from '../../../layouts/ToolLayout.astro'; import { Page } from './_index'; --- diff --git a/packages/website/src/pages/tools/gallery/_index.tsx b/packages/website/src/pages/[...locale]/tools/gallery/_index.tsx similarity index 70% rename from packages/website/src/pages/tools/gallery/_index.tsx rename to packages/website/src/pages/[...locale]/tools/gallery/_index.tsx index b2f6bb97f..3ea4087b4 100644 --- a/packages/website/src/pages/tools/gallery/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/gallery/_index.tsx @@ -1,9 +1,9 @@ import { CalendarIcon } from '@radix-ui/react-icons'; import { Callout, Flex } from '@radix-ui/themes'; -import { GalleryList, type Avatar } from '../../../components/Gallery/List'; -import { GallerySearch } from '../../../components/Gallery/Search'; -import { PageWrapper } from '../../../components/PageWrapper'; -import { GalleryEphemeral } from '../../../stores/galleryEphemeral'; +import { GalleryList, type Avatar } from '../../../../components/Gallery/List'; +import { GallerySearch } from '../../../../components/Gallery/Search'; +import { PageWrapper } from '../../../../components/PageWrapper'; +import { GalleryEphemeral } from '../../../../stores/galleryEphemeral'; interface PageProps { avatars: Avatar[]; diff --git a/packages/website/src/pages/tools/gallery/index.astro b/packages/website/src/pages/[...locale]/tools/gallery/index.astro similarity index 76% rename from packages/website/src/pages/tools/gallery/index.astro rename to packages/website/src/pages/[...locale]/tools/gallery/index.astro index b917eca87..fa88ede7a 100644 --- a/packages/website/src/pages/tools/gallery/index.astro +++ b/packages/website/src/pages/[...locale]/tools/gallery/index.astro @@ -1,7 +1,7 @@ --- -import type { Avatar } from '../../../components/Gallery/List'; -import { galleryTool } from '../../../constants/tools'; -import { fetchGlossary } from '../../../core/blitz/fetchGlossary'; +import type { Avatar } from '../../../../components/Gallery/List'; +import { galleryTool } from '../../../../constants/tools'; +import { fetchGlossary } from '../../../../core/blitz/fetchGlossary'; import ToolLayout from '../../../layouts/ToolLayout.astro'; import { Page } from './_index'; diff --git a/packages/website/src/pages/[...locale]/tools/performance/_index.tsx b/packages/website/src/pages/[...locale]/tools/performance/_index.tsx new file mode 100644 index 000000000..2eff693ad --- /dev/null +++ b/packages/website/src/pages/[...locale]/tools/performance/_index.tsx @@ -0,0 +1,30 @@ +import { PageWrapper } from '../../../../components/PageWrapper'; +import { PerformanceInfo } from '../../../../components/Performance/PerformanceInfo'; +import { PlayerCountControl } from '../../../../components/Performance/PlayerCountControl'; +import { TankTable } from '../../../../components/Performance/Table'; +import { FilterControl } from '../../../../components/TankSearch/components/FilterControl'; +import { TankPerformanceEphemeral } from '../../../../stores/tankPerformanceEphemeral'; +import { TankPerformanceSort } from '../../../../stores/tankPerformanceSort'; +import type { MaybeSkeletonComponentProps } from '../../../../types/maybeSkeletonComponentProps'; + +export function Page({ skeleton }: MaybeSkeletonComponentProps) { + return ( + + + + + + ); +} + +function Content({ skeleton }: MaybeSkeletonComponentProps) { + return ( + + + + + + + + ); +} diff --git a/packages/website/src/pages/tools/performance/index.astro b/packages/website/src/pages/[...locale]/tools/performance/index.astro similarity index 83% rename from packages/website/src/pages/tools/performance/index.astro rename to packages/website/src/pages/[...locale]/tools/performance/index.astro index e9568b801..e0f4a9468 100644 --- a/packages/website/src/pages/tools/performance/index.astro +++ b/packages/website/src/pages/[...locale]/tools/performance/index.astro @@ -1,6 +1,6 @@ --- +import { performanceTool } from '../../../../constants/tools'; import ToolOpenGraph from '../../../components/ToolOpenGraph.astro'; -import { performanceTool } from '../../../constants/tools'; import BaseLayout from '../../../layouts/BaseLayout.astro'; import { Page } from './_index'; --- diff --git a/packages/website/src/pages/tools/session/_index.tsx b/packages/website/src/pages/[...locale]/tools/session/_index.tsx similarity index 96% rename from packages/website/src/pages/tools/session/_index.tsx rename to packages/website/src/pages/[...locale]/tools/session/_index.tsx index 0068dff49..233de62fc 100644 --- a/packages/website/src/pages/tools/session/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/session/_index.tsx @@ -33,13 +33,13 @@ import { } from '@radix-ui/themes'; import { debounce } from 'lodash-es'; import { useEffect, useMemo, useRef, useState } from 'react'; -import { PageWrapper } from '../../../components/PageWrapper'; -import { StickyRowHeaderCell } from '../../../components/StickyRowHeaderCell'; -import { StickyTableRoot } from '../../../components/StickyTableRoot'; -import { TankRowHeaderCell } from '../../../components/TankRowHeaderCell'; -import { awaitableAverageDefinitions } from '../../../core/awaitables/averageDefinitions'; -import { awaitableTankDefinitions } from '../../../core/awaitables/tankDefinitions'; -import { Session, type SessionTracking } from '../../../stores/session'; +import { PageWrapper } from '../../../../components/PageWrapper'; +import { StickyRowHeaderCell } from '../../../../components/StickyRowHeaderCell'; +import { StickyTableRoot } from '../../../../components/StickyTableRoot'; +import { TankRowHeaderCell } from '../../../../components/TankRowHeaderCell'; +import { awaitableAverageDefinitions } from '../../../../core/awaitables/averageDefinitions'; +import { awaitableTankDefinitions } from '../../../../core/awaitables/tankDefinitions'; +import { Session, type SessionTracking } from '../../../../stores/session'; const [tankDefinitions, averageDefinitions] = await Promise.all([ awaitableTankDefinitions, diff --git a/packages/website/src/pages/tools/session/index.astro b/packages/website/src/pages/[...locale]/tools/session/index.astro similarity index 74% rename from packages/website/src/pages/tools/session/index.astro rename to packages/website/src/pages/[...locale]/tools/session/index.astro index cc086bdeb..c696fd0a2 100644 --- a/packages/website/src/pages/tools/session/index.astro +++ b/packages/website/src/pages/[...locale]/tools/session/index.astro @@ -1,5 +1,5 @@ --- -import { sessionTool } from '../../../constants/tools'; +import { sessionTool } from '../../../../constants/tools'; import ToolLayout from '../../../layouts/ToolLayout.astro'; import { Page } from './_index'; --- diff --git a/packages/website/src/pages/[...locale]/tools/tankopedia/[id]/_index.tsx b/packages/website/src/pages/[...locale]/tools/tankopedia/[id]/_index.tsx new file mode 100644 index 000000000..aa188aa49 --- /dev/null +++ b/packages/website/src/pages/[...locale]/tools/tankopedia/[id]/_index.tsx @@ -0,0 +1,61 @@ +import { TankType } from '@blitzkit/core'; +import { PageWrapper } from '../../../../../components/PageWrapper'; +import { CalloutsSection } from '../../../../../components/Tankopedia/CalloutsSection'; +import { CharacteristicsSection } from '../../../../../components/Tankopedia/CharacteristicsSection'; +import { GameModeSection } from '../../../../../components/Tankopedia/GameModeSection'; +import { HeroSection } from '../../../../../components/Tankopedia/HeroSection'; +import { HistorySection } from '../../../../../components/Tankopedia/HistorySection'; +import { MetaSection } from '../../../../../components/Tankopedia/MetaSection'; +import { TankopediaCharts } from '../../../../../components/Tankopedia/TankopediaCharts'; +import { TechTreeSection } from '../../../../../components/Tankopedia/TechTreeSection'; +import { VideoSection } from '../../../../../components/Tankopedia/VideoSection'; +import { awaitableModelDefinitions } from '../../../../../core/awaitables/modelDefinitions'; +import { awaitableProvisionDefinitions } from '../../../../../core/awaitables/provisionDefinitions'; +import { awaitableTankDefinitions } from '../../../../../core/awaitables/tankDefinitions'; +import { App } from '../../../../../stores/app'; +import { Duel } from '../../../../../stores/duel'; +import { TankopediaEphemeral } from '../../../../../stores/tankopediaEphemeral'; +import { TankopediaPersistent } from '../../../../../stores/tankopediaPersistent'; +import type { MaybeSkeletonComponentProps } from '../../../../../types/maybeSkeletonComponentProps'; + +type PageProps = MaybeSkeletonComponentProps & { + id: number; +}; + +const [tankDefinitions, provisionDefinitions, modelDefinitions] = + await Promise.all([ + awaitableTankDefinitions, + awaitableProvisionDefinitions, + awaitableModelDefinitions, + ]); + +export function Page({ id, skeleton }: PageProps) { + const tank = tankDefinitions.tanks[id]; + const model = modelDefinitions.models[id]; + + return ( + + + + + + + + + {tank.type === TankType.RESEARCHABLE && !tank.deprecated && ( + + )} + + + + + + + + + + + ); +} diff --git a/packages/website/src/pages/tools/tankopedia/[id]/index.astro b/packages/website/src/pages/[...locale]/tools/tankopedia/[id]/index.astro similarity index 94% rename from packages/website/src/pages/tools/tankopedia/[id]/index.astro rename to packages/website/src/pages/[...locale]/tools/tankopedia/[id]/index.astro index 39f89b505..cdccbf6ac 100644 --- a/packages/website/src/pages/tools/tankopedia/[id]/index.astro +++ b/packages/website/src/pages/[...locale]/tools/tankopedia/[id]/index.astro @@ -12,9 +12,9 @@ import { } from '@blitzkit/core'; import strings from '@blitzkit/core/lang/en-US.json'; import type { GetStaticPaths } from 'astro'; -import { tankCharacteristics } from '../../../../core/blitzkit/tankCharacteristics'; +import { tankCharacteristics } from '../../../../../core/blitzkit/tankCharacteristics'; import BaseLayout from '../../../../layouts/BaseLayout.astro'; -import { genericDefaultEquipmentMatrix } from '../../../../stores/duel/constants'; +import { genericDefaultEquipmentMatrix } from '../../../../../stores/duel/constants'; import { Page } from './_index'; export const getStaticPaths = (async () => { diff --git a/packages/website/src/pages/tools/tankopedia/_index.tsx b/packages/website/src/pages/[...locale]/tools/tankopedia/_index.tsx similarity index 50% rename from packages/website/src/pages/tools/tankopedia/_index.tsx rename to packages/website/src/pages/[...locale]/tools/tankopedia/_index.tsx index 75bd39002..860d7663a 100644 --- a/packages/website/src/pages/tools/tankopedia/_index.tsx +++ b/packages/website/src/pages/[...locale]/tools/tankopedia/_index.tsx @@ -1,7 +1,7 @@ -import { PageWrapper } from '../../../components/PageWrapper'; -import { TankSearch } from '../../../components/TankSearch'; -import { App } from '../../../stores/app'; -import { TankopediaPersistent } from '../../../stores/tankopediaPersistent'; +import { PageWrapper } from '../../../../components/PageWrapper'; +import { TankSearch } from '../../../../components/TankSearch'; +import { App } from '../../../../stores/app'; +import { TankopediaPersistent } from '../../../../stores/tankopediaPersistent'; export function Page() { return ( diff --git a/packages/website/src/pages/tools/tankopedia/index.astro b/packages/website/src/pages/[...locale]/tools/tankopedia/index.astro similarity index 77% rename from packages/website/src/pages/tools/tankopedia/index.astro rename to packages/website/src/pages/[...locale]/tools/tankopedia/index.astro index 6e2055143..e76c94c8e 100644 --- a/packages/website/src/pages/tools/tankopedia/index.astro +++ b/packages/website/src/pages/[...locale]/tools/tankopedia/index.astro @@ -1,5 +1,5 @@ --- -import { tankopediaTool } from '../../../constants/tools'; +import { tankopediaTool } from '../../../../constants/tools'; import ToolLayout from '../../../layouts/ToolLayout.astro'; import { Page } from './_index'; --- diff --git a/packages/website/src/pages/[...locale]/tools/tier-list/_index.tsx b/packages/website/src/pages/[...locale]/tools/tier-list/_index.tsx new file mode 100644 index 000000000..a9fce97ef --- /dev/null +++ b/packages/website/src/pages/[...locale]/tools/tier-list/_index.tsx @@ -0,0 +1,30 @@ +import { PageWrapper } from '../../../../components/PageWrapper'; +import { FilterControl } from '../../../../components/TankSearch/components/FilterControl'; +import { TierListControls } from '../../../../components/TierList/Controls'; +import { TierListTable } from '../../../../components/TierList/Table'; +import { TierListTiles } from '../../../../components/TierList/Tiles'; +import { URLManager } from '../../../../components/TierList/URLManager'; +import { TankopediaPersistent } from '../../../../stores/tankopediaPersistent'; +import { TierList } from '../../../../stores/tierList'; + +export function Page() { + return ( + + + + + + ); +} + +function Content() { + return ( + + + + + + + + ); +} diff --git a/packages/website/src/pages/tools/tier-list/index.astro b/packages/website/src/pages/[...locale]/tools/tier-list/index.astro similarity index 74% rename from packages/website/src/pages/tools/tier-list/index.astro rename to packages/website/src/pages/[...locale]/tools/tier-list/index.astro index 552b02045..6736a4104 100644 --- a/packages/website/src/pages/tools/tier-list/index.astro +++ b/packages/website/src/pages/[...locale]/tools/tier-list/index.astro @@ -1,5 +1,5 @@ --- -import { tierListTool } from '../../../constants/tools'; +import { tierListTool } from '../../../../constants/tools'; import ToolLayout from '../../../layouts/ToolLayout.astro'; import { Page } from './_index'; --- diff --git a/packages/website/src/pages/api/tankopedia/tank-icon/[id]/index.astro b/packages/website/src/pages/api/tankopedia/tank-icon/[id]/index.astro index 7aa817f2b..e8e8d414a 100644 --- a/packages/website/src/pages/api/tankopedia/tank-icon/[id]/index.astro +++ b/packages/website/src/pages/api/tankopedia/tank-icon/[id]/index.astro @@ -1,7 +1,7 @@ --- import { assertSecret } from '@blitzkit/core'; import type { GetStaticPaths } from 'astro'; -import { getStaticPaths as tankopediaGetStaticPaths } from '../../../../tools/tankopedia/[id]/index.astro'; +import { getStaticPaths as tankopediaGetStaticPaths } from '../../../../[...locale]/tools/tankopedia/[id]/index.astro'; import { Page } from './_index'; export const getStaticPaths = (async () => { diff --git a/packages/website/src/pages/tools/performance/_index.tsx b/packages/website/src/pages/tools/performance/_index.tsx deleted file mode 100644 index 86aea4d74..000000000 --- a/packages/website/src/pages/tools/performance/_index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { PageWrapper } from '../../../components/PageWrapper'; -import { PerformanceInfo } from '../../../components/Performance/PerformanceInfo'; -import { PlayerCountControl } from '../../../components/Performance/PlayerCountControl'; -import { TankTable } from '../../../components/Performance/Table'; -import { FilterControl } from '../../../components/TankSearch/components/FilterControl'; -import { TankPerformanceEphemeral } from '../../../stores/tankPerformanceEphemeral'; -import { TankPerformanceSort } from '../../../stores/tankPerformanceSort'; -import type { MaybeSkeletonComponentProps } from '../../../types/maybeSkeletonComponentProps'; - -export function Page({ skeleton }: MaybeSkeletonComponentProps) { - return ( - - - - - - ); -} - -function Content({ skeleton }: MaybeSkeletonComponentProps) { - return ( - - - - - - - - ); -} diff --git a/packages/website/src/pages/tools/tankopedia/[id]/_index.tsx b/packages/website/src/pages/tools/tankopedia/[id]/_index.tsx deleted file mode 100644 index ed1ca3be8..000000000 --- a/packages/website/src/pages/tools/tankopedia/[id]/_index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { TankType } from '@blitzkit/core'; -import { PageWrapper } from '../../../../components/PageWrapper'; -import { CalloutsSection } from '../../../../components/Tankopedia/CalloutsSection'; -import { CharacteristicsSection } from '../../../../components/Tankopedia/CharacteristicsSection'; -import { GameModeSection } from '../../../../components/Tankopedia/GameModeSection'; -import { HeroSection } from '../../../../components/Tankopedia/HeroSection'; -import { HistorySection } from '../../../../components/Tankopedia/HistorySection'; -import { MetaSection } from '../../../../components/Tankopedia/MetaSection'; -import { TankopediaCharts } from '../../../../components/Tankopedia/TankopediaCharts'; -import { TechTreeSection } from '../../../../components/Tankopedia/TechTreeSection'; -import { VideoSection } from '../../../../components/Tankopedia/VideoSection'; -import { awaitableModelDefinitions } from '../../../../core/awaitables/modelDefinitions'; -import { awaitableProvisionDefinitions } from '../../../../core/awaitables/provisionDefinitions'; -import { awaitableTankDefinitions } from '../../../../core/awaitables/tankDefinitions'; -import { App } from '../../../../stores/app'; -import { Duel } from '../../../../stores/duel'; -import { TankopediaEphemeral } from '../../../../stores/tankopediaEphemeral'; -import { TankopediaPersistent } from '../../../../stores/tankopediaPersistent'; -import type { MaybeSkeletonComponentProps } from '../../../../types/maybeSkeletonComponentProps'; - -type PageProps = MaybeSkeletonComponentProps & { - id: number; -}; - -const [tankDefinitions, provisionDefinitions, modelDefinitions] = - await Promise.all([ - awaitableTankDefinitions, - awaitableProvisionDefinitions, - awaitableModelDefinitions, - ]); - -export function Page({ id, skeleton }: PageProps) { - const tank = tankDefinitions.tanks[id]; - const model = modelDefinitions.models[id]; - - return ( - - - - - - - - - {tank.type === TankType.RESEARCHABLE && !tank.deprecated && ( - - )} - - - - - - - - - - - ); -} diff --git a/packages/website/src/pages/tools/tier-list/_index.tsx b/packages/website/src/pages/tools/tier-list/_index.tsx deleted file mode 100644 index 2cfe0749a..000000000 --- a/packages/website/src/pages/tools/tier-list/_index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { PageWrapper } from '../../../components/PageWrapper'; -import { FilterControl } from '../../../components/TankSearch/components/FilterControl'; -import { TierListControls } from '../../../components/TierList/Controls'; -import { TierListTable } from '../../../components/TierList/Table'; -import { TierListTiles } from '../../../components/TierList/Tiles'; -import { URLManager } from '../../../components/TierList/URLManager'; -import { TankopediaPersistent } from '../../../stores/tankopediaPersistent'; -import { TierList } from '../../../stores/tierList'; - -export function Page() { - return ( - - - - - - ); -} - -function Content() { - return ( - - - - - - - - ); -}