discourse/plugins/chat/assets/stylesheets/common/chat-composer-upload.scss
Joffrey JAFFEUX bf886662df
UX: improves composer and thread panel (#21210)
This pull request is a full overhaul of the chat-composer and contains various improvements to the thread panel. They have been grouped in the same PR as lots of improvements/fixes to the thread panel needed an improved composer. This is meant as a first step.

### New features included in this PR

- A resizable side panel
- A clear dropzone area for uploads
- A simplified design for image uploads, this is only a first step towards more redesign of this area in the future

### Notable fixes in this PR

- Correct placeholder in thread panel
- Allows to edit the last message of a thread with arrow up
- Correctly focus composer when replying to a message
- The reply indicator is added instantly in the channel when starting a thread
- Prevents a large variety of bug where the composer could bug and prevent sending message or would clear your input while it has content

### Technical notes

To achieve this PR, three important changes have been made:

- `<ChatComposer>` has been fully rewritten and is now a glimmer component
- The chat composer now takes a `ChatMessage` as input which can directly be used in other operations, it simplifies a lot of logic as we are always working a with a `ChatMessage`
- `TextareaInteractor` has been created to wrap the existing `TextareaTextManipulation` mixin, it will make future migrations easier and allow us to have a less polluted `<ChatComposer>`

Note ".chat-live-pane" has been renamed ".chat-channel"

Design for upload dropzone is from @chapoi
2023-04-25 10:23:03 +02:00

104 lines
1.9 KiB
SCSS

.chat-composer-upload {
display: inline-flex;
height: 64px;
padding: 0.5rem;
border: 1px solid var(--primary-low-mid);
margin-right: 0.5em;
position: relative;
border-radius: 5px;
box-sizing: border-box;
&--image:not(.chat-composer-upload--in-progress) {
padding: 0;
.preview-img {
height: 62px;
width: 62px;
box-sizing: border-box;
}
}
&:last-child {
margin-right: 0;
}
&:hover {
.chat-composer-upload__remove-btn {
visibility: visible;
background: rgba(var(--always-black-rgb), 0.9);
padding: 5px;
border-radius: 100%;
font-size: var(--font-down-2);
}
}
&__remove-btn {
border: 1px solid var(--primary-medium);
position: absolute;
top: -8px;
right: -8px;
visibility: hidden;
}
.preview {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
.d-icon {
font-size: var(--font-up-6);
margin-right: 0.5rem;
}
.preview-img {
object-position: center;
object-fit: cover;
border-radius: 5px;
}
}
.data {
display: flex;
flex-direction: column;
justify-content: center;
line-height: var(--line-height-medium);
font-size: var(--font-down-1);
color: var(--primary-high);
.top-data,
.bottom-data {
display: flex;
align-items: center;
}
.file-name {
display: inline-block;
max-width: 150px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-right: 0.5em;
}
.uploading,
.processing {
font-size: var(--font-down-2);
margin-right: 0.75em;
}
.upload-progress {
width: 110px;
}
.extension-pill {
background: var(--primary-low);
border-radius: 5px;
font-size: var(--font-down-2-rem);
padding: 0.1em 0.4em;
}
}
}