0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-12 03:37:13 +08:00
discourse/plugins/chat/assets/stylesheets/common/base-common.scss
Kris 6f7ead19e3
UX: fix scroll while browsing chat channels on iOS (#40900)
When you go to create a new channel on iOS, the channel lists on the
/chat/browse route aren't scrollable — this fixes it by applying the
same styles applied to make the settings scrollable

before (can't reach the channel at the very bottom... the whole page
scrolls but not the nested content hidden by overflow):
<img width="387" height="749" alt="image"
src="https://github.com/user-attachments/assets/811aa991-597d-4c00-bbd1-40e95e586a8c"
/>



after (last channel reachable, can scroll to overflow):
<img width="392" height="716" alt="image"
src="https://github.com/user-attachments/assets/e1fe7bb3-d19b-44b6-b1c1-7fef95492a9c"
/>
2026-06-15 12:24:19 -04:00

313 lines
5.6 KiB
SCSS
Vendored

:root {
--message-left-width: 42px;
--full-page-border-radius: 12px;
--full-page-sidebar-width: 275px;
--channel-list-avatar-size: 30px;
--chat-header-offset: 45px;
--chat-header-expanded-offset: 0px;
}
// Very specific hack to ensure the contextual menu (copy/paste/...) is
// not completely over the textarea, the rules to position this menu are quite obscure
// and under DiscourseHUB the space between the textarea and the keyboard is so small that
// it sometimes prefer to appear on top of the textarea, making any gesture very complicated
html.ios-device.keyboard-visible body #main-outlet .full-page-chat {
padding-bottom: 0.2rem;
}
html.ios-device:not(.ipados-device:not(.keyboard-visible)).composer-open body {
overflow: hidden;
}
html.ios-device.has-full-page-chat body {
position: fixed;
overflow: hidden;
}
html.ios-device.has-full-page-chat body #main-outlet {
.c-routes {
&.--channel-info,
&.--browse {
@include chat-height;
overflow-y: auto;
}
}
}
.uppy-is-drag-over .chat-composer .drop-a-file {
display: flex;
position: absolute;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: rgb(0, 0, 0, 0.75);
z-index: z("header");
pointer-events: none;
&-content {
width: max-content;
display: flex;
flex-direction: column;
align-items: center;
padding: 2em;
background-color: #1d1d1d;
border-radius: 0.25em;
&-images {
.d-icon {
height: 3em;
width: 3em;
color: var(--secondary-or-primary);
&:first-of-type {
transform: rotate(-5deg);
}
&:nth-of-type(2) {
height: 4em;
width: 4em;
}
&:last-of-type {
transform: rotate(5deg);
}
}
}
&-text {
margin: 1.5em 0 0 0;
font-size: var(--font-up-1);
color: var(--secondary-or-primary);
.d-icon-upload {
padding-right: 0.25em;
position: relative;
bottom: 2px;
color: var(--secondary-or-primary);
}
}
}
}
.header-dropdown-toggle.chat-header-icon .icon {
.chat-channel-unread-indicator {
border: 2px solid var(--header_background);
position: absolute;
top: 0;
right: 2px;
@include chat-unread-indicator {
width: 14px;
height: 14px;
}
&.-urgent {
display: flex;
align-items: center;
justify-content: center;
top: -1px;
right: 0;
}
}
span.icon {
cursor: auto;
&:hover {
.d-icon {
color: var(--header_primary-low-mid);
}
background: none;
}
}
a.icon {
&.active {
.d-icon-comment {
color: var(--primary-medium);
}
}
&:hover {
.chat-channel-unread-indicator {
border-color: var(--primary-low);
}
}
}
}
.chat-messages-container {
overflow-wrap: break-word;
white-space: normal;
position: relative;
.chat-message-container {
display: grid;
&.-selectable {
grid-template-columns: 1.5em 1fr;
}
.chat-message-selector {
align-self: center;
justify-self: end;
margin: 0;
}
}
}
.chat-time {
color: var(--primary-high);
font-size: var(--font-down-2);
}
.chat-emoji-avatar {
width: var(--message-left-width);
align-items: center;
img {
display: block;
margin-left: auto;
margin-right: auto;
}
}
.avatar {
box-sizing: border-box;
.is-online & {
padding: 2px;
box-shadow:
inset 0 0 0 1px var(--success),
inset 0 0 0 2px var(--secondary);
}
}
body.has-sidebar-page.has-full-page-chat #main-outlet-wrapper {
gap: 0;
}
body.has-full-page-chat {
.alert-error,
.alert-info,
.alert-success,
.alert-warning {
margin: 0;
border-bottom: 1px solid var(--content-border-color);
}
}
.full-page-chat {
display: grid;
grid-template-columns: var(--full-page-sidebar-width) 1fr;
background: var(--d-content-background);
.c-navbar-container {
position: sticky;
top: 0;
z-index: 1;
}
.chat-messages-scroller {
box-sizing: border-box;
height: 100%;
}
}
.user-preferences .chat-setting .controls {
margin-bottom: 0;
}
.chat-cooked {
> p {
margin: 0.5em 0 0.5em;
}
> p:first-of-type {
margin-top: 0.1em;
}
> p:last-of-type {
margin-bottom: 0.1em;
}
}
.reviewable-chat-message {
.chat-channel-title {
max-width: 100%;
}
}
.chat-channel-dm-title {
display: flex;
align-items: center;
justify-content: space-between;
.channel-name {
font-weight: 700;
font-size: var(--font-up-1);
line-height: var(--font-up-1);
}
}
.chat-channel-status {
background: var(--secondary);
padding: 0.5rem 1rem;
border-bottom: 1px solid var(--content-border-color);
}
html.has-full-page-chat {
height: 100%;
width: 100%;
&.footer-nav-ipad {
height: calc(100% - var(--footer-nav-height, 0px));
}
body {
height: 100%;
width: 100%;
#main-outlet {
display: flex;
flex-direction: column;
.full-page-chat {
height: 100%;
min-height: 0;
}
.main-chat-outlet {
min-height: 0;
max-width: 100vw;
box-sizing: border-box;
container-type: inline-size;
}
}
}
&.mobile-view {
#main-outlet-wrapper {
padding: 0;
}
}
// these need to apply to desktop too, because iPads
&.discourse-touch {
.full-page-chat,
.chat-channel,
#main-outlet {
// allows containers to shrink to fit
min-height: 0;
}
}
}
.sidebar-section-link-wrapper[data-list-item-name="new-chat-dm"] {
.prefix-icon {
color: var(--tertiary);
}
}