/**
 * MR -> show: Automerge widget
 *
 */

$mr-widget-min-height: 69px;
$tabs-holder-z-index: 250;

.space-children {
  @include clearfix;

  > * {
    float: left;
  }

  > *:not(:first-child) {
    margin-left: 10px;
  }
}

.mr-widget-border-top {
  border-top: 1px solid $border-color;
}

.mr-widget-margin-left { margin-left: $mr-widget-margin-left; }

.media-section {
  @include media-breakpoint-down(md) {
    align-items: flex-start;

    .media-body {
      flex-direction: column;
      align-items: flex-start;
    }
  }

  .code-text {
    @include media-breakpoint-up(lg) {
      align-self: center;
      flex: 1;
    }
  }
}

.mr-widget-section {
  .code-text {
    flex: 1;
  }
}

.mr-widget-heading {
  position: relative;
  border: 1px solid $border-color;
  border-radius: $border-radius-default;
  background: var(--white, $white);

  .gl-skeleton-loader {
    display: block;
  }
}

.mr-widget-extension {
  border-top: 1px solid $border-color;
  background-color: $gray-50;

  &.clickable:hover {
    background-color: $gray-100;
    cursor: pointer;
  }
}

.mr-widget-workflow {
  margin-top: $gl-padding;
  position: relative;

  &::before {
    content: '';
    border-left: 1px solid $gray-100;
    position: absolute;
    left: 28px;
    top: -17px;
    height: 16px;
  }
}

.mr-section-container {
  border: 1px solid $border-color;
  border-radius: $border-radius-default;
  background: var(--white, $white);

  > .mr-widget-border-top:first-of-type {
    border-top: 0;
  }
}

.mr-widget-body,
.mr-widget-content,
.mr-widget-footer {
  padding: $gl-padding;
}

.mr-widget-info {
  padding-left: $gl-padding;
  padding-right: $gl-padding;
}

