github vaadin/flow 25.1.0-alpha6
Vaadin Flow 25.1.0-alpha6

pre-release11 hours ago

Changes since 25.1.0-alpha5

All changes

New features

  • Auto-load Aura theme CSS when no AppShellConfigurator exists
    Commit · Pull request

    Projects without a custom AppShellConfigurator now automatically get the Aura theme CSS injected, providing sensible default styling without requiring explicit configuration.

  • Add allowInert attribute to @DomEvent annotation
    Commit · Pull request · Issue

    This adds a declarative way to allow DOM events for inert components when using the @DomEvent annotation. Previously, only the programmatic API DomListenerRegistration.allowInert() was available. The new allowInert attribute defaults to false and when set to true, the listener will receive events even when the component is behind a modal component's modality curtain (i.e., when the component is inert). Add AllowInertDomEventView and AllowInertDomEventIT to verify that DOM events with allowInert=true are received when a component is behind a modal dialog, while regular DOM events are blocked.

  • Add local ListSignal for per-entry reactive lists
    Commit · Pull request

    This PR introduces ListSignal, a new local signal type that holds a list of ValueSignal entries, enabling per-entry reactivity. New classes: - ListSignal - A reactive list where each entry is a ValueSignal - Structural mutations (add, remove, clear) trigger list-level dependents - Entry-level mutations only trigger that entry's dependents - Methods: insertFirst(), insertLast(), insertAt(), remove(), clear() - AbstractLocalSignal - Base class extracted from ValueSignal containing: - Lock management (lock(), unlock(), tryLock(), assertLockHeld()) - Value storage and access (getSignalValue(), setSignalValue()) - Listener subscription (subscribe(), peek(), value()) Refactored: - ValueSignal now extends AbstractLocalSignal, reducing duplication

  • Add two-way computed signals via WritableSignal.map(getter, set…
    Commit · Pull request

    This enables mapping a single field from a record or bean to a separate writable signal that supports two-way bindings. The mapped signal propagates changes back to the parent signal.

  • Remove FLOW_FULLSTACK_SIGNALS feature flag and enable signals by default
    Commit · Pull request

    We are now at the point where we would want to change internal representations of values to signals. We are unable to do that as long as the feature flag is needed. The API is still not stable but as we are in alpha, we can still change it. If we decide to return the feature flag before 25.1, this will mean some extra work to do that.

  • Add upload rejection API with optional messages
    Commit · Pull request

    Add ability to reject file uploads during processing with optional rejection messages. The rejection status is tracked per-file and communicated back to the client via appropriate HTTP status codes: - 200 OK: all files accepted - 422 Unprocessable Entity: all files rejected (with JSON body) - 207 Multi-Status: mixed results (with JSON body) Key changes: - Add reject() and reject(String) methods to UploadEvent - Extend UploadResult record with acceptedFiles/rejectedFiles tracking - Add UploadResult.Builder for incremental result construction - Move JSON response handling into UploadHandler.responseHandled() - Add rejected() callback to FileUploadCallback and InMemoryUploadCallback

  • Disable client statistics
    Commit · Pull request

    Disable the client side statistics collection and sending when it is disabled for the server. part of #23357

  • Add signal binding CTORs and methods for rest of the html components
    Commit · Pull request · Issue

Fixes

  • Detect cyclic references in TreeData.setParent()
    Commit · Pull request · Issue

    Previously, TreeData.setParent() only checked for direct self-parenting (item.equals(parent)) but did not detect transitive cycles where a descendant becomes an ancestor. This could corrupt the tree structure, for example when drag-and-drop in TreeGrid moved a parent node under one of its descendants. Added isAncestorOf() helper method that walks up the ancestor chain to detect if the item being moved is an ancestor of the proposed new parent. If so, setParent() now throws IllegalArgumentException with a clear error message. The cycle check has O(h) complexity where h is the tree height, which is acceptable for typical tree operations.

  • Log access warning in dev mode
    Commit · Pull request · Issue

    Log layout denied by access rule as a warning when in development mode.

  • SetState(name, null) should send JSON null to client
    Commit · Pull request · Issue

    JacksonUtils.writeValue() now explicitly handles null values by returning a proper NullNode, matching the behavior of similar methods like JacksonSerializer.toJson() and JacksonCodec.encodeWithoutTypeInfo(). This ensures ReactAdapterComponent.setState(name, null) sends an actual JSON null to the client instead of the string "null".

  • Prevent Vite reload from canceling logout redirect
    Commit · Pull request · Issue

    When a user logs out and the session is invalidated, the server closes WebSocket connections with close code 1008 (VIOLATED_POLICY). Vite detects this disconnection and starts polling for reconnection, then reloads the page - canceling any server-initiated redirect. The fix uses a Promise-based synchronization between Vite's HMR events: 1. On vite:ws:connect, we register a close listener and store a Promise on the WebSocket that resolves with the close code when triggered. 2. On vite:ws:disconnect, we await this Promise to get the close code. Since Vite's notifyListeners awaits our async handler, this creates a synchronization point before Vite checks its willUnload flag. 3. When close code is 1008, we dispatch a beforeunload event to set Vite's internal willUnload flag, preventing the reload. This approach works because Vite's close handler does not await the Promise returned by onMessage/handleMessage, so our async disconnect handler can complete (setting willUnload) before Vite's willUnload check runs.

Don't miss a new flow release

NewReleases is sending notifications on new releases.