diff --git a/BlazorBootstrap.Demo.RCL/Components/Layout/DemosMainLayout.razor.cs b/BlazorBootstrap.Demo.RCL/Components/Layout/DemosMainLayout.razor.cs index fee9c9793..2121bed2b 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Layout/DemosMainLayout.razor.cs +++ b/BlazorBootstrap.Demo.RCL/Components/Layout/DemosMainLayout.razor.cs @@ -9,8 +9,8 @@ internal override IEnumerable GetNavItems() new (){ Id = "1", Text = "Getting Started", Href = DemoRouteConstants.Demos_URL_GettingStarted, IconName = IconName.HouseDoorFill }, new (){ Id = "2", Text = "Layout", IconName = IconName.LayoutTextWindowReverse, IconColor = IconColor.Success }, - new (){ Id = "200", Text = "Blazor WebAssembly", Href = DemoRouteConstants.Demos_URL_Layout_BlazorWebAssembly, IconName = IconName.BrowserEdge, ParentId = "2" }, new (){ Id = "201", Text = "Blazor Server", Href = DemoRouteConstants.Demos_URL_Layout_Blazor_Server, IconName = IconName.Server, ParentId = "2" }, + new (){ Id = "200", Text = "Blazor WebAssembly", Href = DemoRouteConstants.Demos_URL_Layout_BlazorWebAssembly, IconName = IconName.BrowserEdge, ParentId = "2" }, new (){ Id = "3", Text = "Content", IconName = IconName.BodyText, IconColor = IconColor.Primary }, new (){ Id = "300", Text = "Icons", Href = DemoRouteConstants.Demos_URL_Icons, IconName = IconName.PersonSquare, ParentId = "3" }, @@ -21,20 +21,20 @@ internal override IEnumerable GetNavItems() new (){ Id = "401", Text = "Checkbox Input", Href = DemoRouteConstants.Demos_URL_CheckboxInput, IconName = IconName.CheckSquareFill, ParentId = "4" }, new (){ Id = "402", Text = "Currency Input", Href = DemoRouteConstants.Demos_URL_CurrencyInput, IconName = IconName.CurrencyDollar, ParentId = "4" }, new (){ Id = "403", Text = "Date Input", Href = DemoRouteConstants.Demos_URL_DateInput, IconName = IconName.CalendarDate, ParentId = "4" }, + new (){ Id = "415", Text = "Drag and Drop File Input", Href = DemoRouteConstants.Demos_URL_DragAndDropFileInput, IconName = IconName.FileEarmarkArrowUp, ParentId = "4" }, new (){ Id = "404", Text = "Enum Input", Href = DemoRouteConstants.Demos_URL_EnumInput, IconName = IconName.MenuButtonWideFill, ParentId = "4" }, new (){ Id = "414", Text = "File Input", Href = DemoRouteConstants.Demos_URL_FileInput, IconName = IconName.FileEarmarkArrowUp, ParentId = "4" }, - new (){ Id = "415", Text = "Drag and Drop File Input", Href = DemoRouteConstants.Demos_URL_DragAndDropFileInput, IconName = IconName.FileEarmarkArrowUp, ParentId = "4" }, new (){ Id = "405", Text = "Number Input", Href = DemoRouteConstants.Demos_URL_NumberInput, IconName = IconName.InputCursor, ParentId = "4" }, new (){ Id = "406", Text = "OTP Input", Href = DemoRouteConstants.Demos_URL_OTPInput, IconName = IconName.Asterisk, ParentId = "4" }, new (){ Id = "407", Text = "Password Input", Href = DemoRouteConstants.Demos_URL_PasswordInput, IconName = IconName.EyeSlashFill, ParentId = "4" }, new (){ Id = "408", Text = "Radio Input", Href = DemoRouteConstants.Demos_URL_RadioInput, IconName = IconName.RecordCircle, ParentId = "4" }, new (){ Id = "409", Text = "Range Input", Href = DemoRouteConstants.Demos_URL_RangeInput, IconName = IconName.Sliders, ParentId = "4" }, //new (){ Id = "404", Text = "Select Input", Href = DemoRouteConstants.Demos_URL_SelectInput, IconName = IconName.MenuButtonWideFill, ParentId = "4" }, + new (){ Id = "416", Text = "RichTextEditor", Href = DemoRouteConstants.Demos_URL_RichTextEditor, IconName = IconName.Type, ParentId = "4" }, new (){ Id = "410", Text = "Switch", Href = DemoRouteConstants.Demos_URL_Switch, IconName = IconName.ToggleOn, ParentId = "4" }, - 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 = "411", Text = "Text Input", Href = DemoRouteConstants.Demos_URL_TextInput, IconName = IconName.InputCursorText, ParentId = "4" }, new (){ Id = "413", Text = "Time Input", Href = DemoRouteConstants.Demos_URL_TimeInput, IconName = IconName.ClockFill, ParentId = "4" }, - new (){ Id = "416", 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" }, @@ -60,7 +60,7 @@ internal override IEnumerable GetNavItems() new (){ Id = "51304", Text = "Data Binding", Href = DemoRouteConstants.Demos_URL_Grid_DataBinding, IconName = IconName.GridFill, ParentId = "513" }, new (){ Id = "51306", Text = "Detail View", Href = DemoRouteConstants.Demos_URL_Grid_DetailView, IconName = IconName.ListNested, ParentId = "513" }, new (){ Id = "51307", Text = "Events", Href = DemoRouteConstants.Demos_URL_Grid_Events, IconName = IconName.LightningChargeFill, ParentId = "513" }, - new (){ Id = "51307", Text = "Filters", Href = DemoRouteConstants.Demos_URL_Grid_Filters, IconName = IconName.FunnelFill, ParentId = "513" }, + new (){ Id = "51317", Text = "Filters", Href = DemoRouteConstants.Demos_URL_Grid_Filters, IconName = IconName.FunnelFill, ParentId = "513" }, new (){ Id = "51308", Text = "Fixed Header", Href = DemoRouteConstants.Demos_URL_Grid_FixedHeader, IconName = IconName.Table, ParentId = "513" }, new (){ Id = "51309", Text = "Freeze Columns", Href = DemoRouteConstants.Demos_URL_Grid_FreezeColumns, IconName = IconName.LayoutThreeColumns, ParentId = "513" }, new (){ Id = "51310", Text = "Grid Settings", Href = DemoRouteConstants.Demos_URL_Grid_Settings, IconName = IconName.GearFill, ParentId = "513" }, @@ -75,7 +75,7 @@ internal override IEnumerable GetNavItems() #endregion Grid new (){ Id = "514", Text = "Markdown", Href = DemoRouteConstants.Demos_URL_Markdown, IconName = IconName.MarkdownFill, ParentId = "5" }, - new (){ Id = "514", Text = "Modals", Href = DemoRouteConstants.Demos_URL_Modal, IconName = IconName.WindowStack, ParentId = "5" }, + new (){ Id = "5145", Text = "Modals", Href = DemoRouteConstants.Demos_URL_Modal, IconName = IconName.WindowStack, ParentId = "5" }, new (){ Id = "515", Text = "Offcanvas", Href = DemoRouteConstants.Demos_URL_Offcanvas, IconName = IconName.LayoutSidebarReverse, ParentId = "5" }, new (){ Id = "516", Text = "Pagination", Href = DemoRouteConstants.Demos_URL_Pagination, IconName = IconName.ThreeDots, ParentId = "5" }, new (){ Id = "517", Text = "PDF Viewer", Href = DemoRouteConstants.Demos_URL_PDFViewer, IconName = IconName.FilePdfFill, ParentId = "5" }, @@ -86,9 +86,9 @@ internal override IEnumerable GetNavItems() new (){ Id = "522", Text = "Script Loader", Href = DemoRouteConstants.Demos_URL_ScriptLoader, IconName = IconName.CodeSlash, ParentId = "5" }, new (){ Id = "523", Text = "Sidebar", Href = DemoRouteConstants.Demos_URL_Sidebar, IconName = IconName.LayoutSidebar, ParentId = "5" }, new (){ Id = "524", Text = "Sidebar 2", Href = DemoRouteConstants.Demos_URL_Sidebar2, IconName = IconName.ListNested, ParentId = "5" }, - new (){ Id = "5245", Text = "Split View", Href = DemoRouteConstants.Demos_URL_SplitView, IconName = IconName.LayoutSplit, ParentId = "5" }, new (){ Id = "525", Text = "Sortable List", Href = DemoRouteConstants.Demos_URL_SortableList, IconName = IconName.ArrowsMove, ParentId = "5" }, new (){ Id = "526", Text = "Spinner", Href = DemoRouteConstants.Demos_URL_Spinners, IconName = IconName.ArrowRepeat, ParentId = "5" }, + new (){ Id = "5245", Text = "Split View", Href = DemoRouteConstants.Demos_URL_SplitView, IconName = IconName.LayoutSplit, ParentId = "5" }, new (){ Id = "527", Text = "Tabs", Href = DemoRouteConstants.Demos_URL_Tabs, IconName = IconName.WindowPlus, ParentId = "5" }, new (){ Id = "528", Text = "Theme Switcher", Href = DemoRouteConstants.Demos_URL_ThemeSwitcher, IconName = IconName.NintendoSwitch, ParentId = "5" }, new (){ Id = "529", Text = "Toasts", Href = DemoRouteConstants.Demos_URL_Toasts, IconName = IconName.ExclamationTriangleFill, ParentId = "5" }, diff --git a/BlazorBootstrap.Demo.RCL/Components/Layout/DocsMainLayout.razor.cs b/BlazorBootstrap.Demo.RCL/Components/Layout/DocsMainLayout.razor.cs index 1a704d39f..5efd1fb9f 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Layout/DocsMainLayout.razor.cs +++ b/BlazorBootstrap.Demo.RCL/Components/Layout/DocsMainLayout.razor.cs @@ -20,20 +20,20 @@ internal override IEnumerable GetNavItems() new (){ Id = "401", Text = "Checkbox Input", Href = DemoRouteConstants.Docs_URL_CheckboxInput, IconName = IconName.CheckSquareFill, ParentId = "4" }, new (){ Id = "402", Text = "Currency Input", Href = DemoRouteConstants.Docs_URL_CurrencyInput, IconName = IconName.CurrencyDollar, ParentId = "4" }, new (){ Id = "403", Text = "Date Input", Href = DemoRouteConstants.Docs_URL_DateInput, IconName = IconName.CalendarDate, ParentId = "4" }, + new (){ Id = "415", Text = "Drag and Drop File Input", Href = DemoRouteConstants.Docs_URL_DragAndDropFileInput, IconName = IconName.FileEarmarkArrowUp, ParentId = "4" }, new (){ Id = "404", Text = "Enum Input", Href = DemoRouteConstants.Docs_URL_EnumInput, IconName = IconName.MenuButtonWideFill, ParentId = "4" }, new (){ Id = "414", Text = "File Input", Href = DemoRouteConstants.Docs_URL_FileInput, IconName = IconName.FileEarmarkArrowUp, ParentId = "4" }, - new (){ Id = "415", Text = "Drag and Drop File Input", Href = DemoRouteConstants.Docs_URL_DragAndDropFileInput, IconName = IconName.FileEarmarkArrowUp, ParentId = "4" }, new (){ Id = "405", Text = "Number Input", Href = DemoRouteConstants.Docs_URL_NumberInput, IconName = IconName.InputCursor, ParentId = "4" }, new (){ Id = "406", Text = "OTP Input", Href = DemoRouteConstants.Docs_URL_OTPInput, IconName = IconName.Asterisk, ParentId = "4" }, new (){ Id = "407", Text = "Password Input", Href = DemoRouteConstants.Docs_URL_PasswordInput, IconName = IconName.EyeSlashFill, ParentId = "4" }, new (){ Id = "408", Text = "Radio Input", Href = DemoRouteConstants.Docs_URL_RadioInput, IconName = IconName.RecordCircle, ParentId = "4" }, new (){ Id = "409", Text = "Range Input", Href = DemoRouteConstants.Docs_URL_RangeInput, IconName = IconName.Sliders, ParentId = "4" }, //new (){ Id = "404", Text = "Select Input", Href = DemoRouteConstants.Docs_URL_SelectInput, IconName = IconName.MenuButtonWideFill, ParentId = "4" }, + new (){ Id = "416", Text = "RichTextEditor", Href = DemoRouteConstants.Docs_URL_RichTextEditor, IconName = IconName.Type, ParentId = "4" }, new (){ Id = "410", Text = "Switch", Href = DemoRouteConstants.Docs_URL_Switch, IconName = IconName.ToggleOn, ParentId = "4" }, - 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 = "411", Text = "Text Input", Href = DemoRouteConstants.Docs_URL_TextInput, IconName = IconName.InputCursorText, ParentId = "4" }, new (){ Id = "413", Text = "Time Input", Href = DemoRouteConstants.Docs_URL_TimeInput, IconName = IconName.ClockFill, ParentId = "4" }, - new (){ Id = "416", 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" }, @@ -50,7 +50,7 @@ internal override IEnumerable GetNavItems() new (){ Id = "512", Text = "Google Map", Href = DemoRouteConstants.Docs_URL_GoogleMap, IconName = IconName.Map, ParentId = "5" }, new (){ Id = "513", Text = "Grid", Href = DemoRouteConstants.Docs_URL_Grid, IconName = IconName.Grid, ParentId = "5" }, new (){ Id = "514", Text = "Markdown", Href = DemoRouteConstants.Docs_URL_Markdown, IconName = IconName.MarkdownFill, ParentId = "5" }, - new (){ Id = "514", Text = "Modals", Href = DemoRouteConstants.Docs_URL_Modal, IconName = IconName.WindowStack, ParentId = "5" }, + new (){ Id = "5145", Text = "Modals", Href = DemoRouteConstants.Docs_URL_Modal, IconName = IconName.WindowStack, ParentId = "5" }, new (){ Id = "515", Text = "Offcanvas", Href = DemoRouteConstants.Docs_URL_Offcanvas, IconName = IconName.LayoutSidebarReverse, ParentId = "5" }, new (){ Id = "516", Text = "Pagination", Href = DemoRouteConstants.Docs_URL_Pagination, IconName = IconName.ThreeDots, ParentId = "5" }, new (){ Id = "517", Text = "PDF Viewer", Href = DemoRouteConstants.Docs_URL_PDFViewer, IconName = IconName.FilePdfFill, ParentId = "5" }, @@ -61,9 +61,9 @@ internal override IEnumerable GetNavItems() new (){ Id = "522", Text = "Script Loader", Href = DemoRouteConstants.Docs_URL_ScriptLoader, IconName = IconName.CodeSlash, ParentId = "5" }, new (){ Id = "523", Text = "Sidebar", Href = DemoRouteConstants.Docs_URL_Sidebar, IconName = IconName.LayoutSidebar, ParentId = "5" }, new (){ Id = "524", Text = "Sidebar 2", Href = DemoRouteConstants.Docs_URL_Sidebar2, IconName = IconName.ListNested, ParentId = "5" }, - new (){ Id = "5245", Text = "Split View", Href = DemoRouteConstants.Docs_URL_SplitView, IconName = IconName.LayoutSplit, ParentId = "5" }, new (){ Id = "525", Text = "Sortable List", Href = DemoRouteConstants.Docs_URL_SortableList, IconName = IconName.ArrowsMove, ParentId = "5" }, new (){ Id = "526", Text = "Spinner", Href = DemoRouteConstants.Docs_URL_Spinners, IconName = IconName.ArrowRepeat, ParentId = "5" }, + new (){ Id = "5245", Text = "Split View", Href = DemoRouteConstants.Docs_URL_SplitView, IconName = IconName.LayoutSplit, ParentId = "5" }, new (){ Id = "527", Text = "Tabs", Href = DemoRouteConstants.Docs_URL_Tabs, IconName = IconName.WindowPlus, ParentId = "5" }, new (){ Id = "528", Text = "Theme Switcher", Href = DemoRouteConstants.Docs_URL_ThemeSwitcher, IconName = IconName.NintendoSwitch, ParentId = "5" }, new (){ Id = "529", Text = "Toasts", Href = DemoRouteConstants.Docs_URL_Toasts, IconName = IconName.ExclamationTriangleFill, ParentId = "5" }, diff --git a/BlazorBootstrap.Demo.RCL/Components/Layout/EmptyLayout.razor b/BlazorBootstrap.Demo.RCL/Components/Layout/EmptyLayout.razor index f643d9047..769a47ffd 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Layout/EmptyLayout.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Layout/EmptyLayout.razor @@ -31,7 +31,7 @@
diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/SplitView/SplitViewDocumentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/SplitView/SplitViewDocumentation.razor index df6b46b19..ee8e951e4 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/SplitView/SplitViewDocumentation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/SplitView/SplitViewDocumentation.razor @@ -89,7 +89,7 @@
- SplitView supports nested layouts, enabling IDE-style and dashboard-style workspaces. + SplitView supports nested layouts for IDE-style, dashboard-style, and app-shell workspaces with navigation, content, and inspector panes.
diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/DragAndDropFileInput/DragAndDropFileInput_Doc_01_Documentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/DragAndDropFileInput/DragAndDropFileInput_Doc_01_Documentation.razor index 2dfc38b51..0a6a85ca7 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/DragAndDropFileInput/DragAndDropFileInput_Doc_01_Documentation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/DragAndDropFileInput/DragAndDropFileInput_Doc_01_Documentation.razor @@ -25,5 +25,5 @@ private const string pageDescription = $"This documentation provides a comprehensive reference for the {componentName} 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."; - private const string imageUrl = DemoScreenshotSrcConstants.Demos_URL_Forms_Prefix; + private const string imageUrl = DemoScreenshotSrcConstants.Demos_URL_DragAndDropFileInput; } diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/FileInput/FileInput_Doc_01_Documentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/FileInput/FileInput_Doc_01_Documentation.razor index d272d3d6c..e98cca97f 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/FileInput/FileInput_Doc_01_Documentation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/FileInput/FileInput_Doc_01_Documentation.razor @@ -25,5 +25,5 @@ private const string pageDescription = $"This documentation provides a comprehensive reference for the {componentName} 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."; - private const string imageUrl = DemoScreenshotSrcConstants.Demos_URL_Forms_Prefix; + private const string imageUrl = DemoScreenshotSrcConstants.Demos_URL_FileInput; } diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/OTPInput/OTPInput_Doc_01_Documentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/OTPInput/OTPInput_Doc_01_Documentation.razor index 1efb8d2cc..277421558 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/OTPInput/OTPInput_Doc_01_Documentation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/OTPInput/OTPInput_Doc_01_Documentation.razor @@ -33,5 +33,5 @@ private const string pageDescription = $"This documentation provides a comprehensive reference for the {componentName} 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."; - private const string imageUrl = DemoScreenshotSrcConstants.Demos_URL_NumberInput; + private const string imageUrl = DemoScreenshotSrcConstants.Demos_URL_OTPInput; } \ No newline at end of file diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/RichTextEditor/RichTextEditor_Doc_01_Documentation.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/RichTextEditor/RichTextEditor_Doc_01_Documentation.razor index 7341e8ee5..04d47ff1c 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/RichTextEditor/RichTextEditor_Doc_01_Documentation.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Docs/Form/RichTextEditor/RichTextEditor_Doc_01_Documentation.razor @@ -5,7 +5,8 @@ PageTitle="@componentName" PageDescription="@pageDescription" MetaTitle="@metaTitle" - MetaDescription="@metaDescription" /> + MetaDescription="@metaDescription" + ImageUrl="@imageUrl" /> @@ -26,4 +27,5 @@ private const string pageDescription = $"This documentation provides a comprehensive reference for the {componentName} 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."; + private const string imageUrl = DemoScreenshotSrcConstants.Demos_URL_RichTextEditor; } diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxEventCallbackRow.razor.cs b/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxEventCallbackRow.razor.cs index 077b0283a..5e2b27c9a 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxEventCallbackRow.razor.cs +++ b/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxEventCallbackRow.razor.cs @@ -6,7 +6,7 @@ /// public partial class DocxEventCallbackRow : BlazorBootstrapComponentBase { - private string AddedVersion => PropertyInfo.GetPropertyAddedVersion(); + private string AddedVersion => PropertyInfo.GetPropertyAddedVersion(VersionContextType); private string Description => PropertyInfo.GetPropertyDescription(); @@ -16,4 +16,7 @@ public partial class DocxEventCallbackRow : BlazorBootstrapComponentBase [Parameter] public PropertyInfo PropertyInfo { get; set; } = default!; + [Parameter] + public Type? VersionContextType { get; set; } + } diff --git a/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxTable.razor b/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxTable.razor index 4a2a0f45b..f422166d3 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxTable.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Shared/DocxTable/DocxTable.razor @@ -20,7 +20,7 @@ @foreach (var propertyInfo in typeof(TItem).GetComponentParametersOnly()) { - + } @@ -64,7 +64,7 @@ @foreach (var methodInfo in typeof(TItem).GetComponentMethods()) { - + } @@ -85,7 +85,7 @@ @foreach (var propertyInfo in typeof(TItem).GetComponentEventCallbacks()) { - + } diff --git a/BlazorBootstrap.Demo.RCL/Constants/DemoScreenshotSrcConstants.cs b/BlazorBootstrap.Demo.RCL/Constants/DemoScreenshotSrcConstants.cs index 127097a7b..1a06c1222 100644 --- a/BlazorBootstrap.Demo.RCL/Constants/DemoScreenshotSrcConstants.cs +++ b/BlazorBootstrap.Demo.RCL/Constants/DemoScreenshotSrcConstants.cs @@ -23,12 +23,15 @@ public class DemoScreenshotSrcConstants public const string Demos_URL_CurrencyInput = DemoScreenshotSrcPrefix + "currency-input.png"; public const string Demos_URL_DateInput = DemoScreenshotSrcPrefix + "date-input.png"; public const string Demos_URL_EnumInput = DemoScreenshotSrcPrefix + "enum-input.png"; // TODO: pending + public const string Demos_URL_DragAndDropFileInput = DemoScreenshotSrcPrefix + "drag-and-drop-file-input.png"; public const string Demos_URL_NumberInput = DemoScreenshotSrcPrefix + "number-input.png"; + public const string Demos_URL_FileInput = DemoScreenshotSrcPrefix + "file-input.png"; public const string Demos_URL_OTPInput = DemoScreenshotSrcPrefix + "otp-input.png"; public const string Demos_URL_PasswordInput = DemoScreenshotSrcPrefix + "password-input.png"; public const string Demos_URL_RadioInput = DemoScreenshotSrcPrefix + "radio-input.png"; public const string Demos_URL_RangeInput = DemoScreenshotSrcPrefix + "range-input.png"; public const string Demos_URL_SelectInput = DemoScreenshotSrcPrefix + "select-input.png"; + public const string Demos_URL_RichTextEditor = DemoScreenshotSrcPrefix + "rich-text-editor.png"; public const string Demos_URL_Switch = DemoScreenshotSrcPrefix + "switch.png"; public const string Demos_URL_TextAreaInput = DemoScreenshotSrcPrefix + "textarea-input.png"; public const string Demos_URL_TextInput = DemoScreenshotSrcPrefix + "text-input.png"; diff --git a/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/drag-and-drop-file-input.png b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/drag-and-drop-file-input.png new file mode 100644 index 000000000..1e6c110b9 Binary files /dev/null and b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/drag-and-drop-file-input.png differ diff --git a/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/enum-input.png b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/enum-input.png new file mode 100644 index 000000000..c6695200b Binary files /dev/null and b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/enum-input.png differ diff --git a/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/file-input.png b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/file-input.png new file mode 100644 index 000000000..a4f35123d Binary files /dev/null and b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/file-input.png differ diff --git a/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/otp-input.png b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/otp-input.png new file mode 100644 index 000000000..8b5ce98e2 Binary files /dev/null and b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/otp-input.png differ diff --git a/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/rich-text-editor.png b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/rich-text-editor.png new file mode 100644 index 000000000..8360c9f60 Binary files /dev/null and b/BlazorBootstrap.Demo.RCL/wwwroot/images/screenshots/rich-text-editor.png differ diff --git a/BlazorBootstrap.Demo.Server/appsettings.json b/BlazorBootstrap.Demo.Server/appsettings.json index 7fb755b41..1c0f9ddcf 100644 --- a/BlazorBootstrap.Demo.Server/appsettings.json +++ b/BlazorBootstrap.Demo.Server/appsettings.json @@ -13,7 +13,7 @@ "urls": { "demos": "/demos/getting-started", "docs": "/docs/getting-started", - "blog": "/blog", + "blog": "https://docs.blazorbootstrap.com/blog", "github": "//github.com/vikramlearning/blazorbootstrap", "twitter": "//twitter.com/blazorbootstrap", "linkedin": "//www.linkedin.com/groups/14161025", diff --git a/BlazorBootstrap.Demo.WebAssembly/wwwroot/appsettings.json b/BlazorBootstrap.Demo.WebAssembly/wwwroot/appsettings.json index cc4a5819f..948bded28 100644 --- a/BlazorBootstrap.Demo.WebAssembly/wwwroot/appsettings.json +++ b/BlazorBootstrap.Demo.WebAssembly/wwwroot/appsettings.json @@ -6,7 +6,7 @@ "urls": { "demos": "/demos/getting-started", "docs": "/docs/getting-started", - "blog": "/blog", + "blog": "https://docs.blazorbootstrap.com/blog", "github": "//github.com/vikramlearning/blazorbootstrap", "twitter": "//twitter.com/blazorbootstrap", "linkedin": "//www.linkedin.com/groups/14161025", diff --git a/README.md b/README.md index 0d2da0782..70be7174b 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,9 @@ This is a breaking change for existing chart users: install `BlazorExpress.Chart | Currency Input | [Docs](https://docs.blazorbootstrap.com/forms/currency-input) | [Demos](https://demos.blazorbootstrap.com/form/currency-input) | | Date Input | [Docs](https://docs.blazorbootstrap.com/forms/date-input) | [Demos](https://demos.blazorbootstrap.com/form/date-input) | | Dropdown | [Docs](https://docs.blazorbootstrap.com/components/dropdown) | [Demos](https://demos.blazorbootstrap.com/dropdown) | +| DragAndDropFileInput | [Docs](https://docs.blazorbootstrap.com/forms/drag-and-drop-file-input) | [Demos](https://demos.blazorbootstrap.com/demos/form/drag-and-drop-file-input) | | Enum Input| [Docs](https://docs.blazorbootstrap.com/forms/enum-input) | [Demos](https://demos.blazorbootstrap.com//form/enum-input) | +| FileInput | [Docs](https://docs.blazorbootstrap.com/forms/file-input) | [Demos](https://demos.blazorbootstrap.com/demos/form/file-input) | | Google Map | [Docs](https://docs.blazorbootstrap.com/components/google-map) | [Demos](https://demos.blazorbootstrap.com/google-map) | | Grid | [Docs](https://docs.blazorbootstrap.com/components/grid) | [Demos](https://demos.blazorbootstrap.com/grid) | | Icons | [Docs](https://docs.blazorbootstrap.com/content/icons) | [Demos](https://demos.blazorbootstrap.com/icons) | @@ -83,6 +85,7 @@ This is a breaking change for existing chart users: install `BlazorExpress.Chart | Markdown | [Docs](https://docs.blazorbootstrap.com/content/markdown) | [Demos](https://demos.blazorbootstrap.com/markdown) | | Modals | [Docs](https://docs.blazorbootstrap.com/components/modal) | [Demos](https://demos.blazorbootstrap.com/modals) | | Number Input | [Docs](https://docs.blazorbootstrap.com/forms/number-input) | [Demos](https://demos.blazorbootstrap.com/form/number-input) | +| OTPInput | [Docs](https://docs.blazorbootstrap.com/forms/otp-input) | [Demos](https://demos.blazorbootstrap.com/demos/form/otp-input) | | Offcanvas | [Docs](https://docs.blazorbootstrap.com/components/offcanvas) | [Demos](https://demos.blazorbootstrap.com/offcanvas) | | Pagination | [Docs](https://docs.blazorbootstrap.com/components/pagination) | [Demos](https://demos.blazorbootstrap.com/pagination) | | Password Input | [Docs](https://docs.blazorbootstrap.com/forms/password-input) | [Demos](https://demos.blazorbootstrap.com/form/password-input) | @@ -92,10 +95,12 @@ This is a breaking change for existing chart users: install `BlazorExpress.Chart | Progress | [Docs](https://docs.blazorbootstrap.com/components/progress) | [Demos](https://demos.blazorbootstrap.com/progress) | | Radio Input | [Docs](https://docs.blazorbootstrap.com/forms/radio-input) | [Demos](https://demos.blazorbootstrap.com/form/radio-input) | | RangeInput | [Docs](https://docs.blazorbootstrap.com/forms/range-input) | [Demos](https://demos.blazorbootstrap.com/form/range-input) | +| RichTextEditor | [Docs](https://docs.blazorbootstrap.com/forms/rich-text-editor) | [Demos](https://demos.blazorbootstrap.com/demos/form/rich-text-editor) | | Ribbon | [Docs](https://docs.blazorbootstrap.com/components/ribbon) | [Demos](https://demos.blazorbootstrap.com/ribbon) | | Script Loader | [Docs](https://docs.blazorbootstrap.com/components/script-loader) | [Demos](https://demos.blazorbootstrap.com/script-loader) | | Sidebar | [Docs](https://docs.blazorbootstrap.com/components/sidebar) | [Demos](https://demos.blazorbootstrap.com/sidebar) | | Sidebar2 | [Docs](https://docs.blazorbootstrap.com/components/sidebar2) | [Demos](https://demos.blazorbootstrap.com/sidebar2) | +| SplitView | [Docs](https://docs.blazorbootstrap.com/components/split-view) | [Demos](https://demos.blazorbootstrap.com/demos/split-view) | | Sortable List | [Docs](https://docs.blazorbootstrap.com/components/sortable-list) | [Demos](https://demos.blazorbootstrap.com/sortable-list) | | Spinners | [Docs](https://docs.blazorbootstrap.com/components/spinners) | [Demos](https://demos.blazorbootstrap.com/spinners) | | Switch | [Docs](https://docs.blazorbootstrap.com/forms/switch) | [Demos](https://demos.blazorbootstrap.com/form/switch) | @@ -157,12 +162,18 @@ Blazor Bootstrap's documentation, which is included in this repository's root di ### Blazor Bootstrap - Date Input ![Blazor Bootstrap - Date Input](https://i.imgur.com/1mVjqQv.png "Blazor Bootstrap - Date Input") +### Blazor Bootstrap - DragAndDropFileInput +![Blazor Bootstrap - DragAndDropFileInput](https://demos.blazorbootstrap.com/_content/BlazorBootstrap.Demo.RCL/images/screenshots/drag-and-drop-file-input.png "Blazor Bootstrap - DragAndDropFileInput") + ### Blazor Bootstrap - Dropdown ![Blazor Bootstrap - Dropdown](https://i.imgur.com/beAr31J.png "Blazor Bootstrap - Dropdown") ### Blazor Bootstrap - Enum Input ![Blazor Bootstrap - Enum Input](https://private-user-images.githubusercontent.com/2337067/517874250-8a624590-1dfc-470a-8f9d-7636851d6c95.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjM5MjAxNzEsIm5iZiI6MTc2MzkxOTg3MSwicGF0aCI6Ii8yMzM3MDY3LzUxNzg3NDI1MC04YTYyNDU5MC0xZGZjLTQ3MGEtOGY5ZC03NjM2ODUxZDZjOTUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MTEyMyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTExMjNUMTc0NDMxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZmVlNDlmZDZkNGQ5ZWUxMjE5MGM3NmEzMzc2OTdhYzk0MjY4YTU3NTk5M2JmMGIxNDNkYjI0ZWYyM2UwMDA5YyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.hvU9-57w9n41vwE3eyy3ZcDPDYXbQ3p_JW1RmDmT-c8 "Blazor Bootstrap - Enum Input") +### Blazor Bootstrap - FileInput +![Blazor Bootstrap - FileInput](https://demos.blazorbootstrap.com/_content/BlazorBootstrap.Demo.RCL/images/screenshots/file-input.png "Blazor Bootstrap - FileInput") + ### Blazor Bootstrap - Google Map ![Blazor Bootstrap - Google Map](https://i.imgur.com/AbyDP51.png "Blazor Bootstrap - Google Map") @@ -184,6 +195,9 @@ Blazor Bootstrap's documentation, which is included in this repository's root di ### Blazor Bootstrap - Number Input ![Blazor Bootstrap - Number Input](https://i.imgur.com/iUNBkki.png "Blazor Bootstrap - Number Input") +### Blazor Bootstrap - OTPInput +![Blazor Bootstrap - OTPInput](https://demos.blazorbootstrap.com/_content/BlazorBootstrap.Demo.RCL/images/screenshots/otp-input.png "Blazor Bootstrap - OTPInput") + ### Blazor Bootstrap - Offcanvas ![Blazor Bootstrap - Offcanvas](https://i.imgur.com/1vNz5Ci.jpg "Blazor Bootstrap - Offcanvas") @@ -211,6 +225,9 @@ Blazor Bootstrap's documentation, which is included in this repository's root di ### Blazor Bootstrap - Range Input ![Blazor Bootstrap - Range Input](https://i.imgur.com/rWDDHaf.png "Blazor Bootstrap - Range Input") +### Blazor Bootstrap - RichTextEditor +![Blazor Bootstrap - RichTextEditor](https://demos.blazorbootstrap.com/_content/BlazorBootstrap.Demo.RCL/images/screenshots/rich-text-editor.png "Blazor Bootstrap - RichTextEditor") + ### Blazor Bootstrap - Ribbon ![Blazor Bootstrap - Ribbon](https://i.imgur.com/LpZVLbF.png "Blazor Bootstrap - Ribbon") @@ -223,6 +240,9 @@ Blazor Bootstrap's documentation, which is included in this repository's root di ### Blazor Bootstrap - Sidebar2 ![Blazor Bootstrap - Sidebar2](https://i.imgur.com/HUP7ydv.png "Blazor Bootstrap - Sidebar2") +### Blazor Bootstrap - SplitView +![Blazor Bootstrap - SplitView](https://demos.blazorbootstrap.com/_content/BlazorBootstrap.Demo.RCL/images/screenshots/split-view.png "Blazor Bootstrap - SplitView") + ### Blazor Bootstrap - Sortable List ![Blazor Bootstrap - Sortable List](https://i.imgur.com/bfzP8Yi.png "Blazor Bootstrap - Sortable List") diff --git a/blazorbootstrap/Components/Form/AutoComplete/AutoComplete.razor.cs b/blazorbootstrap/Components/Form/AutoComplete/AutoComplete.razor.cs index c549d569e..91a0e45d0 100644 --- a/blazorbootstrap/Components/Form/AutoComplete/AutoComplete.razor.cs +++ b/blazorbootstrap/Components/Form/AutoComplete/AutoComplete.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("1.0.0")] public partial class AutoComplete : BlazorBootstrapComponentBase { #region Fields and Constants @@ -70,6 +71,11 @@ protected override async Task OnInitializedAsync() await base.OnInitializedAsync(); } + /// + /// Handles the autocomplete dropdown hidden notification from JavaScript. + /// + [AddedVersion("1.0.0")] + [Description("Handles the autocomplete dropdown hidden notification from JavaScript.")] [JSInvokable] public void bsHiddenAutocomplete() { @@ -84,12 +90,27 @@ public void bsHiddenAutocomplete() } } + /// + /// Handles the autocomplete dropdown hide notification from JavaScript. + /// + [AddedVersion("1.0.0")] + [Description("Handles the autocomplete dropdown hide notification from JavaScript.")] [JSInvokable] public void bsHideAutocomplete() { } + /// + /// Handles the autocomplete dropdown show notification from JavaScript. + /// + [AddedVersion("1.0.0")] + [Description("Handles the autocomplete dropdown show notification from JavaScript.")] [JSInvokable] public void bsShowAutocomplete() { } + /// + /// Handles the autocomplete dropdown shown notification from JavaScript. + /// + [AddedVersion("1.0.0")] + [Description("Handles the autocomplete dropdown shown notification from JavaScript.")] [JSInvokable] public void bsShownAutocomplete() { } @@ -97,14 +118,14 @@ public void bsShownAutocomplete() { } /// Disables autocomplete. /// [AddedVersion("1.0.0")] - [Description("Disables autocomplete.")] + [Description("Disables the autocomplete input so users cannot search or change its value.")] public void Disable() => Disabled = true; /// /// Enables autocomplete. /// [AddedVersion("1.0.0")] - [Description("Enables autocomplete.")] + [Description("Enables the autocomplete input so users can search and select a value.")] public void Enable() => Disabled = false; /// @@ -112,14 +133,14 @@ public void bsShownAutocomplete() { } /// /// Task [AddedVersion("1.0.0")] - [Description("Refresh the autocomplete data.")] + [Description("Refreshes the autocomplete results using the current input value and data provider.")] public async Task RefreshDataAsync() => await FilterDataAsync(); /// /// Resets the autocomplete selection. /// [AddedVersion("1.0.0")] - [Description("Resets the autocomplete selection.")] + [Description("Clears the input and selected item, then notifies bound values and the change callback.")] public async Task ResetAsync() => await ClearInputTextAsync(); /// @@ -235,7 +256,7 @@ private async Task OnInputChangedAsync(ChangeEventArgs args) cancellationTokenSource = new CancellationTokenSource(); var token = cancellationTokenSource.Token; - await Task.Delay(300, token); // 300ms timeout for the debouncing + await Task.Delay(300, token); // 300ms timeout for the debouncing await FilterDataAsync(token); closeButton?.HideLoading(); @@ -308,7 +329,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(null)] - [Description("Gets or sets the data provider.")] + [Description("Gets or sets the delegate used to retrieve autocomplete results for the current filter.")] [EditorRequired] [Parameter] public AutoCompleteDataProviderDelegate? DataProvider { get; set; } @@ -333,11 +354,11 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(false)] - [Description("Gets or sets the disabled state.")] + [Description("Gets or sets whether the autocomplete input is disabled. When true, users cannot search or select a value.")] [Parameter] public bool Disabled { get; set; } - [CascadingParameter] + [CascadingParameter] private EditContext EditContext { get; set; } = default!; /// @@ -348,7 +369,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue("No records found.")] - [Description("Gets or sets the empty text.")] + [Description("Gets or sets the message displayed when the data provider returns no matching results.")] [Parameter] public string EmptyText { get; set; } = "No records found."; @@ -362,7 +383,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue("Loading...")] - [Description("Gets or sets the loading text.")] + [Description("Gets or sets the message displayed while autocomplete results are loading.")] [Parameter] public string LoadingText { get; set; } = "Loading..."; @@ -370,7 +391,7 @@ private async Task ShowAsync() /// This event fires immediately when the autocomplete selection changes by the user. /// [AddedVersion("1.0.0")] - [Description("This event fires immediately when the autocomplete selection changes by the user.")] + [Description("Fires after a user selects an autocomplete item and supplies the selected item.")] [Parameter] public EventCallback OnChanged { get; set; } @@ -382,7 +403,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(null)] - [Description("Gets or sets the placeholder.")] + [Description("Gets or sets placeholder text displayed when the autocomplete input has no value.")] [Parameter] public string? Placeholder { get; set; } @@ -394,7 +415,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(null)] - [Description("Gets or sets the property name.")] + [Description("Gets or sets the TItem property whose text is shown and filtered in the autocomplete input.")] [EditorRequired] [Parameter] public string? PropertyName { get; set; } @@ -404,7 +425,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(null)] - [Description("Gets selected item.")] + [Description("Gets the item most recently selected by the user, or null when no item is selected.")] public TItem? SelectedItem => selectedItem; /// @@ -415,7 +436,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(AutoCompleteSize.Default)] - [Description("Gets or sets the autocomplete size.")] + [Description("Gets or sets the Bootstrap size of the autocomplete input.")] [Parameter] public AutoCompleteSize Size { get; set; } = AutoCompleteSize.Default; @@ -427,7 +448,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(StringComparison.OrdinalIgnoreCase)] - [Description("Gets or sets the StringComparison.")] + [Description("Gets or sets the string-comparison rule used when filtering results.")] [Parameter] public StringComparison StringComparison { get; set; } = StringComparison.OrdinalIgnoreCase; @@ -439,7 +460,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(StringFilterOperator.Contains)] - [Description("Gets or sets the string filter operator.")] + [Description("Gets or sets the operator used to match the input text against PropertyName.")] [Parameter] public StringFilterOperator StringFilterOperator { get; set; } = StringFilterOperator.Contains; @@ -451,7 +472,7 @@ private async Task ShowAsync() /// [AddedVersion("1.0.0")] [DefaultValue(null)] - [Description("Gets or sets the value.")] + [Description("Gets or sets the current text value bound to the autocomplete input.")] [Parameter] public string? Value { get; set; } @@ -459,17 +480,20 @@ private async Task ShowAsync() /// This is event fires on every user keystroke that changes the textbox value. /// [AddedVersion("1.0.0")] - [Description("This is event fires on every user keystroke that changes the textbox value.")] + [Description("Fires whenever user input changes the autocomplete text value, including changes produced by typing.")] [Parameter] public EventCallback ValueChanged { get; set; } /// /// Gets or sets the value expression. /// + /// + /// Default value is . + /// [AddedVersion("1.0.0")] [DefaultValue(null)] - [Description("Gets or sets the value expression.")] - [Parameter] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] public Expression>? ValueExpression { get; set; } #endregion diff --git a/blazorbootstrap/Components/Form/CheckboxInput/CheckboxInput.razor.cs b/blazorbootstrap/Components/Form/CheckboxInput/CheckboxInput.razor.cs index 0c9588f8a..dd103654c 100644 --- a/blazorbootstrap/Components/Form/CheckboxInput/CheckboxInput.razor.cs +++ b/blazorbootstrap/Components/Form/CheckboxInput/CheckboxInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("3.3.0")] public partial class CheckboxInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -20,13 +21,17 @@ protected override void OnInitialized() } /// - /// Disables checkbox input. + /// Disables the checkbox so users cannot change its value. /// + [AddedVersion("3.3.0")] + [Description("Disables the checkbox so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables checkbox input. + /// Enables the checkbox so users can change its value. /// + [AddedVersion("3.3.0")] + [Description("Enables the checkbox so users can change its value.")] public void Enable() => Disabled = false; private async Task OnChange(ChangeEventArgs e) @@ -51,11 +56,14 @@ private async Task OnChange(ChangeEventArgs e) ); /// - /// Gets or sets the disabled state. + /// Gets or sets whether the checkbox is disabled. /// /// /// Default value is false. /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the checkbox is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } @@ -68,22 +76,46 @@ private async Task OnChange(ChangeEventArgs e) /// /// Gets or sets the label. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the label displayed next to the checkbox.")] [Parameter] public string? Label { get; set; } /// /// Gets or sets the value. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets the current checked value bound to the checkbox.")] [Parameter] public bool Value { get; set; } /// /// This event fires when the value changes. /// + [AddedVersion("3.3.0")] + [Description("Fires whenever user interaction changes the checked value.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets an expression that identifies the bound value. + /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs b/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs index 08d993584..7db328183 100644 --- a/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs +++ b/blazorbootstrap/Components/Form/CurrencyInput/CurrencyInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("1.0.0")] public partial class CurrencyInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -93,11 +94,15 @@ protected override async Task OnParametersSetAsync() /// /// Disables currency input. /// + [AddedVersion("1.0.0")] + [Description("Disables the currency input so users cannot change its value.")] public void Disable() => Disabled = true; /// /// Enables currency input. /// + [AddedVersion("1.0.0")] + [Description("Enables the currency input so users can change its value.")] public void Enable() => Disabled = false; private string ExtractValue(object value, CultureInfo cultureInfo) @@ -405,6 +410,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [DefaultValue(false)] + [Description("Gets or sets whether users can enter negative currency values. When false, negative input is rejected during parsing.")] [Parameter] public bool AllowNegativeNumbers { get; set; } @@ -416,6 +424,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [DefaultValue(false)] + [Description("Gets or sets whether browser autocomplete is enabled. When true, the browser may offer saved values for the input.")] [Parameter] public bool AutoComplete { get; set; } @@ -425,6 +436,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is . /// + [AddedVersion("1.0.0")] + [DefaultValue(CurrencySign.Standard)] + [Description("Gets or sets how the currency sign is displayed when the value is formatted.")] [Parameter] public CurrencySign CurrencySign { get; set; } = CurrencySign.Standard; @@ -434,10 +448,15 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the input is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } + [AddedVersion("1.0.0")] [CascadingParameter] private EditContext EditContext { get; set; } = default!; + [DefaultValue(false)] /// /// Determines whether to restrict the user input to Min and Max range. @@ -446,17 +465,22 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [Description("Gets or sets whether input is restricted to the configured minimum and maximum values. When true, values outside the range are rejected.")] [Parameter] public bool EnableMinMax { get; set; } private string fieldCssClasses => EditContext?.FieldCssClass(fieldIdentifier) ?? ""; /// - /// Determines whether to hide the currency symbol are not. + /// Gets or sets whether the currency symbol is hidden. /// /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the currency symbol is hidden. When true, formatting omits the symbol while retaining the numeric value.")] [Parameter] public bool HideCurrencySymbol { get; set; } @@ -466,14 +490,18 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is 'en-US'. /// + [AddedVersion("1.0.0")] + [DefaultValue("en-US")] + [Description("Gets or sets the culture name used to format the currency value. It controls decimal separators, grouping, and currency conventions.")] [Parameter] - //[EditorRequired] public string Locale { get; set; } = "en-US"; /// /// Gets or sets the max. /// Max ignored if EnableMinMax="false". /// + [AddedVersion("1.0.0")] + [Description("Gets or sets the maximum permitted value. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Max { get; set; } = default!; @@ -483,6 +511,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is null. /// + [AddedVersion("1.0.0")] + [DefaultValue(null)] + [Description("Gets or sets the maximum number of fraction digits used when formatting the value. Null uses the culture default.")] [Parameter] public byte? MaximumFractionDigits { get; set; } @@ -490,6 +521,8 @@ private bool TryParseValue(object value, out TValue newValue) /// Gets or sets the min. /// Min ignored if EnableMinMax="false". /// + [AddedVersion("1.0.0")] + [Description("Gets or sets the minimum permitted value. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Min { get; set; } = default!; @@ -499,6 +532,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is null. /// + [AddedVersion("1.0.0")] + [DefaultValue(null)] + [Description("Gets or sets the minimum number of fraction digits used when formatting the value. Null uses the culture default.")] [Parameter] public byte? MinimumFractionDigits { get; set; } @@ -509,6 +545,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is 1. /// + [AddedVersion("1.0.0")] + [DefaultValue(1)] + [Description("Gets or sets the minimum number of integer digits used when formatting. Values with fewer digits are left-padded with zeros.")] [Parameter] public byte MinimumIntegerDigits { get; set; } = 1; @@ -518,6 +557,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is null. /// + [AddedVersion("1.0.0")] + [DefaultValue(null)] + [Description("Gets or sets placeholder text displayed when the input has no value.")] [Parameter] public string? Placeholder { get; set; } @@ -527,22 +569,39 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is . /// + [AddedVersion("1.0.0")] + [DefaultValue(Alignment.None)] + [Description("Gets or sets the horizontal alignment of the formatted input value.")] [Parameter] public Alignment TextAlignment { get; set; } = Alignment.None; /// /// Gets or sets the value. /// + [AddedVersion("1.0.0")] + [Description("Gets or sets the current currency value bound to the input.")] [Parameter] public TValue Value { get; set; } = default!; /// /// This event fired on every user keystroke that changes the CurrencyInput value. /// + [AddedVersion("1.0.0")] + [Description("Fires whenever user input changes the currency value, including changes produced by typing.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets an expression that identifies the bound value. + /// + /// + /// Default value is . + /// + [AddedVersion("1.0.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs b/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs index 2c24410c5..8952d080b 100644 --- a/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs +++ b/blazorbootstrap/Components/Form/DateInput/DateInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("1.5.0")] public partial class DateInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -116,13 +117,17 @@ protected override async Task OnParametersSetAsync() } /// - /// Disables currency input. + /// Disables the date input so users cannot change its value. /// + [AddedVersion("1.5.0")] + [Description("Disables the date input so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables currency input. + /// Enables the date input so users can change its value. /// + [AddedVersion("1.5.0")] + [Description("Enables the date input so users can change its value.")] public void Enable() => Disabled = false; private string GetFormattedValue(object value) @@ -286,75 +291,102 @@ private bool TryParseValue(object value, out TValue newValue) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If , DateInput can complete the values automatically by the browser. + /// Gets or sets whether browser autocomplete is enabled for the date input. /// /// /// Default value is false. /// + [AddedVersion("1.5.0")] + [DefaultValue(false)] + [Description("Gets or sets whether browser autocomplete is enabled. When true, the browser may offer saved dates for the input.")] [Parameter] public bool AutoComplete { get; set; } /// - /// Gets or sets the disabled state. + /// Gets or sets whether the date input is disabled. /// /// /// Default value is false. /// + [AddedVersion("1.5.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the date input is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } - [CascadingParameter] private EditContext EditContext { get; set; } = default!; + [AddedVersion("1.5.0")] + [DefaultValue(false)] + [CascadingParameter] + private EditContext EditContext { get; set; } = default!; /// - /// Determines whether to restrict the user input to Min and Max range. - /// If , restricts the user input between the Min and Max range. Else accepts the user input. + /// Gets or sets whether input is restricted to the configured minimum and maximum dates. + /// /// /// /// Default value is false. /// + [Description("Gets or sets whether input is restricted to the configured minimum and maximum dates. When true, dates outside the range are rejected.")] [Parameter] public bool EnableMinMax { get; set; } private string fieldCssClasses => EditContext?.FieldCssClass(fieldIdentifier) ?? ""; /// - /// Gets or sets the max. - /// Allowed format is yyyy-mm-dd. + /// Gets or sets the maximum permitted date. + /// /// + [AddedVersion("1.5.0")] + [Description("Gets or sets the maximum permitted date. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Max { get; set; } = default!; /// - /// Gets or sets the min. - /// Allowed format is yyyy-mm-dd. + /// Gets or sets the minimum permitted date. + /// /// + [AddedVersion("1.5.0")] + [Description("Gets or sets the minimum permitted date. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Min { get; set; } = default!; /// - /// Gets or sets the placeholder. + /// Gets or sets placeholder text displayed when the input has no value. /// /// /// Default value is null. /// + [AddedVersion("1.5.0")] + [DefaultValue(null)] + [Description("Gets or sets placeholder text displayed when the input has no value.")] [Parameter] public string? Placeholder { get; set; } /// - /// Gets or sets the value. + /// Gets or sets the current date value bound to the input. /// + [AddedVersion("1.5.0")] + [Description("Gets or sets the current date value bound to the input.")] [Parameter] public TValue Value { get; set; } = default!; /// - /// This event fired on every user keystroke that changes the DateInput value. + /// Occurs whenever user input changes the date value, including changes produced by typing. /// + [AddedVersion("1.5.0")] + [Description("Fires whenever user input changes the date value, including changes produced by typing.")] [Parameter] public EventCallback ValueChanged { get; set; } /// - /// Gets or sets the expression. + /// Gets or sets the expression that identifies the bound value for validation and EditContext notifications. /// + /// + /// Default value is . + /// + [AddedVersion("1.5.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] [Parameter] public Expression> ValueExpression { get; set; } = default!; diff --git a/blazorbootstrap/Components/Form/DragAndDropFileInput/DragAndDropFileInput.razor.cs b/blazorbootstrap/Components/Form/DragAndDropFileInput/DragAndDropFileInput.razor.cs index 1a4cc0f7a..5315d7173 100644 --- a/blazorbootstrap/Components/Form/DragAndDropFileInput/DragAndDropFileInput.razor.cs +++ b/blazorbootstrap/Components/Form/DragAndDropFileInput/DragAndDropFileInput.razor.cs @@ -1,4 +1,4 @@ -namespace BlazorBootstrap; +namespace BlazorBootstrap; public partial class DragAndDropFileInput : FileInputBase { @@ -41,7 +41,7 @@ protected void OnDrop(DragEventArgs _) /// [AddedVersion("4.0.0")] [DefaultValue(BackgroundColor.None)] - [Description("Gets or sets the contextual background color of the drag-and-drop area.")] + [Description("Gets or sets the Bootstrap contextual background color of the drop area. The color is applied while the area is not using its default background.")] [Parameter] public BackgroundColor BackgroundColor { get; set; } = BackgroundColor.None; diff --git a/blazorbootstrap/Components/Form/EnumInput/EnumInput.razor.cs b/blazorbootstrap/Components/Form/EnumInput/EnumInput.razor.cs index 50e3e57ba..940719a56 100644 --- a/blazorbootstrap/Components/Form/EnumInput/EnumInput.razor.cs +++ b/blazorbootstrap/Components/Form/EnumInput/EnumInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("3.5.0")] public partial class EnumInput : BlazorBootstrapComponentBase where TEnum : Enum { #region Fields and Constants @@ -33,11 +34,15 @@ protected override void OnParametersSet() /// /// Disables the . /// + [AddedVersion("3.5.0")] + [Description("Disables the enum input so users cannot change its selection.")] public void Disable() => Disabled = true; /// /// Enables the . /// + [AddedVersion("3.5.0")] + [Description("Enables the enum input so users can change its selection.")] public void Enable() => Disabled = false; private void OnChange(ChangeEventArgs e) @@ -80,6 +85,9 @@ private void OnChange(ChangeEventArgs e) /// Default value is false. /// /// + [AddedVersion("3.5.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the enum input is disabled. When true, users cannot change its selection.")] [Parameter] public bool Disabled { get; set; } = false; @@ -94,6 +102,9 @@ private void OnChange(ChangeEventArgs e) /// Default value is . /// /// + [AddedVersion("3.5.0")] + [DefaultValue(EnumInputSize.None)] + [Description("Gets or sets the Bootstrap size of the enum select input.")] [Parameter] public EnumInputSize Size { get; set; } = EnumInputSize.None; @@ -103,18 +114,29 @@ private void OnChange(ChangeEventArgs e) /// Default value is . /// /// + [AddedVersion("3.5.0")] + [DefaultValue(null)] + [Description("Gets or sets the display text of the selected enum value.")] [Parameter] public string Text { get; set; } = default!; /// /// This event fires when the text changes. /// + [AddedVersion("3.5.0")] + [Description("Fires whenever selection changes the display text of the selected enum value.")] [Parameter] public EventCallback TextChanged { get; set; } /// /// Gets or sets the expression. /// + /// + /// Default value is . + /// + [AddedVersion("3.5.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] [Parameter] public Expression> TextExpression { get; set; } = default!; @@ -124,18 +146,29 @@ private void OnChange(ChangeEventArgs e) /// Default value is 0. /// /// + [AddedVersion("3.5.0")] + [DefaultValue(0)] + [Description("Gets or sets the numeric value of the selected enum member.")] [Parameter] public int Value { get; set; } /// /// This event fires when the value changes. /// + [AddedVersion("3.5.0")] + [Description("Fires whenever selection changes the numeric value of the selected enum member.")] [Parameter] public EventCallback ValueChanged { get; set; } /// /// Gets or sets the expression. /// + /// + /// Default value is . + /// + [AddedVersion("3.5.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] [Parameter] public Expression> ValueExpression { get; set; } = default!; diff --git a/blazorbootstrap/Components/Form/FileInput/FileInput.razor.cs b/blazorbootstrap/Components/Form/FileInput/FileInput.razor.cs index 6d0c1c891..2fffec072 100644 --- a/blazorbootstrap/Components/Form/FileInput/FileInput.razor.cs +++ b/blazorbootstrap/Components/Form/FileInput/FileInput.razor.cs @@ -1,4 +1,4 @@ -namespace BlazorBootstrap; +namespace BlazorBootstrap; public partial class FileInput : FileInputBase { @@ -9,7 +9,7 @@ public partial class FileInput : FileInputBase /// [AddedVersion("4.0.0")] [DefaultValue(FileInputSize.Default)] - [Description("Gets or sets the component size.")] + [Description("Gets or sets the Bootstrap size used to render the file picker.")] [Parameter] public FileInputSize Size { get; set; } = FileInputSize.Default; diff --git a/blazorbootstrap/Components/Form/FileInput/FileInputBase.cs b/blazorbootstrap/Components/Form/FileInput/FileInputBase.cs index b292199c1..16e66e850 100644 --- a/blazorbootstrap/Components/Form/FileInput/FileInputBase.cs +++ b/blazorbootstrap/Components/Form/FileInput/FileInputBase.cs @@ -1,4 +1,4 @@ -namespace BlazorBootstrap; +namespace BlazorBootstrap; public abstract class FileInputBase : BlazorBootstrapComponentBase { @@ -122,7 +122,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the allowed file extensions.")] + [Description("Gets or sets the file extensions accepted by the picker. Null or an empty collection permits every extension.")] [Parameter] public IEnumerable? AllowedFileTypes { get; set; } @@ -139,7 +139,7 @@ private static string FormatValidationMessage(string template, params (string To /// This event fires when the selected files change. /// [AddedVersion("4.0.0")] - [Description("This event fires when the selected files change.")] + [Description("Fires after accepted files are added or removed and supplies the current read-only file list.")] [Parameter] public EventCallback> FilesChanged { get; set; } @@ -148,7 +148,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the hint text displayed below the component.")] + [Description("Gets or sets supplementary text displayed below the file selection area.")] [Parameter] public string? HintText { get; set; } @@ -158,7 +158,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(DefaultInvalidFileTypeErrorMessage)] - [Description("Gets or sets the invalid file type validation message template.")] + [Description("Gets or sets the message template used when a selected file extension is not allowed. Supports {FileName} and {AllowedFileTypes} tokens.")] [Parameter] public string InvalidFileTypeErrorMessage { get; set; } = DefaultInvalidFileTypeErrorMessage; @@ -167,7 +167,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the maximum number of selected files.")] + [Description("Gets or sets the maximum number of accepted files. Null does not impose a file-count limit.")] [Parameter] public int? MaxFileCount { get; set; } @@ -177,7 +177,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(DefaultMaxFileCountErrorMessage)] - [Description("Gets or sets the maximum file count validation message template.")] + [Description("Gets or sets the message template used when a file exceeds the configured file-count limit. Supports {FileName} and {MaxFileCount} tokens.")] [Parameter] public string MaxFileCountErrorMessage { get; set; } = DefaultMaxFileCountErrorMessage; @@ -186,7 +186,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the maximum allowed file size in bytes.")] + [Description("Gets or sets the maximum accepted file size in bytes. Null does not impose a size limit.")] [Parameter] public long? MaxFileSize { get; set; } @@ -196,7 +196,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(DefaultMaxFileSizeErrorMessage)] - [Description("Gets or sets the maximum file size validation message template.")] + [Description("Gets or sets the message template used when a file exceeds the configured size limit. Supports {FileName} and {MaxFileSize} tokens.")] [Parameter] public string MaxFileSizeErrorMessage { get; set; } = DefaultMaxFileSizeErrorMessage; @@ -205,13 +205,15 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(false)] - [Description("Gets or sets whether multiple files can be selected.")] + [Description("Gets or sets whether users can select multiple files. When false, selecting a file replaces the current selection.")] [Parameter] public bool Multiple { get; set; } /// /// Gets the currently selected files. /// + [AddedVersion("4.0.0")] + [Description("Gets a read-only list of files currently accepted by the component.")] public IReadOnlyList SelectedFiles => files.AsReadOnly(); /// @@ -219,7 +221,7 @@ private static string FormatValidationMessage(string template, params (string To /// [AddedVersion("4.0.0")] [DefaultValue(DefaultSingleFileErrorMessage)] - [Description("Gets or sets the single-file selection validation message template.")] + [Description("Gets or sets the message shown when users select multiple files while Multiple is false.")] [Parameter] public string SingleFileErrorMessage { get; set; } = DefaultSingleFileErrorMessage; diff --git a/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs b/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs index a462d5abe..d4cd82f86 100644 --- a/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs +++ b/blazorbootstrap/Components/Form/NumberInput/NumberInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("1.0.0")] public partial class NumberInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -78,13 +79,17 @@ protected override async Task OnInitializedAsync() } /// - /// Disables number input. + /// Disables the number input so users cannot change its value. /// + [AddedVersion("1.0.0")] + [Description("Disables the number input so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables number input. + /// Enables the number input so users can change its value. /// + [AddedVersion("1.0.0")] + [Description("Enables the number input so users can change its value.")] public void Enable() => Disabled = false; private string GetInvariantNumber(TValue value) @@ -356,107 +361,147 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [DefaultValue(false)] + [Description("Gets or sets whether users can enter negative numbers. When false, negative input is rejected during parsing.")] [Parameter] public bool AllowNegativeNumbers { get; set; } private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If , NumberInput can complete the values automatically by the browser. + /// Gets or sets whether browser autocomplete is enabled for the number input. /// /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [DefaultValue(false)] + [Description("Gets or sets whether browser autocomplete is enabled. When true, the browser may offer saved values for the input.")] [Parameter] public bool AutoComplete { get; set; } /// - /// Gets or sets the disabled state . + /// Gets or sets whether the input is disabled. /// /// /// Default value is false. /// + [AddedVersion("1.0.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the input is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } + [AddedVersion("1.0.0")] [CascadingParameter] private EditContext EditContext { get; set; } = default!; + [DefaultValue(false)] /// - /// Determines whether to restrict the user input to Min and Max range. - /// If , restricts the user input between the Min and Max range. Else accepts the user input. + /// Gets or sets whether input is restricted to the configured minimum and maximum values. + /// /// /// /// Default value is false. /// + [Description("Gets or sets whether input is restricted to the configured minimum and maximum values. When true, values outside the range are rejected.")] [Parameter] public bool EnableMinMax { get; set; } private string fieldCssClasses => EditContext?.FieldCssClass(fieldIdentifier) ?? ""; /// - /// Gets or sets the locale. Default locale is 'en-US'. + /// Gets or sets the culture name used to parse and format the number. /// /// /// Default value is 'en-US'. /// [Parameter] //[EditorRequired] + [AddedVersion("1.0.0")] public string Locale { get; set; } = "en-US"; /// - /// Gets or sets the max. - /// Max ignored if EnableMinMax="false". + /// Gets or sets the maximum permitted value. + /// /// + [AddedVersion("1.0.0")] + [Description("Gets or sets the maximum permitted value. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Max { get; set; } = default!; /// - /// Gets or sets the min. - /// Min ignored if EnableMinMax="false". + /// Gets or sets the minimum permitted value. + /// /// + [AddedVersion("1.0.0")] + [Description("Gets or sets the minimum permitted value. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Min { get; set; } = default!; /// - /// Gets or sets the placeholder. + /// Gets or sets placeholder text displayed when the input has no value. /// /// /// Default value is null. /// + [AddedVersion("1.0.0")] + [DefaultValue(null)] + [Description("Gets or sets placeholder text displayed when the input has no value.")] [Parameter] public string? Placeholder { get; set; } /// - /// Gets or sets the step. + /// Gets or sets the increment used by the browser's number input controls. /// /// /// Default value is null. /// + [AddedVersion("1.0.0")] + [DefaultValue(null)] + [Description("Gets or sets the increment used by the browser's number input controls.")] [Parameter] public double? Step { get; set; } /// - /// Gets or sets the text alignment. + /// Gets or sets the horizontal alignment of the input value. /// /// /// Default value is . /// + [AddedVersion("1.0.0")] + [DefaultValue(Alignment.None)] + [Description("Gets or sets the horizontal alignment of the input value.")] [Parameter] public Alignment TextAlignment { get; set; } = Alignment.None; /// - /// Gets or sets the value. + /// Gets or sets the current numeric value bound to the input. /// + [AddedVersion("1.0.0")] + [Description("Gets or sets the current numeric value bound to the input.")] [Parameter] public TValue Value { get; set; } = default!; /// - /// This event fired on every user keystroke that changes the NumberInput value. + /// Occurs whenever user input changes the number value, including changes produced by typing. /// + [AddedVersion("1.0.0")] + [Description("Occurs whenever user input changes the number value, including changes produced by typing.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets the expression that identifies the bound value for validation and EditContext notifications. + /// + /// + /// Default value is . + /// + [AddedVersion("1.0.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/OTPInput/OTPInput.razor.cs b/blazorbootstrap/Components/Form/OTPInput/OTPInput.razor.cs index af0c38744..aa5bed813 100644 --- a/blazorbootstrap/Components/Form/OTPInput/OTPInput.razor.cs +++ b/blazorbootstrap/Components/Form/OTPInput/OTPInput.razor.cs @@ -26,7 +26,7 @@ protected override void OnParametersSet() /// Clears the OTP input fields. /// [AddedVersion("4.0.0")] - [Description("Clears the OTP input fields.")] + [Description("Clears every OTP digit, raises the change callback, and returns focus to the first field.")] public async Task ClearAsync() { otpValues = new string[Length]; @@ -174,7 +174,7 @@ private async Task OnKeyUp(KeyboardEventArgs e, int index) /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the CSS class for the container element.")] + [Description("Gets or sets CSS classes applied to the element that contains the OTP fields.")] [Parameter] public string? ContainerCssClass { get; set; } @@ -186,7 +186,7 @@ private async Task OnKeyUp(KeyboardEventArgs e, int index) /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the CSS style for the container element.")] + [Description("Gets or sets inline CSS styles applied to the element that contains the OTP fields.")] [Parameter] public string? ContainerCssStyle { get; set; } @@ -203,7 +203,7 @@ private async Task OnKeyUp(KeyboardEventArgs e, int index) /// [AddedVersion("4.0.0")] [DefaultValue(6)] - [Description("Gets or sets the OTP input length.")] + [Description("Gets or sets the number of digit fields rendered for the one-time password.")] [Parameter] public int Length { get; set; } = 6; @@ -211,7 +211,7 @@ private async Task OnKeyUp(KeyboardEventArgs e, int index) /// This event fires when the OTP input value changes. /// [AddedVersion("4.0.0")] - [Description("This event fires when the OTP input value changes.")] + [Description("Fires whenever an OTP digit changes and supplies the current combined value.")] [Parameter] public EventCallback OnOTPChanged { get; set; } @@ -222,7 +222,7 @@ private async Task OnKeyUp(KeyboardEventArgs e, int index) /// This event fires when the OTP input is completed. /// [AddedVersion("4.0.0")] - [Description("This event fires when the OTP input is completed.")] + [Description("Fires when every OTP field contains a digit and supplies the completed one-time password.")] [Parameter] public EventCallback OnOTPCompleted { get; set; } diff --git a/blazorbootstrap/Components/Form/PasswordInput/PasswordInput.razor.cs b/blazorbootstrap/Components/Form/PasswordInput/PasswordInput.razor.cs index 24d050c3d..94ec5cbbb 100644 --- a/blazorbootstrap/Components/Form/PasswordInput/PasswordInput.razor.cs +++ b/blazorbootstrap/Components/Form/PasswordInput/PasswordInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("3.3.0")] public partial class PasswordInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -38,13 +39,17 @@ protected override async Task OnParametersSetAsync() } /// - /// Disables InputPassword. + /// Disables the password input so users cannot change its value. /// + [AddedVersion("3.3.0")] + [Description("Disables the password input so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables InputPassword. + /// Enables the password input so users can change its value. /// + [AddedVersion("3.3.0")] + [Description("Enables the password input so users can change its value.")] public void Enable() => Disabled = false; /// @@ -76,11 +81,14 @@ private async Task OnChange(ChangeEventArgs args) ); /// - /// Gets or sets the disabled state. + /// Gets or sets whether the password input is disabled. /// /// /// Default value is false. /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the password input is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } @@ -98,6 +106,9 @@ private async Task OnChange(ChangeEventArgs args) /// /// Default value is `btn btn-primary btn-sm`. /// + [AddedVersion("3.3.0")] + [DefaultValue("btn border-top border-end border-bottom border border-start-0")] + [Description("Gets or sets CSS classes applied to the button that reveals or hides the password.")] [Parameter] public string? ShowHidePasswordButtonCssClass { get; set; } = "btn border-top border-end border-bottom border border-start-0"; //""btn btn-light border"; @@ -109,16 +120,31 @@ private async Task OnChange(ChangeEventArgs args) /// /// Default value is null. /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the current password value bound to the input.")] [Parameter] public string? Value { get; set; } /// /// This event is fired when the PasswordInput value changes. /// + [AddedVersion("3.3.0")] + [Description("Fires whenever user input changes the password value.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets an expression that identifies the bound value. + /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/RadioInput/RadioInput.razor.cs b/blazorbootstrap/Components/Form/RadioInput/RadioInput.razor.cs index 4fb9c4fb3..467eecd9d 100644 --- a/blazorbootstrap/Components/Form/RadioInput/RadioInput.razor.cs +++ b/blazorbootstrap/Components/Form/RadioInput/RadioInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("3.3.0")] public partial class RadioInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -33,6 +34,11 @@ protected override void OnInitialized() base.OnInitialized(); } + /// + /// Updates the radio input value from the JavaScript change handler. + /// + [AddedVersion("3.3.0")] + [Description("Updates the radio input value from the JavaScript change handler.")] [JSInvokable] public async Task OnChangeJS(bool newValue) { @@ -44,13 +50,17 @@ public async Task OnChangeJS(bool newValue) } /// - /// Disables number input. + /// Disables the radio input so users cannot select it. /// + [AddedVersion("3.3.0")] + [Description("Disables the radio input so users cannot select it.")] public void Disable() => Disabled = true; /// - /// Enables number input. + /// Enables the radio input so users can select it. /// + [AddedVersion("3.3.0")] + [Description("Enables the radio input so users can select it.")] public void Enable() => Disabled = false; #endregion @@ -65,11 +75,14 @@ public async Task OnChangeJS(bool newValue) ); /// - /// Gets or sets the disabled state. + /// Gets or sets whether the radio input is disabled. /// /// /// Default value is false. /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the radio input is disabled. When true, users cannot select it.")] [Parameter] public bool Disabled { get; set; } @@ -82,28 +95,58 @@ public async Task OnChangeJS(bool newValue) /// /// Gets or sets the label. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the label displayed next to the radio input.")] [Parameter] public string? Label { get; set; } /// /// Gets or sets the name. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the HTML name used to group related radio inputs.")] [Parameter] public string? Name { get; set; } /// /// Gets or sets the value. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets the current value represented by this radio input.")] [Parameter] public bool Value { get; set; } = default!; /// /// This event fired on every user keystroke that changes the NumberInput value. /// + [AddedVersion("3.3.0")] + [Description("Fires whenever user interaction selects this radio input.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets an expression that identifies the bound value. + /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/RangeInput/RangeInput.razor.cs b/blazorbootstrap/Components/Form/RangeInput/RangeInput.razor.cs index d3661c438..717b59fe3 100644 --- a/blazorbootstrap/Components/Form/RangeInput/RangeInput.razor.cs +++ b/blazorbootstrap/Components/Form/RangeInput/RangeInput.razor.cs @@ -8,6 +8,7 @@ /// Supported types for TValue: sbyte, sbyte?, short, short?, int, int?, long, long?, float, float?, double, double?, /// decimal, decimal? /// +[AddedVersion("1.10.6")] public partial class RangeInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -80,6 +81,11 @@ protected override async Task OnInitializedAsync() await base.OnInitializedAsync(); } + /// + /// Updates the range input value from JavaScript. + /// + [AddedVersion("1.10.6")] + [Description("Updates the range input value from the JavaScript change handler.")] [JSInvokable] public async Task bsOnInput(object? newValue) { @@ -90,11 +96,15 @@ public async Task bsOnInput(object? newValue) /// /// Disables the range input. /// + [AddedVersion("1.10.6")] + [Description("Disables the range input.")] public void Disable() => Disabled = true; /// /// Enables the range input. /// + [AddedVersion("1.10.6")] + [Description("Enables the range input.")] public void Enable() => Disabled = false; private string GetInvariantNumber(TValue value) @@ -377,6 +387,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is false. /// + [AddedVersion("1.10.6")] + [DefaultValue(false)] + [Description("Gets or sets whether the range input is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } @@ -387,12 +400,16 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Gets or sets the maximum value of the range input. /// + [AddedVersion("1.10.6")] + [Description("Gets or sets the maximum value selectable with the range input.")] [Parameter] public TValue Max { get; set; } = default!; /// /// Gets or sets the minimum value of the range input. /// + [AddedVersion("1.10.6")] + [Description("Gets or sets the minimum value selectable with the range input.")] [Parameter] public TValue Min { get; set; } = default!; @@ -404,6 +421,9 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is 1. /// + [AddedVersion("1.10.6")] + [DefaultValue(1)] + [Description("Gets or sets the increment between selectable range values.")] [Parameter] public double Step { get; set; } = 1; @@ -413,22 +433,39 @@ private bool TryParseValue(object value, out TValue newValue) /// /// Default value is null. /// + [AddedVersion("1.10.6")] + [DefaultValue(null)] + [Description("Gets or sets tick marks displayed along the range input.")] [Parameter] public IEnumerable TickMarks { get; set; } = default!; /// /// Gets or sets the value of the range input. /// + [AddedVersion("1.10.6")] + [Description("Gets or sets the current value bound to the range input.")] [Parameter] public TValue Value { get; set; } = default!; /// /// This event fires when the user specifies a numeric value. /// + [AddedVersion("1.10.6")] + [Description("Fires whenever user interaction changes the range value.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets an expression that identifies the bound value. + /// + /// + /// Default value is . + /// + [AddedVersion("1.10.6")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditor.razor.cs b/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditor.razor.cs index 43b7a00bb..aea7935c2 100644 --- a/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditor.razor.cs +++ b/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditor.razor.cs @@ -1,4 +1,4 @@ -namespace BlazorBootstrap; +namespace BlazorBootstrap; /// /// Provides a dependency-free rich-text editing control with a grouped Bootstrap toolbar. @@ -108,14 +108,14 @@ protected override async Task OnParametersSetAsync() /// Clears the editor content. /// [AddedVersion("4.0.0")] - [Description("Clears the editor content.")] + [Description("Clears the editor HTML content through the editor module.")] public Task ClearAsync() => RichTextEditorJsInterop.ClearAsync(objRef!, Id!); /// /// Focuses the editable area. /// [AddedVersion("4.0.0")] - [Description("Focuses the editable area.")] + [Description("Moves keyboard focus to the editable area.")] public Task FocusAsync() => RichTextEditorJsInterop.FocusAsync(objRef!, Id!); /// @@ -455,41 +455,53 @@ private Task SetImageUploadInProgressAsync(bool value) private string Accept => string.Join(',', NormalizedAllowedImageFileTypes.Select(fileType => $".{fileType}")); /// Gets or sets the permitted HTTPS image domains. Subdomains are also permitted. + /// + /// Default value is . + /// [AddedVersion("4.0.0")] - [Description("Gets or sets the permitted HTTPS image domains. Subdomains are also permitted.")] + [DefaultValue(null)] + [Description("Gets or sets the HTTPS domains permitted for uploaded-image URLs. Subdomains of configured domains are also permitted.")] [Parameter] public IEnumerable? AllowedImageDomains { get; set; } /// Gets or sets the permitted image file extensions. + /// + /// Default value is . + /// [AddedVersion("4.0.0")] - [Description("Gets or sets the permitted image file extensions.")] + [DefaultValue(null)] + [Description("Gets or sets image file extensions accepted by the upload dialog. Null uses the built-in safe image types.")] [Parameter] public IEnumerable? AllowedImageFileTypes { get; set; } /// Gets or sets the permitted HTTP(S) link domains. Subdomains are also permitted. + /// + /// Default value is . + /// [AddedVersion("4.0.0")] - [Description("Gets or sets the permitted HTTP(S) link domains. Subdomains are also permitted.")] + [DefaultValue(null)] + [Description("Gets or sets the HTTP(S) domains permitted for inserted links. Subdomains of configured domains are also permitted.")] [Parameter] public IEnumerable? AllowedLinkDomains { get; set; } /// Gets or sets the accessible label for the editor. [AddedVersion("4.0.0")] [DefaultValue("Rich text editor")] - [Description("Gets or sets the accessible label for the editor.")] + [Description("Gets or sets the accessible name announced for the editor by assistive technologies.")] [Parameter] public string AriaLabel { get; set; } = "Rich text editor"; /// Gets or sets the delay, in milliseconds, before editor changes are raised. [AddedVersion("4.0.0")] [DefaultValue(300)] - [Description("Gets or sets the delay, in milliseconds, before editor changes are raised.")] + [Description("Gets or sets the debounce delay, in milliseconds, before editor content changes are raised to ValueChanged.")] [Parameter] public int DebounceInterval { get; set; } = 300; /// Gets or sets whether the editor is disabled. [AddedVersion("4.0.0")] [DefaultValue(false)] - [Description("Gets or sets whether the editor is disabled.")] + [Description("Gets or sets whether editing is disabled. When true, users cannot change content or invoke toolbar commands.")] [Parameter] public bool Disabled { get; set; } @@ -507,7 +519,7 @@ private Task SetImageUploadInProgressAsync(bool value) /// Gets or sets the image upload handler. [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the image upload handler.")] + [Description("Gets or sets the delegate that uploads a validated image and returns its HTTPS URL for insertion.")] [Parameter] public RichTextEditorImageUploadDelegate? ImageUploadHandler { get; set; } @@ -516,14 +528,14 @@ private Task SetImageUploadInProgressAsync(bool value) /// Gets or sets the maximum allowed image size in bytes. [AddedVersion("4.0.0")] [DefaultValue(5242880)] - [Description("Gets or sets the maximum allowed image size in bytes.")] + [Description("Gets or sets the maximum accepted image-upload size in bytes. Larger files are rejected before upload.")] [Parameter] public long MaxImageFileSize { get; set; } = 5 * 1024 * 1024; /// Gets or sets the maximum plain-text character count. [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the maximum plain-text character count.")] + [Description("Gets or sets the maximum plain-text character count. Null does not impose a character limit.")] [Parameter] public int? MaxLength { get; set; } @@ -536,7 +548,7 @@ private Task SetImageUploadInProgressAsync(bool value) /// Gets or sets the placeholder text. [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the placeholder text.")] + [Description("Gets or sets placeholder text displayed when the editor has no content.")] [Parameter] public string? Placeholder { get; set; } @@ -546,7 +558,7 @@ private Task SetImageUploadInProgressAsync(bool value) /// Gets or sets whether the editor footer is displayed. [AddedVersion("4.0.0")] [DefaultValue(true)] - [Description("Gets or sets whether the editor footer is displayed.")] + [Description("Gets or sets whether the footer displaying editor metrics is rendered.")] [Parameter] public bool ShowFooter { get; set; } = true; @@ -555,32 +567,39 @@ private Task SetImageUploadInProgressAsync(bool value) /// Fires for transient editor activity and error status. [AddedVersion("4.0.0")] - [Description("Fires for transient editor activity and error status.")] + [Description("Fires for transient editor activity and error status, such as image-upload progress or validation failures.")] [Parameter] public EventCallback StatusChanged { get; set; } + /// + /// Gets or sets the toolbar items. + /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the toolbar items.")] + [Description("Gets or sets the toolbar commands available to users. Null displays the complete built-in toolbar.")] [Parameter] public RichTextEditorToolbarItem[]? ToolbarItems { get; set; } /// Gets or sets the HTML value. [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the HTML value.")] + [Description("Gets or sets the editor HTML content bound to the component.")] [Parameter] public string Value { get; set; } = string.Empty; /// Fires after the editor commits a content change. [AddedVersion("4.0.0")] - [Description("Fires after the editor commits a content change.")] + [Description("Fires after debounced editor content changes and supplies HTML, normalized text, and character metrics.")] [Parameter] public EventCallback ValueChanged { get; set; } /// Gets or sets the expression that identifies the bound value. + /// + /// Default value is . + /// [AddedVersion("4.0.0")] - [Description("Gets or sets the expression that identifies the bound value.")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] [Parameter] public Expression>? ValueExpression { get; set; } diff --git a/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditorToolbarButton.razor.cs b/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditorToolbarButton.razor.cs index f53568108..300b7033f 100644 --- a/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditorToolbarButton.razor.cs +++ b/blazorbootstrap/Components/Form/RichTextEditor/RichTextEditorToolbarButton.razor.cs @@ -1,4 +1,4 @@ -namespace BlazorBootstrap; +namespace BlazorBootstrap; public partial class RichTextEditorToolbarButton : BlazorBootstrapComponentBase { @@ -28,7 +28,7 @@ private async Task OnClickAsync() /// [AddedVersion("4.0.0")] [DefaultValue(false)] - [Description("Gets or sets a value indicating whether the button is disabled.")] + [Description("Gets or sets whether the toolbar button is disabled. When true, its command cannot be invoked.")] [Parameter] public bool Disabled { get; set; } @@ -40,8 +40,8 @@ private async Task OnClickAsync() /// [AddedVersion("4.0.0")] [DefaultValue(RichTextEditorToolbarItem.None)] - [Description("Gets or sets the toolbar item associated with the button.")] - [Parameter, EditorRequired] + [Description("Gets or sets the toolbar command represented by this button.")] + [EditorRequired, Parameter] public RichTextEditorToolbarItem Item { get; set; } = RichTextEditorToolbarItem.None; [CascadingParameter(Name = "RichTextEditor")] diff --git a/blazorbootstrap/Components/Form/Switch/Switch.razor.cs b/blazorbootstrap/Components/Form/Switch/Switch.razor.cs index 38483c0bf..4038bd230 100644 --- a/blazorbootstrap/Components/Form/Switch/Switch.razor.cs +++ b/blazorbootstrap/Components/Form/Switch/Switch.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("1.3.0")] public partial class Switch : BlazorBootstrapComponentBase { #region Fields and Constants @@ -36,13 +37,17 @@ protected override async Task OnParametersSetAsync() } /// - /// Disables switch. + /// Disables the switch so users cannot change its value. /// + [AddedVersion("1.3.0")] + [Description("Disables the switch so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables switch. + /// Enables the switch so users can change its value. /// + [AddedVersion("1.3.0")] + [Description("Enables the switch so users can change its value.")] public void Enable() => Disabled = false; /// @@ -72,11 +77,14 @@ private async Task OnChange(ChangeEventArgs args) (BootstrapClass.FormCheckReverse, Reverse)); /// - /// Gets or sets the disabled state. + /// Gets or sets whether the switch is disabled. /// /// /// Default value is false. /// + [AddedVersion("1.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the switch is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } @@ -90,6 +98,9 @@ private async Task OnChange(ChangeEventArgs args) /// /// Default value is null. /// + [AddedVersion("1.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the label displayed next to the switch.")] [Parameter] public string Label { get; set; } = default!; @@ -101,6 +112,9 @@ private async Task OnChange(ChangeEventArgs args) /// /// Default value is false. /// + [AddedVersion("1.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the switch is displayed on the opposite side of its label.")] [Parameter] public bool Reverse { get; set; } @@ -110,16 +124,31 @@ private async Task OnChange(ChangeEventArgs args) /// /// Default value is false. /// + [AddedVersion("1.3.0")] + [DefaultValue(false)] + [Description("Gets or sets the current checked value bound to the switch.")] [Parameter] public bool Value { get; set; } /// /// This event is fired when the switch selection changes. /// + [AddedVersion("1.3.0")] + [Description("Fires whenever user interaction changes the switch value.")] [Parameter] public EventCallback ValueChanged { get; set; } = default!; - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets an expression that identifies the bound value. + /// + /// + /// Default value is . + /// + [AddedVersion("1.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/TextAreaInput/TextAreaInput.razor.cs b/blazorbootstrap/Components/Form/TextAreaInput/TextAreaInput.razor.cs index e0ca5cfcd..a65a001f2 100644 --- a/blazorbootstrap/Components/Form/TextAreaInput/TextAreaInput.razor.cs +++ b/blazorbootstrap/Components/Form/TextAreaInput/TextAreaInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("3.3.0")] public partial class TextAreaInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -20,13 +21,17 @@ protected override void OnInitialized() } /// - /// Disables number input. + /// Disables the text area so users cannot change its value. /// + [AddedVersion("3.3.0")] + [Description("Disables the text area so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables number input. + /// Enables the text area so users can change its value. /// + [AddedVersion("3.3.0")] + [Description("Enables the text area so users can change its value.")] public void Enable() => Disabled = false; private async Task OnChange(ChangeEventArgs e) @@ -53,26 +58,38 @@ private async Task OnChange(ChangeEventArgs e) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If , NumberInput can complete the values automatically by the browser. + /// Gets or sets whether browser autocomplete is enabled for the text area. /// /// /// Default value is false. /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether browser autocomplete is enabled. When true, the browser may offer saved values for the text area.")] [Parameter] public bool AutoComplete { get; set; } /// - /// Gets or sets the number of columns. + /// Gets or sets the visible width of the text area in columns. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the visible width of the text area in columns.")] [Parameter] public int? Cols { get; set; } /// - /// Gets or sets the disabled state. + /// Gets or sets whether the text area is disabled. /// /// /// Default value is false. /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the text area is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } @@ -81,48 +98,84 @@ private async Task OnChange(ChangeEventArgs e) private string fieldCssClasses => EditContext?.FieldCssClass(fieldIdentifier) ?? ""; /// - /// Gets or sets the maximum number of characters that can be entered. + /// Gets or sets the maximum number of characters users can enter. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the maximum number of characters users can enter. Additional input is prevented when the limit is reached.")] [Parameter] public int? MaxLength { get; set; } /// - /// Gets or sets the placeholder text. + /// Gets or sets placeholder text displayed when the text area has no value. /// /// /// Default value is null. /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets placeholder text displayed when the text area has no value.")] [Parameter] public string? Placeholder { get; set; } /// - /// Gets or sets the number of rows. + /// Gets or sets the visible height of the text area in rows. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the visible height of the text area in rows.")] [Parameter] public int? Rows { get; set; } /// - /// Gets or sets the text alignment. + /// Gets or sets the horizontal alignment of the text area value. /// /// /// Default value is . /// + [AddedVersion("3.3.0")] + [DefaultValue(Alignment.None)] + [Description("Gets or sets the horizontal alignment of the text area value.")] [Parameter] public Alignment TextAlignment { get; set; } = Alignment.None; /// - /// Gets or sets the value. + /// Gets or sets the current text value bound to the text area. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the current text value bound to the text area.")] [Parameter] public string Value { get; set; } = default!; /// /// This event fires when the value changes. /// + [AddedVersion("3.3.0")] + [Description("Fires whenever user input changes the text area value.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets the expression that identifies the bound value for validation and EditContext notifications. + /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/TextInput/TextInput.razor.cs b/blazorbootstrap/Components/Form/TextInput/TextInput.razor.cs index 2a03fe4e8..450bc8d5c 100644 --- a/blazorbootstrap/Components/Form/TextInput/TextInput.razor.cs +++ b/blazorbootstrap/Components/Form/TextInput/TextInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("3.3.0")] public partial class TextInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -20,13 +21,17 @@ protected override void OnInitialized() } /// - /// Disables number input. + /// Disables the text input so users cannot change its value. /// + [AddedVersion("3.3.0")] + [Description("Disables the text input so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables number input. + /// Enables the text input so users can change its value. /// + [AddedVersion("3.3.0")] + [Description("Enables the text input so users can change its value.")] public void Enable() => Disabled = false; private async Task OnChange(ChangeEventArgs e) @@ -53,20 +58,26 @@ private async Task OnChange(ChangeEventArgs e) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If , TextInput can complete the values automatically by the browser. + /// Gets or sets whether browser autocomplete is enabled for the text input. /// /// /// Default value is false. /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether browser autocomplete is enabled. When true, the browser may offer saved values for the input.")] [Parameter] public bool AutoComplete { get; set; } /// - /// Gets or sets the disabled state. + /// Gets or sets whether the input is disabled. /// /// /// Default value is false. /// + [AddedVersion("3.3.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the input is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } @@ -75,42 +86,72 @@ private async Task OnChange(ChangeEventArgs e) private string fieldCssClasses => EditContext?.FieldCssClass(fieldIdentifier) ?? ""; /// - /// Gets or sets the maximum number of characters that can be entered. + /// Gets or sets the maximum number of characters users can enter. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the maximum number of characters users can enter. Additional input is prevented when the limit is reached.")] [Parameter] public int? MaxLength { get; set; } /// - /// Gets or sets the placeholder text. + /// Gets or sets placeholder text displayed when the input has no value. /// /// /// Default value is null. /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets placeholder text displayed when the input has no value.")] [Parameter] public string? Placeholder { get; set; } /// - /// Gets or sets the text alignment. + /// Gets or sets the horizontal alignment of the input value. /// /// /// Default value is . /// + [AddedVersion("3.3.0")] + [DefaultValue(Alignment.None)] + [Description("Gets or sets the horizontal alignment of the input value.")] [Parameter] public Alignment TextAlignment { get; set; } = Alignment.None; /// - /// Gets or sets the value. + /// Gets or sets the current text value bound to the input. /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the current text value bound to the input.")] [Parameter] public string Value { get; set; } = default!; /// /// This event fires when the value changes. /// + [AddedVersion("3.3.0")] + [Description("Fires whenever user input changes the text value.")] [Parameter] public EventCallback ValueChanged { get; set; } - [Parameter] public Expression> ValueExpression { get; set; } = default!; + /// + /// Gets or sets the expression that identifies the bound value for validation and EditContext notifications. + /// + /// + /// Default value is . + /// + [AddedVersion("3.3.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] + [Parameter] + public Expression> ValueExpression { get; set; } = default!; #endregion } diff --git a/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs b/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs index 973814c2d..1070467a0 100644 --- a/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs +++ b/blazorbootstrap/Components/Form/TimeInput/TimeInput.razor.cs @@ -1,5 +1,6 @@ namespace BlazorBootstrap; +[AddedVersion("1.6.0")] public partial class TimeInput : BlazorBootstrapComponentBase { #region Fields and Constants @@ -112,13 +113,17 @@ protected override async Task OnParametersSetAsync() } /// - /// Disables currency input. + /// Disables the time input so users cannot change its value. /// + [AddedVersion("1.6.0")] + [Description("Disables the time input so users cannot change its value.")] public void Disable() => Disabled = true; /// - /// Enables currency input. + /// Enables the time input so users can change its value. /// + [AddedVersion("1.6.0")] + [Description("Enables the time input so users can change its value.")] public void Enable() => Disabled = false; private string GetFormattedValue(object value) @@ -251,75 +256,101 @@ private bool TryParseValue(object value, out TValue newValue) private string autoComplete => AutoComplete ? "true" : "false"; /// - /// If , DateInput can complete the values automatically by the browser. + /// Gets or sets whether browser autocomplete is enabled for the time input. /// /// /// Default value is false. /// + [AddedVersion("1.6.0")] + [DefaultValue(false)] + [Description("Gets or sets whether browser autocomplete is enabled. When true, the browser may offer saved times for the input.")] [Parameter] public bool AutoComplete { get; set; } /// - /// Gets or sets the disabled state. + /// Gets or sets whether the time input is disabled. /// /// /// Default value is false. /// + [AddedVersion("1.6.0")] + [DefaultValue(false)] + [Description("Gets or sets whether the time input is disabled. When true, users cannot change its value.")] [Parameter] public bool Disabled { get; set; } + [AddedVersion("1.6.0")] [CascadingParameter] private EditContext EditContext { get; set; } = default!; + [DefaultValue(false)] /// - /// Determines whether to restrict the user input to Min and Max range. - /// If , restricts the user input between the Min and Max range. Else accepts the user input. + /// Gets or sets whether input is restricted to the configured minimum and maximum times. + /// /// /// /// Default value is false. /// + [Description("Gets or sets whether input is restricted to the configured minimum and maximum times. When true, times outside the range are rejected.")] [Parameter] public bool EnableMinMax { get; set; } private string fieldCssClasses => EditContext?.FieldCssClass(fieldIdentifier) ?? ""; /// - /// Gets or sets the max. - /// Allowed format is hh:mm. + /// Gets or sets the maximum permitted time. + /// /// + [AddedVersion("1.6.0")] + [Description("Gets or sets the maximum permitted time. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Max { get; set; } = default!; /// - /// Gets or sets the min. - /// Allowed format is hh:mm. + /// Gets or sets the minimum permitted time. + /// /// + [AddedVersion("1.6.0")] + [Description("Gets or sets the minimum permitted time. It is enforced only when EnableMinMax is true.")] [Parameter] public TValue Min { get; set; } = default!; /// - /// Gets or sets the placeholder. + /// Gets or sets placeholder text displayed when the input has no value. /// /// /// Default value is null. /// + [AddedVersion("1.6.0")] + [DefaultValue(null)] + [Description("Gets or sets placeholder text displayed when the input has no value.")] [Parameter] public string? Placeholder { get; set; } /// - /// Gets or sets the value. + /// Gets or sets the current time value bound to the input. /// + [AddedVersion("1.6.0")] + [Description("Gets or sets the current time value bound to the input.")] [Parameter] public TValue Value { get; set; } = default!; /// - /// This event fired on every user keystroke that changes the TimeInput value. + /// Occurs whenever user input changes the time value, including changes produced by typing. /// + [AddedVersion("1.6.0")] + [Description("Fires whenever user input changes the time value, including changes produced by typing.")] [Parameter] public EventCallback ValueChanged { get; set; } /// - /// Gets or sets the expression. + /// Gets or sets the expression that identifies the bound value for validation and EditContext notifications. /// + /// + /// Default value is . + /// + [AddedVersion("1.6.0")] + [DefaultValue(null)] + [Description("Gets or sets the expression that identifies the bound value for validation and EditContext notifications.")] [Parameter] public Expression> ValueExpression { get; set; } = default!; diff --git a/blazorbootstrap/Components/SplitView/SplitView.razor.cs b/blazorbootstrap/Components/SplitView/SplitView.razor.cs index 739d8c093..39c005d23 100644 --- a/blazorbootstrap/Components/SplitView/SplitView.razor.cs +++ b/blazorbootstrap/Components/SplitView/SplitView.razor.cs @@ -1,5 +1,9 @@ namespace BlazorBootstrap; +/// +/// Provides two resizable panes separated by a draggable divider. +/// +[AddedVersion("4.0.0")] public partial class SplitView : BlazorBootstrapComponentBase { #region Fields and Constants @@ -87,6 +91,13 @@ protected override Task OnParametersSetAsync() return base.OnParametersSetAsync(); } + /// + /// Handles the JavaScript notification that divider resizing has ended. + /// + /// The final primary-pane size as a percentage. + /// The final secondary-pane size as a percentage. + [AddedVersion("4.0.0")] + [Description("Handles the notification that divider resizing has ended, updates the current size, and raises OnResizeEnded.")] [JSInvokable] public async Task OnResizeEndedJS(double primaryPaneSize, double secondaryPaneSize) { @@ -98,6 +109,13 @@ public async Task OnResizeEndedJS(double primaryPaneSize, double secondaryPaneSi await OnResizeEnded.InvokeAsync(new SplitViewResizeEventArgs(primaryPaneSize, secondaryPaneSize, Orientation)); } + /// + /// Handles the JavaScript notification that divider resizing has started. + /// + /// The initial primary-pane size as a percentage. + /// The initial secondary-pane size as a percentage. + [AddedVersion("4.0.0")] + [Description("Handles the notification that divider resizing has started and raises OnResizeStarted.")] [JSInvokable] public async Task OnResizeStartedJS(double primaryPaneSize, double secondaryPaneSize) { @@ -108,6 +126,13 @@ public async Task OnResizeStartedJS(double primaryPaneSize, double secondaryPane await OnResizeStarted.InvokeAsync(new SplitViewResizeEventArgs(primaryPaneSize, secondaryPaneSize, Orientation)); } + /// + /// Handles the JavaScript notification that the divider size has changed. + /// + /// The current primary-pane size as a percentage. + /// The current secondary-pane size as a percentage. + [AddedVersion("4.0.0")] + [Description("Handles a divider-size change, updates the current primary-pane size, and raises the bound size and resize callbacks.")] [JSInvokable] public async Task OnResizedJS(double primaryPaneSize, double secondaryPaneSize) { @@ -164,19 +189,19 @@ private bool ParametersChanged() => private double EffectiveMinimumPaneSize => Math.Clamp(MinimumPaneSize, 0d, 50d); /// - /// Gets or sets the divider color. + /// Gets or sets the Bootstrap contextual color used for the divider. /// /// Default value is . /// /// [AddedVersion("4.0.0")] [DefaultValue(SplitViewColor.None)] - [Description("Gets or sets the divider color.")] + [Description("Gets or sets the Bootstrap contextual color used for the divider.")] [Parameter] public SplitViewColor Color { get; set; } /// - /// Gets or sets a custom divider color. + /// Gets or sets a custom CSS color used for the divider. /// /// Accepts any valid CSS color expression, including CSS variables. /// Default value is . @@ -184,113 +209,113 @@ private bool ParametersChanged() => /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets a custom divider color.")] + [Description("Gets or sets a custom CSS color used for the divider. When specified, it overrides the color supplied by Color.")] [Parameter] public string? CustomColor { get; set; } /// - /// Gets or sets a value indicating whether user interaction is disabled. + /// Gets or sets whether users can resize the panes. /// /// Default value is . /// /// [AddedVersion("4.0.0")] [DefaultValue(false)] - [Description("Gets or sets a value indicating whether user interaction is disabled.")] + [Description("Gets or sets whether users can resize the panes. When true, the divider is displayed but cannot be dragged.")] [Parameter] public bool IsDisabled { get; set; } /// - /// Gets or sets the minimum pane size as a percentage. + /// Gets or sets the minimum allowed size of each pane as a percentage. /// /// Default value is 0. /// /// [AddedVersion("4.0.0")] [DefaultValue(0d)] - [Description("Gets or sets the minimum pane size as a percentage.")] + [Description("Gets or sets the minimum allowed size of each pane as a percentage. Values are constrained to the range 0 through 50.")] [Parameter] public double MinimumPaneSize { get; set; } /// - /// Fired when resizing ends. + /// Occurs after the user releases the divider. /// [AddedVersion("4.0.0")] - [Description("Fired when resizing ends.")] + [Description("Fires after the user releases the divider and supplies the final size of both panes.")] [Parameter] public EventCallback OnResizeEnded { get; set; } /// - /// Fired while the divider is being dragged. + /// Occurs whenever dragging changes the divider position. /// [AddedVersion("4.0.0")] - [Description("Fired while the divider is being dragged.")] + [Description("Fires while the divider is dragged and supplies the current size of both panes.")] [Parameter] public EventCallback OnResized { get; set; } /// - /// Fired when resizing starts. + /// Occurs when the user starts dragging the divider. /// [AddedVersion("4.0.0")] - [Description("Fired when resizing starts.")] + [Description("Fires when the user starts dragging the divider and supplies the initial size of both panes.")] [Parameter] public EventCallback OnResizeStarted { get; set; } /// - /// Gets or sets the SplitView orientation. + /// Gets or sets whether panes are arranged side by side or stacked. /// /// Default value is . /// /// [AddedVersion("4.0.0")] [DefaultValue(SplitViewOrientation.Horizontal)] - [Description("Gets or sets the SplitView orientation.")] + [Description("Gets or sets whether panes are arranged side by side or stacked. The orientation also determines the divider drag direction.")] [Parameter] public SplitViewOrientation Orientation { get; set; } = SplitViewOrientation.Horizontal; /// - /// Gets or sets the first pane content. + /// Gets or sets the content rendered in the primary pane. /// /// Default value is . /// /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the first pane content.")] + [Description("Gets or sets the content rendered in the primary pane, before the divider.")] [EditorRequired] [Parameter] public RenderFragment? Pane1 { get; set; } /// - /// Gets or sets the second pane content. + /// Gets or sets the content rendered in the secondary pane. /// /// Default value is . /// /// [AddedVersion("4.0.0")] [DefaultValue(null)] - [Description("Gets or sets the second pane content.")] + [Description("Gets or sets the content rendered in the secondary pane, after the divider.")] [EditorRequired] [Parameter] public RenderFragment? Pane2 { get; set; } /// - /// Gets or sets the primary pane size as a percentage. + /// Gets or sets the primary-pane size as a percentage. /// /// Default value is 50. /// /// [AddedVersion("4.0.0")] [DefaultValue(50d)] - [Description("Gets or sets the primary pane size as a percentage.")] + [Description("Gets or sets the primary-pane size as a percentage. The value is constrained so both panes satisfy MinimumPaneSize.")] [Parameter] public double PrimaryPaneSize { get; set; } = 50d; /// - /// Fired when the primary pane size changes. + /// Occurs whenever the user changes the primary-pane size. /// [AddedVersion("4.0.0")] - [Description("Fired when the primary pane size changes.")] + [Description("Fires whenever dragging changes the primary-pane size and supports two-way binding with PrimaryPaneSize.")] [Parameter] public EventCallback PrimaryPaneSizeChanged { get; set; } diff --git a/docs/blog/2025-12-01-blazorbootstrap-4.0.0.md b/docs/blog/2025-12-01-blazorbootstrap-4.0.0.md index 4168fdb13..42e34a27a 100644 --- a/docs/blog/2025-12-01-blazorbootstrap-4.0.0.md +++ b/docs/blog/2025-12-01-blazorbootstrap-4.0.0.md @@ -56,6 +56,7 @@ A resizable split-panel layout component that lets users drag a divider to resiz A one-time password (OTP) input component providing individual digit boxes and auto-advance behavior — ideal for verification code flows. - PR [#1238](https://github.com/vikramlearning/blazorbootstrap/pull/1238) +- Docs: [OTP Input](https://docs.blazorbootstrap.com/forms/otp-input) --- diff --git a/docs/docs/04-forms/autocomplete.mdx b/docs/docs/04-forms/autocomplete.mdx index 2e1241e46..590ab5eb7 100644 --- a/docs/docs/04-forms/autocomplete.mdx +++ b/docs/docs/04-forms/autocomplete.mdx @@ -18,33 +18,33 @@ Blazor Bootstrap autocomplete component is a textbox that offers the users sugge ## Parameters | Name | Type | Default | Required | Description | Added Version | |:--|:--|:--|:--|:--|:--| -| DataProvider | `AutoCompleteDataProviderDelegate` | null | ✔️ | Gets or sets the data provider. | 0.4.0 | -| Disabled | bool | false | | Gets or sets the disabled state. | 0.4.0 | +| DataProvider | `AutoCompleteDataProviderDelegate` | null | ✔️ | Gets or sets the data provider. | 1.0.0 | +| Disabled | bool | false | | Gets or sets the disabled state. | 1.0.0 | | EmptyText | string | `No records found.` | | Gets or sets the empty text. | 1.10.2 | | LoadingText | string | `Loading...` | | Gets or sets the loading text. | 1.10.2 | -| Placeholder | string | null | | Gets or sets the placeholder. | 0.4.0 | -| PropertyName | string | null | ✔️ | Gets or sets the property name. | 0.4.0 | -| Size | `AutoCompleteSize` | `AutoCompleteSize.Default` | | Gets or sets the autocomplete size. | 0.4.0 | +| Placeholder | string | null | | Gets or sets the placeholder. | 1.0.0 | +| PropertyName | string | null | ✔️ | Gets or sets the property name. | 1.0.0 | +| Size | `AutoCompleteSize` | `AutoCompleteSize.Default` | | Gets or sets the autocomplete size. | 1.0.0 | | StringComparison | `StringComparison` | `StringComparison.OrdinalIgnoreCase` | | Gets or sets the StringComparison. | 0.4.1 | | StringFilterOperator | `StringFilterOperator` | `StringFilterOperator.Contains` | | Gets or sets the string filter operator. | 0.4.1 | -| Value | string | null | | Gets or sets the value. | 0.4.0 | -| ValueExpression | expression | null | | AutoComplete value expression. | 0.4.0 | +| Value | string | null | | Gets or sets the value. | 1.0.0 | +| ValueExpression | expression | null | | AutoComplete value expression. | 1.0.0 | ## Methods | Name | Returns | Description | Added Version | |:--|:--|:--|:--| -| Disable() | void | Disables autocomplete. | 0.4.0 | -| Enable() | void | Enables autocomplete. | 0.4.0 | -| RefreshDataAsync() | Task | Refresh the autocomplete data. | 0.4.0 | -| ResetAsync() | Task | Resets the autocomplete selection. | 0.4.0 | +| Disable() | void | Disables autocomplete. | 1.0.0 | +| Enable() | void | Enables autocomplete. | 1.0.0 | +| RefreshDataAsync() | Task | Refresh the autocomplete data. | 1.0.0 | +| ResetAsync() | Task | Resets the autocomplete selection. | 1.0.0 | ## Events | Name | Description | Added Version | |:--|:--|:--| -| OnChanged | This event fires immediately when the autocomplete selection changes by the user. | 0.4.0 | -| ValueChanged | This event fires on every user keystroke that changes the textbox value. | 0.4.0 | +| OnChanged | This event fires immediately when the autocomplete selection changes by the user. | 1.0.0 | +| ValueChanged | This event fires on every user keystroke that changes the textbox value. | 1.0.0 | ## Keyboard Navigation diff --git a/docs/docs/04-forms/drag-and-drop-file-input.mdx b/docs/docs/04-forms/drag-and-drop-file-input.mdx index e0a0e8c58..dcdf292c4 100644 --- a/docs/docs/04-forms/drag-and-drop-file-input.mdx +++ b/docs/docs/04-forms/drag-and-drop-file-input.mdx @@ -2,7 +2,7 @@ title: Blazor Drag and Drop File Input Component description: The Blazor Bootstrap DragAndDropFileInput component supports desktop drag and drop with a touch-friendly native file-picker fallback. sidebar_label: Drag and Drop File Input -sidebar_position: 7 +sidebar_position: 5 --- import CarbonAd from '/carbon-ad.mdx' @@ -13,6 +13,8 @@ The Blazor Bootstrap `DragAndDropFileInput` component displays a file drop area. +Blazor Bootstrap DragAndDropFileInput component + ## Parameters | Name | Type | Default | Description | Added Version | @@ -45,7 +47,7 @@ Drop a file onto the area in desktop browsers. On tablet and mobile touch browse ``` -[See demo here](https://demos.blazorbootstrap.com/form/drag-and-drop-file-input#basic-usage) +[See demo here](https://demos.blazorbootstrap.com/demos/form/drag-and-drop-file-input#basic-usage) ### Validation @@ -63,7 +65,7 @@ Drop a file onto the area in desktop browsers. On tablet and mobile touch browse } ``` -[See demo here](https://demos.blazorbootstrap.com/form/drag-and-drop-file-input#validation) +[See demo here](https://demos.blazorbootstrap.com/demos/form/drag-and-drop-file-input#validation) ### Validation message templates @@ -87,5 +89,11 @@ Use `BackgroundColor` to match the drop area to the surrounding Bootstrap interf ``` ## Accessibility +### Form validation + +`DragAndDropFileInput` participates in an `EditForm` and retains the same validation behavior whether files are dropped or selected through the native picker. + +[See demo here](https://demos.blazorbootstrap.com/demos/form/drag-and-drop-file-input#form-validation) + The native file input is visually hidden within the drop area but remains the selection control. It is therefore operable through touch, pointer, and keyboard activation. DragAndDropFileInput announces validation errors through an alert region, and each selected file has an accessible, keyboard-operable remove button. diff --git a/docs/docs/04-forms/enum-input.mdx b/docs/docs/04-forms/enum-input.mdx index b5eb999db..be641705e 100644 --- a/docs/docs/04-forms/enum-input.mdx +++ b/docs/docs/04-forms/enum-input.mdx @@ -4,7 +4,7 @@ description: The Blazor Bootstrap EnumInput component renders a dropdown list fr image: https://private-user-images.githubusercontent.com/2337067/517874250-8a624590-1dfc-470a-8f9d-7636851d6c95.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjM5MjAxNzEsIm5iZiI6MTc2MzkxOTg3MSwicGF0aCI6Ii8yMzM3MDY3LzUxNzg3NDI1MC04YTYyNDU5MC0xZGZjLTQ3MGEtOGY5ZC03NjM2ODUxZDZjOTUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MTEyMyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTExMjNUMTc0NDMxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZmVlNDlmZDZkNGQ5ZWUxMjE5MGM3NmEzMzc2OTdhYzk0MjY4YTU3NTk5M2JmMGIxNDNkYjI0ZWYyM2UwMDA5YyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.hvU9-57w9n41vwE3eyy3ZcDPDYXbQ3p_JW1RmDmT-c8 sidebar_label: Enum Input -sidebar_position: 5 +sidebar_position: 6 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/file-input.mdx b/docs/docs/04-forms/file-input.mdx index c68961db5..b3a86d27b 100644 --- a/docs/docs/04-forms/file-input.mdx +++ b/docs/docs/04-forms/file-input.mdx @@ -2,7 +2,7 @@ title: Blazor File Input Component description: The Blazor Bootstrap FileInput component provides a standard Bootstrap file control with validation, feedback, and removal. sidebar_label: File Input -sidebar_position: 6 +sidebar_position: 7 --- import CarbonAd from '/carbon-ad.mdx' @@ -13,6 +13,8 @@ The Blazor Bootstrap `FileInput` component follows the standard Bootstrap file-c +Blazor Bootstrap FileInput component + ## Parameters | Name | Type | Default | Description | Added Version | @@ -45,7 +47,7 @@ Use the visible Bootstrap file control to open the native file picker. ``` -[See demo here](https://demos.blazorbootstrap.com/form/file-input#basic-usage) +[See demo here](https://demos.blazorbootstrap.com/demos/form/file-input#basic-usage) ### Multiple files and removal @@ -56,7 +58,7 @@ Set `Multiple` to show every accepted file. Each file has its own keyboard-acces HintText="Select multiple files and remove them individually." /> ``` -[See demo here](https://demos.blazorbootstrap.com/form/file-input#multiple-files-and-removal) +[See demo here](https://demos.blazorbootstrap.com/demos/form/file-input#multiple-files-and-removal) ### Validation @@ -74,7 +76,7 @@ Set `Multiple` to show every accepted file. Each file has its own keyboard-acces } ``` -[See demo here](https://demos.blazorbootstrap.com/form/file-input#validation) +[See demo here](https://demos.blazorbootstrap.com/demos/form/file-input#validation) ### Validation message templates @@ -103,7 +105,7 @@ Use an empty `AllowedFileTypes` collection when every extension is permitted. Ot } ``` -[See demo here](https://demos.blazorbootstrap.com/form/file-input#hint-text-and-unrestricted-extensions) +[See demo here](https://demos.blazorbootstrap.com/demos/form/file-input#hint-text-and-unrestricted-extensions) ### Sizes @@ -114,8 +116,14 @@ Use `Size` to apply Bootstrap's `form-control-lg` or `form-control-sm` classes. HintText="Large file input." /> ``` -[See demo here](https://demos.blazorbootstrap.com/form/file-input#sizes) +[See demo here](https://demos.blazorbootstrap.com/demos/form/file-input#sizes) ## Accessibility +### Form validation + +`FileInput` participates in an `EditForm` and reports file-selection validation errors alongside the form. + +[See demo here](https://demos.blazorbootstrap.com/demos/form/file-input#form-validation) + Provide a clear `AriaLabel` when the default label does not describe the expected files. FileInput announces validation errors through an alert region, and each selected file has an accessible, keyboard-operable remove button. For drag-and-drop with a touch-friendly native-picker fallback, use [DragAndDropFileInput](./drag-and-drop-file-input). diff --git a/docs/docs/04-forms/number-input.mdx b/docs/docs/04-forms/number-input.mdx index 42ac5da5e..8a7b85990 100644 --- a/docs/docs/04-forms/number-input.mdx +++ b/docs/docs/04-forms/number-input.mdx @@ -4,7 +4,7 @@ description: Blazor Bootstrap `NumberInput` component is built around HTML input image: https://i.imgur.com/iUNBkki.png sidebar_label: Number Input -sidebar_position: 6 +sidebar_position: 8 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/otp-input.mdx b/docs/docs/04-forms/otp-input.mdx new file mode 100644 index 000000000..475921c31 --- /dev/null +++ b/docs/docs/04-forms/otp-input.mdx @@ -0,0 +1,103 @@ +--- +title: Blazor OTP Input Component +description: The Blazor Bootstrap OTPInput component provides a focused, keyboard-friendly interface for entering one-time passwords and verification codes. +sidebar_label: OTP Input +sidebar_position: 9 +--- + +import CarbonAd from '/carbon-ad.mdx' + +# Blazor OTPInput + +The Blazor Bootstrap `OTPInput` component presents a one-time password as separate numeric input fields. It supports keyboard navigation, paste distribution, change and completion callbacks, and clearing the entered code. + + + +Blazor Bootstrap OTPInput component + +## Parameters + +| Name | Type | Default | Description | Added Version | +|:--|:--|:--|:--|:--| +| ContainerCssClass | string? | null | CSS class applied to the element that contains the OTP fields. | 4.0.0 | +| ContainerCssStyle | string? | null | Inline CSS style applied to the element that contains the OTP fields. | 4.0.0 | +| Length | int | 6 | Number of numeric fields in the one-time password. | 4.0.0 | + +## Methods + +| Name | Description | Added Version | +|:--|:--|:--| +| ClearAsync() | Clears the OTP fields, publishes the updated value, and focuses the first field. | 4.0.0 | + +## Events + +| Name | Type | Description | Added Version | +|:--|:--|:--|:--| +| OnOTPChanged | EventCallback<string> | Fires whenever the entered OTP changes. | 4.0.0 | +| OnOTPCompleted | EventCallback<string> | Fires after every OTP field contains a digit. | 4.0.0 | + +## Examples + +### Basic usage + +Handle `OnOTPChanged` to observe the current value and `OnOTPCompleted` to submit or verify a complete code. + +```cshtml showLineNumbers + + +

