Wan_Backup / custom_nodes /ComfyUI-Easy-Use /ComfyUI-Easy-Use-Frontend /src /composable /widgets /domWidget.js
| import {toRaw} from "vue"; | |
| import {generateUUID} from "@/composable/utils/formatUtil.js"; | |
| import { useDomWidgetStore } from '@/stores/domWidgetStore' | |
| export const isDOMWidget = ( | |
| widget | |
| ) => 'element' in widget && !!widget.element | |
| export const isComponentWidget = ( | |
| widget | |
| ) => 'component' in widget && !!widget.component | |
| class BaseDOMWidgetImpl { | |
| static DEFAULT_MARGIN = 10 | |
| constructor(obj) { | |
| this.type = obj.type | |
| this.name = obj.name | |
| this.options = obj.options | |
| this.id = generateUUID() | |
| this.node = obj.node | |
| this.y = 0 | |
| } | |
| get value() { | |
| return this.options.getValue?.() ?? '' | |
| } | |
| set value(v) { | |
| this.options.setValue?.(v) | |
| this.callback?.(this.value) | |
| } | |
| get margin() { | |
| return this.options.margin ?? BaseDOMWidgetImpl.DEFAULT_MARGIN | |
| } | |
| isVisible() { | |
| return !['hidden'].includes(this.type) && this.node.isWidgetVisible(this) | |
| } | |
| draw( | |
| ctx, | |
| _node, | |
| widget_width, | |
| y, | |
| widget_height, | |
| lowQuality | |
| ) { | |
| if (this.options.hideOnZoom && lowQuality && this.isVisible()) { | |
| // Draw a placeholder rectangle | |
| const originalFillStyle = ctx.fillStyle | |
| ctx.beginPath() | |
| ctx.fillStyle = LiteGraph.WIDGET_BGCOLOR | |
| ctx.rect( | |
| this.margin, | |
| y + this.margin, | |
| widget_width - this.margin * 2, | |
| (this.computedHeight ?? widget_height) - 2 * this.margin | |
| ) | |
| ctx.fill() | |
| ctx.fillStyle = originalFillStyle | |
| } | |
| this.options.onDraw?.(this) | |
| } | |
| onRemove() { | |
| useDomWidgetStore().unregisterWidget(this.id) | |
| } | |
| } | |
| export class ComponentWidgetImpl extends BaseDOMWidgetImpl { | |
| constructor(obj) { | |
| super({ | |
| ...obj, | |
| type: 'custom' | |
| }) | |
| this.component = obj.component | |
| this.inputSpec = obj.inputSpec | |
| } | |
| computeLayoutSize() { | |
| const minHeight = this.options.getMinHeight?.() ?? 45 | |
| const maxHeight = this.options.getMaxHeight?.() ?? 45 | |
| return { | |
| minHeight, | |
| maxHeight, | |
| minWidth: 120 | |
| } | |
| } | |
| serializeValue() { | |
| return toRaw(this.value) | |
| } | |
| } |