tweb/src/scss/partials/_chat.scss
morethanwords f041d1bd69 A lot of changes:
Right sidebar animation
Fix animations speed with translate3d
Folders tabs scroll
Fix ripple animation
Right sidebar translateZ blink fix
Misc
2020-09-23 23:29:53 +03:00

1206 lines
20 KiB
SCSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#bubble-contextmenu > div {
padding: 0 84px 0 16px;
@include respond-to(handhelds) {
padding: 0 60px 0 16px;
}
}
#topbar {
width: 100%;
background-color: #fff;
user-select: none;
box-shadow: 0px 1px 5px -1px rgba(0,0,0,0.21);
z-index: 1;
min-height: 56px;
max-height: 56px;
// border-bottom: 1px solid #DADCE0;
@include respond-to(handhelds) {
&.is-audio-shown, &.is-pinned-shown:not(.hide-pinned) {
& + #bubbles {
margin-top: 52px;
}
}
&.is-pinned-shown:not(.hide-pinned):not(.is-audio-shown) {
.pinned-message {
display: flex;
}
}
}
@include respond-to(not-handhelds) {
border-left: 1px solid #DADCE0;
border-right: 1px solid #DADCE0;
.sidebar-close-button, .menu-search {
display: none;
}
&.is-pinned-shown:not(.hide-pinned) {
.pinned-message {
display: flex;
}
}
}
/* @include respond-to(wide-screens) {
transition: .2s ease-in-out;
align-self: start;
body.is-right-column-shown & {
width: calc(100% - (#{$large-screen} / 4));
}
body.animation-level-0 & {
transition: none;
}
} */
@include respond-to(handhelds) {
.chat-mute-button, .chat-search-button {
display: none;
}
}
/* @include respond-to(handhelds) {
position: sticky;
top: 0;
z-index: 3;
} */
.chat-more-button {
.btn-menu {
top: calc(100% + 7px);
@include respond-to(handhelds) {
top: 29px;
}
}
@include respond-to(handhelds) {
margin-left: 0;
}
}
.chat-info {
flex: 1 1 auto;
overflow: hidden;
@include respond-to(medium-screens) {
body.is-right-column-shown & {
max-width: calc(100% - var(--right-column-width) * 1.6);
}
}
}
@include respond-to(medium-screens) {
&.is-pinned-shown {
body.is-right-column-shown & {
.chat-info {
max-width: calc(100% - var(--right-column-width) * 1.75);
}
}
}
&.is-pinned-shown.is-audio-shown {
body.is-right-column-shown & {
.chat-info {
max-width: calc(100% - var(--right-column-width) * 2.25);
}
}
}
}
.chat-utils {
display: flex;
align-items: center;
flex: 0 0 auto;
@include respond-to(medium-screens) {
transition: transform var(--layer-transition);
body.is-right-column-shown & {
transform: translate3d(calc(var(--right-column-width) * -1), 0, 0);
}
body.animation-level-0 & {
transition: none;
}
}
}
.chat-join {
width: auto;
width: 117px;
height: 36px;
font-weight: 400;
font-size: 0.875rem;
margin-right: .5rem;
&:not(.hide) + .chat-mute-button {
display: none;
}
}
.content {
flex: 1 1 auto;
padding-left: 10px;
max-width: 100%;
overflow: hidden;
@include respond-to(handhelds) {
max-width: 208px;
}
}
.person {
display: flex;
align-items: center;
cursor: pointer;
margin-left: 7px;
@include respond-to(handhelds) {
margin-left: 10px;
}
.bottom {
font-size: 14px;
//line-height: 18px;
color: #707579;
.online {
color: $color-blue;
}
}
}
#im-avatar {
width: 40px;
height: 40px;
line-height: 40px;
//font-size: 16px;
font-size: 16px;
flex: 0 0 auto;
&:before {
font-size: 20px;
}
&.tgico-avatar_deletedaccount:before {
font-size: 40px;
}
}
&.hide-pinned + #bubbles {
#bubbles-inner {
margin-bottom: .25rem;
}
}
}
#chat-input {
display: flex;
width: 100%;
max-width: var(--messages-container-width);
padding: .25rem 1rem 0;
flex-direction: column;
flex: 0 0 auto; /* Forces side columns to stay same width */
position: relative;
@include respond-to(medium-screens) {
width: calc(100% - var(--right-column-width));
transition: transform var(--layer-transition);
body.is-right-column-shown & {
transform: translate3d(calc(var(--right-column-width) / -2), 0, 0);
}
body.animation-level-0 & {
transition: none;
}
}
@include respond-to(handhelds) {
padding-left: .5rem;
padding-right: .5rem;
}
.chat-input-container {
display: flex;
align-items: center;
justify-content: space-between;
@include respond-to(handhelds) {
padding-bottom: .5rem;
}
@include respond-to(not-handhelds) {
padding-bottom: 21px;
}
}
/* @include respond-to(handhelds) {
position: sticky;
bottom: 0;
z-index: 3;
background: inherit;
overflow: hidden;
} */
#input-message {
background: none;
border: none;
width: 100%;
font-size: 16px;
padding: 10px 9px;
/* height: 100%; */
max-height: 30rem;
overflow-y: none;
resize: none;
border: none;
outline: none;
cursor: text;
}
[contenteditable=true]:empty:before {
content: attr(data-placeholder);
color: #a2acb4;
display: block; /* For Firefox By Ariel Flesler */
}
.toggle-emoticons {
&:before {
content: $tgico-smile;
}
&.flip-icon:before {
content: $tgico-keyboard;
}
}
#btn-record-cancel {
visibility: hidden;
opacity: 0;
transition: width .1s .1s, margin-right .1s .1s, visibility 0s .1s, opacity .1s 0s;
padding: 0;
z-index: 3;
}
.btn-send-container {
flex: 0 0 auto;
position: relative;
align-self: flex-end;
z-index: 2;
}
#btn-send {
color: #9e9e9e;
&.tgico-send {
color: $color-blue;
}
}
#btn-record-cancel, #btn-send {
font-size: 1.5rem;
line-height: 1.5rem;
background-color: #fff;
}
.record-time {
height: 44px;
line-height: 44px;
display: none;
&:after {
content: " ";
width: 10px;
height: 10px;
background-color: #e53935;
border-radius: 50%;
margin: 0 9px;
display: inline-block;
animation: recordBlink 1.25s infinite;
}
}
.record-ripple {
border-radius: 50%;
background-color: rgba(0, 0, 0, .2);
width: 240px;
height: 240px;
transform: scale(0);
position: absolute;
top: -94px;
left: -94px;
transition: transform .03s, visibility .1s;
visibility: hidden;
@include respond-to(handhelds) {
width: 300px;
height: 300px;
top: -124px;
left: -124px;
}
}
&.is-recording {
#btn-record-cancel {
opacity: 1;
visibility: visible;
margin-right: 9px;
transition: width .1s, margin-right .1s, visibility 0s .1s, opacity .1s .1s;
}
#attach-file {
display: none;
}
.record-time {
display: block;
}
.record-ripple {
transition: transform .03s, visibility 0s;
visibility: visible;
}
}
&:not(.is-recording) {
#btn-record-cancel {
margin-right: 0;
width: 0px;
}
}
}
@keyframes recordBlink {
0% {
opacity: 1;
}
50% {
opacity: .2;
}
100% {
opacity: 1;
}
}
#im-title {
cursor: pointer;
font-size: 18px;
line-height: 24px;
white-space: nowrap;
text-overflow: ellipsis;
max-width: calc(100% - 1.5rem);
overflow: hidden;
/* @include respond-to(handhelds) {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
} */
span.emoji {
vertical-align: inherit;
}
}
.info#im-subtitle {
margin-top: -2px;
}
// !WARNING, уже нельзя переименовать в ID, так как это заденет другие селекторы и вёрстка в чате поедет, например - стикер вместе с реплаем
.chat-container {
display: flex;
// padding: 200px;
width: 100%;
align-items: center;
//overflow: hidden;
flex-direction: column;
position: relative;
flex: 3;
.chat-background {
overflow: hidden;
&, &:before {
position: absolute !important;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
&:before {
content: "";
display: block;
background-image: url('assets/img/camomile_blurred.jpg');
background-size: cover;
background-position: center center;
@include respond-to(medium-screens) {
body.animation-level-2 & {
// !WARNING, МАГИЧЕСКОЕ ЧИСЛО
margin: -16rem -5rem -20rem 0;
transform: scale(1);
transform-origin: left center;
transition: transform var(--layer-transition);
}
body.animation-level-2.is-right-column-shown & {
transform: scale(.67);
}
}
}
}
#chat-background-canvas {
display: none;
}
.input-message {
display: flex;
align-items: center;
flex-direction: column;
width: calc(100% - 3.75rem);
justify-content: center;
background-color: #fff;
border-radius: 12px;
border-bottom-right-radius: 0;
box-shadow: 0 1px 2px 0 rgba(16, 35, 47, .07);
margin-right: 9px;
padding: 4.5px .5rem;
/* padding: 3px .5rem 6px .5rem; */
min-height: 54px;
max-height: 30rem;
caret-color: $button-primary-background;
flex: 1;
position: relative;
z-index: 3;
@include respond-to(handhelds) {
min-height: 46px;
padding: .5px .5rem;
}
&:after {
content: '';
position: absolute;
bottom: -.1875rem;
right: -8.4px;
width: .5625rem;
height: 1.25rem;
background-repeat: no-repeat no-repeat;
background-position: 0 100%;
background-image: url('assets/img/msg-tail-left-blur.svg');
transform: scaleX(-1);
}
#attach-file {
&.menu-open {
color: $color-blue;
background-color: transparent;
}
.btn-menu {
padding: 8px 0;
right: -8px;
bottom: calc(100% + 16px);
> div {
padding: 0 38px 0 16px;
}
}
}
> div {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
//min-height: inherit;
}
.reply-wrapper {
justify-content: flex-start;
overflow: hidden;
transition: .2s all;
height: 0px;
&.active {
height: 39px;
}
.reply {
width: 100%;
margin-left: .5rem;
min-height: 35px;
}
}
.new-message-wrapper {
//padding: 4.5px 0;
//padding-bottom: 4.5px;
align-items: flex-end;
.btn-icon:before {
vertical-align: bottom;
}
}
.input-message-container {
width: 1%;
max-height: inherit;
flex: 1 1 auto;
position: relative;
overflow: hidden;
> .scrollable {
position: relative;
}
}
.btn-icon {
display: block;
transition: .2s color;
flex: 0 0 auto;
font-size: 24px;
line-height: 24px;
padding: 10px 7px 9px 7.5px;
color: #8d969c;
&.active {
color: $color-blue;
}
}
.emoji {
font-size: 24px;
height: 24px;
width: 24px;
}
}
@include respond-to(handhelds) {
.pinned-message {
position: absolute !important;
top: 100%;
width: 100% !important;
background: #fff;
left: 0;
// border-top: 1px solid #ccc;
max-height: 100% !important;
// height: 100%;
height: 52px;
padding: 1rem;
&-subtitle {
line-height: 13px !important;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
max-width: 280px;
}
}
}
.pinned-message, .reply {
cursor: pointer;
display: flex;
flex-direction: row;
align-items: center;
overflow: hidden;
box-sizing: border-box;
width: 187px;
margin-right: 1rem;
max-height: 35px;
position: relative;
/* padding: .25rem; */
&.is-media {
.pinned-message-content, .reply-content {
padding-left: 40px;
}
}
html.no-touch &:hover {
background-color: rgba(112, 117, 121, 0.08);
}
&-border {
height: 32px;
border-radius: 1px;
min-width: 2px;
background: $color-blue;
}
&-content {
margin-left: 8px;
flex-grow: 1;
flex-shrink: 1;
overflow: hidden;
pointer-events: none;
position: relative;
height: 32px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
&-title {
color: $color-blue;
}
&-title, &-subtitle {
font-size: 14px;
//line-height: 18px;
//line-height: 1;
line-height: 15px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
// @include respond-to(handhelds) {
// line-height: 13px;
// }
}
&-subtitle {
white-space: nowrap;
color: #111;
}
&-media {
height: 32px;
width: 32px;
border-radius: 8px;
overflow: hidden;
position: absolute;
left: 0;
top: 0;
background-repeat: no-repeat;
background-size: cover;
background-position: center center;
}
i {
font-style: normal;
color: $color-blue;
}
img.emoji {
height: 16px;
width: 16px;
vertical-align: top;
}
span.emoji {
font-size: 16px;
vertical-align: unset;
}
}
.pinned-message {
display: none;
}
.pinned-container {
flex: 0 0 auto;
@include respond-to(handhelds) {
box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.15);
&:before {
width: 100%;
content: " ";
height: 52px;
left: 0;
top: 0;
position: absolute;
/* box-shadow: inset 0px 2px 3px 0px rgba(0, 0, 0, 0.15); */
box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 0.15);
}
}
.pinned-message-close, .pinned-audio-close, .pinned-audio-ico {
font-size: 1.5rem;
position: absolute;
display: flex;
justify-content: center;
right: 0;
&.tgico-close {
visibility: hidden;
@include respond-to(handhelds) {
font-size: 1.4rem;
right: 9px;
visibility: visible;
}
}
}
}
.pinned-audio {
display: flex;
flex-direction: column;
justify-content: center;
cursor: pointer;
//width: 210px;
@include respond-to(handhelds) {
height: 52px;
padding-left: 58px;
background: #fff;
width: 100%;
position: absolute;
left: 0;
top: 100%;
}
@include respond-to(not-handhelds) {
padding-left: 2.5rem;
padding-right: 2.5rem;
max-width: 210px;
position: relative;
}
&-ico {
left: 0;
right: auto !important;
color: #50a2e9;
@include respond-to(handhelds) {
margin-left: 20px;
}
&:before {
content: $tgico-largeplay;
}
&.flip-icon:before {
content: $tgico-largepause;
}
}
&-title {
font-weight: 500;
width: 100%;
max-width: 100%;
}
&-subtitle {
color: #707579;
}
&-title, &-subtitle {
white-space: nowrap;
text-overflow: ellipsis;
font-size: 14px;
line-height: 1.4;
overflow: hidden;
max-width: 240px;
}
}
/* #chat-closed {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: inherit;
z-index: 3;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
.tgico-chatsplaceholder {
font-size: 10rem;
color: #ABB0B3;
}
h3 {
font-size: 2rem;
color: #707579;
text-align: center;
}
.buttons {
display: flex;
justify-content: center;
align-items: center;
margin-top: 1rem;
button {
margin: 0 2.5rem;
width: 4rem;
height: 4rem;
background: #fff;
border: none;
position: relative;
font-size: 2rem;
color: #707579;
cursor: pointer;
box-shadow: 0 1px 2px 0 rgba(16, 35, 47, 0.07);
&:hover {
background: #4EA4F6;
color: #fff;
span {
color: #4EA4F6;
}
}
span {
position: absolute;
top: 100%;
left: 50%;
width: 100%;
padding-top: 1rem;
transform: translateX(-50%);
font-size: .9rem;
font-family: "Roboto";
}
}
}
} */
}
#bubbles {
/* overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none; */
width: 100%;
height: 100%;
max-height: 100%;
flex: 1 1 auto; /* Lets middle column shrink/grow to available width */
overflow: hidden;
position: relative;
html.is-safari & {
-webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); // fix safari overflow
}
> .scrollable {
height: auto;
/* position: absolute;
bottom: 0;
left: 0; */
//position: relative; // неизвестно зачем это было
//display: flex; // for end
//flex-direction: unset;
display: block;
/* display: flex;
flex-direction: column;
justify-content: flex-end; */
// * scrollbar takes some width, don't need to set padding for iOS
html.is-safari:not(.is-ios) & {
padding-left: 6px;
}
@include respond-to(medium-screens) {
transition: transform var(--layer-transition);
body.is-right-column-shown & {
transform: translate3d(calc(var(--right-column-width) / -2), 0, 0);
}
body.animation-level-0 & {
transition: none;
}
}
}
> .preloader-container {
@include respond-to(medium-screens) {
transition: transform var(--layer-transition);
body.is-right-column-shown & {
transform: translate3d(calc(var(--right-column-width) / -2), 0, 0);
}
body.animation-level-0 & {
transition: none;
}
}
}
&:not(.scrolled-down):not(.search-results-active) {
-webkit-mask-image: -webkit-linear-gradient(bottom, transparent, #000 20px);
mask-image: linear-gradient(0deg, transparent 0, #000 20px);
& + #bubbles-go-down {
--translateY: 0;
opacity: 1;
}
}
.preloader {
width: 100%;
height: 100%;
svg {
width: 50px;
height: 50px;
}
&-container .preloader-circular {
background-color: var(--message-time-background);
}
}
.search-group.search-group-messages {
padding: 0.25rem 0 .5rem;
}
}
#bubbles-inner {
width: 100%;
display: flex;
flex-direction: column;
flex-shrink: 1;
margin: 0 auto;
box-sizing: border-box;
min-height: 100%;
justify-content: flex-end;
padding: 0 1rem;
max-width: var(--messages-container-width);
@include respond-to(medium-screens) {
width: calc(100% - var(--right-column-width));
}
@include respond-to(handhelds) {
padding: 0 .5rem;
html.is-mac & {
-webkit-user-select: none;
-webkit-touch-callout: none;
}
}
&.is-chat {
.is-in .bubble__container {
margin-left: 45px;
//margin-left: 3rem; #DO JS3
@include respond-to(handhelds) {
max-width: calc(100% - var(--message-handhelds-margin));
}
}
}
&.is-channel:not(.is-chat) {
.bubble {
&__container {
max-width: 100%;
}
&.with-beside-button .bubble__container {
max-width: calc(100% - var(--message-beside-button-margin)) !important;
}
}
&:not(.has-rights) {
padding-bottom: 55px;
}
}
&:not(.is-channel), &.is-chat {
.message {
max-width: 480px;
}
}
&.is-scrolling .is-sticky {
opacity: 0.99999; // 0.99999 сделано для сафари, т.к. без этого будет прыжок при скролле в самом низу или верху
}
}
#bubbles-go-down {
position: absolute;
background-color: #fff;
border-radius: 50%;
width: 3.25rem;
height: 3.25rem;
color: $placeholder-color;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
right: 17.5px;
//bottom: 17.5px;
bottom: 96.5px;
cursor: pointer;
opacity: 0;
user-select: none;
z-index: 2;
transition: var(--btn-corner-transition), opacity .2s;
@include respond-to(handhelds) {
bottom: 75.5px;
right: .5rem;
width: 2.875rem;
height: 2.875rem;
}
&:before {
margin-left: .75px;
}
@include respond-to(medium-screens) {
transition: transform var(--layer-transition), opacity .2s;
body.is-right-column-shown & {
transform: translate3d(calc(var(--right-column-width) * -1), var(--translateY), 0);
}
}
}
.popup {
&.popup-delete-message {
.popup-header {
margin-bottom: 1rem;
}
}
}
.chat-search {
position: absolute !important;
top: 0;
z-index: 2;
&-footer {
height: 46px;
padding: 0 8px;
flex: 0 0 auto;
width: 100%;
background-color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0px -1px 5px -1px rgba(0,0,0,0.21);
.chat-search-count {
margin-left: 8px;
color: #949596;
}
& + #chat-input {
display: none;
}
}
&-count {
&:empty {
display: none;
}
&:not(:empty) + .btn-icon {
display: none;
}
}
&-controls {
display: flex;
}
&-results {
width: 100%;
height: 100%;
max-height: 100%;
overflow: hidden;
position: absolute;
top: 0;
left: 0;
visibility: hidden;
opacity: 0;
background-color: #fff;
transition: .2s ease;
&.active {
opacity: 1;
visibility: visible;
}
}
.tgico-up {
margin-right: 2px;
}
}
.quiz-hint {
position: absolute;
left: 0;
display: flex;
width: 100%;
justify-content: center;
z-index: 5;
top: 8px;
align-items: center;
transform: translateY(calc(-100% - 10px));
transition: transform .2s ease;
&.active {
transform: translateY(0);
}
.container {
background: rgba(0, 0, 0, .7);
text-align: center;
width: auto;
padding: 10px 18px 12px 50px;
min-height: 48px;
border-radius: 12px;
line-height: 1.5;
color: white;
font-size: 15px;
max-width: 400px;
overflow: hidden;
text-align: left;
position: relative;
display: flex;
align-items: center;
flex-wrap: wrap;
@include respond-to(handhelds) {
padding: 10px 18px 12px 54px;
margin: 0 10px;
font-size: 14px;
}
.text {
word-break: break-word;
}
&:before {
content: $tgico-info2;
position: absolute;
left: 15px;
font-size: 1.5rem;
top: 12px;
}
a {
color: white;
border-bottom: 1px solid white;
}
}
}