Commit Graph

59373 Commits

Author SHA1 Message Date
9d70336bab DEV: support un-hiding site settings programmatically (#32824)
This might be useful to revert changes made by plugins when they're
disabled for example.
2025-05-20 21:44:56 +02:00
ce2f096045 DEV: Remove Top route title for crawlers (#32820)
These lines of code would output "Period - Site name" as the page title
for the crawlier view only for Top routes. This is too specific and
unnecessary, since the top route isn't highly prioritized for crawlers.
Without this, the page title defaults to "Site name" for these routes.

One major advantage of this change is that when the homepage is set to
the Top route, the page title for crawlers on the homepage is now "Site
name", which is a lot better.
2025-05-20 13:52:00 -04:00
6640a9d234 UX: improve mobile date picker slightly (#32822)
As seen in the advanced search filters... iOS doesn't show placeholders
for the date input, so we have a CSS adjustment for this, but it doesn't
clear when a value is present.

This update adds a class when a value is present so the placeholder can
be cleared.

Before:

![image](https://github.com/user-attachments/assets/37edad10-886b-41d7-b412-b303be351603)


After:

![image](https://github.com/user-attachments/assets/fee713ab-09f9-49fb-9fda-96bd72a260e1)


Also fixed extra left margin by removing a class.
2025-05-20 11:49:58 -04:00
f2ed537559 Update translations (#32815) 2025-05-20 17:33:42 +02:00
349d7df52b PERF: prevents N+1 on last_updated_by (#32817) 2025-05-20 17:07:37 +02:00
9a7a576dc1 DEV: Add below-login-page PluginOutlet to login.gjs (#32821) 2025-05-20 10:01:50 -05:00
0de08e780b UX: better error message when social login fails (#32772)
This improves the error message(s) displayed when an error happens while
using a social login to log in / sign up into a Discourse community.

Unfortunately, we can't be super precise in the reason behind the error
(it can be the user clicked "cancel" during the authorization phase, or
any of the plethora of other possible errors) because the reason isn't
provided (either for security reasons, or because it's just hard to do
so in a reliable & consistent way accross all social logins).

The best I could do was to

- add the name of the "social login" provider in the error message
- tweak the copy a bit for the different cases handle
- fix the CSS/HTML to match the one used by the main application

In order to show the name of the provider, we use either the "provider"
or the "strategy" query parameter, or use the name of the authenticator
(if it's the only one enabled).

Internal ref - t/153662

---

**BEFORE**


![before](https://github.com/user-attachments/assets/67579a3e-5a61-4e8f-aa72-4dc375547e39)

**AFTER**


![after](https://github.com/user-attachments/assets/954f9c8a-e865-44ff-b1e3-841393a26edf)
2025-05-20 16:22:38 +02:00
fe4c02f5d8 DEV: Resolve flaky ThemeField spec (#32818)
This error sometimes includes a filepath in the middle, which has a
random tmp/ prefix. To workaround this, we can just assert for the
"Missed semicolon" part
2025-05-20 14:53:36 +01:00
796bc10f8b UX: adjust styling for composer tip similar topics + limit amount (#32774)
** Will still need followup to only show 3 topics – handled in different
PR **
* remove blurb
* adjust sizing
* limit to 3 topics

![CleanShot 2025-05-16 at 20 33
42@2x](https://github.com/user-attachments/assets/70547903-1d6c-4af0-9efb-2ea0b06dc1c1)
⬇️ 
![CleanShot 2025-05-16 at 20 33
10@2x](https://github.com/user-attachments/assets/e8c5bd16-c188-4fde-bb12-4bec00e703e9)



![CleanShot 2025-05-16 at 20 34
58@2x](https://github.com/user-attachments/assets/0d6f197d-e919-4560-8b2e-6775e0ddac85)
⬇️ 

![CleanShot 2025-05-16 at 20 35
32@2x](https://github.com/user-attachments/assets/1a29fe49-44d1-43fa-90ff-457c4f8e19d9)

---------

Co-authored-by: David Battersby <info@davidbattersby.com>
2025-05-20 14:58:47 +02:00
70e517153b FIX: Add missing translation for reviewable post action (#32813) 2025-05-20 09:51:42 -03:00
1a31769676 PERF: correctly use preloaded association (#32814) 2025-05-20 14:34:19 +02:00
0f35647c5d DEV: removes unnecessary lines (#32812)
Technically we want to follow DDAU but most of our usage in the code
base are just mutating `@checked`. This will eventually get converted to
form-kit but in the meantime we can just remove this bit of code as it's
doing two times the same thing and you could even end up in the
situation where they both fight for what is the correct value.
2025-05-20 14:03:14 +02:00
4c9384e50d PERF: fixes N+1 for automation plugin (#32810)
- Add a safeguard until we implement pagination for the index, it
ensures we won't try to load more than 500 automations ever.
- Includes the fields of the automation so we don't have an N+1 and also
filter them in ruby land instead of doing two additional queries
- Ensures a field object in the field serializer is capable to find the
loaded automation associated to it instead of trying to reload it
- Includes pending_automations to avoid an N+1
2025-05-20 12:24:07 +02:00
f955d04d9c Build(deps): Bump rdoc from 6.13.1 to 6.14.0 (#32809)
Bumps [rdoc](https://github.com/ruby/rdoc) from 6.13.1 to 6.14.0.
- [Release notes](https://github.com/ruby/rdoc/releases)
- [Changelog](https://github.com/ruby/rdoc/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rdoc/compare/v6.13.1...v6.14.0)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jarek Radosz <jarek@cvx.dev>
2025-05-20 00:57:55 +02:00
bbb9583131 UX: fix alignment of more topics nav pills (#32808)
Trying to stabilize these styles, applied padding to match th elements,
adjusted for border, removed unique hover/active styles


Before (desktop/mobile):

<img
src="https://github.com/user-attachments/assets/9eaa88c0-06bc-4de1-8c61-5be7c00cadeb"
width=600>


![image](https://github.com/user-attachments/assets/8433d1f0-ebf0-45cd-8d99-22ed8f01917c)

After:

![image](https://github.com/user-attachments/assets/50294c39-3e56-45ce-bb6e-08d7da879305)

![image](https://github.com/user-attachments/assets/20f37cd7-8c41-40ad-affd-904e7e143b9d)
2025-05-20 07:36:12 +10:00
f8d61a341e Revert "DEV: Make outletArgs available as regular arguments in Plugin… (#32807)
…Outlet (#32742)"

This reverts commit 707a91243c35ea1693b80249e1c00fb5320f47cb.

This is causing some unexpected re-rendering. Reverting while we
investigate
2025-05-19 20:45:26 +01:00
1a959cf9cc DEV: Add test for plugin-outlet whitespace (#32805)
Fixes for recent regressions:
- da6b82f7767cbeb038dfbebda92a4474626ff1e8
- 2a18834db1cb6b9c8f071eeab8554257336b2802

These tests should stop it happening for a third time 😅
2025-05-19 17:13:23 +01:00
72b6ad42f3 FIX: ensures we have changed page first (#32802)
We should check the H1 is not present anymore only once we have
confirmed we changed page.
2025-05-19 17:44:56 +02:00
69a5da7208 FIX: headerSearch not always appearing when welcomeBanner is removed (#32804)
To reproduce...

Site settings must be enabled:  
`Enable welcome banner`
`Search experience` = `Search field in site header` 

1. Visit /categories, refresh, do not scroll
2. Click a category 
3. Observe no search banner or header search


![image](https://github.com/user-attachments/assets/3e9da6cd-aa8b-4141-8e98-5419e54ef685)

The fix resets `welcomeBannerSearchInViewport` when the search banner
component is destroyed.


![image](https://github.com/user-attachments/assets/63d799e7-4b1b-4e55-bb1b-cc2555a12a50)
2025-05-19 10:52:02 -04:00
da6b82f776 DEV: Remove accidental whitespace from PluginOutlet (#32803)
A followup to 707a91243c35ea1693b80249e1c00fb5320f47cb
2025-05-19 16:27:35 +02:00
b8d733045f FIX: Catch postcss errors correctly for theme fields (#32800) 2025-05-19 13:19:49 +01:00
707a91243c DEV: Make outletArgs available as regular arguments in PluginOutlet (#32742)
Historically, plugin outlet arguments had to be accessed like
`@outletArgs.foo` in templates, or `this.args.outletArgs.foo` in
javascript. Following this commit, outletArgs will be passed to
connectors at the top level, so they can be accessed like `@foo` in
templates or `this.args.foo` in JS.

`@outletArgs` remains available for compatibility, and there are no
plans to remove it.

For custom classic component connectors, these new arguments may clash
with functions/fields defined on the component class. This rare case
will be automatically detected, protected against, and a deprecation
will be shown.
2025-05-19 11:09:40 +01:00
d86b4ff298 DEV: Remove precompile for locale js (#32799)
The Rails asset pipeline isn't used for locale bundles any more. Plus,
`assets.precompile` isn't used for anything since we switched to
propshaft.
2025-05-19 11:08:01 +01:00
5cf6ebf70c DEV: Deprecate inline script tags for templates & initializers (#32773)
https://meta.discourse.org/t/366482
2025-05-19 10:55:52 +01:00
1e368a04ec DEV: Move the catch-all route to the bottom (#32798)
This avoids making unnecessary database queries when routing to paths
that were positioned below this entry, e.g.

```
curl http://localhost:3000/form-templates

# SELECT 1 AS one FROM "permalinks" WHERE "permalinks"."url" = 'form-templates' LIMIT 1
# …
```
2025-05-19 11:06:37 +02:00
b9e919074d FIX: Wait for data before showing admin search results (#32796)
What is the problem?
When we construct the admin search component, we fire off a call to get data from the back-end. When this is done, there's an async callback that re-does the search. This can result in confusing flickering of the results.

This was compounded by a separate issue that caused the data endpoint to be extremely slow if we had two specific plugins installed at the same time. That issue has already been resolved.

The first time we construct the component (and fetch the data) we initialize it with a flag to indicate that data is still loading. Until the data is loaded, we will show the regular loading spinner if the admin starts typing.

On Meta the endpoint takes ~600ms. That countdown starts when you click or use the shortcut, then you need to start typing as well, so this delay shouldn't be a big issue.
2025-05-19 14:14:29 +08:00
76e1373b04 FIX: N+1 in admin themes page (#32763)
`strict_loading` was added to prevent it happening in the future. Few
adjustments had to be made:
- include color_scheme and color_scheme_colors, also for parent and
child themes;
- internal translations were using preload_fields, but it was too deep
to correctly use preloaded tables. I had to pass
`preloaded_locale_fields` manually;
- include theme in color_scheme.

Before:
<img width="663" alt="Screenshot 2025-05-15 at 3 43 47 pm"
src="https://github.com/user-attachments/assets/b55ce11e-80cb-43eb-8e31-940b0e9859f3"
/>

After:
<img width="665" alt="Screenshot 2025-05-16 at 11 29 00 am"
src="https://github.com/user-attachments/assets/f00bac19-f64b-4048-b220-4d0a9d90a929"
/>
2025-05-19 11:05:23 +08:00
b823fb297f FIX: skip flaky specs (#32786)
The proper fix was to apply what has been reverted in
7558e2c7cd
but we would have to break the API to apply this fix so I will just skip
these specs for now.
2025-05-19 09:47:37 +08:00
746c332df3 DEV: simplify test to remove flaky part (#32790)
This test is about testing that we can set notification_level, which it
does correctly. The rest of the spec was testing some undefined behavior
which is flaky.
2025-05-19 09:47:12 +08:00
8784a42940 Build(deps): Bump ember-resolver from 13.1.0 to 13.1.1 (#32793)
Bumps [ember-resolver](https://github.com/ember-cli/ember-resolver) from
13.1.0 to 13.1.1.
- [Release notes](https://github.com/ember-cli/ember-resolver/releases)
-
[Changelog](https://github.com/ember-cli/ember-resolver/blob/main/CHANGELOG.md)
-
[Commits](https://github.com/ember-cli/ember-resolver/compare/v13.1.0...v13.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 09:46:59 +08:00
63be73730a Build(deps-dev): Bump rubocop-rails from 2.31.0 to 2.32.0 (#32791)
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from
2.31.0 to 2.32.0.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
-
[Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/rubocop/rubocop-rails/compare/v2.31.0...v2.32.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 09:34:30 +08:00
c6369b4386 Build(deps-dev): Bump lefthook from 1.11.12 to 1.11.13 (#32794)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.11.12
to 1.11.13.
- [Release notes](https://github.com/evilmartians/lefthook/releases)
-
[Changelog](https://github.com/evilmartians/lefthook/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/evilmartians/lefthook/compare/v1.11.12...v1.11.13)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 09:33:39 +08:00
ae074f0c90 FIX: rely on capybara waiters (#32789) 2025-05-18 23:08:19 +02:00
920efb7fa7 FIX: uses correct capybara waiter (#32788) 2025-05-18 22:57:35 +02:00
ce03fff375 FIX: attempts to fix flaky in review media (#32787)
I suspect the within is doing a memoization of the preview at a moment
where the emoji has not been rendered yet, when we render the emoji we
might have a different instance of the preview in the within which
doesn't have the emoji.

Im not super confident about this theory, but the within is useless here
so it seems like a good thing to try first.

The error we have is:

```
Failure/Error: super

Playwright::Error:
  TypeError: Cannot read properties of null (reading 'namespaceURI')
      at eval (eval at evaluate (:313:29), <anonymous>:17:12)
      at UtilityScript.evaluate (<anonymous>:320:18)
      at UtilityScript.<anonymous> (<anonymous>:1:44)
  Call log:

[Screenshot Image]: /__w/discourse/discourse/tmp/capybara/failures_r_spec_example_groups_composer_using_review_media_does_not_flag_a_post_with_an_emoji_250.png

~~~~~~~ JS LOGS ~~~~~~~
ℹ️ Discourse v3.5.0.beta5-dev — https://github.com/discourse/discourse/commits/94932de163 — Ember v5.12.0
DEBUG: For more advanced debugging, install the Ember Inspector from https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi
Failed to load resource: net::ERR_CONNECTION_REFUSED
~~~~~ END JS LOGS ~~~~~

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `raise'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `wait_until_resolved!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1482:in `value!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright/connection.rb:121:in `send_message_to_server'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright/channel.rb:35:in `block in send_message_to_server_result'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright/channel.rb:67:in `with_logging'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright/channel.rb:34:in `send_message_to_server_result'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright/channel.rb:20:in `send_message_to_server'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright/javascript/expression.rb:10:in `evaluate'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright/channel_owners/js_handle.rb:19:in `evaluate'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/playwright-ruby-client-1.52.0/lib/playwright_api/js_handle.rb:46:in `evaluate'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-playwright-driver-0.5.6/lib/capybara/playwright/node.rb:885:in `block in path'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-playwright-driver-0.5.6/lib/capybara/playwright/node.rb:87:in `assert_element_not_stale'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-playwright-driver-0.5.6/lib/capybara/playwright/node.rb:884:in `path'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/element.rb:578:in `inspect'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/queries/selector_query.rb:106:in `description'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/queries/selector_query.rb:115:in `applied_description'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/queries/selector_query.rb:180:in `failure_message'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/result.rb:114:in `failure_message'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/matchers.rb:112:in `block in assert_selector'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/matchers.rb:869:in `block in _verify_selector_result'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/base.rb:84:in `synchronize'
./spec/rails_helper.rb:421:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/matchers.rb:868:in `_verify_selector_result'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/node/matchers.rb:110:in `assert_selector'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/session.rb:774:in `assert_selector'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/rspec/matchers/have_selector.rb:18:in `element_matches?'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/rspec/matchers/base.rb:52:in `matches?'
./spec/system/composer/review_media_unless_trust_level_spec.rb:20:in `block (3 levels) in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/session.rb:366:in `within'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/dsl.rb:52:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/dsl.rb:52:in `within_element'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/capybara-3.40.0/lib/capybara/rspec/matcher_proxies.rb:15:in `within'
./spec/system/composer/review_media_unless_trust_level_spec.rb:20:in `block (2 levels) in <main>'
```
2025-05-18 22:57:00 +02:00
82ac698293 FIX: attempts to fix flaky in stat spec (#32784)
I suspect that by having an integer and not a float sometimes the value
we get is converted to 0.

This is the error we have atm:

```
Failure/Error: measurement = Benchmark.measure { example.run }

  expected: 0.75
       got: 0.0

  (compared using ==)
```

This might not fix it, but it feels right to make this change.
2025-05-18 21:55:46 +02:00
e60e832b63 DEV: fix flaky in admin site texts (#32783)
A spec could potentially go so fast that it would attempt to fill in the
input before we have gone through the various redirects resulting in an
error.

```
Failure/Error: super

Playwright::Error:
  TypeError: Cannot read properties of null (reading 'namespaceURI')
      at eval (eval at evaluate (:313:29), <anonymous>:17:12)
      at UtilityScript.evaluate (<anonymous>:320:18)
      at UtilityScript.<anonymous> (<anonymous>:1:44)
  Call log:
```

Now that we ensure that we have the current final state path we should
avoid this error.
2025-05-18 19:12:43 +02:00
df37ef5774 DEV: flaky spec (#32781)
Attempts to not use within to make this spec less flaky.
2025-05-17 15:32:45 +02:00
19e1c0ecfd DEV: skips s3 multipart spec (#32780)
The spec is randomly failing, but it's not due to the system spec.
Sometimes the upload fails to work and we get an error from the service.
2025-05-17 15:32:22 +02:00
948939e998 FIX: uses correct waiters and APIs (#32778) 2025-05-17 15:32:07 +02:00
c74a49d7e7 DEV: attempts to use capybara choose (#32779)
Im not convinced this will fix the flakyness, but this is better
anyways.
2025-05-17 15:31:52 +02:00
2a18834db1 DEV: Remove accidental whitespace from PluginOutlet (#32777) 2025-05-17 10:10:59 +02:00
de2159cd8a UX: follow-up search fixes for welcome banner (#32776)
follow-up to
6169ac2683

this fixes a spacing regression in the welcome banner search results


before:

![image](https://github.com/user-attachments/assets/3175feb9-b75b-4019-9df0-002faa73f204)


after: 

![image](https://github.com/user-attachments/assets/82c3c90e-7a0a-4c30-9cdc-a3a65e23ca27)


before:

![image](https://github.com/user-attachments/assets/a44b7414-c9a2-453d-96cc-a50af234e8fe)


after:

![image](https://github.com/user-attachments/assets/88e27a1c-b873-4e52-bab2-1eda84323565)
2025-05-16 15:34:59 -04:00
c293fe02c3 FIX: check if sidebar hidden and remove scrollLock when hiding hamburger menu (#32775)
Reported here:
https://meta.discourse.org/t/dashboard-freezes-until-sidebar-is-opened/366402

This is a follow-up to
https://github.com/discourse/discourse/pull/32651, when navigating from
the homepage to admin the hamburger gets force-hidden because we switch
from the dropdown to the sidebar nav but the scrollLock was
unintentionally left behind.

This makes sure we're only messing with hamburger state when the sidebar
is hidden (with ` {{hideApplicationSidebar}}`) and also removes the
scroll lock when the hamburger is force-hidden.
2025-05-16 15:30:24 -04:00
94ea8a3158 DEV: Add appEvents trigger for flag:created (#32710)
## Changes 

This PR adds an appEvents trigger for 'flag:created'.
2025-05-16 12:13:16 -05:00
6169ac2683 UX: make the notification panel consistent with new search panel styles (#32753)
This eliminates menu panel container padding, which gets us a closer
match to the recent search panel adjustments. I've also eliminated the
menu-panel box-shadow variant — if we're not going to use it on the
search panel we should consolidate and eliminate the variance.




Before:

![image](https://github.com/user-attachments/assets/07122788-61a4-4767-a697-47cc3118d84e)


After:

![image](https://github.com/user-attachments/assets/a6f66c6f-37cd-4144-930d-d05546bba801)
2025-05-16 12:50:12 -04:00
9e17b0bc1e REFACTOR: merge desktop and mobile topic-footer.scss into common (#32712)
This moves the desktop and mobile css into common with the relevant
breakpoints. There should be no major visual changes as a result.
2025-05-16 12:31:53 -04:00
77c240e4b6 DEV: Drop deprecated PluginOutlet @tagName argument (#32770)
This has been deprecated with an admin warning for some time
2025-05-16 16:30:42 +01:00
975fb9214d UX: improve spacing of text in topic list items (#32755)
This tightens up some topic list spacing — our line height for titles
has been kind of on the large size, we've got too much space between
wrapping metadata, and sometimes not enough space between the right of
titles and avatars.
 
Generally headline line-height is recommended to be within 1.1 - 1.3,
and we were at 1.4, this puts it at 1.2
 
Before:

![image](https://github.com/user-attachments/assets/cc71ef47-5492-4aea-9caf-3b768e326b67)


After: 

![image](https://github.com/user-attachments/assets/f274a0bc-0077-41bf-abda-ddde71d805b6)
2025-05-16 10:15:44 -04:00
071ec5a240 FIX: Bug with 2FA setup right after signup (#32754) 2025-05-16 09:00:39 -04:00