Packages
corex
0.1.1
0.1.2
0.1.1
0.1.0
0.1.0-rc.1
0.1.0-rc.0
0.1.0-beta.5
0.1.0-beta.4
0.1.0-beta.3
0.1.0-beta.2
0.1.0-beta.1
0.1.0-alpha.33
0.1.0-alpha.32
0.1.0-alpha.31
0.1.0-alpha.30
0.1.0-alpha.29
0.1.0-alpha.28
0.1.0-alpha.27
0.1.0-alpha.26
0.1.0-alpha.25
0.1.0-alpha.24
0.1.0-alpha.23
0.1.0-alpha.22
0.1.0-alpha.21
0.1.0-alpha.20
0.1.0-alpha.19
0.1.0-alpha.18
0.1.0-alpha.17
0.1.0-alpha.16
0.1.0-alpha.15
0.1.0-alpha.14
0.1.0-alpha.13
0.1.0-alpha.12
0.1.0-alpha.11
0.1.0-alpha.10
0.1.0-alpha.9
0.1.0-alpha.8
0.1.0-alpha.7
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
Accessible and unstyled UI components library written in Elixir and TypeScript that integrates Zag.js state machines into the Phoenix Framework.
Current section
Files
Jump to
Current section
Files
usage-rules/skills/corex-forms/SKILL.md
---
name: corex-forms
description: >-
Load when building Phoenix forms with to_form, phx-change validate, phx-submit,
field={@form[:name]}, native_input checkbox select switch radio_group in
lib/*_web/*_form_live.ex or *_form_live.ex, or when asked about Corex form
inputs. Corex has no .form component — use Phoenix.Component.to_form/1.
---
# Corex forms
No `<.form>` component — Phoenix `to_form/1` + Corex inputs with `field={@form[:…]}`.
## Minimal profile form
```heex
<.form for={@form} id="profile-form" phx-change="validate" phx-submit="save">
<.native_input field={@form[:name]} type="text" class="native-input">
<:label>Name</:label>
</.native_input>
<.action type="submit" class="button button--accent">Save</.action>
</.form>
```
```elixir
def handle_event("validate", %{"profile" => params}, socket) do
changeset = %Profile{} |> Profile.changeset(params) |> Map.put(:action, :validate)
{:noreply, assign(socket, :form, to_form(changeset, action: :validate, as: :profile, id: "profile-form"))}
end
```
Import matching CSS (`native-input.css`, etc.) and register hooks. MCP `get_component` for `field` attr on each input.
For `{:array, :string}` fields, use `field :tags, {:array, :string}` and either `<.select multiple field={@form[:tags]} items={…}>` (fixed options) or `<.tags_input field={@form[:tags]}>` (free-form). Both submit `%{"tags" => ["a", "b"]}` via `name[]`; do not use comma strings on `:string` fields.
Full checklist: sub-rule `corex:forms`.