<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet type="text/xsl" href="https://community.devexpress.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dx="https://www.devexpress.com/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">
    <channel>
        <title>ASP.NET Team Blog</title>
        <link>https://community.devexpress.com/blogs/aspnet/default.aspx</link>
        <description>JavaScript, HTML 5, ASP.NET, DevExpress, ASP.NET MVC &amp;amp; WebForms, and News - Mehul Harry&amp;#39;s DevExpress blog</description>
        <dc:language>en</dc:language>
        <generator>CommunityServer 2007.1 SP1 (Debug Build: 30415.43)</generator>
        <xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
            <title>DevExpress Blazor AI Chat — AI Assistants for Report Viewer and Grid</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2025/03/24/devexpress-blazor-ai-chat-ai-assistants-for-report-viewer-and-grid.aspx</link>
            <pubDate>Mon, 24 Mar 2025 10:35:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388227</guid>
            <dc:creator>Dmitry Tokmachev (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;In this post, I will detail how you can&amp;nbsp;integrate our Blazor &lt;code&gt;DxAIChat&lt;/code&gt; component in your project and provide Copilot-like AI assistants to your end-users.&lt;/p&gt;
&lt;p&gt;First, a quick word about this implementation...by incorporating the DevExpress AI-powered Chat component and associated natural language processing services, your DevExpress-powered Blazor app can efficiently filter/analyze/summarize data, generate document insights, ask contextual questions, and obtain answers related to reports, tables, and more. &lt;/p&gt;
&lt;img src="https://community.devexpress.com:443/blogs/aspnet/25.1/grid-report-assistants/blazor-grid-ai-assistant.png" alt="DevExpress Blazor Grid – AI Assistant" style="width:1578px;height:792px;" /&gt;
&lt;h2 id="explore-the-github-example"&gt;Review our&amp;nbsp;GitHub Example&lt;/h2&gt;
&lt;p&gt;To help illustrate what&amp;#39;s possible, we published a working example on GitHub. This example&amp;nbsp;features the DevExpress Blazor Report Viewer and Grid control and includes a detailed README with implementation guidelines and practical usage scenarios:&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://github.com/DevExpress-Examples/blazor-grid-and-report-viewer-integrate-ai-assistant/tree/24.2.6%2B"&gt;Blazor Grid and Report Viewer — Incorporate an AI Assistant (Azure OpenAI) in your next DevExpress-powered Blazor app&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="expanding-ai-integration-to-winforms-and-wpf"&gt;Expanding AI Integration to WinForms and WPF&lt;/h2&gt;
&lt;p&gt;A similar AI assistant implementation can also be applied to WinForms and WPF-powered applications (apps&amp;nbsp;that support data export to Excel and/or PDF). If you are looking to introduce a Copilot-like assistant into your next great WinForms/WPF app, please refer to our Blazor &lt;code&gt;DxAIChat&lt;/code&gt; component implementation guide in the following example: &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://github.com/DevExpress-Examples/devexpress-ai-chat-samples"&gt;Blazor AI Chat - How to add the DevExpress Blazor AI Chat component to your next Blazor, MAUI, WPF, and WinForms application&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.devexpress.com/subscriptions/i/24.2/24-2-blazor-new-ai-chat-multiple-platforms.png" alt="DevExpress AI Chat Controls" /&gt;&lt;/p&gt;
&lt;h2&gt;Share Your Feedback&lt;/h2&gt;
&lt;p&gt;We appreciate your continued support and enthusiasm for DevExpress tools. If you have any questions or would like to discuss AI-related integration needs, please submit a support ticket via the &lt;a target="_blank" href="https://devexpress.com/ask"&gt;DevExpress Support Center&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388227" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Grid/default.aspx">Grid</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Reporting/default.aspx">Reporting</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/AI/default.aspx">AI</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Assistant/default.aspx">Assistant</category>
        </item>
        <item>
            <title>Blazor — June 2025 Roadmap (v25.1)</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2025/02/20/blazor-june-2025-roadmap-v25-1.aspx</link>
            <pubDate>Thu, 20 Feb 2025 18:00:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388222</guid>
            <dc:creator>Alex Chuev (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;This post outlines key features/enhancements planned for our next major update (v25.1) in June 2025.&lt;/p&gt;
&lt;p&gt;As always, if you have questions or suggestions, feel free to share your thoughts in the survey at the end of this post or submit a ticket via the &lt;a href="https://supportcenter.devexpress.com/ticket/list"&gt;DevExpress Support Center&lt;/a&gt;.&lt;/p&gt;
&lt;div class="Note"&gt;
    &lt;p&gt;The information contained within this blog post details our current/projected development plans. Please note that this information is being shared for INFORMATIONAL PURPOSES ONLY and does not represent a binding commitment on the part of Developer Express Inc. This roadmap and the features/products listed within it are subject to change. You should not rely on or use this information to help make a purchase decision about Developer Express Inc products.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="live-roadmap-updates"&gt;Live Roadmap Updates&lt;/h2&gt;
&lt;p&gt;This roadmap will be regularly updated to reflect development progress. As we get closer to the release, we expect to add more items and modify the status of planned features. Look for the following labels next to every feature:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt; — Feature is scheduled but not yet in development.&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt; — Under active development.&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p class="tags"&gt;&lt;span class="completed"&gt;Coming in EAP v25.1&lt;/span&gt; — Will be available in our first v25.1 early access preview.&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p class="tags"&gt;&lt;span class="completed"&gt;Coming in v25.1&lt;/span&gt; — Will be included in the final v25.1 release.&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p class="tags"&gt;&lt;span class="completed"&gt;Released in v25.1&lt;/span&gt; — Fully implemented and available.&lt;/p&gt;&lt;/li&gt;
    
&lt;/ul&gt;
&lt;h2 id="legacy-data-grid-combobox-tag-box-and-list-box-removal"&gt;Legacy Data Grid, ComboBox, Tag Box, and List Box Removal&lt;/h2&gt;
&lt;p&gt;Over the past three years, we have transitioned our Blazor components from a custom-built Blazor-specific data engine to the cross-platform &lt;code&gt;DevExpress.Data&lt;/code&gt; library. The ComboBox, Tag Box, and List Box components only saw internal changes and maintained the same API, while our Data Grid (&lt;code&gt;DxDataGrid&lt;/code&gt;) has been replaced with the new DevExpress Blazor Grid (&lt;code&gt;DxGrid&lt;/code&gt;). New components are more robust, utilize modern development practices, and benefit from the same powerful data engine used by our Data Grids for WinForms, Web Forms, and WPF.&lt;/p&gt;
&lt;p&gt;To streamline our libraries and accelerate future development, we will remove the following legacy components in our v25.1 update:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;code&gt;DxDataGrid&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;DxComboBoxLegacy&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;DxTagBoxLegacy&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;DxListBoxLegacy&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To avoid disruptions, please check your projects for components from the &lt;code&gt;DevExpress.Blazor.Legacy&lt;/code&gt; namespace and migrate to new DevExpress alternatives.&lt;/p&gt;
&lt;p&gt;Helpful resources:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.devexpress.com/Blazor/403162/components/data-grid/migrate-from-data-grid-to-grid"&gt;Migrate from Data Grid to Grid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://supportcenter.devexpress.com/ticket/details/t1251358/data-grid-and-and-legacy-list-editors-were-moved-to-the-legacy-namespace"&gt;Legacy component deprecation details&lt;/a&gt;&lt;/p&gt;
&lt;div data-survey-id="34a70562-ec1e-437f-817d-81afc17cf873" data-survey-auth-required="false"&gt;&lt;/div&gt;
&lt;h2 id="focus-on-performance-and-stability"&gt;Focus on Performance and Stability&lt;/h2&gt;
&lt;p&gt;While expanding our Blazor component suite remains a top priority, we are also investing heavily in polishing and performance optimizations this year. We will share additional info as we approach our mid-year release — but our ultimate goal is to ensure smooth, responsive user experiences across all DevExpress Blazor components.&lt;/p&gt;
&lt;h2&gt;.NET Upgrade Assistant Integration for Project Upgrades&lt;/h2&gt;
&lt;p&gt;We expect to ship a new plugin (VSIX) for Microsoft&amp;#39;s .NET Upgrade Assistant. We expect this plugin to ultimately replace the DevExpress Project Converter for .NET 8+ projects.&amp;nbsp;Benefits&amp;nbsp;will include the following:&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;Unlike our Project Converter, the new plugin will have access to NuGet, Roslyn, MEF, and other IDE services. With the .NET Upgrade Assistant&amp;#39;s auto–fix capabilities, we can automatically detect and safely resolve breaking changes in DevExpress code. This includes but is not limited to obsolete code replacements (such as, Font &amp;gt; DXFont, DxPivotGrid &amp;gt; DxPivotTable, etc.).&lt;/li&gt;
   &lt;li&gt;We will deliver the new plugin for minor and major DevExpress versions. The plugin will include the most recent&amp;nbsp;Directory.Packages.props file updates (with DevExpress–compatible 3rd party dependencies for CPM). You will be able to update all project dependencies and resolve security vulnerabilities with a single click.​&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our Unified Component Installer will automatically install the new plug–in. The plugin will also be able for download from the Visual Studio Marketplace, nuget.org, and nuget.devexpress.com.&lt;br /&gt;&lt;/p&gt;
&lt;h2 id="fluent-theme-official-release"&gt;Fluent Theme — Official Release&lt;/h2&gt;
&lt;p&gt;The DevExpress Blazor Fluent theme, introduced as a CTP in v24.2, will be production-ready in v25.1. Apart from polishing and visual enhancements/fixes for all components, we expect to introduce the following new features.&lt;/p&gt;
&lt;h3 id="built-in-and-custom-accent-colors"&gt;Built-in and Custom Accent Colors&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our Fluent theme will ship with a set of built-in accent color options.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/Fluent%20-%20Built-in%20Color%20Presets@2x.png" alt="color presets" /&gt;
&lt;p&gt;Developers will also be able to configure custom accent colors to match user preferences or brand colors.&lt;/p&gt;
&lt;h3 id="different-icons-for-every-size-mode"&gt;Different Icons for Every Size Mode&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Instead of scaling icons, our Blazor components will use unique icon sets for every size mode - Small, Medium, and Large. This will ensure consistent and pixel-perfect appearance for your apps regardless of the selected sizing option.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/Fluent%20-%20Different%20icons%20for%20size%20modes.png" alt="icon sizes" /&gt;
&lt;h3 id="updated-fluent-ui-kit"&gt;Updated Fluent UI Kit&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We&amp;#39;ve recently updated our Fluent UI Kit on Figma. In v25.1, it will be expanded to include all key DevExpress Blazor components.&lt;/p&gt;
&lt;div data-survey-id="ede119c3-3f93-41a4-8173-fcc6f0025c42" data-survey-auth-required="false"&gt;&lt;/div&gt;
&lt;h2 id="blazor-package-size-optimization"&gt;Blazor Package Size Optimization&lt;/h2&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We plan to optimize the size of our Blazor libraries to increase initial loading speed and reduce the download size of your Blazor apps. Apart from removing legacy components, we plan to extract our themes/CSS into two separate packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fluent themes&lt;/li&gt;
&lt;li&gt;Extra themes (Blazing Berry, Blazing Dark, Office White, Purple)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will also consider fully or partially removing default Bootstrap CSS that ships with our Blazor themes, as it can be downloaded separately.&lt;/p&gt;
&lt;div data-survey-id="197be7ed-08ec-4154-827a-13083378a52b" data-survey-auth-required="false"&gt;&lt;/div&gt;
&lt;h2 id="app-showcase-demo"&gt;App Showcase Demo&amp;nbsp;&lt;strong style="font-family:&amp;#39;Segoe UI&amp;#39;, &amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:14px;"&gt;&lt;a href="https://supportcenter.devexpress.com/ticket/details/t1278687/app-showcase-demo-blazor-roadmap-for-v25-1" target="_blank"&gt;(Discussion)&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our upcoming App Showcase will demonstrate common UI/UX patterns seen in modern business applications, built entirely with DevExpress Blazor components. Each demo module will prioritize clean, reusable code, making it easy to adapt.&amp;nbsp;&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/app-showcase.png" alt="app showcase" /&gt;
&lt;h2 id="new-project-template-gallery"&gt;New Project Template Gallery&lt;/h2&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We will expand the DevExpress Blazor Templates collection available in the &lt;a href="https://docs.devexpress.com/Blazor/405308/get-started/template-kit"&gt;DevExpress Cross-IDE Project Template Kit&lt;/a&gt;. The new Template Kit will also be installed  alongside Blazor components and will become the default starting point for new DevExpress-based Blazor apps.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/devexpress-template-kit-blazor.png" alt="app showcase" /&gt;
&lt;h2 id="pivot-table-official-release"&gt;Blazor Pivot Table — Official Release&amp;nbsp;&lt;strong style="font-family:&amp;#39;Segoe UI&amp;#39;, &amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:14px;"&gt;&lt;a href="https://supportcenter.devexpress.com/ticket/details/t1278693/feature-discussion-blazor-pivot-table-official-release" target="_blank"&gt;(Discussion)&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In v25.1, we plan to officially release our Pivot Table component. The production-ready version will be more robust and will include new features that will allow end-users to manipulate data directly in the UI.&lt;/p&gt;
&lt;h3 id="field-reordering"&gt;Field Reordering&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Field reordering will allow you to drag a field to any location within the same area or between available areas (Columns, Rows, or Data). This will allow end-users to modify the way they analyze data on the fly. New APIs will allow you to configure which Pivot Tables fields can be dragged.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/Field%20Reorder.png" alt="field reordering" /&gt;
&lt;h3 id="filter-data"&gt;Filter Data&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We plan to introduce a built-in filtering UI to the Blazor Pivot Table. End-users will be able to filter column and row values using filter menu buttons in field headers. The filter menu will be similar to that of our Blazor&amp;nbsp;&lt;a href="https://demos.devexpress.com/blazor/Grid/Filtering/ColumnFilterMenu"&gt;Grid&lt;/a&gt;. Clicking the filter menu button will display a list of field values, allowing you to select which&amp;nbsp;to display. For DateTime fields, the filter menu will display a hierarchical list.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/PivotGrid%20-%20Filter%20DropDown.png" alt="pivot table filter menu" /&gt;
&lt;p&gt;Developers will also be able to filter data in code using new API members: &lt;code&gt;SetFilterCriteria&lt;/code&gt;, &lt;code&gt;GetFilterCriteria&lt;/code&gt;, and &lt;code&gt;FilterCriteriaChanged&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="ribbon-official-release"&gt;Blazor Ribbon — Official Release&lt;/h2&gt;
&lt;p&gt;Our Blazor Ribbon, introduced as a CTP in v24.2, will be officially released. We will polish its look and feel and refine adaptivity and overflow menu behavior to ensure seamless interactions for applications that require a large set of commands.&lt;/p&gt;
&lt;p&gt;The production-ready version will allow developers to replicate the single-line version of Ribbon interfaces used in modern MS Office apps (also known as Simplified Ribbon).&lt;/p&gt;
&lt;h2 id="ai-chat"&gt;Blazor AI Chat&lt;/h2&gt;
&lt;h3 id="prompt-suggestions"&gt;Prompt Suggestions&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;With v25.1,&amp;nbsp;you will be able to display prompt suggestions via bubbles next to the input field when using the DevExpress Blazor AI Chat control (to guide chat users to possible actions).&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/AI%20Chat%20-%20Prompt%20Suggestions.png" alt="ai chat prompt suggestions" /&gt;
&lt;h3 id="file-attachments"&gt;File Attachments&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You will also be able to attach files when sending messages.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/AI%20Chat%20-%20File%20Attachments%20x2.png" alt="ai chat attach file" /&gt;
&lt;h3 id="api-to-reuse-an-existing-openai-assistant"&gt;API to Reuse an Existing OpenAI Assistant&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our Blazor AI Chat control will be able to connect to an already initialized &lt;a href="https://learn.microsoft.com/en-us/dotnet/api/overview/azure/ai.openai.assistants-readme"&gt;OpenAI Assistant&lt;/a&gt;. This will allow you to&amp;nbsp;use a single OpenAI Assistant instance to initiate multiple tasks within&amp;nbsp;a single app.&lt;/p&gt;
&lt;h2 id="grid-treelist"&gt;Blazor Grid &amp;amp; TreeList&amp;nbsp;&lt;strong style="font-family:&amp;#39;Segoe UI&amp;#39;, &amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:14px;"&gt;&lt;a href="https://supportcenter.devexpress.com/ticket/details/t1278695/feature-discussion-grid-treelist-blazor-roadmap-for-v25-1" target="_blank"&gt;(Discussion)&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="pdf-export"&gt;PDF Export&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our Blazor Grid and TreeList will ship with PDF export APIs. This new functionality will allow you to generate PDF documents while preserving key data presentation elements, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Column order, captions, and alignment&lt;/li&gt;
&lt;li&gt;Value format and alignment&lt;/li&gt;
&lt;li&gt;Group rows, group summaries, and group totals&lt;/li&gt;
&lt;li&gt;Total summaries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We do not plan to support full WYSIWYG export, meaning that some UI elements (such as the group panel, search panel, toolbar, and pager, as well as custom CSS styles)&amp;nbsp;will be excluded.&lt;/p&gt;
&lt;h2 id="treelist"&gt;Blazor TreeList&lt;/h2&gt;
&lt;h3 id="search"&gt;Search&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We plan to add a built-in search box to our Blazor TreeList. You will be able to introduce search functionality with minimal configuration.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/TreeList%20-%20Search%20Box.png" alt="treelist search" /&gt;
&lt;h2 id="data-editors"&gt;Blazor Data Editors&lt;/h2&gt;
&lt;h3 id="dateedit-month-year-picker-view"&gt;Blazor Date Edit — Month/Year Picker View&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our Blazor Date Edit will allow you to limit its selection to months or years. This can be useful for forms and fields that don&amp;#39;t require a specific date.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/DateEdit%20-%20Month%20and%20Year%20picker%20view.png" alt="month year picker" /&gt;
&lt;h3 id="listbox-select-all"&gt;Blazor List Box — Select All&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The DevExpress Blazor List Box will be able to display a &lt;code&gt;Select All&lt;/code&gt; check box above its items, allowing faster selection of multiple items.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/Listbox%20-%20Select%20All.png" alt="list box select all" /&gt;
&lt;h3 id="date-edit-time-edit-custom-increment-step"&gt;Blazor Date Edit &amp;amp; Time Edit — Custom Increment Step&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Time rollers in Blazor Date Edit and Time Edit components will support custom increment steps. This will allow you to display fewer values (e.g., an hour in 15 minute intervals) when precise selection isn&amp;#39;t necessary.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/v25.1/Roller%20-%20Increment%20Step.png" alt="roller intervals" /&gt;
&lt;h2 id="map"&gt;Blazor Map&lt;/h2&gt;
&lt;h3 id="azure-maps-support"&gt;Azure Maps Support&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;p class="tags"&gt;&lt;span class="completed"&gt;Released in v24.2.5&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As you know, Microsoft recently discontinued availability of &lt;a href="https://www.microsoft.com/en-us/maps/bing-maps/discontinued-services"&gt;Bing Maps for Enterprise and its associated APIs&lt;/a&gt;. &lt;a href="https://azure.microsoft.com/en-us/products/azure-maps/"&gt;Azure Maps&lt;/a&gt; will be Microsoft&amp;#39;s single unified enterprise mapping platform moving forward. Our Blazor Map UI component will support Azure Maps as a new map provider.&lt;/p&gt;
&lt;h2 id="pdf-viewer"&gt;Blazor PDF Viewer&lt;/h2&gt;
&lt;h3 id="set-download-name"&gt;Set Download Name&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;p class="tags"&gt;&lt;span class="completed"&gt;Released in v24.2.5&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our new &lt;code&gt;DocumentName&lt;/code&gt; property will allow you to set a custom name for documents downloaded using the PDF Viewer’s toolbar command or via a &lt;code&gt;DownloadAsync&lt;/code&gt; method call.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;DxPdfViewer DocumentName=&amp;quot;Sales Report&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="rich-text-editor"&gt;Blazor Rich Text Editor&lt;/h2&gt;
&lt;h3 id="zoom"&gt;Zoom&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="completed"&gt;Coming in EAP v25.1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our Blazor Rich Text Editor&amp;#39;s built-in Ribbon will include a UI to specify zoom level for the current document.&lt;/p&gt;
&lt;img class="small" src="https://community.devexpress.com/blogs/aspnet/v25.1/rich-zoom.png" alt="rich text editor zoom" /&gt;
&lt;p&gt;It will also be possible to control the current zoom level using the Rich Text Editor&amp;#39;s API.&lt;/p&gt;
&lt;h2 id="scheduler"&gt;Blazor Scheduler&amp;nbsp;&lt;strong style="font-family:&amp;#39;Segoe UI&amp;#39;, &amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:14px;"&gt;&lt;a href="https://supportcenter.devexpress.com/ticket/details/t1278694/feature-discussion-scheduler-blazor-roadmap-for-v25-1" target="_blank"&gt;(Discussion)&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="toolbar-customization"&gt;Toolbar Customization&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In our upcoming release, we expect to support built-in toolbar customization. Our Scheduler will allow you to define custom toolbar items and customize the following built-in items:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Today button&lt;/li&gt;
&lt;li&gt;Next and Previous buttons&lt;/li&gt;
&lt;li&gt;Date navigator&lt;/li&gt;
&lt;li&gt;Resource navigator&lt;/li&gt;
&lt;li&gt;Scheduler View selector&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Customization options will include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Position and alignment of toolbar items.&lt;/li&gt;
&lt;li&gt;Enabled, Visible, Tooltip, and Render Style properties.&lt;/li&gt;
&lt;/ul&gt;&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;DxScheduler ...&amp;gt; 
    &amp;lt;ToolbarItems&amp;gt; 
        &amp;lt;DxSchedulerTodayToolbarItem /&amp;gt; 
        &amp;lt;DxSchedulerPreviousToolbarItem /&amp;gt; 
        &amp;lt;DxSchedulerNextToolbarItem /&amp;gt; 
        &amp;lt;DxToolbarItem Text=&amp;quot;Group by Resource&amp;quot; Click=&amp;quot;OnGroupByResourceClick&amp;quot; /&amp;gt; 
        &amp;lt;DxSchedulerResourceNavigatorToolbarItem /&amp;gt; 
    &amp;lt;/ToolbarItems&amp;gt; 
    ...
&amp;lt;DxScheduler&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="resizing-and-dragging-for-appointment-form"&gt;Resizing and Dragging for Appointment Form&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;End-users will be able to drag and resize our Blazor Scheduler&amp;#39;s &lt;a href="https://docs.devexpress.com/Blazor/404564/components/scheduler/customization/appointment-forms-and-tooltips#default-appointment-form"&gt;Appointment Edit Form&lt;/a&gt;, making it easier to view the rest of the calendar without discarding changes.&lt;/p&gt;
&lt;h3 id="appointment-form-customization"&gt;Appointment Form Customization&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our next update will introduce the following CSS classes:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;code&gt;AppointmentTooltipCssClass&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;AppointmentCompactEditFormCssClass&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;AppointmentEditFormCssClass&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These classes will allow you to customize appointment popup styles, including default values for width and height.&lt;/p&gt;
&lt;h3 id="popup-performance-enhancements"&gt;Appointment Popup Performance Enhancements&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="development"&gt;In Development&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We plan to optimize the performance of our Scheduler&amp;#39;s dropdowns, forms, and tooltips (making them more responsive).&lt;/p&gt;
&lt;h3 id="ui-ux-enhancements"&gt;UI/UX Enhancements&lt;/h3&gt;
&lt;p class="tags"&gt;&lt;span class="not-started"&gt;Planned&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We will introduce UI/UX enhancements designed to improve usability and overall appearance.&amp;nbsp;&lt;/p&gt;
&lt;h2 id="reporting"&gt;Blazor Reporting&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Learn more:&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a id="menur1m2v" href="https://community.devexpress.com/blogs/reporting/archive/2025/02/18/devexpress-reports-amp-bi-dashboard-june-2025-roadmap-v25-1.aspx" rel="noreferrer noopener" target="_blank" title="https://community.devexpress.com/blogs/reporting/archive/2025/02/18/devexpress-reports-amp-bi-dashboard-june-2025-roadmap-v25-1.aspx"&gt;DevExpress Reports &amp;amp; BI Dashboard — June 2025 Roadmap (v25.1)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Your Feedback Matters&lt;/h2&gt;
&lt;div data-survey-id="12b501a5-6d3a-418f-8c34-7feee55344bb" data-survey-auth-required="false"&gt;&lt;/div&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388222" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Featured/default.aspx">Featured</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Roadmap/default.aspx">Roadmap</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Survey/default.aspx">Survey</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v25.1/default.aspx">v25.1</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/2025/default.aspx">2025</category>
        </item>
        <item>
            <title>ASP.NET Bootstrap Controls – Bootstrap XSS Vulnerability Addressed, Support for Bootstrap v5.3.3 and Dark Mode  </title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/10/04/asp.net-bootstrap-controls-bootstrap-xss-vulnerability-addressed.aspx</link>
            <pubDate>Fri, 04 Oct 2024 07:30:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388202</guid>
            <dc:creator>Margarita Loseva (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;In this post, I&amp;#39;ll detail the upgrade of DevExpress&amp;nbsp;&lt;a href="https://www.devexpress.com/products/net/controls/asp/bootstrap-webforms.xml" target="_blank"&gt;Bootstrap controls&lt;/a&gt; to Bootstrap v5.3.3, enhanced security-related updates to DevExpress Bootstrap project templates, and support for color modes. &lt;/p&gt;
    
&lt;h2 id="project-templates"&gt;New Bootstrap Version in Project Templates: XSS Vulnerability Addressed&lt;/h2&gt; 

&lt;p&gt;DevExpress Bootstrap Controls are built atop&amp;nbsp;the Bootstrap framework and depend on static Bootstrap resources. Over the years,&amp;nbsp;DevExpress UI controls have supported&amp;nbsp;Bootstrap v3 – v5, and in the past,&amp;nbsp;DevExpress Bootstrap project templates have used Bootstrap v4.x. &lt;/p&gt;

&lt;p&gt;With v22.2 (and through v24.2), DevExpress project templates use Bootstrap v5 by default (including the most recent version of Bootstrap – v5.3.3). This upgrade is not merely cosmetic in nature. It addresses a critical security vulnerability in Bootstrap v4.0 - v4.6.2 (see&amp;nbsp;&lt;a href="https://github.com/advisories/GHSA-vc8w-jr9v-vj7f" target="_blank"&gt;Bootstrap Cross-Site Scripting (XSS) vulnerability&lt;/a&gt;). Though DevExpress UI controls do not directly use Bootstrap scripts, inadvertent use of JavaScript Bootstrap in other parts of a project could expose an application&amp;nbsp;to this vulnerability. Said simply, since the vulnerability was addressed in Bootstrap v5.0, our templates now use the most recent version of&amp;nbsp;Bootstrap.&lt;/p&gt;

&lt;h2 id="upgrade-existing-project"&gt;Upgrade Your Existing Project to v5&lt;/h2&gt; 


&lt;p&gt;Because of the XSS vulnerability in earlier versions of Bootstrap, we highly&amp;nbsp;recommend that you upgrade your existing Bootstrap project to v5 (to mitigate potential attack vectors and enhance the overall security posture of your application). To upgrade, you should:&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Update your Bootstrap files. Navigate to the &lt;a href="https://getbootstrap.com/" target="_blank"&gt;Bootstrap website&lt;/a&gt; and download the latest version. Replace old Bootstrap CSS and JS files in your project with new files. For additional information on&amp;nbsp;Bootstrap v5, please refer to  &lt;a href="https://getbootstrap.com/docs/5.0/migration/" target="_blank"&gt;Migrating to v5&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Set the Bootstrap mode setting to &lt;i&gt;Bootstrap5&lt;/i&gt; in your project&amp;#39;s &lt;b&gt;Web.Config&lt;/b&gt; file:
    &lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;configuration&amp;gt;
    ... 
    &amp;lt;devExpress&amp;gt;
            &amp;lt;bootstrap mode=&amp;quot;Bootstrap5&amp;quot; /&amp;gt;
    &amp;lt;/devExpress&amp;gt; 
    ... 
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="dark-mode-support"&gt;Dark Mode Support&lt;/h2&gt; 
    
&lt;p&gt;Among the most exciting additions in newer versions of Bootstrap is built-in support for &lt;a href="https://getbootstrap.com/docs/5.3/customize/color-modes/" target="_blank"&gt;color modes&lt;/a&gt;. This feature allows developers to create applications that adapt to user preferences -&amp;nbsp;enhancing accessibility and the overall user experience. Since we updated Bootstrap resources to v5.3.3, our DevExpress Bootstrap controls now support color modes. For example, when you apply a Bootstrap-based theme, you can easily switch to &lt;a href="https://getbootstrap.com/docs/5.3/customize/color-modes/#dark-mode" target="_blank"&gt;dark mode&lt;/a&gt;. To incorporate this capability, add the &lt;i&gt;data-bs-theme&lt;/i&gt; attribute to the &lt;i&gt;&amp;lt;html&amp;gt;&lt;/i&gt; element.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;html lang=&amp;quot;en&amp;quot; data-bs-theme=&amp;quot;dark&amp;quot;&amp;gt;
    &amp;lt;head&amp;gt;
	   ... 
    &amp;lt;/head&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;As you can see in the image below, DevExpress UI controls fully integrate Bootstrap&amp;nbsp;styling, ensuring that your application&amp;nbsp;maintains a consistent look and feel.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Bootstrap-controls-vulnerablitity-accessed/dark-mode.png" alt="Darrk Mode" style="width:780px;" /&gt;


&lt;h2 id="what-about-blazor-components"&gt;What about Blazor components?&lt;/h2&gt; 

&lt;p&gt;The most recent versions of DevExpress Blazor UI&amp;nbsp;components (v24.1 and higher) do not rely on Bootstrap. However, they can use colors and other variables from Bootstrap themes. If you use Bootstrap in your Blazor projects, make certain to use Bootstrap v5.0 or higher. DevExpress Blazor components support Bootstrap v5.0 (v21.1) and Bootstrap v5.3 (v23.2+).&lt;/p&gt;
    
 
    
&lt;h2 id="have-questions"&gt;Have Questions?&lt;/h2&gt;
    &lt;p&gt;If you still have questions regarding the Bootstrap XSS vulnerability or its impact on DevExpress UI components, please submit a support ticket via the DevExpress&amp;nbsp;&lt;a href="https://supportcenter.devexpress.com/ticket/list" target="_blank"&gt;Support Center&lt;/a&gt;. We will be happy to follow up.&lt;/p&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388202" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Bootstrap/default.aspx">Bootstrap</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v24.2/default.aspx">v24.2</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/dark+mode/default.aspx">dark mode</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Bootstrap+version/default.aspx">Bootstrap version</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Bootstrap5/default.aspx">Bootstrap5</category>
        </item>
        <item>
            <title>How to Use the DevExpress Blazor Drawer Component in Static SSR Mode</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/10/02/blazor-drawer-in-static-mode.aspx</link>
            <pubDate>Wed, 02 Oct 2024 10:00:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388200</guid>
            <dc:creator>Svetlana Nikulina (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;Microsoft&amp;#39;s .NET 8 UI framework introduced static server-side render mode (static SSR) - where components are rendered on the server and returned to the client without any interactivity. The DevExpress Blazor &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxDrawer"&gt;Drawer&lt;/a&gt; component requires interactive render mode to dynamically change its &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxDrawer.IsOpen"&gt;IsOpen&lt;/a&gt; state.&lt;/p&gt;

&lt;p&gt;In this blog I&amp;#39;ll review two strategies to dynamically display/hide the DevExpress Blazor Drawer component in static SSR render mode:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="#Use-a-Query-Parameter"&gt;Add query params to control drawer visibility.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#Specify-CSS-Rules"&gt;Specify CSS rules to control drawer visibility.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For this example, I&amp;#39;m using a Blazor Web App created with a Microsoft Blazor project template. In this app, I registered appropriate DevExpress resources (review the following documentation topic for instructions: &lt;a href="https://docs.devexpress.com/Blazor/401057/get-started"&gt;Get Started With DevExpress Components for Blazor&lt;/a&gt;)&amp;nbsp;and replaced content in the &lt;em&gt;MainLayout.razor&lt;/em&gt; page with the following code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MainLayout.razor&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;style&amp;gt;
    .dxbl-drawer &amp;gt; .dxbl-drawer-panel &amp;gt; .dxbl-drawer-body {
        padding: 0;
    }
&amp;lt;/style&amp;gt;

&amp;lt;DxDrawer PanelWidth=&amp;quot;250px&amp;quot; IsOpen=&amp;quot;@true&amp;quot;&amp;gt;
    &amp;lt;BodyTemplate&amp;gt;
        &amp;lt;div class=&amp;quot;sidebar&amp;quot;&amp;gt;
            &amp;lt;NavMenu /&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/BodyTemplate&amp;gt;
    &amp;lt;TargetContent&amp;gt;
        &amp;lt;div class=&amp;quot;top-row px-4&amp;quot;&amp;gt;
            Here will be a toggle element.
            &amp;lt;a href=&amp;quot;https://learn.microsoft.com/aspnet/core/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;About&amp;lt;/a&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;article class=&amp;quot;content px-4&amp;quot;&amp;gt;
            @Body
        &amp;lt;/article&amp;gt;
    &amp;lt;/TargetContent&amp;gt;
&amp;lt;/DxDrawer&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This markup creates a permanently visible drawer. Users can navigate between pages with it, but they are not yet able to modify visibility.&lt;/p&gt;
&lt;h2&gt;The First Strategy: Add Query Params to Control Drawer Visibility&lt;/h2&gt;
&lt;p&gt;Query params are key-value pairs that go after the &lt;code&gt;?&lt;/code&gt; character in a page URL. These parameters can set values for component properties.&lt;/p&gt;
&lt;p&gt;To use a query parameter and change the drawer&amp;#39;s &lt;code&gt;IsOpen&lt;/code&gt; property value, you must:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt; Use the &lt;a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.supplyparameterfromqueryattribute?view=aspnetcore-8.0"&gt;[SupplyParameterFromQuery]&lt;/a&gt; attribute to specify that the drawer&amp;#39;s &lt;code&gt;IsOpen&lt;/code&gt; parameter originates from the query string.&lt;/li&gt;&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;DxDrawer IsOpen=&amp;quot;@IsOpen&amp;quot;&amp;gt;
...
@code {
    [SupplyParameterFromQuery]
    public bool IsOpen { get; set; }
}    
&lt;/code&gt;&lt;/pre&gt;&lt;li&gt; Add an element to control drawer visibility. Wrap it in a&amp;nbsp;&lt;code&gt;NavLink&lt;/code&gt; component that navigates to the current page but toggles the &lt;code&gt;IsOpen&lt;/code&gt; parameter.&lt;/li&gt;&lt;pre&gt;&lt;code class="language-html"&gt;@inject NavigationManager NavigationManager
&amp;lt;style&amp;gt;
    .drawer-toggler {
        position: absolute;
        appearance: none;
        cursor: pointer;
        width: 2rem;
        height: 2rem;
        top: 0.75rem;
        left: 0.75rem;
        border: 1px solid rgba(50, 50, 50, 0.1);
        background: url(&amp;quot;data:image/svg+xml,%3csvg xmlns=&amp;#39;http://www.w3.org/2000/svg&amp;#39; viewBox=&amp;#39;0 0 30 30&amp;#39;%3e%3cpath stroke=&amp;#39;rgba%2850, 50, 50, 0.55%29&amp;#39; stroke-linecap=&amp;#39;round&amp;#39; stroke-miterlimit=&amp;#39;10&amp;#39; stroke-width=&amp;#39;2&amp;#39; d=&amp;#39;M4 7h22M4 15h22M4 23h22&amp;#39;/%3e%3c/svg%3e&amp;quot;) no-repeat center/1.75rem rgba(50, 50, 50, 0.1);
    }
&amp;lt;/style&amp;gt;

...
@* Here will be a toggle element. *@
&amp;lt;NavLink href=&amp;quot;@(new Uri(NavigationManager.Uri).LocalPath + &amp;quot;?IsOpen=&amp;quot; + (!IsOpen).ToString())&amp;quot;&amp;gt;
    &amp;lt;input type=&amp;quot;checkbox&amp;quot; title=&amp;quot;Navigation menu&amp;quot; class=&amp;quot;drawer-toggler&amp;quot;/&amp;gt;
&amp;lt;/NavLink&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With this, users can click the toggle button to display/hide the drawer. However, when a user navigates to a different page, the drawer will disappear. To address this limitation, add the `IsOpen` query parameter to navigation links as follows.&lt;/p&gt;
    
&lt;li&gt;Add the &lt;code&gt;IsOpen&lt;/code&gt; parameter in the &lt;code&gt;NavMenu&lt;/code&gt; component.&lt;/li&gt;
    
&lt;p&gt;&lt;strong&gt;MainLayout.razor&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;NavMenu IsOpen=&amp;quot;@IsOpen&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;li&gt;Replace the code in the &lt;em&gt;NavMenu.razor&lt;/em&gt;&amp;nbsp;file with the following code.&lt;/li&gt;
    
&lt;p&gt;&lt;strong&gt;NavMenu.razor&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;div class=&amp;quot;top-row ps-3 navbar navbar-dark&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;container-fluid&amp;quot;&amp;gt;
        &amp;lt;a class=&amp;quot;navbar-brand&amp;quot; href=&amp;quot;&amp;quot;&amp;gt;BlazorApp&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;nav class=&amp;quot;flex-column&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;nav-item px-3&amp;quot;&amp;gt;
        &amp;lt;NavLink class=&amp;quot;nav-link&amp;quot; href=&amp;quot;@GetUrlWithParameter(&amp;quot;&amp;quot;)&amp;quot; Match=&amp;quot;NavLinkMatch.All&amp;quot;&amp;gt;
            &amp;lt;span class=&amp;quot;bi bi-house-door-fill-nav-menu&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Home
        &amp;lt;/NavLink&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class=&amp;quot;nav-item px-3&amp;quot;&amp;gt;
        &amp;lt;NavLink class=&amp;quot;nav-link&amp;quot; href=&amp;quot;@GetUrlWithParameter(&amp;quot;weather&amp;quot;)&amp;quot;&amp;gt;
            &amp;lt;span class=&amp;quot;bi bi-list-nested-nav-menu&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Weather
        &amp;lt;/NavLink&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/nav&amp;gt;

@code {
    [Parameter] public Boolean IsOpen { get; set; }

    string GetUrlWithParameter(string url) {
        return url + &amp;quot;?IsOpen=&amp;quot; + IsOpen.ToString();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/ol&gt;

&lt;p&gt;Now users can control drawer visibility with the &lt;strong&gt;Navigation menu&lt;/strong&gt; checkbox.&lt;/p&gt;

&lt;img src="https://community.devexpress.com:443/blogs/aspnet/drawer-with-query-parameter.gif" alt="" style="width:780px;height:488px;" /&gt;

&lt;p&gt;Note: This approach is used within DevExpress Blazor &lt;a href="https://docs.devexpress.com/Blazor/401057/get-started#devexpress-project-templates"&gt;project templates&lt;/a&gt; (v24.1.6+).&lt;/p&gt;

&lt;h2&gt;The Second Strategy: Specify CSS Rules to Control Drawer Visibility&lt;/h2&gt;

&lt;p&gt;CSS rules allow you to conditionally apply styles to elements based on the state of another component. With this approach, we will switch drawer visibility (set its width to zero) based on checkbox state. To implement this capability, you must:&amp;nbsp;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Add a checkbox element that will toggle drawer visibility.&lt;/li&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;style&amp;gt;
    .drawer-toggler {
        position: absolute;
        appearance: none;
        cursor: pointer;
        width: 2rem;
        height: 2rem;
        top: 0.75rem;
        left: 0.75rem;
        border: 1px solid rgba(50, 50, 50, 0.1);
        background: url(&amp;quot;data:image/svg+xml,%3csvg xmlns=&amp;#39;http://www.w3.org/2000/svg&amp;#39; viewBox=&amp;#39;0 0 30 30&amp;#39;%3e%3cpath stroke=&amp;#39;rgba%2850, 50, 50, 0.55%29&amp;#39; stroke-linecap=&amp;#39;round&amp;#39; stroke-miterlimit=&amp;#39;10&amp;#39; stroke-width=&amp;#39;2&amp;#39; d=&amp;#39;M4 7h22M4 15h22M4 23h22&amp;#39;/%3e%3c/svg%3e&amp;quot;) no-repeat center/1.75rem rgba(50, 50, 50, 0.1);
    }
&amp;lt;/style&amp;gt;

...
@* Here will be a toggle element. *@
&amp;lt;input type=&amp;quot;checkbox&amp;quot; title=&amp;quot;Navigation menu&amp;quot; class=&amp;quot;drawer-toggler&amp;quot; checked /&amp;gt;
...&lt;/code&gt;&lt;/pre&gt;

&lt;li&gt;Add the following CSS rule to set&amp;nbsp;drawer panel width to zero when the checkbox is not selected.&lt;/li&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;.dxbl-drawer:has(.drawer-toggler:not(:checked)) .dxbl-drawer-panel {
    width: 0 !important;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/ol&gt;

&lt;p&gt;With that, users can click the checkbox to display/hide the&amp;nbsp;drawer.&lt;/p&gt;

&lt;img src="https://community.devexpress.com:443/blogs/aspnet/drawer-css-class.gif" alt="" /&gt;

&lt;p&gt;The complete code is as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;style&amp;gt;
    .dxbl-drawer &amp;gt; .dxbl-drawer-panel &amp;gt; .dxbl-drawer-body {
        padding: 0;
    }

    .drawer-toggler {
        position: absolute;
        appearance: none;
        cursor: pointer;
        width: 2rem;
        height: 2rem;
        top: 0.75rem;
        left: 0.75rem;
        border: 1px solid rgba(50, 50, 50, 0.1);
        background: url(&amp;quot;data:image/svg+xml,%3csvg xmlns=&amp;#39;http://www.w3.org/2000/svg&amp;#39; viewBox=&amp;#39;0 0 30 30&amp;#39;%3e%3cpath stroke=&amp;#39;rgba%2850, 50, 50, 0.55%29&amp;#39; stroke-linecap=&amp;#39;round&amp;#39; stroke-miterlimit=&amp;#39;10&amp;#39; stroke-width=&amp;#39;2&amp;#39; d=&amp;#39;M4 7h22M4 15h22M4 23h22&amp;#39;/%3e%3c/svg%3e&amp;quot;) no-repeat center/1.75rem rgba(50, 50, 50, 0.1);
    }

    .dxbl-drawer:has(.drawer-toggler:not(:checked)) .dxbl-drawer-panel {
        width: 0 !important;
    }
&amp;lt;/style&amp;gt;

&amp;lt;DxDrawer PanelWidth=&amp;quot;250px&amp;quot; IsOpen=&amp;quot;@true&amp;quot;&amp;gt;
    &amp;lt;BodyTemplate&amp;gt;
        &amp;lt;div class=&amp;quot;sidebar&amp;quot;&amp;gt;
            &amp;lt;NavMenu /&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/BodyTemplate&amp;gt;
    &amp;lt;TargetContent&amp;gt;
        &amp;lt;div class=&amp;quot;top-row px-4&amp;quot;&amp;gt;
            &amp;lt;input type=&amp;quot;checkbox&amp;quot; title=&amp;quot;Navigation menu&amp;quot; class=&amp;quot;drawer-toggler&amp;quot; checked /&amp;gt;
            &amp;lt;a href=&amp;quot;https://learn.microsoft.com/aspnet/core/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;About&amp;lt;/a&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;article class=&amp;quot;content px-4&amp;quot;&amp;gt;
            @Body
        &amp;lt;/article&amp;gt;
    &amp;lt;/TargetContent&amp;gt;
&amp;lt;/DxDrawer&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To help you get started, we created an example that demonstrates use of CSS to control Drawer visibility and how to modify component configuration on mobile devices. You can download the example from our GitHub repository: &lt;a href="https://github.com/DevExpress-Examples/blazor-drawer-static-ssr"&gt;Drawer for Blazor - Responsive Drawer in Static SSR Mode&lt;/a&gt;.&lt;/p&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388200" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/static+ssr/default.aspx">static ssr</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/drawer/default.aspx">drawer</category>
        </item>
        <item>
            <title>Blazor Component Suite — Early Access Preview (v24.2)</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/09/19/blazor-component-suite-early-access-preview-v24-2.aspx</link>
            <pubDate>Thu, 19 Sep 2024 09:00:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388195</guid>
            <dc:creator>Svetlana Mikheeva (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;As you may know, our next major update (v24.2) will ship in December. In this post, I&amp;#39;ll summarize some of the features/capabilities available in our early access (EAP) build. Before I begin — a quick reminder: If you are an active &lt;a href="https://www.devexpress.com/buy/net/"&gt;Universal or DXperience&lt;/a&gt; subscriber and want to explore upcoming v24.2-related features/capabilities before official release, you can download our EAP build via the &lt;a href="https://www.devexpress.com/ClientCenter/DownloadManager/"&gt;DevExpress Download Manager&lt;/a&gt;. Should you encounter issues with the EAP build, please submit a support ticket using the DevExpress Support Center.&lt;/p&gt;

&lt;div class="Note"&gt;Early Access and CTP builds are provided solely for early testing purposes and are not ready for production use. This build can be installed side by side with other major versions of DevExpress products. Please backup your project and other important data before installing Early Access and CTP builds.
This EAP does not include all features/products we expect to ship in our v24.2 release cycle. As its name implies, the EAP offers an early preview of what we expect to ship in two months.&lt;/div&gt;

&lt;h2 id="dot-net-9-support"&gt;.NET 9 Support&lt;/h2&gt;

&lt;p&gt;Our new v24.2 release supports .NET 9 Preview, which focuses on cloud-native applications and performance. To explore the features of this new .NET version, you can create a new Microsoft .NET 9 web app and &lt;a href="https://docs.devexpress.com/Blazor/401986/get-started/register-devexpress-blazor-resources?v=24.2" target="_blank"&gt;add DevExpress resources&lt;/a&gt;. If you&amp;#39;d like to learn more about Blazor-specific enhancements in .NET 9, please review the following Microsoft article: &lt;a href="https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-9.0?view=aspnetcore-9.0" target="_blank"&gt;What&amp;#39;s New in ASP.NET Core 9.0&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id="minimally-supported-versions-for-devexpress-libraries"&gt;.NET 8, .NET Framework 4.6.2, Visual Studio 2019 Will Be Minimally Supported Versions for DevExpress Libraries (v24.2+)&lt;/h2&gt;

&lt;p&gt;Learn more about this global change in &lt;a href="https://community.devexpress.com/blogs/news/archive/2024/07/08/net-net-8-and-net-framework-4-6-2-are-minimally-supported-target-frameworks-for-devexpress-libraries-in-v24-2.aspx" target="_blank"&gt;this announcement&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id="new-blazor-ai-chart"&gt;New Blazor AI Chat Component&lt;/h2&gt;

&lt;p&gt;Whether&amp;nbsp;looking to assist customer service representatives with suggested replies and relevant customer data, streamline repetitive tasks such as data entry and invoice processing, or adding a versatile AI-powered virtual assistant to your next Blazor app, look no further than the DevExpress Blazor AI Chat Component.&amp;nbsp;&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/new-blazor-ai-chat.png" alt="New Blazor AI Chat" style="width:452px;" class="small" /&gt;

&lt;p&gt;&lt;i&gt;For more information, please refer to the following blog post: &lt;a href="https://community.devexpress.com/blogs/aspnet/archive/2024/09/18/new-devexpress-ai-focused-blazor-chat-control-early-access-preview-v24-2.aspx" target="_blank"&gt;New DevExpress AI-Powered Blazor Chat Component&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;h2 id="new-blazor-sankey"&gt;New Blazor Sankey&lt;/h2&gt;

&lt;p&gt;The DevExpress Blazor Sankey helps you describe flow magnitude between value sets. You can use Sankeys to display a many-to-many mapping between two domains or multiple paths through a set of stages (e.g., how Google Analytics displays traffic flow between pages on your website). The DevExpress Blazor Sankey component ships with the following capabilities:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Configurable nodes and links&lt;/li&gt;
    &lt;li&gt;Customizable node labels&lt;/li&gt;
    &lt;li&gt;User interaction options (hover and clicks)&lt;/li&gt;
    &lt;li&gt;Export and printing support&lt;/li&gt;
    &lt;li&gt;Sankey element customization: title, subtitle, and tooltips.&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/new-blazor-sankey.png" alt="New Blazor Sankey" style="width:780px;" /&gt;

&lt;p&gt;&lt;i&gt;To explore the capabilities of the EAP-version of the DevExpress Sankey, please review the following&amp;nbsp;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxSankey?v=24.2" target="_blank"&gt;Tutorial.&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;

&lt;h2 id="new-buttons-dropdown-button-and-split-button"&gt;New Buttons — DropDown Button and Split Button&lt;/h2&gt;

&lt;p&gt;The new Blazor DropDown Button and Split Button are designed to extend the capabilities of your DevExpress-powered Blazor app and address a variety of usage scenarios. They include the following capabilities:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Customizable dropdown items or the ability to set a template for dropdown content.&lt;/li&gt;
    &lt;li&gt;Predefined &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxDropDownButton.RenderStyle?v=24.2" target="_blank"&gt;RenderStyle&lt;/a&gt; and &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxDropDownButton.RenderStyleMode?v=24.2" target="_blank"&gt;RenderStyleMode&lt;/a&gt; options.&lt;/li&gt;
    &lt;li&gt;Ability to specify&amp;nbsp;custom button content.&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/new-buttons-dropdown-button-and-split-button.png" alt="DropDown Button and Split Button" style="width:780px;" /&gt;

&lt;p&gt;&lt;i&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor DropDown Button, navigate to our locally installed Blazor demos and proceed to &lt;b&gt;Utility Controls → DropDown Button.&lt;/b&gt;&amp;nbsp;For more information, please refer to the following help topics:&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxSplitButton?v=24.2" target="_blank"&gt;&amp;nbsp;Split Button&lt;/a&gt;&amp;nbsp;and &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxDropDown?v=24.2" target="_blank"&gt; DropDown Button&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;h2 id="new-blazor-search-box"&gt;New Blazor Search Box&lt;/h2&gt;

&lt;p&gt;The DevExpress Blazor Search Box allows you to incorporate a search UI/search functions to&amp;nbsp;your DevExpress-powered Blazor app. The Search Box integrates well with other DevExpress Blazor components and ships with the following capabilities:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Search delay&lt;/li&gt;
    &lt;li&gt;Appearance customization&lt;/li&gt;
    &lt;li&gt;Clear button and placeholder&lt;/li&gt;
    &lt;li&gt;Custom command buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/new-blazor-search-box.png" alt="New Blazor Search Box" style="width:780px;" /&gt;

&lt;p&gt;&lt;i&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor Search Box, navigate to our locally installed Blazor demos and proceed to &lt;b&gt;Data Editors → Search Box.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;

&lt;h2 id="keyboard-support"&gt;Keyboard Support&lt;/h2&gt;

&lt;p&gt;To address accessibility standards and improve user experiences for those with disabilities, v24.2 adds keyboard navigation support for the following Blazor UI components:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Tabs&lt;/li&gt;
    &lt;li&gt;Date Range Picker&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="blazor-treelist"&gt;Blazor TreeList&lt;/h2&gt;

&lt;h3&gt;Editing&lt;/h3&gt;

&lt;p&gt;The DevExpress Blazor TreeList now supports the following edit modes:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Edit Form/Popup Edit Form&lt;/li&gt;
    &lt;li&gt;Edit Row&lt;/li&gt;
    &lt;li&gt;Edit Cell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For all edit modes, you can implement input validation via Data Annotation attributes and configure editors using EditSettings and/or templates.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/treelist-editing.png" alt="Blazor TreeList — Editing" style="width:780px;" /&gt;

&lt;p&gt;&lt;i&gt;To explore the EAP-version of TreeList editing functionality, navigate to our locally installed Blazor demos and proceed to &lt;b&gt;TreeList → Edit Data&lt;/b&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;h3&gt;Export to Excel&lt;/h3&gt;

&lt;p&gt;The DevExpress Blazor TreeList can now export data to Excel. With our new APIs, you can save&amp;nbsp;data to XLS, XLSX, and CSV, or stream. The following methods are available:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeList.ExportToXlsAsync.overloads?v=24.2" target="_blank"&gt;ExportToXlsAsync&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeList.ExportToXlsxAsync.overloads?v=24.2" target="_blank"&gt;ExportToXlsxAsync&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeList.ExportToCsvAsync.overloads?v=24.2" target="_blank"&gt;ExportToCsvAsync&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data export operations support sorting, filtering, and total computation. You can also pass the ‘options’ parameter to export methods. This parameter allows you to customize the exported document.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;To explore the EAP-version of our TreeList Export to Excel feature,&amp;nbsp;navigate to our&amp;nbsp;locally installed Blazor demos and proceed to &lt;b&gt;TreeList → Export&lt;/b&gt;. For additional information/examples, please refer to the following help topic:&amp;nbsp;&lt;a href="https://docs.devexpress.com/Blazor/405163/components/treelist/export?v=24.2" target="_blank"&gt;TreeList Export&lt;/a&gt;&lt;/i&gt;.&lt;/p&gt;

&lt;h3 id="new-filter-mode-nodes"&gt;New Filter Mode — Nodes&lt;/h3&gt;

&lt;p&gt;When using our&amp;nbsp;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeList.FilterTreeMode#remarks?v=24.2" target="_blank"&gt;Nodes&lt;/a&gt; filter mode, the DevExpress Blazor TreeList displays all nodes that meet current filter criteria as a plain list. This improves TreeList performance when it is bound to a large remote dataset and is useful when finding specific records is more important than keeping&amp;nbsp;the node hierarchy visible.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/treelist-new-filter-mode-nodes.png" alt="Blazor TreeList — New Filter Mode — Nodes" style="width:678px;" class="small" /&gt;

&lt;p&gt;&lt;i&gt;To explore the EAP-version of this new filter mode, navigate to our locally installed Blazor demos and proceed to &lt;b&gt;TreeList → Filter Data → Filter Row&lt;/b&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;h3 id="self-reference-data-binding-enhancements"&gt;Self-Reference Data Binding Enhancements&lt;/h3&gt;

&lt;p&gt;Our Blazor TreeList can now automatically detect&amp;nbsp;root nodes - nodes whose ParentID values don’t point to other nodes in the source collection. For more precise control, TreeList also exposes a&lt;code&gt;RootValue&lt;/code&gt; property. If this property is specified, our TreeList treats all nodes with ParentID values equal to &lt;code&gt;RootValue&lt;/code&gt; as root nodes.&lt;/p&gt;

&lt;h3 id="expand-all-nodes-automatically"&gt;Expand All Nodes Automatically&lt;/h3&gt;

&lt;p&gt;The new &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTreeList.AutoExpandAllNodes?v=24.2" target="_blank"&gt;AutoExpandAllNodes&lt;/a&gt; property expands all nodes when TreeList data is loaded for the first time.&lt;/p&gt;

&lt;h2 id="blazor-data-editors"&gt;Blazor Data Editors&lt;/h2&gt;

&lt;h3 id="list-box-search"&gt;List Box — Search&lt;/h3&gt;

&lt;p&gt;Our Blazor List Box now includes a built-in search box (allows users to filter List Box items and highlight search results). The search box is available for both single-column and multi-column modes.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/list-box-search.png" alt="Blazor List Box — Search" style="width:632px;" class="small" /&gt;

&lt;p&gt;&lt;i&gt;To explore the EAP-version of this feature, navigate to our&amp;nbsp;locally installed Blazor demos and proceed to &lt;b&gt;Data Editors → List Box → Search Box&lt;/b&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;h3&gt;Validation API&lt;/h3&gt;

&lt;p&gt;To better address accessibility standards and improve user experiences, DevExpress Blazor Editors now display validation error icons by default. To reduce visual noise, we’ve disabled our “success” validation state (previously indicated by a green border and icon). The following API members allow you to fine-tune validation appearance as needs dictate:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;ShowValidationIcon - Specifies whether to display validation icons.&lt;/li&gt;
    &lt;li&gt;ShowValidationSuccessState - Specifies whether to show a green border and icon after successful validation.&lt;/li&gt;
    &lt;li&gt;ValidationEnabled - Specifies whether this component should validate entered data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All settings are available for individual editors, EditSettings, and GlobalSettings that specify the default behavior for the entire app.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;To explore the EAP-version of our new validation API, simply access our locally installed Blazor demos and proceed to &lt;b&gt;Data Editors → Common Concepts → Validate Input&lt;/b&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;h2 id="blazor-tabs"&gt;Blazor Tabs&lt;/h2&gt;

&lt;h3 id="close-tab-button"&gt;Close Tab Button&lt;/h3&gt;

&lt;p&gt;In v24.2, you can enable the &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.Base.DxTabBase.ShowCloseButton?v=24.2" target="_blank"&gt;ShowCloseButton&lt;/a&gt; property to control whether the tab’s header displays a Close button. Clicking this button triggers the &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxTabs.TabClosing?v=24.2" target="_blank"&gt;TabClosing&lt;/a&gt; event, which allows you to display a confirmation dialog or implement custom logic before closing the tab.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/blazor-tabs-close-tab-button.png" alt="Blazor Tabs — Close Tab Button" style="width:636px;" class="small" /&gt;

&lt;p&gt;&lt;i&gt;To explore the capabilities of the EAP-version of DevExpress Blazor Tabs, navigate to our&amp;nbsp;locally installed Blazor demos and proceed to &lt;b&gt;Layout → Tabs → Scroll Mode&lt;/b&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;h2 id="blazor-treeview"&gt;Blazor TreeView&lt;/h2&gt;

&lt;h3 id="performance-enhacements"&gt;Performance Enhancements&lt;/h3&gt;

&lt;p&gt;We made changes to our Rendering engine (used in our Navigation suite), resulting in a notable reduction of load time -&amp;nbsp;especially in&amp;nbsp;the TreeView component.&lt;/p&gt;

&lt;p&gt;We tested three key scenarios and noted consistent performance improvements. Note that each test run may show different results, but the difference between the two versions remains consistent. The following graphics illustrate internal test results (tested on an AMD Ryzen 7 5800H with Radeon Graphics, 32 GB RAM):&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/EAP/blazor-treeview-performance-enhacements.png" alt="Blazor TreeView — Performance Enhacements" style="width:660px;" class="small" /&gt;

&lt;h2 id="blazor-charts"&gt;Blazor Charts&lt;/h2&gt;

&lt;h3 id="ssr-support"&gt;SSR Support&lt;/h3&gt;

&lt;p&gt;DevExpress Blazor Chart components ship with an updated&amp;nbsp;internal DOM hierarchy and now support SSR. This allows you to visualize chart data without additional project configuration in .NET 8. When using Interactive Auto render mode, you can use&amp;nbsp;SSR for initial chart rendering and CSR once the Blazor bundle has been downloaded.&lt;/p&gt;

&lt;h2&gt;Your Feedback Matters&lt;/h2&gt;

&lt;p&gt;As always, we welcome your feedback. Please take a moment to share your v24.2 EAP-related feedback in the form below: &lt;/p&gt;

&lt;div data-survey-id="fe2444eb-93db-46c7-a228-b798f06ba0a4" data-survey-auth-required="false"&gt;&lt;/div&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388195" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Survey/default.aspx">Survey</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/EAP/default.aspx">EAP</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/2024/default.aspx">2024</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v24.2/default.aspx">v24.2</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/.NET+9/default.aspx">.NET 9</category>
        </item>
        <item>
            <title>New DevExpress AI-Powered Blazor Chat Component — Early Access Preview (v24.2)</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/09/18/new-devexpress-ai-focused-blazor-chat-control-early-access-preview-v24-2.aspx</link>
            <pubDate>Wed, 18 Sep 2024 06:45:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388187</guid>
            <dc:creator>Dmitry Tokmachev (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>
&lt;div class="Note"&gt;
    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The following content refers to our Early Access Preview (EAP) build (v24.2). APIs/features outlined herein may have changed in the subsequent release cycles (v24.2 Beta and our Official Release). Review our &lt;a target="_blank" href="https://devexpress.com/subscriptions/whats-new/beta/#blazor-new-ai-chat"&gt;What&amp;#39;s New in v24.2&lt;/a&gt; summary for up-to-date product information.
    &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The DevExpress Blazor AI Chat Component is a new&amp;nbsp;UI library designed to&amp;nbsp;incorporate AI-driven interactions&amp;nbsp;into your next great app (and deliver responsive Copilot-inspired interfaces with absolute ease).&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/AI-EAP/blazor-eap-v24.2-dxaichat.png" alt="DevExpress Blazor AI Chat Control" /&gt;&lt;/p&gt;

&lt;div class="Note"&gt;
&lt;p&gt;Early Access and CTP builds are provided solely for early testing purposes and are not ready for production use. This build can be installed side by side with other major versions of DevExpress products. Please back up your project and other important data before installing Early Access and CTP builds. This EAP may not include all features/products we expect to ship in our v24.2 release cycle. As its name implies, the EAP offers an early preview of what we expect to ship in the upcoming months.&lt;/p&gt;&lt;p&gt;&lt;span&gt;Should you encounter an issue while using this Early Access Preview build (v24.2), feel free to submit a support ticket via the DevExpress Support Center. We will be happy to follow up.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="new-devexpress-blazor-dxaichat-component"&gt;New DevExpress Blazor AI Chat (DxAIChat) Component&lt;/h2&gt;
&lt;p&gt;The new DevExpress AI Chat&amp;nbsp;(&lt;code&gt;DxAIChat)&lt;/code&gt; component (available as an Early Access Preview in our v24.2 release cycle) ships with the following features/capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Seamless &amp;amp; Painless&amp;nbsp;AI Integration&lt;/strong&gt;: Connect&amp;nbsp;to OpenAI, Azure OpenAI, and self-hosted models running on Ollama.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAI Assistants Support&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streaming Responses&lt;/strong&gt;: Display AI-generated responses in real-time as they are being processed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regenerate Responses&lt;/strong&gt;: Refresh responses from AI services to ensure information is up-to-date and relevant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copying&lt;/strong&gt;: Quickly copy chat content (share or store as needed).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customizable Message Templates&lt;/strong&gt;: Define and style your messages using customizable templates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible Message Rendering&lt;/strong&gt;: Display chat responses in plain text or markdown (easy conversion to HTML with any Markdown-to-HTML library).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Display&lt;/strong&gt;: Display error information and improve troubleshooting processes (and of course enhance&amp;nbsp;your app&amp;#39;s user experience/engagement).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customizable Empty States&lt;/strong&gt;: Define custom text and descriptions for empty states within the chat interface.&lt;/li&gt;
&lt;li&gt;and yes, our AI Chat component ships with DevExpress Blazor &lt;a href="https://docs.devexpress.com/Blazor/401784/styling-and-themes/size-modes"&gt;&lt;/a&gt;&lt;a href="https://docs.devexpress.com/Blazor/401523/styling-and-themes/themes"&gt;Theme&lt;/a&gt;&amp;nbsp;support.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;
&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;To use AI Chat, your project must meet the following prerequisites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/en-us/download/dotnet/8.0"&gt;.NET 8 SDK&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An Active &lt;a href="https://www.devexpress.com/subscriptions/universal.xml"&gt;DevExpress Universal&lt;/a&gt; or &lt;a href="https://www.devexpress.com/subscriptions/dxperience.xml"&gt;DXperience&lt;/a&gt; Subscription (to download/use the&amp;nbsp;Early Access Preview v24.2 build).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Open AI: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An active Open AI Subscription. &lt;/li&gt;
&lt;li&gt;An &lt;a href="https://platform.openai.com/account/api-keys"&gt;API Key&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/openai/openai-dotnet"&gt;OpenAI .NET SDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Azure Open AI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An active Azure subscription and the Azure Open AI Service resource. Refer to the following tutorial to set up the resource: &lt;a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/create-resource?source=recommendations&amp;amp;pivots=web-portal"&gt;Create and deploy an Azure OpenAI Service resource&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.nuget.org/packages/Azure.AI.OpenAI/"&gt;Azure OpenAI .NET SDK&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For self-hosted Models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://ollama.com/download"&gt;Ollama&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download and run any supported model: &lt;a href="https://ollama.com/library"&gt;Models&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="add-the-dxaichat-component-to-your-application"&gt;Add the Blazor AI Chat&amp;nbsp;Component to Your Application&lt;/h3&gt;
&lt;p&gt;The following steps will add the Blazor Chat (&lt;code&gt;DxAIChat&lt;/code&gt;&amp;nbsp;) component to your Blazor application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use a &lt;a href="https://docs.devexpress.com/Blazor/401057/get-started"&gt;DevExpress Project Template&lt;/a&gt; to create a new Blazor Server or Blazor WebAssembly application. If using a Microsoft project template or if you already have a Blazor project, &lt;a href="https://docs.devexpress.com/Blazor/401986/get-started/register-devexpress-blazor-resources"&gt;configure your project&lt;/a&gt; to add DevExpress Blazor components.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install the following NuGet packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DevExpress.AIIntegration&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DevExpress.AIIntegration.OpenAI&lt;/code&gt; or &lt;code&gt;DevExpress.AIIntegration.Azure.OpenAI&lt;/code&gt; or &lt;code&gt;DevExpress.AIIntegration.Ollama&lt;/code&gt; (based on requirements)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DevExpress.AIIntegration.Web&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DevExpress.AIIntegration.Blazor.Chat&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Call the &lt;code&gt;AddDevExpressAI&lt;/code&gt; method at&amp;nbsp;application startup and register the chat client to enable AI services:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Program.cs&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;using DevExpress.AIIntegration;
...
string azureOpenAIEndpoint = Environment.GetEnvironmentVariable(&amp;quot;AZURE_OPENAI_ENDPOINT&amp;quot;);
string azureOpenAIKey = Environment.GetEnvironmentVariable(&amp;quot;AZURE_OPENAI_API_KEY&amp;quot;);
string deploymentName = &amp;quot;YourModelDeploymentName&amp;quot;
...
builder.Services.AddDevExpressBlazor();
builder.Services.AddDevExpressAI((config) =&amp;gt; {
    config.RegisterChatClientOpenAIService
        new AzureOpenAIClient(
            new Uri(azureOpenAIEndpoint),
            new AzureKeyCredential(azureOpenAIKey)
        ), deploymentName);
    //or call the following method to use self-hosted Ollama models
    //config.RegisterChatClientOllamaAIService(&amp;quot;http://localhost:11434/api/chat&amp;quot;, &amp;quot;llama3.1&amp;quot;);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Add the &lt;code&gt;&amp;lt;DxAIChat&amp;gt;…&amp;lt;/DxAIChat&amp;gt;&lt;/code&gt; markup to a &lt;code&gt;.razor&lt;/code&gt; file:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;@using DevExpress.AIIntegration.Blazor.Chat
@using AIIntegration.Services.Chat;

&amp;lt;DxAIChat CssClass=&amp;quot;my-chat&amp;quot;&amp;gt;
&amp;lt;/DxAIChat&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
    &lt;li&gt;Enable interactivity to use the &lt;code&gt;DxAIChat&lt;/code&gt;component in your application. Refer to the following help topic for additional information: &lt;a href="https://docs.devexpress.com/Blazor/405079/get-started/enable-interactive-render-mode"&gt;Enable Interactive Render Mode&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Run the application and start chatting with the AI client of your choice.&lt;/li&gt;
&lt;/ul&gt;
&lt;video controls=""&gt;
    &lt;source src="https://community.devexpress.com/blogs/aspnet/24.2/AI-EAP/blazor-eap-v24.2-chat-pirate.mov"&gt;
&lt;/source&gt;&lt;/video&gt;
&lt;h2 id="customization"&gt;Customization&lt;/h2&gt;
&lt;p&gt;In this section, I will document  customization options available to you and your users (customization designed to modify behaviors/appearance settings).&lt;/p&gt;
&lt;h3&gt;Customize Message Rendering&lt;/h3&gt;
&lt;p&gt;Use&amp;nbsp;&lt;code&gt;&amp;lt;MessageContentTemplate&amp;gt;...&amp;lt;/MessageContentTemplate&amp;gt;&lt;/code&gt;&amp;nbsp;to customize messages. Set the &lt;code&gt;RenderMode&lt;/code&gt; property value to&amp;nbsp;&lt;code&gt;AnswerRenderMode.Markdown&lt;/code&gt;&amp;nbsp;to use a Markdown processor of choice (in this example, I&amp;#39;m using &lt;a href="https://www.nuget.org/packages/Markdig/" target="_blank"&gt;Markdig&lt;/a&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;@page &amp;quot;/&amp;quot;
@using Markdig;
@using DevExpress.AIIntegration.Blazor.Chat
@using AIIntegration.Services.Chat;

&amp;lt;DxAIChat CssClass=&amp;quot;my-chat&amp;quot; RenderMode=&amp;quot;AnswerRenderMode.Markdown&amp;quot;&amp;gt;
    &amp;lt;MessageContentTemplate&amp;gt;
        @ToHtml(context.Content)
    &amp;lt;/MessageContentTemplate&amp;gt;
&amp;lt;/DxAIChat&amp;gt;

@code {
    MarkupString ToHtml(string text) {
        return (MarkupString)Markdown.ToHtml(text);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Customize Message Appearance&lt;/h3&gt;
&lt;p&gt;To change the appearance of message bubbles, use the &lt;code&gt;&amp;lt;MessageTemplate&amp;gt;...&amp;lt;/MessageTemplate&amp;gt;&lt;/code&gt; markup. Here is an  example of custom CSS classes for different messages based on a role within the chat: &lt;/p&gt;
&lt;pre&gt;&lt;code class="language-css"&gt;    
	.my-chat .my-chat-message {
        padding: 10px;
        border-radius: 10px;
        width: calc(100% - 60px);
        box-shadow: 0px 2px 6px -2px;
    }

    .my-chat .my-chat-message. my-assistant-message {
        background-color: rgba(76, 255, 0, 0.2);
        align-self: self-start;
    }

    .my-chat .my-chat-message. my-user-message {
        background-color: #FFF;
        align-self: self-end;
    }
    
    .my-chat .my-chat-message. my-error-message {
        background-color: rgb(255, 0, 0, 0.2);
        align-self: center;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxAIChat CssClass=&amp;quot;my-chat&amp;quot;&amp;gt;
    &amp;lt;MessageTemplate&amp;gt;
        &amp;lt;div class=&amp;quot;@GetMessageClasses(context)&amp;quot;&amp;gt;
            @if(context.Typing) {
                &amp;lt;span&amp;gt;Loading...&amp;lt;/span&amp;gt;
            } else {
                @ToHtml(context.Content)
            }
        &amp;lt;/div&amp;gt;
    &amp;lt;/MessageTemplate&amp;gt;
&amp;lt;/DxAIChat&amp;gt;

string GetMessageClasses(ChatMessage message) {
    if(message.Role == ChatMessageRole.Assistant) {
        return &amp;quot;my-chat-message my-assistant-message&amp;quot;;
    } else if(message.Role == ChatMessageRole.User) {
        return &amp;quot;my-chat-message my-user-message&amp;quot;;
    } else if(message.Role == ChatMessageRole.Error) {
        return &amp;quot;my-chat-message my-error-message&amp;quot;;
    }
    return &amp;quot;my-chat-message&amp;quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/AI-EAP/blazor-eap-v24.2-chat-custom-messages.png" alt="DevExpress Blazor AI Chat Control — Custom Message Appearance" /&gt;&lt;/p&gt;
&lt;h3&gt;Customize the Empty State&lt;/h3&gt;
&lt;p&gt;To customize the picture and message displayed when a chat has yet to start, use the&lt;code&gt;&amp;lt;EmptyMessageAreaTemplate&amp;gt;...&amp;lt;/EmptyMessageAreaTemplate&amp;gt;&lt;/code&gt; markup. For example: &lt;/p&gt;
&lt;pre&gt;&lt;code class="language-css"&gt;.my-chat .my-chat-ui-description {
    font-weight: bold;
    font-size: 20px;
    text-align: center;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxAIChat CssClass=&amp;quot;my-chat&amp;quot;&amp;gt;
    &amp;lt;EmptyMessageAreaTemplate&amp;gt;
        &amp;lt;div class=&amp;quot;my-chat-ui-description&amp;quot;&amp;gt;
            AI Assistant is ready to answer your questions. 
        &amp;lt;/div&amp;gt;
    &amp;lt;/EmptyMessageAreaTemplate&amp;gt;
&amp;lt;/DxAIChat&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/AI-EAP/blazor-eap-v24.2-chat-custom-empty-state.png" alt="DevExpress Blazor AI Chat Control – Empty State" /&gt;&lt;/p&gt;
&lt;h3&gt;Manually Handle Chat Messages&lt;/h3&gt;
&lt;p&gt;To manually handle messages sent to an AI service, handle the &lt;code&gt;MessageSent&lt;/code&gt; event. For example, you can manually call the AI client or service of  choice and return its responses to the chat. The following example demonstrates how to add responses to user questions:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxAIChat CssClass=&amp;quot;my-chat&amp;quot; MessageSent=&amp;quot;MessageSent&amp;quot;&amp;gt;
&amp;lt;/DxAIChat&amp;gt;
@code {
    DxAIChat chat;
    void MessageSent(MessageSentEventArgs args) {
        var message = new Message(MessageRole.Assistant, $&amp;quot;Processed: {args.Content}&amp;quot;);
        args.SendMessage(message);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Enable Streaming&lt;/h3&gt;
&lt;p&gt;By default, when a user sends a request to the AI client, the entire response is generated before it is sent back. If users generate lengthy queries, waiting for the response can take several seconds.&lt;/p&gt;
&lt;p&gt;To receive responses sooner, you can &lt;em&gt;stream&lt;/em&gt; the response as it is being generated. This allows you to start displaying the beginning of the response before it is  complete. Use the &lt;code&gt;UseStreaming&lt;/code&gt; property to enable streaming mode:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxAIChat CssClass=&amp;quot;my-chat&amp;quot; UseStreaming=&amp;quot;true&amp;quot;&amp;gt;
&amp;lt;/DxAIChat&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here&amp;#39;s a video demonstrating streaming mode in action: &lt;/p&gt;
&lt;video controls=""&gt;
    &lt;source src="https://community.devexpress.com/blogs/aspnet/24.2/AI-EAP/blazor-eap-v24.2-chat-streaming.mov"&gt;
&lt;/source&gt;&lt;/video&gt;
&lt;h2 id="leverage-blazorwebview-to-integrate-ai-chat-into-winforms-wpf-and-net-maui-apps"&gt;Leverage BlazorWebView to Integrate AI Chat into WinForms, WPF, and .NET MAUI Apps&lt;/h2&gt;
&lt;p&gt;Thanks to both&amp;nbsp;Blazor Hybrid technology and &lt;code&gt;BlazorWebView&lt;/code&gt;, you can reuse your existing implementation and host our new Blazor AI Chat (&lt;code&gt;DxAIChat&lt;/code&gt;&amp;nbsp;) component in any&amp;nbsp;WinForms, WPF, and/or&amp;nbsp;.NET MAUI app. To learn more about the underlying tech, refer to the following help topic: &lt;a href="https://docs.devexpress.com/Blazor/404118/get-started/create-project-hybrid"&gt;Create a Blazor Hybrid Project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To help you get started, we created an example that integrates the DevExpress Blazor AI Chat component into the aforementioned platforms. You can download the example from our GitHub repository here: &lt;a href="https://github.com/DevExpress-Examples/devexpress-ai-chat-samples" target="_blank" title="Blazor AI Chat - How to add the DevExpress Blazor AI Chat component to your next Blazor, MAUI, WPF, and WinForms application"&gt;Blazor AI Chat - How to add the DevExpress Blazor AI Chat component to your next Blazor, MAUI, WPF, and WinForms application&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Things to consider:&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;ISelfEncapsulationService&lt;/code&gt; interface: This interface allows you to work directly with a&lt;code&gt;DxAIChat&lt;/code&gt; component instance/properties from within the desktop or mobile app.&lt;/li&gt;
&lt;li&gt;Built-in &lt;code&gt;DxAIChat&lt;/code&gt; wrappers: These wrapper classes initialize required Blazor Theme scripts.&lt;/li&gt;
&lt;li&gt;Custom CSS classes are used to hide the built-in input field and send button (the &lt;code&gt;index.html&lt;/code&gt; file).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following screenshots demonstrate&amp;nbsp;the DevExpress Blazor AI Chat Component used within Windows Forms and .NET MAUI Mobile applications:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/AI-EAP/blazor-eap-v24.2-chat-combined.png" alt="DevExpress Blazor AI Chat Control Integrated into WinForms and MAUI Apps" /&gt;&lt;/p&gt;
&lt;h2 id="create-an-assistant-to-chat-with-your-own-data"&gt;Create An Assistant to Chat with Your Own Data&lt;/h2&gt;
&lt;p&gt;One of the exciting capabilities we ship in the  Early Access Preview build is a new proof-of-concept feature that leverages &lt;a href="https://techcommunity.microsoft.com/t5/ai-azure-ai-services-blog/announcing-azure-openai-service-assistants-public-preview/ba-p/4143217"&gt;OpenAI Assistants&lt;/a&gt; (which are currently at an experimental stage).&lt;/p&gt;
&lt;p&gt;Assistants may have instructions and can employ&amp;nbsp;models, tools, and files to respond to user queries. They allow you to enhance the user experience by providing a model with supplementary documents/external knowledge. OpenAI automatically parses these documents and searches through them to retrieve relevant content to better respond to&amp;nbsp;user queries. To learn more about the concept of Assistants, please review the following:&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/assistants"&gt;Azure OpenAI Assistants API (Preview)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/assistants-quickstart?tabs=command-line%2Ctypescript&amp;amp;pivots=programming-language-csharp"&gt;Quickstart: Get started using Azure OpenAI Assistants (Preview)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/file-search?tabs=python"&gt;Azure OpenAI Assistants file search tool (Preview)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To register the Open AI Assistant service in your application, add the following code to the &lt;em&gt;Program.cs&lt;/em&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;builder.Services.AddDevExpressAI((config) =&amp;gt; {
    config.RegisterOpenAIAssistants(client, &amp;quot;gpt4o&amp;quot;);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, include a supplementary document in the project file as an &lt;code&gt;EmbeddedResource&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;&amp;lt;EmbeddedResource Include=&amp;quot;Data\Restaurant Menu.pdf&amp;quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, handle the &lt;code&gt;Initialized&lt;/code&gt; event and call the &lt;code&gt;UseAssistantAsync&lt;/code&gt; method to supply a file to the Open AI Assistant at runtime:&lt;/p&gt; &lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxAIChat CssClass=&amp;quot;my-chat&amp;quot; Initialized=&amp;quot;Initialized&amp;quot;&amp;gt;
&amp;lt;/DxAIChat&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;@code {
    const string DocumentResourceName = &amp;quot;File.pdf&amp;quot;;
    const string prompt = &amp;quot;You are an analytics assistant specialized in analyzing PDF files. Your role is to assist users by providing accurate answers to their questions about data contained within these files.&amp;quot;;

    async Task Initialized(IAIChat chat) {
        await chat.UseAssistantAsync(new OpenAIAssistantOptions(
            $&amp;quot;{Guid.NewGuid().ToString(&amp;quot;N&amp;quot;)}.pdf&amp;quot;,
            Assembly.GetExecutingAssembly().GetManifestResourceStream(DocumentResourceName),
            prompt)
        );
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once implemented, your users can &amp;quot;chat&amp;quot; with data displayed in various UI components and ask natural language questions. Dan Roth, Microsoft Principal Program Manager, demonstrated this capability using DevExpress Blazor components at a recent online event &lt;strong&gt;.NET Conf: Focus on AI&lt;/strong&gt;. Navigate to the following YouTube video to see this functionality in action: &lt;a href="https://youtu.be/3x9ynkurJoI?t=8615"&gt;.NET Conf: Focus on AI - Build interactive AI-powered web apps with Blazor and .NET - Daniel Roth&lt;/a&gt;. Note: You can play with file formats for a better user experience (i.e., plain text files demonstrate better results when working with Open AI Assistants).&lt;/p&gt;
&lt;h2 id="download-a-sample"&gt;Download A Sample Project&lt;/h2&gt;
&lt;p&gt;To help you get started, we’ve created an example project that integrates the new DevExpress Blazor AI Chat component into apps across various platforms, showcasing all the customization capabilities mentioned in this article. You can download the example from our GitHub repository here: &lt;a href="https://github.com/DevExpress-Examples/devexpress-ai-chat-samples" target="_blank" title="Blazor AI Chat - How to add the DevExpress Blazor AI Chat component to your next Blazor, MAUI, WPF, and WinForms application"&gt;Blazor AI Chat - How to add the DevExpress Blazor AI Chat component to your next Blazor, MAUI, WPF, and WinForms application&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="your-feedback-counts"&gt;Your Feedback Counts&lt;/h2&gt;
&lt;p&gt;Please respond to the following survey and share your AI Chat-related requirements with us.&amp;nbsp;&lt;/p&gt;&lt;div data-survey-id="137e26a7-b1ae-4833-be54-17ed4df8c8bf" data-survey-auth-required="false"&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388187" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/EAP/default.aspx">EAP</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v24.2/default.aspx">v24.2</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Chat+UI/default.aspx">Chat UI</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/AI/default.aspx">AI</category>
        </item>
        <item>
            <title>Blazor — Year-End Roadmap (v24.2)</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/07/22/blazor-year-end-roadmap-v24-2.aspx</link>
            <pubDate>Mon, 22 Jul 2024 15:00:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388173</guid>
            <dc:creator>Slava Khudyakov (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;As always, thank you for your continued support and your interest in the &lt;a href="https://www.devexpress.com/blazor/" target="_blank"&gt;DevExpress Blazor UI component suite&lt;/a&gt;. &lt;span&gt;The following Year-End Roadmap (v24.2) documents what we expect to ship in December 2024 (including 10+ new components).&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;As always, if you have questions or suggestions, feel free to share your thoughts in the survey at the end of this post or submit a ticket via the &lt;a href="https://supportcenter.devexpress.com/ticket/list" target="_blank"&gt;DevExpress Support Center&lt;/a&gt;.&lt;/p&gt; &lt;div class="Note"&gt;The information contained within this blog post details our current/projected development plans. Please note that this information is being shared for INFORMATIONAL PURPOSES ONLY and does not represent a binding commitment on the part of Developer Express Inc. This blog post and the features/products listed within it are subject to change. You should not rely or use this information to help make a purchase decision about Developer Express Inc products.&lt;/div&gt; &lt;h2 id="-net-ecosystem"&gt;.NET Ecosystem&lt;/h2&gt; &lt;h3 id="-net-9-support"&gt;.NET 9 Support&lt;/h3&gt; &lt;p&gt;We will support .NET 9 across our Blazor component suite (v24.2 and v24.1) after&amp;nbsp;November 2024. We will also add support for the latest .NET 9 previews for v24.1 (for early adopter testing). If you&amp;#39;d like to learn more about Blazor-specific enhancements in .NET 9, please review the following Microsoft article:&amp;nbsp;&lt;a href="https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-9.0" target="_blank"&gt;What&amp;#39;s New in ASP.NET Core 9.0&lt;/a&gt;.&lt;/p&gt; &lt;h3 id="-net-8-visual-studio-2019-are-minimally-supported-versions-for-devexpress-libraries-in-v24-2"&gt;.NET 8, Visual Studio 2019 Are Minimally Supported Versions for DevExpress Libraries in v24.2&lt;/h3&gt; &lt;p&gt;To learn more about this global change and how it will impact your DevExpress-powered Blazor project, please review the following&amp;nbsp;&lt;a href="https://community.devexpress.com/blogs/news/archive/2024/07/08/net-net-8-and-net-framework-4-6-2-are-minimally-supported-target-frameworks-for-devexpress-libraries-in-v24-2.aspx" target="_blank"&gt;announcement&lt;/a&gt;.&lt;/p&gt; &lt;h3 id="source-code-builder-enhancements"&gt;Source Code Builder Enhancements&lt;/h3&gt; &lt;p&gt;With v24.2, we will simplify the steps needed&amp;nbsp;to &lt;a href="https://docs.devexpress.com/GeneralInformation/403678/source-code/rebuild-assemblies-from-source-code" target="_blank"&gt;rebuild assemblies from source code&lt;/a&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Our source builder tool will be a part of our Unified Component Installer, not a separate download.&lt;/li&gt; &lt;li&gt;The new tool will be more stable (we added more internal tests for the rebuild process on our build farm)&amp;nbsp;and require fewer steps.&lt;/li&gt; &lt;li&gt;It will be easier to rebuild .NET Core/.NET projects (currently, it is a manual process) and generate corresponding NuGet packages (including localization packages).&lt;/li&gt; &lt;/ul&gt;  &lt;h2 id="new-splitter"&gt;New Blazor Splitter&lt;/h2&gt; &lt;p&gt;Our new Blazor Splitter component will allow you to separate web page content into multiple resizable panes. The DevExpress Splitter component will support&amp;nbsp;unlimited nested splitter panes, allowing for the creation of complex layouts.&lt;/p&gt; &lt;p&gt;Key features will include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Ability to specify horizontal or vertical orientation for the splitter.&lt;/li&gt; &lt;li&gt;Live content refresh during resize operations for the best possible user experience.&lt;/li&gt; &lt;li&gt;Panes that can be collapsed or expanded with specific buttons.&lt;/li&gt; &lt;li&gt;Customizable visual appearance of splitter elements.&lt;/li&gt; &lt;/ul&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/New%20Splitter@2x.png" alt="new blazor splitter" /&gt; &lt;h2 id="new-ribbon"&gt;New Blazor Ribbon&lt;/h2&gt; &lt;p&gt;v24.2 will include a new Blazor Ribbon component, a tabbed toolbar designed to organize multiple command items across different tabs. Our Blazor Ribbon will include data-bound mode support, allowing you to obtain tab, group, and item information&amp;nbsp;from a data source.&lt;/p&gt; &lt;p&gt;Key features will include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Support for multiple editors as items, including buttons, text boxes, combo boxes, and more.&lt;/li&gt; &lt;li&gt;Compact design that displays all items within an active tab in a single line.&lt;/li&gt; &lt;li&gt;Context tabs that combine different items into categories, appearing on the ribbon when users select specific objects.&lt;/li&gt; &lt;/ul&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/New%20Ribbon@2x.png" alt="new blazor ribbon" /&gt; &lt;h2 id="new-dialog"&gt;New Blazor Dialog&lt;/h2&gt; &lt;p&gt;Our Blazor Dialog component will include a set of predefined &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/alert" target="_blank"&gt;alert&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm" target="_blank"&gt;confirm&lt;/a&gt; dialogs, similar to those in JavaScript. This capability will allow you to pass parameters to a method, display the dialog, and handle user actions without the need for custom Razor markup.&amp;nbsp;&lt;/p&gt; &lt;pre&gt;&lt;code class="language-csharp"&gt; bool result = await DialogService.ShowConfirmAsync(new DialogOptions {     Title = &amp;quot;Delete a record&amp;quot;,     Text = &amp;quot;Are you sure you want to delete this record?&amp;quot;,     RenderStyle = DialogRenderStyle.Danger     });&lt;/code&gt;&lt;/pre&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/New%20Dialog@2x-1.png" alt="new blazor dialog" /&gt; &lt;h2 id="new-range-selector"&gt;New Blazor Range Selector&lt;/h2&gt; &lt;p&gt;We expect to ship our Blazor Range Selector in our next major update (v24.2). As you&amp;#39;d expect, the DevExpress Range Selector will allow you to&amp;nbsp;visualize data within its scale. Users can select a range by dragging sliders or using the mouse to select an area on the scale. This control integrates well with our Blazor Chart library, enhancing data filtering and visual range setting experiences.&lt;/p&gt; &lt;p&gt;Key features will include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Customization of major/minor scale ticks.&lt;/li&gt; &lt;li&gt;Scale label&amp;nbsp;customization for a personalized display.&lt;/li&gt; &lt;li&gt;Customization options for slider&amp;nbsp;handles and markers.&lt;/li&gt; &lt;li&gt;Configurable shutter settings and much more.&lt;/li&gt; &lt;/ul&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/New%20Range%20Selector%20(actual)@2x.png" alt="new blazor range selector" /&gt; &lt;h2 id="new-carousel"&gt;New Blazor Carousel&lt;/h2&gt; &lt;p&gt;v24.2 will ship with a new Blazor Carousel component, designed to display an image collection using&amp;nbsp;a carousel UI metaphor. The DevExpress Blazor Carousel will include multiple&amp;nbsp;navigation controls and allow users to easily switch images.&lt;/p&gt; &lt;p&gt;Key features will include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Support for slide show and loop functionality.&lt;/li&gt; &lt;li&gt;Navigation buttons and dot indicators for intuitive image navigation.&lt;/li&gt; &lt;li&gt;Flexible item template support for customized content presentation.&lt;/li&gt; &lt;/ul&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/New%20Carousel@2x.png" alt="new blazor carousel" /&gt; &lt;h2 id="new-sankey"&gt;New Blazor Sankey&lt;/h2&gt; &lt;p&gt;Our next major update will include a new Blazor Sankey component, a visualization tool used to depict the flow from one set of values to another. Sankeys are best used when you want to display a many-to-many mapping between two domains or multiple paths through a set of stages (e.g., how Google Analytics displays traffic flow between pages on your website).&lt;/p&gt; &lt;p&gt;Key features will include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Customizable appearance of node labels.&lt;/li&gt; &lt;li&gt;Configurable nodes and links.&lt;/li&gt; &lt;li&gt;Title and subtitle settings.&lt;/li&gt; &lt;li&gt;Tooltip customization.&lt;/li&gt; &lt;/ul&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/New%20Sankey@2x.png" alt="new blazor sankey" /&gt; &lt;h2 id="new-buttons-split-button-dropdown-button-and-button-group"&gt;New Buttons — Blazor Split Button, Dropdown Button, and Button Group&lt;/h2&gt; &lt;p&gt;We expect to add three new button components to the DevExpress Blazor UI suite in our v24.2 release cycle (Blazor Split Button, Dropdown Button, and Button Group). These new Button types will help extend the capabilities of your DevExpress-powered Blazor app and address a variety of usage scenarios. &lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/Split%20Button,%20Dropdown%20Button%20and%20Button%20Group@2x.png" alt="new buttons" /&gt; &lt;h2 id="new-search-box"&gt;New Blazor Search Box&lt;/h2&gt; &lt;p&gt;Our new Blazor Search Box will allow you to introduce a search UI&amp;nbsp;anywhere within your Blazor app (and maintain UI consistency when using&amp;nbsp;other DevExpress Blazor components). Key features will include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Search icon&lt;/li&gt; &lt;li&gt;Placeholder text&lt;/li&gt; &lt;li&gt;Clear button&lt;/li&gt; &lt;li&gt;Validation icons&lt;/li&gt; &lt;li&gt;Size mode support&lt;/li&gt; &lt;/ul&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/New%20Dialog@2x.png" alt="new blazor search box" /&gt; &lt;h2 id="keyboard-support"&gt;Keyboard Support&lt;/h2&gt; &lt;p&gt;To better align with accessibility standards and improve user experiences for those with disabilities, we plan to add keyboard navigation support to the following Blazor UI components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Scheduler&lt;/li&gt; &lt;li&gt;FormLayout&lt;/li&gt; &lt;li&gt;Tabs&lt;/li&gt; &lt;li&gt;DateRangePicker&lt;/li&gt; &lt;li&gt;Window&lt;/li&gt; &lt;/ul&gt; &lt;h2 id="treelist"&gt;Blazor TreeList&lt;/h2&gt; &lt;h3 id="official-release"&gt;Official Release&lt;/h3&gt; &lt;p&gt;In addition to new features and enhancements, our Blazor TreeList will be ready for production use. We will finalize its APIs/behaviors and minimize potential breaking changes for those currently using it within a project.&lt;/p&gt; &lt;h3 id="data-editing"&gt;Data Editing&lt;/h3&gt; &lt;p&gt; We expect to introduce the following Blazor TreeList data editing modes in our v24.2 release cycle:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Edit Form / Popup Edit Form&lt;/li&gt; &lt;li&gt;Edit Row&lt;/li&gt; &lt;li&gt;Edit Cell&lt;/li&gt; &lt;/ul&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/TreeList%20-%20Data%20Editing@2x.png" alt="treelist data editing" /&gt; &lt;p&gt;For all edit modes, you will be able to introduce input validation via Data Annotation attributes and configure editors using EditSettings and/or templates.&lt;/p&gt; &lt;h3 id="export-to-excel"&gt;Export to Excel&lt;/h3&gt; &lt;p&gt;Our Blazor TreeList component will support XLSX, XLS, and CSV data export. For Excel files, node hierarchy will be implemented with &lt;a href="https://support.microsoft.com/en-us/office/outline-group-data-in-a-worksheet-08ce98c4-0063-4d42-8ac7-8278c49e9aff" target="_blank"&gt;outlines&lt;/a&gt;. &lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/TreeList%20-%20Export%20to%20Excel@2x.png" alt="treelist export to excel" /&gt; &lt;h3 id="save-restore-layout"&gt;Save &amp;amp; Restore Layout&lt;/h3&gt; &lt;p&gt;Much like our Blazor Grid, the DevExpress Blazor TreeList will include APIs to save layout information to a local storage, database, or a remote service. As you might expect, you will be able to store the following layout information:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Applied filters;&lt;/li&gt; &lt;li&gt;Pager state;&lt;/li&gt; &lt;li&gt;Column position, sort index, visibility, and width.&lt;/li&gt; &lt;/ul&gt; &lt;h3 id="new-filter-mode-nodes"&gt;New Filter Mode — Nodes&lt;/h3&gt; &lt;p&gt;In this new filter mode, the TreeList will display all nodes that meet the applied filter criteria as a plain list. This is useful when working with large collections and when finding specific records is more important than keeping node hierarchy visible.&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/TreeList%20тАУ%20New%20Filter%20Mode%20тАУ%20Nodes@2x.png" alt="new filter mode - nodes" /&gt; &lt;h3 id="api-enhancements"&gt;API Enhancements&lt;/h3&gt; &lt;p&gt;We expect to extend our Blazor&amp;nbsp;TreeList&amp;#39;s API with the following members:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;RootValue - specifies the ParentID value used to distinguish root-level nodes in self-reference data sources (default is 0).&lt;/li&gt; &lt;li&gt;AutoExpandAllNodes - specifies whether to expand all nodes when TreeList data is loaded for the first time.&lt;/li&gt; &lt;/ul&gt; &lt;h2 id="grid-treelist"&gt;Blazor Grid &amp;amp; TreeList&lt;/h2&gt; &lt;h3 id="row-drag-drop"&gt;Row Drag &amp;amp; Drop&lt;/h3&gt; &lt;p&gt;Both our Blazor Grid and TreeList components will feature built-in support for row-based drag and drop operations. Users will be able to reorder rows, change tree hierarchies, and/or move rows from one table to another.&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/Grid%20and%20TreeList%20Row%20DragAndDrop@2x.png" alt="row drag and drop" /&gt; &lt;h3 id="new-item-row"&gt;New Item Row&lt;/h3&gt; &lt;p&gt;Our Blazor Grid and TreeList will be able to display an empty row below or above data records. This empty row can be used to add new records quickly (especially when using Cell Edit mode).&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/Grid%20and%20TreeList%20тАУ%20New%20Item%20Row@2x.png" alt="new item row" /&gt; &lt;h2 id="data-editors"&gt;Blazor Data Editors&lt;/h2&gt; &lt;h3 id="combobox-tagbox-list-box-grouping"&gt;ComboBox, TagBox &amp;amp; List Box — Grouping&lt;/h3&gt; &lt;p&gt;ComboBox, TagBox, and List Box will be able to split items in a list into non-collapsible groups. Groups make the list of options more readable and help users locate required options more quickly.&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/ComboBox,%20TagBox,%20List%20Box%20тАУ%20Grouping┬а@2x.png" alt="grouping" /&gt; &lt;h3 id="combobox-tagbox-list-box-disable-items"&gt;ComboBox, TagBox &amp;amp; List Box — Disable Items&lt;/h3&gt; &lt;p&gt;We will release APIs to disable individual ComboBox/TagBox/List Box items. Disabled items are greyed out and cannot be selected.&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/ComboBox,%20TagBox,%20List%20Box%20тАУ%20Disabled%20Items@2x.png" alt="disable items" /&gt; &lt;h3 id="list-box-search"&gt;List Box — Search&lt;/h3&gt; &lt;p&gt;A built-in search box will allow users to filter List Box items and highlight search results.&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/List%20Box%20тАУ%20Search@2x.png" alt="list box search" /&gt; &lt;h2 id="pdf-viewer"&gt;Blazor PDF Viewer&lt;/h2&gt; &lt;h3 id="official-release"&gt;Official Release&lt;/h3&gt; &lt;p&gt;In our upcoming release, we will address a series of&amp;nbsp;known limitations and enhance&amp;nbsp;overall stability to ensure that the DevExpress Blazor&amp;nbsp;PDF Viewer is robust and ready for production apps.&lt;/p&gt; &lt;h2 id="tabs"&gt;Blazor Tabs&lt;/h2&gt; &lt;h3 id="built-in-close-tab-button"&gt;Close Tab Button&lt;/h3&gt; &lt;p&gt;&lt;span&gt;Our&amp;nbsp;&lt;/span&gt;built-in close button feature will simplify the use of&amp;nbsp;the close tab option in your DevExpress-powered Blazor app (b&lt;span&gt;y eliminating the need for custom templates or additional markup).&lt;/span&gt;&lt;/p&gt; &lt;h3 id="tabs-drag-drop"&gt;Tab Reorder&lt;/h3&gt; &lt;p&gt;v24.2&amp;nbsp;will allow users to reorder tabs by dragging them to a desired position.&amp;nbsp;&lt;/p&gt; &lt;h2 id="charts"&gt;Blazor Charts&lt;/h2&gt; &lt;h3 id="crosshair"&gt;Crosshair&lt;/h3&gt; &lt;p&gt;Crosshairs are thin vertical and horizontal lines centered on a data point within a chart. This feature helps users identify series point values in a precise manner.&amp;nbsp;When enabled, the crosshair follows the cursor and snaps to the nearest series point, enhancing data analysis and associated user experiences.&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/Chart%20crosshair@2x.png" alt="crosshair" /&gt; &lt;h3 id="zoom-and-pan-change-events"&gt;Zoom and Pan Change Events&lt;/h3&gt; &lt;p&gt;Zoom and pan change events will allow you to handle zoom/pan operations and&amp;nbsp;send API requests for new data and repopulate charts as needed. This will be of importance if your solution analyzes large datasets (thanks to the use of data aggregation before sending it through the API).&lt;/p&gt; &lt;h3 id="set-selection-programmatically"&gt;Selection API&lt;/h3&gt; &lt;p&gt;In our upcoming release, we will introduce new methods to allow you to programmatically select series or points, as well as clear selections. This functionality will benefit those who must display selected values at startup.&lt;/p&gt; &lt;h3 id="new-aggregation-interval-property"&gt;New Aggregation Interval Property&lt;/h3&gt; &lt;p&gt;Our new aggregation interval feature will aggregate series points that fall within the same interval. If the axis displays numeric values, you will assign a number to this property. For instance, an aggregation interval of 100 will create intervals like 0 to 100, 100 to 200, 200 to 300, etc. If the axis displays date-time values, you will set this property to an accepted string values such as &amp;#39;days&amp;#39;, &amp;#39;months&amp;#39;, &amp;#39;years&amp;#39;, and others.  &lt;/p&gt; &lt;h2&gt;Blazor Report Viewer &amp;amp; Report Designer&lt;/h2&gt; &lt;h3 id="sqldatasource--microsoft-azure-sql-support-with-microsoft-entra-authentication"&gt;SqlDataSource — Microsoft Azure SQL Support with Microsoft Entra Authentication&lt;/h3&gt; &lt;p&gt;We will add support for &lt;a href="https://www.microsoft.com/en-us/security/business/microsoft-entra" target="_blank" title="Microsoft Entra"&gt;Microsoft Entra&lt;/a&gt; (formerly Azure Active Directory) authentication in &lt;code&gt;SqlDataSource&lt;/code&gt; for Microsoft Azure SQL databases. This update will allow you to seamlessly connect to Azure SQL databases using modern and secure authentication methods. We will extend the &lt;a target="_blank" href="https://docs.devexpress.com/CoreLibraries/DevExpress.DataAccess.ConnectionParameters.MsSqlAuthorizationType"&gt;MsSqlAuthorizationType&lt;/a&gt; enumeration with the following types (&lt;a target="_blank" href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.data.sqlclient.sqlauthenticationmethod?view=sqlclient-dotnet-5.2"&gt;mirroring those found in .NET&lt;/a&gt;):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ActiveDirectoryPassword&lt;/li&gt; &lt;li&gt;ActiveDirectoryIntegrated&lt;/li&gt; &lt;li&gt;ActiveDirectoryInteractive&lt;/li&gt; &lt;li&gt;ActiveDirectoryDefault&lt;/li&gt; &lt;/ul&gt; &lt;div class="Note"&gt; &lt;p&gt;The latter three options will require use of the&lt;code&gt;Microsoft.Data.SqlClient&lt;/code&gt; NuGet package in your application.&lt;/p&gt; &lt;/div&gt; &lt;h3 id="automatically-resolve-missing-fonts"&gt;Automatically Resolve Missing Fonts&lt;/h3&gt; &lt;p&gt;We expect to introduce a new built-in method or API to automatically detect missing fonts in your application’s hosting environment (such as various Docker images, Azure App Service, etc.), download them from Google Fonts, and add them to the &lt;code&gt;DXFontRepository&lt;/code&gt;. This implementation is based on the approach detailed in the following blog post:&amp;nbsp;&lt;a target="_blank" href="https://community.devexpress.com/blogs/office/archive/2024/04/09/devexpress-drawing-x-office-file-api-use-dxfontsrepository-to-upload-fonts-from-anywhere.aspx"&gt;How to Manage Fonts and Deliver a Unified User Experience when Using DevExpress Reports and Office File API&lt;/a&gt;. This enhancement will ensure that the reports appear as designed, regardless of the hosting platform.&lt;/p&gt; &lt;p&gt;Additionally, we will include an option to log the names of any missing fonts to the application output. This feature will help you identify and resolve document appearance issues.&lt;/p&gt; &lt;div class="Note"&gt; &lt;p&gt;Note that while Google Fonts are open-source, not all fonts are free for commercial use and may require a license for distribution. We recommend reviewing the associated license agreements to ensure compliance with usage rights for your specific needs. &lt;/p&gt; &lt;/div&gt; &lt;h3 id="web-report-viewer---svg-print-preview"&gt;Web Report Viewer — SVG Print Preview&lt;/h3&gt; &lt;p&gt;In our next release,&amp;nbsp;we will introduce an option to enable SVG-based print preview functionality within the DevExpress Web Report Viewer. This enhancement will reduce the viewer&amp;#39;s memory footprint when transferring report page data between the server and client (i.e., when navigating through the document, zooming the document, etc.). This enhancement will also enable users to preview reports with high fidelity using Scalable Vector Graphics (SVG), ensuring sharp and clear representations of report elements.&lt;/p&gt; &lt;h3 id="html-export--preserve-rotated-text"&gt;HTML Export — Preserve Rotated Text&lt;/h3&gt; &lt;p&gt;We will introduce expanded text rotation options for reports exported to HTML. With this update, the &lt;code&gt;XRLabel&lt;/code&gt; control in resulting HTML files will preserve the text rotation defined by its &lt;code&gt;Angle&lt;/code&gt; property (supported angles are 90 degrees, 180 degrees, and 270 degrees, and their negative counterparts). This enhancement will ensure that your DevExpress Reports-powered document&amp;#39;s&amp;nbsp;text orientation is accurately maintained during HTML export, providing a consistent visual appearance across different formats.&lt;/p&gt; &lt;h3 id="pdf-export--export-bookmarks"&gt;PDF Export — Export Bookmarks&lt;/h3&gt; &lt;p&gt;With this new feature, you will be able to simplify/enhance navigation for PDF documents&amp;nbsp;generated from your reports. Bookmarks added to your report will now be preserved in the exported PDF document, allowing users to quickly jump to specific sections within large documents. &lt;/p&gt; &lt;h3 id="dateonlytimeonly-support"&gt;DateOnly &amp;amp; TimeOnly Support&lt;/h3&gt; &lt;p&gt;We will introduce support for &lt;code&gt;DateOnly&lt;/code&gt; and &lt;code&gt;TimeOnly&lt;/code&gt; values across DevExpress Reports. This update will allow you to utilize the aforementioned types when:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;creating expression bindings&lt;/li&gt; &lt;li&gt;report and query parameters&lt;/li&gt; &lt;li&gt;calculated fields&lt;/li&gt; &lt;li&gt;and when sorting, grouping, and filtering data.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Refer to the &lt;a target="_blank" href="https://www.devexpress.com/subscriptions/whats-new/#devexpress-dateonly-timeonly-support"&gt;What&amp;#39;s New in v24.1&lt;/a&gt; to learn more about recent enhancements in this particular space.&lt;/p&gt; &lt;h3 id="ai-integrations"&gt;New AI-Powered Enhancements&lt;/h3&gt; &lt;p&gt;We will integrate AI-Powered &lt;strong&gt;Summarize&lt;/strong&gt; and &lt;strong&gt;Translate&lt;/strong&gt; features into our Report Viewer components. These enhancements will allow users to quickly&amp;nbsp;understand/analyze core insights associated with a given report (using&amp;nbsp;Generative AI summaries) and convert report documents to a desired language with AI-powered translation tools&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To leverage these capabilities, you will need to &lt;strong&gt;use your own&lt;/strong&gt; Microsoft Azure Open AI API key or use offline&amp;nbsp;open-source models powered by &lt;a href="https://learn.microsoft.com/en-us/windows/ai/models" target="_blank" title="Use Machine Learning models in your Windows app"&gt;Ollama and/or Onnx Runtime&lt;/a&gt;.&lt;/p&gt; &lt;h3 id="report-designer--dimension-notations"&gt;Report Designer — Dimension Notations&lt;/h3&gt; &lt;p&gt;To simplify the report design process, v24.2 will introduce dimension notations within the DevExpress Report Designer. When you resize controls, the designer will provide precise visual feedback and display dimension notations based on a specified &lt;code&gt;ReportUnit&lt;/code&gt; property value (such as inches, centimeters, or pixels). &lt;/p&gt; &lt;h3 id="new-barcode-types--aztec--micro-qr-code"&gt;New Barcode Types — Aztec &amp;amp; Micro QR Code&lt;/h3&gt; &lt;p&gt;Our next major update will support the following Barcode types: &lt;strong&gt;Aztec&lt;/strong&gt; and &lt;strong&gt;Micro QR Code&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;a target="_blank" href="https://en.wikipedia.org/wiki/Aztec_Code"&gt;Aztec&lt;/a&gt; barcodes offer a compact/efficient way to encode large amounts of data without requiring a quiet zone, making them ideal for space-constrained documents. &lt;/p&gt; &lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;a target="_blank" href="https://en.wikipedia.org/wiki/QR_code"&gt;Micro QR Codes&lt;/a&gt; offer a smaller alternative to traditional QR Codes, suitable for space-limited output (where only small amounts of data require encoding).&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 id="text-selection-and-copying-to-clipboard"&gt;Text Selection and Copying to Clipboard&lt;/h3&gt; &lt;p&gt;The DevExpress Blazor Report Viewer will allow end-users&amp;nbsp;to select and copy report content.&lt;/p&gt; &lt;h3 id="shortcuts-for-macos"&gt;Shortcuts for macOS&lt;/h3&gt; &lt;p&gt;We will duplicate shortcuts for Blazor Report Designer and Report Viewer tailored for macOS users (utilizing the &lt;code&gt;Command ⌘&lt;/code&gt; key).&lt;/p&gt; &lt;h3 id="custom-parameters-validation"&gt;Custom Parameters Validation&lt;/h3&gt; &lt;p&gt;A new API will allow you to&amp;nbsp;implement custom validation rules for report parameter inputs, including enforcing mandatory parameters.&lt;/p&gt; &lt;h3 id="incremental-search-in-parameters"&gt;Incremental Search in Parameters&lt;/h3&gt; &lt;p&gt;We will introduce incremental searching for parameters&amp;nbsp;linked to data collections.&lt;/p&gt; &lt;h3 id="interactive-margins"&gt;Interactive Margins&lt;/h3&gt; &lt;p&gt;Users will have the ability to modify document margins directly within a Report Viewer interface.&lt;/p&gt; &lt;h2 id="long-term-initiatives"&gt;Long-term Initiatives&lt;/h2&gt; &lt;p&gt;While our roadmap showcases key features we expect to deliver in our v24.2 release cycle, we have begun initiatives&amp;nbsp;that cannot be completed within a single release cycle. Some of these initiatives may or may not make it to the final release. Notable initiatives include:&lt;/p&gt; &lt;h3 id="new-fluent-theme"&gt;New Fluent Theme&lt;/h3&gt; &lt;p&gt;We will introduce a new Fluent-like theme over the next two major release cycles (to modernize the visual design of our Blazor component libraries). This initiative aligns with established design/usability standards. As you would expect, we will&amp;nbsp;continue to support existing themes to ensure maximum flexibility and minimize breaking changes to current projects.&lt;/p&gt; &lt;img src="https://community.devexpress.com/blogs/aspnet/24.2/Roadmap/Fluent%20Theme@2x.png" alt="new fluent theme" /&gt; &lt;h3 id="pivotgrid"&gt;Pivot Grid&lt;/h3&gt; &lt;p&gt;Over the next two major release cycles, we plan to introduce a new Blazor Pivot Grid component. Our new Pivot Grid component will offer advanced features and improved overall performance for a variety of data analysis usage scenarios. To prevent breaking changes in current projects, we will create a new Pivot Grid component alongside our existing offering.&amp;nbsp;&lt;/p&gt; &lt;h2&gt;Your Feedback Matters&lt;/h2&gt;&lt;div data-survey-id="7f290453-2ade-4abe-8a46-e81c46ef6a8f" data-survey-auth-required="false"&gt;&lt;/div&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388173" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Featured/default.aspx">Featured</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Roadmap/default.aspx">Roadmap</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Survey/default.aspx">Survey</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/2024/default.aspx">2024</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/.NET+8/default.aspx">.NET 8</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v24.2/default.aspx">v24.2</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/.NET+9/default.aspx">.NET 9</category>
        </item>
        <item>
            <title>Blazor Component Suite — Early Access Preview (v24.1)</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/03/26/blazor-early-access-preview-v24-1.aspx</link>
            <pubDate>Tue, 26 Mar 2024 15:15:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388129</guid>
            <dc:creator>Alex Chuev (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;As you may know, our next major update (v24.1) will ship in a few months. In this post, I&amp;#39;ll summarize some&amp;nbsp;of the features/capabilities available in our early access (EAP) build. Before I begin — a quick reminder: If you are an active &lt;a href="https://www.devexpress.com/buy/net/"&gt;Universal or DXperience&lt;/a&gt; subscriber and want to explore upcoming v24.1-related features/capabilities before official release, you can download our EAP&amp;nbsp;build via the &lt;a href="https://www.devexpress.com/ClientCenter/DownloadManager/"&gt;DevExpress Download Manager&lt;/a&gt;. Should you encounter issues with the EAP build, please submit a support ticket using the DevExpress Support Center.&lt;/p&gt;&lt;div class="Note"&gt;Early Access and CTP builds are provided solely for early testing purposes and are not ready for production use. This build can be installed side by side with other major versions of DevExpress products. Please backup your project and other important data before installing Early Access and CTP builds.
This EAP does not include all features/products we expect to ship in our v24.1 release cycle. As its name implies, the EAP offers an early preview of what we expect to ship in two months.&lt;/div&gt;

&lt;h2 id="treelist-ctp-"&gt;TreeList (CTP)&lt;/h2&gt;&lt;p&gt;This EAP includes the first version of our Blazor TreeList with the following features:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Binding to flat (self-referenced) data&lt;/li&gt;&lt;li&gt;Horizontal and vertical scrolling&lt;/li&gt;&lt;li&gt;Paging&lt;/li&gt;&lt;li&gt;Sorting&lt;/li&gt;&lt;li&gt;Filter Row&lt;/li&gt;&lt;li&gt;Total Summaries&lt;/li&gt;&lt;li&gt;Column Resizing and Reorder&lt;/li&gt;&lt;/ul&gt;
&lt;img src="https://community.devexpress.com:443/blogs/aspnet/24.1/EAP/TreeList(2x).png" alt="treelist ctp" /&gt;
&lt;p&gt;We expect to support additional data binding modes/features for the final v24.1 build. To explore the capabilities of the EAP-version of the DevExpress Blazor&amp;nbsp;TreeList control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to &lt;strong&gt;TreeList → Overview&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="html-editor"&gt;HTML Editor&lt;/h2&gt;&lt;p&gt;&lt;span&gt;Our Blazor HTML Editor allows you to format text&amp;nbsp;and visual content and store it as HTML or Markdown. Users can apply inline formatting and modify&amp;nbsp;font, size, and color as needs dictate. Additionally, the DevExpress Blazor HTML Editor&amp;nbsp;now offers a range of block formatting features, including headings, text alignment, lists (bullet and numbered), code blocks, and quotes.&lt;/span&gt;&lt;/p&gt;
&lt;img src="https://community.devexpress.com:443/blogs/aspnet/24.1/EAP/HTML%20Editor(2x).png" alt="html editor" /&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor HTML Editor, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;HTML Editor&amp;nbsp;→ Overview&lt;/strong&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2 id="file-input"&gt;File Input&lt;/h2&gt;&lt;p&gt;Our new Blazor File Input component allows you to introduce file upload functionality to your Blazor app without creating a separate Web API project with an upload controller.&lt;/p&gt;&lt;img src="https://community.devexpress.com:443/blogs/aspnet/24.1/EAP/New%20FileInput(2x).png" alt="file input" /&gt;&lt;p&gt;Our Blazor File Input control supports multiple upload modes (Instant and OnButtonClick), can upload multiple files simultaneously, and allows you to validate file size and extension both on the client and server.&lt;/p&gt;&lt;p&gt;Handle the FilesUploading event to upload selected files. For each file, the event supplies a Stream you can open to read file content. Once the read operation is complete, you can send the file to another destination, save it to the file system, or display the file content on a web page.&lt;/p&gt;&lt;p&gt;The following code snippet configures FileInput to upload files to a specified folder:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxFileInput FilesUploading=&amp;quot;OnFilesUploading&amp;quot; /&amp;gt; 

@code { 
    async Task OnFilesUploading(FilesUploadingEventArgs args) { 
        foreach (var file in args.Files) { 
            Stream? stream = default; 
            var filePath = &amp;quot;full path to the uploaded file&amp;quot;;  
            FileStream fs = new(filePath, FileMode.Create); 
            try { 
                if(IsValidFile(file)) { 
                    stream = file.OpenReadStream(int.MaxValue); 
                    await stream.CopyToAsync(fs);  
                } 
            } 
            catch (Exception ex) { 
                if (file.CancellationTokenSource.IsCancellationRequested) 
                    // Handle the cancel action here  
            } 
            finally { 
                await fs.FlushAsync(); 
                fs.Close(); 
                if (stream != null) 
                    stream.Close(); 
            } 
        } 
    } 
} &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor&amp;nbsp;File Input control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;File Management → File Input&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="dropdown-box"&gt;DropDown Box&lt;/h2&gt;&lt;p&gt;The DevExpress Blazor DropDown Box is a highly customizable editor - designed to display/use a variety of UI elements within its drop-down window: from simple lists and trees, to grids, or any combination thereof. You can assign an editor value programmatically based&amp;nbsp;on page interactions.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The following code snippet adds&amp;nbsp;the DevExpress Blazor Grid to the DropDown Box&amp;nbsp;popup.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxDropDownBox Value=&amp;quot;Value&amp;quot; QueryDisplayText=&amp;quot;QueryText&amp;quot; &amp;gt; 
    &amp;lt;DropDownBodyTemplate&amp;gt; 
        &amp;lt;DxGrid Data=&amp;quot;@GridData&amp;quot; ShowSearchBox=&amp;quot;true&amp;quot; SelectedDataItem=&amp;quot;@Value&amp;quot; 
            SelectedDataItemChanged=&amp;quot;item =&amp;gt; GridSelectedDataItemChanged(item, context.DropDownBox)&amp;quot; .../&amp;gt; 
    &amp;lt;/DropDownBodyTemplate&amp;gt; 
&amp;lt;/DxDropDownBox&amp;gt; 

@code { 
    Customer Value { get; set; } 
    IEnumerable&amp;lt;object&amp;gt; GridData { get; set; } 
    string QueryText(DropDownBoxQueryDisplayTextContext arg) { 
        if(arg.Value is Customer value) 
            return value.ContactName; 
        return string.Empty; 
    } 
    
    void GridSelectedDataItemChanged(object item, IDropDownBox dropDownBox) { 
        Value = item as Customer; 
        dropDownBox.HideDropDown(); 
    } 
} &lt;/code&gt;&lt;/pre&gt;
&lt;img src="https://community.devexpress.com:443/blogs/aspnet/24.1/EAP/DropDownBox(2x).png" alt="dropdown box" /&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress DropDown Box&amp;nbsp;control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Data Editors → DropDown Box&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="toast"&gt;Toast&lt;/h2&gt;
&lt;p&gt;Our new Blazor Toast component allows you to notify users about processes and events. Notification messages can remain visible until a user clicks the close button&amp;nbsp;or closed automatically after a predetermined amount of time. The DevExpress Blazor Toast component supports four theme modes (Dark, Light, Pastel, and Saturated) and the following notification styles:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Danger&lt;/li&gt;&lt;li&gt;Info&lt;/li&gt;&lt;li&gt;Primary&lt;/li&gt;&lt;li&gt;Success&lt;/li&gt;&lt;li&gt;Warning&lt;/li&gt;&lt;/ul&gt;
&lt;img src="https://community.devexpress.com:443/blogs/aspnet/24.1/EAP/Toast(2x).png" alt="toast" /&gt;

&lt;p&gt;&lt;span&gt;&lt;span&gt;You can place a&amp;nbsp;&lt;code&gt;DxToast&lt;/code&gt;&amp;nbsp;component in markup and call the&amp;nbsp;&lt;code&gt;Show&lt;/code&gt;&amp;nbsp;method to display it.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxToastProvider Group=&amp;quot;ToastContainer&amp;quot; /&amp;gt; 
&amp;lt;DxToast @ref=toast Text=&amp;quot;The process has been completed.&amp;quot; Group=&amp;quot;ToastContainer&amp;quot; /&amp;gt; 

@code { 
    DxToast toast; 
    toast.Show(); 
} &lt;/code&gt;&lt;/pre&gt;&lt;p id="sidebar"&gt;&lt;span&gt;&lt;span&gt;Alternatively, add the&amp;nbsp;&lt;code&gt;DxToastProvider&lt;/code&gt; component on a page and use the notification service to create toasts at runtime.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxToastProvider Group=&amp;quot;ToastContainer&amp;quot; /&amp;gt; 

 @code { 
    [Inject] IToastNotificationService ToastService { get; set; } 

    ToastService.ShowToast(new ToastOptions { 
        Group = &amp;quot;ToastContainer&amp;quot;, 
        Text = &amp;quot;The process has been completed.&amp;quot; 
    }); 
} &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor&amp;nbsp;Toast control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Dialogs and&amp;nbsp;Windows → Toast Notification&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="drawer"&gt;Drawer&lt;/h2&gt;
&lt;p&gt;
    Our new Blazor Drawer component allows you to add a &amp;quot;dismissible&amp;quot; navigation side panel to your web application. The control includes the following features: 
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Left-side and right-side position.&lt;/li&gt;
    &lt;li&gt;Overlap and shrink display modes.&lt;/li&gt;
    &lt;li&gt;The minimized drawer state.&lt;/li&gt;
    &lt;li&gt;Header, body, and footer templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Drawer(2x).png" alt="drawer" /&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor Drawer control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Layout → Drawer&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="map"&gt;Map&lt;/h2&gt;
&lt;p&gt;The DevExpress Blazor&amp;nbsp;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxMap?v=24.1"&gt;Map&lt;/a&gt;&amp;nbsp;component can&amp;nbsp;display geo maps with markers and route info within your Blazor-powered web app. The component retrieves relevant data from a&amp;nbsp;GIS service (Bing, Google, or GoogleStatic - requires application authentication with an appropriate API key) and ships with the following capabilities:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Marker/route c&lt;span&gt;onfiguration and customization options&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Built-in map navigation and type controls.&lt;/li&gt;&lt;li&gt;Manual map adjustment.&lt;/li&gt;&lt;li&gt;Map and marker &amp;quot;click&amp;quot; support.&lt;/li&gt;&lt;/ul&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Map(x2).png" alt="map" /&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor Map control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Map → Overview&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="polar-chart"&gt;Polar Chart&lt;/h2&gt;
&lt;p&gt;The DevExpress Polar Chart for Blazor allows you to visualize data within a polar coordinate system - where each point on a plane is determined by the distance from the center and the angle from a fixed direction. The DevExpress Blazor Polar Chart component ships with the following capabilities:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Multiple series types: line, area, bar, stacked bar, and scatter.&lt;/li&gt;&lt;li&gt;Continuous, discrete, and logarithmic axis value support.&lt;/li&gt;&lt;li&gt;Spider web mode.&lt;/li&gt;&lt;li&gt;Chart element customization: labels, tooltips, legend, and many more.&lt;/li&gt;&lt;/ul&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Polar%20Chart(x2).png" alt="polar chart" /&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor Polar Chart, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Charts → Polar and Radar&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="bar-gauge"&gt;Bar Gauge&lt;/h2&gt;
&lt;p&gt;Our Bar Gauge for Blazor displays data as circular bars - where each bar indicates a single value. Our Blazor Bar Gauge ships with the following capabilities:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Geometry and layout configuration.&lt;/li&gt;&lt;li&gt;Palette customization.&lt;/li&gt;&lt;li&gt;Export and printing support.&lt;/li&gt;&lt;li&gt;Real-time data updates.&lt;/li&gt;&lt;li&gt;Gauge element customization: labels, tooltips, legend, and many more.&lt;/li&gt;&lt;/ul&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Bar%20Gauge(x2).png" alt="bar gauge" /&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor Bar Gauge control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Bar Gauge → Geometry&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="sparklines"&gt;Sparklines&lt;/h2&gt;

&lt;p&gt;Sparklines&amp;nbsp;for Blazor displays value trends using a&amp;nbsp;compact UI metaphor. You can use DevExpress Blazor Sparklines&amp;nbsp;as a standalone component or embed it into other UI controls. Sparklines&amp;nbsp;support&amp;nbsp;multiple series types and allows you to configure series-specific and general&amp;nbsp;settings at the root component level.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Sparkline(2x).png" alt="sparklines" /&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor Sparkline&amp;nbsp;control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Charts → Sparklines&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id="new-rendering-engine"&gt;New Rendering Engine&lt;/h2&gt;&lt;p&gt;The following DevExpress Blazor components now use our optimized rendering engine (instead of Bootstrap):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Charts&lt;/li&gt;&lt;li&gt;Rich Text Editor&lt;/li&gt;&lt;li&gt;Scheduler&lt;/li&gt;&lt;/ul&gt;&lt;h2 id="keyboard-support"&gt;Keyboard Support&lt;/h2&gt;&lt;p&gt;To address&amp;nbsp;accessibility standards and improve user experiences for those with disabilities, v24.1 adds keyboard navigation support for the following Blazor UI components:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Date Edit&lt;/li&gt;&lt;li&gt;Time Edit&lt;/li&gt;&lt;li&gt;Tree View&lt;/li&gt;&lt;/ul&gt;

&lt;h2 id="project-templates"&gt;Project Templates&lt;/h2&gt;&lt;h3 id="-net-8-authentication-and-authorization"&gt;.NET 8 Authentication and Authorization&lt;/h3&gt;
&lt;p&gt;&lt;span style="color:#404040;"&gt;Our Blazor project templates for .NET 8 include an option to add ASP.NET Core Identity and Token-based Authentication to your projects. In addition to the necessary infrastructure, our templates generate an&amp;nbsp;authentication interface powered by DevExpress Blazor components.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Project%20Templates(x2).png" alt="dot net 8 authentication and authorization" /&gt;

&lt;h2 id="grid"&gt;Grid&lt;/h2&gt;&lt;h3 id="header-bands"&gt;Header Bands&lt;/h3&gt;&lt;p&gt;The DevExpress Blazor Grid can now arrange columns into logical groups called bands. Each band contains its own header displayed above column headers. The Grid also supports multi-level bands wherein a band can include&amp;nbsp;other bands within it (as well as columns without a band so as to span the entire band region).&lt;/p&gt;&lt;p&gt;While end-users can reorder columns within bands or move them to the Group Panel, column movement between bands is restricted.&lt;/p&gt;
&lt;img src="https://community.devexpress.com:443/blogs/aspnet/24.1/EAP/Header%20Bands(2x).png" alt="grid header bands" /&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Blazor Grid control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt; &lt;strong&gt;Grid → Columns → Header Bands&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id="export-server-side-data-to-excel"&gt;Export Server-Side Data to Excel&lt;/h3&gt;&lt;p&gt;v24.1 introduces&amp;nbsp;Blazor Grid data export functionality for  any supported server-side data/Server Mode sources (GridDevExtremeDataSource, or CustomDataSource). Remote data can be exported to XLS, XLSX, and CSV formats.&lt;/p&gt;&lt;p&gt;The DevExpress Blazor Grid can now fetch records from a remote data source to/from the exported document. While fetching records, the Grid&amp;nbsp;displays a loading indicator. To avoid flickering, the indicator is displayed only during&amp;nbsp;estimated fetch&amp;nbsp;time.&amp;nbsp; For more information on this feature, refer to the following help topic: &lt;a href="https://docs.devexpress.com/Blazor/404338/components/grid/export"&gt;Data Export&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;To explore this feature in greater detail, download a sample project &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id="new-cell-editor-appearance"&gt;New Cell Editor Appearance&lt;/h3&gt;&lt;p&gt;In-place editors in the filter row, edit row, and edit cells of the DevExpress Blazor Grid ship with a new improved look/feel -&amp;nbsp;and automatically display validation icons, when&amp;nbsp;required. The appearance of grid cells is now consistent in both display and edit modes.&lt;/p&gt;
&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Cell%20Editor%20Appearance%20(2x)%20part%201%20.png" data-label-before="" data-label-after="" data-comparer-theme="dark" data-comparer-position="50" data-before-src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Cell Editor Appearance(2x) part 2.png" alt="" /&gt;

&lt;h3 id="built-in-value-posting"&gt;Built-in Value Posting&lt;/h3&gt;&lt;p&gt;We added the following&amp;nbsp;new method to &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.EditModelSaving"&gt;EditModelSaving&lt;/a&gt; event arguments: CopyChangesToDataItem. This method allows you to copy all changes made to the edit model during editing. Complex field values&amp;nbsp;can be copied as well.&lt;/p&gt;
&lt;p&gt;The following v23.2 code snippet...&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;async Task OnEditModelSaving(GridEditModelSavingEventArgs e) { 
    var editModel = (EmployeeEditModel)e.EditModel; 
    if (dataItem != null) { 
        dataItem.FirstName = editModel.FirstName; 
        dataItem.LastName = editModel.LastName; 
        dataItem.Title = editModel.Title; 
        dataItem.HireDate = editModel.HireDate; 
    } 
 } &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;... can now be replaced with a shorter version:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-csharp"&gt;async Task OnEditModelSaving(GridEditModelSavingEventArgs e) { 
    var editModel = (EmployeeEditModel)e.EditModel; 
    if (dataItem != null) { 
        e.CopyChangesToDataItem(); 
    } 
} &lt;/code&gt;&lt;/pre&gt;&lt;h3 id="new-tab-navigation"&gt;New Tab Navigation&lt;/h3&gt;&lt;p&gt;The Tab key now navigates between all Grid cells regardless of a cell editor&amp;#39;s active state. Users can also leave the table area by pressing Ctrl + Up or Ctrl + Down (Alt + Up or Alt + Down on Mac).&lt;/p&gt;

&lt;h2 id="charts"&gt;Charts&lt;/h2&gt;&lt;h3 id="annotations"&gt;Annotations&lt;/h3&gt;&lt;p&gt;The new Blazor&amp;nbsp;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartAnnotationBase-1?v=24.1"&gt;DxChartAnnotation&lt;/a&gt;&amp;nbsp;&lt;span&gt;object&lt;/span&gt;&amp;nbsp;allows you to create chart annotations — comments that contain information about chart content. You can populate annotations with image or text content. You can also anchor annotations to chart elements (series points or axes) or position annotations based on pixel coordinates. DevExpress Blazor Chart components also allow you to customize annotations as needed — you can configure annotation borders and shadows, image and text settings.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Annotations(x2).png" alt="annotations" /&gt;

&lt;h3 id="error-bars"&gt;Error Bars&lt;/h3&gt;&lt;p&gt;The new&amp;nbsp;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartSeriesValueErrorBar?v=24.1"&gt;DxChartSeriesValueErrorBar&lt;/a&gt;&amp;nbsp;object allows you to configure error bars (to indicate measurement precision or uncertainty). They display a possible value range next to a series point. Error bars can display fixed values or percentages, statistical function values, or error values obtained from data source fields.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Error%20Bars(x2).png" alt="error bars" /&gt;

&lt;h3 id="strips"&gt;Strips&lt;/h3&gt;&lt;p&gt;Our new Blazor&amp;nbsp;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartAxisStrip?v=24.1"&gt;DxChartAxisStrip&lt;/a&gt;&amp;nbsp;&lt;span&gt;object&amp;nbsp;&lt;/span&gt;allows you to create and configure axis strips. You can use a strip to highlight a range between two axis values or an area above/below a value. These highlighted areas help users determine whether&amp;nbsp;a point falls in or out of a predefined range. You can also add a&amp;nbsp;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartAxisStripLabel?v=24.1"&gt;DxChartAxisStripLabel&lt;/a&gt;&amp;nbsp;object to strip markup to display and configure strip labels.&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Strips(x2).png" alt="strips" /&gt;


&lt;h3 id="api-enhancements"&gt;API Enhancements&lt;/h3&gt;&lt;p&gt;&lt;em&gt;PieChart settings:&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxPieChart-1.SegmentDirection?v=24.1"&gt;SegmentDirection&lt;/a&gt;&amp;nbsp;- Specifies the direction in which the chart arranges series slices.&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxPieChart-1.StartAngle?v=24.1"&gt;StartAngle&lt;/a&gt;&amp;nbsp;- Specifies the angle at which the chart positions the first series slice.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Axis settings:&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartArgumentAxis.WorkdaysOnly?v=24.1"&gt;WorkdaysOnly&lt;/a&gt;&amp;nbsp;- Specifies whether the chart displays only workdays on the axis.&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartArgumentAxis.WorkWeek?v=24.1"&gt;WorkWeek&lt;/a&gt;&amp;nbsp;- Specifies weekdays DxChart treats as workdays.&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartArgumentAxis.WorkDates?v=24.1"&gt;WorkDates&lt;/a&gt;&amp;nbsp;- Specifies dates DxChart treats as workdays.&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartArgumentAxis.Holidays?v=24.1"&gt;Holidays&lt;/a&gt;&amp;nbsp;- Specifies dates DxChart marks as holidays.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Axis Range settings:&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartAxisRange.Length?v=24.1"&gt;Length&lt;/a&gt;&amp;nbsp;- Specifies  range length.&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartAxis-1.MinVisualRangeLength?v=24.1"&gt;MinVisualRangeLength&lt;/a&gt;&amp;nbsp;- Specifies the minimum length of the visual range.&lt;/li&gt;&lt;li&gt;&lt;a href="http://docs.devexpress.com/Blazor/DevExpress.Blazor.DxChartAxis-1.VisualRangeUpdateMode?v=24.1"&gt;VisualRangeUpdateMode&lt;/a&gt;&amp;nbsp;- Specifies how the visual range behaves if new points are added to the data source.&lt;/li&gt;&lt;/ul&gt;

&lt;h2 id="rich-text-editor"&gt;Rich Text Editor&lt;/h2&gt;&lt;h3 id="table-api"&gt;Table API&lt;/h3&gt;
&lt;p&gt;
    Our new Blazor Rich Text Editor Table API allows you to modify table layout, decoration, and structure at runtime.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;var table = await documentAPI.Tables.CreateAsync(0, columnCount, rowCount);
await table.ChangePropertiesAsync((properties =&amp;gt; {
    properties.AutoFit = false;
    properties.Style = &amp;quot;Grid Table 5 Dark Accent 1&amp;quot;;
    properties.Width = new TableWidth { Type = TableWidthType.Twips, Value = 9000 };
    properties.TableStyleOptions = TableStyleOptions.TotalRow | TableStyleOptions.HeaderRow;
}));&lt;/code&gt;&lt;/pre&gt;


&lt;p id="context-menu-customization"&gt;&lt;span&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Rich Text Editor control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;Rich Text Editor → Document API&lt;/strong&gt;&lt;span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 id="context-menu-customization"&gt;Context Menu Customization&lt;/h3&gt;&lt;p&gt;v24.1 introduces extended UI customization options for the DevExpress Blazor&amp;nbsp;&lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.RichEdit"&gt;Rich Text Editor&lt;/a&gt;. You can now customize the component&amp;#39;s context menu and associated sub-menus. Handle the CustomizeContextMenu event to:&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Add or remove built-in menu items&lt;/li&gt;&lt;li&gt;Add custom menu items&lt;/li&gt;&lt;li&gt;Customize item&amp;nbsp;appearance/behavior. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;With v24.1, you can also control context menu&amp;nbsp;visibility using the ContextMenuEnabled property.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxRichEdit CustomizeContextMenu=OnCustomizeContextMenu /&amp;gt; 

@code { 
    void OnCustomizeContextMenu(IContextMenuItemCollection items) { 
        if (selection.Intervals[0].Length &amp;gt; 0) { 
            var span = await selection.ActiveSubDocument.GetTextSpanAsync(selection.Intervals[0]); 
            textToSearch = span.Text.Trim(); 
        } 
        else 
            textToSearch = null; 
        
        var searchItem = items.AddCustomItem(0, &amp;quot;Google Search...&amp;quot;, async () =&amp;gt; { 
            var url = $&amp;quot;https://www.google.com/search?q={HttpUtility.UrlEncode(textToSearch)}&amp;quot;; 
            await JSRuntime.InvokeVoidAsync(&amp;quot;open&amp;quot;, url, &amp;quot;_blank&amp;quot;); 
        }); 
        searchItem.Enabled = !string.IsNullOrEmpty(textToSearch); 
        searchItem.IconCssClass = &amp;quot;search-icon&amp;quot;; 
        items.Remove(RichEditContextMenuItemNames.CutSelection); 
        items.Remove(RichEditContextMenuItemNames.CopySelection); 
        items.Remove(RichEditContextMenuItemNames.Paste); 
        var clipboardItem = items.AddCustomItem(1, &amp;quot;Clipboard&amp;quot;); 
        clipboardItem.BeginGroup = true;
        clipboardItem.Items.Add(RichEditContextMenuItemNames.CutSelection);
        clipboardItem.Items.Add(RichEditContextMenuItemNames.CopySelection);
        clipboardItem.Items.Add(RichEditContextMenuItemNames.Paste);
    }
} &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;To explore the capabilities of the EAP-version of the DevExpress Rich Text Editor control, simply access&amp;nbsp;our locally installed Blazor demos and proceed to&lt;/span&gt;&amp;nbsp;&lt;strong&gt;Rich Text Editor&amp;nbsp;→ Context Menu Customization&lt;/strong&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;h2 id="scheduler"&gt;Scheduler&lt;/h2&gt;

&lt;h3 id="recurrence-form-customization"&gt;Recurrence Form Customization&lt;/h3&gt;&lt;p&gt;v24.1 ships with an enhanced Scheduler&amp;nbsp;AppointmentFormShowing. It now&amp;nbsp;allows you to customize recurrence options for both&amp;nbsp;Appointment and Recurrence forms. For instance, you can modify the list of items available in the Appointment form’s Repeat section as needs dictate:&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Recurrence%20Form%20Customization(1)(2x).png" alt="custom repeat form" /&gt;

&lt;p&gt;...Or modify&amp;nbsp;the list of repeat end items and weekday list in the Recurrence form:&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Recurrence%20Form%20Customization(2)(2x).png" alt="modify repeat modes" /&gt;

&lt;p&gt;&lt;span style="color:#404040;"&gt;The following code snippet&amp;nbsp;&lt;span style="color:#505050;"&gt;customizes the Scheduler&amp;#39;s recurrence options.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;DxScheduler ...  AppointmentFormShowing=&amp;quot;OnAppointmentFormShowing&amp;quot;/&amp;gt; 

@code {
    void OnAppointmentFormShowing(SchedulerAppointmentFormEventArgs args) {
        args.FormInfo.RepeatItems = new List&amp;lt;SchedulerRecurrenceType&amp;gt;() {
            SchedulerRecurrenceType.Yearly,
            SchedulerRecurrenceType.Weekly,
            SchedulerRecurrenceType.Never
        };
    
        args.FormInfo.RecurrenceFormInfo.RepeatEndItems = new List&amp;lt;SchedulerRecurrenceRange&amp;gt;() {
            SchedulerRecurrenceRange.OccurrenceCount,
            SchedulerRecurrenceRange.EndByDate
        };
        
        args.FormInfo.RecurrenceFormInfo.WeekDayItems.Remove(SchedulerWeekDays.WeekendDays);
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id="built-in-scroll-bars"&gt;Built-in Scroll Bars&lt;/h3&gt;
&lt;p&gt;The DevExpress Blazor Scheduler component automatically displays a scroll bar (for all supported view types) when cells don&amp;#39;t fit within control boundaries/size. To specify Scheduler&amp;nbsp;boundaries/size, modify&amp;nbsp;width/height parameters using&amp;nbsp;CSS:&amp;nbsp;&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&amp;lt;style&amp;gt;
    .my-scheduler {
        height: 600px;
    }
&amp;lt;/style&amp;gt;
 
&amp;lt;DxScheduler ... CssClass=&amp;quot;my-scheduler&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/24.1/EAP/Scrolling%20Bar(2x).png" alt="scrolling bar" /&gt;

&lt;h3 id="api-enhancements"&gt;API Enhancements&lt;/h3&gt;&lt;p&gt;You can now specify the minimum width of a day cell in Day, Week, and Work Week views. Pass the integer value to the CellMinWidth property to set cell width in pixels.&lt;/p&gt;

&lt;h2 id="your-feedback-matters"&gt;Your Feedback Matters&lt;/h2&gt;
&lt;p&gt;As always, we welcome your feedback. Please take a moment to share your&amp;nbsp;v24.1 EAP-related feedback in the form below:&amp;nbsp;&lt;/p&gt;
&lt;div data-survey-id="afb3d7d7-5b3a-491c-a32b-c06bd8423b32" data-survey-auth-required="false"&gt;&lt;/div&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388129" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Survey/default.aspx">Survey</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/EAP/default.aspx">EAP</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v24.1/default.aspx">v24.1</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/2024/default.aspx">2024</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/.NET+8/default.aspx">.NET 8</category>
        </item>
        <item>
            <title>Blazor Grid — Batch Editing with Entity Framework Core</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/02/29/blazor-grid-batch-editing-with-entity-framework-core.aspx</link>
            <pubDate>Thu, 29 Feb 2024 11:00:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388118</guid>
            <dc:creator>Svetlana Mikheeva (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;If you are using the DevExpress Blazor Grid with Entity Framework Core and are interested in batch data editing, we recently published a GitHub example that incorporates batch data editing within the &lt;a href="https://www.devexpress.com/blazor/data-grid/" target="_blank"&gt;DevExpress Blazor Grid&lt;/a&gt; using Entity Framework Core.&lt;/p&gt;

&lt;video width="780" height="368" autoplay="" loop="" muted="" style="width:780px;"&gt;
    &lt;source src="https://community.devexpress.com/blogs/aspnet/23.2/Blazor-Grid-Batch-Editing/batch-editing.mp4" type="video/mp4"&gt;
    Your browser does not support the video tag.
&lt;/source&gt;&lt;/video&gt;

&lt;p&gt;The example uses &lt;a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.dbcontext?view=efcore-8.0" target="_blank"&gt;DbContext&lt;/a&gt; to obtain and update Blazor Grid data. When a user creates a new row or modifies/deletes an existing row, a &lt;a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.dbcontext?view=efcore-8.0" target="_blank"&gt;DbContext&lt;/a&gt; instance tracks changes. End users can press &lt;strong&gt;Save&lt;/strong&gt; to save all changes or press &lt;strong&gt;Cancel&lt;/strong&gt; to discard accumulated changes. The &lt;a href="https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.CustomizeElement" target="_blank"&gt;CustomizeElement&lt;/a&gt;&amp;nbsp;event&amp;nbsp;handler identifies and highlights modified cells.&lt;/p&gt;

&lt;p&gt;Use the following link to learn more and download our new Grid sample: &lt;a href="https://github.com/DevExpress-Examples/blazor-grid-batch-editing" target="_blank"&gt;DevExpress Blazor Grid Batch Edit GitHub Example&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Your Feedback Counts&lt;/h2&gt;

&lt;p&gt;Please take a moment to respond to the following survey question.&lt;/p&gt;

&lt;div data-survey-id="b57e4bb4-c973-4983-8694-c0b2c55fd7d2" data-survey-auth-required="false"&gt;&lt;/div&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388118" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/ASP.NET/default.aspx">ASP.NET</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Grid/default.aspx">Grid</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/DataGrid/default.aspx">DataGrid</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v23.2/default.aspx">v23.2</category>
        </item>
        <item>
            <title>Blazor — Accessibility Enhancements and Options</title>
            <link>https://community.devexpress.com/blogs/aspnet/archive/2024/02/27/blazor-accessibility-enhancements-23-2.aspx</link>
            <pubDate>Tue, 27 Feb 2024 10:00:00 GMT</pubDate>
            <guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:388116</guid>
            <dc:creator>Svetlana Nikulina (DevExpress)</dc:creator>
            <slash:comments>0</slash:comments>
            <description>&lt;p&gt;In our last major update (v23.2), we&amp;nbsp;&lt;span&gt;modified element structure to improve screen reader compatibility,&amp;nbsp;&lt;/span&gt;&lt;span&gt;added alternate text descriptions, and WAI-ARIA roles/attributes for the following &lt;/span&gt;&lt;a href="https://www.devexpress.com/blazor/" target="_blank"&gt;DevExpress Blazor UI components&lt;/a&gt;:&lt;/p&gt;




&lt;ul&gt;
    &lt;li&gt;Grid&lt;/li&gt;
    &lt;li&gt;Data Editors&lt;/li&gt;
    &lt;li&gt;TreeView&lt;/li&gt;
    &lt;li&gt;Toolbar&lt;/li&gt;
    &lt;li&gt;Menu and Context Menu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also introduced keyboard navigation and shortcuts for the following Blazor UI components:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Grid&lt;/li&gt;
    &lt;li&gt;Calendar&lt;/li&gt;
    &lt;li&gt;Toolbar&lt;/li&gt;
    &lt;li&gt;Menu&lt;/li&gt;
    &lt;li&gt;Context Menu&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;These accessibility-related capabilities are available &amp;quot;out-of-the-box.&amp;quot; You can also extend accessibility in code. For instance, you can specify available descriptions for individual editors and control inner elements.&lt;/p&gt;&lt;p&gt;&lt;span&gt;To learn more, please refer to the following help topic:&amp;nbsp;&lt;/span&gt;&lt;a href="https://docs.devexpress.com/Blazor/404749/common-concepts/accessibility" target="_blank"&gt;Accessibility documentation&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 id="accessible-labels-for-editors"&gt;Accessible Labels for Editors&lt;/h2&gt;

&lt;p&gt;Due to app design, editors within your app may not require a label. This, however, could lead to&amp;nbsp;warnings during accessibility assessment and make it harder for users who reply upon screen readers. You can add a hidden label that is readable by screen reader software but not displayed on the page to address this use case. Use one of the following options to introduce this behavior to your DevExpress-powered Blazor app:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;
        &lt;p&gt;Create a separate label to add accessible information to an editor.&lt;/p&gt;
    	&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;label for=&amp;quot;label1&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;Text&amp;lt;/label&amp;gt;  
&amp;lt;DxTextBox InputId=&amp;quot;label1&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;Apply &lt;code&gt;aria-label&lt;/code&gt; attribute directly to the editor.&lt;/p&gt;
    	&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;DxTextBox aria-label=&amp;quot;Text&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In both instances, the editor will render the input element with the specified &lt;code&gt;aria-label&lt;/code&gt; attribute - one that can be read and pronounced by screen readers.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;div ... &amp;gt;
    &amp;lt;div ... &amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input aria-label=&amp;quot;Text&amp;quot; ... &amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="accessible-descriptions-for-control-inner-elements"&gt;Accessible Descriptions for Control Inner Elements&lt;/h2&gt;

&lt;p&gt;With localizable strings, text within control inner elements (such as buttons and our Blazor Grid’s search box)&amp;nbsp;can be modified.&lt;/p&gt;
&lt;p&gt;For example, the &lt;code&gt;DxBlazorStringId.Grid_SearchBoxNullText&lt;/code&gt; property can be set to &lt;code&gt;Search...&lt;/code&gt;&amp;nbsp;(to modify null text used&amp;nbsp;in the search field).&lt;/p&gt;

&lt;img src="https://community.devexpress.com/blogs/aspnet/23.2/Blazor-Accessibility/search-box-in-grid.png" alt="DxGrid with Search Box" style="width:780px;" /&gt;


&lt;p&gt;In our v23.2 release cycle, we created localization strings designed for use with assistive technology tools. If your customers use assistive technologies, you can offer additional&amp;nbsp;information to help improve overall usability.&amp;nbsp;The naming pattern for these strings is &lt;code&gt;A11y_{string_name}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the following code snippet,&amp;nbsp;the static &lt;a href="https://docs.devexpress.com/CoreLibraries/DevExpress.Utils.Localization.XtraLocalizer-1" target="_blank"&gt;XtraLocalizer&lt;/a&gt; object is used to provide null text and an accessible description of the search box. Though this description does not change control appearance, it does&amp;nbsp;impact how individuals with visual impairments are able to process on-screen&amp;nbsp;information.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-csharp"&gt;protected override async Task OnInitializedAsync() {
    XtraLocalizer.QueryLocalizedString += new EventHandler(XtraLocalizer_QueryLocalizedString);
}

static private void XtraLocalizer_QueryLocalizedString(object sender, XtraLocalizer.QueryLocalizedStringEventArgs e) {
    if (e.StringIDType == typeof(DxBlazorStringId)) {
        if ((DxBlazorStringId)e.StringID == DxBlazorStringId.Grid_SearchBoxNullText)
            e.Value = &amp;quot;Search...&amp;quot;;
        if ((DxBlazorStringId)e.StringID == DxBlazorStringId.A11y_Grid_SearchBox)
            e.Value = &amp;quot;Enter search criteria. Use the space key to enter multiple search values.&amp;quot;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="what-is-next"&gt;What&amp;#39;s Next&lt;/h2&gt;
&lt;p&gt;To learn more about our next major update (v24.1) and accessibility-related features we expect to release in June, please refer to the following blog post: &lt;a href="https://community.devexpress.com/blogs/aspnet/archive/2024/02/12/blazor-v24-1-roadmap.aspx" target="_blank"&gt;Roadmap (24.1)&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id="your-feedback-matters"&gt;Your Feedback Matters&lt;/h2&gt;
&lt;p&gt;As always, we welcome your feedback. Please take a moment to answer the following survey questions and help us shape accessibility-related development strategies for 2024:&lt;/p&gt;
&lt;div data-survey-id="05e7ee30-691b-46d7-a40f-d8460f2a068c" data-survey-auth-required="false"&gt;&lt;/div&gt;&lt;img src="https://community.devexpress.com/aggbug.aspx?PostID=388116" width="1" height="1"&gt;</description>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Accessibility/default.aspx">Accessibility</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/WAI-ARIA/default.aspx">WAI-ARIA</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Blazor/default.aspx">Blazor</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/2023/default.aspx">2023</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/v23.2/default.aspx">v23.2</category>
            <category domain="https://community.devexpress.com/blogs/aspnet/archive/tags/Survey/default.aspx">Survey</category>
        </item>
    </channel>
</rss>