123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- import state, { useSelector } from "state"
- import styled from "styles"
- import {
- ControlType,
- NumberCodeControl,
- SelectCodeControl,
- TextCodeControl,
- VectorCodeControl,
- } from "types"
-
- export default function Control({ id }: { id: string }) {
- const control = useSelector((s) => s.data.codeControls[id])
-
- if (!control) return null
-
- return (
- <>
- <label>{control.label}</label>
- {control.type === ControlType.Number ? (
- <NumberControl {...control} />
- ) : control.type === ControlType.Vector ? (
- <VectorControl {...control} />
- ) : control.type === ControlType.Text ? (
- <TextControl {...control} />
- ) : control.type === ControlType.Select ? (
- <SelectControl {...control} />
- ) : null}
- </>
- )
- }
-
- function NumberControl({ id, min, max, step, value }: NumberCodeControl) {
- return (
- <Inputs>
- <input
- type="range"
- min={min}
- max={max}
- step={step}
- value={value}
- onChange={(e) =>
- state.send("CHANGED_CODE_CONTROL", {
- [id]: Number(e.currentTarget.value),
- })
- }
- />
- <input
- type="number"
- min={min}
- max={max}
- step={step}
- value={value}
- onChange={(e) =>
- state.send("CHANGED_CODE_CONTROL", {
- [id]: Number(e.currentTarget.value),
- })
- }
- />
- </Inputs>
- )
- }
-
- function VectorControl({ id, value, isNormalized }: VectorCodeControl) {
- return (
- <Inputs>
- <input
- type="range"
- min={isNormalized ? -1 : -Infinity}
- max={isNormalized ? 1 : Infinity}
- step={0.01}
- value={value[0]}
- onChange={(e) =>
- state.send("CHANGED_CODE_CONTROL", {
- [id]: [Number(e.currentTarget.value), value[1]],
- })
- }
- />
- <input
- type="number"
- min={isNormalized ? -1 : -Infinity}
- max={isNormalized ? 1 : Infinity}
- step={0.01}
- value={value[0]}
- onChange={(e) =>
- state.send("CHANGED_CODE_CONTROL", {
- [id]: [Number(e.currentTarget.value), value[1]],
- })
- }
- />
- <input
- type="range"
- min={isNormalized ? -1 : -Infinity}
- max={isNormalized ? 1 : Infinity}
- step={0.01}
- value={value[1]}
- onChange={(e) =>
- state.send("CHANGED_CODE_CONTROL", {
- [id]: [value[0], Number(e.currentTarget.value)],
- })
- }
- />
- <input
- type="number"
- min={isNormalized ? -1 : -Infinity}
- max={isNormalized ? 1 : Infinity}
- step={0.01}
- value={value[1]}
- onChange={(e) =>
- state.send("CHANGED_CODE_CONTROL", {
- [id]: [value[0], Number(e.currentTarget.value)],
- })
- }
- />
- </Inputs>
- )
- }
-
- function TextControl({}: TextCodeControl) {
- return <></>
- }
-
- function SelectControl({}: SelectCodeControl) {
- return <></>
- }
-
- 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,
- },
- })
|