Files
zulip/web/styles/inbox.css

570 lines
16 KiB
CSS

.inbox-container {
display: flex;
flex-direction: column;
background: var(--color-background-inbox);
padding: 0;
min-height: 100vh;
#inbox-pane {
max-width: 100%;
display: flex;
flex-direction: column;
margin: var(--navbar-fixed-height) 25px 0;
a {
color: var(--color-text-message-header);
text-decoration: none;
}
.unread_count {
opacity: 1;
outline: 0 solid var(--color-background-unread-counter);
transition: outline-width 0.1s ease;
&:hover {
outline-width: 1.5px;
}
}
.search_group {
position: sticky;
top: var(--navbar-fixed-height);
background: var(--color-background-inbox);
display: flex;
padding: 15px 0 10px;
z-index: 1;
}
.button-inbox-selected {
background-color: var(--color-background-button-inbox-selected);
}
#inbox-filters {
.inbox-search-wrapper {
flex-grow: 1;
max-width: var(--width-inbox-search);
}
}
.inbox-empty-text {
display: none;
}
#inbox-loading-indicator {
margin-top: 20px;
margin-bottom: var(--max-unmaximized-compose-height);
.searching-for-more-topics {
margin-left: 0;
}
}
#inbox-list {
overflow: hidden;
border-radius: 5px;
border: 1px solid hsl(0deg 0% 0% / 20%);
/* search box left border (1px) + search box right border (1px)
+ dropdown left border (1px) + dropdown right border (1px) = 4px at 16px em */
max-width: calc(
var(--width-inbox-search) +
var(--width-inbox-filters-dropdown) + 0.25em
);
.inbox-channel-topic-list {
margin: 0;
}
.inbox-focus-border {
display: flex;
min-height: 1.875em; /* 30px at 16px em */
border: 2px solid transparent;
border-radius: 3px;
box-sizing: border-box;
justify-content: space-between;
}
.inbox-header {
user-select: none;
display: block;
height: 1.875em; /* 30px at 16px em */
.inbox-focus-border {
height: 1.875em; /* 30px at 16px em */
}
.inbox-left-part {
grid-template: auto / auto min-content min-content;
grid-template-areas: "header_name unread_mention_info unread_count";
}
.inbox-header-name {
grid-area: header_name;
display: flex;
align-items: center;
overflow: hidden;
padding: 1px 6px;
outline: 0;
& a {
margin: 0 4px;
padding: 1px 0;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.inbox-header-name-focus-border {
display: flex;
align-items: center;
overflow: hidden;
border: 2px solid transparent;
border-radius: 3px;
padding-left: 4px;
}
&:focus-visible .inbox-header-name-focus-border {
border-color: var(--color-outline-focus);
}
}
&:focus {
outline: 0;
}
&:focus-visible {
.inbox-focus-border {
border-color: var(--color-outline-focus);
}
.toggle-inbox-header-icon {
opacity: 1;
}
}
}
.fa-lock {
margin-right: 3px;
}
.zulip-icon-user,
.stream-privacy.filter-icon {
margin: 0;
margin-right: 1px;
}
.zulip-icon-user {
position: relative;
top: -1px;
margin-right: 4px;
}
.collapsible-button {
&:hover {
cursor: pointer;
}
.zulip-icon-arrow-down {
padding: 0.3125em 0.25em; /* 5px 4px at 16px em */
margin-right: 0.5625em; /* 9px at 16px em */
opacity: 0.5;
}
.icon-collapsed-state {
transform: rotate(270deg);
}
}
.user-circle {
/* 8.5328px at 16px/1em */
font-size: 0.5333em;
/* TODO: Refactor inbox rows to use grid, to avoid the
min-width here that holds the other rows to similar
columns. */
/* 16px at 8.5328px/1em */
min-width: 1.8751em;
top: 0;
}
.zulip-icon-bot,
.conversation-partners-icon {
opacity: 0.7;
margin-right: 5px;
}
.inbox-row {
user-select: none;
display: block;
background-color: var(--color-background-inbox-row);
&:hover {
background: var(--color-background-inbox-row-hover);
}
&:focus-visible {
.inbox-focus-border {
border: 2px solid var(--color-outline-focus);
border-radius: 3px;
}
outline: 0;
padding: 0;
}
.inbox-left-part {
grid-template:
auto / min-content minmax(0, 1fr)
min-content min-content;
grid-template-areas: "match_topic_and_dm_start recipient_info unread_mention_info unread_count";
}
.fake-collapse-button,
.inbox-topic-container .user-circle {
grid-area: match_topic_and_dm_start;
}
.recipient_info,
.inbox-topic-name {
grid-area: recipient_info;
}
.inbox-right-part-wrapper {
flex-grow: 1;
.inbox-right-part {
display: flex;
justify-content: space-between;
flex-grow: 1;
}
}
.visibility-policy-indicator {
display: flex;
align-items: center;
border-radius: 3px;
margin-left: 3px;
&:focus-visible {
outline: 2px solid var(--color-outline-focus);
}
}
}
.unread-count-focus-outline {
/* Because the inbox view font-size will
never be smaller than the em-equivalent
of 15px, we restate the base font-size
here so that unreads match others in
the UI at legacy size (14px). */
font-size: var(--base-font-size-px);
grid-area: unread_count;
display: flex;
align-items: center;
justify-content: center;
border-radius: 3px;
padding: 0 5px;
/* Stretch to the row to keep unread
count from affecting overall row
size as test scales up. */
align-self: stretch;
&:focus-visible {
outline: 2px solid var(--color-outline-focus);
}
}
.unread_mention_info {
grid-area: unread_mention_info;
margin-right: 0;
}
.stream-privacy {
display: flex;
align-items: center;
margin-right: 4px;
margin-left: 17px;
.zulip-icon {
line-height: 0.875em; /* 14px at 16px em */
height: 1em;
width: 1em;
}
}
.inbox-topic-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
& a {
padding: 1px 0;
white-space: pre;
}
}
.inbox-left-part-wrapper {
display: flex;
width: 80%;
}
#inbox-direct-messages-container {
/* Since a direct message row can have span to multiple lines,
having an underline focus will not work very well.
*/
.inbox-row:focus-visible {
box-shadow: inset 0 0 0 2px var(--color-outline-focus);
}
}
#inbox-direct-messages-container .inbox-left-part,
.inbox-topic-container .inbox-left-part {
/* 37px (50px - space occupied by user circle icon) at 16px */
padding-left: 2.3125em;
}
.inbox-left-part {
width: 100%;
display: grid;
align-items: center;
&:hover {
cursor: pointer;
}
.inbox-group-or-bot-dm {
position: relative;
left: -3px;
/* We don't display status emoji in group DMs,
so prepare an ordinary inline layout... */
.user-status-microlayout {
display: inline;
white-space: collapse;
}
/* ...and hide the status emoji. */
.status-emoji {
display: none;
}
}
.recipients_info {
display: flex;
flex-wrap: wrap;
column-gap: 10px;
grid-area: recipient_info;
.user_block {
display: flex;
align-items: center;
}
}
}
}
.inbox-right-part-wrapper {
display: flex;
align-items: center;
}
.inbox-row,
.inbox-header {
/* Don't show the icons unless user is visibly focused
on the element or one of the elements within it. */
&:focus-within:not(:focus),
&:focus-visible,
&:hover {
.inbox-row-visibility-policy-inherit,
.inbox-action-button {
opacity: 1;
}
}
}
.inbox-row-visibility-policy-inherit {
opacity: 0;
&.visibility-policy-popover-visible {
opacity: 1;
}
}
.inbox-action-button {
display: flex;
border-radius: 3px;
outline: none;
opacity: 0;
&.hide {
display: none;
}
&:focus-visible {
box-shadow: 0 0 0 2px var(--color-outline-focus);
}
& i {
padding: 0.3125em; /* 5px at 16px em */
opacity: 0.3;
color: var(--color-vdots-hover);
&:hover {
opacity: 1;
cursor: pointer;
}
}
}
}
.inbox-header-stream-archived {
color: var(--color-text-message-header-archived);
}
}
#inbox-view {
display: none;
position: relative;
#inbox-dm-header {
background-color: var(--color-background-private-message-header);
}
.hidden_by_filters,
.collapsed_container {
display: none !important;
}
}
.inbox-container #inbox-pane #inbox-empty-without-search {
margin-top: 70px;
display: flex;
flex-direction: column;
align-items: center;
}
.inbox-empty-illustration {
width: 54px;
height: 54px;
margin-bottom: 16px;
background-color: var(--color-background-inbox-no-unreads-illustration);
mask: url("../images/empty-view-illustrations/inbox-done.svg") no-repeat
center;
}
.inbox-empty-title {
/* Matches the font-size used for .empty-list-message */
font-size: 1.5em;
color: var(--color-background-inbox-no-unreads-illustration);
}
.inbox-empty-action {
font-size: 1.3em;
padding-top: 0.5em;
}
.inbox-container #inbox-pane .inbox-empty-action-link {
color: var(--color-text-url);
&:hover {
color: var(--color-text-url-hover);
}
}
#inbox-filter_widget {
margin-right: 0.3571em; /* 5px / 14px em */
max-width: var(--width-inbox-filters-dropdown);
border: 1px solid var(--color-border-inbox-search);
background-color: var(--color-background-inbox-search);
gap: 0.3571em; /* 5px / 14px em */
/* 1.5px at 16px/1em and legacy 6px at 14px/1em. */
padding: 0.0937em 0.4285em;
&:hover {
background-color: var(--color-background-inbox-search-hover);
border: 1px solid var(--color-border-inbox-search-hover);
}
&:focus {
outline: none;
}
&:focus-visible {
outline: 2px solid var(--color-outline-focus);
}
}
#recent-view-filter_widget .dropdown_widget_value,
#inbox-filter_widget .dropdown_widget_value {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
width: 100%;
text-align: left;
}
#recent-view-filter_widget .zulip-icon-chevron-down,
#inbox-filter_widget .zulip-icon-chevron-down {
color: var(--color-icons-inbox);
opacity: 0.4;
}
.dropdown-list-item-common-styles .dropdown-list-bold-selected {
font-weight: 700;
}
.recent-view-filter-dropdown-list-container .dropdown-list-wrapper,
.inbox-filter-dropdown-list-container .dropdown-list-wrapper {
/* We want these dropdowns to open to fit their
contents, which differ based on the language
in use. */
width: 100%;
/* We also don't want to set a min-width, again
so that the content is in charge. This pushes
back against more generic styles. */
min-width: unset;
}
.recent-view-filter-dropdown-list-container
.dropdown-list
.dropdown-list-item-common-styles,
.inbox-filter-dropdown-list-container
.dropdown-list
.dropdown-list-item-common-styles {
/* Parallel to the `width: 100%` set on
.dropdown-list-wrapper above, we set
min-width here to max-content so that
the box opens to accommodate different
lengths of text--and to ensure that
hovered/selectable areas look correct. */
min-width: max-content;
padding: 5px 10px;
display: flex;
flex-direction: column;
/* For columnar flex items, we need
to make set alignment to the start
of the flex container. This pushes
back against non-columnar flexboxes
that require centered alignment. */
align-items: flex-start;
}
.recent-view-filter-dropdown-list-container .dropdown-list-item-name,
.inbox-filter-dropdown-list-container .dropdown-list-item-name {
white-space: nowrap;
font-weight: 500;
padding: 0;
margin: 0;
text-overflow: ellipsis;
overflow: hidden;
}
.recent-view-filter-dropdown-list-container .dropdown-list-item-description,
.inbox-filter-dropdown-list-container .dropdown-list-item-description {
white-space: nowrap;
font-weight: 400;
font-size: 0.9285em; /* 13px at 14px em */
opacity: 0.8;
padding: 0;
text-overflow: ellipsis;
overflow: hidden;
}