Skip to content

Update dependency Radzen.Blazor to 12.1.8 - #256

Open
renovate[bot] wants to merge 1 commit into
upstreamfrom
renovate/radzen.blazor-12.x
Open

renovate[bot] wants to merge 1 commit into
upstreamfrom
renovate/radzen.blazor-12.x

Conversation

@renovate

@renovate renovate Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

This PR contains the following updates:

Package Change Age Confidence
Radzen.Blazor (source) 12.0.7 → 12.1.8 age confidence

Release Notes

radzenhq/radzen-blazor (Radzen.Blazor)

v12.1.8: 12.1.8

12.1.8 - 2026-10-28

Improvements
  • DataGrid can be given an accessible name through the new AriaLabel and AriaLabelledBy parameters, rendered on the element with the grid or treegrid role. The role element rendered no name and aria-label or aria-labelledby splatted onto the component landed on the role-less wrapper where assistive technology ignores them, so screen readers announced an unnamed grid and axe reported "ARIA grid must have an accessible name". When the parameters are not set a splatted aria-label or aria-labelledby is used instead and those two attributes no longer reach the wrapper, because ARIA 1.2 prohibits naming a generic element (#​2780).
Fixes
  • AppearanceToggle has an accessible name and reports aria-pressed for the dark theme. The button rendered no name, because RadzenToggleButton wrote its AriaLabel parameter after the splatted attributes and removed an aria-label placed on the component; the toggle button now falls back to the splatted aria-label and omits the attribute when neither is given, and RadzenAppearanceToggle gains an AriaLabel parameter that defaults to the localized "Dark theme" text. The pressed state used to mean the light theme was active, so screen readers announced "Dark theme, pressed" in the light theme; aria-pressed, the active state and the toggled style now follow the dark theme while the icons and click behavior are unchanged. When the light and dark names resolve to the same theme the button is rendered disabled instead of flipping a pressed state that changed nothing (#​2781).
  • DataGrid applies KeyProperty regardless of where it appears in the markup. The key getter used to match selected, expanded and child-data items by key was created only when Data changed, so a KeyProperty placed after Data was ignored on the first render and a Value item that was a different instance with the same key was not highlighted; a later change of KeyProperty was ignored as well. The getter is now created after the parameters are set and recreated when KeyProperty changes.
  • DataGrid keeps the selection when Value is bound before Data and both change in the same render. Reset, which runs whenever Data changes, emptied the Value backing field without touching the selected items, so Blazor assigned Value first, the Data setter wiped it and no row was highlighted until the next render while Value reported no selection. The field is now cleared only together with the selected items when Reset is asked to reset row state.
  • DataGrid merges a class added through RowRender with the row class instead of replacing it. The consumer class was splatted after the computed row class and removed rz-data-row and the rz-state-highlight selection class, so styled rows lost their selection highlight; the classes are now combined, also when a RowClick handler adds the row click to the same attributes.

v12.1.7: 12.1.7

12.1.7 - 2026-10-26

Improvements
  • Spreadsheet gains ShowColumnHeaders and ShowRowHeaders parameters, both true by default. Setting one to false hides the column letters or the row numbers together with the space they take, their resize handles and whole-row or whole-column selection, which suits presentation grids where the axis labels live in frozen rows and columns instead. The setting applies to every sheet of the workbook and can be toggled at runtime, and frozen pane splitters stay in place when the headers are hidden (#​2728). Thanks to @​panoskentros!
  • Spreadsheet formula engine supports the LOOKUP and INDIRECT functions, which returned #NAME? before. LOOKUP covers the vector and array forms with Excel's case-insensitive comparison, type skipping and vector extension rules. INDIRECT accepts A1 text with or without a sheet name, a defined name and R1C1 text with offsets relative to the formula cell, returns #REF! and #VALUE! as Excel does, and is volatile so dependent formulas recalculate on every change. Both are shown in the Spreadsheet formulas demo (#​2777).
  • Spreadsheet keeps sheet-scoped, built-in and hidden defined names. Worksheet has a DefinedNames dictionary for names scoped to that sheet, a formula resolves a sheet-scoped name before a workbook name of the same name, renaming a sheet rewrites references in both, and xlsx files round-trip Print_Area, Print_Titles, _FilterDatabase and the hidden attribute instead of dropping them (#​2777).
  • Chart stacked column and bar series gain a StackGroup parameter. Stacked series that share a group form one stack and different groups render side by side in the same category, each with its own value axis fit, so revenue and expense breakdowns can sit next to each other and next to a plain column series (#​2776).
Fixes
  • Spreadsheet tables, filters, conditional formats, data validation, images and charts now follow row and column insertion and deletion. The worksheet shifted cells, sizes, merged cells and formulas but left every other structure at its old address, so inserting a row inside a table kept the header, totals and banding styles on the old rows while the values moved, and the row appeared to be inserted several rows below the cursor. Table ranges and columns, sheet and per-column filters with the columns in their criteria, conditional format and validation ranges, validation formulas, drawing anchors and chart series references on any sheet now move or resize with the edit, and deleting rows or columns snapshots every table so undo restores a trimmed or removed table exactly (#​2779).
  • Spreadsheet VLOOKUP, HLOOKUP, MATCH and XMATCH treat a blank lookup value and blank cells as Excel does, so a blank lookup no longer matches the first blank cell of the lookup column and shows an empty string where Excel shows 0. The approximate modes no longer fail on a column that mixes numbers and text (#​2777).
  • Spreadsheet XLOOKUP and XMATCH match Excel for blank cells, empty strings and values of different types. A blank lookup value and an empty string are no longer treated as equal, and the approximate and binary search modes order values as Excel does, so the next-larger mode returns the smallest larger value instead of the first larger one it meets.
  • Spreadsheet saves xlsx files that Excel opens. Shared formulas that reference a sheet by name are written as plain formulas, external workbook links and the names and formulas that use them survive a load and save, a list validation whose source is a range is read as a reference and written unquoted, and a list of several items is written in the form Excel accepts (#​2777).
  • Tooltip content taller than the viewport scrolls inside the tooltip instead of growing the document. When no side of the target had room, the popup was clamped to the viewport edge and overflowed the page, which added a document scrollbar, covered the target and raised a spurious MouseLeave that reopened the tooltip in a loop. The fallback now picks the side with the most room, caps the popup at the viewport edge with max-height and inner scrolling, and keeps a max-height from TooltipOptions.Style (#​2548).
  • Chart column series and stacked column series no longer overlap when used in the same chart, and the same holds for bar and stacked bar series. Each family laid itself out from its own siblings only, so a stacked series centered its stack on the category tick regardless of the plain columns next to it. One band per category is now shared by all column-type or bar-type series for rendering, tooltips, data labels and hit-testing (#​2776).
  • AutoComplete no longer flashes stale suggestions after the input drops below MinLength. Backspacing kept the previous matches on screen until the filter delay elapsed, and the next keystroke reopened the popup with the same stale items. The search text is cleared when the popup closes and the input listener keeps the popup closed while the value is shorter than MinLength (#​2775).

v12.1.6: 12.1.6

12.1.6 - 2026-10-22

Improvements
  • Localization ships a built-in Portuguese translation. The new RadzenStrings.pt.resx satellite covers every resource key and uses the neutral pt culture, so it applies to pt, pt-BR and pt-PT apps without any setup. The wording follows common Brazilian usage in business software. Portuguese is also available in the localization demos (#​2774).
Fixes
  • AIPrompt no longer loses typed characters in interactive server mode. The textarea was a manually controlled input, so every keystroke re-rendered it with a value that was already stale by the time it reached the browser. It now uses two-way binding, and Enter without Shift is blocked on the client by a static keydown listener instead of a per-render handler, so the newline is prevented from the very first render. Shift+Enter still inserts a newline (#​2772). Thanks to @​felippenvieira!
  • Menu no longer swallows Tab and Shift+Tab on the menubar, so keyboard focus leaves the menu in one keystroke (WCAG 2.1.2). The render-time preventDefault flag was applied from the previous render, which blocked the first Tab after the menubar took focus and every Tab after a handled key. A static document listener now prevents the default per key in the browser for arrows, Home, End, Enter, Space, Escape and typeahead characters only (#​2773).
  • DataGrid in FilterMode.SimpleWithMenu no longer shows the filter value through the operator button on a narrow column. The compact layout cleared the button with text-indent, which only offsets the first character, so a scrolled value was painted under the translucent button. The input now uses inline padding, which works in every theme and in RTL (#​2771).
  • DropDown popups no longer overflow the viewport after a visual viewport resize. The resize handler sized the items list to the whole space between the trigger and the viewport edge, ignoring the filter input, the multiselect header and the header and footer templates, so a popup flipped above the trigger went past the top of the screen and never shrank back once grown. The handler now accounts for the popup chrome and restores the original size when it fits again.
  • Upload with Auto="false" no longer shows a broken image for non-image files. An object URL was created for every selected file and rendered as an img, so a PDF or text file displayed the browser's broken-image glyph. The preview is now rendered only for image/* files, and other files show a document icon in the same slot so rows stay aligned.

v12.1.5: 12.1.5

12.1.5 - 2026-10-19

Improvements
  • Validators get a PopupPosition parameter that shows a popup validator above, below, to the left or to the right of its field. Bottom stays the default, so existing validators look the same. The popup stays next to its field when the layout changes, and a validator positioned while its field is hidden, for example on submit with the field in an inactive tab or a collapsed panel, is placed once the field is shown instead of off-screen (#​640). Thanks to @​panoskentros!
Fixes
  • HtmlEditor table commands keep working after a row or column is deleted. Deleting the active row or column left the caret outside any cell, so the next table command failed. The caret now moves to a remaining cell, which is highlighted. Context menu commands restore the clicked cell's selection and close the menu even when the command fails, and right-clicking a cell no longer scrolls the editor. An inserted row gets the table's full column count when cells are merged with colspan, and the internal rz-html-editor-cell-selected class is no longer saved in Value. Thanks to @​Radium001!
  • DataGrid renders a column bound to a nullable enum with FilterMode.Simple in trimmed Blazor WebAssembly apps instead of throwing ArgumentException (NotAMemberOfType). The "No value" entry of the filter dropdown was an anonymous type whose properties the trimmer removed. It is now a DropDownItem<object>, like the enum entries.

v12.1.4: 12.1.4

12.1.4 - 2026-10-16

Improvements
  • Scheduler gets an AllowDateSelection parameter that turns the date title into a button opening a date picker, so users can jump straight to a date. Month and year views offer months instead of days, and changing only the year just browses (#​626). Thanks to @​panoskentros!
  • ContextMenu gets a CloseOnScroll option in ContextMenuOptions that closes the menu when the container of the clicked element is scrolled, also after the menu was reopened while open, for example by right-clicking one row after another. Thanks to @​Radium001!
Fixes
  • DataGrid resets correctly when the filters of a column with a FilterTemplate bound to FilterValue and SecondFilterValue are cleared, instead of showing an empty grid or throwing "A second operation was started on this context instance". ClearFilters reset the operator to the type default (Equals for dates) while the filter value fell back to the bound parameter, and changing both bound values started overlapping LoadData calls. The declared operator is now restored, cleared template values no longer fall back to the parameter, and both values changing together reload the grid once (#​2768).
  • DataGrid keeps the SimpleWithMenu filter operator menu of a grid nested in another grid's row template open when clicked. The click bubbled to every ancestor grid's listener, so the popup was toggled once per nesting level and closed right after opening (#​2767).
  • DropDown and DropDownDataGrid follow the page's tab order when tabbing out of an open filterable dropdown instead of moving to the next element in the markup, and no longer land in the component's own closing popup. Thanks to @​jdurrantab!

v12.1.3: 12.1.3

12.1.3 - 2026-10-15

Improvements
  • Row gets a Columns parameter that sets how many columns fit on each line, so a layout with a fixed number of columns per line no longer needs Size on every RadzenColumn. ColumnsXS, ColumnsSM, ColumnsMD, ColumnsLG, ColumnsXL and ColumnsXX change it per breakpoint. Counts that do not divide 12, such as 5 or 7, work as well and Gap is respected. A column with its own Size for the current breakpoint keeps it (#​2760).
Fixes
  • Spreadsheet reads xlsx files with absolute relationship targets and cells without a reference, such as those written by SpreadCheetah, instead of showing empty sheets. A target like /xl/worksheets/sheet1.xml was prefixed with xl/ so the sheet was not found, and a <c> or <row> without the optional r attribute was dropped. Relationship targets are now resolved against their source part, for sheets as well as drawings, images, charts and tables, and a cell or row without a reference takes the position after the previous one (#​2757).
  • RadialGauge and ArcGauge no longer render C# source as text inside every scale tick. The tick label condition in the scale was missing its @, so if (!string.IsNullOrEmpty(tick.Value)) was emitted as a text node in each tick, which screen readers read once per tick, and an empty tick label was rendered even with ShowTickLabels="false".
  • Carousel no longer jumps back to the first item after every navigation in right-to-left pages. RTL scroll containers report a negative scrollLeft, so the index computed from the scroll position was negative, got clamped to 0 and reset the selection right after Navigate or a pager click. The scroll handler now uses the absolute scroll offset.
  • ODataServiceResult survives trimming when an app deserializes it through its own generic code, such as PersistentComponentState.TryTakeFromJson<T> or JsonSerializer.Deserialize<T> behind an unannotated helper. A trimmed Blazor WebAssembly app kept the type but lost its parameterless constructor and the Count and Value setters, so System.Text.Json threw NotSupportedException. Radzen.Blazor now embeds a trimmer descriptor that keeps these members whenever an app keeps the type.

v12.1.2: 12.1.2

12.1.2 - 2026-10-12

Improvements
  • AIChat Tool call icons have more contrast, tool call titles use the theme font and the Approve button is flat.

v12.1.1: 12.1.1

12.1.1 - 2026-10-12

Improvements
  • AIChat QueueMessages accepts messages sent while an answer streams instead of ignoring them: the message shows right away marked as queued, is sent when the answer completes, and Stop returns its text to the box. A service can take such a message mid-response through IAIChatService.TryQueueMessageAsync or an IChatMessageQueue its chat client exposes via GetService; a user-role ChatResponseUpdate with the message id tells the chat the model read it, which moves the message under the answer so far and starts a new assistant message. The send button stays next to the stop button while streaming.
  • AIChat HeaderTemplate, InputHeaderTemplate and InputFooterTemplate slots for a conversation switcher, status line, model picker or action buttons around the conversation and the input.
  • AIChat @bind-Input reads and sets the text in the box, FocusAsync focuses it.
  • AIChat Text and tool calls of an answer keep the order the model produced them; ChatToolCall.TextPosition and ChatMessage.GetParts() expose it for custom templates.
  • AIChat ChatMessage.Kind with Status, Progress and Error entries rendered as a centered note, a spinner line and an alert; AddMessage(ChatMessage), RemoveMessage and Refresh manage them. RenderMessage renders a message the default way from inside MessageTemplate.
  • AIChat ShowAvatars, SendButtonText, SendButtonIcon, StopButtonText and StopButtonIcon.
  • AIChat AttachmentAdding receives every picked file and can cancel or replace it, for example with a scaled down image; MaxTotalAttachmentSize limits the attachments of a message as a whole.
  • AIChat UsageTemplate and MessageFooterTemplate render usage and extra content per message; ChatMessage.AdditionalProperties collects the AdditionalProperties of the streamed updates, for example credits or changed files.
  • AIChat The conversation store saves messages a service takes mid-response in the order the chat showed them, under the same ids.
Fixes
  • AIChat The streaming placeholder rendered as a finished message until the first token arrived.
  • AIChat In right-to-left layouts the whole send button was mirrored instead of only its icon.

v12.1.0: 12.1.0

12.1.0 - 2026-10-12

Improvements
  • AIChat is built on Microsoft.Extensions.AI. AIChatService talks to the model through IChatClient: register the client of any provider (OpenAI, Azure OpenAI, Ollama and others) with AddChatClient and the chat picks it up, or keep the built-in OpenAICompatibleChatClient, which streams from any OpenAI-compatible chat completions endpoint and now parses tool calls. IAIChatService.GetChatClient() exposes the configured pipeline, with the Model, MaxTokens and Temperature defaults applied, to your own code.
  • AIChat calls your C# code. Tools takes the AIFunctions created with AIFunctionFactory; calls run automatically and render as cards with the arguments, status and result, ToolCallTemplate renders a result with Radzen components (generative UI), ApprovalRequiredAIFunction makes the chat ask the user before a tool runs (ApproveToolCall, RejectToolCall), and ToolCallCompleted, ShowToolCalls and AllowMultipleToolCalls control the rest. Multiple approvals in one answer are batched and the answer continues once all of them are decided.
  • AIChat shows the reasoning of models that expose it as a collapsible block above the answer (ShowReasoning), lists the sources of an answer under it (ChatMessage.Citations, ShowCitations, CitationTemplate) from the citation annotations of providers such as OpenAI web search or Perplexity and from tools that return ChatCitation, and normalizes the citation markers of gpt-oss models to plain [n].
  • AIChat takes file attachments. AllowAttachments renders a paperclip (AcceptedAttachmentTypes, MaxAttachmentSize, Error), AddAttachment adds files from code and pending attachments show as thumbnails under the input. Images go to multimodal models as image content, text files (txt, csv, md, json, xml and similar) as text so any model can read them, PDF files as file parts for providers that support them. A stop button replaces the send button while an answer streams; Stop() keeps the text received so far. ShowUsage shows the tokens the provider reports for each answer.
  • AIChat conversations persist through IConversationStore. InMemoryConversationStore keeps them for the lifetime of the application and AddConversationStore<TStore>() plugs in a database store; ConversationSessionSerializer round-trips a session with its model history, tool calls, results and attachments as JSON. The service saves after every answer, UserId tells whose conversation it is and GetOrCreateSessionAsync, GetSessionsAsync, ClearSessionAsync and DeleteSessionAsync manage the saved ones; a chat with a SessionId restores its conversation on initialization.
  • AIPrompt is a new component: a prompt box for one-shot AI tasks with suggested prompts, a streaming markdown output panel with copy and regenerate, and commands such as Shorter, Formal or Translate that refine the output. Context applies every prompt to a piece of text, for example the content or selection of an editor; Value, Output, Generated and OutputTemplate wire it into the page.
  • InlineAIPrompt is a new component that adds an AI assistant to any text field. A button opens an AIPrompt in a popup, the bound Value is the context and the output replaces it, is appended to it or is discarded. With TargetId set to the id of the input or textarea, the text selected in it becomes the context and only the selection is replaced. ShowButton="false" with OpenAsync(element) opens the popup from your own trigger and Applied reports the new value.
  • SmartPasteButton is a new component that fills a form from the text in the clipboard: it describes the properties of TModel to the model (Description and Display attributes guide it), asks for a JSON object and assigns the converted values to Data, including dates, numbers, enums and Guids, notifying the EditContext. Fields and Instructions narrow the request and Paste(text) works without the clipboard.
  • Embeddings are available through IAIChatService.GetEmbeddingGenerator(): OpenAICompatibleEmbeddingGenerator implements IEmbeddingGenerator<string, Embedding<float>> over any OpenAI-compatible embeddings endpoint (EmbeddingsEndpoint, EmbeddingsProxy, EmbeddingsModel in AIChatServiceOptions), or register the generator of your provider.
  • AIChatService refuses an API key in the browser. Everything in a WebAssembly client is visible to its users, so configuring ApiKey there, through the options, the component parameter or a per-message override, throws with a message that says to keep the key on the server and set Proxy to a server endpoint that adds it; Blazor Server applications keep working as before.
  • AIChat, AIPrompt and Chat render markdown while the answer streams instead of after it ends.
  • Markdown and the MarkdownEditor design view style lists, code, blockquotes, horizontal rules and inline HTML tags.
  • Demos get an AI section in the navigation and a redesigned AI overview page, with new demos for tool calling, generative UI, human in the loop, voice input, file attachments, citations and conversation persistence in AIChat, AI assistants for the DataGrid (natural language filtering, an AI column, semantic search with embeddings, AI highlight), the Scheduler, the Chart, the HtmlEditor and the MarkdownEditor.

v12.0.8: 12.0.8

12.0.8 - 2026-10-10

Improvements
  • TileLayout gets an AllowOverlap parameter. When it is false a move or resize that would place a tile over another visible tile is blocked: the tile first tries the free axis alone so a diagonal drag slides along the neighbor, otherwise it stays at its last valid cell. Tiles that already overlap when the drag starts are ignored so they can still be pulled apart. The default stays true.
Fixes
  • DataGrid keeps expanded rows consistent across Reload when KeyProperty is set. The row toggler icon resolved the expanded state by key while the detail row and CollapseItem resolved it by object reference, so after Reload returned fresh objects with the same keys the icon stayed expanded, the detail disappeared and clicking the icon could not remove the stale entry. The row template now uses IsRowExpanded, CollapseItem removes the stored key that matches by KeyProperty, Single expand mode compares with ItemEquals and the hierarchy view re-keys the child data to the fresh parent object so expanded children survive a reload (#​2752).
  • AutoComplete keeps Value when it is declared before Data in the markup. Blazor assigns parameters in markup order and the Data setter resets the stored value whenever Data changes, so a Value declared before Data was lost on the first render and again every time Data was replaced. The Value parameter is now captured before the first await and re-applied after the base call when the Data setter has reset it (#​2754).
  • DataGrid filtering a collection column translates to SQL again when Data is an EF Core IQueryable. The null guard added around Any/All and IsEmpty/IsNotEmpty collection filters protects in-memory data with null collections, but EF Core cannot translate a null comparison of a projected collection such as c.Orders.Select(o => o.Number).ToList() and failed the whole query with "could not be translated". The guard is now emitted only for in-memory sources, so database providers get a plain Any/All as in 11.1.6 (#​2755).

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/radzen.blazor-12.x branch 4 times, most recently from cd6cc81 to 52f00c4 Compare October 8, 2026 13:31
@renovate
renovate Bot force-pushed the renovate/radzen.blazor-12.x branch 6 times, most recently from 222cf9a to 10fa28b Compare October 16, 2026 13:54
@renovate
renovate Bot force-pushed the renovate/radzen.blazor-12.x branch 2 times, most recently from dbb978e to 4032e48 Compare October 22, 2026 12:05
@renovate renovate Bot changed the title Update dependency Radzen.Blazor to v12 Update dependency Radzen.Blazor to 12.1.6 Oct 22, 2026
@renovate
renovate Bot force-pushed the renovate/radzen.blazor-12.x branch 2 times, most recently from 489904b to ee3b2e3 Compare October 26, 2026 18:38
@renovate renovate Bot changed the title Update dependency Radzen.Blazor to 12.1.6 Update dependency Radzen.Blazor to 12.1.7 Oct 26, 2026
@renovate
renovate Bot force-pushed the renovate/radzen.blazor-12.x branch from ee3b2e3 to 096d582 Compare October 28, 2026 08:48
@renovate renovate Bot changed the title Update dependency Radzen.Blazor to 12.1.7 Update dependency Radzen.Blazor to 12.1.8 Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants