/**
 * @license EUPL-1.2
 * Copyright (c) 2021 Robbert Broersma
 */

@import "~@utrecht/focus-ring-css/src/mixin";

$utrecht-support-prince-xml: false !default;

@mixin reset-input-type-radio {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  margin-block-end: 0;
  margin-block-start: 0;
  margin-inline-end: 0;
  margin-inline-start: 0;
}

@mixin utrecht-radio-button {
  /*
   * Use 24x24px as hardcoded minimum target size, to meet WCAG 2.5.8 standards.
   * https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
   */

  /*
   * For the `radial-gradient()` use a 5% gradient size to improve anti-aliasing.
   * With a 0% gradient, the circle will have jagged edges.
   */
  @include reset-input-type-radio;

  --_utrecht-radio-button-background-color: var(
    --_utrecht-radio-button-interactive-background-color,
    var(--_utrecht-radio-button-state-background-color, var(--utrecht-radio-button-background-color))
  );
  --_utrecht-radio-button-border-color: var(
    --_utrecht-radio-button-interactive-border-color,
    var(--_utrecht-radio-button-state-border-color, var(--utrecht-radio-button-border-color, currentColor))
  );
  --_utrecht-radio-button-border-width: var(
    --_utrecht-radio-button-interactive-border-width,
    var(--_utrecht-radio-button-state-border-width, var(--utrecht-radio-button-border-width))
  );
  --_utrecht-radio-button-color: var(
    --_utrecht-radio-button-interactive-color,
    var(--_utrecht-radio-button-state-color, var(--utrecht-radio-button-color, currentColor))
  );
  --_utrecht-radio-button-icon-size: 0;

  background-color: var(--_utrecht-radio-button-background-color);
  background-image: radial-gradient(
    circle,
    var(--_utrecht-radio-button-color, transparent) calc(var(--_utrecht-radio-button-icon-size, 50%) - 5%),
    var(--_utrecht-radio-button-background-color, currentColor) var(--_utrecht-radio-button-icon-size, 50%)
  );
  background-position: center;
  background-repeat: no-repeat;
  background-size: contain;
  block-size: var(--utrecht-radio-button-size, 1em);
  border-color: var(--_utrecht-radio-button-border-color);
  border-radius: 50%;
  border-style: solid;
  border-width: var(--_utrecht-radio-button-border-width);
  cursor: var(--utrecht-action-activate-cursor, revert);
  inline-size: var(--utrecht-radio-button-size, 1em);
  margin-inline-end: var(--utrecht-radio-button-margin-inline-end);
  min-block-size: 24px;
  min-inline-size: 24px;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
  -webkit-user-select: none;
  user-select: none;
  vertical-align: top;

  @if $utrecht-support-prince-xml {
    @media print {
      & {
        min-block-size: 1.5em;
        min-inline-size: 1.5em;
        -prince-pdf-form: enable;
      }
    }
  }
}

@mixin utrecht-radio-button--checked {
  --_utrecht-radio-button-icon-size: var(--utrecht-radio-button-icon-size, 50%);
  --_utrecht-radio-button-state-background-color: var(--utrecht-radio-button-checked-background-color);
  --_utrecht-radio-button-state-border-color: var(--utrecht-radio-button-checked-border-color);
  --_utrecht-radio-button-state-border-width: var(--utrecht-radio-button-checked-border-width);
  --_utrecht-radio-button-state-color: var(--utrecht-radio-button-checked-color);
  --_utrecht-radio-button-state-active-background-color: var(--utrecht-radio-button-checked-active-background-color);
  --_utrecht-radio-button-state-active-border-color: var(--utrecht-radio-button-checked-active-border-color);
  --_utrecht-radio-button-state-active-border-width: var(--utrecht-radio-button-checked-active-border-width);
  --_utrecht-radio-button-state-active-color: var(--utrecht-radio-button-checked-active-color);
  --_utrecht-radio-button-state-focus-background-color: var(--utrecht-radio-button-checked-focus-background-color);
  --_utrecht-radio-button-state-focus-border-color: var(--utrecht-radio-button-checked-focus-border-color);
  --_utrecht-radio-button-state-focus-border-width: var(--utrecht-radio-button-checked-focus-border-width);
  --_utrecht-radio-button-state-focus-color: var(--utrecht-radio-button-checked-focus-color);
  --_utrecht-radio-button-state-hover-background-color: var(--utrecht-radio-button-checked-hover-background-color);
  --_utrecht-radio-button-state-hover-border-color: var(--utrecht-radio-button-checked-hover-border-color);
  --_utrecht-radio-button-state-hover-border-width: var(--utrecht-radio-button-checked-hover-border-width);
  --_utrecht-radio-button-state-hover-color: var(--utrecht-radio-button-checked-hover-color);
}

