@use "../../style/variables" as *;

.#{$prefix}-color-picker {
  display: inline-block;
  position: relative;

  &_disabled {
    opacity: var(--ty-color-picker-opacity-disabled);
    cursor: not-allowed;

    .#{$prefix}-color-picker__trigger,
    .#{$prefix}-color-picker__swatch {
      cursor: not-allowed;
      pointer-events: none;
    }
  }

  &__trigger {
    cursor: pointer;
    display: inline-flex;
  }

  &__swatch {
    width: var(--ty-color-picker-swatch-size);
    height: var(--ty-color-picker-swatch-size);
    border-radius: var(--ty-color-picker-swatch-radius);
    border: 1px solid var(--ty-color-picker-border);
    padding: var(--ty-color-picker-swatch-padding);
    cursor: pointer;
  }

  &__swatch-inner {
    width: 100%;
    height: 100%;
    border-radius: inherit;
  }

  &__panel {
    padding: var(--ty-color-picker-panel-padding);
    background: var(--ty-color-picker-bg);
    border-radius: var(--ty-color-picker-panel-radius);
    box-shadow: var(--ty-color-picker-panel-shadow);
    width: var(--ty-color-picker-panel-width);
  }

  &__spectrum {
    position: relative;
    width: 100%;
    height: var(--ty-color-picker-spectrum-height);
    border-radius: var(--ty-color-picker-spectrum-radius);
    cursor: crosshair;
    overflow: hidden;
  }

  &__spectrum-white {
    position: absolute;
    inset: 0;
    background: var(--ty-color-picker-spectrum-white);
  }

  &__spectrum-black {
    position: absolute;
    inset: 0;
    background: var(--ty-color-picker-spectrum-black);
  }

  &__spectrum-handle {
    position: absolute;
    width: var(--ty-color-picker-spectrum-handle-size);
    height: var(--ty-color-picker-spectrum-handle-size);
    border-radius: 50%;
    border: var(--ty-color-picker-handle-border-width) solid var(--ty-color-picker-handle-border-color);
    box-shadow: var(--ty-color-picker-handle-shadow);
    transform: translate(-50%, -50%);
    pointer-events: none;
  }

  &__controls {
    display: flex;
    align-items: center;
    gap: var(--ty-color-picker-controls-gap);
    margin-top: var(--ty-color-picker-controls-margin-top);
  }

  &__preview {
    width: var(--ty-color-picker-preview-size);
    height: var(--ty-color-picker-preview-size);
    border-radius: var(--ty-color-picker-preview-radius);
    border: 1px solid var(--ty-color-picker-border);
    flex-shrink: 0;
  }

  &__sliders {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: var(--ty-color-picker-controls-gap);
  }

  &__hue {
    position: relative;
    height: var(--ty-color-picker-slider-height);
    border-radius: var(--ty-color-picker-slider-radius);
    background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);
    cursor: pointer;
  }

  &__alpha {
    position: relative;
    height: var(--ty-color-picker-slider-height);
    border-radius: var(--ty-color-picker-slider-radius);
    cursor: pointer;

    &::before {
      content: '';
      position: absolute;
      inset: 0;
      border-radius: var(--ty-color-picker-slider-radius);
      background: repeating-conic-gradient(var(--ty-color-border) 0% 25%, transparent 0% 50%) 0 0 / var(--ty-color-picker-alpha-grid-size) var(--ty-color-picker-alpha-grid-size);
      z-index: -1;
    }
  }

  &__slider-handle {
    position: absolute;
    top: 50%;
    width: var(--ty-color-picker-slider-handle-size);
    height: var(--ty-color-picker-slider-handle-size);
    border-radius: 50%;
    border: var(--ty-color-picker-handle-border-width) solid var(--ty-color-picker-handle-border-color);
    box-shadow: var(--ty-color-picker-handle-shadow);
    transform: translate(-50%, -50%);
    pointer-events: none;
    background: transparent;
  }

  &__input-row {
    display: flex;
    gap: var(--ty-color-picker-input-row-gap);
    margin-top: var(--ty-color-picker-input-row-margin-top);
    align-items: center;
  }

  &__format-btn {
    border: 1px solid var(--ty-color-picker-border);
    background: transparent;
    border-radius: var(--ty-color-picker-swatch-radius);
    padding: var(--ty-color-picker-button-padding);
    cursor: pointer;
    font-size: var(--ty-color-picker-button-font-size);
    color: var(--ty-color-picker-button-color);
    white-space: nowrap;

    &:hover {
      border-color: var(--ty-color-picker-button-border-hover);
    }
  }

  &__hex-input {
    flex: 1;
    border: 1px solid var(--ty-color-picker-border);
    border-radius: var(--ty-color-picker-swatch-radius);
    padding: var(--ty-color-picker-input-padding);
    font-size: var(--ty-color-picker-input-font-size);
    font-family: var(--ty-color-picker-input-font-family);
    color: var(--ty-color-picker-input-color);
    outline: none;
    min-width: 0;

    &:focus {
      border-color: var(--ty-color-picker-input-border-focus);
    }
  }

  &__presets {
    display: flex;
    flex-wrap: wrap;
    gap: var(--ty-color-picker-presets-gap);
    margin-top: var(--ty-color-picker-presets-margin-top);
    padding-top: var(--ty-color-picker-presets-padding-top);
    border-top: 1px solid var(--ty-color-picker-border);
  }

  &__preset {
    width: var(--ty-color-picker-preset-size);
    height: var(--ty-color-picker-preset-size);
    border-radius: var(--ty-color-picker-swatch-radius);
    cursor: pointer;
    border: 1px solid var(--ty-color-picker-border);
    transition: transform var(--ty-color-picker-preset-transition-duration);

    &:hover {
      transform: scale(var(--ty-color-picker-preset-hover-scale));
    }
  }
}
