mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
Name input for stream and group edit modal was too wide in narrow width screens and overflowed the modal. This commit adds CSS to make sure that maximum width of input field is set to fit inside the modal respecting the modal container paddings on narrow width screens. Fixes #35301.
792 lines
18 KiB
CSS
792 lines
18 KiB
CSS
/* Styles for the Micromodal-based modals */
|
|
:root {
|
|
/* Exit buttons are sometimes Cancel, but sometimes
|
|
other "Nah, forget it" actions. */
|
|
--color-exit-button-text: hsl(0deg 0% 0%);
|
|
--color-exit-button-border: hsl(300deg 2% 11% / 30%);
|
|
--color-exit-button-background: hsl(226deg 1% 42% / 20%);
|
|
--color-exit-button-background-interactive: hsl(226deg 1% 42% / 27%);
|
|
}
|
|
|
|
.modal__overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
background: hsl(0deg 0% 0% / 60%);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
z-index: 105;
|
|
}
|
|
|
|
.modal__container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
background-color: var(--color-background-modal);
|
|
max-width: calc(100% - 32px);
|
|
max-height: 96%;
|
|
width: 37.1428em; /* 520px at 14px em */
|
|
border-radius: 4px;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.modal__header {
|
|
/* 16px 16px 16px 24px at 16px/1em */
|
|
padding: 1em 1em 1em 1.5em;
|
|
display: grid;
|
|
/* 1.8em is the shortest round value for heading at which none of
|
|
the letters of the english alphabet get cut by overflow:hidden
|
|
at em = 20px
|
|
29px at 16px/1em = 1.8125 */
|
|
grid-template:
|
|
"heading close-button" 1.8em "heading ." auto / minmax(0, 1fr)
|
|
1.8125em;
|
|
column-gap: 4px;
|
|
}
|
|
|
|
.modal__footer {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
align-items: center;
|
|
/* 20px 24px at 16px/1em */
|
|
padding: 1.25em 1.5em;
|
|
}
|
|
|
|
.modal__title {
|
|
grid-area: heading;
|
|
margin: 0;
|
|
/* 24px at 16px/1em */
|
|
font-size: 1.5em;
|
|
font-weight: 600;
|
|
line-height: 1.25;
|
|
overflow: hidden;
|
|
overflow-wrap: break-word;
|
|
|
|
.channel-privacy-type-icon {
|
|
/* This pushes back on suspect styles
|
|
in app_components.css. A fuller fix
|
|
will require tracking down other
|
|
instances of this class. */
|
|
width: auto;
|
|
padding-right: 0;
|
|
}
|
|
|
|
/* help_link_widget margin for the fa-circle-o. */
|
|
.help_link_widget {
|
|
margin-left: 5px;
|
|
}
|
|
}
|
|
|
|
.modal__title:has(.stream-or-topic-reference) {
|
|
/* Reduce the font weight of headings that
|
|
include stream or topic references (e.g.,
|
|
topic move/rename modals). */
|
|
font-weight: 450;
|
|
|
|
.stream-or-topic-reference {
|
|
/* Make the stream or topic references
|
|
more prominent. */
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
|
|
.user-profile-name-heading {
|
|
max-width: 80%;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
/* This line-height is to increase the vertical clickable areas on the icons. */
|
|
line-height: 1.2727em; /* 28px at 22px font-size at 14px em */
|
|
|
|
.user-profile-name {
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
}
|
|
|
|
.modal__close {
|
|
&::before {
|
|
content: "\2715";
|
|
color: var(--color-modal-close-button);
|
|
}
|
|
background: transparent;
|
|
border: 0;
|
|
|
|
&:hover {
|
|
background: var(--color-background-modal-close-button-hover);
|
|
}
|
|
}
|
|
|
|
.modal__content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
/* 2px 24px at 16px/1em */
|
|
padding: 0.125em 1.5em;
|
|
/* Prevent the appearance of a horizontal
|
|
native scrollbar at certain
|
|
info-density/zoom levels. */
|
|
overflow: hidden auto;
|
|
/* Set a max-width, less the 1.5em of left and right
|
|
padding specified above. */
|
|
max-width: calc(100% - 3em);
|
|
|
|
&.simplebar-scrollable-y + .modal__footer {
|
|
border-top: 1px solid var(--color-border-modal-footer);
|
|
}
|
|
|
|
.channel-privacy-type-icon {
|
|
/* This pushes back on suspect styles
|
|
in app_components.css. A fuller fix
|
|
will require tracking down other
|
|
instances of this class. */
|
|
width: auto;
|
|
padding-right: 0;
|
|
}
|
|
}
|
|
|
|
#api_key_value {
|
|
font-family: "Source Code Pro", monospace;
|
|
font-size: 1em;
|
|
}
|
|
|
|
.modal__button {
|
|
/* We need the backup value for billing related html files where
|
|
this variable is not defined. */
|
|
font-size: var(--base-font-size-px, 14px);
|
|
padding: 8px 16px;
|
|
background-color: hsl(0deg 0% 90%);
|
|
border-radius: 4px;
|
|
border-width: 0;
|
|
cursor: pointer;
|
|
text-transform: none;
|
|
overflow: visible;
|
|
line-height: 1.15;
|
|
margin: 0;
|
|
will-change: transform;
|
|
backface-visibility: hidden;
|
|
transform: translateZ(0);
|
|
transition: transform 0.25s ease-out;
|
|
|
|
&:hover {
|
|
text-decoration: none;
|
|
}
|
|
|
|
&:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
.modal__button:focus,
|
|
.modal__button:hover {
|
|
transform: scale(1.05);
|
|
/* The extremely subtle 1.05 scale can cause
|
|
a gap to appear between the outline and
|
|
button background color; this negative
|
|
offset preserves the scale effect, but also
|
|
covers any tiny gaps owing to subtle scaling. */
|
|
outline-offset: -1px;
|
|
}
|
|
|
|
.dialog_exit_button {
|
|
color: var(--color-exit-button-text);
|
|
background: var(--color-exit-button-background);
|
|
border: 1px solid var(--color-exit-button-border);
|
|
|
|
&:hover {
|
|
background: var(--color-exit-button-background-interactive);
|
|
}
|
|
}
|
|
|
|
.dialog_submit_button {
|
|
margin-left: 12px;
|
|
background-color: hsl(240deg 96% 68%);
|
|
color: hsl(0deg 0% 100%) !important;
|
|
}
|
|
|
|
#user-profile-modal .save-success {
|
|
vertical-align: top;
|
|
background-color: transparent;
|
|
border-radius: 4px;
|
|
margin-right: 10px;
|
|
color: hsl(156deg 30% 50%);
|
|
padding: 0.5rem 1rem;
|
|
line-height: 1.15;
|
|
|
|
&:not(:empty) {
|
|
border: 1px solid hsl(156deg 30% 50%);
|
|
}
|
|
}
|
|
|
|
#read_receipts_error,
|
|
#dialog_error {
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
#read_receipts_modal {
|
|
.modal__container {
|
|
width: 25.7142em; /* 360px at 14px em */
|
|
|
|
.modal__content {
|
|
/* When showing read receipts, we use simplebar
|
|
to make the list scrollable. It requires this to
|
|
be flex. */
|
|
display: flex;
|
|
|
|
/* Setting a minimum height prevents the loading indicator
|
|
appearing/disappearing from resizing the modal in the
|
|
common case that one is requesting read receipts for
|
|
direct messages. */
|
|
min-height: 120px;
|
|
/* Setting a maximum height is just for aesthetics; the modal looks
|
|
weird if its aspect ratio gets too stretched. */
|
|
max-height: 480px;
|
|
|
|
/* For the notification bot error, we want to keep the modal clean and small.
|
|
The 16px padding is intended to match the padding at the top of the modal. */
|
|
&.compact {
|
|
min-height: unset;
|
|
padding-bottom: 16px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.modal__header {
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
& hr {
|
|
margin: 10px 0;
|
|
}
|
|
|
|
.modal__content {
|
|
padding: 0 24px 8px;
|
|
}
|
|
|
|
.loading_indicator {
|
|
margin: auto;
|
|
}
|
|
|
|
.read_receipts_list {
|
|
margin-left: 0;
|
|
|
|
& li {
|
|
.read_receipts_user_avatar {
|
|
display: inline-block;
|
|
height: 1.25em; /* 20px at 16px font-size at 14px em */
|
|
width: 1.25em; /* 20px at 16px font-size at 14px em */
|
|
position: relative;
|
|
right: 8px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
margin: 2px 0;
|
|
list-style-type: none;
|
|
overflow-x: hidden;
|
|
padding-left: 10px;
|
|
white-space: nowrap;
|
|
text-overflow: ellipsis;
|
|
cursor: pointer;
|
|
line-height: 1.625em; /* 26px at 16px font-size at 14px em */
|
|
|
|
&:hover {
|
|
background-color: light-dark(
|
|
hsl(0deg 0% 0% / 5%),
|
|
hsl(0deg 0% 100% / 5%)
|
|
);
|
|
}
|
|
|
|
&:active,
|
|
&:focus {
|
|
background-color: light-dark(
|
|
hsl(0deg 0% 0% / 10%),
|
|
hsl(0deg 0% 100% / 10%)
|
|
);
|
|
outline: none;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.email_field {
|
|
margin-top: 10px;
|
|
|
|
.email_field_textarea {
|
|
width: 97%;
|
|
resize: vertical;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.border-top {
|
|
border-top: 1px solid hsl(300deg 2% 11% / 30%);
|
|
padding-top: 10px;
|
|
}
|
|
|
|
.email-body {
|
|
margin-left: 20px;
|
|
margin-top: 20px;
|
|
}
|
|
}
|
|
|
|
@keyframes mmfadeIn {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes mmfadeOut {
|
|
from {
|
|
opacity: 1;
|
|
}
|
|
|
|
to {
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
.micromodal {
|
|
display: none;
|
|
}
|
|
|
|
.micromodal.modal--opening,
|
|
.micromodal.modal--open {
|
|
display: block;
|
|
}
|
|
|
|
.micromodal[aria-hidden="true"] .modal__overlay {
|
|
animation: mmfadeOut 75ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal[aria-hidden="false"] .modal__overlay {
|
|
animation: mmfadeIn 120ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal[aria-hidden="true"] .modal__container {
|
|
animation: mmfadeOut 75ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal[aria-hidden="false"] .modal__container {
|
|
animation: mmfadeIn 120ms cubic-bezier(0, 0, 0.2, 1);
|
|
}
|
|
|
|
.micromodal .modal__container,
|
|
.micromodal .modal__overlay {
|
|
will-change: transform;
|
|
}
|
|
|
|
.modal__spinner .loading_indicator_spinner {
|
|
height: 16px;
|
|
|
|
& path {
|
|
fill: hsl(0deg 0% 100%);
|
|
}
|
|
}
|
|
|
|
.modal__spinner {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.time-input-formatted-description {
|
|
font-style: italic;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
#sender_channel_email_address_widget {
|
|
width: 12.875em; /* 206px at 16px/em */
|
|
}
|
|
|
|
#copy_email_address_modal {
|
|
width: 800px;
|
|
|
|
.inline {
|
|
display: inline;
|
|
}
|
|
|
|
.question-which-parts {
|
|
padding-bottom: 10px;
|
|
}
|
|
|
|
.stream-email-header {
|
|
font-size: 1.125em; /* 18px at 16px/em */
|
|
}
|
|
}
|
|
|
|
.modal_select {
|
|
width: var(--modal-input-width);
|
|
padding: 4px 25px 4px 6px;
|
|
color: var(--color-text-default);
|
|
border-radius: 4px;
|
|
border: 1px solid hsl(0deg 0% 80%);
|
|
cursor: pointer;
|
|
background-color: hsl(0deg 0% 100%);
|
|
|
|
&:disabled {
|
|
cursor: not-allowed;
|
|
|
|
/* The background-color of select elements inside modal is different than the others in
|
|
settings pages, because the background of the modal is brighter than the setting page. */
|
|
background-color: hsl(0deg 0% 90%);
|
|
|
|
/* This is reset for other browsers to use Chrome's opacity. */
|
|
opacity: 0.7;
|
|
}
|
|
}
|
|
|
|
.modal-field-label {
|
|
margin-bottom: var(--margin-bottom-field-description);
|
|
/* Avoid having the clickable area extend to the full width of the containing element */
|
|
width: fit-content;
|
|
}
|
|
|
|
.modal__body,
|
|
.overlay-content {
|
|
.dropdown-widget-button,
|
|
.dropdown_widget_with_label_wrapper {
|
|
width: var(--modal-input-width);
|
|
}
|
|
}
|
|
|
|
.modal_password_input,
|
|
.modal_url_input,
|
|
.modal_text_input {
|
|
padding: 4px 6px;
|
|
color: var(--color-text-default);
|
|
border-radius: 4px;
|
|
border: 1px solid hsl(0deg 0% 80%);
|
|
box-shadow: inset 0 1px 1px hsl(0deg 0% 0% / 7.5%);
|
|
transition:
|
|
border-color linear 0.2s,
|
|
box-shadow linear 0.2s;
|
|
margin-bottom: 10px;
|
|
/* subtract padding (6px each side) and border (1px each side) */
|
|
width: calc(var(--modal-input-width) - 14px);
|
|
|
|
&:focus {
|
|
border-color: hsl(206deg 80% 62% / 80%);
|
|
outline: 0;
|
|
box-shadow:
|
|
inset 0 1px 1px hsl(0deg 0% 0% / 7.5%),
|
|
0 0 8px hsl(206deg 80% 62% / 60%);
|
|
}
|
|
}
|
|
|
|
#add-realm-domain-widget {
|
|
.modal_text_input {
|
|
width: 14.7143em; /* 206px at 14px em */
|
|
}
|
|
}
|
|
|
|
.edit_profile_field_choices_container,
|
|
#profile_field_choices {
|
|
.modal_text_input {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.choice-row {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
}
|
|
|
|
.choice-row,
|
|
.option-row {
|
|
.icon-button {
|
|
font-size: 1.1em;
|
|
}
|
|
}
|
|
|
|
#create_bot_short_name {
|
|
/* A shorter dropdown width (~200px at 14px em)
|
|
to ensure the email all fits on one line. */
|
|
width: 14em;
|
|
}
|
|
|
|
#add-poll-modal,
|
|
#add-todo-modal {
|
|
/* this height allows 3-4 option rows
|
|
to fit in without need for scrolling */
|
|
height: 32.1428em; /* 450px / 14px em */
|
|
overflow: hidden;
|
|
|
|
.modal__content {
|
|
flex-grow: 1;
|
|
|
|
.simplebar-content {
|
|
box-sizing: border-box;
|
|
height: 100%;
|
|
}
|
|
}
|
|
|
|
#add-poll-form,
|
|
#add-todo-form {
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
height: 100%;
|
|
|
|
.poll-label,
|
|
.todo-label {
|
|
font-weight: bold;
|
|
margin: 5px 0;
|
|
}
|
|
|
|
.poll-question-input-container,
|
|
.todo-title-input-container {
|
|
display: flex;
|
|
margin-bottom: 10px;
|
|
|
|
#poll-question-input,
|
|
#todo-title-input {
|
|
flex-grow: 1;
|
|
}
|
|
}
|
|
|
|
.poll-options-list,
|
|
.todo-options-list {
|
|
margin: 0;
|
|
height: 0;
|
|
overflow: auto;
|
|
flex-grow: 1;
|
|
padding-top: 2px;
|
|
padding-right: var(--width-simplebar-scroll-hover);
|
|
|
|
.option-row {
|
|
list-style-type: none;
|
|
cursor: move;
|
|
margin-top: 10px;
|
|
padding: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
|
|
.drag-icon {
|
|
color: hsl(0deg 0% 75%);
|
|
}
|
|
|
|
.poll-option-input {
|
|
/* Overwrite .modal_text_input margin to keep vertical centering. */
|
|
margin-bottom: 0;
|
|
flex-grow: 1;
|
|
}
|
|
|
|
.todo-input {
|
|
flex: 1 1 auto;
|
|
margin-bottom: 0;
|
|
max-width: 30%;
|
|
}
|
|
|
|
.todo-description-container {
|
|
flex: 1 1 auto;
|
|
display: flex;
|
|
min-width: 0;
|
|
|
|
.todo-description-input {
|
|
flex-grow: 1;
|
|
margin-bottom: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
.option-row:first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.option-row:last-child {
|
|
cursor: default;
|
|
|
|
.delete-option {
|
|
visibility: hidden;
|
|
}
|
|
|
|
.drag-icon {
|
|
visibility: hidden;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (max-width: $sm_min) {
|
|
.option-row {
|
|
.todo-input {
|
|
width: 100%;
|
|
min-width: 90px;
|
|
}
|
|
|
|
.todo-description-container {
|
|
.todo-description-input {
|
|
width: 100%;
|
|
min-width: 90px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#introduce-zulip-view-modal {
|
|
i {
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.keyboard-button {
|
|
color: var(--color-hotkey-hint);
|
|
font-size: 0.75em; /* 12px at 16px/em */
|
|
font-weight: 500;
|
|
padding: 0.125em 0.25em; /* 2px 4px at 16px/em */
|
|
border-radius: 3px;
|
|
border: 1px solid var(--color-hotkey-hint);
|
|
}
|
|
}
|
|
|
|
#generate-integration-url-modal {
|
|
#integrations-event-container {
|
|
.integration-all-events-buttons {
|
|
display: flex;
|
|
gap: 10px;
|
|
margin: 5px 0 10px;
|
|
}
|
|
|
|
#integrations-event-options {
|
|
.integration-event-wrapper {
|
|
margin: var(--settings-nested-checkbox-vertical-margins);
|
|
}
|
|
|
|
.integration-event-name {
|
|
word-break: break-all;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#invite_users_option_tabs_container {
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.dialog-widget-footer-minor-text {
|
|
font-size: smaller;
|
|
font-style: italic;
|
|
margin-right: auto;
|
|
}
|
|
|
|
#topic-summary-modal {
|
|
width: 45em;
|
|
}
|
|
|
|
#navigation-tour-video-modal {
|
|
width: 97vw;
|
|
max-width: 1024px;
|
|
|
|
.modal__content {
|
|
overflow: hidden;
|
|
}
|
|
|
|
#navigation-tour-video-wrapper {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
|
|
&::after {
|
|
content: "";
|
|
position: absolute;
|
|
background-image: url("../images/play_button.svg");
|
|
background-size: contain;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
background-color: transparent;
|
|
width: 20%;
|
|
height: 20%;
|
|
pointer-events: none;
|
|
}
|
|
|
|
&.hide-play-button::after {
|
|
content: none;
|
|
background-image: none;
|
|
}
|
|
}
|
|
|
|
#navigation-tour-video {
|
|
width: 100%;
|
|
aspect-ratio: 16 / 9;
|
|
cursor: pointer;
|
|
border: 1px solid hsl(0deg 0% 50%);
|
|
|
|
&.dimmed-background {
|
|
opacity: 0.4;
|
|
}
|
|
}
|
|
|
|
#navigation-tour-video-ended-button-wrapper {
|
|
position: absolute;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
width: 100%;
|
|
visibility: hidden;
|
|
|
|
#navigation-tour-video-ended-button {
|
|
color: hsl(0deg 0% 100%) !important;
|
|
cursor: pointer;
|
|
font-size: 200%;
|
|
padding: 1% 5%;
|
|
border-radius: 8px;
|
|
border: 1px solid hsl(0deg 0% 100%);
|
|
transition: transform 0.25s ease-out;
|
|
|
|
&:hover {
|
|
transform: scale(1.05);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ul.modal-options-list {
|
|
list-style: none;
|
|
margin: 0;
|
|
}
|
|
|
|
.modal-option-content {
|
|
box-sizing: border-box;
|
|
display: flex;
|
|
flex-flow: row nowrap;
|
|
align-items: flex-start;
|
|
gap: 0.4375em; /* 7px at 16px/1em */
|
|
padding: 0.25em 0.5em; /* 4px 8px at 16px/1em */
|
|
line-height: 1.25em; /* 20px at 16px/1em */
|
|
color: var(--color-text-default);
|
|
border-radius: 4px;
|
|
|
|
&:focus {
|
|
/* Override the default focus style */
|
|
outline: none !important;
|
|
color: inherit;
|
|
text-decoration: none;
|
|
}
|
|
|
|
&:hover,
|
|
&:focus-visible {
|
|
color: var(--color-text-default);
|
|
background: var(--color-background-hover-popover-menu);
|
|
text-decoration: none;
|
|
}
|
|
|
|
&:focus-visible {
|
|
outline: 1px solid var(--color-outline-focus) !important;
|
|
outline-offset: -1px;
|
|
}
|
|
|
|
&:active {
|
|
background: var(--color-background-active-popover-menu);
|
|
}
|
|
}
|
|
|
|
#change_stream_name,
|
|
#change_user_group_name {
|
|
/* 14px = 2 * 6px + 2 * 1px (6px padding and 1px border on left and right). */
|
|
max-width: calc(100% - 14px);
|
|
}
|