# Vue Widgets for ComfyUI LoRA Manager
This directory contains the source code for Vue 3 + PrimeVue custom widgets for ComfyUI LoRA Manager.
## Structure
```
vue-widgets/
├── src/ # TypeScript/Vue source code
│ ├── main.ts # Main entry point that registers extensions
│ └── components/ # Vue components
│ └── DemoWidget.vue # Example demo widget
├── package.json # Dependencies and build scripts
├── vite.config.mts # Vite build configuration
├── tsconfig.json # TypeScript configuration
└── README.md # This file
```
## Development
### Install Dependencies
```bash
cd vue-widgets
npm install
```
### Build for Production
```bash
npm run build
```
This compiles the TypeScript/Vue code and outputs to `../web/comfyui/vue-widgets/`.
### Development Mode (Watch)
```bash
npm run dev
```
This builds the widgets in watch mode, automatically rebuilding when files change.
### Type Checking
```bash
npm run typecheck
```
## Creating a New Widget
### 1. Create the Python Node
Create a new node file in `/py/nodes/your_node.py`:
```python
class YourCustomNode:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"your_widget_name": ("YOUR_WIDGET_TYPE", {}),
}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "process"
CATEGORY = "loramanager"
def process(self, your_widget_name):
# Process widget data
return (str(your_widget_name),)
NODE_CLASS_MAPPINGS = {
"YourCustomNode": YourCustomNode
}
```
### 2. Create the Vue Component
Create a new component in `src/components/YourWidget.vue`:
```vue
```
### 3. Register the Widget
In `src/main.ts`, add your widget registration:
```typescript
import YourWidget from '@/components/YourWidget.vue'
// In getCustomWidgets()
YOUR_WIDGET_TYPE(node) {
return createVueWidget(node, YourWidget, 'your-widget-name')
}
// In nodeCreated()
if (node.constructor?.comfyClass !== 'YourCustomNode') return
```
### 4. Register the Node
Add your node to `__init__.py`:
```python
from .py.nodes.your_node import YourCustomNode
NODE_CLASS_MAPPINGS = {
# ...
"YourCustomNode": YourCustomNode
}
```
### 5. Build and Test
```bash
npm run build
```
Then restart ComfyUI and test your new widget!
## Available PrimeVue Components
This project uses PrimeVue 4.x. Popular components include:
- `Button` - Buttons with icons and variants
- `InputText` - Text input fields
- `InputNumber` - Number input with increment/decrement
- `Dropdown` - Select dropdowns
- `Card` - Card containers
- `DataTable` - Data tables with sorting/filtering
- `Dialog` - Modal dialogs
- `Tree` - Tree view components
- And many more! See [PrimeVue Docs](https://primevue.org/)
## Notes
- Build output goes to `../web/comfyui/vue-widgets/` (gitignored)
- The widget type name in Python (e.g., "YOUR_WIDGET_TYPE") must match the key in `getCustomWidgets()`
- Widget data is serialized when the workflow is saved/executed via `serializeValue()`
- ComfyUI's app.js is marked as external and not bundled