.tiptap-button {
  font-size: 0.875rem;
  font-weight: 500;
  font-feature-settings:
    'salt' on,
    'cv01' on;
  line-height: 1.15;
  height: 2rem;
  min-width: 2rem;
  border: none;
  padding: 0.5rem;
  gap: 0.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--tt-radius-lg, 0.75rem);
  transition-property: background, color, opacity;
  transition-duration: var(--tt-transition-duration-default);
  transition-timing-function: var(--tt-transition-easing-default);

  // focus-visible
  &:focus-visible {
    outline: none;
  }

  &[data-highlighted='true'],
  &[data-focus-visible='true'] {
    background-color: var(--tt-button-hover-bg-color);
    color: var(--tt-button-hover-text-color);
    // outline: 2px solid var(--tt-button-active-icon-color);
  }

  &[data-weight='small'] {
    width: 1.5rem;
    min-width: 1.5rem;
    padding-right: 0;
    padding-left: 0;
  }

  /* button size large */
  &[data-size='large'] {
    font-size: 0.9375rem;
    height: 2.375rem;
    min-width: 2.375rem;
    padding: 0.625rem;
  }

  /* button size small */
  &[data-size='small'] {
    font-size: 0.75rem;
    line-height: 1.2;
    height: 1.5rem;
    min-width: 1.5rem;
    padding: 0.3125rem;
    border-radius: var(--tt-radius-md, 0.5rem);
  }

  /* trim / expand text of the button */
  .tiptap-button-text {
    padding: 0 0.125rem;
    flex-grow: 1;
    text-align: left;
    line-height: 1.5rem;
  }

  &[data-text-trim='on'] {
    .tiptap-button-text {
      text-overflow: ellipsis;
      overflow: hidden;
    }
  }

  /* global icon settings */
  .tiptap-button-icon,
  .tiptap-button-icon-sub,
  .tiptap-button-dropdown-arrows,
  .tiptap-button-dropdown-small {
    flex-shrink: 0;
  }

  /* standard icon, what is used */
  .tiptap-button-icon {
    width: 1rem;
    height: 1rem;
  }

  &[data-size='large'] .tiptap-button-icon {
    width: 1.125rem;
    height: 1.125rem;
  }

  &[data-size='small'] .tiptap-button-icon {
    width: 0.875rem;
    height: 0.875rem;
  }

  /* if 2 icons are used and this icon should be more subtle */
  .tiptap-button-icon-sub {
    width: 1rem;
    height: 1rem;
  }

  &[data-size='large'] .tiptap-button-icon-sub {
    width: 1.125rem;
    height: 1.125rem;
  }

  &[data-size='small'] .tiptap-button-icon-sub {
    width: 0.875rem;
    height: 0.875rem;
  }

  /* dropdown menus or arrows that are slightly smaller */
  .tiptap-button-dropdown-arrows {
    width: 0.75rem;
    height: 0.75rem;
  }

  &[data-size='large'] .tiptap-button-dropdown-arrows {
    width: 0.875rem;
    height: 0.875rem;
  }

  &[data-size='small'] .tiptap-button-dropdown-arrows {
    width: 0.625rem;
    height: 0.625rem;
  }

  /* dropdown menu for icon buttons only */
  .tiptap-button-dropdown-small {
    width: 0.625rem;
    height: 0.625rem;
  }

  &[data-size='large'] .tiptap-button-dropdown-small {
    width: 0.75rem;
    height: 0.75rem;
  }

  &[data-size='small'] .tiptap-button-dropdown-small {
    width: 0.5rem;
    height: 0.5rem;
  }

  /* button only has icons */
  &:has(> svg):not(:has(> :not(svg))) {
    gap: 0.125rem;

    &[data-size='large'],
    &[data-size='small'] {
      gap: 0.125rem;
    }
  }

  /* button only has 2 icons and one of them is dropdown small */
  &:has(> svg:nth-of-type(2)):has(> .tiptap-button-dropdown-small):not(
      :has(> svg:nth-of-type(3))
    ):not(:has(> .tiptap-button-text)) {
    gap: 0;
    padding-right: 0.25rem;

    &[data-size='large'] {
      padding-right: 0.375rem;
    }

    &[data-size='small'] {
      padding-right: 0.25rem;
    }
  }

  /* Emoji is used in a button */
  .tiptap-button-emoji {
    width: 1rem;
    display: flex;
    justify-content: center;
  }

  &[data-size='large'] .tiptap-button-emoji {
    width: 1.125rem;
  }

  &[data-size='small'] .tiptap-button-emoji {
    width: 0.875rem;
  }
}

