widget-button.component.scss 6.49 KB
/**
 * Copyright © 2016-2024 The Thingsboard Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
$defaultMainColor: #3F52DD;
$defaultBackgroundColor: #FFFFFF;
$defaultBoxShadowColor: rgba(0, 0, 0, 0.08);
$defaultDisabledBoxShadowColor: rgba(0, 0, 0, 0);

$defaultMainColorDisabled: rgba(0, 0, 0, 0.38);
$defaultBackgroundColorDisabled: rgba(0, 0, 0, 0.03);

$mainColorEnabled: var(--tb-widget-button-main-color-enabled, $defaultMainColor);
$backgroundColorEnabled: var(--tb-widget-button-background-color-enabled, $defaultBackgroundColor);
$boxShadowColorEnabled: var(--tb-widget-button-box-shadow-color-enabled, $defaultBoxShadowColor);

$mainColorHovered: var(--tb-widget-button-main-color-hovered, $defaultMainColor);
$backgroundColorHovered: var(--tb-widget-button-background-color-hovered, $defaultBackgroundColor);
$boxShadowColorHovered: var(--tb-widget-button-box-shadow-color-hovered, $defaultBoxShadowColor);
$mainColorHoveredFilled: var(--tb-widget-button-main-color-hovered-filled, #3347db); // main.darken(6)

$mainColorPressed: var(--tb-widget-button-main-color-pressed, $defaultMainColor);
$backgroundColorPressed: var(--tb-widget-button-background-color-pressed, $defaultBackgroundColor);
$boxShadowColorPressed: var(--tb-widget-button-box-shadow-color-pressed, $defaultBoxShadowColor);
$mainColorPressedFilled: var(--tb-widget-button-main-color-pressed-filled, #273cd9); // main.darken(12)
$mainColorPressedRipple: var(--tb-widget-button-main-color-pressed-ripple, rgba(63, 82, 221, 0.1)); // Alpha(Main, 0.1)
$mainColorPressedRippleFilled: var(--tb-widget-button-main-color-pressed-ripple-filled, #2439cd); // main.darken(18)

$mainColorActivated: var(--tb-widget-button-main-color-activated, $defaultMainColor);
$backgroundColorActivated: var(--tb-widget-button-background-color-activated, $defaultBackgroundColor);
$boxShadowColorActivated: var(--tb-widget-button-box-shadow-color-activated, $defaultBoxShadowColor);
$mainColorActivatedFilled: var(--tb-widget-button-main-color-activated-filled, #273cd9); // main.darken(12)

$mainColorDisabled: var(--tb-widget-button-main-color-disabled, $defaultMainColorDisabled);
$backgroundColorDisabled: var(--tb-widget-button-background-color-disabled, $defaultBackgroundColorDisabled);
$boxShadowColorDisabled: var(--tb-widget-button-box-shadow-color-disabled, $defaultBoxShadowColor);


@mixin _tb-widget-button-styles($main, $background, $boxShadow) {
  color: $main;
  background-color: $background;
  box-shadow: 0 4px 8px 0 $boxShadow;
  &.tb-outlined {
    border: 1px solid $main;
  }
  &.tb-filled {
    color: $background;
    background-color: $main;
  }
  &.tb-underlined {
    border-bottom: 2px solid $main;
  }
  &.tb-basic {
    background-color: transparent;
  }
}


.mat-mdc-button.mat-mdc-button-base.tb-widget-button {
  width: 100%;
  height: 100%;
  min-width: 0;
  padding: 8px 12px;
  &.tb-icon-only {
    padding: 8px;
  }
  .mdc-button__label {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .tb-widget-button-content {
    width: 100%;
    display: flex;
    flex-direction: row;
    gap: 4px;
    justify-content: center;
    align-items: center;
    .mat-icon {
      margin: 0;
    }
    span.tb-widget-button-label {
      line-height: normal;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
  }

  .mat-mdc-button-persistent-ripple::before {
    opacity: 0;
  }

  @include _tb-widget-button-styles($mainColorEnabled, $backgroundColorEnabled, $boxShadowColorEnabled);

  &:not(:disabled):not(.tb-disabled-state) {
    &:hover, &.tb-hover-state {
      &:not(:active):not(.tb-active-state) {
        &:not(.tb-filled) {
          .mat-mdc-button-persistent-ripple::before {
            opacity: 0.04;
            background-color: $mainColorHovered;
          }
        }
        &.tb-filled {
          .mat-mdc-button-persistent-ripple::before {
            opacity: 1;
            background-color: $mainColorHoveredFilled;
          }
        }
        @include _tb-widget-button-styles($mainColorHovered, $backgroundColorHovered, $boxShadowColorHovered);
      }
    }
    &.tb-pressed-state {
      &:not(.tb-filled) {
        .mat-mdc-button-ripple {
          background-color: $mainColorPressedRipple;
        }
      }
      &.tb-filled {
        .mat-mdc-button-ripple {
          background-color: $mainColorPressedRippleFilled;
        }
      }
    }
    &.tb-pressed {
      &:not(.tb-filled) {
        .mat-ripple-element {
          background-color: $mainColorPressedRipple;
        }
      }
      &.tb-filled {
        .mat-ripple-element {
          background-color: $mainColorPressedRippleFilled;
        }
      }
    }
    &.tb-pressed, &.tb-pressed-state {
      &:not(.tb-filled) {
        .mat-mdc-button-persistent-ripple::before {
          opacity: 0.12;
          background-color: $mainColorPressed;
        }
      }
      &.tb-filled {
        .mat-mdc-button-persistent-ripple::before {
          opacity: 1;
          background-color: $mainColorPressedFilled;
        }
      }
      @include _tb-widget-button-styles($mainColorPressed, $backgroundColorPressed, $boxShadowColorPressed);
    }
    &:active, &.tb-active-state {
      &:not(.tb-pressed):not(.tb-pressed-state) {
        &:not(.tb-filled) {
          .mat-mdc-button-persistent-ripple::before {
            opacity: 0.12;
            background-color: $mainColorActivated;
          }
        }
        &.tb-filled {
          .mat-mdc-button-persistent-ripple::before {
            opacity: 1;
            background-color: $mainColorActivatedFilled;
          }
        }
        @include _tb-widget-button-styles($mainColorActivated, $backgroundColorActivated, $boxShadowColorActivated);
      }
    }
  }

  &:disabled, &.tb-disabled-state {
    &:not(.tb-filled) {
      @include _tb-widget-button-styles($mainColorDisabled, $backgroundColorDisabled, $boxShadowColorDisabled);
    }
    &.tb-filled {
      @include _tb-widget-button-styles($backgroundColorDisabled, $mainColorDisabled, $boxShadowColorDisabled);
    }
  }
}