lib/scrollable/utility/wheel.ex

defmodule FloUI.Scrollable.Wheel do
  @type wheel_state :: :idle | :scrolling

  @type t :: %__MODULE__{
          wheel_state: wheel_state,
          offset: FloUI.Scrollable.Direction.t()
        }

  defstruct wheel_state: :idle,
            offset: {:horizontal, 0}

  @spec scrolling?(t) :: boolean
  def scrolling?(%{wheel_state: :idle}), do: false

  def scrolling?(%{wheel_state: :scrolling}), do: true

  @spec start_scrolling(t, FloUI.Scrollable.Direction.t()) :: t
  def start_scrolling(state, offset) do
    state
    |> Map.put(:wheel_state, :scrolling)
    |> Map.put(:offset, offset)
  end

  @spec stop_scrolling(t, FloUI.Scrollable.Direction.t()) :: t
  def stop_scrolling(state, offset) do
    state
    |> Map.put(:wheel_state, :idle)
    |> Map.put(:offset, offset)
  end
end