Static form configuration that never changes after initialization.
Held on MishkaGervaz.Form.Web.State's :static field as a separate
struct so LiveView can skip re-rendering nodes that depend only on
it — the reference stays identical across every dynamic update,
enabling O(1) equality comparison.
Populated once by MishkaGervaz.Form.Web.State.Default.init/3. See
the parent module MishkaGervaz.Form.Web.State for the dynamic
counterpart.
Summary
Types
@type t() :: %MishkaGervaz.Form.Web.State.Static{ access: module(), config: map(), debounce: integer() | nil, features: [atom()], fields: [map()], footer: map() | nil, groups: [map()], header: map() | nil, hooks: map(), id: String.t(), layout_columns: 1 | 2 | 3 | 4, layout_mode: :standard | :wizard | :tabs, layout_navigation: :sequential | :free, notices: [map()], preloads: [atom()], resource: module(), source: map() | nil, steps: [map()], stream_name: atom(), submit: map(), template: module(), theme: map() | nil, ui_adapter: module(), ui_adapter_opts: keyword(), uploads: [map()] }