Changes since 25.0.4
Breaking changes
- Set proper value of isFromClient when using Focusable focus() and blur() (#23233)
Commit · Pull request - Prevent lumo utility classes to be imported automatically (#23074)
Commit · Pull request · Issue
Fixes
-
Handle translation requests when session is expired (#23239)
Commit · Pull request · IssueImplement SessionExpiredHandler in TranslationFileRequestHandler to serve translations even when no active session exists. This allows i18n requests to work correctly with stateless authentication.
-
Respect configured nodeFolder in DevModeInitializer (#23293)
Commit · Pull request · IssueFlow ignored the configured nodeFolder and always attempted to resolve and download its own Node.js distribution. When nodeFolder is explicitly set, Flow should rely on the Node installation from that directory and avoid triggering the Node download logic. This change ensures that Node resolution correctly honors the nodeFolder configuration in DevModeInitializer.
-
Fall back to InternalServerError when error view rendering fails (#23177)
Commit · Pull request · IssuePrevents navigation corruption when error view's parent layout throws an exception during afterNavigation by catching the exception and rendering InternalServerError as fallback.
-
Prevent StackOverflowError on cyclic CSS @import statements (#23240)
Commit · Pull request · IssueAdd cycle detection to CssBundler.inlineImports() to handle circular CSS imports gracefully. When a cycle is detected, the import is skipped since the file content has already been inlined, and a warning is logged.
-
Unpack production bundle eagerly (#23222)
Commit · Pull request · IssueUnpack the production bunlde eagerly before any generate tasks. This way generation can override bundle files if necessary.
-
Binder to update value on validation success (#23172)
Commit · Pull request · IssueAfter failed validation for null value write null to bean when validatio passes.
-
Avoid removing out-of-viewport items from cache (#23141)
Commit · Pull request · IssueSimplifies the implementation and restores the behavior to what it was in Vaadin 24, where items were removed from the key mapper but remained in the hierarchy mapper. Note, as part of the fix, a new objects() method was added to KeyMapper to allow HierarchicalDataCommunicator to get all items that have keys and clean up those that are no longer in the viewport. Since KeyMapper always contains fewer items than the Cache, this API helps reduce the number of iterations needed during cleanup.