# Getting Started with Syncfusion Blazor Toolkit Inputs ## Table of Contents - [Installation & Setup](#installation--setup) - [CSS Imports and Theming](#css-imports-and-theming) - [Basic Component Initialization](#basic-component-initialization) - [Common Event Patterns](#common-event-patterns) - [State Management Basics](#state-management-basics) - [Namespace & Using Statements](#namespace--using-statements) ## Installation & Setup ### Step 1: Add NuGet Package The Syncfusion Blazor Toolkit is available via NuGet. Add it to your Blazor project: ```bash dotnet add package Syncfusion.Blazor.Toolkit ``` **Version Compatibility:** - Syncfusion Blazor Toolkit: Latest stable version - .NET: 8.0 or higher - Blazor: WebAssembly or Server ### Step 2: Register Services In your `Program.cs` (Blazor Server or WebAssembly), register Syncfusion services: ```csharp // Program.cs using Syncfusion.Blazor; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorComponents(); // Register Syncfusion Blazor service builder.Services.AddSyncfusionBlazorToolkit(); var app = builder.Build(); app.Run(); ``` **For Blazor Server:** ```csharp services.AddSyncfusionBlazorToolkit(); ``` **For Blazor WebAssembly:** ```csharp builder.Services.AddSyncfusionBlazorToolkit(); ``` ## CSS Imports and Theming ### Required CSS Files Add Syncfusion CSS files to your HTML head. In `_Layout.cshtml` (Blazor Server) or `index.html` (Blazor WebAssembly): ```html ``` ### Available Themes | Theme | Use Case | |-------|----------| | **fluent.css** | Modern, minimal design (default) | | **bootstrap5.css** | Bootstrap-compatible styling | | **material.css** | Material Design principles | | **tailwind.css** | Tailwind CSS integration | | **highcontrast.css** | Accessibility-focused | ### Custom Theming Override Syncfusion CSS variables in your custom CSS file: ```css /* app.css */ :root { --sf-primary: #0078d4; --sf-surface: #ffffff; --sf-surface-variant: #f3f3f3; --sf-outline: #d0d0d0; --sf-error: #d32f2f; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } ``` Reference this file after the Syncfusion CSS: ```html ``` ## Basic Component Initialization ### Minimal Component Setup Every input component requires at minimum: ```razor @page "/basic-input" @using Syncfusion.Blazor.Toolkit.Inputs
``` ### Component with Value Binding ```razor @code { private string userInput = ""; } ``` ### Component with Initial Value ```razor ``` ### Component with Reference Store a component reference for programmatic access: ```razor @code { private SfTextBox myTextBox; private async Task FocusInput() { await myTextBox.FocusAsync(); } } ``` ## Common Event Patterns ### Change Event Handler Triggered when the component value changes: ```razor @code { private void OnTextChanged(ChangedEventArgs args) { Console.WriteLine($"New value: {args.Value}"); Console.WriteLine($"Previous value: {args.PreviousValue}"); } } ``` ### Focus and Blur Events ```razor @code { private void OnFocus(FocusInEventArgs args) { Console.WriteLine("Input focused"); } private void OnBlur(FocusOutEventArgs args) { Console.WriteLine("Input blurred"); } } ``` ### Input Event (Real-time Typing) ```razor @code { private void OnInput(InputEventArgs args) { // Fires on every keystroke Console.WriteLine($"Current input: {args.Value}"); } } ``` ### Combining Multiple Events ```razor @code { private string text = ""; private void OnValueChanged(ChangedEventArgs args) { Console.WriteLine($"Value changed: {args.Value}"); } private void OnFocused(FocusInEventArgs args) { Console.WriteLine("Focused"); } private void OnBlurred(FocusOutEventArgs args) { Console.WriteLine("Blurred"); } } ``` ## State Management Basics ### Simple Component State ```razor @page "/counter" @using Syncfusion.Blazor.Toolkit.Inputs

Count: @count

@code { private int count = 0; } ``` ### Form State Management ```razor @page "/form" @using Syncfusion.Blazor.Toolkit.Inputs
@code { private FormModel formData = new(); private void SubmitForm() { Console.WriteLine($"Name: {formData.Name}, Email: {formData.Email}, Age: {formData.Age}"); } public class FormModel { public string Name { get; set; } = ""; public string Email { get; set; } = ""; public int? Age { get; set; } } } ``` ### Conditional State Management ```razor @using Syncfusion.Blazor.Toolkit.Inputs
@if (isEnabled) {
}
@code { private bool isEnabled = false; private string advancedOption = ""; } ``` ### Reactive Updates with StateHasChanged ```razor @using Syncfusion.Blazor.Toolkit.Inputs

@message

@code { private string message = ""; private async Task OnInputChange(ChangedEventArgs args) { message = $"You entered: {args.Value}"; await Task.Delay(2000); message = ""; StateHasChanged(); } } ``` ## Namespace & Using Statements ### Required Namespaces Add these using statements to your Razor components: ```csharp // Input components using Syncfusion.Blazor.Toolkit.Inputs; ``` ### Global Imports (_Imports.razor) Add to your `_Imports.razor` to avoid repeating using statements: ```razor @using Syncfusion.Blazor.Toolkit ``` ### Complete Setup Example ```razor @* _Imports.razor *@ @using System.Globalization @using Microsoft.AspNetCore.Components @using Syncfusion.Blazor.Toolkit @* Counter.razor *@ @page "/counter" @using Syncfusion.Blazor.Toolkit.Inputs

Counter Component

Current value: @count

@code { private int count = 0; private void Increment() => count++; private void Decrement() => count--; } ``` ## Next Steps - **Basic Inputs:** See [textbox-textarea.md](textbox-textarea.md) for TextBox and TextArea - **Numeric Input:** See [numeric-currency.md](numeric-currency.md) for NumericTextBox with formatting - **Selection Controls:** See [checkbox-radio-switch.md](checkbox-radio-switch.md) for CheckBox, RadioButton, and Switch - **Accessibility:** See [input-accessibility.md](input-accessibility.md) for WCAG compliance