Unplanned
Last Updated: 19 Jan 2026 13:29 by Alexander
The parameters "Resizable" and "Reorderable" let you control whether tiles can be resized and reordered. These work when using the mouse, but once you turn on keyboard navigation via setting the parameter "Navigable" to "true", you are able to resize and reorder the tiles using "Ctrl"/"Shift" + "Arrow keys", regardless of the parameter values for "Resizable" and "Reorderable".
Unplanned
Last Updated: 19 Jan 2026 12:11 by Alexander
If you focus an item, you can resize it with "Ctrl+Arrow keys". If you for example press "Ctrl+Arrow up", the items vertical size shrinks. If you do that repeatedly, it becomes less than 0. If you want to increase the size again, you first have to undo all that negativity, before the items grows again. Ideally, the code should only reduce "ColSpan" and "RowSpan" if its current value is greater than 1.
Unplanned
Last Updated: 18 Jan 2026 04:34 by Adam
Created by: Adam
Comments: 1
Category: Filter
Type: Feature Request
5
We have a large number of fields and it will be useful if we have a search box in the field dropdown to filter them - in a similar fashion to how filtering works in the DropDownList component.
Unplanned
Last Updated: 16 Jan 2026 10:48 by Alexander

When the TileLayout keyboard navigation is enabled, users can tab from one tile to another. However, the tab order becomes incorrect after tile reordering. The tab order always matches the DOM element order, but it no longer matches the visual tile order in the UI.

For example:

  1. Reorder tiles 1 and 2.
  2. Click (focus) tile 2, which is now the first one.
  3. Tab. Instead of focusing tile 1 (which is now the second one), you will focus tile 3.

<TelerikTileLayout Columns="3"
                   RowHeight="150px"
                   Resizable="true"
                   Reorderable="true"
                   Navigable="true">
    <TileLayoutItems>
        <TileLayoutItem HeaderText="Tile 1">
            <Content>Regular-sized first tile.</Content>
        </TileLayoutItem>
        <TileLayoutItem HeaderText="Tile 2">
            <Content>You can put components in the tiles too.</Content>
        </TileLayoutItem>
        <TileLayoutItem HeaderText="Tile 3" RowSpan="3">
            <Content>This tile is three rows tall.</Content>
        </TileLayoutItem>
        <TileLayoutItem HeaderText="Tile 4" RowSpan="2" ColSpan="2">
            <Content>This tile is two rows tall and two columns wide</Content>
        </TileLayoutItem>
    </TileLayoutItems>
</TelerikTileLayout>

Unplanned
Last Updated: 16 Jan 2026 06:54 by ADMIN
Created by: CHING CHENG
Comments: 3
Category: Spreadsheet
Type: Bug Report
1

'SLOPE' and 'LINEST' Formulas do not work ?

 

Unplanned
Last Updated: 15 Jan 2026 12:42 by ADMIN
The file info passed in UploadSuccessEventArgs to the event contains HTML entities

e.g. for the file "Golf & Country Club.png" the file info name is "Golf &amp; Country Club"  which leads to an exception.
Unplanned
Last Updated: 15 Jan 2026 07:28 by ADMIN
Created by: Andrew
Comments: 4
Category: Grid
Type: Bug Report
4

Description

When going fast over the Grid rows with the mouse cursor, the rows are highlighted after a delay. The delay is more noticeable on higher resolutions (2560x1440 or higher).

Steps To Reproduce

  1. Hover the first Grid row and move the mouse cursor towards the last row (or vice versa).

Actual Behavior

In the app that targets .NET10 the row hover styles are applied with a delay, whereas in the app that targets .NET8 the hover styles are applied as soon as the mouse enters the boundaries of a row.

Expected Behavior

Similar performance in applying hover-related styles.

Browser

All

Last working version of Telerik UI for Blazor (if regression)

No response

