// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only @use 'sass:color'; @use '../mixins'; @use '../variables'; .module-Button { @mixin focus-box-shadow($inner-color, $outer-color) { &:focus { box-shadow: 0 0 0 1px $inner-color, 0 0 0 4px $outer-color; } } @mixin hover-and-active-states($background-color, $mix-color) { &:hover { @include mixins.not-disabled { background: color.mix($background-color, $mix-color, 85%); } } &:active { @include mixins.not-disabled { background: color.mix($background-color, $mix-color, 75%); } } } @include mixins.button-reset; & { border-radius: 4px; padding-block: 8px; padding-inline: 16px; text-align: center; user-select: none; -webkit-app-region: no-drag; } @include mixins.keyboard-mode { @include focus-box-shadow( variables.$color-white, variables.$color-ultramarine ); } @include mixins.dark-keyboard-mode { @include focus-box-shadow( variables.$color-black, variables.$color-ultramarine ); } @include mixins.disabled { cursor: not-allowed; } &--large { @include mixins.font-title-2; font-weight: bold; } &--medium { @include mixins.font-body-1-bold; } &--small { @include mixins.font-body-2; @include mixins.rounded-corners; padding-block: 6px; padding-inline: 12px; } &--primary { $color: variables.$color-white; $background-color: variables.$color-ultramarine; color: $color; background: $background-color; @include mixins.disabled { color: color.adjust($color, $alpha: -0.4); background: color.adjust($background-color, $alpha: -0.6); } &--discouraged { @include mixins.light-theme { opacity: 0.4; } @include mixins.dark-theme { opacity: 0.5; } } @include mixins.light-theme { @include hover-and-active-states( $background-color, variables.$color-black ); } @include mixins.dark-theme { @include hover-and-active-states( $background-color, variables.$color-white ); } } &--secondary { @include mixins.light-theme { $color: variables.$color-gray-90; $background-color: variables.$color-gray-05; color: $color; background: $background-color; @include mixins.disabled { color: variables.$color-black-alpha-40; background: color.adjust($background-color, $alpha: -0.6); } &--affirmative { color: variables.$color-ultramarine; } &--affirmative--discouraged { color: color.adjust(variables.$color-ultramarine, $alpha: -0.5); } &--destructive { color: variables.$color-accent-red; } &--destructive--discouraged { color: color.adjust(variables.$color-ultramarine, $alpha: -0.5); } @include hover-and-active-states( $background-color, variables.$color-black ); } @include mixins.dark-theme { $color: variables.$color-gray-05; $background-color: variables.$color-gray-65; color: $color; background: $background-color; @include mixins.disabled { color: variables.$color-white-alpha-20; background: color.adjust($background-color, $alpha: -0.6); } &--affirmative { color: variables.$color-ultramarine-light; } &--affirmative--discouraged { color: color.adjust(variables.$color-ultramarine-light, $alpha: -0.5); } &--destructive { color: variables.$color-accent-red; } &--destructive--discouraged { color: color.adjust(variables.$color-accent-red, $alpha: -0.5); } @include hover-and-active-states( $background-color, variables.$color-white ); } } &--destructive { $color: variables.$color-white; $background-color: variables.$color-accent-red; color: $color; background: $background-color; @include mixins.disabled { color: color.adjust($color, $alpha: -0.4); background: color.adjust($background-color, $alpha: -0.6); } @include mixins.light-theme { @include hover-and-active-states( $background-color, variables.$color-black ); } @include mixins.dark-theme { @include hover-and-active-states( $background-color, variables.$color-white ); } } &--calling { $color: variables.$color-white; $background-color: variables.$color-accent-green; @include mixins.rounded-corners; color: $color; background: $background-color; @include mixins.disabled { color: color.adjust($color, $alpha: -0.4); background: color.adjust($background-color, $alpha: -0.6); } &--discouraged { @include mixins.light-theme { opacity: 0.4; } @include mixins.dark-theme { opacity: 0.5; } } @include mixins.light-theme { @include hover-and-active-states( $background-color, variables.$color-black ); } @include mixins.dark-theme { @include hover-and-active-states( $background-color, variables.$color-white ); } } &--system-message { @include mixins.rounded-corners; &.module-Button--small { padding-top: 5px; padding-bottom: 5px; font-weight: 500; } @include mixins.light-theme { $color: variables.$color-ultramarine; $background-color: variables.$color-gray-02; color: $color; background: $background-color; @include mixins.disabled { color: color.adjust($color, $alpha: -0.4); background: color.adjust($background-color, $alpha: -0.6); } &--discouraged { color: color.adjust($color, $alpha: -0.5); } @include hover-and-active-states( $background-color, variables.$color-black ); } @include mixins.dark-theme { $color: variables.$color-white; $background-color: variables.$color-gray-65; color: $color; background: $background-color; @include mixins.disabled { color: color.adjust($color, $alpha: -0.4); background: color.adjust($background-color, $alpha: -0.6); } &--discouraged { color: color.adjust($color, $alpha: -0.5); } @include hover-and-active-states( $background-color, variables.$color-white ); } } &--details { align-items: center; border-radius: 8px; display: flex; flex-direction: column; font-size: 11px; justify-content: center; line-height: 10px; min-height: 44px; min-width: 68px; padding: 8px; &--discouraged { @include mixins.light-theme { opacity: 0.4; } @include mixins.dark-theme { opacity: 0.5; } } @include mixins.light-theme { background-color: variables.$color-gray-05; color: variables.$color-black; } @include mixins.dark-theme { background-color: variables.$color-gray-65; color: variables.$color-gray-05; } &:focus { @include mixins.keyboard-mode { box-shadow: 0 0 0 2px variables.$color-ultramarine; } } &::before { margin-bottom: 6px; } } &--icon { @mixin button-icon($icon) { content: ''; display: block; height: 18px; width: 18px; @include mixins.light-theme { @include mixins.color-svg($icon, variables.$color-black); } @include mixins.dark-theme { @include mixins.color-svg($icon, variables.$color-gray-05); } } &--audio::before { @include button-icon('../images/icons/v3/phone/phone-compact.svg'); } &--message::before { @include button-icon('../images/icons/v3/chat/chat-compact.svg'); } &--muted::before { @include button-icon('../images/icons/v3/bell/bell-slash-compact.svg'); } &--search::before { @include button-icon('../images/icons/v3/search/search-compact.svg'); } &--unmuted::before { @include button-icon('../images/icons/v3/bell/bell-compact.svg'); } &--video::before { @include button-icon('../images/icons/v3/video/video-compact.svg'); } } }