Update all GitHub Actions to their latest major versions for improved
performance, security patches, and Node.js runtime compatibility.
Signed-off-by: Stephan Meijer <me@stephanmeijer.com>
Personal mailboxes now enforce configurable prefix restrictions; blocked prefixes return a clear error. Domains can indicate identity synchronization status; when disabled, creating personal mailboxes is prevented and returns a specific error.
Allow signatures to use a 2-column layout (image + text) via a custom
BlockNote block. The column list node must keep the name `columnList`
internally to stay compatible with BlockNote's built-in block
manipulation logic (fixColumnList, replaceBlocks, etc.).
A typo in uikit prevent us to use turbopack to build frontend. Now it's fixed
let's use some rusty stuff. For now we are using it only for dev.
For now it generates broken production build.
https://github.com/suitenumerique/ui-kit/pull/144https://github.com/vercel/next.js/discussions/77721
Drafts and trashed messages should not display delivery status
indicators or retry options since they were never actually sent
or are no longer relevant to the user.
Hide block types that are not relevant for the email composer
(toggle lists, code blocks, file/video/audio, tables) from both
the slash menu and the block type selector. Add a custom side menu
with drag handle that is hidden on read-only blocks (signature,
quoted-message). Fix toolbar dropdown being clipped by the Floating
UI size middleware when the toolbar wraps.
Labels now show their display_name instead of name in badges,
ensuring users just see the label name instead of the full
path name that could be long so hard to read.
Parent labels automatically unfold when a child label is active,
improving navigation discoverability.
The previous version had a bug in the OIDC token refresh middleware
that used the wrong session key (`oidc_token_expiration` instead of
`oidc_id_token_expiration`), causing it to consider the token as
always expired and attempt a refresh on every request. Combined with
the expiration not being updated after a successful refresh, this led
to race conditions on concurrent requests and "authentication session
has expired" errors on the Drive endpoint.
Avoid transferring heavy body content (especially base64 images) when
only metadata is needed. The frontend now explicitly requests the body
fields it needs via ?bodies=raw,html,text, and modals lazily fetch
body content only when editing a template.
Key changes:
- Replace 3 read serializers with a single ReadMessageTemplateSerializer
that dynamically includes body fields based on ?bodies= query param
- Cache parsed blob content on the model to avoid redundant JSON parsing
- Skip expensive base64 image validation on update when body is unchanged
- Refactor frontend modals to lazy-load body via retrieve on edit
Generating HTML and text body on every keystroke via blocksToMarkdownLossy
caused ProseMirror's DOMSerializer to create real <img> elements, triggering
unwanted blob download requests for inline images.
The export is now deferred to send time using useImperativeHandle/forwardRef,
and the Object URL cache in useHtmlWithObjectUrls uses a lightweight
fingerprint to avoid recreating URLs for unchanged images.
Through the new email exporter, we are able to add more blocknote tools
to customize text layout. So we revamp a little bit the toolbar and add
color style button.
Images are embedded as base64 data URLs directly in the BlockNote content,
unlike the message composer which uses blob uploads + CID references.
This approach keeps templates and signatures self-contained without
requiring an attachment system.
Furthermore, a email-safe safe html exporter has been created to
serialize blocknote content into html.
A new backend setting MAX_TEMPLATE_IMAGE_SIZE (default 2 MiB) controls
the maximum allowed image size for these composers.
Allow users to insert images directly in the message body via the
BlockNote editor. Non-image files are intercepted and redirected as
regular attachments.
Add outbox conditional folder to display messages having message recipients with None, retry or failed state.
Inform visually the user is something is wrong with a message.
Allow user to update MessageRecipient from failed to cancelled to hide ui warning.
When users remove attachments from drafts, only the M2M relationship
was being severed, leaving Attachment and Blob records orphaned in the
database. Over time, this leads to unnecessary storage consumption and
data accumulation.
A management command is also provided to clean up existing orphans.
The combobox input uses a CSS technique with a ::after pseudo-element
(containing the input value via `content: attr(data-value)`) overlaid on
the actual input to enable auto-sizing. However, this ::after element
was intercepting mouse clicks instead of letting them pass through to
the underlying input.
When a user clicked to reposition the cursor within the text:
1. The click landed on ::after (not the input directly)
2. This caused the input to lose focus (blur)
3. The wrapper's onClick handler then called focus() on the input
4. focus() placed the cursor at the end of the text by default
Adding `pointer-events: none` to the ::after pseudo-element allows
clicks to pass through to the input, preserving the expected cursor
positioning behavior.
Resolve#533
Orval’s default headers function formats the Orval version
into a string, in the format: ${pkg.name} v${pkg.version}
Each time the Orval version is upgraded, this change
propagates across each header, creating massive diff
noise.
Configured Orval to suppress version info in output headers
while preserving the existing output structure.
This keeps each file exactly the same as they
are today, except without the version string.
Signed-off-by: mv2kprf1 <mv2kprf1@users.noreply.github.com>
On mobile, users expect the left panel to close when they tap any folder,
including the currently active one. This allows them to return to the
main content area without having to use the close button.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Enhanced user experience by adding an autofocus feature to the
message composer, template composer, and signature composer
components, ensuring the cursor is positioned at the end of the input
field upon loading.