.mr-state-widget {
  color: $gl-text-color;

  .commit-message-edit {
    border-radius: $border-radius-default;
  }

  .mr-widget-section:not(:first-child),
  .mr-widget-footer {
    border-top: solid 1px $border-color;
  }

  .mr-widget-alert-container + .mr-widget-section {
    border-top: 0;
  }

  .mr-fast-forward-message {
    padding-left: $gl-padding-50;
    padding-bottom: $gl-padding;
  }

  .commits-list {
    > li {
      padding: $gl-padding;

      @include media-breakpoint-up(md) {
        margin-left: $gl-spacing-scale-7;
      }
    }
  }

  .mr-commit-dropdown {
    .dropdown-menu {
      @include media-breakpoint-up(md) {
        width: 150%;
      }
    }
  }

  .mr-widget-footer {
    padding: 0;
  }

  .mr-report {
    padding: 0;

    > .media {
      padding: $gl-padding;
    }
  }

  form {
    margin-bottom: 0;

    .clearfix {
      margin-bottom: 0;
    }
  }

  label {
    margin-bottom: 0;
  }

  .btn {
    font-size: $gl-font-size;
  }

  .accept-merge-holder {
    .accept-action {
      display: inline-block;
      float: left;

      .accept-merge-request {
        &.ci-preparing,
        &.ci-pending,
        &.ci-running {
          @include btn-blue;
        }

        &.ci-skipped,
        &.ci-failed,
        &.ci-canceled,
        &.ci-error {
          @include btn-red;
        }
      }
    }
  }

  .ci-widget {
    color: $gl-text-color;
    display: flex;
    align-items: center;
    justify-content: space-between;

    @include media-breakpoint-down(xs) {
      flex-wrap: wrap;
    }

    .ci-widget-content {
      display: flex;
      align-items: center;
      flex: 1;
    }
  }

  .mr-widget-icon {
    font-size: 22px;
  }

  .mr-loading-icon {
    margin: 3px 0;
  }

  .ci-status-icon svg {
    margin: 3px 0;
    position: relative;
    overflow: visible;
    display: block;
  }

  .mr-widget-pipeline-graph {
    .dropdown-menu {
      z-index: $zindex-dropdown-menu;
    }
  }

  .normal {
    flex: 1;
    flex-basis: auto;
  }

  .capitalize {
    text-transform: capitalize;
  }

  .label-branch {
    @include gl-font-monospace;
    font-size: 95%;
    color: $gl-text-color;
    font-weight: normal;
    overflow: hidden;
    word-break: break-all;
  }

  .deploy-link,
  .label-branch {
    &.label-truncate {
      // NOTE: This selector targets its children because some of the HTML comes from
      // 'source_branch_link'. Once this external HTML is no longer used, we could
      // simplify this.
      > a,
      > span {
        display: inline-block;
        max-width: 12.5em;
        margin-bottom: -3px;
        white-space: nowrap;
        text-overflow: ellipsis;
        line-height: 14px;
        overflow: hidden;
      }
    }
  }

  .mr-widget-body {
    line-height: 28px;

    @include clearfix;

    .approve-btn {
      margin-right: 5px;
    }

    h4 {
      float: left;
      font-weight: $gl-font-weight-bold;
      font-size: 14px;
      line-height: inherit;
      margin-top: 0;
      margin-bottom: 0;

      time {
        font-weight: $gl-font-weight-normal;
      }
    }

    .btn-grouped {
      margin-left: 0;
      margin-right: 7px;
    }

    label {
      font-weight: $gl-font-weight-normal;
    }

    .spacing {
      margin: 0 0 0 10px;
    }

    .bold,
    .gl-font-weight-bold {
      font-weight: $gl-font-weight-bold;
      color: $gray-600;
      margin-left: 10px;
    }

    .state-label {
      font-weight: $gl-font-weight-bold;
      padding-right: 10px;
    }

    .danger {
      color: $red-500;
    }

    .spacing,
    .bold,
    .gl-font-weight-bold {
      vertical-align: middle;
    }

    .dropdown-menu {
      li a {
        padding: 5px;
      }

      .merge-opt-icon {
        line-height: 1.5;
      }

      .merge-opt-title {
        margin-left: 8px;
      }
    }

    .has-custom-error {
      display: inline-block;
    }

    @include media-breakpoint-down(xs) {
      p {
        font-size: 13px;
      }

      .btn-grouped {
        float: none;
        margin-right: 0;
      }

      .accept-action {
        width: 100%;
        text-align: center;
      }
    }

    .commit-message-editor {
      label {
        padding: 0;
      }
    }

    &.mr-widget-empty-state {
      line-height: 20px;
      padding: $gl-padding;

      .artwork {

        @include media-breakpoint-down(md) {
          margin-bottom: $gl-padding;
        }
      }

      .text {
        p {
          margin-top: $gl-padding;
        }

        .highlight {
          margin: 0 0 $gl-padding;
          font-weight: $gl-font-weight-bold;
        }
      }
    }

    &.mr-pipeline-suggest {
      border-radius: $border-radius-default;
      line-height: 20px;
      border: 1px solid $border-color;

      .circle-icon-container {
        color: $gl-text-color-quaternary;
      }
    }
  }

  .ci-coverage {
    float: right;
  }

  .stop-env-container {
    color: $gl-text-color;
    float: right;

    a {
      color: $gl-text-color;
    }
  }
}

.mr_source_commit,
.mr_target_commit {
  margin-bottom: 0;

  .commit {
    margin: 0;
    padding: 10px;
    list-style: none;

    &:hover {
      background: none;
    }
  }
}

.commits-empty {
  text-align: center;

  h4 {
    padding-top: 20px;
    padding-bottom: 10px;
  }

  svg {
    width: 230px;
  }
}

.nothing-here-block {
  img {
    width: 230px;
  }
}