Unplanned
Last Updated: 14 Jan 2026 15:11 by Charles
The component renders items for steps that include an aria-controls attribute pointing to IDs like wizard-step-1, wizard-step-2, etc. However, because the Wizard component only renders the active page's content, the IDs referenced by the inactive steps do not exist in the current document.
Unplanned
Last Updated: 12 Jan 2026 15:09 by Charles
Our "Level Access" accessibility scanning tool revealed that the RadioGroup component uses the aria-checked=true with input[type=radio] which could cause accessibility issues if conflicting.
Unplanned
Last Updated: 12 Jan 2026 13:01 by Stas
Created by: Stas
Comments: 0
Category: Spreadsheet
Type: Bug Report
1
The Spreadsheet component throws a JS error (undefined is not an object (evaluating 't.forEach')) when exporting an Excel file that contains rows without any cells.
Unplanned
Last Updated: 12 Jan 2026 08:58 by ADMIN
Created by: ranga
Comments: 1
Category: Spreadsheet
Type: Feature Request
1

Hi

I am loading a excel with column A1 as shown below. The text is in A1 and is a long text spanning several columns.

In the telerik spreadsheet component, it displays as shown below- inside A1 but not  with the same width as in the spreadsheet - i have to expand the column manually.

Is there a way to display it exactly as it is in the spreadsheet?

 

thanks
ranga raghuram

 

 

 

 

Unplanned
Last Updated: 08 Jan 2026 15:37 by ADMIN

I am resetting the Grid State by calling Grid.SetState(null). This doesn't reset ColumnState<T>.Locked boolean to false and the columns remain locked.

---

ADMIN EDIT

---

A possible workaround for the time being is to additionally loop through the ColumnStates collection of the State and set the Locked property to false for each column.

Example: https://blazorrepl.telerik.com/QTYmkpvb49c6CPxa42

Unplanned
Last Updated: 07 Jan 2026 14:02 by ADMIN
Created by: Isaac
Comments: 3
Category: UI for Blazor
Type: Feature Request
1

Magnifiable Image Component

A Blazor component designed to provide an interactive image magnification experience, similar to popular eCommerce websites.

Features

  • Interactive Magnifier: On mouse hover, a magnifier appears beside the image, following the cursor and displaying a zoomed-in portion of the image. At the same time an overlay appears on the image indicating the zoomed-in portion of the image.
  • Screen Space Awareness: The magnifier dynamically stretches to fill the available space to the right or left of the image, ensuring optimal use of the viewport and consistent margins.
  • Popover Integration: Utilizes Telerik's Popover for the magnifier, ensuring it appears above all other UI elements and avoids clipping or stacking issues.
  • Configurable Magnification: The magnification scale is configurable via the MagnifyScale parameter.
  • Accessibility: The image is wrapped in a button for keyboard accessibility, and all images support alt text.
  • Full-Size View: Clicking the image opens a modal window displaying the image at its actual size.

Sample Code

MagnifiableImage.razor

@inject IJSRuntime JS
@using Microsoft.JSInterop

@* Container *@
<div @ref="_containerRef" class="@($"magnifiable-image-container {Class}")" style="height: @Height;  width: @Width;">
    
    @* Image *@
    <button @onclick="@OnClick" class="magnifiable-image-button">
        <img src="@Image.Src" alt="@Image.Alt" style="height: 100%; width: 100%;"
             @onmousemove="@OnMouseMove" @onmouseenter="@OnMouseEnterAsync" @onmouseleave="@OnMouseLeave"/>
    </button>
    
    @* Magnifier *@
    <TelerikPopover @ref="_popoverRef" AnchorSelector=".magnifiable-image-container" Position="@(_showOnRight ? PopoverPosition.Right : PopoverPosition.Left)" Offset="@MagnifierMargin"
                    Width="@($"{_magnifierWidth}px")" Height="@($"{_magnifierHeight}px")" Class="popover-magnifier" Collision="PopoverCollision.Fit">
        <PopoverContent>
            
            @* Magnified Image *@
            <img src="@Image.Src" alt="@Image.Alt" class="magnified-image"
                 style="@($"width: {_magnifiedImageWidth}px; height: {_magnifiedImageHeight}px; transform: translateX({_magnifiedImageTransformX}px) translateY({_magnifiedImageTransformY}px); left: {_magnifiedImageLeft}px; top: {_magnifiedImageTop}px;")"/>
        
        </PopoverContent>
    </TelerikPopover>
    
    @* Magnifier Overlay *@
    @if (_isMouseOver)
    {
        <div class="magnifier-overlay" 
             style="@($"width: {_magnifierOverlayWidth}px; height: {_magnifierOverlayHeight}px; transform: translateX({_magnifierOverlayTransformX}px) translateY({_magnifierOverlayTransformY}px);  left: {_magnifierOverlayLeft}px; top: {_magnifierOverlayTop}px;")))">
        </div>
    }
    
    @* Actual Image *@
    <TelerikWindow @bind-Visible="@_isClicked" Modal="true" CloseOnOverlayClick="true" Draggable="false" Resizable="false" Class="window-rounded">
        <WindowActions>
            <WindowAction Name="Close"/>
        </WindowActions>
        <WindowContent>
            <img src="@Image.Src" alt="@Image.Alt"/>
        </WindowContent>
    </TelerikWindow>
    
