using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Rendering; using System; using System.Diagnostics.CodeAnalysis; namespace FastReport.Web.Blazor.Export { internal sealed class ElementContext : IRenderContext { private readonly IRenderContext _context; private int deepLevel = 0; public ElementContext(RenderTreeBuilder builder) : this(new RenderContext(builder)) { } public ElementContext(IRenderContext context) { _context = context; } public ElementContext(IRenderContext context, string elementName) : this(context) { OpenElement(elementName); } public void OpenElement(string elementName) { _context.OpenElement(elementName); deepLevel++; } public bool IsClosed => deepLevel == 0; public void CloseElement() { _context.CloseElement(); deepLevel--; } public void Dispose() { while (deepLevel > 0) CloseElement(); } public void AddMarkupContent(string? markupContent) => _context.AddMarkupContent(markupContent); public void AddContent(string? textContent) => _context.AddContent(textContent); public void AddContent(RenderFragment? fragment) => _context.AddContent(fragment); public void AddContent(RenderFragment? fragment, TValue value) => _context.AddContent(fragment, value); public void AddContent(MarkupString markupContent) => _context.AddContent(markupContent); public void AddAttribute(string name, bool value) => _context.AddAttribute(name, value); public void AddAttribute(string name, string? value) => _context.AddAttribute(name, value); public void AddAttribute(string name, MulticastDelegate? value) => _context.AddAttribute(name, value); public void AddAttribute(string name, object? value) => _context.AddAttribute(name, value); public void OpenComponent<[DynamicallyAccessedMembers(LinkerFlags.All)] TComponent>() where TComponent : notnull, IComponent => _context.OpenComponent(); public void CloseComponent() => _context.CloseComponent(); public void AddOnClick(OnClickEventArgs click) => _context.AddOnClick(click); } }