vaadin-component-design

Vaadin Component Design Skill

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "vaadin-component-design" with this command: npx skills add hack23/cia/hack23-cia-vaadin-component-design

Vaadin Component Design Skill

Purpose

Create maintainable, responsive Vaadin UI components with proper lifecycle and data binding.

When to Use

  • ✅ Creating new UI views

  • ✅ Designing forms and data grids

  • ✅ Implementing user interactions

  • ✅ Building responsive layouts

Component Patterns

@SpringView(name = PoliticianView.NAME) @Secured({"ROLE_USER", "ROLE_ADMIN"}) public class PoliticianView extends VerticalLayout implements View { public static final String NAME = "politicians";

private final PoliticianService service;
private final Grid<Politician> grid = new Grid<>(Politician.class);

public PoliticianView(PoliticianService service) {
    this.service = service;
    setSizeFull();
    configureGrid();
    add(createToolbar(), grid);
    updateList();
}

private void configureGrid() {
    grid.setSizeFull();
    grid.setColumns("firstName", "lastName", "party", "district");
    grid.addColumn(p -> p.getVotingRecords().size())
        .setCaption("Total Votes");
    grid.getColumns().forEach(col -> col.setExpandRatio(1));
}

private Component createToolbar() {
    TextField searchField = new TextField();
    searchField.setPlaceholder("Search...");
    searchField.addValueChangeListener(e -> updateList());
    
    Button addButton = new Button("Add Politician");
    addButton.addClickListener(e -> addPolitician());
    
    return new HorizontalLayout(searchField, addButton);
}

}

Data Binding

public class PoliticianForm extends FormLayout { TextField firstName = new TextField("First Name"); TextField lastName = new TextField("Last Name"); ComboBox<Party> party = new ComboBox<>("Party");

Binder&#x3C;Politician> binder = new Binder&#x3C;>(Politician.class);

public PoliticianForm() {
    binder.forField(firstName)
        .asRequired("First name is required")
        .withValidator(name -> name.length() >= 2, "Name too short")
        .bind(Politician::getFirstName, Politician::setFirstName);
    
    add(firstName, lastName, party);
}

}

References

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

secrets-management

No summary provided by upstream source.

Repository SourceNeeds Review
General

ai governance

No summary provided by upstream source.

Repository SourceNeeds Review
General

incident-response

No summary provided by upstream source.

Repository SourceNeeds Review