1+ import { d } from 'typegpu' ;
2+
13const body = document . querySelector ( 'body' ) as HTMLBodyElement ;
24body . style . display = 'flex' ;
35body . style . flexDirection = 'column' ;
@@ -146,15 +148,15 @@ for (const controls of Object.values(example)) {
146148
147149 slider . addEventListener ( 'input' , ( ) => {
148150 currentValues [ i ] = Number . parseFloat ( slider . value ) ;
149- params . onVectorSliderChange ( currentValues ) ;
151+ ( params . onVectorSliderChange as ( value : d . v2f | d . v3f | d . v4f ) => void ) ( currentValues ) ;
150152 } ) ;
151153
152154 row . appendChild ( labelSpan ) ;
153155 row . appendChild ( slider ) ;
154156 sliderContainer . appendChild ( row ) ;
155157 }
156158
157- params . onVectorSliderChange ( currentValues ) ;
159+ ( params . onVectorSliderChange as ( value : d . v2f | d . v3f | d . v4f ) => void ) ( currentValues ) ;
158160 controlRow . appendChild ( sliderContainer ) ;
159161 }
160162
@@ -222,17 +224,17 @@ type SliderControlParam = {
222224 step ?: number ;
223225} ;
224226
225- type VectorSliderControlParam = {
226- onVectorSliderChange : ( newValue : number [ ] ) => void ;
227- initial : number [ ] ;
228- min : number [ ] ;
229- max : number [ ] ;
230- step : number [ ] ;
227+ type VectorSliderControlParam < T extends d . v2f | d . v3f | d . v4f > = {
228+ onVectorSliderChange : ( newValue : T ) => void ;
229+ initial : T ;
230+ min : T ;
231+ max : T ;
232+ step : T ;
231233} ;
232234
233235type ColorPickerControlParam = {
234- onColorChange : ( newValue : readonly [ number , number , number ] ) => void ;
235- initial : readonly [ number , number , number ] ;
236+ onColorChange : ( newValue : d . v3f ) => void ;
237+ initial : d . v3f ;
236238} ;
237239
238240type ButtonControlParam = {
@@ -250,22 +252,24 @@ type ExampleControlParam =
250252 | SliderControlParam
251253 | ButtonControlParam
252254 | TextAreaControlParam
253- | VectorSliderControlParam
255+ | VectorSliderControlParam < d . v2f >
256+ | VectorSliderControlParam < d . v3f >
257+ | VectorSliderControlParam < d . v4f >
254258 | ColorPickerControlParam ;
255259
256- function hexToRgb ( hex : string ) : readonly [ number , number , number ] {
257- return [
260+ function hexToRgb ( hex : string ) : d . v3f {
261+ return d . vec3f (
258262 Number . parseInt ( hex . slice ( 1 , 3 ) , 16 ) / 255 ,
259263 Number . parseInt ( hex . slice ( 3 , 5 ) , 16 ) / 255 ,
260264 Number . parseInt ( hex . slice ( 5 , 7 ) , 16 ) / 255 ,
261- ] ;
265+ ) ;
262266}
263267
264268function componentToHex ( c : number ) {
265269 const hex = ( c * 255 ) . toString ( 16 ) ;
266270 return hex . length === 1 ? `0${ hex } ` : hex ;
267271}
268272
269- function rgbToHex ( rgb : readonly [ number , number , number ] ) {
273+ function rgbToHex ( rgb : d . v3f ) {
270274 return `#${ rgb . map ( componentToHex ) . join ( '' ) } ` ;
271275}
0 commit comments