django-unfold 0.53.0__tar.gz → 0.54.0__tar.gz

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 (252) hide show
  1. {django_unfold-0.53.0 → django_unfold-0.54.0}/PKG-INFO +1 -1
  2. {django_unfold-0.53.0 → django_unfold-0.54.0}/pyproject.toml +1 -1
  3. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/admin/__init__.py +17 -0
  4. django_unfold-0.54.0/src/unfold/contrib/filters/admin/choice_filters.py +134 -0
  5. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/forms.py +41 -3
  6. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +1 -1
  7. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +1 -1
  8. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/admin/js/inlines.js +23 -3
  9. django_unfold-0.54.0/src/unfold/static/unfold/css/styles.css +1 -0
  10. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/styles.css +2 -1
  11. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/change_list.html +15 -13
  12. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/change_list_results.html +1 -1
  13. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/edit_inline/tabular.html +1 -2
  14. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/chart/cohort.html +2 -2
  15. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/change_list_filter.html +2 -2
  16. django_unfold-0.54.0/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +33 -0
  17. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_field.html +10 -8
  18. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/field.html +4 -2
  19. django_unfold-0.54.0/src/unfold/templates/unfold/helpers/form_label.html +7 -0
  20. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/tab_action.html +17 -2
  21. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/radio_option.html +1 -1
  22. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templatetags/unfold.py +11 -5
  23. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/widgets.py +2 -0
  24. django_unfold-0.53.0/src/unfold/static/unfold/css/styles.css +0 -1
  25. django_unfold-0.53.0/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +0 -31
  26. django_unfold-0.53.0/src/unfold/templates/unfold/helpers/form_label.html +0 -7
  27. {django_unfold-0.53.0 → django_unfold-0.54.0}/LICENSE.md +0 -0
  28. {django_unfold-0.53.0 → django_unfold-0.54.0}/README.md +0 -0
  29. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/__init__.py +0 -0
  30. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/admin.py +0 -0
  31. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/apps.py +0 -0
  32. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/checks.py +0 -0
  33. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/components.py +0 -0
  34. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/__init__.py +0 -0
  35. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/__init__.py +0 -0
  36. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/admin/autocomplete_filters.py +0 -0
  37. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/admin/datetime_filters.py +0 -0
  38. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/admin/dropdown_filters.py +0 -0
  39. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/admin/mixins.py +0 -0
  40. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/admin/numeric_filters.py +0 -0
  41. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/admin/text_filters.py +0 -0
  42. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/apps.py +0 -0
  43. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider.min.css +0 -0
  44. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
  45. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
  46. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider.min.js +0 -0
  47. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/static/unfold/filters/js/wNumb.min.js +0 -0
  48. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
  49. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
  50. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
  51. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +0 -0
  52. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/__init__.py +0 -0
  53. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/apps.py +0 -0
  54. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix.css +0 -0
  55. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
  56. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.js +0 -0
  57. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
  58. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
  59. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
  60. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/forms/widgets.py +0 -0
  61. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/__init__.py +0 -0
  62. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/apps.py +0 -0
  63. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
  64. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
  65. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
  66. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
  67. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
  68. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
  69. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
  70. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/__init__.py +0 -0
  71. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/apps.py +0 -0
  72. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/forms.py +0 -0
  73. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
  74. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
  75. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
  76. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
  77. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
  78. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
  79. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
  80. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
  81. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
  82. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
  83. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
  84. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
  85. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
  86. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
  87. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/inlines/__init__.py +0 -0
  88. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/inlines/admin.py +0 -0
  89. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/inlines/apps.py +0 -0
  90. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/inlines/checks.py +0 -0
  91. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/inlines/forms.py +0 -0
  92. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
  93. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/simple_history/apps.py +0 -0
  94. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
  95. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -0
  96. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -0
  97. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
  98. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/dataclasses.py +0 -0
  99. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/decorators.py +0 -0
  100. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/enums.py +0 -0
  101. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/exceptions.py +0 -0
  102. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/fields.py +0 -0
  103. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/forms.py +0 -0
  104. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/mixins/__init__.py +0 -0
  105. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/mixins/action_model_admin.py +0 -0
  106. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/mixins/base_model_admin.py +0 -0
  107. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/overrides.py +0 -0
  108. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/paginator.py +0 -0
  109. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/sections.py +0 -0
  110. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/settings.py +0 -0
  111. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/sites.py +0 -0
  112. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/admin/js/admin/RelatedObjectLookups.js +0 -0
  113. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/css/simplebar.css +0 -0
  114. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
  115. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
  116. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
  117. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
  118. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
  119. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
  120. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
  121. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/alpine.anchor.js +0 -0
  122. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/alpine.js +0 -0
  123. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/alpine.persist.js +0 -0
  124. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/alpine.resize.js +0 -0
  125. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/alpine.sort.js +0 -0
  126. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/app.js +0 -0
  127. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/chart.js +0 -0
  128. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/htmx.js +0 -0
  129. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/select2.init.js +0 -0
  130. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/static/unfold/js/simplebar.js +0 -0
  131. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/actions.html +0 -0
  132. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/app_index.html +0 -0
  133. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/app_list.html +0 -0
  134. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
  135. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/auth/user/change_password.html +0 -0
  136. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/base.html +0 -0
  137. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/base_site.html +0 -0
  138. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/change_form.html +0 -0
  139. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
  140. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
  141. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
  142. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/delete_confirmation.html +0 -0
  143. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -0
  144. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/edit_inline/stacked.html +0 -0
  145. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/filter.html +0 -0
  146. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
  147. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
  148. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/index.html +0 -0
  149. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/login.html +0 -0
  150. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
  151. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/object_history.html +0 -0
  152. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/pagination.html +0 -0
  153. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/search_form.html +0 -0
  154. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/admin/submit_line.html +0 -0
  155. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
  156. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/registration/logged_out.html +0 -0
  157. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/registration/password_change_done.html +0 -0
  158. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/registration/password_change_form.html +0 -0
  159. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/button.html +0 -0
  160. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/card.html +0 -0
  161. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
  162. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
  163. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/container.html +0 -0
  164. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/flex.html +0 -0
  165. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/icon.html +0 -0
  166. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
  167. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/progress.html +0 -0
  168. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/separator.html +0 -0
  169. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/table.html +0 -0
  170. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/text.html +0 -0
  171. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/title.html +0 -0
  172. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/components/tracker.html +0 -0
  173. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
  174. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
  175. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
  176. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/app_list.html +0 -0
  177. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
  178. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
  179. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/boolean.html +0 -0
  180. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
  181. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/change_list_actions.html +0 -0
  182. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/delete_submit_line.html +0 -0
  183. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/display_dropdown.html +0 -0
  184. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
  185. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
  186. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_delete.html +0 -0
  187. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_error.html +0 -0
  188. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +0 -0
  189. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_row.html +0 -0
  190. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_title.html +0 -0
  191. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/empty_results.html +0 -0
  192. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
  193. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -0
  194. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
  195. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/fieldset_row_checkbox.html +0 -0
  196. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/fieldset_row_field.html +0 -0
  197. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
  198. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
  199. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
  200. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/header_back_button.html +0 -0
  201. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
  202. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
  203. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/label.html +0 -0
  204. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/language_switch.html +0 -0
  205. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/messages/debug.html +0 -0
  206. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
  207. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
  208. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
  209. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/messages/success.html +0 -0
  210. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/messages/warning.html +0 -0
  211. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
  212. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/navigation.html +0 -0
  213. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/navigation_header.html +0 -0
  214. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
  215. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/pagination_default.html +0 -0
  216. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
  217. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/pagination_infinite.html +0 -0
  218. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/search.html +0 -0
  219. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/search_results.html +0 -0
  220. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/site_branding.html +0 -0
  221. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/site_dropdown.html +0 -0
  222. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
  223. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
  224. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
  225. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/tab_actions.html +0 -0
  226. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/tab_items.html +0 -0
  227. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/tab_list.html +0 -0
  228. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
  229. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
  230. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -0
  231. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
  232. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
  233. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/layouts/skeleton.html +0 -0
  234. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/templatetags/preserve_changelist_filters.html +0 -0
  235. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +0 -0
  236. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +0 -0
  237. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
  238. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
  239. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
  240. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
  241. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
  242. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
  243. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
  244. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
  245. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
  246. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
  247. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templates/unfold/widgets/url.html +0 -0
  248. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templatetags/__init__.py +0 -0
  249. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/templatetags/unfold_list.py +0 -0
  250. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/typing.py +0 -0
  251. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/utils.py +0 -0
  252. {django_unfold-0.53.0 → django_unfold-0.54.0}/src/unfold/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-unfold
