Skip to content

[feat] Vue widget system foundation #4263

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft

Conversation

christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Jun 24, 2025

Complete Vue-based widget system with 15 simplified components for node rendering. Removes DOM manipulation and positioning concerns while providing clean, typed interfaces.

graph TB
    subgraph "Vue Widget System"
        Registry[Widget Registry]
        Interface[SimplifiedWidget Interface]
        Filter[Prop Filter Utility]
        
        subgraph "Input Widgets"
            InputText[WidgetInputText]
            Textarea[WidgetTextarea]
            Slider[WidgetSlider]
            Toggle[WidgetToggleSwitch]
        end
        
        subgraph "Selection Widgets"
            Select[WidgetSelect]
            MultiSelect[WidgetMultiSelect]
            SelectButton[WidgetSelectButton]
            TreeSelect[WidgetTreeSelect]
        end
        
        subgraph "Visual Widgets"
            ColorPicker[WidgetColorPicker]
            Image[WidgetImage]
            ImageCompare[WidgetImageCompare]
            Galleria[WidgetGalleria]
            Chart[WidgetChart]
        end
        
        subgraph "Action Widgets"
            Button[WidgetButton]
            FileUpload[WidgetFileUpload]
        end
    end
    
    Registry --> Interface
    Filter --> Interface
    
    Registry --> InputText
    Registry --> Select
    Registry --> ColorPicker
    Registry --> Button
    
    Interface --> InputText
    Interface --> Select
    Interface --> ColorPicker
    Interface --> Button
    
    Filter --> InputText
    Filter --> Select
    Filter --> ColorPicker
    Filter --> Button
    
    classDef widget fill:#e1f5fe
    classDef core fill:#f3e5f5
    
    class InputText,Textarea,Slider,Toggle,Select,MultiSelect,SelectButton,TreeSelect,ColorPicker,Image,ImageCompare,Galleria,Chart,Button,FileUpload widget
    class Registry,Interface,Filter core
Loading

Key Features:

  • Type-safe widget registry with dynamic component resolution
  • Consistent prop filtering to maintain clean widget appearance
  • Vue 3.5 composition API with defineModel for two-way binding
  • All widgets support readonly state and proper PrimeVue integration

Next Steps: Integration with Vue node rendering system.

┆Issue is synchronized with this Notion page by Unito

- SimplifiedWidget interface for Vue-based node widgets
- widgetPropFilter utility with component-specific exclusion lists
- Removes DOM manipulation and positioning concerns
- Provides clean API for value binding and prop filtering
- Complete widget type enum with all 15 widget types
- Component mapping registry for dynamic widget rendering
- Helper function for type-safe widget component resolution
- WidgetInputText: Single-line text input with InputText component
- WidgetTextarea: Multi-line text input with Textarea component
- WidgetSlider: Numeric range input with Slider component
- WidgetToggleSwitch: Boolean toggle with ToggleSwitch component
- WidgetSelect: Dropdown selection with Select component
- WidgetMultiSelect: Multiple selection with MultiSelect component
- WidgetSelectButton: Button group selection with SelectButton component
- WidgetTreeSelect: Hierarchical selection with TreeSelect component
- WidgetColorPicker: Color selection with ColorPicker component
- WidgetImage: Single image display with Image component
- WidgetImageCompare: Before/after comparison with ImageCompare component
- WidgetGalleria: Image gallery/carousel with Galleria component
- WidgetChart: Data visualization with Chart component
- WidgetButton: Action button with Button component and callback handling
- WidgetFileUpload: File upload interface with FileUpload component
@benceruleanlu benceruleanlu self-assigned this Jun 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants