Commit Graph

65571 Commits

Author SHA1 Message Date
Maneesh Shukla
0eea85446b tooltips: Group tooltips for a smooth transition.
This commit introduces the use of createSingleton from the Tippy.js
library to group the tooltips of compose box formatting buttons. The
main benefit is that the hover delay only applies when you move the
cursor into the group for the first time — after that, tooltips show up
instantly as you move between buttons. It makes the whole experience
feel a lot smoother.

We store the singleton instance in a variable to avoid creating multiple
instances unnecessarily. Before initializing a new singleton, we destroy
the previous one to prevent memory leaks and ensure correct behavior.

Previously, each formatting button had its own independent tooltip with
separate delays, which made the experience feel sluggish and disjointed
when hovering across buttons.

Now, by sharing a delay timer across the grouped tooltips, the
transition feels more natural.

Fixes: #24825.

Co-authored-by: Sayam Samal <sayam@zulip.com>
2025-07-10 17:20:41 -07:00
Maneesh Shukla
48d2ee2684 compose-buttons: Add compose_button_tooltip class to all the control buttons.
This is a prep commit to add singleton tooltips to all the
compose control buttons.

Fixes part of #24825.
2025-07-10 17:06:02 -07:00
Pratik Chanda
83d67ddb6a settings: Remove unreachable click handler for settings.
This commit removes click handler for settings overlay container
for closing modals over settings which was added for earlier modal
version. Current modal doesn't use this handler to close modal.
2025-07-10 17:03:17 -07:00
Tim Abbott
464821afca overlay_ui: Avoid treating range selection as a click. 2025-07-10 13:17:13 -07:00
apoorvapendse
9ddc2dddc3 scheduled_messages: Restore message on clicking header.
Fixes:
https://chat.zulip.org/#narrow/channel/101-design/topic/message.20header.20bar.20interactions.20in.20overlays/with/2205866.
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2025-07-10 13:17:13 -07:00
apoorvapendse
cf3e94758e drafts: Restore draft on clicking message header.
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2025-07-10 13:17:13 -07:00
Tim Abbott
b298f18071 stream_popover: Don't advertise useless views for general chat channels.
These views can only ever show the on topic, so we shouldn't spend
space advertising them.
2025-07-10 12:34:02 -07:00
Tim Abbott
ece761130c settings_config: Update general chat option strings.
- Avoid a capitalization issue in English with the first word being
  "general chat".
- Replace unclear "Automatic" option name.
- Use curly quotes.
2025-07-10 12:34:02 -07:00
whilstsomebody
82077b6328 message_row: Correctly align bot icon in message area.
The bot icon in the message area is center-aligned,
but due to its shape, it appears slightly misaligned
with the bot name text.

This commit fixes the by adding a 1px bottom margin.

Fixes: #32992
2025-07-10 12:22:34 -07:00
Greg Price
aaeabeda44 notifications: Dedupe APNs tokens case-insensitively.
Fixes zulip/zulip-flutter#1617.

It turns out that an APNs token (which is a hex string) is equally
valid in lower or upper case.  The old app would send the server
the lower-case form of the token, but the new app sends the
upper-case form.

Because we've been treating tokens case-sensitively, if the user
upgrades from the old app to the new, that results in the server
and bouncer each having two copies of the token (one lower-case and
one upper-case), and therefore sending that device two copies of
each notification: zulip/zulip-flutter#1617.

To fix that immediately, have the bouncer drop duplicate tokens
before sending the notifications to APNs.

Work is also in progress on fixing this in a better-structured way,
by having the database correctly treat tokens as the same when they
differ only in case.
2025-07-10 10:54:14 -07:00
Aman Agrawal
9b15dce1b2 auth: Only automatically redirect for same domain redirects.
If the `deactivated_redirect` belongs to the same domain as
`EXTERNAL_HOST`, automatically redirect, otherwise just point
user to the new URL.
2025-07-10 10:46:59 -07:00
Sahil Batra
ba32e732c7 stream_create: Fix folder widget not defined in prod.
We do not create folder widget in production as of now, so
we need to make sure that folder_widget.render is not called
when opening stream creation UI in production as folder_widget
is undefined.

