django-unfold 0.33.0__tar.gz → 0.35.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. {django_unfold-0.33.0 → django_unfold-0.35.0}/PKG-INFO +33 -5
  2. {django_unfold-0.33.0 → django_unfold-0.35.0}/README.md +32 -4
  3. {django_unfold-0.33.0 → django_unfold-0.35.0}/pyproject.toml +1 -1
  4. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/admin.py +12 -14
  5. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/admin.py +34 -1
  6. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/forms.py +36 -3
  7. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +1 -1
  8. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +1 -1
  9. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +1 -1
  10. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +1 -1
  11. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +1 -1
  12. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +10 -10
  13. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +10 -10
  14. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +1 -1
  15. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +3 -3
  16. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +6 -6
  17. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +8 -8
  18. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +18 -18
  19. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/decorators.py +2 -2
  20. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/fields.py +2 -2
  21. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/forms.py +2 -1
  22. django_unfold-0.35.0/src/unfold/static/unfold/css/styles.css +1 -0
  23. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/app.js +23 -0
  24. django_unfold-0.35.0/src/unfold/static/unfold/js/select2.init.js +15 -0
  25. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/styles.css +6 -10
  26. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/actions.html +14 -12
  27. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/app_list.html +3 -5
  28. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_form.html +1 -1
  29. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list.html +4 -4
  30. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list_results.html +4 -4
  31. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/delete_confirmation.html +9 -9
  32. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/delete_selected_confirmation.html +9 -9
  33. django_unfold-0.35.0/src/unfold/templates/admin/edit_inline/stacked.html +92 -0
  34. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/edit_inline/tabular.html +11 -11
  35. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/filter.html +5 -5
  36. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/includes/object_delete_summary.html +2 -2
  37. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/object_history.html +9 -9
  38. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/pagination.html +3 -3
  39. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/submit_line.html +7 -7
  40. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/change_list_filter.html +3 -3
  41. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/progress.html +1 -1
  42. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/table.html +4 -4
  43. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/title.html +1 -1
  44. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/account_links.html +2 -2
  45. django_unfold-0.35.0/src/unfold/templates/unfold/helpers/actions_row.html +21 -0
  46. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/add_link.html +2 -2
  47. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/app_list.html +7 -7
  48. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/app_list_default.html +7 -7
  49. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +1 -1
  50. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/display_header.html +4 -2
  51. django_unfold-0.35.0/src/unfold/templates/unfold/helpers/field_readonly_value.html +1 -0
  52. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +1 -1
  53. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +1 -1
  54. django_unfold-0.35.0/src/unfold/templates/unfold/helpers/help_text.html +5 -0
  55. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/history.html +3 -3
  56. django_unfold-0.35.0/src/unfold/templates/unfold/helpers/label.html +16 -0
  57. django_unfold-0.35.0/src/unfold/templates/unfold/helpers/messages.html +20 -0
  58. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/navigation.html +1 -1
  59. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/search_results.html +2 -2
  60. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/site_icon.html +1 -1
  61. django_unfold-0.35.0/src/unfold/templates/unfold/helpers/tab_action.html +5 -0
  62. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/tab_list.html +9 -5
  63. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/theme_switch.html +2 -2
  64. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +5 -3
  65. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/skeleton.html +2 -2
  66. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +2 -2
  67. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +2 -2
  68. django_unfold-0.35.0/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +19 -0
  69. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/radio_option.html +1 -1
  70. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_datetime.html +2 -2
  71. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +2 -2
  72. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templatetags/unfold_list.py +6 -7
  73. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/widgets.py +21 -6
  74. django_unfold-0.33.0/src/unfold/static/unfold/css/styles.css +0 -1
  75. django_unfold-0.33.0/src/unfold/templates/admin/edit_inline/stacked.html +0 -86
  76. django_unfold-0.33.0/src/unfold/templates/unfold/helpers/actions_row.html +0 -19
  77. django_unfold-0.33.0/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -1
  78. django_unfold-0.33.0/src/unfold/templates/unfold/helpers/help_text.html +0 -5
  79. django_unfold-0.33.0/src/unfold/templates/unfold/helpers/label.html +0 -16
  80. django_unfold-0.33.0/src/unfold/templates/unfold/helpers/messages.html +0 -9
  81. django_unfold-0.33.0/src/unfold/templates/unfold/helpers/tab_action.html +0 -5
  82. django_unfold-0.33.0/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -15
  83. {django_unfold-0.33.0 → django_unfold-0.35.0}/LICENSE.md +0 -0
  84. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/__init__.py +0 -0
  85. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/apps.py +0 -0
  86. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/checks.py +0 -0
  87. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/__init__.py +0 -0
  88. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/__init__.py +0 -0
  89. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/apps.py +0 -0
  90. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider.min.css +0 -0
  91. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
  92. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
  93. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider.min.js +0 -0
  94. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/static/unfold/filters/js/wNumb.min.js +0 -0
  95. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
  96. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/__init__.py +0 -0
  97. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/apps.py +0 -0
  98. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix.css +0 -0
  99. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
  100. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.js +0 -0
  101. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
  102. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
  103. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
  104. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/forms/widgets.py +0 -0
  105. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/__init__.py +0 -0
  106. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/apps.py +0 -0
  107. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
  108. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
  109. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
  110. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
  111. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
  112. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/__init__.py +0 -0
  113. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/apps.py +0 -0
  114. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/forms.py +0 -0
  115. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
  116. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
  117. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
  118. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
  119. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
  120. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
  121. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
  122. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
  123. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
  124. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
  125. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/__init__.py +0 -0
  126. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/admin.py +0 -0
  127. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/apps.py +0 -0
  128. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/checks.py +0 -0
  129. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/inlines/forms.py +0 -0
  130. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
  131. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/apps.py +0 -0
  132. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
  133. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -0
  134. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
  135. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/dataclasses.py +0 -0
  136. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/exceptions.py +0 -0
  137. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/settings.py +0 -0
  138. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/sites.py +0 -0
  139. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/css/simplebar.css +0 -0
  140. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
  141. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
  142. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
  143. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
  144. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
  145. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
  146. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
  147. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.anchor.js +0 -0
  148. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.js +0 -0
  149. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/alpine.persist.js +0 -0
  150. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/chart.js +0 -0
  151. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/htmx.js +0 -0
  152. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/static/unfold/js/simplebar.js +0 -0
  153. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/app_index.html +0 -0
  154. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
  155. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/auth/user/change_password.html +0 -0
  156. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/base.html +0 -0
  157. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/base_site.html +0 -0
  158. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
  159. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
  160. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
  161. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
  162. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/index.html +0 -0
  163. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/login.html +0 -0
  164. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
  165. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/admin/search_form.html +0 -0
  166. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
  167. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/registration/logged_out.html +0 -0
  168. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/registration/password_change_done.html +0 -0
  169. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/registration/password_change_form.html +0 -0
  170. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/button.html +0 -0
  171. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/card.html +0 -0
  172. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
  173. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
  174. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/container.html +0 -0
  175. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/flex.html +0 -0
  176. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/icon.html +0 -0
  177. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
  178. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/separator.html +0 -0
  179. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/components/text.html +0 -0
  180. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
  181. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/boolean.html +0 -0
  182. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
  183. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
  184. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
  185. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
  186. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
  187. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
  188. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
  189. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
  190. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
  191. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
  192. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
  193. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/search.html +0 -0
  194. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
  195. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
  196. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
  197. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
  198. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
  199. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
  200. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
  201. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
  202. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
  203. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
  204. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
  205. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/textarea_expandable.html +0 -0
  206. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
  207. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templatetags/__init__.py +0 -0
  208. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/templatetags/unfold.py +0 -0
  209. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/typing.py +0 -0
  210. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/utils.py +0 -0
  211. {django_unfold-0.33.0 → django_unfold-0.35.0}/src/unfold/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-unfold
