# UI

The component catalog: 88 accessible components rendered server-side from Ruby helpers, with nine themes in the gem, copy-in ownership via poetry:add, testing helpers, and a full agent surface.

poetry-ui is the component catalog: 88 shadcn-parity components rendered server-side through 142 `poetry_*` helpers (composites yield `with_*` slot builders), installed by the idempotent `bin/rails g poetry:install --theme <name>` and indexed by the committed registry at `config/component_registry.yml`. Nine complete themes ship in the gem (default, vega, nova, mira, rhea, maia, luma, lyra, sera); switching restyles the whole catalog. Model-bound forms hand off to `form_with(model:, builder: Poetry::Ui::FormBuilder)` - `f.input` infers the component from the attribute type, `f.association` reflects associations. Components are gem-owned until you want them: `bin/rails g poetry:add button` copies source into `app/components` where autoload precedence shadows the gem (never overwritten; `poetry:diff` reports drift; remote registry addresses install too). Eight blocks (app-shell, data-index, page-header, section-card, destructive-panel, stepper, action-bar, top-nav) and multi-file recipes sit above the components. The agent surface: `/poetry/llms.txt`, the ten-tool MCP server (`bundle exec poetry-agent`), the poetry/poetry-design/poetry-component skills, and `bin/rails poetry:check`. `include Poetry::Ui::Testing` drives Select, Combobox, Dropdown menu, and Dialog through real keyboard/pointer contracts in system tests.
