django-unfold 0.54.0__tar.gz → 0.55.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 (275) hide show
  1. {django_unfold-0.54.0 → django_unfold-0.55.0}/PKG-INFO +24 -11
  2. {django_unfold-0.54.0 → django_unfold-0.55.0}/README.md +23 -10
  3. {django_unfold-0.54.0 → django_unfold-0.55.0}/pyproject.toml +2 -2
  4. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/choice_filters.py +71 -32
  5. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/dropdown_filters.py +15 -1
  6. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/mixins.py +25 -0
  7. django_unfold-0.55.0/src/unfold/layout.py +23 -0
  8. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/sites.py +17 -6
  9. django_unfold-0.55.0/src/unfold/static/unfold/css/styles.css +1 -0
  10. django_unfold-0.55.0/src/unfold/static/unfold/fonts/material-symbols/LICENSE +202 -0
  11. django_unfold-0.55.0/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
  12. django_unfold-0.55.0/src/unfold/static/unfold/js/alpine.js +5 -0
  13. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/select2.init.js +4 -0
  14. django_unfold-0.55.0/src/unfold/templates/unfold/components/button.html +4 -0
  15. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +1 -1
  16. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +1 -1
  17. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/display_form.html +9 -0
  18. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/errors.html +3 -0
  19. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/field.html +23 -0
  20. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/inputs.html +7 -0
  21. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/attrs.html +1 -0
  22. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/baseinput.html +9 -0
  23. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/button.html +1 -0
  24. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/buttonholder.html +3 -0
  25. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/checkbox.html +19 -0
  26. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/column.html +3 -0
  27. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/div.html +4 -0
  28. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/field_errors.html +7 -0
  29. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/fieldset.html +9 -0
  30. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/help_text.html +5 -0
  31. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/help_text_and_errors.html +3 -0
  32. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/radio_checkbox_select.html +21 -0
  33. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/row.html +3 -0
  34. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/layout/table_inline_formset.html +100 -0
  35. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/uni_form.html +11 -0
  36. django_unfold-0.55.0/src/unfold/templates/unfold_crispy/whole_uni_form.html +14 -0
  37. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templatetags/unfold.py +15 -9
  38. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/widgets.py +86 -1
  39. django_unfold-0.54.0/src/unfold/static/unfold/css/styles.css +0 -1
  40. django_unfold-0.54.0/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
  41. django_unfold-0.54.0/src/unfold/static/unfold/js/alpine.js +0 -5
  42. django_unfold-0.54.0/src/unfold/templates/unfold/components/button.html +0 -4
  43. {django_unfold-0.54.0 → django_unfold-0.55.0}/LICENSE.md +0 -0
  44. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/__init__.py +0 -0
  45. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/admin.py +0 -0
  46. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/apps.py +0 -0
  47. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/checks.py +0 -0
  48. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/components.py +0 -0
  49. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/__init__.py +0 -0
  50. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/__init__.py +0 -0
  51. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/__init__.py +0 -0
  52. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/autocomplete_filters.py +0 -0
  53. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/datetime_filters.py +0 -0
  54. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/numeric_filters.py +0 -0
  55. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/admin/text_filters.py +0 -0
  56. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/apps.py +0 -0
  57. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/forms.py +0 -0
  58. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider.min.css +0 -0
  59. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
  60. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
  61. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider.min.js +0 -0
  62. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/static/unfold/filters/js/wNumb.min.js +0 -0
  63. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +0 -0
  64. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +0 -0
  65. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
  66. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
  67. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
  68. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +0 -0
  69. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/__init__.py +0 -0
  70. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/apps.py +0 -0
  71. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix.css +0 -0
  72. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
  73. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.js +0 -0
  74. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
  75. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
  76. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
  77. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/forms/widgets.py +0 -0
  78. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/__init__.py +0 -0
  79. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/apps.py +0 -0
  80. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
  81. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
  82. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -0
  83. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -0
  84. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -0
  85. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
  86. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
  87. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/__init__.py +0 -0
  88. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/apps.py +0 -0
  89. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/forms.py +0 -0
  90. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
  91. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
  92. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
  93. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
  94. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
  95. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
  96. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -0
  97. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -0
  98. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
  99. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
  100. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
  101. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
  102. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
  103. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
  104. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/inlines/__init__.py +0 -0
  105. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/inlines/admin.py +0 -0
  106. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/inlines/apps.py +0 -0
  107. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/inlines/checks.py +0 -0
  108. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/inlines/forms.py +0 -0
  109. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
  110. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/simple_history/apps.py +0 -0
  111. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
  112. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -0
  113. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -0
  114. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
  115. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/dataclasses.py +0 -0
  116. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/decorators.py +0 -0
  117. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/enums.py +0 -0
  118. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/exceptions.py +0 -0
  119. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/fields.py +0 -0
  120. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/forms.py +0 -0
  121. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/mixins/__init__.py +0 -0
  122. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/mixins/action_model_admin.py +0 -0
  123. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/mixins/base_model_admin.py +0 -0
  124. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/overrides.py +0 -0
  125. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/paginator.py +0 -0
  126. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/sections.py +0 -0
  127. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/settings.py +0 -0
  128. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/admin/js/admin/RelatedObjectLookups.js +0 -0
  129. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/admin/js/inlines.js +0 -0
  130. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/css/simplebar.css +0 -0
  131. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
  132. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
  133. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
  134. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
  135. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
  136. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
  137. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/alpine.anchor.js +0 -0
  138. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/alpine.persist.js +0 -0
  139. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/alpine.resize.js +0 -0
  140. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/alpine.sort.js +0 -0
  141. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/app.js +0 -0
  142. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/chart.js +0 -0
  143. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/htmx.js +0 -0
  144. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/static/unfold/js/simplebar.js +0 -0
  145. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/styles.css +0 -0
  146. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/actions.html +0 -0
  147. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/app_index.html +0 -0
  148. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/app_list.html +0 -0
  149. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
  150. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/auth/user/change_password.html +0 -0
  151. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/base.html +0 -0
  152. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/base_site.html +0 -0
  153. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/change_form.html +0 -0
  154. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
  155. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/change_list.html +0 -0
  156. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
  157. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/change_list_results.html +0 -0
  158. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
  159. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/delete_confirmation.html +0 -0
  160. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -0
  161. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/edit_inline/stacked.html +0 -0
  162. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/edit_inline/tabular.html +0 -0
  163. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/filter.html +0 -0
  164. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
  165. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
  166. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/index.html +0 -0
  167. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/login.html +0 -0
  168. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
  169. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/object_history.html +0 -0
  170. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/pagination.html +0 -0
  171. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/search_form.html +0 -0
  172. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/admin/submit_line.html +0 -0
  173. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
  174. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/registration/logged_out.html +0 -0
  175. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/registration/password_change_done.html +0 -0
  176. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/registration/password_change_form.html +0 -0
  177. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/card.html +0 -0
  178. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
  179. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/chart/cohort.html +0 -0
  180. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
  181. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/container.html +0 -0
  182. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/flex.html +0 -0
  183. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/icon.html +0 -0
  184. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/navigation.html +0 -0
  185. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/progress.html +0 -0
  186. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/separator.html +0 -0
  187. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/table.html +0 -0
  188. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/text.html +0 -0
  189. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/title.html +0 -0
  190. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/components/tracker.html +0 -0
  191. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
  192. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
  193. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
  194. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/app_list.html +0 -0
  195. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
  196. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
  197. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/boolean.html +0 -0
  198. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
  199. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/change_list_actions.html +0 -0
  200. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/change_list_filter.html +0 -0
  201. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +0 -0
  202. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/delete_submit_line.html +0 -0
  203. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/display_dropdown.html +0 -0
  204. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
  205. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
  206. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_delete.html +0 -0
  207. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_error.html +0 -0
  208. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_field.html +0 -0
  209. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +0 -0
  210. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_row.html +0 -0
  211. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_title.html +0 -0
  212. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/empty_results.html +0 -0
  213. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
  214. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
  215. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -0
  216. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
  217. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/fieldset_row_checkbox.html +0 -0
  218. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/fieldset_row_field.html +0 -0
  219. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
  220. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
  221. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
  222. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
  223. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/header_back_button.html +0 -0
  224. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
  225. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
  226. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/label.html +0 -0
  227. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/language_switch.html +0 -0
  228. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/messages/debug.html +0 -0
  229. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
  230. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
  231. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
  232. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/messages/success.html +0 -0
  233. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/messages/warning.html +0 -0
  234. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
  235. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/navigation.html +0 -0
  236. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/navigation_header.html +0 -0
  237. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
  238. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/pagination_default.html +0 -0
  239. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
  240. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/pagination_infinite.html +0 -0
  241. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/search.html +0 -0
  242. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/search_results.html +0 -0
  243. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/site_branding.html +0 -0
  244. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/site_dropdown.html +0 -0
  245. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
  246. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
  247. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
  248. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/tab_action.html +0 -0
  249. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/tab_actions.html +0 -0
  250. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/tab_items.html +0 -0
  251. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/tab_list.html +0 -0
  252. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
  253. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
  254. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -0
  255. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
  256. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -0
  257. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/layouts/skeleton.html +0 -0
  258. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/templatetags/preserve_changelist_filters.html +0 -0
  259. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
  260. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
  261. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
  262. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/radio_option.html +0 -0
  263. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
  264. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
  265. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
  266. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
  267. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
  268. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
  269. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
  270. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templates/unfold/widgets/url.html +0 -0
  271. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templatetags/__init__.py +0 -0
  272. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/templatetags/unfold_list.py +0 -0
  273. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/typing.py +0 -0
  274. {django_unfold-0.54.0 → django_unfold-0.55.0}/src/unfold/utils.py +0 -0
  275. {django_unfold-0.54.0 → django_unfold-0.55.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.54.0
3
+ Version: 0.55.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  License: MIT
6
6
  Keywords: django,admin,tailwind,theme
@@ -27,6 +27,7 @@ Description-Content-Type: text/markdown
27
27
  ## Unfold Django Admin Theme
28
28
 
29
29
  [![PyPI - Version](https://img.shields.io/pypi/v/django-unfold.svg?style=for-the-badge)](https://pypi.org/project/django-unfold/)
30
+ [![Discord](https://img.shields.io/discord/1297493955231088650?style=for-the-badge&logo=discord&logoColor=%23ffffff&color=7289da)](https://discord.gg/9sQj9MEbNz)
30
31
  [![Build](https://img.shields.io/github/actions/workflow/status/unfoldadmin/django-unfold/release.yml?style=for-the-badge)](https://github.com/unfoldadmin/django-unfold/actions?query=workflow%3Arelease)
31
32
  ![Pre Commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge)
32
33
  ![Code Style - Ruff](https://img.shields.io/badge/code%20style-ruff-30173D.svg?style=for-the-badge)
@@ -43,26 +44,31 @@ Transform your Django admin into a powerful, modern administrative interface wit
43
44
 
44
45
  Need assistance with implementing Unfold or require custom Django development? Professional consulting and development services are available to help transform your Django admin interface and enhance your web applications. Whether migrating from the native Django admin to Unfold or seeking expert technical guidance, reach out to discuss your project requirements and explore development possibilities. [Get in touch](https://unfoldadmin.com/consulting?utm_medium=github&utm_source=unfold) to learn more about available services.
45
46
 
47
+ ## Unfold Studio
48
+
49
+ Unfold Studio is a theme customizer for Django admin that helps you create a branded interface. You can customize colors, upload your logo, and adjust the style without coding. The tool is currently in development, and [you can join the waitlist](https://unfoldadmin.com/studio/) to be notified when it's available.
50
+
46
51
  ## Fresh Features & Enhancements
47
52
 
48
- - **Autocomplete filters:** Enhance filter functionality with built-in autocomplete support
53
+ - **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
54
+ - **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
55
+ - **Checkbox & radio filters:** Enhanced filter options with checkbox and radio interfaces for intuitive filtering
49
56
  - **Site dropdown:** Configurable dropdown menu in the header area for managing custom navigation links
50
57
  - **Dropdown actions:** Organize action items in customizable dropdown menus
51
- - **Custom tab navigation:** Create flexible, structured tab navigation with customizable routing
52
-
53
58
 
54
59
  ## Core Features & Capabilities
55
60
 
56
61
  - **Visual Interface**: Provides a modern user interface based on the Tailwind CSS framework.
57
- - **Sidebar Navigation**: Simplifies the creation of sidebar menus with icons, collapsible sections, and more.
58
- - **Dark Mode Support**: Includes both light and dark mode themes.
59
- - **Flexible Actions**: Provides multiple ways to define actions throughout the admin interface.
60
- - **Advanced Filters**: Features custom dropdowns, autocomplete, numeric, datetime, and text field filters.
61
- - **Dashboard Tools**: Includes helpers for building custom dashboard pages.
62
- - **UI Components**: Offers reusable interface components such as cards, buttons, and charts.
63
- - **WYSIWYG Editor**: Built-in support for WYSIWYG editing through Trix.
62
+ - **Sidebar navigation**: Simplifies the creation of sidebar menus with icons, collapsible sections, and more.
63
+ - **Dark mode support**: Includes both light and dark mode themes.
64
+ - **Flexible actions**: Provides multiple ways to define actions throughout the admin interface.
65
+ - **Advanced filters**: Features custom dropdowns, autocomplete, numeric, datetime, and text field filters.
66
+ - **Dashboard tools**: Includes helpers for building custom dashboard pages.
67
+ - **UI components**: Offers reusable interface components such as cards, buttons, and charts.
68
+ - **WYSIWYG editor**: Built-in support for WYSIWYG editing through Trix.
64
69
  - **Array widget:** Built-in widget for `django.contrib.postgres.fields.ArrayField`
65
70
  - **Inline tabs:** Group inlines into tab navigation in the change form
71
+ - **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
66
72
  - **Model tabs:** Allow defining custom tab navigation for models
67
73
  - **Fieldset tabs:** Merge multiple fieldsets into tabs in the change form
68
74
  - **Sortable inlines:** Allow sorting inlines by dragging and dropping
@@ -73,9 +79,16 @@ Need assistance with implementing Unfold or require custom Django development? P
73
79
  - **Font colors:** Adjust font colors for better readability
74
80
  - **Changeform modes:** Display fields in compressed mode in the change form
75
81
  - **Language switcher:** Allow changing language directly from the admin area
82
+ - **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
76
83
  - **Parallel admin:** Supports [running the default admin](https://unfoldadmin.com/blog/migrating-django-admin-unfold/?utm_medium=github&utm_source=unfold) alongside Unfold.
77
84
  - **Third-party packages:** Provides default support for multiple popular applications.
78
85
  - **Configuration:** Allows basic options to be changed in `settings.py`.
79
86
  - **Dependencies:** Built entirely on `django.contrib.admin`.
80
87
  - **VS Code:** Project configuration and development container included.
81
88
 
89
+ ## Credits
90
+
91
+ - Icons: [Material Symbols](https://github.com/google/material-design-icons)
92
+ - Font: [Inter](https://github.com/rsms/inter)
93
+ - Charts: [Chart.js](https://github.com/chartjs/Chart.js)
94
+
@@ -3,6 +3,7 @@
3
3
  ## Unfold Django Admin Theme
4
4
 
5
5
  [![PyPI - Version](https://img.shields.io/pypi/v/django-unfold.svg?style=for-the-badge)](https://pypi.org/project/django-unfold/)
6
+ [![Discord](https://img.shields.io/discord/1297493955231088650?style=for-the-badge&logo=discord&logoColor=%23ffffff&color=7289da)](https://discord.gg/9sQj9MEbNz)
6
7
  [![Build](https://img.shields.io/github/actions/workflow/status/unfoldadmin/django-unfold/release.yml?style=for-the-badge)](https://github.com/unfoldadmin/django-unfold/actions?query=workflow%3Arelease)
7
8
  ![Pre Commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge)
8
9
  ![Code Style - Ruff](https://img.shields.io/badge/code%20style-ruff-30173D.svg?style=for-the-badge)
@@ -19,26 +20,31 @@ Transform your Django admin into a powerful, modern administrative interface wit
19
20
 
20
21
  Need assistance with implementing Unfold or require custom Django development? Professional consulting and development services are available to help transform your Django admin interface and enhance your web applications. Whether migrating from the native Django admin to Unfold or seeking expert technical guidance, reach out to discuss your project requirements and explore development possibilities. [Get in touch](https://unfoldadmin.com/consulting?utm_medium=github&utm_source=unfold) to learn more about available services.
21
22
 
23
+ ## Unfold Studio
24
+
25
+ Unfold Studio is a theme customizer for Django admin that helps you create a branded interface. You can customize colors, upload your logo, and adjust the style without coding. The tool is currently in development, and [you can join the waitlist](https://unfoldadmin.com/studio/) to be notified when it's available.
26
+
22
27
  ## Fresh Features & Enhancements
23
28
 
24
- - **Autocomplete filters:** Enhance filter functionality with built-in autocomplete support
29
+ - **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
30
+ - **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
31
+ - **Checkbox & radio filters:** Enhanced filter options with checkbox and radio interfaces for intuitive filtering
25
32
  - **Site dropdown:** Configurable dropdown menu in the header area for managing custom navigation links
26
33
  - **Dropdown actions:** Organize action items in customizable dropdown menus
27
- - **Custom tab navigation:** Create flexible, structured tab navigation with customizable routing
28
-
29
34
 
30
35
  ## Core Features & Capabilities
31
36
 
32
37
  - **Visual Interface**: Provides a modern user interface based on the Tailwind CSS framework.
33
- - **Sidebar Navigation**: Simplifies the creation of sidebar menus with icons, collapsible sections, and more.
34
- - **Dark Mode Support**: Includes both light and dark mode themes.
35
- - **Flexible Actions**: Provides multiple ways to define actions throughout the admin interface.
36
- - **Advanced Filters**: Features custom dropdowns, autocomplete, numeric, datetime, and text field filters.
37
- - **Dashboard Tools**: Includes helpers for building custom dashboard pages.
38
- - **UI Components**: Offers reusable interface components such as cards, buttons, and charts.
39
- - **WYSIWYG Editor**: Built-in support for WYSIWYG editing through Trix.
38
+ - **Sidebar navigation**: Simplifies the creation of sidebar menus with icons, collapsible sections, and more.
39
+ - **Dark mode support**: Includes both light and dark mode themes.
40
+ - **Flexible actions**: Provides multiple ways to define actions throughout the admin interface.
41
+ - **Advanced filters**: Features custom dropdowns, autocomplete, numeric, datetime, and text field filters.
42
+ - **Dashboard tools**: Includes helpers for building custom dashboard pages.
43
+ - **UI components**: Offers reusable interface components such as cards, buttons, and charts.
44
+ - **WYSIWYG editor**: Built-in support for WYSIWYG editing through Trix.
40
45
  - **Array widget:** Built-in widget for `django.contrib.postgres.fields.ArrayField`
41
46
  - **Inline tabs:** Group inlines into tab navigation in the change form
47
+ - **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
42
48
  - **Model tabs:** Allow defining custom tab navigation for models
43
49
  - **Fieldset tabs:** Merge multiple fieldsets into tabs in the change form
44
50
  - **Sortable inlines:** Allow sorting inlines by dragging and dropping
@@ -49,8 +55,15 @@ Need assistance with implementing Unfold or require custom Django development? P
49
55
  - **Font colors:** Adjust font colors for better readability
50
56
  - **Changeform modes:** Display fields in compressed mode in the change form
51
57
  - **Language switcher:** Allow changing language directly from the admin area
58
+ - **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
52
59
  - **Parallel admin:** Supports [running the default admin](https://unfoldadmin.com/blog/migrating-django-admin-unfold/?utm_medium=github&utm_source=unfold) alongside Unfold.
53
60
  - **Third-party packages:** Provides default support for multiple popular applications.
54
61
  - **Configuration:** Allows basic options to be changed in `settings.py`.
55
62
  - **Dependencies:** Built entirely on `django.contrib.admin`.
56
63
  - **VS Code:** Project configuration and development container included.
64
+
65
+ ## Credits
66
+
67
+ - Icons: [Material Symbols](https://github.com/google/material-design-icons)
68
+ - Font: [Inter](https://github.com/rsms/inter)
69
+ - Charts: [Chart.js](https://github.com/chartjs/Chart.js)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-unfold"
3
- version = "0.54.0"
3
+ version = "0.55.0"
4
4
  description = "Modern Django admin theme for seamless interface development"
5
5
  license = "MIT"
6
6
  readme = "README.md"
@@ -90,7 +90,7 @@ legacy_tox_ini = """
90
90
  [tox]
91
91
  isolated_build = true
92
92
  envlist =
93
- python{39,310,311,312,313}-django{42,50,51}
93
+ python{39,310,311,312,313}-django{42,50,51,52}
94
94
 
95
95
  [testenv]
96
96
  skip_install = true
@@ -8,7 +8,11 @@ from django.db.models import QuerySet
8
8
  from django.http import HttpRequest
9
9
  from django.utils.translation import gettext_lazy as _
10
10
 
11
- from unfold.contrib.filters.admin.mixins import MultiValueMixin, ValueMixin
11
+ from unfold.contrib.filters.admin.mixins import (
12
+ ChoicesMixin,
13
+ MultiValueMixin,
14
+ ValueMixin,
15
+ )
12
16
  from unfold.contrib.filters.forms import CheckboxForm, HorizontalRadioForm, RadioForm
13
17
 
14
18
 
@@ -18,10 +22,23 @@ class RadioFilter(admin.SimpleListFilter):
18
22
  all_option = ["", _("All")]
19
23
 
20
24
  def choices(self, changelist: ChangeList) -> tuple[dict[str, Any], ...]:
25
+ add_facets = changelist.add_facets
26
+ facet_counts = self.get_facet_queryset(changelist) if add_facets else None
27
+ choices = []
28
+
21
29
  if self.all_option:
22
- choices = [self.all_option, *self.lookup_choices]
30
+ choices = [self.all_option]
31
+
32
+ if add_facets:
33
+ for i, (lookup, title) in enumerate(self.lookup_choices):
34
+ if (count := facet_counts.get(f"{i}__c", -1)) != -1:
35
+ title = f"{title} ({count})"
36
+ else:
37
+ title = f"{title} (-)"
38
+
39
+ choices.append((lookup, title))
23
40
  else:
24
- choices = self.lookup_choices
41
+ choices.extend(self.lookup_choices)
25
42
 
26
43
  return (
27
44
  {
@@ -39,24 +56,8 @@ class CheckboxFilter(RadioFilter):
39
56
  form_class = CheckboxForm
40
57
  all_option = None
41
58
 
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
- }
59
+ def value(self) -> list[Any]:
60
+ return self.request.GET.getlist(self.parameter_name)
60
61
 
61
62
 
62
63
  class ChoicesRadioFilter(ValueMixin, ChoicesMixin, admin.ChoicesFieldListFilter):
@@ -64,7 +65,9 @@ class ChoicesRadioFilter(ValueMixin, ChoicesMixin, admin.ChoicesFieldListFilter)
64
65
  all_option = ["", _("All")]
65
66
 
66
67
 
67
- class ChoicesCheckboxFilter(ValueMixin, ChoicesMixin, admin.ChoicesFieldListFilter):
68
+ class ChoicesCheckboxFilter(
69
+ MultiValueMixin, ChoicesMixin, admin.ChoicesFieldListFilter
70
+ ):
68
71
  form_class = CheckboxForm
69
72
  all_option = None
70
73
 
@@ -75,13 +78,25 @@ class BooleanRadioFilter(ValueMixin, admin.BooleanFieldListFilter):
75
78
  all_option = ["", _("All")]
76
79
 
77
80
  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
- ]
81
+ add_facets = changelist.add_facets
82
+ facet_counts = self.get_facet_queryset(changelist) if add_facets else None
83
+
84
+ if add_facets:
85
+ choices = [
86
+ self.all_option,
87
+ *[
88
+ ("1", f"{_('Yes')} ({facet_counts['true__c']})"),
89
+ ("0", f"{_('No')} ({facet_counts['false__c']})"),
90
+ ],
91
+ ]
92
+ else:
93
+ choices = [
94
+ self.all_option,
95
+ *[
96
+ ("1", _("Yes")),
97
+ ("0", _("No")),
98
+ ],
99
+ ]
85
100
 
86
101
  yield {
87
102
  "form": self.form_class(
@@ -104,11 +119,24 @@ class RelatedCheckboxFilter(MultiValueMixin, admin.RelatedFieldListFilter):
104
119
  return queryset
105
120
 
106
121
  def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
122
+ add_facets = changelist.add_facets
123
+ facet_counts = self.get_facet_queryset(changelist) if add_facets else None
124
+
125
+ if add_facets:
126
+ choices = []
127
+
128
+ for pk_val, val in self.lookup_choices:
129
+ count = facet_counts[f"{pk_val}__c"]
130
+ choice = (pk_val, f"{val} ({count})")
131
+ choices.append(choice)
132
+ else:
133
+ choices = self.lookup_choices
134
+
107
135
  yield {
108
136
  "form": self.form_class(
109
137
  label=_(" By %(filter_title)s ") % {"filter_title": self.title},
110
138
  name=self.lookup_kwarg,
111
- choices=self.lookup_choices,
139
+ choices=choices,
112
140
  data={self.lookup_kwarg: self.value()},
113
141
  ),
114
142
  }
@@ -119,7 +147,18 @@ class AllValuesCheckboxFilter(MultiValueMixin, admin.AllValuesFieldListFilter):
119
147
  form_class = CheckboxForm
120
148
 
121
149
  def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
122
- choices = [[i, val] for i, val in enumerate(self.lookup_choices)]
150
+ add_facets = changelist.add_facets
151
+ facet_counts = self.get_facet_queryset(changelist) if add_facets else None
152
+
153
+ if add_facets:
154
+ choices = []
155
+
156
+ for i, val in enumerate(self.lookup_choices):
157
+ count = facet_counts[f"{i}__c"]
158
+ choice = (val, f"{val} ({count})")
159
+ choices.append(choice)
160
+ else:
161
+ choices = [[val, val] for _i, val in enumerate(self.lookup_choices)]
123
162
 
124
163
  if len(choices) == 0:
125
164
  return
@@ -128,7 +167,7 @@ class AllValuesCheckboxFilter(MultiValueMixin, admin.AllValuesFieldListFilter):
128
167
  "form": self.form_class(
129
168
  label=_(" By %(filter_title)s ") % {"filter_title": self.title},
130
169
  name=self.lookup_kwarg,
131
- choices=[[i, val] for i, val in enumerate(self.lookup_choices)],
170
+ choices=choices,
132
171
  data={self.lookup_kwarg: self.value()},
133
172
  ),
134
173
  }
@@ -86,11 +86,25 @@ class RelatedDropdownFilter(ValueMixin, DropdownMixin, admin.RelatedFieldListFil
86
86
  self.request = request
87
87
 
88
88
  def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
89
+ add_facets = changelist.add_facets
90
+ facet_counts = self.get_facet_queryset(changelist) if add_facets else None
91
+
92
+ if add_facets:
93
+ choices = [self.all_option]
94
+
95
+ for pk_val, val in self.lookup_choices:
96
+ if add_facets:
97
+ count = facet_counts[f"{pk_val}__c"]
98
+ choice = (pk_val, f"{val} ({count})")
99
+ choices.append(choice)
100
+ else:
101
+ choices = [self.all_option, *self.lookup_choices]
102
+
89
103
  yield {
90
104
  "form": self.form_class(
91
105
  label=_(" By %(filter_title)s ") % {"filter_title": self.title},
92
106
  name=self.lookup_kwarg,
93
- choices=[self.all_option, *self.lookup_choices],
107
+ choices=choices,
94
108
  data={self.lookup_kwarg: self.value()},
95
109
  multiple=self.multiple if hasattr(self, "multiple") else False,
96
110
  ),
@@ -51,6 +51,31 @@ class DropdownMixin:
51
51
  return queryset
52
52
 
53
53
 
54
+ class ChoicesMixin:
55
+ template = "unfold/filters/filters_field.html"
56
+
57
+ def choices(self, changelist: ChangeList) -> Generator[dict[str, Any], None, None]:
58
+ add_facets = changelist.add_facets
59
+ facet_counts = self.get_facet_queryset(changelist) if add_facets else None
60
+ choices = [self.all_option] if self.all_option else []
61
+
62
+ for i, choice in enumerate(self.field.flatchoices):
63
+ if add_facets:
64
+ count = facet_counts[f"{i}__c"]
65
+ choice = (choice[0], f"{choice[1]} ({count})")
66
+
67
+ choices.append(choice)
68
+
69
+ yield {
70
+ "form": self.form_class(
71
+ label=_(" By %(filter_title)s ") % {"filter_title": self.title},
72
+ name=self.lookup_kwarg,
73
+ choices=choices,
74
+ data={self.lookup_kwarg: self.value()},
75
+ ),
76
+ }
77
+
78
+
54
79
  class RangeNumericMixin:
55
80
  request = None
56
81
  parameter_name = None
@@ -0,0 +1,23 @@
1
+ from crispy_forms.layout import BaseInput
2
+
3
+ from unfold.widgets import BUTTON_CLASSES
4
+
5
+
6
+ class ButtonClassesMixin:
7
+ def __init__(self, *args, css_class=None, **kwargs):
8
+ classes = BUTTON_CLASSES
9
+
10
+ if css_class:
11
+ classes.append(css_class)
12
+
13
+ self.field_classes = " ".join(classes)
14
+
15
+ super().__init__(*args, **kwargs)
16
+
17
+
18
+ class Submit(ButtonClassesMixin, BaseInput):
19
+ input_type = "submit"
20
+
21
+
22
+ class Button(ButtonClassesMixin, BaseInput):
23
+ input_type = "button"
@@ -24,9 +24,16 @@ except ImportError:
24
24
  return func
25
25
 
26
26
 
27
- from .settings import get_config
28
- from .utils import hex_to_rgb
29
- from .widgets import CHECKBOX_CLASSES, INPUT_CLASSES
27
+ from unfold.settings import get_config
28
+ from unfold.utils import hex_to_rgb
29
+ from unfold.widgets import (
30
+ BUTTON_CLASSES,
31
+ CHECKBOX_CLASSES,
32
+ FILE_CLASSES,
33
+ INPUT_CLASSES,
34
+ RADIO_CLASSES,
35
+ SWITCH_CLASSES,
36
+ )
30
37
 
31
38
 
32
39
  class UnfoldAdminSite(AdminSite):
@@ -34,7 +41,7 @@ class UnfoldAdminSite(AdminSite):
34
41
  settings_name = "UNFOLD"
35
42
 
36
43
  def __init__(self, name: str = "admin") -> None:
37
- from .forms import AuthenticationForm
44
+ from unfold.forms import AuthenticationForm
38
45
 
39
46
  super().__init__(name)
40
47
 
@@ -68,8 +75,12 @@ class UnfoldAdminSite(AdminSite):
68
75
  sidebar_config = self._get_config("SIDEBAR", request)
69
76
  data = {
70
77
  "form_classes": {
71
- "text_input": INPUT_CLASSES,
72
- "checkbox": CHECKBOX_CLASSES,
78
+ "text_input": " ".join(INPUT_CLASSES),
79
+ "checkbox": " ".join(CHECKBOX_CLASSES),
80
+ "button": " ".join(BUTTON_CLASSES),
81
+ "radio": " ".join(RADIO_CLASSES),
82
+ "switch": " ".join(SWITCH_CLASSES),
83
+ "file": " ".join(FILE_CLASSES),
73
84
  },
74
85
  "site_title": self._get_config("SITE_TITLE", request) or self.site_title,
75
86
  "site_header": self._get_config("SITE_HEADER", request) or self.site_header,