@use "../functions" as *;
@use "../mixins/focus-ring" as *;
@use "../mixins/tokens" as *;

// stylelint-disable custom-property-no-missing-var-function
$radio-tokens: () !default;

// scss-docs-start radio-tokens
// stylelint-disable-next-line scss/dollar-variable-default
$radio-tokens: defaults(
  (
    --radio-size: 1.25rem,
    --radio-margin-block: .125rem,
    --radio-bg: transparent,
    --radio-border-color: var(--border-color),
    --radio-checked-bg: var(--control-checked-bg),
    --radio-checked-border-color: var(--control-checked-border-color),
    --radio-disabled-bg: var(--control-disabled-bg),
    --radio-disabled-opacity: var(--control-disabled-opacity),
  ),
  $radio-tokens
);
// scss-docs-end radio-tokens
// stylelint-enable custom-property-no-missing-var-function

@layer forms {
  .radiogroup {
    display: flex;
    gap: var(--gap, .5rem);
    align-items: var(--align-items, start);

    .description {
      color: var(--fg-3);
    }
  }

  .radio {
    @include tokens($radio-tokens);

    position: relative;
    flex-shrink: 0;
    width: var(--radio-size);
    height: var(--radio-size);
    margin-block: var(--radio-margin-block);
    appearance: none;
    background-color: var(--theme-bg, var(--radio-bg));
    border: 1px solid var(--theme-bg, var(--radio-border-color));
    // stylelint-disable-next-line property-disallowed-list
    border-radius: 50%;

    &:checked {
      color: var(--theme-contrast, var(--primary-contrast));
      background-color: var(--theme-bg, var(--radio-checked-bg));
      border-color: var(--theme-bg, var(--radio-checked-border-color));

      &::before {
        position: absolute;
        inset: .25rem;
        content: "";
        background-color: currentcolor;
        // stylelint-disable-next-line property-disallowed-list
        border-radius: 50%;
      }
    }

    &:disabled {
      --radio-bg: var(--radio-disabled-bg);

      ~ label {
        color: var(--secondary-fg);
        cursor: default;
      }
    }

    &:focus-visible {
      @include focus-ring(true);
    }
  }

  .radio-sm {
    --radio-size: 1rem;
  }
  .radio-lg {
    --radio-size: 1.5rem;
    --radio-margin-block: 0;
  }
}
