mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-05-11 00:10:40 +00:00
## Summary - Fix widget callback signature to pass node as 3rd parameter for extensions like Impact Pack - Add triggerDraw call to update all legacy widgets when any widget value changes - Support computeLayoutSize for dynamic widget height calculation - Set node.canvasHeight for extensions that rely on this property - Use step/10 for number input buttons to match litegraph behavior Fixes display and interaction issues with Impact Pack's Mask Rect Area nodes. fix https://github.com/Comfy-Org/ComfyUI_frontend/issues/7615 and https://github.com/Comfy-Org/ComfyUI_frontend/issues/7616 it also requires Impact pack PR https://github.com/ltdrdata/ComfyUI-Impact-Pack/pull/1167 ## Screenshots Before https://github.com/user-attachments/assets/eb890f7c-c1a0-4c7b-a8d7-dde304de83e4 After https://github.com/user-attachments/assets/dad65b52-d71e-4c19-92c0-367b7dcafed0 ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7766-fix-Improve-legacy-widget-compatibility-in-vueNodes-mode-2d56d73d365081b18d83f4a41ff0f377) by [Unito](https://www.unito.io)
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import { computed, toValue } from 'vue'
|
|
import type { MaybeRefOrGetter } from 'vue'
|
|
|
|
interface NumberWidgetOptions {
|
|
step?: number
|
|
step2?: number
|
|
precision?: number
|
|
}
|
|
|
|
/**
|
|
* Shared composable for calculating step values in number input widgets
|
|
* Handles both explicit step2 values and precision-derived steps
|
|
*/
|
|
export function useNumberStepCalculation(
|
|
options: NumberWidgetOptions | undefined,
|
|
precisionArg: MaybeRefOrGetter<number | undefined>,
|
|
returnUndefinedForDefault = false
|
|
) {
|
|
return computed(() => {
|
|
const precision = toValue(precisionArg)
|
|
// Use step2 (correct input spec value) if available
|
|
if (options?.step2 !== undefined) {
|
|
return Number(options.step2)
|
|
}
|
|
// Use step / 10 for custom large step values (> 10) to match litegraph behavior
|
|
// This is important for extensions like Impact Pack that use custom step values (e.g., 640)
|
|
// We skip default step values (1, 10) to avoid affecting normal widgets
|
|
const step = options?.step
|
|
if (step !== undefined && step > 10) {
|
|
return Number(step) / 10
|
|
}
|
|
|
|
if (precision === undefined) {
|
|
return returnUndefinedForDefault ? undefined : 0
|
|
}
|
|
|
|
if (precision === 0) return 1
|
|
|
|
// For precision > 0, step = 1 / (10^precision)
|
|
const calculatedStep = 1 / Math.pow(10, precision)
|
|
return returnUndefinedForDefault
|
|
? calculatedStep
|
|
: Number(calculatedStep.toFixed(precision))
|
|
})
|
|
}
|