mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-02 10:45:23 -05:00
feat(ui): number collection generator supports floats
This commit is contained in:
@@ -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 (
|
||||
<Flex
|
||||
className="nodrag"
|
||||
@@ -132,10 +168,28 @@ export const NumberFieldCollectionInputComponent = memo(
|
||||
/>
|
||||
</Flex>
|
||||
{field.value && !Array.isArray(field.value) && (
|
||||
<GeneratorEntry nodeId={nodeId} fieldName={field.name} value={field.value} fieldTemplate={fieldTemplate} />
|
||||
<GeneratorEntry
|
||||
nodeId={nodeId}
|
||||
fieldName={field.name}
|
||||
value={field.value}
|
||||
fieldTemplate={fieldTemplate}
|
||||
min={min}
|
||||
max={max}
|
||||
step={step}
|
||||
fineStep={fineStep}
|
||||
/>
|
||||
)}
|
||||
{field.value && Array.isArray(field.value) && field.value.length > 0 && (
|
||||
<ManualEntry nodeId={nodeId} fieldName={field.name} value={field.value} fieldTemplate={fieldTemplate} />
|
||||
<ManualEntry
|
||||
nodeId={nodeId}
|
||||
fieldName={field.name}
|
||||
value={field.value}
|
||||
fieldTemplate={fieldTemplate}
|
||||
min={min}
|
||||
max={max}
|
||||
step={step}
|
||||
fineStep={fineStep}
|
||||
/>
|
||||
)}
|
||||
</Flex>
|
||||
);
|
||||
@@ -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 = ({
|
||||
<Flex gap={2}>
|
||||
<FormControl>
|
||||
<FormLabel m={0}>Start</FormLabel>
|
||||
<CompositeNumberInput value={value.start} onChange={onChangeStart} min={-Infinity} max={Infinity} />
|
||||
<CompositeNumberInput
|
||||
value={value.start}
|
||||
onChange={onChangeStart}
|
||||
min={-Infinity}
|
||||
max={Infinity}
|
||||
step={step}
|
||||
fineStep={fineStep}
|
||||
/>
|
||||
</FormControl>
|
||||
<FormControl>
|
||||
<FormLabel m={0}>Count</FormLabel>
|
||||
@@ -196,7 +261,8 @@ const GeneratorEntry = ({
|
||||
onChange={onChangeStep}
|
||||
min={-Infinity}
|
||||
max={Infinity}
|
||||
step={isIntegerField ? 1 : 0.1}
|
||||
step={step}
|
||||
fineStep={fineStep}
|
||||
/>
|
||||
</FormControl>
|
||||
</Flex>
|
||||
@@ -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 (
|
||||
<Box w="full" h="full">
|
||||
<OverlayScrollbarsComponent
|
||||
|
||||
Reference in New Issue
Block a user