Field

Represents a single interactive or presentational unit within a Joyfill document.

A Field is a high-level abstraction used by the Joyfill SDK to define items like text inputs, dropdowns, signatures, barcodes, and other UI elements that can be rendered, edited, validated, and mapped to underlying data. All concrete field types extend this interface and may also extend a more specific component interface (for example, TextField extends joyfill.text.TextComponent) that defines the data model and UI contract for that field type.

Common capabilities inherited by all fields:

  • Component: general component features shared across the system.

  • Hideable: ability to be shown or hidden based on logic or user actions.

  • Mappable: ability to serialize/deserialize to and from a map structure for persistence.

Behavior and state:

  • A field can be programmatically disabled via disabled.

  • Visibility can be controlled statically via initialHiddenState and dynamically via logic.

  • Formulas in formulas can compute values based on other fields.

  • Optional tip can provide contextual guidance to end users.

  • Arbitrary metadata can store custom, implementation-specific information.

Implementations should ensure that identifiers are unique within a document and that any attached FieldLogic or formulas do not create unresolvable circular dependencies.

See also concrete field types extending this interface:

Inheritors

Properties

Link copied to clipboard
abstract val disabled: Boolean

Whether this field is non-interactive (read-only/disabled) for the end user.

Link copied to clipboard

Collection of formulas applied to this field. Order may determine execution precedence.

Link copied to clipboard
abstract var hidden: Boolean

Whether the element is hidden by default.

Link copied to clipboard
abstract var id: String

Stable identifier of this schema node.

Link copied to clipboard
abstract var identifier: String

Unique key that identifies this field within a document. Must be stable across updates.

Link copied to clipboard

Whether the field starts hidden before any logic evaluation occurs.

Link copied to clipboard
abstract val logic: FieldLogic?

Optional FieldLogic describing visibility logic for the field

Link copied to clipboard
abstract val metadata: JoyMap

Arbitrary key-value map for custom extensions or analytics. Persisted alongside the field.

Link copied to clipboard
abstract var required: Boolean

Whether a value is mandatory for this schema.

Link copied to clipboard
abstract val tip: ToolTip?

Optional ToolTip to assists users with context, instructions, or hints.

Link copied to clipboard
abstract var title: String

Human-readable label used in editors or viewers.

Link copied to clipboard
abstract var type: Type

Discriminant describing the concrete schema/component kind.

Link copied to clipboard
abstract val value: Any?

Runtime value payload; variance is specialized by sub-interfaces.

Functions

Link copied to clipboard
abstract fun toJsonObject(): JsonObject

Serializes this instance to a structured JsonObject.

Link copied to clipboard
abstract fun toJsonString(): String

Serializes this instance to a compact JSON string.

Link copied to clipboard
abstract fun toMap(): MutableMap<String, Any?>

Converts this instance into a mutable key-value map suitable for mutation and re-serialization.