mirror of
https://github.com/element-hq/element-web.git
synced 2024-12-05 05:38:41 +03:00
442 lines
9.3 KiB
SCSS
442 lines
9.3 KiB
SCSS
/*
|
|
Copyright 2015, 2016 OpenMarket Ltd
|
|
Copyright 2018 New Vector Ltd
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
.mx_MessageComposer_wrapper {
|
|
vertical-align: middle;
|
|
margin: auto;
|
|
border-top: 1px solid $primary-hairline-color;
|
|
position: relative;
|
|
|
|
display: grid;
|
|
grid-template:
|
|
"reply reply" auto
|
|
"composer controls" auto
|
|
/ 1fr auto;
|
|
|
|
/* the below is required, without this some unexpected scroll jump
|
|
will occur when erasing the composer content or jumping to voice note
|
|
recording */
|
|
min-height: 45px;
|
|
|
|
.mx_ReplyPreview {
|
|
grid-area: reply;
|
|
}
|
|
|
|
.mx_MessageComposer_row {
|
|
grid-area: composer;
|
|
}
|
|
|
|
.mx_MessageComposer_controls {
|
|
grid-area: controls;
|
|
display: flex;
|
|
align-items: flex-end;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
>[role=button] {
|
|
margin-bottom: 7px;
|
|
}
|
|
|
|
.mx_VoiceRecordComposerTile_delete {
|
|
margin-bottom: 9px;
|
|
}
|
|
|
|
.mx_VoiceRecordComposerTile_stop,
|
|
.mx_MessageComposer_sendMessage {
|
|
margin-bottom: $spacing-4;
|
|
}
|
|
|
|
.mx_VoiceMessagePrimaryContainer {
|
|
margin-right: $spacing-8;
|
|
}
|
|
}
|
|
|
|
.mx_MessageComposer_autocomplete_wrapper {
|
|
position: relative;
|
|
height: 0;
|
|
}
|
|
|
|
.mx_MessageComposer_row {
|
|
display: flex;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
border: 1px solid $quaternary-content;
|
|
border-radius: 12px;
|
|
padding: $spacing-12 $spacing-8;
|
|
margin-right: $spacing-16;
|
|
|
|
transition: border-color var(--transition-short);
|
|
|
|
&[data-notice=true] {
|
|
border-color: transparent;
|
|
color: $secondary-content;
|
|
|
|
p {
|
|
margin: 0;
|
|
line-height: 0;
|
|
}
|
|
|
|
svg {
|
|
vertical-align: middle;
|
|
position: relative;
|
|
top: -2px;
|
|
}
|
|
}
|
|
|
|
&:focus-within {
|
|
border-color: $tertiary-content;
|
|
}
|
|
|
|
&[aria-disabled=true] {
|
|
cursor: not-allowed;
|
|
}
|
|
}
|
|
|
|
.mx_MessageComposer .mx_MessageComposer_avatar {
|
|
position: absolute;
|
|
left: 26px;
|
|
}
|
|
|
|
.mx_MessageComposer .mx_MessageComposer_avatar .mx_BaseAvatar {
|
|
display: block;
|
|
}
|
|
|
|
.mx_MessageComposer_composecontrols {
|
|
width: 100%;
|
|
}
|
|
|
|
.mx_MessageComposer_e2eIcon.mx_E2EIcon {
|
|
margin: 0 0 2px;
|
|
width: 12px;
|
|
height: 12px;
|
|
align-self: end;
|
|
}
|
|
|
|
.mx_MessageComposer_noperm_error {
|
|
font-style: italic;
|
|
color: $tertiary-content;
|
|
font-size: $font-12px;
|
|
}
|
|
|
|
.mx_MessageComposer_input_wrapper {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
cursor: text;
|
|
}
|
|
|
|
.mx_MessageComposer_input {
|
|
flex: 1;
|
|
vertical-align: middle;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 60px;
|
|
justify-content: flex-start;
|
|
align-items: flex-start;
|
|
font-size: $font-14px;
|
|
margin-right: 6px;
|
|
}
|
|
|
|
.mx_MessageComposer_editor {
|
|
width: 100%;
|
|
max-height: 120px;
|
|
min-height: 19px;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
word-break: break-word;
|
|
}
|
|
|
|
// FIXME: rather unpleasant hack to get rid of <p/> margins.
|
|
// really we should be mixing in markdown-body from gfm.css instead
|
|
.mx_MessageComposer_editor > :first-child {
|
|
margin-top: 0 !important;
|
|
}
|
|
|
|
.mx_MessageComposer_editor > :last-child {
|
|
margin-bottom: 0 !important;
|
|
}
|
|
|
|
@keyframes visualbell {
|
|
from {
|
|
background-color: $visual-bell-bg-color;
|
|
}
|
|
|
|
to {
|
|
background-color: $background;
|
|
}
|
|
}
|
|
|
|
.mx_MessageComposer_input_error {
|
|
animation: 0.2s visualbell;
|
|
}
|
|
|
|
.mx_MessageComposer_input pre {
|
|
background-color: $rte-code-bg-color;
|
|
border-radius: 3px;
|
|
padding: 10px;
|
|
}
|
|
|
|
.mx_MessageComposer_input textarea {
|
|
display: block;
|
|
width: 100%;
|
|
padding: 0px;
|
|
margin-top: 6px;
|
|
margin-bottom: 6px;
|
|
border: 0px;
|
|
resize: none;
|
|
outline: none;
|
|
box-shadow: none;
|
|
color: $primary-content;
|
|
background-color: $background;
|
|
font-size: $font-14px;
|
|
max-height: 120px;
|
|
overflow: auto;
|
|
}
|
|
|
|
/* hack for FF as vertical alignment of custom placeholder text is broken */
|
|
.mx_MessageComposer_input textarea::-moz-placeholder {
|
|
line-height: 100%;
|
|
color: $accent;
|
|
opacity: 1.0;
|
|
}
|
|
|
|
.mx_MessageComposer_input textarea::-webkit-input-placeholder {
|
|
color: $accent;
|
|
}
|
|
|
|
.mx_MessageComposer_button_highlight {
|
|
background: rgba($accent, 0.25);
|
|
|
|
// make the icon the accent color too
|
|
&::before {
|
|
background-color: $accent !important;
|
|
}
|
|
}
|
|
|
|
.mx_MessageComposer_button {
|
|
--size: 26px;
|
|
position: relative;
|
|
cursor: pointer;
|
|
height: var(--size);
|
|
line-height: var(--size);
|
|
width: auto;
|
|
padding-left: var(--size);
|
|
border-radius: 50%;
|
|
margin-right: 6px;
|
|
margin-bottom: 7px;
|
|
|
|
&:last-child {
|
|
margin-right: auto;
|
|
}
|
|
|
|
&::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 3px;
|
|
left: 3px;
|
|
height: 20px;
|
|
width: 20px;
|
|
background-color: $icon-button-color;
|
|
mask-repeat: no-repeat;
|
|
mask-size: contain;
|
|
mask-position: center;
|
|
}
|
|
|
|
&::after {
|
|
content: '';
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
z-index: 0;
|
|
width: var(--size);
|
|
height: var(--size);
|
|
border-radius: 50%;
|
|
}
|
|
|
|
&:hover,
|
|
&.mx_MessageComposer_closeButtonMenu {
|
|
&::after {
|
|
background: rgba($accent, 0.1);
|
|
}
|
|
|
|
&::before {
|
|
background-color: $accent;
|
|
}
|
|
}
|
|
|
|
&.mx_MessageComposer_hangup:not(.mx_AccessibleButton_disabled)::before {
|
|
background-color: $alert;
|
|
}
|
|
}
|
|
|
|
.mx_MessageComposer_upload::before {
|
|
mask-image: url('$(res)/img/element-icons/room/composer/attach.svg');
|
|
}
|
|
|
|
.mx_MessageComposer_poll::before {
|
|
mask-image: url('$(res)/img/element-icons/room/composer/poll.svg');
|
|
}
|
|
|
|
.mx_MessageComposer_voiceMessage::before {
|
|
mask-image: url('$(res)/img/voip/mic-on-mask.svg');
|
|
}
|
|
|
|
.mx_MessageComposer_emoji::before {
|
|
mask-image: url('$(res)/img/element-icons/room/composer/emoji.svg');
|
|
}
|
|
|
|
.mx_MessageComposer_location::before {
|
|
mask-image: url('$(res)/img/element-icons/room/composer/location.svg');
|
|
}
|
|
|
|
.mx_MessageComposer_stickers::before {
|
|
mask-image: url('$(res)/img/element-icons/room/composer/sticker.svg');
|
|
}
|
|
|
|
.mx_MessageComposer_buttonMenu::before {
|
|
mask-image: url('$(res)/img/image-view/more.svg');
|
|
}
|
|
|
|
.mx_MessageComposer_sendMessageWrapper {
|
|
--sendMessageSize: 32px;
|
|
transition: all var(--transition-short);
|
|
}
|
|
|
|
.mx_MessageComposer_sendMessageWrapper,
|
|
.mx_MessageComposer_sendMessageWrapper-enter,
|
|
.mx_MessageComposer_sendMessageWrapper-exit {
|
|
width: 0;
|
|
transform: scale(.6);
|
|
opacity: 0;
|
|
}
|
|
|
|
.mx_MessageComposer_sendMessageWrapper-enter-active {
|
|
width: var(--sendMessageSize);
|
|
transform: scale(1);
|
|
opacity: 1;
|
|
}
|
|
|
|
.mx_MessageComposer_sendMessage {
|
|
cursor: pointer;
|
|
position: relative;
|
|
width: var(--sendMessageSize);
|
|
height: var(--sendMessageSize);
|
|
border-radius: 100%;
|
|
background-color: $accent;
|
|
|
|
&::before {
|
|
position: absolute;
|
|
height: 16px;
|
|
width: 16px;
|
|
top: 8px;
|
|
left: 9px;
|
|
|
|
mask-image: url('$(res)/img/element-icons/send-message.svg');
|
|
mask-repeat: no-repeat;
|
|
mask-size: contain;
|
|
mask-position: center;
|
|
|
|
background-color: $button-fg-color;
|
|
content: '';
|
|
}
|
|
}
|
|
|
|
.mx_MessageComposer_formatting {
|
|
cursor: pointer;
|
|
margin: 0 11px;
|
|
width: 24px;
|
|
height: 18px;
|
|
}
|
|
|
|
.mx_MessageComposer_formatbar_wrapper {
|
|
width: 100%;
|
|
background-color: $menu-bg-color;
|
|
box-shadow: inset 0 1px 0 0 rgba(0, 0, 0, 0.08);
|
|
}
|
|
|
|
.mx_MessageComposer_formatbar {
|
|
margin: auto;
|
|
display: flex;
|
|
|
|
height: 30px;
|
|
|
|
box-sizing: border-box;
|
|
padding-left: 62px;
|
|
|
|
flex-direction: row;
|
|
align-items: center;
|
|
font-size: $font-10px;
|
|
color: $info-plinth-fg-color;
|
|
}
|
|
|
|
.mx_MessageComposer_formatbar * {
|
|
margin-right: 4px;
|
|
}
|
|
|
|
.mx_MessageComposer_format_button,
|
|
.mx_MessageComposer_formatbar_cancel,
|
|
.mx_MessageComposer_formatbar_markdown {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.mx_MessageComposer_formatbar_cancel {
|
|
margin-right: 22px;
|
|
}
|
|
|
|
.mx_MessageComposer_formatbar_markdown {
|
|
height: 17px;
|
|
width: 30px;
|
|
margin-right: 64px;
|
|
}
|
|
|
|
.mx_MessageComposer_input_markdownIndicator {
|
|
height: 10px;
|
|
width: 12px;
|
|
padding: 4px 4px 4px 0;
|
|
}
|
|
|
|
.mx_MessageComposer_formatbar_markdown,
|
|
.mx_MessageComposer_input_markdownIndicator {
|
|
cursor: pointer;
|
|
mask-image: url('$(res)/img/markdown.svg');
|
|
mask-size: contain;
|
|
mask-position: center;
|
|
mask-repeat: no-repeat;
|
|
background-color: $icon-button-color;
|
|
|
|
&.mx_MessageComposer_markdownDisabled {
|
|
opacity: 0.2;
|
|
}
|
|
}
|
|
|
|
.mx_MatrixChat_useCompactLayout {
|
|
.mx_MessageComposer_input {
|
|
min-height: 50px;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unstable compact mode
|
|
*/
|
|
|
|
.mx_MessageComposer.mx_MessageComposer--compact {
|
|
margin-right: 0;
|
|
|
|
.mx_MessageComposer_button:last-child {
|
|
margin-right: 0;
|
|
}
|
|
}
|