From vaadin-skills
Builds and structures Vaadin Flow (Java) forms from Figma, screenshots, text, or prompts, handling FormLayout sectioning and responsive column layout.
How this skill is triggered — by the user, by Claude, or both
Slash command
/vaadin-skills:vaadin-form-layoutThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Track these three steps as TODOs so progress stays visible and the work can be resumed if it's interrupted partway through. Work through them in order.
Track these three steps as TODOs so progress stays visible and the work can be resumed if it's interrupted partway through. Work through them in order.
Process the spec source first: fetch and inspect a Figma URL, read a screenshot, or parse a text prompt.
FormLayout instances — one per section, each with its own heading added into the FormLayout spanning the full column width. Use a heading element whose level fits the surrounding view hierarchy (e.g. a section heading nested under a page title). If the right level isn't clear from the surrounding code, default to H4 as the reference examples do — don't go out of your way to discover the exact level. Arrange sections side-by-side with a wrapping HorizontalLayout (growing and shrinking equally, wrapping to one column on narrow viewports) or stacked in a VerticalLayout.With the component set now known from the plan:
Application.java for the @StyleSheet import: Aura.STYLESHEET → Aura, Lumo.STYLESHEET → Lumo (also the default if no theme is found). Theme affects component variants, e.g. RadioGroupVariant.AURA_HORIZONTAL vs RadioGroupVariant.LUMO_VERTICAL for horizontal radio groups.mcp_vaadin_get_component_java_api for every component you'll use, including FormLayout — method signatures differ between Vaadin versions.Implement the form following the patterns in the chosen reference example. Always use FormLayout for the form body. Key layout concepts:
setAutoResponsive(true) with addFormRow(...) to infer column count from the widest row. Combine with setExpandColumns(true) and setExpandFields(true) to fill available width. Preferred for uniform-width fields.setResponsiveSteps(...) to define explicit column counts at specific breakpoints when you need precise control over layout at different widths.form.add(field, n) or use FormRow with per-field colspan for asymmetric rows.setMaxWidth/setMinWidth to keep forms readable at large viewport sizes.HorizontalLayout and add it as a single full-width item.| File | What it shows |
|---|---|
| references/horizontal-sections-form-example.md | Two-section entity form with side-by-side auto-responsive FormLayout panels, equal-grow HorizontalLayout wrapper, asymmetric field rows via HorizontalLayout.expand, read-only fields, horizontal RadioButtonGroup (Aura), ComboBox with defaults, NumberField with helper text |
| references/vertical-sections-three-column-form-example.md | Three-section employee form with stacked VerticalLayout sections, three-column auto-responsive FormLayout, FormRow colspan, DatePicker, EmailField, phone helper text |
| references/compact-single-section-form-example.md | Compact single-section form with progressive disclosure (CheckboxGroup conditionally revealing a field), horizontal RadioButtonGroup with dynamic helper text, asymmetric field row via HorizontalLayout, icon prefix, live-computed summary label, constrained form width |
| references/compact-labels-aside-form-example.md | Compact labels-aside form with setLabelsAside(true) for a two-column label/field layout, CustomField composition combining NumberField and ComboBox into a single form item, TextArea with character limit, required field indicators, constrained form width |
npx claudepluginhub vaadin/claude-plugin --plugin vaadin-skillsCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.