</div>

<style>
    .magnifiable-image-container {
        position: relative;
        display: inline-block;
        cursor: zoom-in;
    }
    
    .magnifiable-image-button {
        background: none;
        border: none;
        padding: 0;
        margin: 0;
        font: inherit;
        color: inherit;
        cursor: inherit !important;
        outline: none;
        box-shadow: none;
        appearance: none;
        -webkit-appearance: none;
        -moz-appearance: none;
        display: block;
        width: 100%;
        height: 100%;
    }
        .magnifiable-image-button:focus-visible {
            outline: none;
            box-shadow: 0 0 0 2px color-mix(in srgb, var(--kendo-color-on-app-surface, #424242) 50%, transparent);
        }
    
    .popover-magnifier {
        overflow: hidden;
        border-radius: 0;
        position: relative;
        top: @(_adjustForTelerikFit ? $"{(_showOnBottom ? "" : "-")}{MagnifierMargin/4}px" : $"{(_showOnBottom ? "" : "-")}{MagnifierMargin}px");
    }
    
    .magnified-image {
        position: absolute;
    }
    
    .magnifier-overlay {
        position: absolute;
        background: color-mix(in srgb, var(--kendo-color-primary, #1274AC) 15%, transparent);
        pointer-events: none;
        z-index: 5;
        box-sizing: border-box;
        display: block;
    }
</style>

@code 
{
    [Parameter] public required ImageInfo Image { get; set; }

    /// <summary>
    /// The height of the image (e.g., "200px", "100%", or "auto"). Default is "auto".
    /// </summary>
    [Parameter]
    public string Height { get; set; } = "auto";

    /// <summary>
    /// The width of the image (e.g., "200px", "100%", or "auto"). Default is "auto".
    /// </summary>
    [Parameter]
    public string Width { get; set; } = "auto";

    /// <summary>
    /// The magnification scale for the magnifier. Default is 3 (3x magnification).
    /// </summary>
    [Parameter] 
    public double MagnifyScale { get; set; } = 3;

    /// <summary>
    /// Applies additional CSS classes to the MagnifiableImage's root element for custom styling and visual modifications.
    /// </summary>
    [Parameter]
    public string Class { get; set; } = string.Empty;

    private const int MagnifierMargin = 24;
    
    // State for magnifier visibility and container reference
    private bool _isMouseOver;
    private bool _isClicked;
    private ElementReference _containerRef;
    private TelerikPopover? _popoverRef;

    // Image and magnified image dimensions
    private double _imageWidth;
    private double _imageHeight;
    private double _magnifiedImageWidth;
    private double _magnifiedImageHeight;
    
    // Magnifier position and size
    private bool _showOnRight = true;
    private bool _showOnBottom = true;
    private bool _adjustForTelerikFit;
    private double _magnifierWidth;
    private double _magnifierHeight;

    // Magnified image offset within the magnifier
    private double _magnifiedImageLeft;
    private double _magnifiedImageTop;
    
    // Mouse position clamping bounds
    private double _minMouseX;
    private double _minMouseY;
    private double _maxMouseX;
    private double _maxMouseY;
    
    // Mouse position and transform for magnified image
    private double _mouseX;
    private double _mouseY;
    private double _magnifiedImageTransformX;
    private double _magnifiedImageTransformY;

    // Magnifier overlay size and transform
    private double _magnifierOverlayWidth;
    private double _magnifierOverlayHeight;
    private double _magnifierOverlayLeft;
    private double _magnifierOverlayTop;
    private double _magnifierOverlayTransformX;
    private double _magnifierOverlayTransformY;

    private void OnClick()
    {
        _isClicked = true;
    }

    private async Task OnMouseEnterAsync()
    {
        _isMouseOver = true;
        _popoverRef?.Show();
        
        // Get layout info about the image container using getElementLayoutInfo from wwwroot/js/magnifiable-image.js
        var containerLayoutInfo = await JS.InvokeAsync<ElementLayoutInfo>("getElementLayoutInfo", _containerRef);
        
        // Store image size
        _imageWidth = containerLayoutInfo.Width;
        _imageHeight = containerLayoutInfo.Height;
        _magnifiedImageWidth = _imageWidth * MagnifyScale;
        _magnifiedImageHeight = _imageHeight * MagnifyScale;
        
        // Determine magnifier position based on available space
        _showOnRight = containerLayoutInfo.DistanceFromViewportRight >= containerLayoutInfo.DistanceFromViewportLeft;
        _adjustForTelerikFit = Math.Abs(containerLayoutInfo.DistanceFromViewportBottom - containerLayoutInfo.DistanceFromViewportTop) < 20;
        _showOnBottom = containerLayoutInfo.DistanceFromViewportBottom >= containerLayoutInfo.DistanceFromViewportTop;
        
        // Calculate magnifier size based on available space
        _magnifierWidth = _showOnRight 
            ? containerLayoutInfo.DistanceFromViewportRight - MagnifierMargin*2
            : containerLayoutInfo.DistanceFromViewportLeft - MagnifierMargin*2;
        _magnifierHeight = containerLayoutInfo.ViewportHeight - MagnifierMargin*2;
        
        // Center the magnified image in the magnifier
        _magnifiedImageLeft = (_magnifierWidth / 2) - (_imageWidth / 2); 
        _magnifiedImageTop = (_magnifierHeight / 2) - (_imageHeight / 2);
        
        // Calculate min and max mouse X/Y to prevent showing empty space in the magnifier
        _minMouseX = Math.Floor((_magnifierWidth / MagnifyScale) / 2);
        _minMouseY = Math.Floor((_magnifierHeight / MagnifyScale) / 2); 
        _maxMouseX = Math.Ceiling(_imageWidth - ((_magnifierWidth / MagnifyScale) / 2));
        _maxMouseY = Math.Ceiling(_imageHeight - ((_magnifierHeight / MagnifyScale) / 2));

        // Calculate magnifier overlay size and position
        _magnifierOverlayWidth = Math.Floor(Math.Clamp(_magnifierWidth / MagnifyScale, 0, _imageWidth)) - 1;
        _magnifierOverlayHeight = Math.Floor(Math.Clamp(_magnifierHeight / MagnifyScale, 0, _imageHeight)) - 1;
        _magnifierOverlayLeft = -((_magnifierOverlayWidth / 2) + 1);
        _magnifierOverlayTop = -((_magnifierOverlayHeight / 2) + 1);
    }

    private void OnMouseLeave()
    {
        _isMouseOver = false;
        _popoverRef?.Hide();
    }

    private void OnMouseMove(MouseEventArgs e)
    {
        // Clamp mouse X/Y to prevent showing empty space in the magnifier
        if (_minMouseX > _maxMouseX) _mouseX = _imageWidth / 2;
        else _mouseX = Math.Clamp(e.OffsetX, _minMouseX, _maxMouseX);
        if (_minMouseY > _maxMouseY) _mouseY = _imageHeight / 2;
        else _mouseY = Math.Clamp(e.OffsetY, _minMouseY, _maxMouseY);
        
        // Calculate the transform for the magnified image
        _magnifiedImageTransformX = -Math.Round((_mouseX * MagnifyScale) - (_imageWidth / 2));
        _magnifiedImageTransformY = -Math.Round((_mouseY * MagnifyScale) - (_imageHeight / 2));

        // Calculate the transform for the magnifier overlay
        _magnifierOverlayTransformX = Math.Round(_mouseX);
        _magnifierOverlayTransformY = Math.Round(_mouseY);
        
        _popoverRef?.Refresh();
    }

    private record ElementLayoutInfo(
        double Width, 
        double Height, 
        double ViewportHeight,
        double DistanceFromViewportLeft, // distance from viewport's left edge to element's left edge
        double DistanceFromViewportRight, // distance from element's right edge to viewport's right edge
        double DistanceFromViewportTop, // distance from viewport's top edge to element's top edge
        double DistanceFromViewportBottom); // distance from element's bottom edge to viewport's bottom edge
}

magnifiable-image.js

// Returns width, height, and the space to the left and right of the element relative to the viewport
window.getElementLayoutInfo = (element) => {
    if (!element) return null;
    const elementRect = element.getBoundingClientRect();
    return {
        width: elementRect.width,
        height: elementRect.height,
        viewportHeight: window.innerHeight,
        distanceFromViewportLeft: elementRect.left, // distance from viewport's left edge to element's left edge
        distanceFromViewportRight: window.innerWidth - elementRect.right, // distance from element's right edge to viewport's right edge
        distanceFromViewportTop: elementRect.top, // distance from viewport's top edge to element's top edge
        distanceFromViewportBottom: window.innerHeight - elementRect.bottom // distance from element's bottom edge to viewport's bottom edge
    };
};

Note

Only tested in Blazor WebAssembly. The component may see performance issues in Blazor Server.

Unplanned
Last Updated: 07 Jan 2026 13:37 by Charles
Created by: Charles
Comments: 0
Category: TextBox
Type: Bug Report
0

Description

An input with type="password" should not have a default role. See:
w3c/html-aria#422
https://w3c.github.io/html-aria/#dfn-no-corresponding-role

Steps To Reproduce

Inspect the rendering of the password input in this demo: https://demos.telerik.com/blazor-ui/textbox/password

Actual Behavior

The element renders a role="textbox" attribute.

Expected Behavior

The element does not render a role="textbox" attribute.

Browser

All

Last working version of Telerik UI for Blazor (if regression)

No response

Unplanned
Last Updated: 06 Jan 2026 09:35 by ranga
Created by: ranga
Comments: 0
Category: AIPrompt
Type: Feature Request
1
Add a parameter that allows configuring the AIPrompt to display both the prompt and the output in a single view.
Unplanned
Last Updated: 05 Jan 2026 15:00 by Peter

The Set button should not be enabled when you change the month from the button in the popup, until the user selects a date too. 

===

TELERIK EDIT:

If the user clicks Set without selecting a date, the component will assume DateTime.MinValue. You can set the current DateTime or clear the Value by using the DateTimePicker OnChange or ValueChanged event:

<TelerikDateTimePicker @bind-Value="@DateTimePickerValue"
                       OnChange="@DateTimePickerValueChanged"
                       Width="300px">
</TelerikDateTimePicker>

@code {
    private DateTime? DateTimePickerValue { get; set; }

    private void DateTimePickerValueChanged(object currentValue)
    {
        if (DateTimePickerValue.HasValue && DateTimePickerValue.Value == DateTime.MinValue)
        {
            // Set current DateTime
            DateTimePickerValue = DateTime.Now;

            // OR

            // Clear the value
            //DateTimePickerValue = default;
        }
    }
}

Unplanned
Last Updated: 05 Jan 2026 13:13 by ADMIN

When I have a DatePicker and it's DateOnly value is default, the control displays 1/1/2001 instead of either nothing, a placeholder, or the correct value.

The image above shows the DatePicker value and the current value in the model underneath.

 

Please advise.

Unplanned
Last Updated: 31 Dec 2025 10:54 by ADMIN
Created by: The Telerik
Comments: 0
Category: UI for Blazor
Type: Feature Request
0
Add Hourly Frequecy  option in In-bulit  Recurrence Frequecy Tabs
Unplanned
Last Updated: 30 Dec 2025 15:13 by Hélix

We use QueryableExtensions.ToDataSourceResultmethod to load some data in our component. And at some moment we need to cancel data loading. But ToDataSourceResult method doesn’t support CancellationToken. So we are forced to use a workaround and just ignore the task's result. But task is still executing and causing the performance hit

It would be great if you implemented support for this feature!

Unplanned
Last Updated: 24 Dec 2025 08:59 by Sabina

When the FileSelect/Upload Multiple parameter is set to false, the component correctly restricts selection to a single file, but the UI labels still use plural wording (e.g., “Select files”, “Drag and drop files”). This creates a mismatch between the behavior and the displayed text.

The labels should dynamically switch to singular or plural based on the Multiple parameter value to ensure clarity and consistency.

1 2 3 4 5 6