diff --git a/packages/website/src/components/TankSearch/components/FilterControl.tsx b/packages/website/src/components/TankSearch/components/FilterControl.tsx
index bd3c86e5e..f8d9b372d 100644
--- a/packages/website/src/components/TankSearch/components/FilterControl.tsx
+++ b/packages/website/src/components/TankSearch/components/FilterControl.tsx
@@ -8,7 +8,16 @@ import {
TIER_ROMAN_NUMERALS,
} from "@blitzkit/core";
import { TrashIcon } from "@radix-ui/react-icons";
-import { Box, Button, DropdownMenu, Flex, Text } from "@radix-ui/themes";
+import {
+ Box,
+ Button,
+ DropdownMenu,
+ Flex,
+ IconButton,
+ Inset,
+ Popover,
+ Text,
+} from "@radix-ui/themes";
import { times } from "lodash-es";
import type { ComponentProps, ReactNode } from "react";
import { awaitableGameDefinitions } from "../../../core/awaitables/gameDefinitions";
@@ -18,6 +27,7 @@ import { classIcons } from "../../ClassIcon";
import { GunAutoloaderIcon } from "../../GunAutoloaderIcon";
import { GunAutoreloaderIcon } from "../../GunAutoreloaderIcon";
import { GunRegularIcon } from "../../GunRegularIcon";
+import { MissingShellIcon } from "../../MissingShellIcon";
import { ResearchedIcon } from "../../ResearchedIcon";
const gameDefinitions = await awaitableGameDefinitions;
@@ -60,6 +70,7 @@ export function FilterControl() {
+
);
}
@@ -478,3 +489,94 @@ function TypeFilter() {
);
}
+
+function ShellFilter() {
+ return (
+
+
+
+
+
+ );
+}
+
+function IndividualShellFilter({
+ index,
+ premium,
+}: {
+ index: number;
+ premium?: boolean;
+}) {
+ const shells = TankFilters.use((state) => state.shells);
+
+ return (
+
+
+
+ {shells[index] === null && (
+
+
+
+ )}
+ {shells[index] !== null && (
+
+ )}
+
+
+
+
+
+
+ {Object.values(ShellType).map((shellType) => {
+ if (typeof shellType === "string") return null;
+
+ const selected = shells[index] === shellType;
+
+ return (
+ {
+ const mutated = [...shells] as TankFilters["shells"];
+
+ mutated[index] = selected ? null : shellType;
+
+ TankFilters.mutate((draft) => {
+ draft.shells = mutated;
+ });
+ }}
+ highContrast={selected}
+ color={selected ? undefined : "gray"}
+ >
+
+
+ );
+ })}
+
+
+
+
+ );
+}