Files
ComfyUI_frontend/src/renderer/extensions/vueNodes/stores/nodeSlotRegistryStore.ts
Benjamin Lu ff5d0923ca Refactor vue slot tracking (#5463)
* 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 commit 110ecf31da.

* Revert "refactor(vue-nodes): typed TransformState InjectionKey, safer ResizeObserver sizing, centralized slot tracking, and small readability updates"

This reverts commit 428752619c.

* [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>
2025-09-16 19:28:04 -07:00

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
}
})