switch.component.scss 3.62 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.
 */
$thumb-img: url("./svg/thumb.svg") !default;
$thumb-checked-img: url("./svg/thumb-checked.svg") !default;
$thumb-bar-img: url("./svg/thumb-bar.svg") !default;
$thumb-bar-checked-img: url("./svg/thumb-bar-checked.svg") !default;

$error-height: 14px !default;

:host {

  .tb-switch {
    width: 100%;
    height: 100%;

    .error-container {
      position: absolute;
      top: 1%;
      right: 0;
      left: 0;
      z-index: 4;
      height: $error-height;

      .switch-error {
        color: #ff3315;
        white-space: nowrap;
      }
    }

    .onoff-container {
      height: 100%;
      font-weight: 500;
      color: #757575;
      white-space: nowrap;
      z-index: 1;

      .off-label {
        color: #b7b5b5;
      }

      .on-label {
        color: #ff7e57;
        text-shadow: #ff6e4a 1px 1px 10px, #ffd1c3 1px 1px 10px;
      }
    }

    .title-container {
      .switch-title {
        font-weight: 500;
        color: #757575;
        white-space: nowrap;
      }
    }

    #switch-container {
      padding-right: 10px;
      padding-left: 10px;
    }

    .switch {
      position: relative;
    }

    #text-measure {
      position: absolute;
      width: auto;
      height: auto;
      white-space: nowrap;
      visibility: hidden;
    }
  }
}

:host ::ng-deep {
  .tb-switch {
    .switch {
      z-index: 1;
      .mat-mdc-slide-toggle {
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        margin: 0;
        &.mat-mdc-slide-toggle-checked {
          .mdc-form-field {
            .mdc-switch {
              .mdc-switch__track {
                background: $thumb-bar-checked-img no-repeat;
                background-size: contain;
              }
              .mdc-switch__handle-track {
                .mdc-switch__handle {
                  background: $thumb-checked-img no-repeat;
                  background-size: contain;
                }
              }
            }
          }
        }
        .mdc-form-field {
          width: 100%;
          height: 100%;
          .mdc-switch {
            width: 100%;
            height: 100%;
            .mdc-switch__track {
              width: 100%;
              height: 100%;
              background: $thumb-bar-img no-repeat;
              background-size: contain;
              border-radius: 0;
              &:before, &:after {
                content: none;
              }
            }
            .mdc-switch__handle-track {
              top: 5%;
              left: .25%;
              width: 50%;
              height: 90%;
              .mdc-switch__handle {
                width: 100%;
                height: 100%;
                background: $thumb-img no-repeat;
                background-size: contain;
                border-radius: 0;
                box-shadow: none;

                &:before, &:after {
                  content: none;
                }

                & > * {
                  display: none;
                }
              }
            }
          }
        }
      }
    }
  }
}