mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
Merge branch 'blitzkit:main' into main
This commit is contained in:
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",
|
||||
}}
|
||||
|
||||
@@ -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 = "";
|
||||
});
|
||||
|
||||
+1
@@ -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={{
|
||||
|
||||
Reference in new issue
Block a user