///|
/// Monaco's `IModelChangedEvent`: the old and new model resource identifiers,
/// with `None` representing the detached side of a swap.
pub(all) struct ModelChangedEvent {
  old_model_url : @base_common.Uri?
  new_model_url : @base_common.Uri?
} derive(Debug)

///|
/// Monaco's `ScrollEvent`, reduced to position and extent facts plus their
/// per-axis change flags.
pub(all) struct ScrollEvent {
  scroll_top : Double
  scroll_left : Double
  scroll_width : Double
  scroll_height : Double
  scroll_top_changed : Bool
  scroll_left_changed : Bool
  scroll_width_changed : Bool
  scroll_height_changed : Bool
} derive(Debug)

///|
/// A model position projected to scrolled viewport pixels, matching Monaco's
/// `getScrolledVisiblePosition` return shape.
pub(all) struct ScrolledVisiblePosition {
  top : Double
  left : Double
  height : Double
} derive(Eq, Debug)

///|
pub extend ModelChangedEvent with Debug::{to_repr}

///|
pub extend ScrollEvent with Debug::{to_repr}

///|
pub extend ScrolledVisiblePosition with Debug::{to_repr}

///|
pub extend ScrolledVisiblePosition with Eq::{equal, not_equal}