{# Shadcn-style Input Components for FastAPI Shadcn Admin These macros render form inputs matching the Shadcn/UI design system using Tailwind CSS utility classes. #} {# Base input styling classes #} {% set input_base = "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50" %} {% set label_base = "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" %} {% set textarea_base = "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50" %} {% set select_base = "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50" %} {% set checkbox_base = "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground" %} {# Form field wrapper with label and error #} {% macro form_field(name, label, required=false, error=none, description=none) %}
{{ caller() }} {% if description %}

{{ description }}

{% endif %} {% if error %}

{{ error }}

{% endif %}
{% endmacro %} {# Text input #} {% macro input(name, type="text", value="", placeholder="", required=false, readonly=false, disabled=false, class="") %} {% endmacro %} {# Textarea #} {% macro textarea(name, value="", placeholder="", rows=3, required=false, readonly=false, disabled=false, class="") %} {% endmacro %} {# Select dropdown #} {% macro select(name, options, value="", placeholder="Select...", required=false, disabled=false, class="", htmx_attrs=none) %} {% endmacro %} {# Polymorphic select with HTMX fragment swapping #} {% macro polymorphic_select(name, options, value="", fragment_url="", target_id="", model_name="", signer=none) %} {# Hidden container for dynamic form fields #}
{% if value %} {# Initial content will be loaded via HTMX #} {% endif %}
{% endmacro %} {# Checkbox #} {% macro checkbox(name, label, checked=false, required=false, disabled=false, class="") %}
{% endmacro %} {# Number input #} {% macro number_input(name, value="", min=none, max=none, step=1, placeholder="", required=false, disabled=false, class="") %} {% endmacro %} {# Hidden input #} {% macro hidden(name, value) %} {% endmacro %} {# Form error summary #} {% macro error_summary(errors) %} {% if errors %}

There were errors with your submission

{% endif %} {% endmacro %} {# Relationship Input (Smart Select) #} {% macro relationship_input(field, value=none, error=none) %}
{% if error %}

{{ error }}

{% endif %}
{% endmacro %}