Module: Inquirex::UI

Defined in:
lib/inquirex/ui.rb,
lib/inquirex/ui/node.rb,
lib/inquirex/ui/version.rb,
lib/inquirex/ui/widget_hint.rb,
lib/inquirex/ui/widget_registry.rb,
lib/inquirex/ui/dsl/flow_builder.rb,
lib/inquirex/ui/dsl/step_builder.rb

Overview

UI enrichment layer for Inquirex flows.

Extends the core DSL with ‘widget` and `widget_mobile` rendering hints. Every node built via Inquirex::UI.define carries a WidgetHint describing the preferred UI control for that step’s data type.

Widget hints are:

- Framework-agnostic (no HTML/JS generated here)
- Included in JSON serialization
- Consumed by adapters: inquirex-tty, inquirex-js, inquirex-rails

When no explicit hint is provided, WidgetRegistry supplies a sensible default for each data type × rendering context (desktop / mobile).

Examples:

definition = Inquirex::UI.define id: "tax-2025" do
  start :filing_status

  ask :filing_status do
    type :enum
    question "What is your filing status?"
    options single: "Single", married_jointly: "Married Filing Jointly"
    widget target: :desktop, type: :radio_group, columns: 2
    widget target: :mobile,  type: :dropdown
    transition to: :next_step
  end

  ask :income do
    type :currency
    question "Estimated annual income?"
    # No widget call — WidgetRegistry provides :currency_input by default
    transition to: :done
  end

  say :done do
    text "All done."
  end
end

definition.step(:filing_status).widget_hint_for(target: :desktop)
# => #<data Inquirex::UI::WidgetHint type=:radio_group, options={columns: 2}>

definition.step(:income).effective_widget_hint_for(target: :desktop)
# => #<data Inquirex::UI::WidgetHint type=:currency_input, options={}>

definition.to_json
# => '{"start":"filing_status","steps":{"filing_status":{...,"widget":{"type":"radio_group","columns":2},...}}}'

Defined Under Namespace

Modules: DSL, WidgetRegistry Classes: Node, WidgetHint

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.define(id: nil, version: "1.0.0") { ... } ⇒ Inquirex::Definition

Builds an immutable Definition where every node is a UI::Node with widget hints. Accepts the same arguments as Inquirex.define.

Parameters:

  • id (String, nil) (defaults to: nil)

    optional flow identifier

  • version (String) (defaults to: "1.0.0")

    semver (default: “1.0.0”)

Yields:

  • context of UI::DSL::FlowBuilder

Returns:

  • (Inquirex::Definition)


68
69
70
71
72
# File 'lib/inquirex/ui.rb', line 68

def self.define(id: nil, version: "1.0.0", &)
  builder = UI::DSL::FlowBuilder.new(id:, version:)
  builder.instance_eval(&)
  builder.build
end