@use '../config' as *;

.signal {
  // scss-docs-start signal-css-vars
  --signal-size: #{$signal-size};
  --signal-color: #{$text-secondary};
  --signal-bars: 3;
  --signal-bar-border-radius: #{$signal-bar-border-radius};
  --signal-bar-inactive-opacity: #{$signal-bar-inactive-opacity};
  --signal-gap: calc(var(--signal-size) * #{$signal-gap-ratio});
  --signal-padding-y: calc(var(--signal-size) * #{$signal-padding-y-ratio});
  --signal-padding-x: calc(var(--signal-size) * #{$signal-padding-x-ratio});
  // scss-docs-end signal-css-vars
  display: inline-flex;
  flex-shrink: 0;
  gap: var(--signal-gap);
  align-items: flex-end;
  width: var(--signal-size);
  height: var(--signal-size);
  padding: var(--signal-padding-y) var(--signal-padding-x);
  vertical-align: middle;
}

// Each bar takes its share of the full height: the first of three is a third, the last is full
.signal-bar {
  --signal-bar-index: 1;
  flex: 1;
  height: calc(100% * var(--signal-bar-index) / var(--signal-bars));
  background: var(--signal-color);
  opacity: var(--signal-bar-inactive-opacity);
  @include border-radius(var(--signal-bar-border-radius));

  &.active {
    opacity: 1;
  }

  @for $index from 2 through $signal-max-bars {
    &:nth-child(#{$index}) {
      --signal-bar-index: #{$index};
    }
  }
}

// The number of bars is read from the markup, so the steps stay even for any count
@for $count from 2 through $signal-max-bars {
  @if $count != 3 {
    .signal:has(> .signal-bar:last-child:nth-child(#{$count})) {
      --signal-bars: #{$count};
    }
  }
}

@each $name, $color in $theme-colors {
  .signal-#{$name} {
    --signal-color: var(--#{$name});
  }
}
