/*
 * https://github.com/morethanwords/tweb
 * Copyright (C) 2019-2021 Eduard Kuzmenko
 * https://github.com/morethanwords/tweb/blob/master/LICENSE
 */

.checkbox-field {
  --size: 1.25rem;
  margin: 1.5rem 1.1875rem;
  display: block;
  text-align: left;
  position: relative;
  cursor: pointer;
  min-width: var(--size);
  min-height: var(--size);
  
  @include animation-level(2) {
    transition: .2s opacity;
  }

  &.checkbox-disabled {
    pointer-events: none !important;
    opacity: var(--disabled-opacity);
  }

  @include respond-to(handhelds) {
    margin-bottom: 27px;
  }

  .checkbox-box {
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    width: var(--size);
    height: var(--size);
    border-radius: .25rem;
    overflow: hidden;

    html.is-safari & {
      -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); // fix safari overflow
    }

    &-check, &-background, &-border {
      position: absolute;
      top: 0;
      left: 0;
    }

    &-border {
      right: 0;
      bottom: 0;
      border-radius: inherit;
      border: 2px solid #8d969c;
      //border-color: #000;
    }

    &-background {
      // it is needed for circle scale animation
      top: -15%; 
      right: -15%;
      bottom: -15%;
      left: -15%;
      
      background-color: var(--primary-color);
      transform: scale(1);
      border-radius: 50%;
      transition: transform .2s 0s ease-in-out;
      
      @include animation-level(0) {
        transition: none !important;
      }
    }

    &-check {
      --offset: 3px;
      width: calc(var(--size) - var(--offset));
      height: calc(var(--size) - var(--offset));
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
  
      use {
        stroke: #fff;
        stroke-width: 2.75;
        stroke-linecap: round;
        stroke-dasharray: 24.19, 24.19;
        stroke-dashoffset: 0;
        transition: stroke-dasharray .1s .15s ease-in-out, visibility 0s .15s;
        visibility: visible; // fix blinking on parent's transform
        
        @include animation-level(0) {
          transition: none !important;
        }
      }
    }
  }

  .checkbox-caption {
    position: relative;
    padding-left: 3.375rem;
    cursor: pointer;
    display: inline-block;
    min-height: 24px;
    margin-top: 1px;
    line-height: 26px;
    user-select: none;
    transition: .2s opacity;
    // color: var(--primary-text-color);
    color: inherit;

    @include animation-level(0) {
      transition: none;
    }
  }

  &.hover-effect {
    display: flex;
    align-items: center;
    height: 3.5rem;
    padding: 0 1.1875rem;
    margin-left: 0;
    margin-right: 0;

    .checkbox-box {
      left: auto;
    }
  }
}

.checkbox-ripple {
  overflow: hidden;
  border-radius: $border-radius-medium;

  .checkbox-box, .checkbox-caption {
    pointer-events: none;
  }
}

.checkbox-field-round {
  --size: 1.5rem;

  .checkbox-box {
    border-radius: 50%;
    overflow: auto;

    &-background {
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
    }

    &-border {
      border: 2px solid var(--secondary-color);
      z-index: 1;
    }

    &-check {
      --offset: calc(var(--size) - (var(--size) / 2 + .125rem));
    }

    html.is-safari & {
      -webkit-mask-image: none;
    }
  }
}

