// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only .module-composition-input { &__quill { height: 100%; padding-inline: 12px; .ql-editor { caret-color: transparent; padding: 0; text-align: start; white-space: break-spaces; line-height: inherit; &--loaded { caret-color: auto; } &.ql-blank::before { inset-inline: 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-inline: 4px; height: 22px; line-height: 22px; @include dark-theme { background-color: $color-gray-60; } } &__input { $border-size: 1px; border-radius: 18px; overflow: hidden; word-break: break-word; // Override Quill styles .ql-container { // Inherit global font stack font-family: inherit; @include font-body-1; } .ql-blank::before { @include light-theme() { color: $color-gray-45; } @include dark-theme() { color: $color-gray-25; } } @include light-theme() { // Same as background color background-color: $color-gray-05; color: $color-gray-90; } @include dark-theme() { // Same as background color background-color: $color-gray-75; color: $color-gray-05; } &__scroller { $padding-top: 6px; padding-block: $padding-top; padding-inline: 0; min-height: calc(32px - 2 * $border-size); max-height: calc(72px - 2 * $border-size); overflow: auto; &::-webkit-scrollbar-thumb { @include light-theme { border: 2px solid $color-gray-05; } @include dark-theme { border: 2px solid $color-gray-75; } } &--large { $largeHeight: calc(212px - 2 * $border-size); $largeHeightContentBox: calc($largeHeight - 2 * $padding-top); // Explicit height needed to allow `height: 100%` on children height: $largeHeight; max-height: $largeHeight; min-height: $largeHeight; .DraftEditor-root { height: $largeHeightContentBox; } } &--link-preview { padding-top: 0; } } border: $border-size solid transparent; &:focus-within { outline: 0; @include keyboard-mode { border: $border-size solid $color-ultramarine; } } } // Note: This is referenced in ModalHost to ensure 'external' clicks on it still work &__format-menu { padding-block: 6px; padding-inline: 12px; border-radius: 8px; z-index: $z-index-above-popup; display: flex; flex-direction: row; opacity: 0; transition: opacity ease 200ms; // The same box-shadow in popper-shadow mixin, just halved box-shadow: 0px 4px 10px rgba(0, 0, 0, 30%), 0px 0px 4px rgba(0, 0, 0, 5%); @include light-theme() { background: $color-white; } @include dark-theme() { background: $color-gray-65; } &__item { $parent: &; @include button-reset; height: 24px; width: 24px; border-radius: 4px; margin-inline-end: 8px; &:last-child { margin-inline-end: 0; } @include mouse-mode { &:hover { background-color: $color-gray-05; } } @include dark-mouse-mode { &:hover { background-color: $color-gray-60; } } &--active { @include light-theme { background-color: $color-gray-05; } @include dark-theme { background-color: rgba($color-gray-45, 30%); } @include mouse-mode { &:hover { background-color: $color-gray-15; } } @include dark-mouse-mode { &:hover { background-color: rgba($color-gray-45, 50%); } } } &__popover { @include font-subtitle-bold; padding-block: 5px; padding-inline: 8px; text-align: center; border-radius: 4px; margin-bottom: 8px; opacity: 0; transition: opacity 120ms ease-out; @include light-theme { background-color: $color-black; color: $color-gray-05; } @include dark-theme { background-color: $color-gray-65; color: $color-gray-05; } &__shortcut { @include font-caption-bold; @include light-theme { color: $color-gray-15; } @include dark-theme { color: $color-gray-25; } } } &__icon { height: 20px; width: 20px; margin: 2px; &--bold { @include dark-theme { @include color-svg( '../images/icons/v3/text_format/textformat-bold-bold.svg', $color-gray-25 ); } @include light-theme { @include color-svg( '../images/icons/v3/text_format/textformat-bold-bold.svg', $color-gray-60 ); } } &--italic { @include dark-theme { @include color-svg( '../images/icons/v3/text_format/textformat-italic-bold.svg', $color-gray-25 ); } @include light-theme { @include color-svg( '../images/icons/v3/text_format/textformat-italic-bold.svg', $color-gray-60 ); } } &--strike { @include dark-theme { @include color-svg( '../images/icons/v3/text_format/textformat-strikethrough-bold.svg', $color-gray-25 ); } @include light-theme { @include color-svg( '../images/icons/v3/text_format/textformat-strikethrough-bold.svg', $color-gray-60 ); } } &--monospace { @include dark-theme { @include color-svg( '../images/icons/v3/text_format/textformat-monospace-bold.svg', $color-gray-25 ); } @include light-theme { @include color-svg( '../images/icons/v3/text_format/textformat-monospace-bold.svg', $color-gray-60 ); } } &--spoiler { @include dark-theme { @include color-svg( '../images/icons/v3/text_format/textformat-spoiler-bold.svg', $color-gray-25 ); } @include light-theme { @include color-svg( '../images/icons/v3/text_format/textformat-spoiler-bold.svg', $color-gray-60 ); } } // Here we look at hover for the parent so the 2px border is a hover target // Note: We can't use the mixins because .mouse-mode would end up after the > .mouse-mode #{$parent}:hover & { background-color: $color-gray-90; } .dark-theme.mouse-mode #{$parent}:hover & { background-color: $color-gray-15; } &--active { @include dark-theme { background-color: $color-ultramarine-light; } @include light-theme { background-color: $color-ultramarine; } // Override above hover behaviors .mouse-mode #{$parent}:hover & { background-color: $color-ultramarine; } .dark-theme.mouse-mode #{$parent}:hover & { background-color: $color-ultramarine-light; } } } } } // Note: This is referenced in ModalHost to ensure 'external' clicks on it still work &__suggestions { padding: 0; margin-bottom: 6px; border-radius: 8px; z-index: $z-index-above-popup; 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-block: 0; padding-inline: 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-inline-start: 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-inline-start: 8px; } stroke: $color-white; } &__editing-message { @include font-body-2-bold; margin-top: 10px; user-select: none; &::before { content: ''; display: inline-block; height: 16px; margin-block: 0; margin-inline: 10px 8px; width: 16px; vertical-align: middle; @include color-svg('../images/icons/v3/edit/edit.svg', $color-black); @include dark-theme { @include color-svg('../images/icons/v3/edit/edit.svg', $color-gray-15); } } &__attachment img { border-radius: 4px; height: 18px; position: absolute; inset-inline-end: 8px; top: 8px; width: 18px; } } } div.CompositionInput__link-preview { background: $color-gray-02; border-radius: 8px; flex-direction: row-reverse; justify-content: space-between; margin: 6px; min-height: 74px; overflow: hidden; @include dark-theme { background: $color-gray-80; } &__icon-container { align-items: center; display: flex; margin-inline: 8px 0; } &__content { margin-inline-end: 0; padding-bottom: 8px; padding-inline-start: 12px; padding-top: 8px; } &__no-image { margin-inline-end: 0; min-width: 74px; } } button.CompositionInput__link-preview__close-button { -webkit-mask: none; @include rounded-corners; align-items: center; backdrop-filter: blur(32px); background: $color-white-alpha-80; display: flex; height: 20px; justify-content: center; inset-inline-end: 6px; top: 6px; width: 20px; &::before { @include color-svg('../images/icons/v3/x/x.svg', $color-gray-75); content: ''; height: 16px; width: 16px; @include dark-theme { background-color: $color-gray-05; } } } // Note: These are referenced in formatting/matchers.ts, to detect these styles on paste .quill { &--monospace { font-family: $monospace; } &--spoiler { @include light-theme { // vs color/$color-gray-90, background/$color-gray-05 background-color: $color-gray-25; } @include dark-theme { // vs color/$color-gray-05, background/$color-gray-95 background-color: $color-gray-45; } } }