diff --git a/Grid/Pages/pdfexport/ImageInHeader.razor b/Grid/Pages/pdfexport/ImageInHeader.razor index b233e970..4beff53d 100644 --- a/Grid/Pages/pdfexport/ImageInHeader.razor +++ b/Grid/Pages/pdfexport/ImageInHeader.razor @@ -32,7 +32,7 @@ } public List HeaderContent = new List { - new PdfHeaderFooterContent() { Type = ContentType.Image, Src = "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", Position = new PdfPosition() { X = 40, Y = 10 }, Size = new PdfSize() { Height = 100, Width = 250 } } + new PdfHeaderFooterContent() { Type = ContentType.Image, Src = "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", Position = new PdfPosition() { X = 40, Y = 10 }, Size = new PdfSize() { Height = 100, Width = 250 } } }; public void PdfExport() diff --git a/TreeGrid/WebApp-Server/Components/App.razor b/TreeGrid/WebApp-Server/Components/App.razor new file mode 100644 index 00000000..973e8d51 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/App.razor @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TreeGrid/WebApp-Server/Components/Data/BusinessObject.cs b/TreeGrid/WebApp-Server/Components/Data/BusinessObject.cs new file mode 100644 index 00000000..56e72580 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/BusinessObject.cs @@ -0,0 +1,110 @@ +namespace TreeGridUGSample.Components.Data +{ + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int Duration { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + public Boolean Approved { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 1, + TaskName = "Parent Task 1", + StartDate = new DateTime(2017, 10, 23), + Duration = 10, + Progress = 70, + Priority = "Critical", + ParentId = null + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 2, + TaskName = "Child task 1", + StartDate = new DateTime(2017, 10, 23), + Duration = 12, + Progress = 80, + Priority = "Low", + ParentId = 1 + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 3, + TaskName = "Child Task 2", + StartDate = new DateTime(2017, 10, 24), + Duration = 5, + Progress = 65, + Priority = "Critical", + ParentId = 2 + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 4, + TaskName = "Child task 3", + StartDate = new DateTime(2017, 10, 25), + Duration = 6, + Priority = "High", + Progress = 77, + ParentId = 3 + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 5, + TaskName = "Child Task 5", + StartDate = new DateTime(2017, 10, 26), + Duration = 9, + Progress = 25, + ParentId = 4, + Priority = "Normal" + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 6, + TaskName = "Child Task 6", + StartDate = new DateTime(2017, 10, 27), + Duration = 9, + Progress = 7, + ParentId = 5, + Priority = "Normal" + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 7, + TaskName = "Parent Task 3", + StartDate = new DateTime(2017, 10, 28), + Duration = 4, + Progress = 45, + ParentId = null, + Priority = "High" + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 8, + TaskName = "Child Task 7", + StartDate = new DateTime(2017, 10, 29), + Duration = 3, + Progress = 38, + ParentId = 7, + Priority = "Critical" + }); + BusinessObjectCollection.Add(new BusinessObject() + { + TaskId = 9, + TaskName = "Child Task 8", + StartDate = new DateTime(2017, 10, 30), + Duration = 7, + Progress = 70, + ParentId = 7, + Priority = "Low" + }); + return BusinessObjectCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Data/ObservableData.cs b/TreeGrid/WebApp-Server/Components/Data/ObservableData.cs new file mode 100644 index 00000000..900d4138 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/ObservableData.cs @@ -0,0 +1,47 @@ +using System.Collections.ObjectModel; +using System.ComponentModel; + +namespace TreeGridUGSample.Components.Data +{ + public class TreeData + { + public class BusinessObject : INotifyPropertyChanged + { + public int TaskId { get; set; } + + private string taskName; + public string TaskName + { + get => taskName; + set + { + taskName = value; + NotifyPropertyChanged(nameof(TaskName)); + } + } + + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public event PropertyChangedEventHandler PropertyChanged; + private void NotifyPropertyChanged(string propertyName) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } + + public static ObservableCollection GetSelfDataSource() + { + return new ObservableCollection + { + new BusinessObject { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }, + new BusinessObject { TaskId = 2, TaskName = "Child task 1", Duration = 6, Progress = 80, Priority = "Low", ParentId = 1 }, + new BusinessObject { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }, + new BusinessObject { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }, + new BusinessObject { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null } + }; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Data/SampleData.cs b/TreeGrid/WebApp-Server/Components/Data/SampleData.cs new file mode 100644 index 00000000..6489deda --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/SampleData.cs @@ -0,0 +1,68 @@ +namespace TreeGridUGSample.Components.Data +{ + public class sampleData + { + public int TaskID { get; set; } + public string FIELD1 { get; set; } + public int FIELD2 { get; set; } + public int FIELD3 { get; set; } + public int FIELD4 { get; set; } + public int FIELD5 { get; set; } + public int FIELD6 { get; set; } + public int Field7 { get; set; } + public int Field8 { get; set; } + public int Field9 { get; set; } + public int? ParentID { get; set; } + public static List GetTreeSampleData() + { + string[] Names = new string[] { "VINET", "TOMSP", "HANAR", "VICTE", "SUPRD", "HANAR", "CHOPS", "RICSU", "WELLI", "HILAA", "ERNSH", "CENTC", + "OTTIK", "QUEDE", "RATTC", "ERNSH", "FOLKO", "BLONP", "WARTH", "FRANK", "GROSR", "WHITC", "WARTH", "SPLIR", "RATTC", "QUICK", "VINET", + "MAGAA", "TORTU", "MORGK", "BERGS", "LEHMS", "BERGS", "ROMEY", "ROMEY", "LILAS", "LEHMS", "QUICK", "QUICK", "RICAR", "REGGC", "BSBEV", + "COMMI", "QUEDE", "TRADH", "TORTU", "RATTC", "VINET", "LILAS", "BLONP", "HUNGO", "RICAR", "MAGAA", "WANDK", "SUPRD", "GODOS", "TORTU", + "OLDWO", "ROMEY", "LONEP", "ANATR", "HUNGO", "THEBI", "DUMON", "WANDK", "QUICK", "RATTC", "ISLAT", "RATTC", "LONEP", "ISLAT", "TORTU", + "WARTH", "ISLAT", "PERIC", "KOENE", "SAVEA", "KOENE", "BOLID", "FOLKO", "FURIB", "SPLIR", "LILAS", "BONAP", "MEREP", "WARTH", "VICTE", + "HUNGO", "PRINI", "FRANK", "OLDWO", "MEREP", "BONAP", "SIMOB", "FRANK", "LEHMS", "WHITC", "QUICK", "RATTC", "FAMIA" }; + List DataCollection = new List(); + Random random = new Random(); + var RecordID = 0; + for (var i = 1; i <= 100; i++) + { + var name = random.Next(0, 100); + sampleData Parent = new sampleData() + { + TaskID = ++RecordID, + FIELD1 = Names[name], + FIELD2 = 1967 + random.Next(0, 10), + FIELD3 = 395 + random.Next(100, 600), + FIELD4 = 87 + random.Next(50, 250), + FIELD5 = 410 + random.Next(100, 600), + FIELD6 = 67 + random.Next(50, 250), + Field7 = (int)Math.Floor(random.NextDouble() * 100), + Field8 = (int)Math.Floor(random.NextDouble() * 10), + Field9 = (int)Math.Floor(random.NextDouble() * 10), + ParentID = null + }; + DataCollection.Add(Parent); + for (var j = 1; j <= 4; j++) + { + var childName = random.Next(0, 100); + DataCollection.Add(new sampleData() + { + TaskID = ++RecordID, + FIELD1 = Names[childName], + FIELD2 = 1967 + random.Next(0, 10), + FIELD3 = 395 + random.Next(100, 600), + FIELD4 = 87 + random.Next(50, 250), + FIELD5 = 410 + random.Next(100, 600), + FIELD6 = 67 + random.Next(50, 250), + Field7 = (int)Math.Floor(random.NextDouble() * 100), + Field8 = (int)Math.Floor(random.NextDouble() * 10), + Field9 = (int)Math.Floor(random.NextDouble() * 10), + ParentID = Parent.TaskID + }); + } + } + return DataCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Data/SelfData.cs b/TreeGrid/WebApp-Server/Components/Data/SelfData.cs new file mode 100644 index 00000000..8563e723 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/SelfData.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +namespace TreeGridUGSample.Components.Data +{ + public class SelfReferenceData + { + public static List tree = new List(); + [Key] + public int? TaskID { get; set; } + public string? TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public String? Progress { get; set; } + public String? Priority { get; set; } + public double? Duration { get; set; } + public int? ParentID { get; set; } + public bool? IsParent { get; set; } + public bool? Approved { get; set; } + public int? ParentItem { get; set; } + public SelfReferenceData() { } + public static List GetTree() + { + tree.Clear(); + int root = -1; + int TaskNameID = 0; + int ChildCount = -1; + int SubTaskCount = -1; + for (var t = 1; t <= 60; t++) + { + DateTime start = new DateTime(2022, 08, 25); + DateTime end = new DateTime(2027, 08, 25); + DateTime startingDate = start.AddDays(t + 2); + DateTime endingDate = end.AddDays(t + 20); + string math = ""; + string progr = ""; + bool appr = true; + int duration = 0; + duration = (t % 2 == 0) ? 52 : (t % 5 == 0) ? 14 : (t % 3 == 0) ? 25 : 34; + math = (t % 3) == 0 ? "High" : (t % 2) == 0 ? "Low" : "Critical"; + progr = (t % 3) == 0 ? "Started" : (t % 2) == 0 ? "Open" : "In Progress"; + appr = (t % 3) == 0 ? true : (t % 2) == 0 ? false : true; + root++; TaskNameID++; + int rootItem = root + 1; + tree.Add(new SelfReferenceData() { TaskID = rootItem, TaskName = "Parent task " + TaskNameID.ToString(), StartDate = startingDate, EndDate = endingDate, IsParent = true, ParentID = null, Progress = progr, Priority = math, Duration = duration, Approved = appr }); + int parent = tree.Count; + for (var c = 0; c < 2; c++) + { + DateTime start1 = new DateTime(2022, 08, 25); + DateTime startingDate1 = start1.AddDays(c + 4); + DateTime end1 = new DateTime(2025, 06, 16); + DateTime endingDate1 = end1.AddDays(c + 15); + root++; ChildCount++; + int parn = parent + c + 1; + string val = ""; + duration = (c % 3 == 0) ? 1 : (c % 2 == 0) ? 12 : 98; + val = ((parent + c + 1) % 3 == 0) ? "Low" : "Critical"; + progr = ((c + 1) % 3) == 0 ? "In Progress" : ((c + 1) % 2) == 0 ? "Open" : "Validated"; + appr = ((c + 1) % 3) == 0 ? true : ((c + 3) % 2) == 0 ? false : true; + int iD = root + 1; + tree.Add(new SelfReferenceData() { TaskID = iD, TaskName = "Child task " + (ChildCount + 1).ToString(), StartDate = startingDate1, EndDate = endingDate1, IsParent = (((parent + c + 1) % 3) == 0), ParentID = rootItem, Progress = progr, Priority = val, Duration = duration, Approved = appr }); + if ((((parent + c + 1) % 3) == 0)) + { + int immParent = tree.Count; + for (var s = 0; s < 3; s++) + { + DateTime start2 = new DateTime(2022, 08, 25); + DateTime startingDate2 = start2.AddDays(s + 4); + DateTime end2 = new DateTime(2024, 06, 16); + DateTime endingDate2 = end2.AddDays(s + 13); + root++; SubTaskCount++; + duration = (s % 2 == 0) ? 67 : 14; + string Prior = (immParent % 2 == 0) ? "Validated" : "Normal"; + tree.Add(new SelfReferenceData() { TaskID = root + 1, TaskName = "Sub task " + (SubTaskCount + 1).ToString(), StartDate = startingDate2, EndDate = endingDate2, IsParent = false, ParentID = iD, Progress = (immParent % 2 == 0) ? "In Progress" : "Closed", Priority = Prior, Duration = duration, Approved = appr }); + } + } + } + } + return tree; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Data/TemplateData.cs b/TreeGrid/WebApp-Server/Components/Data/TemplateData.cs new file mode 100644 index 00000000..31ae98f3 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/TemplateData.cs @@ -0,0 +1,159 @@ +namespace TreeGridUGSample.Components.Data +{ + + public class Employee + { + public string? Name { get; set; } + public string? FullName { get; set; } + public DateTime DOB { get; set; } + public string? Designation { get; set; } + public string? EmpID { get; set; } + public int? EmployeeID { get; set; } + public string? Country { get; set; } + public string? Address { get; set; } + public string? Contact { get; set; } + public int? ParentId { get; set; } + public static List GetTemplateData() + { + List DataCollection = new List(); + DataCollection.Add(new Employee + { + Name = "Robert King", + FullName = "RobertKing", + Designation = "Chief Executive Officer", + EmployeeID = 1, + EmpID = "EMP001", + Address = "507 - 20th Ave. E.Apt. 2A, Seattle", + Contact = "(206) 555-9857", + Country = "USA", + DOB = new DateTime(1992, 2, 15), + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "David William", + FullName = "DavidWilliam", + Designation = "Vice President", + EmployeeID = 2, + EmpID = "EMP004", + Address = "722 Moss Bay Blvd., Kirkland", + Contact = "(206) 555-3412", + Country = "USA", + DOB = new DateTime(1990, 5, 20), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Nancy Davolio", + FullName = "NancyDavolio", + Designation = "Marketing Executive", + EmployeeID = 3, + EmpID = "EMP035", + Address = "4110 Old Redmond Rd., Redmond", + Contact = "(206) 555-8122", + Country = "USA", + DOB = new DateTime(1988, 3, 19), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Andrew Fuller", + FullName = "AndrewFuller", + Designation = "Sales Representative", + EmployeeID = 4, + EmpID = "EMP045", + Address = "14 Garrett Hill, London", + Contact = "(71) 555-4848", + Country = "UK", + DOB = new DateTime(1993, 9, 20), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Anne Dodsworth", + FullName = "AnneDodsworth", + Designation = "Sales Representative", + EmployeeID = 5, + EmpID = "EMP091", + Address = "4726 - 11th Ave. N.E., Seattle", + Contact = "(206) 555-1189", + Country = "USA", + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "Michael Suyama", + FullName = "MichaelSuyama", + Designation = "Sales Representative", + EmployeeID = 6, + EmpID = "EMP110", + Address = "Coventry House Miner Rd., London", + Contact = "(71) 555-3636", + Country = "UK", + ParentId = 5 + }); + DataCollection.Add(new Employee + { + Name = "Janet Leverling", + FullName = "JanetLeverling", + Designation = "Sales Coordinator", + EmployeeID = 7, + EmpID = "EMP131", + Address = "Edgeham Hollow Winchester Way, London", + Contact = "(71) 555-3636", + Country = "UK", + ParentId = 5 + }); + DataCollection.Add(new Employee + { + Name = "Romey Wilson", + FullName = "RomeyWilson", + Designation = "Sales Executive", + EmployeeID = 8, + EmpID = "EMP039", + Address = "7 Houndstooth Rd., London", + Contact = "(71) 555-3690", + Country = "UK", + DOB = new DateTime(1994, 2, 2), + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "Margaret Peacock", + FullName = "MargaretPeacock", + Designation = "Sales Representative", + EmployeeID = 9, + EmpID = "EMP213", + Address = "4726 - 11th Ave. N.E., California", + Contact = "(206) 555-1989", + Country = "USA", + ParentId = 8 + }); + DataCollection.Add(new Employee + { + Name = "Steven Buchanan", + FullName = "StevenBuchanan", + Designation = "Sales Representative", + EmployeeID = 11, + EmpID = "EMP197", + Address = "200 Lincoln Ave, Salinas, CA 93901", + Contact = "(831) 758-7408", + Country = "USA", + ParentId = 8 + }); + DataCollection.Add(new Employee + { + Name = "Tedd Lawson", + FullName = "TeddLawson", + Designation = "Sales Representative", + EmployeeID = 12, + EmpID = "EMP167", + Address = "200 Lincoln Ave, Salinas, CA 93901", + Contact = "(831) 758-7368", + Country = "USA", + ParentId = 8 + }); + return DataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Data/TreeData.cs b/TreeGrid/WebApp-Server/Components/Data/TreeData.cs new file mode 100644 index 00000000..c2f4d2df --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/TreeData.cs @@ -0,0 +1,28 @@ +namespace TreeGridUGSample.Components.Data +{ + public class TreeDatas + { + + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSources() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 2 }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new TreeDatas() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Data/VirtualData.cs b/TreeGrid/WebApp-Server/Components/Data/VirtualData.cs new file mode 100644 index 00000000..53c9c60e --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/VirtualData.cs @@ -0,0 +1,71 @@ +namespace TreeGridUGSample.Components.Data +{ + public class VirtualData + { + public int TaskID { get; set; } + public string? FIELD1 { get; set; } + public int FIELD2 { get; set; } + public int FIELD3 { get; set; } + public int FIELD4 { get; set; } + public int FIELD5 { get; set; } + public int FIELD6 { get; set; } + public int Field7 { get; set; } + public int Field8 { get; set; } + public int Field9 { get; set; } + public int Field10 { get; set; } + public int? ParentID { get; set; } + public static List GetTreeVirtualData() + { + string[] Names = new string[] { "VINET", "TOMSP", "HANAR", "VICTE", "SUPRD", "HANAR", "CHOPS", "RICSU", "WELLI", "HILAA", "ERNSH", "CENTC", + "OTTIK", "QUEDE", "RATTC", "ERNSH", "FOLKO", "BLONP", "WARTH", "FRANK", "GROSR", "WHITC", "WARTH", "SPLIR", "RATTC", "QUICK", "VINET", + "MAGAA", "TORTU", "MORGK", "BERGS", "LEHMS", "BERGS", "ROMEY", "ROMEY", "LILAS", "LEHMS", "QUICK", "QUICK", "RICAR", "REGGC", "BSBEV", + "COMMI", "QUEDE", "TRADH", "TORTU", "RATTC", "VINET", "LILAS", "BLONP", "HUNGO", "RICAR", "MAGAA", "WANDK", "SUPRD", "GODOS", "TORTU", + "OLDWO", "ROMEY", "LONEP", "ANATR", "HUNGO", "THEBI", "DUMON", "WANDK", "QUICK", "RATTC", "ISLAT", "RATTC", "LONEP", "ISLAT", "TORTU", + "WARTH", "ISLAT", "PERIC", "KOENE", "SAVEA", "KOENE", "BOLID", "FOLKO", "FURIB", "SPLIR", "LILAS", "BONAP", "MEREP", "WARTH", "VICTE", + "HUNGO", "PRINI", "FRANK", "OLDWO", "MEREP", "BONAP", "SIMOB", "FRANK", "LEHMS", "WHITC", "QUICK", "RATTC", "FAMIA" }; + List DataCollection = new List(); + Random random = new Random(); + var RecordID = 0; + for (var i = 1; i <= 2000; i++) + { + var name = random.Next(0, 100); + VirtualData Parent = new VirtualData() + { + TaskID = ++RecordID, + FIELD1 = Names[name], + FIELD2 = 1967 + random.Next(0, 10), + FIELD3 = 395 + random.Next(100, 600), + FIELD4 = 87 + random.Next(50, 250), + FIELD5 = 410 + random.Next(100, 600), + FIELD6 = 67 + random.Next(50, 250), + Field7 = (int)Math.Floor(random.NextDouble() * 100), + Field8 = (int)Math.Floor(random.NextDouble() * 10), + Field9 = (int)Math.Floor(random.NextDouble() * 10), + Field10 = (int)Math.Floor(random.NextDouble() * 100), + ParentID = null + }; + DataCollection.Add(Parent); + for (var j = 1; j <= 4; j++) + { + var childName = random.Next(0, 100); + DataCollection.Add(new VirtualData() + { + TaskID = ++RecordID, + FIELD1 = Names[childName], + FIELD2 = 1967 + random.Next(0, 10), + FIELD3 = 395 + random.Next(100, 600), + FIELD4 = 87 + random.Next(50, 250), + FIELD5 = 410 + random.Next(100, 600), + FIELD6 = 67 + random.Next(50, 250), + Field7 = (int)Math.Floor(random.NextDouble() * 100), + Field8 = (int)Math.Floor(random.NextDouble() * 10), + Field9 = (int)Math.Floor(random.NextDouble() * 10), + Field10 = (int)Math.Floor(random.NextDouble() * 100), + ParentID = Parent.TaskID + }); + } + } + return DataCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Data/VirtualDataRow.cs b/TreeGrid/WebApp-Server/Components/Data/VirtualDataRow.cs new file mode 100644 index 00000000..b775c1ba --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/VirtualDataRow.cs @@ -0,0 +1,134 @@ +namespace TreeGridUGSample.Components.Data +{ + public class VirtualDataRow + { + public int? TaskID { get; set; } + public string FIELD1 { get; set; } + public int? FIELD2 { get; set; } + public int? FIELD3 { get; set; } + public int? FIELD4 { get; set; } + public List Children { get; set; } + + public static List GetVirtualDataRow() + { + List DataCollection = new List(); + + for (var i = 1; i <= 1000; i++) + { + VirtualDataRow Parent1 = new VirtualDataRow() + { + TaskID = 1, + FIELD1 = "VINET", + FIELD2 = 1967, + FIELD3 = 395, + FIELD4 = 87, + Children = new List() + }; + VirtualDataRow Child1 = new VirtualDataRow() + { + TaskID = 2, + FIELD1 = "TOMSP", + FIELD2 = 1968, + FIELD3 = 295, + FIELD4 = 44 + }; + VirtualDataRow Child2 = new VirtualDataRow() + { + TaskID = 3, + FIELD1 = "HANAR", + FIELD2 = 1969, + FIELD3 = 376, + FIELD4 = 22 + }; + VirtualDataRow Child3 = new VirtualDataRow() + { + TaskID = 4, + FIELD1 = "VICTE", + FIELD2 = 1970, + FIELD3 = 123, + FIELD4 = 35 + }; + VirtualDataRow Child4 = new VirtualDataRow() + { + TaskID = 5, + FIELD1 = "SUPRD", + FIELD2 = 1971, + FIELD3 = 567, + FIELD4 = 98 + }; + VirtualDataRow Child5 = new VirtualDataRow() + { + TaskID = 6, + FIELD1 = "RICSU", + FIELD2 = 1972, + FIELD3 = 378, + FIELD4 = 56 + }; + VirtualDataRow Parent2 = new VirtualDataRow() + { + TaskID = 1, + FIELD1 = "TOMSP", + FIELD2 = 1968, + FIELD3 = 295, + FIELD4 = 44, + Children = new List() + }; + VirtualDataRow Child6 = new VirtualDataRow() + { + TaskID = 2, + FIELD1 = "VINET", + FIELD2 = 1967, + FIELD3 = 395, + FIELD4 = 87 + }; + VirtualDataRow Child7 = new VirtualDataRow() + { + TaskID = 3, + FIELD1 = "VICTE", + FIELD2 = 1970, + FIELD3 = 123, + FIELD4 = 35 + }; + VirtualDataRow Child8 = new VirtualDataRow() + { + TaskID = 4, + FIELD1 = "RICSU", + FIELD2 = 1972, + FIELD3 = 378, + FIELD4 = 56 + }; + VirtualDataRow Child9 = new VirtualDataRow() + { + TaskID = 5, + FIELD1 = "HANAR", + FIELD2 = 1969, + FIELD3 = 376, + FIELD4 = 22 + }; + VirtualDataRow Child10 = new VirtualDataRow() + { + TaskID = 6, + FIELD1 = "SUPRD", + FIELD2 = 1971, + FIELD3 = 567, + FIELD4 = 98 + }; + Parent1.Children.Add(Child1); + Parent1.Children.Add(Child2); + Parent1.Children.Add(Child3); + Parent1.Children.Add(Child4); + Parent1.Children.Add(Child5); + + Parent2.Children.Add(Child6); + Parent2.Children.Add(Child7); + Parent2.Children.Add(Child8); + Parent2.Children.Add(Child9); + Parent2.Children.Add(Child10); + + DataCollection.Add(Parent1); + DataCollection.Add(Parent2); + } + return DataCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Data/VirtualHierarchyData.cs b/TreeGrid/WebApp-Server/Components/Data/VirtualHierarchyData.cs new file mode 100644 index 00000000..ed98fcf8 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/VirtualHierarchyData.cs @@ -0,0 +1,74 @@ +namespace TreeGridUGSample.Components.Data +{ + public class VirtualHierarchyData + { + public int TaskID { get; set; } + public string FIELD1 { get; set; } + public int FIELD2 { get; set; } + public int? FIELD3 { get; set; } + public int? FIELD4 { get; set; } + public List Children { get; set; } + + static string[] Names = new string[] { "VINET", "TOMSP", "HANAR", "VICTE", "SUPRD", "HANAR", "CHOPS", "RICSU", "WELLI", "HILAA", "ERNSH", "CENTC", "OTTIK", "QUEDE", "RATTC", "ERNSH", "FOLKO", "BLONP", "WARTH", "FRANK", "GROSR", "WHITC", "WARTH", "SPLIR", "RATTC", "QUICK", "VINET", "MAGAA", "TORTU", "MORGK", "BERGS", "LEHMS", "BERGS", "ROMEY", "ROMEY", "LILAS", "LEHMS", "QUICK", "QUICK", "RICAR", "REGGC", "BSBEV", "COMMI", "QUEDE", "TRADH", "TORTU", "RATTC", "VINET", "LILAS", "BLONP", "HUNGO", "RICAR", "MAGAA", "WANDK", "SUPRD", "GODOS", "TORTU", "OLDWO", "ROMEY", "LONEP", "ANATR", "HUNGO", "THEBI", "DUMON", "WANDK", "QUICK", "RATTC", "ISLAT", "RATTC", "LONEP", "ISLAT", "TORTU", "WARTH", "ISLAT", "PERIC", "KOENE", "SAVEA", "KOENE", "BOLID", "FOLKO", "FURIB", "SPLIR", "LILAS", "BONAP", "MEREP", "WARTH", "VICTE", "HUNGO", "PRINI", "FRANK", "OLDWO", "MEREP", "BONAP", "SIMOB", "FRANK", "LEHMS", "WHITC", "QUICK", "RATTC", "FAMIA" }; + + public static List GetVirtualHierarchyData() + { + List DataCollection = new List(); + var j = 0; + for (var i = 1; i <= 10000; i++) + { + var random = new Random(); + var name = random.Next(50); + VirtualHierarchyData Parent1 = new VirtualHierarchyData() + { + TaskID = ++j, + FIELD1 = VirtualHierarchyData.Names[name], + FIELD2 = 1967, + FIELD3 = 395, + FIELD4 = 87, + Children = new List() + }; + for (var k = 0; k < 4; k++) + { + name = random.Next(5); + VirtualHierarchyData Child1 = new VirtualHierarchyData() + { + TaskID = ++j, + FIELD1 = VirtualHierarchyData.Names[name], + FIELD2 = 1968, + FIELD3 = 295, + FIELD4 = 44 + }; + Parent1.Children.Add(Child1); + } + + name = random.Next(50); + VirtualHierarchyData Parent2 = new VirtualHierarchyData() + { + TaskID = ++j, + FIELD1 = VirtualHierarchyData.Names[name], + FIELD2 = 1968, + FIELD3 = 295, + FIELD4 = 44, + Children = new List() + }; + for (var m = 0; m < 4; m++) + { + name = random.Next(50); + VirtualHierarchyData Child2 = new VirtualHierarchyData() + { + TaskID = ++j, + FIELD1 = VirtualHierarchyData.Names[name], + FIELD2 = 1968, + FIELD3 = 295, + FIELD4 = 44 + }; + Parent2.Children.Add(Child2); + } + DataCollection.Add(Parent1); + DataCollection.Add(Parent2); + } + return DataCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Data/WeatherForecast.cs b/TreeGrid/WebApp-Server/Components/Data/WeatherForecast.cs new file mode 100644 index 00000000..69b0b8de --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/WeatherForecast.cs @@ -0,0 +1,13 @@ +namespace Blazor_Treegrid_Server.Data +{ + public class WeatherForecast + { + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Data/WeatherForecastService.cs b/TreeGrid/WebApp-Server/Components/Data/WeatherForecastService.cs new file mode 100644 index 00000000..07d134f7 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/WeatherForecastService.cs @@ -0,0 +1,23 @@ +namespace Blazor_Treegrid_Server.Data +{ + public class WeatherForecastService + { + private static readonly string[] Summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + public Task GetForecastAsync(DateOnly startDate) + { + return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }).ToArray()); + } + } + + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Data/WrapData.cs b/TreeGrid/WebApp-Server/Components/Data/WrapData.cs new file mode 100644 index 00000000..c9be9968 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Data/WrapData.cs @@ -0,0 +1,476 @@ +namespace TreeGridUGSample.Components.Data +{ + public class WrapData + { + public int? TaskId { get; set; } + public string? TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public int? Duration { get; set; } + public String? Progress { get; set; } + public string? Priority { get; set; } + public bool Approved { get; set; } + public int Resources { get; set; } + public int? ParentId { get; set; } + public static List GetWrapData() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 1, + TaskName = "Planning", + StartDate = new DateTime(2021, 03, 02), + EndDate = new DateTime(2021, 07, 03), + Progress = "Open", + Duration = 5, + Priority = "Normal", + Resources = 6, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 2, + TaskName = "Plan timeline", + StartDate = new DateTime(2021, 03, 04), + EndDate = new DateTime(2021, 07, 05), + Progress = "In Progress", + Duration = 5, + Resources = 4, + Priority = "Normal", + Approved = false, + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 3, + TaskName = "Plan budget", + StartDate = new DateTime(2021, 03, 06), + EndDate = new DateTime(2021, 07, 07), + Duration = 5, + Progress = "Started", + Approved = true, + Resources = 6, + Priority = "Low", + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 4, + TaskName = "Allocate resources", + StartDate = new DateTime(2021, 03, 08), + EndDate = new DateTime(2021, 07, 09), + Duration = 5, + Progress = "Open", + Priority = "Critical", + ParentId = 1, + Resources = 3, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 5, + TaskName = "Planning complete", + StartDate = new DateTime(2021, 07, 10), + EndDate = new DateTime(2021, 07, 11), + Duration = 1, + Progress = "Open", + Priority = "Low", + Resources = 5, + ParentId = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 6, + TaskName = "Design", + StartDate = new DateTime(2021, 10, 12), + EndDate = new DateTime(2021, 02, 13), + Progress = "In Progress", + Duration = 3, + Priority = "High", + Resources = 4, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 7, + TaskName = "Software specification", + StartDate = new DateTime(2021, 10, 14), + EndDate = new DateTime(2021, 02, 15), + Duration = 3, + Progress = "Started", + Resources = 3, + Priority = "Normal", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 8, + TaskName = "Develop prototype", + StartDate = new DateTime(2021, 10, 16), + EndDate = new DateTime(2021, 02, 17), + Duration = 3, + Progress = "In Progress", + Resources = 2, + Priority = "Critical", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 9, + TaskName = "Get approval from customer", + StartDate = new DateTime(2021, 02, 18), + EndDate = new DateTime(2021, 02, 19), + Duration = 2, + Progress = "In Progress", + Resources = 3, + Priority = "Low", + Approved = true, + ParentId = 6 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 10, + TaskName = "Design complete", + StartDate = new DateTime(2021, 02, 20), + EndDate = new DateTime(2021, 02, 21), + Duration = 1, + Progress = "In Progress", + Resources = 6, + Priority = "Normal", + ParentId = 6, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 12, + TaskName = "Implementation phase", + StartDate = new DateTime(2021, 02, 22), + EndDate = new DateTime(2021, 02, 23), + Priority = "Normal", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Started", + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 13, + TaskName = "Phase 1", + StartDate = new DateTime(2021, 02, 24), + EndDate = new DateTime(2021, 02, 25), + Priority = "High", + Approved = false, + Duration = 11, + Progress = "Open", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 14, + TaskName = "Implementation module 1", + StartDate = new DateTime(2021, 02, 26), + EndDate = new DateTime(2021, 02, 27), + Priority = "Normal", + Duration = 11, + Progress = "Started", + Resources = 3, + Approved = false, + ParentId = 13 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 15, + TaskName = "Development task 1", + StartDate = new DateTime(2021, 06, 18), + EndDate = new DateTime(2021, 06, 19), + Duration = 3, + Progress = "In Progress", + Priority = "High", + Resources = 2, + ParentId = 14, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 16, + TaskName = "Development task 2", + StartDate = new DateTime(2021, 02, 13), + EndDate = new DateTime(2021, 03, 01), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Resources = 5, + ParentId = 14, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 17, + TaskName = "Testing", + StartDate = new DateTime(2021, 03, 02), + EndDate = new DateTime(2021, 03, 03), + Duration = 2, + Progress = "Closed", + Priority = "Normal", + ParentId = 14, + Resources = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 18, + TaskName = "Bug fix", + StartDate = new DateTime(2021, 03, 04), + EndDate = new DateTime(2021, 03, 05), + Duration = 2, + Progress = "Validated", + Priority = "Critical", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 19, + TaskName = "Customer review meeting", + StartDate = new DateTime(2021, 03, 06), + EndDate = new DateTime(2021, 03, 07), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 20, + TaskName = "Phase 1 complete", + StartDate = new DateTime(2021, 04, 27), + EndDate = new DateTime(2021, 07, 27), + Duration = 2, + Progress = "Closed", + Priority = "Low", + ParentId = 14, + Resources = 5, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 21, + TaskName = "Phase 2", + StartDate = new DateTime(2021, 07, 17), + EndDate = new DateTime(2021, 09, 28), + Priority = "High", + Approved = false, + Progress = "Open", + ParentId = 12, + Resources = 3, + Duration = 12, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 22, + TaskName = "Implementation module 2", + StartDate = new DateTime(2021, 01, 17), + EndDate = new DateTime(2021, 02, 28), + Priority = "Critical", + Approved = false, + Progress = "In Progress", + ParentId = 21, + Resources = 3, + Duration = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 23, + TaskName = "Development task 1", + StartDate = new DateTime(2021, 08, 17), + EndDate = new DateTime(2021, 09, 20), + Duration = 4, + Progress = "Closed", + Priority = "Normal", + ParentId = 22, + Resources = 2, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 24, + TaskName = "Development task 2", + StartDate = new DateTime(2021, 04, 17), + EndDate = new DateTime(2021, 03, 20), + Duration = 4, + Progress = "Closed", + Priority = "Critical", + ParentId = 22, + Resources = 5, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 25, + TaskName = "Testing", + StartDate = new DateTime(2021, 01, 21), + EndDate = new DateTime(2021, 01, 24), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 26, + TaskName = "Bug fix", + StartDate = new DateTime(2021, 03, 25), + EndDate = new DateTime(2021, 08, 26), + Duration = 2, + Progress = "Validated", + Priority = "Low", + Approved = false, + Resources = 6, + ParentId = 22 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 27, + TaskName = "Customer review meeting", + StartDate = new DateTime(2021, 07, 27), + EndDate = new DateTime(2021, 06, 28), + Duration = 2, + Progress = "In Progress", + Priority = "Critical", + ParentId = 22, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 28, + TaskName = "Phase 2 complete", + StartDate = new DateTime(2021, 07, 19), + EndDate = new DateTime(2021, 05, 28), + Duration = 2, + Priority = "Normal", + Progress = "Open", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 29, + TaskName = "Phase 3", + StartDate = new DateTime(2021, 07, 17), + EndDate = new DateTime(2021, 02, 12), + Priority = "Normal", + Approved = false, + Duration = 11, + Progress = "In Progress", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 30, + TaskName = "Implementation module 3", + StartDate = new DateTime(2021, 08, 17), + EndDate = new DateTime(2021, 09, 27), + Priority = "High", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Validated", + ParentId = 29, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 31, + TaskName = "Development task 1", + StartDate = new DateTime(2021, 11, 17), + EndDate = new DateTime(2021, 12, 19), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Approved = true, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 32, + TaskName = "Development task 2", + StartDate = new DateTime(2021, 12, 17), + EndDate = new DateTime(2021, 02, 19), + Duration = 3, + Progress = "Closed", + Priority = "Normal", + Approved = false, + Resources = 2, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 33, + TaskName = "Testing", + StartDate = new DateTime(2021, 01, 01), + EndDate = new DateTime(2021, 07, 21), + Duration = 2, + Progress = "Closed", + Priority = "Critical", + ParentId = 30, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 34, + TaskName = "Bug fix", + StartDate = new DateTime(2021, 01, 24), + EndDate = new DateTime(2021, 01, 25), + Duration = 2, + Progress = "Open", + Priority = "High", + Approved = false, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 35, + TaskName = "Customer review meeting", + StartDate = new DateTime(2021, 12, 26), + EndDate = new DateTime(2021, 12, 27), + Duration = 2, + Progress = "In Progress", + Priority = "Normal", + ParentId = 30, + Resources = 6, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 36, + TaskName = "Phase 3 complete", + StartDate = new DateTime(2021, 05, 27), + EndDate = new DateTime(2021, 05, 27), + Duration = 2, + Priority = "Critical", + Progress = "Open", + Resources = 5, + ParentId = 30, + Approved = false, + }); + return BusinessObjectCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Layout/MainLayout.razor b/TreeGrid/WebApp-Server/Components/Layout/MainLayout.razor new file mode 100644 index 00000000..5a24bb13 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Layout/MainLayout.razor @@ -0,0 +1,23 @@ +@inherits LayoutComponentBase + +
+ + +
+
+ About +
+ +
+ @Body +
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
diff --git a/TreeGrid/WebApp-Server/Components/Layout/MainLayout.razor.css b/TreeGrid/WebApp-Server/Components/Layout/MainLayout.razor.css new file mode 100644 index 00000000..038baf17 --- /dev/null +++ b/TreeGrid/WebApp-Server/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/TreeGrid/WebApp-Server/Components/Layout/NavMenu.razor b/TreeGrid/WebApp-Server/Components/Layout/NavMenu.razor new file mode 100644 index 00000000..ab8558dd --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Layout/NavMenu.razor @@ -0,0 +1,40 @@ + + + + + + diff --git a/TreeGrid/WebApp-Server/Components/Layout/NavMenu.razor.css b/TreeGrid/WebApp-Server/Components/Layout/NavMenu.razor.css new file mode 100644 index 00000000..4e15395e --- /dev/null +++ b/TreeGrid/WebApp-Server/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/TreeGrid/WebApp-Server/Components/Pages/Counter.razor b/TreeGrid/WebApp-Server/Components/Pages/Counter.razor new file mode 100644 index 00000000..b59a003b --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/Counter.razor @@ -0,0 +1,22 @@ +@page "/counter" + +@rendermode InteractiveServer + + +Counter + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} + diff --git a/TreeGrid/WebApp-Server/Components/Pages/Error.razor b/TreeGrid/WebApp-Server/Components/Pages/Error.razor new file mode 100644 index 00000000..695df0a4 --- /dev/null +++ b/TreeGrid/WebApp-Server/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/TreeGrid/WebApp-Server/Components/Pages/Home.razor b/TreeGrid/WebApp-Server/Components/Pages/Home.razor new file mode 100644 index 00000000..b4fcc580 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/Home.razor @@ -0,0 +1,9 @@ +@page "/" +@rendermode InteractiveServer + +Home + +

Hello, world!

+ +Welcome to your new app. + diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/AdaptiveLayout.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/AdaptiveLayout.razor new file mode 100644 index 00000000..8764a074 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/AdaptiveLayout.razor @@ -0,0 +1,38 @@ +@page "/treegrid/adaptivelayout" +@rendermode InteractiveServer +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using TreeGridUGSample.Components.Data; +
+
+
+
+
+
+ + + + + + + + + + + +
+
+
+
+
+
+ +@code { + + private List TreeData { get; set; } + + protected override void OnInitialized() + { + this.TreeData = SelfReferenceData.GetTree().Take(30).ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Aggregate/FooterAggregate.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Aggregate/FooterAggregate.razor new file mode 100644 index 00000000..c90a627f --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Aggregate/FooterAggregate.razor @@ -0,0 +1,76 @@ +@page "/treegrid/aggregate/footeraggregate" +@rendermode InteractiveServer +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + @{ + var sumvalue = (context as Syncfusion.Blazor.Grids.AggregateTemplateContext); +
+

Sum: @sumvalue.Sum

+
+ } +
+
+ + + @{ + var truecount = (context as Syncfusion.Blazor.Grids.AggregateTemplateContext); +
+

Approved: @truecount.TrueCount

+
+ } +
+
+
+
+
+ + + + + + + + +
+ +@code { + public List TreeGridData { get; set; } + + public Syncfusion.Blazor.Grids.AggregateTemplateContext model = new Syncfusion.Blazor.Grids.AggregateTemplateContext(); + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public bool Approved { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Approved = true, ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, Approved = false, ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Approved = true, ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Approved = false, Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Approved = true, ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Approved = false, ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Approved = true, ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Approved = false, ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Approved = true, ParentId = 5 }); + return TreeDataCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Aggregate/FormatAggregate.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Aggregate/FormatAggregate.razor new file mode 100644 index 00000000..f1fc8a2e --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Aggregate/FormatAggregate.razor @@ -0,0 +1,43 @@ +@page "/treegrid/aggregate/formataggregate" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + @{ + var sumvalue = (context as Syncfusion.Blazor.Grids.AggregateTemplateContext); +
+

Sum: @sumvalue.Sum

+
+ } +
+
+
+
+
+ + + + + + + + +
+ +@code { + public List TreeGridData { get; set; } + + public Syncfusion.Blazor.Grids.AggregateTemplateContext model = new Syncfusion.Blazor.Grids.AggregateTemplateContext(); + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Cell.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Cell.razor new file mode 100644 index 00000000..4e2aff91 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Cell.razor @@ -0,0 +1,77 @@ +@page "/treegrid/cell" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void querycellinfo(QueryCellInfoEventArgs Args) + { + if (Args.Column.Field == "Progress" && Args.Data.Progress > 70 && Args.Data.Progress <= 100) + { + String[] s1 = new String[1] { "intro" }; + Args.Cell.AddClass(s1); + } + else if (Args.Column.Field == "Progress" && Args.Data.Progress > 20) + { + String[] s2 = new String[1] { "intro1" }; + Args.Cell.AddClass(s2); + } + } + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1 for the Treegrid", Duration = 4, Progress = 80, Priority = "Low", ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Clipboard.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Clipboard.razor new file mode 100644 index 00000000..292c174f --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Clipboard.razor @@ -0,0 +1,124 @@ +@page "/treegrid/clipboard" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.Grids + +
+ Copy + Copy With Header +
+ +
+
Select Hierarchy mode
+ + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + +
+

Event Trace

+
+
+ @foreach (var eventName in EventNames) + { +

@eventName event called

+ } +
+
+ +
+
+@code +{ + SfTreeGrid TreeGrid; + public List TreeData { get; set; } + public string CopyMode { get; set; } = "Parent"; + private List EventNames { get; set; } = new List(); + public CopyHierarchyType CopyType { get; set; } = CopyHierarchyType.Parent; + public List CopyModes { get; set; } = new List(); + private bool ClearingByButton { get; set; } + private void ClearEventNames() + { + EventNames = new List(); + ClearingByButton = true; + } + public class DropdownData + { + public string Id { get; set; } + public string Mode { get; set; } + } + + protected override void OnInitialized() + { + this.TreeData = BusinessObject.GetSelfDataSource().ToList(); + this.CopyModes.Add(new DropdownData() { Id = "Parent", Mode = "Parent" }); + this.CopyModes.Add(new DropdownData() { Id = "Child", Mode = "Child" }); + this.CopyModes.Add(new DropdownData() { Id = "Both", Mode = "Both" }); + this.CopyModes.Add(new DropdownData() { Id = "None", Mode = "None" }); + } + + private async void OnTypeChange(Syncfusion.Blazor.DropDowns.ChangeEventArgs Args) + { + if (Args.Value == "Parent") + { + CopyType = CopyHierarchyType.Parent; + } + else if (Args.Value == "Child") + { + CopyType = CopyHierarchyType.Child; + } + else if (Args.Value == "Both") + { + CopyType = CopyHierarchyType.Both; + } + else if (Args.Value == "None") + { + CopyType = CopyHierarchyType.None; + } + } + public void BeforeCopyPasteHandler(Syncfusion.Blazor.TreeGrid.BeforeCopyPasteEventArgs args) + { + EventNames.Insert(0, "BeforeCopyPaste"); + } + public void BeforeCellPasteHandler(Syncfusion.Blazor.TreeGrid.BeforeCellPasteEventArgs args) + { + EventNames.Insert(0, "BeforeCellPaste"); + } + public async void Copy() + { + await this.TreeGrid.CopyAsync(); + } + + public async void CopyHeader() + { + await this.TreeGrid.CopyAsync(true); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/AutoFit.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/AutoFit.razor new file mode 100644 index 00000000..03c8c9f3 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/AutoFit.razor @@ -0,0 +1,32 @@ +

AutoFit

+@page "/TreeGrid/Column/auto-fit" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void OnDataBound(object e) + { + this.TreeGrid.AutoFitColumnsAsync(new string[] { "TaskName" }); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/CheckBox_Column.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/CheckBox_Column.razor new file mode 100644 index 00000000..81c16764 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/CheckBox_Column.razor @@ -0,0 +1,24 @@ +

CheckBox_Column

+@page "/TreeGrid/Column/checkbox_column" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnChooser.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnChooser.razor new file mode 100644 index 00000000..35a56875 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnChooser.razor @@ -0,0 +1,24 @@ +@page "/TreeGrid/Column/column_chooser" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public string[] ToolbarItems = new string[] { "ColumnChooser" }; + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnMenu.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnMenu.razor new file mode 100644 index 00000000..170a18c1 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnMenu.razor @@ -0,0 +1,24 @@ +@page "/TreeGrid/Column/column_menu" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnReorder.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnReorder.razor new file mode 100644 index 00000000..f6919b32 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnReorder.razor @@ -0,0 +1,29 @@ +@page "/treedata/column/reorder" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.Buttons; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + private SfTreeGrid TreeGrid; + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + private async Task ReorderColumn() + { + await TreeGrid.ReorderColumnsAsync(new List() { "TaskName", "Duration" }, "Progress"); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnTemplate.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnTemplate.razor new file mode 100644 index 00000000..48e7dfa7 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ColumnTemplate.razor @@ -0,0 +1,203 @@ +@page "/TreeGrid/Column/column_template" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper +
+
+
+ + + + + + + + + + + + +
+
+
+ + + +@code { + private IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } + public class Employee + { + public string Name { get; set; } + public string FullName { get; set; } + public DateTime DOB { get; set; } + public string Designation { get; set; } + public string EmpID { get; set; } + public int? EmployeeID { get; set; } + public string Country { get; set; } + public string Address { get; set; } + public string Contact { get; set; } + public int? ParentId { get; set; } + public static List GetTemplateData() + { + List DataCollection = new List(); + DataCollection.Add(new Employee + { + Name = "Robert King", + FullName = "RobertKing", + Designation = "Chief Executive Officer", + EmployeeID = 1, + EmpID = "EMP001", + Address = "507 - 20th Ave. E.Apt. 2A, Seattle", + Contact = "(206) 555-9857", + Country = "USA", + DOB = new DateTime(1992, 2, 15), + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "David William", + FullName = "DavidWilliam", + Designation = "Vice President", + EmployeeID = 2, + EmpID = "EMP004", + Address = "722 Moss Bay Blvd., Kirkland", + Contact = "(206) 555-3412", + Country = "USA", + DOB = new DateTime(1990, 5, 20), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Nancy Davolio", + FullName = "NancyDavolio", + Designation = "Marketing Executive", + EmployeeID = 3, + EmpID = "EMP035", + Address = "4110 Old Redmond Rd., Redmond", + Contact = "(206) 555-8122", + Country = "USA", + DOB = new DateTime(1988, 3, 19), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Andrew Fuller", + FullName = "AndrewFuller", + Designation = "Sales Representative", + EmployeeID = 4, + EmpID = "EMP045", + Address = "14 Garrett Hill, London", + Contact = "(71) 555-4848", + Country = "UK", + DOB = new DateTime(1993, 9, 20), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Anne Dodsworth", + FullName = "AnneDodsworth", + Designation = "Sales Representative", + EmployeeID = 5, + EmpID = "EMP091", + Address = "4726 - 11th Ave. N.E., Seattle", + Contact = "(206) 555-1189", + Country = "USA", + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "Michael Suyama", + FullName = "MichaelSuyama", + Designation = "Sales Representative", + EmployeeID = 6, + EmpID = "EMP110", + Address = "Coventry House Miner Rd., London", + Contact = "(71) 555-3636", + Country = "UK", + ParentId = 5 + }); + DataCollection.Add(new Employee + { + Name = "Janet Leverling", + FullName = "JanetLeverling", + Designation = "Sales Coordinator", + EmployeeID = 7, + EmpID = "EMP131", + Address = "Edgeham Hollow Winchester Way, London", + Contact = "(71) 555-3636", + Country = "UK", + ParentId = 5 + }); + DataCollection.Add(new Employee + { + Name = "Romey Wilson", + FullName = "RomeyWilson", + Designation = "Sales Executive", + EmployeeID = 8, + EmpID = "EMP039", + Address = "7 Houndstooth Rd., London", + Contact = "(71) 555-3690", + Country = "UK", + DOB = new DateTime(1994, 2, 2), + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "Margaret Peacock", + FullName = "MargaretPeacock", + Designation = "Sales Representative", + EmployeeID = 9, + EmpID = "EMP213", + Address = "4726 - 11th Ave. N.E., California", + Contact = "(206) 555-1989", + Country = "USA", + ParentId = 8 + }); + DataCollection.Add(new Employee + { + Name = "Steven Buchanan", + FullName = "StevenBuchanan", + Designation = "Sales Representative", + EmployeeID = 11, + EmpID = "EMP197", + Address = "200 Lincoln Ave, Salinas, CA 93901", + Contact = "(831) 758-7408", + Country = "USA", + ParentId = 8 + }); + DataCollection.Add(new Employee + { + Name = "Tedd Lawson", + FullName = "TeddLawson", + Designation = "Sales Representative", + EmployeeID = 12, + EmpID = "EMP167", + Address = "200 Lincoln Ave, Salinas, CA 93901", + Contact = "(831) 758-7368", + Country = "USA", + ParentId = 8 + }); + return DataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ComplexDataBinding.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ComplexDataBinding.razor new file mode 100644 index 00000000..8b668d9c --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/ComplexDataBinding.razor @@ -0,0 +1,48 @@ +

ComplexDataBinding

+@page "/TreeGrid/DataBinding/complex-data-binding" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid + + + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskId { get; set; } + public TaskDetails Task { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public class TaskDetails + { + public string TaskName { get; set; } + public int Duration { get; set; } + } + public List TreeData = new List(); + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Parent Task 1", Duration = 50000 }, TaskId = 1, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child task 1", Duration = 400000 }, TaskId = 2, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child Task 2", Duration = 500000 }, TaskId = 3, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Parent Task 2", Duration = 50000 }, TaskId = 4, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child task 1", Duration = 400000 }, TaskId = 5, Progress = 80, ParentId = 4, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child Task 2", Duration = 500000 }, TaskId = 6, Progress = 65, ParentId = 4, Priority = "Critical" }); + + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Complex_Expando_DataBinding.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Complex_Expando_DataBinding.razor new file mode 100644 index 00000000..7e873b5e --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Complex_Expando_DataBinding.razor @@ -0,0 +1,65 @@ +

Complex_Expando_DataBinding

+@page "/TreeGrid/DataBinding/complex-expando-databinding" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using System.Dynamic; + + + + + + + + + + +@code { + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = GetData().ToList(); + } + public static List Data = new List(); + public static int ParentRecordID { get; set; } + public static int ChildRecordID { get; set; } + public static List GetData() + { + Data.Clear(); + ParentRecordID = 0; + ChildRecordID = 0; + for (var i = 1; i <= 2; i++) + { + + dynamic ParentRecord = new ExpandoObject(); + dynamic Task = new ExpandoObject(); + Task.TaskName = "Parent Task " + i; + Task.Duration = ParentRecordID % 2 == 0 ? 32 : 76; + ParentRecord.TaskID = ++ParentRecordID; + ParentRecord.Task = Task; + ParentRecord.Progress = ParentRecordID % 2 == 0 ? "In Progress" : "Open"; + ParentRecord.Priority = ParentRecordID % 2 == 0 ? "High" : "Low"; + ParentRecord.ParentID = null; + Data.Add(ParentRecord); + AddChildRecords(ParentRecordID); + } + return Data; + } + public static void AddChildRecords(int ParentId) + { + for (var i = 1; i < 3; i++) + { + + dynamic ChildRecord = new ExpandoObject(); + dynamic Task = new ExpandoObject(); + Task.TaskName = "Child Task " + ++ChildRecordID; + Task.Duration = ParentRecordID % 3 == 0 ? 64 : 98; + ChildRecord.TaskID = ++ParentRecordID; + ChildRecord.Task = Task; + ChildRecord.Progress = ParentRecordID % 3 == 0 ? "Validated" : "Closed"; + ChildRecord.Priority = ParentRecordID % 3 == 0 ? "Low" : "Critical"; + ChildRecord.ParentID = ParentId; + Data.Add(ChildRecord); + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Format.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Format.razor new file mode 100644 index 00000000..112776f9 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Format.razor @@ -0,0 +1,51 @@ +

Format

+@page "/TreeGrid/Column/format" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDataFormat.GetDataFormat().ToList(); + } + public class TreeDataFormat + { + public TreeDataFormat() { } + public int OrderID { get; set; } + public string OrderName { get; set; } + public double Price { get; set; } + public DateTime? OrderDate { get; set; } + public int? ParentId { get; set; } + + public static List GetDataFormat() + { + List data = new List() + { + new TreeDataFormat() { OrderID= 1,OrderName= "Order 1",OrderDate = new DateTime(1963, 2, 15),ParentId = null,Price=133.66 }, + new TreeDataFormat() { OrderID= 11, ParentId = 1, OrderName= "Mackerel",OrderDate = new DateTime(1966, 3, 19), Price= 28.20}, + new TreeDataFormat() { OrderID= 12, ParentId = 1, OrderName= "Mackerel",OrderDate = new DateTime(1963, 2, 15), Price= 25.92}, + new TreeDataFormat() { OrderID= 13, ParentId = 1, OrderName= "Mackerel", OrderDate = new DateTime(1966, 3, 19),Price= 52.68}, + new TreeDataFormat() { OrderID= 14, ParentId = 1, OrderName= "Mackerel",OrderDate = new DateTime(1963, 2, 15), Price= 11.25}, + new TreeDataFormat() { OrderID= 15, ParentId = 1, OrderName= "Mackerel", OrderDate = new DateTime(1980, 9, 20),Price= 15.61}, + new TreeDataFormat() { OrderID= 2,OrderName= "Order 2",ParentId = null,OrderDate = new DateTime(1980, 9, 20),Price=212.33}, + new TreeDataFormat() { OrderID= 21, ParentId = 2, OrderName= "Tilapias",OrderDate = new DateTime(1966, 3, 19),Price= 55.50}, + new TreeDataFormat() { OrderID= 22, ParentId = 2, OrderName= "White Shrimp",OrderDate = new DateTime(1963, 2, 15), Price= 41.70}, + new TreeDataFormat() { OrderID= 23, ParentId = 2, OrderName= "Fresh Cheese",OrderDate = new DateTime(1980, 9, 20),Price= 39.20}, + new TreeDataFormat() { OrderID= 24, ParentId = 2, OrderName= "Blue Veined Cheese",OrderDate = new DateTime(1966, 3, 19),Price= 38.76}, + new TreeDataFormat() { OrderID= 25, ParentId = 2, OrderName= "Butter",OrderDate = new DateTime(1966, 3, 19), Price= 37.17}}; + return data; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/HeaderTemplate.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/HeaderTemplate.razor new file mode 100644 index 00000000..403792c5 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/HeaderTemplate.razor @@ -0,0 +1,53 @@ +

Header Template

+@page "/TreeGrid/Column/header-template" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + +
+ Name +
+
+
+ + + +
+
+ + + + +@code { + public Employee model = new Employee(); + public IEnumerable TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = Employee.GetTemplateData(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Resize.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Resize.razor new file mode 100644 index 00000000..7d082ed1 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Resize.razor @@ -0,0 +1,22 @@ +@page "/TreeGrid/Column/resize" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Show_Hide_Column.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Show_Hide_Column.razor new file mode 100644 index 00000000..2f693add --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Show_Hide_Column.razor @@ -0,0 +1,37 @@ +

Show_Hide_Column

+@page "/TreeGrid/Column/show_hide_column" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeGridData { get; set; } + public string[] ColumnItems = new string[] { "Task ID", "Duration" }; + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + private void HideColumns() + { + this.TreeGrid.HideColumnsAsync(ColumnItems); //hide by HeaderText + } + private void ShowColumns() + { + this.TreeGrid.ShowColumnsAsync(ColumnItems); //show by HeaderText + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Template_ColumnChooser.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Template_ColumnChooser.razor new file mode 100644 index 00000000..70c13aa2 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Column/Template_ColumnChooser.razor @@ -0,0 +1,77 @@ +@page "/TreeGrid/Column/template_column_chooser" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid; + + + + + + + @{ + var cxt = context as ColumnChooserFooterTemplateContext; + var visibles = cxt.Columns.Where(x => x.Visible).Select(x => x.HeaderText).ToArray(); + var hiddens = cxt.Columns.Where(x => !x.Visible).Select(x => x.HeaderText).ToArray(); + } + Ok + Cancel + + + + + + + + + + + +@code + { + public SfTreeGrid TreeGrid { get; set; } + private List GridData; + protected override void OnInitialized() + { + GridData = GetTree1(); + } + + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int Duration { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + public List TreeGridData = new List(); + public List GetTree1() + { + if (TreeGridData.Count == 0) + { + TreeGridData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null, Priority = "High" }); + TreeGridData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeGridData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeGridData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", Duration = 6, Progress = 77, ParentId = null, Priority = "Low" }); + TreeGridData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", Duration = 9, Progress = 25, ParentId = 4, Priority = "Normal" }); + TreeGridData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", Duration = 9, Progress = 7, ParentId = 5, Priority = "Normal" }); + TreeGridData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", Duration = 4, Progress = 45, ParentId = null, Priority = "High" }); + TreeGridData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", Duration = 3, Progress = 38, ParentId = 7, Priority = "Critical" }); + TreeGridData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", Duration = 7, Progress = 70, ParentId = 7, Priority = "Low" }); + } + return TreeGridData; + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ContextMenu/CustomContextMenu.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ContextMenu/CustomContextMenu.razor new file mode 100644 index 00000000..16f9186b --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ContextMenu/CustomContextMenu.razor @@ -0,0 +1,43 @@ +@page "/treegrid/contextmenu/customcontextmenu" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid; +@using TreeGridUGSample.Components.Data + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeData = new List(); + + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 50000, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 400000, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 500000, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", Duration = 609890, Progress = 77, ParentId = null, Priority = "Low" }); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", Duration = 9778686, Progress = 25, ParentId = 4, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", Duration = 954359, Progress = 7, ParentId = 5, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", Duration = 478708, Progress = 45, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", Duration = 36786979, Progress = 38, ParentId = 7, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", Duration = 778907897, Progress = 70, ParentId = 7, Priority = "Low" }); + } + + public void OnContextMenuClick(Syncfusion.Blazor.Grids.ContextMenuClickEventArgs args) + { + if (args.Item.Id == "copywithheader") + { + this.TreeGrid.CopyAsync(true); + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ContextMenu/DefaultContextMenu.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ContextMenu/DefaultContextMenu.razor new file mode 100644 index 00000000..71773114 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ContextMenu/DefaultContextMenu.razor @@ -0,0 +1,32 @@ +@page "/treegrid/contextmenu/defaultcontextmenu" +@rendermode InteractiveServer +@using Syncfusion.Blazor.TreeGrid; +@using TreeGridUGSample.Components.Data + + + + + + + + + + + + + +@code { + public List TreeData = new List(); + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 50000, Progress = 70, ParentId = null, Priority = "High", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 400000, Progress = 80, ParentId = 1, Priority = "Normal", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 500000, Progress = 65, ParentId = 1, Priority = "Critical", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", Duration = 609890, Progress = 77, ParentId = null, Priority = "Low", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", Duration = 9778686, Progress = 25, ParentId = 4, Priority = "Normal", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", Duration = 954359, Progress = 7, ParentId = 5, Priority = "Normal", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", Duration = 478708, Progress = 45, ParentId = null, Priority = "High", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", Duration = 36786979, Progress = 38, ParentId = 7, Priority = "Critical", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", Duration = 778907897, Progress = 70, ParentId = 7, Priority = "Low", Approved = true }); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Crud_Custom_Adaptor.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Crud_Custom_Adaptor.razor new file mode 100644 index 00000000..0047f826 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Crud_Custom_Adaptor.razor @@ -0,0 +1,101 @@ +

Crud_Custom_Adaptor

+@page "/TreeGrid/DataBinding/crud-custom-adaptor" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor; + + + + + + + + + + + + + + + + +@code { + public static List TreeData { get; set; } + + protected override void OnInitialized() + { + TreeData = SelfReferenceData.GetTree().ToList(); + } + + // Implementing custom adaptor by extending the DataAdaptor class + public class CustomAdaptor : DataAdaptor + { + // Performs data Read operation + public override object Read(DataManagerRequest dm, string key = null) + { + IEnumerable DataSource = TreeData; + if (dm.Search != null && dm.Search.Count > 0) + { + // Searching + DataSource = DataOperations.PerformSearching(DataSource, dm.Search); + } + if (dm.Sorted != null && dm.Sorted.Count > 0) + { + // Sorting + DataSource = DataOperations.PerformSorting(DataSource, dm.Sorted); + } + if (dm.Where != null && dm.Where.Count > 0) + { + // Filtering + DataSource = DataOperations.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator); + } + int count = DataSource.Cast().Count(); + if (dm.Skip != 0) + { + //Paging + DataSource = DataOperations.PerformSkip(DataSource, dm.Skip); + } + if (dm.Take != 0) + { + DataSource = DataOperations.PerformTake(DataSource, dm.Take); + } + return dm.RequiresCounts ? new DataResult() { Result = DataSource, Count = count } : (object)DataSource; + } + + + // Performs Insert operation + public override object Insert(DataManager dm, object value, string key) + { + TreeData.Insert(0, value as SelfReferenceData); + return value; + } + + // Performs Remove operation + public override object Remove(DataManager dm, object value, string keyField, string key) + { + TreeData.Remove(TreeData.Where(or => or.TaskID == int.Parse(value.ToString())).FirstOrDefault()); + return value; + } + + // Performs Update operation + public override object Update(DataManager dm, object value, string keyField, string key) + { + var data = TreeData.Where(or => or.TaskID == (value as SelfReferenceData).TaskID).FirstOrDefault(); + if (data != null) + { + data.TaskID = (value as SelfReferenceData).TaskID; + data.TaskName = (value as SelfReferenceData).TaskName; + data.StartDate = (value as SelfReferenceData).StartDate; + data.Duration = (value as SelfReferenceData).Duration; + data.Priority = (value as SelfReferenceData).Priority; + data.Progress = (value as SelfReferenceData).Progress; + } + return value; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/CustomDataAdaptor.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/CustomDataAdaptor.razor new file mode 100644 index 00000000..8cf5004f --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/CustomDataAdaptor.razor @@ -0,0 +1,69 @@ +

CustomAdaptor

+@page "/TreeGrid/DataBinding/custom-adaptor" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor; + + + + + + + + + + + + + + + +@code { + public static List TreeData { get; set; } + + protected override void OnInitialized() + { + TreeData = SelfReferenceData.GetTree().ToList(); + } + + // Implementing custom adaptor by extending the DataAdaptor class + public class CustomAdaptor : DataAdaptor + { + // Performs data Read operation + public override object Read(DataManagerRequest dm, string key = null) + { + IEnumerable DataSource = TreeData; + if (dm.Search != null && dm.Search.Count > 0) + { + // Searching + DataSource = DataOperations.PerformSearching(DataSource, dm.Search); + } + if (dm.Sorted != null && dm.Sorted.Count > 0) + { + // Sorting + DataSource = DataOperations.PerformSorting(DataSource, dm.Sorted); + } + if (dm.Where != null && dm.Where.Count > 0) + { + // Filtering + DataSource = DataOperations.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator); + } + int count = DataSource.Cast().Count(); + if (dm.Skip != 0) + { + //Paging + DataSource = DataOperations.PerformSkip(DataSource, dm.Skip); + } + if (dm.Take != 0) + { + DataSource = DataOperations.PerformTake(DataSource, dm.Take); + } + return dm.RequiresCounts ? new DataResult() { Result = DataSource, Count = count } : (object)DataSource; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/DynamicObject.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/DynamicObject.razor new file mode 100644 index 00000000..a9dc2fc5 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/DynamicObject.razor @@ -0,0 +1,97 @@ +

DynamicObject

+@page "/TreeGrid/DataBinding/dynamic-object" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid +@using System.Dynamic + + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = GetData().ToList(); + } + public static List Data = new List(); + public static int ParentRecordID { get; set; } + public static int ChildRecordID { get; set; } + + public static List GetData() + { + Data.Clear(); + ParentRecordID = 0; + ChildRecordID = 0; + for (var i = 1; i <= 3; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ParentRecord = new DynamicDictionary(); + ParentRecord.TaskID = ++ParentRecordID; + ParentRecord.TaskName = "Parent Task " + i; + ParentRecord.StartDate = startingDate; + ParentRecord.Progress = ParentRecordID % 2 == 0 ? "In Progress" : "Open"; + ParentRecord.Priority = ParentRecordID % 2 == 0 ? "High" : "Low"; + ParentRecord.Duration = ParentRecordID % 2 == 0 ? 32 : 76; + ParentRecord.ParentID = null; + Data.Add(ParentRecord); + AddChildRecords(ParentRecordID); + } + return Data; + } + public static void AddChildRecords(int ParentId) + { + for (var i = 1; i < 3; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ChildRecord = new DynamicDictionary(); + ChildRecord.TaskID = ++ParentRecordID; + ChildRecord.TaskName = "Child Task " + ++ChildRecordID; + ChildRecord.StartDate = startingDate; + ChildRecord.Progress = ParentRecordID % 3 == 0 ? "Validated" : "Closed"; + ChildRecord.Priority = ParentRecordID % 3 == 0 ? "Low" : "Critical"; + ChildRecord.Duration = ParentRecordID % 3 == 0 ? 64 : 98; + ChildRecord.ParentID = ParentId; + Data.Add(ChildRecord); + } + } + + public class DynamicDictionary : System.Dynamic.DynamicObject + { + Dictionary dictionary = new Dictionary(); + + public override bool TryGetMember(GetMemberBinder binder, out object result) + { + string name = binder.Name; + return dictionary.TryGetValue(name, out result); + } + public override bool TrySetMember(SetMemberBinder binder, object value) + { + dictionary[binder.Name] = value; + return true; + } + + public override System.Collections.Generic.IEnumerable GetDynamicMemberNames() + { + return this.dictionary?.Keys; + } + + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/ExpandoObject.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/ExpandoObject.razor new file mode 100644 index 00000000..d4f9b4cd --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/ExpandoObject.razor @@ -0,0 +1,74 @@ +

Expando Object

+@page "/TreeGrid/DataBinding/expando-object" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using System.Dynamic; + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeData { get; set; } + public static List Data = new List(); + protected override void OnInitialized() + { + this.TreeData = GetData().ToList(); + } + + public static int ParentRecordID { get; set; } + public static int ChildRecordID { get; set; } + public static List GetData() + { + Data.Clear(); + ParentRecordID = 0; + ChildRecordID = 0; + for (var i = 1; i <= 60; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ParentRecord = new System.Dynamic.ExpandoObject(); + ParentRecord.TaskID = ++ParentRecordID; + ParentRecord.TaskName = "Parent Task " + i; + ParentRecord.StartDate = startingDate; + ParentRecord.Progress = ParentRecordID % 2 == 0 ? "In Progress" : "Open"; + ParentRecord.Priority = ParentRecordID % 2 == 0 ? "High" : "Low"; + ParentRecord.Duration = ParentRecordID % 2 == 0 ? 32 : 76; + ParentRecord.ParentID = null; + Data.Add(ParentRecord); + AddChildRecords(ParentRecordID); + } + return Data; + } + public static void AddChildRecords(int ParentId) + { + for (var i = 1; i < 4; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ChildRecord = new System.Dynamic.ExpandoObject(); + ChildRecord.TaskID = ++ParentRecordID; + ChildRecord.TaskName = "Child Task " + ++ChildRecordID; + ChildRecord.StartDate = startingDate; + ChildRecord.Progress = ParentRecordID % 3 == 0 ? "Validated" : "Closed"; + ChildRecord.Priority = ParentRecordID % 3 == 0 ? "Low" : "Critical"; + ChildRecord.Duration = ParentRecordID % 3 == 0 ? 64 : 98; + ChildRecord.ParentID = ParentId; + Data.Add(ChildRecord); + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Hierarchy-data-binding.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Hierarchy-data-binding.razor new file mode 100644 index 00000000..021a8603 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Hierarchy-data-binding.razor @@ -0,0 +1,49 @@ +

Hierarchy_data_binding

+@page "/TreeGrid/DataBinding/Hierarchy-data-binding" +@rendermode InteractiveServer +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int Duration { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public List Children { get; set; } + } + public List TreeData = new List(); + protected override void OnInitialized() + { + List Record1 = new List(); + BusinessObject Child1 = new BusinessObject() { TaskId = 2, TaskName = "Plan timeline", Progress = 100, Duration = 5, Priority = "Normal" }; + BusinessObject Child2 = new BusinessObject() { TaskId = 3, TaskName = "Plan budget", Duration = 5, Progress = 100, Priority = "Low" }; + BusinessObject Child3 = new BusinessObject() { TaskId = 4, TaskName = "Allocate resources", Duration = 5, Progress = 100, Priority = "Critical" }; + Record1.Add(Child1); + Record1.Add(Child2); + Record1.Add(Child3); + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Planning", Duration = 10, Progress = 70, Children = Record1, Priority = "High" }); + + + List Record2 = new List(); + BusinessObject Child4 = new BusinessObject() { TaskId = 6, TaskName = "Software Specification", Progress = 60, Duration = 3, Priority = "Normal" }; + BusinessObject Child5 = new BusinessObject() { TaskId = 7, TaskName = "Develop Prototype", Duration = 3, Progress = 100, Priority = "Critical" }; + + + Record2.Add(Child4); + Record2.Add(Child5); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Design", Duration = 3, Progress = 86, Children = Record2, Priority = "High" }); + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/ObservableCollection.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/ObservableCollection.razor new file mode 100644 index 00000000..dc318678 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/ObservableCollection.razor @@ -0,0 +1,58 @@ +

Observable Collection

+@page "/TreeGrid/DataBinding/observable-collection" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using System.Collections.ObjectModel + +
+ + + +
+ + + + + + + + + + + +@code { + public ObservableCollection TreeGridData { get; set; } + private int taskCounter = 6; + + protected override void OnInitialized() + { + TreeGridData = TreeData.GetSelfDataSource(); + } + + public void AddRecord() + { + TreeGridData.Add(new TreeData.BusinessObject + { + TaskId = taskCounter++, + TaskName = "New Task", + Duration = 5, + Progress = 50, + Priority = "Normal", + ParentId = null + }); + } + + public void DeleteRecord() + { + if (TreeGridData.Any()) + TreeGridData.Remove(TreeGridData.Last()); + } + + public void UpdateRecord() + { + if (TreeGridData.Any()) + TreeGridData.First().TaskName = "Updated Task Name"; + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/RemoteData.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/RemoteData.razor new file mode 100644 index 00000000..38a3ba0a --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/RemoteData.razor @@ -0,0 +1,34 @@ +

RemoteData

+@page "/TreeGrid/DataBinding/remote-data" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; + + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskID { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public String Progress { get; set; } + public String Priority { get; set; } + public double? Duration { get; set; } + public int? ParentID { get; set; } + public bool? isParent { get; set; } + public bool? Approved { get; set; } + public int? ParentItem { get; set; } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Self-Reference.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Self-Reference.razor new file mode 100644 index 00000000..5a29b477 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/DataBinding/Self-Reference.razor @@ -0,0 +1,44 @@ +@page "/TreeGrid/DataBinding/self-reference" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateOnly? StartDate { get; set; } + public TimeOnly? StartTime { get; set; } + public int Duration { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public List TreeData = new List(); + + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateOnly(2021, 03, 02), StartTime = new TimeOnly(10, 00, 00), Duration = 10, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateOnly(2021, 03, 04), StartTime = new TimeOnly(11, 30, 00), Duration = 4, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateOnly(2021, 03, 06), StartTime = new TimeOnly(12, 00, 00), Duration = 5, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", StartDate = new DateOnly(2021, 03, 08), StartTime = new TimeOnly(13, 30, 00), Duration = 6, Progress = 77, ParentId = null, Priority = "Low" }); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", StartDate = new DateOnly(2021, 07, 10), StartTime = new TimeOnly(14, 00, 00), Duration = 9, Progress = 25, ParentId = 4, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", StartDate = new DateOnly(2021, 10, 12), StartTime = new TimeOnly(16, 00, 00), Duration = 9, Progress = 7, ParentId = 5, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", StartDate = new DateOnly(2021, 10, 14), StartTime = new TimeOnly(17, 30, 00), Duration = 4, Progress = 45, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", StartDate = new DateOnly(2021, 10, 16), StartTime = new TimeOnly(18, 00, 00), Duration = 3, Progress = 38, ParentId = 7, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", StartDate = new DateOnly(2021, 02, 18), StartTime = new TimeOnly(19, 30, 00), Duration = 7, Progress = 70, ParentId = 7, Priority = "Low" }); + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/Auto-Fill-Like.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/Auto-Fill-Like.razor new file mode 100644 index 00000000..b4242148 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/Auto-Fill-Like.razor @@ -0,0 +1,66 @@ +@page "/Auto-Fill-Like" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + + + + + + + + + + + +@code { + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = BusinessObject.GetSelfDataSource().ToList(); + } + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 12, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", StartDate = new DateTime(2017, 10, 26), Duration = 9, Progress = 25, ParentId = 4, Priority = "Normal" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", StartDate = new DateTime(2017, 10, 27), Duration = 9, Progress = 7, ParentId = 5, Priority = "Normal" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", StartDate = new DateTime(2017, 10, 28), Duration = 4, Progress = 45, ParentId = null, Priority = "High" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", StartDate = new DateTime(2017, 10, 29), Duration = 3, Progress = 38, ParentId = 7, Priority = "Critical" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", StartDate = new DateTime(2017, 10, 30), Duration = 7, Progress = 70, ParentId = 7, Priority = "Low" }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/BatchEditing.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/BatchEditing.razor new file mode 100644 index 00000000..6a18d163 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/BatchEditing.razor @@ -0,0 +1,51 @@ +@page "/BatchEditing" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/CellEditing.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/CellEditing.razor new file mode 100644 index 00000000..9b5c8629 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/CellEditing.razor @@ -0,0 +1,52 @@ +@page "/CellEditing" +@rendermode InteractiveServer + + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/CommandColumn.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/CommandColumn.razor new file mode 100644 index 00000000..33750ab3 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/CommandColumn.razor @@ -0,0 +1,58 @@ +@page "/treegrid/command-column" +@rendermode InteractiveServer + + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/DialogEdit.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/DialogEdit.razor new file mode 100644 index 00000000..958711c5 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/DialogEdit.razor @@ -0,0 +1,51 @@ +@page "/DialogEdit" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/RowEditing.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/RowEditing.razor new file mode 100644 index 00000000..5e0b75a7 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/RowEditing.razor @@ -0,0 +1,51 @@ +@page "/RowEditing" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/TemplateEditing.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/TemplateEditing.razor new file mode 100644 index 00000000..c9ce4433 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/TemplateEditing.razor @@ -0,0 +1,95 @@ +@page "/TemplateEditing" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns; +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + + + +@code{ + + private Boolean Check = false; + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + public void RowCreatedHandler(RowCreatedEventArgs args) + { + Check = true; + } + + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", Duration = 50, ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingAutocomplete.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingAutocomplete.razor new file mode 100644 index 00000000..705278e3 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingAutocomplete.razor @@ -0,0 +1,60 @@ +@page "/UsingAutoComplete" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns + + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingCombobox.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingCombobox.razor new file mode 100644 index 00000000..d0e5e040 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingCombobox.razor @@ -0,0 +1,73 @@ +@page "/UsingCombobox" + +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns; + + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public List Priority { get; set; } = new List() + { + new Prior(){ Prioritize="Critical", ID=1}, + new Prior(){ Prioritize="High", ID=2}, + new Prior(){ Prioritize="Low", ID=3} + }; + public class Prior + { + public string Prioritize { get; set; } + public int ID { get; set; } + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingMultiselectDropdown.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingMultiselectDropdown.razor new file mode 100644 index 00000000..f3fb85c2 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingMultiselectDropdown.razor @@ -0,0 +1,78 @@ +@page "/UsingMultiSelectDropDown" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns + + + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + public List AvailableChoices { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + AvailableChoices = Enumerable.Range(1, 9).Select(x => new MyChoiceItem() + { + Id = x, + ChosenItems = x + "ItemA" + }).ToList(); + } + public class MyChoiceItem + { + public int Id { get; set; } + public string? ChosenItems { get; set; } + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public string? ChosenItems { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ChosenItems = "1ItemA", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 8, Progress = 80, Priority = "Low", ChosenItems = "2ItemA", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ChosenItems = "3ItemA", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ChosenItems = "4ItemA", ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ChosenItems = "5ItemA", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ChosenItems = "6ItemA", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ChosenItems = "7ItemA", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ChosenItems = "8ItemA", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ChosenItems = "9ItemA", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingNumericTexbox.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingNumericTexbox.razor new file mode 100644 index 00000000..ed909d09 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingNumericTexbox.razor @@ -0,0 +1,59 @@ +@page "/UsingNumericTexbox" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Inputs + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 8, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingRichTextEditor.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingRichTextEditor.razor new file mode 100644 index 00000000..3b363c55 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingRichTextEditor.razor @@ -0,0 +1,58 @@ +@page "/UsingRichTextEditor" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.RichTextEditor + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 8, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingTimePicker.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingTimePicker.razor new file mode 100644 index 00000000..f05494b1 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Editing/UsingTimePicker.razor @@ -0,0 +1,111 @@ +@page "/UsingTimePicker" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.Calendars +
+
+
+ + + + + + + + + + + + + + +
+
+
+ +@code { + + public SfTreeGrid TreeGrid; + private List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = SelfReferenceData.GetTree().Take(50).ToList(); + } + + public class SelfReferenceData + { + public static List tree = new List(); + public int? TaskID { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public String Progress { get; set; } + public String Priority { get; set; } + public double? Duration { get; set; } + public int? ParentID { get; set; } + public bool? IsParent { get; set; } + public int? ParentItem { get; set; } + public SelfReferenceData() { } + public static List GetTree() + { + tree.Clear(); + int root = -1; + int TaskNameID = 0; + int ChildCount = -1; + int SubTaskCount = -1; + for (var t = 1; t <= 60; t++) + { + + DateTime start = new DateTime(2021, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start; + DateTime end = new DateTime(2023, 08, 25); + int endrange = (end - DateTime.Today).Days; + DateTime endingDate = end; + string math = "Critical"; + string progr = "In Progress"; + bool appr = true; + root++; TaskNameID++; + int rootItem = root + 1; + tree.Add(new SelfReferenceData() { TaskID = rootItem, TaskName = "Parent task " + TaskNameID.ToString(), StartDate = startingDate, EndDate = endingDate, IsParent = true, ParentID = null, Progress = progr, Priority = math, Duration = 50 }); + int parent = tree.Count; + for (var c = 0; c < 2; c++) + { + DateTime start1 = new DateTime(2021, 07, 09); + int range1 = (DateTime.Today - start1).Days; + DateTime startingDate1 = start1; + DateTime end1 = new DateTime(2022, 08, 23); + int endrange1 = (end1 - DateTime.Today).Days; + DateTime endingDate1 = end1; + root++; ChildCount++; + string val = ((parent + c + 1) % 3 == 0) ? "Low" : "Critical"; + int parn = parent + c + 1; + progr = "Validated"; + appr = true; + int iD = root + 1; + tree.Add(new SelfReferenceData() { TaskID = iD, TaskName = "Child task " + (ChildCount + 1).ToString(), StartDate = startingDate1, EndDate = endingDate1, IsParent = (((parent + c + 1) % 3) == 0), ParentID = rootItem, Progress = progr, Priority = val, Duration = 50 }); + if ((((parent + c + 1) % 3) == 0)) + { + int immParent = tree.Count; + for (var s = 0; s < 3; s++) + { + DateTime start2 = new DateTime(2021, 05, 05); + int range2 = (DateTime.Today - start2).Days; + DateTime startingDate2 = start2; + DateTime end2 = new DateTime(2024, 06, 16); + int endrange2 = (end2 - DateTime.Today).Days; + DateTime endingDate2 = end2; + root++; SubTaskCount++; + string Prior = (immParent % 2 == 0) ? "Validated" : "Normal"; + tree.Add(new SelfReferenceData() { TaskID = root + 1, TaskName = "Sub task " + (SubTaskCount + 1).ToString(), StartDate = startingDate2, EndDate = endingDate2, IsParent = false, ParentID = iD, Progress = (immParent % 2 == 0) ? "In Progress" : "Closed", Priority = Prior, Duration = 50 }); + } + } + } + } + return tree; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Events.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Events.razor new file mode 100644 index 00000000..9efe6583 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Events.razor @@ -0,0 +1,240 @@ +@page "/treegrid/events" +@rendermode InteractiveServer +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using TreeGridUGSample.Components.Data +
+
+
+ + + + + + + + + + + + + + +
+
+
+
+ + + + + + + + + + +
+

Event Trace

+
+
+ @foreach (var eventName in EventNames) + { +

@eventName event called

+ } +
+
+ +
+
+@code { + private List EventNames { get; set; } = new List(); + private List TreeGridData { get; set; } = new List(); + private bool ClearingByButton { get; set; } + protected override void OnInitialized() + { + TreeGridData = SelfReferenceData.GetTree().ToList(); + } + SfTreeGrid TreeGridInstance { get; set; } + private void ClearEventNames() + { + EventNames = new List(); + ClearingByButton = true; + } + public void ActionFailureHandler(FailureEventArgs args) + { + EventNames.Insert(0, "OnActionFailure"); + } + public void BeginEditHandler(BeginEditArgs args) + { + EventNames.Insert(0, "OnBeginEdit"); + } + public void CellEditHandler(CellEditArgs args) + { + EventNames.Insert(0, "OnCellEdit"); + } + public void CellSaveHandler(CellSaveArgs args) + { + EventNames.Insert(0, "OnCellSave"); + } + public void CellSavedHandler(CellSavedArgs args) + { + EventNames.Insert(0, "CellSaved"); + } + public void CreatedHandler(object args) + { + EventNames.Insert(0, "Created"); + } + public void LoadHandler(object args) + { + EventNames.Insert(0, "OnLoad"); + } + public void DataBoundHandler(BeforeDataBoundArgs args) + { + EventNames.Insert(0, "OnDataBound"); + } + public void RowSelectingHandler(RowSelectingEventArgs args) + { + EventNames.Insert(0, "RowSelecting"); + } + public void RowSelectedHandler(RowSelectEventArgs args) + { + EventNames.Insert(0, "RowSelected"); + } + public void RowDeselectingHandler(RowDeselectEventArgs args) + { + EventNames.Insert(0, "RowDeselecting"); + } + public void RowDeselectHandler(RowDeselectEventArgs args) + { + EventNames.Insert(0, "RowDeselected"); + } + public void SortingHandler(SortingEventArgs args) + { + EventNames.Insert(0, "Sorting"); + } + public void SortedHandler(SortedEventArgs args) + { + EventNames.Insert(0, "Sorted"); + } + public void ExpandingHandler(RowExpandingEventArgs args) + { + EventNames.Insert(0, "Expanding"); + } + public void ExpandedHandler(RowExpandedEventArgs args) + { + EventNames.Insert(0, "Expanded"); + } + public void ColumnReorderingHandler(ColumnReorderingEventArgs args) + { + EventNames.Insert(0, "ColumnReordering"); + } + public void ColumnReorderedHandler(ColumnReorderedEventArgs args) + { + EventNames.Insert(0, "ColumnReordered"); + } + public void PageChangingHandler(GridPageChangingEventArgs args) + { + EventNames.Insert(0, "PageChanging"); + } + public void PageChangedHandler(GridPageChangedEventArgs args) + { + EventNames.Insert(0, "PageChanged"); + } + public void CollapsingHandler(RowCollapsingEventArgs args) + { + EventNames.Insert(0, "Collapsing"); + } + public void CollapsedHandler(RowCollapsedEventArgs args) + { + EventNames.Insert(0, "Collapsed"); + } + public void RowCreatingHandler(RowCreatingEventArgs args) + { + EventNames.Insert(0, "Creating"); + } + public void RowCreatedHandler(RowCreatedEventArgs args) + { + EventNames.Insert(0, "Created"); + } + public void RowDeletingHandler(RowDeletingEventArgs args) + { + EventNames.Insert(0, "Deleting"); + } + public void RowDeletedHandler(RowDeletedEventArgs args) + { + EventNames.Insert(0, "Deleted"); + } + public void ExcelExportHandler() + { + EventNames.Insert(0, "ExcelExport"); + } + public void PdfExportHandler() + { + EventNames.Insert(0, "PdfExport"); + } + public void RowDragStartingHandler(RowDragStartingEventArgs args) + { + EventNames.Insert(0, "RowDragStarting"); + } + public void RowDroppingHandler(RowDroppingEventArgs args) + { + EventNames.Insert(0, "RowDropping"); + } + public void RowDroppedHandler(RowDroppedEventArgs args) + { + EventNames.Insert(0, "RowDropped"); + } + public async void ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Text == "PDF Export") + { + await TreeGridInstance.ExportToPdfAsync(); + } + else if (args.Item.Text == "Excel Export") + { + await TreeGridInstance.ExportToExcelAsync(); + } + } + public void SearchingHandler(SearchingEventArgs args) + { + EventNames.Insert(0, "Searching"); + } + public void SearchedHandler(SearchedEventArgs args) + { + EventNames.Insert(0, "Searched"); + } + public void ResizeStartHandler(ResizeArgs args) + { + EventNames.Insert(0, "ResizeStating"); + } + public void ResizeStoppedHandler(ResizeArgs args) + { + EventNames.Insert(0, "ResizeStopped"); + } + public void FilterDialogOpenedHandler(FilterDialogOpenedEventArgs args) + { + EventNames.Insert(0, "FilterDialogOpened"); + } + public void FilterDialogOpeningHandler(FilterDialogOpeningEventArgs args) + { + EventNames.Insert(0, "FilterDialogOpening"); + } + public void FilteredHandler(FilteredEventArgs args) + { + EventNames.Insert(0, "Filtered"); + } + public void FilteringHandler(FilteringEventArgs args) + { + EventNames.Insert(0, "Filtering"); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ExportToExcel.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ExportToExcel.razor new file mode 100644 index 00000000..f1792ae4 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ExportToExcel.razor @@ -0,0 +1,126 @@ +@page "/treegrid/exporttoexcel" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Navigations; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.Inputs; +@using Syncfusion.Blazor.DropDowns; +@using Syncfusion.Blazor.Buttons; + +

Excel Export Configuration

+ +
+
+ + + + + + + + + + + +
+ +
+ + + + + +
+
+ + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeGridData { get; set; } + + // Properties bound to UI + public string FileName { get; set; } = "treegrid.xlsx"; + public ExportType ExportType { get; set; } = ExportType.AllPages; + public string ExportTypeValue { get; set; } = "AllPages"; // For dropdown binding + public HierarchyExportMode HierarchyExportMode { get; set; } = HierarchyExportMode.Expanded; + public string HierarchyModeValue { get; set; } = "Expanded"; // For dropdown binding + public bool IncludeHiddenColumn { get; set; } = false; + public bool IsCollapsedStatePersist { get; set; } = false; + public bool ApplyCustomTheme { get; set; } = false; + + // Dropdown data + public class DropdownItem + { + public string Value { get; set; } + public string Text { get; set; } + } + + public List ExportTypeOptions { get; set; } = new List + { + new DropdownItem { Value = "AllPages", Text = "All Pages" }, + new DropdownItem { Value = "CurrentPage", Text = "Current Page" } + }; + + public List HierarchyModeOptions { get; set; } = new List + { + new DropdownItem { Value = "All", Text = "All" }, + new DropdownItem { Value = "Expanded", Text = "Expanded" }, + new DropdownItem { Value = "None", Text = "None" } + }; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + + private void OnExportTypeChange(ChangeEventArgs args) + { + ExportType = (ExportType)Enum.Parse(typeof(ExportType), args.Value); + } + + private void OnHierarchyModeChange(ChangeEventArgs args) + { + HierarchyExportMode = (HierarchyExportMode)Enum.Parse(typeof(HierarchyExportMode), args.Value); + } + + private async Task ToolbarClickHandler(ClickEventArgs args) + { + if (args.Item.Text == "Excel Export") + { + TreeGridExcelExportProperties ExportProperties = new TreeGridExcelExportProperties(); + ExportProperties.FileName = FileName; + ExportProperties.ExportType = ExportType; + ExportProperties.HierarchyExportMode = HierarchyExportMode; + ExportProperties.IncludeHiddenColumn = IncludeHiddenColumn; + ExportProperties.IsCollapsedStatePersist = IsCollapsedStatePersist; + + if (ApplyCustomTheme) + { + ExcelTheme theme = new ExcelTheme(); + ExcelStyle recordStyle = new ExcelStyle() + { + FontName = "Segoe UI", + FontColor = "#666666" + }; + theme.Header = recordStyle; + theme.Record = recordStyle; + theme.Caption = recordStyle; + ExportProperties.Theme = theme; + } + await this.TreeGrid.ExportToExcelAsync(ExportProperties); + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ExportToPdf.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ExportToPdf.razor new file mode 100644 index 00000000..07a0c474 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/ExportToPdf.razor @@ -0,0 +1,183 @@ +@page "/treegrid/exporttopdf" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Navigations; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.Inputs; +@using Syncfusion.Blazor.DropDowns; +@using Syncfusion.Blazor.Buttons; + +

PDF Export Configuration

+ + + +
+
+ + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + + +
+
+
+ + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeGridData { get; set; } + + // Properties bound to UI + public string FileName { get; set; } = "treegrid.pdf"; + public PageOrientation Orientation { get; set; } = PageOrientation.Portrait; + public string OrientationValue { get; set; } = "Portrait"; // For dropdown binding + public PdfPageSize PageSize { get; set; } = PdfPageSize.Letter; + public string PageSizeValue { get; set; } = "Letter"; // For dropdown binding + public ExportType ExportType { get; set; } = ExportType.AllPages; + public string ExportTypeValue { get; set; } = "AllPages"; // For dropdown binding + public bool IncludeHiddenColumn { get; set; } = false; + public bool AllowHorizontalOverflow { get; set; } = false; + public bool DisableAutoFitWidth { get; set; } = false; + public bool ApplyCustomTheme { get; set; } = false; + + // Dropdown data + public class DropdownItem + { + public string Value { get; set; } + public string Text { get; set; } + } + + public List OrientationOptions { get; set; } = new List + { + new DropdownItem { Value = "Portrait", Text = "Portrait" }, + new DropdownItem { Value = "Landscape", Text = "Landscape" } + }; + + public List PageSizeOptions { get; set; } = new List + { + new DropdownItem { Value = "Letter", Text = "Letter" }, + new DropdownItem { Value = "Note", Text = "Note" }, + new DropdownItem { Value = "Legal", Text = "Legal" }, + new DropdownItem { Value = "A0", Text = "A0" }, + new DropdownItem { Value = "A1", Text = "A1" }, + new DropdownItem { Value = "A2", Text = "A2" }, + new DropdownItem { Value = "A3", Text = "A3" }, + new DropdownItem { Value = "A4", Text = "A4" }, + new DropdownItem { Value = "A5", Text = "A5" }, + new DropdownItem { Value = "A6", Text = "A6" }, + new DropdownItem { Value = "A7", Text = "A7" }, + new DropdownItem { Value = "A8", Text = "A8" }, + new DropdownItem { Value = "A9", Text = "A9" }, + new DropdownItem { Value = "B0", Text = "B0" }, + new DropdownItem { Value = "B1", Text = "B1" }, + new DropdownItem { Value = "B2", Text = "B2" }, + new DropdownItem { Value = "B3", Text = "B3" }, + new DropdownItem { Value = "B4", Text = "B4" }, + new DropdownItem { Value = "B5", Text = "B5" }, + new DropdownItem { Value = "Archa", Text = "Archa" }, + new DropdownItem { Value = "Archb", Text = "Archb" }, + new DropdownItem { Value = "Archc", Text = "Archc" }, + new DropdownItem { Value = "Archd", Text = "Archd" }, + new DropdownItem { Value = "Arche", Text = "Arche" }, + new DropdownItem { Value = "Flsa", Text = "Flsa" }, + new DropdownItem { Value = "HalfLetter", Text = "HalfLetter" }, + new DropdownItem { Value = "Letter11x17", Text = "Letter11x17" }, + new DropdownItem { Value = "Ledger", Text = "Ledger" } + }; + + public List ExportTypeOptions { get; set; } = new List + { + new DropdownItem { Value = "AllPages", Text = "All Pages" }, + new DropdownItem { Value = "CurrentPage", Text = "Current Page" } + }; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + + private void OnOrientationChange(ChangeEventArgs args) + { + Orientation = (PageOrientation)Enum.Parse(typeof(PageOrientation), args.Value); + } + + private void OnPageSizeChange(ChangeEventArgs args) + { + PageSize = (PdfPageSize)Enum.Parse(typeof(PdfPageSize), args.Value); + } + + private void OnExportTypeChange(ChangeEventArgs args) + { + ExportType = (ExportType)Enum.Parse(typeof(ExportType), args.Value); + } + + private async Task ToolbarClickHandler(ClickEventArgs args) + { + if (args.Item.Text == "PDF Export") + { + PdfExportProperties ExportProperties = new PdfExportProperties(); + ExportProperties.FileName = FileName; + ExportProperties.PageOrientation = Orientation; + ExportProperties.PageSize = PageSize; + ExportProperties.ExportType = ExportType; + ExportProperties.IncludeHiddenColumn = IncludeHiddenColumn; + ExportProperties.AllowHorizontalOverflow = AllowHorizontalOverflow; + ExportProperties.DisableAutoFitWidth = DisableAutoFitWidth; + + if (ApplyCustomTheme) + { + PdfTheme theme = new PdfTheme(); + PdfThemeStyle recordFontStyle = new PdfThemeStyle() + { + FontColor = "#64FA50", + FontName = "Calibri", + FontSize = 10 + }; + theme.Record = recordFontStyle; + // Add similar for Header and Caption if needed + ExportProperties.Theme = theme; + } + + + await this.TreeGrid.ExportToPdfAsync(ExportProperties); + } + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterBarComponent.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterBarComponent.razor new file mode 100644 index 00000000..cc2e7969 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterBarComponent.razor @@ -0,0 +1,85 @@ +@page "/FilterBarComponent" +@rendermode InteractiveServer + +@using Syncfusion.Blazor; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; +@using Syncfusion.Blazor.DropDowns; + + + + + + + + + + + + + + + + + + +@code{ + + SfTreeGrid TreeGrid; + + public List DropDownData { get; set; } = new List(); + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = BusinessObject.GetSelfDataSource().ToList(); + + this.DropDownData.Add("10"); + this.DropDownData.Add("50"); + this.DropDownData.Add("5"); + this.DropDownData.Add("6"); + this.DropDownData.Add("4"); + this.DropDownData.Add("All"); + } + + public void change(Syncfusion.Blazor.DropDowns.ChangeEventArgs Args) + { + if (Args.Value == "All") + { + List Data = new List(); + Data.Add("Duration"); + TreeGrid.ClearFilteringAsync(Data); + } + else + { + TreeGrid.FilterByColumnAsync("Duration", "equal", Args.Value); + } + } + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterEnumColumn.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterEnumColumn.razor new file mode 100644 index 00000000..043dc392 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterEnumColumn.razor @@ -0,0 +1,139 @@ +@page "/FilterEnumColumn" +@rendermode InteractiveServer + + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.DropDowns +
+
+
+ + + + + + + + + + + + + + + + +
+
+
+ +@code { + public SfTreeGrid TreeGrid; + private List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = SelfReferenceData.GetTree().Take(50).ToList(); + } + public enum Prioritize : short + { + High = 1, + Low = 2, + Critical = 3 + } + public class Data + { + public string Priority { get; set; } + } + List FilterDropData = new List + { + new Data() { Priority= "All" }, + new Data() { Priority= "High" }, + new Data() { Priority= "Low" }, + new Data() { Priority= "Critical" } + }; + public async Task Change(ChangeEventArgs args) + { + if (args.Value == "All") + { + await this.TreeGrid.ClearFilteringAsync(); + } + else + { + await this.TreeGrid.FilterByColumnAsync("Priority", "contains", args.Value); + } + } + + + public class SelfReferenceData + { + public static List tree = new List(); + public int? TaskID { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public String Progress { get; set; } + public Prioritize Priority { get; set; } + public double? Duration { get; set; } + public int? ParentID { get; set; } + public bool? IsParent { get; set; } + public int? ParentItem { get; set; } + public SelfReferenceData() { } + public static List GetTree() + { + tree.Clear(); + int root = -1; + int TaskNameID = 0; + int ChildCount = -1; + int SubTaskCount = -1; + var values = Enum.GetValues(typeof(Prioritize)); + for (var t = 1; t <= 60; t++) + { + + DateTime start = new DateTime(2021, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start; + DateTime end = new DateTime(2023, 08, 25); + int endrange = (end - DateTime.Today).Days; + DateTime endingDate = end; + string progr = "In Progress"; + bool appr = true; + root++; TaskNameID++; + int rootItem = root + 1; + tree.Add(new SelfReferenceData() { TaskID = rootItem, TaskName = "Parent task " + TaskNameID.ToString(), StartDate = startingDate, EndDate = endingDate, IsParent = true, ParentID = null, Progress = progr, Priority = (Prioritize)(values.GetValue((values.Length-1))), Duration = 50 }); + int parent = tree.Count; + for (var c = 0; c < 2; c++) + { + DateTime start1 = new DateTime(2021, 07, 09); + int range1 = (DateTime.Today - start1).Days; + DateTime startingDate1 = start1; + DateTime end1 = new DateTime(2022, 08, 23); + int endrange1 = (end1 - DateTime.Today).Days; + DateTime endingDate1 = end1; + root++; ChildCount++; + int parn = parent + c + 1; + progr = "Validated"; + appr = true; + int iD = root + 1; + tree.Add(new SelfReferenceData() { TaskID = iD, TaskName = "Child task " + (ChildCount + 1).ToString(), StartDate = startingDate1, EndDate = endingDate1, IsParent = (((parent + c + 1) % 3) == 0), ParentID = rootItem, Progress = progr, Priority = (Prioritize)(values.GetValue((values.Length-1))), Duration = 50 }); + if ((((parent + c + 1) % 3) == 0)) + { + int immParent = tree.Count; + for (var s = 0; s < 3; s++) + { + DateTime start2 = new DateTime(2021, 05, 05); + int range2 = (DateTime.Today - start2).Days; + DateTime startingDate2 = start2; + DateTime end2 = new DateTime(2024, 06, 16); + int endrange2 = (end2 - DateTime.Today).Days; + DateTime endingDate2 = end2; + root++; SubTaskCount++; + tree.Add(new SelfReferenceData() { TaskID = root + 1, TaskName = "Sub task " + (SubTaskCount + 1).ToString(), StartDate = startingDate2, EndDate = endingDate2, IsParent = false, ParentID = iD, Progress = (immParent % 2 == 0) ? "In Progress" : "Closed", Priority = (Prioritize)(values.GetValue((values.Length-1))), Duration = 50 }); + } + } + } + } + return tree; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterItemTemplate.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterItemTemplate.razor new file mode 100644 index 00000000..27070535 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilterItemTemplate.razor @@ -0,0 +1,63 @@ +@page "/FilterItemTemplate" + +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.Data; + + + + + + + + @{ + var filterContext = (context as FilterItemTemplateContext); + var itemTemplateValue = "Textof(" + filterContext.Value + ")"; + } + @itemTemplateValue + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = BusinessObject.GetSelfDataSource().ToList(); + } + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilteringDynamic.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilteringDynamic.razor new file mode 100644 index 00000000..08182d9a --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Filtering/FilteringDynamic.razor @@ -0,0 +1,722 @@ +@page "/TreeGrid/filtering" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.Grids + +
+ + +
+ +Get Filtered Data Count +Clear + +
+ @message +
+ +
+
+ @if (isNormalTreeGrid) + { + + + + + + + + + + + + + + + + + + @if (showRecords == true) + { +
+

Total Filtered Records Count: @FilterData.Count

+
+ } + +

Methods

+
+ + + + +
+

Filter By Column

+
+
+
Field name
+ + + +
+
+
Field operator
+ + +
+
+
Filter value
+ +
+
+
Match case
+ +
+
+
Predicate
+ +
+
Filter choice Count
+ + +
+ Apply Filter + Clear Filtering + Clear Filtering Strictly + Get Filtering Strictly +
+
+
+
+ } + @if (isComplexTreeGrid) + { + + + + + + + + + + + + + + + + + + @if (showRecords == true) + { +
+

Total Filtered Records Count: @FilterData.Count

+
+ } + +

Methods

+
+ + + + +
+
+

Filter By Column

+
+
Field name
+ + + +
+
+
Field operator
+ + +
+
+
Filter value
+ +
+
+
Match case
+ +
+
+
Predicate
+ +
+
Filter choice Count
+ + +
+ Apply Filter + Clear Filtering + Clear Filtering Strictly + Get Filtering Strictly +
+
+
+
+ } +
+ +
+

Filtering choice

+
+
+ + + + +
+ Apply Changes +
+ +
+

Properties

+
+ + +
+
+ + +
+
+ +

Event

+ + + + + + + +
+
+ +
+ @foreach (var log in EventLogs) + { +
@((MarkupString)log)
+ } +
+
+
+
+ Clear +
+
+
+
+ + + +@code { + public List TreeGridData { get; set; } + SfTreeGrid? TreeGrid { get; set; } + public bool allowFiltering { get; set; } = true; + private Dictionary TempSettings = new(); + public List FilterData { get; set; } + public string message; + private SfTreeView TreeView; + public bool showRecords = false; + public bool flag = false; + public string FilterValue { get; set; } + public bool IsMatchCaseEnabled { get; set; } + public string FilterValue1 { get; set; } + public bool IsMatchCaseEnabled1 { get; set; } + public bool enableCaseSensitive = false; + public bool ignoreAccent = false; + private Syncfusion.Blazor.TreeGrid.FilterType treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + + List Data = new List(); + + private bool isComplexTreeGrid = false; + private bool isNormalTreeGrid = true; + + private void Change(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + isComplexTreeGrid = args.Checked; + isNormalTreeGrid = !args.Checked; + StateHasChanged(); + } + + private void ChangeCaseSensitive(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + enableCaseSensitive = args.Checked; + StateHasChanged(); + } + + private void ChangeAccent(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + ignoreAccent = args.Checked; + StateHasChanged(); + } + + public class GridProperties + { + public string Id { get; set; } + public string ParentId { get; set; } + public string Name { get; set; } + public bool Expanded { get; set; } + public bool? IsChecked { get; set; } + public bool HasChild { get; set; } + } + + protected override void OnInitialized() + { + TreeGridData = OrderData.GetAllRecords(); + + base.OnInitialized(); + + Data.Add(new GridProperties + { + Id = "Filter", + Name = "Allow Filtering", + HasChild = true, + Expanded = true, + IsChecked = true + }); + Data.Add(new GridProperties + { + Id = "FilterType", + Name = "Filter Type", + ParentId = "Filter", + HasChild = true, + Expanded = true, + IsChecked = true + }); + Data.Add(new GridProperties + { + Id = "Menu", + ParentId = "FilterType", + Name = "Menu", + IsChecked = true + }); + Data.Add(new GridProperties + { + Id = "Excel", + ParentId = "FilterType", + Name = "Excel" + }); + } + + public void NodeChecking(NodeCheckEventArgs args) + { + if (args.IsInteracted) + { + if (args.Action == "uncheck" && args.NodeData.Text == "Filter Type") + { + args.Cancel = true; + return; + } + TempSettings[args.NodeData.Id] = args.Action == "check"; + + switch (args.NodeData.Id) + { + case "Filter": + if (args.Action == "uncheck") + { + TreeView.UncheckAllAsync(new string[] { "FilterType", "Menu", "Excel" }); + } + else + { + TreeView.CheckAllAsync(new string[] { "FilterType", "Menu" }); + } + break; + case "Menu": + if (args.Action == "check") + { + TreeView.CheckAllAsync(new string[] { "Filter", "FilterType" }); + TreeView.UncheckAllAsync(new string[] { "Excel" }); + } + else + { + args.Cancel = true; + } + break; + case "Excel": + if (args.Action == "check") + { + TreeView.CheckAllAsync(new string[] { "Filter", "FilterType" }); + TreeView.UncheckAllAsync(new string[] { "Menu" }); + } + else + { + TreeView.CheckAllAsync(new string[] { "Menu" }); + } + break; + } + } + } + + public class OrderData + { + public static List Orders = new List(); + public OrderData() { } + + public OrderData(int? OrderID, int? ParentOrderID, string CustomerID, string ShipCity, DateTime? OrderDate, double? Freight, DateOnly? date, TimeOnly? timeOnly, DateTimeOffset? dateTimeOffset, long? orderNumber, bool Verified, EmployeeData employeeData) + { + this.OrderID = OrderID; + this.ParentOrderID = ParentOrderID; + this.CustomerID = CustomerID; + this.ShipCity = ShipCity; + this.OrderDate = OrderDate; + this.Freight = Freight; + this.DateOnly = date; + this.TimeOnly = timeOnly; + this.DateTimeOffset = dateTimeOffset; + this.OrderNumber = orderNumber; + this.Verified = Verified; + this.Employee = employeeData; + } + + public static List GetAllRecords() + { + if (Orders.Count() == 0) + { + int OrderID = 10248; + + for (int i = 1; i < 10; i++) + { + // Parent records + Orders.Add(new OrderData(OrderID + 1, null, "VINET", "VÍCTÉ", new DateTime(2025, 07, 04), 32.38, new DateOnly(2025, 8, 1), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 1, 9, 0, 0, TimeSpan.FromHours(5.5)), 2345, true, new EmployeeData("ANTON", 1987, new DateOnly(2025, 8, 1), "Münster", new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 1, 9, 0, 0, TimeSpan.FromHours(5.5)), 2345))); + // Child records + Orders.Add(new OrderData(OrderID + 2, OrderID + 1, "TOMSP", "Lyon", new DateTime(2025, 07, 05), 11.61, new DateOnly(2025, 8, 2), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 2, 9, 0, 0, TimeSpan.FromHours(5.5)), 345, false, new EmployeeData("BOLID", 234, null, "Charleroi", new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 2, 9, 0, 0, TimeSpan.FromHours(5.5)), 345))); + Orders.Add(new OrderData(OrderID + 3, OrderID + 1, "HANAR", "Münster", new DateTime(2025, 07, 06), 65.83, new DateOnly(2025, 8, 3), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 3, 9, 0, 0, TimeSpan.FromHours(5.5)), 2345, true, new EmployeeData("TOMPS", 1234, new DateOnly(2025, 8, 3), "Rio de Janeiro", new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 3, 9, 0, 0, TimeSpan.FromHours(5.5)), null))); + Orders.Add(new OrderData(OrderID + 4, OrderID + 2, "VICTE", "Đặng Minh", new DateTime(2025, 07, 07), 45.78, new DateOnly(2025, 8, 4), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 4, 9, 0, 0, TimeSpan.FromHours(5.5)), 876, true, new EmployeeData("", null, new DateOnly(2025, 8, 4), null, null, new DateTimeOffset(2025, 8, 5, 9, 0, 0, TimeSpan.FromHours(5.5)), 256))); + Orders.Add(new OrderData(OrderID + 5, OrderID + 2, "SUPRD", "Rio de Janeiro", new DateTime(2025, 07, 08), 98.6, new DateOnly(2025, 8, 5), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 5, 9, 0, 0, TimeSpan.FromHours(5.5)), 2329, false, new EmployeeData("WELLI", 234, new DateOnly(2025, 8, 5), "", null, null, 302))); + OrderID += 100; + } + } + return Orders; + } + + public int? OrderID { get; set; } + public int? ParentOrderID { get; set; } + public string CustomerID { get; set; } + public string ShipCity { get; set; } + public DateTime? OrderDate { get; set; } + public double? Freight { get; set; } + public DateOnly? DateOnly { get; set; } + public TimeOnly? TimeOnly { get; set; } + public DateTimeOffset? DateTimeOffset { get; set; } + public long? OrderNumber { get; set; } + public bool? Verified { get; set; } + public EmployeeData Employee { get; set; } + } + + public class EmployeeData + { + public EmployeeData(string firstName, double? rollNumber, DateOnly? date, string ShipCity, TimeOnly? timeOnly, DateTimeOffset? dateTimeOffset, long? OrderIdentity) + { + this.FirstName = firstName; + this.RollNumber = rollNumber; + this.DateOnly = date; + this.TimeOnly = timeOnly; + this.DateTimeOffset = dateTimeOffset; + this.OrderIdentity = OrderIdentity; + this.ShipCity = ShipCity; + } + public string FirstName { get; set; } + public double? RollNumber { get; set; } + public DateOnly? DateOnly { get; set; } + public TimeOnly? TimeOnly { get; set; } + public DateTimeOffset? DateTimeOffset { get; set; } + public long? OrderIdentity { get; set; } + public string ShipCity { get; set; } + } + + List FilterChoiceCount = new List() { 5, 10, 15 }; + public int MyItem { get; set; } + public bool EnableOperatorDropdown = false; + public List FilteredOperators = new List(); + public bool EnableOperatorDropdownComplex = false; + public List FilteredOperatorsComplex = new List(); + + public void OnFieldNameChange(ChangeEventArgs args) + { + Names = args.Value; + EnableOperatorDropdown = !string.IsNullOrEmpty(Names); + + if (Names == "OrderID" || Names == "Freight" || Names == "OrderDate" || Names == "DateOnly" || Names == "TimeOnly" || Names == "DateTimeOffset" || Names == "OrderNumber") + { + FilteredOperators = new List() { "equal", "notequal", "greaterthan", "lessthan", "greaterthanorequal", "lessthanorequal", "isnull", "isnotnull" }; + } + else + { + FilteredOperators = new List() { "startswith", "endswith", "contains", "doesnotstartwith", "doesnotendwith", "doesnotcontain", "equal", "notequal", "isempty", "isnotempty", "like" }; + } + + Operators = null; + } + + List FilterColumnName = new List() { "OrderID", "CustomerID", "ShipCity", "OrderDate", "Freight", "DateOnly", "TimeOnly", "DateTimeOffset", "OrderNumber", "Verified" }; + public string Names { get; set; } + public string Operators { get; set; } + + List FilterColumnName1 = new List() { "OrderID", "CustomerID", "ShipCity", "Freight", "Employee.DateOnly", "Employee.RollNumber", "Employee.FirstName", "Employee.TimeOnly", "Employee.DateTimeOffset", "Employee.OrderIdentity" }; + public string Names1 { get; set; } + public string Operators1 { get; set; } + + public void OnFieldNameChangeComplex(ChangeEventArgs args) + { + Names1 = args.Value; + EnableOperatorDropdownComplex = !string.IsNullOrEmpty(Names1); + + if (Names1 == "OrderID" || Names1 == "Freight" || Names1 == "Employee.DateOnly" || Names1 == "Employee.RollNumber") + { + FilteredOperatorsComplex = new List() { "equal", "notequal", "greaterthan", "lessthan", "greaterthanorequal", "lessthanorequal", "isnull", "isnotnull" }; + } + else + { + FilteredOperatorsComplex = new List() { "startswith", "endswith", "contains", "doesnotstartwith", "doesnotendwith", "doesnotcontain", "equal", "notequal", "isempty", "isnotempty", "like" }; + } + + Operators1 = null; + } + + List FilterPredicateValue = new List() { "AND", "OR" }; + public string Predicate { get; set; } + + private List EventLogs = new(); + + private void AppendEventLog(string message) + { + EventLogs.Insert(0, message); + } + + private void ClearEventLogs() + { + EventLogs.Clear(); + } + + private void FilterDialogOpeningHandler(FilterDialogOpeningEventArgs args) + { + if (TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Excel || TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Menu) + { + AppendEventLog("TreeGrid FilterDialogOpeningEventArgs event called
"); + } + if (TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Excel) + { + args.FilterChoiceCount = MyItem; + } + } + + private void FilterDialogOpenedHandler(FilterDialogOpenedEventArgs args) + { + if (TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Excel || TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Menu) + { + AppendEventLog($"TreeGrid FilterDialogOpenedEventArgs event called and {args.ColumnName} filter popup opened
"); + } + } + + private void FilteringHandler(Syncfusion.Blazor.Grids.FilteringEventArgs args) + { + if (args.ColumnName == "OrderID") + { + args.Cancel = true; + AppendEventLog("The Filtering event has been triggered and the filtering action is cancelled for " + args.ColumnName); + } + if (args.FilterPredicates != null) + { + flag = true; + } + else + { + flag = false; + } + } + + private void FilteredHandler(FilteredEventArgs args) + { + if (args.FilterPredicates != null) + { + AppendEventLog("The FilteredEventArgs event has been triggered and the filtering action for the " + args.ColumnName + " column has been successfully executed"); + } + else + { + message = " "; + } + } + + public async Task click() + { + if (flag == true) + { + var filteredRecords = TreeGrid?.GetFilteredRecordsAsync(); + FilterData = (List)filteredRecords.Result; + showRecords = true; + message = ""; + } + else + { + showRecords = false; + message = "No Records is filtered "; + } + } + + public async Task clear() + { + await TreeGrid?.ClearFilteringAsync(); + showRecords = false; + } + + private async Task ApplyChanges() + { + foreach (var setting in TempSettings) + { + switch (setting.Key) + { + case "Filter": + allowFiltering = setting.Value ?? false; + break; + case "Menu": + if (setting.Value == true) + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + allowFiltering = true; + } + else + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + } + break; + case "Excel": + if (setting.Value == true) + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Excel; + allowFiltering = true; + } + else + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + } + break; + } + } + TempSettings.Clear(); + await TreeGrid?.RefreshAsync(); + } + + private async Task ApplyTreeGridActions(string action) + { + if (TreeGrid == null) return; + + switch (action) + { + case "filterColumn": + if (FilterColumnName != null && FilterColumnName.Count > 0 && !string.IsNullOrEmpty(FilterValue)) + { + await TreeGrid.FilterByColumnAsync(Names, Operators, FilterValue, Predicate, IsMatchCaseEnabled); + } + break; + case "clearFilter": + await TreeGrid.ClearFilteringAsync(); + break; + case "clearFilterStrictly": + await TreeGrid.ClearFilteringAsync(new List { "Freight" }); + message = "Only Freight column will be cleared once completed filtering for freight column"; + break; + case "strictFiltering": + var data = TreeGrid?.GetFilteredRecordsAsync(true); + FilterData = (List)data.Result; + if (FilterData.Count == 0) + { + message = "The filtered records " + FilterData.Count; + } + else + { + message = "The filtered records " + FilterData.Count; + } + break; + } + } + + private async Task ApplyTreeGridActionsComplex(string action) + { + if (TreeGrid == null) return; + + switch (action) + { + case "filterColumn1": + if (FilterColumnName1 != null && FilterColumnName1.Count > 0 && !string.IsNullOrEmpty(FilterValue1)) + { + await TreeGrid.FilterByColumnAsync(Names1, Operators1, FilterValue1, Predicate, IsMatchCaseEnabled1); + } + break; + case "clearFilter": + await TreeGrid.ClearFilteringAsync(); + break; + case "clearFilterStrictly": + await TreeGrid.ClearFilteringAsync(new List { "Freight" }); + message = "Only Freight column will be cleared once completed filtering for freight column"; + break; + case "strictFiltering": + var data = TreeGrid?.GetFilteredRecordsAsync(true); + FilterData = (List)data.Result; + if (FilterData.Count == 0) + { + message = "The filtered records " + FilterData.Count; + } + else + { + message = "The filtered records " + FilterData.Count; + } + break; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Page_Size_Mode.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Page_Size_Mode.razor new file mode 100644 index 00000000..964b54a5 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Page_Size_Mode.razor @@ -0,0 +1,52 @@ +

Page_Size_Mode

+@page "/Page_Size_Mode" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Pager_Template.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Pager_Template.razor new file mode 100644 index 00000000..bde99044 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Pager_Template.razor @@ -0,0 +1,59 @@ +

Pager_Template

+@page "/Pager_Template" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.Navigations +@using System.ComponentModel.DataAnnotations +@using TreeGridUGSample.Components.Data; + + + + + + + + + + + + + + + +@code { + private List TreeData { get; set; } + SfTreeGrid TreeGrid; + public int pageSize { get; set; } = 3; + public int totalPages => (int)Math.Ceiling((double)TreeData.Count / (pageSize * 6)); + + protected override void OnInitialized() + { + TreeData = SelfReferenceData.GetTree().Take(90).ToList(); + } + + + private async Task CalculatePageSize(Syncfusion.Blazor.Inputs.ChangeEventArgs args) + { + await TreeGrid.GoToPageAsync(args.Value); + } +} diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Pager_with_DropDown.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Pager_with_DropDown.razor new file mode 100644 index 00000000..3966d05b --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Paging/Pager_with_DropDown.razor @@ -0,0 +1,51 @@ +

Pager_with_DropDown

+@page "/Pager_with_DropDown" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Persistence.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Persistence.razor new file mode 100644 index 00000000..6a87ffdb --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Persistence.razor @@ -0,0 +1,216 @@ +@page "/treegrid/persistence" +@rendermode InteractiveServer +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Navigations +@using TreeGridUGSample.Components.Data + +
+
+
+ + + + + + + + + + + + + +
+
+
+@code { + public SfTreeGrid TreeGridInstance { get; set; } = null!; +#pragma warning disable BL0005 // Component parameter should not be set outside of its component. + private List ToolbarItems = new List + { + "ColumnChooser", + new ToolbarItem() { Text = "Save state", TooltipText = "Save state", PrefixIcon= "e-savestate" }, + new ToolbarItem() { Text = "Load state", TooltipText = "Load state", PrefixIcon= "e-setstate" }, + new ToolbarItem() { Text = "Reset state", TooltipText = "Reset state", PrefixIcon= "e-resetstate" }, + }; +#pragma warning restore BL0005 // Component parameter should not be set outside of its component. + private List TreeData { get; set; } = new List(); + public string SavedPersistence { get; set; } = String.Empty; + public async Task ToolBarClick(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Text == "Save state") + { + SavedPersistence = await this.TreeGridInstance.GetPersistDataAsync(); + } + if (args.Item.Text == "Reset state") + { + await TreeGridInstance.ResetPersistDataAsync(); + } + if (args.Item.Text == "Load state") + { + await TreeGridInstance.SetPersistDataAsync(SavedPersistence); + } + } + protected override void OnInitialized() + { + TreeData = WrapData.GetWrapData().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Print.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Print.razor new file mode 100644 index 00000000..5d3b482a --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Print.razor @@ -0,0 +1,70 @@ +@page "/treegrid/print" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.Grids + + +
+ + +
+ + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeGridData { get; set; } + public Syncfusion.Blazor.Grids.PrintMode printMode { get; set; } = Syncfusion.Blazor.Grids.PrintMode.AllPages; + public bool printModeChange { get; set; } = false; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + private void Change(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + printModeChange = args.Checked; + StateHasChanged(); + } + public void ToolbarClickHandler(ClickEventArgs args) + { + if(args.Item.Text == "Print") + { + if (printModeChange) + { + printMode = Syncfusion.Blazor.Grids.PrintMode.CurrentPage; + } + else + { + printMode = Syncfusion.Blazor.Grids.PrintMode.AllPages; + } + TreeGrid.PrintAsync(); + } + } + private void onClick() + { + if (printModeChange) + { + printMode = Syncfusion.Blazor.Grids.PrintMode.CurrentPage; + } + else + { + printMode = Syncfusion.Blazor.Grids.PrintMode.AllPages; + } + TreeGrid.PrintAsync(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/CustomizeRows.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/CustomizeRows.razor new file mode 100644 index 00000000..898ccba2 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/CustomizeRows.razor @@ -0,0 +1,74 @@ +@page "/TreeGrid/Rows/customize_rows" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void OnRowDataBound(RowDataBoundEventArgs args) + { + if (args.Data.Duration == 5) + { + args.Row.AddClass(new string[] { "equal-5" }); + } + else if (args.Data.Duration > 6) + { + args.Row.AddClass(new string[] { "above-6" }); + } + } + + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Duration = 5, Progress = 80, Priority = "Low", ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DetailTemplate.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DetailTemplate.razor new file mode 100644 index 00000000..bca58568 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DetailTemplate.razor @@ -0,0 +1,67 @@ +@page "/TreeGrid/Rows/Detailtemplate" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper + + + + +
+ +
+
+
+ @((context as Employee).Name) was lives at @((context as Employee).Address), @((context as Employee).Country). @((context as Employee).Name) holds a position of @((context as Employee).Designation) in our WA department, (Seattle USA). +
+
+ Contact:@((context as Employee).Contact) +
+
+
+
+ + + + + + + +
+ + +@code { + public Employee model = new Employee(); + public IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } + public class Employee + { + public string Name { get; set; } + public string FullName { get; set; } + public DateTime? DOB { get; set; } + public string Designation { get; set; } + public string EmpID { get; set; } + public int? EmployeeID { get; set; } + public string Country { get; set; } + public string Address { get; set; } + public string Contact { get; set; } + public int? ParentId { get; set; } + + public int? ID { get; set; } + public static List GetTemplateData() + { + List DataCollection = new List(); + + DataCollection.Add(new Employee { Name = "Robert King", FullName = "RobertKing", Designation = "Chief Executive Officer", EmployeeID = 1, EmpID = "EMP001", Address = "507 - 20th Ave. E.Apt. 2A, Seattle", Contact = "(206) 555-9857", Country = "USA", DOB = new DateTime(1963, 2, 15), ParentId = null }); + DataCollection.Add(new Employee { Name = "David william", FullName = "DavidWilliam", Designation = "Vice President", EmployeeID = 2, EmpID = "EMP004", Address = "722 Moss Bay Blvd., Kirkland", Contact = "(206) 555-3412", Country = "USA", DOB = new DateTime(1971, 5, 20), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Nancy Davolio", FullName = "NancyDavolio", Designation = "Marketing Executive", EmployeeID = 3, EmpID = "EMP035", Address = "4110 Old Redmond Rd., Redmond", Contact = "(206) 555-8122", Country = "USA", DOB = new DateTime(1966, 3, 19), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Andrew Fuller", FullName = "AndrewFuller", Designation = "Sales Representative", EmployeeID = 4, EmpID = "EMP045", Country = "UK", DOB = new DateTime(1980, 9, 20), ParentId = 1 }); + return DataCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DragandDropAnothergrid.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DragandDropAnothergrid.razor new file mode 100644 index 00000000..cefd3fd1 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DragandDropAnothergrid.razor @@ -0,0 +1,512 @@ +@page "/treegrid/Rows/draganddropanothergrid" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +
+
+
+ + + + + + + + + +
+
+ + + + + + + + + +
+ +@code{ + public List TreeGridData { get; set; } + public List SecondGrid { get; set; } = new List(); + protected override void OnInitialized() + { + this.TreeGridData = WrapData.GetWrapData().ToList(); + } + + + public class WrapData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public int? Duration { get; set; } + public String Progress { get; set; } + public string Priority { get; set; } + public bool Approved { get; set; } + public int Resources { get; set; } + public int? ParentId { get; set; } + public static List GetWrapData() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 1, + TaskName = "Planning", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 07, 03), + Progress = "Open", + Duration = 5, + Priority = "Normal", + Resources = 6, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 2, + TaskName = "Plan timeline", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 07, 05), + Progress = "Inprogress", + Duration = 5, + Resources = 4, + Priority = "Normal", + Approved = false, + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 3, + TaskName = "Plan budget", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 07, 07), + Duration = 5, + Progress = "Started", + Approved = true, + Resources = 6, + Priority = "Low", + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 4, + TaskName = "Allocate resources", + StartDate = new DateTime(2017, 03, 08), + EndDate = new DateTime(2017, 07, 09), + Duration = 5, + Progress = "Open", + Priority = "Critical", + ParentId = 1, + Resources = 3, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 5, + TaskName = "Planning complete", + StartDate = new DateTime(2017, 07, 10), + EndDate = new DateTime(2017, 07, 11), + Duration = 1, + Progress = "Open", + Priority = "Low", + Resources = 5, + ParentId = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 6, + TaskName = "Design", + StartDate = new DateTime(2017, 10, 12), + EndDate = new DateTime(2017, 02, 13), + Progress = "Inprogress", + Duration = 3, + Priority = "High", + Resources = 4, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 7, + TaskName = "Software Specification", + StartDate = new DateTime(2017, 10, 14), + EndDate = new DateTime(2017, 02, 15), + Duration = 3, + Progress = "Started", + Resources = 3, + Priority = "Normal", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 8, + TaskName = "Develop prototype", + StartDate = new DateTime(2017, 10, 16), + EndDate = new DateTime(2017, 02, 17), + Duration = 3, + Progress = "Inprogress", + Resources = 2, + Priority = "Critical", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 9, + TaskName = "Get approval from customer", + StartDate = new DateTime(2017, 02, 18), + EndDate = new DateTime(2017, 02, 19), + Duration = 2, + Progress = "Inprogress", + Resources = 3, + Priority = "Low", + Approved = true, + ParentId = 6 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 10, + TaskName = "Design complete", + StartDate = new DateTime(2017, 02, 20), + EndDate = new DateTime(2017, 02, 21), + Duration = 1, + Progress = "Inprogress", + Resources = 6, + Priority = "Normal", + ParentId = 6, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 12, + TaskName = "Implementation Phase", + StartDate = new DateTime(2017, 02, 22), + EndDate = new DateTime(2017, 02, 23), + Priority = "Normal", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Started", + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 13, + TaskName = "Phase 1", + StartDate = new DateTime(2017, 02, 24), + EndDate = new DateTime(2017, 02, 25), + Priority = "High", + Approved = false, + Duration = 11, + Progress = "Open", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 14, + TaskName = "Implementation Module 1", + StartDate = new DateTime(2017, 02, 26), + EndDate = new DateTime(2017, 02, 27), + Priority = "Normal", + Duration = 11, + Progress = "Started", + Resources = 3, + Approved = false, + ParentId = 13 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 15, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 06, 18), + EndDate = new DateTime(2017, 06, 19), + Duration = 3, + Progress = "Inprogress", + Priority = "High", + Resources = 2, + ParentId = 14, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 16, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 02, 13), + EndDate = new DateTime(2017, 03, 01), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Resources = 5, + ParentId = 14, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 17, + TaskName = "Testing", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 03, 03), + Duration = 2, + Progress = "Closed", + Priority = "Normal", + ParentId = 14, + Resources = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 18, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 03, 05), + Duration = 2, + Progress = "Validated", + Priority = "Critical", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 19, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 03, 07), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 20, + TaskName = "Phase 1 complete", + StartDate = new DateTime(2017, 04, 27), + EndDate = new DateTime(2017, 07, 27), + Duration = 2, + Progress = "Closed", + Priority = "Low", + ParentId = 14, + Resources = 5, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 21, + TaskName = "Phase 2", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 09, 28), + Priority = "High", + Approved = false, + Progress = "Open", + ParentId = 12, + Resources = 3, + Duration = 12, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 22, + TaskName = "Implementation Module 2", + StartDate = new DateTime(2017, 01, 17), + EndDate = new DateTime(2017, 02, 28), + Priority = "Critical", + Approved = false, + Progress = "Inprogress", + ParentId = 21, + Resources = 3, + Duration = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 23, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 20), + Duration = 4, + Progress = "Closed", + Priority = "Normal", + ParentId = 22, + Resources = 2, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 24, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 04, 17), + EndDate = new DateTime(2017, 03, 20), + Duration = 4, + Progress = "Closed", + Priority = "Critical", + ParentId = 22, + Resources = 5, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 25, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 21), + EndDate = new DateTime(2017, 01, 24), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 26, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 25), + EndDate = new DateTime(2017, 08, 26), + Duration = 2, + Progress = "Validated", + Priority = "Low", + Approved = false, + Resources = 6, + ParentId = 22 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 27, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 07, 27), + EndDate = new DateTime(2017, 06, 28), + Duration = 2, + Progress = "Inprogress", + Priority = "Critical", + ParentId = 22, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 28, + TaskName = "Phase 2 complete", + StartDate = new DateTime(2017, 07, 19), + EndDate = new DateTime(2017, 05, 28), + Duration = 2, + Priority = "Normal", + Progress = "Open", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 29, + TaskName = "Phase 3", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 02, 12), + Priority = "Normal", + Approved = false, + Duration = 11, + Progress = "Inprogress", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 30, + TaskName = "Implementation Module 3", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 27), + Priority = "High", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Validated", + ParentId = 29, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 31, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 11, 17), + EndDate = new DateTime(2017, 12, 19), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Approved = true, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 32, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 12, 17), + EndDate = new DateTime(2017, 02, 19), + Duration = 3, + Progress = "Closed", + Priority = "Normal", + Approved = false, + Resources = 2, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 33, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 01), + EndDate = new DateTime(2017, 07, 21), + Duration = 2, + Progress = "Closed", + Priority = "Critical", + ParentId = 30, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 34, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 01, 24), + EndDate = new DateTime(2017, 01, 25), + Duration = 2, + Progress = "Open", + Priority = "High", + Approved = false, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 35, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 12, 26), + EndDate = new DateTime(2017, 12, 27), + Duration = 2, + Progress = "Inprogress", + Priority = "Normal", + ParentId = 30, + Resources = 6, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 36, + TaskName = "Phase 3 complete", + StartDate = new DateTime(2017, 05, 27), + EndDate = new DateTime(2017, 05, 27), + Duration = 2, + Priority = "Critical", + Progress = "Open", + Resources = 5, + ParentId = 30, + Approved = false, + }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DragandDropWithinTreegrid.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DragandDropWithinTreegrid.razor new file mode 100644 index 00000000..e0c9ff6a --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/DragandDropWithinTreegrid.razor @@ -0,0 +1,500 @@ +@page "/TreeGrid/Rows/draganddropwithintreegrid" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + TreeGridData = WrapData.GetWrapData(); + } + + public class WrapData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public int? Duration { get; set; } + public String Progress { get; set; } + public string Priority { get; set; } + public bool Approved { get; set; } + public int Resources { get; set; } + public int? ParentId { get; set; } + public static List GetWrapData() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 1, + TaskName = "Planning", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 07, 03), + Progress = "Open", + Duration = 5, + Priority = "Normal", + Resources = 6, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 2, + TaskName = "Plan timeline", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 07, 05), + Progress = "Inprogress", + Duration = 5, + Resources = 4, + Priority = "Normal", + Approved = false, + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 3, + TaskName = "Plan budget", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 07, 07), + Duration = 5, + Progress = "Started", + Approved = true, + Resources = 6, + Priority = "Low", + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 4, + TaskName = "Allocate resources", + StartDate = new DateTime(2017, 03, 08), + EndDate = new DateTime(2017, 07, 09), + Duration = 5, + Progress = "Open", + Priority = "Critical", + ParentId = 1, + Resources = 3, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 5, + TaskName = "Planning complete", + StartDate = new DateTime(2017, 07, 10), + EndDate = new DateTime(2017, 07, 11), + Duration = 1, + Progress = "Open", + Priority = "Low", + Resources = 5, + ParentId = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 6, + TaskName = "Design", + StartDate = new DateTime(2017, 10, 12), + EndDate = new DateTime(2017, 02, 13), + Progress = "Inprogress", + Duration = 3, + Priority = "High", + Resources = 4, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 7, + TaskName = "Software Specification", + StartDate = new DateTime(2017, 10, 14), + EndDate = new DateTime(2017, 02, 15), + Duration = 3, + Progress = "Started", + Resources = 3, + Priority = "Normal", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 8, + TaskName = "Develop prototype", + StartDate = new DateTime(2017, 10, 16), + EndDate = new DateTime(2017, 02, 17), + Duration = 3, + Progress = "Inprogress", + Resources = 2, + Priority = "Critical", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 9, + TaskName = "Get approval from customer", + StartDate = new DateTime(2017, 02, 18), + EndDate = new DateTime(2017, 02, 19), + Duration = 2, + Progress = "Inprogress", + Resources = 3, + Priority = "Low", + Approved = true, + ParentId = 6 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 10, + TaskName = "Design complete", + StartDate = new DateTime(2017, 02, 20), + EndDate = new DateTime(2017, 02, 21), + Duration = 1, + Progress = "Inprogress", + Resources = 6, + Priority = "Normal", + ParentId = 6, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 12, + TaskName = "Implementation Phase", + StartDate = new DateTime(2017, 02, 22), + EndDate = new DateTime(2017, 02, 23), + Priority = "Normal", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Started", + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 13, + TaskName = "Phase 1", + StartDate = new DateTime(2017, 02, 24), + EndDate = new DateTime(2017, 02, 25), + Priority = "High", + Approved = false, + Duration = 11, + Progress = "Open", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 14, + TaskName = "Implementation Module 1", + StartDate = new DateTime(2017, 02, 26), + EndDate = new DateTime(2017, 02, 27), + Priority = "Normal", + Duration = 11, + Progress = "Started", + Resources = 3, + Approved = false, + ParentId = 13 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 15, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 06, 18), + EndDate = new DateTime(2017, 06, 19), + Duration = 3, + Progress = "Inprogress", + Priority = "High", + Resources = 2, + ParentId = 14, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 16, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 02, 13), + EndDate = new DateTime(2017, 03, 01), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Resources = 5, + ParentId = 14, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 17, + TaskName = "Testing", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 03, 03), + Duration = 2, + Progress = "Closed", + Priority = "Normal", + ParentId = 14, + Resources = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 18, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 03, 05), + Duration = 2, + Progress = "Validated", + Priority = "Critical", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 19, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 03, 07), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 20, + TaskName = "Phase 1 complete", + StartDate = new DateTime(2017, 04, 27), + EndDate = new DateTime(2017, 07, 27), + Duration = 2, + Progress = "Closed", + Priority = "Low", + ParentId = 14, + Resources = 5, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 21, + TaskName = "Phase 2", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 09, 28), + Priority = "High", + Approved = false, + Progress = "Open", + ParentId = 12, + Resources = 3, + Duration = 12, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 22, + TaskName = "Implementation Module 2", + StartDate = new DateTime(2017, 01, 17), + EndDate = new DateTime(2017, 02, 28), + Priority = "Critical", + Approved = false, + Progress = "Inprogress", + ParentId = 21, + Resources = 3, + Duration = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 23, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 20), + Duration = 4, + Progress = "Closed", + Priority = "Normal", + ParentId = 22, + Resources = 2, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 24, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 04, 17), + EndDate = new DateTime(2017, 03, 20), + Duration = 4, + Progress = "Closed", + Priority = "Critical", + ParentId = 22, + Resources = 5, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 25, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 21), + EndDate = new DateTime(2017, 01, 24), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 26, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 25), + EndDate = new DateTime(2017, 08, 26), + Duration = 2, + Progress = "Validated", + Priority = "Low", + Approved = false, + Resources = 6, + ParentId = 22 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 27, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 07, 27), + EndDate = new DateTime(2017, 06, 28), + Duration = 2, + Progress = "Inprogress", + Priority = "Critical", + ParentId = 22, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 28, + TaskName = "Phase 2 complete", + StartDate = new DateTime(2017, 07, 19), + EndDate = new DateTime(2017, 05, 28), + Duration = 2, + Priority = "Normal", + Progress = "Open", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 29, + TaskName = "Phase 3", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 02, 12), + Priority = "Normal", + Approved = false, + Duration = 11, + Progress = "Inprogress", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 30, + TaskName = "Implementation Module 3", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 27), + Priority = "High", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Validated", + ParentId = 29, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 31, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 11, 17), + EndDate = new DateTime(2017, 12, 19), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Approved = true, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 32, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 12, 17), + EndDate = new DateTime(2017, 02, 19), + Duration = 3, + Progress = "Closed", + Priority = "Normal", + Approved = false, + Resources = 2, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 33, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 01), + EndDate = new DateTime(2017, 07, 21), + Duration = 2, + Progress = "Closed", + Priority = "Critical", + ParentId = 30, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 34, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 01, 24), + EndDate = new DateTime(2017, 01, 25), + Duration = 2, + Progress = "Open", + Priority = "High", + Approved = false, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 35, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 12, 26), + EndDate = new DateTime(2017, 12, 27), + Duration = 2, + Progress = "Inprogress", + Priority = "Normal", + ParentId = 30, + Resources = 6, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 36, + TaskName = "Phase 3 complete", + StartDate = new DateTime(2017, 05, 27), + EndDate = new DateTime(2017, 05, 27), + Duration = 2, + Priority = "Critical", + Progress = "Open", + Resources = 5, + ParentId = 30, + Approved = false, + }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/RowTemplate.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/RowTemplate.razor new file mode 100644 index 00000000..a82228a5 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/RowTemplate.razor @@ -0,0 +1,83 @@ +@page "/TreeGrid/Rows/rowtemplate" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper + + + + + + + @{ + var cntxt = context as Employee; +
@(cntxt.EmpID)
+ } +
+ + +
+ @((context as Employee).FullName) +
+ + +
+
+ @((context +
+
+
@((context as Employee).Address)
+
@((context as Employee).Country)
+
@((context as Employee).Contact)
+
+
+ + +
@((context as Employee).Designation)
+ +
+
+ + + + + + +
+ + +@code { + public Employee model = new Employee(); + public IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } + public class Employee + { + public string Name { get; set; } + public string FullName { get; set; } + public DateTime? DOB { get; set; } + public string Designation { get; set; } + public string EmpID { get; set; } + public int? EmployeeID { get; set; } + public string Country { get; set; } + public string Address { get; set; } + public string Contact { get; set; } + public int? ParentId { get; set; } + public int? ID { get; set; } + + public static List GetTemplateData() + { + List DataCollection = new List(); + + DataCollection.Add(new Employee { Name = "Robert King", FullName = "RobertKing", Designation = "Chief Executive Officer", EmployeeID = 1, EmpID = "EMP001", Address = "507 - 20th Ave. E.Apt. 2A, Seattle", Contact = "(206) 555-9857", Country = "USA", DOB = new DateTime(1963, 2, 15), ParentId = null }); + DataCollection.Add(new Employee { Name = "David william", FullName = "DavidWilliam", Designation = "Vice President", EmployeeID = 2, EmpID = "EMP004", Address = "722 Moss Bay Blvd., Kirkland", Contact = "(206) 555-3412", Country = "USA", DOB = new DateTime(1971, 5, 20), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Nancy Davolio", FullName = "NancyDavolio", Designation = "Marketing Executive", EmployeeID = 3, EmpID = "EMP035", Address = "4110 Old Redmond Rd., Redmond", Contact = "(206) 555-8122", Country = "USA", DOB = new DateTime(1966, 3, 19), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Andrew Fuller", FullName = "AndrewFuller", Designation = "Sales Representative", EmployeeID = 4, EmpID = "EMP045", Country = "UK", DOB = new DateTime(1980, 9, 20), ParentId = 1 }); + return DataCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/Rowheight.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/Rowheight.razor new file mode 100644 index 00000000..37ff8785 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/Rowheight.razor @@ -0,0 +1,48 @@ +@page "/treegrid/rows/Rowheight" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 6, Progress = 80, ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, ParentId = 5 }); + return BusinessObjectCollection; + } + } +} +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/Style_Alternate_Rows.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/Style_Alternate_Rows.razor new file mode 100644 index 00000000..5bd1e729 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Rows/Style_Alternate_Rows.razor @@ -0,0 +1,54 @@ +@page "/treegrid/rows/style-alternate-rows" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 6, Progress = 80, ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, ParentId = 5 }); + return BusinessObjectCollection; + } + } +} + + \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/FrozenRowsAndColumns.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/FrozenRowsAndColumns.razor new file mode 100644 index 00000000..23f2f38e --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/FrozenRowsAndColumns.razor @@ -0,0 +1,24 @@ +@page "/treegrid/scrolling/frozenrowsandcolumns" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/ResponsiveWithParent.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/ResponsiveWithParent.razor new file mode 100644 index 00000000..62f5fde3 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/ResponsiveWithParent.razor @@ -0,0 +1,37 @@ +@page "/treegrid/scrolling/responsivewithparent" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + +
+ + + + + + + + + +
+ +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} + + \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/ScrollProgrammatically.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/ScrollProgrammatically.razor new file mode 100644 index 00000000..8735027c --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/ScrollProgrammatically.razor @@ -0,0 +1,55 @@ +@page "/treegrid/scrolling/setprogrammatically" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +
+
+ ColumnIndex: +
+
+ + +
+
+
+
+ RowIndex: +
+
+ + +
+
+ + + + + + + + + + + + + + +@code { + public List TreeData { get; set; } + SfTreeGrid TreeGrid { get; set; } + public int ColumnIndex { get; set; } = -1; + public int RowIndex { get; set; } = -1; + public int RowHeight { get; set; } = -1; + protected override void OnInitialized() + { + this.TreeData = sampleData.GetTreeSampleData().ToList(); + } + public async Task Scroll() + { + await TreeGrid.ScrollIntoViewAsync(ColumnIndex, RowIndex, RowHeight); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/SetWiidhtAndHeight.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/SetWiidhtAndHeight.razor new file mode 100644 index 00000000..3a0a8d43 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/SetWiidhtAndHeight.razor @@ -0,0 +1,23 @@ +@page "/treegrid/scrolling/setwidthandheight" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/StickyHeader.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/StickyHeader.razor new file mode 100644 index 00000000..a67b2cef --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Scrolling/StickyHeader.razor @@ -0,0 +1,46 @@ +@page "/treegrid/scrolling/stickyheader" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Grids; + +
+ + +
+ +
+ + + + + + + + + + + + + + +
+ +@code { + public SfTreeGrid TreeGrid; + public List TreeData { get; set; } + public bool isStickyHeaderEnabled; + + protected override void OnInitialized() + { + this.TreeData = sampleData.GetTreeSampleData().ToList(); + } + + private void Change(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + isStickyHeaderEnabled = args.Checked; + TreeGrid.RefreshAsync(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Searching.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Searching.razor new file mode 100644 index 00000000..4e50b6e7 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Searching.razor @@ -0,0 +1,58 @@ +

Searching, Initial Search and by external method

+@page "/treegrid/searching" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; + + + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public BusinessObject[] TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = BusinessObject.GetSelfDataSource().ToList().Cast().ToArray(); + } + private void search() + { + this.TreeGrid.SearchAsync("Child Task 1"); + } + + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/CellSelection.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/CellSelection.razor new file mode 100644 index 00000000..931135cb --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/CellSelection.razor @@ -0,0 +1,25 @@ +@page "/treegrid/selection/cellselection" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/CheckBoxSelection.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/CheckBoxSelection.razor new file mode 100644 index 00000000..e1e359d4 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/CheckBoxSelection.razor @@ -0,0 +1,25 @@ +@page "/treegrid/selection/checkboxselection" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/DefaultSelection.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/DefaultSelection.razor new file mode 100644 index 00000000..2e8ed363 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/DefaultSelection.razor @@ -0,0 +1,24 @@ +@page "/treegrid/selection/defaultselection" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/DragSelection.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/DragSelection.razor new file mode 100644 index 00000000..51ad93bf --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/DragSelection.razor @@ -0,0 +1,28 @@ +@page "/treegrid/selection/dragselection" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + SfTreeGrid TreeGrid; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/InitialSelection.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/InitialSelection.razor new file mode 100644 index 00000000..60eaade8 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/InitialSelection.razor @@ -0,0 +1,23 @@ +@page "/treegrid/selection/initialselection" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/SelectedRowIndex.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/SelectedRowIndex.razor new file mode 100644 index 00000000..09609262 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/SelectedRowIndex.razor @@ -0,0 +1,47 @@ +@page "/treegrid/selection/selectedrowindex" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; +@using Newtonsoft.Json; +@inject IJSRuntime JsRuntime; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + SfTreeGrid TreeGrid; + + public List SelectedRowIndexes { get; set; } + + public List SelectedRecords { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + + private async void RowSelectHandler(RowSelectEventArgs args) + { + this.SelectedRowIndexes = await this.TreeGrid.GetSelectedRowIndexesAsync(); /// get the selected row indexes + + string index = JsonConvert.SerializeObject(this.SelectedRowIndexes); + JsRuntime.InvokeAsync("window.alert", index); + + this.SelectedRecords = await this.TreeGrid.GetSelectedRecordsAsync(); /// get the selected records + + string records = JsonConvert.SerializeObject(this.SelectedRecords); + JsRuntime.InvokeAsync("window.alert", records); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/ToggleSelection.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/ToggleSelection.razor new file mode 100644 index 00000000..aeea64fa --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Selection/ToggleSelection.razor @@ -0,0 +1,28 @@ +@page "/treegrid/selection/toggleselection" +@rendermode InteractiveServer + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + SfTreeGrid TreeGrid; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Sorting.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Sorting.razor new file mode 100644 index 00000000..78f57a65 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Sorting.razor @@ -0,0 +1,65 @@ +

Initial Sort, Sort and Events

+@page "/treegrid/sorting" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void SortingHandler(SortingEventArgs args) + { + //Customize code + } + + private void SortedHandler(SortedEventArgs args) + { + //Customize code + } + public class TreeData + { + + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Templates.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Templates.razor new file mode 100644 index 00000000..ebd305f8 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Templates.razor @@ -0,0 +1,37 @@ +@page "/TreeGrid/Template" +@rendermode InteractiveServer + + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids +@using TreeGridUGSample.Components.Data +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper + + + + + + + + + + + + + + +@code { + public Employee model = new Employee(); + public IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Toolbar.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Toolbar.razor new file mode 100644 index 00000000..ae6cc9d8 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Toolbar.razor @@ -0,0 +1,66 @@ +@page "/treegrid/toolbar" +@rendermode InteractiveServer + +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; +@using TreeGridUGSample.Components.Data; + +
+
Enable or Disable Toolbar Items
+
+ +
+
+ +
+
+ +@{ + var Tool = (new string[] { "Add","Edit","Delete","Update","Cancel","Search","Print","ExpandAll", "CollapseAll" }); +} + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public async void Enable() + { + await this.TreeGrid.EnableToolbarItemsAsync(new List() { "TreeGrid_gridcontrol_ExpandAll", "TreeGrid_gridcontrol_CollapseAll" }, true); + await this.TreeGrid.RefreshAsync(); + } + + public async void Disable() + { + await this.TreeGrid.EnableToolbarItemsAsync(new List() { "TreeGrid_gridcontrol_ExpandAll", "TreeGrid_gridcontrol_CollapseAll" }, false); + await this.TreeGrid.RefreshAsync(); + } + + public void ToolBarClick(Syncfusion.Blazor.Navigations.ClickEventArgs Args) + { + if (Args.Item.Text == "ExpandAll") + { + this.TreeGrid.ExpandAll(); + } + if (Args.Item.Text == "CollapseAll") + { + this.TreeGrid.CollapseAllAsync(); + } + } + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/CellPlaceholder.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/CellPlaceholder.razor new file mode 100644 index 00000000..85955bbe --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/CellPlaceholder.razor @@ -0,0 +1,29 @@ +@page "/treegrid/virtualization/cellplaceholder" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + + + +@code { + private List TreeGridData { get; set; } = new List(); + protected override void OnInitialized() + { + TreeGridData = VirtualData.GetTreeVirtualData(); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/ColumnVirtualization.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/ColumnVirtualization.razor new file mode 100644 index 00000000..03546df8 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/ColumnVirtualization.razor @@ -0,0 +1,29 @@ +@page "/treegrid/virtualization/columnvirtualization" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + + + + + +@code { + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = VirtualData.GetTreeVirtualData().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/Hierarchical.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/Hierarchical.razor new file mode 100644 index 00000000..6a5b9e77 --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/Hierarchical.razor @@ -0,0 +1,62 @@ +@page "/treegrid/virtualization/virtualhierarchydata" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + + +@code { + // Reference to Tree Grid instance. + private SfTreeGrid TreeGrid; + public VirtualHierarchyData[] TreeGridData { get; set; } + + // On component initialization, flatten the hierarchical data and bind to Tree Grid. + protected override void OnInitialized() + { + this.TreeGridData = HierarchyToFlatData(VirtualHierarchyData.GetVirtualHierarchyData(), "Children").ToArray(); + } + + // Recursive method to flatten hierarchical data into a linear list preserving display order. + public List HierarchyToFlatData(List dataSource, string childMapping, List addedData = null) + { + // If no list is passed to collect flat data, create a new one. + if (addedData == null) + { + addedData = new List(); + } + + foreach (var item in dataSource) + { + // Add the current item to the flat list. + addedData.Add(item); + + // Get the property info for the child mapping (e.g., "Children"). + var propertyInfo = item.GetType().GetProperty(childMapping); + + // Get the children using the property name. + var children = propertyInfo?.GetValue(item) as IEnumerable; + if (children != null) + { + // Recursive call to process children. + HierarchyToFlatData(children.ToList(), childMapping, addedData); + } + } + + // Return the final flat list. + return addedData; + } + + // Sample data model with recursive Children property. + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/ManagingRecords.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/ManagingRecords.razor new file mode 100644 index 00000000..7b4a827f --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/ManagingRecords.razor @@ -0,0 +1,41 @@ +@page "/treegrid/virtualization/managingrecords" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@code { + private List TreeGridData { get; set; } = new List(); + protected override void OnInitialized() + { + TreeGridData = VirtualData.GetTreeVirtualData(); + + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/RowVirtualization.razor b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/RowVirtualization.razor new file mode 100644 index 00000000..76b595ba --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/TreeGrid/Virtualization/RowVirtualization.razor @@ -0,0 +1,24 @@ +@page "/treegrid/virtualization/rowvirtualization" +@rendermode InteractiveServer +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + +@code { + public VirtualDataRow[] TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = VirtualDataRow.GetVirtualDataRow().ToArray(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/Components/Pages/Weather.razor b/TreeGrid/WebApp-Server/Components/Pages/Weather.razor new file mode 100644 index 00000000..43a1ecbe --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Pages/Weather.razor @@ -0,0 +1,64 @@ +@page "/weather" +@attribute [StreamRendering] + +Weather + +

Weather

+ +

This component demonstrates showing data.

+ +@if (forecasts == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@code { + private WeatherForecast[]? forecasts; + + protected override async Task OnInitializedAsync() + { + // Simulate asynchronous loading to demonstrate streaming rendering + await Task.Delay(500); + + var startDate = DateOnly.FromDateTime(DateTime.Now); + var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; + forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = summaries[Random.Shared.Next(summaries.Length)] + }).ToArray(); + } + + private class WeatherForecast + { + public DateOnly Date { get; set; } + public int TemperatureC { get; set; } + public string? Summary { get; set; } + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + } +} diff --git a/TreeGrid/WebApp-Server/Components/Routes.razor b/TreeGrid/WebApp-Server/Components/Routes.razor new file mode 100644 index 00000000..f756e19d --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/TreeGrid/WebApp-Server/Components/_Imports.razor b/TreeGrid/WebApp-Server/Components/_Imports.razor new file mode 100644 index 00000000..8f7ade9c --- /dev/null +++ b/TreeGrid/WebApp-Server/Components/_Imports.razor @@ -0,0 +1,12 @@ +@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 TreeGridUGSample +@using TreeGridUGSample.Components +@using Syncfusion.Blazor +@using Syncfusion.Blazor.TreeGrid diff --git a/TreeGrid/WebApp-Server/Program.cs b/TreeGrid/WebApp-Server/Program.cs new file mode 100644 index 00000000..60fcbc26 --- /dev/null +++ b/TreeGrid/WebApp-Server/Program.cs @@ -0,0 +1,30 @@ +using TreeGridUGSample.Components; +using Syncfusion.Blazor; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddRazorComponents() + .AddInteractiveServerComponents().AddCircuitOptions(options => options.DetailedErrors = true); ; +builder.Services.AddSyncfusionBlazor(); + + +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/TreeGrid/WebApp-Server/Properties/launchSettings.json b/TreeGrid/WebApp-Server/Properties/launchSettings.json new file mode 100644 index 00000000..82686384 --- /dev/null +++ b/TreeGrid/WebApp-Server/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:9065", + "sslPort": 44352 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5289", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7004;http://localhost:5289", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } + } diff --git a/TreeGrid/WebApp-Server/TreeGridUGSample.csproj b/TreeGrid/WebApp-Server/TreeGridUGSample.csproj new file mode 100644 index 00000000..ff487e96 --- /dev/null +++ b/TreeGrid/WebApp-Server/TreeGridUGSample.csproj @@ -0,0 +1,16 @@ + + + + net8.0 + enable + enable + + + + + + + + + + diff --git a/TreeGrid/WebApp-Server/TreeGridUGSample.csproj.user b/TreeGrid/WebApp-Server/TreeGridUGSample.csproj.user new file mode 100644 index 00000000..9ff5820a --- /dev/null +++ b/TreeGrid/WebApp-Server/TreeGridUGSample.csproj.user @@ -0,0 +1,6 @@ + + + + https + + \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/TreeGridUGSample.sln b/TreeGrid/WebApp-Server/TreeGridUGSample.sln new file mode 100644 index 00000000..89647401 --- /dev/null +++ b/TreeGrid/WebApp-Server/TreeGridUGSample.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36221.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TreeGridUGSample", "TreeGridUGSample.csproj", "{BDA91F6F-FB90-C4D0-BB5D-A75F625BFB80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BDA91F6F-FB90-C4D0-BB5D-A75F625BFB80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BDA91F6F-FB90-C4D0-BB5D-A75F625BFB80}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BDA91F6F-FB90-C4D0-BB5D-A75F625BFB80}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BDA91F6F-FB90-C4D0-BB5D-A75F625BFB80}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {ADD1BBF3-BA54-469D-A6B3-86374C719446} + EndGlobalSection +EndGlobal diff --git a/TreeGrid/WebApp-Server/appsettings.Development.json b/TreeGrid/WebApp-Server/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/TreeGrid/WebApp-Server/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/TreeGrid/WebApp-Server/appsettings.json b/TreeGrid/WebApp-Server/appsettings.json new file mode 100644 index 00000000..10f68b8c --- /dev/null +++ b/TreeGrid/WebApp-Server/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/TreeGrid/WebApp-Server/wwwroot/app.css b/TreeGrid/WebApp-Server/wwwroot/app.css new file mode 100644 index 00000000..2bd9b789 --- /dev/null +++ b/TreeGrid/WebApp-Server/wwwroot/app.css @@ -0,0 +1,51 @@ +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +a, .btn-link { + color: #006bb7; +} + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { + box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; +} + +.content { + padding-top: 1.1rem; +} + +h1:focus { + outline: none; +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid #e50000; +} + +.validation-message { + color: #e50000; +} + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + + .blazor-error-boundary::after { + content: "An error has occurred." + } + +.darker-border-checkbox.form-check-input { + border-color: #929292; +} diff --git a/TreeGrid/WebApp-Server/wwwroot/bootstrap/bootstrap.min.css b/TreeGrid/WebApp-Server/wwwroot/bootstrap/bootstrap.min.css new file mode 100644 index 00000000..02ae65b5 --- /dev/null +++ b/TreeGrid/WebApp-Server/wwwroot/bootstrap/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-rgb:33,37,41;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image: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")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/TreeGrid/WebApp-Server/wwwroot/bootstrap/bootstrap.min.css.map b/TreeGrid/WebApp-Server/wwwroot/bootstrap/bootstrap.min.css.map new file mode 100644 index 00000000..afcd9e33 --- /dev/null +++ b/TreeGrid/WebApp-Server/wwwroot/bootstrap/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"iBAAA;;;;;ACAA,MAQI,UAAA,QAAA,YAAA,QAAA,YAAA,QAAA,UAAA,QAAA,SAAA,QAAA,YAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAAA,UAAA,QAAA,WAAA,KAAA,UAAA,QAAA,eAAA,QAIA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAIA,aAAA,QAAA,eAAA,QAAA,aAAA,QAAA,UAAA,QAAA,aAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAIA,iBAAA,EAAA,CAAA,GAAA,CAAA,IAAA,mBAAA,GAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,EAAA,CAAA,GAAA,CAAA,GAAA,cAAA,EAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,GAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,GAAA,CAAA,EAAA,CAAA,GAAA,eAAA,GAAA,CAAA,GAAA,CAAA,IAAA,cAAA,EAAA,CAAA,EAAA,CAAA,GAGF,eAAA,GAAA,CAAA,GAAA,CAAA,IACA,eAAA,CAAA,CAAA,CAAA,CAAA,EACA,cAAA,EAAA,CAAA,EAAA,CAAA,GAMA,qBAAA,SAAA,CAAA,aAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBACA,oBAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UACA,cAAA,2EAQA,sBAAA,0BACA,oBAAA,KACA,sBAAA,IACA,sBAAA,IACA,gBAAA,QAIA,aAAA,KClCF,EC+CA,QADA,SD3CE,WAAA,WAeE,8CANJ,MAOM,gBAAA,QAcN,KACE,OAAA,EACA,YAAA,2BEmPI,UAAA,yBFjPJ,YAAA,2BACA,YAAA,2BACA,MAAA,qBACA,WAAA,0BACA,iBAAA,kBACA,yBAAA,KACA,4BAAA,YAUF,GACE,OAAA,KAAA,EACA,MAAA,QACA,iBAAA,aACA,OAAA,EACA,QAAA,IAGF,eACE,OAAA,IAUF,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAGA,YAAA,IACA,YAAA,IAIF,IAAA,GEwMQ,UAAA,uBAlKJ,0BFtCJ,IAAA,GE+MQ,UAAA,QF1MR,IAAA,GEmMQ,UAAA,sBAlKJ,0BFjCJ,IAAA,GE0MQ,UAAA,MFrMR,IAAA,GE8LQ,UAAA,oBAlKJ,0BF5BJ,IAAA,GEqMQ,UAAA,SFhMR,IAAA,GEyLQ,UAAA,sBAlKJ,0BFvBJ,IAAA,GEgMQ,UAAA,QF3LR,IAAA,GEgLM,UAAA,QF3KN,IAAA,GE2KM,UAAA,KFhKN,EACE,WAAA,EACA,cAAA,KCmBF,6BDRA,YAEE,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,iCAAA,KAAA,yBAAA,KAMF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QAMF,GCIA,GDFE,aAAA,KCQF,GDLA,GCIA,GDDE,WAAA,EACA,cAAA,KAGF,MCKA,MACA,MAFA,MDAE,cAAA,EAGF,GACE,YAAA,IAKF,GACE,cAAA,MACA,YAAA,EAMF,WACE,OAAA,EAAA,EAAA,KAQF,ECNA,ODQE,YAAA,OAQF,OAAA,ME4EM,UAAA,OFrEN,MAAA,KACE,QAAA,KACA,iBAAA,QASF,ICpBA,IDsBE,SAAA,SEwDI,UAAA,MFtDJ,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAKN,EACE,MAAA,QACA,gBAAA,UAEA,QACE,MAAA,QAWF,2BAAA,iCAEE,MAAA,QACA,gBAAA,KCxBJ,KACA,ID8BA,IC7BA,KDiCE,YAAA,yBEcI,UAAA,IFZJ,UAAA,IACA,aAAA,cAOF,IACE,QAAA,MACA,WAAA,EACA,cAAA,KACA,SAAA,KEAI,UAAA,OFKJ,SELI,UAAA,QFOF,MAAA,QACA,WAAA,OAIJ,KEZM,UAAA,OFcJ,MAAA,QACA,UAAA,WAGA,OACE,MAAA,QAIJ,IACE,QAAA,MAAA,MExBI,UAAA,OF0BJ,MAAA,KACA,iBAAA,QG7SE,cAAA,MHgTF,QACE,QAAA,EE/BE,UAAA,IFiCF,YAAA,IASJ,OACE,OAAA,EAAA,EAAA,KAMF,ICjDA,IDmDE,eAAA,OAQF,MACE,aAAA,OACA,gBAAA,SAGF,QACE,YAAA,MACA,eAAA,MACA,MAAA,QACA,WAAA,KAOF,GAEE,WAAA,QACA,WAAA,qBCxDF,MAGA,GAFA,MAGA,GDuDA,MCzDA,GD+DE,aAAA,QACA,aAAA,MACA,aAAA,EAQF,MACE,QAAA,aAMF,OAEE,cAAA,EAQF,iCACE,QAAA,ECtEF,OD2EA,MCzEA,SADA,OAEA,SD6EE,OAAA,EACA,YAAA,QE9HI,UAAA,QFgIJ,YAAA,QAIF,OC5EA,OD8EE,eAAA,KAKF,cACE,OAAA,QAGF,OAGE,UAAA,OAGA,gBACE,QAAA,EAOJ,0CACE,QAAA,KClFF,cACA,aACA,cDwFA,OAIE,mBAAA,OCxFF,6BACA,4BACA,6BDyFI,sBACE,OAAA,QAON,mBACE,QAAA,EACA,aAAA,KAKF,SACE,OAAA,SAUF,SACE,UAAA,EACA,QAAA,EACA,OAAA,EACA,OAAA,EAQF,OACE,MAAA,KACA,MAAA,KACA,QAAA,EACA,cAAA,MEnNM,UAAA,sBFsNN,YAAA,QExXE,0BFiXJ,OExMQ,UAAA,QFiNN,SACE,MAAA,KChGJ,kCDuGA,uCCxGA,mCADA,+BAGA,oCAJA,6BAKA,mCD4GE,QAAA,EAGF,4BACE,OAAA,KASF,cACE,eAAA,KACA,mBAAA,UAmBF,4BACE,mBAAA,KAKF,+BACE,QAAA,EAMF,uBACE,KAAA,QAMF,6BACE,KAAA,QACA,mBAAA,OAKF,OACE,QAAA,aAKF,OACE,OAAA,EAOF,QACE,QAAA,UACA,OAAA,QAQF,SACE,eAAA,SAQF,SACE,QAAA,eInlBF,MFyQM,UAAA,QEvQJ,YAAA,IAKA,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,ME7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,QE7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,ME7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,QE7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,ME7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,QEvPR,eCrDE,aAAA,EACA,WAAA,KDyDF,aC1DE,aAAA,EACA,WAAA,KD4DF,kBACE,QAAA,aAEA,mCACE,aAAA,MAUJ,YFsNM,UAAA,OEpNJ,eAAA,UAIF,YACE,cAAA,KF+MI,UAAA,QE5MJ,wBACE,cAAA,EAIJ,mBACE,WAAA,MACA,cAAA,KFqMI,UAAA,OEnMJ,MAAA,QAEA,2BACE,QAAA,KE9FJ,WCIE,UAAA,KAGA,OAAA,KDDF,eACE,QAAA,OACA,iBAAA,KACA,OAAA,IAAA,MAAA,QHGE,cAAA,OIRF,UAAA,KAGA,OAAA,KDcF,QAEE,QAAA,aAGF,YACE,cAAA,MACA,YAAA,EAGF,gBJ+PM,UAAA,OI7PJ,MAAA,QElCA,WPqmBF,iBAGA,cACA,cACA,cAHA,cADA,eQzmBE,MAAA,KACA,cAAA,0BACA,aAAA,0BACA,aAAA,KACA,YAAA,KCwDE,yBF5CE,WAAA,cACE,UAAA,OE2CJ,yBF5CE,WAAA,cAAA,cACE,UAAA,OE2CJ,yBF5CE,WAAA,cAAA,cAAA,cACE,UAAA,OE2CJ,0BF5CE,WAAA,cAAA,cAAA,cAAA,cACE,UAAA,QE2CJ,0BF5CE,WAAA,cAAA,cAAA,cAAA,cAAA,eACE,UAAA,QGfN,KCAA,cAAA,OACA,cAAA,EACA,QAAA,KACA,UAAA,KACA,WAAA,8BACA,aAAA,+BACA,YAAA,+BDHE,OCYF,YAAA,EACA,MAAA,KACA,UAAA,KACA,cAAA,8BACA,aAAA,8BACA,WAAA,mBA+CI,KACE,KAAA,EAAA,EAAA,GAGF,iBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,cACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,UAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,UAxDV,YAAA,YAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,WAxDV,YAAA,aAwDU,WAxDV,YAAA,aAmEM,KXusBR,MWrsBU,cAAA,EAGF,KXusBR,MWrsBU,cAAA,EAPF,KXitBR,MW/sBU,cAAA,QAGF,KXitBR,MW/sBU,cAAA,QAPF,KX2tBR,MWztBU,cAAA,OAGF,KX2tBR,MWztBU,cAAA,OAPF,KXquBR,MWnuBU,cAAA,KAGF,KXquBR,MWnuBU,cAAA,KAPF,KX+uBR,MW7uBU,cAAA,OAGF,KX+uBR,MW7uBU,cAAA,OAPF,KXyvBR,MWvvBU,cAAA,KAGF,KXyvBR,MWvvBU,cAAA,KFzDN,yBESE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QX45BR,SW15BU,cAAA,EAGF,QX45BR,SW15BU,cAAA,EAPF,QXs6BR,SWp6BU,cAAA,QAGF,QXs6BR,SWp6BU,cAAA,QAPF,QXg7BR,SW96BU,cAAA,OAGF,QXg7BR,SW96BU,cAAA,OAPF,QX07BR,SWx7BU,cAAA,KAGF,QX07BR,SWx7BU,cAAA,KAPF,QXo8BR,SWl8BU,cAAA,OAGF,QXo8BR,SWl8BU,cAAA,OAPF,QX88BR,SW58BU,cAAA,KAGF,QX88BR,SW58BU,cAAA,MFzDN,yBESE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QXinCR,SW/mCU,cAAA,EAGF,QXinCR,SW/mCU,cAAA,EAPF,QX2nCR,SWznCU,cAAA,QAGF,QX2nCR,SWznCU,cAAA,QAPF,QXqoCR,SWnoCU,cAAA,OAGF,QXqoCR,SWnoCU,cAAA,OAPF,QX+oCR,SW7oCU,cAAA,KAGF,QX+oCR,SW7oCU,cAAA,KAPF,QXypCR,SWvpCU,cAAA,OAGF,QXypCR,SWvpCU,cAAA,OAPF,QXmqCR,SWjqCU,cAAA,KAGF,QXmqCR,SWjqCU,cAAA,MFzDN,yBESE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QXs0CR,SWp0CU,cAAA,EAGF,QXs0CR,SWp0CU,cAAA,EAPF,QXg1CR,SW90CU,cAAA,QAGF,QXg1CR,SW90CU,cAAA,QAPF,QX01CR,SWx1CU,cAAA,OAGF,QX01CR,SWx1CU,cAAA,OAPF,QXo2CR,SWl2CU,cAAA,KAGF,QXo2CR,SWl2CU,cAAA,KAPF,QX82CR,SW52CU,cAAA,OAGF,QX82CR,SW52CU,cAAA,OAPF,QXw3CR,SWt3CU,cAAA,KAGF,QXw3CR,SWt3CU,cAAA,MFzDN,0BESE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QX2hDR,SWzhDU,cAAA,EAGF,QX2hDR,SWzhDU,cAAA,EAPF,QXqiDR,SWniDU,cAAA,QAGF,QXqiDR,SWniDU,cAAA,QAPF,QX+iDR,SW7iDU,cAAA,OAGF,QX+iDR,SW7iDU,cAAA,OAPF,QXyjDR,SWvjDU,cAAA,KAGF,QXyjDR,SWvjDU,cAAA,KAPF,QXmkDR,SWjkDU,cAAA,OAGF,QXmkDR,SWjkDU,cAAA,OAPF,QX6kDR,SW3kDU,cAAA,KAGF,QX6kDR,SW3kDU,cAAA,MFzDN,0BESE,SACE,KAAA,EAAA,EAAA,GAGF,qBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,cAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,cAxDV,YAAA,EAwDU,cAxDV,YAAA,YAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,eAxDV,YAAA,aAwDU,eAxDV,YAAA,aAmEM,SXgvDR,UW9uDU,cAAA,EAGF,SXgvDR,UW9uDU,cAAA,EAPF,SX0vDR,UWxvDU,cAAA,QAGF,SX0vDR,UWxvDU,cAAA,QAPF,SXowDR,UWlwDU,cAAA,OAGF,SXowDR,UWlwDU,cAAA,OAPF,SX8wDR,UW5wDU,cAAA,KAGF,SX8wDR,UW5wDU,cAAA,KAPF,SXwxDR,UWtxDU,cAAA,OAGF,SXwxDR,UWtxDU,cAAA,OAPF,SXkyDR,UWhyDU,cAAA,KAGF,SXkyDR,UWhyDU,cAAA,MCpHV,OACE,cAAA,YACA,qBAAA,YACA,yBAAA,QACA,sBAAA,oBACA,wBAAA,QACA,qBAAA,mBACA,uBAAA,QACA,oBAAA,qBAEA,MAAA,KACA,cAAA,KACA,MAAA,QACA,eAAA,IACA,aAAA,QAOA,yBACE,QAAA,MAAA,MACA,iBAAA,mBACA,oBAAA,IACA,WAAA,MAAA,EAAA,EAAA,EAAA,OAAA,0BAGF,aACE,eAAA,QAGF,aACE,eAAA,OAIF,uCACE,oBAAA,aASJ,aACE,aAAA,IAUA,4BACE,QAAA,OAAA,OAeF,gCACE,aAAA,IAAA,EAGA,kCACE,aAAA,EAAA,IAOJ,oCACE,oBAAA,EASF,yCACE,qBAAA,2BACA,MAAA,8BAQJ,cACE,qBAAA,0BACA,MAAA,6BAQA,4BACE,qBAAA,yBACA,MAAA,4BCxHF,eAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,iBAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,eAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,YAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,eAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,cAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,aAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,YAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QDgIA,kBACE,WAAA,KACA,2BAAA,MHvEF,4BGqEA,qBACE,WAAA,KACA,2BAAA,OHvEF,4BGqEA,qBACE,WAAA,KACA,2BAAA,OHvEF,4BGqEA,qBACE,WAAA,KACA,2BAAA,OHvEF,6BGqEA,qBACE,WAAA,KACA,2BAAA,OHvEF,6BGqEA,sBACE,WAAA,KACA,2BAAA,OE/IN,YACE,cAAA,MASF,gBACE,YAAA,oBACA,eAAA,oBACA,cAAA,EboRI,UAAA,QahRJ,YAAA,IAIF,mBACE,YAAA,kBACA,eAAA,kBb0QI,UAAA,QatQN,mBACE,YAAA,mBACA,eAAA,mBboQI,UAAA,QcjSN,WACE,WAAA,OdgSI,UAAA,Oc5RJ,MAAA,QCLF,cACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,Of8RI,UAAA,Ke3RJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,QACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KdGE,cAAA,OeHE,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCDhBN,cCiBQ,WAAA,MDGN,yBACE,SAAA,OAEA,wDACE,OAAA,QAKJ,oBACE,MAAA,QACA,iBAAA,KACA,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAOJ,2CAEE,OAAA,MAIF,gCACE,MAAA,QAEA,QAAA,EAHF,2BACE,MAAA,QAEA,QAAA,EAQF,uBAAA,wBAEE,iBAAA,QAGA,QAAA,EAIF,oCACE,QAAA,QAAA,OACA,OAAA,SAAA,QACA,mBAAA,OAAA,kBAAA,OACA,MAAA,QE3EF,iBAAA,QF6EE,eAAA,KACA,aAAA,QACA,aAAA,MACA,aAAA,EACA,wBAAA,IACA,cAAA,ECtEE,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCDuDJ,oCCtDM,WAAA,MDqEN,yEACE,iBAAA,QAGF,0CACE,QAAA,QAAA,OACA,OAAA,SAAA,QACA,mBAAA,OAAA,kBAAA,OACA,MAAA,QE9FF,iBAAA,QFgGE,eAAA,KACA,aAAA,QACA,aAAA,MACA,aAAA,EACA,wBAAA,IACA,cAAA,ECzFE,mBAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCD0EJ,0CCzEM,mBAAA,KAAA,WAAA,MDwFN,+EACE,iBAAA,QASJ,wBACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,EACA,cAAA,EACA,YAAA,IACA,MAAA,QACA,iBAAA,YACA,OAAA,MAAA,YACA,aAAA,IAAA,EAEA,wCAAA,wCAEE,cAAA,EACA,aAAA,EAWJ,iBACE,WAAA,0BACA,QAAA,OAAA,MfmJI,UAAA,QClRF,cAAA,McmIF,uCACE,QAAA,OAAA,MACA,OAAA,QAAA,OACA,mBAAA,MAAA,kBAAA,MAGF,6CACE,QAAA,OAAA,MACA,OAAA,QAAA,OACA,mBAAA,MAAA,kBAAA,MAIJ,iBACE,WAAA,yBACA,QAAA,MAAA,KfgII,UAAA,QClRF,cAAA,McsJF,uCACE,QAAA,MAAA,KACA,OAAA,OAAA,MACA,mBAAA,KAAA,kBAAA,KAGF,6CACE,QAAA,MAAA,KACA,OAAA,OAAA,MACA,mBAAA,KAAA,kBAAA,KAQF,sBACE,WAAA,2BAGF,yBACE,WAAA,0BAGF,yBACE,WAAA,yBAKJ,oBACE,MAAA,KACA,OAAA,KACA,QAAA,QAEA,mDACE,OAAA,QAGF,uCACE,OAAA,Md/LA,cAAA,OcmMF,0CACE,OAAA,MdpMA,cAAA,OiBdJ,aACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,QAAA,QAAA,OAEA,mBAAA,oBlB2RI,UAAA,KkBxRJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,iBAAA,gOACA,kBAAA,UACA,oBAAA,MAAA,OAAA,OACA,gBAAA,KAAA,KACA,OAAA,IAAA,MAAA,QjBFE,cAAA,OeHE,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YESJ,mBAAA,KAAA,gBAAA,KAAA,WAAA,KFLI,uCEfN,aFgBQ,WAAA,MEMN,mBACE,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,uBAAA,mCAEE,cAAA,OACA,iBAAA,KAGF,sBAEE,iBAAA,QAKF,4BACE,MAAA,YACA,YAAA,EAAA,EAAA,EAAA,QAIJ,gBACE,YAAA,OACA,eAAA,OACA,aAAA,MlByOI,UAAA,QkBrON,gBACE,YAAA,MACA,eAAA,MACA,aAAA,KlBkOI,UAAA,QmBjSN,YACE,QAAA,MACA,WAAA,OACA,aAAA,MACA,cAAA,QAEA,8BACE,MAAA,KACA,YAAA,OAIJ,kBACE,MAAA,IACA,OAAA,IACA,WAAA,MACA,eAAA,IACA,iBAAA,KACA,kBAAA,UACA,oBAAA,OACA,gBAAA,QACA,OAAA,IAAA,MAAA,gBACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KACA,2BAAA,MAAA,aAAA,MAGA,iClBXE,cAAA,MkBeF,8BAEE,cAAA,IAGF,yBACE,OAAA,gBAGF,wBACE,aAAA,QACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAGF,0BACE,iBAAA,QACA,aAAA,QAEA,yCAII,iBAAA,8NAIJ,sCAII,iBAAA,sIAKN,+CACE,iBAAA,QACA,aAAA,QAKE,iBAAA,wNAIJ,2BACE,eAAA,KACA,OAAA,KACA,QAAA,GAOA,6CAAA,8CACE,QAAA,GAcN,aACE,aAAA,MAEA,+BACE,MAAA,IACA,YAAA,OACA,iBAAA,uJACA,oBAAA,KAAA,OlB9FA,cAAA,IeHE,WAAA,oBAAA,KAAA,YAIA,uCGyFJ,+BHxFM,WAAA,MGgGJ,qCACE,iBAAA,yIAGF,uCACE,oBAAA,MAAA,OAKE,iBAAA,sIAMR,mBACE,QAAA,aACA,aAAA,KAGF,WACE,SAAA,SACA,KAAA,cACA,eAAA,KAIE,yBAAA,0BACE,eAAA,KACA,OAAA,KACA,QAAA,IC9IN,YACE,MAAA,KACA,OAAA,OACA,QAAA,EACA,iBAAA,YACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KAEA,kBACE,QAAA,EAIA,wCAA0B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,OAAA,qBAC1B,oCAA0B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,OAAA,qBAG5B,8BACE,OAAA,EAGF,kCACE,MAAA,KACA,OAAA,KACA,WAAA,QHzBF,iBAAA,QG2BE,OAAA,EnBZA,cAAA,KeHE,mBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YImBF,mBAAA,KAAA,WAAA,KJfE,uCIMJ,kCJLM,mBAAA,KAAA,WAAA,MIgBJ,yCHjCF,iBAAA,QGsCA,2CACE,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YnB7BA,cAAA,KmBkCF,8BACE,MAAA,KACA,OAAA,KHnDF,iBAAA,QGqDE,OAAA,EnBtCA,cAAA,KeHE,gBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YI6CF,gBAAA,KAAA,WAAA,KJzCE,uCIiCJ,8BJhCM,gBAAA,KAAA,WAAA,MI0CJ,qCH3DF,iBAAA,QGgEA,8BACE,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YnBvDA,cAAA,KmB4DF,qBACE,eAAA,KAEA,2CACE,iBAAA,QAGF,uCACE,iBAAA,QCvFN,eACE,SAAA,SAEA,6BtB+iFF,4BsB7iFI,OAAA,mBACA,YAAA,KAGF,qBACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,OAAA,KACA,QAAA,KAAA,OACA,eAAA,KACA,OAAA,IAAA,MAAA,YACA,iBAAA,EAAA,ELDE,WAAA,QAAA,IAAA,WAAA,CAAA,UAAA,IAAA,YAIA,uCKXJ,qBLYM,WAAA,MKCN,6BACE,QAAA,KAAA,OAEA,+CACE,MAAA,YADF,0CACE,MAAA,YAGF,0DAEE,YAAA,SACA,eAAA,QAHF,mCAAA,qDAEE,YAAA,SACA,eAAA,QAGF,8CACE,YAAA,SACA,eAAA,QAIJ,4BACE,YAAA,SACA,eAAA,QAMA,gEACE,QAAA,IACA,UAAA,WAAA,mBAAA,mBAFF,yCtBmjFJ,2DACA,kCsBnjFM,QAAA,IACA,UAAA,WAAA,mBAAA,mBAKF,oDACE,QAAA,IACA,UAAA,WAAA,mBAAA,mBCtDN,aACE,SAAA,SACA,QAAA,KACA,UAAA,KACA,YAAA,QACA,MAAA,KAEA,2BvB2mFF,0BuBzmFI,SAAA,SACA,KAAA,EAAA,EAAA,KACA,MAAA,GACA,UAAA,EAIF,iCvBymFF,gCuBvmFI,QAAA,EAMF,kBACE,SAAA,SACA,QAAA,EAEA,wBACE,QAAA,EAWN,kBACE,QAAA,KACA,YAAA,OACA,QAAA,QAAA,OtBsPI,UAAA,KsBpPJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,OACA,YAAA,OACA,iBAAA,QACA,OAAA,IAAA,MAAA,QrBpCE,cAAA,OFuoFJ,qBuBzlFA,8BvBulFA,6BACA,kCuBplFE,QAAA,MAAA,KtBgOI,UAAA,QClRF,cAAA,MFgpFJ,qBuBzlFA,8BvBulFA,6BACA,kCuBplFE,QAAA,OAAA,MtBuNI,UAAA,QClRF,cAAA,MqBgEJ,6BvBulFA,6BuBrlFE,cAAA,KvB0lFF,uEuB7kFI,8FrB/DA,wBAAA,EACA,2BAAA,EFgpFJ,iEuB3kFI,2FrBtEA,wBAAA,EACA,2BAAA,EqBgFF,0IACE,YAAA,KrBpEA,uBAAA,EACA,0BAAA,EsBzBF,gBACE,QAAA,KACA,MAAA,KACA,WAAA,OvByQE,UAAA,OuBtQF,MAAA,QAGF,eACE,SAAA,SACA,IAAA,KACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MvB4PE,UAAA,QuBzPF,MAAA,KACA,iBAAA,mBtB1BA,cAAA,OFmsFJ,0BACA,yBwBrqFI,sCxBmqFJ,qCwBjqFM,QAAA,MA9CF,uBAAA,mCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,2OACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBAGF,6BAAA,yCACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBAhEJ,2CAAA,+BAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,sBAAA,kCAiFE,aAAA,QAGE,kDAAA,gDAAA,8DAAA,4DAEE,cAAA,SACA,iBAAA,+NAAA,CAAA,2OACA,oBAAA,MAAA,OAAA,MAAA,CAAA,OAAA,MAAA,QACA,gBAAA,KAAA,IAAA,CAAA,sBAAA,sBAIJ,4BAAA,wCACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBA/FJ,2BAAA,uCAsGE,aAAA,QAEA,mCAAA,+CACE,iBAAA,QAGF,iCAAA,6CACE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,6CAAA,yDACE,MAAA,QAKJ,qDACE,YAAA,KAvHF,oCxBwwFJ,mCwBxwFI,gDxBuwFJ,+CwBxoFQ,QAAA,EAIF,0CxB0oFN,yCwB1oFM,sDxByoFN,qDwBxoFQ,QAAA,EAjHN,kBACE,QAAA,KACA,MAAA,KACA,WAAA,OvByQE,UAAA,OuBtQF,MAAA,QAGF,iBACE,SAAA,SACA,IAAA,KACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MvB4PE,UAAA,QuBzPF,MAAA,KACA,iBAAA,mBtB1BA,cAAA,OF4xFJ,8BACA,6BwB9vFI,0CxB4vFJ,yCwB1vFM,QAAA,MA9CF,yBAAA,qCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,2TACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBAGF,+BAAA,2CACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBAhEJ,6CAAA,iCAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,wBAAA,oCAiFE,aAAA,QAGE,oDAAA,kDAAA,gEAAA,8DAEE,cAAA,SACA,iBAAA,+NAAA,CAAA,2TACA,oBAAA,MAAA,OAAA,MAAA,CAAA,OAAA,MAAA,QACA,gBAAA,KAAA,IAAA,CAAA,sBAAA,sBAIJ,8BAAA,0CACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBA/FJ,6BAAA,yCAsGE,aAAA,QAEA,qCAAA,iDACE,iBAAA,QAGF,mCAAA,+CACE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,+CAAA,2DACE,MAAA,QAKJ,uDACE,YAAA,KAvHF,sCxBi2FJ,qCwBj2FI,kDxBg2FJ,iDwB/tFQ,QAAA,EAEF,4CxBmuFN,2CwBnuFM,wDxBkuFN,uDwBjuFQ,QAAA,ECtIR,KACE,QAAA,aAEA,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,OACA,gBAAA,KAEA,eAAA,OACA,OAAA,QACA,oBAAA,KAAA,iBAAA,KAAA,YAAA,KACA,iBAAA,YACA,OAAA,IAAA,MAAA,YC8GA,QAAA,QAAA,OzBsKI,UAAA,KClRF,cAAA,OeHE,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCQhBN,KRiBQ,WAAA,MQAN,WACE,MAAA,QAIF,sBAAA,WAEE,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAcF,cAAA,cAAA,uBAGE,eAAA,KACA,QAAA,IAYF,aCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,mBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,8BAAA,mBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAIJ,+BAAA,gCAAA,oBAAA,oBAAA,mCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,qCAAA,sCAAA,0BAAA,0BAAA,yCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,sBAAA,sBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,eCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,qBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,gCAAA,qBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,iCAAA,kCAAA,sBAAA,sBAAA,qCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,uCAAA,wCAAA,4BAAA,4BAAA,2CAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,wBAAA,wBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,aCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,mBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,8BAAA,mBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAIJ,+BAAA,gCAAA,oBAAA,oBAAA,mCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,qCAAA,sCAAA,0BAAA,0BAAA,yCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,sBAAA,sBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,UCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,gBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,2BAAA,gBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAIJ,4BAAA,6BAAA,iBAAA,iBAAA,gCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,kCAAA,mCAAA,uBAAA,uBAAA,sCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,mBAAA,mBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,aCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,mBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,8BAAA,mBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAIJ,+BAAA,gCAAA,oBAAA,oBAAA,mCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,qCAAA,sCAAA,0BAAA,0BAAA,yCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,sBAAA,sBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,YCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,kBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,6BAAA,kBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAIJ,8BAAA,+BAAA,mBAAA,mBAAA,kCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,oCAAA,qCAAA,yBAAA,yBAAA,wCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,qBAAA,qBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,WCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,iBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,4BAAA,iBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,6BAAA,8BAAA,kBAAA,kBAAA,iCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,mCAAA,oCAAA,wBAAA,wBAAA,uCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,oBAAA,oBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,UCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,gBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,2BAAA,gBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,kBAIJ,4BAAA,6BAAA,iBAAA,iBAAA,gCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,kCAAA,mCAAA,uBAAA,uBAAA,sCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,kBAKN,mBAAA,mBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDNF,qBCmBA,MAAA,QACA,aAAA,QAEA,2BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,sCAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,uCAAA,wCAAA,4BAAA,0CAAA,4BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6CAAA,8CAAA,kCAAA,gDAAA,kCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,8BAAA,8BAEE,MAAA,QACA,iBAAA,YDvDF,uBCmBA,MAAA,QACA,aAAA,QAEA,6BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,wCAAA,6BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAGF,yCAAA,0CAAA,8BAAA,4CAAA,8BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,+CAAA,gDAAA,oCAAA,kDAAA,oCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,gCAAA,gCAEE,MAAA,QACA,iBAAA,YDvDF,qBCmBA,MAAA,QACA,aAAA,QAEA,2BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,sCAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAGF,uCAAA,wCAAA,4BAAA,0CAAA,4BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6CAAA,8CAAA,kCAAA,gDAAA,kCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,8BAAA,8BAEE,MAAA,QACA,iBAAA,YDvDF,kBCmBA,MAAA,QACA,aAAA,QAEA,wBACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,mCAAA,wBAEE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,oCAAA,qCAAA,yBAAA,uCAAA,yBAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,0CAAA,2CAAA,+BAAA,6CAAA,+BAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,2BAAA,2BAEE,MAAA,QACA,iBAAA,YDvDF,qBCmBA,MAAA,QACA,aAAA,QAEA,2BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,sCAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAGF,uCAAA,wCAAA,4BAAA,0CAAA,4BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6CAAA,8CAAA,kCAAA,gDAAA,kCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,8BAAA,8BAEE,MAAA,QACA,iBAAA,YDvDF,oBCmBA,MAAA,QACA,aAAA,QAEA,0BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,qCAAA,0BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAGF,sCAAA,uCAAA,2BAAA,yCAAA,2BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,4CAAA,6CAAA,iCAAA,+CAAA,iCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,6BAAA,6BAEE,MAAA,QACA,iBAAA,YDvDF,mBCmBA,MAAA,QACA,aAAA,QAEA,yBACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,oCAAA,yBAEE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAGF,qCAAA,sCAAA,0BAAA,wCAAA,0BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,2CAAA,4CAAA,gCAAA,8CAAA,gCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,4BAAA,4BAEE,MAAA,QACA,iBAAA,YDvDF,kBCmBA,MAAA,QACA,aAAA,QAEA,wBACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,mCAAA,wBAEE,WAAA,EAAA,EAAA,EAAA,OAAA,kBAGF,oCAAA,qCAAA,yBAAA,uCAAA,yBAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,0CAAA,2CAAA,+BAAA,6CAAA,+BAKI,WAAA,EAAA,EAAA,EAAA,OAAA,kBAKN,2BAAA,2BAEE,MAAA,QACA,iBAAA,YD3CJ,UACE,YAAA,IACA,MAAA,QACA,gBAAA,UAEA,gBACE,MAAA,QAQF,mBAAA,mBAEE,MAAA,QAWJ,mBAAA,QCuBE,QAAA,MAAA,KzBsKI,UAAA,QClRF,cAAA,MuByFJ,mBAAA,QCmBE,QAAA,OAAA,MzBsKI,UAAA,QClRF,cAAA,MyBnBJ,MVgBM,WAAA,QAAA,KAAA,OAIA,uCUpBN,MVqBQ,WAAA,MUlBN,iBACE,QAAA,EAMF,qBACE,QAAA,KAIJ,YACE,OAAA,EACA,SAAA,OVDI,WAAA,OAAA,KAAA,KAIA,uCULN,YVMQ,WAAA,MUDN,gCACE,MAAA,EACA,OAAA,KVNE,WAAA,MAAA,KAAA,KAIA,uCUAJ,gCVCM,WAAA,MjBs3GR,UADA,SAEA,W4B34GA,QAIE,SAAA,SAGF,iBACE,YAAA,OCqBE,wBACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAhCJ,WAAA,KAAA,MACA,aAAA,KAAA,MAAA,YACA,cAAA,EACA,YAAA,KAAA,MAAA,YAqDE,8BACE,YAAA,ED3CN,eACE,SAAA,SACA,QAAA,KACA,QAAA,KACA,UAAA,MACA,QAAA,MAAA,EACA,OAAA,E3B+QI,UAAA,K2B7QJ,MAAA,QACA,WAAA,KACA,WAAA,KACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,gB1BVE,cAAA,O0BcF,+BACE,IAAA,KACA,KAAA,EACA,WAAA,QAYA,qBACE,cAAA,MAEA,qCACE,MAAA,KACA,KAAA,EAIJ,mBACE,cAAA,IAEA,mCACE,MAAA,EACA,KAAA,KnBCJ,yBmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,yBmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,yBmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,0BmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,0BmBfA,yBACE,cAAA,MAEA,yCACE,MAAA,KACA,KAAA,EAIJ,uBACE,cAAA,IAEA,uCACE,MAAA,EACA,KAAA,MAUN,uCACE,IAAA,KACA,OAAA,KACA,WAAA,EACA,cAAA,QC9CA,gCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAzBJ,WAAA,EACA,aAAA,KAAA,MAAA,YACA,cAAA,KAAA,MACA,YAAA,KAAA,MAAA,YA8CE,sCACE,YAAA,ED0BJ,wCACE,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,YAAA,QC5DA,iCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAlBJ,WAAA,KAAA,MAAA,YACA,aAAA,EACA,cAAA,KAAA,MAAA,YACA,YAAA,KAAA,MAuCE,uCACE,YAAA,EDoCF,iCACE,eAAA,EAMJ,0CACE,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,aAAA,QC7EA,mCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAWA,mCACE,QAAA,KAGF,oCACE,QAAA,aACA,aAAA,OACA,eAAA,OACA,QAAA,GA9BN,WAAA,KAAA,MAAA,YACA,aAAA,KAAA,MACA,cAAA,KAAA,MAAA,YAiCE,yCACE,YAAA,EDqDF,oCACE,eAAA,EAON,kBACE,OAAA,EACA,OAAA,MAAA,EACA,SAAA,OACA,WAAA,IAAA,MAAA,gBAMF,eACE,QAAA,MACA,MAAA,KACA,QAAA,OAAA,KACA,MAAA,KACA,YAAA,IACA,MAAA,QACA,WAAA,QACA,gBAAA,KACA,YAAA,OACA,iBAAA,YACA,OAAA,EAcA,qBAAA,qBAEE,MAAA,QVzJF,iBAAA,QU8JA,sBAAA,sBAEE,MAAA,KACA,gBAAA,KVjKF,iBAAA,QUqKA,wBAAA,wBAEE,MAAA,QACA,eAAA,KACA,iBAAA,YAMJ,oBACE,QAAA,MAIF,iBACE,QAAA,MACA,QAAA,MAAA,KACA,cAAA,E3B0GI,UAAA,Q2BxGJ,MAAA,QACA,YAAA,OAIF,oBACE,QAAA,MACA,QAAA,OAAA,KACA,MAAA,QAIF,oBACE,MAAA,QACA,iBAAA,QACA,aAAA,gBAGA,mCACE,MAAA,QAEA,yCAAA,yCAEE,MAAA,KVhNJ,iBAAA,sBUoNE,0CAAA,0CAEE,MAAA,KVtNJ,iBAAA,QU0NE,4CAAA,4CAEE,MAAA,QAIJ,sCACE,aAAA,gBAGF,wCACE,MAAA,QAGF,qCACE,MAAA,QE5OJ,W9B2rHA,oB8BzrHE,SAAA,SACA,QAAA,YACA,eAAA,O9B6rHF,yB8B3rHE,gBACE,SAAA,SACA,KAAA,EAAA,EAAA,K9BmsHJ,4CACA,0CAIA,gCADA,gCADA,+BADA,+B8BhsHE,mC9ByrHF,iCAIA,uBADA,uBADA,sBADA,sB8BprHI,QAAA,EAKJ,aACE,QAAA,KACA,UAAA,KACA,gBAAA,WAEA,0BACE,MAAA,K9BgsHJ,wC8B1rHE,kCAEE,YAAA,K9B4rHJ,4C8BxrHE,uD5BRE,wBAAA,EACA,2BAAA,EFqsHJ,6C8BrrHE,+B9BorHF,iCEvrHI,uBAAA,EACA,0BAAA,E4BqBJ,uBACE,cAAA,SACA,aAAA,SAEA,8BAAA,uCAAA,sCAGE,YAAA,EAGF,0CACE,aAAA,EAIJ,0CAAA,+BACE,cAAA,QACA,aAAA,QAGF,0CAAA,+BACE,cAAA,OACA,aAAA,OAoBF,oBACE,eAAA,OACA,YAAA,WACA,gBAAA,OAEA,yB9BmpHF,+B8BjpHI,MAAA,K9BqpHJ,iD8BlpHE,2CAEE,WAAA,K9BopHJ,qD8BhpHE,gE5BvFE,2BAAA,EACA,0BAAA,EF2uHJ,sD8BhpHE,8B5B1GE,uBAAA,EACA,wBAAA,E6BxBJ,KACE,QAAA,KACA,UAAA,KACA,aAAA,EACA,cAAA,EACA,WAAA,KAGF,UACE,QAAA,MACA,QAAA,MAAA,KAGA,MAAA,QACA,gBAAA,KdHI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,YAIA,uCcPN,UdQQ,WAAA,McCN,gBAAA,gBAEE,MAAA,QAKF,mBACE,MAAA,QACA,eAAA,KACA,OAAA,QAQJ,UACE,cAAA,IAAA,MAAA,QAEA,oBACE,cAAA,KACA,WAAA,IACA,OAAA,IAAA,MAAA,Y7BlBA,uBAAA,OACA,wBAAA,O6BoBA,0BAAA,0BAEE,aAAA,QAAA,QAAA,QAEA,UAAA,QAGF,6BACE,MAAA,QACA,iBAAA,YACA,aAAA,Y/BixHN,mC+B7wHE,2BAEE,MAAA,QACA,iBAAA,KACA,aAAA,QAAA,QAAA,KAGF,yBAEE,WAAA,K7B5CA,uBAAA,EACA,wBAAA,E6BuDF,qBACE,WAAA,IACA,OAAA,E7BnEA,cAAA,O6BuEF,4B/BmwHF,2B+BjwHI,MAAA,KbxFF,iBAAA,QlB+1HF,oB+B5vHE,oBAEE,KAAA,EAAA,EAAA,KACA,WAAA,O/B+vHJ,yB+B1vHE,yBAEE,WAAA,EACA,UAAA,EACA,WAAA,OAMF,8B/BuvHF,mC+BtvHI,MAAA,KAUF,uBACE,QAAA,KAEF,qBACE,QAAA,MCxHJ,QACE,SAAA,SACA,QAAA,KACA,UAAA,KACA,YAAA,OACA,gBAAA,cACA,YAAA,MAEA,eAAA,MAOA,mBhCs2HF,yBAGA,sBADA,sBADA,sBAGA,sBACA,uBgC12HI,QAAA,KACA,UAAA,QACA,YAAA,OACA,gBAAA,cAoBJ,cACE,YAAA,SACA,eAAA,SACA,aAAA,K/B2OI,UAAA,Q+BzOJ,gBAAA,KACA,YAAA,OAaF,YACE,QAAA,KACA,eAAA,OACA,aAAA,EACA,cAAA,EACA,WAAA,KAEA,sBACE,cAAA,EACA,aAAA,EAGF,2BACE,SAAA,OASJ,aACE,YAAA,MACA,eAAA,MAYF,iBACE,WAAA,KACA,UAAA,EAGA,YAAA,OAIF,gBACE,QAAA,OAAA,O/B6KI,UAAA,Q+B3KJ,YAAA,EACA,iBAAA,YACA,OAAA,IAAA,MAAA,Y9BzGE,cAAA,OeHE,WAAA,WAAA,KAAA,YAIA,uCemGN,gBflGQ,WAAA,Me2GN,sBACE,gBAAA,KAGF,sBACE,gBAAA,KACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAMJ,qBACE,QAAA,aACA,MAAA,MACA,OAAA,MACA,eAAA,OACA,kBAAA,UACA,oBAAA,OACA,gBAAA,KAGF,mBACE,WAAA,6BACA,WAAA,KvB1FE,yBuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhC+yHV,oCgC7yHQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,yBuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhCo2HV,oCgCl2HQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,yBuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhCy5HV,oCgCv5HQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,0BuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhC88HV,oCgC58HQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,0BuBsGA,mBAEI,UAAA,OACA,gBAAA,WAEA,+BACE,eAAA,IAEA,8CACE,SAAA,SAGF,yCACE,cAAA,MACA,aAAA,MAIJ,sCACE,SAAA,QAGF,oCACE,QAAA,eACA,WAAA,KAGF,mCACE,QAAA,KAGF,qCACE,QAAA,KAGF,8BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhCmgIV,qCgCjgIQ,kCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,mCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SA1DN,eAEI,UAAA,OACA,gBAAA,WAEA,2BACE,eAAA,IAEA,0CACE,SAAA,SAGF,qCACE,cAAA,MACA,aAAA,MAIJ,kCACE,SAAA,QAGF,gCACE,QAAA,eACA,WAAA,KAGF,+BACE,QAAA,KAGF,iCACE,QAAA,KAGF,0BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhCujIV,iCgCrjIQ,8BAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,+BACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAcR,4BACE,MAAA,eAEA,kCAAA,kCAEE,MAAA,eAKF,oCACE,MAAA,gBAEA,0CAAA,0CAEE,MAAA,eAGF,6CACE,MAAA,ehCqiIR,2CgCjiII,0CAEE,MAAA,eAIJ,8BACE,MAAA,gBACA,aAAA,eAGF,mCACE,iBAAA,4OAGF,2BACE,MAAA,gBAEA,6BhC8hIJ,mCADA,mCgC1hIM,MAAA,eAOJ,2BACE,MAAA,KAEA,iCAAA,iCAEE,MAAA,KAKF,mCACE,MAAA,sBAEA,yCAAA,yCAEE,MAAA,sBAGF,4CACE,MAAA,sBhCqhIR,0CgCjhII,yCAEE,MAAA,KAIJ,6BACE,MAAA,sBACA,aAAA,qBAGF,kCACE,iBAAA,kPAGF,0BACE,MAAA,sBACA,4BhC+gIJ,kCADA,kCgC3gIM,MAAA,KCvUN,MACE,SAAA,SACA,QAAA,KACA,eAAA,OACA,UAAA,EAEA,UAAA,WACA,iBAAA,KACA,gBAAA,WACA,OAAA,IAAA,MAAA,iB/BME,cAAA,O+BFF,SACE,aAAA,EACA,YAAA,EAGF,kBACE,WAAA,QACA,cAAA,QAEA,8BACE,iBAAA,E/BCF,uBAAA,mBACA,wBAAA,mB+BEA,6BACE,oBAAA,E/BUF,2BAAA,mBACA,0BAAA,mB+BJF,+BjCk1IF,+BiCh1II,WAAA,EAIJ,WAGE,KAAA,EAAA,EAAA,KACA,QAAA,KAAA,KAIF,YACE,cAAA,MAGF,eACE,WAAA,QACA,cAAA,EAGF,sBACE,cAAA,EAQA,sBACE,YAAA,KAQJ,aACE,QAAA,MAAA,KACA,cAAA,EAEA,iBAAA,gBACA,cAAA,IAAA,MAAA,iBAEA,yB/BpEE,cAAA,mBAAA,mBAAA,EAAA,E+ByEJ,aACE,QAAA,MAAA,KAEA,iBAAA,gBACA,WAAA,IAAA,MAAA,iBAEA,wB/B/EE,cAAA,EAAA,EAAA,mBAAA,mB+ByFJ,kBACE,aAAA,OACA,cAAA,OACA,YAAA,OACA,cAAA,EAUF,mBACE,aAAA,OACA,YAAA,OAIF,kBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,K/BnHE,cAAA,mB+BuHJ,UjCozIA,iBADA,ciChzIE,MAAA,KAGF,UjCmzIA,cEv6II,uBAAA,mBACA,wBAAA,mB+BwHJ,UjCozIA,iBE/5II,2BAAA,mBACA,0BAAA,mB+BuHF,kBACE,cAAA,OxBpGA,yBwBgGJ,YAQI,QAAA,KACA,UAAA,IAAA,KAGA,kBAEE,KAAA,EAAA,EAAA,GACA,cAAA,EAEA,wBACE,YAAA,EACA,YAAA,EAKA,mC/BpJJ,wBAAA,EACA,2BAAA,EF+7IJ,gDiCzyIU,iDAGE,wBAAA,EjC0yIZ,gDiCxyIU,oDAGE,2BAAA,EAIJ,oC/BrJJ,uBAAA,EACA,0BAAA,EF67IJ,iDiCtyIU,kDAGE,uBAAA,EjCuyIZ,iDiCryIU,qDAGE,0BAAA,GC7MZ,kBACE,SAAA,SACA,QAAA,KACA,YAAA,OACA,MAAA,KACA,QAAA,KAAA,QjC4RI,UAAA,KiC1RJ,MAAA,QACA,WAAA,KACA,iBAAA,KACA,OAAA,EhCKE,cAAA,EgCHF,gBAAA,KjBAI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,WAAA,CAAA,cAAA,KAAA,KAIA,uCiBhBN,kBjBiBQ,WAAA,MiBFN,kCACE,MAAA,QACA,iBAAA,QACA,WAAA,MAAA,EAAA,KAAA,EAAA,iBAEA,yCACE,iBAAA,gRACA,UAAA,gBAKJ,yBACE,YAAA,EACA,MAAA,QACA,OAAA,QACA,YAAA,KACA,QAAA,GACA,iBAAA,gRACA,kBAAA,UACA,gBAAA,QjBvBE,WAAA,UAAA,IAAA,YAIA,uCiBWJ,yBjBVM,WAAA,MiBsBN,wBACE,QAAA,EAGF,wBACE,QAAA,EACA,aAAA,QACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,kBACE,cAAA,EAGF,gBACE,iBAAA,KACA,OAAA,IAAA,MAAA,iBAEA,8BhCnCE,uBAAA,OACA,wBAAA,OgCqCA,gDhCtCA,uBAAA,mBACA,wBAAA,mBgC0CF,oCACE,WAAA,EAIF,6BhClCE,2BAAA,OACA,0BAAA,OgCqCE,yDhCtCF,2BAAA,mBACA,0BAAA,mBgC0CA,iDhC3CA,2BAAA,OACA,0BAAA,OgCgDJ,gBACE,QAAA,KAAA,QASA,qCACE,aAAA,EAGF,iCACE,aAAA,EACA,YAAA,EhCxFA,cAAA,EgC2FA,6CAAgB,WAAA,EAChB,4CAAe,cAAA,EAEf,mDhC9FA,cAAA,EiCnBJ,YACE,QAAA,KACA,UAAA,KACA,QAAA,EAAA,EACA,cAAA,KAEA,WAAA,KAOA,kCACE,aAAA,MAEA,0CACE,MAAA,KACA,cAAA,MACA,MAAA,QACA,QAAA,kCAIJ,wBACE,MAAA,QCzBJ,YACE,QAAA,KhCGA,aAAA,EACA,WAAA,KgCAF,WACE,SAAA,SACA,QAAA,MACA,MAAA,QACA,gBAAA,KACA,iBAAA,KACA,OAAA,IAAA,MAAA,QnBKI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCmBfN,WnBgBQ,WAAA,MmBPN,iBACE,QAAA,EACA,MAAA,QAEA,iBAAA,QACA,aAAA,QAGF,iBACE,QAAA,EACA,MAAA,QACA,iBAAA,QACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKF,wCACE,YAAA,KAGF,6BACE,QAAA,EACA,MAAA,KlBlCF,iBAAA,QkBoCE,aAAA,QAGF,+BACE,MAAA,QACA,eAAA,KACA,iBAAA,KACA,aAAA,QC3CF,WACE,QAAA,QAAA,OAOI,kCnCqCJ,uBAAA,OACA,0BAAA,OmChCI,iCnCiBJ,wBAAA,OACA,2BAAA,OmChCF,0BACE,QAAA,OAAA,OpCgSE,UAAA,QoCzRE,iDnCqCJ,uBAAA,MACA,0BAAA,MmChCI,gDnCiBJ,wBAAA,MACA,2BAAA,MmChCF,0BACE,QAAA,OAAA,MpCgSE,UAAA,QoCzRE,iDnCqCJ,uBAAA,MACA,0BAAA,MmChCI,gDnCiBJ,wBAAA,MACA,2BAAA,MoC/BJ,OACE,QAAA,aACA,QAAA,MAAA,MrC8RI,UAAA,MqC5RJ,YAAA,IACA,YAAA,EACA,MAAA,KACA,WAAA,OACA,YAAA,OACA,eAAA,SpCKE,cAAA,OoCAF,aACE,QAAA,KAKJ,YACE,SAAA,SACA,IAAA,KCvBF,OACE,SAAA,SACA,QAAA,KAAA,KACA,cAAA,KACA,OAAA,IAAA,MAAA,YrCWE,cAAA,OqCNJ,eAEE,MAAA,QAIF,YACE,YAAA,IAQF,mBACE,cAAA,KAGA,8BACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,QAAA,EACA,QAAA,QAAA,KAeF,eClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,2BACE,MAAA,QD6CF,iBClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,6BACE,MAAA,QD6CF,eClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,2BACE,MAAA,QD6CF,YClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,wBACE,MAAA,QD6CF,eClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,2BACE,MAAA,QD6CF,cClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,0BACE,MAAA,QD6CF,aClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,yBACE,MAAA,QD6CF,YClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,wBACE,MAAA,QCHF,wCACE,GAAK,sBAAA,MADP,gCACE,GAAK,sBAAA,MAKT,UACE,QAAA,KACA,OAAA,KACA,SAAA,OxCwRI,UAAA,OwCtRJ,iBAAA,QvCIE,cAAA,OuCCJ,cACE,QAAA,KACA,eAAA,OACA,gBAAA,OACA,SAAA,OACA,MAAA,KACA,WAAA,OACA,YAAA,OACA,iBAAA,QxBZI,WAAA,MAAA,IAAA,KAIA,uCwBAN,cxBCQ,WAAA,MwBWR,sBvBYE,iBAAA,iKuBVA,gBAAA,KAAA,KAIA,uBACE,kBAAA,GAAA,OAAA,SAAA,qBAAA,UAAA,GAAA,OAAA,SAAA,qBAGE,uCAJJ,uBAKM,kBAAA,KAAA,UAAA,MCvCR,YACE,QAAA,KACA,eAAA,OAGA,aAAA,EACA,cAAA,ExCSE,cAAA,OwCLJ,qBACE,gBAAA,KACA,cAAA,QAEA,gCAEE,QAAA,uBAAA,KACA,kBAAA,QAUJ,wBACE,MAAA,KACA,MAAA,QACA,WAAA,QAGA,8BAAA,8BAEE,QAAA,EACA,MAAA,QACA,gBAAA,KACA,iBAAA,QAGF,+BACE,MAAA,QACA,iBAAA,QASJ,iBACE,SAAA,SACA,QAAA,MACA,QAAA,MAAA,KACA,MAAA,QACA,gBAAA,KACA,iBAAA,KACA,OAAA,IAAA,MAAA,iBAEA,6BxCrCE,uBAAA,QACA,wBAAA,QwCwCF,4BxC3BE,2BAAA,QACA,0BAAA,QwC8BF,0BAAA,0BAEE,MAAA,QACA,eAAA,KACA,iBAAA,KAIF,wBACE,QAAA,EACA,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,kCACE,iBAAA,EAEA,yCACE,WAAA,KACA,iBAAA,IAcF,uBACE,eAAA,IAGE,oDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,mDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,+CACE,WAAA,EAGF,yDACE,iBAAA,IACA,kBAAA,EAEA,gEACE,YAAA,KACA,kBAAA,IjCpER,yBiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,yBiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,yBiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,0BiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,0BiC4CA,2BACE,eAAA,IAGE,wDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,uDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,mDACE,WAAA,EAGF,6DACE,iBAAA,IACA,kBAAA,EAEA,oEACE,YAAA,KACA,kBAAA,KAcZ,kBxC9HI,cAAA,EwCiIF,mCACE,aAAA,EAAA,EAAA,IAEA,8CACE,oBAAA,ECpJJ,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,2BACE,MAAA,QACA,iBAAA,QAGE,wDAAA,wDAEE,MAAA,QACA,iBAAA,QAGF,yDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,sBACE,MAAA,QACA,iBAAA,QAGE,mDAAA,mDAEE,MAAA,QACA,iBAAA,QAGF,oDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,wBACE,MAAA,QACA,iBAAA,QAGE,qDAAA,qDAEE,MAAA,QACA,iBAAA,QAGF,sDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,uBACE,MAAA,QACA,iBAAA,QAGE,oDAAA,oDAEE,MAAA,QACA,iBAAA,QAGF,qDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,sBACE,MAAA,QACA,iBAAA,QAGE,mDAAA,mDAEE,MAAA,QACA,iBAAA,QAGF,oDACE,MAAA,KACA,iBAAA,QACA,aAAA,QCbR,WACE,WAAA,YACA,MAAA,IACA,OAAA,IACA,QAAA,MAAA,MACA,MAAA,KACA,WAAA,YAAA,0TAAA,MAAA,CAAA,IAAA,KAAA,UACA,OAAA,E1COE,cAAA,O0CLF,QAAA,GAGA,iBACE,MAAA,KACA,gBAAA,KACA,QAAA,IAGF,iBACE,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBACA,QAAA,EAGF,oBAAA,oBAEE,eAAA,KACA,oBAAA,KAAA,iBAAA,KAAA,YAAA,KACA,QAAA,IAIJ,iBACE,OAAA,UAAA,gBAAA,iBCtCF,OACE,MAAA,MACA,UAAA,K5CmSI,UAAA,Q4ChSJ,eAAA,KACA,iBAAA,sBACA,gBAAA,YACA,OAAA,IAAA,MAAA,eACA,WAAA,EAAA,MAAA,KAAA,gB3CUE,cAAA,O2CPF,eACE,QAAA,EAGF,kBACE,QAAA,KAIJ,iBACE,MAAA,oBAAA,MAAA,iBAAA,MAAA,YACA,UAAA,KACA,eAAA,KAEA,mCACE,cAAA,OAIJ,cACE,QAAA,KACA,YAAA,OACA,QAAA,MAAA,OACA,MAAA,QACA,iBAAA,sBACA,gBAAA,YACA,cAAA,IAAA,MAAA,gB3CVE,uBAAA,mBACA,wBAAA,mB2CYF,yBACE,aAAA,SACA,YAAA,OAIJ,YACE,QAAA,OACA,UAAA,WC1CF,OACE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,OAAA,KACA,WAAA,OACA,WAAA,KAGA,QAAA,EAOF,cACE,SAAA,SACA,MAAA,KACA,OAAA,MAEA,eAAA,KAGA,0B7BlBI,WAAA,UAAA,IAAA,S6BoBF,UAAA,mB7BhBE,uC6BcJ,0B7BbM,WAAA,M6BiBN,0BACE,UAAA,KAIF,kCACE,UAAA,YAIJ,yBACE,OAAA,kBAEA,wCACE,WAAA,KACA,SAAA,OAGF,qCACE,WAAA,KAIJ,uBACE,QAAA,KACA,YAAA,OACA,WAAA,kBAIF,eACE,SAAA,SACA,QAAA,KACA,eAAA,OACA,MAAA,KAGA,eAAA,KACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,e5C3DE,cAAA,M4C+DF,QAAA,EAIF,gBCpFE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,MAAA,MACA,OAAA,MACA,iBAAA,KAGA,qBAAS,QAAA,EACT,qBAAS,QAAA,GDgFX,cACE,QAAA,KACA,YAAA,EACA,YAAA,OACA,gBAAA,cACA,QAAA,KAAA,KACA,cAAA,IAAA,MAAA,Q5CtEE,uBAAA,kBACA,wBAAA,kB4CwEF,yBACE,QAAA,MAAA,MACA,OAAA,OAAA,OAAA,OAAA,KAKJ,aACE,cAAA,EACA,YAAA,IAKF,YACE,SAAA,SAGA,KAAA,EAAA,EAAA,KACA,QAAA,KAIF,cACE,QAAA,KACA,UAAA,KACA,YAAA,EACA,YAAA,OACA,gBAAA,SACA,QAAA,OACA,WAAA,IAAA,MAAA,Q5CzFE,2BAAA,kBACA,0BAAA,kB4C8FF,gBACE,OAAA,OrC3EA,yBqCkFF,cACE,UAAA,MACA,OAAA,QAAA,KAGF,yBACE,OAAA,oBAGF,uBACE,WAAA,oBAOF,UAAY,UAAA,OrCnGV,yBqCuGF,U9CywKF,U8CvwKI,UAAA,OrCzGA,0BqC8GF,UAAY,UAAA,QASV,kBACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,iCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,gC5C/KF,cAAA,E4CmLE,8BACE,WAAA,KAGF,gC5CvLF,cAAA,EOyDA,4BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,4BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,4BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,6BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,6BqC0GA,2BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,0CACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,yC5C/KF,cAAA,E4CmLE,uCACE,WAAA,KAGF,yC5CvLF,cAAA,G8ClBJ,SACE,SAAA,SACA,QAAA,KACA,QAAA,MACA,OAAA,ECJA,YAAA,0BAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,aAAA,OACA,YAAA,OACA,WAAA,KhDsRI,UAAA,Q+C1RJ,UAAA,WACA,QAAA,EAEA,cAAS,QAAA,GAET,wBACE,SAAA,SACA,QAAA,MACA,MAAA,MACA,OAAA,MAEA,gCACE,SAAA,SACA,QAAA,GACA,aAAA,YACA,aAAA,MAKN,6CAAA,gBACE,QAAA,MAAA,EAEA,4DAAA,+BACE,OAAA,EAEA,oEAAA,uCACE,IAAA,KACA,aAAA,MAAA,MAAA,EACA,iBAAA,KAKN,+CAAA,gBACE,QAAA,EAAA,MAEA,8DAAA,+BACE,KAAA,EACA,MAAA,MACA,OAAA,MAEA,sEAAA,uCACE,MAAA,KACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,KAKN,gDAAA,mBACE,QAAA,MAAA,EAEA,+DAAA,kCACE,IAAA,EAEA,uEAAA,0CACE,OAAA,KACA,aAAA,EAAA,MAAA,MACA,oBAAA,KAKN,8CAAA,kBACE,QAAA,EAAA,MAEA,6DAAA,iCACE,MAAA,EACA,MAAA,MACA,OAAA,MAEA,qEAAA,yCACE,KAAA,KACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,KAqBN,eACE,UAAA,MACA,QAAA,OAAA,MACA,MAAA,KACA,WAAA,OACA,iBAAA,K9C7FE,cAAA,OgDnBJ,SACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,QAAA,MACA,UAAA,MDLA,YAAA,0BAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,aAAA,OACA,YAAA,OACA,WAAA,KhDsRI,UAAA,QiDzRJ,UAAA,WACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,ehDIE,cAAA,MgDAF,wBACE,SAAA,SACA,QAAA,MACA,MAAA,KACA,OAAA,MAEA,+BAAA,gCAEE,SAAA,SACA,QAAA,MACA,QAAA,GACA,aAAA,YACA,aAAA,MAMJ,4DAAA,+BACE,OAAA,mBAEA,oEAAA,uCACE,OAAA,EACA,aAAA,MAAA,MAAA,EACA,iBAAA,gBAGF,mEAAA,sCACE,OAAA,IACA,aAAA,MAAA,MAAA,EACA,iBAAA,KAMJ,8DAAA,+BACE,KAAA,mBACA,MAAA,MACA,OAAA,KAEA,sEAAA,uCACE,KAAA,EACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,gBAGF,qEAAA,sCACE,KAAA,IACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,KAMJ,+DAAA,kCACE,IAAA,mBAEA,uEAAA,0CACE,IAAA,EACA,aAAA,EAAA,MAAA,MAAA,MACA,oBAAA,gBAGF,sEAAA,yCACE,IAAA,IACA,aAAA,EAAA,MAAA,MAAA,MACA,oBAAA,KAKJ,wEAAA,2CACE,SAAA,SACA,IAAA,EACA,KAAA,IACA,QAAA,MACA,MAAA,KACA,YAAA,OACA,QAAA,GACA,cAAA,IAAA,MAAA,QAKF,6DAAA,iCACE,MAAA,mBACA,MAAA,MACA,OAAA,KAEA,qEAAA,yCACE,MAAA,EACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,gBAGF,oEAAA,wCACE,MAAA,IACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,KAqBN,gBACE,QAAA,MAAA,KACA,cAAA,EjDuJI,UAAA,KiDpJJ,iBAAA,QACA,cAAA,IAAA,MAAA,ehDtHE,uBAAA,kBACA,wBAAA,kBgDwHF,sBACE,QAAA,KAIJ,cACE,QAAA,KAAA,KACA,MAAA,QC/IF,UACE,SAAA,SAGF,wBACE,aAAA,MAGF,gBACE,SAAA,SACA,MAAA,KACA,SAAA,OCtBA,uBACE,QAAA,MACA,MAAA,KACA,QAAA,GDuBJ,eACE,SAAA,SACA,QAAA,KACA,MAAA,KACA,MAAA,KACA,aAAA,MACA,4BAAA,OAAA,oBAAA,OlClBI,WAAA,UAAA,IAAA,YAIA,uCkCQN,elCPQ,WAAA,MjBgzLR,oBACA,oBmDhyLA,sBAGE,QAAA,MnDmyLF,0BmD/xLA,8CAEE,UAAA,iBnDkyLF,4BmD/xLA,4CAEE,UAAA,kBAWA,8BACE,QAAA,EACA,oBAAA,QACA,UAAA,KnD0xLJ,uDACA,qDmDxxLE,qCAGE,QAAA,EACA,QAAA,EnDyxLJ,yCmDtxLE,2CAEE,QAAA,EACA,QAAA,ElC/DE,WAAA,QAAA,GAAA,IAIA,uCjBq1LN,yCmD7xLE,2ClCvDM,WAAA,MjB01LR,uBmDtxLA,uBAEE,SAAA,SACA,IAAA,EACA,OAAA,EACA,QAAA,EAEA,QAAA,KACA,YAAA,OACA,gBAAA,OACA,MAAA,IACA,QAAA,EACA,MAAA,KACA,WAAA,OACA,WAAA,IACA,OAAA,EACA,QAAA,GlCzFI,WAAA,QAAA,KAAA,KAIA,uCjB82LN,uBmDzyLA,uBlCpEQ,WAAA,MjBm3LR,6BADA,6BmD1xLE,6BAAA,6BAEE,MAAA,KACA,gBAAA,KACA,QAAA,EACA,QAAA,GAGJ,uBACE,KAAA,EAGF,uBACE,MAAA,EnD8xLF,4BmDzxLA,4BAEE,QAAA,aACA,MAAA,KACA,OAAA,KACA,kBAAA,UACA,oBAAA,IACA,gBAAA,KAAA,KAWF,4BACE,iBAAA,wPAEF,4BACE,iBAAA,yPAQF,qBACE,SAAA,SACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EACA,QAAA,KACA,gBAAA,OACA,QAAA,EAEA,aAAA,IACA,cAAA,KACA,YAAA,IACA,WAAA,KAEA,sCACE,WAAA,YACA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,OAAA,IACA,QAAA,EACA,aAAA,IACA,YAAA,IACA,YAAA,OACA,OAAA,QACA,iBAAA,KACA,gBAAA,YACA,OAAA,EAEA,WAAA,KAAA,MAAA,YACA,cAAA,KAAA,MAAA,YACA,QAAA,GlC5KE,WAAA,QAAA,IAAA,KAIA,uCkCwJJ,sClCvJM,WAAA,MkC2KN,6BACE,QAAA,EASJ,kBACE,SAAA,SACA,MAAA,IACA,OAAA,QACA,KAAA,IACA,YAAA,QACA,eAAA,QACA,MAAA,KACA,WAAA,OnDoxLF,2CmD9wLE,2CAEE,OAAA,UAAA,eAGF,qDACE,iBAAA,KAGF,iCACE,MAAA,KE7NJ,kCACE,GAAK,UAAA,gBADP,0BACE,GAAK,UAAA,gBAIP,gBACE,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,QACA,OAAA,MAAA,MAAA,aACA,mBAAA,YAEA,cAAA,IACA,kBAAA,KAAA,OAAA,SAAA,eAAA,UAAA,KAAA,OAAA,SAAA,eAGF,mBACE,MAAA,KACA,OAAA,KACA,aAAA,KAQF,gCACE,GACE,UAAA,SAEF,IACE,QAAA,EACA,UAAA,MANJ,wBACE,GACE,UAAA,SAEF,IACE,QAAA,EACA,UAAA,MAKJ,cACE,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,QACA,iBAAA,aAEA,cAAA,IACA,QAAA,EACA,kBAAA,KAAA,OAAA,SAAA,aAAA,UAAA,KAAA,OAAA,SAAA,aAGF,iBACE,MAAA,KACA,OAAA,KAIA,uCACE,gBrDo/LJ,cqDl/LM,2BAAA,KAAA,mBAAA,MCjEN,WACE,SAAA,MACA,OAAA,EACA,QAAA,KACA,QAAA,KACA,eAAA,OACA,UAAA,KAEA,WAAA,OACA,iBAAA,KACA,gBAAA,YACA,QAAA,ErCKI,WAAA,UAAA,IAAA,YAIA,uCqCpBN,WrCqBQ,WAAA,MqCLR,oBPdE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,MAAA,MACA,OAAA,MACA,iBAAA,KAGA,yBAAS,QAAA,EACT,yBAAS,QAAA,GOQX,kBACE,QAAA,KACA,YAAA,OACA,gBAAA,cACA,QAAA,KAAA,KAEA,6BACE,QAAA,MAAA,MACA,WAAA,OACA,aAAA,OACA,cAAA,OAIJ,iBACE,cAAA,EACA,YAAA,IAGF,gBACE,UAAA,EACA,QAAA,KAAA,KACA,WAAA,KAGF,iBACE,IAAA,EACA,KAAA,EACA,MAAA,MACA,aAAA,IAAA,MAAA,eACA,UAAA,kBAGF,eACE,IAAA,EACA,MAAA,EACA,MAAA,MACA,YAAA,IAAA,MAAA,eACA,UAAA,iBAGF,eACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,KACA,WAAA,KACA,cAAA,IAAA,MAAA,eACA,UAAA,kBAGF,kBACE,MAAA,EACA,KAAA,EACA,OAAA,KACA,WAAA,KACA,WAAA,IAAA,MAAA,eACA,UAAA,iBAGF,gBACE,UAAA,KCjFF,aACE,QAAA,aACA,WAAA,IACA,eAAA,OACA,OAAA,KACA,iBAAA,aACA,QAAA,GAEA,yBACE,QAAA,aACA,QAAA,GAKJ,gBACE,WAAA,KAGF,gBACE,WAAA,KAGF,gBACE,WAAA,MAKA,+BACE,kBAAA,iBAAA,GAAA,YAAA,SAAA,UAAA,iBAAA,GAAA,YAAA,SAIJ,oCACE,IACE,QAAA,IAFJ,4BACE,IACE,QAAA,IAIJ,kBACE,mBAAA,8DAAA,WAAA,8DACA,kBAAA,KAAA,KAAA,UAAA,KAAA,KACA,kBAAA,iBAAA,GAAA,OAAA,SAAA,UAAA,iBAAA,GAAA,OAAA,SAGF,oCACE,KACE,sBAAA,MAAA,GAAA,cAAA,MAAA,IAFJ,4BACE,KACE,sBAAA,MAAA,GAAA,cAAA,MAAA,IH9CF,iBACE,QAAA,MACA,MAAA,KACA,QAAA,GIJF,cACE,MAAA,QAGE,oBAAA,oBAEE,MAAA,QANN,gBACE,MAAA,QAGE,sBAAA,sBAEE,MAAA,QANN,cACE,MAAA,QAGE,oBAAA,oBAEE,MAAA,QANN,WACE,MAAA,QAGE,iBAAA,iBAEE,MAAA,QANN,cACE,MAAA,QAGE,oBAAA,oBAEE,MAAA,QANN,aACE,MAAA,QAGE,mBAAA,mBAEE,MAAA,QANN,YACE,MAAA,QAGE,kBAAA,kBAEE,MAAA,QANN,WACE,MAAA,QAGE,iBAAA,iBAEE,MAAA,QCLR,OACE,SAAA,SACA,MAAA,KAEA,eACE,QAAA,MACA,YAAA,uBACA,QAAA,GAGF,SACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,MAAA,KACA,OAAA,KAKF,WACE,kBAAA,KADF,WACE,kBAAA,mBADF,YACE,kBAAA,oBADF,YACE,kBAAA,oBCrBJ,WACE,SAAA,MACA,IAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,KAGF,cACE,SAAA,MACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,KAQE,YACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KjDqCF,yBiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,yBiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,yBiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,0BiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,0BiDxCA,gBACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MCzBN,QACE,QAAA,KACA,eAAA,IACA,YAAA,OACA,WAAA,QAGF,QACE,QAAA,KACA,KAAA,EAAA,EAAA,KACA,eAAA,OACA,WAAA,QCRF,iB5Dk4MA,0D6D93ME,SAAA,mBACA,MAAA,cACA,OAAA,cACA,QAAA,YACA,OAAA,eACA,SAAA,iBACA,KAAA,wBACA,YAAA,iBACA,OAAA,YCXA,uBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EACA,QAAA,GCRJ,eCAE,SAAA,OACA,cAAA,SACA,YAAA,OCNF,IACE,QAAA,aACA,WAAA,QACA,MAAA,IACA,WAAA,IACA,iBAAA,aACA,QAAA,ICyDM,gBAOI,eAAA,mBAPJ,WAOI,eAAA,cAPJ,cAOI,eAAA,iBAPJ,cAOI,eAAA,iBAPJ,mBAOI,eAAA,sBAPJ,gBAOI,eAAA,mBAPJ,aAOI,MAAA,eAPJ,WAOI,MAAA,gBAPJ,YAOI,MAAA,eAPJ,WAOI,QAAA,YAPJ,YAOI,QAAA,cAPJ,YAOI,QAAA,aAPJ,YAOI,QAAA,cAPJ,aAOI,QAAA,YAPJ,eAOI,SAAA,eAPJ,iBAOI,SAAA,iBAPJ,kBAOI,SAAA,kBAPJ,iBAOI,SAAA,iBAPJ,UAOI,QAAA,iBAPJ,gBAOI,QAAA,uBAPJ,SAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,SAOI,QAAA,gBAPJ,aAOI,QAAA,oBAPJ,cAOI,QAAA,qBAPJ,QAOI,QAAA,eAPJ,eAOI,QAAA,sBAPJ,QAOI,QAAA,eAPJ,QAOI,WAAA,EAAA,MAAA,KAAA,0BAPJ,WAOI,WAAA,EAAA,QAAA,OAAA,2BAPJ,WAOI,WAAA,EAAA,KAAA,KAAA,2BAPJ,aAOI,WAAA,eAPJ,iBAOI,SAAA,iBAPJ,mBAOI,SAAA,mBAPJ,mBAOI,SAAA,mBAPJ,gBAOI,SAAA,gBAPJ,iBAOI,SAAA,yBAAA,SAAA,iBAPJ,OAOI,IAAA,YAPJ,QAOI,IAAA,cAPJ,SAOI,IAAA,eAPJ,UAOI,OAAA,YAPJ,WAOI,OAAA,cAPJ,YAOI,OAAA,eAPJ,SAOI,KAAA,YAPJ,UAOI,KAAA,cAPJ,WAOI,KAAA,eAPJ,OAOI,MAAA,YAPJ,QAOI,MAAA,cAPJ,SAOI,MAAA,eAPJ,kBAOI,UAAA,+BAPJ,oBAOI,UAAA,2BAPJ,oBAOI,UAAA,2BAPJ,QAOI,OAAA,IAAA,MAAA,kBAPJ,UAOI,OAAA,YAPJ,YAOI,WAAA,IAAA,MAAA,kBAPJ,cAOI,WAAA,YAPJ,YAOI,aAAA,IAAA,MAAA,kBAPJ,cAOI,aAAA,YAPJ,eAOI,cAAA,IAAA,MAAA,kBAPJ,iBAOI,cAAA,YAPJ,cAOI,YAAA,IAAA,MAAA,kBAPJ,gBAOI,YAAA,YAPJ,gBAOI,aAAA,kBAPJ,kBAOI,aAAA,kBAPJ,gBAOI,aAAA,kBAPJ,aAOI,aAAA,kBAPJ,gBAOI,aAAA,kBAPJ,eAOI,aAAA,kBAPJ,cAOI,aAAA,kBAPJ,aAOI,aAAA,kBAPJ,cAOI,aAAA,eAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,MAOI,MAAA,cAPJ,MAOI,MAAA,cAPJ,MAOI,MAAA,cAPJ,OAOI,MAAA,eAPJ,QAOI,MAAA,eAPJ,QAOI,UAAA,eAPJ,QAOI,MAAA,gBAPJ,YAOI,UAAA,gBAPJ,MAOI,OAAA,cAPJ,MAOI,OAAA,cAPJ,MAOI,OAAA,cAPJ,OAOI,OAAA,eAPJ,QAOI,OAAA,eAPJ,QAOI,WAAA,eAPJ,QAOI,OAAA,gBAPJ,YAOI,WAAA,gBAPJ,WAOI,KAAA,EAAA,EAAA,eAPJ,UAOI,eAAA,cAPJ,aAOI,eAAA,iBAPJ,kBAOI,eAAA,sBAPJ,qBAOI,eAAA,yBAPJ,aAOI,UAAA,YAPJ,aAOI,UAAA,YAPJ,eAOI,YAAA,YAPJ,eAOI,YAAA,YAPJ,WAOI,UAAA,eAPJ,aAOI,UAAA,iBAPJ,mBAOI,UAAA,uBAPJ,OAOI,IAAA,YAPJ,OAOI,IAAA,iBAPJ,OAOI,IAAA,gBAPJ,OAOI,IAAA,eAPJ,OAOI,IAAA,iBAPJ,OAOI,IAAA,eAPJ,uBAOI,gBAAA,qBAPJ,qBAOI,gBAAA,mBAPJ,wBAOI,gBAAA,iBAPJ,yBAOI,gBAAA,wBAPJ,wBAOI,gBAAA,uBAPJ,wBAOI,gBAAA,uBAPJ,mBAOI,YAAA,qBAPJ,iBAOI,YAAA,mBAPJ,oBAOI,YAAA,iBAPJ,sBAOI,YAAA,mBAPJ,qBAOI,YAAA,kBAPJ,qBAOI,cAAA,qBAPJ,mBAOI,cAAA,mBAPJ,sBAOI,cAAA,iBAPJ,uBAOI,cAAA,wBAPJ,sBAOI,cAAA,uBAPJ,uBAOI,cAAA,kBAPJ,iBAOI,WAAA,eAPJ,kBAOI,WAAA,qBAPJ,gBAOI,WAAA,mBAPJ,mBAOI,WAAA,iBAPJ,qBAOI,WAAA,mBAPJ,oBAOI,WAAA,kBAPJ,aAOI,MAAA,aAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,KAOI,OAAA,YAPJ,KAOI,OAAA,iBAPJ,KAOI,OAAA,gBAPJ,KAOI,OAAA,eAPJ,KAOI,OAAA,iBAPJ,KAOI,OAAA,eAPJ,QAOI,OAAA,eAPJ,MAOI,aAAA,YAAA,YAAA,YAPJ,MAOI,aAAA,iBAAA,YAAA,iBAPJ,MAOI,aAAA,gBAAA,YAAA,gBAPJ,MAOI,aAAA,eAAA,YAAA,eAPJ,MAOI,aAAA,iBAAA,YAAA,iBAPJ,MAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,MAOI,WAAA,YAAA,cAAA,YAPJ,MAOI,WAAA,iBAAA,cAAA,iBAPJ,MAOI,WAAA,gBAAA,cAAA,gBAPJ,MAOI,WAAA,eAAA,cAAA,eAPJ,MAOI,WAAA,iBAAA,cAAA,iBAPJ,MAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,MAOI,WAAA,YAPJ,MAOI,WAAA,iBAPJ,MAOI,WAAA,gBAPJ,MAOI,WAAA,eAPJ,MAOI,WAAA,iBAPJ,MAOI,WAAA,eAPJ,SAOI,WAAA,eAPJ,MAOI,aAAA,YAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,gBAPJ,MAOI,aAAA,eAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,eAPJ,SAOI,aAAA,eAPJ,MAOI,cAAA,YAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,gBAPJ,MAOI,cAAA,eAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,eAPJ,SAOI,cAAA,eAPJ,MAOI,YAAA,YAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,gBAPJ,MAOI,YAAA,eAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,eAPJ,SAOI,YAAA,eAPJ,KAOI,QAAA,YAPJ,KAOI,QAAA,iBAPJ,KAOI,QAAA,gBAPJ,KAOI,QAAA,eAPJ,KAOI,QAAA,iBAPJ,KAOI,QAAA,eAPJ,MAOI,cAAA,YAAA,aAAA,YAPJ,MAOI,cAAA,iBAAA,aAAA,iBAPJ,MAOI,cAAA,gBAAA,aAAA,gBAPJ,MAOI,cAAA,eAAA,aAAA,eAPJ,MAOI,cAAA,iBAAA,aAAA,iBAPJ,MAOI,cAAA,eAAA,aAAA,eAPJ,MAOI,YAAA,YAAA,eAAA,YAPJ,MAOI,YAAA,iBAAA,eAAA,iBAPJ,MAOI,YAAA,gBAAA,eAAA,gBAPJ,MAOI,YAAA,eAAA,eAAA,eAPJ,MAOI,YAAA,iBAAA,eAAA,iBAPJ,MAOI,YAAA,eAAA,eAAA,eAPJ,MAOI,YAAA,YAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,gBAPJ,MAOI,YAAA,eAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,eAPJ,MAOI,cAAA,YAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,gBAPJ,MAOI,cAAA,eAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,eAPJ,MAOI,eAAA,YAPJ,MAOI,eAAA,iBAPJ,MAOI,eAAA,gBAPJ,MAOI,eAAA,eAPJ,MAOI,eAAA,iBAPJ,MAOI,eAAA,eAPJ,MAOI,aAAA,YAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,gBAPJ,MAOI,aAAA,eAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,eAPJ,gBAOI,YAAA,mCAPJ,MAOI,UAAA,iCAPJ,MAOI,UAAA,gCAPJ,MAOI,UAAA,8BAPJ,MAOI,UAAA,gCAPJ,MAOI,UAAA,kBAPJ,MAOI,UAAA,eAPJ,YAOI,WAAA,iBAPJ,YAOI,WAAA,iBAPJ,UAOI,YAAA,cAPJ,YAOI,YAAA,kBAPJ,WAOI,YAAA,cAPJ,SAOI,YAAA,cAPJ,WAOI,YAAA,iBAPJ,MAOI,YAAA,YAPJ,OAOI,YAAA,eAPJ,SAOI,YAAA,cAPJ,OAOI,YAAA,YAPJ,YAOI,WAAA,eAPJ,UAOI,WAAA,gBAPJ,aAOI,WAAA,iBAPJ,sBAOI,gBAAA,eAPJ,2BAOI,gBAAA,oBAPJ,8BAOI,gBAAA,uBAPJ,gBAOI,eAAA,oBAPJ,gBAOI,eAAA,oBAPJ,iBAOI,eAAA,qBAPJ,WAOI,YAAA,iBAPJ,aAOI,YAAA,iBAPJ,YAOI,UAAA,qBAAA,WAAA,qBAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,gBAIQ,kBAAA,EAGJ,MAAA,+DAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,WAIQ,kBAAA,EAGJ,MAAA,0DAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,aAIQ,kBAAA,EAGJ,MAAA,4DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,WAIQ,kBAAA,EAGJ,MAAA,0DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,WAIQ,kBAAA,EAGJ,MAAA,0DAPJ,YAIQ,kBAAA,EAGJ,MAAA,kBAPJ,eAIQ,kBAAA,EAGJ,MAAA,yBAPJ,eAIQ,kBAAA,EAGJ,MAAA,+BAPJ,YAIQ,kBAAA,EAGJ,MAAA,kBAjBJ,iBACE,kBAAA,KADF,iBACE,kBAAA,IADF,iBACE,kBAAA,KADF,kBACE,kBAAA,EASF,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,cAIQ,gBAAA,EAGJ,iBAAA,6DAPJ,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,SAIQ,gBAAA,EAGJ,iBAAA,wDAPJ,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,WAIQ,gBAAA,EAGJ,iBAAA,0DAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,SAIQ,gBAAA,EAGJ,iBAAA,wDAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,SAIQ,gBAAA,EAGJ,iBAAA,wDAPJ,gBAIQ,gBAAA,EAGJ,iBAAA,sBAjBJ,eACE,gBAAA,IADF,eACE,gBAAA,KADF,eACE,gBAAA,IADF,eACE,gBAAA,KADF,gBACE,gBAAA,EASF,aAOI,iBAAA,6BAPJ,iBAOI,oBAAA,cAAA,iBAAA,cAAA,YAAA,cAPJ,kBAOI,oBAAA,eAAA,iBAAA,eAAA,YAAA,eAPJ,kBAOI,oBAAA,eAAA,iBAAA,eAAA,YAAA,eAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,eAPJ,SAOI,cAAA,iBAPJ,WAOI,cAAA,YAPJ,WAOI,cAAA,gBAPJ,WAOI,cAAA,iBAPJ,WAOI,cAAA,gBAPJ,gBAOI,cAAA,cAPJ,cAOI,cAAA,gBAPJ,aAOI,uBAAA,iBAAA,wBAAA,iBAPJ,aAOI,wBAAA,iBAAA,2BAAA,iBAPJ,gBAOI,2BAAA,iBAAA,0BAAA,iBAPJ,eAOI,0BAAA,iBAAA,uBAAA,iBAPJ,SAOI,WAAA,kBAPJ,WAOI,WAAA,iBzDPR,yByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,yByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,yByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,0ByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,0ByDAI,iBAOI,MAAA,eAPJ,eAOI,MAAA,gBAPJ,gBAOI,MAAA,eAPJ,cAOI,QAAA,iBAPJ,oBAOI,QAAA,uBAPJ,aAOI,QAAA,gBAPJ,YAOI,QAAA,eAPJ,aAOI,QAAA,gBAPJ,iBAOI,QAAA,oBAPJ,kBAOI,QAAA,qBAPJ,YAOI,QAAA,eAPJ,mBAOI,QAAA,sBAPJ,YAOI,QAAA,eAPJ,eAOI,KAAA,EAAA,EAAA,eAPJ,cAOI,eAAA,cAPJ,iBAOI,eAAA,iBAPJ,sBAOI,eAAA,sBAPJ,yBAOI,eAAA,yBAPJ,iBAOI,UAAA,YAPJ,iBAOI,UAAA,YAPJ,mBAOI,YAAA,YAPJ,mBAOI,YAAA,YAPJ,eAOI,UAAA,eAPJ,iBAOI,UAAA,iBAPJ,uBAOI,UAAA,uBAPJ,WAOI,IAAA,YAPJ,WAOI,IAAA,iBAPJ,WAOI,IAAA,gBAPJ,WAOI,IAAA,eAPJ,WAOI,IAAA,iBAPJ,WAOI,IAAA,eAPJ,2BAOI,gBAAA,qBAPJ,yBAOI,gBAAA,mBAPJ,4BAOI,gBAAA,iBAPJ,6BAOI,gBAAA,wBAPJ,4BAOI,gBAAA,uBAPJ,4BAOI,gBAAA,uBAPJ,uBAOI,YAAA,qBAPJ,qBAOI,YAAA,mBAPJ,wBAOI,YAAA,iBAPJ,0BAOI,YAAA,mBAPJ,yBAOI,YAAA,kBAPJ,yBAOI,cAAA,qBAPJ,uBAOI,cAAA,mBAPJ,0BAOI,cAAA,iBAPJ,2BAOI,cAAA,wBAPJ,0BAOI,cAAA,uBAPJ,2BAOI,cAAA,kBAPJ,qBAOI,WAAA,eAPJ,sBAOI,WAAA,qBAPJ,oBAOI,WAAA,mBAPJ,uBAOI,WAAA,iBAPJ,yBAOI,WAAA,mBAPJ,wBAOI,WAAA,kBAPJ,iBAOI,MAAA,aAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,gBAOI,MAAA,YAPJ,SAOI,OAAA,YAPJ,SAOI,OAAA,iBAPJ,SAOI,OAAA,gBAPJ,SAOI,OAAA,eAPJ,SAOI,OAAA,iBAPJ,SAOI,OAAA,eAPJ,YAOI,OAAA,eAPJ,UAOI,aAAA,YAAA,YAAA,YAPJ,UAOI,aAAA,iBAAA,YAAA,iBAPJ,UAOI,aAAA,gBAAA,YAAA,gBAPJ,UAOI,aAAA,eAAA,YAAA,eAPJ,UAOI,aAAA,iBAAA,YAAA,iBAPJ,UAOI,aAAA,eAAA,YAAA,eAPJ,aAOI,aAAA,eAAA,YAAA,eAPJ,UAOI,WAAA,YAAA,cAAA,YAPJ,UAOI,WAAA,iBAAA,cAAA,iBAPJ,UAOI,WAAA,gBAAA,cAAA,gBAPJ,UAOI,WAAA,eAAA,cAAA,eAPJ,UAOI,WAAA,iBAAA,cAAA,iBAPJ,UAOI,WAAA,eAAA,cAAA,eAPJ,aAOI,WAAA,eAAA,cAAA,eAPJ,UAOI,WAAA,YAPJ,UAOI,WAAA,iBAPJ,UAOI,WAAA,gBAPJ,UAOI,WAAA,eAPJ,UAOI,WAAA,iBAPJ,UAOI,WAAA,eAPJ,aAOI,WAAA,eAPJ,UAOI,aAAA,YAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,gBAPJ,UAOI,aAAA,eAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,eAPJ,aAOI,aAAA,eAPJ,UAOI,cAAA,YAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,gBAPJ,UAOI,cAAA,eAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,eAPJ,aAOI,cAAA,eAPJ,UAOI,YAAA,YAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,gBAPJ,UAOI,YAAA,eAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,eAPJ,aAOI,YAAA,eAPJ,SAOI,QAAA,YAPJ,SAOI,QAAA,iBAPJ,SAOI,QAAA,gBAPJ,SAOI,QAAA,eAPJ,SAOI,QAAA,iBAPJ,SAOI,QAAA,eAPJ,UAOI,cAAA,YAAA,aAAA,YAPJ,UAOI,cAAA,iBAAA,aAAA,iBAPJ,UAOI,cAAA,gBAAA,aAAA,gBAPJ,UAOI,cAAA,eAAA,aAAA,eAPJ,UAOI,cAAA,iBAAA,aAAA,iBAPJ,UAOI,cAAA,eAAA,aAAA,eAPJ,UAOI,YAAA,YAAA,eAAA,YAPJ,UAOI,YAAA,iBAAA,eAAA,iBAPJ,UAOI,YAAA,gBAAA,eAAA,gBAPJ,UAOI,YAAA,eAAA,eAAA,eAPJ,UAOI,YAAA,iBAAA,eAAA,iBAPJ,UAOI,YAAA,eAAA,eAAA,eAPJ,UAOI,YAAA,YAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,gBAPJ,UAOI,YAAA,eAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,eAPJ,UAOI,cAAA,YAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,gBAPJ,UAOI,cAAA,eAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,eAPJ,UAOI,eAAA,YAPJ,UAOI,eAAA,iBAPJ,UAOI,eAAA,gBAPJ,UAOI,eAAA,eAPJ,UAOI,eAAA,iBAPJ,UAOI,eAAA,eAPJ,UAOI,aAAA,YAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,gBAPJ,UAOI,aAAA,eAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,eAPJ,gBAOI,WAAA,eAPJ,cAOI,WAAA,gBAPJ,iBAOI,WAAA,kBCnDZ,0BD4CQ,MAOI,UAAA,iBAPJ,MAOI,UAAA,eAPJ,MAOI,UAAA,kBAPJ,MAOI,UAAA,kBChCZ,aDyBQ,gBAOI,QAAA,iBAPJ,sBAOI,QAAA,uBAPJ,eAOI,QAAA,gBAPJ,cAOI,QAAA,eAPJ,eAOI,QAAA,gBAPJ,mBAOI,QAAA,oBAPJ,oBAOI,QAAA,qBAPJ,cAOI,QAAA,eAPJ,qBAOI,QAAA,sBAPJ,cAOI,QAAA","sourcesContent":["/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-rgb: #{to-rgb($body-color)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}-root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/AdaptiveLayout.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/AdaptiveLayout.razor new file mode 100644 index 00000000..0672119c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/AdaptiveLayout.razor @@ -0,0 +1,38 @@ +@page "/treegrid/adaptivelayout" +@rendermode InteractiveWebAssembly +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using TreeGridUGSample.Components.Data; +

+ +@code { + + private List TreeData { get; set; } + + protected override void OnInitialized() + { + this.TreeData = SelfReferenceData.GetTree().Take(30).ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Aggregate/FooterAggregate.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Aggregate/FooterAggregate.razor new file mode 100644 index 00000000..1a0e4672 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Aggregate/FooterAggregate.razor @@ -0,0 +1,77 @@ +@page "/treegrid/aggregate/footeraggregate" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + @{ + var sumvalue = (context as Syncfusion.Blazor.Grids.AggregateTemplateContext); +
+

Sum: @sumvalue.Sum

+
+ } +
+
+ + + @{ + var truecount = (context as Syncfusion.Blazor.Grids.AggregateTemplateContext); +
+

Approved: @truecount.TrueCount

+
+ } +
+
+
+
+
+ + + + + + + + +
+ +@code { + public List TreeGridData { get; set; } + + public Syncfusion.Blazor.Grids.AggregateTemplateContext model = new Syncfusion.Blazor.Grids.AggregateTemplateContext(); + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public bool Approved { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Approved = true, ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, Approved = false, ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Approved = true, ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Approved = false, Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Approved = true, ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Approved = false, ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Approved = true, ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Approved = false, ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Approved = true, ParentId = 5 }); + return TreeDataCollection; + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Aggregate/FormatAggregate.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Aggregate/FormatAggregate.razor new file mode 100644 index 00000000..fa3b96bd --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Aggregate/FormatAggregate.razor @@ -0,0 +1,43 @@ +@page "/treegrid/aggregate/formataggregate" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + @{ + var sumvalue = (context as Syncfusion.Blazor.Grids.AggregateTemplateContext); +
+

Sum: @sumvalue.Sum

+
+ } +
+
+
+
+
+ + + + + + + + +
+ +@code { + public List TreeGridData { get; set; } + + public Syncfusion.Blazor.Grids.AggregateTemplateContext model = new Syncfusion.Blazor.Grids.AggregateTemplateContext(); + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Cell.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Cell.razor new file mode 100644 index 00000000..d25e9437 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Cell.razor @@ -0,0 +1,77 @@ +@page "/treegrid/cell" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void querycellinfo(QueryCellInfoEventArgs Args) + { + if (Args.Column.Field == "Progress" && Args.Data.Progress > 70 && Args.Data.Progress <= 100) + { + String[] s1 = new String[1] { "intro" }; + Args.Cell.AddClass(s1); + } + else if (Args.Column.Field == "Progress" && Args.Data.Progress > 20) + { + String[] s2 = new String[1] { "intro1" }; + Args.Cell.AddClass(s2); + } + } + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1 for the Treegrid", Duration = 4, Progress = 80, Priority = "Low", ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Clipboard.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Clipboard.razor new file mode 100644 index 00000000..6b83401c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Clipboard.razor @@ -0,0 +1,124 @@ +@page "/treegrid/clipboard" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.Grids + +
+ Copy + Copy With Header +
+ +
+
Select Hierarchy mode
+ + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + +
+

Event Trace

+
+
+ @foreach (var eventName in EventNames) + { +

@eventName event called

+ } +
+
+ +
+
+@code +{ + SfTreeGrid TreeGrid; + public List TreeData { get; set; } + public string CopyMode { get; set; } = "Parent"; + private List EventNames { get; set; } = new List(); + public CopyHierarchyType CopyType { get; set; } = CopyHierarchyType.Parent; + public List CopyModes { get; set; } = new List(); + private bool ClearingByButton { get; set; } + private void ClearEventNames() + { + EventNames = new List(); + ClearingByButton = true; + } + public class DropdownData + { + public string Id { get; set; } + public string Mode { get; set; } + } + + protected override void OnInitialized() + { + this.TreeData = BusinessObject.GetSelfDataSource().ToList(); + this.CopyModes.Add(new DropdownData() { Id = "Parent", Mode = "Parent" }); + this.CopyModes.Add(new DropdownData() { Id = "Child", Mode = "Child" }); + this.CopyModes.Add(new DropdownData() { Id = "Both", Mode = "Both" }); + this.CopyModes.Add(new DropdownData() { Id = "None", Mode = "None" }); + } + + private async void OnTypeChange(Syncfusion.Blazor.DropDowns.ChangeEventArgs Args) + { + if (Args.Value == "Parent") + { + CopyType = CopyHierarchyType.Parent; + } + else if (Args.Value == "Child") + { + CopyType = CopyHierarchyType.Child; + } + else if (Args.Value == "Both") + { + CopyType = CopyHierarchyType.Both; + } + else if (Args.Value == "None") + { + CopyType = CopyHierarchyType.None; + } + } + public void BeforeCopyPasteHandler(Syncfusion.Blazor.TreeGrid.BeforeCopyPasteEventArgs args) + { + EventNames.Insert(0, "BeforeCopyPaste"); + } + public void BeforeCellPasteHandler(Syncfusion.Blazor.TreeGrid.BeforeCellPasteEventArgs args) + { + EventNames.Insert(0, "BeforeCellPaste"); + } + public async void Copy() + { + await this.TreeGrid.CopyAsync(); + } + + public async void CopyHeader() + { + await this.TreeGrid.CopyAsync(true); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/AutoFit.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/AutoFit.razor new file mode 100644 index 00000000..ffe496a8 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/AutoFit.razor @@ -0,0 +1,32 @@ +

AutoFit

+@page "/TreeGrid/Column/auto-fit" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void OnDataBound(object e) + { + this.TreeGrid.AutoFitColumnsAsync(new string[] { "TaskName" }); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/CheckBox_Column.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/CheckBox_Column.razor new file mode 100644 index 00000000..a9c6540b --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/CheckBox_Column.razor @@ -0,0 +1,24 @@ +

CheckBox_Column

+@page "/TreeGrid/Column/checkbox_column" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnChooser.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnChooser.razor new file mode 100644 index 00000000..081a2270 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnChooser.razor @@ -0,0 +1,24 @@ +@page "/TreeGrid/Column/column_chooser" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public string[] ToolbarItems = new string[] { "ColumnChooser" }; + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnMenu.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnMenu.razor new file mode 100644 index 00000000..98d9948c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnMenu.razor @@ -0,0 +1,24 @@ +@page "/TreeGrid/Column/column_menu" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnReorder.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnReorder.razor new file mode 100644 index 00000000..e45e9eb2 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnReorder.razor @@ -0,0 +1,29 @@ +@page "/treedata/column/reorder" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.Buttons; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + private SfTreeGrid TreeGrid; + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + private async Task ReorderColumn() + { + await TreeGrid.ReorderColumnsAsync(new List() { "TaskName", "Duration" }, "Progress"); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnTemplate.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnTemplate.razor new file mode 100644 index 00000000..90142a4b --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ColumnTemplate.razor @@ -0,0 +1,203 @@ +@page "/TreeGrid/Column/column_template" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper +
+
+
+ + + + + + + + + + + + +
+
+
+ + + +@code { + private IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } + public class Employee + { + public string Name { get; set; } + public string FullName { get; set; } + public DateTime DOB { get; set; } + public string Designation { get; set; } + public string EmpID { get; set; } + public int? EmployeeID { get; set; } + public string Country { get; set; } + public string Address { get; set; } + public string Contact { get; set; } + public int? ParentId { get; set; } + public static List GetTemplateData() + { + List DataCollection = new List(); + DataCollection.Add(new Employee + { + Name = "Robert King", + FullName = "RobertKing", + Designation = "Chief Executive Officer", + EmployeeID = 1, + EmpID = "EMP001", + Address = "507 - 20th Ave. E.Apt. 2A, Seattle", + Contact = "(206) 555-9857", + Country = "USA", + DOB = new DateTime(1992, 2, 15), + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "David William", + FullName = "DavidWilliam", + Designation = "Vice President", + EmployeeID = 2, + EmpID = "EMP004", + Address = "722 Moss Bay Blvd., Kirkland", + Contact = "(206) 555-3412", + Country = "USA", + DOB = new DateTime(1990, 5, 20), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Nancy Davolio", + FullName = "NancyDavolio", + Designation = "Marketing Executive", + EmployeeID = 3, + EmpID = "EMP035", + Address = "4110 Old Redmond Rd., Redmond", + Contact = "(206) 555-8122", + Country = "USA", + DOB = new DateTime(1988, 3, 19), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Andrew Fuller", + FullName = "AndrewFuller", + Designation = "Sales Representative", + EmployeeID = 4, + EmpID = "EMP045", + Address = "14 Garrett Hill, London", + Contact = "(71) 555-4848", + Country = "UK", + DOB = new DateTime(1993, 9, 20), + ParentId = 1 + }); + DataCollection.Add(new Employee + { + Name = "Anne Dodsworth", + FullName = "AnneDodsworth", + Designation = "Sales Representative", + EmployeeID = 5, + EmpID = "EMP091", + Address = "4726 - 11th Ave. N.E., Seattle", + Contact = "(206) 555-1189", + Country = "USA", + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "Michael Suyama", + FullName = "MichaelSuyama", + Designation = "Sales Representative", + EmployeeID = 6, + EmpID = "EMP110", + Address = "Coventry House Miner Rd., London", + Contact = "(71) 555-3636", + Country = "UK", + ParentId = 5 + }); + DataCollection.Add(new Employee + { + Name = "Janet Leverling", + FullName = "JanetLeverling", + Designation = "Sales Coordinator", + EmployeeID = 7, + EmpID = "EMP131", + Address = "Edgeham Hollow Winchester Way, London", + Contact = "(71) 555-3636", + Country = "UK", + ParentId = 5 + }); + DataCollection.Add(new Employee + { + Name = "Romey Wilson", + FullName = "RomeyWilson", + Designation = "Sales Executive", + EmployeeID = 8, + EmpID = "EMP039", + Address = "7 Houndstooth Rd., London", + Contact = "(71) 555-3690", + Country = "UK", + DOB = new DateTime(1994, 2, 2), + ParentId = null + }); + DataCollection.Add(new Employee + { + Name = "Margaret Peacock", + FullName = "MargaretPeacock", + Designation = "Sales Representative", + EmployeeID = 9, + EmpID = "EMP213", + Address = "4726 - 11th Ave. N.E., California", + Contact = "(206) 555-1989", + Country = "USA", + ParentId = 8 + }); + DataCollection.Add(new Employee + { + Name = "Steven Buchanan", + FullName = "StevenBuchanan", + Designation = "Sales Representative", + EmployeeID = 11, + EmpID = "EMP197", + Address = "200 Lincoln Ave, Salinas, CA 93901", + Contact = "(831) 758-7408", + Country = "USA", + ParentId = 8 + }); + DataCollection.Add(new Employee + { + Name = "Tedd Lawson", + FullName = "TeddLawson", + Designation = "Sales Representative", + EmployeeID = 12, + EmpID = "EMP167", + Address = "200 Lincoln Ave, Salinas, CA 93901", + Contact = "(831) 758-7368", + Country = "USA", + ParentId = 8 + }); + return DataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ComplexDataBinding.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ComplexDataBinding.razor new file mode 100644 index 00000000..cceae048 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/ComplexDataBinding.razor @@ -0,0 +1,48 @@ +

ComplexDataBinding

+@page "/TreeGrid/DataBinding/complex-data-binding" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid + + + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskId { get; set; } + public TaskDetails Task { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public class TaskDetails + { + public string TaskName { get; set; } + public int Duration { get; set; } + } + public List TreeData = new List(); + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Parent Task 1", Duration = 50000 }, TaskId = 1, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child task 1", Duration = 400000 }, TaskId = 2, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child Task 2", Duration = 500000 }, TaskId = 3, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Parent Task 2", Duration = 50000 }, TaskId = 4, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child task 1", Duration = 400000 }, TaskId = 5, Progress = 80, ParentId = 4, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { Task = new TaskDetails() { TaskName = "Child Task 2", Duration = 500000 }, TaskId = 6, Progress = 65, ParentId = 4, Priority = "Critical" }); + + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Complex_Expando_DataBinding.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Complex_Expando_DataBinding.razor new file mode 100644 index 00000000..733625ad --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Complex_Expando_DataBinding.razor @@ -0,0 +1,65 @@ +

Complex_Expando_DataBinding

+@page "/TreeGrid/DataBinding/complex-expando-databinding" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using System.Dynamic; + + + + + + + + + + +@code { + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = GetData().ToList(); + } + public static List Data = new List(); + public static int ParentRecordID { get; set; } + public static int ChildRecordID { get; set; } + public static List GetData() + { + Data.Clear(); + ParentRecordID = 0; + ChildRecordID = 0; + for (var i = 1; i <= 2; i++) + { + + dynamic ParentRecord = new ExpandoObject(); + dynamic Task = new ExpandoObject(); + Task.TaskName = "Parent Task " + i; + Task.Duration = ParentRecordID % 2 == 0 ? 32 : 76; + ParentRecord.TaskID = ++ParentRecordID; + ParentRecord.Task = Task; + ParentRecord.Progress = ParentRecordID % 2 == 0 ? "In Progress" : "Open"; + ParentRecord.Priority = ParentRecordID % 2 == 0 ? "High" : "Low"; + ParentRecord.ParentID = null; + Data.Add(ParentRecord); + AddChildRecords(ParentRecordID); + } + return Data; + } + public static void AddChildRecords(int ParentId) + { + for (var i = 1; i < 3; i++) + { + + dynamic ChildRecord = new ExpandoObject(); + dynamic Task = new ExpandoObject(); + Task.TaskName = "Child Task " + ++ChildRecordID; + Task.Duration = ParentRecordID % 3 == 0 ? 64 : 98; + ChildRecord.TaskID = ++ParentRecordID; + ChildRecord.Task = Task; + ChildRecord.Progress = ParentRecordID % 3 == 0 ? "Validated" : "Closed"; + ChildRecord.Priority = ParentRecordID % 3 == 0 ? "Low" : "Critical"; + ChildRecord.ParentID = ParentId; + Data.Add(ChildRecord); + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Format.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Format.razor new file mode 100644 index 00000000..b0f12c99 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Format.razor @@ -0,0 +1,51 @@ +

Format

+@page "/TreeGrid/Column/format" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDataFormat.GetDataFormat().ToList(); + } + public class TreeDataFormat + { + public TreeDataFormat() { } + public int OrderID { get; set; } + public string OrderName { get; set; } + public double Price { get; set; } + public DateTime? OrderDate { get; set; } + public int? ParentId { get; set; } + + public static List GetDataFormat() + { + List data = new List() + { + new TreeDataFormat() { OrderID= 1,OrderName= "Order 1",OrderDate = new DateTime(1963, 2, 15),ParentId = null,Price=133.66 }, + new TreeDataFormat() { OrderID= 11, ParentId = 1, OrderName= "Mackerel",OrderDate = new DateTime(1966, 3, 19), Price= 28.20}, + new TreeDataFormat() { OrderID= 12, ParentId = 1, OrderName= "Mackerel",OrderDate = new DateTime(1963, 2, 15), Price= 25.92}, + new TreeDataFormat() { OrderID= 13, ParentId = 1, OrderName= "Mackerel", OrderDate = new DateTime(1966, 3, 19),Price= 52.68}, + new TreeDataFormat() { OrderID= 14, ParentId = 1, OrderName= "Mackerel",OrderDate = new DateTime(1963, 2, 15), Price= 11.25}, + new TreeDataFormat() { OrderID= 15, ParentId = 1, OrderName= "Mackerel", OrderDate = new DateTime(1980, 9, 20),Price= 15.61}, + new TreeDataFormat() { OrderID= 2,OrderName= "Order 2",ParentId = null,OrderDate = new DateTime(1980, 9, 20),Price=212.33}, + new TreeDataFormat() { OrderID= 21, ParentId = 2, OrderName= "Tilapias",OrderDate = new DateTime(1966, 3, 19),Price= 55.50}, + new TreeDataFormat() { OrderID= 22, ParentId = 2, OrderName= "White Shrimp",OrderDate = new DateTime(1963, 2, 15), Price= 41.70}, + new TreeDataFormat() { OrderID= 23, ParentId = 2, OrderName= "Fresh Cheese",OrderDate = new DateTime(1980, 9, 20),Price= 39.20}, + new TreeDataFormat() { OrderID= 24, ParentId = 2, OrderName= "Blue Veined Cheese",OrderDate = new DateTime(1966, 3, 19),Price= 38.76}, + new TreeDataFormat() { OrderID= 25, ParentId = 2, OrderName= "Butter",OrderDate = new DateTime(1966, 3, 19), Price= 37.17}}; + return data; + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/HeaderTemplate.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/HeaderTemplate.razor new file mode 100644 index 00000000..f317e8d3 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/HeaderTemplate.razor @@ -0,0 +1,53 @@ +

Header Template

+@page "/TreeGrid/Column/header-template" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + +
+ Name +
+
+
+ + + +
+
+ + + + +@code { + public Employee model = new Employee(); + public IEnumerable TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = Employee.GetTemplateData(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Resize.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Resize.razor new file mode 100644 index 00000000..e72b82b4 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Resize.razor @@ -0,0 +1,22 @@ +@page "/TreeGrid/Column/resize" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Show_Hide_Column.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Show_Hide_Column.razor new file mode 100644 index 00000000..e8998bc4 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Show_Hide_Column.razor @@ -0,0 +1,37 @@ +

Show_Hide_Column

+@page "/TreeGrid/Column/show_hide_column" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeGridData { get; set; } + public string[] ColumnItems = new string[] { "Task ID", "Duration" }; + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + private void HideColumns() + { + this.TreeGrid.HideColumnsAsync(ColumnItems); //hide by HeaderText + } + private void ShowColumns() + { + this.TreeGrid.ShowColumnsAsync(ColumnItems); //show by HeaderText + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Template_ColumnChooser.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Template_ColumnChooser.razor new file mode 100644 index 00000000..f0015832 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Column/Template_ColumnChooser.razor @@ -0,0 +1,77 @@ +@page "/TreeGrid/Column/template_column_chooser" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid; + + + + + + + @{ + var cxt = context as ColumnChooserFooterTemplateContext; + var visibles = cxt.Columns.Where(x => x.Visible).Select(x => x.HeaderText).ToArray(); + var hiddens = cxt.Columns.Where(x => !x.Visible).Select(x => x.HeaderText).ToArray(); + } + Ok + Cancel + + + + + + + + + + + +@code + { + public SfTreeGrid TreeGrid { get; set; } + private List GridData; + protected override void OnInitialized() + { + GridData = GetTree1(); + } + + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int Duration { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + public List TreeGridData = new List(); + public List GetTree1() + { + if (TreeGridData.Count == 0) + { + TreeGridData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null, Priority = "High" }); + TreeGridData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeGridData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeGridData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", Duration = 6, Progress = 77, ParentId = null, Priority = "Low" }); + TreeGridData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", Duration = 9, Progress = 25, ParentId = 4, Priority = "Normal" }); + TreeGridData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", Duration = 9, Progress = 7, ParentId = 5, Priority = "Normal" }); + TreeGridData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", Duration = 4, Progress = 45, ParentId = null, Priority = "High" }); + TreeGridData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", Duration = 3, Progress = 38, ParentId = 7, Priority = "Critical" }); + TreeGridData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", Duration = 7, Progress = 70, ParentId = 7, Priority = "Low" }); + } + return TreeGridData; + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ContextMenu/CustomContextMenu.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ContextMenu/CustomContextMenu.razor new file mode 100644 index 00000000..f48a7371 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ContextMenu/CustomContextMenu.razor @@ -0,0 +1,43 @@ +@page "/treegrid/contextmenu/customcontextmenu" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid; +@using TreeGridUGSample.Components.Data + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeData = new List(); + + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 50000, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 400000, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 500000, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", Duration = 609890, Progress = 77, ParentId = null, Priority = "Low" }); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", Duration = 9778686, Progress = 25, ParentId = 4, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", Duration = 954359, Progress = 7, ParentId = 5, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", Duration = 478708, Progress = 45, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", Duration = 36786979, Progress = 38, ParentId = 7, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", Duration = 778907897, Progress = 70, ParentId = 7, Priority = "Low" }); + } + + public void OnContextMenuClick(Syncfusion.Blazor.Grids.ContextMenuClickEventArgs args) + { + if (args.Item.Id == "copywithheader") + { + this.TreeGrid.CopyAsync(true); + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ContextMenu/DefaultContextMenu.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ContextMenu/DefaultContextMenu.razor new file mode 100644 index 00000000..3c841f70 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ContextMenu/DefaultContextMenu.razor @@ -0,0 +1,32 @@ +@page "/treegrid/contextmenu/defaultcontextmenu" +@rendermode InteractiveWebAssembly +@using Syncfusion.Blazor.TreeGrid; +@using TreeGridUGSample.Components.Data + + + + + + + + + + + + + +@code { + public List TreeData = new List(); + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 50000, Progress = 70, ParentId = null, Priority = "High", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 400000, Progress = 80, ParentId = 1, Priority = "Normal", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 500000, Progress = 65, ParentId = 1, Priority = "Critical", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", Duration = 609890, Progress = 77, ParentId = null, Priority = "Low", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", Duration = 9778686, Progress = 25, ParentId = 4, Priority = "Normal", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", Duration = 954359, Progress = 7, ParentId = 5, Priority = "Normal", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", Duration = 478708, Progress = 45, ParentId = null, Priority = "High", Approved = true }); + TreeData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", Duration = 36786979, Progress = 38, ParentId = 7, Priority = "Critical", Approved = false }); + TreeData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", Duration = 778907897, Progress = 70, ParentId = 7, Priority = "Low", Approved = true }); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Crud_Custom_Adaptor.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Crud_Custom_Adaptor.razor new file mode 100644 index 00000000..25f63e87 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Crud_Custom_Adaptor.razor @@ -0,0 +1,101 @@ +

Crud_Custom_Adaptor

+@page "/TreeGrid/DataBinding/crud-custom-adaptor" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor; + + + + + + + + + + + + + + + + +@code { + public static List TreeData { get; set; } + + protected override void OnInitialized() + { + TreeData = SelfReferenceData.GetTree().ToList(); + } + + // Implementing custom adaptor by extending the DataAdaptor class + public class CustomAdaptor : DataAdaptor + { + // Performs data Read operation + public override object Read(DataManagerRequest dm, string key = null) + { + IEnumerable DataSource = TreeData; + if (dm.Search != null && dm.Search.Count > 0) + { + // Searching + DataSource = DataOperations.PerformSearching(DataSource, dm.Search); + } + if (dm.Sorted != null && dm.Sorted.Count > 0) + { + // Sorting + DataSource = DataOperations.PerformSorting(DataSource, dm.Sorted); + } + if (dm.Where != null && dm.Where.Count > 0) + { + // Filtering + DataSource = DataOperations.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator); + } + int count = DataSource.Cast().Count(); + if (dm.Skip != 0) + { + //Paging + DataSource = DataOperations.PerformSkip(DataSource, dm.Skip); + } + if (dm.Take != 0) + { + DataSource = DataOperations.PerformTake(DataSource, dm.Take); + } + return dm.RequiresCounts ? new DataResult() { Result = DataSource, Count = count } : (object)DataSource; + } + + + // Performs Insert operation + public override object Insert(DataManager dm, object value, string key) + { + TreeData.Insert(0, value as SelfReferenceData); + return value; + } + + // Performs Remove operation + public override object Remove(DataManager dm, object value, string keyField, string key) + { + TreeData.Remove(TreeData.Where(or => or.TaskID == int.Parse(value.ToString())).FirstOrDefault()); + return value; + } + + // Performs Update operation + public override object Update(DataManager dm, object value, string keyField, string key) + { + var data = TreeData.Where(or => or.TaskID == (value as SelfReferenceData).TaskID).FirstOrDefault(); + if (data != null) + { + data.TaskID = (value as SelfReferenceData).TaskID; + data.TaskName = (value as SelfReferenceData).TaskName; + data.StartDate = (value as SelfReferenceData).StartDate; + data.Duration = (value as SelfReferenceData).Duration; + data.Priority = (value as SelfReferenceData).Priority; + data.Progress = (value as SelfReferenceData).Progress; + } + return value; + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/CustomDataAdaptor.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/CustomDataAdaptor.razor new file mode 100644 index 00000000..fdc6475e --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/CustomDataAdaptor.razor @@ -0,0 +1,69 @@ +

CustomAdaptor

+@page "/TreeGrid/DataBinding/custom-adaptor" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor; + + + + + + + + + + + + + + + +@code { + public static List TreeData { get; set; } + + protected override void OnInitialized() + { + TreeData = SelfReferenceData.GetTree().ToList(); + } + + // Implementing custom adaptor by extending the DataAdaptor class + public class CustomAdaptor : DataAdaptor + { + // Performs data Read operation + public override object Read(DataManagerRequest dm, string key = null) + { + IEnumerable DataSource = TreeData; + if (dm.Search != null && dm.Search.Count > 0) + { + // Searching + DataSource = DataOperations.PerformSearching(DataSource, dm.Search); + } + if (dm.Sorted != null && dm.Sorted.Count > 0) + { + // Sorting + DataSource = DataOperations.PerformSorting(DataSource, dm.Sorted); + } + if (dm.Where != null && dm.Where.Count > 0) + { + // Filtering + DataSource = DataOperations.PerformFiltering(DataSource, dm.Where, dm.Where[0].Operator); + } + int count = DataSource.Cast().Count(); + if (dm.Skip != 0) + { + //Paging + DataSource = DataOperations.PerformSkip(DataSource, dm.Skip); + } + if (dm.Take != 0) + { + DataSource = DataOperations.PerformTake(DataSource, dm.Take); + } + return dm.RequiresCounts ? new DataResult() { Result = DataSource, Count = count } : (object)DataSource; + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/DynamicObject.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/DynamicObject.razor new file mode 100644 index 00000000..5550adfa --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/DynamicObject.razor @@ -0,0 +1,97 @@ +

DynamicObject

+@page "/TreeGrid/DataBinding/dynamic-object" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid +@using System.Dynamic + + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = GetData().ToList(); + } + public static List Data = new List(); + public static int ParentRecordID { get; set; } + public static int ChildRecordID { get; set; } + + public static List GetData() + { + Data.Clear(); + ParentRecordID = 0; + ChildRecordID = 0; + for (var i = 1; i <= 3; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ParentRecord = new DynamicDictionary(); + ParentRecord.TaskID = ++ParentRecordID; + ParentRecord.TaskName = "Parent Task " + i; + ParentRecord.StartDate = startingDate; + ParentRecord.Progress = ParentRecordID % 2 == 0 ? "In Progress" : "Open"; + ParentRecord.Priority = ParentRecordID % 2 == 0 ? "High" : "Low"; + ParentRecord.Duration = ParentRecordID % 2 == 0 ? 32 : 76; + ParentRecord.ParentID = null; + Data.Add(ParentRecord); + AddChildRecords(ParentRecordID); + } + return Data; + } + public static void AddChildRecords(int ParentId) + { + for (var i = 1; i < 3; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ChildRecord = new DynamicDictionary(); + ChildRecord.TaskID = ++ParentRecordID; + ChildRecord.TaskName = "Child Task " + ++ChildRecordID; + ChildRecord.StartDate = startingDate; + ChildRecord.Progress = ParentRecordID % 3 == 0 ? "Validated" : "Closed"; + ChildRecord.Priority = ParentRecordID % 3 == 0 ? "Low" : "Critical"; + ChildRecord.Duration = ParentRecordID % 3 == 0 ? 64 : 98; + ChildRecord.ParentID = ParentId; + Data.Add(ChildRecord); + } + } + + public class DynamicDictionary : System.Dynamic.DynamicObject + { + Dictionary dictionary = new Dictionary(); + + public override bool TryGetMember(GetMemberBinder binder, out object result) + { + string name = binder.Name; + return dictionary.TryGetValue(name, out result); + } + public override bool TrySetMember(SetMemberBinder binder, object value) + { + dictionary[binder.Name] = value; + return true; + } + + public override System.Collections.Generic.IEnumerable GetDynamicMemberNames() + { + return this.dictionary?.Keys; + } + + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/ExpandoObject.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/ExpandoObject.razor new file mode 100644 index 00000000..b3a5df79 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/ExpandoObject.razor @@ -0,0 +1,74 @@ +

Expando Object

+@page "/TreeGrid/DataBinding/expando-object" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using System.Dynamic; + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeData { get; set; } + public static List Data = new List(); + protected override void OnInitialized() + { + this.TreeData = GetData().ToList(); + } + + public static int ParentRecordID { get; set; } + public static int ChildRecordID { get; set; } + public static List GetData() + { + Data.Clear(); + ParentRecordID = 0; + ChildRecordID = 0; + for (var i = 1; i <= 60; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ParentRecord = new System.Dynamic.ExpandoObject(); + ParentRecord.TaskID = ++ParentRecordID; + ParentRecord.TaskName = "Parent Task " + i; + ParentRecord.StartDate = startingDate; + ParentRecord.Progress = ParentRecordID % 2 == 0 ? "In Progress" : "Open"; + ParentRecord.Priority = ParentRecordID % 2 == 0 ? "High" : "Low"; + ParentRecord.Duration = ParentRecordID % 2 == 0 ? 32 : 76; + ParentRecord.ParentID = null; + Data.Add(ParentRecord); + AddChildRecords(ParentRecordID); + } + return Data; + } + public static void AddChildRecords(int ParentId) + { + for (var i = 1; i < 4; i++) + { + Random ran = new Random(); + DateTime start = new DateTime(1992, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start.AddDays(ran.Next(range)); + dynamic ChildRecord = new System.Dynamic.ExpandoObject(); + ChildRecord.TaskID = ++ParentRecordID; + ChildRecord.TaskName = "Child Task " + ++ChildRecordID; + ChildRecord.StartDate = startingDate; + ChildRecord.Progress = ParentRecordID % 3 == 0 ? "Validated" : "Closed"; + ChildRecord.Priority = ParentRecordID % 3 == 0 ? "Low" : "Critical"; + ChildRecord.Duration = ParentRecordID % 3 == 0 ? 64 : 98; + ChildRecord.ParentID = ParentId; + Data.Add(ChildRecord); + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Hierarchy-data-binding.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Hierarchy-data-binding.razor new file mode 100644 index 00000000..93a0304a --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Hierarchy-data-binding.razor @@ -0,0 +1,49 @@ +

Hierarchy_data_binding

+@page "/TreeGrid/DataBinding/Hierarchy-data-binding" +@rendermode InteractiveWebAssembly +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int Duration { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public List Children { get; set; } + } + public List TreeData = new List(); + protected override void OnInitialized() + { + List Record1 = new List(); + BusinessObject Child1 = new BusinessObject() { TaskId = 2, TaskName = "Plan timeline", Progress = 100, Duration = 5, Priority = "Normal" }; + BusinessObject Child2 = new BusinessObject() { TaskId = 3, TaskName = "Plan budget", Duration = 5, Progress = 100, Priority = "Low" }; + BusinessObject Child3 = new BusinessObject() { TaskId = 4, TaskName = "Allocate resources", Duration = 5, Progress = 100, Priority = "Critical" }; + Record1.Add(Child1); + Record1.Add(Child2); + Record1.Add(Child3); + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Planning", Duration = 10, Progress = 70, Children = Record1, Priority = "High" }); + + + List Record2 = new List(); + BusinessObject Child4 = new BusinessObject() { TaskId = 6, TaskName = "Software Specification", Progress = 60, Duration = 3, Priority = "Normal" }; + BusinessObject Child5 = new BusinessObject() { TaskId = 7, TaskName = "Develop Prototype", Duration = 3, Progress = 100, Priority = "Critical" }; + + + Record2.Add(Child4); + Record2.Add(Child5); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Design", Duration = 3, Progress = 86, Children = Record2, Priority = "High" }); + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/ObservableCollection.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/ObservableCollection.razor new file mode 100644 index 00000000..08bf8799 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/ObservableCollection.razor @@ -0,0 +1,58 @@ +

Observable Collection

+@page "/TreeGrid/DataBinding/observable-collection" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using System.Collections.ObjectModel + +
+ + + +
+ + + + + + + + + + + +@code { + public ObservableCollection TreeGridData { get; set; } + private int taskCounter = 6; + + protected override void OnInitialized() + { + TreeGridData = TreeData.GetSelfDataSource(); + } + + public void AddRecord() + { + TreeGridData.Add(new TreeData.BusinessObject + { + TaskId = taskCounter++, + TaskName = "New Task", + Duration = 5, + Progress = 50, + Priority = "Normal", + ParentId = null + }); + } + + public void DeleteRecord() + { + if (TreeGridData.Any()) + TreeGridData.Remove(TreeGridData.Last()); + } + + public void UpdateRecord() + { + if (TreeGridData.Any()) + TreeGridData.First().TaskName = "Updated Task Name"; + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/RemoteData.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/RemoteData.razor new file mode 100644 index 00000000..0de15f35 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/RemoteData.razor @@ -0,0 +1,34 @@ +

RemoteData

+@page "/TreeGrid/DataBinding/remote-data" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; + + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskID { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public String Progress { get; set; } + public String Priority { get; set; } + public double? Duration { get; set; } + public int? ParentID { get; set; } + public bool? isParent { get; set; } + public bool? Approved { get; set; } + public int? ParentItem { get; set; } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Self-Reference.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Self-Reference.razor new file mode 100644 index 00000000..ee05ff58 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/DataBinding/Self-Reference.razor @@ -0,0 +1,44 @@ +@page "/TreeGrid/DataBinding/self-reference" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateOnly? StartDate { get; set; } + public TimeOnly? StartTime { get; set; } + public int Duration { get; set; } + public int Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public List TreeData = new List(); + + protected override void OnInitialized() + { + TreeData.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateOnly(2021, 03, 02), StartTime = new TimeOnly(10, 00, 00), Duration = 10, Progress = 70, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateOnly(2021, 03, 04), StartTime = new TimeOnly(11, 30, 00), Duration = 4, Progress = 80, ParentId = 1, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateOnly(2021, 03, 06), StartTime = new TimeOnly(12, 00, 00), Duration = 5, Progress = 65, ParentId = 1, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 4, TaskName = "Parent Task 2", StartDate = new DateOnly(2021, 03, 08), StartTime = new TimeOnly(13, 30, 00), Duration = 6, Progress = 77, ParentId = null, Priority = "Low" }); + TreeData.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", StartDate = new DateOnly(2021, 07, 10), StartTime = new TimeOnly(14, 00, 00), Duration = 9, Progress = 25, ParentId = 4, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", StartDate = new DateOnly(2021, 10, 12), StartTime = new TimeOnly(16, 00, 00), Duration = 9, Progress = 7, ParentId = 5, Priority = "Normal" }); + TreeData.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", StartDate = new DateOnly(2021, 10, 14), StartTime = new TimeOnly(17, 30, 00), Duration = 4, Progress = 45, ParentId = null, Priority = "High" }); + TreeData.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", StartDate = new DateOnly(2021, 10, 16), StartTime = new TimeOnly(18, 00, 00), Duration = 3, Progress = 38, ParentId = 7, Priority = "Critical" }); + TreeData.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", StartDate = new DateOnly(2021, 02, 18), StartTime = new TimeOnly(19, 30, 00), Duration = 7, Progress = 70, ParentId = 7, Priority = "Low" }); + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/Auto-Fill-Like.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/Auto-Fill-Like.razor new file mode 100644 index 00000000..cdeb851d --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/Auto-Fill-Like.razor @@ -0,0 +1,66 @@ +@page "/Auto-Fill-Like" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + + + + + + + + + + + +@code { + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = BusinessObject.GetSelfDataSource().ToList(); + } + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 12, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Child Task 5", StartDate = new DateTime(2017, 10, 26), Duration = 9, Progress = 25, ParentId = 4, Priority = "Normal" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child Task 6", StartDate = new DateTime(2017, 10, 27), Duration = 9, Progress = 7, ParentId = 5, Priority = "Normal" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Parent Task 3", StartDate = new DateTime(2017, 10, 28), Duration = 4, Progress = 45, ParentId = null, Priority = "High" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child Task 7", StartDate = new DateTime(2017, 10, 29), Duration = 3, Progress = 38, ParentId = 7, Priority = "Critical" }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child Task 8", StartDate = new DateTime(2017, 10, 30), Duration = 7, Progress = 70, ParentId = 7, Priority = "Low" }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/BatchEditing.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/BatchEditing.razor new file mode 100644 index 00000000..54c2dde4 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/BatchEditing.razor @@ -0,0 +1,51 @@ +@page "/BatchEditing" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/CellEditing.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/CellEditing.razor new file mode 100644 index 00000000..5d38f0d6 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/CellEditing.razor @@ -0,0 +1,52 @@ +@page "/CellEditing" +@rendermode InteractiveWebAssembly + + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/CommandColumn.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/CommandColumn.razor new file mode 100644 index 00000000..1b394547 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/CommandColumn.razor @@ -0,0 +1,58 @@ +@page "/treegrid/command-column" +@rendermode InteractiveWebAssembly + + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/DialogEdit.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/DialogEdit.razor new file mode 100644 index 00000000..8e73aeab --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/DialogEdit.razor @@ -0,0 +1,51 @@ +@page "/DialogEdit" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/RowEditing.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/RowEditing.razor new file mode 100644 index 00000000..dcfe8a8e --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/RowEditing.razor @@ -0,0 +1,51 @@ +@page "/RowEditing" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", StartDate = new DateTime(2017, 10, 23), Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", StartDate = new DateTime(2017, 10, 23), Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", StartDate = new DateTime(2017, 10, 24), Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", StartDate = new DateTime(2017, 10, 25), Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/TemplateEditing.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/TemplateEditing.razor new file mode 100644 index 00000000..64638374 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/TemplateEditing.razor @@ -0,0 +1,95 @@ +@page "/TemplateEditing" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns; +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + + + +@code{ + + private Boolean Check = false; + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + public void RowCreatedHandler(RowCreatedEventArgs args) + { + Check = true; + } + + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", Duration = 50, ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingAutocomplete.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingAutocomplete.razor new file mode 100644 index 00000000..d92d4555 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingAutocomplete.razor @@ -0,0 +1,60 @@ +@page "/UsingAutoComplete" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns + + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingCombobox.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingCombobox.razor new file mode 100644 index 00000000..0fa6f0f6 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingCombobox.razor @@ -0,0 +1,73 @@ +@page "/UsingCombobox" + +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns; + + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public List Priority { get; set; } = new List() + { + new Prior(){ Prioritize="Critical", ID=1}, + new Prior(){ Prioritize="High", ID=2}, + new Prior(){ Prioritize="Low", ID=3} + }; + public class Prior + { + public string Prioritize { get; set; } + public int ID { get; set; } + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingMultiselectDropdown.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingMultiselectDropdown.razor new file mode 100644 index 00000000..b0d582fd --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingMultiselectDropdown.razor @@ -0,0 +1,78 @@ +@page "/UsingMultiSelectDropDown" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.DropDowns + + + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + public List AvailableChoices { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + AvailableChoices = Enumerable.Range(1, 9).Select(x => new MyChoiceItem() + { + Id = x, + ChosenItems = x + "ItemA" + }).ToList(); + } + public class MyChoiceItem + { + public int Id { get; set; } + public string? ChosenItems { get; set; } + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public string? ChosenItems { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ChosenItems = "1ItemA", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 8, Progress = 80, Priority = "Low", ChosenItems = "2ItemA", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ChosenItems = "3ItemA", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ChosenItems = "4ItemA", ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ChosenItems = "5ItemA", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ChosenItems = "6ItemA", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ChosenItems = "7ItemA", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ChosenItems = "8ItemA", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ChosenItems = "9ItemA", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingNumericTexbox.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingNumericTexbox.razor new file mode 100644 index 00000000..c4b9b110 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingNumericTexbox.razor @@ -0,0 +1,59 @@ +@page "/UsingNumericTexbox" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Inputs + + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 8, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingRichTextEditor.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingRichTextEditor.razor new file mode 100644 index 00000000..2b0755d7 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingRichTextEditor.razor @@ -0,0 +1,58 @@ +@page "/UsingRichTextEditor" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.RichTextEditor + + + + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 8, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingTimePicker.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingTimePicker.razor new file mode 100644 index 00000000..8868e7ba --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Editing/UsingTimePicker.razor @@ -0,0 +1,111 @@ +@page "/UsingTimePicker" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.Calendars +
+
+
+ + + + + + + + + + + + + + +
+
+
+ +@code { + + public SfTreeGrid TreeGrid; + private List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = SelfReferenceData.GetTree().Take(50).ToList(); + } + + public class SelfReferenceData + { + public static List tree = new List(); + public int? TaskID { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public String Progress { get; set; } + public String Priority { get; set; } + public double? Duration { get; set; } + public int? ParentID { get; set; } + public bool? IsParent { get; set; } + public int? ParentItem { get; set; } + public SelfReferenceData() { } + public static List GetTree() + { + tree.Clear(); + int root = -1; + int TaskNameID = 0; + int ChildCount = -1; + int SubTaskCount = -1; + for (var t = 1; t <= 60; t++) + { + + DateTime start = new DateTime(2021, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start; + DateTime end = new DateTime(2023, 08, 25); + int endrange = (end - DateTime.Today).Days; + DateTime endingDate = end; + string math = "Critical"; + string progr = "In Progress"; + bool appr = true; + root++; TaskNameID++; + int rootItem = root + 1; + tree.Add(new SelfReferenceData() { TaskID = rootItem, TaskName = "Parent task " + TaskNameID.ToString(), StartDate = startingDate, EndDate = endingDate, IsParent = true, ParentID = null, Progress = progr, Priority = math, Duration = 50 }); + int parent = tree.Count; + for (var c = 0; c < 2; c++) + { + DateTime start1 = new DateTime(2021, 07, 09); + int range1 = (DateTime.Today - start1).Days; + DateTime startingDate1 = start1; + DateTime end1 = new DateTime(2022, 08, 23); + int endrange1 = (end1 - DateTime.Today).Days; + DateTime endingDate1 = end1; + root++; ChildCount++; + string val = ((parent + c + 1) % 3 == 0) ? "Low" : "Critical"; + int parn = parent + c + 1; + progr = "Validated"; + appr = true; + int iD = root + 1; + tree.Add(new SelfReferenceData() { TaskID = iD, TaskName = "Child task " + (ChildCount + 1).ToString(), StartDate = startingDate1, EndDate = endingDate1, IsParent = (((parent + c + 1) % 3) == 0), ParentID = rootItem, Progress = progr, Priority = val, Duration = 50 }); + if ((((parent + c + 1) % 3) == 0)) + { + int immParent = tree.Count; + for (var s = 0; s < 3; s++) + { + DateTime start2 = new DateTime(2021, 05, 05); + int range2 = (DateTime.Today - start2).Days; + DateTime startingDate2 = start2; + DateTime end2 = new DateTime(2024, 06, 16); + int endrange2 = (end2 - DateTime.Today).Days; + DateTime endingDate2 = end2; + root++; SubTaskCount++; + string Prior = (immParent % 2 == 0) ? "Validated" : "Normal"; + tree.Add(new SelfReferenceData() { TaskID = root + 1, TaskName = "Sub task " + (SubTaskCount + 1).ToString(), StartDate = startingDate2, EndDate = endingDate2, IsParent = false, ParentID = iD, Progress = (immParent % 2 == 0) ? "In Progress" : "Closed", Priority = Prior, Duration = 50 }); + } + } + } + } + return tree; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Events.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Events.razor new file mode 100644 index 00000000..9b965afb --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Events.razor @@ -0,0 +1,240 @@ +@page "/treegrid/events" +@rendermode InteractiveWebAssembly +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using TreeGridUGSample.Components.Data +
+
+
+ + + + + + + + + + + + + + +
+
+
+
+ + + + + + + + + + +
+

Event Trace

+
+
+ @foreach (var eventName in EventNames) + { +

@eventName event called

+ } +
+
+ +
+
+@code { + private List EventNames { get; set; } = new List(); + private List TreeGridData { get; set; } = new List(); + private bool ClearingByButton { get; set; } + protected override void OnInitialized() + { + TreeGridData = SelfReferenceData.GetTree().ToList(); + } + SfTreeGrid TreeGridInstance { get; set; } + private void ClearEventNames() + { + EventNames = new List(); + ClearingByButton = true; + } + public void ActionFailureHandler(FailureEventArgs args) + { + EventNames.Insert(0, "OnActionFailure"); + } + public void BeginEditHandler(BeginEditArgs args) + { + EventNames.Insert(0, "OnBeginEdit"); + } + public void CellEditHandler(CellEditArgs args) + { + EventNames.Insert(0, "OnCellEdit"); + } + public void CellSaveHandler(CellSaveArgs args) + { + EventNames.Insert(0, "OnCellSave"); + } + public void CellSavedHandler(CellSavedArgs args) + { + EventNames.Insert(0, "CellSaved"); + } + public void CreatedHandler(object args) + { + EventNames.Insert(0, "Created"); + } + public void LoadHandler(object args) + { + EventNames.Insert(0, "OnLoad"); + } + public void DataBoundHandler(BeforeDataBoundArgs args) + { + EventNames.Insert(0, "OnDataBound"); + } + public void RowSelectingHandler(RowSelectingEventArgs args) + { + EventNames.Insert(0, "RowSelecting"); + } + public void RowSelectedHandler(RowSelectEventArgs args) + { + EventNames.Insert(0, "RowSelected"); + } + public void RowDeselectingHandler(RowDeselectEventArgs args) + { + EventNames.Insert(0, "RowDeselecting"); + } + public void RowDeselectHandler(RowDeselectEventArgs args) + { + EventNames.Insert(0, "RowDeselected"); + } + public void SortingHandler(SortingEventArgs args) + { + EventNames.Insert(0, "Sorting"); + } + public void SortedHandler(SortedEventArgs args) + { + EventNames.Insert(0, "Sorted"); + } + public void ExpandingHandler(RowExpandingEventArgs args) + { + EventNames.Insert(0, "Expanding"); + } + public void ExpandedHandler(RowExpandedEventArgs args) + { + EventNames.Insert(0, "Expanded"); + } + public void ColumnReorderingHandler(ColumnReorderingEventArgs args) + { + EventNames.Insert(0, "ColumnReordering"); + } + public void ColumnReorderedHandler(ColumnReorderedEventArgs args) + { + EventNames.Insert(0, "ColumnReordered"); + } + public void PageChangingHandler(GridPageChangingEventArgs args) + { + EventNames.Insert(0, "PageChanging"); + } + public void PageChangedHandler(GridPageChangedEventArgs args) + { + EventNames.Insert(0, "PageChanged"); + } + public void CollapsingHandler(RowCollapsingEventArgs args) + { + EventNames.Insert(0, "Collapsing"); + } + public void CollapsedHandler(RowCollapsedEventArgs args) + { + EventNames.Insert(0, "Collapsed"); + } + public void RowCreatingHandler(RowCreatingEventArgs args) + { + EventNames.Insert(0, "Creating"); + } + public void RowCreatedHandler(RowCreatedEventArgs args) + { + EventNames.Insert(0, "Created"); + } + public void RowDeletingHandler(RowDeletingEventArgs args) + { + EventNames.Insert(0, "Deleting"); + } + public void RowDeletedHandler(RowDeletedEventArgs args) + { + EventNames.Insert(0, "Deleted"); + } + public void ExcelExportHandler() + { + EventNames.Insert(0, "ExcelExport"); + } + public void PdfExportHandler() + { + EventNames.Insert(0, "PdfExport"); + } + public void RowDragStartingHandler(RowDragStartingEventArgs args) + { + EventNames.Insert(0, "RowDragStarting"); + } + public void RowDroppingHandler(RowDroppingEventArgs args) + { + EventNames.Insert(0, "RowDropping"); + } + public void RowDroppedHandler(RowDroppedEventArgs args) + { + EventNames.Insert(0, "RowDropped"); + } + public async void ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Text == "PDF Export") + { + await TreeGridInstance.ExportToPdfAsync(); + } + else if (args.Item.Text == "Excel Export") + { + await TreeGridInstance.ExportToExcelAsync(); + } + } + public void SearchingHandler(SearchingEventArgs args) + { + EventNames.Insert(0, "Searching"); + } + public void SearchedHandler(SearchedEventArgs args) + { + EventNames.Insert(0, "Searched"); + } + public void ResizeStartHandler(ResizeArgs args) + { + EventNames.Insert(0, "ResizeStating"); + } + public void ResizeStoppedHandler(ResizeArgs args) + { + EventNames.Insert(0, "ResizeStopped"); + } + public void FilterDialogOpenedHandler(FilterDialogOpenedEventArgs args) + { + EventNames.Insert(0, "FilterDialogOpened"); + } + public void FilterDialogOpeningHandler(FilterDialogOpeningEventArgs args) + { + EventNames.Insert(0, "FilterDialogOpening"); + } + public void FilteredHandler(FilteredEventArgs args) + { + EventNames.Insert(0, "Filtered"); + } + public void FilteringHandler(FilteringEventArgs args) + { + EventNames.Insert(0, "Filtering"); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ExportToExcel.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ExportToExcel.razor new file mode 100644 index 00000000..c2eb5ea5 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ExportToExcel.razor @@ -0,0 +1,126 @@ +@page "/treegrid/exporttoexcel" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Navigations; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.Inputs; +@using Syncfusion.Blazor.DropDowns; +@using Syncfusion.Blazor.Buttons; + +

Excel Export Configuration

+ +
+
+ + + + + + + + + + + +
+ +
+ + + + + +
+
+ + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeGridData { get; set; } + + // Properties bound to UI + public string FileName { get; set; } = "treegrid.xlsx"; + public ExportType ExportType { get; set; } = ExportType.AllPages; + public string ExportTypeValue { get; set; } = "AllPages"; // For dropdown binding + public HierarchyExportMode HierarchyExportMode { get; set; } = HierarchyExportMode.Expanded; + public string HierarchyModeValue { get; set; } = "Expanded"; // For dropdown binding + public bool IncludeHiddenColumn { get; set; } = false; + public bool IsCollapsedStatePersist { get; set; } = false; + public bool ApplyCustomTheme { get; set; } = false; + + // Dropdown data + public class DropdownItem + { + public string Value { get; set; } + public string Text { get; set; } + } + + public List ExportTypeOptions { get; set; } = new List + { + new DropdownItem { Value = "AllPages", Text = "All Pages" }, + new DropdownItem { Value = "CurrentPage", Text = "Current Page" } + }; + + public List HierarchyModeOptions { get; set; } = new List + { + new DropdownItem { Value = "All", Text = "All" }, + new DropdownItem { Value = "Expanded", Text = "Expanded" }, + new DropdownItem { Value = "None", Text = "None" } + }; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + + private void OnExportTypeChange(ChangeEventArgs args) + { + ExportType = (ExportType)Enum.Parse(typeof(ExportType), args.Value); + } + + private void OnHierarchyModeChange(ChangeEventArgs args) + { + HierarchyExportMode = (HierarchyExportMode)Enum.Parse(typeof(HierarchyExportMode), args.Value); + } + + private async Task ToolbarClickHandler(ClickEventArgs args) + { + if (args.Item.Text == "Excel Export") + { + TreeGridExcelExportProperties ExportProperties = new TreeGridExcelExportProperties(); + ExportProperties.FileName = FileName; + ExportProperties.ExportType = ExportType; + ExportProperties.HierarchyExportMode = HierarchyExportMode; + ExportProperties.IncludeHiddenColumn = IncludeHiddenColumn; + ExportProperties.IsCollapsedStatePersist = IsCollapsedStatePersist; + + if (ApplyCustomTheme) + { + ExcelTheme theme = new ExcelTheme(); + ExcelStyle recordStyle = new ExcelStyle() + { + FontName = "Segoe UI", + FontColor = "#666666" + }; + theme.Header = recordStyle; + theme.Record = recordStyle; + theme.Caption = recordStyle; + ExportProperties.Theme = theme; + } + await this.TreeGrid.ExportToExcelAsync(ExportProperties); + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ExportToPdf.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ExportToPdf.razor new file mode 100644 index 00000000..0bcc4ed6 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/ExportToPdf.razor @@ -0,0 +1,183 @@ +@page "/treegrid/exporttopdf" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Navigations; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.Inputs; +@using Syncfusion.Blazor.DropDowns; +@using Syncfusion.Blazor.Buttons; + +

PDF Export Configuration

+ + + +
+
+ + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+ + + +
+
+
+ + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public List TreeGridData { get; set; } + + // Properties bound to UI + public string FileName { get; set; } = "treegrid.pdf"; + public PageOrientation Orientation { get; set; } = PageOrientation.Portrait; + public string OrientationValue { get; set; } = "Portrait"; // For dropdown binding + public PdfPageSize PageSize { get; set; } = PdfPageSize.Letter; + public string PageSizeValue { get; set; } = "Letter"; // For dropdown binding + public ExportType ExportType { get; set; } = ExportType.AllPages; + public string ExportTypeValue { get; set; } = "AllPages"; // For dropdown binding + public bool IncludeHiddenColumn { get; set; } = false; + public bool AllowHorizontalOverflow { get; set; } = false; + public bool DisableAutoFitWidth { get; set; } = false; + public bool ApplyCustomTheme { get; set; } = false; + + // Dropdown data + public class DropdownItem + { + public string Value { get; set; } + public string Text { get; set; } + } + + public List OrientationOptions { get; set; } = new List + { + new DropdownItem { Value = "Portrait", Text = "Portrait" }, + new DropdownItem { Value = "Landscape", Text = "Landscape" } + }; + + public List PageSizeOptions { get; set; } = new List + { + new DropdownItem { Value = "Letter", Text = "Letter" }, + new DropdownItem { Value = "Note", Text = "Note" }, + new DropdownItem { Value = "Legal", Text = "Legal" }, + new DropdownItem { Value = "A0", Text = "A0" }, + new DropdownItem { Value = "A1", Text = "A1" }, + new DropdownItem { Value = "A2", Text = "A2" }, + new DropdownItem { Value = "A3", Text = "A3" }, + new DropdownItem { Value = "A4", Text = "A4" }, + new DropdownItem { Value = "A5", Text = "A5" }, + new DropdownItem { Value = "A6", Text = "A6" }, + new DropdownItem { Value = "A7", Text = "A7" }, + new DropdownItem { Value = "A8", Text = "A8" }, + new DropdownItem { Value = "A9", Text = "A9" }, + new DropdownItem { Value = "B0", Text = "B0" }, + new DropdownItem { Value = "B1", Text = "B1" }, + new DropdownItem { Value = "B2", Text = "B2" }, + new DropdownItem { Value = "B3", Text = "B3" }, + new DropdownItem { Value = "B4", Text = "B4" }, + new DropdownItem { Value = "B5", Text = "B5" }, + new DropdownItem { Value = "Archa", Text = "Archa" }, + new DropdownItem { Value = "Archb", Text = "Archb" }, + new DropdownItem { Value = "Archc", Text = "Archc" }, + new DropdownItem { Value = "Archd", Text = "Archd" }, + new DropdownItem { Value = "Arche", Text = "Arche" }, + new DropdownItem { Value = "Flsa", Text = "Flsa" }, + new DropdownItem { Value = "HalfLetter", Text = "HalfLetter" }, + new DropdownItem { Value = "Letter11x17", Text = "Letter11x17" }, + new DropdownItem { Value = "Ledger", Text = "Ledger" } + }; + + public List ExportTypeOptions { get; set; } = new List + { + new DropdownItem { Value = "AllPages", Text = "All Pages" }, + new DropdownItem { Value = "CurrentPage", Text = "Current Page" } + }; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + + private void OnOrientationChange(ChangeEventArgs args) + { + Orientation = (PageOrientation)Enum.Parse(typeof(PageOrientation), args.Value); + } + + private void OnPageSizeChange(ChangeEventArgs args) + { + PageSize = (PdfPageSize)Enum.Parse(typeof(PdfPageSize), args.Value); + } + + private void OnExportTypeChange(ChangeEventArgs args) + { + ExportType = (ExportType)Enum.Parse(typeof(ExportType), args.Value); + } + + private async Task ToolbarClickHandler(ClickEventArgs args) + { + if (args.Item.Text == "PDF Export") + { + PdfExportProperties ExportProperties = new PdfExportProperties(); + ExportProperties.FileName = FileName; + ExportProperties.PageOrientation = Orientation; + ExportProperties.PageSize = PageSize; + ExportProperties.ExportType = ExportType; + ExportProperties.IncludeHiddenColumn = IncludeHiddenColumn; + ExportProperties.AllowHorizontalOverflow = AllowHorizontalOverflow; + ExportProperties.DisableAutoFitWidth = DisableAutoFitWidth; + + if (ApplyCustomTheme) + { + PdfTheme theme = new PdfTheme(); + PdfThemeStyle recordFontStyle = new PdfThemeStyle() + { + FontColor = "#64FA50", + FontName = "Calibri", + FontSize = 10 + }; + theme.Record = recordFontStyle; + // Add similar for Header and Caption if needed + ExportProperties.Theme = theme; + } + + + await this.TreeGrid.ExportToPdfAsync(ExportProperties); + } + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterBarComponent.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterBarComponent.razor new file mode 100644 index 00000000..dabc5f19 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterBarComponent.razor @@ -0,0 +1,85 @@ +@page "/FilterBarComponent" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; +@using Syncfusion.Blazor.DropDowns; + + + + + + + + + + + + + + + + + + +@code{ + + SfTreeGrid TreeGrid; + + public List DropDownData { get; set; } = new List(); + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = BusinessObject.GetSelfDataSource().ToList(); + + this.DropDownData.Add("10"); + this.DropDownData.Add("50"); + this.DropDownData.Add("5"); + this.DropDownData.Add("6"); + this.DropDownData.Add("4"); + this.DropDownData.Add("All"); + } + + public void change(Syncfusion.Blazor.DropDowns.ChangeEventArgs Args) + { + if (Args.Value == "All") + { + List Data = new List(); + Data.Add("Duration"); + TreeGrid.ClearFilteringAsync(Data); + } + else + { + TreeGrid.FilterByColumnAsync("Duration", "equal", Args.Value); + } + } + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterEnumColumn.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterEnumColumn.razor new file mode 100644 index 00000000..ddf7b080 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterEnumColumn.razor @@ -0,0 +1,139 @@ +@page "/FilterEnumColumn" +@rendermode InteractiveWebAssembly + + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.DropDowns +
+
+
+ + + + + + + + + + + + + + + + +
+
+
+ +@code { + public SfTreeGrid TreeGrid; + private List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = SelfReferenceData.GetTree().Take(50).ToList(); + } + public enum Prioritize : short + { + High = 1, + Low = 2, + Critical = 3 + } + public class Data + { + public string Priority { get; set; } + } + List FilterDropData = new List + { + new Data() { Priority= "All" }, + new Data() { Priority= "High" }, + new Data() { Priority= "Low" }, + new Data() { Priority= "Critical" } + }; + public async Task Change(ChangeEventArgs args) + { + if (args.Value == "All") + { + await this.TreeGrid.ClearFilteringAsync(); + } + else + { + await this.TreeGrid.FilterByColumnAsync("Priority", "contains", args.Value); + } + } + + + public class SelfReferenceData + { + public static List tree = new List(); + public int? TaskID { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public String Progress { get; set; } + public Prioritize Priority { get; set; } + public double? Duration { get; set; } + public int? ParentID { get; set; } + public bool? IsParent { get; set; } + public int? ParentItem { get; set; } + public SelfReferenceData() { } + public static List GetTree() + { + tree.Clear(); + int root = -1; + int TaskNameID = 0; + int ChildCount = -1; + int SubTaskCount = -1; + var values = Enum.GetValues(typeof(Prioritize)); + for (var t = 1; t <= 60; t++) + { + + DateTime start = new DateTime(2021, 06, 07); + int range = (DateTime.Today - start).Days; + DateTime startingDate = start; + DateTime end = new DateTime(2023, 08, 25); + int endrange = (end - DateTime.Today).Days; + DateTime endingDate = end; + string progr = "In Progress"; + bool appr = true; + root++; TaskNameID++; + int rootItem = root + 1; + tree.Add(new SelfReferenceData() { TaskID = rootItem, TaskName = "Parent task " + TaskNameID.ToString(), StartDate = startingDate, EndDate = endingDate, IsParent = true, ParentID = null, Progress = progr, Priority = (Prioritize)(values.GetValue((values.Length-1))), Duration = 50 }); + int parent = tree.Count; + for (var c = 0; c < 2; c++) + { + DateTime start1 = new DateTime(2021, 07, 09); + int range1 = (DateTime.Today - start1).Days; + DateTime startingDate1 = start1; + DateTime end1 = new DateTime(2022, 08, 23); + int endrange1 = (end1 - DateTime.Today).Days; + DateTime endingDate1 = end1; + root++; ChildCount++; + int parn = parent + c + 1; + progr = "Validated"; + appr = true; + int iD = root + 1; + tree.Add(new SelfReferenceData() { TaskID = iD, TaskName = "Child task " + (ChildCount + 1).ToString(), StartDate = startingDate1, EndDate = endingDate1, IsParent = (((parent + c + 1) % 3) == 0), ParentID = rootItem, Progress = progr, Priority = (Prioritize)(values.GetValue((values.Length-1))), Duration = 50 }); + if ((((parent + c + 1) % 3) == 0)) + { + int immParent = tree.Count; + for (var s = 0; s < 3; s++) + { + DateTime start2 = new DateTime(2021, 05, 05); + int range2 = (DateTime.Today - start2).Days; + DateTime startingDate2 = start2; + DateTime end2 = new DateTime(2024, 06, 16); + int endrange2 = (end2 - DateTime.Today).Days; + DateTime endingDate2 = end2; + root++; SubTaskCount++; + tree.Add(new SelfReferenceData() { TaskID = root + 1, TaskName = "Sub task " + (SubTaskCount + 1).ToString(), StartDate = startingDate2, EndDate = endingDate2, IsParent = false, ParentID = iD, Progress = (immParent % 2 == 0) ? "In Progress" : "Closed", Priority = (Prioritize)(values.GetValue((values.Length-1))), Duration = 50 }); + } + } + } + } + return tree; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterItemTemplate.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterItemTemplate.razor new file mode 100644 index 00000000..c9e40741 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilterItemTemplate.razor @@ -0,0 +1,63 @@ +@page "/FilterItemTemplate" + +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.Data; + + + + + + + + @{ + var filterContext = (context as FilterItemTemplateContext); + var itemTemplateValue = "Textof(" + filterContext.Value + ")"; + } + @itemTemplateValue + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = BusinessObject.GetSelfDataSource().ToList(); + } + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilteringDynamic.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilteringDynamic.razor new file mode 100644 index 00000000..29b83ae8 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Filtering/FilteringDynamic.razor @@ -0,0 +1,722 @@ +@page "/TreeGrid/filtering" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.Grids + +
+ + +
+ +Get Filtered Data Count +Clear + +
+ @message +
+ +
+
+ @if (isNormalTreeGrid) + { + + + + + + + + + + + + + + + + + + @if (showRecords == true) + { +
+

Total Filtered Records Count: @FilterData.Count

+
+ } + +

Methods

+
+ + + + +
+

Filter By Column

+
+
+
Field name
+ + + +
+
+
Field operator
+ + +
+
+
Filter value
+ +
+
+
Match case
+ +
+
+
Predicate
+ +
+
Filter choice Count
+ + +
+ Apply Filter + Clear Filtering + Clear Filtering Strictly + Get Filtering Strictly +
+
+
+
+ } + @if (isComplexTreeGrid) + { + + + + + + + + + + + + + + + + + + @if (showRecords == true) + { +
+

Total Filtered Records Count: @FilterData.Count

+
+ } + +

Methods

+
+ + + + +
+
+

Filter By Column

+
+
Field name
+ + + +
+
+
Field operator
+ + +
+
+
Filter value
+ +
+
+
Match case
+ +
+
+
Predicate
+ +
+
Filter choice Count
+ + +
+ Apply Filter + Clear Filtering + Clear Filtering Strictly + Get Filtering Strictly +
+
+
+
+ } +
+ +
+

Filtering choice

+
+
+ + + + +
+ Apply Changes +
+ +
+

Properties

+
+ + +
+
+ + +
+
+ +

Event

+ + + + + + + +
+
+ +
+ @foreach (var log in EventLogs) + { +
@((MarkupString)log)
+ } +
+
+
+
+ Clear +
+
+
+
+ + + +@code { + public List TreeGridData { get; set; } + SfTreeGrid? TreeGrid { get; set; } + public bool allowFiltering { get; set; } = true; + private Dictionary TempSettings = new(); + public List FilterData { get; set; } + public string message; + private SfTreeView TreeView; + public bool showRecords = false; + public bool flag = false; + public string FilterValue { get; set; } + public bool IsMatchCaseEnabled { get; set; } + public string FilterValue1 { get; set; } + public bool IsMatchCaseEnabled1 { get; set; } + public bool enableCaseSensitive = false; + public bool ignoreAccent = false; + private Syncfusion.Blazor.TreeGrid.FilterType treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + + List Data = new List(); + + private bool isComplexTreeGrid = false; + private bool isNormalTreeGrid = true; + + private void Change(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + isComplexTreeGrid = args.Checked; + isNormalTreeGrid = !args.Checked; + StateHasChanged(); + } + + private void ChangeCaseSensitive(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + enableCaseSensitive = args.Checked; + StateHasChanged(); + } + + private void ChangeAccent(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + ignoreAccent = args.Checked; + StateHasChanged(); + } + + public class GridProperties + { + public string Id { get; set; } + public string ParentId { get; set; } + public string Name { get; set; } + public bool Expanded { get; set; } + public bool? IsChecked { get; set; } + public bool HasChild { get; set; } + } + + protected override void OnInitialized() + { + TreeGridData = OrderData.GetAllRecords(); + + base.OnInitialized(); + + Data.Add(new GridProperties + { + Id = "Filter", + Name = "Allow Filtering", + HasChild = true, + Expanded = true, + IsChecked = true + }); + Data.Add(new GridProperties + { + Id = "FilterType", + Name = "Filter Type", + ParentId = "Filter", + HasChild = true, + Expanded = true, + IsChecked = true + }); + Data.Add(new GridProperties + { + Id = "Menu", + ParentId = "FilterType", + Name = "Menu", + IsChecked = true + }); + Data.Add(new GridProperties + { + Id = "Excel", + ParentId = "FilterType", + Name = "Excel" + }); + } + + public void NodeChecking(NodeCheckEventArgs args) + { + if (args.IsInteracted) + { + if (args.Action == "uncheck" && args.NodeData.Text == "Filter Type") + { + args.Cancel = true; + return; + } + TempSettings[args.NodeData.Id] = args.Action == "check"; + + switch (args.NodeData.Id) + { + case "Filter": + if (args.Action == "uncheck") + { + TreeView.UncheckAllAsync(new string[] { "FilterType", "Menu", "Excel" }); + } + else + { + TreeView.CheckAllAsync(new string[] { "FilterType", "Menu" }); + } + break; + case "Menu": + if (args.Action == "check") + { + TreeView.CheckAllAsync(new string[] { "Filter", "FilterType" }); + TreeView.UncheckAllAsync(new string[] { "Excel" }); + } + else + { + args.Cancel = true; + } + break; + case "Excel": + if (args.Action == "check") + { + TreeView.CheckAllAsync(new string[] { "Filter", "FilterType" }); + TreeView.UncheckAllAsync(new string[] { "Menu" }); + } + else + { + TreeView.CheckAllAsync(new string[] { "Menu" }); + } + break; + } + } + } + + public class OrderData + { + public static List Orders = new List(); + public OrderData() { } + + public OrderData(int? OrderID, int? ParentOrderID, string CustomerID, string ShipCity, DateTime? OrderDate, double? Freight, DateOnly? date, TimeOnly? timeOnly, DateTimeOffset? dateTimeOffset, long? orderNumber, bool Verified, EmployeeData employeeData) + { + this.OrderID = OrderID; + this.ParentOrderID = ParentOrderID; + this.CustomerID = CustomerID; + this.ShipCity = ShipCity; + this.OrderDate = OrderDate; + this.Freight = Freight; + this.DateOnly = date; + this.TimeOnly = timeOnly; + this.DateTimeOffset = dateTimeOffset; + this.OrderNumber = orderNumber; + this.Verified = Verified; + this.Employee = employeeData; + } + + public static List GetAllRecords() + { + if (Orders.Count() == 0) + { + int OrderID = 10248; + + for (int i = 1; i < 10; i++) + { + // Parent records + Orders.Add(new OrderData(OrderID + 1, null, "VINET", "VÍCTÉ", new DateTime(2025, 07, 04), 32.38, new DateOnly(2025, 8, 1), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 1, 9, 0, 0, TimeSpan.FromHours(5.5)), 2345, true, new EmployeeData("ANTON", 1987, new DateOnly(2025, 8, 1), "Münster", new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 1, 9, 0, 0, TimeSpan.FromHours(5.5)), 2345))); + // Child records + Orders.Add(new OrderData(OrderID + 2, OrderID + 1, "TOMSP", "Lyon", new DateTime(2025, 07, 05), 11.61, new DateOnly(2025, 8, 2), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 2, 9, 0, 0, TimeSpan.FromHours(5.5)), 345, false, new EmployeeData("BOLID", 234, null, "Charleroi", new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 2, 9, 0, 0, TimeSpan.FromHours(5.5)), 345))); + Orders.Add(new OrderData(OrderID + 3, OrderID + 1, "HANAR", "Münster", new DateTime(2025, 07, 06), 65.83, new DateOnly(2025, 8, 3), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 3, 9, 0, 0, TimeSpan.FromHours(5.5)), 2345, true, new EmployeeData("TOMPS", 1234, new DateOnly(2025, 8, 3), "Rio de Janeiro", new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 3, 9, 0, 0, TimeSpan.FromHours(5.5)), null))); + Orders.Add(new OrderData(OrderID + 4, OrderID + 2, "VICTE", "Đặng Minh", new DateTime(2025, 07, 07), 45.78, new DateOnly(2025, 8, 4), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 4, 9, 0, 0, TimeSpan.FromHours(5.5)), 876, true, new EmployeeData("", null, new DateOnly(2025, 8, 4), null, null, new DateTimeOffset(2025, 8, 5, 9, 0, 0, TimeSpan.FromHours(5.5)), 256))); + Orders.Add(new OrderData(OrderID + 5, OrderID + 2, "SUPRD", "Rio de Janeiro", new DateTime(2025, 07, 08), 98.6, new DateOnly(2025, 8, 5), new TimeOnly(12, 00, 00), new DateTimeOffset(2025, 8, 5, 9, 0, 0, TimeSpan.FromHours(5.5)), 2329, false, new EmployeeData("WELLI", 234, new DateOnly(2025, 8, 5), "", null, null, 302))); + OrderID += 100; + } + } + return Orders; + } + + public int? OrderID { get; set; } + public int? ParentOrderID { get; set; } + public string CustomerID { get; set; } + public string ShipCity { get; set; } + public DateTime? OrderDate { get; set; } + public double? Freight { get; set; } + public DateOnly? DateOnly { get; set; } + public TimeOnly? TimeOnly { get; set; } + public DateTimeOffset? DateTimeOffset { get; set; } + public long? OrderNumber { get; set; } + public bool? Verified { get; set; } + public EmployeeData Employee { get; set; } + } + + public class EmployeeData + { + public EmployeeData(string firstName, double? rollNumber, DateOnly? date, string ShipCity, TimeOnly? timeOnly, DateTimeOffset? dateTimeOffset, long? OrderIdentity) + { + this.FirstName = firstName; + this.RollNumber = rollNumber; + this.DateOnly = date; + this.TimeOnly = timeOnly; + this.DateTimeOffset = dateTimeOffset; + this.OrderIdentity = OrderIdentity; + this.ShipCity = ShipCity; + } + public string FirstName { get; set; } + public double? RollNumber { get; set; } + public DateOnly? DateOnly { get; set; } + public TimeOnly? TimeOnly { get; set; } + public DateTimeOffset? DateTimeOffset { get; set; } + public long? OrderIdentity { get; set; } + public string ShipCity { get; set; } + } + + List FilterChoiceCount = new List() { 5, 10, 15 }; + public int MyItem { get; set; } + public bool EnableOperatorDropdown = false; + public List FilteredOperators = new List(); + public bool EnableOperatorDropdownComplex = false; + public List FilteredOperatorsComplex = new List(); + + public void OnFieldNameChange(ChangeEventArgs args) + { + Names = args.Value; + EnableOperatorDropdown = !string.IsNullOrEmpty(Names); + + if (Names == "OrderID" || Names == "Freight" || Names == "OrderDate" || Names == "DateOnly" || Names == "TimeOnly" || Names == "DateTimeOffset" || Names == "OrderNumber") + { + FilteredOperators = new List() { "equal", "notequal", "greaterthan", "lessthan", "greaterthanorequal", "lessthanorequal", "isnull", "isnotnull" }; + } + else + { + FilteredOperators = new List() { "startswith", "endswith", "contains", "doesnotstartwith", "doesnotendwith", "doesnotcontain", "equal", "notequal", "isempty", "isnotempty", "like" }; + } + + Operators = null; + } + + List FilterColumnName = new List() { "OrderID", "CustomerID", "ShipCity", "OrderDate", "Freight", "DateOnly", "TimeOnly", "DateTimeOffset", "OrderNumber", "Verified" }; + public string Names { get; set; } + public string Operators { get; set; } + + List FilterColumnName1 = new List() { "OrderID", "CustomerID", "ShipCity", "Freight", "Employee.DateOnly", "Employee.RollNumber", "Employee.FirstName", "Employee.TimeOnly", "Employee.DateTimeOffset", "Employee.OrderIdentity" }; + public string Names1 { get; set; } + public string Operators1 { get; set; } + + public void OnFieldNameChangeComplex(ChangeEventArgs args) + { + Names1 = args.Value; + EnableOperatorDropdownComplex = !string.IsNullOrEmpty(Names1); + + if (Names1 == "OrderID" || Names1 == "Freight" || Names1 == "Employee.DateOnly" || Names1 == "Employee.RollNumber") + { + FilteredOperatorsComplex = new List() { "equal", "notequal", "greaterthan", "lessthan", "greaterthanorequal", "lessthanorequal", "isnull", "isnotnull" }; + } + else + { + FilteredOperatorsComplex = new List() { "startswith", "endswith", "contains", "doesnotstartwith", "doesnotendwith", "doesnotcontain", "equal", "notequal", "isempty", "isnotempty", "like" }; + } + + Operators1 = null; + } + + List FilterPredicateValue = new List() { "AND", "OR" }; + public string Predicate { get; set; } + + private List EventLogs = new(); + + private void AppendEventLog(string message) + { + EventLogs.Insert(0, message); + } + + private void ClearEventLogs() + { + EventLogs.Clear(); + } + + private void FilterDialogOpeningHandler(FilterDialogOpeningEventArgs args) + { + if (TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Excel || TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Menu) + { + AppendEventLog("TreeGrid FilterDialogOpeningEventArgs event called
"); + } + if (TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Excel) + { + args.FilterChoiceCount = MyItem; + } + } + + private void FilterDialogOpenedHandler(FilterDialogOpenedEventArgs args) + { + if (TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Excel || TreeGrid.FilterSettings.Type == Syncfusion.Blazor.TreeGrid.FilterType.Menu) + { + AppendEventLog($"TreeGrid FilterDialogOpenedEventArgs event called and {args.ColumnName} filter popup opened
"); + } + } + + private void FilteringHandler(Syncfusion.Blazor.Grids.FilteringEventArgs args) + { + if (args.ColumnName == "OrderID") + { + args.Cancel = true; + AppendEventLog("The Filtering event has been triggered and the filtering action is cancelled for " + args.ColumnName); + } + if (args.FilterPredicates != null) + { + flag = true; + } + else + { + flag = false; + } + } + + private void FilteredHandler(FilteredEventArgs args) + { + if (args.FilterPredicates != null) + { + AppendEventLog("The FilteredEventArgs event has been triggered and the filtering action for the " + args.ColumnName + " column has been successfully executed"); + } + else + { + message = " "; + } + } + + public async Task click() + { + if (flag == true) + { + var filteredRecords = TreeGrid?.GetFilteredRecordsAsync(); + FilterData = (List)filteredRecords.Result; + showRecords = true; + message = ""; + } + else + { + showRecords = false; + message = "No Records is filtered "; + } + } + + public async Task clear() + { + await TreeGrid?.ClearFilteringAsync(); + showRecords = false; + } + + private async Task ApplyChanges() + { + foreach (var setting in TempSettings) + { + switch (setting.Key) + { + case "Filter": + allowFiltering = setting.Value ?? false; + break; + case "Menu": + if (setting.Value == true) + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + allowFiltering = true; + } + else + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + } + break; + case "Excel": + if (setting.Value == true) + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Excel; + allowFiltering = true; + } + else + { + treeGridFilterType = Syncfusion.Blazor.TreeGrid.FilterType.Menu; + } + break; + } + } + TempSettings.Clear(); + await TreeGrid?.RefreshAsync(); + } + + private async Task ApplyTreeGridActions(string action) + { + if (TreeGrid == null) return; + + switch (action) + { + case "filterColumn": + if (FilterColumnName != null && FilterColumnName.Count > 0 && !string.IsNullOrEmpty(FilterValue)) + { + await TreeGrid.FilterByColumnAsync(Names, Operators, FilterValue, Predicate, IsMatchCaseEnabled); + } + break; + case "clearFilter": + await TreeGrid.ClearFilteringAsync(); + break; + case "clearFilterStrictly": + await TreeGrid.ClearFilteringAsync(new List { "Freight" }); + message = "Only Freight column will be cleared once completed filtering for freight column"; + break; + case "strictFiltering": + var data = TreeGrid?.GetFilteredRecordsAsync(true); + FilterData = (List)data.Result; + if (FilterData.Count == 0) + { + message = "The filtered records " + FilterData.Count; + } + else + { + message = "The filtered records " + FilterData.Count; + } + break; + } + } + + private async Task ApplyTreeGridActionsComplex(string action) + { + if (TreeGrid == null) return; + + switch (action) + { + case "filterColumn1": + if (FilterColumnName1 != null && FilterColumnName1.Count > 0 && !string.IsNullOrEmpty(FilterValue1)) + { + await TreeGrid.FilterByColumnAsync(Names1, Operators1, FilterValue1, Predicate, IsMatchCaseEnabled1); + } + break; + case "clearFilter": + await TreeGrid.ClearFilteringAsync(); + break; + case "clearFilterStrictly": + await TreeGrid.ClearFilteringAsync(new List { "Freight" }); + message = "Only Freight column will be cleared once completed filtering for freight column"; + break; + case "strictFiltering": + var data = TreeGrid?.GetFilteredRecordsAsync(true); + FilterData = (List)data.Result; + if (FilterData.Count == 0) + { + message = "The filtered records " + FilterData.Count; + } + else + { + message = "The filtered records " + FilterData.Count; + } + break; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Page_Size_Mode.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Page_Size_Mode.razor new file mode 100644 index 00000000..17fef62e --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Page_Size_Mode.razor @@ -0,0 +1,52 @@ +

Page_Size_Mode

+@page "/Page_Size_Mode" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Pager_Template.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Pager_Template.razor new file mode 100644 index 00000000..f7a67f6c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Pager_Template.razor @@ -0,0 +1,59 @@ +

Pager_Template

+@page "/Pager_Template" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.Navigations +@using System.ComponentModel.DataAnnotations +@using TreeGridUGSample.Components.Data; + + + + + + + + + + + + + + + +@code { + private List TreeData { get; set; } + SfTreeGrid TreeGrid; + public int pageSize { get; set; } = 3; + public int totalPages => (int)Math.Ceiling((double)TreeData.Count / (pageSize * 6)); + + protected override void OnInitialized() + { + TreeData = SelfReferenceData.GetTree().Take(90).ToList(); + } + + + private async Task CalculatePageSize(Syncfusion.Blazor.Inputs.ChangeEventArgs args) + { + await TreeGrid.GoToPageAsync(args.Value); + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Pager_with_DropDown.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Pager_with_DropDown.razor new file mode 100644 index 00000000..3e0c0ceb --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Paging/Pager_with_DropDown.razor @@ -0,0 +1,51 @@ +

Pager_with_DropDown

+@page "/Pager_with_DropDown" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Persistence.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Persistence.razor new file mode 100644 index 00000000..e476171b --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Persistence.razor @@ -0,0 +1,216 @@ +@page "/treegrid/persistence" +@rendermode InteractiveWebAssembly +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Navigations +@using TreeGridUGSample.Components.Data + +
+
+
+ + + + + + + + + + + + + +
+
+
+@code { + public SfTreeGrid TreeGridInstance { get; set; } = null!; +#pragma warning disable BL0005 // Component parameter should not be set outside of its component. + private List ToolbarItems = new List + { + "ColumnChooser", + new ToolbarItem() { Text = "Save state", TooltipText = "Save state", PrefixIcon= "e-savestate" }, + new ToolbarItem() { Text = "Load state", TooltipText = "Load state", PrefixIcon= "e-setstate" }, + new ToolbarItem() { Text = "Reset state", TooltipText = "Reset state", PrefixIcon= "e-resetstate" }, + }; +#pragma warning restore BL0005 // Component parameter should not be set outside of its component. + private List TreeData { get; set; } = new List(); + public string SavedPersistence { get; set; } = String.Empty; + public async Task ToolBarClick(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Text == "Save state") + { + SavedPersistence = await this.TreeGridInstance.GetPersistDataAsync(); + } + if (args.Item.Text == "Reset state") + { + await TreeGridInstance.ResetPersistDataAsync(); + } + if (args.Item.Text == "Load state") + { + await TreeGridInstance.SetPersistDataAsync(SavedPersistence); + } + } + protected override void OnInitialized() + { + TreeData = WrapData.GetWrapData().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Print.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Print.razor new file mode 100644 index 00000000..a7308347 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Print.razor @@ -0,0 +1,70 @@ +@page "/treegrid/print" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Navigations +@using Syncfusion.Blazor.Inputs +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.Grids + + +
+ + +
+ + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public List TreeGridData { get; set; } + public Syncfusion.Blazor.Grids.PrintMode printMode { get; set; } = Syncfusion.Blazor.Grids.PrintMode.AllPages; + public bool printModeChange { get; set; } = false; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + private void Change(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + printModeChange = args.Checked; + StateHasChanged(); + } + public void ToolbarClickHandler(ClickEventArgs args) + { + if(args.Item.Text == "Print") + { + if (printModeChange) + { + printMode = Syncfusion.Blazor.Grids.PrintMode.CurrentPage; + } + else + { + printMode = Syncfusion.Blazor.Grids.PrintMode.AllPages; + } + TreeGrid.PrintAsync(); + } + } + private void onClick() + { + if (printModeChange) + { + printMode = Syncfusion.Blazor.Grids.PrintMode.CurrentPage; + } + else + { + printMode = Syncfusion.Blazor.Grids.PrintMode.AllPages; + } + TreeGrid.PrintAsync(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/CustomizeRows.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/CustomizeRows.razor new file mode 100644 index 00000000..798b5a11 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/CustomizeRows.razor @@ -0,0 +1,74 @@ +@page "/TreeGrid/Rows/customize_rows" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void OnRowDataBound(RowDataBoundEventArgs args) + { + if (args.Data.Duration == 5) + { + args.Row.AddClass(new string[] { "equal-5" }); + } + else if (args.Data.Duration > 6) + { + args.Row.AddClass(new string[] { "above-6" }); + } + } + + public class TreeData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Duration = 5, Progress = 80, Priority = "Low", ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DetailTemplate.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DetailTemplate.razor new file mode 100644 index 00000000..43cf3f0a --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DetailTemplate.razor @@ -0,0 +1,67 @@ +@page "/TreeGrid/Rows/Detailtemplate" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper + + + + +
+ +
+
+
+ @((context as Employee).Name) was lives at @((context as Employee).Address), @((context as Employee).Country). @((context as Employee).Name) holds a position of @((context as Employee).Designation) in our WA department, (Seattle USA). +
+
+ Contact:@((context as Employee).Contact) +
+
+
+
+ + + + + + + +
+ + +@code { + public Employee model = new Employee(); + public IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } + public class Employee + { + public string Name { get; set; } + public string FullName { get; set; } + public DateTime? DOB { get; set; } + public string Designation { get; set; } + public string EmpID { get; set; } + public int? EmployeeID { get; set; } + public string Country { get; set; } + public string Address { get; set; } + public string Contact { get; set; } + public int? ParentId { get; set; } + + public int? ID { get; set; } + public static List GetTemplateData() + { + List DataCollection = new List(); + + DataCollection.Add(new Employee { Name = "Robert King", FullName = "RobertKing", Designation = "Chief Executive Officer", EmployeeID = 1, EmpID = "EMP001", Address = "507 - 20th Ave. E.Apt. 2A, Seattle", Contact = "(206) 555-9857", Country = "USA", DOB = new DateTime(1963, 2, 15), ParentId = null }); + DataCollection.Add(new Employee { Name = "David william", FullName = "DavidWilliam", Designation = "Vice President", EmployeeID = 2, EmpID = "EMP004", Address = "722 Moss Bay Blvd., Kirkland", Contact = "(206) 555-3412", Country = "USA", DOB = new DateTime(1971, 5, 20), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Nancy Davolio", FullName = "NancyDavolio", Designation = "Marketing Executive", EmployeeID = 3, EmpID = "EMP035", Address = "4110 Old Redmond Rd., Redmond", Contact = "(206) 555-8122", Country = "USA", DOB = new DateTime(1966, 3, 19), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Andrew Fuller", FullName = "AndrewFuller", Designation = "Sales Representative", EmployeeID = 4, EmpID = "EMP045", Country = "UK", DOB = new DateTime(1980, 9, 20), ParentId = 1 }); + return DataCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DragandDropAnothergrid.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DragandDropAnothergrid.razor new file mode 100644 index 00000000..4da575c6 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DragandDropAnothergrid.razor @@ -0,0 +1,512 @@ +@page "/treegrid/Rows/draganddropanothergrid" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +
+
+
+ + + + + + + + + +
+
+ + + + + + + + + +
+ +@code{ + public List TreeGridData { get; set; } + public List SecondGrid { get; set; } = new List(); + protected override void OnInitialized() + { + this.TreeGridData = WrapData.GetWrapData().ToList(); + } + + + public class WrapData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public int? Duration { get; set; } + public String Progress { get; set; } + public string Priority { get; set; } + public bool Approved { get; set; } + public int Resources { get; set; } + public int? ParentId { get; set; } + public static List GetWrapData() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 1, + TaskName = "Planning", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 07, 03), + Progress = "Open", + Duration = 5, + Priority = "Normal", + Resources = 6, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 2, + TaskName = "Plan timeline", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 07, 05), + Progress = "Inprogress", + Duration = 5, + Resources = 4, + Priority = "Normal", + Approved = false, + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 3, + TaskName = "Plan budget", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 07, 07), + Duration = 5, + Progress = "Started", + Approved = true, + Resources = 6, + Priority = "Low", + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 4, + TaskName = "Allocate resources", + StartDate = new DateTime(2017, 03, 08), + EndDate = new DateTime(2017, 07, 09), + Duration = 5, + Progress = "Open", + Priority = "Critical", + ParentId = 1, + Resources = 3, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 5, + TaskName = "Planning complete", + StartDate = new DateTime(2017, 07, 10), + EndDate = new DateTime(2017, 07, 11), + Duration = 1, + Progress = "Open", + Priority = "Low", + Resources = 5, + ParentId = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 6, + TaskName = "Design", + StartDate = new DateTime(2017, 10, 12), + EndDate = new DateTime(2017, 02, 13), + Progress = "Inprogress", + Duration = 3, + Priority = "High", + Resources = 4, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 7, + TaskName = "Software Specification", + StartDate = new DateTime(2017, 10, 14), + EndDate = new DateTime(2017, 02, 15), + Duration = 3, + Progress = "Started", + Resources = 3, + Priority = "Normal", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 8, + TaskName = "Develop prototype", + StartDate = new DateTime(2017, 10, 16), + EndDate = new DateTime(2017, 02, 17), + Duration = 3, + Progress = "Inprogress", + Resources = 2, + Priority = "Critical", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 9, + TaskName = "Get approval from customer", + StartDate = new DateTime(2017, 02, 18), + EndDate = new DateTime(2017, 02, 19), + Duration = 2, + Progress = "Inprogress", + Resources = 3, + Priority = "Low", + Approved = true, + ParentId = 6 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 10, + TaskName = "Design complete", + StartDate = new DateTime(2017, 02, 20), + EndDate = new DateTime(2017, 02, 21), + Duration = 1, + Progress = "Inprogress", + Resources = 6, + Priority = "Normal", + ParentId = 6, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 12, + TaskName = "Implementation Phase", + StartDate = new DateTime(2017, 02, 22), + EndDate = new DateTime(2017, 02, 23), + Priority = "Normal", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Started", + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 13, + TaskName = "Phase 1", + StartDate = new DateTime(2017, 02, 24), + EndDate = new DateTime(2017, 02, 25), + Priority = "High", + Approved = false, + Duration = 11, + Progress = "Open", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 14, + TaskName = "Implementation Module 1", + StartDate = new DateTime(2017, 02, 26), + EndDate = new DateTime(2017, 02, 27), + Priority = "Normal", + Duration = 11, + Progress = "Started", + Resources = 3, + Approved = false, + ParentId = 13 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 15, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 06, 18), + EndDate = new DateTime(2017, 06, 19), + Duration = 3, + Progress = "Inprogress", + Priority = "High", + Resources = 2, + ParentId = 14, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 16, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 02, 13), + EndDate = new DateTime(2017, 03, 01), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Resources = 5, + ParentId = 14, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 17, + TaskName = "Testing", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 03, 03), + Duration = 2, + Progress = "Closed", + Priority = "Normal", + ParentId = 14, + Resources = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 18, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 03, 05), + Duration = 2, + Progress = "Validated", + Priority = "Critical", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 19, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 03, 07), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 20, + TaskName = "Phase 1 complete", + StartDate = new DateTime(2017, 04, 27), + EndDate = new DateTime(2017, 07, 27), + Duration = 2, + Progress = "Closed", + Priority = "Low", + ParentId = 14, + Resources = 5, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 21, + TaskName = "Phase 2", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 09, 28), + Priority = "High", + Approved = false, + Progress = "Open", + ParentId = 12, + Resources = 3, + Duration = 12, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 22, + TaskName = "Implementation Module 2", + StartDate = new DateTime(2017, 01, 17), + EndDate = new DateTime(2017, 02, 28), + Priority = "Critical", + Approved = false, + Progress = "Inprogress", + ParentId = 21, + Resources = 3, + Duration = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 23, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 20), + Duration = 4, + Progress = "Closed", + Priority = "Normal", + ParentId = 22, + Resources = 2, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 24, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 04, 17), + EndDate = new DateTime(2017, 03, 20), + Duration = 4, + Progress = "Closed", + Priority = "Critical", + ParentId = 22, + Resources = 5, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 25, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 21), + EndDate = new DateTime(2017, 01, 24), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 26, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 25), + EndDate = new DateTime(2017, 08, 26), + Duration = 2, + Progress = "Validated", + Priority = "Low", + Approved = false, + Resources = 6, + ParentId = 22 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 27, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 07, 27), + EndDate = new DateTime(2017, 06, 28), + Duration = 2, + Progress = "Inprogress", + Priority = "Critical", + ParentId = 22, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 28, + TaskName = "Phase 2 complete", + StartDate = new DateTime(2017, 07, 19), + EndDate = new DateTime(2017, 05, 28), + Duration = 2, + Priority = "Normal", + Progress = "Open", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 29, + TaskName = "Phase 3", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 02, 12), + Priority = "Normal", + Approved = false, + Duration = 11, + Progress = "Inprogress", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 30, + TaskName = "Implementation Module 3", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 27), + Priority = "High", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Validated", + ParentId = 29, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 31, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 11, 17), + EndDate = new DateTime(2017, 12, 19), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Approved = true, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 32, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 12, 17), + EndDate = new DateTime(2017, 02, 19), + Duration = 3, + Progress = "Closed", + Priority = "Normal", + Approved = false, + Resources = 2, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 33, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 01), + EndDate = new DateTime(2017, 07, 21), + Duration = 2, + Progress = "Closed", + Priority = "Critical", + ParentId = 30, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 34, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 01, 24), + EndDate = new DateTime(2017, 01, 25), + Duration = 2, + Progress = "Open", + Priority = "High", + Approved = false, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 35, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 12, 26), + EndDate = new DateTime(2017, 12, 27), + Duration = 2, + Progress = "Inprogress", + Priority = "Normal", + ParentId = 30, + Resources = 6, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 36, + TaskName = "Phase 3 complete", + StartDate = new DateTime(2017, 05, 27), + EndDate = new DateTime(2017, 05, 27), + Duration = 2, + Priority = "Critical", + Progress = "Open", + Resources = 5, + ParentId = 30, + Approved = false, + }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DragandDropWithinTreegrid.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DragandDropWithinTreegrid.razor new file mode 100644 index 00000000..1706279c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/DragandDropWithinTreegrid.razor @@ -0,0 +1,500 @@ +@page "/TreeGrid/Rows/draganddropwithintreegrid" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + +@code { + + public List TreeGridData { get; set; } + + protected override void OnInitialized() + { + TreeGridData = WrapData.GetWrapData(); + } + + public class WrapData + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public DateTime? StartDate { get; set; } + public DateTime? EndDate { get; set; } + public int? Duration { get; set; } + public String Progress { get; set; } + public string Priority { get; set; } + public bool Approved { get; set; } + public int Resources { get; set; } + public int? ParentId { get; set; } + public static List GetWrapData() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 1, + TaskName = "Planning", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 07, 03), + Progress = "Open", + Duration = 5, + Priority = "Normal", + Resources = 6, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 2, + TaskName = "Plan timeline", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 07, 05), + Progress = "Inprogress", + Duration = 5, + Resources = 4, + Priority = "Normal", + Approved = false, + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 3, + TaskName = "Plan budget", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 07, 07), + Duration = 5, + Progress = "Started", + Approved = true, + Resources = 6, + Priority = "Low", + ParentId = 1 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 4, + TaskName = "Allocate resources", + StartDate = new DateTime(2017, 03, 08), + EndDate = new DateTime(2017, 07, 09), + Duration = 5, + Progress = "Open", + Priority = "Critical", + ParentId = 1, + Resources = 3, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 5, + TaskName = "Planning complete", + StartDate = new DateTime(2017, 07, 10), + EndDate = new DateTime(2017, 07, 11), + Duration = 1, + Progress = "Open", + Priority = "Low", + Resources = 5, + ParentId = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 6, + TaskName = "Design", + StartDate = new DateTime(2017, 10, 12), + EndDate = new DateTime(2017, 02, 13), + Progress = "Inprogress", + Duration = 3, + Priority = "High", + Resources = 4, + Approved = false, + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 7, + TaskName = "Software Specification", + StartDate = new DateTime(2017, 10, 14), + EndDate = new DateTime(2017, 02, 15), + Duration = 3, + Progress = "Started", + Resources = 3, + Priority = "Normal", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 8, + TaskName = "Develop prototype", + StartDate = new DateTime(2017, 10, 16), + EndDate = new DateTime(2017, 02, 17), + Duration = 3, + Progress = "Inprogress", + Resources = 2, + Priority = "Critical", + ParentId = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 9, + TaskName = "Get approval from customer", + StartDate = new DateTime(2017, 02, 18), + EndDate = new DateTime(2017, 02, 19), + Duration = 2, + Progress = "Inprogress", + Resources = 3, + Priority = "Low", + Approved = true, + ParentId = 6 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 10, + TaskName = "Design complete", + StartDate = new DateTime(2017, 02, 20), + EndDate = new DateTime(2017, 02, 21), + Duration = 1, + Progress = "Inprogress", + Resources = 6, + Priority = "Normal", + ParentId = 6, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 12, + TaskName = "Implementation Phase", + StartDate = new DateTime(2017, 02, 22), + EndDate = new DateTime(2017, 02, 23), + Priority = "Normal", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Started", + ParentId = null + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 13, + TaskName = "Phase 1", + StartDate = new DateTime(2017, 02, 24), + EndDate = new DateTime(2017, 02, 25), + Priority = "High", + Approved = false, + Duration = 11, + Progress = "Open", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 14, + TaskName = "Implementation Module 1", + StartDate = new DateTime(2017, 02, 26), + EndDate = new DateTime(2017, 02, 27), + Priority = "Normal", + Duration = 11, + Progress = "Started", + Resources = 3, + Approved = false, + ParentId = 13 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 15, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 06, 18), + EndDate = new DateTime(2017, 06, 19), + Duration = 3, + Progress = "Inprogress", + Priority = "High", + Resources = 2, + ParentId = 14, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 16, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 02, 13), + EndDate = new DateTime(2017, 03, 01), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Resources = 5, + ParentId = 14, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 17, + TaskName = "Testing", + StartDate = new DateTime(2017, 03, 02), + EndDate = new DateTime(2017, 03, 03), + Duration = 2, + Progress = "Closed", + Priority = "Normal", + ParentId = 14, + Resources = 1, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 18, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 04), + EndDate = new DateTime(2017, 03, 05), + Duration = 2, + Progress = "Validated", + Priority = "Critical", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 19, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 03, 06), + EndDate = new DateTime(2017, 03, 07), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 14, + Resources = 6, + Approved = false + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 20, + TaskName = "Phase 1 complete", + StartDate = new DateTime(2017, 04, 27), + EndDate = new DateTime(2017, 07, 27), + Duration = 2, + Progress = "Closed", + Priority = "Low", + ParentId = 14, + Resources = 5, + Approved = true + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 21, + TaskName = "Phase 2", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 09, 28), + Priority = "High", + Approved = false, + Progress = "Open", + ParentId = 12, + Resources = 3, + Duration = 12, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 22, + TaskName = "Implementation Module 2", + StartDate = new DateTime(2017, 01, 17), + EndDate = new DateTime(2017, 02, 28), + Priority = "Critical", + Approved = false, + Progress = "Inprogress", + ParentId = 21, + Resources = 3, + Duration = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 23, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 20), + Duration = 4, + Progress = "Closed", + Priority = "Normal", + ParentId = 22, + Resources = 2, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 24, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 04, 17), + EndDate = new DateTime(2017, 03, 20), + Duration = 4, + Progress = "Closed", + Priority = "Critical", + ParentId = 22, + Resources = 5, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 25, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 21), + EndDate = new DateTime(2017, 01, 24), + Duration = 2, + Progress = "Open", + Priority = "High", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 26, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 03, 25), + EndDate = new DateTime(2017, 08, 26), + Duration = 2, + Progress = "Validated", + Priority = "Low", + Approved = false, + Resources = 6, + ParentId = 22 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 27, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 07, 27), + EndDate = new DateTime(2017, 06, 28), + Duration = 2, + Progress = "Inprogress", + Priority = "Critical", + ParentId = 22, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 28, + TaskName = "Phase 2 complete", + StartDate = new DateTime(2017, 07, 19), + EndDate = new DateTime(2017, 05, 28), + Duration = 2, + Priority = "Normal", + Progress = "Open", + ParentId = 22, + Resources = 3, + Approved = false, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 29, + TaskName = "Phase 3", + StartDate = new DateTime(2017, 07, 17), + EndDate = new DateTime(2017, 02, 12), + Priority = "Normal", + Approved = false, + Duration = 11, + Progress = "Inprogress", + Resources = 4, + ParentId = 12 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 30, + TaskName = "Implementation Module 3", + StartDate = new DateTime(2017, 08, 17), + EndDate = new DateTime(2017, 09, 27), + Priority = "High", + Approved = false, + Duration = 11, + Resources = 5, + Progress = "Validated", + ParentId = 29, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 31, + TaskName = "Development Task 1", + StartDate = new DateTime(2017, 11, 17), + EndDate = new DateTime(2017, 12, 19), + Duration = 3, + Progress = "Closed", + Priority = "Low", + Approved = true, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 32, + TaskName = "Development Task 2", + StartDate = new DateTime(2017, 12, 17), + EndDate = new DateTime(2017, 02, 19), + Duration = 3, + Progress = "Closed", + Priority = "Normal", + Approved = false, + Resources = 2, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 33, + TaskName = "Testing", + StartDate = new DateTime(2017, 01, 01), + EndDate = new DateTime(2017, 07, 21), + Duration = 2, + Progress = "Closed", + Priority = "Critical", + ParentId = 30, + Resources = 4, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 34, + TaskName = "Bug fix", + StartDate = new DateTime(2017, 01, 24), + EndDate = new DateTime(2017, 01, 25), + Duration = 2, + Progress = "Open", + Priority = "High", + Approved = false, + Resources = 3, + ParentId = 30 + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 35, + TaskName = "Customer review meeting", + StartDate = new DateTime(2017, 12, 26), + EndDate = new DateTime(2017, 12, 27), + Duration = 2, + Progress = "Inprogress", + Priority = "Normal", + ParentId = 30, + Resources = 6, + Approved = true, + }); + BusinessObjectCollection.Add(new WrapData() + { + TaskId = 36, + TaskName = "Phase 3 complete", + StartDate = new DateTime(2017, 05, 27), + EndDate = new DateTime(2017, 05, 27), + Duration = 2, + Priority = "Critical", + Progress = "Open", + Resources = 5, + ParentId = 30, + Approved = false, + }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/RowTemplate.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/RowTemplate.razor new file mode 100644 index 00000000..07629e36 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/RowTemplate.razor @@ -0,0 +1,83 @@ +@page "/TreeGrid/Rows/rowtemplate" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper + + + + + + + @{ + var cntxt = context as Employee; +
@(cntxt.EmpID)
+ } +
+ + +
+ @((context as Employee).FullName) +
+ + +
+
+ @((context +
+
+
@((context as Employee).Address)
+
@((context as Employee).Country)
+
@((context as Employee).Contact)
+
+
+ + +
@((context as Employee).Designation)
+ +
+
+ + + + + + +
+ + +@code { + public Employee model = new Employee(); + public IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } + public class Employee + { + public string Name { get; set; } + public string FullName { get; set; } + public DateTime? DOB { get; set; } + public string Designation { get; set; } + public string EmpID { get; set; } + public int? EmployeeID { get; set; } + public string Country { get; set; } + public string Address { get; set; } + public string Contact { get; set; } + public int? ParentId { get; set; } + public int? ID { get; set; } + + public static List GetTemplateData() + { + List DataCollection = new List(); + + DataCollection.Add(new Employee { Name = "Robert King", FullName = "RobertKing", Designation = "Chief Executive Officer", EmployeeID = 1, EmpID = "EMP001", Address = "507 - 20th Ave. E.Apt. 2A, Seattle", Contact = "(206) 555-9857", Country = "USA", DOB = new DateTime(1963, 2, 15), ParentId = null }); + DataCollection.Add(new Employee { Name = "David william", FullName = "DavidWilliam", Designation = "Vice President", EmployeeID = 2, EmpID = "EMP004", Address = "722 Moss Bay Blvd., Kirkland", Contact = "(206) 555-3412", Country = "USA", DOB = new DateTime(1971, 5, 20), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Nancy Davolio", FullName = "NancyDavolio", Designation = "Marketing Executive", EmployeeID = 3, EmpID = "EMP035", Address = "4110 Old Redmond Rd., Redmond", Contact = "(206) 555-8122", Country = "USA", DOB = new DateTime(1966, 3, 19), ParentId = 1 }); + DataCollection.Add(new Employee { Name = "Andrew Fuller", FullName = "AndrewFuller", Designation = "Sales Representative", EmployeeID = 4, EmpID = "EMP045", Country = "UK", DOB = new DateTime(1980, 9, 20), ParentId = 1 }); + return DataCollection; + } + } + + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/Rowheight.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/Rowheight.razor new file mode 100644 index 00000000..73cd8741 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/Rowheight.razor @@ -0,0 +1,48 @@ +@page "/treegrid/rows/Rowheight" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 6, Progress = 80, ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, ParentId = 5 }); + return BusinessObjectCollection; + } + } +} +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/Style_Alternate_Rows.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/Style_Alternate_Rows.razor new file mode 100644 index 00000000..9fdaa30e --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Rows/Style_Alternate_Rows.razor @@ -0,0 +1,54 @@ +@page "/treegrid/rows/style-alternate-rows" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + public class TreeData + { + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public int? ParentId { get; set; } + } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Duration = 6, Progress = 80, ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, ParentId = 5 }); + return BusinessObjectCollection; + } + } +} + + \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/FrozenRowsAndColumns.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/FrozenRowsAndColumns.razor new file mode 100644 index 00000000..cd81ba03 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/FrozenRowsAndColumns.razor @@ -0,0 +1,24 @@ +@page "/treegrid/scrolling/frozenrowsandcolumns" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/ResponsiveWithParent.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/ResponsiveWithParent.razor new file mode 100644 index 00000000..ea926fff --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/ResponsiveWithParent.razor @@ -0,0 +1,37 @@ +@page "/treegrid/scrolling/responsivewithparent" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + +
+ + + + + + + + + +
+ +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} + + \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/ScrollProgrammatically.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/ScrollProgrammatically.razor new file mode 100644 index 00000000..6181954b --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/ScrollProgrammatically.razor @@ -0,0 +1,55 @@ +@page "/treegrid/scrolling/setprogrammatically" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid +@using Syncfusion.Blazor.Buttons +
+
+ ColumnIndex: +
+
+ + +
+
+
+
+ RowIndex: +
+
+ + +
+
+ + + + + + + + + + + + + + +@code { + public List TreeData { get; set; } + SfTreeGrid TreeGrid { get; set; } + public int ColumnIndex { get; set; } = -1; + public int RowIndex { get; set; } = -1; + public int RowHeight { get; set; } = -1; + protected override void OnInitialized() + { + this.TreeData = sampleData.GetTreeSampleData().ToList(); + } + public async Task Scroll() + { + await TreeGrid.ScrollIntoViewAsync(ColumnIndex, RowIndex, RowHeight); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/SetWiidhtAndHeight.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/SetWiidhtAndHeight.razor new file mode 100644 index 00000000..a15f27cf --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/SetWiidhtAndHeight.razor @@ -0,0 +1,23 @@ +@page "/treegrid/scrolling/setwidthandheight" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/StickyHeader.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/StickyHeader.razor new file mode 100644 index 00000000..4ec7d494 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Scrolling/StickyHeader.razor @@ -0,0 +1,46 @@ +@page "/treegrid/scrolling/stickyheader" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Grids; + +
+ + +
+ +
+ + + + + + + + + + + + + + +
+ +@code { + public SfTreeGrid TreeGrid; + public List TreeData { get; set; } + public bool isStickyHeaderEnabled; + + protected override void OnInitialized() + { + this.TreeData = sampleData.GetTreeSampleData().ToList(); + } + + private void Change(Syncfusion.Blazor.Buttons.ChangeEventArgs args) + { + isStickyHeaderEnabled = args.Checked; + TreeGrid.RefreshAsync(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Searching.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Searching.razor new file mode 100644 index 00000000..5b8c7d74 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Searching.razor @@ -0,0 +1,58 @@ +

Searching, Initial Search and by external method

+@page "/treegrid/searching" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Data; + + + + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + public BusinessObject[] TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = BusinessObject.GetSelfDataSource().ToList().Cast().ToArray(); + } + private void search() + { + this.TreeGrid.SearchAsync("Child Task 1"); + } + + public class BusinessObject + { + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List BusinessObjectCollection = new List(); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + BusinessObjectCollection.Add(new BusinessObject() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return BusinessObjectCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/CellSelection.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/CellSelection.razor new file mode 100644 index 00000000..efba8aef --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/CellSelection.razor @@ -0,0 +1,25 @@ +@page "/treegrid/selection/cellselection" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/CheckBoxSelection.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/CheckBoxSelection.razor new file mode 100644 index 00000000..7107524f --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/CheckBoxSelection.razor @@ -0,0 +1,25 @@ +@page "/treegrid/selection/checkboxselection" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/DefaultSelection.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/DefaultSelection.razor new file mode 100644 index 00000000..0abb645b --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/DefaultSelection.razor @@ -0,0 +1,24 @@ +@page "/treegrid/selection/defaultselection" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/DragSelection.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/DragSelection.razor new file mode 100644 index 00000000..9b278414 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/DragSelection.razor @@ -0,0 +1,28 @@ +@page "/treegrid/selection/dragselection" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + SfTreeGrid TreeGrid; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/InitialSelection.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/InitialSelection.razor new file mode 100644 index 00000000..6b36ee7a --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/InitialSelection.razor @@ -0,0 +1,23 @@ +@page "/treegrid/selection/initialselection" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/SelectedRowIndex.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/SelectedRowIndex.razor new file mode 100644 index 00000000..62d42d1c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/SelectedRowIndex.razor @@ -0,0 +1,47 @@ +@page "/treegrid/selection/selectedrowindex" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; +@using Newtonsoft.Json; +@inject IJSRuntime JsRuntime; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + SfTreeGrid TreeGrid; + + public List SelectedRowIndexes { get; set; } + + public List SelectedRecords { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + + private async void RowSelectHandler(RowSelectEventArgs args) + { + this.SelectedRowIndexes = await this.TreeGrid.GetSelectedRowIndexesAsync(); /// get the selected row indexes + + string index = JsonConvert.SerializeObject(this.SelectedRowIndexes); + JsRuntime.InvokeAsync("window.alert", index); + + this.SelectedRecords = await this.TreeGrid.GetSelectedRecordsAsync(); /// get the selected records + + string records = JsonConvert.SerializeObject(this.SelectedRecords); + JsRuntime.InvokeAsync("window.alert", records); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/ToggleSelection.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/ToggleSelection.razor new file mode 100644 index 00000000..5fbd9f12 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Selection/ToggleSelection.razor @@ -0,0 +1,28 @@ +@page "/treegrid/selection/toggleselection" +@rendermode InteractiveWebAssembly + +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + + SfTreeGrid TreeGrid; + + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Sorting.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Sorting.razor new file mode 100644 index 00000000..3476c692 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Sorting.razor @@ -0,0 +1,65 @@ +

Initial Sort, Sort and Events

+@page "/treegrid/sorting" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + + + + + + +@code { + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeData.GetSelfDataSource().ToList(); + } + + private void SortingHandler(SortingEventArgs args) + { + //Customize code + } + + private void SortedHandler(SortedEventArgs args) + { + //Customize code + } + public class TreeData + { + + public int TaskId { get; set; } + public string TaskName { get; set; } + public int? Duration { get; set; } + public int? Progress { get; set; } + public string Priority { get; set; } + public int? ParentId { get; set; } + + public static List GetSelfDataSource() + { + List TreeDataCollection = new List(); + TreeDataCollection.Add(new TreeData() { TaskId = 1, TaskName = "Parent Task 1", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 2, TaskName = "Child task 1", Progress = 80, Priority = "Low", ParentId = 1 }); + TreeDataCollection.Add(new TreeData() { TaskId = 3, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Critical", ParentId = 2 }); + TreeDataCollection.Add(new TreeData() { TaskId = 4, TaskName = "Child task 3", Duration = 6, Priority = "High", Progress = 77, ParentId = 3 }); + TreeDataCollection.Add(new TreeData() { TaskId = 5, TaskName = "Parent Task 2", Duration = 10, Progress = 70, Priority = "Critical", ParentId = null }); + TreeDataCollection.Add(new TreeData() { TaskId = 6, TaskName = "Child task 1", Duration = 4, Progress = 80, Priority = "Critical", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 7, TaskName = "Child Task 2", Duration = 5, Progress = 65, Priority = "Low", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 8, TaskName = "Child task 3", Duration = 6, Progress = 77, Priority = "High", ParentId = 5 }); + TreeDataCollection.Add(new TreeData() { TaskId = 9, TaskName = "Child task 4", Duration = 6, Progress = 77, Priority = "Low", ParentId = 5 }); + return TreeDataCollection; + } + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Templates.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Templates.razor new file mode 100644 index 00000000..a130c283 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Templates.razor @@ -0,0 +1,37 @@ +@page "/TreeGrid/Template" +@rendermode InteractiveWebAssembly + + +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids +@using TreeGridUGSample.Components.Data +@inject Microsoft.AspNetCore.Components.NavigationManager UriHelper + + + + + + + + + + + + + + +@code { + public Employee model = new Employee(); + public IEnumerable TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = Employee.GetTemplateData(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Toolbar.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Toolbar.razor new file mode 100644 index 00000000..cb96637c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Toolbar.razor @@ -0,0 +1,66 @@ +@page "/treegrid/toolbar" +@rendermode InteractiveWebAssembly + +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; +@using TreeGridUGSample.Components.Data; + +
+
Enable or Disable Toolbar Items
+
+ +
+
+ +
+
+ +@{ + var Tool = (new string[] { "Add","Edit","Delete","Update","Cancel","Search","Print","ExpandAll", "CollapseAll" }); +} + + + + + + + + + + + + +@code { + SfTreeGrid TreeGrid; + + public async void Enable() + { + await this.TreeGrid.EnableToolbarItemsAsync(new List() { "TreeGrid_gridcontrol_ExpandAll", "TreeGrid_gridcontrol_CollapseAll" }, true); + await this.TreeGrid.RefreshAsync(); + } + + public async void Disable() + { + await this.TreeGrid.EnableToolbarItemsAsync(new List() { "TreeGrid_gridcontrol_ExpandAll", "TreeGrid_gridcontrol_CollapseAll" }, false); + await this.TreeGrid.RefreshAsync(); + } + + public void ToolBarClick(Syncfusion.Blazor.Navigations.ClickEventArgs Args) + { + if (Args.Item.Text == "ExpandAll") + { + this.TreeGrid.ExpandAll(); + } + if (Args.Item.Text == "CollapseAll") + { + this.TreeGrid.CollapseAllAsync(); + } + } + + public List TreeGridData { get; set; } + protected override void OnInitialized() + { + this.TreeGridData = TreeDatas.GetSelfDataSources().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/CellPlaceholder.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/CellPlaceholder.razor new file mode 100644 index 00000000..88b96c43 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/CellPlaceholder.razor @@ -0,0 +1,29 @@ +@page "/treegrid/virtualization/cellplaceholder" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using TreeGridUGSample.Components.Data; +@using Syncfusion.Blazor.Grids + + + + + + + + + + + + + + + + +@code { + private List TreeGridData { get; set; } = new List(); + protected override void OnInitialized() + { + TreeGridData = VirtualData.GetTreeVirtualData(); + } + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/ColumnVirtualization.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/ColumnVirtualization.razor new file mode 100644 index 00000000..1d96a5b1 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/ColumnVirtualization.razor @@ -0,0 +1,29 @@ +@page "/treegrid/virtualization/columnvirtualization" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid; + + + + + + + + + + + + + + + + + +@code { + public List TreeData { get; set; } + protected override void OnInitialized() + { + this.TreeData = VirtualData.GetTreeVirtualData().ToList(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/Hierarchical.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/Hierarchical.razor new file mode 100644 index 00000000..5338b3f5 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/Hierarchical.razor @@ -0,0 +1,62 @@ +@page "/treegrid/virtualization/virtualhierarchydata" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + + + +@code { + // Reference to Tree Grid instance. + private SfTreeGrid TreeGrid; + public VirtualHierarchyData[] TreeGridData { get; set; } + + // On component initialization, flatten the hierarchical data and bind to Tree Grid. + protected override void OnInitialized() + { + this.TreeGridData = HierarchyToFlatData(VirtualHierarchyData.GetVirtualHierarchyData(), "Children").ToArray(); + } + + // Recursive method to flatten hierarchical data into a linear list preserving display order. + public List HierarchyToFlatData(List dataSource, string childMapping, List addedData = null) + { + // If no list is passed to collect flat data, create a new one. + if (addedData == null) + { + addedData = new List(); + } + + foreach (var item in dataSource) + { + // Add the current item to the flat list. + addedData.Add(item); + + // Get the property info for the child mapping (e.g., "Children"). + var propertyInfo = item.GetType().GetProperty(childMapping); + + // Get the children using the property name. + var children = propertyInfo?.GetValue(item) as IEnumerable; + if (children != null) + { + // Recursive call to process children. + HierarchyToFlatData(children.ToList(), childMapping, addedData); + } + } + + // Return the final flat list. + return addedData; + } + + // Sample data model with recursive Children property. + +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/ManagingRecords.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/ManagingRecords.razor new file mode 100644 index 00000000..b4f89fe3 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/ManagingRecords.razor @@ -0,0 +1,41 @@ +@page "/treegrid/virtualization/managingrecords" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.TreeGrid + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@code { + private List TreeGridData { get; set; } = new List(); + protected override void OnInitialized() + { + TreeGridData = VirtualData.GetTreeVirtualData(); + + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/RowVirtualization.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/RowVirtualization.razor new file mode 100644 index 00000000..8896bfe7 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Pages/TreeGrid/Virtualization/RowVirtualization.razor @@ -0,0 +1,24 @@ +@page "/treegrid/virtualization/rowvirtualization" +@rendermode InteractiveWebAssembly +@using TreeGridUGSample.Components.Data +@using Syncfusion.Blazor.TreeGrid; +@using Syncfusion.Blazor.Grids; + + + + + + + + + + + +@code { + public VirtualDataRow[] TreeGridData { get; set; } + + protected override void OnInitialized() + { + this.TreeGridData = VirtualDataRow.GetVirtualDataRow().ToArray(); + } +} \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Program.cs b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Program.cs new file mode 100644 index 00000000..563a258d --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/Program.cs @@ -0,0 +1,6 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using Syncfusion.Blazor; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); +builder.Services.AddSyncfusionBlazor(); +await builder.Build().RunAsync(); diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/TreeGridUGSample.Client.csproj b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/TreeGridUGSample.Client.csproj new file mode 100644 index 00000000..851c5039 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/TreeGridUGSample.Client.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + enable + enable + true + Default + + + + + + + + + + + diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/_Imports.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/_Imports.razor new file mode 100644 index 00000000..ff4732df --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/_Imports.razor @@ -0,0 +1,11 @@ +@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 TreeGridUGSample.Client +@using Syncfusion.Blazor +@using Syncfusion.Blazor.TreeGrid diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/wwwroot/appsettings.Development.json b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/wwwroot/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/wwwroot/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/wwwroot/appsettings.json b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/wwwroot/appsettings.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.Client/wwwroot/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.sln b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.sln new file mode 100644 index 00000000..533890c6 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36221.1 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TreeGridUGSample", "TreeGridUGSample\TreeGridUGSample.csproj", "{BCC32DAB-A78F-45DE-8FA7-31F97FF8333D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TreeGridUGSample.Client", "TreeGridUGSample.Client\TreeGridUGSample.Client.csproj", "{DE35EB78-C8A6-478C-B2F8-5D4297230D1C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BCC32DAB-A78F-45DE-8FA7-31F97FF8333D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BCC32DAB-A78F-45DE-8FA7-31F97FF8333D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCC32DAB-A78F-45DE-8FA7-31F97FF8333D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BCC32DAB-A78F-45DE-8FA7-31F97FF8333D}.Release|Any CPU.Build.0 = Release|Any CPU + {DE35EB78-C8A6-478C-B2F8-5D4297230D1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE35EB78-C8A6-478C-B2F8-5D4297230D1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE35EB78-C8A6-478C-B2F8-5D4297230D1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE35EB78-C8A6-478C-B2F8-5D4297230D1C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FBB87CDB-5B9B-4846-B590-E1C414A0A16A} + EndGlobalSection +EndGlobal diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/App.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/App.razor new file mode 100644 index 00000000..7489b92e --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/App.razor @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/MainLayout.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/MainLayout.razor new file mode 100644 index 00000000..5a24bb13 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/MainLayout.razor @@ -0,0 +1,23 @@ +@inherits LayoutComponentBase + +
+ + +
+
+ About +
+ +
+ @Body +
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/MainLayout.razor.css b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/MainLayout.razor.css new file mode 100644 index 00000000..038baf17 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/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/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/NavMenu.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/NavMenu.razor new file mode 100644 index 00000000..6adcdb72 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/NavMenu.razor @@ -0,0 +1,30 @@ + + + + + + diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/NavMenu.razor.css b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Layout/NavMenu.razor.css new file mode 100644 index 00000000..4e15395e --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/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/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Error.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Error.razor new file mode 100644 index 00000000..576cc2d2 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/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/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Home.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Home.razor new file mode 100644 index 00000000..9001e0bd --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Home.razor @@ -0,0 +1,7 @@ +@page "/" + +Home + +

Hello, world!

+ +Welcome to your new app. diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Weather.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Weather.razor new file mode 100644 index 00000000..43a1ecbe --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Pages/Weather.razor @@ -0,0 +1,64 @@ +@page "/weather" +@attribute [StreamRendering] + +Weather + +

Weather

+ +

This component demonstrates showing data.

+ +@if (forecasts == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@code { + private WeatherForecast[]? forecasts; + + protected override async Task OnInitializedAsync() + { + // Simulate asynchronous loading to demonstrate streaming rendering + await Task.Delay(500); + + var startDate = DateOnly.FromDateTime(DateTime.Now); + var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; + forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = summaries[Random.Shared.Next(summaries.Length)] + }).ToArray(); + } + + private class WeatherForecast + { + public DateOnly Date { get; set; } + public int TemperatureC { get; set; } + public string? Summary { get; set; } + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Routes.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Routes.razor new file mode 100644 index 00000000..d39c7e89 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/_Imports.razor b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/_Imports.razor new file mode 100644 index 00000000..70e869aa --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Components/_Imports.razor @@ -0,0 +1,11 @@ +@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 TreeGridUGSample +@using TreeGridUGSample.Client +@using TreeGridUGSample.Components diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Program.cs b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Program.cs new file mode 100644 index 00000000..56dc70c9 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Program.cs @@ -0,0 +1,34 @@ +using TreeGridUGSample.Client.Pages; +using TreeGridUGSample.Components; +using Syncfusion.Blazor; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddRazorComponents() + .AddInteractiveWebAssemblyComponents(); +builder.Services.AddSyncfusionBlazor(); +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseWebAssemblyDebugging(); +} +else +{ + 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() + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(TreeGridUGSample.Client._Imports).Assembly); + +app.Run(); diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Properties/launchSettings.json b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Properties/launchSettings.json new file mode 100644 index 00000000..62c822a6 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:29424", + "sslPort": 44328 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5045", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7171;http://localhost:5045", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } + } diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/TreeGridUGSample.csproj b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/TreeGridUGSample.csproj new file mode 100644 index 00000000..ef407d63 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/TreeGridUGSample.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/TreeGridUGSample.csproj.user b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/TreeGridUGSample.csproj.user new file mode 100644 index 00000000..9ff5820a --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/TreeGridUGSample.csproj.user @@ -0,0 +1,6 @@ + + + + https + + \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/appsettings.Development.json b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/appsettings.json b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/appsettings.json new file mode 100644 index 00000000..10f68b8c --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/app.css b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/app.css new file mode 100644 index 00000000..2bd9b789 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/app.css @@ -0,0 +1,51 @@ +html, body { + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +a, .btn-link { + color: #006bb7; +} + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { + box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; +} + +.content { + padding-top: 1.1rem; +} + +h1:focus { + outline: none; +} + +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid #e50000; +} + +.validation-message { + color: #e50000; +} + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + + .blazor-error-boundary::after { + content: "An error has occurred." + } + +.darker-border-checkbox.form-check-input { + border-color: #929292; +} diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/bootstrap/bootstrap.min.css b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/bootstrap/bootstrap.min.css new file mode 100644 index 00000000..02ae65b5 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/bootstrap/bootstrap.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * Bootstrap v5.1.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-rgb:33,37,41;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) * -.5);margin-left:calc(var(--bs-gutter-x) * -.5)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-bottom,.navbar-expand-sm .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-bottom,.navbar-expand-md .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-bottom,.navbar-expand-lg .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-bottom,.navbar-expand-xl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-bottom,.navbar-expand-xxl .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible!important;background-color:transparent;border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-bottom,.navbar-expand .offcanvas-top{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image: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")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid rgba(0,0,0,.2);border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1045;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin-top:-.5rem;margin-right:-.5rem;margin-bottom:-.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentColor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/bootstrap/bootstrap.min.css.map b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/bootstrap/bootstrap.min.css.map new file mode 100644 index 00000000..afcd9e33 --- /dev/null +++ b/TreeGrid/WebApp-WASM/TreeGridUGSample/TreeGridUGSample/wwwroot/bootstrap/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-rgb: #{to-rgb($body-color)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}-root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`