mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-03 06:47:33 +00:00
* Fix test TS types Prefer relative imports over @imports * Add tuple names SerialisedLLinkArray * nit * [Refactor] LGraphCanvas.computeConnectionPoint * [Refactor] Add LGraphCanvas.#dirty() * Remove string LLink IDs No downstream support for strings at present. * nit - Rename * nit * nit * nit - Remove unused code * nit - Doc * nit * nit - Remove redundant code * Remove unused: LGraphCanvas.isOverNodeBox * Optimise - remove 2d context save/restore * [Refactor] Move node collapsed check to class * Add minor code change to support stricter types * Revert accidental deletion in 0f2d04d 0f2d04d09e5e8a27a6d46d8c910dc077ed2d9071
109 lines
3.5 KiB
TypeScript
109 lines
3.5 KiB
TypeScript
import type { CanvasColour, ISlotType } from "./interfaces"
|
|
import type { NodeId } from "./LGraphNode"
|
|
import type { Serialisable, SerialisableLLink } from "./types/serialisation"
|
|
|
|
export type LinkId = number
|
|
|
|
export type SerialisedLLinkArray = [id: LinkId, origin_id: NodeId, origin_slot: number, target_id: NodeId, target_slot: number, type: ISlotType]
|
|
|
|
//this is the class in charge of storing link information
|
|
export class LLink implements Serialisable<SerialisableLLink> {
|
|
/** Link ID */
|
|
id: LinkId
|
|
type: ISlotType
|
|
/** Output node ID */
|
|
origin_id: NodeId
|
|
/** Output slot index */
|
|
origin_slot: number
|
|
/** Input node ID */
|
|
target_id: NodeId
|
|
/** Input slot index */
|
|
target_slot: number
|
|
data?: number | string | boolean | { toToolTip?(): string }
|
|
_data?: unknown
|
|
/** Centre point of the link, calculated during render only - can be inaccurate */
|
|
_pos: Float32Array
|
|
/** @todo Clean up - never implemented in comfy. */
|
|
_last_time?: number
|
|
/** The last canvas 2D path that was used to render this link */
|
|
path?: Path2D
|
|
|
|
#color?: CanvasColour
|
|
/** Custom colour for this link only */
|
|
public get color(): CanvasColour { return this.#color }
|
|
public set color(value: CanvasColour) {
|
|
this.#color = value === "" ? null : value
|
|
}
|
|
|
|
constructor(id: LinkId, type: ISlotType, origin_id: NodeId, origin_slot: number, target_id: NodeId, target_slot: number) {
|
|
this.id = id
|
|
this.type = type
|
|
this.origin_id = origin_id
|
|
this.origin_slot = origin_slot
|
|
this.target_id = target_id
|
|
this.target_slot = target_slot
|
|
|
|
this._data = null
|
|
this._pos = new Float32Array(2) //center
|
|
}
|
|
|
|
/** @deprecated Use {@link LLink.create} */
|
|
static createFromArray(data: SerialisedLLinkArray): LLink {
|
|
return new LLink(data[0], data[5], data[1], data[2], data[3], data[4])
|
|
}
|
|
|
|
/**
|
|
* LLink static factory: creates a new LLink from the provided data.
|
|
* @param data Serialised LLink data to create the link from
|
|
* @returns A new LLink
|
|
*/
|
|
static create(data: SerialisableLLink): LLink {
|
|
return new LLink(data.id, data.type, data.origin_id, data.origin_slot, data.target_id, data.target_slot)
|
|
}
|
|
|
|
configure(o: LLink | SerialisedLLinkArray) {
|
|
if (Array.isArray(o)) {
|
|
this.id = o[0]
|
|
this.origin_id = o[1]
|
|
this.origin_slot = o[2]
|
|
this.target_id = o[3]
|
|
this.target_slot = o[4]
|
|
this.type = o[5]
|
|
} else {
|
|
this.id = o.id
|
|
this.type = o.type
|
|
this.origin_id = o.origin_id
|
|
this.origin_slot = o.origin_slot
|
|
this.target_id = o.target_id
|
|
this.target_slot = o.target_slot
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @deprecated Prefer {@link LLink.asSerialisable} (returns an object, not an array)
|
|
* @returns An array representing this LLink
|
|
*/
|
|
serialize(): SerialisedLLinkArray {
|
|
return [
|
|
this.id,
|
|
this.origin_id,
|
|
this.origin_slot,
|
|
this.target_id,
|
|
this.target_slot,
|
|
this.type
|
|
]
|
|
}
|
|
|
|
asSerialisable(): SerialisableLLink {
|
|
const copy: SerialisableLLink = {
|
|
id: this.id,
|
|
origin_id: this.origin_id,
|
|
origin_slot: this.origin_slot,
|
|
target_id: this.target_id,
|
|
target_slot: this.target_slot,
|
|
type: this.type
|
|
}
|
|
return copy
|
|
}
|
|
}
|