3
- Version: 0.33.0
3
+ Version: 0.35.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  Home-page: https://unfoldadmin.com
6
6
  License: MIT
@@ -111,6 +111,7 @@ Did you decide to start using Unfold but you don't have time to make the switch
111
111
  - [Pre-commit](#pre-commit)
112
112
  - [Poetry configuration](#poetry-configuration)
113
113
  - [Compiling Tailwind](#compiling-tailwind)
114
+ - [Design system](#design-system)
114
115
  - [Using VS Code with containers](#using-vs-code-with-containers)
115
116
  - [Development server](#development-server)
116
117
  - [Compiling Tailwind in devcontainer](#compiling-tailwind-in-devcontainer)
@@ -178,7 +179,7 @@ class CustomAdminClass(ModelAdmin):
178
179
  from django.contrib import admin
179
180
  from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
180
181
  from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
181
- from django.contrib.auth.models import User
182
+ from django.contrib.auth.models import User, Group
182
183
 
183
184
  from unfold.admin import ModelAdmin
184
185
 
@@ -359,6 +360,9 @@ class CustomAdminClass(ModelAdmin):
359
360
  # Display fields in changeform in compressed mode
360
361
  compressed_fields = True # Default: False
361
362
 
363
+ # Warn before leaving unsaved changes in changeform
364
+ warn_unsaved_form = True # Default: False
365
+
362
366
  # Preprocess content of readonly fields before render
363
367
  readonly_preprocess_fields = {
364
368
  "model_field_name": "html.unescape",
@@ -374,6 +378,9 @@ class CustomAdminClass(ModelAdmin):
374
378
  # Position horizontal scrollbar in changelist at the top
375
379
  list_horizontal_scrollbar_top = False
376
380
 
381
+ # Dsable select all action in changelist
382
+ list_disable_select_all = False
383
+
377
384
  # Custom actions
378
385
  actions_list = [] # Displayed above the results list
379
386
  actions_row = [] # Displayed in a table row in results list
@@ -641,7 +648,14 @@ The difference between them is that `ChoicesDropdownFilter` will collect a list
641
648
  from django.contrib import admin
642
649
  from django.contrib.auth.models import User
643
650
  from unfold.admin import ModelAdmin
644
- from unfold.contrib.filters.admin import ChoicesDropdownFilter, RelatedDropdownFilter, DropdownFilter
651
+ from unfold.contrib.filters.admin import (
652
+ ChoicesDropdownFilter,
653
+ MultipleChoicesDropdownFilter,
654
+ RelatedDropdownFilter,
655
+ MultipleRelatedDropdownFilter,
656
+ DropdownFilter,
657
+ MultipleDropdownFilter
658
+ )
645
659
 
646
660
 
647
661
  class CustomDropdownFilter(DropdownFilter):
@@ -668,7 +682,9 @@ class MyAdmin(ModelAdmin):
668
682
  list_filter = [
669
683
  CustomDropdownFilter,
670
684
  ("modelfield_with_choices", ChoicesDropdownFilter),
685
+ ("modelfield_with_choices_multiple", MultipleChoicesDropdownFilter),
671
686
  ("modelfield_with_foreign_key", RelatedDropdownFilter)
687
+ ("modelfield_with_foreign_key_multiple", MultipleRelatedDropdownFilter)
672
688
  ]
673
689
  ```
674
690
 
@@ -1359,8 +1375,8 @@ def dashboard_callback(request: HttpRequest) -> Dict:
1359
1375
  ```
1360
1376
 
1361
1377
  ```django-html
1362
- {% component "unfold/components/card" with title="Card title" %}
1363
- {% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% encomponent %}
1378
+ {% component "unfold/components/card.html" with title="Card title" %}
1379
+ {% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% endcomponent %}
1364
1380
  {% endcomponent %}
1365
1381
  ```
1366
1382
 
@@ -1402,6 +1418,17 @@ Some components like datepickers, calendars or selectors in admin was not possib
1402
1418
 
1403
1419
  **Note:** most of the custom styles located in style.css are created via `@apply some-tailwind-class;` as is not possible to manually add CSS class to element which are for example created via jQuery.
1404
1420
 
1421
+
1422
+ ### Design system
1423
+
1424
+ | Component | Classes |
1425
+ | --------------------------------- | ------------------------------------------------------ |
1426
+ | Regular text | text-gray-600 dark:text-gray-300 |
1427
+ | Hover regular text | text-gray-700 dark:text-gray-200 |
1428
+ | Headings | font-semibold text-gray-900 dark:text-gray-100 |
1429
+ | Icon | text-gray-400 dark:text-gray-500 |
1430
+ | Hover icon | hover:text-gray-500 dark:hover:text-gray-400 |
1431
+
1405
1432
  ### Using VS Code with containers
1406
1433
 
1407
1434
  Unfold already contains prepared support for VS Code development. After cloning the project locally, open the main folder in VS Code (in terminal `code .`). Immediately, you would see a message from VS Code **Folder contains a Dev Container configuration file. Reopen folder to develop in a container** which will inform you that the support for containers is prepared. Confirm the message by clicking on **Reopen in Container**. If the message is not there, you can still manually open the project in a container by running the command **Dev Containers: Reopen in Container**.
@@ -1424,4 +1451,5 @@ The container has already a node preinstalled so it is possible to compile a new
1424
1451
  - [Material Icons](https://fonts.google.com/icons) - Icons from Google Fonts
1425
1452
  - [Trix](https://trix-editor.org/) - WYSIWYG editor
1426
1453
  - [Alpine.js](https://alpinejs.dev/) - JavaScript interactions
1454
+ - [Chart.js](https://github.com/chartjs/Chart.js/) - Chart components
1427
1455
 
@@ -87,6 +87,7 @@ Did you decide to start using Unfold but you don't have time to make the switch
87
87
  - [Pre-commit](#pre-commit)
88
88
  - [Poetry configuration](#poetry-configuration)
89
89
  - [Compiling Tailwind](#compiling-tailwind)
90
+ - [Design system](#design-system)
90
91
  - [Using VS Code with containers](#using-vs-code-with-containers)
91
92
  - [Development server](#development-server)
92
93
  - [Compiling Tailwind in devcontainer](#compiling-tailwind-in-devcontainer)
@@ -154,7 +155,7 @@ class CustomAdminClass(ModelAdmin):
154
155
  from django.contrib import admin
155
156
  from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
156
157
  from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin
157
- from django.contrib.auth.models import User
158
+ from django.contrib.auth.models import User, Group
158
159
 
159
160
  from unfold.admin import ModelAdmin
160
161
 
@@ -335,6 +336,9 @@ class CustomAdminClass(ModelAdmin):
335
336
  # Display fields in changeform in compressed mode
336
337
  compressed_fields = True # Default: False
337
338
 
339
+ # Warn before leaving unsaved changes in changeform
340
+ warn_unsaved_form = True # Default: False
341
+
338
342
  # Preprocess content of readonly fields before render
339
343
  readonly_preprocess_fields = {
340
344
  "model_field_name": "html.unescape",
@@ -350,6 +354,9 @@ class CustomAdminClass(ModelAdmin):
350
354
  # Position horizontal scrollbar in changelist at the top
351
355
  list_horizontal_scrollbar_top = False
352
356
 
357
+ # Dsable select all action in changelist
358
+ list_disable_select_all = False
359
+
353
360
  # Custom actions
354
361
  actions_list = [] # Displayed above the results list
355
362
  actions_row = [] # Displayed in a table row in results list
@@ -617,7 +624,14 @@ The difference between them is that `ChoicesDropdownFilter` will collect a list
617
624
  from django.contrib import admin
618
625
  from django.contrib.auth.models import User
619
626
  from unfold.admin import ModelAdmin
620
- from unfold.contrib.filters.admin import ChoicesDropdownFilter, RelatedDropdownFilter, DropdownFilter
627
+ from unfold.contrib.filters.admin import (
628
+ ChoicesDropdownFilter,
629
+ MultipleChoicesDropdownFilter,
630
+ RelatedDropdownFilter,
631
+ MultipleRelatedDropdownFilter,
632
+ DropdownFilter,
633
+ MultipleDropdownFilter
634
+ )
621
635
 
622
636
 
623
637
  class CustomDropdownFilter(DropdownFilter):
@@ -644,7 +658,9 @@ class MyAdmin(ModelAdmin):
644
658
  list_filter = [
645
659
  CustomDropdownFilter,
646
660
  ("modelfield_with_choices", ChoicesDropdownFilter),
661
+ ("modelfield_with_choices_multiple", MultipleChoicesDropdownFilter),
647
662
  ("modelfield_with_foreign_key", RelatedDropdownFilter)
663
+ ("modelfield_with_foreign_key_multiple", MultipleRelatedDropdownFilter)
648
664
  ]
649
665
  ```
650
666
 
@@ -1335,8 +1351,8 @@ def dashboard_callback(request: HttpRequest) -> Dict:
1335
1351
  ```
1336
1352
 
1337
1353
  ```django-html
1338
- {% component "unfold/components/card" with title="Card title" %}
1339
- {% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% encomponent %}
1354
+ {% component "unfold/components/card.html" with title="Card title" %}
1355
+ {% component "unfold/components/table.html" with table=table_data card_included=1 striped=1 %}{% endcomponent %}
1340
1356
  {% endcomponent %}
1341
1357
  ```
1342
1358
 
@@ -1378,6 +1394,17 @@ Some components like datepickers, calendars or selectors in admin was not possib
1378
1394
 
1379
1395
  **Note:** most of the custom styles located in style.css are created via `@apply some-tailwind-class;` as is not possible to manually add CSS class to element which are for example created via jQuery.
1380
1396
 
1397
+
1398
+ ### Design system
1399
+
1400
+ | Component | Classes |
1401
+ | --------------------------------- | ------------------------------------------------------ |
1402
+ | Regular text | text-gray-600 dark:text-gray-300 |
1403
+ | Hover regular text | text-gray-700 dark:text-gray-200 |
1404
+ | Headings | font-semibold text-gray-900 dark:text-gray-100 |
1405
+ | Icon | text-gray-400 dark:text-gray-500 |
1406
+ | Hover icon | hover:text-gray-500 dark:hover:text-gray-400 |
1407
+
1381
1408
  ### Using VS Code with containers
1382
1409
 
1383
1410
  Unfold already contains prepared support for VS Code development. After cloning the project locally, open the main folder in VS Code (in terminal `code .`). Immediately, you would see a message from VS Code **Folder contains a Dev Container configuration file. Reopen folder to develop in a container** which will inform you that the support for containers is prepared. Confirm the message by clicking on **Reopen in Container**. If the message is not there, you can still manually open the project in a container by running the command **Dev Containers: Reopen in Container**.
@@ -1400,3 +1427,4 @@ The container has already a node preinstalled so it is possible to compile a new
1400
1427
  - [Material Icons](https://fonts.google.com/icons) - Icons from Google Fonts
1401
1428
  - [Trix](https://trix-editor.org/) - WYSIWYG editor
1402
1429
  - [Alpine.js](https://alpinejs.dev/) - JavaScript interactions
1430
+ - [Chart.js](https://github.com/chartjs/Chart.js/) - Chart components
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-unfold"
3
- version = "0.33.0"
3
+ version = "0.35.0"
4
4
  description = "Modern Django admin theme for seamless interface development"
5
5
  license = "MIT"
6
6
  readme = "README.md"
@@ -84,7 +84,7 @@ FORMFIELD_OVERRIDES = {
84
84
  models.UUIDField: {"widget": UnfoldAdminUUIDInputWidget},
85
85
  models.TextField: {"widget": UnfoldAdminTextareaWidget},
86
86
  models.NullBooleanField: {"widget": UnfoldAdminNullBooleanSelectWidget},
87
- models.BooleanField: {"widget": UnfoldBooleanWidget},
87
+ models.BooleanField: {"widget": UnfoldBooleanSwitchWidget},
88
88
  models.IntegerField: {"widget": UnfoldAdminIntegerFieldWidget},
89
89
  models.BigIntegerField: {"widget": UnfoldAdminBigIntegerFieldWidget},
90
90
  models.DecimalField: {"widget": UnfoldAdminDecimalFieldWidget},
@@ -119,7 +119,9 @@ FORMFIELD_OVERRIDES_INLINE.update(
119
119
  }
120
120
  )
121
121
 
122
- checkbox = UnfoldBooleanWidget({"class": "action-select"}, lambda value: False)
122
+ checkbox = UnfoldBooleanWidget(
123
+ {"class": "action-select", "aria-label": _("Select record")}, lambda value: False
124
+ )
123
125
 
124
126
  helpers.AdminField = UnfoldAdminField
125
127
 
@@ -231,8 +233,10 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
231
233
  list_horizontal_scrollbar_top = False
232
234
  list_filter_submit = False
233
235
  list_fullwidth = False
236
+ list_disable_select_all = False
234
237
  compressed_fields = False
235
238
  readonly_preprocess_fields = {}
239
+ warn_unsaved_form = False
236
240
  checks_class = UnfoldModelAdminChecks
237
241
 
238
242
  @property
@@ -241,13 +245,14 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
241
245
  additional_media = forms.Media()
242
246
 
243
247
  for filter in self.list_filter:
244
- if not isinstance(filter, (tuple, list)):
245
- continue
246
-
247
- if hasattr(filter[1], "form_class") and hasattr(
248
- filter[1].form_class, "Media"
248
+ if (
249
+ isinstance(filter, (tuple, list))
250
+ and hasattr(filter[1], "form_class")
251
+ and hasattr(filter[1].form_class, "Media")
249
252
  ):
250
253
  additional_media += forms.Media(filter[1].form_class.Media)
254
+ elif hasattr(filter, "form_class") and hasattr(filter.form_class, "Media"):
255
+ additional_media += forms.Media(filter.form_class.Media)
251
256
 
252
257
  return media + additional_media
253
258
 
@@ -414,13 +419,6 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
414
419
  if extra_context is None:
415
420
  extra_context = {}
416
421
 
417
- new_formfield_overrides = copy.deepcopy(self.formfield_overrides)
418
- new_formfield_overrides.update(
419
- {models.BooleanField: {"widget": UnfoldBooleanSwitchWidget}}
420
- )
421
-
422
- self.formfield_overrides = new_formfield_overrides
423
-
424
422
  actions = []
425
423
  if object_id:
426
424
  for action in self.get_actions_detail(request, object_id):
@@ -41,12 +41,23 @@ class ValueMixin:
41
41
  )
42
42
 
43
43
 
44
+ class MultiValueMixin:
45
+ def value(self) -> Optional[List[str]]:
46
+ return (
47
+ self.lookup_val
48
+ if self.lookup_val not in EMPTY_VALUES
49
+ and isinstance(self.lookup_val, List)
50
+ and len(self.lookup_val) > 0
51
+ else self.lookup_val
52
+ )
53
+
54
+
44
55
  class DropdownMixin:
45
56
  template = "unfold/filters/filters_field.html"
46
57
  form_class = DropdownForm
47
58
  all_option = ["", _("All")]
48
59
 
49
- def queryset(self, request, queryset) -> QuerySet:
60
+ def queryset(self, request: HttpRequest, queryset: QuerySet) -> QuerySet:
50
61
  if self.value() not in EMPTY_VALUES:
51
62
  return super().queryset(request, queryset)
52
63
 
@@ -112,11 +123,23 @@ class DropdownFilter(admin.SimpleListFilter):
112
123
  name=self.parameter_name,
113
124
  choices=[self.all_option, *self.lookup_choices],
114
125
  data={self.parameter_name: self.value()},
126
+ multiple=self.multiple if hasattr(self, "multiple") else False,
115
127
  ),
116
128
  },
117
129
  )
118
130
 
119
131
 
132
+ class MultipleDropdownFilter(DropdownFilter):
133
+ multiple = True
134
+
135
+ def __init__(self, request, params, model, model_admin):
136
+ self.request = request
137
+ super().__init__(request, params, model, model_admin)
138
+
139
+ def value(self):
140
+ return self.request.GET.getlist(self.parameter_name)
141
+
142
+
120
143
  class ChoicesDropdownFilter(ValueMixin, DropdownMixin, admin.ChoicesFieldListFilter):
121
144
  def choices(self, changelist: ChangeList):
122
145
  choices = [self.all_option, *self.field.flatchoices]
@@ -127,10 +150,15 @@ class ChoicesDropdownFilter(ValueMixin, DropdownMixin, admin.ChoicesFieldListFil
127
150
  name=self.lookup_kwarg,
128
151
  choices=choices,
129
152
  data={self.lookup_kwarg: self.value()},
153
+ multiple=self.multiple if hasattr(self, "multiple") else False,
130
154
  ),
131
155
  }
132
156
 
133
157
 
158
+ class MultipleChoicesDropdownFilter(MultiValueMixin, ChoicesDropdownFilter):
159
+ multiple = True
160
+
161
+
134
162
  class RelatedDropdownFilter(ValueMixin, DropdownMixin, admin.RelatedFieldListFilter):
135
163
  def choices(self, changelist: ChangeList):
136
164
  yield {
@@ -139,10 +167,15 @@ class RelatedDropdownFilter(ValueMixin, DropdownMixin, admin.RelatedFieldListFil
139
167
  name=self.lookup_kwarg,
140
168
  choices=[self.all_option, *self.lookup_choices],
141
169
  data={self.lookup_kwarg: self.value()},
170
+ multiple=self.multiple if hasattr(self, "multiple") else False,
142
171
  ),
143
172
  }
144
173
 
145
174
 
175
+ class MultipleRelatedDropdownFilter(MultiValueMixin, RelatedDropdownFilter):
176
+ multiple = True
177
+
178
+
146
179
  class SingleNumericFilter(admin.FieldListFilter):
147
180
  request = None
148
181
  parameter_name = None
@@ -1,8 +1,10 @@
1
1
  from django import forms
2
+ from django.forms import ChoiceField, MultipleChoiceField
2
3
  from django.utils.translation import gettext_lazy as _
3
4
 
4
5
  from ...widgets import (
5
6
  INPUT_CLASSES,
7
+ UnfoldAdminSelectMultipleWidget,
6
8
  UnfoldAdminSelectWidget,
7
9
  UnfoldAdminSplitDateTimeVerticalWidget,
8
10
  UnfoldAdminTextInputWidget,
@@ -21,15 +23,46 @@ class SearchForm(forms.Form):
21
23
 
22
24
 
23
25
  class DropdownForm(forms.Form):
24
- def __init__(self, name, label, choices, *args, **kwargs):
26
+ widget = UnfoldAdminSelectWidget(
27
+ attrs={
28
+ "data-theme": "admin-autocomplete",
29
+ "class": "admin-autocomplete",
30
+ }
31
+ )
32
+ field = ChoiceField
33
+
34
+ def __init__(self, name, label, choices, multiple=False, *args, **kwargs):
25
35
  super().__init__(*args, **kwargs)
26
36
 
27
- self.fields[name] = forms.ChoiceField(
37
+ if multiple:
38
+ self.widget = UnfoldAdminSelectMultipleWidget(
39
+ attrs={
40
+ "data-theme": "admin-autocomplete",
41
+ "class": "admin-autocomplete",
42
+ }
43
+ )
44
+ self.field = MultipleChoiceField
45
+
46
+ self.fields[name] = self.field(
28
47
  label=label,
29
48
  required=False,
30
49
  choices=choices,
31
- widget=UnfoldAdminSelectWidget,
50
+ widget=self.widget,
51
+ )
52
+
53
+ class Media:
54
+ js = (
55
+ "admin/js/vendor/jquery/jquery.js",
56
+ "admin/js/vendor/select2/select2.full.js",
57
+ "admin/js/jquery.init.js",
58
+ "unfold/js/select2.init.js",
32
59
  )
60
+ css = {
61
+ "screen": (
62
+ "admin/css/vendor/select2/select2.css",
63
+ "admin/css/autocomplete.css",
64
+ ),
65
+ }
33
66
 
34
67
 
35
68
  class SingleNumericForm(forms.Form):
@@ -2,7 +2,7 @@
2
2
 
3
3
  {% with choices.0 as choice %}
4
4
  <div class="flex flex-col mb-6">
5
- <h3 class="font-medium mb-2 text-gray-700 text-sm dark:text-gray-200">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
5
+ <h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
6
6
 
7
7
  <div class="flex flex-col space-y-4">
8
8
  {% for field in choice.form %}
@@ -2,7 +2,7 @@
2
2
 
3
3
  {% with choices.0 as choice %}
4
4
  <div class="flex flex-col mb-6">
5
- <h3 class="font-medium mb-2 text-gray-700 text-sm dark:text-gray-200">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
5
+ <h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
6
6
 
7
7
  <div class="flex flex-col space-y-4">
8
8
  {% for field in choice.form %}
@@ -2,7 +2,7 @@
2
2
 
3
3
  {% with choices.0 as choice %}
4
4
  <div class="flex flex-col mb-6">
5
- <h3 class="font-medium mb-2 text-gray-700 text-sm dark:text-gray-200">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
5
+ <h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
6
6
 
7
7
  <div class="flex flex-row gap-4">
8
8
  {% for field in choice.form %}
@@ -2,7 +2,7 @@
2
2
 
3
3
  {% with choices.0 as choice %}
4
4
  <div class="flex flex-col mb-6">
5
- <h3 class="font-medium mb-2 text-gray-700 text-sm dark:text-gray-200">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
5
+ <h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
6
6
 
7
7
  {% for field in choice.form %}
8
8
  <div class="flex flex-row flex-wrap group relative{% if field.errors %} errors{% endif %}">
@@ -3,7 +3,7 @@
3
3
 
4
4
  {% with choices.0 as choice %}
5
5
  <div class="admin-numeric-filter-wrapper mb-6">
6
- <h3 class="font-medium mb-2 text-gray-700 text-sm dark:text-gray-200">
6
+ <h3 class="font-semibold mb-2 text-gray-900 dark:text-gray-100">
7
7
  {% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}
8
8
  </h3>
9
9
 
@@ -3,25 +3,25 @@
3
3
  <form method="post">
4
4
  {% csrf_token %}
5
5
 
6
- <h2 class="font-medium mb-3 text-sm text-gray-700 dark:text-gray-200">
6
+ <h2 class="font-semibold mb-3 text-gray-900 dark:text-gray-100">
7
7
  {% trans "Group permissions" %}
8
8
  </h2>
9
9
 
10
10
  {% if groups_perms.items %}
11
- <table id="group-permissions" class="border-gray-200 border-spacing-none border-separate mb-6 text-gray-700 w-full dark:text-gray-300 lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
12
- <thead class="hidden lg:table-header-group">
11
+ <table id="group-permissions" class="border-gray-200 border-spacing-none border-separate mb-6 w-full lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
12
+ <thead class="hidden lg:table-header-group text-gray-900 dark:text-gray-100">
13
13
  <tr>
14
- <th class="align-middle font-medium px-3 py-2 text-left text-gray-400 text-sm">
14
+ <th class="align-middle font-medium px-3 py-2 text-left">
15
15
  {% trans "Group" %}
16
16
  </th>
17
17
 
18
18
  {% for perm in model_perms %}
19
- <th class="align-middle font-medium px-3 py-2 text-left text-gray-400 text-sm">
19
+ <th class="align-middle font-medium px-3 py-2 text-left">
20
20
  {{ perm.name }}
21
21
  </th>
22
22
  {% endfor %}
23
23
 
24
- <th class="align-middle font-medium px-3 py-2 text-right text-gray-400 text-sm">
24
+ <th class="align-middle font-medium px-3 py-2 text-right">
25
25
  {% trans "Action" %}
26
26
  </th>
27
27
  </tr>
@@ -30,14 +30,14 @@
30
30
  <tbody>
31
31
  {% for group, group_perms in groups_perms.items %}
32
32
  <tr class="block border mb-3 rounded-md shadow-sm lg:table-row lg:border-none lg:mb-0 lg:shadow-none dark:border-gray-800">
33
- <th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left text-sm before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto before:text-gray-500 first:border-t-0 dark:before:text-gray-300 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "User" %}">
34
- <span class="text-gray-700 dark:text-gray-200">
33
+ <th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "User" %}">
34
+ <span>
35
35
  {{ group }}
36
36
  </span>
37
37
  </th>
38
38
 
39
39
  {% for perm in model_perms %}
40
- <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left text-sm before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto before:text-gray-500 first:border-t-0 dark:before:text-gray-300 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
40
+ <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
41
41
  {% if perm.codename in group_perms %}
42
42
  {% include "unfold/helpers/boolean.html" with value=False %}
43
43
  {% else %}
@@ -46,7 +46,7 @@
46
46
  </td>
47
47
  {% endfor %}
48
48
 
49
- <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right text-sm before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto before:text-gray-500 first:border-t-0 dark:before:text-gray-300 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "Action" %}">
49
+ <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "Action" %}">
50
50
  <a href="group-manage/{{ group.id|safe }}/" class="hover:text-gray-700 dark:hover:text-white">
51
51
  {% trans "Edit" %}
52
52
  </a>
@@ -3,25 +3,25 @@
3
3
  <form method="post">
4
4
  {% csrf_token %}
5
5
 
6
- <h2 class="font-medium mb-3 text-sm text-gray-700 dark:text-gray-200">
6
+ <h2 class="font-medium mb-3 text-gray-700 dark:text-gray-200">
7
7
  {% trans "User permissions" %}
8
8
  </h2>
9
9
 
10
10
  {% if users_perms.items %}
11
- <table id="user-permissions" class="border-gray-200 border-spacing-none border-separate mb-6 text-gray-700 w-full dark:text-gray-300 lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
12
- <thead class="hidden lg:table-header-group">
11
+ <table id="user-permissions" class="border-gray-200 border-spacing-none border-separate mb-6 w-full lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
12
+ <thead class="hidden lg:table-header-group text-gray-900 dark:text-gray-100">
13
13
  <tr>
14
- <th class="align-middle font-medium px-3 py-2 text-left text-gray-400 text-sm">
14
+ <th class="align-middle font-medium px-3 py-2 text-left">
15
15
  {% trans "User" %}
16
16
  </th>
17
17
 
18
18
  {% for perm in model_perms %}
19
- <th class="align-middle font-medium px-3 py-2 text-left text-gray-400 text-sm">
19
+ <th class="align-middle font-medium px-3 py-2 text-left">
20
20
  {{ perm.name }}
21
21
  </th>
22
22
  {% endfor %}
23
23
 
24
- <th class="align-middle font-medium px-3 py-2 text-right text-gray-400 text-sm">
24
+ <th class="align-middle font-medium px-3 py-2 text-right">
25
25
  {% trans "Action" %}
26
26
  </th>
27
27
  </tr>
@@ -30,14 +30,14 @@
30
30
  <tbody>
31
31
  {% for user, user_perms in users_perms.items %}
32
32
  <tr class="block border mb-3 rounded-md shadow-sm lg:table-row lg:border-none lg:mb-0 lg:shadow-none dark:border-gray-800">
33
- <th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left text-sm before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto before:text-gray-500 first:border-t-0 dark:before:text-gray-300 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "User" %}">
34
- <span class="text-gray-700 dark:text-gray-200">
33
+ <th class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "User" %}">
34
+ <span>
35
35
  {{ user }}
36
36
  </span>
37
37
  </th>
38
38
 
39
39
  {% for perm in model_perms %}
40
- <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left text-sm before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto before:text-gray-500 first:border-t-0 dark:before:text-gray-300 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
40
+ <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{{ perm.name }}">
41
41
  {% if perm.codename in group_perms %}
42
42
  {% include "unfold/helpers/boolean.html" with value=False %}
43
43
  {% else %}
@@ -46,7 +46,7 @@
46
46
  </td>
47
47
  {% endfor %}
48
48
 
49
- <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right text-sm before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto before:text-gray-500 first:border-t-0 dark:before:text-gray-300 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "Action" %}">
49
+ <td class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-right before:flex before:capitalize before:content-[attr(data-label)] before:items-center before:mr-auto first:border-t-0 lg:before:hidden lg:first:border-t lg:py-3 lg:table-cell dark:border-gray-800" data-label="{% trans "Action" %}">
50
50
  <a href="user-manage/{{ user.id|safe }}/" class="hover:text-gray-700 dark:hover:text-white">
51
51
  {% trans "Edit" %}
52
52
  </a>
@@ -6,7 +6,7 @@
6
6
 
7
7
  {{ confirm_form.as_p }}
8
8
 
9
- <p class="font-medium p-4 text-sm text-gray-700 dark:text-gray-200">
9
+ <p class="font-semibold p-4 text-sm text-gray-900 dark:text-gray-100">
10
10
  {% trans "Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'" %}
11
11
  </p>
12
12
 
@@ -14,8 +14,8 @@
14
14
  {% for line, errors in result.row_errors %}
15
15
  {% for error in errors %}
16
16
  <li x-data="{ open: false }">
17
- <div class="bg-red-50 border border-red-200 cursor-pointer mb-4 rounded shadow-sm text-red-500 text-sm dark:bg-red-500/20 dark:border-red-500/20" x-on:click="open = ! open">
18
- <div class="border-b border-red-200 flex flex-row font-medium py-3 px-4 dark:border-red-500/20">
17
+ <div class="bg-red-50 border border-red-200 cursor-pointer mb-4 rounded shadow-sm text-red-500 dark:bg-red-500/20 dark:border-red-500/20" x-on:click="open = ! open">
18
+ <div class="border-b border-red-200 flex flex-row font-semibold py-3 px-4 dark:border-red-500/20">
19
19
  {% trans "Line number" %}: {{ line }} - {{ error.error }}
20
20
  </div>
21
21
 
@@ -26,7 +26,7 @@
26
26
  </div>
27
27
  </div>
28
28
 
29
- <div class="block border leading-relaxed rounded p-4 text-sm traceback dark:border-gray-800 dark:text-gray-300 " x-show="open">
29
+ <div class="block border leading-relaxed mb-4 rounded p-4 traceback dark:border-gray-800 dark:text-gray-300 " x-show="open">
30
30
  {{ error.traceback|linebreaks }}
31
31
  </div>
32
32
  </li>