import React, { useState } from "react"; import { PaletteAlgorithmWidget } from "./palette-algorithm-widget"; import { Random } from "./random"; import { createRandomColorPalette, DEFAULT_RANDOM_PALETTE_ALGORITHM, RandomPaletteAlgorithm, } from "./random-colors"; import { SvgCompositionContext } from "./svg-composition-context"; type SvgCompositionColors = Pick< SvgCompositionContext, "background" | "fill" | "stroke" >; function createRandomCompositionColors( alg: RandomPaletteAlgorithm ): SvgCompositionColors { const [background, stroke, fill] = createRandomColorPalette( 3, undefined, alg ); return { background, stroke, fill }; } export type RandomizerWidgetProps = { onColorsChange: (changes: SvgCompositionColors) => void; onSymbolsChange: (rng: Random) => void; }; export const RandomizerWidget: React.FC = (props) => { type RandType = "colors" | "symbols" | "colors and symbols"; const [paletteAlg, setPaletteAlg] = useState( DEFAULT_RANDOM_PALETTE_ALGORITHM ); const [randType, setRandType] = useState("colors and symbols"); const randomize = () => { if (randType === "colors" || randType === "colors and symbols") { props.onColorsChange(createRandomCompositionColors(paletteAlg)); } if (randType === "symbols" || randType === "colors and symbols") { props.onSymbolsChange(new Random(Date.now())); } }; const makeRadio = (kind: RandType) => ( ); return (
Randomizer {makeRadio("colors")} {makeRadio("symbols")} {makeRadio("colors and symbols")} {randType !== "symbols" && ( )}
); };