It opens fine but code handling closing of overlay is not
called as expected and the hash is not changed even after
closing the overlay which resulted in problems when opening
the channel settings overlay again.
2025-07-10 10:23:39 -07:00
Karl Stolley
fd67852085 inbox: Update reply-button label via show(). 2025-07-10 08:36:52 -07:00
Alya Abbott
039402997d help: Document converting pasted text to a file. 2025-07-10 08:36:21 -07:00
PieterCK
3a40695d8b test_message_report: Add stronger assertion for test cases.
This makes sure the number of submitted message report in each test case
is accurate.
2025-07-10 08:34:12 -07:00
PieterCK
23d6ae7faf test_message_report: Refactor a test case.
This refactors a `test_reported_channel_message_narrow_link` which was
previously part of `test_channel_message_report`. It's refactored out
partly to keep the test from being flaky and partly to not bloat it
since it's testing 4 behaviours currently.
2025-07-10 08:34:12 -07:00
PieterCK
33cdbd6d45 test_message_report: Fix flaky tests.
Previously `get_submitted_moderation_requests` does not order the query
by message ID which makes the test cases flaky. This updates the
function to sort query result so that the first one should be the latest
one.
2025-07-10 08:34:12 -07:00
Vector73
d0bc9b8f92 message_edit: Cleanup empty topic check. 2025-07-10 08:32:53 -07:00
Lauryn Menard
b198ff9f0c support: Follow general styling for showing fixed price plan info. 2025-07-10 08:32:15 -07:00
Aman Agrawal
c105bcc322 stripe: Fix free trial pay by invoice customer billed twice.
This was a result of us moving `billing_cycle_anchor` ahead in time
of the `LicenseLedger` entry the customer paid for. Thus, this
confused our logic in thinking that customer hasn't paid for
the current billing cycle.
2025-07-10 08:30:44 -07:00
Karl Stolley
ac0cc78327 compose: Size and place formatting icons to spec.
Note that this establishes a 30px by 30px box at
Vlad's original font-size, 15px. His spec called for
a 30px by 28px box, but does not reflect the height of
the Send button, which is 30px tall. So to maintain
that height and perfectly center the icons, we create
a 30px square for the button.
2025-07-10 08:29:48 -07:00
Karl Stolley
02528992a2 compose: Remove dead flex directive.
The grouping element in the DOM, .compose_control_button_container,
is not a flexbox, so this directive is ignored by browsers.
2025-07-10 08:29:48 -07:00
Alya Abbott
a9f55878e3 help: Document channel-specific "general chat" permissions. 2025-07-09 16:42:07 -07:00
Mateusz Mandera
a61d849e37 ldap: Implement external auth id auth+sync.
Fixes #24104.
2025-07-09 15:31:17 -07:00
Mateusz Mandera
d273059475 backend: Rename username var to email in ldap get_or_build_user.
Since we have an email value in that variable, we should call it
appropriately.
2025-07-09 15:31:17 -07:00
Vector73
c3e8b48245 settings: Fix tooltip not shown when message retention policy invalid.
Previously, the tooltip was not shown on save button when message
retention policy is invalid in channel settings. This commit fixes that bug.
2025-07-09 14:25:53 -07:00
Vector73
a77fc6aa79 stream_settings: Add new disable_topics option to topics_policy.
Adds new configuration option `disable_topics` in `topics_policy`
channel setting to support disabling topics in the channel.

Fixes #34553.
2025-07-09 14:25:53 -07:00
Vector73
7b60b2edca stream_popover: Show clear button if topic input is not disabled.
Previously, if the topic input was disabled when "Move messages"
modal was opened, the clear button was not added to the DOM
which caused the bug where the clear button was not shown even
if the topic input was later enabled because user was allowed to edit
topics in the selected channel.
2025-07-09 14:25:53 -07:00
Vector73
3b4f55a7ea stream_popover: Refactor topic input focus/blur handlers into functions. 2025-07-09 14:25:53 -07:00
Vector73
82d76465ab stream_popover: Filter out channels where moves are not possible.
Users who don't have permission to edit topics cannot move messages
from empty topic to the channel where empty topics are not allowed.
So, those channels should not be shown in the channel selector in the
"Move messages" modal.
2025-07-09 14:25:53 -07:00
Vector73
09b4a4c6e4 stream_list: Remove redundant condition block to get topic list URL. 2025-07-09 14:25:53 -07:00
Vector73
7afed92c00 streams: Add function to get topic for channel events notifications.
Refactored the code to add a function `channel_events_topic_name`
to get the topic name for sending notification for channel events.
2025-07-09 14:25:53 -07:00
Vector73
20aace98cd tests: Add tests for moving messages with empty topic disabled. 2025-07-09 14:25:53 -07:00
Tim Abbott
911fca7f80 recipient_row: Fix data-topic-name for general chat.
Since we know it's a topic header, we don't need a conditional
here. And the one we'd had didn't distinguish `undefined` from `""`,
and thus broke these controls for general chat.
2025-07-09 14:25:53 -07:00
Lauryn Menard
0ecb8269d0 help: Document configuring display of unread summary counters.
Document the personal setting for displaying or hiding the unread
message summary counters in the left sidebar shown next to the
home view and channels header.

Fixes #35076.

