+
-
+
-
+
-
+
No widgets
@@ -73,10 +79,12 @@
diff --git a/src/components/graph/vueNodes/NodeHeader.vue b/src/components/graph/vueNodes/NodeHeader.vue
index ac436fe27..efe4d7c97 100644
--- a/src/components/graph/vueNodes/NodeHeader.vue
+++ b/src/components/graph/vueNodes/NodeHeader.vue
@@ -46,11 +46,14 @@ import type { LGraphNode } from '@comfyorg/litegraph'
import { computed, onErrorCaptured, ref } from 'vue'
import type { VueNodeData } from '@/composables/graph/useGraphNodeManager'
+import type { LODLevel } from '@/composables/graph/useLOD'
+import { useErrorHandling } from '@/composables/useErrorHandling'
interface NodeHeaderProps {
node?: LGraphNode // For backwards compatibility
nodeData?: VueNodeData // New clean data structure
readonly?: boolean
+ lodLevel?: LODLevel
}
const props = defineProps()
@@ -62,10 +65,11 @@ const emit = defineEmits<{
// Error boundary implementation
const renderError = ref(null)
+const { toastErrorHandler } = useErrorHandling()
onErrorCaptured((error) => {
renderError.value = error.message
- console.error('Vue node header error:', error)
+ toastErrorHandler(error)
return false
})
diff --git a/src/components/graph/vueNodes/NodeSlots.vue b/src/components/graph/vueNodes/NodeSlots.vue
index bb2b0d315..76ec3e9a6 100644
--- a/src/components/graph/vueNodes/NodeSlots.vue
+++ b/src/components/graph/vueNodes/NodeSlots.vue
@@ -36,11 +36,15 @@ import { computed, onErrorCaptured, ref } from 'vue'
// import OutputSlot from './OutputSlot.vue'
import type { VueNodeData } from '@/composables/graph/useGraphNodeManager'
+import type { LODLevel } from '@/composables/graph/useLOD'
+import { useErrorHandling } from '@/composables/useErrorHandling'
+import { isSlotObject } from '@/utils/typeGuardUtil'
interface NodeSlotsProps {
node?: LGraphNode // For backwards compatibility
nodeData?: VueNodeData // New clean data structure
readonly?: boolean
+ lodLevel?: LODLevel
}
const props = defineProps()
@@ -48,31 +52,40 @@ const props = defineProps()
const nodeInfo = computed(() => props.nodeData || props.node)
const getInputName = (input: unknown, index: number): string => {
- const inputObj = input as { name?: string } | null | undefined
- return inputObj?.name || `Input ${index}`
+ if (isSlotObject(input) && input.name) {
+ return input.name
+ }
+ return `Input ${index}`
}
const getInputType = (input: unknown): string => {
- const inputObj = input as { type?: string } | null | undefined
- return inputObj?.type || 'any'
+ if (isSlotObject(input) && input.type) {
+ return input.type
+ }
+ return 'any'
}
const getOutputName = (output: unknown, index: number): string => {
- const outputObj = output as { name?: string } | null | undefined
- return outputObj?.name || `Output ${index}`
+ if (isSlotObject(output) && output.name) {
+ return output.name
+ }
+ return `Output ${index}`
}
const getOutputType = (output: unknown): string => {
- const outputObj = output as { type?: string } | null | undefined
- return outputObj?.type || 'any'
+ if (isSlotObject(output) && output.type) {
+ return output.type
+ }
+ return 'any'
}
// Error boundary implementation
const renderError = ref(null)
+const { toastErrorHandler } = useErrorHandling()
onErrorCaptured((error) => {
renderError.value = error.message
- console.error('Vue node slots error:', error)
+ toastErrorHandler(error)
return false
})
diff --git a/src/components/graph/vueNodes/NodeWidgets.vue b/src/components/graph/vueNodes/NodeWidgets.vue
index 5429d5527..c68c47b2b 100644
--- a/src/components/graph/vueNodes/NodeWidgets.vue
+++ b/src/components/graph/vueNodes/NodeWidgets.vue
@@ -28,13 +28,16 @@ import type {
SafeWidgetData,
VueNodeData
} from '@/composables/graph/useGraphNodeManager'
+import { LODLevel } from '@/composables/graph/useLOD'
import { useWidgetRenderer } from '@/composables/graph/useWidgetRenderer'
+import { useErrorHandling } from '@/composables/useErrorHandling'
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
interface NodeWidgetsProps {
- node?: LGraphNode // For backwards compatibility
- nodeData?: VueNodeData // New clean data structure
+ node?: LGraphNode
+ nodeData?: VueNodeData
readonly?: boolean
+ lodLevel?: LODLevel
}
const props = defineProps()
@@ -45,9 +48,11 @@ const { getWidgetComponent, shouldRenderAsVue } = useWidgetRenderer()
// Error boundary implementation
const renderError = ref(null)
+const { toastErrorHandler } = useErrorHandling()
+
onErrorCaptured((error) => {
renderError.value = error.message
- console.error('Vue node widgets error:', error)
+ toastErrorHandler(error)
return false
})
@@ -64,12 +69,33 @@ const widgets = computed((): SafeWidgetData[] => {
return filtered
})
-// Only render widgets that have Vue component support
+// Filter widgets based on LOD level and Vue component support
const supportedWidgets = computed((): SafeWidgetData[] => {
const allWidgets = widgets.value
- const supported = allWidgets.filter((widget: SafeWidgetData) => {
+
+ // Filter by Vue component support
+ let supported = allWidgets.filter((widget: SafeWidgetData) => {
return shouldRenderAsVue(widget)
})
+
+ // Apply LOD filtering for reduced detail level
+ if (props.lodLevel === LODLevel.REDUCED) {
+ const essentialTypes = [
+ 'combo',
+ 'select',
+ 'toggle',
+ 'boolean',
+ 'slider',
+ 'number'
+ ]
+ supported = supported.filter((widget: SafeWidgetData) => {
+ return essentialTypes.includes(widget.type?.toLowerCase() || '')
+ })
+ } else if (props.lodLevel === LODLevel.MINIMAL) {
+ // No widgets rendered at minimal LOD
+ return []
+ }
+
return supported
})
diff --git a/src/components/graph/vueNodes/OutputSlot.vue b/src/components/graph/vueNodes/OutputSlot.vue
index fd16ae7c1..16be94ebe 100644
--- a/src/components/graph/vueNodes/OutputSlot.vue
+++ b/src/components/graph/vueNodes/OutputSlot.vue
@@ -30,6 +30,7 @@
import type { INodeSlot, LGraphNode } from '@comfyorg/litegraph'
import { computed, onErrorCaptured, ref } from 'vue'
+import { useErrorHandling } from '@/composables/useErrorHandling'
import { getSlotColor } from '@/constants/slotColors'
interface OutputSlotProps {
@@ -50,9 +51,11 @@ const emit = defineEmits<{
// Error boundary implementation
const renderError = ref(null)
+const { toastErrorHandler } = useErrorHandling()
+
onErrorCaptured((error) => {
renderError.value = error.message
- console.error('Vue output slot error:', error)
+ toastErrorHandler(error)
return false
})
diff --git a/src/components/graph/vueWidgets/WidgetInputText.vue b/src/components/graph/vueWidgets/WidgetInputText.vue
index 0c648d927..0f46ec3b6 100644
--- a/src/components/graph/vueWidgets/WidgetInputText.vue
+++ b/src/components/graph/vueWidgets/WidgetInputText.vue
@@ -3,11 +3,11 @@
-
@@ -16,12 +16,12 @@
import InputText from 'primevue/inputtext'
import { computed } from 'vue'
+import { useStringWidgetValue } from '@/composables/graph/useWidgetValue'
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
import {
INPUT_EXCLUDED_PROPS,
filterWidgetProps
} from '@/utils/widgetPropFilter'
-import { useStringWidgetValue } from '@/composables/graph/useWidgetValue'
const props = defineProps<{
widget: SimplifiedWidget
diff --git a/src/components/graph/vueWidgets/WidgetSelect.vue b/src/components/graph/vueWidgets/WidgetSelect.vue
index fd6ad317c..33321ded6 100644
--- a/src/components/graph/vueWidgets/WidgetSelect.vue
+++ b/src/components/graph/vueWidgets/WidgetSelect.vue
@@ -17,12 +17,12 @@
import Select from 'primevue/select'
import { computed } from 'vue'
+import { useWidgetValue } from '@/composables/graph/useWidgetValue'
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
import {
PANEL_EXCLUDED_PROPS,
filterWidgetProps
} from '@/utils/widgetPropFilter'
-import { useWidgetValue } from '@/composables/graph/useWidgetValue'
const props = defineProps<{
widget: SimplifiedWidget
diff --git a/src/components/graph/vueWidgets/WidgetSlider.vue b/src/components/graph/vueWidgets/WidgetSlider.vue
index f34ad04e2..bfbda9f83 100644
--- a/src/components/graph/vueWidgets/WidgetSlider.vue
+++ b/src/components/graph/vueWidgets/WidgetSlider.vue
@@ -3,11 +3,11 @@
-
@@ -16,12 +16,12 @@
import Slider from 'primevue/slider'
import { computed } from 'vue'
+import { useNumberWidgetValue } from '@/composables/graph/useWidgetValue'
import type { SimplifiedWidget } from '@/types/simplifiedWidget'
import {
STANDARD_EXCLUDED_PROPS,
filterWidgetProps
} from '@/utils/widgetPropFilter'
-import { useNumberWidgetValue } from '@/composables/graph/useWidgetValue'
const props = defineProps<{
widget: SimplifiedWidget