import { Dispatch , SetStateAction , MouseEvent } from 'react' ; import { SpringConfig } from '@react-spring/three' ; export const DEFAULT_GROUP = 'DEFAULT_GROUP' ; export type ControlItem = { id : string ; name : string ; value : any ; options : ControlOptions ; } ; export enum ControlType { NUMBER = 'number' , STRING = 'string' , BUTTON = 'button' , BOOLEAN = 'boolean' , SELECT = 'select' , COLOR = 'color' , XYPAD = 'xypad' , FILE = 'file' , CUSTOM = 'custom' } export type ControlComponentProps < T > = ControlItem & { setValue ( value ) : void ; options : T ; } ; export type ControlOptionsBase = { /** Unique id for control */ id ? : string ; type : ControlType | string ; /** Default value */ value ? : any ; spring ? : boolean | SpringConfig ; group ? : string ; state ? : [ any , Dispatch < SetStateAction < any > > ] ; onChange ? ( value ) : void ; } ; export type ControlOptionsNumber = { type : ControlType . NUMBER | 'number' ; min ? : number ; max ? : number ; value ? : number ; distance ? : number ; scrub ? : boolean ; } ; export type ControlOptionsString = { type : ControlType . STRING | 'string' ; value ? : string ; } ; export type ControlOptionsFile = { type : ControlType . FILE | 'file' ; value ? : string ; /** Loader */ loader ? : { load ( url ) : any ; } ; } ; export type ControlOptionsButton = { type : ControlType . BUTTON | 'button' ; onClick ? ( e ) : any ; } ; export type ControlOptionsBoolean = { type : ControlType . BOOLEAN | 'boolean' ; value ? : boolean ; } ; export type ControlOptionsSelect = { type : ControlType . SELECT | 'select' ; items : string [ ] ; value ? : string ; } ; export type ControlOptionsColor = { type : ControlType . COLOR | 'color' ; value ? : string ; inline ? : boolean ; picker ? : 'chrome' | 'sketch' | 'hue' | 'alpha' | 'block' | 'github' | 'twitter' | 'circle' | 'material' | 'compact' | 'slider' | 'swatches' ; disableAlpha ? : boolean ; colors ? : string [ ] ; } ; export type ControlOptionsXYPad = { type : ControlType . XYPAD | 'xypad' ; value ? : { x : number ; y : number ; } ; distance ? : number ; scrub ? : boolean ; } ; export type ControlOptionsCustom = { type : ControlType . CUSTOM | 'custom' ; component ? : any ; } ; export type ControlOptions = ControlOptionsBase & ( ControlOptionsCustom | ControlOptionsNumber | ControlOptionsBoolean | ControlOptionsString | ControlOptionsButton | ControlOptionsColor | ControlOptionsSelect | ControlOptionsFile | ControlOptionsXYPad ) ;