Redesign Spall Liner swap popover with icons

Replace wordy swap prompt with compact icon row (spall liner icon,
swap icon, current provisions) and drop unused ProvisionButton
tooltip that flashed on popover open.
This commit is contained in:
Mark Greene committed 2026-09-26 19:45:17 +12:00
1 parent 9e38815475
commit 85b8c7057d
2 files changed
+37 -16

No files matched your search

-4
View File
@@ -527,10 +527,6 @@
"label": "Edit", "label": "Edit",
"reset": "Reset" "reset": "Reset"
} }
},
"spall_liner": {
"swap_prompt": "Spall Liner will replace one of your active provisions. Choose which one to remove:"
} }
}, },
@@ -1,17 +1,17 @@
import { alias, availableProvisions } from "@blitzkit/core"; import { alias, availableProvisions } from "@blitzkit/core";
import { Flex, IconButton, Popover, Text } from "@radix-ui/themes"; import { ShuffleIcon } from "@radix-ui/react-icons";
import { Flex, IconButton, Popover } from "@radix-ui/themes";
import { api } from "../../../../../../core/blitzkit/api"; import { api } from "../../../../../../core/blitzkit/api";
import { SPALL_LINER_PROVISION_ID } from "../../../../../../core/blitzkit/spallLiner"; import { SPALL_LINER_PROVISION_ID } from "../../../../../../core/blitzkit/spallLiner";
import { useLocale } from "../../../../../../hooks/useLocale"; import { useLocale } from "../../../../../../hooks/useLocale";
import { Duel } from "../../../../../../stores/duel"; import { Duel } from "../../../../../../stores/duel";
import { Tankopedia } from "../../../../../../stores/tankopedia"; import { Tankopedia } from "../../../../../../stores/tankopedia";
import { ProvisionButton } from "../../../../../ModuleButtons/ProvisionButton";
const provisionDefinitions = await api.provisionDefinitions(); const provisionDefinitions = await api.provisionDefinitions();
export function SpallLinerSwitcher() { export function SpallLinerSwitcher() {
const { tank, gun, provisions } = Duel.use((state) => state.protagonist); const { tank, gun, provisions } = Duel.use((state) => state.protagonist);
const { strings, unwrap } = useLocale(); const { unwrap } = useLocale();
const isSpallLinerActive = provisions.includes(SPALL_LINER_PROVISION_ID); const isSpallLinerActive = provisions.includes(SPALL_LINER_PROVISION_ID);
const hasSlotAvailable = provisions.length < tank.max_provisions; const hasSlotAvailable = provisions.length < tank.max_provisions;
@@ -80,19 +80,44 @@ export function SpallLinerSwitcher() {
<Popover.Trigger>{button}</Popover.Trigger> <Popover.Trigger>{button}</Popover.Trigger>
<Popover.Content> <Popover.Content>
<Flex direction="column" gap="2" maxWidth="240px"> <Flex gap="2" align="center">
<Text size="2" color="gray"> <IconButton color="gray" variant="soft" size="3" radius="none" disabled>
{strings.website.tools.tankopedia.sandbox.spall_liner.swap_prompt} <img
</Text> alt={unwrap(
provisionDefinitions.provisions[SPALL_LINER_PROVISION_ID].name!,
)}
src={alias(
"api",
`/icons/provisions/${SPALL_LINER_PROVISION_ID}.webp`,
)}
style={{
width: "50%",
height: "50%",
}}
/>
</IconButton>
<Flex gap="2" wrap="wrap"> <ShuffleIcon color="var(--gray-9)" />
<Flex gap="2">
{provisions.map((id) => ( {provisions.map((id) => (
<Popover.Close key={id}> <Popover.Close key={id}>
<ProvisionButton <IconButton
provision={id} color="gray"
selected={false} variant="soft"
size="3"
radius="none"
onClick={() => equip(id)} onClick={() => equip(id)}
/> >
<img
alt={unwrap(provisionDefinitions.provisions[id].name!)}
src={alias("api", `/icons/provisions/${id}.webp`)}
style={{
width: "50%",
height: "50%",
}}
/>
</IconButton>
</Popover.Close> </Popover.Close>
))} ))}
</Flex> </Flex>