Files
Desktop/stylesheets/_modules.scss
Fedor Indutny 12d7f24d0f New UI for audio playback and global audio player
Introduce new UI and behavior for playing audio attachments in
conversations. Previously, playback stopped unexpectedly during window
resizes and scrolling through the messages due to the row height
recomputation in `react-virtualized`.

With this commit we introduce `<GlobalAudioContext/>` instance that
wraps whole conversation and provides an `<audio/>` element that
doesn't get re-rendered (or destroyed) whenever `react-virtualized`
recomputes messages. The audio players (with a freshly designed UI) now
share this global `<audio/>` instance and manage access to it using
`audioPlayer.owner` state from the redux.

New UI computes on the fly, caches, and displays waveforms for each
audio attachment. Storybook had to be slightly modified to accomodate
testing of Android bubbles by introducing the new knob for
`authorColor`.
2021-03-19 16:57:35 -04:00

11454 lines
215 KiB
SCSS

// Copyright 2018-2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
// Using BEM syntax explained here: https://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/
.module-title-bar-drag-area {
-webkit-app-region: drag;
height: var(--title-bar-drag-area-height);
left: 0;
position: fixed;
top: 0;
width: 100%;
z-index: 999;
}
.module-splash-screen {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.module-splash-screen__logo {
@include color-svg('../images/signal-logo.svg', $color-white);
margin: 24px auto;
&.module-img--256 {
height: 256px;
width: 256px;
}
&.module-img--200 {
height: 200px;
width: 200px;
}
&.module-img--150 {
height: 150px;
width: 150px;
}
&.module-img--128 {
height: 128px;
width: 128px;
}
&.module-logo-blue {
background-color: $ultramarine-brand-light;
}
}
// Module: Message
// Note: this does the same thing as module-timeline__message-container but
// can be used outside tht Timeline contact more easily.
.module-message-container {
@include button-reset;
cursor: inherit;
width: 100%;
margin-top: 4px;
margin-bottom: 4px;
&::after {
visibility: hidden;
display: block;
font-size: 0;
content: ' ';
clear: both;
height: 0;
}
}
.module-message {
position: relative;
display: inline-flex;
flex-direction: row;
align-items: stretch;
outline: none;
}
.module-message--expired {
animation: module-message__shake 0.2s linear infinite;
}
@keyframes module-message__shake {
0% {
transform: translateX(0px);
}
25% {
transform: translateX(-5px);
}
50% {
transform: translateX(0px);
}
75% {
transform: translateX(5px);
}
100% {
transform: translateX(0px);
}
}
// Spec: container < 438px
.module-message--incoming {
margin-left: 16px;
margin-right: 32px;
}
.module-message--outgoing {
float: right;
margin-right: 16px;
margin-left: 32px;
}
.module-message__buttons {
position: absolute;
top: 0;
bottom: 0;
display: inline-flex;
flex-direction: row;
align-items: center;
opacity: 0;
}
.module-message:hover .module-message__buttons {
opacity: 1;
}
.module-message__buttons--incoming {
left: 100%;
padding-left: 8px;
}
.module-message__buttons--outgoing {
right: 100%;
padding-right: 8px;
flex-direction: row-reverse;
}
.module-message__buttons__download {
height: 24px;
width: 24px;
display: inline-block;
cursor: pointer;
@include light-theme {
@include color-svg(
'../images/icons/v2/save-outline-24.svg',
$color-gray-45
);
&:hover {
@include color-svg(
'../images/icons/v2/save-outline-24.svg',
$color-gray-90
);
}
}
@include dark-theme {
@include color-svg('../images/icons/v2/save-solid-24.svg', $color-gray-45);
&:hover {
@include color-svg(
'../images/icons/v2/save-solid-24.svg',
$color-gray-02
);
}
}
}
.module-message__buttons__react {
height: 24px;
width: 24px;
display: inline-block;
cursor: pointer;
@include light-theme {
@include color-svg(
'../images/icons/v2/add-emoji-outline-24.svg',
$color-gray-45
);
&:hover {
@include color-svg(
'../images/icons/v2/add-emoji-outline-24.svg',
$color-gray-90
);
}
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/add-emoji-outline-24.svg',
$color-gray-45
);
&:hover {
@include color-svg(
'../images/icons/v2/add-emoji-outline-24.svg',
$color-gray-02
);
}
}
}
.module-message__buttons__download--incoming {
margin-left: 12px;
}
.module-message__buttons__download--outgoing {
margin-right: 12px;
}
.module-message__buttons__reply {
height: 24px;
width: 24px;
display: inline-block;
cursor: pointer;
@include light-theme {
@include color-svg(
'../images/icons/v2/reply-outline-24.svg',
$color-gray-45
);
&:hover {
@include color-svg(
'../images/icons/v2/reply-outline-24.svg',
$color-gray-90
);
}
}
@include dark-theme {
@include color-svg('../images/icons/v2/reply-solid-24.svg', $color-gray-45);
&:hover {
@include color-svg(
'../images/icons/v2/reply-solid-24.svg',
$color-gray-02
);
}
}
}
.module-message__buttons__reply--incoming {
margin-left: 12px;
}
.module-message__buttons__reply--outgoing {
margin-right: 12px;
}
.module-message__buttons__menu {
height: 24px;
width: 24px;
display: inline-block;
cursor: pointer;
@include color-svg('../images/icons/v2/more-horiz-24.svg', $color-gray-45);
@include light-theme {
&:hover {
@include color-svg(
'../images/icons/v2/more-horiz-24.svg',
$color-gray-90
);
}
}
@include dark-theme {
&:hover {
@include color-svg(
'../images/icons/v2/more-horiz-24.svg',
$color-gray-02
);
}
}
}
.module-message__buttons__menu--incoming {
margin-left: 12px;
}
.module_message__buttons__menu--outgoing {
margin-right: 12px;
}
.module-message__error-container {
min-width: 28px;
position: relative;
}
.module-message__error {
width: 20px;
height: 20px;
display: inline-block;
position: absolute;
bottom: 4px;
@include light-theme {
@include color-svg(
'../images/icons/v2/error-outline-24.svg',
$color-accent-red
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/error-solid-24.svg',
$color-accent-red
);
}
}
.module-message__error--outgoing {
left: 8px;
}
.module-message__error--incoming {
right: 8px;
}
.module-message__container-outer {
line-height: 0;
display: flex;
flex-direction: column;
}
.module-message__container {
position: relative;
display: inline-block;
border-radius: 16px;
padding-right: 12px;
padding-left: 12px;
padding-top: 10px;
padding-bottom: 10px;
min-width: 0px;
overflow: hidden;
@include light-theme {
border: 1px solid $color-white;
}
@include dark-theme {
border: 1px solid $color-gray-95;
}
}
// This is the component we put the outline around when the whole message is selected
.module-message--selected .module-message__container {
@include mouse-mode {
animation: message--mouse-selected 1s $ease-out-expo;
}
}
.module-message:focus .module-message__container {
@include keyboard-mode {
box-shadow: 0 0 0 3px $ultramarine-ui-light;
}
}
@keyframes message--mouse-selected {
0% {
box-shadow: 0 0 0 5px transparent;
}
10% {
box-shadow: 0 0 0 5px $ultramarine-ui-light;
}
70% {
box-shadow: 0 0 0 5px $ultramarine-ui-light;
}
100% {
box-shadow: 0 0 0 5px transparent;
}
}
// We disable this highlight for messages with stickers, instead highlighting the sticker
.module-message--selected .module-message__container--with-sticker {
@include mouse-mode {
animation: none;
}
}
.module-message:focus .module-message__container--with-sticker {
@include keyboard-mode {
box-shadow: none;
}
}
.module-message__container--with-sticker {
@include light-theme {
border: none;
}
@include dark-theme {
border: none;
}
padding-bottom: 0px;
}
.module-message__container--outgoing {
@include light-theme {
background-color: $color-gray-05;
}
@include dark-theme {
background-color: $color-gray-75;
}
@include ios-theme {
background-color: $ultramarine-ui-light;
color: $color-white;
}
@include ios-dark-theme {
background-color: $ultramarine-ui-light;
color: $color-gray-05;
}
}
// In case the color gets messed up
.module-message__container--incoming {
background-color: $color-conversation-grey;
@include ios-theme {
background-color: $color-gray-05;
color: $color-gray-90;
}
@include ios-dark-theme {
background-color: $color-gray-75;
color: $color-gray-05;
}
}
@each $color, $value in $conversation-colors {
.module-message__container--incoming-#{$color} {
background-color: $value;
}
}
.module-message__container--with-tap-to-view {
min-width: 148px;
cursor: pointer;
}
.module-message__container--with-tap-to-view-pending {
@include ios-theme {
background-color: $color-gray-15;
}
}
// In case the color gets messed up
.module-message__container--incoming--tap-to-view-pending {
background-color: $color-conversation-grey-shade;
}
@each $color, $value in $conversation-colors-shade {
.module-message__container--incoming-#{$color}-tap-to-view-pending {
background-color: $value;
}
}
.module-message__container--with-tap-to-view-pending {
cursor: default;
}
.module-message__container--with-tap-to-view-expired {
@include light-theme {
border: 1px solid $color-gray-15;
background-color: $color-white;
}
@include dark-theme {
border: 1px solid $color-gray-60;
background-color: $color-gray-95;
}
@include ios-theme {
border: 1px solid $color-gray-15;
background-color: $color-white;
}
@include ios-dark-theme {
border: 1px solid $color-gray-60;
background-color: $color-gray-95;
}
}
.module-message__container--with-tap-to-view-error {
width: auto;
cursor: default;
@include light-theme {
background-color: $color-white;
border: 1px solid $color-accent-red;
}
@include dark-theme {
background-color: $color-gray-95;
border: 1px solid $color-deep-red;
}
@include ios-theme {
background-color: $color-white;
border: 1px solid $color-deep-red;
}
@include ios-dark-theme {
background-color: $color-black;
border: 1px solid $color-deep-red;
}
}
.module-message__tap-to-view {
margin-top: 2px;
display: flex;
flex-direction: row;
align-items: center;
}
.module-message__tap-to-view--with-content-above {
margin-top: 8px;
}
.module-message__tap-to-view--with-content-below {
margin-bottom: 8px;
}
.module-message__tap-to-view__spinner-container {
margin-right: 6px;
flex-grow: 0;
flex-shrink: 0;
width: 20px;
height: 20px;
}
.module-message__tap-to-view__icon {
margin-right: 6px;
flex-grow: 0;
flex-shrink: 0;
width: 20px;
height: 20px;
@include light-theme {
@include color-svg('../images/icons/v2/view-once-24.svg', $color-white);
}
@include dark-theme {
@include color-svg('../images/icons/v2/view-once-24.svg', $color-gray-05);
}
@include ios-theme {
@include color-svg('../images/icons/v2/view-once-24.svg', $color-gray-90);
}
@include ios-dark-theme {
@include color-svg('../images/icons/v2/view-once-24.svg', $color-gray-05);
}
}
.module-message__tap-to-view__icon--outgoing {
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-05;
}
@include ios-theme {
background-color: $color-white;
}
}
.module-message__tap-to-view__icon--expired {
@include light-theme {
@include color-svg('../images/icons/v2/viewed-once-24.svg', $color-gray-75);
}
@include dark-theme {
@include color-svg('../images/icons/v2/viewed-once-24.svg', $color-gray-05);
}
@include ios-theme {
@include color-svg('../images/icons/v2/viewed-once-24.svg', $color-gray-75);
}
@include ios-dark-theme {
@include color-svg('../images/icons/v2/viewed-once-24.svg', $color-gray-05);
}
}
.module-message__tap-to-view__text {
@include font-body-1-bold;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
@include ios-theme {
color: $color-gray-90;
}
}
.module-message__tap-to-view__text--incoming {
@include light-theme {
color: $color-white;
}
@include dark-theme {
color: $color-gray-05;
}
@include ios-theme {
color: $color-gray-90;
}
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-message__tap-to-view__text--incoming-expired {
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
@include ios-theme {
color: $color-gray-90;
}
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-message__tap-to-view__text--incoming-error {
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
@include ios-theme {
color: $color-gray-60;
}
}
.module-message__tap-to-view__text--outgoing {
@include ios-theme {
color: $color-white;
}
}
.module-message__tap-to-view__text--outgoing-expired {
@include ios-theme {
color: $color-gray-90;
}
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-message__attachment-container {
// To ensure that images are centered if they aren't full width of bubble
text-align: center;
position: relative;
// These should match the paddings from .module-message__container,
// effectively "undoing" that padding.
margin: {
left: -12px;
right: -12px;
top: -10px;
bottom: -10px;
}
border-radius: 16px;
line-height: 0;
overflow: hidden;
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-95;
}
&--with-content-below {
margin-bottom: 7px;
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
&--with-content-above {
margin-top: 4px;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
}
}
.module-message__sticker-container {
// To ensure that images are centered if they aren't full width of bubble
text-align: center;
margin: {
left: -12px;
right: -12px;
top: -9px;
bottom: -5px;
}
&--with-content-below {
margin-bottom: 5px;
}
&--with-content-above {
margin-top: 4px;
}
}
.module-message__img-attachment {
margin-bottom: -3px;
// redundant with attachment-container, but we get cursor flashing on move otherwise
cursor: pointer;
}
.module-message__generic-attachment {
@include button-reset;
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-message__generic-attachment--with-content-below {
padding-bottom: 6px;
}
.module-message__generic-attachment--with-content-above {
padding-top: 4px;
}
.module-message__generic-attachment--not-active {
cursor: default;
pointer-events: none;
}
.module-message__generic-attachment__icon-container {
position: relative;
}
.module-message__generic-attachment__spinner-container {
padding-left: 4px;
padding-right: 4px;
}
.module-message__generic-attachment__icon {
background: url('../images/file-gradient.svg') no-repeat center;
height: 44px;
width: 56px;
margin-left: -13px;
margin-right: -14px;
margin-bottom: -4px;
// So we can center the extension text inside this icon
display: flex;
flex-direction: row;
align-items: center;
}
.module-message__generic-attachment__icon-dangerous-container {
position: absolute;
top: -1px;
right: -4px;
height: 16px;
width: 16px;
border-radius: 50%;
background-color: $color-white;
}
.module-message__generic-attachment__icon-dangerous {
height: 16px;
width: 16px;
@include color-svg(
'../images/icons/v2/error-solid-24.svg',
$color-accent-red
);
}
.module-message__generic-attachment__icon__extension {
font-size: 10px;
line-height: 13px;
letter-spacing: 0.1px;
text-transform: uppercase;
// Along with flow layout in parent item, centers text
text-align: center;
width: 25px;
margin-left: auto;
margin-right: auto;
// We don't have much room for text here, cut it off without ellipse
overflow-x: hidden;
white-space: nowrap;
text-overflow: clip;
color: $color-gray-90;
}
.module-message__generic-attachment__text {
flex-grow: 1;
margin-left: 8px;
// The width of the icon plus our 8px margin
max-width: calc(100% - 37px);
}
.module-message__generic-attachment__file-name {
@include font-body-2-bold;
margin-top: 2px;
// Handling really long filenames - cut them off
overflow-x: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
@include ios-theme {
color: $color-white;
}
}
.module-message__generic-attachment__file-name--incoming {
color: $color-white;
@include ios-theme {
color: $color-gray-90;
}
@include ios-dark-theme {
color: $color-gray-25;
}
}
.module-message__generic-attachment__file-size {
@include font-body-2;
margin-top: 3px;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
@include ios-theme {
color: $color-white;
}
}
.module-message__generic-attachment__file-size--incoming {
color: $color-white;
@include ios-theme {
color: $color-gray-90;
}
@include ios-dark-theme {
color: $color-gray-25;
}
}
.module-message__link-preview {
@include button-reset;
&--nonclickable {
cursor: inherit;
.module-image__image {
cursor: inherit;
}
}
display: block;
margin-left: -12px;
margin-right: -12px;
width: calc(100% + 24px);
margin-top: -10px;
margin-bottom: 5px;
overflow: hidden;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-message__link-preview--with-content-above {
margin-top: 4px;
}
.module-message__link-preview__content {
padding: 8px 12px;
display: flex;
flex-direction: row;
align-items: flex-start;
@include light-theme {
background-color: $color-gray-02;
}
@include dark-theme {
background-color: $color-gray-80;
}
}
.module-message__link-preview__icon_container {
margin: -2px;
margin-right: 8px;
display: inline-block;
}
.module-message__link-preview__text--with-icon {
margin-top: 5px;
}
.module-message__link-preview__title {
@include font-body-1-bold;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-message__link-preview__description {
@include font-body-2;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-message__link-preview__footer {
@include font-body-2;
display: flex;
flex-flow: row wrap;
align-items: center;
margin-top: 2px;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
> *:not(:first-child) {
display: flex;
&:before {
content: '';
font-size: 50%;
margin-left: 0.2rem;
margin-right: 0.2rem;
}
}
}
.module-message__link-preview__location {
text-transform: lowercase;
}
.module-message__author {
@include font-body-2-bold;
height: 18px;
overflow-x: hidden;
overflow-y: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: $color-white-alpha-90;
@include ios-theme {
color: $color-gray-90;
}
@include ios-dark-theme {
color: $color-gray-05;
}
&__profile-name {
@include font-caption-bold-italic;
}
}
.module-message__author--with-tap-to-view-expired {
@include font-body-2-bold;
height: 18px;
overflow-x: hidden;
overflow-y: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-75;
}
@include dark-theme {
color: $color-white;
}
&__profile-name {
font-style: italic;
}
}
.module-message__author_with_sticker {
@include font-body-2-bold;
height: 18px;
overflow-x: hidden;
overflow-y: hidden;
white-space: nowrap;
text-overflow: ellipsis;
// Stickers are pretty narrow, so we allow this one element of a sticker
// message to go wider than normal.
// There's a tension here, since this is width and not max-width; things will
// look bad for RTL users if we make it too wide.
width: 300px;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
&__profile-name {
font-style: italic;
}
}
.module-message__text {
@include font-body-1;
text-align: start;
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
white-space: pre-wrap;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
@include ios-theme {
color: $color-white-alpha-90;
}
@include ios-dark-theme {
color: $color-white-alpha-90;
}
a {
text-decoration: underline;
outline: none;
@include light-theme {
color: $color-gray-90;
}
@include keyboard-mode {
&:focus {
outline: 1px solid $color-gray-90;
}
}
@include dark-theme {
color: $color-gray-05;
}
@include dark-keyboard-mode {
&:focus {
outline: 1px solid $color-gray-05;
}
}
@include ios-theme {
color: $color-white-alpha-90;
}
@include ios-dark-theme {
color: $color-white-alpha-90;
}
@include ios-keyboard-mode {
&:focus {
outline: 1px solid $color-white-alpha-90;
}
}
}
}
.module-message__text--incoming {
@include light-theme {
color: $color-white;
}
@include ios-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-white-alpha-90;
}
@include ios-dark-theme {
color: $color-gray-05;
}
a {
text-decoration: underline;
outline: none;
@include light-theme {
color: $color-white;
}
@include keyboard-mode {
&:focus {
outline: 1px solid $color-white;
}
}
@include dark-theme {
color: $color-white-alpha-90;
}
@include dark-keyboard-mode {
&:focus {
outline: 1px solid $color-white-alpha-90;
}
}
@include ios-theme {
color: $color-gray-90;
}
@include ios-keyboard-mode {
&:focus {
outline: 1px solid $color-gray-90;
}
}
@include ios-dark-theme {
color: $color-gray-05;
}
@include dark-ios-keyboard-mode {
&:focus {
outline: 1px solid $color-gray-05;
}
}
}
}
.module-message__text--error {
@include font-body-1-italic;
}
.module-message__metadata {
display: flex;
flex-direction: row;
align-items: center;
margin-top: 3px;
margin-bottom: -3px;
&--outgoing {
justify-content: flex-end;
}
&--with-reactions {
margin-bottom: -2px;
}
}
// With an image and no caption, this section needs to be on top of the image overlay
.module-message__metadata--with-image-no-caption {
position: absolute;
bottom: 9px;
z-index: 2;
width: 100%;
// Because this is absolutely positioned, we 100% is too big, take it down by parent
// padding sizes.
padding-right: 24px;
// This is so all clicks go right through to the underlying image.
pointer-events: none;
}
.module-message__metadata__date {
@include font-caption;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-white-alpha-80;
}
@include ios-theme {
color: $color-white-alpha-80;
}
@include ios-dark-theme {
color: $color-white-alpha-80;
}
}
.module-message__metadata__tapable {
@include button-reset;
}
.module-message__metadata__date--incoming {
color: $color-white-alpha-80;
@include ios-theme {
color: $color-gray-60;
}
@include ios-dark-theme {
color: $color-gray-25;
}
}
.module-message__metadata__date--with-image-no-caption {
@include light-theme {
color: $color-white;
}
@include dark-theme {
color: $color-white-alpha-80;
}
@include ios-theme {
color: $color-white;
}
}
.module-message__metadata__date.module-message__metadata__date--incoming-with-tap-to-view-expired {
color: $color-gray-75;
@include dark-theme {
color: $color-white-alpha-80;
}
}
.module-message__metadata__date.module-message__metadata__date--outgoing-with-tap-to-view-expired {
color: $color-gray-75;
@include dark-theme {
color: $color-white-alpha-80;
}
}
.module-message__metadata__date--with-sticker {
@include ios-theme {
color: $color-gray-60;
}
}
.module-message__metadata__status-icon {
width: 12px;
height: 12px;
display: inline-block;
margin-left: 6px;
margin-bottom: 2px;
}
.module-message__metadata__status-icon--sending {
animation: module-message__metadata__status-icon--spinning 4s linear infinite;
@include light-theme {
@include color-svg('../images/sending.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/sending.svg', $color-white-alpha-80);
}
@include ios-theme {
@include color-svg('../images/sending.svg', $color-white);
}
@include ios-dark-theme {
@include color-svg('../images/sending.svg', $color-white);
}
}
@keyframes module-message__metadata__status-icon--spinning {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
.module-message__metadata__status-icon--sent {
@include light-theme {
@include color-svg('../images/check-circle-outline.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg(
'../images/check-circle-outline.svg',
$color-white-alpha-80
);
}
@include ios-theme {
@include color-svg(
'../images/check-circle-outline.svg',
$color-white-alpha-80
);
}
@include ios-dark-theme {
@include color-svg(
'../images/check-circle-outline.svg',
$color-white-alpha-80
);
}
}
.module-message__metadata__status-icon--delivered {
width: 18px;
@include light-theme {
@include color-svg('../images/double-check.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/double-check.svg', $color-white-alpha-80);
}
@include ios-theme {
@include color-svg('../images/double-check.svg', $color-white-alpha-80);
}
@include ios-dark-theme {
@include color-svg('../images/double-check.svg', $color-white-alpha-80);
}
}
.module-message__metadata__status-icon--read {
width: 18px;
@include light-theme {
@include color-svg('../images/read.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/read.svg', $color-white-alpha-80);
}
@include ios-theme {
@include color-svg('../images/read.svg', $color-white-alpha-80);
}
@include ios-dark-theme {
@include color-svg('../images/read.svg', $color-white-alpha-80);
}
}
// When status indicators are overlaid on top of an image, they use different colors
.module-message__metadata__status-icon--with-image-no-caption {
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-02;
}
@include ios-theme {
background-color: $color-white;
}
}
.module-message__metadata__status-icon--with-sticker {
@include ios-theme {
background-color: $color-gray-60;
}
}
.module-message__metadata__status-icon--with-tap-to-view-expired {
@include ios-theme {
background-color: $color-gray-75;
}
}
.module-message__metadata__spinner-container {
margin-left: 6px;
}
.module-message__send-message-button {
@include button-reset;
width: calc(100% + 24px);
@include font-body-2-bold;
margin-top: 8px;
margin-bottom: -10px;
margin-left: -12px;
margin-right: -12px;
text-align: center;
padding: 10px;
border-bottom-left-radius: 16px;
border-bottom-right-radius: 16px;
@include light-theme {
color: $ultramarine-ui-light;
background-color: $color-gray-02;
border: 1px solid $color-black-alpha-20;
}
@include dark-theme {
color: $ultramarine-ui-dark;
background-color: $color-gray-75;
border: 1px solid $color-gray-45;
}
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-message__author-avatar-container {
align-items: flex-end;
display: flex;
justify-content: center;
margin-right: 8px;
&--with-reactions {
padding-bottom: 12px;
}
}
.module-message__author-avatar {
@include button-reset;
cursor: pointer;
&:focus {
outline: none;
.module-avatar {
@include keyboard-mode {
box-shadow: 0 0 0 3px $ultramarine-ui-light;
}
}
}
}
.module-message__typing-container {
height: 16px;
display: flex;
flex-direction: row;
align-items: center;
}
.module-message__reactions {
position: relative;
z-index: 2;
height: 22px;
display: flex;
&--incoming {
align-self: flex-end;
padding-right: 8px;
margin-left: 8px;
}
&--outgoing {
align-self: flex-start;
padding-left: 8px;
margin-right: 8px;
}
}
.module-message__reactions__reaction {
@include button-reset;
min-width: 28px;
height: 22px;
border: 1px solid;
border-radius: 33px;
display: flex;
justify-content: center;
align-items: center;
&--with-count {
min-width: 40px;
}
&__count {
@include font-caption-bold;
margin-left: 4px;
&--no-emoji {
margin-left: 0px;
}
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
&--is-me {
@include light-theme {
color: $color-gray-75;
}
@include dark-theme {
color: $color-gray-15;
}
@include ios-theme {
color: $color-white-alpha-90;
}
}
}
&:focus {
outline: none;
}
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
@include light-theme() {
border-color: $color-white;
background: $color-gray-05;
}
@include dark-theme() {
border-color: $color-gray-95;
background: $color-gray-75;
}
&--is-me {
@include light-theme() {
background: $color-gray-25;
}
@include dark-theme() {
background: $color-gray-45;
}
@include ios-theme() {
background: $color-accent-blue;
}
}
}
// Module: Expire Timer
.module-expire-timer {
width: 12px;
height: 12px;
display: inline-block;
margin-left: 6px;
margin-bottom: 2px;
@include light-theme {
@include color-svg('../images/icons/v2/timer-60-12.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/timer-60-12.svg',
$color-white-alpha-80
);
}
@include ios-theme {
@include color-svg(
'../images/icons/v2/timer-60-12.svg',
$color-white-alpha-80
);
}
}
$timer-icons: '55', '50', '45', '40', '35', '30', '25', '20', '15', '10', '05',
'00';
@each $timer-icon in $timer-icons {
.module-expire-timer--#{$timer-icon} {
@include light-theme {
@include color-svg(
'../images/icons/v2/timer-#{$timer-icon}-12.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/timer-#{$timer-icon}-12.svg',
$color-white-alpha-80
);
}
@include ios-theme {
@include color-svg(
'../images/icons/v2/timer-#{$timer-icon}-12.svg',
$color-white-alpha-80
);
}
}
}
.module-expire-timer--incoming {
background-color: $color-white-alpha-80;
@include ios-theme {
background-color: $color-gray-60;
}
@include ios-dark-theme {
background-color: $color-gray-25;
}
}
.module-expire-timer.module-expire-timer--incoming-with-tap-to-view-expired {
background-color: $color-gray-75;
@include dark-theme {
background-color: $color-white-alpha-80;
}
}
.module-expire-timer.module-expire-timer--outgoing-with-tap-to-view-expired {
background-color: $color-gray-75;
@include dark-theme {
background-color: $color-white-alpha-80;
}
}
.module-expire-timer--with-sticker {
@include ios-theme {
background-color: $color-gray-60;
}
}
// When status indicators are overlaid on top of an image, they use different colors
.module-expire-timer--with-image-no-caption {
@include light-theme {
background-color: $color-white;
}
@include ios-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-02;
}
}
// Module: Quoted Reply
.module-quote-container {
margin: {
left: -6px;
right: -6px;
top: -4px;
bottom: 5px;
}
}
.module-quote-container--with-content-above {
margin-top: 3px;
}
.module-quote {
@include button-reset;
width: 100%;
position: relative;
border-radius: 4px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
display: flex;
flex-direction: row;
align-items: stretch;
overflow: hidden;
border-left-width: 4px;
border-left-style: solid;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-quote--no-click {
cursor: auto;
}
.module-quote--with-content-above {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.module-quote--with-reference-warning {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.module-quote--outgoing {
border-left-color: $color-conversation-grey;
@include light-theme {
background-color: $color-conversation-grey-tint;
}
@include dark-theme {
background-color: $color-conversation-grey-shade;
}
// To preserve contrast
@include ios-keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $color-white;
}
}
// Note: both of these override all of the specific color classes below
@include ios-dark-theme {
background-color: $ultramarine-brand-dark;
border-left-color: $color-black;
}
@include ios-theme {
background-color: $color-ios-blue-tint;
border-left-color: $color-white;
}
}
.module-composition-area__row {
.module-quote--outgoing {
border-left-style: solid;
@include ios-dark-theme {
background-color: $ultramarine-brand-dark;
border-left-color: $color-ios-blue-tint;
}
@include ios-theme {
background-color: $color-ios-blue-tint;
border-left-color: $ultramarine-ui-light;
}
}
}
@each $color, $value in $conversation-colors {
.module-quote--outgoing-#{$color} {
border-left-color: $value;
}
}
@each $color, $value in $conversation-colors-tint {
.module-quote--outgoing-#{$color} {
@include light-theme {
background-color: $value;
}
}
}
@each $color, $value in $conversation-colors-shade {
.module-quote--outgoing-#{$color} {
@include dark-theme {
background-color: $value;
}
}
}
.module-quote--incoming {
@include light-theme {
border-left-color: $color-white;
background-color: $color-conversation-grey-tint;
}
@include dark-theme {
border-left-color: $color-black;
background-color: $color-conversation-grey-shade;
}
// Note: both of these override all of the specific color classes below
@include ios-theme {
background-color: $color-ios-blue-tint;
border-left-color: $ultramarine-ui-light;
}
@include ios-dark-theme {
background-color: $ultramarine-brand-dark;
border-left-color: $color-ios-blue-tint;
}
}
@each $color, $value in $conversation-colors-tint {
.module-quote--incoming-#{$color} {
@include light-theme {
background-color: $value;
}
}
}
@each $color, $value in $conversation-colors-shade {
.module-quote--incoming-#{$color} {
@include dark-theme {
background-color: $value;
}
}
}
.module-quote__primary {
flex-grow: 1;
padding-left: 8px;
padding-right: 8px;
padding-top: 7px;
padding-bottom: 7px;
// To leave room for image thumbnail
min-height: 54px;
}
.module-quote__primary__author {
@include font-body-2-bold;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-quote__primary__author--incoming {
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-quote__primary__profile-name {
@include font-body-2-bold-italic;
}
.module-quote__primary__text {
@include font-body-1;
text-align: start;
@include light-theme {
color: $color-gray-90;
a {
color: $color-gray-90;
}
}
@include dark-theme {
color: $color-gray-02;
a {
color: $color-gray-02;
}
}
@include ios-dark-theme {
color: $color-gray-05;
a {
color: $color-gray-05;
}
}
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
white-space: pre-wrap;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
// Note: -webkit-line-clamp doesn't work for RTL text, and it forces you to use
// ... as the truncation indicator. That's not a solution that works well for
// all languages. More resources:
// - http://hackingui.com/front-end/a-pure-css-solution-for-multiline-text-truncation/
// - https://medium.com/mofed/css-line-clamp-the-good-the-bad-and-the-straight-up-broken-865413f16e5
}
.module-quote__primary__text--incoming {
@include ios-dark-theme {
color: $color-gray-05;
a {
color: $color-gray-05;
}
}
}
.module-quote__primary__type-label {
@include font-body-2-italic;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-quote__primary__type-label--incoming {
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-quote__primary__filename-label {
@include font-body-2;
}
.module-quote__close-container {
position: absolute;
top: 4px;
right: 4px;
height: 16px;
width: 16px;
border-radius: 50%;
background-color: $color-black-alpha-40;
@include keyboard-mode {
&:focus-within {
background-color: $ultramarine-ui-light;
}
}
}
.module-quote__close-button {
@include button-reset;
width: 14px;
height: 14px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
@include color-svg('../images/icons/v2/x-24.svg', $color-white);
}
.module-quote__icon-container {
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
flex: 0 0 54px;
position: relative;
width: 54px;
}
.module-quote__icon-container__inner {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
}
.module-quote__icon-container__circle-background {
display: flex;
align-items: center;
justify-content: center;
height: 32px;
width: 32px;
border-radius: 50%;
background-color: $color-white;
}
.module-quote__icon-container__icon {
width: 20px;
height: 20px;
}
.module-quote__icon-container__icon--file {
@include color-svg('../images/file.svg', $ultramarine-ui-light);
}
.module-quote__icon-container__icon--image {
@include color-svg('../images/image.svg', $ultramarine-ui-light);
}
.module-quote__icon-container__icon--microphone {
@include color-svg(
'../images/icons/v2/mic-outline-24.svg',
$ultramarine-ui-light
);
}
.module-quote__icon-container__icon--play {
@include color-svg(
'../images/icons/v2/play-solid-24.svg',
$ultramarine-ui-light
);
}
.module-quote__icon-container__icon--movie {
@include color-svg('../images/movie.svg', $ultramarine-ui-light);
}
.module-quote__generic-file {
display: flex;
flex-direction: row;
align-items: center;
}
.module-quote__generic-file__icon {
background: url('../images/file-gradient.svg');
background-size: 75%;
background-repeat: no-repeat;
height: 28px;
width: 36px;
margin-left: -4px;
margin-right: -6px;
margin-bottom: 5px;
}
.module-quote__generic-file__text {
@include font-body-2;
max-width: calc(100% - 26px);
overflow-x: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-quote__generic-file__text--incoming {
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-quote__reference-warning {
color: $color-gray-90;
height: 26px;
display: flex;
flex-direction: row;
align-items: center;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
padding-left: 8px;
padding-right: 8px;
background-color: $color-white-alpha-80;
@include dark-theme {
background-color: $color-white-alpha-20;
}
@include ios-theme {
background-color: $color-ios-ref-warning-light;
}
@include ios-dark-theme {
background-color: $color-ios-ref-warning-dark;
}
}
.module-quote__reference-warning--incoming {
color: $color-gray-90;
@include ios-theme {
background-color: $color-ios-ref-warning-light;
}
@include ios-dark-theme {
background-color: $color-ios-ref-warning-dark;
}
}
.module-quote__reference-warning__icon {
height: 16px;
width: 16px;
@include light-theme {
@include color-svg('../images/icons/v2/link-broken-16.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/link-broken-16.svg', $color-gray-25);
}
@include ios-theme {
@include color-svg('../images/icons/v2/link-broken-16.svg', $color-gray-90);
}
@include ios-dark-theme {
@include color-svg('../images/icons/v2/link-broken-16.svg', $color-gray-90);
}
}
.module-quote__reference-warning__icon--incoming {
@include ios-theme {
@include color-svg('../images/icons/v2/link-broken-16.svg', $color-gray-90);
}
@include ios-dark-theme {
@include color-svg('../images/icons/v2/link-broken-16.svg', $color-gray-90);
}
}
.module-quote__reference-warning__text {
@include font-caption;
margin-left: 6px;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
@include ios-dark-theme {
color: $color-gray-90;
}
}
.module-quote__reference-warning__text--incoming {
@include ios-dark-theme {
color: $color-gray-90;
}
}
.module-about {
&__container {
margin-bottom: 8px;
margin-left: auto;
margin-right: auto;
max-width: 248px;
text-align: center;
}
&__text {
@include font-body-1;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
max-width: 400px;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
img.emoji {
height: 1em;
margin-right: 3px;
margin-bottom: 3px;
vertical-align: middle;
width: 1em;
}
}
}
// Module: Embedded Contact
.module-embedded-contact {
@include button-reset;
width: 100%;
padding: 5px;
display: flex;
flex-direction: row;
align-items: center;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-embedded-contact--outgoing {
@include ios-keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $color-white;
}
}
}
.module-embedded-contact--with-content-above {
padding-top: 4px;
}
.module-embedded-contact--with-content-below {
padding-bottom: 4px;
}
.module-embedded-contact__spinner-container {
padding-left: 5px;
padding-right: 5px;
}
.module-embedded-contact__text-container {
flex-grow: 1;
margin-left: 8px;
max-width: calc(100% - 58px);
}
.module-embedded-contact__contact-name {
@include font-body-1-bold;
margin-top: 6px;
max-width: 100%;
white-space: nowrap;
overflow-x: hidden;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
@include ios-theme {
color: $color-white;
}
@include ios-dark-theme {
color: $color-gray-05;
}
}
.module-embedded-contact__contact-name--incoming {
color: $color-white;
@include ios-theme {
color: $color-gray-90;
}
@include ios-dark-theme {
color: $color-gray-25;
}
}
.module-embedded-contact__contact-method {
@include font-body-2;
margin-top: 3px;
max-width: 100%;
white-space: nowrap;
overflow-x: hidden;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-white-alpha-80;
}
@include ios-theme {
color: $color-white-alpha-80;
}
}
.module-embedded-contact__contact-method--incoming {
color: $color-white-alpha-80;
@include ios-theme {
color: $color-gray-60;
}
}
// Module: Contact Detail
.module-contact-detail {
text-align: center;
max-width: 300px;
margin-left: auto;
margin-right: auto;
}
.module-contact-detail__avatar {
margin-bottom: 4px;
}
.module-contact-detail__contact-name {
@include font-body-1-bold;
}
.module-contact-detail__contact-method {
@include font-body-2;
margin-top: 10px;
}
.module-contact-detail__send-message {
@include button-reset;
border-radius: 4px;
background-color: $ultramarine-ui-light;
display: inline-block;
padding: 6px;
margin-top: 20px;
color: $color-white;
flex-direction: column;
align-items: center;
}
.module-contact-detail__send-message__inner {
display: flex;
align-items: center;
padding-right: 5px;
@include font-body-2-bold;
}
.module-contact-detail__send-message__bubble-icon {
height: 17px;
width: 18px;
display: inline-block;
margin-right: 5px;
@include light-theme {
@include color-svg(
'../images/icons/v2/message-outline-24.svg',
$color-white
);
}
@include dark-theme {
@include color-svg('../images/icons/v2/message-solid-24.svg', $color-white);
}
}
.module-contact-detail__additional-contact {
text-align: left;
margin-top: 15px;
padding-top: 8px;
@include light-theme {
border-top: 1px solid $color-gray-05;
}
@include dark-theme {
border-top: 1px solid $color-gray-75;
}
}
.module-contact-detail__additional-contact__type {
@include font-caption-bold;
color: $color-gray-45;
margin-bottom: 3px;
}
// Module: Inline Notification Wrapper
.module-inline-notification-wrapper {
outline: none;
padding: 5px;
&:focus {
@include keyboard-mode {
background-color: $color-gray-02;
}
@include dark-keyboard-mode {
background-color: $color-gray-80;
}
}
}
// Module: Group Notification
.module-group-notification {
margin-left: 1em;
margin-right: 1em;
margin-top: 5px;
margin-bottom: 5px;
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-group-notification__change {
margin-top: 2px;
margin-bottom: 2px;
}
.module-group-notification__contact {
font-weight: bold;
}
// Module: Reset Session Notification
.module-reset-session-notification {
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
// Module: Safety Number Notification
.module-safety-number-notification {
text-align: center;
}
.module-safety-number-notification__icon {
height: 24px;
width: 24px;
margin-left: auto;
margin-right: auto;
margin-bottom: 7px;
@include light-theme {
@include color-svg(
'../images/icons/v2/safety-number-outline-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/safety-number-solid-24.svg',
$color-gray-25
);
}
}
.module-safety-number-notification__text {
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-safety-number-notification__contact {
font-weight: bold;
}
.module-safety-number-notification__button {
@include button-reset;
@include font-body-2-bold;
margin-top: 5px;
display: inline-block;
padding: 12px;
border-radius: 4px;
color: $ultramarine-ui-light;
@include light-theme {
background-color: $color-gray-02;
}
@include keyboard-mode {
&:focus {
background-color: $color-gray-15;
}
}
@include dark-theme {
background-color: $color-gray-75;
}
@include dark-keyboard-mode {
&:focus {
background-color: $color-gray-60;
}
}
}
.module-message-calling--notification {
.module-message__metadata__date {
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&__button {
@include button-reset;
@include button-small;
@include button-green;
@include font-body-1-bold;
display: block;
margin: 0.5rem auto 0 auto;
}
}
.module-safety-number__bold-name {
font-weight: bold;
}
.module-message-calling {
&--audio {
text-align: center;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&--audio__icon {
height: 24px;
margin-bottom: 4px;
margin-left: auto;
margin-right: auto;
width: 24px;
@include light-theme {
@include color-svg(
'../images/icons/v2/phone-right-outline-24.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/phone-right-outline-24.svg',
$color-gray-15
);
}
}
&--video {
text-align: center;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&--video__icon {
height: 24px;
margin-bottom: 4px;
margin-left: auto;
margin-right: auto;
width: 24px;
@include light-theme {
@include color-svg(
'../images/icons/v2/video-outline-24.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/video-outline-24.svg',
$color-gray-15
);
}
}
}
.module-message-unsynced {
padding-bottom: 24px;
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-message-unsynced__icon {
height: 24px;
margin-bottom: 4px;
margin-left: auto;
margin-right: auto;
width: 24px;
@include light-theme {
@include color-svg(
'../images/icons/v2/info-outline-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg('../images/icons/v2/info-solid-24.svg', $color-gray-25);
}
}
// Module: Verification Notification
.module-verification-notification {
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-verification-notification__contact {
font-weight: bold;
}
.module-verification-notification__icon--mark-verified {
height: 24px;
width: 24px;
margin-left: auto;
margin-right: auto;
margin-bottom: 4px;
@include light-theme {
@include color-svg('../images/icons/v2/check-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/check-24.svg', $color-gray-25);
}
}
.module-verification-notification__icon--mark-not-verified {
height: 24px;
width: 24px;
margin-left: auto;
margin-right: auto;
margin-bottom: 7px;
@include light-theme {
@include color-svg(
'../images/icons/v2/safety-number-outline-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/safety-number-solid-24.svg',
$color-gray-25
);
}
}
// Module: Timer Notification
.module-timer-notification {
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-timer-notification__icon-container {
margin-left: auto;
margin-right: auto;
display: inline-flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.module-timer-notification__icon {
height: 20px;
width: 20px;
display: inline-block;
@include light-theme {
@include color-svg('../images/icons/v2/timer-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/timer-24.svg', $color-gray-05);
}
}
.module-timer-notification__icon--disabled {
@include light-theme {
@include color-svg(
'../images/icons/v2/timer-disabled-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/timer-disabled-24.svg',
$color-gray-05
);
}
}
.module-timer-notification__icon-label {
margin-left: 6px;
// Didn't seem centered otherwise
margin-top: 1px;
}
.module-notification--with-click-handler {
cursor: pointer;
}
.module-notification__icon {
height: 24px;
width: 24px;
margin-left: auto;
margin-right: auto;
}
// Module: Contact List Item
.module-contact-list-item {
@include button-reset;
cursor: inherit;
padding: 8px;
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
@include light-theme {
color: $color-gray-60;
@include mouse-mode {
&:hover {
background-color: $color-gray-02;
}
}
@include keyboard-mode {
&:focus {
background-color: $color-gray-02;
}
}
}
@include dark-theme {
color: $color-gray-15;
}
@include dark-mouse-mode {
&:hover {
background-color: $color-gray-80;
}
}
@include dark-keyboard-mode {
&:focus {
background-color: $color-gray-80;
}
}
}
.module-contact-list-item--with-click-handler {
cursor: pointer;
}
.module-contact-list-item__text {
margin-left: 8px;
align-items: center;
display: flex;
flex-direction: row;
flex-grow: 1;
justify-content: space-between;
}
.module-contact-list-item__left {
flex: 1;
}
.module-contact-list-item__text__name {
@include font-body-1-bold;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-contact-list-item__text__profile-name {
@include font-body-2-bold-italic;
}
.module-contact-list-item__text__additional-data {
@include font-body-2;
margin-top: 3p;
}
.module-contact-list-item__text__verified-icon {
display: inline-block;
width: 20px;
height: 20px;
vertical-align: text-bottom;
// Trying to account for the whitespace around the check mark
margin-bottom: -1px;
@include light-theme {
@include color-svg('../images/icons/v2/check-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/check-24.svg', $color-gray-25);
}
}
.module-contact-list-item__admin {
text-align: right;
height: 100%;
@include font-body-2;
}
// Module: In Contacts Icon
.module-in-contacts-icon__icon {
display: inline-block;
height: 15px;
width: 15px;
margin-bottom: 2px;
vertical-align: middle;
@include light-theme {
@include color-svg(
'../images/icons/v2/profile-circle-outline-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/profile-circle-outline-24.svg',
$color-gray-25
);
}
@include keyboard-mode {
&:focus {
@include color-svg(
'../images/icons/v2/profile-circle-outline-24.svg',
$ultramarine-ui-light
);
}
}
}
// Module: Conversation Details
.conversation-details-panel {
max-width: 750px;
margin: 0 auto;
@at-root .conversation #{&} {
overflow-y: auto;
}
}
// Brought this up here to add specificity
button.module-conversation-details__action-button {
margin-left: 16px;
}
.module-conversation-details {
&-header {
&__root,
&__root--editable {
align-items: center;
background: none;
border: none;
color: inherit;
display: flex;
flex-direction: column;
margin: 0;
outline: inherit;
padding: 0 0 24px 0;
text-align: center;
width: 100%;
}
&__root--editable {
cursor: pointer;
}
&__title {
@include font-title-1;
align-items: center;
display: flex;
padding-bottom: 8px;
padding-top: 12px;
}
&__subtitle {
@include font-body-1;
color: $color-gray-60;
padding-bottom: 6px;
@include dark-theme {
color: $color-gray-25;
}
}
&__root--editable &__title {
$icon: '../images/icons/v2/compose-solid-24.svg';
&::after {
$size: 24px;
content: '';
height: $size;
left: $size + 13px;
margin-left: -$size;
opacity: 0;
position: relative;
transition: opacity 100ms ease-out;
width: $size;
@include light-theme {
@include color-svg($icon, $color-gray-60);
}
@include dark-theme {
@include color-svg($icon, $color-gray-25);
}
}
}
&__root--editable:hover &__title::after {
opacity: 1;
}
}
&__leave-group {
color: $color-accent-red;
}
&__block-group {
color: $color-accent-red;
}
&__tabs {
display: flex;
justify-content: space-around;
}
&__tab {
@include font-body-1;
cursor: pointer;
padding: 15px;
&:focus {
@include mouse-mode {
outline: none;
}
}
&--selected {
@include font-body-1-bold;
border-bottom: 2px solid $color-black;
}
}
&__pending--info {
@include font-subtitle;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
padding: 0 28px;
padding-top: 16px;
}
&-icon {
&__button {
background: none;
border: none;
padding: none;
&:focus {
@include mouse-mode {
outline: none;
}
}
}
&__icon {
height: 32px;
width: 32px;
display: flex;
align-items: center;
justify-content: center;
&::after {
display: block;
content: '';
width: 24px;
height: 24px;
-webkit-mask-size: 100%;
}
&--timer {
&::after {
-webkit-mask: url(../images/icons/v2/timer-disabled-24.svg) no-repeat
center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--lock {
&::after {
-webkit-mask: url(../images/icons/v2/lock-outline-24.svg) no-repeat
center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--approve {
&::after {
-webkit-mask: url(../images/icons/v2/check-24.svg) no-repeat center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--link {
&::after {
-webkit-mask: url(../images/icons/v2/link-16.svg) no-repeat center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--share {
&::after {
-webkit-mask: url(../images/icons/v2/share-ios-24.svg) no-repeat
center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--reset {
&::after {
-webkit-mask: url(../images/icons/v2/refresh-24.svg) no-repeat center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--trash {
&::after {
-webkit-mask: url(../images/icons/v2/trash-outline-24.svg) no-repeat
center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--invites {
&::after {
-webkit-mask: url(../images/icons/v2/pending-invite-24.svg) no-repeat
center;
@include light-theme {
background-color: $color-gray-75;
}
@include dark-theme {
background-color: $color-gray-15;
}
}
}
&--down {
border-radius: 18px;
@include light-theme {
background-color: $color-gray-02;
}
@include dark-theme {
background-color: $color-gray-90;
}
&::after {
-webkit-mask: url(../images/icons/v2/chevron-down-16.svg) no-repeat
center;
@include light-theme {
background-color: $color-gray-60;
}
@include dark-theme {
background-color: $color-gray-25;
}
}
}
&--leave {
&::after {
-webkit-mask: url(../images/icons/v2/leave-24.svg) no-repeat center;
background-color: $color-accent-red;
}
}
&--block {
&::after {
-webkit-mask: url(../images/icons/v2/block-24.svg) no-repeat center;
background-color: $color-accent-red;
}
}
}
}
&-media-list {
&__root {
display: flex;
justify-content: center;
padding: 0 20px;
padding-bottom: 24px;
.module-media-grid-item {
border-radius: 4px;
height: auto;
margin: 0 4px;
max-height: 94px;
overflow: hidden;
width: calc(100% / 6);
.module-media-grid-item__icon {
&::before {
content: '';
display: block;
padding-top: 100%;
}
}
.module-media-grid-item__image-container,
img {
margin: 0;
}
}
}
&__show-all {
background: none;
border: none;
padding: 0;
@include light-theme {
color: $color-gray-95;
}
@include dark-theme {
color: $color-gray-05;
}
}
}
&-panel-row {
&__root {
align-items: center;
display: flex;
padding: 16px 24px;
user-select: none;
width: 100%;
&--button {
color: inherit;
background: none;
border: none;
}
&:hover {
@include light-theme {
background-color: $color-gray-02;
}
@include dark-theme {
background-color: $color-gray-90;
}
& .module-conversation-details-panel-row__actions {
opacity: 1;
}
}
}
&__icon {
margin-right: 12px;
flex-shrink: 0;
}
&__label {
flex-grow: 1;
text-align: left;
margin-right: 12px;
}
&__info {
@include font-body-2;
color: $color-gray-60;
margin-top: 4px;
}
&__right {
color: $color-gray-45;
}
&__actions {
margin-left: 12px;
overflow: hidden;
opacity: 0;
&:focus-within {
opacity: 1;
}
}
}
&-panel-section {
&__root {
position: relative;
&:not(:first-child)::before {
border-top: 1px solid transparent;
@include light-theme {
border-top-color: $color-gray-15;
}
@include dark-theme {
border-top-color: $color-gray-65;
}
content: '';
display: block;
left: 0;
margin: 0;
position: absolute;
right: 0;
top: 0;
}
&--borderless {
&:not(:first-child)::before {
border-top: none;
}
}
}
&__header {
display: flex;
justify-content: space-between;
padding: 18px 24px 12px;
&--center {
justify-content: center;
}
}
&__title {
@include font-body-1-bold;
}
}
&-select {
position: relative;
select {
@include font-body-2;
-webkit-appearance: none;
border-radius: 4px;
border: 1px solid $color-gray-25;
cursor: pointer;
height: 40px;
min-width: 124px;
outline: 0;
padding: 10px;
padding-left: 12px;
padding-right: 32px;
text-overflow: ellipsis;
width: 100%;
@include dark-theme {
background-color: $color-gray-90;
border-color: $color-gray-60;
color: $color-gray-05;
}
&:focus {
border: 3px solid $ultramarine-ui-light;
line-height: 14px;
padding-left: 10px;
}
}
&::after {
border: 2px solid $color-gray-60;
border-radius: 2px;
border-right: 0;
border-top: 0;
content: ' ';
display: block;
height: 10px;
pointer-events: none;
position: absolute;
right: 15px;
top: 14px;
transform-origin: center;
transform: rotate(-45deg);
width: 10px;
z-index: 2;
@include dark-theme {
border-color: $color-gray-15;
}
}
}
}
// Module: Message Detail
.module-message-detail {
max-width: 650px;
margin-left: auto;
margin-right: auto;
padding: 20px;
outline: none;
}
.module-message-detail__message-container {
padding-top: 20px;
padding-bottom: 20px;
&::after {
content: '.';
visibility: hidden;
display: block;
height: 0;
clear: both;
}
}
.module-message-detail__label {
@include font-body-1-bold;
}
.module-message-detail__unix-timestamp {
@include light-theme {
color: $color-gray-05;
}
@include dark-theme {
color: $color-gray-45;
}
}
.module-message-detail__delete-button-container {
text-align: center;
margin-top: 10px;
}
.module-message-detail__delete-button {
@include button-reset;
@include keyboard-mode {
&:focus {
outline: -webkit-focus-ring-color auto 5px;
}
}
border-radius: 5px;
margin: 1em auto;
padding: 1em;
background-color: $color-accent-red;
color: $color-white;
@include light-theme {
border: solid 1px $color-gray-45;
box-shadow: 0 0 10px -3px $color-black-alpha-60;
}
@include dark-theme {
border: solid 1px $color-gray-25;
box-shadow: 0 0 10px -3px $color-white-alpha-60;
}
}
.module-message-detail__contact-container {
margin: 20px;
}
.module-message-detail__contact {
margin-bottom: 8px;
display: flex;
flex-direction: row;
align-items: center;
}
.module-message-detail__contact__text {
margin-left: 10px;
flex-grow: 1;
}
.module-message-detail__contact__error {
color: $color-accent-red;
font-weight: bold;
}
.module-message-detail__contact__status-icon {
width: 12px;
height: 12px;
display: inline-block;
margin-bottom: 2px;
}
.module-message-detail__contact__status-icon--sending {
animation: module-message-detail__contact__status-icon--spinning 4s linear
infinite;
@include light-theme {
@include color-svg('../images/sending.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/sending.svg', $color-gray-25);
}
}
@keyframes module-message-detail__contact__status-icon--spinning {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
.module-message-detail__contact__status-icon--sent {
@include light-theme {
@include color-svg('../images/check-circle-outline.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/check-circle-outline.svg', $color-gray-25);
}
}
.module-message-detail__contact__status-icon--delivered {
width: 18px;
@include light-theme {
@include color-svg('../images/double-check.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/double-check.svg', $color-gray-25);
}
}
.module-message-detail__contact__status-icon--read {
width: 18px;
@include light-theme {
@include color-svg('../images/read.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/read.svg', $color-gray-25);
}
}
.module-message-detail__contact__status-icon--error {
@include light-theme {
@include color-svg(
'../images/icons/v2/error-outline-12.svg',
$color-accent-red
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/error-solid-12.svg',
$color-accent-red
);
}
}
.module-message-detail__contact__unidentified-delivery-icon {
margin-left: 6px;
margin-right: 10px;
width: 20px;
height: 20px;
display: inline-block;
@include light-theme {
@include color-svg('../images/unidentified-delivery.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/unidentified-delivery.svg', $color-gray-25);
}
}
.module-message-detail__contact__error-buttons {
text-align: right;
}
.module-message-detail__contact__show-safety-number {
@include button-reset;
padding: 4px;
border-radius: 4px;
color: $color-white;
@include light-theme {
background-color: $color-gray-45;
}
@include dark-theme {
background-color: $color-gray-25;
}
}
.module-message-detail__contact__send-anyway {
@include button-reset;
margin-left: 5px;
margin-top: 5px;
padding: 4px;
border-radius: 4px;
color: $color-white;
background-color: $color-accent-red;
}
// Module: Media Gallery
.module-media-gallery {
display: flex;
flex-direction: column;
flex-grow: 1;
width: 100%;
height: 100%;
outline: none;
}
.module-media-gallery__tab-container {
display: flex;
flex-grow: 0;
flex-shrink: 0;
cursor: pointer;
width: 100%;
}
.module-media-gallery__tab {
width: 100%;
padding: 20px;
text-align: center;
@include light-theme {
background-color: $color-gray-02;
}
@include dark-theme {
background-color: $color-gray-90;
}
outline: none;
&:focus {
@include keyboard-mode {
background-color: $color-gray-15;
}
@include dark-keyboard-mode {
background-color: $color-gray-75;
}
}
}
.module-media-gallery__tab--active {
border-bottom: 2px solid $ultramarine-ui-light;
}
.module-media-gallery__content {
display: flex;
flex-grow: 1;
overflow-y: auto;
padding: 20px;
}
.module-media-gallery__sections {
display: flex;
flex-grow: 1;
flex-direction: column;
}
// Module: Attachment Section
.module-attachment-section {
width: 100%;
}
.module-attachment-section__header {
@include font-body-1-bold;
}
.module-attachment-section__items {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
align-items: flex-start;
}
// Module: Document List Item
.module-document-list-item {
width: 100%;
height: 72px;
}
.module-document-list-item--with-separator {
@include light-theme {
border-bottom: 1px solid $color-gray-02;
}
@include dark-theme {
border-bottom: 1px solid $color-gray-75;
}
}
.module-document-list-item__content {
@include button-reset;
width: 100%;
height: 100%;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-document-list-item__icon {
flex-shrink: 0;
width: 48px;
height: 48px;
@include color-svg('../images/file.svg', $color-gray-45);
}
.module-document-list-item__metadata {
display: inline-flex;
flex-direction: column;
flex-grow: 1;
flex-shrink: 0;
margin-left: 8px;
margin-right: 8px;
}
.module-document-list-item__file-size {
display: inline-block;
margin-top: 8px;
@include font-body-2;
}
.module-document-list-item__date {
display: inline-block;
flex-shrink: 0;
}
// Module: Media Grid Item
.module-media-grid-item {
@include button-reset;
height: 94px;
width: 94px;
background-color: $color-gray-05;
margin-right: 4px;
margin-bottom: 4px;
position: relative;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-media-grid-item__image {
height: 94px;
width: 94px;
object-fit: cover;
}
.module-media-grid-item__icon {
position: absolute;
top: 15px;
bottom: 15px;
left: 15px;
right: 15px;
}
.module-media-grid-item__icon-image {
@include color-svg('../images/image.svg', $color-gray-45);
}
.module-media-grid-item__image-container {
height: 94px;
width: 94px;
object-fit: cover;
position: relative;
}
.module-media-grid-item__circle-overlay {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 42px;
height: 42px;
background-color: $color-white;
border-radius: 21px;
}
.module-media-grid-item__play-overlay {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
height: 24px;
width: 24px;
@include color-svg(
'../images/icons/v2/play-solid-24.svg',
$ultramarine-ui-light
);
}
.module-media-grid-item__icon-video {
@include color-svg('../images/movie.svg', $color-gray-45);
}
.module-media-grid-item__icon-generic {
@include color-svg('../images/file.svg', $color-gray-45);
}
/* Module: Empty State*/
.module-empty-state {
display: flex;
justify-content: center;
align-items: center;
flex-grow: 1;
@include font-title-1;
color: $color-gray-45;
}
// Module: Conversation Hero
.module-conversation-hero {
padding: 32px 0 28px 0;
text-align: center;
&__avatar {
margin-bottom: 12px;
}
&__profile-name {
@include font-title-2;
margin-bottom: 2px;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&__with {
@include font-body-2;
margin-bottom: 16px;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
&__membership {
@include font-body-2;
padding: 0 16px;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
&__name {
@include font-body-2-bold;
}
}
}
// Module: Message Request Actions
.module-message-request-actions {
padding: 8px 16px 12px 16px;
@include light-theme {
background: $color-white;
}
@include dark-theme {
background: $color-gray-95;
}
&__message {
@include font-body-2;
text-align: center;
margin-bottom: 12px;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
&__name {
@include font-body-2-bold;
}
&__learn-more {
text-decoration: none;
}
}
&__buttons {
display: flex;
flex-direction: row;
justify-content: center;
&__button {
border: none;
border-radius: 4px;
min-width: 80px;
height: 36px;
padding: 0 14px;
text-align: center;
&:focus {
outline: none;
@include keyboard-mode {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
@include font-body-1-bold;
@include light-theme {
background-color: $color-gray-05;
}
@include dark-theme {
background-color: $color-gray-75;
}
&:not(:last-of-type) {
margin-right: 8px;
}
&--deny {
color: $color-accent-red;
}
&--accept {
color: $color-accent-blue;
}
}
}
}
// Module: Avatar
.module-avatar {
position: relative;
vertical-align: middle;
display: inline-block;
border-radius: 50%;
user-select: none;
img {
object-fit: cover;
border-radius: 50%;
}
}
.module-avatar-button {
@include button-reset;
// Ensures that the border of the item sticks tight to the inner contents
width: 100%;
line-height: 0;
border-radius: 50%;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
.module-avatar__label {
width: 100%;
text-align: center;
font-weight: bold;
text-transform: uppercase;
@include light-theme {
color: $color-white;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-avatar__icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.module-avatar__icon--group {
@include light-theme {
@include color-svg('../images/icons/v2/group-outline-40.svg', $color-white);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/group-outline-40.svg',
$color-gray-05
);
}
}
.module-avatar__icon--direct {
@include light-theme {
@include color-svg(
'../images/icons/v2/profile-outline-40.svg',
$color-white
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/profile-outline-40.svg',
$color-gray-05
);
}
}
.module-avatar--28 {
min-width: 28px;
height: 28px;
width: 28px;
img {
height: 28px;
width: 28px;
}
}
.module-avatar__icon--28.module-avatar__icon--group {
height: 20px;
width: 20px;
@include light-theme {
@include color-svg('../images/icons/v2/group-outline-20.svg', $color-white);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-05
);
}
}
.module-avatar__icon--28.module-avatar__icon--direct {
height: 20px;
width: 20px;
@include light-theme {
@include color-svg(
'../images/icons/v2/profile-outline-20.svg',
$color-white
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/profile-outline-20.svg',
$color-gray-05
);
}
}
.module-avatar__label--28 {
font-size: 14px;
line-height: 28px;
}
.module-avatar--32 {
height: 32px;
width: 32px;
min-width: 32px;
img {
height: 32px;
width: 32px;
}
}
.module-avatar__icon--32.module-avatar__icon--group {
height: 20px;
width: 20px;
@include light-theme {
@include color-svg('../images/icons/v2/group-outline-20.svg', $color-white);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-05
);
}
}
.module-avatar__icon--32.module-avatar__icon--direct {
height: 20px;
width: 20px;
@include light-theme {
@include color-svg(
'../images/icons/v2/profile-outline-20.svg',
$color-white
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/profile-outline-20.svg',
$color-gray-05
);
}
}
.module-avatar__label--32 {
font-size: 14px;
line-height: 32px;
}
.module-avatar--52 {
height: 52px;
width: 52px;
min-width: 52px;
img {
height: 52px;
width: 52px;
}
}
.module-avatar__label--52 {
width: 52px;
font-size: 22px;
letter-spacing: 0.19px;
line-height: 52px;
}
.module-avatar__icon--52 {
height: 38px;
width: 38px;
}
.module-avatar__icon--52.module-avatar__icon--direct {
height: 42px;
width: 42px;
}
.module-avatar--80 {
height: 80px;
width: 80px;
min-width: 80px;
img {
height: 80px;
width: 80px;
}
}
.module-avatar__label--80 {
width: 80px;
font-size: 40px;
line-height: 80px;
}
.module-avatar__icon--80 {
height: 58px;
width: 58px;
}
.module-avatar__icon--80.module-avatar__icon--direct {
height: 62px;
width: 62px;
}
.module-avatar--96 {
height: 96px;
width: 96px;
min-width: 96px;
img {
height: 96px;
width: 96px;
}
}
.module-avatar__label--96 {
width: 96px;
font-size: 48px;
line-height: 96px;
}
.module-avatar__icon--96 {
height: 70px;
width: 70px;
}
.module-avatar--112 {
height: 112px;
width: 112px;
min-width: 112px;
img {
height: 112px;
width: 112px;
}
}
.module-avatar__label--112 {
width: 112px;
font-size: 56px;
line-height: 112px;
}
.module-avatar__icon--112 {
height: 81px;
width: 81px;
}
.module-avatar__icon--112.module-avatar__icon--direct {
height: 87px;
width: 87px;
}
.module-avatar__icon--note-to-self {
width: 70%;
height: 70%;
@include light-theme {
@include color-svg('../images/note-28.svg', $color-white);
}
@include dark-theme {
@include color-svg('../images/note-28.svg', $color-gray-05);
}
}
.module-avatar--no-image {
@include light-theme {
background-color: $color-conversation-grey;
}
@include dark-theme {
background-color: $color-conversation-grey-shade;
}
}
.module-avatar__spinner-container {
padding: 4px;
}
.module-avatar--signal-blue {
background-color: $ultramarine-ui-light;
}
@each $color, $value in $conversation-colors {
.module-avatar--#{$color} {
@include light-theme {
background-color: $value;
}
}
}
@each $color, $value in $conversation-colors-shade {
.module-avatar--#{$color} {
@include dark-theme {
background-color: $value;
}
}
}
// Module: Main Header
.module-main-header {
-webkit-app-region: var(--draggable-app-region);
height: calc(#{$header-height} + var(--title-bar-drag-area-height));
width: 100%;
padding-left: 16px;
padding-right: 16px;
padding-top: var(--title-bar-drag-area-height);
display: flex;
flex-direction: row;
align-items: center;
& > * {
margin-right: 12px;
&:last-child {
margin-right: 0;
}
}
&__avatar {
-webkit-app-region: no-drag;
}
&__search {
flex-grow: 1;
position: relative;
display: flex;
flex-direction: row;
-webkit-app-region: no-drag;
&__input {
flex-grow: 1;
height: 28px;
padding-left: 30px;
padding-right: 5px;
border-radius: 14px;
border: none;
@include font-body-2;
@include light-theme {
background-color: $color-gray-05;
color: $color-gray-90;
border: solid 1px $color-gray-02;
}
@include dark-theme {
color: $color-gray-05;
background-color: $color-gray-95;
border: solid 1px $color-gray-80;
}
&:placeholder {
color: $color-gray-45;
}
&:focus {
border: solid 1px $ultramarine-ui-light;
outline: none;
}
&--with-text {
padding-right: 30px;
}
&--in-conversation {
padding-left: 50px;
}
}
&__icon {
position: absolute;
left: 8px;
top: 6px;
height: 16px;
width: 16px;
cursor: text;
@include light-theme {
@include color-svg('../images/icons/v2/search-16.svg', $color-gray-75);
}
@include dark-theme {
@include color-svg('../images/icons/v2/search-16.svg', $color-gray-25);
}
}
&__in-conversation-pill {
position: absolute;
left: 3px;
top: 3px;
bottom: 3px;
border-radius: 14px;
width: 42px;
display: flex;
flex-direction: row;
align-items: center;
// Overriding some default button styling
border: none;
padding: 0;
outline: none;
@include light-theme {
background-color: $color-gray-15;
}
@include dark-theme {
background-color: $color-gray-75;
}
&__avatar-container {
margin-left: 4px;
height: 16px;
width: 16px;
border-radius: 8px;
background-color: $ultramarine-ui-light;
}
&__avatar {
height: 16px;
width: 16px;
@include light-theme {
@include color-svg(
'../images/icons/v2/profile-circle-outline-24.svg',
$color-white
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/profile-circle-solid-24.svg',
$color-gray-05
);
}
}
&__x-button {
margin-left: 2px;
height: 16px;
width: 16px;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-25);
}
}
}
&__cancel-icon {
position: absolute;
right: 8px;
top: 5px;
height: 18px;
width: 18px;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-25);
}
}
}
&__compose-icon {
$icon: '../images/icons/v2/compose-outline-24.svg';
width: 24px;
height: 24px;
-webkit-app-region: no-drag;
@include light-theme {
@include color-svg($icon, $color-gray-90);
}
@include dark-theme {
@include color-svg($icon, $color-gray-02);
}
&:focus {
@include color-svg($icon, $ultramarine-ui-light);
}
}
}
// Module: Image
.module-image {
position: relative;
display: inline-block;
margin: 1px;
vertical-align: middle;
overflow: hidden;
}
.module-image--not-downloaded {
align-items: center;
display: flex;
justify-content: center;
i {
align-items: center;
display: flex;
justify-content: center;
border-radius: 48px;
height: 48px;
width: 48px;
@include light-theme {
background-color: $color-gray-65;
}
@include dark-theme {
background-color: $color-gray-75;
}
&:after {
content: '';
height: 17px;
width: 17px;
@include color-svg('../images/icons/v2/arrow-down-24.svg', $color-white);
}
}
&:hover {
i {
background-color: $color-black;
}
}
&:focus {
i {
background-color: $color-gray-75;
border: 4px solid $ultramarine-ui-light;
box-sizing: border-box;
outline: none;
}
}
}
.module-image__download-pending {
position: relative;
&--spinner-container {
align-items: center;
display: flex;
height: 100%;
justify-content: center;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
&--spinner {
background-color: $color-gray-75;
border-radius: 48px;
height: 48px;
width: 48px;
.module-image-spinner {
&__container {
margin: 12px auto;
}
&__arc {
background-color: $color-gray-75;
}
&__circle {
background-color: $color-white;
}
@include dark-theme {
&__arc {
background-color: $color-gray-75;
}
}
}
}
}
.module-image--with-background {
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-black;
}
}
.module-image__caption-icon {
position: absolute;
top: 6px;
left: 6px;
}
.module-image--soft-corners {
border-radius: 4px;
}
.module-image--curved-top-left {
border-top-left-radius: 16px;
}
.module-image--curved-top-right {
border-top-right-radius: 16px;
}
.module-image--curved-bottom-left {
border-bottom-left-radius: 16px;
}
.module-image--curved-bottom-right {
border-bottom-right-radius: 16px;
}
.module-image--small-curved-top-left {
border-top-left-radius: 10px;
}
.module-image__border-overlay {
@include button-reset;
width: 100%;
cursor: inherit;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 2;
}
.module-image__border-overlay--with-click-handler {
cursor: pointer;
}
.module-image__border-overlay--with-border {
@include light-theme {
box-shadow: inset 0px 0px 0px 1px $color-black-alpha-20;
}
@include dark-theme {
box-shadow: inset 0px 0px 0px 1px $color-white-alpha-20;
}
}
// Only if it's a sticker do we put the outline inside it
.module-message--selected
.module-message__container--with-sticker
.module-image__border-overlay {
@include mouse-mode {
top: 1px;
bottom: 1px;
left: 1px;
right: 1px;
border-radius: 10px;
animation: message--mouse-selected 1s $ease-out-expo;
}
}
.module-message:focus
.module-message__container--with-sticker
.module-image__border-overlay {
@include keyboard-mode {
top: 1px;
bottom: 1px;
left: 1px;
right: 1px;
border-radius: 10px;
box-shadow: 0 0 0 3px $ultramarine-ui-light;
}
}
button.module-image__border-overlay:focus {
@include keyboard-mode {
box-shadow: inset 0px 0px 0px 2px $ultramarine-ui-light;
}
}
.module-image__border-overlay--dark {
background-color: $color-black-alpha-20;
}
.module-image__loading-placeholder {
display: inline-flex;
flex-direction: row;
align-items: center;
@include light-theme {
background-color: $color-black-alpha-20;
}
@include dark-theme {
background-color: $color-white-alpha-20;
}
}
.module-image__image {
object-fit: cover;
// redundant with attachment-container, but we get cursor flashing on move otherwise
cursor: pointer;
}
.module-image__bottom-overlay {
height: 48px;
background-image: linear-gradient(
to bottom,
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0) 9%,
rgba(0, 0, 0, 0.02) 17%,
rgba(0, 0, 0, 0.05) 24%,
rgba(0, 0, 0, 0.08) 31%,
rgba(0, 0, 0, 0.12) 37%,
rgba(0, 0, 0, 0.16) 44%,
rgba(0, 0, 0, 0.2) 50%,
rgba(0, 0, 0, 0.24) 56%,
rgba(0, 0, 0, 0.28) 63%,
rgba(0, 0, 0, 0.32) 69%,
rgba(0, 0, 0, 0.35) 76%,
rgba(0, 0, 0, 0.38) 83%,
rgba(0, 0, 0, 0.4) 91%,
rgba(0, 0, 0, 0.4)
);
position: absolute;
bottom: 0;
z-index: 1;
left: 0;
right: 0;
}
.module-image__play-overlay__circle {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 48px;
height: 48px;
background-color: $color-white;
border-radius: 24px;
}
.module-image__play-overlay__icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
height: 24px;
width: 24px;
@include color-svg(
'../images/icons/v2/play-solid-24.svg',
$ultramarine-ui-light
);
}
.module-image__text-container {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 3;
// This allows click-through to the overlay button behind it
pointer-events: none;
color: $color-white;
@include font-body-1;
text-align: center;
}
.module-image__close-button {
@include button-reset;
position: absolute;
top: 5px;
right: 5px;
width: 16px;
height: 16px;
z-index: 2;
background-image: url('../images/x-shadow-16.svg');
@include keyboard-mode {
&:focus {
outline: 2px solid $ultramarine-ui-light;
}
}
}
// Module: Image Grid
.module-image-grid {
display: inline-flex;
flex-direction: row;
align-items: center;
margin: -1px;
}
.module-image-grid--one-image {
margin-bottom: -5px;
}
.module-image-grid--with-sticker {
padding: 8px;
}
.module-image-grid__column {
display: inline-flex;
flex-direction: column;
align-items: center;
}
.module-image-grid__row {
display: inline-flex;
flex-direction: row;
align-items: center;
flex-grow: 1;
}
// Module: Typing Animation
.module-typing-animation {
display: inline-flex;
flex-directin: row;
align-items: center;
height: 8px;
width: 38px;
padding-left: 1px;
padding-right: 1px;
}
.module-typing-animation__dot {
border-radius: 50%;
height: 6px;
width: 6px;
opacity: 0.4;
@include light-theme {
background-color: $color-gray-60;
}
@include dark-theme {
background-color: $color-white;
}
@include ios-theme {
background-color: $color-gray-60;
}
}
.module-typing-animation__dot--light {
border-radius: 50%;
height: 6px;
width: 6px;
opacity: 0.4;
background-color: $color-white;
@include ios-theme {
background-color: $color-gray-60;
}
}
@keyframes typing-animation-first {
0% {
opacity: 0.4;
}
20% {
transform: scale(1.3);
opacity: 1;
}
40% {
opacity: 0.4;
}
}
@keyframes typing-animation-second {
10% {
opacity: 0.4;
}
30% {
transform: scale(1.3);
opacity: 1;
}
50% {
opacity: 0.4;
}
}
@keyframes typing-animation-third {
20% {
opacity: 0.4;
}
40% {
transform: scale(1.3);
opacity: 1;
}
60% {
opacity: 0.4;
}
}
.module-typing-animation__dot--first {
animation: typing-animation-first 1600ms ease infinite;
}
.module-typing-animation__dot--second {
animation: typing-animation-second 1600ms ease infinite;
}
.module-typing-animation__dot--third {
animation: typing-animation-third 1600ms ease infinite;
}
.module-typing-animation__spacer {
flex-grow: 1;
}
// Module: Attachments
.module-attachments__header {
height: 24px;
position: relative;
}
.module-attachments__close-button {
@include button-reset;
position: absolute;
top: 8px;
right: 16px;
width: 20px;
height: 20px;
z-index: 2;
@include color-svg('../images/icons/v2/x-24.svg', $color-black);
@include keyboard-mode {
&:focus {
@include color-svg('../images/icons/v2/x-24.svg', $ultramarine-ui-light);
}
}
}
.module-attachments__rail {
margin-top: 12px;
margin-left: 12px;
padding-right: 12px;
overflow-x: scroll;
max-height: 142px;
white-space: nowrap;
overflow-y: hidden;
margin-bottom: 6px;
}
// Module: Staged Generic Attachment
.module-staged-generic-attachment {
height: 120px;
width: 120px;
margin: 1px;
display: inline-block;
position: relative;
border-radius: 4px;
vertical-align: middle;
white-space: nowrap;
@include light-theme {
box-shadow: inset 0px 0px 0px 1px $color-black-alpha-20;
background-color: $color-gray-05;
}
@include dark-theme {
box-shadow: inset 0px 0px 0px 1px $color-gray-45;
background-color: $color-gray-75;
color: $color-gray-02;
}
}
.module-staged-generic-attachment__close-button {
@include button-reset;
position: absolute;
top: 5px;
right: 5px;
width: 16px;
height: 16px;
z-index: 2;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-black);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-45);
}
}
.module-staged-generic-attachment__icon {
margin-top: 30px;
background: url('../images/file-gradient.svg') no-repeat center;
height: 44px;
width: 56px;
margin-left: 32px;
margin-right: 32px;
margin-bottom: -4px;
// So we can center the extension text inside this icon
display: flex;
flex-direction: row;
align-items: center;
}
.module-staged-generic-attachment__icon__extension {
font-size: 10px;
line-height: 13px;
letter-spacing: 0.1px;
text-transform: uppercase;
// Along with flow layout in parent item, centers text
text-align: center;
width: 25px;
margin-left: auto;
margin-right: auto;
// We don't have much room for text here, cut it off without ellipse
overflow-x: hidden;
white-space: nowrap;
text-overflow: clip;
color: $color-gray-90;
}
.module-staged-generic-attachment__filename {
@include font-caption;
margin: 7px;
margin-top: 5px;
text-align: center;
overflow: hidden;
height: 2.4em;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
text-overflow: ellipsis;
}
// Module: Caption Editor
.module-caption-editor {
background-color: $color-black;
z-index: 20;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
display: flex;
flex-direction: column;
height: 100%;
}
.module-caption-editor__close-button {
z-index: 21;
cursor: pointer;
position: absolute;
top: 12px;
right: 16px;
width: 30px;
height: 30px;
z-index: 2;
@include color-svg('../images/icons/v2/x-24.svg', $color-white);
}
.module-caption-editor__media-container {
flex-grow: 1;
flex-shrink: 1;
background-color: $color-black;
text-align: center;
margin: 50px;
overflow: hidden;
height: 100%;
}
.module-caption-editor__image {
width: 100%;
height: 100%;
object-fit: contain;
flex-grow: 1;
flex-shrink: 1;
}
.module-caption-editor__video {
max-width: 100%;
max-height: 100%;
object-fit: contain;
flex-grow: 1;
flex-shrink: 1;
}
.module-caption-editor__placeholder {
width: 100%;
height: 100%;
object-fit: contain;
flex-grow: 1;
flex-shrink: 1;
}
.module-caption-editor__bottom-bar {
flex-grow: 0;
flex-shrink: 0;
height: 52px;
padding: 8px;
display: inline-flex;
flex-direction: row;
align-items: middle;
margin-left: auto;
margin-right: auto;
}
.module-caption-editor__input-container {
position: relative;
}
.module-caption-editor__caption-input {
height: 36px;
width: 40em;
color: $color-white;
border: 1px solid $color-white;
border-radius: 18px;
background-color: $color-black;
padding: 9px;
padding-left: 12px;
padding-right: 65px;
&:placeholder {
color: $color-white-alpha-80;
}
&:focus {
border: 1px solid $ultramarine-ui-light;
outline: none;
}
}
.module-caption-editor__save-button {
@include button-reset;
position: absolute;
background-color: $ultramarine-ui-light;
color: $color-white;
height: 28px;
border-radius: 15px;
padding: 5px;
padding-left: 12px;
padding-right: 12px;
right: 4px;
top: 4px;
}
// Module: Staged Placeholder Attachment
.module-staged-placeholder-attachment {
@include button-reset;
margin: 1px;
border-radius: 4px;
height: 120px;
width: 120px;
display: inline-block;
vertical-align: middle;
position: relative;
@include light-theme {
border: 1px solid $color-gray-25;
&:hover {
background: $color-gray-05;
}
}
@include keyboard-mode {
&:focus {
box-shadow: inset 0 0 0 2px $ultramarine-ui-light;
}
}
@include dark-theme {
border: 1px solid $color-gray-60;
&:hover {
background: $color-gray-75;
}
}
@include dark-keyboard-mode {
&:focus {
box-shadow: inset 0 0 0 2px $ultramarine-ui-light;
}
}
}
.module-staged-placeholder-attachment__plus-icon {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
height: 36px;
width: 36px;
@include light-theme {
@include color-svg('../images/icons/v2/plus-24.svg', $color-gray-45);
}
@include dark-theme {
@include color-svg('../images/icons/v2/plus-24.svg', $color-gray-60);
}
}
// Module: Staged Link Preview
.module-staged-link-preview {
position: relative;
display: flex;
flex-direction: row;
align-items: stretch;
min-height: 65px;
}
.module-staged-link-preview--is-loading {
align-items: center;
}
.module-staged-link-preview__loading {
text-align: center;
flex-grow: 1;
flex-shrink: 1;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-staged-link-preview__icon-container {
margin-right: 8px;
}
.module-staged-link-preview__content {
display: flex;
flex-direction: column;
margin-right: 20px;
}
.module-staged-link-preview__title {
@include font-body-1-bold;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.module-staged-link-preview__description {
@include font-body-1;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.module-staged-link-preview__footer {
@include font-body-2;
display: flex;
flex-flow: row wrap;
align-items: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
> *:not(:first-child) {
display: flex;
&:before {
content: '';
font-size: 50%;
margin-left: 0.2rem;
margin-right: 0.2rem;
}
}
}
.module-staged-link-preview__location {
@include font-body-2;
text-transform: lowercase;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-staged-link-preview__close-button {
@include button-reset;
position: absolute;
top: 0px;
right: 0px;
height: 16px;
width: 16px;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include keyboard-mode {
&:focus {
@include color-svg('../images/icons/v2/x-24.svg', $ultramarine-ui-light);
}
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-25);
}
@include dark-keyboard-mode {
&:focus {
@include color-svg('../images/icons/v2/x-24.svg', $ultramarine-ui-dark);
}
}
}
// Module: Spinner
.module-spinner__container {
margin-left: auto;
margin-right: auto;
position: relative;
height: 56px;
width: 56px;
}
.module-spinner__circle {
position: absolute;
top: 0;
left: 0;
z-index: 2;
height: 100%;
width: 100%;
@include color-svg('../images/spinner-track-56.svg', $color-white-alpha-40);
}
.module-spinner__arc {
position: absolute;
top: 0;
left: 0;
z-index: 3;
height: 100%;
width: 100%;
animation: spinner-arc-animation 1000ms linear infinite;
@include light-theme {
@include color-svg('../images/spinner-56.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/spinner-56.svg', $color-gray-05);
}
}
@keyframes spinner-arc-animation {
0% {
transform: rotate(0deg);
}
50% {
transform: rotate(180deg);
}
100% {
transform: rotate(360deg);
}
}
// In these --small and --mini sizes, we're exploding our @color-svg mixin so we don't
// have to duplicate our background colors for the dark/ios/size matrix.
.module-spinner__container--small {
height: 24px;
width: 24px;
}
.module-spinner__circle--small {
-webkit-mask: url('../images/spinner-track-24.svg') no-repeat center;
-webkit-mask-size: 100%;
}
.module-spinner__arc--small {
-webkit-mask: url('../images/spinner-24.svg') no-repeat center;
-webkit-mask-size: 100%;
}
.module-spinner__circle--incoming {
background-color: $color-white-alpha-40;
}
.module-spinner__arc--incoming {
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-02;
}
@include ios-theme {
background-color: $color-gray-60;
}
@include ios-dark-theme {
background-color: $color-gray-02;
}
}
.module-spinner__circle--outgoing {
@include dark-theme {
background-color: $color-white-alpha-40;
}
@include ios-theme {
background-color: $color-white-alpha-40;
}
@include ios-dark-theme {
background-color: $color-white-alpha-40;
}
}
.module-spinner__arc--outgoing {
@include dark-theme {
background-color: $color-gray-05;
}
@include ios-theme {
background-color: $color-white;
}
@include ios-dark-theme {
background-color: $color-gray-05;
}
}
.module-spinner__circle--on-avatar {
background-color: $color-white-alpha-40;
}
.module-spinner__circle--on-background {
@include light-theme {
background-color: $color-gray-05;
}
@include dark-theme {
background-color: $color-gray-75;
}
}
.module-spinner__arc--on-background {
@include light-theme {
background-color: $color-gray-60;
}
@include dark-theme {
background-color: $color-gray-25;
}
}
.module-spinner__circle--on-progress-dialog {
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-80;
}
}
.module-spinner__arc--on-progress-dialog {
background-color: $ultramarine-ui-light;
}
.module-spinner__arc--on-avatar {
background-color: $color-white;
}
// Module: Highlighted Message Body
.module-message-body__highlight {
font-weight: bold;
}
.module-message-body__at-mention {
background-color: $color-black-alpha-40;
border-radius: 4px;
cursor: pointer;
display: inline-block;
padding-left: 4px;
padding-right: 4px;
border: 1px solid transparent;
&:focus {
border: 1px solid $color-black;
outline: none;
}
}
.module-message-body__at-mention--incoming {
@include ios-theme {
@include light-theme {
background-color: $color-gray-20;
}
}
@include ios-dark-theme {
background-color: $color-gray-60;
}
}
.module-message-body__at-mention--outgoing {
@include light-theme {
background-color: $color-gray-20;
}
@include dark-theme {
background-color: $color-gray-60;
}
@include ios-theme {
background-color: $ultramarine-brand-dark;
}
}
// Module: Reaction Viewer
.module-reaction-viewer {
width: 320px;
height: 320px;
border-radius: 8px;
display: flex;
flex-direction: column;
@include popper-shadow();
@include light-theme() {
background: $color-white;
}
@include dark-theme() {
background: $color-gray-75;
}
&__header {
width: 100%;
min-height: 44px;
padding: 0px 8px;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
overflow-x: auto;
&__button {
min-height: 28px;
border: none;
border-radius: 18px;
padding: 0px 8px;
display: flex;
justify-content: center;
align-items: center;
flex-basis: 45px;
flex-shrink: 0;
&:not(:first-of-type) {
margin-left: 4px;
}
&:focus {
outline: none;
}
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
background: none;
&--selected {
@include light-theme() {
background: $color-gray-05;
}
@include dark-theme() {
background: $color-gray-60;
}
}
&__count,
&__all {
@include font-body-2-bold();
white-space: nowrap;
@include light-theme() {
color: $color-gray-90;
}
@include dark-theme() {
color: $color-gray-05;
}
}
&__count {
margin-left: 4px;
}
}
}
&__body {
flex-grow: 1;
padding: 0 16px;
overflow: auto;
&__row {
margin-top: 12px;
min-height: 32px;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
&:last-of-type {
margin-bottom: 12px;
}
&__avatar {
min-width: 32px;
flex-shrink: 1;
}
&__name {
@include font-body-1-bold();
flex-grow: 1;
margin-left: 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@include light-theme() {
color: $color-gray-90;
}
@include dark-theme() {
color: $color-gray-05;
}
}
&__emoji {
width: 18px;
flex-shrink: 1;
}
}
}
}
// Module: Reaction Picker
@keyframes module-reaction-picker__background-fade {
from {
background: transparent;
}
to {
// This color is the same in both light and dark themes
background: rgba($color-black, 0.8);
}
}
@keyframes module-reaction-picker__emoji-fade {
from {
transform: translate3d(0, 24px, 0);
opacity: 0;
}
to {
transform: translate3d(0, 0, 0);
opacity: 1;
}
}
.module-reaction-picker {
width: 320px;
height: 56px;
border-radius: 30px;
position: relative;
margin: 4px 0;
z-index: 2;
animation: {
name: module-reaction-picker__background-fade;
duration: 400ms;
timing-function: $ease-out-expo;
fill-mode: forwards;
}
&__emoji-btn {
@include button-reset;
display: flex;
min-width: 52px;
min-height: 52px;
border-radius: 52px;
position: absolute;
top: 2px;
@for $i from 0 through 6 {
&:nth-of-type(#{$i + 1}) {
left: 2px + ($i * 44px);
// Prevent animation jank
opacity: 0;
animation: {
name: module-reaction-picker__emoji-fade;
duration: 400ms;
timing-function: $ease-out-expo;
delay: #{$i * 10ms};
fill-mode: forwards;
}
}
}
transition: background 400ms $ease-out-expo;
&--selected {
// This color is the same in both light and dark themes
background: rgba($color-white, 0.3);
}
&--more {
@include light-theme {
background: url('../images/any-emoji-32-light.svg') no-repeat center;
}
@include dark-theme {
background: url('../images/any-emoji-32-dark.svg') no-repeat center;
}
&::after {
content: '';
display: block;
width: 52px;
height: 52px;
opacity: 0;
transition: opacity 400ms $ease-out-expo;
@include light-theme {
background: url('../images/any-emoji-32-light-hover.svg') no-repeat
center;
}
@include dark-theme {
background: url('../images/any-emoji-32-dark-hover.svg') no-repeat
center;
}
}
&:hover::after {
opacity: 1;
}
}
@include keyboard-mode {
&:focus:before {
content: '';
display: block;
width: 4px;
height: 4px;
background: $ultramarine-ui-light;
border-radius: 2px;
position: absolute;
bottom: 4px;
left: calc(50% - 2px);
}
}
$emoji-btn: &;
&__emoji {
position: absolute;
left: 2px;
top: 2px;
transform-origin: center;
$scale: 32 / 48;
transform: scale3d($scale, $scale, $scale);
transition: transform 400ms $ease-out-expo;
#{$emoji-btn}:hover &,
.keyboard-mode #{$emoji-btn}:focus & {
transform: scale3d(1, 1, 1) translate3d(0, -24px, 0);
z-index: 1;
}
}
}
}
// Module: Calling
.module-calling {
&__container {
align-items: center;
background-color: $calling-background-color;
display: flex;
flex-direction: column;
height: 100vh;
justify-content: center;
position: absolute;
width: 100%;
z-index: 2;
}
&__header {
color: #ffffff;
font-style: normal;
padding-bottom: 24px;
padding-top: calc(24px + var(--title-bar-drag-area-height));
text-align: center;
text-shadow: 0px 0px 4px rgba(0, 0, 0, 0.25);
width: 100%;
&--header-name {
font-size: 15px;
font-weight: 600;
letter-spacing: -0.009em;
line-height: 21px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
&__buttons {
bottom: 0;
display: flex;
justify-content: center;
padding-bottom: 32px;
padding-top: 32px;
position: absolute;
text-align: center;
width: 100%;
}
&__background {
align-items: center;
display: flex;
flex-direction: column;
height: 100%;
justify-content: center;
overflow: hidden;
position: relative;
width: 100%;
&--blur {
position: absolute;
background-repeat: no-repeat;
background-size: cover;
background-position: center;
filter: blur(25px);
height: 100%;
position: absolute;
width: 100%;
}
}
&__video-off {
&--icon {
@include color-svg(
'../images/icons/v2/video-off-solid-24.svg',
$color-white
);
height: 24px;
margin-bottom: 8px;
width: 24px;
}
&--text {
color: $color-white;
z-index: 1;
}
&--container {
display: flex;
flex-direction: row;
margin-top: 12px;
.module-calling__video-off--text {
margin-left: 10px;
}
}
}
}
.module-incoming-call {
align-items: center;
background-color: $color-gray-75;
display: flex;
justify-content: space-between;
padding-top: var(--title-bar-drag-area-height);
}
.module-incoming-call__contact {
align-items: center;
display: flex;
min-width: 0;
&--avatar {
margin-bottom: 8px;
margin-left: 16px;
margin-top: 8px;
position: relative;
}
&--name {
align-items: stretch;
display: flex;
flex-direction: column;
margin-left: 12px;
min-width: 0;
}
&--name-header {
@include font-body-1-bold;
color: #ffffff;
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
&--message-text {
@include font-body-2;
color: #ffffff;
}
}
.module-incoming-call__actions {
display: flex;
margin-right: 16px;
}
.module-incoming-call__button {
&--accept-video-as-audio {
background-color: $color-gray-45;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 4px $ultramarine-ui-light;
}
}
@include mouse-mode {
&:hover {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
div {
@include color-svg(
'../images/icons/v2/video-off-solid-24.svg',
$color-white
);
height: 24px;
width: 24px;
}
}
&--accept-video {
background-color: $color-accent-green;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 4px $ultramarine-ui-light;
}
}
@include mouse-mode {
&:hover {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
div {
@include color-svg('../images/icons/v2/video-solid-24.svg', $color-white);
height: 24px;
width: 24px;
}
}
&--accept-audio {
background-color: $color-accent-green;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 4px $ultramarine-ui-light;
}
}
@include mouse-mode {
&:hover {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
div {
@include color-svg(
'../images/icons/v2/phone-right-solid-24.svg',
$color-white
);
height: 24px;
width: 24px;
}
}
&--decline {
background-color: $color-accent-red;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 4px $ultramarine-ui-light;
}
}
@include mouse-mode {
&:hover {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
div {
@include color-svg('../images/icons/v2/phone-down-24.svg', $color-white);
height: 24px;
width: 24px;
}
}
}
.module-incoming-call__button,
.module-calling-button__icon {
align-items: center;
border-radius: 40px;
border: none;
display: flex;
height: 40px;
justify-content: center;
margin-left: 12px;
margin-right: 12px;
outline: none;
width: 40px;
}
.module-calling-button {
$size: 22px;
&__participants {
@include color-svg('../images/icons/v2/group-solid-24.svg', $color-white);
display: inline-block;
height: $size;
width: $size;
&--container {
@include button-reset;
border: none;
color: $color-white;
}
&--shown {
background-color: $color-gray-75;
border-radius: 16px;
padding: 6px 8px;
padding-bottom: 2px;
margin-top: -6px;
margin-right: -8px;
}
&--count {
@include font-body-2-bold;
margin-left: 5px;
vertical-align: top;
}
}
&__settings {
@include color-svg(
'../images/icons/v2/settings-solid-16.svg',
$color-white
);
height: $size;
width: $size;
}
&__grid-view {
@include color-svg(
'../images/icons/v2/grid-view-solid-24.svg',
$color-white
);
height: $size;
width: $size;
}
&__speaker-view {
@include color-svg(
'../images/icons/v2/speaker-view-solid-24.svg',
$color-white
);
height: $size;
width: $size;
}
&__pip {
@include color-svg('../images/icons/v2/pip-minimize-24.svg', $color-white);
height: $size;
width: $size;
}
}
.module-calling-button__icon {
border-radius: 56px;
height: 56px;
width: 56px;
@mixin calling-button-icon($icon, $background-color, $icon-color) {
background-color: $background-color;
div {
@include color-svg($icon, $icon-color);
height: 28px;
width: 28px;
}
}
@mixin calling-button-icon-on($icon) {
@include calling-button-icon($icon, $color-white, $color-gray-75);
}
@mixin calling-button-icon-off($icon) {
@include calling-button-icon($icon, $color-white-alpha-40, $color-white);
backdrop-filter: blur(10px);
}
@mixin calling-button-icon-disabled($icon) {
@include calling-button-icon($icon, $color-gray-45, $color-white);
opacity: 0.2;
}
// If the on/off states seem backwards, it's because this button reflects "is audio
// muted?", not "is audio on?".
&--audio {
$icon: '../images/icons/v2/mic-off-solid-28.svg';
&--on {
@include calling-button-icon-off($icon);
}
&--off {
@include calling-button-icon-on($icon);
}
&--disabled {
@include calling-button-icon-disabled($icon);
}
}
&--video {
$icon: '../images/icons/v2/video-solid-28.svg';
&--on {
@include calling-button-icon-on($icon);
}
&--off {
@include calling-button-icon-off($icon);
}
&--disabled {
@include calling-button-icon-disabled($icon);
}
}
&--hangup {
@include calling-button-icon(
'../images/icons/v2/phone-down-28.svg',
$color-accent-red,
$color-white
);
}
}
@keyframes module-ongoing-call__controls--fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes module-ongoing-call__controls--fade-out {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.module-ongoing-call {
$local-preview-width: 136px;
$local-preview-height: 102px;
&__remote-video-enabled {
background-color: $color-gray-95;
height: 100%;
width: 100%;
}
&__remote-video-disabled {
background-color: $color-gray-95;
height: 100vh;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
&__container {
&--direct {
.module-ongoing-call__header {
position: absolute;
}
.module-ongoing-call__footer {
position: absolute;
}
}
}
&__header {
background: linear-gradient($color-black-alpha-40, transparent);
top: 0;
width: 100%;
z-index: 2;
padding-bottom: 1rem;
}
&__header-message {
font-weight: normal;
font-size: 13px;
line-height: 18px;
letter-spacing: -0.0025em;
}
&__participants {
display: flex;
flex: 1 1 0;
width: 100%;
&__grid {
flex-grow: 1;
position: relative;
}
&__overflow {
flex: 0 0 auto;
position: relative;
margin-left: 16px;
margin-right: 16px;
&__inner {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
max-height: 100%;
overflow-y: scroll;
&::-webkit-scrollbar,
&::-webkit-scrollbar-thumb {
width: 0;
background: transparent;
}
}
& .module-ongoing-call__group-call-remote-participant {
width: 100%;
margin-bottom: 1rem;
}
&__scroll-marker {
$scroll-marker-selector: &;
display: flex;
justify-content: center;
left: 0;
opacity: 1;
position: absolute;
scroll-behavior: smooth;
transition: opacity 200ms ease-out;
width: 100%;
z-index: 1;
&--hidden {
opacity: 0;
}
&__button {
&::before {
@include color-svg(
'../images/icons/v2/arrow-down-24.svg',
$color-white
);
content: '';
display: block;
height: 100%;
width: 100%;
}
background: $color-gray-60;
border-radius: 100%;
border: 0;
box-shadow: 0 0 5px rgba($color-gray-95, 0.5);
height: 28px;
margin: 12px 0;
opacity: 0;
outline: none;
transition: opacity 200ms ease-out;
width: 28px;
}
&--top {
top: 0;
background: linear-gradient(
$calling-background-color,
transparent 20px,
transparent
);
#{$scroll-marker-selector}__button {
transform: rotate(180deg);
}
}
&--bottom {
bottom: 0;
background: linear-gradient(
to top,
$calling-background-color,
transparent 20px,
transparent
);
}
}
&:hover &__scroll-marker__button {
opacity: 1;
}
}
}
&__group-call-remote-participant {
display: flex;
justify-content: center;
position: relative;
line-height: 0;
overflow: hidden;
border-radius: 5px;
transition: top 200ms linear, left 200ms linear, width 200ms linear,
height 200ms linear;
&__remote-video {
// The background-color is seen while the video loads.
background-color: $color-gray-75;
}
&__blocked {
@include color-svg('../images/icons/v2/block-24.svg', $color-white);
height: 24px;
margin-bottom: 16px;
width: 24px;
&--info {
@include button-reset;
background-color: $color-gray-75;
border-radius: 16px;
color: $color-white;
line-height: 16px;
padding: 3px 10px;
}
&--modal-title {
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
}
}
&--title {
@include font-caption;
background: linear-gradient(
180deg,
transparent,
$color-black-alpha-60 100%
);
bottom: 0;
display: flex;
padding: 6px;
position: absolute;
width: 100%;
z-index: 2;
}
&--contact-name {
color: $color-white;
margin-right: 20px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
&--audio-muted::after {
@include color-svg(
'../images/icons/v2/mic-off-solid-28.svg',
$color-white
);
content: '';
height: 14px;
position: absolute;
right: 6px;
width: 14px;
z-index: 1;
}
}
&__local-preview-fullsize {
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
&__footer {
background: linear-gradient(transparent, $color-black-alpha-40);
bottom: 0;
display: flex;
justify-content: space-between;
width: 100%;
z-index: 2;
&__actions {
align-items: center;
display: flex;
flex-grow: 1;
justify-content: center;
}
// This layout-only element is not ideal, but lets us keep the actions centered until
// until they'd overlap with the video, at which point they start to move.
&__local-preview-offset {
flex: 1 0;
max-width: $local-preview-width;
visibility: hidden;
}
&__local-preview {
border-radius: 5px;
display: flex;
height: $local-preview-height;
margin: 2px 16px 16px 0;
overflow: hidden;
position: relative;
width: $local-preview-width;
&__video {
// The background-color is seen while the video loads.
background-color: $color-gray-75;
height: 100%;
transform: rotateY(180deg);
width: 100%;
}
&--audio-muted::before {
@include color-svg(
'../images/icons/v2/mic-off-solid-28.svg',
$color-white
);
bottom: 6px;
content: '';
height: 14px;
position: absolute;
right: 6px;
width: 14px;
z-index: 1;
}
}
}
&__controls--fadeIn {
animation: {
name: module-ongoing-call__controls--fade-in;
duration: 400ms;
timing-function: $ease-out-expo;
fill-mode: forwards;
}
}
&__controls--fadeOut {
animation: {
name: module-ongoing-call__controls--fade-out;
duration: 1200ms;
timing-function: $ease-out-expo;
fill-mode: forwards;
}
}
&__toast {
@include font-body-1-bold;
background-color: $color-gray-75;
border-radius: 8px;
color: $color-white;
max-width: 80%;
opacity: 1;
padding: 12px;
position: absolute;
text-align: center;
top: 12px;
transition: top 200ms ease-out, opacity 200ms ease-out;
user-select: none;
z-index: 1;
&--hidden {
opacity: 0;
top: 5px;
}
}
}
.module-calling-tools {
display: flex;
justify-content: flex-end;
position: absolute;
top: calc(24px + var(--title-bar-drag-area-height));
width: 100%;
&__button {
margin-right: 25px;
}
}
.module-calling-lobby {
&__actions {
align-items: flex-start;
display: flex;
flex-direction: row;
flex: 0 0 100px;
}
&__button {
margin-left: 8px;
margin-right: 8px;
width: 160px;
&[disabled] {
opacity: 0.5;
}
}
// The dimensions of this element are set by JavaScript.
&__local-preview {
$transition: 200ms ease-out;
@include font-body-2;
border-radius: 8px;
color: $color-white;
display: flex;
flex-direction: column;
max-height: 100%;
max-width: 100%;
overflow: hidden;
position: relative;
transition: width $transition, height $transition;
&-container {
align-items: center;
display: flex;
flex-direction: column;
flex: 1 1 auto;
justify-content: center;
margin: 24px;
overflow: hidden;
width: 90%;
}
&__video-on {
background-color: $color-gray-80;
display: block;
flex-grow: 1;
object-fit: contain;
transform: rotateY(180deg);
width: 100%;
height: 100%;
}
&__video-off {
&__icon {
@include color-svg(
'../images/icons/v2/video-off-solid-24.svg',
$color-white
);
height: 24px;
margin-bottom: 8px;
width: 24px;
}
&__text {
z-index: 1;
}
}
}
&__info {
color: $color-white;
margin-bottom: 36px;
margin-top: 12px;
}
}
.module-calling-pip {
backface-visibility: hidden;
background-color: $color-gray-95;
border-radius: 4px;
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.05), 0px 8px 20px rgba(0, 0, 0, 0.3);
cursor: grab;
height: 158px;
position: absolute;
width: 120px;
z-index: 2;
& .module-ongoing-call__group-call-remote-participant {
border-radius: 0;
}
&__video {
&--remote {
align-items: center;
background-color: $color-gray-95;
border-radius: 4px 4px 0 0;
display: flex;
height: 120px; // This height should be kept in sync with <CallingPipRemoteVideo>'s hard-coded height.
justify-content: center;
overflow: hidden;
position: relative;
width: 100%;
.module-ongoing-call__group-call-remote-participant--audio-muted::after {
display: none;
}
// The avatar image can be dragged on Windows.
.module-avatar img {
-webkit-user-drag: none;
-webkit-user-select: none;
}
}
&--local {
bottom: 38px;
height: 32px;
position: absolute;
right: 4px;
transform: rotateY(180deg);
width: 32px;
}
}
&__actions {
align-items: center;
background-color: $color-gray-02;
border-radius: 0 0 4px 4px;
display: flex;
flex-direction: row;
height: 38px;
justify-content: space-around;
@include dark-theme {
background-color: $color-gray-65;
}
}
&__button {
&--hangup {
@include color-svg(
'../images/icons/v2/phone-down-28.svg',
$color-gray-75
);
height: 28px;
width: 28px;
@include dark-theme {
@include color-svg(
'../images/icons/v2/phone-down-28.svg',
$color-gray-15
);
}
}
&--pip {
@include color-svg(
'../images/icons/v2/pip-maximize-24.svg',
$color-gray-75
);
height: 24px;
width: 24px;
@include dark-theme {
@include color-svg(
'../images/icons/v2/pip-maximize-24.svg',
$color-gray-15
);
}
}
}
}
.module-calling-participants-list {
background-color: $color-gray-80;
border-radius: 8px;
color: $color-white;
margin-right: 12px;
margin-top: 54px;
overflow: hidden;
padding: 14px;
width: 280px;
padding-bottom: 0;
&__overlay {
display: flex;
height: 100vh;
justify-content: flex-end;
left: 0;
position: absolute;
top: 0;
width: 100vw;
z-index: 2;
}
&__title {
@include font-body-2-bold;
}
&__contact-icon {
background-color: $color-gray-25;
}
&__list {
height: 100%;
margin-bottom: 0;
margin-left: -14px;
margin-right: -14px;
margin-top: 22px;
overflow: scroll;
padding-bottom: 24px;
padding-left: 14px;
padding-right: 14px;
padding-top: 0;
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-thumb {
border: none;
border-radius: 4px;
background-color: $color-gray-45;
}
&::-webkit-scrollbar-track {
background-color: $color-gray-80;
}
}
&__contact {
@include font-body-1;
align-items: center;
display: flex;
justify-content: space-between;
list-style-type: none;
margin-bottom: 16px;
}
&__name {
display: inline-block;
margin-left: 8px;
max-width: 130px;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
}
&__header {
display: flex;
justify-content: space-between;
}
&__close {
@include button-reset;
@include color-svg('../images/x-shadow-16.svg', $color-gray-15);
height: 16px;
width: 16px;
z-index: 2;
@include keyboard-mode {
&:focus {
outline: 2px solid $ultramarine-ui-light;
}
}
}
&__muted {
&--video {
@include color-svg(
'../images/icons/v2/video-off-solid-28.svg',
$color-white
);
display: inline-block;
margin-left: 18px;
height: 16px;
width: 16px;
}
&--audio {
@include color-svg(
'../images/icons/v2/mic-off-solid-28.svg',
$color-white
);
display: inline-block;
margin-left: 18px;
height: 16px;
width: 16px;
}
}
}
.module-call-need-permission-screen {
align-items: center;
background-color: $color-gray-95;
color: $color-gray-05;
display: flex;
flex-direction: column;
height: 100vh;
justify-content: center;
position: relative;
width: 100%;
&__text {
margin: 2em 1em;
max-width: 400px;
@include font-body-1;
text-align: center;
}
&__button {
padding: 0.5em 1em;
border: 0;
border-radius: 4px;
@include font-body-1-bold;
color: $color-gray-05;
background: $color-gray-65;
}
}
// Module: conversation list
.module-conversation-list {
scroll-behavior: smooth;
&__item {
&--archive-button {
@include button-reset;
@include font-body-1-bold;
height: 64px;
line-height: 64px;
text-align: center;
width: 100%;
@include light-theme {
color: $color-gray-60;
&:hover,
&:focus {
background-color: $color-gray-05;
}
}
@include dark-theme {
color: $color-gray-25;
&:hover,
&:focus {
background-color: $color-gray-75;
}
}
&__archived-count {
@include font-body-2-bold;
padding: 6px;
padding-top: 1px;
padding-bottom: 1px;
border-radius: 10px;
@include light-theme {
color: $color-gray-60;
background-color: $color-gray-05;
}
@include dark-theme {
color: $color-gray-25;
background-color: $color-gray-75;
}
}
}
&--contact-or-conversation {
@include button-reset;
align-items: center;
cursor: inherit;
display: flex;
flex-direction: row;
padding-left: 16px;
padding-right: 16px;
user-select: none;
width: 100%;
&--is-button {
cursor: pointer;
&:disabled {
cursor: inherit;
}
&:hover:not(:disabled),
&:focus:not(:disabled) {
@include light-theme {
background-color: $color-gray-05;
}
@include dark-theme {
background-color: $color-gray-75;
}
}
}
&--is-checkbox {
cursor: pointer;
&--disabled {
cursor: not-allowed;
}
$disabled-selector: '#{&}--disabled';
&:hover:not(#{$disabled-selector}),
&:focus:not(#{$disabled-selector}) {
@include light-theme {
background-color: $color-gray-05;
}
@include dark-theme {
background-color: $color-gray-75;
}
}
}
&--has-unread {
padding-left: 12px;
@include light-theme {
border-left: 4px solid $ultramarine-ui-light;
}
@include dark-theme {
border-left: 4px solid $ultramarine-ui-dark;
}
}
&--is-selected {
@include light-theme {
background-color: $color-gray-15;
}
@include dark-theme {
background-color: $color-gray-65;
}
}
&__avatar-container {
position: relative;
margin-top: 8px;
margin-bottom: 8px;
}
&__unread-count {
text-align: center;
padding-left: 3px;
padding-right: 3px;
position: absolute;
right: -6px;
top: 0px;
@include font-caption-bold;
height: 20px;
min-width: 20px;
line-height: 20px;
border-radius: 10px;
color: $color-white;
@include light-theme {
background-color: $ultramarine-ui-light;
box-shadow: 0px 0px 0px 1px $color-gray-02;
}
@include dark-theme {
background-color: $ultramarine-ui-dark;
box-shadow: 0px 0px 0px 1px $color-gray-90;
}
}
&__content {
flex-grow: 1;
margin-left: 12px;
display: flex;
flex-direction: column;
align-items: stretch;
overflow: hidden;
&--disabled {
opacity: 0.5;
}
&__header {
display: flex;
flex-direction: row;
align-items: center;
&__name {
flex-grow: 1;
flex-shrink: 1;
@include font-body-1-bold;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&__date {
display: inline-block;
flex-shrink: 0;
&--has-unread {
@include font-caption-bold;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&__timestamp {
flex-shrink: 0;
margin-left: 6px;
@include font-caption;
overflow-x: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
&--with-unread {
@include font-caption-bold;
}
}
}
}
&__message {
display: flex;
flex-direction: row;
align-items: center;
&__text {
flex-grow: 1;
flex-shrink: 1;
@include font-body-2;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: left;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
&--has-unread {
@include font-body-2-bold;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&__muted {
display: inline-block;
height: 14px;
margin-right: 4px;
vertical-align: middle;
width: 14px;
@include light-theme {
@include color-svg(
'../images/icons/v2/sound-off-outline-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/sound-off-outline-24.svg',
$color-gray-25
);
}
}
&__message-request {
@include font-body-2-bold;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
&__draft-prefix,
&__deleted-for-everyone {
font-style: italic;
margin-right: 3px;
}
&__status-icon {
flex-shrink: 0;
margin-top: 2px;
width: 12px;
height: 12px;
display: inline-block;
margin-left: 6px;
@mixin normal-status-icon($icon) {
@include light-theme {
@include color-svg($icon, $color-gray-25);
}
@include dark-theme {
@include color-svg($icon, $color-gray-45);
}
}
&--sending {
animation: module-conversation-list__item--contact-or-conversation__contact__message__text__status-icon--spinning
4s linear infinite;
@include light-theme {
@include color-svg('../images/sending.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/sending.svg', $color-gray-45);
}
}
&--sent {
@include normal-status-icon(
'../images/check-circle-outline.svg'
);
}
&--delivered {
@include normal-status-icon('../images/double-check.svg');
width: 18px;
}
&--read {
@include normal-status-icon('../images/read.svg');
width: 18px;
}
&--error,
&--partial-sent {
@include light-theme {
@include color-svg(
'../images/icons/v2/error-outline-12.svg',
$color-accent-red
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/error-solid-12.svg',
$color-accent-red
);
}
}
}
&__message-search-result-contents {
display: -webkit-box;
white-space: initial;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
// Note: -webkit-line-clamp doesn't work for RTL text, and it forces you to use
// ... as the truncation indicator. That's not a solution that works well for
// all languages. More resources:
// - http://hackingui.com/front-end/a-pure-css-solution-for-multiline-text-truncation/
// - https://medium.com/mofed/css-line-clamp-the-good-the-bad-and-the-straight-up-broken-865413f16e5
}
&__start-new-conversation {
@include font-body-1-italic;
}
}
}
}
&__checkbox {
-webkit-appearance: none;
background: $color-white;
border-radius: 100%;
height: 20px;
margin-left: 16px;
margin-right: 16px;
width: 20px;
min-width: 20px;
pointer-events: none;
@include light-theme {
border: 1px solid $color-gray-15;
}
@include dark-theme {
border: 1px solid $color-gray-80;
}
&:focus {
outline: none;
}
@include keyboard-mode {
&:focus {
border-width: 2px;
border-color: $ultramarine-ui-light;
&:checked {
box-shadow: inset 0 0 0px 1px $color-white;
}
}
}
@include dark-keyboard-mode {
&:focus {
border-width: 2px;
border-color: $ultramarine-ui-dark;
&:checked {
box-shadow: inset 0 0 0px 1px $color-black;
}
}
}
&:disabled {
opacity: 0.5;
}
&:checked {
background: $ultramarine-ui-light;
display: flex;
align-items: center;
justify-content: center;
&::before {
content: '';
display: block;
@include color-svg('../images/icons/v2/check-24.svg', $color-white);
width: 13px;
height: 13px;
}
}
}
}
&--header {
@include font-body-1-bold;
display: inline-flex;
align-items: center;
padding-left: 16px;
@include dark-theme {
color: $color-gray-05;
}
}
&--spinner {
width: 100%;
padding: 10px;
text-align: center;
}
}
}
@keyframes module-conversation-list__item--contact-or-conversation__contact__message__text__status-icon--spinning {
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
// Module: Left Pane
.module-left-pane {
display: inline-flex;
flex-direction: column;
width: $left-pane-width;
height: 100%;
position: relative;
}
.module-left-pane__header {
flex-grow: 0;
flex-shrink: 0;
&__contents {
height: calc(#{$header-height} + var(--title-bar-drag-area-height));
width: 100%;
display: inline-flex;
flex-direction: row;
align-items: center;
padding-top: var(--title-bar-drag-area-height);
&__back-button {
@include button-reset;
margin-left: 7px;
margin-right: 5px;
width: 24px;
height: 24px;
&:disabled {
cursor: not-allowed;
}
@include light-theme {
@include color-svg(
'../images/icons/v2/chevron-left-24.svg',
$color-gray-60
);
}
@include keyboard-mode {
&:focus {
@include color-svg(
'../images/icons/v2/chevron-left-24.svg',
$ultramarine-ui-light
);
}
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/chevron-left-24.svg',
$color-gray-25
);
}
@include dark-keyboard-mode {
&:hover {
@include color-svg(
'../images/icons/v2/chevron-left-24.svg',
$ultramarine-ui-dark
);
}
}
}
&__text {
@include font-body-1-bold;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
}
&__form {
display: flex;
flex-direction: column;
}
}
.module-left-pane__archive-helper-text {
@include font-body-2;
flex-grow: 0;
flex-shrink: 0;
padding: 1em;
@include light-theme {
color: $color-gray-60;
background-color: $color-gray-05;
}
@include dark-theme {
color: $color-gray-25;
background-color: $color-gray-75;
}
}
.module-left-pane__no-search-results,
.module-left-pane__compose-no-contacts {
flex-grow: 1;
margin-top: 27px;
padding-left: 1em;
padding-right: 1em;
width: 100%;
text-align: center;
outline: none;
}
.module-left-pane__compose-search-form {
display: flex;
padding: 8px 16px;
margin-bottom: 8px;
&__input {
flex-grow: 1;
padding: 5px 12px;
border-radius: 17px;
border: none;
@include font-body-1;
@include light-theme {
background-color: $color-gray-05;
color: $color-gray-90;
border: solid 1px $color-gray-02;
}
@include dark-theme {
color: $color-gray-05;
background-color: $color-gray-95;
border: solid 1px $color-gray-80;
}
&:placeholder {
color: $color-gray-45;
}
&:focus {
border: solid 1px $ultramarine-ui-light;
outline: none;
}
}
}
.module-left-pane__list--measure {
flex-grow: 1;
flex-shrink: 1;
outline: none;
}
.module-left-pane__list--wrapper {
position: relative;
}
.module-left-pane__list {
position: absolute;
outline: none;
}
.module-left-pane__footer {
bottom: 0;
display: flex;
flex-direction: row;
justify-content: flex-end;
left: 0;
padding: 12px;
position: absolute;
width: 100%;
@include light-theme {
background: linear-gradient(transparent, $color-gray-02);
}
@include dark-theme {
background: linear-gradient(transparent, $color-gray-80);
}
}
// Module: Timeline Loading Row
.module-timeline-loading-row {
height: 48px;
padding: 12px;
display: flex;
flex-direction: columns;
justify-content: center;
align-items: center;
@include light-theme {
color: $color-gray-75;
}
@include dark-theme {
color: $color-gray-25;
}
}
// Module: Timeline
.module-timeline {
height: 100%;
overflow: hidden;
}
.module-timeline--disabled {
user-select: none;
}
.module-timeline__message-container {
padding-top: 4px;
padding-bottom: 4px;
}
.ReactVirtualized__List {
outline: none;
}
// Module: CompositionPopper
%module-composition-popper {
width: 332px;
border-radius: 8px;
margin-bottom: 6px;
z-index: 2;
user-select: none;
overflow: hidden;
@include popper-shadow();
@include light-theme {
background: $color-gray-02;
::-webkit-scrollbar-thumb {
border: 2px solid $color-gray-02;
}
}
@include dark-theme {
background: $color-gray-75;
::-webkit-scrollbar-thumb {
border: 2px solid $color-gray-75;
}
}
}
// Module: SafetyNumberChangeDialog
.module-sfn-dialog__title {
@include font-body-1-bold;
text-align: center;
@include dark-theme {
color: $color-white;
}
}
.module-sfn-dialog__message {
@include font-body-2;
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-sfn-dialog__contacts {
list-style-type: none;
max-height: 300px;
overflow-y: scroll;
padding: 0;
}
.module-sfn-dialog__contact {
align-items: center;
display: flex;
flex-direction: row;
margin-bottom: 16px;
&--wrapper {
flex-grow: 1;
margin-left: 12px;
}
&--name {
@include font-body-1-bold;
@include dark-theme {
color: $color-white;
}
}
&--number {
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
&--view {
@include font-body-1-bold;
background: inherit;
border: none;
cursor: pointer;
margin-right: 2px;
outline: none;
padding: 8px 14px;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
@include light-theme {
color: $ultramarine-ui-light;
}
@include dark-theme {
color: $ultramarine-ui-dark;
}
}
}
.module-sfn-dialog__actions {
border-top: 1px solid $color-gray-05;
display: flex;
justify-content: flex-end;
margin-left: -16px;
margin-right: -16px;
margin-top: -14px;
padding-left: 16px;
padding-right: 16px;
padding-top: 16px;
&--cancel {
@include font-body-1-bold;
border: none;
border-radius: 4px;
outline: none;
padding: 7px 14px;
@include mouse-mode {
&:hover {
background: $color-gray-15;
}
}
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
@include light-theme {
background-color: $color-gray-05;
color: $ultramarine-ui-light;
}
@include dark-theme {
background-color: $color-gray-75;
color: $ultramarine-ui-dark;
}
}
&--confirm {
@include font-body-1-bold;
background: $ultramarine-ui-light;
border: none;
border-radius: 4px;
color: $color-white;
margin-left: 12px;
outline: none;
padding: 7px 14px;
@include mouse-mode {
&:hover {
background: $ultramarine-brand-dark;
}
}
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-brand-dark;
}
}
}
}
/* Safety Number verification */
.module-safety-number {
&__icon {
height: 1.25em;
width: 1.25em;
vertical-align: text-bottom;
display: inline-block;
}
&__verification-label {
margin: 10px 0;
}
&__icon--verified {
display: inline-block;
height: 1.25em;
margin-right: 4px;
vertical-align: text-bottom;
width: 1.25em;
@include light-theme {
-webkit-mask: url('../images/icons/v2/check-24.svg') no-repeat center;
-webkit-mask-size: 100%;
background-color: #121212;
}
@include dark-theme {
-webkit-mask: url('../images/icons/v2/check-24.svg') no-repeat center;
-webkit-mask-size: 100%;
background-color: #f6f6f6;
}
}
&__icon--shield {
display: inline-block;
height: 1.25em;
margin-right: 4px;
vertical-align: text-bottom;
width: 1.25em;
@include light-theme {
-webkit-mask: url('../images/icons/v2/safety-number-outline-24.svg')
no-repeat center;
-webkit-mask-size: 100%;
background-color: #121212;
}
@include dark-theme {
-webkit-mask: url('../images/icons/v2/safety-number-solid-24.svg')
no-repeat center;
-webkit-mask-size: 100%;
background-color: #f6f6f6;
}
}
&__verify-container {
text-align: center;
}
&__button--verify {
border-radius: 5px;
font-weight: bold;
margin: 0;
outline: none;
padding: 10px;
}
&__number {
background: #f6f6f6;
border-radius: 5px;
border: solid 1px #dedede;
font-family: monospace;
margin: 20px auto 20px auto;
padding: 10px;
text-align: center;
width: 16em;
@include dark-theme {
background: #1b1b1b;
border: solid 1px #848484;
color: #f6f6f6;
}
}
&__verification-status {
margin: 30px 0 10px;
text-align: center;
}
&__close-button {
display: flex;
justify-content: flex-end;
button {
background: inherit;
border: none;
cursor: pointer;
padding: 0;
@include keyboard-mode {
&:focus {
border: 1px solid $ultramarine-ui-light;
}
}
span {
display: inline-block;
height: 24px;
width: 24px;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-05);
}
}
}
}
}
// Module: StickerPicker
.module-sticker-picker {
@extend %module-composition-popper;
height: 400px;
display: grid;
grid-template-rows: 44px 1fr;
grid-template-columns: 1fr;
}
.module-sticker-picker__header {
display: flex;
flex-direction: row;
padding: 0 8px;
justify-content: flex-start;
align-items: center;
}
.module-sticker-picker__header__packs {
width: 288px;
overflow: hidden;
position: relative;
&__slider {
display: flex;
flex-direction: row;
transform: translateX(0);
transition: transform 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
}
.module-sticker-picker__header__button {
width: 28px;
height: 28px;
border: 0;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
background: none;
margin-right: 4px;
outline: none;
&:active,
&:focus {
@include keyboard-mode {
background: $color-gray-05;
}
@include dark-keyboard-mode {
background: $color-gray-60;
}
}
&--selected {
@include light-theme {
background: $color-gray-15;
}
@include dark-theme {
background: $color-gray-45;
}
}
&--recents,
&--add-pack {
&::after {
content: '';
display: block;
min-width: 20px;
min-height: 20px;
}
}
&--recents {
&::after {
@include light-theme {
@include color-svg(
'../images/icons/v2/recent-outline-20.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/recent-solid-20.svg',
$color-gray-25
);
}
}
}
&--add-pack {
&::after {
@include light-theme {
@include color-svg('../images/icons/v2/plus-20.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/plus-20.svg', $color-gray-25);
}
}
}
&--prev-page,
&--next-page {
top: 0;
margin: 0;
border-radius: 0;
&::after {
content: '';
display: block;
min-width: 16px;
min-height: 16px;
}
@include light-theme {
background: $color-gray-02;
}
@include dark-theme {
background: $color-gray-75;
}
}
&--prev-page {
position: absolute;
left: 0;
&::after {
@include light-theme {
@include color-svg(
'../images/icons/v2/chevron-left-16.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/chevron-left-16.svg',
$color-gray-25
);
}
}
}
&--next-page {
position: absolute;
right: 0;
&::after {
@include light-theme {
@include color-svg(
'../images/icons/v2/chevron-right-16.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/chevron-right-16.svg',
$color-gray-25
);
}
}
}
&--error {
position: relative;
&::before {
display: block;
content: '';
width: 12px;
height: 12px;
position: absolute;
left: 14px;
top: 2px;
@include color-svg(
'../images/icons/v2/error-solid-24.svg',
$color-accent-red
);
}
}
&--hint {
position: relative;
&::before {
display: block;
content: '';
position: absolute;
top: 0;
right: 0;
width: 14px;
height: 14px;
border-radius: 7px;
background: $ultramarine-ui-light;
}
}
}
.module-sticker-picker__header__button__image {
width: 20px;
height: 20px;
object-fit: contain;
}
.module-sticker-picker__header__button__image--placeholder {
min-width: 20px;
min-height: 20px;
max-width: 20px;
max-height: 20px;
background-color: $color-gray-05;
}
.module-sticker-picker__body {
position: relative;
&__content {
width: 332px;
height: 356px;
padding: 8px 20px 16px 16px;
overflow-y: auto;
display: grid;
grid-gap: 8px;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 68px;
&--under-text {
height: 320px;
}
&--under-long-text {
height: 304px;
}
}
&__cell {
border: none;
background: none;
padding: 0;
width: 68px;
height: 68px;
display: flex;
justify-content: center;
align-items: center;
@include mouse-mode {
outline: none;
}
&__image,
&__placeholder {
width: 100%;
height: 100%;
object-fit: contain;
}
&__placeholder {
border-radius: 4px;
@include light-theme() {
background-color: $color-gray-05;
}
@include dark-theme() {
background-color: $color-gray-60;
}
}
}
&--empty {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
&__text {
@include font-body-1-bold;
text-align: center;
padding: 8px 16px 12px 0;
@include light-theme() {
color: $color-gray-60;
}
@include dark-theme() {
color: $color-gray-25;
}
&:only-child {
padding: 0 0 28px 0; // header height to offset the text so it is centered in the whole picker
}
&--error {
@include light-theme() {
color: $color-accent-red;
}
@include dark-theme() {
color: $color-accent-red;
}
}
&--hint {
@include light-theme() {
color: $ultramarine-ui-light;
}
@include dark-theme() {
color: $ultramarine-ui-dark;
}
}
&--pin {
padding: 8px 16px 12px 0px;
position: absolute;
top: 0;
}
}
}
// Module: StickerManager
.module-sticker-manager {
padding: 0 16px;
outline: none;
}
.module-sticker-manager__text {
height: 18px;
letter-spacing: 0px;
line-height: 18px;
@include light-theme() {
color: $color-gray-60;
}
@include dark-theme() {
color: $color-gray-25;
}
&--heading {
@include font-body-1-bold;
@include light-theme() {
color: $color-gray-90;
}
@include dark-theme() {
color: $color-gray-05;
}
}
}
.module-sticker-manager__empty {
display: flex;
justify-content: center;
align-items: center;
height: 64px;
border-radius: 8px;
@include light-theme {
background: $color-gray-02;
color: $color-gray-60;
}
@include dark-theme {
background: $color-gray-90;
color: $color-gray-25;
}
}
%blessed-sticker-pack-icon {
height: 14px;
width: 14px;
border-radius: 8px;
background-color: $color-white;
display: inline-block;
vertical-align: middle;
margin: {
left: 5px;
bottom: 2px;
}
position: relative;
&::before {
content: '';
display: block;
width: 16px;
height: 16px;
position: absolute;
top: -1px;
left: -1px;
@include light-theme {
@include color-svg(
'../images/icons/v2/check-circle-solid-24.svg',
$color-accent-blue
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/check-circle-solid-24.svg',
$color-accent-blue
);
}
}
}
.module-sticker-manager__pack-row {
@include button-reset;
display: flex;
flex-direction: row;
padding: 16px;
@include light-theme {
& + & {
border-top: 1px solid $color-gray-15;
}
}
@include dark-theme {
& + & {
border-top: 1px solid $color-gray-75;
}
}
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
&__cover {
width: 48px;
height: 48px;
object-fit: contain;
}
&__cover-placeholder {
width: 48px;
height: 48px;
background: $color-gray-05;
}
&__meta {
flex-grow: 1;
display: flex;
flex-direction: column;
&:not(:first-child) {
padding: 0 12px;
}
&__title {
flex: 1;
}
&__author {
flex: 1;
@include light-theme() {
color: $color-gray-45;
}
@include dark-theme() {
color: $color-gray-25;
}
}
&__blessed-icon {
@extend %blessed-sticker-pack-icon;
}
}
&__controls {
flex-shrink: 1;
display: flex;
justify-content: center;
align-items: center;
&__button {
background: none;
border: 0;
&--menu {
&::after {
content: '';
display: block;
min-width: 24px;
min-height: 24px;
@include light-theme {
@include color-svg(
'../images/icons/v2/more-horiz-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/more-horiz-24.svg',
$color-gray-25
);
}
}
}
}
}
}
.module-sticker-manager__install-button {
background: none;
border: 0;
color: $color-gray-90;
@include font-body-1-bold;
height: 24px;
background: $color-gray-05;
border-radius: 12px;
display: flex;
justify-content: center;
align-items: center;
padding: 0 12px;
@include dark-theme {
color: $color-gray-05;
background: $color-gray-75;
}
@include mouse-mode {
outline: none;
}
&--blue {
@include light-theme {
background: $ultramarine-ui-light;
color: $color-white;
}
@include dark-theme {
background: $ultramarine-ui-dark;
color: $color-white;
}
}
}
.module-sticker-manager__preview-modal {
&__overlay {
background: $color-black-alpha-40;
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
z-index: 5;
}
&__container {
position: relative;
border-radius: 8px;
box-shadow: 0 4px 12px 0 $color-black-alpha-20;
width: 440px;
height: 360px;
overflow: hidden;
display: flex;
flex-direction: column;
@include light-theme {
background: $color-white;
}
@include dark-theme {
background: $color-gray-75;
}
&__error {
color: $color-accent-red;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
width: 100%;
height: 100%;
padding: 0 80px 30px 80px;
@include font-body-1-bold;
}
&__header {
display: flex;
flex-direction: row;
flex-shrink: 0;
height: 36px;
padding: 0 8px 0 16px;
justify-content: space-between;
align-items: center;
&__text {
@include font-body-1-bold;
color: $color-gray-90;
@include dark-theme {
color: $color-gray-05;
}
}
&__close-button {
border: none;
width: 20px;
height: 20px;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-05);
}
}
}
&__sticker-grid {
width: 100%;
display: grid;
grid-gap: 8px;
grid-template-columns: repeat(4, 1fr);
overflow-y: auto;
padding: 0 16px;
&::after {
content: '';
display: block;
height: 80px;
grid-column: 1 / span 4;
}
&__cell {
width: 96px;
height: 96px;
display: flex;
justify-content: center;
align-items: center;
&__image {
width: 100%;
height: 100%;
object-fit: contain;
}
&--placeholder {
border-radius: 4px;
@include light-theme() {
background: $color-gray-05;
}
@include dark-theme() {
background: $color-gray-60;
}
}
}
}
&__meta-overlay {
border-radius: 4px;
width: 408px;
height: 52px;
position: absolute;
left: 16px;
bottom: 16px;
padding: 0 12px;
display: flex;
flex-direction: row;
align-items: center;
@include light-theme {
background: $color-gray-05;
}
@include dark-theme {
background: $color-gray-60;
}
&__info {
display: flex;
flex-direction: column;
justify-content: center;
flex-grow: 1;
flex-shrink: 1;
overflow: hidden;
&__title {
margin: 0;
overflow: hidden;
text-overflow: ellipsis;
@include font-body-1-bold;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
&__author {
margin: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@include light-theme {
color: $color-gray-45;
}
@include dark-theme {
color: $color-gray-25;
}
}
&__blessed-icon {
@extend %blessed-sticker-pack-icon;
}
}
&__install {
flex-shrink: 0;
overflow: hidden;
}
}
}
}
// Module: Sticker button (launches the sticker picker)
.sticker-button-wrapper {
height: 36px;
display: flex;
justify-content: center;
align-items: center;
margin-left: 6px;
}
.module-sticker-button__button {
border: 0;
background: none;
width: 32px;
height: 32px;
border-radius: 16px;
display: flex;
justify-content: center;
align-items: center;
opacity: 0.5;
&:focus,
&:hover {
opacity: 1;
}
outline: none;
&::after {
display: block;
content: '';
width: 24px;
height: 24px;
flex-shrink: 0;
@include light-theme {
@include color-svg(
'../images/icons/v2/sticker-outline-24.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/sticker-solid-24.svg',
$color-gray-15
);
}
}
&--active {
@include light-theme() {
background: $color-gray-05;
}
@include dark-theme() {
background: $color-gray-75;
}
opacity: 1;
}
}
.module-sticker-button__tooltip {
@include button-reset;
height: 34px;
display: flex;
justify-content: center;
align-items: center;
padding: 7px 12px;
border-radius: 8px;
margin-bottom: 6px;
z-index: 1;
@include light-theme {
background: $color-white;
}
@include dark-theme {
background: $color-gray-75;
}
@include popper-shadow();
&__triangle {
position: absolute;
width: 0;
height: 0;
border-style: solid;
border-width: 8px 8px 0 8px;
@include light-theme {
border-color: $color-white transparent transparent transparent;
}
@include dark-theme {
border-color: $color-gray-75 transparent transparent transparent;
}
&--top-end {
top: 34px;
}
&--introduction {
top: 72px;
}
}
&__image {
width: 20px;
height: 20px;
object-fit: contain;
}
&__image-placeholder {
width: 20px;
height: 20px;
background-color: $color-gray-05;
}
&__text {
margin-left: 4px;
cursor: default;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
&__title {
font-weight: bold;
}
}
&--introduction {
width: 420px;
height: 72px;
display: flex;
flex-direction: row;
&__image {
width: 52px;
height: 52px;
}
&__meta {
flex-grow: 1;
padding: 0 12px;
display: flex;
flex-direction: column;
justify-content: center;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
&__title {
margin: 0;
@include font-body-1-bold;
height: 16px;
}
&__subtitle {
margin-top: 3px;
height: 16px;
}
}
&__close {
flex-shrink: 1;
height: 100%;
&__button {
width: 20px;
height: 20px;
border: none;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-05);
}
}
}
}
}
// Module: confirmation dialog
.module-confirmation-dialog {
&__overlay {
background: $color-black-alpha-40;
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
// THIS Z-INDEX IS OVER NINE THOUSAND. OVER NINE THOUSAND?! THAT CAN'T BE!
z-index: 9001;
}
&__container {
width: 360px;
padding: 12px 16px;
border-radius: 8px;
@include popper-shadow();
@include light-theme() {
background: $color-white;
color: $color-gray-90;
}
@include dark-theme() {
background: $color-gray-80;
color: $color-gray-05;
}
&__title {
@include font-body-1-bold;
}
&__content {
@include font-body-1;
}
&__buttons {
margin-top: 22px;
display: flex;
flex-direction: row;
justify-content: flex-end;
&__button {
margin-left: 4px;
border-radius: 17px;
height: 34px;
padding: 5px 12px;
display: flex;
justify-content: center;
align-items: center;
@include font-body-1-bold;
@include mouse-mode {
outline: none;
}
@include light-theme() {
background: $color-white;
color: $color-gray-60;
border: 1px solid $color-gray-60;
}
@include dark-theme() {
background: $color-gray-75;
color: $color-gray-25;
border: 1px solid $color-gray-25;
}
&--negative {
@include light-theme() {
border: none;
background: $color-accent-red;
color: $color-white;
}
@include dark-theme() {
border: none;
background: $color-accent-red;
color: $color-white;
}
}
&--affirmative {
@include light-theme() {
border: none;
background: $color-accent-green;
color: $color-white;
}
@include dark-theme() {
border: none;
background: $color-accent-green;
color: $color-white;
}
}
}
}
}
}
.module-left-pane-dialog {
background: $color-accent-green;
color: $color-white;
padding: 16px;
.module-left-pane-dialog__message {
h3 {
@include font-body-1-bold;
padding: 0px;
margin: 0px;
margin-bottom: 8px;
}
span {
@include font-body-1;
display: inline-block;
}
}
.module-left-pane-dialog__actions {
margin-top: 8px;
text-align: right;
.module-left-pane-dialog__link {
@include keyboard-mode {
display: inline-block;
outline: 0;
}
}
button {
background: inherit;
border-radius: 20px;
border: solid 1px $color-white;
color: $color-white;
cursor: pointer;
font-family: inherit;
margin: 0 4px;
padding: 8px 16px;
outline: 0;
&:focus {
@include keyboard-mode {
box-shadow: 0 0 0 3px $ultramarine-ui-light;
}
}
&:hover {
@include mouse-mode {
box-shadow: 0 0 0 3px $ultramarine-ui-light;
}
}
}
.module-left-pane-dialog__button--no-border {
border: none;
}
}
&.module-left-pane-dialog--error {
background-color: $color-accent-red;
}
&.module-left-pane-dialog--warning {
background-color: $color-accent-yellow;
color: $color-black;
button {
border-color: $color-black;
color: $color-black;
}
}
}
// Module: Emoji Picker
%module-emoji-picker--ribbon {
height: 44px;
display: flex;
flex-direction: row;
align-items: center;
}
.module-emoji-picker {
@extend %module-composition-popper;
height: 428px;
display: grid;
grid-template-rows: 44px 1fr;
grid-template-columns: 1fr;
&__header {
@extend %module-emoji-picker--ribbon;
justify-content: space-between;
margin: 0 12px;
&__search-field {
flex-grow: 1;
margin-left: 8px;
position: relative;
@include font-body-2;
&::after {
display: block;
content: '';
width: 16px;
height: 16px;
position: absolute;
left: 8px;
top: 6px;
@include light-theme {
@include color-svg(
'../images/icons/v2/search-16.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/search-16.svg',
$color-gray-25
);
}
}
&__input {
width: 100%;
height: 28px;
@include font-body-1;
line-height: 28px;
border-radius: 17px;
border-width: 1px;
border-style: solid;
padding: 0 8px 0 30px;
&:focus {
outline: none;
}
@include light-theme {
background: $color-white;
color: $color-gray-90;
border-color: $color-gray-60;
&:focus {
border-color: $ultramarine-ui-light;
}
&:placeholder {
color: $color-gray-45;
}
}
@include dark-theme {
border-color: $color-gray-25;
background: $color-gray-75;
color: $color-gray-05;
&:focus {
border-color: $ultramarine-ui-light;
}
&:placeholder {
color: $color-gray-45;
}
}
}
}
}
&__footer {
@extend %module-emoji-picker--ribbon;
justify-content: center;
}
&__button {
width: 28px;
height: 28px;
border: none;
border-radius: 8px;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
background: none;
@include mouse-mode {
outline: none;
}
&--footer {
&:not(:first-of-type) {
margin-left: 4px;
}
}
&--selected {
@include light-theme {
background: $color-gray-05;
}
@include dark-theme {
background: $color-gray-60;
}
}
&--icon {
display: flex;
justify-content: center;
align-items: center;
&::after {
display: block;
content: '';
width: 20px;
height: 20px;
}
&--search {
&::after {
@include light-theme {
@include color-svg(
'../images/icons/v2/search-16.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/search-16.svg',
$color-gray-25
);
}
}
}
&--close {
&::after {
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-25);
}
}
}
&--recents {
&::after {
@include light-theme {
@include color-svg(
'../images/icons/v2/recent-outline-20.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/recent-solid-20.svg',
$color-gray-25
);
}
}
}
&--emoji {
&::after {
@include light-theme {
@include color-svg(
'../images/icons/v2/emoji-smiley-outline-20.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/emoji-smiley-solid-20.svg',
$color-gray-25
);
}
}
}
$categories: animal food activity travel object symbol flag;
@each $cat in $categories {
&--#{$cat} {
&::after {
@include light-theme {
@include color-svg(
'../images/icons/v2/emoji-#{$cat}-outline-20.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/emoji-#{$cat}-solid-20.svg',
$color-gray-25
);
}
}
}
}
}
}
&__body {
padding: 8px 16px 0 12px;
outline: none;
&__emoji-cell {
display: flex;
flex-direction: row;
justify-content: center;
align-items: flex-start;
}
&--empty {
display: flex;
padding: 0;
justify-content: center;
align-items: center;
@include font-body-1;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
}
}
// Module: EmojiButton
.emoji-button-wrapper {
height: 36px;
display: flex;
justify-content: center;
align-items: center;
margin: 0 6px;
padding-top: 4px;
}
.module-emoji-button__button {
border: 0;
background: none;
width: 32px;
height: 32px;
border-radius: 16px;
display: flex;
justify-content: center;
align-items: center;
opacity: 0.5;
&:focus,
&:hover {
opacity: 1;
}
outline: none;
&::after {
display: block;
content: '';
width: 24px;
height: 24px;
flex-shrink: 0;
@include light-theme {
@include color-svg(
'../images/icons/v2/emoji-smiley-outline-24.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/emoji-smiley-solid-24.svg',
$color-gray-15
);
}
}
&--active {
@include light-theme() {
background: $color-gray-05;
}
@include dark-theme() {
background: $color-gray-75;
}
opacity: 1;
}
}
// Module: Emoji
@mixin emoji-size($size) {
&--#{$size} {
width: $size;
height: $size;
&--inline {
display: inline-block;
vertical-align: bottom;
background-size: $size $size;
}
}
&__image--#{$size} {
width: $size;
height: $size;
transform: translate3d(0, 0, 0);
vertical-align: baseline;
}
}
.module-emoji {
display: flex;
justify-content: center;
align-items: center;
color: transparent;
font-family: auto;
@include light-theme() {
caret-color: $color-gray-90;
}
@include dark-theme() {
caret-color: $color-gray-05;
}
@include emoji-size(16px);
@include emoji-size(18px);
@include emoji-size(20px);
@include emoji-size(24px);
@include emoji-size(28px);
@include emoji-size(32px);
@include emoji-size(48px);
@include emoji-size(64px);
@include emoji-size(66px);
}
// Module: Unsupported Message
.module-unsupported-message {
text-align: center;
}
.module-unsupported-message__icon {
height: 24px;
width: 24px;
margin-left: auto;
margin-right: auto;
margin-bottom: 7px;
@include light-theme {
@include color-svg(
'../images/icons/v2/error-outline-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg('../images/icons/v2/error-solid-24.svg', $color-gray-25);
}
}
.module-unsupported-message__icon--can-process {
@include light-theme {
@include color-svg(
'../images/icons/v2/check-circle-outline-24.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/check-circle-solid-24.svg',
$color-gray-25
);
}
}
.module-unsupported-message__text {
max-width: 396px;
margin-left: auto;
margin-right: auto;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-unsupported-message__contact {
font-weight: bold;
}
.module-unsupported-message__button {
@include button-reset;
margin-top: 5px;
display: inline-block;
@include font-body-1-bold;
padding: 12px;
border-radius: 4px;
@include light-theme {
color: $ultramarine-ui-light;
background-color: $color-gray-02;
}
@include dark-theme {
color: $ultramarine-ui-dark;
background-color: $color-gray-75;
}
}
// Module: Countdown
.module-countdown {
display: block;
width: 24px;
height: 24px;
}
// Note: the colors here should match the module-spinner's on-background colors
.module-countdown__front-path {
fill-opacity: 0;
stroke-width: 2;
@include light-theme {
stroke: $color-gray-60;
}
@include dark-theme {
stroke: $color-gray-25;
}
}
.module-countdown__back-path {
fill-opacity: 0;
stroke-width: 2;
@include light-theme {
stroke: $color-gray-05;
}
@include dark-theme {
stroke: $color-gray-75;
}
}
// Module: CompositionInput
.module-composition-input {
&__quill {
height: 100%;
.ql-editor {
caret-color: transparent;
padding: 0;
text-align: start;
&--loaded {
caret-color: auto;
}
&.ql-blank::before {
left: 0;
right: 0;
font-style: normal;
}
.emoji-blot {
width: 20px;
height: 20px;
vertical-align: text-bottom;
}
}
}
&__at-mention {
background-color: $color-gray-20;
border-radius: 4px;
display: inline;
padding-left: 4px;
padding-right: 4px;
height: 22px;
line-height: 22px;
@include dark-theme {
background-color: $color-gray-60;
}
}
&__input {
border: none;
border-radius: 18px;
overflow: hidden;
word-break: break-word;
// Override Quill styles
.ql-container {
@include font-body-1;
}
.ql-blank::before {
color: $color-gray-45;
}
@include light-theme() {
// Same as background color
border: 1px solid $color-white;
background-color: $color-gray-05;
color: $color-gray-90;
}
@include dark-theme() {
// Same as background color
border: 1px solid $color-gray-95;
background-color: $color-gray-75;
color: $color-gray-05;
}
&__scroller {
padding: 7px 12px;
min-height: 32px;
max-height: 80px;
overflow: auto;
&::-webkit-scrollbar-thumb {
@include light-theme {
border: 2px solid $color-gray-05;
}
@include dark-theme {
border: 2px solid $color-gray-75;
}
}
&--large {
max-height: 227px;
min-height: 227px;
.DraftEditor-root {
height: 227px - 2 * 7px; // subtract padding
}
}
}
&:focus-within {
@include light-theme() {
border: 1px solid $ultramarine-ui-light;
}
@include dark-theme() {
border: 1px solid $ultramarine-ui-light;
}
}
}
&__suggestions {
padding: 0;
margin-bottom: 6px;
border-radius: 8px;
z-index: 2;
overflow: hidden;
&--scroller {
max-height: 300px;
overflow-y: auto;
}
@include popper-shadow();
@include light-theme() {
background: $color-white;
}
@include dark-theme() {
background: $color-gray-75;
}
&__row {
height: 34px;
padding: 0 12px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
background: none;
border: none;
width: 100%;
&--mention {
height: 40px;
}
&:focus {
outline: 0;
}
@include font-body-2;
@include light-theme() {
color: $color-gray-60;
}
@include dark-theme() {
color: $color-gray-25;
}
&__short-name {
margin-left: 4px;
}
&--selected,
&:hover {
@include light-theme() {
background: $color-gray-05;
color: $color-gray-90;
}
@include dark-theme() {
background: $color-gray-60;
color: $color-gray-05;
}
}
}
&__title {
padding-left: 8px;
}
stroke: $color-white;
}
}
// Module: CompositionArea
.module-composition-area {
position: relative;
min-height: 42px;
padding-top: 6px;
&__row {
display: flex;
flex-direction: row;
&--center {
justify-content: center;
}
&--padded {
padding: 0 12px;
}
&--control-row {
margin-top: 8px;
}
&--column {
flex-direction: column;
}
}
&__button-cell {
margin-top: 2px;
display: flex;
justify-content: center;
align-items: center;
width: 40px;
height: 100%;
flex-shrink: 0;
&--mic-active {
width: 150px;
}
&--large-right {
margin-left: auto;
margin-right: 4px;
}
&--large-right-mic-active {
margin-left: auto;
margin-right: 12px;
}
}
&__send-button {
width: 32px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
background: none;
border: none;
&::after {
display: block;
content: '';
width: 24px;
height: 24px;
flex-shrink: 0;
@include color-svg(
'../images/icons/v2/send-24.svg',
$ultramarine-ui-light
);
}
}
&__input {
flex-grow: 1;
}
$comp-area: &;
&__toggle-large {
width: 48px;
height: 24px;
position: absolute;
left: calc(50% - 24px);
top: -18px;
border-radius: 12px 12px 0 0;
pointer-events: none;
opacity: 0;
transition: opacity 200ms ease-out;
#{$comp-area}:hover & {
opacity: 1;
pointer-events: all;
}
@include light-theme() {
background-color: $color-white;
}
@include dark-theme() {
background-color: $color-gray-95;
}
&__button {
width: 48px;
height: 24px;
border: none;
@include light-theme() {
@include color-svg(
'../images/icons/v2/expand-up-20.svg',
$color-gray-45,
false
);
}
@include dark-theme() {
@include color-svg(
'../images/icons/v2/expand-up-20.svg',
$color-gray-45,
false
);
}
&--large-active {
@include light-theme() {
@include color-svg(
'../images/icons/v2/collapse-down-20.svg',
$color-gray-45,
false
);
}
@include dark-theme() {
@include color-svg(
'../images/icons/v2/collapse-down-20.svg',
$color-gray-45,
false
);
}
}
}
}
&__attachment-list {
width: 100%;
}
}
.composition-area-placeholder {
flex-grow: 1;
margin: {
bottom: 6px;
}
}
// Module: Last Seen Indicator
.module-last-seen-indicator {
padding-top: 25px;
padding-bottom: 35px;
}
.module-last-seen-indicator__bar {
background-color: $color-gray-45;
width: 100%;
height: 1px;
}
.module-last-seen-indicator__text {
margin-top: 3px;
@include font-body-2-bold;
text-align: center;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-05;
}
}
// Module: Scroll Down Button
.module-scroll-down {
z-index: 100;
position: absolute;
right: 20px;
bottom: 10px;
}
.module-scroll-down__button {
height: 44px;
width: 44px;
border-radius: 22px;
text-align: center;
border: none;
outline: none;
@include light-theme {
background-color: $color-gray-25;
&:hover {
background-color: $color-gray-45;
}
box-shadow: 0px 3px 5px 0px $color-black-alpha-20;
}
@include dark-theme {
background-color: $color-gray-45;
&:hover {
background-color: $color-gray-25;
}
box-shadow: 0px 3px 5px 0px $color-white-alpha-20;
}
}
.module-scroll-down__button--new-messages {
background-color: $ultramarine-ui-light;
&:hover {
background-color: $ultramarine-brand-dark;
}
}
.module-scroll-down__icon {
@include color-svg('../images/icons/v2/arrow-down-24.svg', $color-white);
height: 36px;
width: 36px;
margin-left: -3px;
margin-top: -1px;
}
// Module: Avatar Popup
.module-avatar-popup {
min-width: 240px;
border-radius: 4px;
padding-bottom: 4px;
@include popper-shadow;
@include light-theme {
color: $color-gray-90;
background-color: $color-white;
}
@include dark-theme {
color: $color-gray-05;
background-color: $color-gray-75;
}
}
.module-avatar-popup__profile {
display: flex;
flex-direction: row;
align-items: center;
}
.module-avatar-popup__profile {
padding: 12px;
}
.module-avatar-popup__profile__text {
margin-left: 10px;
}
.module-avatar-popup__profile__name {
@include font-body-1-bold;
}
.module-avatar-popup__profile__number {
@include font-subtitle;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-avatar-popup__divider {
border: none;
padding: 0;
margin: 0;
height: 1px;
width: 100%;
margin-bottom: 6px;
@include light-theme {
background-color: $color-gray-15;
}
@include dark-theme {
background-color: $color-gray-60;
}
}
.module-avatar-popup__item {
@include font-body-2;
@include button-reset;
display: flex;
flex-direction: row;
align-items: center;
width: 100%;
height: 32px;
padding: 6px;
@include light-theme {
&:hover {
background-color: $color-gray-05;
}
}
@include keyboard-mode {
&:hover {
background-color: inherit;
}
&:focus {
background-color: $color-gray-05;
}
}
@include dark-theme {
&:hover {
background-color: $color-gray-60;
}
}
@include dark-keyboard-mode {
&:hover {
background-color: inherit;
}
&:focus {
background-color: $color-gray-60;
}
}
}
.module-avatar-popup__item__icon {
margin-left: 6px;
height: 16px;
width: 16px;
}
.module-avatar-popup__item__icon-settings {
@include light-theme {
@include color-svg(
'../images/icons/v2/settings-outline-16.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/settings-solid-16.svg',
$color-gray-15
);
}
}
.module-avatar-popup__item__icon-archive {
@include light-theme {
@include color-svg(
'../images/icons/v2/archive-outline-16.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/archive-solid-16.svg',
$color-gray-15
);
}
}
.module-avatar-popup__item__text {
margin-left: 8px;
}
// Module: Shortcut Guide Modal
.module-shortcut-guide-modal {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 20px;
display: flex;
flex-direction: row;
align-items: center;
background-color: $color-black-alpha-40;
// react-contextmenu uses a z-index of 1000
z-index: 2000;
}
.module-shortcut-guide-container {
flex-grow: 1;
overflow: hidden;
}
// Module: Shortcut Guide
.module-shortcut-guide {
border-radius: 4px;
padding: 16px;
max-height: calc(100vh - 40px);
max-width: 1150px;
margin-left: auto;
margin-right: auto;
display: flex;
flex-direction: column;
@include popper-shadow;
@include light-theme {
color: $color-gray-90;
background-color: $color-white;
}
@include dark-theme {
color: $color-gray-05;
background-color: $color-gray-75;
::-webkit-scrollbar-thumb {
border: 2px solid $color-gray-75;
}
}
}
.module-shortcut-guide__header {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 20px;
}
.module-shortcut-guide__header-text {
@include font-title-2;
flex-grow: 1;
}
.module-shortcut-guide__header-close {
@include button-reset;
height: 24px;
width: 24px;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-05);
}
&:focus {
@include keyboard-mode {
@include color-svg('../images/icons/v2/x-24.svg', $ultramarine-ui-light);
}
@include dark-keyboard-mode {
@include color-svg('../images/icons/v2/x-24.svg', $ultramarine-ui-dark);
}
}
}
.module-shortcut-guide__section-header {
@include font-body-1-bold;
margin-bottom: 8px;
}
.module-shortcut-guide__scroll-container {
outline: none;
overflow-y: scroll;
}
.module-shortcut-guide__section {
&:not(:last-child) {
margin-bottom: 25px;
}
}
@media (min-width: 900px) {
.module-shortcut-guide__section-list {
column-count: 2;
column-gap: 20px;
column-span: none;
column-fill: auto;
}
}
.module-shortcut-guide__shortcut {
display: flex;
flex-direction: row;
align-items: center;
break-inside: avoid;
padding-left: 4px;
min-height: 40px;
outline: none;
&:focus {
@include keyboard-mode {
background-color: $color-gray-05;
}
@include dark-keyboard-mode {
background-color: $color-gray-90;
}
}
@include light-theme {
border-bottom: 1px solid $color-gray-05;
}
@include dark-theme {
border-bottom: 1px solid $color-gray-90;
}
}
.module-shortcut-guide__shortcut__description {
flex-grow: 1;
margin-top: 4px;
margin-bottom: 4px;
}
.module-shortcut-guide__shortcut__key-container {
margin-bottom: 4px;
}
.module-shortcut-guide__shortcut__key-inner-container {
text-align: right;
margin-top: 4px;
margin-right: 4px;
white-space: nowrap;
}
.module-shortcut-guide__shortcut__key {
display: inline-block;
border-radius: 2px;
padding: 3px;
padding-left: 8px;
padding-right: 8px;
margin-left: 4px;
height: 30px;
text-align: center;
@include light-theme {
border: 1px solid $color-gray-15;
}
@include dark-theme {
border: 1px solid $color-gray-90;
}
}
.module-shortcut-guide__shortcut__key--square {
width: 30px;
padding-left: 0px;
padding-right: 0px;
}
// Module: Profile Change Notification
.module-profile-change-notification {
@include font-body-1;
margin-left: 2em;
margin-right: 2em;
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-profile-change-notification--icon {
@include light-theme {
@include color-svg(
'../images/icons/v2/profile-outline-20.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/profile-outline-20.svg',
$color-gray-05
);
}
height: 20px;
width: 20px;
margin-left: auto;
margin-right: auto;
}
/* Calling: Device Selection */
.module-calling-device-selection {
position: relative;
}
.module-calling-device-selection__close-button {
@include button-reset;
@include color-svg('../images/x-shadow-16.svg', $color-white);
height: 16px;
position: absolute;
right: 5px;
top: 0;
width: 16px;
z-index: 2;
@include keyboard-mode {
&:focus {
outline: 2px solid $ultramarine-ui-light;
}
}
}
.module-calling-device-selection__title {
@include font-title-2;
margin-top: 12px;
margin-bottom: 20px;
}
.module-calling-device-selection__label {
@include font-body-1-bold;
display: block;
margin-bottom: 16px;
}
.module-calling-device-selection__select {
margin-bottom: 20px;
position: relative;
select {
@include font-body-1;
-webkit-appearance: none;
border-radius: 4px;
border: 1px solid $color-gray-45;
cursor: pointer;
height: 40px;
outline: 0;
padding: 10px;
padding-right: 32px;
text-overflow: ellipsis;
width: 100%;
}
&::after {
border: 2px solid $color-gray-75;
border-radius: 2px;
border-right: 0;
border-top: 0;
content: ' ';
display: block;
height: 10px;
pointer-events: none;
position: absolute;
right: 15px;
top: 16px;
transform-origin: center;
transform: rotate(-45deg);
width: 10px;
z-index: 2;
}
}
// Module: GroupV2 Change
.module-group-v2-change {
@include font-body-1;
margin-left: 2em;
margin-right: 2em;
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-group-v2-change--icon {
@include light-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-05
);
}
height: 20px;
width: 20px;
margin-left: auto;
margin-right: auto;
}
// Module: GV1 Migration
.module-group-v1-migration {
@include font-body-1;
margin-left: 2em;
margin-right: 2em;
text-align: center;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-05;
}
}
.module-group-v1-migration--icon {
@include light-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-60
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-05
);
}
height: 20px;
width: 20px;
margin-left: auto;
margin-right: auto;
}
.module-group-v1-migration--text {
margin-top: 8px;
margin-bottom: 8px;
}
.module-group-v1-migration--button {
@include button-reset;
@include font-body-2-bold;
border-radius: 4px;
padding: 8px;
padding-left: 40px;
padding-right: 40px;
@include button-light-blue-text;
}
// Module: GroupV1 Disabled Actions
.module-group-v1-disabled-actions {
padding: 8px 16px 12px 16px;
max-width: 650px;
margin-left: auto;
margin-right: auto;
@include light-theme {
background: $color-white;
}
@include dark-theme {
background: $color-gray-95;
}
}
.module-group-v1-disabled-actions__message {
@include font-body-2;
text-align: center;
margin-bottom: 12px;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-group-v1-disabled-actions__message__learn-more {
text-decoration: none;
}
.module-group-v1-disabled-actions__buttons {
display: flex;
flex-direction: row;
justify-content: center;
}
.module-group-v1-disabled-actions__buttons__button {
@include button-reset;
@include font-body-1-bold;
border-radius: 4px;
padding: 8px;
padding-left: 30px;
padding-right: 30px;
@include button-primary;
}
// Module: GroupV2 Pending Approval Actions
.module-group-v2-pending-approval-actions {
padding: 8px 16px 12px 16px;
max-width: 650px;
margin-left: auto;
margin-right: auto;
@include light-theme {
background: $color-white;
}
@include dark-theme {
background: $color-gray-95;
}
}
.module-group-v2-pending-approval-actions__message {
@include font-body-2;
text-align: center;
margin-bottom: 12px;
@include light-theme {
color: $color-gray-60;
}
@include dark-theme {
color: $color-gray-25;
}
}
.module-group-v2-pending-approval-actions__buttons {
display: flex;
flex-direction: row;
justify-content: center;
}
.module-group-v2-pending-approval-actions__buttons__button {
@include button-reset;
@include font-body-1-bold;
border-radius: 4px;
padding: 8px;
padding-left: 30px;
padding-right: 30px;
@include button-secondary;
@include light-theme {
color: $color-gray-60;
background-color: $color-gray-05;
}
}
// Module: Modal Host
.module-modal-host__overlay {
background: $color-black-alpha-40;
position: absolute;
height: 100vh;
width: 100vw;
left: 0;
top: 0;
z-index: 2;
display: flex;
flex-direction: column;
justify-content: center;
overflow: hidden;
padding: 20px;
}
// Module: GroupV2 Join Dialog
.module-group-v2-join-dialog {
@include font-body-1;
border-radius: 8px;
width: 360px;
margin-left: auto;
margin-right: auto;
padding: 20px;
position: relative;
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-95;
}
}
.module-group-v2-join-dialog__close-button {
@include button-reset;
position: absolute;
right: 12px;
top: 12px;
height: 24px;
width: 24px;
@include light-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-75);
}
@include dark-theme {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-15);
}
&:focus {
@include keyboard-mode {
background-color: $ultramarine-ui-light;
}
@include dark-keyboard-mode {
background-color: $ultramarine-ui-dark;
}
}
}
.module-group-v2-join-dialog__title {
@include font-title-2;
text-align: center;
margin-top: 12px;
margin-bottom: 2px;
}
.module-group-v2-join-dialog__avatar {
text-align: center;
}
.module-group-v2-join-dialog__metadata {
text-align: center;
}
.module-group-v2-join-dialog__prompt {
margin-top: 40px;
}
.module-group-v2-join-dialog__buttons {
margin-top: 16px;
text-align: center;
display: flex;
}
.module-group-v2-join-dialog__button {
// Start flex basis at zero so text width doesn't affect layout. We want the buttons
// evenly distributed.
flex: 1 1 0px;
&:not(:first-of-type) {
margin-left: 16px;
}
}
// Module: Progress Dialog
.module-progress-dialog {
width: 138px;
padding: 18px;
border-radius: 8px;
@include popper-shadow();
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
@include light-theme() {
background: $color-white;
color: $color-gray-90;
}
@include dark-theme() {
background: $color-gray-80;
color: $color-gray-05;
}
}
.module-progress-dialog__spinner {
padding: 10px;
}
.module-progress-dialog__text {
@include font-body-2;
}
.module-progress-dialog__overlay {
background: $color-black-alpha-40;
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
z-index: 5;
}
// Module: Error Modal
.module-error-modal__button-container {
margin-top: 10px;
display: flex;
flex-direction: row;
justify-content: flex-end;
}
.module-button {
&__small {
@include font-body-2;
@include button-reset;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
@include light-theme {
color: $color-gray-90;
border-color: $color-gray-15;
}
@include dark-theme {
color: $color-gray-05;
border-color: $color-gray-65;
}
border-radius: 4px;
border-style: solid;
border-width: 1px;
outline: none;
padding: 7px 12px;
}
&__gray {
@include font-body-1-bold;
background-color: $color-gray-45;
border-radius: 4px;
border: none;
color: $color-white;
line-height: 24px;
outline: none;
padding: 7px 14px;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
&__green {
@include font-body-1-bold;
background-color: $color-accent-green;
border-radius: 4px;
border: none;
color: $color-white;
line-height: 24px;
outline: none;
padding: 7px 14px;
@include keyboard-mode {
&:focus {
box-shadow: 0px 0px 0px 2px $ultramarine-ui-light;
}
}
}
}
// Module: Group Contact Details
$contact-modal-padding: 18px;
.module-contact-modal {
@include font-body-2;
min-width: 280px;
padding: $contact-modal-padding;
border-radius: 8px;
overflow: hidden;
@include popper-shadow();
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
@include light-theme() {
background: $color-white;
color: $color-gray-90;
}
@include dark-theme() {
background: $color-gray-75;
color: $color-gray-05;
}
&__overlay {
background: $color-black-alpha-40;
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
z-index: 5;
}
}
.module-contact-modal__name {
@include font-title-2;
margin-top: 6px;
}
.module-contact-modal__profile-and-number {
color: $color-gray-60;
@include dark-theme {
color: $color-gray-25;
}
}
.module-contact-modal__button-container {
display: flex;
flex-direction: column;
align-items: flex-start;
margin: 12px 0 15px -$contact-modal-padding;
width: calc(100% + (#{$contact-modal-padding} * 2));
}
.module-contact-modal__button {
@include button-reset;
display: flex;
align-items: center;
padding: 7px $contact-modal-padding;
width: 100%;
&:last-child {
margin-bottom: 0;
}
&:hover {
background-color: $color-gray-15;
@include dark-theme {
background-color: $color-gray-60;
}
}
&:focus {
@include keyboard-mode {
background-color: $color-gray-15;
}
@include dark-keyboard-mode {
background-color: $color-gray-60;
}
}
}
.module-contact-modal__bubble-icon {
display: flex;
justify-content: center;
align-items: center;
margin-right: 10px;
width: 20px;
}
.module-contact-modal__send-message__bubble-icon {
height: 16px;
width: 18px;
@include light-theme {
@include color-svg(
'../images/icons/v2/message-outline-24.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/message-outline-24.svg',
$color-gray-15
);
}
}
.module-contact-modal__safety-number__bubble-icon {
height: 18px;
width: 17px;
@include light-theme {
@include color-svg(
'../images/icons/v2/safety-number-outline-24.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/safety-number-outline-24.svg',
$color-gray-15
);
}
}
.module-contact-modal__make-admin__bubble-icon {
height: 16px;
width: 18px;
@include light-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/group-outline-20.svg',
$color-gray-15
);
}
}
.module-contact-modal__remove-from-group__bubble-icon {
height: 16px;
width: 16px;
@include light-theme {
@include color-svg(
'../images/icons/v2/leave-group-outline-16.svg',
$color-gray-75
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/leave-group-outline-16.svg',
$color-gray-15
);
}
}
.module-contact-modal__close-button {
@include button-reset;
position: absolute;
top: 10px;
right: 12px;
width: 24px;
height: 24px;
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-75);
@include dark-theme() {
@include color-svg('../images/icons/v2/x-24.svg', $color-gray-25);
}
&:focus {
@include keyboard-mode {
background-color: $ultramarine-ui-light;
}
}
}
.module-background-color {
&__default {
background-color: $color-black-alpha-40;
}
@each $color, $value in $conversation-colors {
&__#{$color} {
background-color: $value;
}
}
}
.module-tooltip {
--tooltip-text-color: #{$color-gray-75};
--tooltip-background-color: #{$color-gray-02};
@mixin tooltip-dark-theme-variables {
--tooltip-text-color: #{$color-gray-05};
--tooltip-background-color: #{$color-gray-65};
}
&--dark-theme {
@include tooltip-dark-theme-variables;
}
@include dark-theme {
@include tooltip-dark-theme-variables;
}
background-color: var(--tooltip-background-color);
border-radius: 8px;
color: var(--tooltip-text-color);
display: inline-block;
padding: 8px 21px;
position: fixed;
text-align: center;
z-index: 999;
.module-tooltip-arrow {
position: absolute;
}
.module-tooltip-arrow::after {
border: solid 6px transparent;
content: '';
display: block;
height: 0;
margin-left: -6px;
margin-top: -6px;
position: absolute;
width: 0;
}
&[data-placement='top'] {
margin-bottom: 12px;
.module-tooltip-arrow {
bottom: 0;
}
.module-tooltip-arrow::after {
bottom: -12px;
border-top-color: var(--tooltip-background-color);
}
}
&[data-placement='right'] {
margin-left: 12px;
.module-tooltip-arrow {
left: 0;
}
.module-tooltip-arrow::after {
left: -6px;
border-right-color: var(--tooltip-background-color);
}
}
&[data-placement='bottom'] {
margin-top: 12px;
.module-tooltip-arrow {
top: 0;
}
.module-tooltip-arrow::after {
top: -6px;
border-bottom-color: var(--tooltip-background-color);
}
}
&[data-placement='left'] {
margin-right: 12px;
.module-tooltip-arrow {
right: 0;
}
.module-tooltip-arrow::after {
right: -12px;
border-left-color: var(--tooltip-background-color);
}
}
}
// Module: Chat Session Refreshed Notification
.module-chat-session-refreshed-notification {
@include font-body-2;
display: flex;
flex-direction: column;
align-items: center;
}
.module-chat-session-refreshed-notification__first-line {
margin-bottom: 12px;
display: flex;
flex-direction: row;
align-items: center;
margin-left: auto;
margin-right: auto;
}
.module-chat-session-refreshed-notification__icon {
height: 16px;
width: 16px;
display: inline-block;
margin-right: 8px;
@include light-theme {
@include color-svg('../images/icons/v2/refresh-16.svg', $color-gray-60);
}
@include dark-theme {
@include color-svg('../images/icons/v2/refresh-16.svg', $color-gray-25);
}
}
.module-chat-session-refreshed-notification__button {
@include button-reset;
@include button-light-blue-text;
@include button-small;
@include font-body-2;
padding: 5px 12px;
}
// Module: Chat Session Refreshed Dialog
.module-chat-session-refreshed-dialog {
width: 360px;
padding: 16px;
padding-top: 28px;
border-radius: 8px;
margin-left: auto;
margin-right: auto;
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-95;
}
}
.module-chat-session-refreshed-dialog__image {
text-align: center;
}
.module-chat-session-refreshed-dialog__title {
@include font-body-1-bold;
margin-top: 10px;
margin-bottom: 3px;
}
.module-chat-session-refreshed-dialog__buttons {
text-align: right;
margin-top: 20px;
}
.module-chat-session-refreshed-dialog__button {
@include font-body-1-bold;
@include button-reset;
@include button-primary;
border-radius: 4px;
padding: 7px 14px;
margin-left: 12px;
}
.module-chat-session-refreshed-dialog__button--secondary {
@include button-secondary;
}
/* Third-party module: react-contextmenu*/
.react-contextmenu {
@include popper-shadow();
outline: none;
border-radius: 4px;
min-width: 220px;
padding: 6px 0;
opacity: 0;
user-select: none;
@include light-theme {
background-color: $color-white;
}
@include dark-theme {
background-color: $color-gray-75;
}
}
.react-contextmenu--visible {
z-index: 1000;
opacity: 1;
}
.react-contextmenu-item {
outline: none;
cursor: pointer;
white-space: nowrap;
@include font-body-2;
padding: 7px 12px;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
&--divider {
height: 1px;
margin: 6px 0;
padding: 0;
@include light-theme {
background-color: $color-gray-15;
}
@include dark-theme {
background-color: $color-gray-60;
}
}
}
.react-contextmenu-item--checked:before {
content: '';
display: inline-block;
position: absolute;
right: 7px;
@include light-theme {
color: $color-gray-90;
}
@include dark-theme {
color: $color-gray-02;
}
}
.react-contextmenu-item.react-contextmenu-submenu {
padding: 0;
}
.react-contextmenu-item.react-contextmenu-submenu > .react-contextmenu-item {
padding-right: 36px;
}
.react-contextmenu-item.react-contextmenu-submenu
> .react-contextmenu-item:after {
content: ' ';
display: inline-block;
height: 18px;
position: absolute;
right: 7px;
width: 12px;
@include light-theme {
@include color-svg(
'../images/icons/v2/chevron-right-16.svg',
$color-gray-75
);
color: $color-gray-90;
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/chevron-right-16.svg',
$color-gray-15
);
color: $color-gray-02;
}
}
.react-contextmenu-item.react-contextmenu-item--active,
.react-contextmenu-item.react-contextmenu-item--selected {
color: $color-black;
@include light-theme {
background-color: $color-gray-15;
}
@include dark-theme {
background-color: $color-gray-60;
color: $color-white;
}
}
.react-contextmenu-item.react-contextmenu-item--active.react-contextmenu-item--checked:before,
.react-contextmenu-item.react-contextmenu-item--selected.react-contextmenu-item--checked:before {
color: $color-black;
@include dark-theme {
color: $color-white;
}
}
.react-contextmenu-item.react-contextmenu-submenu
> .react-contextmenu-item.react-contextmenu-item--active:after,
.react-contextmenu-item.react-contextmenu-submenu
> .react-contextmenu-item.react-contextmenu-item--selected:after {
color: $color-black;
@include dark-theme {
color: $color-white;
}
}
// All media query widths have 300px added to account for the left pane
// And have been tweaked for smoother transitions
// To hide in small breakpoints
.module-message__buttons__download {
display: none;
}
.module-message__buttons__reply {
display: none;
}
.module-message__buttons__react {
display: none;
}
// To limit messages with things forcing them wider, like long attachment names
.module-message__container {
&--incoming {
align-self: flex-start;
}
&--outgoing {
align-self: flex-end;
}
&--with-reactions {
margin-bottom: -10px;
}
&--deleted-for-everyone {
font-style: italic;
}
}
.module-message__context {
&--icon::before {
content: ' ';
display: inline-block;
height: 14px;
margin-right: 8px;
width: 14px;
vertical-align: middle;
}
&__download::before {
@include light-theme {
@include color-svg(
'../images/icons/v2/save-outline-24.svg',
$color-black
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/save-solid-24.svg',
$color-gray-15
);
}
}
&__reply::before {
@include light-theme {
@include color-svg(
'../images/icons/v2/reply-outline-24.svg',
$color-black
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/reply-solid-24.svg',
$color-gray-15
);
}
}
&__react::before {
@include light-theme {
@include color-svg(
'../images/icons/v2/add-emoji-outline-24.svg',
$color-black
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/add-emoji-outline-24.svg',
$color-gray-15
);
}
}
&__more-info::before {
@include light-theme {
@include color-svg(
'../images/icons/v2/info-outline-24.svg',
$color-black
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/info-outline-24.svg',
$color-gray-15
);
}
}
&__retry-send::before {
@include light-theme {
@include color-svg('../images/icons/v2/send-24.svg', $color-black);
}
@include dark-theme {
@include color-svg('../images/icons/v2/send-24.svg', $color-gray-15);
}
}
&__delete-message::before {
@include light-theme {
@include color-svg(
'../images/icons/v2/trash-outline-24.svg',
$color-black
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/trash-solid-24.svg',
$color-gray-15
);
}
}
&__delete-message-for-everyone::before {
@include light-theme {
@include color-svg(
'../images/icons/v2/trash-outline-24.svg',
$color-black
);
}
@include dark-theme {
@include color-svg(
'../images/icons/v2/trash-solid-24.svg',
$color-gray-15
);
}
}
}
/* Spec: container < 437px */
@media (min-width: 0px) and (max-width: 799px) {
.module-message {
// Add 2px for 1px border
max-width: 302px;
}
}
/* Spec: container > 438px and container < 593px */
@media (min-width: 800px) and (max-width: 925px) {
.module-message {
// Add 2px for 1px border
max-width: 376px;
}
// Spec: container < 438px
.module-message--incoming {
margin-right: auto;
}
.module-message--outgoing {
margin-left: auto;
}
// To hide in small breakpoints
.module-message__buttons__download {
display: inline-block;
}
.module-message__buttons__reply {
display: inline-block;
}
.module-message__buttons__react {
display: inline-block;
}
// To hide in larger breakpoints
.module-message__context__download {
display: none;
}
.module-message__context__reply {
display: none;
}
}
// Spec: container > 593px
@media (min-width: 926px) {
.module-message {
max-width: 66%;
}
.module-message--incoming {
margin-right: auto;
}
.module-message--outgoing {
margin-left: auto;
}
// To hide in small breakpoints
.module-message__buttons__download {
display: inline-block;
}
.module-message__buttons__reply {
display: inline-block;
}
.module-message__buttons__react {
display: inline-block;
}
// To hide in larger breakpoints
.module-message__context__download {
display: none;
}
.module-message__context__reply {
display: none;
}
.module-message__context__react {
display: none;
}
}