Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
4078d98
Add dependency-free RichTextEditor component
gvreddy04 Aug 12, 2026
80b9e15
Add RichTextEditor demo, docs, and navigation entries
gvreddy04 Aug 12, 2026
f55d700
Refactor RichTextEditor image upload classes
gvreddy04 Aug 12, 2026
0897a62
Refactor toolbar layout to use Bootstrap flex utilities
gvreddy04 Aug 13, 2026
032657b
Update Bootstrap to 5.3.8; revamp RichTextEditor UI
gvreddy04 Aug 14, 2026
50580eb
Refactor RichTextEditor: unify toolbar, improve events
gvreddy04 Aug 14, 2026
dc82e0a
Refactor RichTextEditor.razor.cs for clarity & docs
gvreddy04 Aug 14, 2026
1787bb0
Refactor rich text editor: security, history, commands
gvreddy04 Aug 14, 2026
5625534
Add modal support for links, images, tables, fullscreen, print
gvreddy04 Aug 14, 2026
2a3ff64
Refactor RichTextEditor API, docs, and JS for clarity & security
gvreddy04 Aug 14, 2026
10c05ea
Refactor execute function and selection handling
gvreddy04 Aug 14, 2026
b103a4d
Refactor toolbar and footer in RichTextEditor.razor
gvreddy04 Aug 15, 2026
cee65f0
Refactor: move Blazor toolbar logic to code-behind files
gvreddy04 Aug 15, 2026
a549103
Refactor RichTextEditor toolbar and add new features
gvreddy04 Aug 15, 2026
c88c510
Refactor toolbar to use RichTextEditorToolbarButton
gvreddy04 Aug 15, 2026
8430561
Refactor RichTextEditor: new parent-child & JS interop
gvreddy04 Aug 16, 2026
3f88846
Replace editor value callback with TODO in JS
gvreddy04 Aug 16, 2026
d836ec0
Refactor and enhance Blazor Rich Text Editor interop
gvreddy04 Aug 16, 2026
c4ddd37
Standardize and simplify JS comments for consistency
gvreddy04 Aug 16, 2026
832c33c
Refactor footer to use dynamic IDs and live updates
gvreddy04 Aug 16, 2026
de76081
Refactor JS command routing; add debug logs
gvreddy04 Aug 17, 2026
5d09253
Fix editor ID retrieval in createEditorState function
gvreddy04 Aug 17, 2026
063a737
Enhance print functionality in editor: add print styles and manage vi…
gvreddy04 Aug 17, 2026
d17e938
Add data attributes for text and highlight color indicators in RichTe…
gvreddy04 Aug 17, 2026
03a90f6
Link updates
gvreddy04 Aug 17, 2026
3fda645
Add link command to RichTextEditor for inserting hyperlinks
gvreddy04 Aug 17, 2026
a0690f3
Add blockquote command to RichTextEditor for better text formatting
gvreddy04 Aug 17, 2026
e8dd19d
Fix command for CodeBlock in RichTextEditor to use 'codeBlock' and im…
gvreddy04 Aug 17, 2026
ea32cd4
Add fullscreen command to RichTextEditor for improved editing experience
gvreddy04 Aug 17, 2026
53f6fc7
Removed table cell align logic.
gvreddy04 Aug 17, 2026
109cecb
Image updates
gvreddy04 Aug 17, 2026
2e5761c
Add insert table functionality to RichTextEditor with modal support
gvreddy04 Aug 18, 2026
8ff9cef
Update default values for table rows and columns in insert table modal
gvreddy04 Aug 18, 2026
3b38b0e
Enhance RichTextEditor toolbar with additional heading options and up…
gvreddy04 Aug 18, 2026
0d7779b
Refactor clearInlineFormatting to improve selection handling and ensu…
gvreddy04 Aug 18, 2026
c6c766e
Enhance clearInlineFormatting to handle table selections and improve …
gvreddy04 Aug 18, 2026
7817047
Enhance clearInlineFormatting to improve table handling and ensure pr…
gvreddy04 Aug 18, 2026
a414f38
Enhance toggleList to support list creation from table cells and impr…
gvreddy04 Aug 18, 2026
654d3b1
Enhance clearInlineFormatting to improve table cell selection handlin…
gvreddy04 Aug 18, 2026
6d8c16e
Enhance clearInlineFormatting to include 'mark' in formatting selecto…
gvreddy04 Aug 18, 2026
1aefbac
Set default values for rows and columns in the insert table modal
gvreddy04 Aug 18, 2026
ffcb1da
Enhance insertTable function to handle empty paragraphs and improve c…
gvreddy04 Aug 18, 2026
03fdb74
Enhance font family selection in RichTextEditor with new dropdown fun…
gvreddy04 Aug 18, 2026
7d1d4f6
Enhance RichTextEditor to normalize empty paragraphs after Enter key …
gvreddy04 Aug 18, 2026
33a06df
Enhance RichTextEditor by adding detailed JSDoc comments for better c…
gvreddy04 Aug 18, 2026
942a6ac
Refine JSDoc comments in RichTextEditor for clarity and consistency
gvreddy04 Aug 18, 2026
f9aa7ae
Enhance RichTextEditor font size selection with new dropdown function…
gvreddy04 Aug 18, 2026
49846d7
Enhance font size selection logic in RichTextEditor to handle CSS fon…
gvreddy04 Aug 18, 2026
cda6ba3
Refactor RichTextEditor by removing unused components and optimizing …
gvreddy04 Aug 18, 2026
cf2a930
Enhance inline formatting in RichTextEditor to support whole table-ce…
gvreddy04 Aug 18, 2026
657f0c0
Enhance RichTextEditor to include normalized text metrics in value ch…
gvreddy04 Aug 19, 2026
c786da9
Enhance RichTextEditor toolbar visibility logic and add footer displa…
gvreddy04 Aug 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace BlazorBootstrap.Demo.RCL;
namespace BlazorBootstrap.Demo.RCL;

