Merge branch 'blitzkit:main' into main

This commit is contained in:
Mark Greene authored and GitHub committed 2025-12-30 15:45:38 +13:00
commit 488857b7d8
10 files changed
+299 -93

No files matched your search

@@ -277,14 +277,14 @@ export function CompareTable({ stats }: CompareTableProps) {
</Popover.Content>
</Popover.Root>
<Flex align="center" justify="center" gap="3">
<Flex justify="center" gap="3">
<Popover.Root>
<Popover.Trigger>
<Button
variant="ghost"
radius="large"
style={{
height: "100%",
height: "2rem",
width: 12,
position: "relative",
}}
@@ -345,7 +345,24 @@ export function CompareTable({ stats }: CompareTableProps) {
});
}}
/>
<Flex justify="end" mt="4">
<Flex justify="end" mt="4" gap="3">
<Button
variant="ghost"
onClick={() => {
CompareEphemeral.mutate((draft) => {
draft.members.map((member) => {
member.provisions = [];
});
});
}}
>
{
strings.website.tools.compare.table.provisions
.clear_all
}
</Button>
<Button
variant="ghost"
onClick={() => {
@@ -473,7 +490,7 @@ export function CompareTable({ stats }: CompareTableProps) {
variant="ghost"
radius="large"
style={{
height: "100%",
height: "2rem",
width: 12,
position: "relative",
}}
@@ -536,7 +553,23 @@ export function CompareTable({ stats }: CompareTableProps) {
}
/>
<Flex justify="end" mt="4">
<Flex justify="end" mt="4" gap="4">
<Button
variant="ghost"
onClick={() => {
CompareEphemeral.mutate((draft) => {
draft.members.map((member) => {
member.consumables = [];
});
});
}}
>
{
strings.website.tools.compare.table.consumables
.clear_all
}
</Button>
<Button
variant="ghost"
onClick={() => {
@@ -9,12 +9,15 @@ const CONTRAST = 2 ** 2;
export function GuessRenderer() {
const guessState = Guess.use((state) => state.guessState);
const isRevealed = guessState !== GuessState.NotGuessed;
const helpingReveal = Guess.use((state) => state.helpingReveal);
const isRevealed = helpingReveal || guessState !== GuessState.NotGuessed;
return (
<SmartCanvas
style={{
filter: `grayscale(${isRevealed ? 0 : 1}) contrast(${isRevealed ? 1 : CONTRAST}) brightness(${isRevealed ? 1 : BRIGHTNESS})`,
filter: `grayscale(${isRevealed ? 0 : 1}) contrast(${
isRevealed ? 1 : CONTRAST
}) brightness(${isRevealed ? 1 : BRIGHTNESS})`,
transitionDuration: isRevealed ? "2s" : undefined,
transitionProperty: "filter",
}}
+52 -1
View File
@@ -7,14 +7,17 @@ import {
import { literals } from "@blitzkit/i18n";
import {
ArrowRightIcon,
EyeOpenIcon,
MagnifyingGlassIcon,
PaperPlaneIcon,
} from "@radix-ui/react-icons";
import {
AlertDialog,
Box,
Button,
Card,
Flex,
IconButton,
Spinner,
Text,
TextField,
@@ -43,6 +46,8 @@ export function Guesser() {
const guessState = Guess.use((state) => state.guessState);
const correctGuesses = Guess.use((state) => state.correctGuesses);
const totalGuesses = Guess.use((state) => state.totalGuesses);
const helpingReveal = Guess.use((state) => state.helpingReveal);
const streak = Guess.use((state) => state.streak);
const { strings, unwrap } = useLocale();
const input = useRef<HTMLInputElement>(null);
const [searching, setSearching] = useState(false);
@@ -150,6 +155,7 @@ export function Guesser() {
{literals(strings.website.tools.guess.stats, {
correct: correctGuesses,
total: totalGuesses,
streak: streak,
})}
</Text>
</Flex>
@@ -169,6 +175,48 @@ export function Guesser() {
</TextField.Slot>
</TextField.Root>
<AlertDialog.Root>
<AlertDialog.Trigger>
<IconButton
size="3"
disabled={guessState !== GuessState.NotGuessed}
>
<EyeOpenIcon />
</IconButton>
</AlertDialog.Trigger>
<AlertDialog.Content>
<AlertDialog.Title>
{strings.website.tools.guess.help.title}
</AlertDialog.Title>
<AlertDialog.Description>
{strings.website.tools.guess.help.description}
</AlertDialog.Description>
<Flex justify="end" gap="2">
<AlertDialog.Cancel>
<Button variant="outline">
{strings.website.tools.guess.help.cancel}
</Button>
</AlertDialog.Cancel>
<AlertDialog.Action>
<Button
color="tomato"
onClick={() => {
Guess.mutate((draft) => {
draft.helpingReveal = true;
draft.streak = 0;
});
}}
>
{strings.website.tools.guess.help.reveal}
</Button>
</AlertDialog.Action>
</Flex>
</AlertDialog.Content>
</AlertDialog.Root>
<Button
size="3"
color={
@@ -178,7 +226,8 @@ export function Guesser() {
}
onClick={() => {
if (guessState === GuessState.NotGuessed) {
const correct = selected !== null && selected.id === tank.id;
const correct =
selected !== null && selected.id === tank.id && !helpingReveal;
Guess.mutate((draft) => {
draft.guessState = correct
@@ -186,6 +235,7 @@ export function Guesser() {
: GuessState.Incorrect;
draft.totalGuesses++;
draft.correctGuesses += correct ? 1 : 0;
draft.streak = correct ? draft.streak + 1 : 0;
});
} else {
const id = Number(ids[Math.floor(Math.random() * ids.length)]);
@@ -196,6 +246,7 @@ export function Guesser() {
draft.tank = tank;
draft.guessState = GuessState.NotGuessed;
draft.helpingReveal = false;
input.current.value = "";
});
@@ -150,6 +150,7 @@ export const TankSandbox = forwardRef<HTMLCanvasElement, TankSandboxProps>(
return (
<SmartCanvas
resize={{ debounce: 0 }}
ref={canvas}
scene={{ fog: new Fog("black", 30, 50) }}
gl={{