/// <summary>
 /// Adds an <c>id</c> attribute.
 /// </summary>
 /// <remarks>
 /// Passing in a null or empty <paramref name="value"/> results in no attribute being generated.
 /// </remarks>
 /// <param name="frtb">The <see cref="FluentRenderTreeBuilder"/>.</param>
 /// <param name="value">The id value.</param>
 /// <param name="line">The source code line number used to generate the sequence number.</param>
 public static FluentRenderTreeBuilder Id(this FluentRenderTreeBuilder frtb, string?value,
                                          [CallerLineNumber] int line = 0)
 => string.IsNullOrEmpty(value) ? frtb : frtb.Attribute("id", value, line);
 /// <summary>
 /// Adds a <c>data-[name]</c> attribute.
 /// </summary>
 /// <param name="frtb"></param>
 /// <param name="name">The data value name.</param>
 /// <param name="value">The data value.</param>
 /// <param name="line">The source code line number used to generate the sequence number.</param>
 public static FluentRenderTreeBuilder Data(this FluentRenderTreeBuilder frtb, string?name,
                                            object value, [CallerLineNumber] int line = 0)
 => string.IsNullOrEmpty(name) ? frtb : frtb.Attribute($"data-{name}", value, line);
 /// <summary>
 /// Adds a CSS <c>class</c> attribute.
 /// </summary>
 /// <remarks>
 /// Passing in a null or empty <paramref name="name"/> results in no attribute being generated.
 /// </remarks>
 /// <param name="frtb">The <see cref="FluentRenderTreeBuilder"/>.</param>
 /// <param name="name">The class name.</param>
 /// <param name="line">The source code line number used to generate the sequence number.</param>
 public static FluentRenderTreeBuilder Class(this FluentRenderTreeBuilder frtb, string?name,
                                             [CallerLineNumber] int line = 0)
 => string.IsNullOrEmpty(name) ? frtb : frtb.Attribute("class", name, line);