/* --------------------------------------------
----------- BUTTON COLOR SETTINGS -------------
-------------------------------------------- */

.tiptap-button {
  background-color: var(--tt-button-default-bg-color);
  color: var(--tt-button-default-text-color);

  .tiptap-button-icon {
    color: var(--tt-button-default-icon-color);
  }

  .tiptap-button-icon-sub {
    color: var(--tt-button-default-icon-sub-color);
  }

  .tiptap-button-dropdown-arrows {
    color: var(--tt-button-default-dropdown-arrows-color);
  }

  .tiptap-button-dropdown-small {
    color: var(--tt-button-default-dropdown-arrows-color);
  }

  /* hover state of a button */
  &:hover:not([data-active-item='true']):not([disabled]),
  &[data-active-item='true']:not([disabled]),
  &[data-highlighted]:not([disabled]):not([data-highlighted='false']) {
    background-color: var(--tt-button-hover-bg-color);
    color: var(--tt-button-hover-text-color);

    .tiptap-button-icon {
      color: var(--tt-button-hover-icon-color);
    }

    .tiptap-button-icon-sub {
      color: var(--tt-button-hover-icon-sub-color);
    }

    .tiptap-button-dropdown-arrows,
    .tiptap-button-dropdown-small {
      color: var(--tt-button-hover-dropdown-arrows-color);
    }
  }

  /* Active state of a button */
  &[data-active-state='on']:not([disabled]),
  &[data-state='open']:not([disabled]) {
    background-color: var(--tt-button-active-bg-color);
    color: var(--tt-button-active-text-color);

    .tiptap-button-icon {
      color: var(--tt-button-active-icon-color);
    }

    .tiptap-button-icon-sub {
      color: var(--tt-button-active-icon-sub-color);
    }

    .tiptap-button-dropdown-arrows,
    .tiptap-button-dropdown-small {
      color: var(--tt-button-active-dropdown-arrows-color);
    }

    &:hover {
      background-color: var(--tt-button-active-hover-bg-color);
    }

    /* Emphasized */
    &[data-appearance='emphasized'] {
      background-color: var(--tt-button-active-bg-color-emphasized);
      color: var(--tt-button-active-text-color-emphasized);

      .tiptap-button-icon {
        color: var(--tt-button-active-icon-color-emphasized);
      }

      .tiptap-button-icon-sub {
        color: var(--tt-button-active-icon-sub-color-emphasized);
      }

      .tiptap-button-dropdown-arrows,
      .tiptap-button-dropdown-small {
        color: var(--tt-button-active-dropdown-arrows-color-emphasized);
      }

      &:hover {
        background-color: var(--tt-button-active-hover-bg-color-emphasized);
      }
    }

    /* Subdued */
    &[data-appearance='subdued'] {
      background-color: var(--tt-button-active-bg-color-subdued);
      color: var(--tt-button-active-text-color-subdued);

      .tiptap-button-icon {
        color: var(--tt-button-active-icon-color-subdued);
      }

      .tiptap-button-icon-sub {
        color: var(--tt-button-active-icon-sub-color-subdued);
      }

      .tiptap-button-dropdown-arrows,
      .tiptap-button-dropdown-small {
        color: var(--tt-button-active-dropdown-arrows-color-subdued);
      }

      &:hover {
        background-color: var(--tt-button-active-hover-bg-color-subdued);

        .tiptap-button-icon {
          color: var(--tt-button-active-icon-color-subdued);
        }
      }
    }
  }

  &:disabled {
    background-color: var(--tt-button-disabled-bg-color);
    color: var(--tt-button-disabled-text-color);

    .tiptap-button-icon {
      color: var(--tt-button-disabled-icon-color);
    }
  }
}
