import React from 'react'; import {Slider} from '~/components/ui/slider'; import {CheckboxWithLabel} from './CheckboxWithLabel'; import {SliderLabel} from './SliderLabel'; import type {SpringTimingConfig} from './types'; export const SpringEditor: React.FC<{ readonly config: SpringTimingConfig; readonly calculatedDurationInFrames: number; readonly onDragChange: (config: SpringTimingConfig) => void; readonly onChange: (config: SpringTimingConfig) => void; readonly onRelease: () => void; }> = ({ config, calculatedDurationInFrames, onDragChange, onRelease, onChange, }) => { return ( <> { onDragChange({ ...config, springConfig: {...config.springConfig, mass: val[0]}, }); }} onPointerUp={onRelease} /> { onDragChange({ ...config, springConfig: {...config.springConfig, damping: val[0]}, }); }} onPointerUp={onRelease} /> { onDragChange({ ...config, springConfig: {...config.springConfig, stiffness: val[0]}, }); }} onPointerUp={onRelease} /> { onDragChange({...config, delay: Math.round(val[0] * 60)}); }} onPointerUp={onRelease} /> { onDragChange({ ...config, durationInFrames: Math.round(val[0] * 60), }); }} onPointerUp={onRelease} /> { if (enabled) { onDragChange({ ...config, durationInFrames: calculatedDurationInFrames, }); } else { onDragChange({...config, durationInFrames: null}); } }} value={ config.durationInFrames !== null ? Number((config.durationInFrames / 60).toFixed(2)) : null } /> { onChange({ ...config, springConfig: {...config.springConfig, overshootClamping: checked}, }); }} /> { onChange({...config, reverse: checked}); }} /> ); };