Modules
DynamicForm - A Phoenix LiveView library for creating dynamic forms with full server-side validation using changesets. Also supports building forms through a WYSIWYG interface.
SurveyJS "carry forward": a question whose choices come from another
question — one choice per entry of a nested form, or another choice
question's own choices, optionally narrowed by choicesFromQuestionMode.
Helper functions for creating dynamic changesets from DynamicForm.Instance configurations.
Resolution and dispatch for the pluggable components module.
Provides core UI components.
A LiveView component for handling direct-to-storage file uploads in dynamic forms.
Resolution for custom field types.
A module providing Internationalization with a gettext-based API.
Plumbing for the Phoenix.HTML.Form structs the library renders against.
Generic map utilities shared across the library.
Configuration struct that defines the complete form structure using SurveyJS-compatible format.
Represents a non-input element in a form using SurveyJS-compatible format.
Queries over a form definition's element tree.
Represents a form question (input field) using SurveyJS-compatible format.
Represents a validation rule for a form question using SurveyJS-compatible format.
Timer and token mechanics for debouncing DynamicForm.Renderer.LiveComponent's
change pass (change_debounce_in_ms).
LiveView upload wiring for file questions using direct-to-cloud uploads.
Nested/repeating child forms — the SurveyJS paneldynamic question type.
Parses <:field>, <:group>, and <:nested> slot entries from
DynamicForm.form/1 into a DynamicForm.Instance struct.
Validates the slot declarations handed to DynamicForm.form/1 before
DynamicForm.Parser.FromComponent builds an Instance from them, raising
ArgumentError with a specific message for each definition mistake.
Decodes SurveyJS-compatible JSON data or maps into DynamicForm.Instance structs.
The value threaded through the form lifecycle.
A pure functional form component
Rendering for non-question elements: html and image content blocks,
fully custom slot elements, and panel containers (whose members render
back through DynamicForm.Renderer.Component).
Rendering for paneldynamic questions: the repeating nested-form section —
its header and add button, one namespaced child form per entry with its
remove button, and the section-level errors.
A summary of a changeset's validation errors, rendered above the form when
the validation_summary attribute of DynamicForm.form/1 is set.
A LiveComponent version of the DynamicForm renderer with automatic state management.