diff --git a/lib/numeric-slider.tsx b/lib/numeric-slider.tsx new file mode 100644 index 0000000..a9c61ca --- /dev/null +++ b/lib/numeric-slider.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import { float } from "./util"; + +export type NumericSliderProps = { + id: string; + label: string; + onChange: (value: number) => void; + value: number; + min: number; + max: number; + step: number; + valueSuffix?: string; +}; + +export const NumericSlider: React.FC = (props) => { + return ( +

+ + props.onChange(float(e.target.value))} + /> + + {" "} + {props.value} + {props.valueSuffix} + +

+ ); +}; diff --git a/lib/pages/creature-page.tsx b/lib/pages/creature-page.tsx index 313b474..51d4d38 100644 --- a/lib/pages/creature-page.tsx +++ b/lib/pages/creature-page.tsx @@ -21,6 +21,7 @@ import { import { HoverDebugHelper } from "../hover-debug-helper"; import { svgScale, SvgTransforms } from "../svg-transform"; import { ColorWidget } from "../color-widget"; +import { NumericSlider } from "../numeric-slider"; const DEFAULT_BG_COLOR = "#858585"; @@ -209,19 +210,18 @@ export const CreaturePage: React.FC<{}> = () => { />{" "}

- - { - setComplexity(parseInt(e.target.value)); + onChange={(value) => { + setComplexity(value); newRandomSeed(); }} - />{" "} - {complexity} + />

- - props.onChange(parseFloat(e.target.value))} - /> - - {" "} - {props.value} - {props.valueSuffix} - -

- ); -}; - const Waves: React.FC<{}> = () => { const [stroke, setStroke] = useState(WAVE_STROKE); const [fill, setFill] = useState(WAVE_FILL); diff --git a/lib/symbol-context-widget.tsx b/lib/symbol-context-widget.tsx index 6329950..492676b 100644 --- a/lib/symbol-context-widget.tsx +++ b/lib/symbol-context-widget.tsx @@ -1,7 +1,7 @@ import React from "react"; import { ColorWidget } from "./color-widget"; +import { NumericSlider } from "./numeric-slider"; import { SvgSymbolContext, swapColors } from "./svg-symbol"; -import { float } from "./util"; export const SymbolContextWidget: React.FC<{ ctx: SvgSymbolContext; @@ -41,18 +41,15 @@ export const SymbolContextWidget: React.FC<{ {ctx.uniformStrokeWidth !== undefined && ( <>
- - - updateCtx({ uniformStrokeWidth: float(e.target.value) }) - } + onChange={(uniformStrokeWidth) => updateCtx({ uniformStrokeWidth })} />{" "} - {ctx.uniformStrokeWidth}{" "} )}