{%- block form_widget -%} {% if compound %} {{- block('form_widget_compound') -}} {% else %} {{- block('form_widget_simple') -}} {% endif %} {%- endblock form_widget -%} {%- block form_widget_simple -%} {%- set type = type|default('text') -%} {% if type == 'text' %} {%- set attr = attr|merge({for: id}) -%} {%- set attr = attr|merge({class: (attr.class|default('') ~ ' border-1 px-3 py-3 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150' )|trim}) -%} {% endif %} {%- endblock form_widget_simple -%} {%- block form_widget_compound -%}
{%- if form.parent is empty -%} {{ form_errors(form) }} {%- endif -%} {{- block('form_rows') -}} {{- form_rest(form) -}}
{%- endblock form_widget_compound -%} {%- block textarea_widget -%} {%- set attr = attr|merge({class: (attr.class|default('') ~ ' border-1 px-3 py-3 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150' )|trim}) -%} {%- endblock textarea_widget -%} {%- block choice_widget -%} {% if expanded %} {{- block('choice_widget_expanded') -}} {% else %} {%- set attr = attr|merge({class: (attr.class|default('') ~ ' border-1 px-3 py-3 bg-white rounded text-sm shadow focus:outline-none focus:ring w-full ease-linear transition-all duration-150')|trim}) -%} {{- block('choice_widget_collapsed') -}} {% endif %} {%- endblock choice_widget -%} {%- block choice_widget_expanded -%}
{%- for child in form %} {{- form_widget(child) -}} {{- form_label(child, null, {translation_domain: choice_translation_domain}) -}} {% endfor -%}
{%- endblock choice_widget_expanded -%} {%- block choice_widget_collapsed -%} {%- if required and placeholder is none and not placeholder_in_choices and not multiple and (attr.size is not defined or attr.size <= 1) -%} {% set required = false %} {%- endif -%} {% if multiple %}
{% else %} {% endif %} {%- endblock choice_widget_collapsed -%} {%- block choice_widget_options -%} {% for group_label, choice in options %} {%- if choice is iterable -%} {% set options = choice %} {{- block('choice_widget_options') -}} {%- else -%} {%- endif -%} {% endfor %} {%- endblock choice_widget_options -%} {%- block checkbox_widget -%}
{{- form_label(form) -}}
{%- endblock checkbox_widget -%} {%- block radio_widget -%} {%- endblock radio_widget -%} {%- block datetime_widget -%} {% if widget == 'single_text' %} {{- block('form_widget_simple') -}} {%- else -%}
{{- form_errors(form.date) -}} {{- form_errors(form.time) -}} {{- form_widget(form.date) -}} {{- form_widget(form.time) -}}
{%- endif -%} {%- endblock datetime_widget -%} {%- block date_widget -%} {%- if widget == 'single_text' -%} {{ block('form_widget_simple') }} {%- else -%} {%- set attr = attr|merge({'class': attr.class|default('flex')|trim}) -%} {%- set attr_class_error = '' -%} {%- if not valid -%} {%- set attr_class_error = ' ' ~ block('class_input_error') -%} {%- endif -%}
{{- date_pattern|replace({ '{{ year }}': form_widget(form.year, { attr: { class: (block('class_widget_addon_append') ~ ' ' ~ attr_class_error|trim) }}), '{{ month }}': form_widget(form.month, { attr: { class: (block('class_widget_addon_prepend') ~ ' ' ~ attr_class_error|trim) }}), '{{ day }}': form_widget(form.day, { attr: { class: ('rounded-none' ~ attr_class_error)|trim }}), })|raw -}}
{%- endif -%} {%- endblock date_widget -%} {%- block time_widget -%} {%- if widget == 'single_text' -%} {{ block('form_widget_simple') }} {%- else -%} {%- set attr = attr|merge({'class': attr.class|default('flex')|trim}) -%} {%- set attr_class_error = '' -%} {%- if not valid -%} {%- set attr_class_error = ' ' ~ block('class_input_error') -%} {%- endif -%}
{{- form_widget(form.hour, { attr: { class: ((with_minutes or with_seconds ? block('class_widget_addon_prepend') : '') ~ attr_class_error)|trim }}) -}} {%- if with_minutes -%} : {{- form_widget(form.minute, { attr: { class: ((with_seconds ? 'rounded-none' : block('class_widget_addon_append')) ~ attr_class_error|trim) }}) -}} {%- endif -%} {%- if with_seconds -%} : {{- form_widget(form.second, { attr: { class: (block('class_widget_addon_append') ~ attr_class_error)|trim }}) -}} {%- endif -%}
{%- endif -%} {%- endblock time_widget -%} {%- block dateinterval_widget -%} {%- if widget == 'single_text' -%} {{- block('form_widget_simple') -}} {%- else -%}
{{- form_errors(form) -}} {%- if with_years %}{% endif -%} {%- if with_months %}{% endif -%} {%- if with_weeks %}{% endif -%} {%- if with_days %}{% endif -%} {%- if with_hours %}{% endif -%} {%- if with_minutes %}{% endif -%} {%- if with_seconds %}{% endif -%} {%- if with_years %}{% endif -%} {%- if with_months %}{% endif -%} {%- if with_weeks %}{% endif -%} {%- if with_days %}{% endif -%} {%- if with_hours %}{% endif -%} {%- if with_minutes %}{% endif -%} {%- if with_seconds %}{% endif -%}
{{ form_label(form.years) }}{{ form_label(form.months) }}{{ form_label(form.weeks) }}{{ form_label(form.days) }}{{ form_label(form.hours) }}{{ form_label(form.minutes) }}{{ form_label(form.seconds) }}
{{ form_widget(form.years) }}{{ form_widget(form.months) }}{{ form_widget(form.weeks) }}{{ form_widget(form.days) }}{{ form_widget(form.hours) }}{{ form_widget(form.minutes) }}{{ form_widget(form.seconds) }}
{%- if with_invert %}{{ form_widget(form.invert) }}{% endif -%}
{%- endif -%} {%- endblock dateinterval_widget -%} {%- block number_widget -%} {# type="number" doesn't work with floats #} {%- set type = type|default('text') -%} {{ block('form_widget_simple') }} {%- endblock number_widget -%} {%- block integer_widget -%} {%- set type = type|default('number') -%} {{ block('form_widget_simple') }} {%- endblock integer_widget -%} {%- block money_widget -%} {{ money_pattern|replace({ '{{ widget }}': block('form_widget_simple') })|raw }} {%- endblock money_widget -%} {%- block url_widget -%} {%- set type = type|default('url') -%} {{ block('form_widget_simple') }} {%- endblock url_widget -%} {%- block search_widget -%} {%- set type = type|default('search') -%} {{ block('form_widget_simple') }} {%- endblock search_widget -%} {%- block percent_widget -%} {%- set type = type|default('text') -%} {{ block('form_widget_simple') }} % {%- endblock percent_widget -%} {%- block password_widget -%} {%- set type = type|default('password') -%} {{ block('form_widget_simple') }} {%- endblock password_widget -%} {%- block hidden_widget -%} {%- set type = type|default('hidden') -%} {{ block('form_widget_simple') }} {%- endblock hidden_widget -%} {%- block email_widget -%} {%- set type = type|default('email') -%} {{ block('form_widget_simple') }} {%- endblock email_widget -%} {%- block range_widget -%} {% set type = type|default('range') %} {{- block('form_widget_simple') -}} {%- endblock range_widget %} {%- block button_widget -%} {%- if label is empty -%} {%- if label_format is not empty -%} {% set label = label_format|replace({ '%name%': name, '%id%': id, }) %} {%- elseif label is same as(false) -%} {% set translation_domain = false %} {%- else -%} {% set label = name|humanize %} {%- endif -%} {%- endif -%} {%- endblock button_widget -%} {% block checkbox_radio_label -%} {{- form_label(form) -}} {% endblock %} {%- block submit_widget -%} {%- set type = type|default('submit') -%} {{ block('button_widget') }} {%- endblock submit_widget -%} {%- block reset_widget -%} {%- set type = type|default('reset') -%} {{ block('button_widget') }} {%- endblock reset_widget -%} {%- block tel_widget -%} {%- set type = type|default('tel') -%} {{ block('form_widget_simple') }} {%- endblock tel_widget -%} {%- block color_widget -%} {%- set type = type|default('color') -%} {{ block('form_widget_simple') }} {%- endblock color_widget -%} {# Labels #} {%- block form_label -%} {% if label is not same as(false) -%} {% if not compound -%} {% set label_attr = label_attr|merge({'for': id}) %} {%- endif -%} {% if required -%} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %} {%- endif -%} {% if label is empty -%} {%- if label_format is not empty -%} {% set label = label_format|replace({ '%name%': name, '%id%': id, }) %} {%- else -%} {% set label = name|humanize %} {%- endif -%} {%- endif -%} {%- set label_attr = label_attr|merge({for: id}) -%} {%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' block uppercase text-xs font-bold mb-2' )|trim}) -%} <{{ element|default('label') }}{% if label_attr %}{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}{% endif %}>{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }} {%- endif -%} {%- endblock form_label -%} {%- block button_label -%}{%- endblock -%} {# Rows #} {%- block repeated_row -%} {# No need to render the errors here, as all errors are mapped to the first child (see RepeatedTypeValidatorExtension). #} {{- block('form_rows') -}} {%- endblock repeated_row -%} {%- block form_row -%}
{{- form_label(form) -}} {{- form_errors(form) -}} {{- form_widget(form) -}}
{%- endblock form_row -%} {%- block button_row -%}
{{- form_widget(form) -}}
{%- endblock button_row -%} {%- block hidden_row -%} {{ form_widget(form) }} {%- endblock hidden_row -%} {# Misc #} {%- block form -%} {{ form_start(form) }} {{- form_widget(form) -}} {{ form_end(form) }} {%- endblock form -%} {%- block form_start -%} {%- do form.setMethodRendered() -%} {% set method = method|upper %} {%- if method in ["GET", "POST"] -%} {% set form_method = method %} {%- else -%} {% set form_method = "POST" %} {%- endif -%}
{%- if form_method != method -%} {%- endif -%} {%- endblock form_start -%} {%- block form_end -%} {%- if not render_rest is defined or render_rest -%} {{ form_rest(form) }} {%- endif -%}
{%- endblock form_end -%} {%- block form_errors -%} {%- if errors|length > 0 -%} {%- endif -%} {%- endblock form_errors -%} {%- block form_rest -%} {% for child in form -%} {% if not child.rendered %} {{- form_row(child) -}} {% endif %} {%- endfor %} {% if not form.methodRendered and form.parent is null %} {%- do form.setMethodRendered() -%} {% set method = method|upper %} {%- if method in ["GET", "POST"] -%} {% set form_method = method %} {%- else -%} {% set form_method = "POST" %} {%- endif -%} {%- if form_method != method -%} {%- endif -%} {% endif %} {% endblock form_rest %} {# Support #} {%- block form_rows -%} {% for child in form %} {{- form_row(child) -}} {% endfor %} {%- endblock form_rows -%} {%- block widget_attributes -%} id="{{ id }}" name="{{ full_name }}" {%- if disabled %} disabled="disabled"{% endif -%} {%- if required %} required="required"{% endif -%} {{ block('attributes') }} {%- endblock widget_attributes -%} {%- block widget_container_attributes -%} {%- if id is not empty %}id="{{ id }}"{% endif -%} {{ block('attributes') }} {%- endblock widget_container_attributes -%} {%- block button_attributes -%} id="{{ id }}" name="{{ full_name }}"{% if disabled %} disabled="disabled"{% endif -%} {{ block('attributes') }} {%- endblock button_attributes -%} {% block attributes -%} {%- for attrname, attrvalue in attr -%} {{- " " -}} {%- if attrname in ['placeholder', 'title'] -%} {{- attrname }}="{{ translation_domain is same as(false) ? attrvalue : attrvalue|trans({}, translation_domain) }}" {%- elseif attrvalue is same as(true) -%} {{- attrname }}="{{ attrname }}" {%- elseif attrvalue is not same as(false) -%} {{- attrname }}="{{ attrvalue }}" {%- endif -%} {%- endfor -%} {%- endblock attributes -%} {# Class #} {% block class_label -%} block mb-2 text-sm font-medium text-gray-900 dark:text-white {%- endblock class_label %} {% block class_input_radio_label -%} ml-2 text-sm font-medium text-gray-900 dark:text-gray-300 {%- endblock class_input_radio_label %} {% block class_input_switch_label -%} {{ block('class_input_radio_label') }} {%- endblock class_input_switch_label %} {% block class_input_switch_label_container -%} relative inline-flex items-center cursor-pointer {%- endblock class_input_switch_label_container %} {% block class_input_text -%} text-gray-900 bg-gray-50 rounded-lg text-sm block w-full p-2.5 border border-gray-300 focus:z-10 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:placeholder-gray-400 dark:focus:ring-blue-500 dark:focus:border-blue-500 {%- endblock class_input_text %} {% block class_input_range -%} w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700 {%- endblock class_input_range %} {% block class_input_file -%} block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 {%- endblock class_input_file %} {% block class_input_radio -%} w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600 {%- endblock class_input_radio %} {% block class_input_checkbox -%} rounded {{ block('class_input_radio') }} {%- endblock class_input_checkbox %} {% block class_input_switch -%} relative w-11 h-6 bg-gray-200 rounded-full peer peer-focus:ring-2 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 dark:bg-gray-700 dark:border-gray-600 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600 {%- endblock class_input_switch %} {% block class_select -%} {{ block('class_input_text') }} {%- endblock class_select %} {% block class_textarea -%} {{ block('class_input_text') }} {%- endblock class_textarea %} {% block class_button -%} text-gray-900 bg-white font-medium rounded-lg text-sm px-5 py-2.5 mr-2 mb-2 border border-gray-200 hover:text-blue-700 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700 dark:focus:ring-gray-700 {%- endblock class_button %} {% block class_submit -%} text-white bg-blue-700 font-medium rounded-lg text-sm px-5 py-2.5 mr-2 mb-2 hover:bg-blue-800 focus:outline-none focus:ring-2 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800 {%- endblock class_submit %} {% block class_time_separator -%} inline-flex items-center px-3 text-sm text-gray-900 bg-gray-200 border border-x-0 border-gray-300 dark:bg-gray-600 dark:text-gray-400 dark:border-gray-600 {%- endblock class_time_separator %} {% block class_addon -%} inline-flex items-center px-3 text-sm text-gray-900 bg-gray-200 border border-gray-300 dark:bg-gray-600 dark:text-gray-400 dark:border-gray-600 {%- endblock class_addon %} {% block class_widget_addon_prepend -%} rounded-none rounded-l-lg {%- endblock class_widget_addon_prepend %} {% block class_widget_addon_append -%} rounded-none rounded-r-lg {%- endblock class_widget_addon_append %} {% block class_addon_prepend -%} border-r-0 rounded-l-md {%- endblock class_addon_prepend %} {% block class_addon_append -%} border-l-0 rounded-r-md {%- endblock class_addon_append %} {% block class_help_text -%} mt-2 text-sm text-gray-500 dark:text-gray-400 {%- endblock class_help_text %} {% block class_label_error -%} block mb-2 text-sm font-medium text-red-600 dark:text-red-500 {%- endblock class_label_error %} {% block class_input_radio_label_error -%} ml-2 text-sm font-medium text-red-600 dark:text-red-500 {%- endblock class_input_radio_label_error %} {% block class_input_switch_label_error -%} {{ block('class_input_radio_label_error') }} {%- endblock class_input_switch_label_error %} {% block class_input_error -%} bg-red-50 border-red-500 text-red-900 placeholder-red-700 dark:bg-red-100 dark:border-red-500 dark:text-red-500 dark:placeholder-red-500 focus:z-10 focus:ring-red-500 focus:border-red-500 dark:focus:ring-red-500 dark:focus:border-red-500 {%- endblock class_input_error %} {% block class_text_error -%} mt-2 text-sm text-red-600 dark:text-red-500 {%- endblock class_text_error %} {% block class_input_disabled -%} disabled:bg-gray-100 disabled:border-gray-300 disabled:cursor-not-allowed dark:disabled:text-gray-400 {%- endblock class_input_disabled %}