import state, { useSelector } from 'state' import styled from 'styles' import { ControlType, NumberCodeControl, TextCodeControl, VectorCodeControl, } from 'types' export default function Control({ id }: { id: string }): JSX.Element { const control = useSelector((s) => s.data.codeControls[id]) if (!control) return null return ( <> {(() => { switch (control.type) { case ControlType.Number: return case ControlType.Vector: return case ControlType.Text: return } })()} ) } function NumberControl({ id, min, max, step, value }: NumberCodeControl) { return ( state.send('CHANGED_CODE_CONTROL', { [id]: Number(e.currentTarget.value), }) } /> state.send('CHANGED_CODE_CONTROL', { [id]: Number(e.currentTarget.value), }) } /> ) } function VectorControl({ id, value, min = -Infinity, max = Infinity, step = 0.01, isNormalized = false, }: VectorCodeControl) { return ( state.send('CHANGED_CODE_CONTROL', { [id]: [Number(e.currentTarget.value), value[1]], }) } /> state.send('CHANGED_CODE_CONTROL', { [id]: [Number(e.currentTarget.value), value[1]], }) } /> state.send('CHANGED_CODE_CONTROL', { [id]: [value[0], Number(e.currentTarget.value)], }) } /> state.send('CHANGED_CODE_CONTROL', { [id]: [value[0], Number(e.currentTarget.value)], }) } /> ) } function TextControl({ id, value }: TextCodeControl) { return ( state.send('CHANGED_CODE_CONTROL', { [id]: e.currentTarget.value, }) } /> ) } const Inputs = styled('div', { display: 'flex', gap: '8px', height: '100%', '& input': { font: '$ui', width: '64px', fontSize: '$1', border: '1px solid $inputBorder', backgroundColor: '$input', color: '$text', height: '100%', padding: '0px 6px', }, "& input[type='range']": { padding: 0, flexGrow: 2, }, "& input[type='text']": { minWidth: 200, padding: 4, flexGrow: 2, }, })