import { Box, Grid, GridItem, Heading, Slider, SliderTrack, SliderFilledTrack, SliderThumb, Text, Switch, Collapse, IconButton, } from '@chakra-ui/react'; import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'; import { observer } from 'mobx-react-lite'; import React, { useState } from 'react'; interface SliderControl { value: number; onChange: (value: number) => void; label: string; min: number; max: number; step: number; ariaLabel: string; } interface SwitchControl { value: boolean; onChange: (enabled: boolean) => void; label: string; exclusive?: boolean; } interface TweakboxProps { sliders: { speed: SliderControl; intensity: SliderControl; }; switches: { particles: SwitchControl; glow: SwitchControl; } & Record; } const Tweakbox = observer(({ sliders, switches }: TweakboxProps) => { const [isCollapsed, setIsCollapsed] = useState(false); return ( : } onClick={() => setIsCollapsed(!isCollapsed)} size="sm" marginRight={2} /> {Object.keys(switches).map(key => { return ( {switches[key].label} switches[key].onChange(e.target.checked)} /> ); })} {Object.entries(sliders).map(([key, slider]) => ( {slider.label} ))} ); }); export default Tweakbox;