{
  "$schema": "https://ai.syncfusion.com/schema/registry-item.json",
  "name": "grid-virtual-scrolling",
  "framework": "blazor",
  "type": "registry:component",
  "component": "Grid",
  "variant": "virtual-scrolling",
  "dependencies": [
    "Syncfusion.Blazor.Grids"
  ],
  "description": "Flight bookings grid uses row and column virtualization with editing, paging, validation, and a column chooser for large data.",
  "meta": {
    "essentialStudioRelease": "2026 Volume 2 (v34.1.29)",
    "license": "commercial-or-community",
    "licenseNote": "The Syncfusion package is licensed. The composition in this file is source you own and edit. See https://ai.syncfusion.com/licensing.md",
    "requiresLicenseKey": true,
    "requiresServerEndpoint": false,
    "platformIndex": "https://ai.syncfusion.com/blazor/llms.txt",
    "skillPack": "syncfusion/blazor-ui-components-skills",
    "docs": "https://ai.syncfusion.com/gallery/blazor/grid-virtual-scrolling.md"
  },
  "files": [
    {
      "target": "src/components/grid-virtual-scrolling/DataSource.cs",
      "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace BlazorDemos.Pages.Grid\n{\n    /// <summary>\n    /// Represents the cabin class tier for a flight booking.\n    /// </summary>\n    public enum ClassOfTravel\n    {\n        /// <summary>\n        /// Economy class with standard seating and amenities.\n        /// </summary>\n        Economy,\n\n        /// <summary>\n        /// Premium economy with enhanced comfort and services.\n        /// </summary>\n        [Display(Name = \"Premium Economy\")]\n        PremiumEconomy,\n\n        /// <summary>\n        /// Business class with premium seating and catering.\n        /// </summary>\n        Business,\n\n        /// <summary>\n        /// First class with luxury seating and exclusive services.\n        /// </summary>\n        FirstClass\n    }\n\n    /// <summary>\n    /// Represents the lifecycle state of a flight booking.\n    /// </summary>\n    public enum BookingStatus\n    {\n        /// <summary>\n        /// Booking is confirmed and reservation is valid.\n        /// </summary>\n        Confirmed,\n\n        /// <summary>\n        /// Booking is pending confirmation or awaiting payment.\n        /// </summary>\n        Pending,\n\n        /// <summary>\n        /// Passenger has checked in for the flight.\n        /// </summary>\n        CheckedIn,\n\n        /// <summary>\n        /// Booking was cancelled by passenger or airline.\n        /// </summary>\n        Cancelled,\n\n        /// <summary>\n        /// Flight has been completed and passenger has arrived.\n        /// </summary>\n        Completed,\n\n        /// <summary>\n        /// Passenger did not show up for the flight.\n        /// </summary>\n        NoShow\n    }\n\n    /// <summary>\n    /// Represents the payment method used for the booking.\n    /// </summary>\n    public enum PaymentMethodType\n    {\n        /// <summary>\n        /// Payment made using credit card.\n        /// </summary>\n        [Display(Name = \"Credit Card\")]\n        CreditCard,\n\n        /// <summary>\n        /// Payment made using debit card.\n        /// </summary>\n        [Display(Name = \"Debit Card\")]\n        DebitCard,\n\n        /// <summary>\n        /// Payment via net banking facility\n        /// </summary>\n        NetBanking,\n\n        /// <summary>\n        /// Payment made using digital wallet.\n        /// </summary>\n        Wallet,\n\n        /// <summary>\n        /// Payment made using UPI (Unified Payments Interface)\n        /// </summary>\n        UPI\n    }\n\n    /// <summary>\n    /// Represents the meal preference for a flight booking.\n    /// </summary>\n    public enum MealPreferenceType\n    {\n        /// <summary>\n        /// Standard non-vegetarian meal.\n        /// </summary>\n        NonVegetarian,\n\n        /// <summary>\n        /// Vegetarian meal option.\n        /// </summary>\n        Vegetarian,\n\n        /// <summary>\n        /// Vegan meal option.\n        /// </summary>\n        Vegan,\n\n        /// <summary>\n        /// Gluten-free meal option.\n        /// </summary>\n        GlutenFree,\n\n        /// <summary>\n        /// Kosher meal option.\n        /// </summary>\n        Kosher,\n\n        /// <summary>\n        /// Halal meal option.\n        /// </summary>\n        Halal\n    }\n\n    /// <summary>\n    /// Represents a flight booking containing passenger, flight, pricing, and booking details.\n    /// </summary>\n    public sealed class FlightBookingRecord\n    {\n        /// <summary>\n        /// Unique booking identifier for the reservation.\n        /// </summary>\n        public string BookingId { get; set; } = string.Empty;\n\n        /// <summary>\n        /// Full name of the passenger as per travel document.\n        /// </summary>\n        public string PassengerName { get; set; } = string.Empty;\n\n        /// <summary>\n        /// Email address associated with the booking.\n        /// </summary>\n        public string Email { get; set; } = string.Empty;\n\n        /// <summary>\n        /// Flight number identifier.\n        /// </summary>\n        public string FlightNumber { get; set; } = string.Empty;\n\n        /// <summary>\n        /// International airline code (e.g., AA, BA, LH).\n        /// </summary>\n        public string AirlineCode { get; set; } = string.Empty;\n\n        /// <summary>\n        /// IATA code of the departure airport.\n        /// </summary>\n        public string DepartureAirport { get; set; } = string.Empty;\n\n        /// <summary>\n        /// IATA code of the arrival airport.\n        /// </summary>\n        public string ArrivalAirport { get; set; } = string.Empty;\n\n        /// <summary>\n        /// Scheduled departure date and time.\n        /// </summary>\n        public DateTime DepartureDate { get; set; }\n\n        /// <summary>\n        /// Scheduled arrival date and time at destination.\n        /// </summary>\n        public DateTime ArrivalDate { get; set; }\n\n        /// <summary>\n        /// Assigned seat number (e.g., 12A, 34F).\n        /// </summary>\n        public string SeatNumber { get; set; } = string.Empty;\n\n        /// <summary>\n        /// Class of travel for this booking.\n        /// </summary>\n        public ClassOfTravel ClassOfTravel { get; set; }\n\n        /// <summary>\n        /// Date and time when the booking was created.\n        /// </summary>\n        public DateTime BookingDate { get; set; }\n\n        /// <summary>\n        /// Base ticket price before taxes.\n        /// </summary>\n        public decimal BookingAmount { get; set; }\n\n        /// <summary>\n        /// Tax amount calculated on the booking amount.\n        /// </summary>\n        public decimal TaxAmount { get; set; }\n\n        /// <summary>\n        /// Total fare including booking amount and taxes.\n        /// </summary>\n        public decimal TotalFare { get; set; }\n\n        /// <summary>\n        /// Current status of the booking.\n        /// </summary>\n        public BookingStatus Status { get; set; }\n\n        /// <summary>\n        /// Payment method used for the booking.\n        /// </summary>\n        public PaymentMethodType PaymentMethod { get; set; }\n\n        /// <summary>\n        /// Passenger's meal preference for the flight.\n        /// </summary>\n        public MealPreferenceType MealPreference { get; set; }\n\n        /// <summary>\n        /// Number of checked baggage allowance for this booking.\n        /// </summary>\n        public int BaggageAllowance { get; set; }\n\n        /// <summary>\n        /// Indicates whether the passenger has checked in for the flight.\n        /// </summary>\n        public bool CheckedIn { get; set; }\n    }\n\n    /// <summary>\n    /// Generates a collection of flight booking records with realistic, deterministic values for demonstration.\n    /// </summary>\n    public static class FlightBookingData\n    {\n        /// <summary>\n        /// Returns a fixed set of 10,000 flight booking records with realistic data patterns.\n        /// </summary>\n        public static IReadOnlyList<FlightBookingRecord> GetAllRecords()\n        {\n            // Generates a deterministic booking ID without repeating patterns.\n            static string GenerateBookingId(int index)\n            {\n                const string chars = \"ABCDEFGHJKLMNPQRSTUVWXYZ0123456789\";\n                int seed = index + 1;\n\n                char[] tail = new char[5];\n                int v = seed * 7919 + 104729;\n\n                for (int i = 0; i < tail.Length; i++)\n                {\n                    v = (v * 1315423911) ^ (v >> 5);\n                    int pos = Math.Abs(v % chars.Length);\n                    tail[i] = chars[pos];\n                }\n\n                return \"BK-2026-\" + new string(tail);\n            }\n\n            // Passenger names list.\n            string[] passengerNames =\n            {\n                \"Aaron Blake\", \"Abigail Watts\", \"Adrian Cole\", \"Aiden Brooks\", \"Alex Turner\", \"Alice Cruz\", \"Allison Grant\",\n                \"Alyssa Hayes\", \"Amelia Perry\", \"Andrew Stone\", \"Anna Fisher\", \"Anthony Ward\", \"Ariana Ross\", \"Ashley Cooper\",\n                \"Audrey Jenkins\", \"Austin Rivera\", \"Ava Barnes\", \"Benjamin Ford\", \"Caleb Myers\", \"Cameron Price\", \"Caroline Bell\",\n                \"Carter Howard\", \"Charlotte Scott\", \"Chloe Adams\", \"Christian Flores\", \"Christopher West\", \"Claire Morgan\",\n                \"Colin Bryant\", \"Daniel Reed\", \"David Powell\", \"Declan Griffin\", \"Dylan Hughes\", \"Eleanor Russell\", \"Elena Foster\",\n                \"Eli Parker\", \"Elijah Sanders\", \"Elizabeth Diaz\", \"Ella Coleman\", \"Elliot Pierce\", \"Emma Long\", \"Ethan Simmons\",\n                \"Evan Bennett\", \"Evelyn Stewart\", \"Gabriel Patterson\", \"Gavin Murray\", \"Grace Phillips\", \"Grant Young\",\n                \"Hannah Cook\", \"Harper Mitchell\", \"Henry Bailey\", \"Hudson Gomez\", \"Hunter Sullivan\", \"Ian Ramirez\", \"Isaac Ward\",\n                \"Isabelle Sharp\", \"Jack Matthews\", \"Jackson Perry\", \"Jacob Ortiz\", \"James Henderson\", \"Jason Newman\", \"Jasper Boyd\",\n                \"Jayden Elliott\", \"Jeremiah Fox\", \"Jocelyn Hart\", \"John Bishop\", \"Jonathan Payne\", \"Jordan Walters\", \"Joseph Cross\",\n                \"Joshua Gordon\", \"Julia Wallace\", \"Katherine Warren\", \"Kayla Rhodes\", \"Kenneth Holmes\", \"Landon Weaver\",\n                \"Lauren Barton\", \"Leah Chapman\", \"Leo Barrett\", \"Liam Carter\", \"Lillian Stephens\", \"Logan Reed\", \"Lucas Scott\",\n                \"Lucy Andrews\", \"Mackenzie Walsh\", \"Madison Pierce\", \"Maria Caldwell\", \"Mason White\", \"Matthew Curtis\", \"Mia Turner\",\n                \"Michael Stone\", \"Michelle Lowe\", \"Nathan Kim\", \"Nolan Pratt\", \"Noah Mitchell\", \"Nora Fleming\", \"Oliver Briggs\",\n                \"Olivia Larson\", \"Owen Jacobs\", \"Paige Lawson\", \"Parker Fleming\", \"Patrick Lowe\", \"Penelope Harper\", \"Peyton Rice\",\n                \"Quinn Abbott\", \"Rachel Grant\", \"Reagan Bishop\", \"Rebecca Steele\", \"Richard Lowe\", \"Riley Shaw\", \"Robert Pierce\",\n                \"Ruby Hayes\", \"Ryan Foster\", \"Samantha Ortiz\", \"Samuel Banks\", \"Sarah Kelley\", \"Savannah Horton\", \"Scarlett Ray\",\n                \"Sofia Greene\", \"Sophia Brown\", \"Stella Walsh\", \"Steven Cross\", \"Taylor Beck\", \"Thomas Watts\", \"Tyler Boone\",\n                \"Valerie Blake\", \"Victoria Paul\", \"Violet Hart\", \"William Pratt\", \"Wyatt Briggs\", \"Xavier Lawson\", \"Zachary Neal\",\n                \"Zoe Sherman\", \"Abram Fox\", \"Ace Howard\", \"Adam Murray\", \"Aeden Wallace\", \"Aidan Mitchell\", \"Ainsley Bennett\",\n                \"Aisha Patel\", \"Ajay Kumar\", \"Akhil Singh\", \"Alana Rogers\", \"Alba Martinez\", \"Alec Johnson\", \"Alexa Thompson\",\n                \"Alexander White\", \"Alexis Green\", \"Alfonso Brown\", \"Alfredo Sanchez\"\n            };\n\n            // Airline codes.\n            string[] airlineCodes = { \"AA\", \"BA\", \"LH\", \"QF\", \"SQ\", \"AK\", \"EK\", \"AF\", \"KL\", \"UA\" };\n\n            // Airport codes (IATA).\n            string[] airports = { \"New York (JFK)\", \"Los Angeles (LAX)\", \"London (LHR)\", \"Paris (CDG)\", \"Tokyo Narita (NRT)\", \"Singapore (SIN)\", \"Dubai (DXB)\", \"Tokyo Haneda (HND)\", \"Chicago O'Hare (ORD)\", \"Atlanta (ATL)\", \"Dallas/Fort Worth (DFW)\", \"Denver (DEN)\", \"San Francisco (SFO)\", \"Miami (MIA)\", \"Boston (BOS)\" };\n\n            // Email domains.\n            string[] emailDomains = { \"@example.com\" };\n\n            // Seat letters (A-F for 6-seat wide aircraft).\n            char[] seatLetters = { 'A', 'B', 'C', 'D', 'E', 'F' };\n\n            DateTime refDate = new DateTime(2026, 3, 2);\n            var list = new List<FlightBookingRecord>(capacity: 10000);\n\n            for (int i = 0; i < 10000; i++)\n            {\n                string bookingId = GenerateBookingId(i);\n\n                // Deterministic selections.\n                string passengerName = passengerNames[(i * 11) % passengerNames.Length];\n                string airlineCode = airlineCodes[(i * 3) % airlineCodes.Length];\n                string departureAirport = airports[(i * 7) % airports.Length];\n                string arrivalAirport = airports[((i * 13) + 5) % airports.Length];\n\n                // Ensure departure and arrival are different.\n                while (arrivalAirport == departureAirport)\n                {\n                    arrivalAirport = airports[((i * 13) + 7) % airports.Length];\n                }\n\n                // Generate email from passenger name and domain.\n                string emailPrefix = string.Concat(passengerName.Replace(\" \", \".\", StringComparison.Ordinal).Select(char.ToLowerInvariant));\n                string email = emailPrefix + emailDomains[(i * 5) % emailDomains.Length];\n\n                // Flight number format (airline code + 4-digit number).\n                string flightNumber = airlineCode + (1000 + (i % 9000)).ToString(CultureInfo.InvariantCulture);\n\n                // Seat number (row 1-100 + letter A-F).\n                int row = (i % 100) + 1;\n                char seatLetter = seatLetters[(i * 2) % seatLetters.Length];\n                string seatNumber = row.ToString(CultureInfo.InvariantCulture) + seatLetter;\n\n                // Departure date: 0-60 days from today.\n                int departureOffsetDays = i % 61;\n                DateTime departureDate = refDate.AddDays(departureOffsetDays);\n                // Add random time to departure (0-23 hours).\n                departureDate = departureDate.AddHours((i % 24));\n\n                // Arrival date: 4-24 hours after departure (realistic flight duration).\n                int flightDurationHours = 4 + (i % 21); // 4-24 hours\n                DateTime arrivalDate = departureDate.AddHours(flightDurationHours);\n\n                // Booking date: bookings are typically made 1–6 months before departure.\n                // Enforce a lead time of 30–180 days (30 days = 1 month, 180 days = ~6 months).\n                int leadDays = 30 + (i % 151); // 30..180 days\n                DateTime bookingDate = departureDate.AddDays(-leadDays);\n\n                // Status logic based on dates.\n                BookingStatus status;\n                bool checkedIn = false;\n\n                if (arrivalDate < refDate)\n                {\n                    // Flight already completed (arrived in past).\n                    status = BookingStatus.Completed;\n                }\n                else if (departureDate < refDate)\n                {\n                    // Flight was supposed to depart but hasn't arrived yet - unlikely but possible.\n                    // Or it's a no-show if booked.\n                    status = (i % 10 == 0) ? BookingStatus.NoShow : BookingStatus.Completed;\n                }\n                else if (departureDate <= refDate.AddHours(24))\n                {\n                    // Flight within next 24 hours - mark as checked in for some.\n                    if ((i % 4) == 0)\n                    {\n                        status = BookingStatus.CheckedIn;\n                        checkedIn = true;\n                    }\n                    else\n                    {\n                        status = BookingStatus.Confirmed;\n                    }\n                }\n                else if (bookingDate > refDate)\n                {\n                    // Very recent booking (made in the future - shouldn't happen, mark as Pending).\n                    status = BookingStatus.Pending;\n                }\n                else if ((i % 20) == 0)\n                {\n                    // Random cancellations.\n                    status = BookingStatus.Cancelled;\n                }\n                else\n                {\n                    // Standard confirmed booking.\n                    status = BookingStatus.Confirmed;\n                }\n\n                // Class of travel with realistic distribution.\n                // Economy ~60%, Premium ~20%, Business ~15%, First ~5%.\n                ClassOfTravel classOfTravel;\n                int classSelector = i % 100;\n                if (classSelector < 60)\n                    classOfTravel = ClassOfTravel.Economy;\n                else if (classSelector < 80)\n                    classOfTravel = ClassOfTravel.PremiumEconomy;\n                else if (classSelector < 95)\n                    classOfTravel = ClassOfTravel.Business;\n                else\n                    classOfTravel = ClassOfTravel.FirstClass;\n\n                // Baggage allowance based on class.\n                int baggageAllowance = classOfTravel switch\n                {\n                    ClassOfTravel.Economy => 1,\n                    ClassOfTravel.PremiumEconomy => 2,\n                    ClassOfTravel.Business => 2,\n                    ClassOfTravel.FirstClass => 3,\n                    _ => 1\n                };\n\n                // Pricing logic based on class.\n                decimal basePrice = classOfTravel switch\n                {\n                    ClassOfTravel.Economy => 200 + ((i % 401) * 1.0m),\n                    ClassOfTravel.PremiumEconomy => 600 + ((i % 801) * 1.0m),\n                    ClassOfTravel.Business => 1500 + ((i % 1501) * 1.0m),\n                    ClassOfTravel.FirstClass => 3000 + ((i % 2001) * 1.0m),\n                    _ => 200\n                };\n\n                // Round to nearest 10 for realism.\n                decimal bookingAmount = Math.Round(basePrice / 10) * 10;\n\n                // Tax calculation: 12-15% of booking amount.\n                decimal taxPercentage = 12 + ((i % 4) * 1.0m); // 12-15%\n                decimal taxAmount = Math.Round(bookingAmount * taxPercentage / 100, 2);\n\n                // Total fare.\n                decimal totalFare = bookingAmount + taxAmount;\n\n                // Payment method distribution.\n                PaymentMethodType paymentMethod = (PaymentMethodType)((i * 3) % 5);\n\n                // Meal preference.\n                MealPreferenceType mealPreference = (MealPreferenceType)((i * 7) % 6);\n\n                list.Add(new FlightBookingRecord\n                {\n                    BookingId = bookingId,\n                    PassengerName = passengerName,\n                    Email = email,\n                    FlightNumber = flightNumber,\n                    AirlineCode = airlineCode,\n                    DepartureAirport = departureAirport,\n                    ArrivalAirport = arrivalAirport,\n                    DepartureDate = departureDate,\n                    ArrivalDate = arrivalDate,\n                    SeatNumber = seatNumber,\n                    ClassOfTravel = classOfTravel,\n                    BookingDate = bookingDate,\n                    BookingAmount = bookingAmount,\n                    TaxAmount = taxAmount,\n                    TotalFare = totalFare,\n                    Status = status,\n                    PaymentMethod = paymentMethod,\n                    MealPreference = mealPreference,\n                    BaggageAllowance = baggageAllowance,\n                    CheckedIn = checkedIn\n                });\n            }\n\n            return list;\n        }\n    }\n}"
    },
    {
      "target": "src/components/grid-virtual-scrolling/Grid.razor",
      "content": "@page \"/datagrid/virtual-scrolling\"\n@using Syncfusion.Blazor.Grids\n@using BlazorDemos.Pages.Grid\n\n@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper\n<div class=\"col-lg-12 control-section\">\n    <div class=\"content-wrapper\">\n        <div class=\"row\">\n            @{\n                if (Data)\n                {\n                    <div class=\"apply-padding\"><span id=\"initialload\" class=\"topload\">Loading 10,000 Flight Booking Records and 20 Columns</span></div>\n                    <div class=\"loading\">\n                        <span id=\"spancontrol\" class=\"visible\">Generating Data </span>\n                        <img src=\"@UriHelper.ToAbsoluteUri($\"https://cdn.syncfusion.com/blazor/images/data-grid/spinner.gif\")\" />\n                    </div>\n                }\n                else\n                {\n                    <div class=\"apply-padding\"><span id=\"afterload\" class=\"topload\">Loaded 10,000 Flight Booking Records and 20 Columns</span> </div>\n                }\n            }\n            <SfGrid DataSource=\"@GridData\" Height=\"410\" Width=\"auto\" EnableHover=\"false\" ShowColumnChooser=\"true\" EnableVirtualization=\"true\" EnableColumnVirtualization=\"true\"\n                    Toolbar=\"@(new List<string>() { \"Edit\", \"Delete\", \"Update\", \"Cancel\", \"ColumnChooser\" })\">\n                <GridEditSettings AllowAdding=\"true\" AllowDeleting=\"true\" AllowEditing=\"true\"></GridEditSettings>\n                <GridPageSettings PageSize=\"80\"></GridPageSettings>\n                <GridColumns>\n                    <GridColumn Field=@nameof(FlightBookingRecord.BookingId) HeaderText=\"Booking ID\" IsPrimaryKey=true IsIdentity=\"true\" ValidationRules=\"@(new ValidationRules { Required = true })\" Width=\"140\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.PassengerName) HeaderText=\"Passenger Name\" Type=\"ColumnType.String\" Width=\"180\" ShowInColumnChooser=\"false\" ValidationRules=\"@(new ValidationRules { Required = true })\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.Email) HeaderText=\"Email\" Type=\"ColumnType.String\" Width=\"220\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.FlightNumber) HeaderText=\"Flight Number\" Type=\"ColumnType.String\" Width=\"150\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.AirlineCode) HeaderText=\"Airline\" Type=\"ColumnType.String\" Width=\"150\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.DepartureAirport) HeaderText=\"From\" Type=\"ColumnType.String\" Width=\"190\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.ArrivalAirport) HeaderText=\"To\" Type=\"ColumnType.String\" Width=\"190\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.DepartureDate) HeaderText=\"Departure\" Format=\"MM/dd/yyyy HH:mm\" Type=\"ColumnType.DateTime\" TextAlign=\"TextAlign.Right\" Width=\"160\" EditType=\"EditType.DateTimePickerEdit\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.ArrivalDate) HeaderText=\"Arrival\" Format=\"MM/dd/yyyy HH:mm\" Type=\"ColumnType.DateTime\" TextAlign=\"TextAlign.Right\" Width=\"160\" EditType=\"EditType.DateTimePickerEdit\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.SeatNumber) HeaderText=\"Seat\" Type=\"ColumnType.String\" Width=\"80\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.ClassOfTravel) HeaderText=\"Class\" Type=\"ColumnType.String\" Width=\"150\">\n                        <Template>\n                            @{\n                                // Extract flight booking record from grid context\n                                var record = context as FlightBookingRecord;\n                                // Select CSS class based on class of travel\n                                var classStyle = record?.ClassOfTravel switch\n                                {\n                                    ClassOfTravel.Economy => \"class-economy\",\n                                    ClassOfTravel.PremiumEconomy => \"class-premium-economy\",\n                                    ClassOfTravel.Business => \"class-business\",\n                                    ClassOfTravel.FirstClass => \"class-first\",\n                                    _ => \"class-default\"\n                                };\n                            }\n                            <!-- Display class of travel as styled badge -->\n                            <span class=\"class-badge @classStyle\">@record?.ClassOfTravel</span>\n                        </Template>\n                    </GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.BookingDate) HeaderText=\"Booked On\" Format=\"MM/dd/yyyy\" Type=\"ColumnType.DateTime\" TextAlign=\"TextAlign.Right\" Width=\"120\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.BookingAmount) HeaderText=\"Ticket Price\" Format=\"C2\" TextAlign=\"TextAlign.Right\" Type=\"ColumnType.Decimal\" Width=\"120\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.TaxAmount) HeaderText=\"Tax\" Format=\"C2\" TextAlign=\"TextAlign.Right\" Type=\"ColumnType.Decimal\" Width=\"150\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.TotalFare) HeaderText=\"Total Fare\" Format=\"C2\" TextAlign=\"TextAlign.Right\" Type=\"ColumnType.Decimal\" Width=\"150\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.Status) HeaderText=\"Status\" Type=\"ColumnType.String\" Width=\"160\">\n                        <Template>\n                            @{\n                                // Extract flight booking record from grid context\n                                var record = context as FlightBookingRecord;\n                                // Select CSS class based on booking status value\n                                var statusClass = record?.Status switch\n                                {\n                                    BookingStatus.Confirmed => \"status-confirmed\",\n                                    BookingStatus.CheckedIn => \"status-checked-in\",\n                                    BookingStatus.Completed => \"status-completed\",\n                                    BookingStatus.Pending => \"status-pending\",\n                                    BookingStatus.Cancelled => \"status-cancelled\",\n                                    BookingStatus.NoShow => \"status-noshow\",\n                                    _ => \"status-default\"\n                                };\n                            }\n                            <!-- Display status as styled badge -->\n                            <span class=\"status-badge @statusClass\">@record?.Status</span>\n                        </Template>\n                    </GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.PaymentMethod) HeaderText=\"Payment\" Type=\"ColumnType.String\" Width=\"130\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.MealPreference) HeaderText=\"Meal\" Type=\"ColumnType.String\" Width=\"120\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.BaggageAllowance) HeaderText=\"Baggage (bags)\" TextAlign=\"TextAlign.Right\" Type=\"ColumnType.Integer\" Width=\"150\"></GridColumn>\n                    <GridColumn Field=@nameof(FlightBookingRecord.CheckedIn) HeaderText=\"Checked In\" Type=\"ColumnType.Boolean\" Width=\"120\">\n                        <Template>\n                            @{\n                                // Extract flight booking record from grid context\n                                var record = context as FlightBookingRecord;\n                                // Select CSS class based on checked-in status\n                                var checkinClass = record?.CheckedIn == true ? \"checkin-yes\" : \"checkin-no\";\n                                var checkinText = record?.CheckedIn == true ? \"Yes\" : \"No\";\n                            }\n                            <!-- Display checked-in status as badge -->\n                            <span class=\"checkin-badge @checkinClass\">@checkinText</span>\n                        </Template>\n                    </GridColumn>\n                </GridColumns>\n            </SfGrid>\n        </div>\n    </div>\n</div>\n@code {\n    /// <summary>Collection of flight booking records bound to the grid.</summary>\n    public List<FlightBookingRecord>? GridData { get; set; }\n    /// <summary>Flag to manage loading state during data generation.</summary>\n    public bool Data = true;\n    /// <summary>Initialize grid with flight booking records when component loads.</summary>\n    protected override async Task OnInitializedAsync()\n    {\n        GridData = await GetAllRecordsAsync();\n        Data = false;\n    }\n    /// <summary>Asynchronously retrieve all flight booking records for display.</summary>\n    /// <returns>Collection of 10,000 flight booking records.</returns>\n    public async Task<List<FlightBookingRecord>> GetAllRecordsAsync()\n    {\n        return FlightBookingData.GetAllRecords().ToList();\n    }\n}"
    }
  ]
}