public partial class DemosMainLayout : MainLayoutBase
{
Expand Down Expand Up @@ -34,6 +34,7 @@ internal override IEnumerable<NavItem> GetNavItems()
new (){ Id = "411", Text = "Text Input", Href = DemoRouteConstants.Demos_URL_TextInput, IconName = IconName.InputCursorText, ParentId = "4" },
new (){ Id = "412", Text = "Text Area Input", Href = DemoRouteConstants.Demos_URL_TextAreaInput, IconName = IconName.InputCursorText, ParentId = "4" },
new (){ Id = "413", Text = "Time Input", Href = DemoRouteConstants.Demos_URL_TimeInput, IconName = IconName.ClockFill, ParentId = "4" },
new (){ Id = "414", Text = "RichTextEditor", Href = DemoRouteConstants.Demos_URL_RichTextEditor, IconName = IconName.Type, ParentId = "4" },

new (){ Id = "5", Text = "Components", IconName = IconName.GearFill, IconColor = IconColor.Danger },
new (){ Id = "500", Text = "Accordion", Href = DemoRouteConstants.Demos_URL_Accordion, IconName = IconName.ChevronBarExpand, ParentId = "5" },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace BlazorBootstrap.Demo.RCL;
namespace BlazorBootstrap.Demo.RCL;

public partial class DocsMainLayout : MainLayoutBase
{
Expand Down Expand Up @@ -33,6 +33,7 @@ internal override IEnumerable<NavItem> GetNavItems()
new (){ Id = "411", Text = "Text Input", Href = DemoRouteConstants.Docs_URL_TextInput, IconName = IconName.InputCursorText, ParentId = "4" },
new (){ Id = "412", Text = "Text Area Input", Href = DemoRouteConstants.Docs_URL_TextAreaInput, IconName = IconName.InputCursorText, ParentId = "4" },
new (){ Id = "413", Text = "Time Input", Href = DemoRouteConstants.Docs_URL_TimeInput, IconName = IconName.ClockFill, ParentId = "4" },
new (){ Id = "414", Text = "RichTextEditor", Href = DemoRouteConstants.Docs_URL_RichTextEditor, IconName = IconName.Type, ParentId = "4" },

new (){ Id = "5", Text = "Components", IconName = IconName.GearFill, IconColor = IconColor.Danger },
new (){ Id = "500", Text = "Accordion", Href = DemoRouteConstants.Docs_URL_Accordion, IconName = IconName.ChevronBarExpand, ParentId = "5" },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace BlazorBootstrap.Demo.RCL;
namespace BlazorBootstrap.Demo.RCL;

public partial class MainLayout : MainLayoutBase
{
Expand Down Expand Up @@ -33,6 +33,7 @@ internal override IEnumerable<NavItem> GetNavItems()
new (){ Id = "410", Text = "Text Input", Href = DemoRouteConstants.Demos_URL_TextInput, IconName = IconName.InputCursorText, ParentId = "4" },
new (){ Id = "411", Text = "Text Area Input", Href = DemoRouteConstants.Demos_URL_TextAreaInput, IconName = IconName.InputCursorText, ParentId = "4" },
new (){ Id = "412", Text = "Time Input", Href = DemoRouteConstants.Demos_URL_TimeInput, IconName = IconName.ClockFill, ParentId = "4" },
new (){ Id = "413", Text = "RichTextEditor", Href = DemoRouteConstants.Demos_URL_RichTextEditor, IconName = IconName.Type, ParentId = "4" },

new (){ Id = "5", Text = "Components", IconName = IconName.GearFill, IconColor = IconColor.Danger },
new (){ Id = "500", Text = "Accordion", Href = DemoRouteConstants.Demos_URL_Accordion, IconName = IconName.ChevronBarExpand, ParentId = "5" },
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
@page "/rich-text-editor"

@attribute [Route(DemoRouteConstants.Demos_URL_RichTextEditor)]
@layout DemosMainLayout

<DemosPageHeadSection PageUrl="@DemoRouteConstants.Demos_URL_RichTextEditor" PageTitle="Blazor RichTextEditor" PageDescription="A dependency-free rich text editor with a grouped Bootstrap toolbar." MetaTitle="Blazor RichTextEditor Component" MetaDescription="Rich text editing with safe HTML output." />

<Section Size="HeadingSize.H2" Name="Basic usage" PageUrl="@pageUrl" Link="basic-usage">
<Demo Type="typeof(RichTextEditor_Demo_23_Table)" Tabs="true" />
</Section>

@code {
private const string pageUrl = DemoRouteConstants.Demos_URL_RichTextEditor;
private const string pageTitle = "Blazor RichTextEditor";
private const string pageDescription = "Rich text editing component with a grouped Bootstrap toolbar. It is dependency-free and outputs safe HTML.";
private const string metaTitle = "Blazor RichTextEditor Component";
private const string metaDescription = "Rich text editing with safe HTML output.";
private const string imageUrl = "https://i.imgur.com/N2VUHIn.png"; // TODO: Update the image URL to a relevant image for RichTextEditor
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Undo };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Redo };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Paragraph };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Heading1 };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Heading2 };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Heading3 };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Bold };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Italic };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Underline };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Strikethrough };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.ClearFormatting };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.AlignLeft };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.AlignCenter };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.AlignRight };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.OrderedList };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.UnorderedList };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Blockquote };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.CodeBlock };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.TextColor };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Link };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>
<div class="mb-3">@content</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Image };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<div class="mb-3">
<RichTextEditor Value="@content" ToolbarItems="@toolbarItems" Placeholder="Select text, then use the toolbar command." />
</div>

