compose: Allow DMs to take muted-recipient logic.

This commit is contained in:
Karl Stolley
2025-06-05 11:16:36 -05:00
committed by Tim Abbott
parent d772623d04
commit f1cde90a87
5 changed files with 45 additions and 20 deletions

View File

@@ -46,7 +46,11 @@ function composing_to_current_private_message_narrow(): boolean {
} }
export let maybe_mute_recipient_row = (): void => { export let maybe_mute_recipient_row = (): void => {
if (composing_to_current_topic_narrow() && compose_state.has_full_recipient()) { if (
composing_to_current_topic_narrow() &&
compose_state.has_full_recipient() &&
!compose_state.is_recipient_edited_manually()
) {
$("#compose-recipient").toggleClass("muted-recipient-row", true); $("#compose-recipient").toggleClass("muted-recipient-row", true);
} else { } else {
$("#compose-recipient").toggleClass("muted-recipient-row", false); $("#compose-recipient").toggleClass("muted-recipient-row", false);
@@ -341,16 +345,12 @@ export function initialize(): void {
}); });
compose_select_recipient_dropdown_widget.setup(); compose_select_recipient_dropdown_widget.setup();
// `input` isn't relevant for streams since it registers as a change only
// when an item in the dropdown is selected.
$("#stream_message_recipient_topic,#private_message_recipient").on(
"input",
update_on_recipient_change,
);
// changes for the stream dropdown are handled in on_compose_select_recipient_update // changes for the stream dropdown are handled in on_compose_select_recipient_update
$("#stream_message_recipient_topic,#private_message_recipient").on("change", () => { $("#stream_message_recipient_topic,#private_message_recipient").on("input change", () => {
update_on_recipient_change(); // To make sure the checks in update_on_recipient_change() are correct,
// we update manual editing first.
compose_state.set_recipient_edited_manually(true); compose_state.set_recipient_edited_manually(true);
update_on_recipient_change();
}); });
$("#private_message_recipient").on("input", restore_placeholder_in_firefox_for_no_input); $("#private_message_recipient").on("input", restore_placeholder_in_firefox_for_no_input);

View File

@@ -614,6 +614,14 @@ export function initialize() {
compose_recipient.update_compose_area_placeholder_text(); compose_recipient.update_compose_area_placeholder_text();
}); });
$("#private_message_recipient").on("focus", () => {
// Once the DM input has been focused, we no longer treat
// the recipient row as muted, as we assume the user is
// doing something that requires keeping attention called
// to the recipient row
compose_recipient.unmute_recipient_row();
});
$("body").on("click", ".formatting_button", function (e) { $("body").on("click", ".formatting_button", function (e) {
const $compose_click_target = $(this); const $compose_click_target = $(this);
const $textarea = $compose_click_target.closest("form").find("textarea"); const $textarea = $compose_click_target.closest("form").find("textarea");

View File

@@ -1821,6 +1821,10 @@
hsl(237deg 68% 94% / 50%), hsl(237deg 68% 94% / 50%),
hsl(240deg 65% 60% / 60%) hsl(240deg 65% 60% / 60%)
); );
--color-outline-muted-input-pill: light-dark(
hsl(237deg 68% 88%),
hsl(240deg 65% 60% / 22%)
);
--color-focus-outline-input-pill: light-dark( --color-focus-outline-input-pill: light-dark(
hsl(240deg 50% 50%), hsl(240deg 50% 50%),
hsl(0deg 0% 100% / 60%) hsl(0deg 0% 100% / 60%)

View File

@@ -1229,12 +1229,19 @@ textarea.new_message_textarea {
#compose.compose-box-open:hover { #compose.compose-box-open:hover {
.muted-recipient-row { .muted-recipient-row {
#compose_select_recipient_widget, #compose_select_recipient_widget,
#compose_recipient_box { #compose_recipient_box,
#compose-direct-recipient .pill-container {
transition: 250ms ease; transition: 250ms ease;
transition-delay: 150ms; transition-delay: 150ms;
transition-property: background-color, border-color; transition-property: background-color, border-color;
} }
#compose-direct-recipient .pill {
transition: 250ms ease;
transition-delay: 150ms;
transition-property: outline-color;
}
&#compose-recipient { &#compose-recipient {
.decorated-channel-name, .decorated-channel-name,
.zulip-icon-chevron-down, .zulip-icon-chevron-down,
@@ -1248,10 +1255,7 @@ textarea.new_message_textarea {
} }
} }
/* For now, we're restricting muted recipient-row styles .muted-recipient-row {
to stream topics only, as restyling DM pills will
will take additional work. */
.muted-recipient-row:not(.compose-recipient-direct-selected) {
&#compose-recipient { &#compose-recipient {
.decorated-channel-name, .decorated-channel-name,
.conversation-arrow, .conversation-arrow,
@@ -1265,10 +1269,24 @@ textarea.new_message_textarea {
} }
#compose_select_recipient_widget, #compose_select_recipient_widget,
#compose_recipient_box { #compose_recipient_box,
#compose-direct-recipient .pill-container {
background-color: transparent; background-color: transparent;
border-color: transparent; border-color: transparent;
/* Particularly in light mode, pill colors are almost identical
to the compose-box background. We place a higher-contrast
outline on them in the muted state. */
.pill {
outline: 1px solid var(--color-outline-muted-input-pill);
}
&:hover {
.pill {
outline-color: transparent;
}
}
/* We don't want to trigger the recipient-box-wide hover /* We don't want to trigger the recipient-box-wide hover
effects when someone is just hovering the new-topic effects when someone is just hovering the new-topic
button. */ button. */

View File

@@ -245,11 +245,6 @@
opacity: 0.5; opacity: 0.5;
} }
.pill + .input:empty::before {
content: attr(data-some-recipients-text);
opacity: 0.5;
}
&:has(.input:focus) { &:has(.input:focus) {
border-color: var(--color-compose-recipient-box-has-focus); border-color: var(--color-compose-recipient-box-has-focus);
} }