Newer
Older
vmk-ui-kit / src / scss / components / _data-row.scss
/* =========================
   Data Row
   Figma: Row - Asset List / Order list / Audience contact list.
   A compact table-like row with leading checkbox, media, columns and actions.
========================= */

@use "../kit-deps" as *;

.data-row {
  display: flex;
  align-items: center;
  gap: $space-3;
  width: 100%;
  padding: $space-3 $space-4;
  border-bottom: 1px solid $neutral-100;
  background-color: $neutral-0;
  transition: background-color $motion-base $motion-ease;

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

  @include hover_touch {
    background-color: $neutral-50;
  }

  &.data-row-selected {
    background-color: rgba($mint-500, 0.08);
  }
}

.data-row-select {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
}

.data-row-media {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border-radius: $radius-md;
  background-color: $neutral-100;
  color: $neutral-500;
  font-size: $icon-size-md;
  overflow: hidden;

  img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
  }
}

.data-row-content {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: $space-3 $space-4;
  flex: 1 1 auto;
  min-width: 0;
}

.data-row-cell {
  display: flex;
  flex-direction: column;
  gap: $space-1;
  min-width: 0;

  &.data-row-cell-main {
    .data-row-value {
      font-weight: $font-weight-semibold;
      color: $neutral-900;
    }
  }
}

.data-row-label {
  color: $neutral-500;
  font-size: $font-size-xs;
  font-weight: $font-weight-semibold;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.data-row-value {
  color: $neutral-700;
  font-size: $font-size-sm;
  font-weight: $font-weight-medium;
  line-height: 1.4;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.data-row-actions {
  display: inline-flex;
  align-items: center;
  gap: $space-1;
  flex-shrink: 0;
  margin-left: auto;
}

.data-row-group {
  display: flex;
  flex-direction: column;
  width: 100%;
  border: 1px solid $neutral-200;
  border-radius: $radius-lg;
  overflow: hidden;
}

@media (max-width: 640px) {
  .data-row {
    align-items: flex-start;
    flex-wrap: wrap;
  }

  .data-row-content {
    grid-template-columns: 1fr 1fr;
    width: 100%;
  }

  .data-row-actions {
    width: 100%;
    justify-content: flex-end;
    margin-left: 0;
  }
}