.mr-list {
  .merge-request {
    padding: 10px $gl-padding;
    display: flex;

    .issuable-info-container {
      flex: 1;
    }

    .merge-request-title {
      margin-bottom: 2px;

      .ci-status-link {
        svg {
          height: 16px;
          width: 16px;
          position: relative;
          top: 3px;
        }

        &:hover,
        &:focus {
          text-decoration: none;
        }
      }
    }
  }

  .merge-request-labels {
    display: inline-block;
  }
}

.merge-request-angle {
  text-align: center;
  margin: 0 auto;
  font-size: 2em;
  line-height: 1.1;
}

// hide mr close link for inline diff comment form
.diff-file .close-mr-link,
.diff-file .reopen-mr-link {
  display: none;
}

.mr-links {
  padding-left: $gl-padding-8 + $status-icon-size + $gl-btn-padding;

  &:last-child {
    padding-bottom: $gl-padding;
  }
}

.mr-info-list {
  clear: left;
  position: relative;
  padding-top: 4px;

  p {
    margin: 0;
    position: relative;
    padding: 4px 0;

    &:last-child {
      padding-bottom: 0;
    }
  }

  &.mr-memory-usage {
    p {
      float: left;
    }

    .memory-graph-container {
      float: left;
      margin-left: 5px;
    }
  }
}

.mr-source-target {
  flex-wrap: wrap;
  padding: $gl-padding;
  background: var(--white, $white);
  min-height: $mr-widget-min-height;

  @include media-breakpoint-up(md) {
    align-items: center;
  }

  .git-merge-container {
    justify-content: space-between;
    flex: 1;
    flex-direction: row;
    align-items: center;

    @include media-breakpoint-down(md) {
      flex-direction: column;
      align-items: stretch;

      .branch-actions {
        margin-top: 16px;
      }
    }

    @include media-breakpoint-up(lg) {
      .branch-actions {
        align-self: center;
        margin-left: $gl-padding;
        white-space: nowrap;
      }
    }
  }

  .diverged-commits-count {
    color: $gl-text-color-secondary;
  }
}

.card-new-merge-request {
  .card-header {
    padding: 5px 10px;
    font-weight: $gl-font-weight-bold;
    line-height: 25px;
  }

  .card-body {
    padding: 10px 5px;
  }

  .card-footer {
    padding: 0;

    .btn {
      min-width: auto;
    }
  }

  .commit {
    .commit-row-title {
      margin-bottom: 4px;
    }

    .item-title {
      @include media-breakpoint-up(sm) {
        width: 45%;
      }
    }

    .avatar {
      left: 0;
      top: 2px;
    }
  }

  .btn-clipboard {
    margin-right: 5px;
    padding: 0;
    background: transparent;
  }

  .ci-status-link {
    margin-right: 5px;
  }
}

.merge-request-select {
  padding-left: 5px;
  padding-right: 5px;
  margin-bottom: 10px;

  &:last-child {
    margin-bottom: 0;
  }

  @include media-breakpoint-up(xs) {
    float: left;
    width: 50%;
    margin-bottom: 0;
  }

  .dropdown-menu-toggle {
    width: 100%;
  }

  .dropdown-menu {
    left: 5px;
    right: 5px;
    width: auto;
  }
}

.issuable-form-select-holder {
  display: inline-block;
  width: 250px;

  .dropdown-menu-toggle {
    width: 100%;
  }
}

.target-branch-select-dropdown-container {
  position: relative;
}

.assign-to-me-link {
  padding-left: 12px;
  white-space: nowrap;
}

.table-holder {
  .ci-table {
    th {
      background-color: $white;
      color: $gl-text-color-secondary;
    }
  }
}

.merged-buttons {
  .btn {
    float: left;
  }
}