.radio-field {
  --size: 1.375rem;
	position: relative;
	text-align: left;
	margin: 1.25rem 0;
	line-height: var(--line-height); // omg it centers the text
  cursor: pointer;
  
  &.hidden-widget {
    cursor: default;

    .radio-field-main {
      &::before, &::after {
        visibility: hidden;
      }
    }
  }

  > input {
    &:checked {
      & ~ .radio-field-main {
        &::before {
          border-color: var(--primary-color);
        }
    
        &::after {
          transform: translateY(-50%) scale(1);
        }
      }
    }
  }

  // ! can't use &-main here, check popup create poll
  .radio-field-main {
    padding-left: 3.5rem;
    position: relative;
    // color: var(--primary-text-color);
    color: inherit;

    &::before, 
    &::after {
      content: '';
      display: block;
      position: absolute;
      left: 0;
      top: 50%;
      width: var(--size);
      height: var(--size);
      transform: translateY(-50%);
    }

    &::before {
      border: 2px solid var(--secondary-text-color);
      border-radius: 50%;
      opacity: 1;

      @include animation-level(2) {
        transition: border-color .1s ease, opacity .1s ease;
      }
    }

    &::after {
      left: .3125rem;
      width: .75rem;
      height: .75rem;
      border-radius: 50%;
      background: var(--primary-color);
      transform: translateY(-50%) scale(0);
      transform-origin: center;

      @include animation-level(2) {
        transition: transform .1s ease;
      }
    }

    /* &-subtitle {
      color: var(--secondary-text-color) !important;
      font-size: 14px !important;
    } */
  }

  &.radio-field-right {
    .radio-field-main {
      &:before {
        left: auto;
        right: 0;
      }

      &:after {
        left: auto;
        right: .3125rem;
      }
    }
  }

  /* &-with-subtitle {
    .radio-field-main {
      margin-bottom: 1.5rem;

      &-subtitle {
        margin-bottom: -1.5rem;
      }
    }
  } */
}

[type="checkbox"], [type="radio"] {
  box-sizing: border-box;
  padding: 0;
  opacity: 0;
  z-index: var(--z-below);
  position: absolute;
}

.checkbox-field .checkbox-field-input {
  &:not(:checked) + .checkbox-box {
    .checkbox-box-check {
      use {
        stroke-dasharray: 0, 24.19;
        visibility: hidden;
        transition: stroke-dasharray .1s ease-in-out, visibility 0s .1s;
      }
    }

    .checkbox-box-background {
      transition: transform .2s .05s ease-in-out;
      transform: scale(0);
    }
  }
  
  /* &:checked + .checkbox-box {
    
  } */

  &:disabled + .checkbox-box, &:disabled ~ .checkbox-caption {
    cursor: default;
    opacity: var(--disabled-opacity);
  }
}

.checkbox-field-restriction {
  .checkbox-box {
    &-border {
      display: none;
    }

    &-background {
      transform: none !important;
      transition: background-color .2s !important;
    }

    &-check use {
      visibility: visible !important;
      stroke-dasharray: 24.19, 24.19 !important;
      transform: rotate(0) translateY(0);
      transition: stroke-dashoffset .2s ease-in-out, transform .2s ease-in-out !important;
    }
  }
}

.checkbox-field-restriction [type="checkbox"] {
  &:not(:checked) + .checkbox-box {
    .checkbox-box-check {
      use {
        transform: rotate(45deg) translateY(-10px);
        stroke-dashoffset: 35.5;
        //stroke-dashoffset: -13;

        /* stroke-dashoffset: 24;
        stroke-dasharray: 12.095, 24.19 !important; */
      }
    }

    .checkbox-box-background {
      background-color: var(--danger-color);
    }
  }
}

.checkbox-field-toggle {
  --size: 20px;
  margin: 0 .3125rem;
  padding: 0;
  display: flex;
  align-items: center;
  pointer-events: none;

  .checkbox-toggle {
    --offset: 3px;
    --toggle-width: 1.9375rem;
    width: var(--toggle-width);
    height: .875rem;
    background-color: var(--secondary-color);
    border-radius: $border-radius-big;
    position: relative;
    display: flex;
    align-items: center;
    margin: 0 var(--offset);
    
    @include animation-level(2) {
      transition: background-color .1s;
    }

    &:before {
      width: 1.25rem;
      height: 1.25rem;
      border: 2px solid var(--secondary-color);
      background-color: var(--surface-color);
      content: " ";
      transform: translateX(calc(var(--offset) * -1));
      border-radius: 50%;
      position: absolute;
      
      @include animation-level(2) {
        transition: border-color .1s, transform .1s;
      }
    }
  }

  [type="checkbox"]:checked + .checkbox-toggle {
    background-color: var(--primary-color);
    
    &:before {
      border-color: var(--primary-color);
      transform: translateX(calc(var(--toggle-width) - 1.25rem + var(--offset)));
    }
  }
}
