thingsboard/ui-ngx/src/app/shared/components/fab-toolbar.component.scss

187 lines
4.7 KiB
SCSS

/**
* Copyright © 2016-2023 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.
*/
@use "sass:math";
$font-size: 10px !default;
@function rem($multiplier) {
@return $multiplier * $font-size;
}
$button-fab-width: rem(5.600) !default;
$button-fab-height: rem(5.600) !default;
$button-fab-padding: rem(1.60) !default;
$icon-button-margin: rem(0.600) !default;
$z-index-fab: 20 !default;
$swift-ease-in-duration: 0.3s !default;
$swift-ease-in-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2) !default;
$swift-ease-in: all $swift-ease-in-duration $swift-ease-in-timing-function !default;
@mixin rtl-prop($ltr-prop, $rtl-prop, $value, $reset-value) {
#{$ltr-prop}: $value;
[dir=rtl] & {
#{$ltr-prop}: $reset-value;
#{$rtl-prop}: $value;
}
}
@mixin fab-position($spot, $top: auto, $right: auto, $bottom: auto, $left: auto) {
&.mat-fab-#{$spot} {
top: $top;
right: $right;
bottom: $bottom;
left: $left;
position: absolute;
}
}
@mixin fab-all-positions() {
@include fab-position(bottom-right, auto, math.div(($button-fab-width - $button-fab-padding), 2), math.div(($button-fab-height - $button-fab-padding), 2), auto);
@include fab-position(bottom-left, auto, auto, math.div(($button-fab-height - $button-fab-padding), 2), math.div(($button-fab-width - $button-fab-padding), 2));
@include fab-position(top-right, math.div(($button-fab-height - $button-fab-padding), 2), math.div(($button-fab-width - $button-fab-padding), 2), auto, auto);
@include fab-position(top-left, math.div(($button-fab-height - $button-fab-padding), 2), auto, auto, math.div(($button-fab-width - $button-fab-padding), 2));
}
mat-fab-toolbar {
$icon-delay: 200ms;
@include fab-all-positions();
display: block;
.mat-fab-toolbar-wrapper {
display: block;
position: relative;
overflow: hidden;
height: $button-fab-width + ($icon-button-margin * 2);
}
mat-fab-trigger {
position: absolute;
z-index: $z-index-fab;
button.mat-mdc-fab {
overflow: visible !important;
opacity: .5;
.mat-icon {
position: relative;
z-index: $z-index-fab + 2;
opacity: 1;
}
}
.mat-fab-toolbar-background {
display: block;
position: absolute;
z-index: $z-index-fab + 1;
opacity: 1;
}
}
&.mat-left {
mat-fab-trigger {
@include rtl-prop(right, left, 0, auto);
}
.mat-toolbar-tools {
flex-direction: row-reverse;
> .mat-mdc-button:first-child {
@include rtl-prop(margin-right, margin-left, 0.6rem, auto)
}
> .mat-mdc-button:first-child {
@include rtl-prop(margin-left, margin-right, -0.8rem, auto);
}
> .mat-mdc-button:last-child {
@include rtl-prop(margin-right, margin-left, 8px, auto);
}
}
}
&.mat-right {
mat-fab-trigger {
@include rtl-prop(left, right, 0, auto);
}
.mat-toolbar-tools {
flex-direction: row;
}
}
.mat-toolbar.mat-toolbar-single-row {
padding: 0 !important;
background-color: transparent !important;
pointer-events: none;
position: relative;
z-index: $z-index-fab + 3;
.mat-toolbar-tools {
padding: 0 20px !important;
margin-top: 3px;
}
.mat-fab-action-item {
opacity: 0;
transform: scale(0);
}
}
&.mat-is-open {
mat-fab-trigger > button.mat-mdc-fab {
box-shadow: none;
opacity: 1;
.mat-icon {
opacity: 0;
}
}
.mat-toolbar.mat-toolbar-single-row {
.mat-fab-action-item {
opacity: 1;
transform: scale(1);
}
}
}
&.mat-animation {
mat-fab-trigger {
button.mat-mdc-fab {
transition: opacity .3s cubic-bezier(.55, 0, .55, .2) .2s;
.mat-icon {
transition: all $icon-delay ease-in;
}
}
.mat-fab-toolbar-background {
transition: $swift-ease-in;
}
}
.mat-toolbar.mat-toolbar-single-row {
.mat-fab-action-item {
transition: $swift-ease-in;
transition-duration: math.div($swift-ease-in-duration, 2);
}
}
&.mat-is-open {
mat-fab-trigger > button.mat-mdc-fab {
transition: opacity .3s cubic-bezier(.55, 0, .55, .2);
}
}
}
}