.mr-version-controls {
  position: relative;
  z-index: $tabs-holder-z-index + 10;
  background: $white;
  color: $gl-text-color;
  margin-top: -1px;

  .mr-version-menus-container {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    padding: 16px;
    z-index: 199;
    white-space: nowrap;

    .gl-dropdown-toggle {
      width: auto;
      max-width: 170px;

      svg {
        top: 10px;
        right: 8px;
      }
    }
  }

  .content-block {
    padding: $gl-padding;
    border-bottom: 0;
  }

  .mr-version-dropdown,
  .mr-version-compare-dropdown {
    margin: 0 0.5rem;
  }

  .dropdown-title {
    color: $gl-text-color;
  }

  // Shortening button height by 1px to make compare-versions
  // header 56px and fit into our 8px design grid
  .btn {
    height: 34px;
  }

  @include media-breakpoint-up(md) {
    position: -webkit-sticky;
    position: sticky;
    top: $header-height + $mr-tabs-height;

    .with-system-header & {
      top: $header-height + $mr-tabs-height + $system-header-height;
    }

    .with-system-header.with-performance-bar & {
      top: $header-height + $mr-tabs-height + $system-header-height + $performance-bar-height;
    }

    .mr-version-menus-container {
      flex-wrap: nowrap;
    }

    .with-performance-bar & {
      top: $header-height + $performance-bar-height + $mr-tabs-height;
    }
  }
}

.merge-request-tabs-holder,
.epic-tabs-holder {
  top: $header-height;
  z-index: $tabs-holder-z-index;
  background-color: $body-bg;
  border-bottom: 1px solid $border-color;

  .with-system-header & {
    top: $header-height + $system-header-height;
  }

  .with-system-header.with-performance-bar & {
    top: $header-height + $system-header-height + $performance-bar-height;
  }

  @include media-breakpoint-up(sm) {
    position: -webkit-sticky;
    position: sticky;
  }

  &.affix {
    left: 0;
    transition: right 0.15s;

    @include media-breakpoint-down(xs) {
      right: 0;
    }
  }

  .nav-links {
    border: 0;
  }
}

.merge-request-tabs-holder.affix .merge-request-tabs-container,
.epic-tabs-holder.affix .epic-tabs-container {
  padding-left: $gl-padding;
  padding-right: $gl-padding;
}

.with-performance-bar {
  .merge-request-tabs-holder,
  .epic-tabs-holder {
    top: $header-height + $performance-bar-height;
  }
}

.merge-request-tabs,
.epic-tabs {
  display: flex;
  flex-wrap: nowrap;
  margin-bottom: 0;
  padding: 0;
}

.limit-container-width {
  .merge-request-tabs-container,
  .epic-tabs-container {
    max-width: $limited-layout-width;
    margin-left: auto;
    margin-right: auto;

    .inner-page-scroll-tabs {
      background-color: $white;
      margin-left: -$gl-padding;
      padding-left: $gl-padding;
    }
  }
}

.merge-request-tabs-container,
.epic-tabs-container {
  display: flex;
  justify-content: space-between;

  @include media-breakpoint-down(xs) {
    .discussion-filter-container,
    .line-resolve-all-container {
      margin-bottom: $gl-padding-4;
    }
  }

  .discussion-filter-container {
    &:not(:only-child) {
      margin: $gl-padding-4;
    }
  }

  .merge-request-tabs {
    height: $grid-size * 6;
  }
}

.container-fluid {
  // Negative margins for mobile/tablet screen
  .diffs.tab-pane {
    margin: 0 (-$gl-padding);
  }
}

// Wrap MR tabs/buttons so you don't have to scroll on desktop
@include media-breakpoint-down(md) {
  .merge-request-tabs-container,
  .epic-tabs-container {
    flex-direction: column-reverse;
  }
}

@include media-breakpoint-down(lg) {
  .right-sidebar-expanded {
    .merge-request-tabs-container,
    .epic-tabs-container {
      flex-direction: column-reverse;
      align-items: flex-start;
    }
  }
}

.limit-container-width:not(.container-limited) {
  .merge-request-tabs-holder:not(.affix) .merge-request-tabs-container,
  .epic-tabs-holder:not(.affix) .epic-tabs-container {
    max-width: $limited-layout-width - ($gl-padding * 2);
  }
}

