@use 'sass:map';
@use 'sass:math';

$select-size: $text-input-height;
$chevron-size: 0.375rem;
$chevron-offset: math.div($select-size - $chevron-size, 2);

@mixin select-arrow() {
  background-image: linear-gradient(
      45deg,
      transparent 50%,
      theme('colors.text-label') 33%,
      theme('colors.text-label') 66%,
      transparent 66%
    ),
    linear-gradient(
      -45deg,
      transparent 50%,
      theme('colors.text-label') 33%,
      theme('colors.text-label') 66%,
      transparent 66%
    );
  background-position-y: $chevron-offset, $chevron-offset;
  background-position-x: calc(100% - $chevron-offset - $chevron-size),
    calc(100% - $chevron-offset);

  [dir='rtl'] & {
    background-position-x: $chevron-offset,
      calc($chevron-offset + $chevron-size);
  }

  background-size:
    $chevron-size $chevron-size,
    $chevron-size $chevron-size;
  background-repeat: no-repeat;
}

select {
  @include input-base();
  @include select-arrow();
  @apply w-body-text-large;
  // Firefox workaround – Set a large line height (but smaller than min height) so the field’s text has enough top padding.
  line-height: 2.2;
  min-height: $select-size;
  padding: 0 theme('spacing.5');
  padding-inline-end: $select-size;
  // Prevent the element from overflowing the container.
  max-width: 100%;

  @media (forced-colors: active) {
    appearance: auto;
  }
}

select[multiple] {
  background-image: none;
  min-height: theme('spacing.40');
  padding: 0;

  option {
    padding: 0 theme('spacing.5');
  }
}
