mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-13 09:00:16 +00:00
* add dom element resize observer registry for vue node components * Update src/renderer/extensions/vueNodes/composables/useVueNodeResizeTracking.ts Co-authored-by: AustinMroz <austin@comfy.org> * refactor(vue-nodes): typed TransformState InjectionKey, safer ResizeObserver sizing, centralized slot tracking, and small readability updates * chore: make TransformState interface non-exported to satisfy knip pre-push * Revert "chore: make TransformState interface non-exported to satisfy knip pre-push" This reverts commit110ecf31da. * Revert "refactor(vue-nodes): typed TransformState InjectionKey, safer ResizeObserver sizing, centralized slot tracking, and small readability updates" This reverts commit428752619c. * [refactor] Improve resize tracking composable documentation and test utilities - Rename parameters in useVueElementTracking for clarity (appIdentifier, trackingType) - Add comprehensive docstring with examples to prevent DOM attribute confusion - Extract mountLGraphNode test utility to eliminate repetitive mock setup - Add technical implementation notes documenting optimization decisions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * remove typo comment * convert to functional bounds collection * remove inline import * add interfaces for bounds mutations * remove change log * fix bounds collection when vue nodes turned off * fix title offset on y * move from resize observer to selection toolbox bounds * refactor(vue-nodes): typed TransformState InjectionKey, safer ResizeObserver sizing, centralized slot tracking, and small readability updates * Fix conversion * Readd padding * revert churn reducings from layoutStore.ts * Rely on RO for resize, and batch * Improve churn * Cache canvas offset * rename from measure * remove unused * address review comments * Update legacy injection * nit * Split into store * nit * perf improvement --------- Co-authored-by: bymyself <cbyrne@comfy.org> Co-authored-by: AustinMroz <austin@comfy.org> Co-authored-by: Claude <noreply@anthropic.com>
51 lines
938 B
TypeScript
51 lines
938 B
TypeScript
import { defineStore } from 'pinia'
|
|
import { markRaw } from 'vue'
|
|
|
|
type SlotEntry = {
|
|
el: HTMLElement
|
|
index: number
|
|
type: 'input' | 'output'
|
|
cachedOffset?: { x: number; y: number }
|
|
}
|
|
|
|
type NodeEntry = {
|
|
nodeId: string
|
|
slots: Map<string, SlotEntry>
|
|
stopWatch?: () => void
|
|
}
|
|
|
|
export const useNodeSlotRegistryStore = defineStore('nodeSlotRegistry', () => {
|
|
const registry = markRaw(new Map<string, NodeEntry>())
|
|
|
|
function getNode(nodeId: string) {
|
|
return registry.get(nodeId)
|
|
}
|
|
|
|
function ensureNode(nodeId: string) {
|
|
let node = registry.get(nodeId)
|
|
if (!node) {
|
|
node = {
|
|
nodeId,
|
|
slots: markRaw(new Map<string, SlotEntry>())
|
|
}
|
|
registry.set(nodeId, node)
|
|
}
|
|
return node
|
|
}
|
|
|
|
function deleteNode(nodeId: string) {
|
|
registry.delete(nodeId)
|
|
}
|
|
|
|
function clear() {
|
|
registry.clear()
|
|
}
|
|
|
|
return {
|
|
getNode,
|
|
ensureNode,
|
|
deleteNode,
|
|
clear
|
|
}
|
|
})
|