3
- Version: 0.53.0
3
+ Version: 0.54.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  License: MIT
6
6
  Keywords: django,admin,tailwind,theme
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-unfold"
3
- version = "0.53.0"
3
+ version = "0.54.0"
4
4
  description = "Modern Django admin theme for seamless interface development"
5
5
  license = "MIT"
6
6
  readme = "README.md"
@@ -2,6 +2,15 @@ from unfold.contrib.filters.admin.autocomplete_filters import (
2
2
  AutocompleteSelectFilter,
3
3
  AutocompleteSelectMultipleFilter,
4
4
  )
5
+ from unfold.contrib.filters.admin.choice_filters import (
6
+ AllValuesCheckboxFilter,
7
+ BooleanRadioFilter,
8
+ CheckboxFilter,
9
+ ChoicesCheckboxFilter,
10
+ ChoicesRadioFilter,
11
+ RadioFilter,
12
+ RelatedCheckboxFilter,
13
+ )
5
14
  from unfold.contrib.filters.admin.datetime_filters import (
6
15
  RangeDateFilter,
7
16
  RangeDateTimeFilter,
@@ -23,12 +32,20 @@ from unfold.contrib.filters.admin.numeric_filters import (
23
32
  from unfold.contrib.filters.admin.text_filters import FieldTextFilter, TextFilter
24
33
 
25
34
  __all__ = [
35
+ "AllValuesCheckboxFilter",
36
+ "BooleanRadioFilter",
37
+ "CheckboxFilter",
38
+ "ChoicesCheckboxFilter",
39
+ "ChoicesRadioFilter",
40
+ "MultipleRelatedCheckboxFilter",
41
+ "RadioFilter",
26
42
  "ChoicesDropdownFilter",
27
43
  "MultipleChoicesDropdownFilter",
28
44
  "DropdownFilter",
29
45
  "RelatedDropdownFilter",
30
46
  "MultipleDropdownFilter",
31
47
  "MultipleRelatedDropdownFilter",
48
+ "RelatedCheckboxFilter",
32
49
  "FieldTextFilter",
33
50
  "TextFilter",
34
51
  "RangeDateFilter",
@@ -0,0 +1,134 @@
1
+ from collections.abc import Generator
2
+ from typing import Any
3
+
4
+ from django.contrib import admin
5
+ from django.contrib.admin.views.main import ChangeList
6
+ from django.core.validators import EMPTY_VALUES
7
+ from django.db.models import QuerySet
8
+ from django.http import HttpRequest
9
+ from django.utils.translation import gettext_lazy as _
10
+
11
+ from unfold.contrib.filters.admin.mixins import MultiValueMixin, ValueMixin
12
+ from unfold.contrib.filters.forms import CheckboxForm, HorizontalRadioForm, RadioForm
13
+
14
+
15
+ class RadioFilter(admin.SimpleListFilter):
16
+ template = "unfold/filters/filters_field.html"
17
+ form_class = RadioForm
18
+ all_option = ["", _("All")]
19
+
20
+ def choices(self, changelist: ChangeList) -> tuple[dict[str, Any], ...]:
21
+ if self.all_option:
22
+ choices = [self.all_option, *self.lookup_choices]
23
+ else:
24
+ choices = self.lookup_choices
25
+
26
+ return (
27
+ {
28
+ "form": self.form_class(
29
+ label=_(" By %(filter_title)s ") % {"filter_title": self.title},
30
+ name=self.parameter_name,
31
+ choices=choices,
32
+ data={self.parameter_name: self.value()},
33
+ ),
34
+ },
35
+ )
36
+
37
+
38
+ class CheckboxFilter(RadioFilter):
39
+ form_class = CheckboxForm
40
+ all_option = None
41
+
42
+
43
+ class ChoicesMixin:
44
+ template = "unfold/filters/filters_field.html"
45
+
46
+ def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
47
+ if self.all_option:
48
+ choices = [self.all_option, *self.field.flatchoices]
49
+ else:
50
+ choices = self.field.flatchoices
51
+
52
+ yield {
53
+ "form": self.form_class(
54
+ label=_(" By %(filter_title)s ") % {"filter_title": self.title},
55
+ name=self.lookup_kwarg,
56
+ choices=choices,
57
+ data={self.lookup_kwarg: self.value()},
58
+ ),
59
+ }
60
+
61
+
62
+ class ChoicesRadioFilter(ValueMixin, ChoicesMixin, admin.ChoicesFieldListFilter):
63
+ form_class = RadioForm
64
+ all_option = ["", _("All")]
65
+
66
+
67
+ class ChoicesCheckboxFilter(ValueMixin, ChoicesMixin, admin.ChoicesFieldListFilter):
68
+ form_class = CheckboxForm
69
+ all_option = None
70
+
71
+
72
+ class BooleanRadioFilter(ValueMixin, admin.BooleanFieldListFilter):
73
+ template = "unfold/filters/filters_field.html"
74
+ form_class = HorizontalRadioForm
75
+ all_option = ["", _("All")]
76
+
77
+ def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
78
+ choices = [
79
+ self.all_option,
80
+ *[
81
+ ("1", _("Yes")),
82
+ ("0", _("No")),
83
+ ],
84
+ ]
85
+
86
+ yield {
87
+ "form": self.form_class(
88
+ label=_(" By %(filter_title)s ") % {"filter_title": self.title},
89
+ name=self.lookup_kwarg,
90
+ choices=choices,
91
+ data={self.lookup_kwarg: self.value()},
92
+ ),
93
+ }
94
+
95
+
96
+ class RelatedCheckboxFilter(MultiValueMixin, admin.RelatedFieldListFilter):
97
+ template = "unfold/filters/filters_field.html"
98
+ form_class = CheckboxForm
99
+
100
+ def queryset(self, request: HttpRequest, queryset: QuerySet) -> QuerySet:
101
+ if self.value() not in EMPTY_VALUES:
102
+ return super().queryset(request, queryset)
103
+
104
+ return queryset
105
+
106
+ def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
107
+ yield {
108
+ "form": self.form_class(
109
+ label=_(" By %(filter_title)s ") % {"filter_title": self.title},
110
+ name=self.lookup_kwarg,
111
+ choices=self.lookup_choices,
112
+ data={self.lookup_kwarg: self.value()},
113
+ ),
114
+ }
115
+
116
+
117
+ class AllValuesCheckboxFilter(MultiValueMixin, admin.AllValuesFieldListFilter):
118
+ template = "unfold/filters/filters_field.html"
119
+ form_class = CheckboxForm
120
+
121
+ def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
122
+ choices = [[i, val] for i, val in enumerate(self.lookup_choices)]
123
+
124
+ if len(choices) == 0:
125
+ return
126
+
127
+ yield {
128
+ "form": self.form_class(
129
+ label=_(" By %(filter_title)s ") % {"filter_title": self.title},
130
+ name=self.lookup_kwarg,
131
+ choices=[[i, val] for i, val in enumerate(self.lookup_choices)],
132
+ data={self.lookup_kwarg: self.value()},
133
+ ),
134
+ }
@@ -1,14 +1,20 @@
1
1
  from django import forms
2
+ from django.contrib.admin.options import HORIZONTAL
2
3
  from django.contrib.admin.widgets import AutocompleteSelect, AutocompleteSelectMultiple
3
4
  from django.db.models import Field as ModelField
4
- from django.forms import ChoiceField, ModelMultipleChoiceField, MultipleChoiceField
5
+ from django.forms import (
6
+ ChoiceField,
7
+ ModelMultipleChoiceField,
8
+ MultipleChoiceField,
9
+ )
5
10
  from django.http import HttpRequest
6
11
  from django.utils.translation import gettext_lazy as _
7
12
 
8
13
  from unfold.admin import ModelAdmin
9
-
10
- from ...widgets import (
14
+ from unfold.widgets import (
11
15
  INPUT_CLASSES,
16
+ UnfoldAdminCheckboxSelectMultiple,
17
+ UnfoldAdminRadioSelectWidget,
12
18
  UnfoldAdminSelectMultipleWidget,
13
19
  UnfoldAdminSelectWidget,
14
20
  UnfoldAdminSplitDateTimeVerticalWidget,
@@ -71,6 +77,38 @@ class AutocompleteDropdownForm(forms.Form):
71
77
  }
72
78
 
73
79
 
80
+ class CheckboxForm(forms.Form):
81
+ field = MultipleChoiceField
82
+ widget = UnfoldAdminCheckboxSelectMultiple
83
+
84
+ def __init__(
85
+ self,
86
+ name: str,
87
+ label: str,
88
+ choices: tuple,
89
+ *args,
90
+ **kwargs,
91
+ ) -> None:
92
+ super().__init__(*args, **kwargs)
93
+
94
+ self.fields[name] = self.field(
95
+ label=label,
96
+ required=False,
97
+ choices=choices,
98
+ widget=self.widget,
99
+ )
100
+
101
+
102
+ class RadioForm(CheckboxForm):
103
+ field = ChoiceField
104
+ widget = UnfoldAdminRadioSelectWidget
105
+
106
+
107
+ class HorizontalRadioForm(RadioForm):
108
+ horizontal = True
109
+ widget = UnfoldAdminRadioSelectWidget(radio_style=HORIZONTAL)
110
+
111
+
74
112
  class DropdownForm(forms.Form):
75
113
  widget = UnfoldAdminSelectWidget(
76
114
  attrs={
@@ -4,7 +4,7 @@
4
4
  <div class="flex flex-col">
5
5
  <h3 class="font-semibold mb-2 text-font-important-light dark:text-font-important-dark">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
6
6
 
7
- <div class="flex flex-col space-y-4">
7
+ <div class="flex flex-col space-y-2">
8
8
  {% for field in choice.form %}
9
9
  <div class="flex flex-row flex-wrap group relative{% if field.errors %} errors{% endif %}">
10
10
  {{ field }}
@@ -4,7 +4,7 @@
4
4
  <div class="flex flex-col">
5
5
  <h3 class="font-semibold mb-2 text-font-important-light dark:text-font-important-dark">{% blocktrans with filter_title=title %}By {{ filter_title }}{% endblocktrans %}</h3>
6
6
 
7
- <div class="flex flex-col space-y-4">
7
+ <div class="flex flex-col space-y-2">
8
8
  {% for field in choice.form %}
9
9
  <div class="flex flex-row flex-wrap group relative{% if field.errors %} errors{% endif %}">
10
10
  {{ field }}
@@ -96,12 +96,23 @@
96
96
  .removeClass(options.emptyCssClass)
97
97
  .addClass(options.formCssClass)
98
98
  .attr("id", options.prefix + "-" + nextIndex);
99
+
99
100
  addInlineDeleteButton(row);
100
101
  row.find("*").each(function () {
101
102
  updateElementIndex(this, options.prefix, totalForms.val());
102
103
  });
104
+
103
105
  // Insert the new form when it has been fully edited.
104
- row.insertBefore($(template));
106
+ // !CHANGED from original
107
+ if ($(template).parent().is("tbody")) {
108
+ row
109
+ .wrap('<tbody class="template"></tbody>')
110
+ .parent()
111
+ .insertBefore($(template).parent());
112
+ } else {
113
+ row.insertBefore($(template));
114
+ }
115
+
105
116
  // Update number of total forms.
106
117
  $(totalForms).val(parseInt(totalForms.val(), 10) + 1);
107
118
  nextIndex += 1;
@@ -183,7 +194,13 @@
183
194
  if (prevRow.length && prevRow.hasClass("row-form-errors")) {
184
195
  prevRow.remove();
185
196
  }
186
- row.remove();
197
+
198
+ // !CHANGED from original
199
+ if (deleteButton.parent().parent().parent().parent().is("tbody")) {
200
+ row.parent().remove();
201
+ } else {
202
+ row.remove();
203
+ }
187
204
  nextIndex -= 1;
188
205
  // Pass the deleted form to the post-delete callback, if provided.
189
206
  if (options.removed) {
@@ -245,8 +262,11 @@
245
262
  }
246
263
 
247
264
  // Create the delete buttons for all unsaved inlines:
265
+ // !CHANGED from original, added parent() and used find() instead of filter()
248
266
  $this
249
- .filter(
267
+ .parent()
268
+ .parent()
269
+ .find(
250
270
  "." +
251
271
  options.formCssClass +
252
272
  ":not(.has_original):not(." +