defmodule Raxol.Terminal.Input.Event do @moduledoc """ Defines the base event struct and common types for input events. """ @type modifier :: :shift | :ctrl | :alt | :meta @type timestamp :: integer() defstruct [:timestamp] defmodule MouseEvent do @moduledoc """ Represents a mouse input event. """ @type button :: :left | :middle | :right | :wheel_up | :wheel_down @type action :: :press | :release | :drag | :move defstruct [ :button, :action, :x, :y, :modifiers, :timestamp ] @type t :: %__MODULE__{ button: button(), action: action(), x: non_neg_integer(), y: non_neg_integer(), modifiers: [Raxol.Terminal.Input.Event.modifier()], timestamp: Raxol.Terminal.Input.Event.timestamp() } end defmodule KeyEvent do @moduledoc """ Represents a keyboard input event. """ defstruct [ :key, :modifiers, :timestamp ] @type t :: %__MODULE__{ key: String.t(), modifiers: [Raxol.Terminal.Input.Event.modifier()], timestamp: Raxol.Terminal.Input.Event.timestamp() } end @type t :: MouseEvent.t() | KeyEvent.t() end