django-unfold 0.56.0__py3-none-any.whl → 0.57.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. {django_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/METADATA +1 -1
  2. {django_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/RECORD +27 -23
  3. unfold/forms.py +3 -2
  4. unfold/layout.py +19 -1
  5. unfold/static/unfold/css/styles.css +1 -1
  6. unfold/styles.css +18 -28
  7. unfold/templates/admin/actions.html +1 -1
  8. unfold/templates/unfold/helpers/edit_inline/tabular_field.html +1 -1
  9. unfold/templates/unfold/helpers/field_readonly_value.html +1 -1
  10. unfold/templates/unfold/helpers/fieldset_row_checkbox.html +2 -2
  11. unfold/templates/unfold/helpers/fieldset_row_field.html +2 -2
  12. unfold/templates/unfold/helpers/form_errors.html +1 -1
  13. unfold/templates/unfold/helpers/messages/errornote.html +1 -5
  14. unfold/templates/unfold/layouts/skeleton.html +1 -1
  15. unfold/templates/unfold/widgets/clearable_file_input.html +3 -3
  16. unfold/templates/unfold/widgets/clearable_file_input_small.html +1 -1
  17. unfold/templates/unfold/widgets/select.html +9 -0
  18. unfold/templates/unfold_crispy/errors_formset.html +3 -0
  19. unfold/templates/unfold_crispy/field.html +1 -1
  20. unfold/templates/unfold_crispy/inputs.html +1 -1
  21. unfold/templates/unfold_crispy/layout/field_errors.html +5 -5
  22. unfold/templates/unfold_crispy/layout/hr.html +13 -0
  23. unfold/templates/unfold_crispy/layout/table_inline_formset.html +5 -3
  24. unfold/templates/unfold_crispy/whole_uni_formset.html +30 -0
  25. unfold/widgets.py +30 -0
  26. {django_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/LICENSE.md +0 -0
  27. {django_unfold-0.56.0.dist-info → django_unfold-0.57.0.dist-info}/WHEEL +0 -0
unfold/styles.css CHANGED
@@ -90,6 +90,10 @@
90
90
  font-size: 18px;
91
91
  }
92
92
 
93
+ .errorlist {
94
+ @apply *:before:align-bottom *:before:content-['warning'] *:before:material-symbols-outlined *:before:mr-1;
95
+ }
96
+
93
97
  [x-cloak] {
94
98
  @apply hidden!;
95
99
  }
@@ -153,50 +157,37 @@ table tr.selected th {
153
157
  Datetime
154
158
  *******************************************************/
155
159
  .datetimeshortcuts {
156
- @apply absolute flex flex-row-reverse items-center right-0 text-[0px] top-px;
160
+ @apply absolute flex flex-row-reverse items-center right-px text-[0px] top-px;
157
161
  }
158
162
 
159
163
  .datetimeshortcuts a {
160
- @apply text-[0px] text-base-400 transition hover:text-base-700;
164
+ @apply flex items-center h-9 text-[0px] text-base-400 transition hover:text-base-700;
161
165
  }
162
166
 
163
167
  .datetimeshortcuts a:first-child {
164
- @apply hover:text-base-700 dark:text-base-500 dark:hover:text-base-200;
168
+ @apply hidden;
165
169
  }
166
170
 
167
171
  .datetimeshortcuts a:first-child:after {
168
- @apply border-l border-base-200 flex h-9 items-center justify-center leading-none material-symbols-outlined py-2 text-center w-9 hover:text-base-700 dark:border-base-700 dark:hover:text-white;
169
- content: "timer";
172
+ @apply content-['update'] flex h-9 items-center justify-center leading-none material-symbols-outlined px-3 py-2 text-center hover:text-base-700 dark:border-base-700 dark:hover:text-base-700;
170
173
  }
171
174
 
172
175
  .datetimeshortcuts a:first-child:after {
173
176
  @apply flex;
174
177
  }
175
178
 
179
+ .clock-icon,
176
180
  .date-icon {
177
- @apply block h-9 text-base-400 transition-all w-9 hover:text-base-700 dark:text-base-500 dark:hover:text-white;
178
- }
179
-
180
- .date-icon:after {
181
- @apply border-l border-base-200 h-9 items-center justify-center leading-none material-symbols-outlined py-2 text-center w-9 hover:text-base-700 dark:border-base-700;
182
- content: "edit";
181
+ @apply block text-base-400 transition-all hover:text-base-700 dark:text-base-500 dark:hover:text-base-200;
182
+ @apply after:border-base-200 after:material-symbols-outlined after:px-3 dark:after:border-base-700;
183
183
  }
184
184
 
185
185
  .date-icon:after {
186
- @apply flex dark:hover:text-white;
187
- }
188
-
189
- .clock-icon {
190
- @apply block h-9 ml-2 w-9 hover:text-base-700 dark:text-base-500 dark:hover:text-base-200;
186
+ content: "calendar_today";
191
187
  }
192
188
 
193
189
  .clock-icon:after {
194
- @apply border-l border-base-200 h-9 items-center justify-center material-symbols-outlined py-2 text-base text-center w-9 hover:text-base-700 dark:border-base-700 dark:hover:text-white;
195
- content: "edit";
196
- }
197
-
198
- .clock-icon:after {
199
- @apply flex;
190
+ content: "schedule";
200
191
  }
201
192
 
202
193
  .timezonewarning {
@@ -381,7 +372,7 @@ h3 span:nth-child(3) {
381
372
  .select2-container.select2-container--admin-autocomplete
382
373
  .select2-selection--single
383
374
  .select2-selection__clear {
384
- @apply flex items-center h-9 -mt-2 text-[0px];
375
+ @apply flex items-center h-9 -mt-2 text-[0px] after:text-base-400 hover:after:text-base-700 dark:hover:after:text-base-200 dark:after:text-base-500;
385
376
  }
386
377
 
387
378
  .select2-container.select2-container--admin-autocomplete
@@ -390,9 +381,7 @@ h3 span:nth-child(3) {
390
381
  .select2-container.select2-container--admin-autocomplete
391
382
  .select2-selection--single
392
383
  .select2-selection__clear:after {
393
- @apply material-symbols-outlined text-base-500;
394
- content: "close";
395
- font-size: 14px;
384
+ @apply material-symbols-outlined transition-all content-['close'] text-[18px] ;
396
385
  }
397
386
 
398
387
  .select2-container.select2-container--admin-autocomplete
@@ -404,7 +393,7 @@ h3 span:nth-child(3) {
404
393
  .select2-container.select2-container--admin-autocomplete
405
394
  .select2-selection--single
406
395
  .select2-selection__arrow:after {
407
- @apply left-0 leading-none m-0 material-symbols-outlined text-base-500 text-lg;
396
+ @apply left-0 leading-none m-0 material-symbols-outlined text-base-400 text-lg;
408
397
  content: "expand_more";
409
398
  }
410
399
 
@@ -464,9 +453,10 @@ h3 span:nth-child(3) {
464
453
  .select2-container.select2-container--admin-autocomplete
465
454
  .select2-selection--multiple
466
455
  .select2-selection__clear {
467
- @apply m-0 mr-2 top-0;
456
+ @apply m-0 mr-3 top-0;
468
457
  }
469
458
 
459
+
470
460
  .select2-container.select2-container--admin-autocomplete
471
461
  .select2-selection--multiple
472
462
  .select2-selection__rendered {
@@ -2,7 +2,7 @@
2
2
 
3
3
  <div id="changelist-actions" class="actions flex flex-col gap-3 text-white sm:flex-row sm:items-center lg:items-center {% if not cl.model_admin.list_fullwidth %}mx-auto{% endif %}" x-bind:style="'width: ' + changeListWidth + 'px'">
4
4
  {% block actions %}
5
- <div class="flex flex-row gap-2 lg:flex-row" x-data="{action: ''}">
5
+ <div class="group primary flex flex-row gap-2 lg:flex-row" x-data="{action: ''}">
6
6
  {% block actions-form %}
7
7
  {% for field in action_form %}
8
8
  {% if field.label %}
@@ -16,7 +16,7 @@
16
16
  {{ field.field }}
17
17
 
18
18
  {% if field.field.errors|length > 0 %}
19
- <div class="mt-1 text-red-600 text-sm dark:text-red-500">
19
+ <div class="mt-2 text-red-600 text-xs dark:text-red-500">
20
20
  {% for error in field.field.errors %}
21
21
  {{ error }}
22
22
  {% endfor %}
@@ -1 +1 @@
1
- <div class="readonly break-words {% if field.is_json %}max-w-4xl{% else %}max-w-2xl{% endif %} py-2 text-sm *:rounded-default {% if not adminform.model_admin.compressed_fields and not field.is_image %}bg-base-50 border font-medium px-3 rounded-default shadow-xs dark:border-base-700 dark:bg-base-800{% endif %} {% if field.is_image %}inline-block [&_img]:rounded-default py-0!{% endif %}">{% if value %}{{ value }}{% elif field.contents %}{{ field.contents }}{% else %}-{% endif %}</div>
1
+ <div class="readonly break-words {% if field.is_json %}max-w-4xl{% else %}max-w-2xl{% endif %} py-2 text-sm *:rounded-default {% if not adminform.model_admin.compressed_fields and not field.is_image %}bg-base-50 border border-base-200 font-medium px-3 rounded-default shadow-xs dark:border-base-700 dark:bg-base-800{% endif %} {% if field.is_image %}inline-block [&_img]:rounded-default py-0!{% endif %}">{% if value %}{{ value }}{% elif field.contents %}{{ field.contents }}{% else %}-{% endif %}</div>
@@ -16,7 +16,7 @@
16
16
  </div>
17
17
 
18
18
  {% if field.errors %}
19
- <div class="mt-1 text-red-600 text-sm dark:text-red-500">
19
+ <div class="mt-2 text-red-600 text-xs dark:text-red-500">
20
20
  {{ field.errors }}
21
21
  </div>
22
22
  {% endif %}
@@ -36,7 +36,7 @@
36
36
  {% endif %}
37
37
 
38
38
  {% if field.errors %}
39
- <div class="mt-1 text-red-600 text-sm dark:text-red-500">
39
+ <div class="mt-2 text-red-600 text-xs dark:text-red-500">
40
40
  {{ field.errors }}
41
41
  </div>
42
42
  {% endif %}
@@ -2,7 +2,7 @@
2
2
  {{ field.label_tag }}
3
3
  </div>
4
4
 
5
- <div class="grow">
5
+ <div class="grow relative">
6
6
  {% if field.is_readonly %}
7
7
  {% include "unfold/helpers/field_readonly_value.html" %}
8
8
  {% else %}
@@ -14,7 +14,7 @@
14
14
  {% endif %}
15
15
 
16
16
  {% if field.errors %}
17
- <div class="mt-1 text-red-600 text-sm dark:text-red-500">
17
+ <div class="mt-2 text-red-600 text-xs dark:text-red-500">
18
18
  {{ field.errors }}
19
19
  </div>
20
20
  {% endif %}
@@ -1,5 +1,5 @@
1
1
  {% if errors %}
2
- <div class="mt-1 text-red-600 text-sm dark:text-red-500">
2
+ <div class="mt-2 text-red-600 text-xs dark:text-red-500">
3
3
  <ul>
4
4
  {% for error in errors %}
5
5
  <li>
@@ -2,10 +2,6 @@
2
2
 
3
3
  {% if errors %}
4
4
  <p class="errornote bg-red-100 mb-8 text-red-700 px-3 py-3 rounded-default dark:bg-red-500/20 dark:border-red-500/20 dark:text-red-400">
5
- {% if errors.items|length == 1 %}
6
- {% translate "Please correct the error below." %}
7
- {% else %}
8
- {% translate "Please correct the errors below." %}
9
- {% endif %}
5
+ {% blocktranslate count counter=errors.items|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktranslate %}
10
6
  </p>
11
7
  {% endif %}
@@ -58,7 +58,7 @@
58
58
  {% endblock %}
59
59
  </head>
60
60
 
61
- <body class="antialiased bg-base-50 font-sans text-font-default-light text-sm dark:bg-base-900 dark:text-font-default-dark {% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}" data-admin-utc-offset="{% now "Z" %}" x-data="{{% if opts %}activeTab: 'general',{% endif %} sidebarMobileOpen: false, sidebarDesktopOpen: {% if request.session.toggle_sidebar == False %}false{% else %}true{% endif %} }" x-init="activeTab = {% if opts %}window.location.hash?.replace('#', '') || 'general'{% else %}''{% endif %}">
61
+ <body class="antialiased bg-base-50 font-sans text-font-default-light text-sm dark:bg-base-900 dark:text-font-default-dark {% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}" data-admin-utc-offset="{% now "Z" %}" x-data="{ {% if opts %}activeTab: 'general',{% endif %} sidebarMobileOpen: false, sidebarDesktopOpen: {% if request.session.toggle_sidebar == False %}false{% else %}true{% endif %} }" x-init="activeTab = {% if opts %}window.location.hash?.replace('#', '') || 'general'{% else %}''{% endif %}">
62
62
  {% if colors %}
63
63
  <style id="unfold-theme-colors">
64
64
  :root {
@@ -24,18 +24,18 @@
24
24
  <input type="text" aria-label="{% trans 'Choose file to upload' %}" value="{% if widget.value %}{{ widget.value.url }}{% else %}{% trans 'Choose file to upload' %}{% endif %}" disabled class="bg-white grow font-medium min-w-0 px-3 py-2 text-ellipsis dark:bg-base-900">
25
25
 
26
26
  <div class="bg-white flex flex-none items-center leading-none self-stretch dark:bg-base-900">
27
- <div class="opacity-0 w-[0px]">
27
+ <div class="opacity-0 overflow-hidden w-[0px]">
28
28
  <input type="{{ widget.type }}" name="{{ widget.name }}" {% include "django/forms/widgets/attrs.html" %} />
29
29
  </div>
30
30
 
31
31
  {% if widget.is_initial %}
32
32
  <a href="{{ widget.value.url }}" class="border-r border-base-200 cursor-pointer text-base-400 px-3 hover:text-base-700 dark:border-base-700 dark:text-base-500 dark:hover:text-base-200" target="_blank">
33
- <span class="material-symbols-outlined">download</span>
33
+ <span class="block material-symbols-outlined">download</span>
34
34
  </a>
35
35
  {% endif %}
36
36
 
37
37
  <label for="{{ widget.attrs.id }}" class="cursor-pointer text-base-400 px-3 hover:text-base-700 dark:text-base-500 dark:hover:text-base-200">
38
- <span class="material-symbols-outlined">upload</span>
38
+ <span class="block material-symbols-outlined">upload</span>
39
39
  </label>
40
40
  </div>
41
41
  </div>
@@ -17,7 +17,7 @@
17
17
  <input type="text" aria-label="{% trans 'Choose file to upload' %}" value="{% if widget.value %}{{ widget.value.url }}{% else %}{% trans 'Choose file to upload' %}{% endif %}" disabled class="bg-white grow font-medium min-w-0 px-3 py-2 text-ellipsis dark:bg-base-900">
18
18
 
19
19
  <div class="flex flex-none items-center leading-none self-stretch">
20
- <div class="opacity-0 w-[0px]">
20
+ <div class="opacity-0 overflow-hidden w-[0px]">
21
21
  <input type="{{ widget.type }}" name="{{ widget.name }}" {% include "django/forms/widgets/attrs.html" %} />
22
22
  </div>
23
23
 
@@ -0,0 +1,9 @@
1
+ <div class="grow relative max-w-2xl">
2
+ <select name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>{% for group_name, group_choices, group_index in widget.optgroups %}{% if group_name %}
3
+ <optgroup label="{{ group_name }}">{% endif %}{% for option in group_choices %}
4
+ {% include option.template_name with widget=option %}{% endfor %}{% if group_name %}
5
+ </optgroup>{% endif %}{% endfor %}
6
+ </select>
7
+
8
+ <span class="material-symbols-outlined absolute group-[.primary]:text-white -ml-[31px] pointer-events-none text-base-400 top-0 top-1/2 hover:text-base-700 dark:text-base-500 dark:hover:text-base-200 -translate-y-1/2">expand_more</span>
9
+ </div>
@@ -0,0 +1,3 @@
1
+ {% if formset.non_form_errors %}
2
+ {% include "unfold/helpers/messages/error.html" with errors=formset.non_form_errors %}
3
+ {% endif %}
@@ -3,7 +3,7 @@
3
3
  {% if field.is_hidden %}
4
4
  {{ field }}
5
5
  {% else %}
6
- <{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id }}" class="group {% if tag == "td" %}align-top border-t border-base-200 font-normal gap-4 min-w-0 overflow-hidden px-3 py-3 text-left dark:border-base-800 dark:before:text-font-important-dark{% endif%} {% if field.errors %}errors{% endif %} {% if field_class %} {{ field_class }}{% endif %} {% if field|is_checkbox and tag == "td" %}flex flex-row gap-2 h-[38px] items-center{% else %}{% if 'form-horizontal' in form_class %} row{% endif %}{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}">
6
+ <{% if tag %}{{ tag }}{% else %}div{% endif %} id="div_{{ field.auto_id }}" class="group {% if tag == "td" %}align-top border-t border-base-200 font-normal gap-4 min-w-0 overflow-hidden px-3 py-3 text-left dark:border-base-800 dark:before:text-font-important-dark{% endif%} {% if field.errors %}errors{% endif %} {% if field_class %} {{ field_class }}{% endif %} {% if field|is_checkbox and tag == "td" %}flex flex-row gap-2 items-center{% else %}{% if 'form-horizontal' in form_class %} row{% endif %}{% endif %}{% if wrapper_class %} {{ wrapper_class }}{% endif %}{% if field.css_classes %} {{ field.css_classes }}{% endif %}">
7
7
  {% if field.label and not field|is_checkbox and form_show_labels %}
8
8
  <label {% if field.id_for_label %}for="{{ field.id_for_label }}"{% endif %} class="block font-semibold mb-2 text-font-important-light text-sm dark:text-font-important-dark {% if label_class %} {{ label_class }}{% endif %}">
9
9
  {{ field.label }}{% if field.field.required %} <span class="asteriskField">*</span>{% endif %}
@@ -1,5 +1,5 @@
1
1
  {% if inputs %}
2
- <div class="border border-base-200 rounded-default flex flex-col gap-2 justify-end p-3 lg:flex-row dark:border-base-800 {{ field_class }}">
2
+ <div class="flex flex-col gap-2 justify-end lg:flex-row {{ field_class }}">
3
3
  {% for input in inputs %}
4
4
  {% include "unfold_crispy/layout/baseinput.html" %}
5
5
  {% endfor %}
@@ -1,7 +1,7 @@
1
1
  {% if form_show_errors and field.errors %}
2
- {% for error in field.errors %}
3
- <span id="error_{{ forloop.counter }}_{{ field.auto_id }}" class="block text-red-600 text-xs mt-1 dark:text-red-500">
4
- {{ error }}
5
- </span>
6
- {% endfor %}
2
+ <ul class="errorlist">
3
+ {% for error in field.errors %}
4
+ <li id="error_{{ forloop.counter }}_{{ field.auto_id }}" class="mt-2 text-red-600 text-xs dark:text-red-500">{{ error }}</li>
5
+ {% endfor %}
6
+ </ul>
7
7
  {% endif %}
@@ -0,0 +1,13 @@
1
+ <div class="flex flex-row justify-center items-center gap-4 my-4">
2
+ {% if title %}
3
+ <span class="bg-base-200 grow h-px"></span>
4
+
5
+ {% if title %}
6
+ <span>
7
+ {{ title }}
8
+ </span>
9
+ {% endif %}
10
+ {% endif %}
11
+
12
+ <span class="bg-base-200 grow h-px"></span>
13
+ </div>
@@ -9,7 +9,9 @@
9
9
  {% csrf_token %}
10
10
  {% endif %}
11
11
 
12
- <div class="overflow-x-auto border border-base-200 rounded-default shadow-xs dark:border-base-800" {% if form_id %} id="{{ form_id }}"{% endif %}>
12
+ {% include "unfold_crispy/errors_formset.html" %}
13
+
14
+ <div class="overflow-x-auto border border-base-200 mb-8 rounded-default shadow-xs dark:border-base-800" {% if form_id %} id="{{ form_id }}"{% endif %}>
13
15
  {{ formset.management_form|crispy }}
14
16
 
15
17
  <table class="w-full">
@@ -66,10 +68,10 @@
66
68
  </tbody>
67
69
  {% endif %}
68
70
  </table>
69
-
70
- {% include "unfold_crispy/inputs.html" %}
71
71
  </div>
72
72
 
73
+ {% include "unfold_crispy/inputs.html" %}
74
+
73
75
  {% if formset_tag %}
74
76
  </form>
75
77
  {% endif %}
@@ -0,0 +1,30 @@
1
+ {% load crispy_forms_tags %}
2
+ {% load crispy_forms_utils %}
3
+
4
+ {% specialspaceless %}
5
+ {% if formset_tag %}
6
+ <form {{ flat_attrs }} method="{{ form_method }}" {% if formset.is_multipart %} enctype="multipart/form-data"{% endif %}>
7
+ {% endif %}
8
+ {% if formset_method|lower == 'post' and not disable_csrf %}
9
+ {% csrf_token %}
10
+ {% endif %}
11
+
12
+ <div>
13
+ {{ formset.management_form|crispy }}
14
+ </div>
15
+
16
+ {% include "unfold_crispy/errors_formset.html" %}
17
+
18
+ {% for form in formset %}
19
+ {% include "unfold_crispy/display_form.html" %}
20
+ {% endfor %}
21
+
22
+ {% if inputs %}
23
+ <div class="form-actions">
24
+ {% for input in inputs %}
25
+ {% include "unfold_crispy/layout/baseinput.html" %}
26
+ {% endfor %}
27
+ </div>
28
+ {% endif %}
29
+ {% if formset_tag %}</form>{% endif %}
30
+ {% endspecialspaceless %}
unfold/widgets.py CHANGED
@@ -86,6 +86,7 @@ BASE_CLASSES = [
86
86
  "dark:group-[.errors]:border-red-500",
87
87
  "dark:focus:group-[.errors]:outline-red-500",
88
88
  "dark:scheme-dark",
89
+ "group-[.primary]:border-transparent",
89
90
  ]
90
91
 
91
92
  BASE_INPUT_CLASSES = [
@@ -633,6 +634,8 @@ class UnfoldAdminBigIntegerFieldWidget(AdminBigIntegerFieldWidget):
633
634
 
634
635
 
635
636
  class UnfoldAdminNullBooleanSelectWidget(NullBooleanSelect):
637
+ template_name = "unfold/widgets/select.html"
638
+
636
639
  def __init__(self, attrs=None):
637
640
  if attrs is None:
638
641
  attrs = {}
@@ -644,6 +647,8 @@ class UnfoldAdminNullBooleanSelectWidget(NullBooleanSelect):
644
647
 
645
648
 
646
649
  class UnfoldAdminSelectWidget(Select):
650
+ template_name = "unfold/widgets/select.html"
651
+
647
652
  def __init__(self, attrs=None, choices=()):
648
653
  if attrs is None:
649
654
  attrs = {}
@@ -690,6 +695,31 @@ class UnfoldAdminSelectMultipleWidget(SelectMultiple):
690
695
  super().__init__(attrs, choices)
691
696
 
692
697
 
698
+ class UnfoldAdminSelect2MultipleWidget(SelectMultiple):
699
+ def __init__(self, attrs=None, choices=()):
700
+ if attrs is None:
701
+ attrs = {}
702
+
703
+ attrs["data-theme"] = "admin-autocomplete"
704
+ attrs["class"] = "unfold-admin-autocomplete admin-autocomplete"
705
+
706
+ super().__init__(attrs, choices)
707
+
708
+ class Media:
709
+ js = (
710
+ "admin/js/vendor/jquery/jquery.js",
711
+ "admin/js/vendor/select2/select2.full.js",
712
+ "admin/js/jquery.init.js",
713
+ "unfold/js/select2.init.js",
714
+ )
715
+ css = {
716
+ "screen": (
717
+ "admin/css/vendor/select2/select2.css",
718
+ "admin/css/autocomplete.css",
719
+ ),
720
+ }
721
+
722
+
693
723
  class UnfoldAdminRadioSelectWidget(AdminRadioSelect):
694
724
  template_name = "unfold/widgets/radio.html"
695
725
  option_template_name = "unfold/widgets/radio_option.html"