From bacd1777beabace0c7fa98011e6256c6df047568 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Tue, 7 May 2024 13:20:33 +0200 Subject: [PATCH] basic theme editor --- tank-frontend/src/JoinForm.tsx | 5 +- tank-frontend/src/MapChooser.tsx | 3 +- tank-frontend/src/ThemeChooser.tsx | 74 ++++++++++++++++++- tank-frontend/src/components/Dialog.tsx | 12 ++- .../components/{TextInput.css => Input.css} | 2 +- tank-frontend/src/components/Input.tsx | 45 +++++++++++ tank-frontend/src/components/Row.tsx | 9 ++- tank-frontend/src/components/TextInput.tsx | 22 ------ tank-frontend/src/theme.tsx | 4 +- 9 files changed, 138 insertions(+), 38 deletions(-) rename tank-frontend/src/components/{TextInput.css => Input.css} (74%) create mode 100644 tank-frontend/src/components/Input.tsx delete mode 100644 tank-frontend/src/components/TextInput.tsx diff --git a/tank-frontend/src/JoinForm.tsx b/tank-frontend/src/JoinForm.tsx index 4f4b560..fd509d2 100644 --- a/tank-frontend/src/JoinForm.tsx +++ b/tank-frontend/src/JoinForm.tsx @@ -3,7 +3,7 @@ import {useMutation} from '@tanstack/react-query'; import {makeApiUrl} from './serverCalls'; import Button from './components/Button.tsx'; -import TextInput from './components/TextInput.tsx'; +import {TextInput} from './components/Input.tsx'; import Dialog from './components/Dialog.tsx'; import './JoinForm.css'; @@ -30,8 +30,7 @@ export default function JoinForm({onDone}: { const confirm = () => postPlayer.mutate({name}); - return -

Enter your name to play

+ return void; }) { const [chosenMap, setChosenMap] = useState(); - return -

Choose a map

+ return {mapNames.map(name => void +}) { + return + +
+

{name}

+ +
+

Hue

+ { + setValue({...value, h: parseInt(event.target.value)}); + }}/> + +

Saturation

+ { + setValue({...value, s: parseInt(event.target.value)}); + }}/> + +

Lightness

+ { + setValue({...value, l: parseInt(event.target.value)}); + }}/> +
+ ; +} + +function ThemeChooserDialog({onClose}: { + onClose: () => void; +}) { + const {hslTheme, setHslTheme} = useHslTheme(); + return + ; +} export default function ThemeChooser({}: {}) { - const {setHslTheme} = useHslTheme(); + const [open, setOpen] = useState(false); + return <>
; } diff --git a/tank-frontend/src/components/TextInput.tsx b/tank-frontend/src/components/TextInput.tsx deleted file mode 100644 index 8b6b30f..0000000 --- a/tank-frontend/src/components/TextInput.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import {ChangeEventHandler} from "react"; -import './TextInput.css'; - -export default function TextInput( {onChange, className, value, placeholder, onEnter }: { - onChange?: ChangeEventHandler | undefined; - className?: string; - value: string; - placeholder: string; - onEnter?: () => void; -}) { - return { - if (onEnter && event.key === 'Enter') - onEnter(); - }} - />; -} diff --git a/tank-frontend/src/theme.tsx b/tank-frontend/src/theme.tsx index 38a1609..c2e6012 100644 --- a/tank-frontend/src/theme.tsx +++ b/tank-frontend/src/theme.tsx @@ -1,7 +1,7 @@ import {useStoredObjectState} from './useStoredState.ts'; import {createContext, ReactNode, useContext, useMemo, useRef, useState} from 'react'; -type HSL = { +export type HSL = { h: number; s: number; l: number; @@ -53,7 +53,7 @@ function getRandomHsl(params: { return {h, s, l}; } -function hslToString({h, s, l}: HSL) { +export function hslToString({h, s, l}: HSL) { return `hsl(${h},${s}%,${l}%)`; }