@code {
private string content = "<p>Sample rich text content</p>";

private readonly RichTextEditorToolbarItem[] toolbarItems = { RichTextEditorToolbarItem.Table };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
@attribute [Route(DemoRouteConstants.Docs_URL_RichTextEditor)]
@layout DocsMainLayout

<DocsPageHeadSection PageUrl="@DemoRouteConstants.Docs_URL_RichTextEditor"
PageTitle="@componentName"
PageDescription="@pageDescription"
MetaTitle="@metaTitle"
MetaDescription="@metaDescription" />

<DemoLink Href="@DemoRouteConstants.Demos_URL_RichTextEditor" />

<Section Class="p-0" Size="HeadingSize.H3" Name="Parameters" PageUrl="@DemoRouteConstants.Docs_URL_RichTextEditor" Link="parameters">
<DocxTable TItem="RichTextEditor" DocType="DocType.Parameters" />
</Section>

<Section Class="p-0" Size="HeadingSize.H3" Name="Methods" PageUrl="@DemoRouteConstants.Docs_URL_RichTextEditor" Link="methods">
<DocxTable TItem="RichTextEditor" DocType="DocType.Methods" />
</Section>

<Section Class="p-0" Size="HeadingSize.H3" Name="Events" PageUrl="@DemoRouteConstants.Docs_URL_RichTextEditor" Link="events">
<DocxTable TItem="RichTextEditor" DocType="DocType.Events" />
</Section>

@code {
private const string componentName = nameof(RichTextEditor);
private const string pageDescription = $"This documentation provides a comprehensive reference for the <code>{componentName}</code> component, guiding you through its configuration options.";
private const string metaTitle = $"Blazor {componentName} Component";
private const string metaDescription = $"This documentation provides a comprehensive reference for the {componentName} component, guiding you through its configuration options.";
}
10 changes: 9 additions & 1 deletion BlazorBootstrap.Demo.RCL/Components/Pages/Home/Index.razor
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@page "/"
@page "/"
@layout EmptyLayout

<PageTitle>Blazor Bootstrap Components Examples & Demos | Blazor Bootstrap</PageTitle>
Expand Down Expand Up @@ -214,6 +214,10 @@
<a class="d-block pe-lg-4 text-decoration-none lh-sm" href="@DemoRouteConstants.Demos_URL_RangeInput">
<h4 class="mb-0 fs-5 fw-semibold"><Icon Name="IconName.Sliders" class="me-2" /> Range Input</h4>
</a>
</div> <div class="col-sm-4 mb-2">
<a class="d-block pe-lg-4 text-decoration-none lh-sm" href="@DemoRouteConstants.Demos_URL_RichTextEditor">
<h4 class="mb-0 fs-5 fw-semibold"><Icon Name="IconName.Type" class="me-2" /> RichTextEditor <Badge Color="BadgeColor.Danger">New</Badge></h4>
</a>
</div>
<div class="col-sm-4 mb-2">
<a class="d-block pe-lg-4 text-decoration-none lh-sm" href="@DemoRouteConstants.Demos_URL_Ribbon">
Expand Down Expand Up @@ -363,6 +367,10 @@
<a class="d-block pe-lg-4 text-decoration-none lh-sm" href="@DemoRouteConstants.Demos_URL_RangeInput">
<h4 class="mb-0 fs-5 fw-semibold"><Icon Name="IconName.Sliders" class="me-2" /> Range Input</h4>
</a>
</div> <div class="col-sm-4 mb-2">
<a class="d-block pe-lg-4 text-decoration-none lh-sm" href="@DemoRouteConstants.Demos_URL_RichTextEditor">
<h4 class="mb-0 fs-5 fw-semibold"><Icon Name="IconName.Type" class="me-2" /> RichTextEditor <Badge Color="BadgeColor.Danger">New</Badge></h4>
</a>
</div>
@* <div class="col-sm-4 mb-2">
<a class="d-block pe-lg-4 text-decoration-none lh-sm" href="@DemoRouteConstants.Demos_URL_SelectInput">
Expand Down
Loading
Loading