{# @description One row of a formset: a leading hairline, a header naming the row, its fields, and a remove control. #}
{# @prop form:text | description:"The row's Django form." #}
{# @prop label:text | description:"Row label; defaults to the object's string, or its model name when unsaved." #}
{# @prop class:text | description:"Extra classes on the root element." #}
{# @prop first:boolean | default:False | description:"Suppresses the leading hairline for the first row." #}
{# @prop can-delete:boolean | default:False | description:"Show the remove control, when this row also has a DELETE field." #}
{# @prop layout:select['stacked','tabular'] | default:"stacked" | description:"Row presentation; tabular aligns fields to the set's column grid from sm up." #}
{# @prop grid-style:text | description:"Column-track CSS passed down from the set, for tabular layout." #}
{# @prop remove-label:text | default:"Remove" | description:"Accessible name for the remove control." #}
{% comment %}
The rule leads rather than trails so a removed row takes its own separator
with it. `first` defaults False so a row cloned from the empty-form
template - always appended after the others - still gets one.
{% endcomment %}
{% load i18n crispy_forms_filters mvp %}