feat: make it compile!

This commit is contained in:
tresabhi committed 2025-03-19 01:01:19 -05:00
1 parent 90a64d4ccf
commit 6319e438b1
24 files changed
+138 -175

No files matched your search

@@ -55,7 +55,7 @@ function LayerEntry({
<Text size="2" color="gray"> <Text size="2" color="gray">
{literals( {literals(
strings.website.tools.tankopedia.sandbox.dynamic.shot_card.stats strings.website.tools.tanks.sandbox.dynamic.shot_card.stats
.ricochet_loss, .ricochet_loss,
[Math.max(-100, -50 * layer.distance).toFixed(0)], [Math.max(-100, -50 * layer.distance).toFixed(0)],
)} )}
@@ -78,7 +78,7 @@ function LayerEntry({
{literals( {literals(
angle === undefined angle === undefined
? strings.common.units.mm ? strings.common.units.mm
: strings.website.tools.tankopedia.sandbox.dynamic.shot_card : strings.website.tools.tanks.sandbox.dynamic.shot_card
.stats.thickness_and_angle, .stats.thickness_and_angle,
[ [
Math.round(layer.thicknessAngled).toLocaleString(locale), Math.round(layer.thicknessAngled).toLocaleString(locale),
@@ -89,7 +89,7 @@ function LayerEntry({
<Text size="2" color="gray"> <Text size="2" color="gray">
{literals( {literals(
strings.website.tools.tankopedia.sandbox.dynamic.shot_card.stats strings.website.tools.tanks.sandbox.dynamic.shot_card.stats
.nominal, .nominal,
[Math.round(layer.thickness).toLocaleString(locale)], [Math.round(layer.thickness).toLocaleString(locale)],
)} )}
@@ -120,7 +120,7 @@ export function ShotDisplayCard({ shot, ...props }: ShotDisplayCardProps) {
<Flex direction="column" gap="1"> <Flex direction="column" gap="1">
<Text color={inTitleColor} weight="bold"> <Text color={inTitleColor} weight="bold">
{literals( {literals(
strings.website.tools.tankopedia.sandbox.dynamic.shot_card.status[ strings.website.tools.tanks.sandbox.dynamic.shot_card.status[
shot.in.status shot.in.status
], ],
[Math.round(shot.damage).toLocaleString(locale)], [Math.round(shot.damage).toLocaleString(locale)],
@@ -130,7 +130,7 @@ export function ShotDisplayCard({ shot, ...props }: ShotDisplayCardProps) {
<Flex direction="column"> <Flex direction="column">
{shot.in.layers.map((layer, index) => { {shot.in.layers.map((layer, index) => {
const layerName = const layerName =
strings.website.tools.tankopedia.sandbox.dynamic.shot_card strings.website.tools.tanks.sandbox.dynamic.shot_card
.element[ .element[
layer.type === ArmorType.External layer.type === ArmorType.External
? layer.variant ? layer.variant
@@ -186,7 +186,7 @@ export function ShotDisplayCard({ shot, ...props }: ShotDisplayCardProps) {
<Text color={outTitleColor} weight="bold"> <Text color={outTitleColor} weight="bold">
{literals( {literals(
strings.website.tools.tankopedia.sandbox.dynamic.shot_card strings.website.tools.tanks.sandbox.dynamic.shot_card
.status[shot.out.status], .status[shot.out.status],
[Math.round(shot.damage).toLocaleString(locale)], [Math.round(shot.damage).toLocaleString(locale)],
)} )}
@@ -195,7 +195,7 @@ export function ShotDisplayCard({ shot, ...props }: ShotDisplayCardProps) {
<Flex direction="column"> <Flex direction="column">
{shot.out.layers.map((layer, index) => { {shot.out.layers.map((layer, index) => {
const layerName = const layerName =
strings.website.tools.tankopedia.sandbox.dynamic.shot_card strings.website.tools.tanks.sandbox.dynamic.shot_card
.element[ .element[
layer.type === ArmorType.External layer.type === ArmorType.External
? layer.variant ? layer.variant
@@ -81,7 +81,7 @@ export function Body({ stats }: BodyProps) {
<CompareRow stats={stats} value="dpm" decimals={0} /> <CompareRow stats={stats} value="dpm" decimals={0} />
<CompareRow <CompareRow
stats={stats} stats={stats}
name={strings.website.tools.tankopedia.characteristics.values.reload} name={strings.website.tools.tanks.characteristics.values.reload}
deltaType="lowerIsBetter" deltaType="lowerIsBetter"
value={(stats) => value={(stats) =>
stats.shellReload ?? stats.shellReload ??
@@ -52,7 +52,7 @@ export function CompareRow({
const id = useRef(Math.random()); const id = useRef(Math.random());
const name = const name =
typeof props.value === 'string' typeof props.value === 'string'
? strings.website.tools.tankopedia.characteristics.values[props.value] ? strings.website.tools.tanks.characteristics.values[props.value]
: props.name; : props.name;
return ( return (
@@ -23,11 +23,11 @@ export function CharacteristicsHeading() {
direction="column" direction="column"
> >
<Heading mb="2"> <Heading mb="2">
{strings.website.tools.tankopedia.characteristics.title} {strings.website.tools.tanks.characteristics.title}
</Heading> </Heading>
<Text color="gray"> <Text color="gray">
{strings.website.tools.tankopedia.characteristics.compare.label} {strings.website.tools.tanks.characteristics.compare.label}
</Text> </Text>
<SegmentedControl.Root <SegmentedControl.Root
size={{ initial: '1', md: '2' }} size={{ initial: '1', md: '2' }}
@@ -39,22 +39,18 @@ export function CharacteristicsHeading() {
}} }}
> >
<SegmentedControl.Item value={`${TankopediaRelativeAgainst.Class}`}> <SegmentedControl.Item value={`${TankopediaRelativeAgainst.Class}`}>
{literals( {literals(strings.website.tools.tanks.characteristics.compare.class, [
strings.website.tools.tankopedia.characteristics.compare.class, TIER_ROMAN_NUMERALS[tank.tier],
[ strings.common.tank_class_short_plural_lowercase[tank.class],
TIER_ROMAN_NUMERALS[tank.tier], ])}
strings.common.tank_class_short_plural_lowercase[tank.class],
],
)}
</SegmentedControl.Item> </SegmentedControl.Item>
<SegmentedControl.Item value={`${TankopediaRelativeAgainst.Tier}`}> <SegmentedControl.Item value={`${TankopediaRelativeAgainst.Tier}`}>
{literals( {literals(strings.website.tools.tanks.characteristics.compare.tier, [
strings.website.tools.tankopedia.characteristics.compare.tier, TIER_ROMAN_NUMERALS[tank.tier],
[TIER_ROMAN_NUMERALS[tank.tier]], ])}
)}
</SegmentedControl.Item> </SegmentedControl.Item>
<SegmentedControl.Item value={`${TankopediaRelativeAgainst.All}`}> <SegmentedControl.Item value={`${TankopediaRelativeAgainst.All}`}>
{strings.website.tools.tankopedia.characteristics.compare.all} {strings.website.tools.tanks.characteristics.compare.all}
</SegmentedControl.Item> </SegmentedControl.Item>
</SegmentedControl.Root> </SegmentedControl.Root>
</Flex> </Flex>
@@ -145,9 +145,7 @@ export function InfoWithDelta({
name={ name={
'name' in props 'name' in props
? props.name ? props.name
: strings.website.tools.tankopedia.characteristics.values[ : strings.website.tools.tanks.characteristics.values[props.value]
props.value
]
} }
delta={delta} delta={delta}
> >
@@ -147,7 +147,7 @@ export function Characteristics() {
<Flex direction="column" gap="2"> <Flex direction="column" gap="2">
<Flex align="center" gap="4"> <Flex align="center" gap="4">
<Heading size="5"> <Heading size="5">
{strings.website.tools.tankopedia.firepower.title} {strings.website.tools.tanks.firepower.title}
</Heading> </Heading>
<Flex> <Flex>
@@ -189,9 +189,7 @@ export function Characteristics() {
</Flex> </Flex>
</Flex> </Flex>
<Info <Info
name={ name={strings.website.tools.tanks.characteristics.values.gunType}
strings.website.tools.tankopedia.characteristics.values.gunType
}
> >
{strings.common.gun_types[gun.gun_type!.$case]} {strings.common.gun_types[gun.gun_type!.$case]}
</Info> </Info>
@@ -218,7 +216,7 @@ export function Characteristics() {
<Info <Info
indent indent
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.mostOptimalShellIndex .mostOptimalShellIndex
} }
> >
@@ -226,7 +224,7 @@ export function Characteristics() {
</Info> </Info>
<Info <Info
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.shellReloads .shellReloads
} }
unit="s" unit="s"
@@ -237,7 +235,7 @@ export function Characteristics() {
key={index} key={index}
indent indent
name={literals( name={literals(
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.shell_index, .shell_index,
[`${index + 1}`], [`${index + 1}`],
)} )}
@@ -281,7 +279,7 @@ export function Characteristics() {
indent indent
decimals={0} decimals={0}
name={literals( name={literals(
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.at_distance, .at_distance,
[`${penetrationDistance}`], [`${penetrationDistance}`],
)} )}
@@ -299,7 +297,7 @@ export function Characteristics() {
<Flex align="center" gap="2" style={{ paddingLeft: 24 }}> <Flex align="center" gap="2" style={{ paddingLeft: 24 }}>
<Text color="gray"> <Text color="gray">
{ {
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.at_distance_slider_label .at_distance_slider_label
} }
</Text> </Text>
@@ -404,7 +402,7 @@ export function Characteristics() {
/> />
<Info <Info
name={literals( name={literals(
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.dispersion_at_distance, .dispersion_at_distance,
['100'], ['100'],
)} )}
@@ -459,8 +457,7 @@ export function Characteristics() {
/> />
<Info <Info
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values.gun_flexibility
.gun_flexibility
} }
unit="°" unit="°"
/> />
@@ -528,9 +525,7 @@ export function Characteristics() {
<Flex direction="column" gap="2"> <Flex direction="column" gap="2">
<Flex gap="2" align="center"> <Flex gap="2" align="center">
<Heading size="5"> <Heading size="5">{strings.website.tools.tanks.crew.title}</Heading>
{strings.website.tools.tankopedia.crew.title}
</Heading>
<Popover.Root> <Popover.Root>
<Popover.Trigger> <Popover.Trigger>
@@ -542,7 +537,7 @@ export function Characteristics() {
<Popover.Content> <Popover.Content>
<Flex gap="1" align="center"> <Flex gap="1" align="center">
<AccessibilityIcon /> <AccessibilityIcon />
<Text>{strings.website.tools.tankopedia.crew.info}</Text> <Text>{strings.website.tools.tanks.crew.info}</Text>
</Flex> </Flex>
</Popover.Content> </Popover.Content>
</Popover.Root> </Popover.Root>
@@ -557,7 +552,7 @@ export function Characteristics() {
stats={stats} stats={stats}
key={`${member.type}-root`} key={`${member.type}-root`}
name={`${ name={`${
strings.website.tools.tankopedia.crew[ strings.website.tools.tanks.crew[
CREW_MEMBER_NAMES[member.type] CREW_MEMBER_NAMES[member.type]
] ]
}${ }${
@@ -591,7 +586,7 @@ export function Characteristics() {
{member.substitute {member.substitute
.map((sub, index) => .map((sub, index) =>
index === 0 index === 0
? strings.website.tools.tankopedia.crew[ ? strings.website.tools.tanks.crew[
CREW_MEMBER_NAMES[sub] CREW_MEMBER_NAMES[sub]
] ]
: sub, : sub,
@@ -613,10 +608,10 @@ export function Characteristics() {
<Flex direction="column" gap="8" style={{ flex: 1 }}> <Flex direction="column" gap="8" style={{ flex: 1 }}>
<Flex direction="column" gap="2"> <Flex direction="column" gap="2">
<Heading size="5"> <Heading size="5">
{strings.website.tools.tankopedia.maneuverability.title} {strings.website.tools.tanks.maneuverability.title}
</Heading> </Heading>
<Info <Info
name={strings.website.tools.tankopedia.characteristics.values.speed} name={strings.website.tools.tanks.characteristics.values.speed}
unit="kph" unit="kph"
/> />
<InfoWithDelta <InfoWithDelta
@@ -641,7 +636,7 @@ export function Characteristics() {
/> />
<Info <Info
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.terrain_coefficients .terrain_coefficients
} }
/> />
@@ -668,7 +663,7 @@ export function Characteristics() {
/> />
<Info <Info
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.raw_terrain_coefficients .raw_terrain_coefficients
} }
deltaType="lowerIsBetter" deltaType="lowerIsBetter"
@@ -699,7 +694,7 @@ export function Characteristics() {
/> />
<Info <Info
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.power_to_weight_ratio .power_to_weight_ratio
} }
unit="hp/tn" unit="hp/tn"
@@ -730,7 +725,7 @@ export function Characteristics() {
/> />
<Info <Info
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.hull_traverse_speed .hull_traverse_speed
} }
unit="°/s" unit="°/s"
@@ -757,14 +752,12 @@ export function Characteristics() {
<Flex direction="column" gap="2"> <Flex direction="column" gap="2">
<Heading size="5"> <Heading size="5">
{strings.website.tools.tankopedia.survivability.title} {strings.website.tools.tanks.survivability.title}
</Heading> </Heading>
<InfoWithDelta value="health" stats={stats} unit="hp" decimals={0} /> <InfoWithDelta value="health" stats={stats} unit="hp" decimals={0} />
<InfoWithDelta <InfoWithDelta
stats={stats} stats={stats}
name={ name={strings.website.tools.tanks.characteristics.values.fireChance}
strings.website.tools.tankopedia.characteristics.values.fireChance
}
unit="%" unit="%"
deltaType="lowerIsBetter" deltaType="lowerIsBetter"
decimals={0} decimals={0}
@@ -777,9 +770,7 @@ export function Characteristics() {
decimals={0} decimals={0}
/> />
<Info <Info
name={ name={strings.website.tools.tanks.characteristics.values.camouflage}
strings.website.tools.tankopedia.characteristics.values.camouflage
}
unit="%" unit="%"
/> />
<InfoWithDelta <InfoWithDelta
@@ -787,8 +778,7 @@ export function Characteristics() {
stats={stats} stats={stats}
indent indent
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values.camouflageStill
.camouflageStill
} }
decimals={2} decimals={2}
/> />
@@ -797,7 +787,7 @@ export function Characteristics() {
stats={stats} stats={stats}
indent indent
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.camouflageMoving .camouflageMoving
} }
decimals={2} decimals={2}
@@ -806,7 +796,7 @@ export function Characteristics() {
stats={stats} stats={stats}
indent indent
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.camouflageShootingStill .camouflageShootingStill
} }
decimals={2} decimals={2}
@@ -816,7 +806,7 @@ export function Characteristics() {
stats={stats} stats={stats}
indent indent
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.camouflageShootingMoving .camouflageShootingMoving
} }
decimals={2} decimals={2}
@@ -826,7 +816,7 @@ export function Characteristics() {
stats={stats} stats={stats}
indent indent
name={ name={
strings.website.tools.tankopedia.characteristics.values strings.website.tools.tanks.characteristics.values
.camouflageCaughtOnFire .camouflageCaughtOnFire
} }
decimals={2} decimals={2}
@@ -42,7 +42,7 @@ export function Consumables() {
<Flex gap="4" align="center"> <Flex gap="4" align="center">
<Flex gap="2" align="center"> <Flex gap="2" align="center">
<Heading size="4"> <Heading size="4">
{strings.website.tools.tankopedia.configuration.consumables.title} {strings.website.tools.tanks.configuration.consumables.title}
</Heading> </Heading>
<Popover.Root> <Popover.Root>
@@ -54,10 +54,7 @@ export function Consumables() {
<Popover.Content> <Popover.Content>
<Text> <Text>
{ {strings.website.tools.tanks.configuration.consumables.info}
strings.website.tools.tankopedia.configuration.consumables
.info
}
</Text> </Text>
</Popover.Content> </Popover.Content>
</Popover.Root> </Popover.Root>
@@ -72,7 +69,7 @@ export function Consumables() {
}); });
}} }}
> >
{strings.website.tools.tankopedia.configuration.consumables.clear} {strings.website.tools.tanks.configuration.consumables.clear}
</Button> </Button>
</Flex> </Flex>
@@ -21,7 +21,7 @@ export function Equipment() {
<ConfigurationChildWrapper> <ConfigurationChildWrapper>
<Flex gap="4" align="center"> <Flex gap="4" align="center">
<Heading size="4"> <Heading size="4">
{strings.website.tools.tankopedia.configuration.equipment.title} {strings.website.tools.tanks.configuration.equipment.title}
</Heading> </Heading>
<Button <Button
variant="ghost" variant="ghost"
@@ -36,7 +36,7 @@ export function Equipment() {
}); });
}} }}
> >
{strings.website.tools.tankopedia.configuration.equipment.clear} {strings.website.tools.tanks.configuration.equipment.clear}
</Button> </Button>
</Flex> </Flex>
@@ -17,7 +17,7 @@ export function Miscellaneous() {
return ( return (
<ConfigurationChildWrapper> <ConfigurationChildWrapper>
<Heading size="4"> <Heading size="4">
{strings.website.tools.tankopedia.configuration.miscellaneous.title} {strings.website.tools.tanks.configuration.miscellaneous.title}
</Heading> </Heading>
<Flex gap="2" align="center"> <Flex gap="2" align="center">
@@ -356,7 +356,7 @@ export function Modules() {
<ConfigurationChildWrapper> <ConfigurationChildWrapper>
<Flex gap="4" align="center"> <Flex gap="4" align="center">
<Heading size="4"> <Heading size="4">
{strings.website.tools.tankopedia.configuration.modules.title} {strings.website.tools.tanks.configuration.modules.title}
</Heading> </Heading>
{hasUpgrades && ( {hasUpgrades && (
@@ -375,7 +375,7 @@ export function Modules() {
}); });
}} }}
> >
{strings.website.tools.tankopedia.configuration.modules.stock} {strings.website.tools.tanks.configuration.modules.stock}
</Button> </Button>
<Button <Button
variant="ghost" variant="ghost"
@@ -393,7 +393,7 @@ export function Modules() {
}); });
}} }}
> >
{strings.website.tools.tankopedia.configuration.modules.upgrade} {strings.website.tools.tanks.configuration.modules.upgrade}
</Button> </Button>
</> </>
)} )}
@@ -19,7 +19,7 @@ export function Provisions() {
<ConfigurationChildWrapper> <ConfigurationChildWrapper>
<Flex gap="4" align="center"> <Flex gap="4" align="center">
<Heading size="4"> <Heading size="4">
{strings.website.tools.tankopedia.configuration.provisions.title} {strings.website.tools.tanks.configuration.provisions.title}
</Heading> </Heading>
<Button <Button
variant="ghost" variant="ghost"
@@ -30,7 +30,7 @@ export function Provisions() {
}); });
}} }}
> >
{strings.website.tools.tankopedia.configuration.provisions.clear} {strings.website.tools.tanks.configuration.provisions.clear}
</Button> </Button>
</Flex> </Flex>
@@ -22,7 +22,7 @@ export function Skills() {
<Flex gap="4" align="center"> <Flex gap="4" align="center">
<Flex gap="2" align="center"> <Flex gap="2" align="center">
<Heading size="4"> <Heading size="4">
{strings.website.tools.tankopedia.configuration.skills.title} {strings.website.tools.tanks.configuration.skills.title}
</Heading> </Heading>
<Popover.Root> <Popover.Root>
@@ -35,7 +35,7 @@ export function Skills() {
<Popover.Content> <Popover.Content>
<Flex direction="column" gap="2"> <Flex direction="column" gap="2">
<Text> <Text>
{strings.website.tools.tankopedia.configuration.skills.info} {strings.website.tools.tanks.configuration.skills.info}
</Text> </Text>
</Flex> </Flex>
</Popover.Content> </Popover.Content>
@@ -53,7 +53,7 @@ export function Skills() {
}); });
}} }}
> >
{strings.website.tools.tankopedia.configuration.skills.clear} {strings.website.tools.tanks.configuration.skills.clear}
</Button> </Button>
<Button <Button
variant="ghost" variant="ghost"
@@ -65,7 +65,7 @@ export function Skills() {
}); });
}} }}
> >
{strings.website.tools.tankopedia.configuration.skills.maximize} {strings.website.tools.tanks.configuration.skills.maximize}
</Button> </Button>
</Flex> </Flex>
@@ -27,9 +27,7 @@ export function CharacteristicsSection() {
maxWidth="21rem" maxWidth="21rem"
align={{ initial: 'center', sm: 'start' }} align={{ initial: 'center', sm: 'start' }}
> >
<Heading> <Heading>{strings.website.tools.tanks.configuration.title}</Heading>
{strings.website.tools.tankopedia.configuration.title}
</Heading>
<Modules /> <Modules />
<Equipment /> <Equipment />
<Provisions /> <Provisions />
@@ -22,9 +22,7 @@ export function GameModeSection() {
return ( return (
<Flex direction="column" gap="4" align="center"> <Flex direction="column" gap="4" align="center">
<Heading size="6"> <Heading size="6">{strings.website.tools.tanks.game_modes.title}</Heading>
{strings.website.tools.tankopedia.game_modes.title}
</Heading>
<Flex justify="center" gap="4" wrap="wrap" px="4"> <Flex justify="center" gap="4" wrap="wrap" px="4">
{roles.map(([key, value]) => { {roles.map(([key, value]) => {
@@ -58,8 +58,8 @@ export function CustomShellButton() {
<Flex align="center" justify="between" gap="4"> <Flex align="center" justify="between" gap="4">
<Text> <Text>
{ {
strings.website.tools.tankopedia.sandbox.dynamic strings.website.tools.tanks.sandbox.dynamic.custom_shell
.custom_shell.type .type
} }
</Text> </Text>
<Select.Root <Select.Root
@@ -124,8 +124,8 @@ export function CustomShellButton() {
<Flex align="center" justify="between" gap="4"> <Flex align="center" justify="between" gap="4">
<Text> <Text>
{ {
strings.website.tools.tankopedia.sandbox.dynamic strings.website.tools.tanks.sandbox.dynamic.custom_shell
.custom_shell.caliber .caliber
} }
</Text> </Text>
<TextField.Root <TextField.Root
@@ -159,8 +159,8 @@ export function CustomShellButton() {
<Flex align="center" justify="between" gap="4"> <Flex align="center" justify="between" gap="4">
<Text> <Text>
{ {
strings.website.tools.tankopedia.sandbox.dynamic strings.website.tools.tanks.sandbox.dynamic.custom_shell
.custom_shell.penetration .penetration
} }
</Text> </Text>
<TextField.Root <TextField.Root
@@ -198,8 +198,8 @@ export function CustomShellButton() {
<Flex align="center" justify="between" gap="4" py="1"> <Flex align="center" justify="between" gap="4" py="1">
<Text> <Text>
{ {
strings.website.tools.tankopedia.sandbox.dynamic strings.website.tools.tanks.sandbox.dynamic.custom_shell
.custom_shell.normalization .normalization
} }
</Text> </Text>
@@ -234,8 +234,8 @@ export function CustomShellButton() {
<Flex align="center" justify="between" gap="4" py="1"> <Flex align="center" justify="between" gap="4" py="1">
<Text> <Text>
{ {
strings.website.tools.tankopedia.sandbox.dynamic strings.website.tools.tanks.sandbox.dynamic.custom_shell
.custom_shell.ricochet .ricochet
} }
</Text> </Text>
@@ -297,8 +297,8 @@ export function CustomShellButton() {
<Popover.Close> <Popover.Close>
<Button color="red" variant="outline"> <Button color="red" variant="outline">
{ {
strings.website.tools.tankopedia.sandbox.dynamic strings.website.tools.tanks.sandbox.dynamic.custom_shell
.custom_shell.exit .exit
} }
</Button> </Button>
</Popover.Close> </Popover.Close>
@@ -310,10 +310,7 @@ export function CustomShellButton() {
}); });
}} }}
> >
{ {strings.website.tools.tanks.sandbox.dynamic.custom_shell.reset}
strings.website.tools.tankopedia.sandbox.dynamic.custom_shell
.reset
}
</Button> </Button>
</Flex> </Flex>
</> </>
@@ -60,7 +60,7 @@ export function Thicknesses({ thicknessRange }: ThicknessesProps) {
])} ])}
</Text> </Text>
<Text size="1"> <Text size="1">
{strings.website.tools.tankopedia.sandbox.static.primary} {strings.website.tools.tanks.sandbox.static.primary}
</Text> </Text>
<Text color="gray" size="1"> <Text color="gray" size="1">
{literals(strings.common.units.mm, ['0'])} {literals(strings.common.units.mm, ['0'])}
@@ -101,7 +101,7 @@ export function Thicknesses({ thicknessRange }: ThicknessesProps) {
])} ])}
</Text> </Text>
<Text size="1"> <Text size="1">
{strings.website.tools.tankopedia.sandbox.static.spaced} {strings.website.tools.tanks.sandbox.static.spaced}
</Text> </Text>
<Text color="gray" size="1"> <Text color="gray" size="1">
{literals(strings.common.units.mm, ['0'])} {literals(strings.common.units.mm, ['0'])}
@@ -135,7 +135,7 @@ export function Thicknesses({ thicknessRange }: ThicknessesProps) {
> >
<Flex direction="column" align="end" justify="between"> <Flex direction="column" align="end" justify="between">
<Text size="1"> <Text size="1">
{strings.website.tools.tankopedia.sandbox.static.external} {strings.website.tools.tanks.sandbox.static.external}
</Text> </Text>
</Flex> </Flex>
@@ -168,7 +168,7 @@ export function Thicknesses({ thicknessRange }: ThicknessesProps) {
}} }}
> >
<Text size="1"> <Text size="1">
{strings.website.tools.tankopedia.sandbox.static.edit.label} {strings.website.tools.tanks.sandbox.static.edit.label}
</Text> </Text>
<Checkbox size="2" checked={editStatic} /> <Checkbox size="2" checked={editStatic} />
</Flex> </Flex>
@@ -186,7 +186,7 @@ export function Thicknesses({ thicknessRange }: ThicknessesProps) {
}} }}
> >
<ReloadIcon /> <ReloadIcon />
{strings.website.tools.tankopedia.sandbox.static.edit.reset} {strings.website.tools.tanks.sandbox.static.edit.reset}
</Button> </Button>
</Flex> </Flex>
@@ -346,13 +346,13 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
> >
<Checkbox checked={advancedHighlighting} /> <Checkbox checked={advancedHighlighting} />
<Text color="gray" size="2"> <Text color="gray" size="2">
{strings.website.tools.tankopedia.sandbox.dynamic.advanced} {strings.website.tools.tanks.sandbox.dynamic.advanced}
</Text> </Text>
</Flex> </Flex>
<Flex align="center" gap="2"> <Flex align="center" gap="2">
<Text color="gray" size="2"> <Text color="gray" size="2">
{strings.website.tools.tankopedia.sandbox.dynamic.shooter} {strings.website.tools.tanks.sandbox.dynamic.shooter}
</Text> </Text>
<Dialog.Root <Dialog.Root
open={antagonistSelectorOpen} open={antagonistSelectorOpen}
@@ -408,9 +408,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}} }}
> >
<SegmentedControl.Item value={`${TankopediaDisplay.Model}`}> <SegmentedControl.Item value={`${TankopediaDisplay.Model}`}>
<Tooltip <Tooltip content={strings.website.tools.tanks.sandbox.model.name}>
content={strings.website.tools.tankopedia.sandbox.model.name}
>
<Flex height="100%" align="center"> <Flex height="100%" align="center">
<img src={imgur('jAdYf0m')} style={{ height: '1.25em' }} /> <img src={imgur('jAdYf0m')} style={{ height: '1.25em' }} />
</Flex> </Flex>
@@ -418,7 +416,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
</SegmentedControl.Item> </SegmentedControl.Item>
<SegmentedControl.Item value={`${TankopediaDisplay.DynamicArmor}`}> <SegmentedControl.Item value={`${TankopediaDisplay.DynamicArmor}`}>
<Tooltip <Tooltip
content={strings.website.tools.tankopedia.sandbox.dynamic.name} content={strings.website.tools.tanks.sandbox.dynamic.name}
> >
<Flex height="100%" align="center"> <Flex height="100%" align="center">
<img src={imgur('oe4Cq0g')} style={{ height: '1.25em' }} /> <img src={imgur('oe4Cq0g')} style={{ height: '1.25em' }} />
@@ -427,7 +425,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
</SegmentedControl.Item> </SegmentedControl.Item>
<SegmentedControl.Item value={`${TankopediaDisplay.StaticArmor}`}> <SegmentedControl.Item value={`${TankopediaDisplay.StaticArmor}`}>
<Tooltip <Tooltip
content={strings.website.tools.tankopedia.sandbox.static.name} content={strings.website.tools.tanks.sandbox.static.name}
> >
<Flex height="100%" align="center"> <Flex height="100%" align="center">
<img src={imgur('VQ4uDno')} style={{ height: '1.25em' }} /> <img src={imgur('VQ4uDno')} style={{ height: '1.25em' }} />
@@ -452,15 +450,15 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
<DropdownMenu.Content> <DropdownMenu.Content>
<DropdownMenu.Item onClick={() => poseEvent.emit(Pose.HullDown)}> <DropdownMenu.Item onClick={() => poseEvent.emit(Pose.HullDown)}>
{strings.website.tools.tankopedia.sandbox.poses.hull_down} {strings.website.tools.tanks.sandbox.poses.hull_down}
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item onClick={() => poseEvent.emit(Pose.FaceHug)}> <DropdownMenu.Item onClick={() => poseEvent.emit(Pose.FaceHug)}>
{strings.website.tools.tankopedia.sandbox.poses.face_hug} {strings.website.tools.tanks.sandbox.poses.face_hug}
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item onClick={() => poseEvent.emit(Pose.Default)}> <DropdownMenu.Item onClick={() => poseEvent.emit(Pose.Default)}>
{strings.website.tools.tankopedia.sandbox.poses.default} {strings.website.tools.tanks.sandbox.poses.default}
</DropdownMenu.Item> </DropdownMenu.Item>
</DropdownMenu.Content> </DropdownMenu.Content>
</DropdownMenu.Root> </DropdownMenu.Root>
@@ -476,7 +474,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
{display === TankopediaDisplay.DynamicArmor && ( {display === TankopediaDisplay.DynamicArmor && (
<> <>
<DropdownMenu.Label> <DropdownMenu.Label>
{strings.website.tools.tankopedia.sandbox.settings.armor} {strings.website.tools.tanks.sandbox.settings.armor}
</DropdownMenu.Label> </DropdownMenu.Label>
<DropdownMenu.CheckboxItem <DropdownMenu.CheckboxItem
@@ -488,7 +486,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}} }}
> >
{ {
strings.website.tools.tankopedia.sandbox.settings strings.website.tools.tanks.sandbox.settings
.green_penetration .green_penetration
} }
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
@@ -502,7 +500,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}} }}
> >
{ {
strings.website.tools.tankopedia.sandbox.settings strings.website.tools.tanks.sandbox.settings
.hide_model_under_armor .hide_model_under_armor
} }
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
@@ -515,7 +513,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}); });
}} }}
> >
{strings.website.tools.tankopedia.sandbox.settings.opaque} {strings.website.tools.tanks.sandbox.settings.opaque}
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
{developerMode && ( {developerMode && (
@@ -528,7 +526,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}} }}
> >
{ {
strings.website.tools.tankopedia.sandbox.settings strings.website.tools.tanks.sandbox.settings
.dev_wireframe .dev_wireframe
} }
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
@@ -537,7 +535,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
)} )}
<DropdownMenu.Label> <DropdownMenu.Label>
{strings.website.tools.tankopedia.sandbox.settings.environment} {strings.website.tools.tanks.sandbox.settings.environment}
</DropdownMenu.Label> </DropdownMenu.Label>
<DropdownMenu.CheckboxItem <DropdownMenu.CheckboxItem
@@ -548,7 +546,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}); });
}} }}
> >
{strings.website.tools.tankopedia.sandbox.settings.show_grid} {strings.website.tools.tanks.sandbox.settings.show_grid}
</DropdownMenu.CheckboxItem> </DropdownMenu.CheckboxItem>
</DropdownMenu.Content> </DropdownMenu.Content>
</DropdownMenu.Root> </DropdownMenu.Root>
@@ -581,10 +579,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}} }}
> >
<DownloadIcon /> <DownloadIcon />
{ {strings.website.tools.tanks.sandbox.screenshot.download}
strings.website.tools.tankopedia.sandbox.screenshot
.download
}
</Button> </Button>
</Popover.Close> </Popover.Close>
<Popover.Close> <Popover.Close>
@@ -603,7 +598,7 @@ export function Options({ thicknessRange, canvas }: OptionsProps) {
}} }}
> >
<CopyIcon /> <CopyIcon />
{strings.website.tools.tankopedia.sandbox.screenshot.copy} {strings.website.tools.tanks.sandbox.screenshot.copy}
</Button> </Button>
</Popover.Close> </Popover.Close>
</Flex> </Flex>
@@ -47,7 +47,7 @@ export function MetaSection() {
<LinkI18n locale={locale} href="/tools/tankopedia"> <LinkI18n locale={locale} href="/tools/tankopedia">
<Button variant="outline"> <Button variant="outline">
<ChevronLeftIcon /> <ChevronLeftIcon />
{strings.website.tools.tankopedia.meta.back} {strings.website.tools.tanks.meta.back}
</Button> </Button>
</LinkI18n> </LinkI18n>
@@ -57,7 +57,7 @@ export function MetaSection() {
> >
<Button variant="outline"> <Button variant="outline">
<MixIcon /> <MixIcon />
{strings.website.tools.tankopedia.meta.compare} {strings.website.tools.tanks.meta.compare}
</Button> </Button>
</LinkI18n> </LinkI18n>
@@ -73,8 +73,8 @@ export function MetaSection() {
<ScienceIcon height="1.25em" width="1.25em" /> <ScienceIcon height="1.25em" width="1.25em" />
{assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH) === {assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH) ===
'opentest' 'opentest'
? strings.website.tools.tankopedia.meta.vanilla ? strings.website.tools.tanks.meta.vanilla
: strings.website.tools.tankopedia.meta.opentest} : strings.website.tools.tanks.meta.opentest}
</Button> </Button>
</Link> </Link>
)} )}
@@ -83,13 +83,13 @@ export function MetaSection() {
<Dialog.Trigger> <Dialog.Trigger>
<Button> <Button>
<UpdateIcon /> <UpdateIcon />
{strings.website.tools.tankopedia.meta.swap.button} {strings.website.tools.tanks.meta.swap.button}
</Button> </Button>
</Dialog.Trigger> </Dialog.Trigger>
<Dialog.Content> <Dialog.Content>
<Dialog.Title> <Dialog.Title>
{strings.website.tools.tankopedia.meta.swap.title} {strings.website.tools.tanks.meta.swap.title}
</Dialog.Title> </Dialog.Title>
<TankSearch <TankSearch
@@ -123,11 +123,11 @@ export function MetaSection() {
> >
<Flex direction="column" width="100%"> <Flex direction="column" width="100%">
{protagonist.name_full && ( {protagonist.name_full && (
<Listing label={strings.website.tools.tankopedia.meta.full_name}> <Listing label={strings.website.tools.tanks.meta.full_name}>
{unwrap(protagonist.name_full)} {unwrap(protagonist.name_full)}
</Listing> </Listing>
)} )}
<Listing label={strings.website.tools.tankopedia.meta.nation}> <Listing label={strings.website.tools.tanks.meta.nation}>
<Flex align="center" gap="1"> <Flex align="center" gap="1">
<img <img
style={{ width: '1em', height: '1em' }} style={{ width: '1em', height: '1em' }}
@@ -141,17 +141,17 @@ export function MetaSection() {
} }
</Flex> </Flex>
</Listing> </Listing>
<Listing label={strings.website.tools.tankopedia.meta.class}> <Listing label={strings.website.tools.tanks.meta.class}>
<Flex align="center" gap="1"> <Flex align="center" gap="1">
<ClassIcon width="1em" height="1em" /> <ClassIcon width="1em" height="1em" />
{strings.common.tank_class_short[protagonist.class]} {strings.common.tank_class_short[protagonist.class]}
</Flex> </Flex>
</Listing> </Listing>
<Listing label={strings.website.tools.tankopedia.meta.tier}> <Listing label={strings.website.tools.tanks.meta.tier}>
{TIER_ROMAN_NUMERALS[protagonist.tier]} {TIER_ROMAN_NUMERALS[protagonist.tier]}
</Listing> </Listing>
<Listing <Listing
label={strings.website.tools.tankopedia.meta.type} label={strings.website.tools.tanks.meta.type}
color={ color={
protagonist.type === TankType.COLLECTOR protagonist.type === TankType.COLLECTOR
? 'blue' ? 'blue'
@@ -166,12 +166,12 @@ export function MetaSection() {
<Flex direction="column" width="100%"> <Flex direction="column" width="100%">
{developerMode && ( {developerMode && (
<Listing label={strings.website.tools.tankopedia.meta.dev_id}> <Listing label={strings.website.tools.tanks.meta.dev_id}>
<Code>{protagonist.id}</Code> <Code>{protagonist.id}</Code>
</Listing> </Listing>
)} )}
{protagonist.type === TankType.PREMIUM && ( {protagonist.type === TankType.PREMIUM && (
<Listing label={strings.website.tools.tankopedia.meta.purchase}> <Listing label={strings.website.tools.tanks.meta.purchase}>
<Flex align="center" gap="1"> <Flex align="center" gap="1">
{protagonist.price.value / 400} {protagonist.price.value / 400}
<img <img
@@ -185,8 +185,8 @@ export function MetaSection() {
<Listing <Listing
label={ label={
protagonist.type === TankType.RESEARCHABLE protagonist.type === TankType.RESEARCHABLE
? strings.website.tools.tankopedia.meta.purchase ? strings.website.tools.tanks.meta.purchase
: strings.website.tools.tankopedia.meta.restoration : strings.website.tools.tanks.meta.restoration
} }
> >
<Flex align="center" gap="1"> <Flex align="center" gap="1">
@@ -204,7 +204,7 @@ export function MetaSection() {
/> />
</Flex> </Flex>
</Listing> </Listing>
<Listing label={strings.website.tools.tankopedia.meta.sale}> <Listing label={strings.website.tools.tanks.meta.sale}>
<Flex align="center" gap="1"> <Flex align="center" gap="1">
{(protagonist.price.value / 2).toLocaleString(locale)} {(protagonist.price.value / 2).toLocaleString(locale)}
<img <img
@@ -221,7 +221,7 @@ export function MetaSection() {
</Flex> </Flex>
</Listing> </Listing>
{protagonist.research_cost && ( {protagonist.research_cost && (
<Listing label={strings.website.tools.tankopedia.meta.research}> <Listing label={strings.website.tools.tanks.meta.research}>
<Flex align="center" gap="1"> <Flex align="center" gap="1">
{( {(
protagonist.research_cost.research_cost_type! protagonist.research_cost.research_cost_type!
@@ -132,11 +132,10 @@ export function Node({ id, highlight, nextIds, skeleton }: NodeProps) {
{skeleton && <Skeleton height="1em" width="4em" />} {skeleton && <Skeleton height="1em" width="4em" />}
{!skeleton && {!skeleton &&
(games === 1 (games === 1
? strings.website.tools.tankopedia.tech_tree.battle ? strings.website.tools.tanks.tech_tree.battle
: literals( : literals(strings.website.tools.tanks.tech_tree.battles, [
strings.website.tools.tankopedia.tech_tree.battles, `${games}`,
[`${games}`], ]))}
))}
</Text> </Text>
)} )}
</Flex> </Flex>
@@ -93,7 +93,7 @@ export function TechTreeSection({ skeleton }: MaybeSkeletonComponentProps) {
> >
<Flex direction="column" align="center"> <Flex direction="column" align="center">
<Heading size="6"> <Heading size="6">
{strings.website.tools.tankopedia.tech_tree.title} {strings.website.tools.tanks.tech_tree.title}
</Heading> </Heading>
{master.tier > 1 && ( {master.tier > 1 && (
@@ -219,7 +219,7 @@ export function TechTreeSection({ skeleton }: MaybeSkeletonComponentProps) {
<CaretLeftIcon /> <CaretLeftIcon />
</IconButton> </IconButton>
<Text> <Text>
{literals(strings.website.tools.tankopedia.tech_tree.route, [ {literals(strings.website.tools.tanks.tech_tree.route, [
`${lineIndex + 1}`, `${lineIndex + 1}`,
`${lines.length}`, `${lines.length}`,
])} ])}
@@ -22,12 +22,10 @@ export function VideoSection({ skeleton }: MaybeSkeletonComponentProps) {
<PageWrapper noFlex1 noMinHeight> <PageWrapper noFlex1 noMinHeight>
<Flex direction="column" gap="6" align="center"> <Flex direction="column" gap="6" align="center">
<Flex direction="column" align="center"> <Flex direction="column" align="center">
<Heading size="6"> <Heading size="6">{strings.website.tools.tanks.review.title}</Heading>
{strings.website.tools.tankopedia.review.title}
</Heading>
<Text color="gray"> <Text color="gray">
{strings.website.tools.tankopedia.review.disclaimer} {strings.website.tools.tanks.review.disclaimer}
</Text> </Text>
</Flex> </Flex>
@@ -117,7 +115,7 @@ export function VideoSection({ skeleton }: MaybeSkeletonComponentProps) {
width: '9rem', width: '9rem',
}} }}
> >
{literals(strings.website.tools.tankopedia.review.join, [ {literals(strings.website.tools.tanks.review.join, [
'BlitzKit', 'BlitzKit',
])} ])}
</Text> </Text>
@@ -11,10 +11,10 @@ import {
TIER_ROMAN_NUMERALS, TIER_ROMAN_NUMERALS,
} from '@blitzkit/core'; } from '@blitzkit/core';
import { DEFAULT_LOCALE, unwrapper } from '@blitzkit/i18n'; import { DEFAULT_LOCALE, unwrapper } from '@blitzkit/i18n';
import { literals } from '@blitzkit/i18n/src/literals';
import type { GetStaticPaths } from 'astro'; import type { GetStaticPaths } from 'astro';
import { tankCharacteristics } from '../../../../../core/blitzkit/tankCharacteristics'; import { tankCharacteristics } from '../../../../../core/blitzkit/tankCharacteristics';
import { getStrings } from '../../../../../core/i18n/getStrings'; import { getStrings } from '../../../../../core/i18n/getStrings';
import { literals } from '@blitzkit/i18n/src/literals';
import BaseLayout from '../../../../../layouts/BaseLayout.astro'; import BaseLayout from '../../../../../layouts/BaseLayout.astro';
import { genericDefaultEquipmentMatrix } from '../../../../../stores/duel/constants'; import { genericDefaultEquipmentMatrix } from '../../../../../stores/duel/constants';
import { getStaticPaths as parentGetStaticPaths } from '../index.astro'; import { getStaticPaths as parentGetStaticPaths } from '../index.astro';
@@ -45,7 +45,7 @@ const tank = tankDefinitions.tanks[id];
const tankModelDefinition = tankModelDefinitions.models[tank.id]; const tankModelDefinition = tankModelDefinitions.models[tank.id];
const name = tank.name_full ?? tank.name; const name = tank.name_full ?? tank.name;
const unwrap = unwrapper(locale); const unwrap = unwrapper(locale);
const title = literals(strings.website.tools.tankopedia.tank_seo_title, [ const title = literals(strings.website.tools.tanks.tank_seo_title, [
unwrap(name), unwrap(name),
TIER_ROMAN_NUMERALS[tank.tier], TIER_ROMAN_NUMERALS[tank.tier],
strings.common.nations_adjectives[ strings.common.nations_adjectives[
@@ -82,17 +82,14 @@ const characteristics = tankCharacteristics(
}, },
{ equipmentDefinitions, provisionDefinitions, tankModelDefinition }, { equipmentDefinitions, provisionDefinitions, tankModelDefinition },
); );
const description = literals( const description = literals(strings.website.tools.tanks.tank_seo_description, [
strings.website.tools.tankopedia.tank_seo_description, unwrap(name),
[ Math.round(characteristics.dpm).toLocaleString(locale),
unwrap(name), Math.round(characteristics.damage).toLocaleString(locale),
Math.round(characteristics.dpm).toLocaleString(locale), Math.round(characteristics.penetration).toLocaleString(locale),
Math.round(characteristics.damage).toLocaleString(locale), Math.round(characteristics.speedForwards).toLocaleString(locale),
Math.round(characteristics.penetration).toLocaleString(locale), Math.round(characteristics.health).toLocaleString(locale),
Math.round(characteristics.speedForwards).toLocaleString(locale), ]);
Math.round(characteristics.health).toLocaleString(locale),
],
);
--- ---
<title>{title}</title> <title>{title}</title>
@@ -16,9 +16,9 @@ const glossary = await fetchGlossary(DEFAULT_LOCALE);
/** /**
* Returns an in-game avatar image. Use gallery/list.json to get all valid ids. * Returns an in-game avatar image. Use gallery/list.json to get all valid ids.
* Not all ids may have images due to poor Wargaming CDNs. Some images may be * Some images may be animated. Not all images share the same dimensions.
* animated. Not all images share the same dimensions.
* *
* @warning Not all ids have images due to poor Wargaming CDN.
* @param avatar The avatar id. * @param avatar The avatar id.
* @returns A webp image. * @returns A webp image.
*/ */
+1 -1
View File
@@ -2,7 +2,7 @@
"compilerOptions": { "compilerOptions": {
"target": "ESNext", "target": "ESNext",
"module": "ESNext", "module": "ESNext",
"moduleResolution": "Node", "moduleResolution": "bundler",
"esModuleInterop": true, "esModuleInterop": true,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"strict": true, "strict": true,