/// <summary>
 /// Generates a <c>&lt;p&gt;</c> block containing a component of the specified type,
 /// adding the given id and CSS class attributes to the <c>&lt;p&gt;</c> and setting its
 /// key, if provided.
 /// </summary>
 /// <remarks>
 /// Note: This block is automatically closed, so calling
 /// <see cref="FluentRenderTreeBuilder.Close(bool, int)">Close(...)</see> is unnecessary.
 /// </remarks>
 /// <typeparam name="TComponent">The <see cref="Type"/> of the component to add.</typeparam>
 /// <param name="frtb">The <see cref="FluentRenderTreeBuilder"/>.</param>
 /// <param name="class">The optional CSS class name.</param>
 /// <param name="id">The optional id attribute value.</param>
 /// <param name="key">The optional key to set for this element.</param>
 /// <param name="prettyPrint"><c>false</c> to prevent insertion of newline and indent
 /// whitespace before the markup for this element, even if
 /// <see cref="FluentRenderTreeBuilder.PrettyPrinting"/> is enabled.</param>
 /// <param name="line">The source code line number used to generate the sequence number.</param>
 public static FluentRenderTreeBuilder ComponentP <TComponent>(this FluentRenderTreeBuilder frtb,
                                                               string? @class = null, string?id = null, object?key = null, bool prettyPrint = true,
                                                               [CallerLineNumber] int line = 0)
     where TComponent : IComponent
 => frtb.ComponentElement <TComponent>("p", @class, id, key, prettyPrint, line);
 /// <summary>
 /// Generates a <c>&lt;p&gt;</c> block containing a component of the given type, adding
 /// the given id and CSS class attributes to the <c>&lt;p&gt;</c> and setting its key,
 /// if provided.
 /// </summary>
 /// <remarks>
 /// Note: This block is automatically closed, so calling
 /// <see cref="FluentRenderTreeBuilder.Close(bool, int)">Close(...)</see> is unnecessary.
 /// </remarks>
 /// <param name="frtb">The <see cref="FluentRenderTreeBuilder"/>.</param>
 /// <param name="type">The <see cref="Type"/> of the component to add.</param>
 /// <param name="class">The optional CSS class name.</param>
 /// <param name="id">The optional id attribute value.</param>
 /// <param name="key">The optional key to set for this element.</param>
 /// <param name="prettyPrint"><c>false</c> to prevent insertion of newline and indent
 /// whitespace before the markup for this element, even if
 /// <see cref="FluentRenderTreeBuilder.PrettyPrinting"/> is enabled.</param>
 /// <param name="line">The source code line number used to generate the sequence number.</param>
 public static FluentRenderTreeBuilder ComponentP(this FluentRenderTreeBuilder frtb,
                                                  Type type, string? @class = null, string?id                   = null, object?key = null,
                                                  bool prettyPrint          = true, [CallerLineNumber] int line = 0)
 => frtb.ComponentElement("p", type, @class, id, key, prettyPrint, line);