{
  "$schema": "https://ai.syncfusion.com/schema/registry-item.json",
  "name": "scheduler-recurring-events",
  "framework": "blazor",
  "type": "registry:component",
  "component": "Scheduler",
  "variant": "recurring-events",
  "dependencies": [
    "Syncfusion.Blazor.Schedule"
  ],
  "description": "Scheduler demonstrates recurring appointments with bound date and view state for navigating repeated calendar events.",
  "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/scheduler-recurring-events.md"
  },
  "files": [
    {
      "target": "src/components/scheduler-recurring-events/DataSource.cs",
      "content": "using System;\nusing System.Collections.Generic;\n\nnamespace BlazorDemos.Pages.Schedule.Scheduler\n{\n    public class ScheduleData\n    {\n        private readonly int CurrentYear = DateTime.Now.Year;\n\n        public List<AppointmentData> GetRecurrenceData()\n        {\n            return new List<AppointmentData>\n            {\n                new AppointmentData\n                {\n                    Id = 1,\n                    Subject = \"Project demo meeting with Andrew\",\n                    Location = \"Office\",\n                    StartTime = new DateTime(CurrentYear, 1, 8, 12, 0, 0),\n                    EndTime = new DateTime(CurrentYear, 1, 8, 13, 0, 0),\n                    RecurrenceRule = \"FREQ=WEEKLY;INTERVAL=2;BYDAY=MO;COUNT=10\",\n                    CategoryColor = \"#1aaa55\",\n                    Description = \"Project demo meeting with Andrew regarding timeline\"\n                },\n                new AppointmentData\n                {\n                    Id = 2,\n                    Subject = \"Scrum Meeting\",\n                    Location = \"Office\",\n                    StartTime = new DateTime(CurrentYear, 1, 6, 9, 30, 0),\n                    EndTime = new DateTime(CurrentYear, 1, 6, 10, 30, 0),\n                    RecurrenceRule = \"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;INTERVAL=1\",\n                    RecurrenceException = CurrentYear + \"0113T040000Z\",\n                    CategoryColor = \"#357cd2\",\n                    Description = \"Daily work plan discussion\"\n                },\n                new AppointmentData\n                {\n                    Id = 3,\n                    Subject = \"General meeting\",\n                    Location = \"Office\",\n                    StartTime = new DateTime(CurrentYear, 1, 10, 12, 0, 0),\n                    EndTime = new DateTime(CurrentYear, 1, 10, 14, 0, 0),\n                    RecurrenceRule = \"FREQ=DAILY;INTERVAL=1\",\n                    CategoryColor = \"#7fa900\",\n                    Description = \"Future plans and possibilities\"\n                }\n            };\n        }\n\n        public static Dictionary<string, object> ApplyCategoryColor(\n            string categoryColor,\n            Dictionary<string, object> attributes,\n            Syncfusion.Blazor.Schedule.View currentView)\n        {\n            return new Dictionary<string, object>\n            {\n                [\"style\"] = currentView == Syncfusion.Blazor.Schedule.View.Agenda\n                    ? \"border-left-color: \" + categoryColor\n                    : \"background: \" + categoryColor\n            };\n        }\n\n        public class AppointmentData\n        {\n            public int Id { get; set; }\n            public string? Subject { get; set; }\n            public string? Location { get; set; }\n            public string? Description { get; set; }\n            public DateTime StartTime { get; set; }\n            public DateTime EndTime { get; set; }\n            public bool? IsAllDay { get; set; }\n            public string? CategoryColor { get; set; }\n            public string? RecurrenceRule { get; set; }\n            public int? RecurrenceID { get; set; }\n            public string? RecurrenceException { get; set; }\n        }\n    }\n}\n"
    },
    {
      "target": "src/components/scheduler-recurring-events/Scheduler.razor",
      "content": "@page \"/scheduler/recurrence-events\"\n@using BlazorDemos.Pages.Schedule.Scheduler\n@using Syncfusion.Blazor.Schedule\n\n<div class=\"col-lg-12 control-section\">\n    <SfSchedule TValue=\"ScheduleData.AppointmentData\" Width=\"1200px\" Height=\"500px\" @bind-SelectedDate=\"@CurrentDate\" @bind-CurrentView=\"@CurrentView\">\n        <ScheduleEvents TValue=\"ScheduleData.AppointmentData\" EventRendered=\"OnEventRendered\"></ScheduleEvents>\n        <ScheduleViews>\n            <ScheduleView Option=\"View.Day\"></ScheduleView>\n            <ScheduleView Option=\"View.Week\"></ScheduleView>\n            <ScheduleView Option=\"View.Month\"></ScheduleView>\n        </ScheduleViews>\n        <ScheduleEventSettings DataSource=\"@dataSource\" AllowEditFollowingEvents=\"@EditUpcoming\"></ScheduleEventSettings>\n    </SfSchedule>\n</div>\n@code{\n    public View CurrentView { get; set; } = View.Week;\n    private DateTime CurrentDate { get; set; } = new DateTime(DateTime.Today.Year, 1, 12);\n    private bool EditUpcoming { get; set; } = false;\n    private List<ScheduleData.AppointmentData> dataSource = new ScheduleData().GetRecurrenceData();\n    public void OnEventRendered(EventRenderedArgs<ScheduleData.AppointmentData> args)\n    {\n        var categoryColor = args.Data?.CategoryColor ?? string.Empty;\n        args.Attributes = ScheduleData.ApplyCategoryColor(categoryColor, args.Attributes, CurrentView);\n    }\n}\n<style>\n    .fabric .e-dialog .e-footer-content .e-btn,\n    .fabric-dark .e-dialog .e-footer-content .e-btn {\n        margin-left: 0px;\n    }\n</style>"
    }
  ]
}