Co-authored-by: Alya Abbott <alya@zulip.com>
2025-07-09 14:05:28 -07:00
Karl Stolley
d1a66c4faa alerts: Restore alert-success colors. 2025-07-09 14:04:52 -07:00
Lauryn Menard
4fd510e3ac help: Add mobile instructions in "Searching for messages" article. 2025-07-09 12:56:41 -07:00
Aman Agrawal
5cfe4829a9 compose_closed_ui: Fix incorrect tooltip for new conversation btn.
Fixed by removing the incorrect update for new conversation
button and correctly updating the reply button state.
2025-07-09 12:54:47 -07:00
Karl Stolley
ec46b117bb banners: Add utility class for uniform bold. 2025-07-09 12:50:25 -07:00
Tim Abbott
ddc634682c api: Increment API feature level to 403. 2025-07-09 11:41:56 -07:00
Sahil Batra
de1e08b9bf typed_endpoint: Handle "dataclass_type" pydantic errors.
This commit adds error message for handling "dataclass_type"
pydantic errors. An example when this occurs is when group
setting value passed to update the setting is invalid like group
ID is passed directly and not in an object with "new" field and
other invalid values as well.
2025-07-09 11:17:54 -07:00
Pratik Chanda
2b52306c28 tooltips: Don't destroy user popover instance on user status hover.
This commit adds a check for instance and stops user status hover
from destroying user popover instance.

Fixes: zulip#35175.
2025-07-09 10:19:52 -07:00
Aman Agrawal
6aec84147b stream_list: Fix misleading tooltip.
When in topic narrow, hovering over the topic's channel, should
correctly show where it would navigate to.
2025-07-09 10:16:23 -07:00
PieterCK
4775f9673f integrations: Rename config_options "description" field.
This renames WebhookConfigOption's "description" field to "label". That
name is consistent with how config_data is declared on the events and
API level, it's also a more accurate description of how the field is
used in the web client, as the UI label element for the config_options.
2025-07-09 10:12:33 -07:00
PieterCK
feb25b0e6b integrations: Move configs in config_options to url_options.
Currently we have 2 implementations of `config_options`:

- It's used for generating optional webhook URL parameters. These
settings also come with custom UI in the "Generate integration URL"
modal.

- In `/bots` API, it's used as schema for the bots `BotConfigData`. Each
type of bots have different ways of defining their `BotConfigData`
fields. Currently, only embedded bots use `BotConfigData`, and only the
incoming webhooks use `config_options` to configure a bot's
`BotConfigData`; thus, the `config_options` remain unused.

To avoid confusion as to which implementation of `config_options` is
used by an integration, this separates the first use case -- to generate
optional webhook URL -- to a new field called `url_options`. Thus, the
`config_options` field is reserved only for the second use case.
2025-07-09 10:12:33 -07:00
PieterCK
74089cf469 api_docs: Update the changelog for feature 318.
This changelog for feature 318 was added in this commit:
d1ff871523. The changelog stated that it
added a new field called `config_options` to the
`realm__incoming_webhook_bots` field, but in reality, the it renamed an
existing field called `config`.

This fixes the changelog for feature 318 and its changes note in the API
documentation to correctly describe the change.
2025-07-09 10:12:33 -07:00
apoorvapendse
407b6f64c4 compose_paste: Paste as image for LibreOffice Calc content.
Fixes: https://chat.zulip.org/#narrow/channel/9-issues/topic/bug.3A.20pasting.20cells.20from.20libreoffice.20calc.20is.20only.20image/near/2176558.

Co-authored-by: Puneeth Chaganti <punchagan@muse-amuse.in>
Signed-off-by: apoorvapendse <apoorvavpendse@gmail.com>
2025-07-09 09:52:52 -07:00
Maneesh Shukla
6ce089990e buttons: Redesign buttons in personal settings.
This PR modifies the Preferences button to an action button in neutral,
and 'Send a test notification' into a medium-emphasis neutral action
button.

Fixes: #34535

Co-authored-by: Yatin Sharma <aman1312sharma@gmail.com>
2025-07-09 09:44:33 -07:00
Vector73
f9d52189fc github_actions: Check if feature levels are updated in API docs.
In the past, some API documentation changes were merged with
unresolved placeholders like "ZF-..." instead of actual feature level numbers.
This commit introduces a GitHub Action that scans the API docs for
any occurrence of "ZF-". If found, it will fail the CI check and block the
commit from being merged into main.

This ensures that all feature level references are properly updated before merging.
2025-07-09 09:33:55 -07:00
Kislay Verma
e6dabb4ef4 compose_paste: Convert large pasted text into uploaded text file.
When pasting a long piece of text into the compose box (or
message edit textarea), we show a banner giving an option to
put the text into a file and upload it.

The banner is only shown if the text is larger than
`MINIMUM_PASTE_SIZE_FOR_FILE_TREATMENT`.

If the user chooses to "convert to file", the textarea content is
restored to its state before pasting and a file with the pasted
content is uploaded. The banner is hidden as soon as any change is
made to the textarea content to avoid inconsistent state and
confusion.

Fixes #33107.

Co-authored-by: Aditya Chaudhary <aditya.chaudhary1558@gmail.com>
2025-07-08 18:58:03 -07:00