diff --git a/packages/base/src/formbuilder/objectform/baseform.tsx b/packages/base/src/formbuilder/objectform/baseform.tsx index 149737c7e..fa27e4fee 100644 --- a/packages/base/src/formbuilder/objectform/baseform.tsx +++ b/packages/base/src/formbuilder/objectform/baseform.tsx @@ -7,7 +7,7 @@ import { Dialog } from '@jupyterlab/apputils'; import { Signal } from '@lumino/signaling'; import { deepCopy } from '../../tools'; import { IDict } from '../../types'; -import { Slider, SliderLabel } from '@jupyter/react-components'; +import { Slider } from '@jupyter/react-components'; import { SourceType } from '@jupytergis/schema'; export interface IBaseFormStates { @@ -173,25 +173,67 @@ export class BaseForm extends React.Component { if (k === 'opacity') { uiSchema[k] = { 'ui:field': (props: any) => { - const handleChange = (event: CustomEvent) => { + const [inputValue, setInputValue] = React.useState( + props.formData.toFixed(1) + ); + + React.useEffect(() => { + setInputValue(props.formData.toFixed(1)); + }, [props.formData]); + + const handleSliderChange = (event: CustomEvent) => { const target = event.target as any; if (target && '_value' in target) { - const value = parseFloat(target._value); - props.onChange(value); + const sliderValue = parseFloat(target._value); // Slider value is in 0–10 range + const normalizedValue = sliderValue / 10; // Normalize to 0.1–1 range + props.onChange(normalizedValue); + } + }; + + const handleInputChange = ( + event: React.ChangeEvent + ) => { + const value = event.target.value; + setInputValue(value); + + const parsedValue = parseFloat(value); + if ( + !isNaN(parsedValue) && + parsedValue >= 0.1 && + parsedValue <= 1 + ) { + props.onChange(parsedValue); } }; return ( - - 0% - 100% - + + + ); } };