Files
ComfyBox/src/lib/nodes/widgets/ComfyNumberNode.ts
2023-06-03 00:38:09 -05:00

71 lines
2.1 KiB
TypeScript

import type IComfyInputSlot from "$lib/IComfyInputSlot";
import { clamp } from "$lib/utils";
import { BuiltInSlotType, LiteGraph, type SlotLayout } from "@litegraph-ts/core";
import NumberWidget from "$lib/widgets/NumberWidget.svelte";
import type { ComfyWidgetProperties } from "./ComfyWidgetNode";
import ComfyWidgetNode from "./ComfyWidgetNode";
export interface ComfyNumberProperties extends ComfyWidgetProperties {
min: number,
max: number,
step: number,
precision: number
}
export default class ComfyNumberNode extends ComfyWidgetNode<number> {
override properties: ComfyNumberProperties = {
tags: [],
defaultValue: 0,
min: 0,
max: 10,
step: 1,
precision: 1,
excludeFromJourney: false,
}
override svelteComponentType = NumberWidget
override defaultValue = 0;
static slotLayout: SlotLayout = {
inputs: [
{ name: "store", type: BuiltInSlotType.ACTION }
],
outputs: [
{ name: "value", type: "number" },
{ name: "changed", type: BuiltInSlotType.EVENT },
]
}
override outputProperties = [
{ name: "min", type: "number" },
{ name: "max", type: "number" },
{ name: "step", type: "number" },
{ name: "precision", type: "number" },
]
constructor(name?: string) {
super(name, 0)
}
override parseValue(value: any): number {
if (typeof value !== "number")
return this.properties.min;
return clamp(value, this.properties.min, this.properties.max)
}
override clampOneConfig(input: IComfyInputSlot) {
// this.setProperty("min", clamp(this.properties.min, input.config.min, input.config.max))
// this.setProperty("max", clamp(this.properties.max, input.config.max, input.config.min))
// this.setProperty("step", Math.min(this.properties.step, input.config.step))
this.setValue(this.properties.defaultValue)
}
}
LiteGraph.registerNodeType({
class: ComfyNumberNode,
title: "UI.Number",
desc: "Displays a number, by default in a slider format.",
type: "ui/number"
})