diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx index 5d07ee97c3..12f617084c 100644 --- a/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/flow/nodes/Invocation/fields/inputs/NumberFieldCollectionInputComponent.tsx @@ -85,6 +85,42 @@ export const NumberFieldCollectionInputComponent = memo( store.dispatch(fieldNumberCollectionValueChanged({ nodeId, fieldName: field.name, value: newValue })); }, [field.value, field.name, store, nodeId]); + const min = useMemo(() => { + let min = -NUMPY_RAND_MAX; + if (!isNil(fieldTemplate.minimum)) { + min = fieldTemplate.minimum; + } + if (!isNil(fieldTemplate.exclusiveMinimum)) { + min = fieldTemplate.exclusiveMinimum + 0.01; + } + return min; + }, [fieldTemplate.exclusiveMinimum, fieldTemplate.minimum]); + + const max = useMemo(() => { + let max = NUMPY_RAND_MAX; + if (!isNil(fieldTemplate.maximum)) { + max = fieldTemplate.maximum; + } + if (!isNil(fieldTemplate.exclusiveMaximum)) { + max = fieldTemplate.exclusiveMaximum - 0.01; + } + return max; + }, [fieldTemplate.exclusiveMaximum, fieldTemplate.maximum]); + + const step = useMemo(() => { + if (isNil(fieldTemplate.multipleOf)) { + return isIntegerField ? 1 : 0.1; + } + return fieldTemplate.multipleOf; + }, [fieldTemplate.multipleOf, isIntegerField]); + + const fineStep = useMemo(() => { + if (isNil(fieldTemplate.multipleOf)) { + return isIntegerField ? 1 : 0.01; + } + return fieldTemplate.multipleOf; + }, [fieldTemplate.multipleOf, isIntegerField]); + return ( {field.value && !Array.isArray(field.value) && ( - + )} {field.value && Array.isArray(field.value) && field.value.length > 0 && ( - + )} ); @@ -145,18 +199,22 @@ export const NumberFieldCollectionInputComponent = memo( NumberFieldCollectionInputComponent.displayName = 'NumberFieldCollectionInputComponent'; const GeneratorEntry = ({ + step, + fineStep, nodeId, fieldName, value, - fieldTemplate, }: { + min: number; + max: number; + step: number; + fineStep: number; nodeId: string; fieldName: string; value: IntegerStartStepCountGenerator | FloatStartStepCountGenerator; fieldTemplate: IntegerFieldCollectionInputTemplate | FloatFieldCollectionInputTemplate; }) => { const dispatch = useAppDispatch(); - const isIntegerField = useMemo(() => fieldTemplate.type.name === 'IntegerField', [fieldTemplate.type]); const onChangeStart = useCallback( (v: number) => { const newValue = { ...value, start: v }; @@ -183,7 +241,14 @@ const GeneratorEntry = ({ Start - + Count @@ -196,7 +261,8 @@ const GeneratorEntry = ({ onChange={onChangeStep} min={-Infinity} max={Infinity} - step={isIntegerField ? 1 : 0.1} + step={step} + fineStep={fineStep} /> @@ -204,11 +270,19 @@ const GeneratorEntry = ({ }; const ManualEntry = ({ + min, + max, + step, + fineStep, nodeId, fieldName, value, fieldTemplate, }: { + min: number; + max: number; + step: number; + fineStep: number; nodeId: string; fieldName: string; value: number[]; @@ -235,42 +309,6 @@ const ManualEntry = ({ [value, dispatch, nodeId, fieldName] ); - const min = useMemo(() => { - let min = -NUMPY_RAND_MAX; - if (!isNil(fieldTemplate.minimum)) { - min = fieldTemplate.minimum; - } - if (!isNil(fieldTemplate.exclusiveMinimum)) { - min = fieldTemplate.exclusiveMinimum + 0.01; - } - return min; - }, [fieldTemplate.exclusiveMinimum, fieldTemplate.minimum]); - - const max = useMemo(() => { - let max = NUMPY_RAND_MAX; - if (!isNil(fieldTemplate.maximum)) { - max = fieldTemplate.maximum; - } - if (!isNil(fieldTemplate.exclusiveMaximum)) { - max = fieldTemplate.exclusiveMaximum - 0.01; - } - return max; - }, [fieldTemplate.exclusiveMaximum, fieldTemplate.maximum]); - - const step = useMemo(() => { - if (isNil(fieldTemplate.multipleOf)) { - return isIntegerField ? 1 : 0.1; - } - return fieldTemplate.multipleOf; - }, [fieldTemplate.multipleOf, isIntegerField]); - - const fineStep = useMemo(() => { - if (isNil(fieldTemplate.multipleOf)) { - return isIntegerField ? 1 : 0.01; - } - return fieldTemplate.multipleOf; - }, [fieldTemplate.multipleOf, isIntegerField]); - return (