@mixin utrecht-radio-button--disabled {
  /*
   * The disabled radio button should have:
   * - should have no active effect
   * - should have no focus effect
   * - should have no hover effect
   * - should have a working focus-visible effect, in case someone sets `<input type="radio" disabled tabindex="0">`
   */
  --_utrecht-radio-button-background-color: var(
    --utrecht-radio-button-disabled-background-color,
    var(--utrecht-radio-button-background-color)
  );
  --_utrecht-radio-button-border-color: var(
    --utrecht-radio-button-disabled-border-color,
    var(--utrecht-radio-button-border-color)
  );
  --_utrecht-radio-button-border-width: var(
    --utrecht-radio-button-disabled-border-width,
    var(--utrecht-radio-button-border-width)
  );
  --_utrecht-radio-button-color: var(--utrecht-radio-button-disabled-color, var(--utrecht-radio-button-color));

  /* no focus effect */
  --_utrecht-radio-button-focus-background-color: var(--_utrecht-radio-button-background-color);
  --_utrecht-radio-button-focus-border-color: var(--_utrecht-radio-button-border-color);
  --_utrecht-radio-button-focus-border-width: var(--_utrecht-radio-button-border-width);
  --_utrecht-radio-button-focus-color: var(--_utrecht-radio-button-color);

  /* no active effect */
  --_utrecht-radio-button-active-background-color: var(--_utrecht-radio-button-background-color);
  --_utrecht-radio-button-active-border-color: var(--_utrecht-radio-button-border-color);
  --_utrecht-radio-button-active-border-width: var(--_utrecht-radio-button-border-width);
  --_utrecht-radio-button-active-color: var(--_utrecht-radio-button-color);

  /* no hover effect */
  --_utrecht-radio-button-hover-background-color: var(--_utrecht-radio-button-background-color);
  --_utrecht-radio-button-hover-border-color: var(--_utrecht-radio-button-border-color);
  --_utrecht-radio-button-hover-border-width: var(--_utrecht-radio-button-border-width);
  --_utrecht-radio-button-hover-color: var(--_utrecht-radio-button-color);

  cursor: var(--utrecht-action-disabled-cursor, not-allowed);
}

@mixin utrecht-radio-button--focus-visible {
  @include utrecht-focus-visible;
}

@mixin utrecht-radio-button--invalid {
  border-color: var(--utrecht-radio-button-invalid-border-color, var(--utrecht-radio-button-border-color));
  border-width: var(--utrecht-radio-button-invalid-border-width, var(--utrecht-radio-button-border-width));
  color: var(--utrecht-radio-button-invalid-color, var(--utrecht-radio-button-color));
}

@mixin utrecht-radio-button--active {
  --_utrecht-radio-button-interactive-background-color: var(
    --_utrecht-radio-button-state-active-background-color,
    var(--utrecht-radio-button-active-background-color)
  );
  --_utrecht-radio-button-interactive-border-color: var(
    --_utrecht-radio-button-state-active-border-color,
    var(--utrecht-radio-button-active-border-color)
  );
  --_utrecht-radio-button-interactive-border-width: var(
    --_utrecht-radio-button-state-active-border-width,
    var(--utrecht-radio-button-active-border-width)
  );
  --_utrecht-radio-button-interactive-color: var(
    --_utrecht-radio-button-state-active-color,
    var(--utrecht-radio-button-active-color)
  );
}

/* stylelint-disable-next-line block-no-empty */
@mixin utrecht-radio-button--required {
}

@mixin utrecht-radio-button--hover {
  --_utrecht-radio-button-interactive-background-color: var(
    --_utrecht-radio-button-state-hover-background-color,
    var(--utrecht-radio-button-hover-background-color)
  );
  --_utrecht-radio-button-interactive-border-color: var(
    --_utrecht-radio-button-state-hover-border-color,
    var(--utrecht-radio-button-hover-border-color)
  );
  --_utrecht-radio-button-interactive-border-width: var(
    --_utrecht-radio-button-state-hover-border-width,
    var(--utrecht-radio-button-hover-border-width)
  );
  --_utrecht-radio-button-interactive-color: var(
    --_utrecht-radio-button-state-hover-color,
    var(--utrecht-radio-button-hover-color)
  );
}

@mixin utrecht-radio-button--focus {
  @include utrecht-focus;

  --_utrecht-radio-button-interactive-background-color: var(
    --utrecht-radio-button-focus-background-color,
    var(--utrecht-radio-button-focus-background-color)
  );
  --_utrecht-radio-button-interactive-border-color: var(
    --utrecht-radio-button-focus-border-color,
    var(--utrecht-radio-button-focus-border-color)
  );
  --_utrecht-radio-button-interactive-border-width: var(
    --utrecht-radio-button-focus-border-width,
    var(--utrecht-radio-button-focus-border-width)
  );
  --_utrecht-radio-button-interactive-color: var(
    --utrecht-radio-button-focus-color,
    var(--utrecht-radio-button-focus-color)
  );
}

@mixin utrecht-radio-button--html-input {
  &:checked {
    @include utrecht-radio-button--checked;
  }

  &:disabled {
    @include utrecht-radio-button--disabled;
  }

  &:invalid,
  &[aria-invalid="true"] {
    @include utrecht-radio-button--invalid;
  }

  &:required,
  &[aria-required="true"] {
    @include utrecht-radio-button--required;
  }

  &:focus:not([aria-disabled="true"], :disabled) {
    @include utrecht-radio-button--focus;
  }

  /* override the `:focus` selector above */
  /* stylelint-disable-next-line no-descending-specificity */
  &:focus-visible {
    @include utrecht-radio-button--focus-visible;
  }

  &:hover:not([aria-disabled="true"], :disabled) {
    @include utrecht-radio-button--hover;
  }

  &:active:not([aria-disabled="true"], :disabled) {
    @include utrecht-radio-button--active;
  }
}
