diff --git a/CLAUDE.md b/CLAUDE.md
index a0b893f..2225b60 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -7,7 +7,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
NimbusFlow is a scheduling system with a **monorepo structure** containing separate backend and frontend applications:
- **Backend**: Python-based scheduling service using SQLite with a repository pattern
-- **Frontend**: React + TypeScript + Vite application
+- **Frontend**: .NET Blazor Server application with Bootstrap UI
### Backend Architecture
@@ -33,10 +33,26 @@ backend/
### Frontend Architecture
-React application using:
-- TypeScript for type safety
-- Vite for fast development and building
-- ESLint for code linting
+.NET 8 Blazor Server application with the following structure:
+
+```
+frontend/
+├── Components/
+│ ├── Layout/ # Layout components (NavMenu, MainLayout)
+│ └── Pages/ # Razor pages (Dashboard, Members, Schedules, Services)
+├── Models/ # C# models matching backend data structure
+├── Services/ # HTTP client services for API communication
+└── wwwroot/ # Static files and assets
+```
+
+**Key Components:**
+
+- **ApiService** (`Services/ApiService.cs`): HTTP client wrapper for Python backend API communication
+- **Models** (`Models/Member.cs`): C# data models (Member, Schedule, Service, Classification, etc.)
+- **Razor Components**: Interactive pages for member management, scheduling, and service administration
+- **Bootstrap UI**: Responsive design with Bootstrap 5 styling
+
+The frontend communicates with the Python backend via HTTP API calls, expecting JSON responses that match the C# model structure.
## Development Commands
@@ -72,22 +88,28 @@ python main.py
**Setup:**
```bash
cd frontend
-npm install
+# Restore NuGet packages
+dotnet restore
```
**Development:**
```bash
cd frontend
-# Start development server
-npm run dev
+# Start development server (with hot reload)
+dotnet watch
+# Or run without watch
+dotnet run
+
# Build for production
-npm run build
-# Run linting
-npm run lint
-# Preview production build
-npm run preview
+dotnet build
+# Publish for deployment
+dotnet publish -c Release
```
+**Access:**
+- Development: https://localhost:5001 (HTTPS) or http://localhost:5000 (HTTP)
+- The application expects the Python backend API to be available at http://localhost:8000/api/
+
## Core Business Logic
The **SchedulingService** implements a sophisticated member scheduling algorithm:
diff --git a/frontend/.gitignore b/frontend/.gitignore
deleted file mode 100644
index d6a6c90..0000000
--- a/frontend/.gitignore
+++ /dev/null
@@ -1,55 +0,0 @@
-# Dependencies
-node_modules/
-
-# Build output
-dist/
-build/
-.next/
-
-# TypeScript cache
-*.tsbuildinfo
-
-# Logs
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-*.log
-
-# Local environment files
-.env
-.env.local
-.env.*.local
-
-# Editor directories and files
-.vscode/
-.idea/
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-
-# macOS
-.DS_Store
-
-# Linux
-*~
-
-# Windows
-Thumbs.db
-ehthumbs.db
-Desktop.ini
-
-# TailwindCSS JIT cache
-.tailwindcss/
-
-# Optional: if using Next.js image optimization cache
-.next/cache/
-
-# Optional: if using Storybook
-storybook-static/
-.out/
-
-# Optional: if using testing coverage
-coverage/
diff --git a/frontend/Components/App.razor b/frontend/Components/App.razor
new file mode 100644
index 0000000..cbca8d7
--- /dev/null
+++ b/frontend/Components/App.razor
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/Components/Layout/MainLayout.razor b/frontend/Components/Layout/MainLayout.razor
new file mode 100644
index 0000000..5a24bb1
--- /dev/null
+++ b/frontend/Components/Layout/MainLayout.razor
@@ -0,0 +1,23 @@
+@inherits LayoutComponentBase
+
+
+
+
+
+
+
+
+ @Body
+
+
+
+
+
+ An unhandled error has occurred.
+
Reload
+
🗙
+
diff --git a/frontend/Components/Layout/MainLayout.razor.css b/frontend/Components/Layout/MainLayout.razor.css
new file mode 100644
index 0000000..038baf1
--- /dev/null
+++ b/frontend/Components/Layout/MainLayout.razor.css
@@ -0,0 +1,96 @@
+.page {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+}
+
+main {
+ flex: 1;
+}
+
+.sidebar {
+ background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
+}
+
+.top-row {
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #d6d5d5;
+ justify-content: flex-end;
+ height: 3.5rem;
+ display: flex;
+ align-items: center;
+}
+
+ .top-row ::deep a, .top-row ::deep .btn-link {
+ white-space: nowrap;
+ margin-left: 1.5rem;
+ text-decoration: none;
+ }
+
+ .top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
+ text-decoration: underline;
+ }
+
+ .top-row ::deep a:first-child {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+@media (max-width: 640.98px) {
+ .top-row {
+ justify-content: space-between;
+ }
+
+ .top-row ::deep a, .top-row ::deep .btn-link {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 641px) {
+ .page {
+ flex-direction: row;
+ }
+
+ .sidebar {
+ width: 250px;
+ height: 100vh;
+ position: sticky;
+ top: 0;
+ }
+
+ .top-row {
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ }
+
+ .top-row.auth ::deep a:first-child {
+ flex: 1;
+ text-align: right;
+ width: 0;
+ }
+
+ .top-row, article {
+ padding-left: 2rem !important;
+ padding-right: 1.5rem !important;
+ }
+}
+
+#blazor-error-ui {
+ background: lightyellow;
+ bottom: 0;
+ box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
+ display: none;
+ left: 0;
+ padding: 0.6rem 1.25rem 0.7rem 1.25rem;
+ position: fixed;
+ width: 100%;
+ z-index: 1000;
+}
+
+ #blazor-error-ui .dismiss {
+ cursor: pointer;
+ position: absolute;
+ right: 0.75rem;
+ top: 0.5rem;
+ }
diff --git a/frontend/Components/Layout/NavMenu.razor b/frontend/Components/Layout/NavMenu.razor
new file mode 100644
index 0000000..e6a7fce
--- /dev/null
+++ b/frontend/Components/Layout/NavMenu.razor
@@ -0,0 +1,36 @@
+
+
+
+
+
+
diff --git a/frontend/Components/Layout/NavMenu.razor.css b/frontend/Components/Layout/NavMenu.razor.css
new file mode 100644
index 0000000..4e15395
--- /dev/null
+++ b/frontend/Components/Layout/NavMenu.razor.css
@@ -0,0 +1,105 @@
+.navbar-toggler {
+ appearance: none;
+ cursor: pointer;
+ width: 3.5rem;
+ height: 2.5rem;
+ color: white;
+ position: absolute;
+ top: 0.5rem;
+ right: 1rem;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
+}
+
+.navbar-toggler:checked {
+ background-color: rgba(255, 255, 255, 0.5);
+}
+
+.top-row {
+ height: 3.5rem;
+ background-color: rgba(0,0,0,0.4);
+}
+
+.navbar-brand {
+ font-size: 1.1rem;
+}
+
+.bi {
+ display: inline-block;
+ position: relative;
+ width: 1.25rem;
+ height: 1.25rem;
+ margin-right: 0.75rem;
+ top: -1px;
+ background-size: cover;
+}
+
+.bi-house-door-fill-nav-menu {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
+}
+
+.bi-plus-square-fill-nav-menu {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
+}
+
+.bi-list-nested-nav-menu {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
+}
+
+.nav-item {
+ font-size: 0.9rem;
+ padding-bottom: 0.5rem;
+}
+
+ .nav-item:first-of-type {
+ padding-top: 1rem;
+ }
+
+ .nav-item:last-of-type {
+ padding-bottom: 1rem;
+ }
+
+ .nav-item ::deep .nav-link {
+ color: #d7d7d7;
+ background: none;
+ border: none;
+ border-radius: 4px;
+ height: 3rem;
+ display: flex;
+ align-items: center;
+ line-height: 3rem;
+ width: 100%;
+ }
+
+.nav-item ::deep a.active {
+ background-color: rgba(255,255,255,0.37);
+ color: white;
+}
+
+.nav-item ::deep .nav-link:hover {
+ background-color: rgba(255,255,255,0.1);
+ color: white;
+}
+
+.nav-scrollable {
+ display: none;
+}
+
+.navbar-toggler:checked ~ .nav-scrollable {
+ display: block;
+}
+
+@media (min-width: 641px) {
+ .navbar-toggler {
+ display: none;
+ }
+
+ .nav-scrollable {
+ /* Never collapse the sidebar for wide screens */
+ display: block;
+
+ /* Allow sidebar to scroll for tall menus */
+ height: calc(100vh - 3.5rem);
+ overflow-y: auto;
+ }
+}
diff --git a/frontend/Components/Pages/Error.razor b/frontend/Components/Pages/Error.razor
new file mode 100644
index 0000000..576cc2d
--- /dev/null
+++ b/frontend/Components/Pages/Error.razor
@@ -0,0 +1,36 @@
+@page "/Error"
+@using System.Diagnostics
+
+Error
+
+Error.
+An error occurred while processing your request.
+
+@if (ShowRequestId)
+{
+
+ Request ID: @RequestId
+
+}
+
+Development Mode
+
+ Swapping to Development environment will display more detailed information about the error that occurred.
+
+
+ The Development environment shouldn't be enabled for deployed applications.
+ It can result in displaying sensitive information from exceptions to end users.
+ For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
+ and restarting the app.
+
+
+@code{
+ [CascadingParameter]
+ private HttpContext? HttpContext { get; set; }
+
+ private string? RequestId { get; set; }
+ private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+
+ protected override void OnInitialized() =>
+ RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
+}
diff --git a/frontend/Components/Pages/Home.razor b/frontend/Components/Pages/Home.razor
new file mode 100644
index 0000000..7a0b250
--- /dev/null
+++ b/frontend/Components/Pages/Home.razor
@@ -0,0 +1,138 @@
+@page "/"
+@using NimbusFlow.Frontend.Services
+@using NimbusFlow.Frontend.Models
+@inject IApiService ApiService
+
+NimbusFlow Dashboard
+
+NimbusFlow Dashboard
+
+
+
+
+
+
+
@activeMemberCount
+
+
+
+
+
+
+
+
+
@pendingScheduleCount
+
+
+
+
+
+
+
+
+
@upcomingServiceCount
+
+
+
+
+
+
+
+
+
@classificationCount
+
+
+
+
+
+
+
+
+
+
+ @if (recentSchedules.Any())
+ {
+
+ @foreach (var schedule in recentSchedules.Take(5))
+ {
+
+
+
@($"{schedule.Member?.FullName}")
+ @schedule.Status
+
+
Service: @schedule.Service?.ServiceDate.ToString("MMM dd, yyyy")
+
Scheduled: @schedule.ScheduledAt.ToString("MMM dd, yyyy HH:mm")
+
+ }
+
+ }
+ else
+ {
+
No recent schedules found.
+ }
+
+
+
+
+
+
+
+@code {
+ private int activeMemberCount = 0;
+ private int pendingScheduleCount = 0;
+ private int upcomingServiceCount = 0;
+ private int classificationCount = 0;
+ private List recentSchedules = new();
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ // Load dashboard data
+ var members = await ApiService.GetMembersAsync();
+ activeMemberCount = members.Count(m => m.IsActive);
+
+ var schedules = await ApiService.GetSchedulesAsync();
+ recentSchedules = schedules.OrderByDescending(s => s.ScheduledAt).ToList();
+ pendingScheduleCount = schedules.Count(s => s.Status == "pending");
+
+ var services = await ApiService.GetServicesAsync();
+ upcomingServiceCount = services.Count(s => s.ServiceDate >= DateTime.Today);
+
+ var classifications = await ApiService.GetClassificationsAsync();
+ classificationCount = classifications.Count;
+ }
+ catch (Exception ex)
+ {
+ // Handle API errors gracefully
+ Console.WriteLine($"Error loading dashboard data: {ex.Message}");
+ }
+ }
+
+ private string GetStatusBadgeClass(string status)
+ {
+ return status switch
+ {
+ "pending" => "bg-warning",
+ "accepted" => "bg-success",
+ "declined" => "bg-danger",
+ _ => "bg-secondary"
+ };
+ }
+}
diff --git a/frontend/Components/Pages/Members.razor b/frontend/Components/Pages/Members.razor
new file mode 100644
index 0000000..b473473
--- /dev/null
+++ b/frontend/Components/Pages/Members.razor
@@ -0,0 +1,181 @@
+@page "/members"
+@using NimbusFlow.Frontend.Services
+@using NimbusFlow.Frontend.Models
+@inject IApiService ApiService
+@inject NavigationManager Navigation
+@inject IJSRuntime JSRuntime
+
+Members
+
+
+
Members
+
+ Add Member
+
+
+
+@if (loading)
+{
+
+}
+else if (members.Any())
+{
+
+
+
+
+
+
+
+
+ Name
+ Classification
+ Email
+ Phone
+ Status
+ Last Accepted
+ Decline Streak
+ Actions
+
+
+
+ @foreach (var member in filteredMembers)
+ {
+
+
+ @member.FullName
+
+
+ @member.ClassificationName
+
+ @member.Email
+ @member.PhoneNumber
+
+ @if (member.IsActive)
+ {
+ Active
+ }
+ else
+ {
+ Inactive
+ }
+
+
+ @if (member.LastAcceptedAt.HasValue)
+ {
+ @member.LastAcceptedAt.Value.ToString("MMM dd, yyyy")
+ }
+ else
+ {
+ Never
+ }
+
+
+ @if (member.DeclineStreak > 0)
+ {
+ @member.DeclineStreak
+ }
+ else
+ {
+ 0
+ }
+
+
+
+
View
+
Edit
+
ConfirmDelete(member)">Delete
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ Showing @filteredMembers.Count() of @members.Count members
+
+
+
+
+ Show inactive members
+
+
+
+
+
+}
+else
+{
+
+}
+
+@code {
+ private List members = new();
+ private bool loading = true;
+ private bool showInactiveMembers = false;
+
+ private IEnumerable filteredMembers =>
+ showInactiveMembers ? members : members.Where(m => m.IsActive);
+
+ protected override async Task OnInitializedAsync()
+ {
+ await LoadMembers();
+ }
+
+ private async Task LoadMembers()
+ {
+ try
+ {
+ loading = true;
+ members = await ApiService.GetMembersAsync();
+ }
+ catch (Exception ex)
+ {
+ // Handle error (could show toast notification)
+ Console.WriteLine($"Error loading members: {ex.Message}");
+ }
+ finally
+ {
+ loading = false;
+ }
+ }
+
+ private async Task ConfirmDelete(Member member)
+ {
+ var confirmed = await JSRuntime.InvokeAsync("confirm", $"Are you sure you want to delete {member.FullName}?");
+ if (confirmed)
+ {
+ try
+ {
+ var success = await ApiService.DeleteMemberAsync(member.MemberId);
+ if (success)
+ {
+ await LoadMembers(); // Refresh the list
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error deleting member: {ex.Message}");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/Components/Pages/Schedules.razor b/frontend/Components/Pages/Schedules.razor
new file mode 100644
index 0000000..0f23284
--- /dev/null
+++ b/frontend/Components/Pages/Schedules.razor
@@ -0,0 +1,298 @@
+@page "/schedules"
+@using NimbusFlow.Frontend.Services
+@using NimbusFlow.Frontend.Models
+@inject IApiService ApiService
+@inject IJSRuntime JSRuntime
+
+Schedules
+
+
+
+@if (loading)
+{
+
+}
+else if (schedules.Any())
+{
+
+
+
+
+ All Statuses
+ Pending
+ Accepted
+ Declined
+
+
+
+
+
+
+ Clear Filters
+
+
+
+
+
+
+
+
+
+
+
+ Member
+ Service Date
+ Service Type
+ Status
+ Scheduled At
+ Response Date
+ Actions
+
+
+
+ @foreach (var schedule in filteredSchedules.OrderByDescending(s => s.ScheduledAt))
+ {
+
+
+ @schedule.Member?.FullName
+
+
+ @schedule.Service?.ServiceDate.ToString("MMM dd, yyyy")
+
+
+ @schedule.Service?.ServiceTypeName
+
+
+
+ @schedule.Status.ToUpper()
+
+
+
+ @schedule.ScheduledAt.ToString("MMM dd, yyyy HH:mm")
+
+
+ @if (schedule.AcceptedAt.HasValue)
+ {
+ @schedule.AcceptedAt.Value.ToString("MMM dd, yyyy HH:mm")
+ }
+ else if (schedule.DeclinedAt.HasValue)
+ {
+ @schedule.DeclinedAt.Value.ToString("MMM dd, yyyy HH:mm")
+ }
+ else
+ {
+ -
+ }
+
+
+
+ @if (schedule.Status == "pending")
+ {
+
AcceptSchedule(schedule.ScheduleId)">
+ Accept
+
+
ShowDeclineModal(schedule)">
+ Decline
+
+ }
+
View
+
ConfirmRemove(schedule)">
+ Remove
+
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+ Showing @filteredSchedules.Count() of @schedules.Count schedules
+
+
+
+}
+else
+{
+
+}
+
+
+@if (showDeclineModal)
+{
+
+
+
+
+
+
+ Decline Reason (Optional)
+
+
+
+
+
+
+
+}
+
+@code {
+ private List schedules = new();
+ private bool loading = true;
+ private string selectedStatus = "";
+ private DateTime? filterDate;
+ private bool showDeclineModal = false;
+ private Schedule? scheduleToDecline;
+ private string declineReason = "";
+
+ private IEnumerable filteredSchedules
+ {
+ get
+ {
+ var filtered = schedules.AsEnumerable();
+
+ if (!string.IsNullOrEmpty(selectedStatus))
+ {
+ filtered = filtered.Where(s => s.Status == selectedStatus);
+ }
+
+ if (filterDate.HasValue)
+ {
+ filtered = filtered.Where(s => s.Service?.ServiceDate.Date == filterDate.Value.Date);
+ }
+
+ return filtered;
+ }
+ }
+
+ protected override async Task OnInitializedAsync()
+ {
+ await LoadSchedules();
+ }
+
+ private async Task LoadSchedules()
+ {
+ try
+ {
+ loading = true;
+ schedules = await ApiService.GetSchedulesAsync();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error loading schedules: {ex.Message}");
+ }
+ finally
+ {
+ loading = false;
+ }
+ }
+
+ private string GetStatusBadgeClass(string status)
+ {
+ return status switch
+ {
+ "pending" => "bg-warning text-dark",
+ "accepted" => "bg-success",
+ "declined" => "bg-danger",
+ _ => "bg-secondary"
+ };
+ }
+
+ private async Task AcceptSchedule(int scheduleId)
+ {
+ try
+ {
+ await ApiService.AcceptScheduleAsync(scheduleId);
+ await LoadSchedules(); // Refresh the list
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error accepting schedule: {ex.Message}");
+ }
+ }
+
+ private void ShowDeclineModal(Schedule schedule)
+ {
+ scheduleToDecline = schedule;
+ declineReason = "";
+ showDeclineModal = true;
+ }
+
+ private void HideDeclineModal()
+ {
+ showDeclineModal = false;
+ scheduleToDecline = null;
+ declineReason = "";
+ }
+
+ private async Task ConfirmDecline()
+ {
+ if (scheduleToDecline != null)
+ {
+ try
+ {
+ await ApiService.DeclineScheduleAsync(scheduleToDecline.ScheduleId, declineReason);
+ await LoadSchedules(); // Refresh the list
+ HideDeclineModal();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error declining schedule: {ex.Message}");
+ }
+ }
+ }
+
+ private async Task ConfirmRemove(Schedule schedule)
+ {
+ var confirmed = await JSRuntime.InvokeAsync("confirm", $"Are you sure you want to remove the schedule for {schedule.Member?.FullName}?");
+ if (confirmed)
+ {
+ try
+ {
+ var success = await ApiService.RemoveScheduleAsync(schedule.ScheduleId);
+ if (success)
+ {
+ await LoadSchedules(); // Refresh the list
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error removing schedule: {ex.Message}");
+ }
+ }
+ }
+
+ private void ClearFilters()
+ {
+ selectedStatus = "";
+ filterDate = null;
+ }
+}
\ No newline at end of file
diff --git a/frontend/Components/Pages/Services.razor b/frontend/Components/Pages/Services.razor
new file mode 100644
index 0000000..ce0a094
--- /dev/null
+++ b/frontend/Components/Pages/Services.razor
@@ -0,0 +1,238 @@
+@page "/services"
+@using NimbusFlow.Frontend.Services
+@using NimbusFlow.Frontend.Models
+@inject IApiService ApiService
+
+Services
+
+
+
+@if (loading)
+{
+
+}
+else if (services.Any())
+{
+
+
+
+
+ All Service Types
+ @foreach (var serviceType in serviceTypes)
+ {
+ @serviceType.TypeName
+ }
+
+
+
+
+
+
+
+
+
+ Show past services
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Date
+ Service Type
+ Scheduled Members
+ Status
+ Actions
+
+
+
+ @foreach (var service in filteredServices.OrderBy(s => s.ServiceDate))
+ {
+
+
+ @service.ServiceDate.ToString("MMM dd, yyyy (dddd)")
+
+
+
+ @service.ServiceTypeName
+
+
+
+ @{
+ var serviceSchedules = schedules.Where(s => s.ServiceId == service.ServiceId).ToList();
+ var acceptedCount = serviceSchedules.Count(s => s.Status == "accepted");
+ var pendingCount = serviceSchedules.Count(s => s.Status == "pending");
+ var declinedCount = serviceSchedules.Count(s => s.Status == "declined");
+ }
+
+ @if (acceptedCount > 0)
+ {
+ @acceptedCount accepted
+ }
+ @if (pendingCount > 0)
+ {
+ @pendingCount pending
+ }
+ @if (declinedCount > 0)
+ {
+ @declinedCount declined
+ }
+ @if (serviceSchedules.Count == 0)
+ {
+ No schedules
+ }
+
+
+
+ @if (service.ServiceDate < DateTime.Today)
+ {
+ Past
+ }
+ else if (service.ServiceDate == DateTime.Today)
+ {
+ Today
+ }
+ else
+ {
+ Upcoming
+ }
+
+
+
+
View
+ @if (service.ServiceDate >= DateTime.Today)
+ {
+
Schedule
+
Edit
+ }
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+ Showing @filteredServices.Count() of @services.Count services
+
+
+
+}
+else
+{
+
+}
+
+@code {
+ private List services = new();
+ private List serviceTypes = new();
+ private List schedules = new();
+ private bool loading = true;
+ private string selectedServiceType = "";
+ private DateTime? filterDate;
+ private bool showPastServices = false;
+
+ private IEnumerable filteredServices
+ {
+ get
+ {
+ var filtered = services.AsEnumerable();
+
+ if (!showPastServices)
+ {
+ filtered = filtered.Where(s => s.ServiceDate >= DateTime.Today);
+ }
+
+ if (!string.IsNullOrEmpty(selectedServiceType) && int.TryParse(selectedServiceType, out int typeId))
+ {
+ filtered = filtered.Where(s => s.ServiceTypeId == typeId);
+ }
+
+ if (filterDate.HasValue)
+ {
+ filtered = filtered.Where(s => s.ServiceDate.Date == filterDate.Value.Date);
+ }
+
+ return filtered;
+ }
+ }
+
+ protected override async Task OnInitializedAsync()
+ {
+ await LoadData();
+ }
+
+ private async Task LoadData()
+ {
+ try
+ {
+ loading = true;
+
+ // Load all data in parallel
+ var servicesTask = ApiService.GetServicesAsync();
+ var serviceTypesTask = ApiService.GetServiceTypesAsync();
+ var schedulesTask = ApiService.GetSchedulesAsync();
+
+ await Task.WhenAll(servicesTask, serviceTypesTask, schedulesTask);
+
+ services = servicesTask.Result;
+ serviceTypes = serviceTypesTask.Result;
+ schedules = schedulesTask.Result;
+
+ // Map service type names to services
+ foreach (var service in services)
+ {
+ var serviceType = serviceTypes.FirstOrDefault(st => st.ServiceTypeId == service.ServiceTypeId);
+ service.ServiceTypeName = serviceType?.TypeName ?? "Unknown";
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error loading services data: {ex.Message}");
+ }
+ finally
+ {
+ loading = false;
+ }
+ }
+
+ private string GetServiceTypeBadgeClass(string? serviceTypeName)
+ {
+ return serviceTypeName switch
+ {
+ "9AM" => "bg-info",
+ "11AM" => "bg-primary",
+ "6PM" => "bg-dark",
+ _ => "bg-secondary"
+ };
+ }
+}
\ No newline at end of file
diff --git a/frontend/Components/Routes.razor b/frontend/Components/Routes.razor
new file mode 100644
index 0000000..f756e19
--- /dev/null
+++ b/frontend/Components/Routes.razor
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/frontend/Components/_Imports.razor b/frontend/Components/_Imports.razor
new file mode 100644
index 0000000..579a3bd
--- /dev/null
+++ b/frontend/Components/_Imports.razor
@@ -0,0 +1,10 @@
+@using System.Net.Http
+@using System.Net.Http.Json
+@using Microsoft.AspNetCore.Components.Forms
+@using Microsoft.AspNetCore.Components.Routing
+@using Microsoft.AspNetCore.Components.Web
+@using static Microsoft.AspNetCore.Components.Web.RenderMode
+@using Microsoft.AspNetCore.Components.Web.Virtualization
+@using Microsoft.JSInterop
+@using NimbusFlow.Frontend
+@using NimbusFlow.Frontend.Components
diff --git a/frontend/Models/Member.cs b/frontend/Models/Member.cs
new file mode 100644
index 0000000..fddf6c6
--- /dev/null
+++ b/frontend/Models/Member.cs
@@ -0,0 +1,59 @@
+namespace NimbusFlow.Frontend.Models
+{
+ public class Member
+ {
+ public int MemberId { get; set; }
+ public string FirstName { get; set; } = string.Empty;
+ public string LastName { get; set; } = string.Empty;
+ public string? Email { get; set; }
+ public string? PhoneNumber { get; set; }
+ public int? ClassificationId { get; set; }
+ public string? Notes { get; set; }
+ public bool IsActive { get; set; } = true;
+ public DateTime? LastScheduledAt { get; set; }
+ public DateTime? LastAcceptedAt { get; set; }
+ public DateTime? LastDeclinedAt { get; set; }
+ public int DeclineStreak { get; set; } = 0;
+
+ // Navigation properties
+ public string? ClassificationName { get; set; }
+ public string FullName => $"{FirstName} {LastName}";
+ }
+
+ public class Classification
+ {
+ public int ClassificationId { get; set; }
+ public string ClassificationName { get; set; } = string.Empty;
+ }
+
+ public class Service
+ {
+ public int ServiceId { get; set; }
+ public int ServiceTypeId { get; set; }
+ public DateTime ServiceDate { get; set; }
+ public string? ServiceTypeName { get; set; }
+ }
+
+ public class ServiceType
+ {
+ public int ServiceTypeId { get; set; }
+ public string TypeName { get; set; } = string.Empty;
+ }
+
+ public class Schedule
+ {
+ public int ScheduleId { get; set; }
+ public int ServiceId { get; set; }
+ public int MemberId { get; set; }
+ public string Status { get; set; } = string.Empty; // pending, accepted, declined
+ public DateTime ScheduledAt { get; set; }
+ public DateTime? AcceptedAt { get; set; }
+ public DateTime? DeclinedAt { get; set; }
+ public DateTime? ExpiresAt { get; set; }
+ public string? DeclineReason { get; set; }
+
+ // Navigation properties
+ public Member? Member { get; set; }
+ public Service? Service { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/frontend/NimbusFlow.Frontend.csproj b/frontend/NimbusFlow.Frontend.csproj
new file mode 100644
index 0000000..1b28a01
--- /dev/null
+++ b/frontend/NimbusFlow.Frontend.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/frontend/Program.cs b/frontend/Program.cs
new file mode 100644
index 0000000..bab3840
--- /dev/null
+++ b/frontend/Program.cs
@@ -0,0 +1,36 @@
+using NimbusFlow.Frontend.Components;
+using NimbusFlow.Frontend.Services;
+
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+builder.Services.AddRazorComponents()
+ .AddInteractiveServerComponents();
+
+// Add HTTP client for backend API communication
+builder.Services.AddHttpClient(client =>
+{
+ client.BaseAddress = new Uri("http://localhost:8000/api/"); // Python backend API endpoint
+});
+
+builder.Services.AddScoped();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (!app.Environment.IsDevelopment())
+{
+ app.UseExceptionHandler("/Error", createScopeForErrors: true);
+ // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ app.UseHsts();
+}
+
+app.UseHttpsRedirection();
+
+app.UseStaticFiles();
+app.UseAntiforgery();
+
+app.MapRazorComponents()
+ .AddInteractiveServerRenderMode();
+
+app.Run();
diff --git a/frontend/Properties/launchSettings.json b/frontend/Properties/launchSettings.json
new file mode 100644
index 0000000..97b4d14
--- /dev/null
+++ b/frontend/Properties/launchSettings.json
@@ -0,0 +1,38 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:4068",
+ "sslPort": 44352
+ }
+ },
+ "profiles": {
+ "http": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "applicationUrl": "http://localhost:5059",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "applicationUrl": "https://localhost:7176;http://localhost:5059",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+ }
diff --git a/frontend/README.md b/frontend/README.md
index 7959ce4..e8bdd4d 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -1,69 +1,127 @@
-# React + TypeScript + Vite
+# NimbusFlow Frontend - Blazor Server Application
-This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+A modern web application built with .NET 8 Blazor Server for managing member scheduling in the NimbusFlow system.
-Currently, two official plugins are available:
+## Features
-- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
-- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+- **Dashboard**: Overview of system statistics and recent activities
+- **Member Management**: Complete CRUD operations for choir members
+- **Schedule Management**: View, accept, decline, and manage member schedules
+- **Service Management**: Create and manage service events
+- **Real-time Updates**: Server-side rendering with SignalR for real-time updates
+- **Responsive Design**: Bootstrap-based UI that works on all devices
-## Expanding the ESLint configuration
+## Architecture
-If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
+This Blazor Server application follows a clean architecture pattern:
-```js
-export default tseslint.config([
- globalIgnores(['dist']),
- {
- files: ['**/*.{ts,tsx}'],
- extends: [
- // Other configs...
+- **Components/Pages**: Razor components for each major feature
+- **Services**: HTTP client services for backend API communication
+- **Models**: C# data models matching the Python backend schema
+- **Layout**: Consistent navigation and layout components
- // Remove tseslint.configs.recommended and replace with this
- ...tseslint.configs.recommendedTypeChecked,
- // Alternatively, use this for stricter rules
- ...tseslint.configs.strictTypeChecked,
- // Optionally, add this for stylistic rules
- ...tseslint.configs.stylisticTypeChecked,
+## Prerequisites
- // Other configs...
- ],
- languageOptions: {
- parserOptions: {
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
- tsconfigRootDir: import.meta.dirname,
- },
- // other options...
- },
- },
-])
+- .NET 8.0 SDK
+- Python backend API running on http://localhost:8000/api/
+
+## Getting Started
+
+1. **Restore packages**:
+ ```bash
+ dotnet restore
+ ```
+
+2. **Run the application**:
+ ```bash
+ dotnet watch # with hot reload
+ # or
+ dotnet run # without hot reload
+ ```
+
+3. **Access the application**:
+ - HTTPS: https://localhost:5001
+ - HTTP: http://localhost:5000
+
+## API Configuration
+
+The application is configured to communicate with the Python backend API. Update the base URL in `Program.cs` if your backend runs on a different port:
+
+```csharp
+builder.Services.AddHttpClient(client =>
+{
+ client.BaseAddress = new Uri("http://localhost:8000/api/");
+});
```
-You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
+## Project Structure
-```js
-// eslint.config.js
-import reactX from 'eslint-plugin-react-x'
-import reactDom from 'eslint-plugin-react-dom'
-
-export default tseslint.config([
- globalIgnores(['dist']),
- {
- files: ['**/*.{ts,tsx}'],
- extends: [
- // Other configs...
- // Enable lint rules for React
- reactX.configs['recommended-typescript'],
- // Enable lint rules for React DOM
- reactDom.configs.recommended,
- ],
- languageOptions: {
- parserOptions: {
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
- tsconfigRootDir: import.meta.dirname,
- },
- // other options...
- },
- },
-])
```
+├── Components/
+│ ├── Layout/
+│ │ ├── MainLayout.razor # Main page layout
+│ │ └── NavMenu.razor # Navigation menu
+│ └── Pages/
+│ ├── Home.razor # Dashboard page
+│ ├── Members.razor # Member management
+│ ├── Schedules.razor # Schedule management
+│ └── Services.razor # Service management
+├── Models/
+│ └── Member.cs # Data models
+├── Services/
+│ ├── IApiService.cs # Service interface
+│ └── ApiService.cs # HTTP API client
+├── wwwroot/ # Static files
+├── Program.cs # Application startup
+└── appsettings.json # Configuration
+```
+
+## Key Features
+
+### Dashboard
+- System statistics (active members, pending schedules, etc.)
+- Recent schedule activities
+- Quick action buttons
+
+### Member Management
+- List all members with filtering options
+- Add/edit member information
+- View member scheduling history
+- Manage member classifications
+
+### Schedule Management
+- View all schedules with filtering
+- Accept/decline pending schedules
+- Remove schedules
+- View schedule details
+
+### Service Management
+- Create and manage service events
+- View service schedules and assignments
+- Filter by date and service type
+
+## Development
+
+The application uses Blazor Server which provides:
+
+- Real-time UI updates via SignalR
+- Server-side rendering for better performance
+- C# development throughout the stack
+- Automatic state management
+
+## Deployment
+
+To build for production:
+
+```bash
+dotnet publish -c Release
+```
+
+The published application will be in `bin/Release/net8.0/publish/`.
+
+## Dependencies
+
+- ASP.NET Core 8.0
+- Blazor Server
+- Bootstrap 5 (included in template)
+- System.Text.Json for API serialization
\ No newline at end of file
diff --git a/frontend/Services/ApiService.cs b/frontend/Services/ApiService.cs
new file mode 100644
index 0000000..e35ddd2
--- /dev/null
+++ b/frontend/Services/ApiService.cs
@@ -0,0 +1,182 @@
+using System.Text;
+using System.Text.Json;
+using NimbusFlow.Frontend.Models;
+
+namespace NimbusFlow.Frontend.Services
+{
+ public class ApiService : IApiService
+ {
+ private readonly HttpClient _httpClient;
+ private readonly JsonSerializerOptions _jsonOptions;
+
+ public ApiService(HttpClient httpClient)
+ {
+ _httpClient = httpClient;
+ _jsonOptions = new JsonSerializerOptions
+ {
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ PropertyNameCaseInsensitive = true
+ };
+ }
+
+ // Member operations
+ public async Task> GetMembersAsync()
+ {
+ var response = await _httpClient.GetAsync("members");
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize>(json, _jsonOptions) ?? new List();
+ }
+
+ public async Task GetMemberAsync(int id)
+ {
+ var response = await _httpClient.GetAsync($"members/{id}");
+ if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
+ return null;
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(json, _jsonOptions);
+ }
+
+ public async Task CreateMemberAsync(Member member)
+ {
+ var json = JsonSerializer.Serialize(member, _jsonOptions);
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
+ var response = await _httpClient.PostAsync("members", content);
+ response.EnsureSuccessStatusCode();
+ var responseJson = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseJson, _jsonOptions) ?? member;
+ }
+
+ public async Task UpdateMemberAsync(Member member)
+ {
+ var json = JsonSerializer.Serialize(member, _jsonOptions);
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
+ var response = await _httpClient.PutAsync($"members/{member.MemberId}", content);
+ response.EnsureSuccessStatusCode();
+ var responseJson = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseJson, _jsonOptions) ?? member;
+ }
+
+ public async Task DeleteMemberAsync(int id)
+ {
+ var response = await _httpClient.DeleteAsync($"members/{id}");
+ return response.IsSuccessStatusCode;
+ }
+
+ // Classification operations
+ public async Task> GetClassificationsAsync()
+ {
+ var response = await _httpClient.GetAsync("classifications");
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize>(json, _jsonOptions) ?? new List();
+ }
+
+ // Service operations
+ public async Task> GetServicesAsync()
+ {
+ var response = await _httpClient.GetAsync("services");
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize>(json, _jsonOptions) ?? new List();
+ }
+
+ public async Task GetServiceAsync(int id)
+ {
+ var response = await _httpClient.GetAsync($"services/{id}");
+ if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
+ return null;
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(json, _jsonOptions);
+ }
+
+ public async Task CreateServiceAsync(Service service)
+ {
+ var json = JsonSerializer.Serialize(service, _jsonOptions);
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
+ var response = await _httpClient.PostAsync("services", content);
+ response.EnsureSuccessStatusCode();
+ var responseJson = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseJson, _jsonOptions) ?? service;
+ }
+
+ // Schedule operations
+ public async Task> GetSchedulesAsync()
+ {
+ var response = await _httpClient.GetAsync("schedules");
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize>(json, _jsonOptions) ?? new List();
+ }
+
+ public async Task> GetMemberSchedulesAsync(int memberId)
+ {
+ var response = await _httpClient.GetAsync($"members/{memberId}/schedules");
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize>(json, _jsonOptions) ?? new List();
+ }
+
+ public async Task GetScheduleAsync(int id)
+ {
+ var response = await _httpClient.GetAsync($"schedules/{id}");
+ if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
+ return null;
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(json, _jsonOptions);
+ }
+
+ public async Task AcceptScheduleAsync(int scheduleId)
+ {
+ var response = await _httpClient.PostAsync($"schedules/{scheduleId}/accept", null);
+ response.EnsureSuccessStatusCode();
+ var responseJson = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseJson, _jsonOptions) ?? new Schedule();
+ }
+
+ public async Task DeclineScheduleAsync(int scheduleId, string? reason = null)
+ {
+ var content = new StringContent(
+ JsonSerializer.Serialize(new { reason }, _jsonOptions),
+ Encoding.UTF8,
+ "application/json"
+ );
+ var response = await _httpClient.PostAsync($"schedules/{scheduleId}/decline", content);
+ response.EnsureSuccessStatusCode();
+ var responseJson = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseJson, _jsonOptions) ?? new Schedule();
+ }
+
+ public async Task RemoveScheduleAsync(int scheduleId)
+ {
+ var response = await _httpClient.DeleteAsync($"schedules/{scheduleId}");
+ return response.IsSuccessStatusCode;
+ }
+
+ public async Task ScheduleNextMemberAsync(int serviceId, List classificationIds)
+ {
+ var content = new StringContent(
+ JsonSerializer.Serialize(new { serviceId, classificationIds }, _jsonOptions),
+ Encoding.UTF8,
+ "application/json"
+ );
+ var response = await _httpClient.PostAsync("schedules/schedule-next", content);
+ if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
+ return null;
+ response.EnsureSuccessStatusCode();
+ var responseJson = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseJson, _jsonOptions);
+ }
+
+ public async Task> GetServiceTypesAsync()
+ {
+ var response = await _httpClient.GetAsync("service-types");
+ response.EnsureSuccessStatusCode();
+ var json = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize>(json, _jsonOptions) ?? new List();
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/Services/IApiService.cs b/frontend/Services/IApiService.cs
new file mode 100644
index 0000000..e9d0a26
--- /dev/null
+++ b/frontend/Services/IApiService.cs
@@ -0,0 +1,36 @@
+using NimbusFlow.Frontend.Models;
+
+namespace NimbusFlow.Frontend.Services
+{
+ public interface IApiService
+ {
+ // Member operations
+ Task> GetMembersAsync();
+ Task GetMemberAsync(int id);
+ Task CreateMemberAsync(Member member);
+ Task UpdateMemberAsync(Member member);
+ Task DeleteMemberAsync(int id);
+
+ // Classification operations
+ Task> GetClassificationsAsync();
+
+ // Service operations
+ Task> GetServicesAsync();
+ Task GetServiceAsync(int id);
+ Task CreateServiceAsync(Service service);
+
+ // Schedule operations
+ Task> GetSchedulesAsync();
+ Task> GetMemberSchedulesAsync(int memberId);
+ Task GetScheduleAsync(int id);
+ Task AcceptScheduleAsync(int scheduleId);
+ Task DeclineScheduleAsync(int scheduleId, string? reason = null);
+ Task RemoveScheduleAsync(int scheduleId);
+
+ // Scheduling operations
+ Task ScheduleNextMemberAsync(int serviceId, List classificationIds);
+
+ // Service Types
+ Task> GetServiceTypesAsync();
+ }
+}
\ No newline at end of file
diff --git a/frontend/appsettings.Development.json b/frontend/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/frontend/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/frontend/appsettings.json b/frontend/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/frontend/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/frontend/bin/Debug/net8.0/NimbusFlow.Frontend b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend
new file mode 100755
index 0000000..087a090
Binary files /dev/null and b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend differ
diff --git a/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.deps.json b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.deps.json
new file mode 100644
index 0000000..1497317
--- /dev/null
+++ b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.deps.json
@@ -0,0 +1,23 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "NimbusFlow.Frontend/1.0.0": {
+ "runtime": {
+ "NimbusFlow.Frontend.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "NimbusFlow.Frontend/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.dll b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.dll
new file mode 100644
index 0000000..c344992
Binary files /dev/null and b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.dll differ
diff --git a/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.pdb b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.pdb
new file mode 100644
index 0000000..22330b0
Binary files /dev/null and b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.pdb differ
diff --git a/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.runtimeconfig.json b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.runtimeconfig.json
new file mode 100644
index 0000000..5e604c7
--- /dev/null
+++ b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.runtimeconfig.json
@@ -0,0 +1,19 @@
+{
+ "runtimeOptions": {
+ "tfm": "net8.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "8.0.0"
+ },
+ {
+ "name": "Microsoft.AspNetCore.App",
+ "version": "8.0.0"
+ }
+ ],
+ "configProperties": {
+ "System.GC.Server": true,
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.staticwebassets.runtime.json b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.staticwebassets.runtime.json
new file mode 100644
index 0000000..a124378
--- /dev/null
+++ b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.staticwebassets.runtime.json
@@ -0,0 +1 @@
+{"ContentRoots":["/home/t2/Development/nimbusflow/frontend/wwwroot/","/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/scopedcss/bundle/"],"Root":{"Children":{"app.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"app.css"},"Patterns":null},"bootstrap":{"Children":{"bootstrap.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"bootstrap/bootstrap.min.css"},"Patterns":null},"bootstrap.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"bootstrap/bootstrap.min.css.map"},"Patterns":null}},"Asset":null,"Patterns":null},"favicon.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"favicon.png"},"Patterns":null},"NimbusFlow.Frontend.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"NimbusFlow.Frontend.styles.css"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
\ No newline at end of file
diff --git a/frontend/bin/Debug/net8.0/appsettings.Development.json b/frontend/bin/Debug/net8.0/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/frontend/bin/Debug/net8.0/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/frontend/bin/Debug/net8.0/appsettings.json b/frontend/bin/Debug/net8.0/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/frontend/bin/Debug/net8.0/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js
deleted file mode 100644
index d94e7de..0000000
--- a/frontend/eslint.config.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import js from '@eslint/js'
-import globals from 'globals'
-import reactHooks from 'eslint-plugin-react-hooks'
-import reactRefresh from 'eslint-plugin-react-refresh'
-import tseslint from 'typescript-eslint'
-import { globalIgnores } from 'eslint/config'
-
-export default tseslint.config([
- globalIgnores(['dist']),
- {
- files: ['**/*.{ts,tsx}'],
- extends: [
- js.configs.recommended,
- tseslint.configs.recommended,
- reactHooks.configs['recommended-latest'],
- reactRefresh.configs.vite,
- ],
- languageOptions: {
- ecmaVersion: 2020,
- globals: globals.browser,
- },
- },
-])
diff --git a/frontend/index.html b/frontend/index.html
deleted file mode 100644
index e4b78ea..0000000
--- a/frontend/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
- Vite + React + TS
-
-
-
-
-
-
diff --git a/frontend/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/frontend/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..2217181
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfo.cs b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfo.cs
new file mode 100644
index 0000000..c37c006
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfo.cs
@@ -0,0 +1,22 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("NimbusFlow.Frontend")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3b9c074bc7f40cf57f01ecdca33cb850ee4eb7dc")]
+[assembly: System.Reflection.AssemblyProductAttribute("NimbusFlow.Frontend")]
+[assembly: System.Reflection.AssemblyTitleAttribute("NimbusFlow.Frontend")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfoInputs.cache b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..ec34ba0
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+903b0bd78cb44f079d9cac7109f5762d014e600b7d6925e89a6fe451b40172ed
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.GeneratedMSBuildEditorConfig.editorconfig b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..2518dfc
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,59 @@
+is_global = true
+build_property.TargetFramework = net8.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb = true
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = NimbusFlow.Frontend
+build_property.RootNamespace = NimbusFlow.Frontend
+build_property.ProjectDir = /home/t2/Development/nimbusflow/frontend/
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
+build_property.RazorLangVersion = 8.0
+build_property.SupportLocalizedComponentNames =
+build_property.GenerateRazorMetadataSourceChecksumAttributes =
+build_property.MSBuildProjectDirectory = /home/t2/Development/nimbusflow/frontend
+build_property._RazorSourceGeneratorDebug =
+
+[/home/t2/Development/nimbusflow/frontend/Components/App.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9BcHAucmF6b3I=
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/Pages/Error.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9FcnJvci5yYXpvcg==
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/Pages/Home.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9Ib21lLnJhem9y
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/Pages/Members.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9NZW1iZXJzLnJhem9y
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/Pages/Schedules.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9TY2hlZHVsZXMucmF6b3I=
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/Pages/Services.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9QYWdlcy9TZXJ2aWNlcy5yYXpvcg==
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/Routes.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9Sb3V0ZXMucmF6b3I=
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/_Imports.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9fSW1wb3J0cy5yYXpvcg==
+build_metadata.AdditionalFiles.CssScope =
+
+[/home/t2/Development/nimbusflow/frontend/Components/Layout/MainLayout.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9MYXlvdXQvTWFpbkxheW91dC5yYXpvcg==
+build_metadata.AdditionalFiles.CssScope = b-9xz5ehm10w
+
+[/home/t2/Development/nimbusflow/frontend/Components/Layout/NavMenu.razor]
+build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50cy9MYXlvdXQvTmF2TWVudS5yYXpvcg==
+build_metadata.AdditionalFiles.CssScope = b-qjlejshrrx
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.GlobalUsings.g.cs b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.GlobalUsings.g.cs
new file mode 100644
index 0000000..025530a
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.GlobalUsings.g.cs
@@ -0,0 +1,17 @@
+//
+global using global::Microsoft.AspNetCore.Builder;
+global using global::Microsoft.AspNetCore.Hosting;
+global using global::Microsoft.AspNetCore.Http;
+global using global::Microsoft.AspNetCore.Routing;
+global using global::Microsoft.Extensions.Configuration;
+global using global::Microsoft.Extensions.DependencyInjection;
+global using global::Microsoft.Extensions.Hosting;
+global using global::Microsoft.Extensions.Logging;
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Net.Http.Json;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.MvcApplicationPartsAssemblyInfo.cache b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.MvcApplicationPartsAssemblyInfo.cache
new file mode 100644
index 0000000..e69de29
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.assets.cache b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.assets.cache
new file mode 100644
index 0000000..887c06d
Binary files /dev/null and b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.assets.cache differ
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.csproj.CoreCompileInputs.cache b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..71ed819
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+27628f432c885c6d6664e08021d1b1f4ca5058cc599948362511b2ad9f9fbc8f
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.csproj.FileListAbsolute.txt b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..4dde233
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.csproj.FileListAbsolute.txt
@@ -0,0 +1,29 @@
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.GeneratedMSBuildEditorConfig.editorconfig
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfoInputs.cache
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.AssemblyInfo.cs
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.csproj.CoreCompileInputs.cache
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.MvcApplicationPartsAssemblyInfo.cache
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/appsettings.Development.json
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/appsettings.json
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.staticwebassets.runtime.json
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/NimbusFlow.Frontend
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.deps.json
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.runtimeconfig.json
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.dll
+/home/t2/Development/nimbusflow/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.pdb
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/staticwebassets.build.json
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/staticwebassets.development.json
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/staticwebassets/msbuild.NimbusFlow.Frontend.Microsoft.AspNetCore.StaticWebAssets.props
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/staticwebassets/msbuild.build.NimbusFlow.Frontend.props
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/staticwebassets/msbuild.buildMultiTargeting.NimbusFlow.Frontend.props
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/staticwebassets/msbuild.buildTransitive.NimbusFlow.Frontend.props
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/staticwebassets.pack.json
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/scopedcss/Components/Layout/MainLayout.razor.rz.scp.css
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/scopedcss/Components/Layout/NavMenu.razor.rz.scp.css
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/scopedcss/bundle/NimbusFlow.Frontend.styles.css
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/scopedcss/projectbundle/NimbusFlow.Frontend.bundle.scp.css
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.dll
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/refint/NimbusFlow.Frontend.dll
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.pdb
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.genruntimeconfig.cache
+/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/ref/NimbusFlow.Frontend.dll
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.dll b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.dll
new file mode 100644
index 0000000..c344992
Binary files /dev/null and b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.dll differ
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.genruntimeconfig.cache b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.genruntimeconfig.cache
new file mode 100644
index 0000000..2d6c7ce
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.genruntimeconfig.cache
@@ -0,0 +1 @@
+3f75a48d851e3753676d6adc9e3697efe55d6269084946619fd7f2b230a66010
diff --git a/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.pdb b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.pdb
new file mode 100644
index 0000000..22330b0
Binary files /dev/null and b/frontend/obj/Debug/net8.0/NimbusFlow.Frontend.pdb differ
diff --git a/frontend/obj/Debug/net8.0/apphost b/frontend/obj/Debug/net8.0/apphost
new file mode 100755
index 0000000..087a090
Binary files /dev/null and b/frontend/obj/Debug/net8.0/apphost differ
diff --git a/frontend/obj/Debug/net8.0/project.razor.json b/frontend/obj/Debug/net8.0/project.razor.json
new file mode 100644
index 0000000..162d03f
--- /dev/null
+++ b/frontend/obj/Debug/net8.0/project.razor.json
@@ -0,0 +1,19785 @@
+{
+ "SerializedFilePath": "/home/t2/Development/nimbusflow/frontend/obj/Debug/net8.0/project.razor.json",
+ "FilePath": "/home/t2/Development/nimbusflow/frontend/NimbusFlow.Frontend.csproj",
+ "Configuration": {
+ "ConfigurationName": "MVC-3.0",
+ "LanguageVersion": "8.0",
+ "Extensions": [
+ {
+ "ExtensionName": "MVC-3.0"
+ }
+ ]
+ },
+ "ProjectWorkspaceState": {
+ "TagHelpers": [
+ {
+ "HashCode": 1351590547,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.App",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "App"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.App",
+ "Common.TypeNameIdentifier": "App",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1611459765,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.App",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.App"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.App",
+ "Common.TypeNameIdentifier": "App",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -2069060936,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Error",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Error"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Error",
+ "Common.TypeNameIdentifier": "Error",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1991049094,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Error",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Pages.Error"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Error",
+ "Common.TypeNameIdentifier": "Error",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -2144364343,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Home",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Home"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Home",
+ "Common.TypeNameIdentifier": "Home",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1186783435,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Home",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Pages.Home"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Home",
+ "Common.TypeNameIdentifier": "Home",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -675494998,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Members",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Members"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Members",
+ "Common.TypeNameIdentifier": "Members",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1973361225,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Members",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Pages.Members"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Members",
+ "Common.TypeNameIdentifier": "Members",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -91000995,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Schedules",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Schedules"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Schedules",
+ "Common.TypeNameIdentifier": "Schedules",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1471417726,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Schedules",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Pages.Schedules"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Schedules",
+ "Common.TypeNameIdentifier": "Schedules",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 188835360,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Services",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Services"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Services",
+ "Common.TypeNameIdentifier": "Services",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -738274295,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Pages.Services",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Pages.Services"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Pages.Services",
+ "Common.TypeNameIdentifier": "Services",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Pages",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1190230256,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Routes",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Routes"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Routes",
+ "Common.TypeNameIdentifier": "Routes",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 477279312,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Routes",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Routes"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Routes",
+ "Common.TypeNameIdentifier": "Routes",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 291502412,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Layout.MainLayout",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "MainLayout"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Body",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets the content to be rendered inside the layout.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Body",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Layout.MainLayout",
+ "Common.TypeNameIdentifier": "MainLayout",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Layout",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1624477284,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Layout.MainLayout",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Layout.MainLayout"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Body",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets the content to be rendered inside the layout.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Body",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Layout.MainLayout",
+ "Common.TypeNameIdentifier": "MainLayout",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Layout",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1717773504,
+ "Kind": "Components.ChildContent",
+ "Name": "NimbusFlow.Frontend.Components.Layout.MainLayout.Body",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "Documentation": "\n \n Gets the content to be rendered inside the layout.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Body",
+ "ParentTag": "MainLayout"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Layout.MainLayout.Body",
+ "Common.TypeNameIdentifier": "MainLayout",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Layout",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -21477129,
+ "Kind": "Components.ChildContent",
+ "Name": "NimbusFlow.Frontend.Components.Layout.MainLayout.Body",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "Documentation": "\n \n Gets the content to be rendered inside the layout.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Body",
+ "ParentTag": "NimbusFlow.Frontend.Components.Layout.MainLayout"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Layout.MainLayout.Body",
+ "Common.TypeNameIdentifier": "MainLayout",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Layout",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -2108236767,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Layout.NavMenu",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NavMenu"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Layout.NavMenu",
+ "Common.TypeNameIdentifier": "NavMenu",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Layout",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1547345878,
+ "Kind": "Components.Component",
+ "Name": "NimbusFlow.Frontend.Components.Layout.NavMenu",
+ "AssemblyName": "NimbusFlow.Frontend",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NimbusFlow.Frontend.Components.Layout.NavMenu"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "NimbusFlow.Frontend.Components.Layout.NavMenu",
+ "Common.TypeNameIdentifier": "NavMenu",
+ "Common.TypeNamespace": "NimbusFlow.Frontend.Components.Layout",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1125193513,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n Combines the behaviors of and ,\n so that it displays the page matching the specified route but only if the user\n is authorized to see it.\n \n Additionally, this component supplies a cascading parameter of type ,\n which makes the user's current authentication state available to descendants.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "AuthorizeRouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "NotAuthorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "NotAuthorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorizing",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Authorizing",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Resource",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Resource",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DefaultLayout",
+ "TypeName": "System.Type",
+ "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DefaultLayout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1353204411,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n Combines the behaviors of and ,\n so that it displays the page matching the specified route but only if the user\n is authorized to see it.\n \n Additionally, this component supplies a cascading parameter of type ,\n which makes the user's current authentication state available to descendants.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "NotAuthorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "NotAuthorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorizing",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Authorizing",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Resource",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Resource",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DefaultLayout",
+ "TypeName": "System.Type",
+ "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DefaultLayout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 28551808,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotAuthorized",
+ "ParentTag": "AuthorizeRouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 943671478,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotAuthorized",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1180342159,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorizing",
+ "ParentTag": "AuthorizeRouteView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -568322930,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorizing",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
+ "Common.TypeNameIdentifier": "AuthorizeRouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1417296353,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n Displays differing content depending on the user's authorization status.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Policy",
+ "TypeName": "System.String",
+ "Documentation": "\n \n The policy name that determines whether the content can be displayed.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Policy",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Roles",
+ "TypeName": "System.String",
+ "Documentation": "\n \n A comma delimited list of roles that are allowed to display the content.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Roles",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "NotAuthorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "NotAuthorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Authorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorizing",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Authorizing",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Resource",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Resource",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -579165101,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n Displays differing content depending on the user's authorization status.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Policy",
+ "TypeName": "System.String",
+ "Documentation": "\n \n The policy name that determines whether the content can be displayed.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Policy",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Roles",
+ "TypeName": "System.String",
+ "Documentation": "\n \n A comma delimited list of roles that are allowed to display the content.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Roles",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "NotAuthorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "NotAuthorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorized",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Authorized",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Authorizing",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Authorizing",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Resource",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Resource",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 691741384,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 149689968,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1896163030,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotAuthorized",
+ "ParentTag": "AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1983295909,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotAuthorized",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1327754506,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorized",
+ "ParentTag": "AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'Authorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -776777801,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorized",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'Authorized' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 619656593,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorizing",
+ "ParentTag": "AuthorizeView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -693044280,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Authorizing",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
+ "Common.TypeNameIdentifier": "AuthorizeView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1723033981,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "CascadingAuthenticationState"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
+ "Common.TypeNameIdentifier": "CascadingAuthenticationState",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1018595988,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
+ "Common.TypeNameIdentifier": "CascadingAuthenticationState",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 359658250,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "CascadingAuthenticationState"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
+ "Common.TypeNameIdentifier": "CascadingAuthenticationState",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1173898559,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
+ "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
+ "Common.TypeNameIdentifier": "CascadingAuthenticationState",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 640702758,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n A component that provides a cascading value to all descendant components.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "CascadingValue"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.CascadingValue component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content to which the value should be provided.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n The value to be provided.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Optionally gives a name to the provided value. Descendant components\n will be able to receive the value by specifying this name.\n \n If no name is specified, then descendant components will receive the\n value based the type of value they are requesting.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "IsFixed",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n If true, indicates that will not change. This is a\n performance optimization that allows the framework to skip setting up\n change notifications. Set this flag only if you will not change\n during the component's lifetime.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "IsFixed",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.GenericTyped": "True",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1464995865,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n A component that provides a cascading value to all descendant components.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.CascadingValue"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.CascadingValue component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n The content to which the value should be provided.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n The value to be provided.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Optionally gives a name to the provided value. Descendant components\n will be able to receive the value by specifying this name.\n \n If no name is specified, then descendant components will receive the\n value based the type of value they are requesting.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "IsFixed",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n If true, indicates that will not change. This is a\n performance optimization that allows the framework to skip setting up\n change notifications. Set this flag only if you will not change\n during the component's lifetime.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "IsFixed",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -990761408,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n The content to which the value should be provided.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "CascadingValue"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1869295193,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n The content to which the value should be provided.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.CascadingValue"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
+ "Common.TypeNameIdentifier": "CascadingValue",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 869405140,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n A component that renders another component dynamically according to its\n parameter.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "DynamicComponent"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Type",
+ "TypeName": "System.Type",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the type of the component to be rendered. The supplied type must\n implement .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Type",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Parameters",
+ "TypeName": "System.Collections.Generic.IDictionary",
+ "Documentation": "\n \n Gets or sets a dictionary of parameters to be passed to the component.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Parameters",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "Common.TypeNameIdentifier": "DynamicComponent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 455488337,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n A component that renders another component dynamically according to its\n parameter.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.DynamicComponent"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "Type",
+ "TypeName": "System.Type",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the type of the component to be rendered. The supplied type must\n implement .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Type",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Parameters",
+ "TypeName": "System.Collections.Generic.IDictionary",
+ "Documentation": "\n \n Gets or sets a dictionary of parameters to be passed to the component.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Parameters",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.DynamicComponent",
+ "Common.TypeNameIdentifier": "DynamicComponent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1810945333,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Displays the specified content inside the specified layout and any further\n nested layouts.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "LayoutView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the content to display.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Layout",
+ "TypeName": "System.Type",
+ "Documentation": "\n \n Gets or sets the type of the layout in which to display the content.\n The type must implement and accept a parameter named .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Layout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1759169727,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Displays the specified content inside the specified layout and any further\n nested layouts.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.LayoutView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the content to display.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Layout",
+ "TypeName": "System.Type",
+ "Documentation": "\n \n Gets or sets the type of the layout in which to display the content.\n The type must implement and accept a parameter named .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Layout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1356619026,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to display.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "LayoutView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1744502368,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to display.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.LayoutView"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
+ "Common.TypeNameIdentifier": "LayoutView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1708964940,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.RouteView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Displays the specified page component, rendering it inside its layout\n and any further nested layouts.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "RouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DefaultLayout",
+ "TypeName": "System.Type",
+ "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DefaultLayout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.RouteView",
+ "Common.TypeNameIdentifier": "RouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1633478932,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.RouteView",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Displays the specified page component, rendering it inside its layout\n and any further nested layouts.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.RouteView"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "RouteData",
+ "TypeName": "Microsoft.AspNetCore.Components.RouteData",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "RouteData",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DefaultLayout",
+ "TypeName": "System.Type",
+ "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DefaultLayout",
+ "Common.GloballyQualifiedTypeName": "global::System.Type"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.RouteView",
+ "Common.TypeNameIdentifier": "RouteView",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1586617719,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n A component that supplies route data corresponding to the current navigation state.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Router"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AppAssembly",
+ "TypeName": "System.Reflection.Assembly",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the assembly that should be searched for components matching the URI.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AppAssembly",
+ "Common.GloballyQualifiedTypeName": "global::System.Reflection.Assembly"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAssemblies",
+ "TypeName": "System.Collections.Generic.IEnumerable",
+ "Documentation": "\n \n Gets or sets a collection of additional assemblies that should be searched for components\n that can match URIs.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAssemblies",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IEnumerable"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "NotFound",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "NotFound",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Found",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Found",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Navigating",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Navigating",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnNavigateAsync",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a handler that should be called before navigating to a new page.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnNavigateAsync",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "PreferExactMatches",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n Gets or sets a flag to indicate whether route matching should prefer exact matches\n over wildcards.\n This property is obsolete and configuring it does nothing. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "PreferExactMatches",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 275693345,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n A component that supplies route data corresponding to the current navigation state.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AppAssembly",
+ "TypeName": "System.Reflection.Assembly",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the assembly that should be searched for components matching the URI.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AppAssembly",
+ "Common.GloballyQualifiedTypeName": "global::System.Reflection.Assembly"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAssemblies",
+ "TypeName": "System.Collections.Generic.IEnumerable",
+ "Documentation": "\n \n Gets or sets a collection of additional assemblies that should be searched for components\n that can match URIs.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAssemblies",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IEnumerable"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "NotFound",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "NotFound",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Found",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "IsEditorRequired": true,
+ "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Found",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Navigating",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Navigating",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnNavigateAsync",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a handler that should be called before navigating to a new page.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnNavigateAsync",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "PreferExactMatches",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n Gets or sets a flag to indicate whether route matching should prefer exact matches\n over wildcards.\n This property is obsolete and configuring it does nothing. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "PreferExactMatches",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1262234482,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotFound",
+ "ParentTag": "Router"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -725188777,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "NotFound",
+ "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1489253790,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.Found",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Found",
+ "ParentTag": "Router"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'Found' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Found",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1787445002,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.Found",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Found",
+ "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'Found' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Found",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -394257164,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Navigating",
+ "ParentTag": "Router"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -146222543,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Navigating",
+ "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
+ "Common.TypeNameIdentifier": "Router",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1659631665,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Sections.SectionContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Provides content to components with matching s.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "SectionContent"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the ID that determines which instance will render\n the content of this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionId",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n Gets or sets the ID that determines which instance will render\n the content of this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionId",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the content to be rendered in corresponding instances.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Sections.SectionContent",
+ "Common.TypeNameIdentifier": "SectionContent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Sections",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1979528909,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Sections.SectionContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Provides content to components with matching s.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Sections.SectionContent"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the ID that determines which instance will render\n the content of this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionId",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n Gets or sets the ID that determines which instance will render\n the content of this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionId",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the content to be rendered in corresponding instances.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Sections.SectionContent",
+ "Common.TypeNameIdentifier": "SectionContent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Sections",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -222495738,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Sections.SectionContent.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to be rendered in corresponding instances.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "SectionContent"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Sections.SectionContent.ChildContent",
+ "Common.TypeNameIdentifier": "SectionContent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Sections",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -509145240,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Sections.SectionContent.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Gets or sets the content to be rendered in corresponding instances.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Sections.SectionContent"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Sections.SectionContent.ChildContent",
+ "Common.TypeNameIdentifier": "SectionContent",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Sections",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1596733427,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Sections.SectionOutlet",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Renders content provided by components with matching s.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "SectionOutlet"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the ID that determines which instances will provide\n content to this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionId",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n Gets or sets the ID that determines which instances will provide\n content to this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionId",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Sections.SectionOutlet",
+ "Common.TypeNameIdentifier": "SectionOutlet",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Sections",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 377744126,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Sections.SectionOutlet",
+ "AssemblyName": "Microsoft.AspNetCore.Components",
+ "Documentation": "\n \n Renders content provided by components with matching s.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Sections.SectionOutlet"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the ID that determines which instances will provide\n content to this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "SectionId",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n Gets or sets the ID that determines which instances will provide\n content to this instance.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "SectionId",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Sections.SectionOutlet",
+ "Common.TypeNameIdentifier": "SectionOutlet",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Sections",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -2104697638,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Forms",
+ "Documentation": "\n \n Adds Data Annotations validation support to an .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "DataAnnotationsValidator"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
+ "Common.TypeNameIdentifier": "DataAnnotationsValidator",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -914911582,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Forms",
+ "Documentation": "\n \n Adds Data Annotations validation support to an .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
+ "Common.TypeNameIdentifier": "DataAnnotationsValidator",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1613062692,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.AntiforgeryToken",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Component that renders an antiforgery token as a hidden field.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "AntiforgeryToken"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.AntiforgeryToken",
+ "Common.TypeNameIdentifier": "AntiforgeryToken",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1184460897,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.AntiforgeryToken",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Component that renders an antiforgery token as a hidden field.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.AntiforgeryToken"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.AntiforgeryToken",
+ "Common.TypeNameIdentifier": "AntiforgeryToken",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1983138005,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.EditForm",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Renders a form element that cascades an to descendants.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "EditForm"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created form element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "EditContext",
+ "TypeName": "Microsoft.AspNetCore.Components.Forms.EditContext",
+ "Documentation": "\n \n Supplies the edit context explicitly. If using this parameter, do not\n also supply , since the model value will be taken\n from the property.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "EditContext",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.EditContext"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Enhance",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n If enabled, form submission is performed without fully reloading the page. This is\n equivalent to adding data-enhance to the form.\n \n This flag is only relevant in server-side rendering (SSR) scenarios. For interactive\n rendering, the flag has no effect since there is no full-page reload on submit anyway.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Enhance",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Model",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n Specifies the top-level model object for the form. An edit context will\n be constructed for this model. If using this parameter, do not also supply\n a value for .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Model",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n A callback that will be invoked when the form is submitted.\n \n If using this parameter, you are responsible for triggering any validation\n manually, e.g., by calling .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnValidSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be valid.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnValidSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnInvalidSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be invalid.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnInvalidSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "FormName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the form handler name. This is required for posting it to a server-side endpoint.\n It is not used during interactive rendering.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "FormName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm",
+ "Common.TypeNameIdentifier": "EditForm",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 153021571,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.EditForm",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Renders a form element that cascades an to descendants.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.EditForm"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created form element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "EditContext",
+ "TypeName": "Microsoft.AspNetCore.Components.Forms.EditContext",
+ "Documentation": "\n \n Supplies the edit context explicitly. If using this parameter, do not\n also supply , since the model value will be taken\n from the property.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "EditContext",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.EditContext"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Enhance",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n If enabled, form submission is performed without fully reloading the page. This is\n equivalent to adding data-enhance to the form.\n \n This flag is only relevant in server-side rendering (SSR) scenarios. For interactive\n rendering, the flag has no effect since there is no full-page reload on submit anyway.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Enhance",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Model",
+ "TypeName": "System.Object",
+ "Documentation": "\n \n Specifies the top-level model object for the form. An edit context will\n be constructed for this model. If using this parameter, do not also supply\n a value for .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Model",
+ "Common.GloballyQualifiedTypeName": "global::System.Object"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n A callback that will be invoked when the form is submitted.\n \n If using this parameter, you are responsible for triggering any validation\n manually, e.g., by calling .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnValidSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be valid.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnValidSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "OnInvalidSubmit",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be invalid.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnInvalidSubmit",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "FormName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the form handler name. This is required for posting it to a server-side endpoint.\n It is not used during interactive rendering.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "FormName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for all child content expressions.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm",
+ "Common.TypeNameIdentifier": "EditForm",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1507007146,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "EditForm"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
+ "Common.TypeNameIdentifier": "EditForm",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -426702626,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Forms.EditForm"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.ChildContent",
+ "Name": "Context",
+ "TypeName": "System.String",
+ "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
+ "Metadata": {
+ "Components.ChildContentParameterName": "True",
+ "Common.PropertyName": "Context"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
+ "Common.TypeNameIdentifier": "EditForm",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 570434570,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing values.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputCheckbox"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueChanged",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
+ "Common.TypeNameIdentifier": "InputCheckbox",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -576929930,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing values.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "System.Boolean",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "global::System.Boolean"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueChanged",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
+ "Common.TypeNameIdentifier": "InputCheckbox",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1397837951,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputDate",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing date values.\n The supported types for the date value are:\n \n \n \n \n \n
\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputDate"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputDate component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Type",
+ "TypeName": "Microsoft.AspNetCore.Components.Forms.InputDateType",
+ "IsEnum": true,
+ "Documentation": "\n \n Gets or sets the type of HTML input to be rendered.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Type",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.InputDateType"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ParsingErrorMessage",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ParsingErrorMessage",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputDate",
+ "Common.TypeNameIdentifier": "InputDate",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -1852750623,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputDate",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing date values.\n The supported types for the date value are:\n \n \n \n \n \n
\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputDate"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputDate component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Type",
+ "TypeName": "Microsoft.AspNetCore.Components.Forms.InputDateType",
+ "IsEnum": true,
+ "Documentation": "\n \n Gets or sets the type of HTML input to be rendered.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Type",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.InputDateType"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ParsingErrorMessage",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ParsingErrorMessage",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputDate",
+ "Common.TypeNameIdentifier": "InputDate",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 58758437,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputFile",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n A component that wraps the HTML file input element and supplies a for each file's contents.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputFile"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "OnChange",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets the event callback that will be invoked when the collection of selected files changes.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnChange",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputFile",
+ "Common.TypeNameIdentifier": "InputFile",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 2109206281,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputFile",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n A component that wraps the HTML file input element and supplies a for each file's contents.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputFile"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "OnChange",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets the event callback that will be invoked when the collection of selected files changes.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "OnChange",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputFile",
+ "Common.TypeNameIdentifier": "InputFile",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 224323762,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputNumber",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing numeric values.\n Supported numeric types are , , , , , .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputNumber"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputNumber component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ParsingErrorMessage",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ParsingErrorMessage",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputNumber",
+ "Common.TypeNameIdentifier": "InputNumber",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -327546842,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputNumber",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing numeric values.\n Supported numeric types are , , , , , .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputNumber"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputNumber component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ParsingErrorMessage",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ParsingErrorMessage",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputNumber",
+ "Common.TypeNameIdentifier": "InputNumber",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1478557453,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadio",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component used for selecting a value from a group of choices.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputRadio"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadio component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of this input.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the name of the parent input radio group.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadio",
+ "Common.TypeNameIdentifier": "InputRadio",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": -373496607,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadio",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component used for selecting a value from a group of choices.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputRadio"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadio component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of this input.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the name of the parent input radio group.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadio",
+ "Common.TypeNameIdentifier": "InputRadio",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 831825152,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Groups child components.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputRadioGroup"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadioGroup component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the name of the group.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup",
+ "Common.TypeNameIdentifier": "InputRadioGroup",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 663303190,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Groups child components.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadioGroup component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the .\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Name",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the name of the group.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Name",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup",
+ "Common.TypeNameIdentifier": "InputRadioGroup",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1197124911,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "InputRadioGroup"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup.ChildContent",
+ "Common.TypeNameIdentifier": "InputRadioGroup",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 49842423,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the .\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup.ChildContent",
+ "Common.TypeNameIdentifier": "InputRadioGroup",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -1164483989,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputSelect",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n A dropdown selection component.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputSelect"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputSelect component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the select element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputSelect",
+ "Common.TypeNameIdentifier": "InputSelect",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 1160272057,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputSelect",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n A dropdown selection component.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputSelect"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "TValue",
+ "TypeName": "System.Type",
+ "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputSelect component.",
+ "Metadata": {
+ "Common.PropertyName": "TValue",
+ "Components.TypeParameter": "True",
+ "Components.TypeParameterIsCascading": "False"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ChildContent",
+ "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the select element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ChildContent",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
+ "Components.ChildContent": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "TValue",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "TValue",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Common.PropertyName": "ValueChanged",
+ "Components.EventCallback": "True",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
+ "Components.GenericTyped": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputSelect",
+ "Common.TypeNameIdentifier": "InputSelect",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.GenericTyped": "True",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 140514534,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputSelect.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the select element.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "InputSelect"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputSelect.ChildContent",
+ "Common.TypeNameIdentifier": "InputSelect",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": 1728624768,
+ "Kind": "Components.ChildContent",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputSelect.ChildContent",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n Gets or sets the child content to be rendering inside the select element.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "ChildContent",
+ "ParentTag": "Microsoft.AspNetCore.Components.Forms.InputSelect"
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputSelect.ChildContent",
+ "Common.TypeNameIdentifier": "InputSelect",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Components.IsSpecialKind": "Components.ChildContent",
+ "Components.NameMatch": "Components.FullyQualifiedNameMatch",
+ "Runtime.Name": "Components.None"
+ }
+ },
+ {
+ "HashCode": -409185871,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputText",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing values.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "InputText"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "Value",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueChanged",
+ "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
+ "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueChanged",
+ "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
+ "Components.EventCallback": "True"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "ValueExpression",
+ "TypeName": "System.Linq.Expressions.Expression>",
+ "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "ValueExpression",
+ "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "DisplayName",
+ "TypeName": "System.String",
+ "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly. \n \n ",
+ "Metadata": {
+ "Common.PropertyName": "DisplayName",
+ "Common.GloballyQualifiedTypeName": "global::System.String"
+ }
+ }
+ ],
+ "Metadata": {
+ "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputText",
+ "Common.TypeNameIdentifier": "InputText",
+ "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
+ "Runtime.Name": "Components.IComponent"
+ }
+ },
+ {
+ "HashCode": 555281043,
+ "Kind": "Components.Component",
+ "Name": "Microsoft.AspNetCore.Components.Forms.InputText",
+ "AssemblyName": "Microsoft.AspNetCore.Components.Web",
+ "Documentation": "\n \n An input component for editing values.\n \n ",
+ "CaseSensitive": true,
+ "TagMatchingRules": [
+ {
+ "TagName": "Microsoft.AspNetCore.Components.Forms.InputText"
+ }
+ ],
+ "BoundAttributes": [
+ {
+ "Kind": "Components.Component",
+ "Name": "AdditionalAttributes",
+ "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
+ "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
+ "Metadata": {
+ "Common.PropertyName": "AdditionalAttributes",
+ "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
+ }
+ },
+ {
+ "Kind": "Components.Component",
+ "Name": "Value",
+ "TypeName": "System.String",
+ "Documentation": "\n