.mr-memory-usage {
  width: 100%;

  p.usage-info-loading .usage-info-load-spinner {
    margin-right: 10px;
    font-size: 16px;
  }
}

.fork-sprite {
  margin-right: -5px;
}

.deploy-heading,
.merge-train-position-indicator {
  @include media-breakpoint-up(md) {
    padding: $gl-padding-8 $gl-padding;
  }

  .media-body {
    min-width: 0;
    font-size: 12px;
    margin-left: 32px;
  }

  &:not(:last-child) {
    border-bottom: 1px solid $border-color;
  }
}

.deploy-body {
  display: flex;
  align-items: center;
  flex-wrap: wrap;

  @include media-breakpoint-up(xs) {
    flex-wrap: nowrap;
    white-space: nowrap;
  }

  @include media-breakpoint-down(md) {
    flex-direction: column;
    align-items: flex-start;

    .deployment-info {
      margin-bottom: $gl-padding;
    }
  }

  > *:not(:last-child) {
    margin-right: 0.3em;
  }

  svg {
    vertical-align: text-top;
  }

  .deployment-info {
    flex: 1;
    white-space: nowrap;
    text-overflow: ellipsis;
    min-width: 100px;

    @include media-breakpoint-up(xs) {
      min-width: 0;
      max-width: 100%;
    }
  }

  .dropdown-menu {
    width: 400px;
  }
}

// Hack alert: we've rewritten `btn` class in a way that
// we've broken it and it is not possible to use with `btn-link`
// which causes a blank button when it's disabled and hovering
// The css in here is the boostrap one
.btn-link-retry {
  &[disabled] {
    cursor: not-allowed;
    box-shadow: none;
    opacity: 0.65;

    &:hover {
      color: $gray-500;
      text-decoration: none;
    }
  }
}

.ci-widget-container {
  justify-content: space-between;
  flex: 1;
  flex-direction: row;

  @include media-breakpoint-down(sm) {
    flex-direction: column;

    .stage-cell .stage-container {
      margin-top: 16px;
    }

    .dropdown .mini-pipeline-graph-dropdown-menu.dropdown-menu {
      transform: initial;
    }
  }

  .coverage {
    font-size: 12px;
    color: $gray-500;
    line-height: initial;
  }

  // GlDropdown mini pipeline (Vue)
  //   As the `mini-pipeline-item` mixin specificity is lower
  //   than the toggle of dropdown with 'variant="link"' we add
  //   classes ".gl-button.btn-link" to make it more specific
  //   and avoid having the size overriden
  //
  //   See https://gitlab.com/gitlab-org/gitlab/-/issues/320737
  button.gl-button.btn-link.mini-pipeline-graph-dropdown-toggle,
  .stage-cell button.gl-button.btn-link.mini-pipeline-graph-dropdown-toggle svg {
    height: $ci-action-icon-size-lg;
    width: $ci-action-icon-size-lg;
  }
}

.merge-request-details .file-finder-overlay.diff-file-finder {
  position: fixed;
  z-index: 99999;
  background: $black-transparent;
}

.mr-compare {
  .diff-file .file-title-flex-parent {
    top: $header-height + $mr-tabs-height + 36px;

    .with-performance-bar & {
      top: $performance-bar-height + $header-height + $mr-tabs-height + 36px;
    }
  }
}

.diff-file-row.is-active {
  background-color: $gray-50;
}

.mr-conflict-loader {
  max-width: 334px;

  > svg {
    vertical-align: middle;
  }
}

.mr-ready-to-merge-loader {
  max-width: 418px;

  > svg {
    vertical-align: middle;
  }
}

.mr-widget-alert-container {
  $radius: $border-radius-default - 1px;

  border-radius: $radius $radius 0 0;

  .gl-alert:not(:last-child) {
    margin-bottom: 1px;
  }
}
