[fix] Fix widget value synchronization between Vue and LiteGraph

- Widget callbacks now explicitly set widget.value (fixes empty LiteGraph callbacks)
- Created useWidgetValue composable for consistent widget patterns
- Updated all widget components to use proper props/emit pattern
- Callbacks are set up before data extraction to ensure proper state sync
This commit is contained in:
bymyself
2025-07-03 17:14:02 -07:00
parent cd3296f49b
commit 122170fc0d
7 changed files with 349 additions and 23 deletions

View File

@@ -4,10 +4,11 @@
widget.name
}}</label>
<Select
v-model="value"
v-model="localValue"
:options="selectOptions"
v-bind="filteredProps"
:disabled="readonly"
@update:model-value="onChange"
/>
</div>
</template>
@@ -21,14 +22,26 @@ import {
PANEL_EXCLUDED_PROPS,
filterWidgetProps
} from '@/utils/widgetPropFilter'
const value = defineModel<any>({ required: true })
import { useWidgetValue } from '@/composables/graph/useWidgetValue'
const props = defineProps<{
widget: SimplifiedWidget<any>
modelValue: any
readonly?: boolean
}>()
const emit = defineEmits<{
'update:modelValue': [value: any]
}>()
// Use the composable for consistent widget value handling
const { localValue, onChange } = useWidgetValue({
widget: props.widget,
modelValue: props.modelValue,
defaultValue: props.widget.options?.values?.[0] || '',
emit
})
const filteredProps = computed(() =>
filterWidgetProps(props.widget.options, PANEL_EXCLUDED_PROPS)
)