import { asset } from "@blitzkit/core"; import { CaretRightIcon, UpdateIcon } from "@radix-ui/react-icons"; import { Box, Button, Dialog, Flex, Skeleton, Text, type ButtonProps, } from "@radix-ui/themes"; import { useRef, useState } from "react"; import { MixerScene } from "../../../components/MixerScene"; import { PageWrapper } from "../../../components/PageWrapper"; import { ScreenshotButton } from "../../../components/ScreenshotButton"; import { TankSearch, type TankSearchProps, } from "../../../components/TankSearch"; import { curateMixer } from "../../../core/blitzkit/curateMixer"; import { LocaleProvider, useLocale, type LocaleAcceptorProps, } from "../../../hooks/useLocale"; import { Mixer } from "../../../stores/mixer"; import type { MaybeSkeletonComponentProps } from "../../../types/maybeSkeletonComponentProps"; export function Page({ locale, skeleton, }: LocaleAcceptorProps & MaybeSkeletonComponentProps) { const initial = useRef(curateMixer()); Mixer.useInitialization(initial.current); return ( ); } function ModuleButton({ skeleton, tank, onSelect, ...props }: Omit & MaybeSkeletonComponentProps & { tank: number; onSelect: TankSearchProps["onSelect"]; }) { const { strings } = useLocale(); const [open, setOpen] = useState(false); return ( {strings.website.common.tank_search.select_dialog_title} { onSelect?.(tank); setOpen(false); }} /> ); } function ModuleSeparator() { return ( ); } function Content({ skeleton }: MaybeSkeletonComponentProps) { const hull = Mixer.use((state) => state.hull); const turretId = Mixer.use((state) => state.turret.tank.id); const gunId = Mixer.use((state) => state.gun.tank.id); const canvas = useRef(null!); const { strings } = useLocale(); return ( {!skeleton && } {strings.website.tools.mixer.screenshot} { Mixer.mutate((draft) => { draft.hull = tank; }); }} /> { Mixer.mutate((draft) => { draft.turret = { tank, turret: tank.turrets.at(-1)!, }; }); }} /> { Mixer.mutate((draft) => { draft.gun = { tank, turret: tank.turrets.at(-1)!, gun: tank.turrets.at(-1)!.guns.at(-1)!, }; }); }} /> ); }