Current value: @otp

+ +@code { + private string otp = string.Empty; + + private Task OnOtpChanged(string value) + { + otp = value; + return Task.CompletedTask; + } + + private Task OnOtpCompleted(string value) + { + otp = value; + return Task.CompletedTask; + } +} +``` + +[See demo here](https://demos.blazorbootstrap.com/demos/form/otp-input#how-it-works) + +### Custom length + +Set `Length` to the number of numeric characters required by the verification flow. Pasted digits fill the remaining fields from the active position. + +```cshtml showLineNumbers + + +@code { + private Task VerifyAsync(string code) + { + return Task.CompletedTask; + } +} +``` + +[See demo here](https://demos.blazorbootstrap.com/demos/form/otp-input#length) + +### Clear the code + +Use a component reference when a retry, resend, or cancel action needs to clear the entered code. + +```cshtml showLineNumbers + + + +@code { + private OTPInput otpInput = default!; + + private Task ClearAsync() => otpInput.ClearAsync(); +} +``` + +## Accessibility diff --git a/docs/docs/04-forms/password-input.mdx b/docs/docs/04-forms/password-input.mdx index 172d7711a..4547daa9d 100644 --- a/docs/docs/04-forms/password-input.mdx +++ b/docs/docs/04-forms/password-input.mdx @@ -4,7 +4,7 @@ description: The Blazor Bootstrap PasswordInput component is constructed using a image: https://i.imgur.com/0k1C2XS.png sidebar_label: Password Input -sidebar_position: 7 +sidebar_position: 10 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/radio-input.mdx b/docs/docs/04-forms/radio-input.mdx index 1dbb2bbbf..df1602fc7 100644 --- a/docs/docs/04-forms/radio-input.mdx +++ b/docs/docs/04-forms/radio-input.mdx @@ -4,7 +4,7 @@ description: The Blazor Bootstrap RadioInput component is constructed using an H image: https://i.imgur.com/8koE00q.png sidebar_label: Radio Input -sidebar_position: 8 +sidebar_position: 11 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/range-input.mdx b/docs/docs/04-forms/range-input.mdx index 1334a5eef..dc74637c1 100644 --- a/docs/docs/04-forms/range-input.mdx +++ b/docs/docs/04-forms/range-input.mdx @@ -4,7 +4,7 @@ description: Blazor Bootstrap `NumberInput` component is built around HTML input image: https://i.imgur.com/rWDDHaf.png sidebar_label: Range Input -sidebar_position: 9 +sidebar_position: 12 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/rich-text-editor.mdx b/docs/docs/04-forms/rich-text-editor.mdx index 88470d50a..375842758 100644 --- a/docs/docs/04-forms/rich-text-editor.mdx +++ b/docs/docs/04-forms/rich-text-editor.mdx @@ -5,10 +5,16 @@ sidebar_label: RichTextEditor sidebar_position: 13 --- +import CarbonAd from '/carbon-ad.mdx' + # Blazor RichTextEditor `RichTextEditor` is a dependency-free editor for HTML content. Its default toolbar includes document styles, font settings, text emphasis, colors, alignment, lists, links, images, tables, block content, fullscreen, printing, and history controls. + + +Blazor Bootstrap RichTextEditor component + ## Get started Add the component to a page, provide its initial HTML, and handle `ValueChanged` when the application needs the sanitized editor result. @@ -62,7 +68,7 @@ Use `Disabled` as the sole inactive-state parameter. When it is `true`, the edit ## Demo walkthrough -The [RichTextEditor demo](https://demos.blazorbootstrap.com/rich-text-editor) keeps seven scenarios in order: Full toolbar, Article draft, Publish rich update, Host-controlled image upload, Disabled, Form validation, and Events. Each scenario includes a short explanation and ordered `How to use` steps before its runnable source. +The [RichTextEditor demo](https://demos.blazorbootstrap.com/demos/form/rich-text-editor) keeps seven scenarios in order: Full toolbar, Article draft, Publish rich update, Host-controlled image upload, Disabled, Form validation, and Events. Each scenario includes a short explanation and ordered `How to use` steps before its runnable source. ## Host-controlled image upload @@ -99,7 +105,7 @@ The default limit is 5 MB. Supported raster formats are JPEG (`.jpg`/`.jpeg`), P Set `AllowedImageDomains` when returned image URLs must come from specific HTTPS domains; subdomains are accepted. The component rejects non-HTTPS URLs, URLs containing credentials, returned URLs outside the configured allow-list, and images that fail to load in the preview. Closing the dialog or starting a newer upload cancels the earlier callback safely. Handler failures, cancellation, and rejected URLs remain visible feedback states rather than insertable images. -See the shared [host-controlled image upload demo](https://demos.blazorbootstrap.com/rich-text-editor#host-controlled-image-upload) for successful, failed, cancelled, and off-policy returned-URL flows. Its callback counter also demonstrates that a file rejected before callback validation does not invoke the host handler. The same Demo RCL example is consumed by both the Server and WebAssembly demo hosts. +See the shared [host-controlled image upload demo](https://demos.blazorbootstrap.com/demos/form/rich-text-editor#host-controlled-image-upload) for successful, failed, cancelled, and off-policy returned-URL flows. Its callback counter also demonstrates that a file rejected before callback validation does not invoke the host handler. The same Demo RCL example is consumed by both the Server and WebAssembly demo hosts. Temporary preview uploads are a host concern: expire or clean up temporary objects if the author cancels or abandons the dialog, and promote them only after the application accepts the final content. The host must also sanitize persisted HTML before rendering it again. diff --git a/docs/docs/04-forms/switch.mdx b/docs/docs/04-forms/switch.mdx index 295546bdd..cb469c15f 100644 --- a/docs/docs/04-forms/switch.mdx +++ b/docs/docs/04-forms/switch.mdx @@ -4,7 +4,7 @@ description: Use the Blazor Bootstrap `Switch` component to show the consistent image: https://i.imgur.com/ALKzreq.png sidebar_label: Switch -sidebar_position: 10 +sidebar_position: 14 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/text-input.mdx b/docs/docs/04-forms/text-input.mdx index b28c9a30f..2c09d5cd3 100644 --- a/docs/docs/04-forms/text-input.mdx +++ b/docs/docs/04-forms/text-input.mdx @@ -4,7 +4,7 @@ description: The Blazor Bootstrap TextInput component is constructed using an HT image: https://i.imgur.com/N2VUHIn.png sidebar_label: Text Input -sidebar_position: 11 +sidebar_position: 16 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/textarea-input.mdx b/docs/docs/04-forms/textarea-input.mdx index 4b973d2f8..be870173d 100644 --- a/docs/docs/04-forms/textarea-input.mdx +++ b/docs/docs/04-forms/textarea-input.mdx @@ -4,7 +4,7 @@ description: The Blazor Bootstrap TextAreaInput component provides a multi-line image: https://i.imgur.com/aSVKMqv.png sidebar_label: TextArea Input -sidebar_position: 12 +sidebar_position: 15 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/04-forms/time-input.mdx b/docs/docs/04-forms/time-input.mdx index 3304d3c10..86757cfd0 100644 --- a/docs/docs/04-forms/time-input.mdx +++ b/docs/docs/04-forms/time-input.mdx @@ -4,7 +4,7 @@ description: The Blazor Bootstrap `TimeInput` component is constructed using an image: https://i.imgur.com/TlvjRlP.png sidebar_label: Time Input -sidebar_position: 13 +sidebar_position: 17 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/carousel.mdx b/docs/docs/05-components/carousel.mdx index a6eef0ecb..8b40af122 100644 --- a/docs/docs/05-components/carousel.mdx +++ b/docs/docs/05-components/carousel.mdx @@ -4,7 +4,7 @@ description: Blazor Carousel component is a slideshow component that cycles thro image: https://i.imgur.com/YoZd9Hy.png sidebar_label: Carousel -sidebar_position: 7 +sidebar_position: 8 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/charts.mdx b/docs/docs/05-components/charts.mdx index 7e7dd47f7..9affa39ba 100644 --- a/docs/docs/05-components/charts.mdx +++ b/docs/docs/05-components/charts.mdx @@ -4,7 +4,7 @@ description: BlazorBootstrap chart components have moved to the dedicated Blazor image: https://i.imgur.com/ATtFiUZ.png sidebar_label: Charts -sidebar_position: 8 +sidebar_position: 9 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/collapse.mdx b/docs/docs/05-components/collapse.mdx index 90ac5585d..f5ce43d32 100644 --- a/docs/docs/05-components/collapse.mdx +++ b/docs/docs/05-components/collapse.mdx @@ -4,7 +4,7 @@ description: Toggle the visibility of content across your project with the Blazo image: https://i.imgur.com/8A0emQe.png sidebar_label: Collapse -sidebar_position: 9 +sidebar_position: 10 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/confirm-dialog.mdx b/docs/docs/05-components/confirm-dialog.mdx index 01df286c5..12f1ae770 100644 --- a/docs/docs/05-components/confirm-dialog.mdx +++ b/docs/docs/05-components/confirm-dialog.mdx @@ -4,7 +4,7 @@ description: Use Blazor Bootstrap confirm dialog component if you want the user image: https://i.imgur.com/B5Hf85u.png sidebar_label: Confirm Dialog -sidebar_position: 10 +sidebar_position: 11 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/dropdown.mdx b/docs/docs/05-components/dropdown.mdx index e64c703b7..d24fe5718 100644 --- a/docs/docs/05-components/dropdown.mdx +++ b/docs/docs/05-components/dropdown.mdx @@ -4,7 +4,7 @@ description: Dropdowns are toggleable, contextual overlays for displaying lists image: https://i.imgur.com/beAr31J.png sidebar_label: Dropdown -sidebar_position: 11 +sidebar_position: 12 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/google-map.mdx b/docs/docs/05-components/google-map.mdx index 16c20e2d6..4864214ed 100644 --- a/docs/docs/05-components/google-map.mdx +++ b/docs/docs/05-components/google-map.mdx @@ -4,7 +4,7 @@ description: Blazor Bootstrap Google Map component will create maps to show loca image: https://i.imgur.com/beAr31J.png sidebar_label: Google Map -sidebar_position: 12 +sidebar_position: 13 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/grid.mdx b/docs/docs/05-components/grid.mdx index 59624a553..5fbb06c69 100644 --- a/docs/docs/05-components/grid.mdx +++ b/docs/docs/05-components/grid.mdx @@ -4,7 +4,7 @@ description: Use Blazor Bootstrap grid component to display tabular data from th image: https://i.imgur.com/kKNgo2I.png sidebar_label: Grid -sidebar_position: 13 +sidebar_position: 14 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/markdown.mdx b/docs/docs/05-components/markdown.mdx index 41951fba3..af4b13ba5 100644 --- a/docs/docs/05-components/markdown.mdx +++ b/docs/docs/05-components/markdown.mdx @@ -4,7 +4,7 @@ description: Use Blazor Bootstrap Markdown component to add formatting, tables, image: https://i.imgur.com/FhN1caj.png sidebar_label: Markdown -sidebar_position: 14 +sidebar_position: 15 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/modal.mdx b/docs/docs/05-components/modal.mdx index 829af77b4..af282d79d 100644 --- a/docs/docs/05-components/modal.mdx +++ b/docs/docs/05-components/modal.mdx @@ -4,7 +4,7 @@ description: Use Blazor Bootstrap modal component to add dialogs to your site fo image: https://i.imgur.com/tLiaEs6.jpg sidebar_label: Modal -sidebar_position: 14 +sidebar_position: 16 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/offcanvas.mdx b/docs/docs/05-components/offcanvas.mdx index ee6b6de1a..9e8144ad3 100644 --- a/docs/docs/05-components/offcanvas.mdx +++ b/docs/docs/05-components/offcanvas.mdx @@ -4,7 +4,7 @@ description: Build hidden sidebars into your project for navigation, shopping ca image: https://i.imgur.com/ev2Q8ON.jpg sidebar_label: Offcanvas -sidebar_position: 15 +sidebar_position: 17 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/pagination.mdx b/docs/docs/05-components/pagination.mdx index 585bdeb6a..eb840d9b7 100644 --- a/docs/docs/05-components/pagination.mdx +++ b/docs/docs/05-components/pagination.mdx @@ -4,7 +4,7 @@ description: Use Blazor Bootstrap pagination component to indicate a series of r image: https://i.imgur.com/SCbZVd4.jpg sidebar_label: Pagination -sidebar_position: 16 +sidebar_position: 18 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/pdf-viewer.mdx b/docs/docs/05-components/pdf-viewer.mdx index 38a27f9a9..1e668ea21 100644 --- a/docs/docs/05-components/pdf-viewer.mdx +++ b/docs/docs/05-components/pdf-viewer.mdx @@ -4,7 +4,7 @@ description: The Blazor PDF Viewer component allows users to view PDF files dire image: https://i.imgur.com/7Vz9Efi.png sidebar_label: PDF Viewer -sidebar_position: 17 +sidebar_position: 19 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/placeholders.mdx b/docs/docs/05-components/placeholders.mdx index d01e04743..5db8dab5e 100644 --- a/docs/docs/05-components/placeholders.mdx +++ b/docs/docs/05-components/placeholders.mdx @@ -4,7 +4,7 @@ description: Use Blazor Bootstrap loading placeholders for your components or pa image: https://i.imgur.com/Mw13qfX.png sidebar_label: Placeholders -sidebar_position: 18 +sidebar_position: 20 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/preload.mdx b/docs/docs/05-components/preload.mdx index dfe1c963d..3afbb8dbb 100644 --- a/docs/docs/05-components/preload.mdx +++ b/docs/docs/05-components/preload.mdx @@ -4,7 +4,7 @@ description: Indicate the loading state of a page with Blazor Bootstrap preload image: https://i.imgur.com/2cPuqFa.png sidebar_label: Preload -sidebar_position: 19 +sidebar_position: 21 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/progress.mdx b/docs/docs/05-components/progress.mdx index 27a337455..58a5a18e1 100644 --- a/docs/docs/05-components/progress.mdx +++ b/docs/docs/05-components/progress.mdx @@ -4,7 +4,7 @@ description: Documentation and examples for using the Blazor Bootstrap progress image: https://i.imgur.com/MK142lQ.png sidebar_label: Progress -sidebar_position: 20 +sidebar_position: 22 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/ribbon.mdx b/docs/docs/05-components/ribbon.mdx index 3d05d7062..72f9d4c01 100644 --- a/docs/docs/05-components/ribbon.mdx +++ b/docs/docs/05-components/ribbon.mdx @@ -4,7 +4,7 @@ description: Documentation and examples for using the Blazor Bootstrap Ribbon co image: https://i.imgur.com/LpZVLbF.png sidebar_label: Ribbon -sidebar_position: 21 +sidebar_position: 23 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/script-loader.mdx b/docs/docs/05-components/script-loader.mdx index e001f9fa1..e083c2f7a 100644 --- a/docs/docs/05-components/script-loader.mdx +++ b/docs/docs/05-components/script-loader.mdx @@ -4,7 +4,7 @@ description: Documentation and examples for using the Blazor Bootstrap Script Lo image: https://i.imgur.com/sBiYPeQ.png sidebar_label: Script Loader -sidebar_position: 22 +sidebar_position: 24 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/sidebar.mdx b/docs/docs/05-components/sidebar.mdx index 8d897726c..a53db212e 100644 --- a/docs/docs/05-components/sidebar.mdx +++ b/docs/docs/05-components/sidebar.mdx @@ -4,7 +4,7 @@ description: Use the Blazor Bootstrap Sidebar component to show consistent cross image: https://i.imgur.com/d91Q9Zt.png sidebar_label: Sidebar -sidebar_position: 23 +sidebar_position: 25 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/sidebar2.mdx b/docs/docs/05-components/sidebar2.mdx index 0bb26e1c7..986010789 100644 --- a/docs/docs/05-components/sidebar2.mdx +++ b/docs/docs/05-components/sidebar2.mdx @@ -4,7 +4,7 @@ description: Use the Blazor Bootstrap Sidebar2 component to display consistent, image: https://i.imgur.com/vs8kl7G.png sidebar_label: Sidebar2 -sidebar_position: 24 +sidebar_position: 26 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/sortable-list.mdx b/docs/docs/05-components/sortable-list.mdx index fce01c43e..57bec2e8c 100644 --- a/docs/docs/05-components/sortable-list.mdx +++ b/docs/docs/05-components/sortable-list.mdx @@ -4,7 +4,7 @@ description: The Blazor Bootstrap Sortable List component, built on top of Sorta image: https://i.imgur.com/bfzP8Yi.png sidebar_label: Sortable List -sidebar_position: 25 +sidebar_position: 27 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/spinners.mdx b/docs/docs/05-components/spinners.mdx index bf68434e2..6e6e0b3d1 100644 --- a/docs/docs/05-components/spinners.mdx +++ b/docs/docs/05-components/spinners.mdx @@ -4,7 +4,7 @@ description: Visualize the loading state of a component or page using the Blazor image: https://i.imgur.com/G4wyEd6.png sidebar_label: Spinners -sidebar_position: 26 +sidebar_position: 28 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/split-view.mdx b/docs/docs/05-components/split-view.mdx index 9bbb2b790..b02e0cb52 100644 --- a/docs/docs/05-components/split-view.mdx +++ b/docs/docs/05-components/split-view.mdx @@ -3,7 +3,7 @@ title: Blazor Split View Component description: The Blazor Bootstrap Split View component arranges two resizable panes horizontally or vertically with live drag updates. sidebar_label: Split View -sidebar_position: 26 +sidebar_position: 29 --- import CarbonAd from '/carbon-ad.mdx' @@ -14,6 +14,8 @@ The Blazor Bootstrap **Split View** component arranges two panes with a draggabl +Blazor Bootstrap SplitView component + ## Parameters | Name | Type | Default | Required | Description | Added Version | @@ -80,7 +82,7 @@ The Blazor Bootstrap **Split View** component arranges two panes with a draggabl ``` -[See demo here.](https://demos.blazorbootstrap.com/split-view#pane-content) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#pane-content) ### Orientation @@ -98,7 +100,7 @@ The Blazor Bootstrap **Split View** component arranges two panes with a draggabl ``` -[See demo here.](https://demos.blazorbootstrap.com/split-view#orientation) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#orientation) ### PrimaryPaneSizeChanged @@ -120,7 +122,7 @@ The Blazor Bootstrap **Split View** component arranges two panes with a draggabl } ``` -[See demo here.](https://demos.blazorbootstrap.com/split-view#primary-pane-size-changed) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#primary-pane-size-changed) ### Semantic Color @@ -138,7 +140,7 @@ The Blazor Bootstrap **Split View** component arranges two panes with a draggabl Hover and dragging states are derived automatically in shared CSS from the resolved base divider color. -[See demo here.](https://demos.blazorbootstrap.com/split-view#semantic-color) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#semantic-color) ### CustomColor @@ -154,7 +156,7 @@ Hover and dragging states are derived automatically in shared CSS from the resol ``` -[See demo here.](https://demos.blazorbootstrap.com/split-view#custom-color) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#custom-color) ### Resize events @@ -188,9 +190,9 @@ Hover and dragging states are derived automatically in shared CSS from the resol } ``` -[See demo here.](https://demos.blazorbootstrap.com/split-view#onresizestarted) -[See demo here.](https://demos.blazorbootstrap.com/split-view#onresized) -[See demo here.](https://demos.blazorbootstrap.com/split-view#onresizeended) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#onresizestarted) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#onresized) +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#onresizeended) ### Nested layouts @@ -216,10 +218,4 @@ Hover and dragging states are derived automatically in shared CSS from the resol ``` -[See demo here.](https://demos.blazorbootstrap.com/split-view#nested-layouts) - -### App shell layout - -You can combine multiple SplitView instances to build an app shell with navigation, content, and inspector panes. - -[See demo here.](https://demos.blazorbootstrap.com/split-view#app-shell) \ No newline at end of file +[See demo here.](https://demos.blazorbootstrap.com/demos/split-view#nested-layouts) diff --git a/docs/docs/05-components/tabs.mdx b/docs/docs/05-components/tabs.mdx index fd50827c7..f6840cb14 100644 --- a/docs/docs/05-components/tabs.mdx +++ b/docs/docs/05-components/tabs.mdx @@ -4,7 +4,7 @@ description: Documentation and examples for using Blazor Bootstrap Tabs componen image: https://i.imgur.com/KelXx6Z.png sidebar_label: Tabs -sidebar_position: 27 +sidebar_position: 30 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/theme-switcher.mdx b/docs/docs/05-components/theme-switcher.mdx index 87ea87e82..5a462e0ae 100644 --- a/docs/docs/05-components/theme-switcher.mdx +++ b/docs/docs/05-components/theme-switcher.mdx @@ -4,7 +4,7 @@ description: Documentation and examples for using Blazor Bootstrap Theme Switche image: https://i.imgur.com/2eixWho.png sidebar_label: Theme Switcher -sidebar_position: 28 +sidebar_position: 31 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/toasts.mdx b/docs/docs/05-components/toasts.mdx index 606c23fcd..8435bdb6c 100644 --- a/docs/docs/05-components/toasts.mdx +++ b/docs/docs/05-components/toasts.mdx @@ -4,7 +4,7 @@ description: Push notifications to your visitors with a toast, a lightweight and image: https://i.imgur.com/W1YkmJH.png sidebar_label: Toasts -sidebar_position: 29 +sidebar_position: 32 --- import CarbonAd from '/carbon-ad.mdx' diff --git a/docs/docs/05-components/tooltips.mdx b/docs/docs/05-components/tooltips.mdx index f597120ba..926863d2e 100644 --- a/docs/docs/05-components/tooltips.mdx +++ b/docs/docs/05-components/tooltips.mdx @@ -4,7 +4,7 @@ description: Use Blazor Bootstrap tooltip component to add custom tooltips to yo image: https://i.imgur.com/uqvqb2i.jpg sidebar_label: Tooltips -sidebar_position: 30 +sidebar_position: 33 --- import CarbonAd from '/carbon-ad.mdx'