from typing import Any, Dict, List, NamedTuple, Optional, Set, Tuple from django_components import Component, Slot, register, types @register("form") class Form(Component): template_file = "form.html" class Kwargs(NamedTuple): editable: bool = True method: str = "post" form_content_attrs: Optional[dict] = None attrs: Optional[dict] = None def get_template_data(self, args, kwargs: Kwargs, slots: Dict[str, Slot], context): fields = prepare_form_grid(slots) return { "form_content_attrs": kwargs.form_content_attrs, "method": kwargs.method, "editable": kwargs.editable, "attrs": kwargs.attrs, "fields": fields, } # Users of this component can define form fields as slots. # # For example: # ```django # {% component "form" %} # {% fill "field:field_1" / %} #