TelegramPWA/src/styles/_mixins.scss

168 lines
4.1 KiB
SCSS

// @optimization
@mixin while-transition() {
.Transition_slide:not(.Transition_slide-active) & {
@content;
}
}
@mixin adapt-padding-to-scrollbar($padding) {
padding-inline-end: calc($padding - var(--scrollbar-width));
}
@mixin adapt-margin-to-scrollbar($margin) {
margin-inline-end: calc($margin - var(--scrollbar-width));
}
@mixin filter-outline($width: 0.125rem, $color) {
filter:
drop-shadow($width $width 0 $color)
drop-shadow((-$width) $width 0 $color)
drop-shadow($width (-$width) 0 $color)
drop-shadow((-$width) (-$width) 0 $color);
}
@mixin gradient-border-top($width, $cutout: 0px) {
mask-image: linear-gradient(transparent $cutout, black $width);
}
@mixin gradient-border-bottom($height, $cutout: 0px) {
mask-image: linear-gradient(to top, transparent $cutout, black $height);
}
@mixin gradient-border-horizontal($borderStart, $borderEnd) {
mask-image: linear-gradient(to right, transparent, black $borderStart, black calc(100% - $borderEnd), transparent);
}
@mixin gradient-border-left($indent, $cutout: 0px) {
mask-image: linear-gradient(to right, transparent $cutout, black $indent);
}
@mixin gradient-border-right($indent, $cutout: 0px) {
mask-image: linear-gradient(to left, transparent $cutout, black $indent);
}
@mixin gradient-border-top-bottom($top, $bottom) {
mask-image: linear-gradient(transparent 0%, black $top, black calc(100% - $bottom), transparent 100%);
}
@mixin peer-gradient($property, $colorCount) {
--_accent-color-rgb: var(--color-accent-own-rgb);
html.theme-dark {
--_accent-color-rgb: var(--color-text-rgb);
}
@if $colorCount == 2 {
#{$property}:
repeating-linear-gradient(
-45deg,
rgb(var(--_accent-color-rgb), 100%),
rgb(var(--_accent-color-rgb), 100%) 5px,
rgb(var(--_accent-color-rgb), 35%) 5px,
rgb(var(--_accent-color-rgb), 35%) 10px
);
}
@else {
#{$property}:
repeating-linear-gradient(
-45deg,
rgb(var(--_accent-color-rgb), 100%),
rgb(var(--_accent-color-rgb), 100%) 5px,
rgb(var(--_accent-color-rgb), 60%) 5px,
rgb(var(--_accent-color-rgb), 60%) 10px,
rgb(var(--_accent-color-rgb), 20%) 10px,
rgb(var(--_accent-color-rgb), 20%) 15px
);
}
}
@mixin reset-range() {
input[type="range"] {
-webkit-appearance: none;
display: block;
width: 100%;
height: 0.75rem;
margin-bottom: 0.5rem;
background: transparent;
&:focus {
outline: none;
}
&::-ms-track {
width: 100%;
cursor: var(--custom-cursor, pointer);
background: transparent;
border-color: transparent;
color: transparent;
}
&::-webkit-slider-thumb {
-webkit-appearance: none;
}
&::-moz-range-thumb {
-moz-appearance: none;
}
&::-webkit-slider-runnable-track {
cursor: var(--custom-cursor, pointer);
}
&::-moz-range-track, &::-moz-range-progress {
cursor: var(--custom-cursor, pointer);
}
}
}
@mixin header-pane {
position: absolute;
top: 0;
width: 100%;
height: 2.875rem;
transform: translateY(-100%);
transition: transform var(--slide-transition);
padding-top: 0.375rem;
padding-bottom: 0.375rem;
padding-left: max(0.75rem, env(safe-area-inset-left));
padding-right: max(0.5rem, env(safe-area-inset-right));
background-color: var(--color-background);
&::before {
content: "";
display: block;
position: absolute;
top: -0.1875rem;
left: 0;
right: 0;
height: 0.125rem;
box-shadow: 0 0.125rem 0.125rem var(--color-light-shadow);
}
// Some panels might unmount without animation, so we provide same background above panel to make it less noticeable
&::after {
content: "";
position: absolute;
top: -100%;
left: 0;
right: 0;
height: inherit;
background-color: inherit;
z-index: -1;
}
}
@mixin side-panel-section {
background-color: var(--color-background);
box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);
border-bottom: 0.625rem solid var(--color-background-secondary);
&:last-child {
border-bottom: none;
box-shadow: none;
}
}