Commit Graph
61631 Commits
Author SHA1 Message Date
David Taylor e56a4bf03e DEV: Prepare for rename of app/assets/javascripts/ -> frontend/
This commit contains all the code changes. A followup will perform the actual move
2025-10-22 16:24:11 +01:00
David Taylor ecb5f7b910 DEV: Make bin/ember-cli boot more efficient (#35547)
- Do a simple check to see whether JS deps are out-of-date before
running `pnpm install`. This saves about 1 second on my machine

- Remove `playwright install` from the critical path. Instead, add a
`pnpm playwright-install` shortcut, and improve the error which system
specs throw when playwright is out of date. This saves about 0.7s on my
machine.
2025-10-22 16:03:54 +01:00
Gabriel Grubba 07934f2c55 DEV: Add username-input-invite outlet to invite page template (#35506) 2025-10-22 11:44:22 -03:00
Joffrey JAFFEUX ed295624ad FIX: revert scroll on focus solution (#35544)
This solution was working correctly but it had a bug with our hashtag
autocompletion, this is the same solution than before but packaged in a
modifier. It seems to work ok in the latest iOS beta.
2025-10-22 15:26:18 +02:00
Sérgio Saquetim 601310c042 DEV: Replace ArrayProxy with tracked array for CategoryList (#35404)
Migrates category listing and related UI to tracked built-ins with an
array-like proxy for improved reactivity and modernization.

- Introduce LegacyArrayLikeObject: a Proxy over TrackedArray preserving
array semantics while allowing instance properties/methods
- Rewrite CategoryList to use an array-like object; add tracked state
(page, isLoading, fetchedLastPage, parentCategory), async list(), and
safer loadMore with error handling; deprecate legacy categories/content
usage
- Update routes/templates to pass CategoryList directly (not
.categories), switch to async/await, preserve PreloadStore behavior, and
sync TopicTrackingState with the new model
- Refactor category components (boxes, boxes-with-topics, only) to ES
getters and native array APIs; remove discourseComputed and Ember
helpers like firstObject/filterBy
- Add tests for array-like object behavior (array methods, inheritance,
plugin API modifyClass), CategoryList fetching/parent filtering/stat
rendering/pagination, and UI reactivity
- Remove ArrayProxy and other deprecated patterns
2025-10-22 10:18:21 -03:00
Renato Atilio f9692f6512 FIX: rich editor link toolbar Max call stack exceeded (#35530)
`getBoundingClientRect()` calls `#getTriggerClientRect()`
`#getTriggerClientRect()` calls `this.#view.coordsAtPos(head)`
`coordsAtPos()` internally calls `getBoundingClientRect()` on the
trigger element

Which may creates an infinite loop / `Maximum call stack size exceeded`.

This PR adds a `this.#calculatingCoords` guard to make sure we don't
call `#getTriggerClientRect` again during the `coordsAtPos` call.

To reproduce the issue, you can follow the same steps as the added test
case:
- type a `[link](link)`
- cmd/ctrl-a to select all
- type anything to replace it

You should see a `Maximum call stack size exceeded` console output.
2025-10-22 08:59:01 -03:00
Renato Atilio 6cf72804ee DEV: avoid rich editor input rule if preceded by backtick (#35528)
Adds an input rules wrapper to skip applying input rules whenever
there's a backtick ` preceding the regex match.
2025-10-22 08:58:53 -03:00
Joffrey JAFFEUX 818ba9c941 FIX: fix scroll more chat spec (#35543) 2025-10-22 12:50:28 +02:00
7ecb945ec4 FEATURE: Add full-text search for chat messages (#34704)
## Overview

This PR introduces comprehensive search functionality for chat messages,
enabling users to search through their chat history both globally across
all accessible channels and within specific channels.

### Search Capabilities

**All-Channel Search**: When no channel is specified, users can search
across all channels they have access to. The search respects channel
permissions through `ChannelFetcher.all_secured_channel_ids`, ensuring
users only see results from channels they can view.

**Per-Channel Search**: Users can scope their search to a specific
channel by providing a `channel_id` parameter, useful for finding
messages within a particular conversation context.

**Search Features**:
- Full-text search using PostgreSQL's tsvector/tsquery
- Advanced filters: `@username` to filter by author, `#channel` to
filter by channel slug
- Sort options: relevance (default) or latest
- Pagination support
- Search data weighted by relevance

## Site Setting: `chat_search_enabled`

This feature is gated behind the `chat_search_enabled` site setting,
which is currently:
- **Default**: `false`
- **Hidden**: `true`
- **Client-accessible**: `true`

### Deployment Strategy

Due to the need for chat messages to be indexed before search becomes
useful, we're implementing a two-phase deployment:

**Phase 1 (Initial Merge)**:
- `chat_search_enabled` remains `false` and hidden
- The `register_search_index` uses default (true) instead of `chat_search_enabled` value
- This allows the reindexing infrastructure to begin indexing existing
chat messages even if we don't show the UI yet

**Wait Period**:
- Wait at least one week after Phase 1 deployment
- `Jobs::ReindexSearch` runs every 2 hours and will progressively index
all chat messages
- This ensures most sites have a significant part of their chat history indexed

**Phase 2 (Follow-up Merge)**:
- Set `chat_search_enabled` default to `true` and unhide it
- Update the `register_search_index` enabled proc uses the default
(true) instead of using the `chat_search_enabled` setting
- Users can now access search with pre-indexed data

**Rationale**: Without this phased approach, users would see the search
UI immediately but receive no results until the reindexing job runs,
creating a confusing experience. By pre-indexing while the UI is hidden,
we ensure search works immediately when enabled.

## New Plugin API: `register_search_index`

This PR introduces a new plugin API that allows plugins to register
custom search indexes that integrate seamlessly with Discourse's search
infrastructure.

### API Signature

```ruby
register_search_index(
  model_class:,              # The ActiveRecord model to index
  search_data_class:,        # The model for storing search data
  index_version:,            # Version number for re-indexing
  search_data:,              # Proc that returns weighted search data
  load_unindexed_record_ids:,# Proc that finds records needing indexing
  enabled:                   # Optional proc to enable/disable (default: -> { true })
)
```

### How It Works

**Integration with SearchIndexer**: When `SearchIndexer.index(obj)` is
called, it checks registered search handlers for the object's type. If a
handler matches, it:
1. Calls the `search_data` proc with the object and an `IndexerHelper`
instance
2. Receives weighted search data (`:a_weight`, `:b_weight`, `:c_weight`,
`:d_weight`)
3. Updates the corresponding search data table with PostgreSQL's
tsvector

**Integration with Jobs::ReindexSearch**: The scheduled job (runs every
2 hours) calls `rebuild_registered_search_handlers`, which:
1. Iterates through all registered search handlers
2. Skips handlers where `enabled` proc returns `false`
3. Calls `load_unindexed_record_ids` to find records needing indexing
4. Indexes up to `limit` records per handler (default: 10,000)

### Chat Implementation Example

```ruby
register_search_index(
  model_class: Chat::Message,
  search_data_class: Chat::MessageSearchData,
  index_version: 1,
  search_data: proc { |message, indexer_helper|
    {
      a_weight: message.message,
      d_weight: indexer_helper.scrub_html(message.cooked)[0..600_000]
    }
  },
  load_unindexed_record_ids: proc { |limit:, index_version:|
    Chat::Message
      .joins("LEFT JOIN chat_message_search_data ON chat_message_id = chat_messages.id")
      .where(
        "chat_message_search_data.locale IS NULL OR 
         chat_message_search_data.locale != ? OR 
         chat_message_search_data.version != ?",
        SiteSetting.default_locale,
        index_version
      )
      .order("chat_messages.id ASC")
      .limit(limit)
      .pluck(:id)
  }
)
```

Co-authored-by: Martin Brennan <mjrbrennan@gmail.com>
Co-authored-by: Loïc Guitaut <5648+Flink@users.noreply.github.com>
2025-10-22 11:30:35 +02:00
Jarek Radosz 3428d24ae3 DEV: Update admin path in javascript:update_constants task (#35542)
…and run the command to update constants files

(missed in the admin directory move)
2025-10-22 11:06:51 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Discourse CI
52820127df Build(deps-dev): Bump puppeteer-core from 24.25.0 to 24.26.0 (#35526)
Bumps [puppeteer-core](https://github.com/puppeteer/puppeteer) from
24.25.0 to 24.26.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
-
[Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
-
[Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.25.0...puppeteer-core-v24.26.0)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Discourse CI <ci@ci.invalid>
2025-10-22 10:50:12 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 549aa28b4b Build(deps-dev): Bump rubocop from 1.81.1 to 1.81.6 (#35525)
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.81.1 to
1.81.6.
- [Release notes](https://github.com/rubocop/rubocop/releases)
-
[Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/rubocop/rubocop/compare/v1.81.1...v1.81.6)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-22 10:49:41 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> fb49f220ae Build(deps-dev): Bump rspec from 3.13.1 to 3.13.2 (#35524)
Bumps [rspec](https://github.com/rspec/rspec) from 3.13.1 to 3.13.2.
-
[Commits](https://github.com/rspec/rspec/compare/rspec-v3.13.1...rspec-v3.13.2)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-22 10:49:18 +02:00
Joffrey JAFFEUX 3b999bf6bb DEV: updates discourse-emojis to 1.0.44 (#35529)
This version corrects a bug where fluentui emojis didn't have a
transparent background. To ensure the cache is cleared and we don't
serve incorrect emojis anymore we had to bump the emoji version.
2025-10-22 10:09:16 +02:00
Krzysztof Kotlarek b19583e253 FIX: Make system user fallback optional for category email (#35536)
Previously, when staged users were disabled and a category allowed
strangers via `email_in_allow_strangers`, incoming emails would
automatically fallback to using the system user to create topics.

Change introduced in this PR
https://github.com/discourse/discourse/pull/34655

This change adds a new hidden site setting
`email_in_allow_system_user_fallback` (default: false) that controls
this behavior. When disabled, emails from strangers will raise a
UserNotFoundError instead of creating topics as system user.
2025-10-22 15:01:36 +08:00
Alan Guo Xiang Tan 8597ab5f38 UX: Improve messaging when auto closed based on last post topic timer (#35538)
The previous message states that the topic will be closed momentarily
but this is not true as the topic is closed immediately.

This commit also removes the `topic.auto_close_momentarily` i18n key
since it isn't being used anywhere else.

Some styling changes have also been made to make the warning message
clearer.
2025-10-22 14:04:04 +08:00
Alan Guo Xiang Tan 47d10f2026 DEV: Add client side settled checks to (un)select_option (#35535)
Follow-up to 55b05c921b
2025-10-22 13:29:55 +08:00
Martin Brennan bef35e2cd4 FIX: Handle cancel action in topic reply choice dialog (#35534)
Steps to reproduce:

* Start drafting a reply to a topic
* Write some text.
* Navigate to a different topic while keeping the draft open
* Click reply on the composer and choose cancel in the modal asking
which topic you want to reply to.
* Write some more text.
* Copy the text you have written or memorize your input.
* Reload the page/ close the composer.
* Navigate back to the topic you replied to
* Open your draft.
* Everything written after clicking cancel is missing.

This was happening because we weren't doing anything on Cancel for
the topic reply choice dialog, and we were doing `disableDrafts` before
opening the dialog, so drafts never resumed.

The fix is to just save the current draft on cancel then turn on
draft saving again so the user can continue typing and delay the
question about "Which topic do you want to reply to?" until later.

c.f.
https://meta.discourse.org/t/draft-is-no-longer-automatically-saved-after-you-cancel-replying/386370

Also rename TopicLabelContent to TopicReplyChoiceDialog, it
is more specific and reflects what the component actually does.
2025-10-22 14:42:57 +10:00
Alan Guo Xiang Tan bbced6c97c DEV: Bump timeout for core system tests on CI (#35533)
When multiple flaky tests are encountered, we sometimes exceed the 20
minutes timeout. Since we are on self hosted runners now where costs are
much lower, it is OK for us to have longer timeouts.
2025-10-22 11:11:14 +08:00
Bryce Huhtala 0f946b3c02 UX: Add class to draft error ignore button (#35531)
When the user is editing a draft in multiple windows, they get a dialog
asking if they want to reload or ignore. The ignore button didn't have
the correct border radius, due to it missing `btn-default` (double `btn`
classes instead). This PR adds `btn-default` for that button.

```html
<div class="dialog-footer">
  <button class="btn btn-primary" type="button">
    <span class="d-button-label">Reload</span>
  </button>
                      ↓
  <button class="btn btn" type="button">
    <span class="d-button-label">Ignore</span>
  </button>
</div>
```

<img width="1502" height="970" alt="image"
src="https://github.com/user-attachments/assets/bcc7ac5f-70d0-4c87-abee-dee6090ea1ec"
/>
2025-10-21 21:48:59 -04:00
Alan Guo Xiang Tan c9e771157a PERF: Fix N+1 queries due to user custom fields when loading chat DMs (#35516)
In `Chat::ChannelFetcher.secured_direct_message_channels_search`,
`User.preload_custom_fields` is called with `channels.flat_map {
_1.chatable.users }`. However,
the `Chat::DirectMessageSerializer` was getting the users via
`object.direct_message_users.map(&:user)` which uses the
`Chat::DirectMessage.direct_message_users` scope instead of the
`Chat::DirectMessage.users` scope resulting in ActiveRecord returning
new `User` objects that do not have user custom fields preloaded.
2025-10-22 09:39:01 +08:00
chapoi 1b4c612fce UX: update remove password button to use btn-danger class (#35514)
Noticed here on meta:
https://meta.discourse.org/t/remove-password-button-should-be-btn-danger-not-btn-transparent/386142

Seems logical to me that this button should be btn-danger.
2025-10-21 18:00:51 -06:00
Kris f8cc5ce7ee UX: show AI gist toggle on /filter route, fix appearance of gists (#35521)
This fixes the appearance of AI generated gists in the topic list on
/filter, and also includes the gist toggle via a new plugin outlet on
/filter called `after-filter-navigation-menu`.

This shares the state with the discovery route toggle (which is separate
from PM toggle state). I've also added tests to cover gist appearance on
/filter. Before the /filter state was shared with PM state, which was
incorrect.



Before:
<img width="2232" height="424" alt="image"
src="https://github.com/user-attachments/assets/b22ed7a6-388e-4b88-99d4-e9e10af6275a"
/>


After: 
<img width="2272" height="506" alt="image"
src="https://github.com/user-attachments/assets/cae03f12-9153-4bcb-a9d3-52712fb2d945"
/>
2025-10-21 16:08:19 -04:00
Blake Erickson 1a705ab862 DEV: Have converted videos use the cdn url (#35480)
Once a video is converted have it use the cdn url instead of the direct
url.
2025-10-21 12:44:11 -06:00
Blake Erickson 737c4ea194 DEV: Update tag_groups api doc schema (#35520)
This just updates the api docs to use the new json schema format for the
json response of the GET tag_groups.json endpoint.
2025-10-21 12:43:41 -06:00
Sérgio Saquetim a138e25333 DEV: Disable widgets by default (#35504)
This commit represents the last phase before removing the old widget 
rendering system from the codebase.

It switches the Glimmer Post Stream to enabled and disables any other
widget rendering by default, but the settings still allow sites that
were not ready to enable them temporarily.

The final removal is expected in about one month.

See the following meta topics for more information:

- https://meta.discourse.org/t/upcoming-eol-for-the-widget-rendering-system/375332
- https://meta.discourse.org/t/upcoming-post-stream-changes-how-to-prepare-themes-and-plugins/372063
2025-10-21 15:18:34 -03:00
David Taylor 7d794f45b6 DEV: Move 'unknown OID' embeddings fix into core (#35519)
Having it in d-ai's plugin.rb file solves it when running plugin tests.
But when running core tests, plugins are not loaded, but the tables
still exist in the database.

Followup to 6247fdc255
2025-10-21 15:23:24 +01:00
Renato Atilio 6710390585 FIX: [rich editor] convert newlines to hard breaks when parsed from HTML (#35518)
Updates `prosemirror-model` to use this fix: [When preserving
whitespace, replace newlines with line break replacements

](https://github.com/ProseMirror/prosemirror-model/commit/79e9f2b9497ec3aac70d180aa846267dafa48d9a)

Adds `linebreakReplacement: true` to our hard break node spec
definition.

Adds a system test to confirm a `white-space: pre` HTML pasted from the
clipboard parses new lines as hard breaks.
2025-10-21 11:19:21 -03:00
Juan David Martínez Cubillos fe262687ed DEV: Unify image handling modes in ExcerptParser (#35417)
**Description**

Replaces separate @strip_images and @markdown_images boolean flags with
a single @image_mode variable that can be :strip, :markdown, or nil.
Keeping the interface but ensuring only one
2025-10-21 15:11:11 +02:00
Tomas Vavrda f51960287f FEATURE: Add Czech default quotation marks (#34797)
cf. https://meta.discourse.org/t/european-typography-rules/382506
2025-10-21 09:55:36 +02:00
Justin Moore 9125f85e69 FIX: Add Azure communication service endpoint to SMTP authentication override (#33226)
Per [this
topic](https://meta.discourse.org/t/struggling-to-configure-smtp-in-discourse-with-azure-communication-service/290511), Azure communication service requires the `login` authentication method
on their SMTP service.
2025-10-21 09:39:25 +02:00
Krzysztof Kotlarek 6e39bb9728 FIX: Persist reviewable notes when toggle tabs (#35495)
When adding a note through the timeline tab, the note wasn't being
persisted to the reviewable's reviewable_notes array. This caused the
note to disappear when switching between tabs.
2025-10-21 10:23:41 +08:00
Krzysztof Kotlarek 760674cad3 DEV: Add discourse-dev seed for post voting reviewable (#35435)
Add DiscourseDev::ReviewablePostVotingPostVotingComment to generate a
post voting comment reviewable.
2025-10-21 09:57:05 +08:00
Alan Guo Xiang Tan 2baabe5ce6 FIX: Ensure chat service has loaded channel before rendering channel (#35433)
This is a follow up to cf4193e6e1.

When chat is being initialized, we initiate an async request to
`/chat/api/me/channels` via `this.chat.loadChannels` but do not await on the request to be completed.
This is fine when a user is not visiting a chat channel route directly.

However, not awaiting on `this.chat.loadChannels` can cause problems
like a user's thread list or drafts to not be displayed if the
`/chat/api/me/channels` request does not return before rendering
happens. To resolve this, we will now wait for the promise in
`this.chat.loadChannels` to resolve before allowing rendering to happen on the `ChatChannelRoute`.
2025-10-21 09:20:48 +08:00
Gary Pendergast d8e7741d96 DEV: Send a 204 response when updating site settings. (#35349)
When a `PUT`, `POST`, or `DELETE` operation doesn't need to return any
data, we've historically either returned nothing, or `{ success: "OK"
}`.

A more consistent way to return the same data would be with a 204 status
response. This gives the same information as the `{ success: "OK" }`
body (ie, that the operation successfully completed), without needing to
read or parse the response body.

This change adds a 204 response for `Admin::SiteSettingsController`.
Additional controllers could be migrated in follow-up PRs, or on an
ad-hoc basis.
2025-10-21 11:43:10 +11:00
Renato Atilio dd201fd999 DEV: remove duplicate code mark input rule (#35505) 2025-10-20 21:35:22 -03:00
Gary PendergastandKrzysztof Kotlarek 23e7542f60 DEV: Improve the helper methods for defining reviewable actions (#35406)
This change adds a new `ReviewableActionBuilder#build_bundle` helper for
quickly defining action bundles that can be performed on reviewables.
`ReviewableActionBuilder#build_action` has also been updated to allow
plugin-defined actions to appear correctly.

The core reviewable types have been updated to use this new method, and
I've also added support for reviewable chat messages, to demonstrate
plugin support.

Co-authored-by: Krzysztof Kotlarek <kotlarek.krzysztof@gmail.com>
2025-10-21 11:13:13 +11:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7b588feebd Build(deps): Bump mini_racer from 0.19.0 to 0.19.1 (#35509)
Bumps [mini_racer](https://github.com/discourse/mini_racer) from 0.19.0
to 0.19.1.
- [Changelog](https://github.com/rubyjs/mini_racer/blob/main/CHANGELOG)
-
[Commits](https://github.com/discourse/mini_racer/compare/v0.19.0...v0.19.1)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-21 00:31:02 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 5bcb03180b Build(deps-dev): Bump annotaterb from 4.19.0 to 4.20.0 (#35510)
Bumps [annotaterb](https://github.com/drwl/annotaterb) from 4.19.0 to
4.20.0.
- [Changelog](https://github.com/drwl/annotaterb/blob/main/CHANGELOG.md)
-
[Commits](https://github.com/drwl/annotaterb/compare/v4.19.0...v4.20.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-21 00:29:40 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> d515851928 Build(deps): Bump rrule from 0.6.0 to 0.7.0 (#35508)
Bumps [rrule](https://github.com/square/ruby-rrule) from 0.6.0 to 0.7.0.
- [Release notes](https://github.com/square/ruby-rrule/releases)
-
[Changelog](https://github.com/square/ruby-rrule/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/square/ruby-rrule/compare/v0.6.0...v0.7.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-21 00:29:07 +02:00
Joffrey JAFFEUX c2e4cb30af DEV: fix failing specs (#35507)
Since the new modifier has been added, some specs were not using using
the focus check on the composer (included in `fill_composer` method) and
we were actually not focused which was causing these specs to fail.
2025-10-20 23:39:20 +02:00
Joffrey JAFFEUX 33ca54d306 FIX: adds timeout to prevent-scroll-on-focus modifier (#35503)
The `{{prevent-scroll-on-focus}}` modifier is a workaround for a bug in
iOS where safari won't follow `preventScroll: true` and will actually
scroll. I thought that not having the timeout would be good enough, but
we actually need this delay to ensure we are past the moment where
safari will start respecting `preventScroll: true`.
2025-10-20 19:15:23 +02:00
David Taylor 883ec80a77 DEV: Replace node globSync with find (#35501)
`globSync` isn't available in earlier versions of node 22.

Followup to 0fcd2f12dc
2025-10-20 15:34:48 +01:00
David Taylor 1d33e72389 DEV: Use native promise for lib/ajax (#35483)
The `RSVP.Promise` polyfill has some subtle differences to native
promises. In this case, we ran into a problem where calling `reject()`
inside JQuery's `error` handler would throw an exception, and then stop
JQuery's own error cleanup from running. That caused subtle problems,
like the global `ajaxError` event failing to fire.

Switching from `RSVP.Promise` to `Promise` normally introducing subtle
timing changes. However, I think in this case we are insulated from that
because we're already calling resolve/reject via `@ember/runloop`'s
`run()` function. 🤞
2025-10-20 14:43:26 +01:00
David Taylor 585ba17f56 DEV: Rename theme-transpiler to asset-processor (#35498)
This is already used for more than just themes, and we plan to extend
its usage even further
2025-10-20 14:16:46 +01:00
chapoiandawesomerobot 33e79f6272 UX: Move AI bot PM to navigation menu (#35189)
The header space is becoming very crowded with translations, chat, and
AI bot all enabled.
This commit makes the new default for AI conversations a link in the
community section in the sidebar instead of a header button.


<img width="1412" height="246" alt="CleanShot 2025-10-04 at 15 44 05@2x"
src="https://github.com/user-attachments/assets/45c48607-bbaa-4993-9e92-bb8db2d7f45a"
/>
<img width="478" height="650" alt="CleanShot 2025-10-04 at 15 44 32@2x"
src="https://github.com/user-attachments/assets/67af3afa-6a46-4c79-8aa9-fc789a086056"
/>

There is also a new back-to-forum button added in, conform with other
custom-sidebar pages such as /admin and /docs.
<img width="1966" height="1004" alt="CleanShot 2025-10-04 at 15 45
04@2x"
src="https://github.com/user-attachments/assets/5b167aba-9305-476f-a449-ec4a186bc6f7"
/>

---------

Co-authored-by: awesomerobot <kris.aubuchon@discourse.org>
2025-10-20 09:15:51 -04:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1522c181e8 Build(deps-dev): Bump rspec-core from 3.13.5 to 3.13.6 (#35487)
Bumps [rspec-core](https://github.com/rspec/rspec) from 3.13.5 to
3.13.6.
-
[Changelog](https://github.com/rspec/rspec/blob/rspec-core-v3.13.6/rspec-core/Changelog.md)
-
[Commits](https://github.com/rspec/rspec/compare/rspec-core-v3.13.5...rspec-core-v3.13.6)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-20 15:06:22 +02:00
Joffrey JAFFEUX 0a75c18f57 FIX: prevents body scroll in input focus (#35497)
We had already a workaround for this, but this is supposed to be an even
better one. I never managed to repro the bug with this workaround.

What we are trying to prevent:
<img width="922" height="2000" alt="IMG_8116 2 (1)"
src="https://github.com/user-attachments/assets/28fb3150-1cb6-43b7-9ca6-f0e7e18dcc80"
/>

Example discussion online about this bug:

https://stackoverflow.com/questions/60797340/ios-safari-prevent-or-control-scroll-on-input-focus

This commit also extracts this logic as modifier:
`{{preventScrollOnFocus}}`
2025-10-20 15:04:09 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 4328d29138 Build(deps-dev): Bump eslint from 9.37.0 to 9.38.0 in the lint group (#35488)
Bumps the lint group with 1 update:
[eslint](https://github.com/eslint/eslint).


Updates `eslint` from 9.37.0 to 9.38.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.37.0...v9.38.0)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-20 14:34:10 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 5e2160134f Build(deps): Bump ace-builds from 1.43.3 to 1.43.4 (#35491)
Bumps [ace-builds](https://github.com/ajaxorg/ace-builds) from 1.43.3 to
1.43.4.
- [Release notes](https://github.com/ajaxorg/ace-builds/releases)
-
[Changelog](https://github.com/ajaxorg/ace-builds/blob/master/CHANGELOG.md)
-
[Commits](https://github.com/ajaxorg/ace-builds/compare/v1.43.3...v1.43.4)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-20 14:33:17 +02:00