```
### 4. Error Handling
Add validation and error states:
```vue
```
### 5. Performance
Use `v-show` instead of `v-if` for frequently toggled content:
```vue
...
```
## File References
- **Widget components**: `src/components/graph/widgets/`
- **Widget composables**: `src/composables/widgets/`
- **Widget registration**: `src/scripts/widgets.ts`
- **DOM widget implementation**: `src/scripts/domWidget.ts`
- **Widget store**: `src/stores/domWidgetStore.ts`
- **Widget container**: `src/components/graph/DomWidgets.vue`
- **Widget wrapper**: `src/components/graph/widgets/DomWidget.vue`
## Real Examples from PRs
### Example 1: Text Progress Widget (PR #3824)
**Component** (`src/components/graph/widgets/TextPreviewWidget.vue`):
```vue
```
### Example 2: Multi-Select Widget (PR #2987)
**Component** (`src/components/graph/widgets/MultiSelectWidget.vue`):
```vue
```
## Migration Checklist
When converting an existing widget:
- [ ] Identify the widget type and its current implementation
- [ ] Create Vue component with proper v-model binding using PrimeVue components
- [ ] Create widget constructor composable in `src/composables/widgets/`
- [ ] Create node-level composable in `src/composables/node/` (only if widget needs dynamic management)
- [ ] Implement getValue/setValue logic with Vue reactivity
- [ ] Handle any special widget behavior (events, validation, execution state)
- [ ] Register widget in ComfyWidgets registry
- [ ] Test with actual nodes that use the widget type
- [ ] Add unit tests for both composables
- [ ] Update documentation if needed
## Key Implementation Patterns
### 1. Vue Component Definition
- Use Composition API with `