django-unfold 0.62.0__tar.gz → 0.64.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 (326) hide show
  1. {django_unfold-0.62.0 → django_unfold-0.64.0}/PKG-INFO +15 -2
  2. {django_unfold-0.62.0 → django_unfold-0.64.0}/README.md +14 -1
  3. {django_unfold-0.62.0 → django_unfold-0.64.0}/pyproject.toml +1 -1
  4. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/admin.py +1 -1
  5. django_unfold-0.64.0/src/unfold/contrib/constance/apps.py +6 -0
  6. django_unfold-0.64.0/src/unfold/contrib/constance/settings.py +32 -0
  7. django_unfold-0.64.0/src/unfold/contrib/constance/templates/admin/constance/change_list.html +52 -0
  8. django_unfold-0.64.0/src/unfold/contrib/constance/templates/admin/constance/includes/results_list.html +71 -0
  9. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +1 -1
  10. django_unfold-0.64.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +13 -0
  11. django_unfold-0.64.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +31 -0
  12. django_unfold-0.64.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +32 -0
  13. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -23
  14. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -23
  15. django_unfold-0.64.0/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +23 -0
  16. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -1
  17. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/dataclasses.py +8 -0
  18. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/fields.py +1 -1
  19. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/settings.py +28 -22
  20. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/sites.py +120 -43
  21. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/admin/js/inlines.js +42 -17
  22. django_unfold-0.64.0/src/unfold/static/unfold/css/styles.css +2 -0
  23. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/app.js +147 -9
  24. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/select2.init.js +4 -0
  25. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/styles.css +33 -33
  26. django_unfold-0.64.0/src/unfold/templates/admin/app_index.html +21 -0
  27. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/auth/user/change_password.html +1 -26
  28. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/base.html +0 -16
  29. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_form.html +7 -34
  30. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_list.html +0 -19
  31. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_list_results.html +2 -2
  32. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/delete_confirmation.html +0 -21
  33. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -22
  34. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/includes/fieldset.html +1 -1
  35. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/index.html +0 -2
  36. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/login.html +1 -1
  37. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/object_history.html +0 -24
  38. django_unfold-0.64.0/src/unfold/templates/registration/logged_out.html +28 -0
  39. django_unfold-0.64.0/src/unfold/templates/registration/password_change_done.html +12 -0
  40. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/registration/password_change_form.html +0 -17
  41. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/navigation.html +2 -2
  42. django_unfold-0.64.0/src/unfold/templates/unfold/components/table.html +93 -0
  43. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/boolean.html +15 -0
  44. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/command.html +53 -0
  45. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/command_history.html +54 -0
  46. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/command_results.html +50 -0
  47. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/header_back_button.html +21 -0
  48. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/header_title.html +11 -0
  49. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/label.html +1 -1
  50. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/navigation_header.html +2 -2
  51. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/pagination_inline.html +36 -0
  52. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/search.html +48 -0
  53. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/search_results.html +2 -2
  54. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/shortcut.html +3 -0
  55. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_dropdown.html +1 -1
  56. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/submit.html +3 -0
  57. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/tab_items.html +29 -0
  58. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/tab_list.html +1 -1
  59. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/unauthenticated_header.html +2 -2
  60. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/unauthenticated_title.html +1 -1
  61. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/welcomemsg.html +29 -0
  62. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -6
  63. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/skeleton.html +4 -1
  64. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/unauthenticated.html +0 -2
  65. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +4 -4
  66. django_unfold-0.64.0/src/unfold/templatetags/__init__.py +0 -0
  67. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templatetags/unfold.py +141 -0
  68. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/utils.py +25 -10
  69. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/views.py +4 -1
  70. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/widgets.py +6 -1
  71. django_unfold-0.62.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -37
  72. django_unfold-0.62.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -57
  73. django_unfold-0.62.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -58
  74. django_unfold-0.62.0/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -55
  75. django_unfold-0.62.0/src/unfold/static/unfold/css/styles.css +0 -2
  76. django_unfold-0.62.0/src/unfold/templates/admin/app_index.html +0 -39
  77. django_unfold-0.62.0/src/unfold/templates/registration/logged_out.html +0 -23
  78. django_unfold-0.62.0/src/unfold/templates/registration/password_change_done.html +0 -29
  79. django_unfold-0.62.0/src/unfold/templates/unfold/components/table.html +0 -47
  80. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/boolean.html +0 -15
  81. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/header_back_button.html +0 -13
  82. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/pagination_inline.html +0 -28
  83. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/search.html +0 -30
  84. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/shortcut.html +0 -3
  85. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/submit.html +0 -3
  86. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/tab_items.html +0 -47
  87. django_unfold-0.62.0/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -41
  88. {django_unfold-0.62.0 → django_unfold-0.64.0}/LICENSE.md +0 -0
  89. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/__init__.py +0 -0
  90. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/apps.py +0 -0
  91. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/checks.py +0 -0
  92. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/components.py +0 -0
  93. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/__init__.py +0 -0
  94. {django_unfold-0.62.0/src/unfold/contrib/filters → django_unfold-0.64.0/src/unfold/contrib/constance}/__init__.py +0 -0
  95. {django_unfold-0.62.0/src/unfold/contrib/forms → django_unfold-0.64.0/src/unfold/contrib/filters}/__init__.py +0 -0
  96. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/__init__.py +0 -0
  97. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/autocomplete_filters.py +0 -0
  98. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/choice_filters.py +0 -0
  99. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/datetime_filters.py +0 -0
  100. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/dropdown_filters.py +0 -0
  101. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/mixins.py +0 -0
  102. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/numeric_filters.py +0 -0
  103. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/text_filters.py +0 -0
  104. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/apps.py +0 -0
  105. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/forms.py +0 -0
  106. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/LICENSE +0 -0
  107. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/nouislider.min.css +0 -0
  108. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
  109. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
  110. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/LICENSE +0 -0
  111. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/nouislider.min.js +0 -0
  112. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/LICENSE +0 -0
  113. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/wNumb.min.js +0 -0
  114. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +0 -0
  115. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +0 -0
  116. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
  117. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
  118. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
  119. {django_unfold-0.62.0/src/unfold/contrib/guardian → django_unfold-0.64.0/src/unfold/contrib/forms}/__init__.py +0 -0
  120. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/apps.py +0 -0
  121. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/LICENSE +0 -0
  122. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/trix.css +0 -0
  123. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/LICENSE +0 -0
  124. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/trix.js +0 -0
  125. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
  126. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
  127. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
  128. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
  129. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/widgets.py +0 -0
  130. {django_unfold-0.62.0/src/unfold/contrib/import_export → django_unfold-0.64.0/src/unfold/contrib/guardian}/__init__.py +0 -0
  131. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/apps.py +0 -0
  132. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
  133. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
  134. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
  135. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
  136. {django_unfold-0.62.0/src/unfold/contrib/inlines → django_unfold-0.64.0/src/unfold/contrib/import_export}/__init__.py +0 -0
  137. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/apps.py +0 -0
  138. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/forms.py +0 -0
  139. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
  140. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
  141. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
  142. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
  143. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import.html +0 -0
  144. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
  145. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
  146. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
  147. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
  148. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
  149. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
  150. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
  151. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
  152. {django_unfold-0.62.0/src/unfold/contrib/location_field → django_unfold-0.64.0/src/unfold/contrib/inlines}/__init__.py +0 -0
  153. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/admin.py +0 -0
  154. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/apps.py +0 -0
  155. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/checks.py +0 -0
  156. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/forms.py +0 -0
  157. {django_unfold-0.62.0/src/unfold/contrib/simple_history → django_unfold-0.64.0/src/unfold/contrib/location_field}/__init__.py +0 -0
  158. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/location_field/apps.py +0 -0
  159. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/location_field/templates/location_field/map_widget.html +0 -0
  160. {django_unfold-0.62.0/src/unfold/templatetags → django_unfold-0.64.0/src/unfold/contrib/simple_history}/__init__.py +0 -0
  161. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/apps.py +0 -0
  162. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
  163. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
  164. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/decorators.py +0 -0
  165. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/enums.py +0 -0
  166. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/exceptions.py +0 -0
  167. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/forms.py +0 -0
  168. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/layout.py +0 -0
  169. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/mixins/__init__.py +0 -0
  170. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/mixins/action_model_admin.py +0 -0
  171. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/mixins/base_model_admin.py +0 -0
  172. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/overrides.py +0 -0
  173. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/paginator.py +0 -0
  174. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/sections.py +0 -0
  175. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/admin/js/admin/RelatedObjectLookups.js +0 -0
  176. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/css/simplebar/LICENSE +0 -0
  177. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/css/simplebar/simplebar.css +0 -0
  178. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
  179. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
  180. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
  181. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
  182. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/LICENSE +0 -0
  183. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
  184. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/material-symbols/LICENSE +0 -0
  185. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
  186. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
  187. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/LICENSE +0 -0
  188. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.anchor.js +0 -0
  189. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.js +0 -0
  190. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.persist.js +0 -0
  191. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.resize.js +0 -0
  192. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.sort.js +0 -0
  193. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/chart/LICENSE +0 -0
  194. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/chart/chart.js +0 -0
  195. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/htmx/LICENSE +0 -0
  196. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/htmx/htmx.js +0 -0
  197. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/simplebar/LICENSE +0 -0
  198. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/simplebar/simplebar.js +0 -0
  199. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/actions.html +0 -0
  200. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/app_list.html +0 -0
  201. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
  202. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/base_site.html +0 -0
  203. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
  204. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
  205. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
  206. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/edit_inline/stacked.html +0 -0
  207. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/edit_inline/tabular.html +0 -0
  208. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/filter.html +0 -0
  209. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
  210. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
  211. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/pagination.html +0 -0
  212. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/search_form.html +0 -0
  213. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/admin/submit_line.html +0 -0
  214. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
  215. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/button.html +0 -0
  216. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/card.html +0 -0
  217. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
  218. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/chart/cohort.html +0 -0
  219. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
  220. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/container.html +0 -0
  221. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/flex.html +0 -0
  222. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/icon.html +0 -0
  223. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/progress.html +0 -0
  224. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/separator.html +0 -0
  225. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/text.html +0 -0
  226. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/title.html +0 -0
  227. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/tracker.html +0 -0
  228. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
  229. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
  230. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
  231. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/app_list.html +0 -0
  232. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
  233. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
  234. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
  235. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/change_list_actions.html +0 -0
  236. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/change_list_filter.html +0 -0
  237. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +0 -0
  238. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/delete_submit_line.html +0 -0
  239. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/display_dropdown.html +0 -0
  240. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
  241. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
  242. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_delete.html +0 -0
  243. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_error.html +0 -0
  244. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_field.html +0 -0
  245. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +0 -0
  246. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_row.html +0 -0
  247. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_title.html +0 -0
  248. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/empty_results.html +0 -0
  249. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
  250. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
  251. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -0
  252. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
  253. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldset_row_checkbox.html +0 -0
  254. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldset_row_field.html +0 -0
  255. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
  256. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
  257. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
  258. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
  259. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
  260. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
  261. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/language_form.html +0 -0
  262. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/language_switch.html +0 -0
  263. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/debug.html +0 -0
  264. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
  265. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
  266. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
  267. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/success.html +0 -0
  268. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/warning.html +0 -0
  269. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
  270. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/navigation.html +0 -0
  271. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination.html +0 -0
  272. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
  273. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_default.html +0 -0
  274. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
  275. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_infinite.html +0 -0
  276. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/popup_header.html +0 -0
  277. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_branding.html +0 -0
  278. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
  279. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
  280. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/tab_action.html +0 -0
  281. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/tab_actions.html +0 -0
  282. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
  283. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
  284. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
  285. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/templatetags/preserve_changelist_filters.html +0 -0
  286. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +0 -0
  287. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +0 -0
  288. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
  289. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
  290. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
  291. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/radio_option.html +0 -0
  292. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
  293. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/select.html +0 -0
  294. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
  295. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
  296. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
  297. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/text.html +0 -0
  298. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
  299. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
  300. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/url.html +0 -0
  301. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/display_form.html +0 -0
  302. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/errors.html +0 -0
  303. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/errors_formset.html +0 -0
  304. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/field.html +0 -0
  305. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/inputs.html +0 -0
  306. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/attrs.html +0 -0
  307. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/baseinput.html +0 -0
  308. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/button.html +0 -0
  309. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/buttonholder.html +0 -0
  310. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/checkbox.html +0 -0
  311. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/column.html +0 -0
  312. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/div.html +0 -0
  313. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/field_errors.html +0 -0
  314. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/fieldset.html +0 -0
  315. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/fieldset_subheader.html +0 -0
  316. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/help_text.html +0 -0
  317. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/help_text_and_errors.html +0 -0
  318. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/hr.html +0 -0
  319. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/radio_checkbox_select.html +0 -0
  320. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/row.html +0 -0
  321. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/table_inline_formset.html +0 -0
  322. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/uni_form.html +0 -0
  323. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/whole_uni_form.html +0 -0
  324. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/whole_uni_formset.html +0 -0
  325. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/templatetags/unfold_list.py +0 -0
  326. {django_unfold-0.62.0 → django_unfold-0.64.0}/src/unfold/typing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-unfold
3
- Version: 0.62.0
3
+ Version: 0.64.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  License: MIT
6
6
  Keywords: django,admin,tailwind,theme
@@ -59,11 +59,11 @@ Unfold Studio lets you visually customize your Django admin without writing code
59
59
 
60
60
  ## Fresh Features & Enhancements
61
61
 
62
+ - **django-constance**: Official support with a completely new design and UX improvements
62
63
  - **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
63
64
  - **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
64
65
  - **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
65
66
  - **Checkbox & radio filters:** Enhanced filter options with checkbox and radio interfaces for intuitive filtering
66
- - **Site dropdown:** Configurable dropdown menu in the header area for managing custom navigation links
67
67
 
68
68
  ## Core Features & Capabilities
69
69
 
@@ -74,6 +74,7 @@ Unfold Studio lets you visually customize your Django admin without writing code
74
74
  - **Advanced filters**: Features custom dropdowns, autocomplete, numeric, datetime, and text field filters.
75
75
  - **Dashboard tools**: Includes helpers for building custom dashboard pages.
76
76
  - **UI components**: Offers reusable interface components such as cards, buttons, and charts.
77
+ - **Crispy forms**: Custom template pack for django-crispy-forms to style forms with Unfold's design system
77
78
  - **WYSIWYG editor**: Built-in support for WYSIWYG editing through Trix.
78
79
  - **Array widget:** Built-in widget for `django.contrib.postgres.fields.ArrayField`
79
80
  - **Inline tabs:** Group inlines into tab navigation in the change form
@@ -96,8 +97,20 @@ Unfold Studio lets you visually customize your Django admin without writing code
96
97
  - **Dependencies:** Built entirely on `django.contrib.admin`.
97
98
  - **VS Code:** Project configuration and development container included.
98
99
 
100
+ ## Third-party package support
101
+
102
+ - [django-guardian](https://github.com/django-guardian/django-guardian) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-guardian/)
103
+ - [django-import-export](https://github.com/django-import-export/django-import-export) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-import-export/)
104
+ - [django-simple-history](https://github.com/jazzband/django-simple-history) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-simple-history/)
105
+ - [django-constance](https://github.com/jazzband/django-constance) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-constance/)
106
+ - [django-celery-beat](https://github.com/celery/django-celery-beat) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-celery-beat/)
107
+ - [django-modeltranslation](https://github.com/deschler/django-modeltranslation) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-modeltranslation/)
108
+ - [django-money](https://github.com/django-money/django-money) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-money/)
109
+ - [django-location-field](https://github.com/caioariede/django-location-field) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-location-field/)
110
+
99
111
  ## Credits
100
112
 
113
+ - **Tailwind**: [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss) - Licensed under the [MIT License](https://opensource.org/licenses/MIT).
101
114
  - **Icons**: [Material Symbols](https://github.com/google/material-design-icons) - Licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
102
115
  - **Font**: [Inter](https://github.com/rsms/inter) - Licensed under the [SIL Open Font License 1.1](https://scripts.sil.org/OFL).
103
116
  - **Charts**: [Chart.js](https://github.com/chartjs/Chart.js) - Licensed under the [MIT License](https://opensource.org/licenses/MIT).
@@ -35,11 +35,11 @@ Unfold Studio lets you visually customize your Django admin without writing code
35
35
 
36
36
  ## Fresh Features & Enhancements
37
37
 
38
+ - **django-constance**: Official support with a completely new design and UX improvements
38
39
  - **Paginated inlines:** Break down large record sets into pages within inlines for better admin performance
39
40
  - **Conditional fields:** Show or hide fields dynamically based on the values of other fields in the form
40
41
  - **Infinite paginator:** Efficiently handle large datasets with seamless pagination that reduces server load
41
42
  - **Checkbox & radio filters:** Enhanced filter options with checkbox and radio interfaces for intuitive filtering
42
- - **Site dropdown:** Configurable dropdown menu in the header area for managing custom navigation links
43
43
 
44
44
  ## Core Features & Capabilities
45
45
 
@@ -50,6 +50,7 @@ Unfold Studio lets you visually customize your Django admin without writing code
50
50
  - **Advanced filters**: Features custom dropdowns, autocomplete, numeric, datetime, and text field filters.
51
51
  - **Dashboard tools**: Includes helpers for building custom dashboard pages.
52
52
  - **UI components**: Offers reusable interface components such as cards, buttons, and charts.
53
+ - **Crispy forms**: Custom template pack for django-crispy-forms to style forms with Unfold's design system
53
54
  - **WYSIWYG editor**: Built-in support for WYSIWYG editing through Trix.
54
55
  - **Array widget:** Built-in widget for `django.contrib.postgres.fields.ArrayField`
55
56
  - **Inline tabs:** Group inlines into tab navigation in the change form
@@ -72,8 +73,20 @@ Unfold Studio lets you visually customize your Django admin without writing code
72
73
  - **Dependencies:** Built entirely on `django.contrib.admin`.
73
74
  - **VS Code:** Project configuration and development container included.
74
75
 
76
+ ## Third-party package support
77
+
78
+ - [django-guardian](https://github.com/django-guardian/django-guardian) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-guardian/)
79
+ - [django-import-export](https://github.com/django-import-export/django-import-export) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-import-export/)
80
+ - [django-simple-history](https://github.com/jazzband/django-simple-history) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-simple-history/)
81
+ - [django-constance](https://github.com/jazzband/django-constance) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-constance/)
82
+ - [django-celery-beat](https://github.com/celery/django-celery-beat) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-celery-beat/)
83
+ - [django-modeltranslation](https://github.com/deschler/django-modeltranslation) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-modeltranslation/)
84
+ - [django-money](https://github.com/django-money/django-money) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-money/)
85
+ - [django-location-field](https://github.com/caioariede/django-location-field) - [Integration guide](https://unfoldadmin.com/docs/integrations/django-location-field/)
86
+
75
87
  ## Credits
76
88
 
89
+ - **Tailwind**: [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss) - Licensed under the [MIT License](https://opensource.org/licenses/MIT).
77
90
  - **Icons**: [Material Symbols](https://github.com/google/material-design-icons) - Licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
78
91
  - **Font**: [Inter](https://github.com/rsms/inter) - Licensed under the [SIL Open Font License 1.1](https://scripts.sil.org/OFL).
79
92
  - **Charts**: [Chart.js](https://github.com/chartjs/Chart.js) - Licensed under the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-unfold"
3
- version = "0.62.0"
3
+ version = "0.64.0"
4
4
  description = "Modern Django admin theme for seamless interface development"
5
5
  license = "MIT"
6
6
  readme = "README.md"
@@ -129,7 +129,7 @@ class ModelAdmin(BaseModelAdminMixin, ActionModelAdminMixin, BaseModelAdmin):
129
129
 
130
130
  action_detail_urls = [
131
131
  path(
132
- f"<path:object_id>/{action.path}/",
132
+ f"<path:object_id>/{action.path}",
133
133
  wrap(action.method),
134
134
  name=action.action_name,
135
135
  )
@@ -0,0 +1,6 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class ConstanceConfig(AppConfig):
5
+ name = "unfold.contrib.constance"
6
+ label = "unfold_constance"
@@ -0,0 +1,32 @@
1
+ UNFOLD_CONSTANCE_ADDITIONAL_FIELDS = {
2
+ str: [
3
+ "django.forms.CharField",
4
+ {
5
+ "widget": "unfold.widgets.UnfoldAdminTextInputWidget",
6
+ },
7
+ ],
8
+ int: [
9
+ "django.forms.IntegerField",
10
+ {
11
+ "widget": "unfold.widgets.UnfoldAdminIntegerFieldWidget",
12
+ },
13
+ ],
14
+ bool: [
15
+ "django.forms.BooleanField",
16
+ {
17
+ "widget": "unfold.widgets.UnfoldBooleanSwitchWidget",
18
+ },
19
+ ],
20
+ "file_field": [
21
+ "django.forms.fields.FileField",
22
+ {
23
+ "widget": "unfold.widgets.UnfoldAdminFileFieldWidget",
24
+ },
25
+ ],
26
+ "image_field": [
27
+ "django.forms.fields.ImageField",
28
+ {
29
+ "widget": "unfold.widgets.UnfoldAdminImageFieldWidget",
30
+ },
31
+ ],
32
+ }
@@ -0,0 +1,52 @@
1
+ {% extends "admin/base_site.html" %}
2
+
3
+ {% load admin_list static i18n %}
4
+
5
+ {% block extrahead %}
6
+ {% url 'admin:jsi18n' as jsi18nurl %}
7
+ <script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
8
+ {{ block.super }}
9
+ {{ media.js }}
10
+ <script type="text/javascript" src="{% static 'admin/js/constance.js' %}"></script>
11
+ {% endblock %}
12
+
13
+ {% block content %}
14
+ <div id="content-main" class="constance">
15
+ <div id="changelist" class="flex flex-col gap-8 w-full">
16
+ <form id="changelist-form" action="" method="post" enctype="multipart/form-data" novalidate class="flex flex-col gap-8 w-full">
17
+ {% csrf_token %}
18
+
19
+ {% include "unfold/helpers/form_errors.html" with errors=form.non_field_errors %}
20
+
21
+ {% for field in form.hidden_fields %}
22
+ {{ field }}
23
+ {% endfor %}
24
+
25
+ {% if fieldsets %}
26
+ <div class="border border-base-200 rounded-default overflow-x-auto simplebar-horizontal-scrollbar-top dark:border-base-800" data-simplebar data-simplebar-auto-hide="false">
27
+ <table class="w-full border-collapse">
28
+ {% for fieldset in fieldsets %}
29
+ {% with config_values=fieldset.config_values %}
30
+ {% include "admin/constance/includes/results_list.html" %}
31
+ {% endwith %}
32
+ {% endfor %}
33
+
34
+ <tfoot>
35
+ <tr>
36
+ <td class="border-t border-base-200 px-3 py-2 dark:border-base-800" colspan="100%">
37
+ <div class="flex justify-end">
38
+ {% trans "Save" as title %}
39
+ {% include "unfold/helpers/submit.html" with title=title %}
40
+ </div>
41
+ </td>
42
+ </tr>
43
+ </tfoot>
44
+ </table>
45
+ </div>
46
+ {% else %}
47
+ {% include "admin/constance/includes/results_list.html" %}
48
+ {% endif %}
49
+ </form>
50
+ </div>
51
+ </div>
52
+ {% endblock %}
@@ -0,0 +1,71 @@
1
+ {% load admin_list static i18n %}
2
+
3
+ <tbody {% if fieldset.collapse %} x-data="{ rowsOpen: false }" {% endif %}>
4
+ <tr {% if fieldset.collapse %} x-on:click="rowsOpen = !rowsOpen" {% endif %} class="{% if fieldset.collapse %}cursor-pointer{% endif %}">
5
+ <th class="bg-base-50 border-t border-base-200 font-semibold px-3 py-2 text-left text-font-important-light dark:text-font-important-dark dark:border-base-800 dark:bg-white/[.04] {% if forloop.first %}border-t-0{% endif %}" colspan="100%">
6
+ {{ fieldset.title }}
7
+
8
+ {% if fieldset.collapse %}
9
+ <span class="material-symbols-outlined float-right select-none transition-all" title="{% trans "Collapse" %}" x-bind:class="rowsOpen ? 'rotate-180' : ''">
10
+ expand_more
11
+ </span>
12
+ {% endif %}
13
+ </th>
14
+ </tr>
15
+
16
+ <tr class="border-t border-base-200 dark:border-base-800 *:font-semibold *:px-3 *:py-2 *:text-left *:text-font-important-light dark:*:text-font-important-dark" {% if fieldset.collapse %}x-show="rowsOpen"{% endif %}>
17
+ <th>{% trans "Name" %}</th>
18
+ <th>{% trans "Value" %}</th>
19
+ <th>{% trans "Default" %}</th>
20
+ <th>{% trans "Code" %}</th>
21
+ <th>{% trans "Modified" %}</th>
22
+ <th></th>
23
+ </tr>
24
+
25
+ {% for item in config_values %}
26
+ <tr class="border-t border-base-200 h-[55px] *:px-3 *:py-2 *:align-middle dark:border-base-800" {% if fieldset.collapse %}x-show="rowsOpen"{% endif %}>
27
+ <th class="font-normal text-left">
28
+ {{ item.help_text|linebreaksbr }}
29
+ </th>
30
+
31
+ <td class="{% if item.form_field.errors %}group errors{% endif %}">
32
+ {{ item.form_field }}
33
+
34
+ {% include "unfold/helpers/form_errors.html" with errors=item.form_field.errors %}
35
+ </td>
36
+
37
+ <td>
38
+ {% if item.default %}
39
+ {% include "unfold/helpers/label.html" with text=item.default %}
40
+ {% else %}
41
+ -
42
+ {% endif %}
43
+ </td>
44
+
45
+ <td>
46
+ <a class="item-name item-anchor" href="#{{ item.name|slugify }}" tabindex="-1" id="{{ item.name|slugify }}" title="Link to this setting">
47
+ {% include "unfold/helpers/label.html" with text=item.name type="info" %}
48
+ </a>
49
+ </td>
50
+
51
+ <td>
52
+ {% include "unfold/helpers/boolean.html" with value=item.modified %}
53
+ </td>
54
+
55
+ <td class="w-px">
56
+ {% if not item.is_file %}
57
+ <a href="#"
58
+ tabindex="-1"
59
+ class="flex items-center gap-1 reset-link whitespace-nowrap"
60
+ data-default="{% spaceless %}{% if item.is_checkbox %}{% if item.raw_default %} true {% else %} false {% endif %}{% elif item.is_date %}{{ item.raw_default|date:"U" }}{% elif item.is_datetime %}{{ item.raw_default|date:"U" }}{% else %}{{ item.default }}{% endif %}{% endspaceless %}"
61
+ data-field-type="{% spaceless %}{% if item.is_checkbox %}checkbox{% elif item.is_datetime %}datetime{% elif item.is_date %}date{% endif %}{% endspaceless %}"
62
+ data-field-id="{{ item.form_field.auto_id }}">
63
+ <span class="material-symbols-outlined text-base-400 hover:text-base-700 dark:border-base-700 dark:text-base-500 dark:hover:text-base-200" title="{% trans "Reset to default" %}">
64
+ refresh
65
+ </span>
66
+ </a>
67
+ {% endif %}
68
+ </td>
69
+ </tr>
70
+ {% endfor %}
71
+ </tbody>
@@ -26,7 +26,7 @@
26
26
  </div>
27
27
  {% else %}
28
28
  <div class="admin-numeric-filter-slider-error dark:text-font-default-dark">
29
- <p>
29
+ <p class="border border-base-300 border-dashed leading-[36px] h-[38px] rounded-default text-center dark:border-base-700">
30
30
  {% trans 'Not enough data.' %}
31
31
  </p>
32
32
  </div>
@@ -0,0 +1,13 @@
1
+ {% extends "admin/change_form.html" %}
2
+
3
+ {% load admin_urls i18n guardian_tags %}
4
+
5
+ {% block content %}
6
+ {% include "unfold/guardian/user_form.html" %}
7
+
8
+ <hr class="border-base-200 my-12 dark:border-base-800"/>
9
+
10
+ {% include "unfold/guardian/group_form.html" %}
11
+ {% endblock %}
12
+
13
+ {% block footer %}{% endblock%}
@@ -0,0 +1,31 @@
1
+ {% extends "admin/change_form.html" %}
2
+ {% load admin_urls i18n %}
3
+
4
+ {% block extrahead %}{{ block.super }}
5
+ {{ form.media }}
6
+ {% endblock %}
7
+
8
+ {% block content %}
9
+ <div class="border border-base-200 overflow-hidden rounded-default p-3 shadow-xs dark:border-base-800">
10
+ <form method="post">
11
+ {% csrf_token %}
12
+
13
+ {% trans "Object" as title %}
14
+ {% include "unfold/helpers/field_readonly.html" with title=title value=object %}
15
+
16
+ {% trans "Group" as title %}
17
+ {% include "unfold/helpers/field_readonly.html" with title=title value=group_obj %}
18
+
19
+ {% include "unfold/helpers/field.html" with field=form.permissions %}
20
+
21
+ <div class="bg-base-50 border-t border-base-200 flex flex-row -m-3 p-3 dark:bg-white/[.02] dark:border-base-800">
22
+ <div class="ml-auto">
23
+ {% trans "Save" as title %}
24
+ {% include "unfold/helpers/submit.html" with title=title %}
25
+ </div>
26
+ </div>
27
+ </form>
28
+ </div>
29
+ {% endblock %}
30
+
31
+ {% block footer %}{% endblock%}
@@ -0,0 +1,32 @@
1
+ {% extends "admin/change_form.html" %}
2
+
3
+ {% load admin_urls i18n %}
4
+
5
+ {% block extrahead %}{{ block.super }}
6
+ {{ form.media }}
7
+ {% endblock %}
8
+
9
+ {% block content %}
10
+ <div class="border border-base-200 overflow-hidden rounded-default p-3 shadow-xs dark:border-base-800">
11
+ <form method="post">
12
+ {% csrf_token %}
13
+
14
+ {% trans "Object" as title %}
15
+ {% include "unfold/helpers/field_readonly.html" with title=title value=object %}
16
+
17
+ {% trans "User" as title %}
18
+ {% include "unfold/helpers/field_readonly.html" with title=title value=user_obj %}
19
+
20
+ {% include "unfold/helpers/field.html" with field=form.permissions %}
21
+
22
+ <div class="bg-base-50 border-t border-base-200 flex flex-row -m-3 p-3 dark:bg-white/[.02] dark:border-base-800">
23
+ <div class="ml-auto">
24
+ {% trans "Save" as title %}
25
+ {% include "unfold/helpers/submit.html" with title=title %}
26
+ </div>
27
+ </div>
28
+ </form>
29
+ </div>
30
+ {% endblock %}
31
+
32
+ {% block footer %}{% endblock%}
@@ -9,29 +9,6 @@
9
9
  {{ form.media }}
10
10
  {% endblock %}
11
11
 
12
- {% block breadcrumbs %}
13
- <div class="px-4">
14
- <div class="container mb-6 mx-auto -my-3 lg:mb-12">
15
- <ul class="flex flex-wrap">
16
- {% url 'admin:index' as link %}
17
- {% trans 'Home' as name %}
18
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=name %}
19
-
20
- {% url 'admin:app_list' app_label=opts.app_label as link %}
21
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=opts.app_config.verbose_name %}
22
-
23
- {% url opts|admin_urlname:'changelist' as link %}
24
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=opts.verbose_name_plural|capfirst %}
25
-
26
- {% include 'unfold/helpers/breadcrumb_item.html' with link='' name=cl.opts.verbose_name_plural|capfirst %}
27
-
28
- {% trans 'Export' as name %}
29
- {% include 'unfold/helpers/breadcrumb_item.html' with link='' name=name %}
30
- </ul>
31
- </div>
32
- </div>
33
- {% endblock %}
34
-
35
12
  {% block content %}
36
13
  <form action="{{ export_url }}" method="POST">
37
14
  {% csrf_token %}
@@ -20,29 +20,6 @@
20
20
  {% endif %}
21
21
  {% endblock %}
22
22
 
23
- {% block breadcrumbs %}
24
- <div class="px-4">
25
- <div class="container mb-6 mx-auto -my-3 lg:mb-12">
26
- <ul class="flex flex-wrap">
27
- {% url 'admin:index' as link %}
28
- {% trans 'Home' as name %}
29
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=name %}
30
-
31
- {% url 'admin:app_list' app_label=opts.app_label as link %}
32
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=opts.app_config.verbose_name %}
33
-
34
- {% url opts|admin_urlname:'changelist' as link %}
35
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=opts.verbose_name_plural|capfirst %}
36
-
37
- {% include 'unfold/helpers/breadcrumb_item.html' with link='' name=cl.opts.verbose_name_plural|capfirst %}
38
-
39
- {% trans 'Import' as name %}
40
- {% include 'unfold/helpers/breadcrumb_item.html' with link='' name=name %}
41
- </ul>
42
- </div>
43
- </div>
44
- {% endblock %}
45
-
46
23
  {% block content %}
47
24
  {% if confirm_form %}
48
25
  {% include "admin/import_export/import_confirm.html" %}
@@ -0,0 +1,23 @@
1
+ {% extends "admin/change_form.html" %}
2
+
3
+ {% load i18n %}
4
+
5
+ {% block submit_buttons_top %}
6
+ {% include "simple_history/submit_line.html" %}
7
+ {% endblock %}
8
+
9
+ {% block submit_buttons_bottom %}
10
+ {% include "simple_history/submit_line.html" %}
11
+ {% endblock %}
12
+
13
+ {% block form_top %}
14
+ <p class="px-3 py-3 rounded-default text-sm last:mb-8 bg-blue-50 mb-8 text-blue-500 dark:bg-blue-500/20">
15
+ {% if not revert_disabled %}
16
+ {% blocktrans %}Press the 'Revert' button below to revert to this version of the object.{% endblocktrans %}
17
+ {% endif %}
18
+
19
+ {% if change_history %}
20
+ {% blocktrans %}Press the 'Change History' button below to edit the history.{% endblocktrans %}
21
+ {% endif %}
22
+ </p>
23
+ {% endblock %}
@@ -1,5 +1,4 @@
1
1
  {% load i18n %}
2
- {% load url from simple_history_compat %}
3
2
  {% load admin_urls %}
4
3
  {% load getattribute from getattributes %}
5
4
 
@@ -18,6 +18,14 @@ class UnfoldAction:
18
18
  variant: Optional[ActionVariant] = ActionVariant.DEFAULT
19
19
 
20
20
 
21
+ @dataclass
22
+ class SearchResult:
23
+ title: str
24
+ description: str
25
+ link: str
26
+ icon: Optional[str]
27
+
28
+
21
29
  @dataclass
22
30
  class Favicon:
23
31
  href: Union[str, Callable]
@@ -139,7 +139,7 @@ class UnfoldAdminReadonlyField(helpers.AdminReadonlyField):
139
139
  result_repr = display_for_field(value, f, self.empty_value_display)
140
140
  return conditional_escape(result_repr)
141
141
  elif isinstance(f, models.URLField):
142
- return format_html(
142
+ return value and format_html(
143
143
  '<a href="{}" class="text-primary-600 dark:text-primary-500">{}</a>',
144
144
  value,
145
145
  value,
@@ -18,30 +18,30 @@ CONFIG_DEFAULTS = {
18
18
  "SHOW_BACK_BUTTON": False,
19
19
  "COLORS": {
20
20
  "base": {
21
- "50": "249, 250, 251",
22
- "100": "243, 244, 246",
23
- "200": "229, 231, 235",
24
- "300": "209, 213, 219",
25
- "400": "156, 163, 175",
26
- "500": "107, 114, 128",
27
- "600": "75, 85, 99",
28
- "700": "55, 65, 81",
29
- "800": "31, 41, 55",
30
- "900": "17, 24, 39",
31
- "950": "3, 7, 18",
21
+ "50": "oklch(98.5% .002 247.839)",
22
+ "100": "oklch(96.7% .003 264.542)",
23
+ "200": "oklch(92.8% .006 264.531)",
24
+ "300": "oklch(87.2% .01 258.338)",
25
+ "400": "oklch(70.7% .022 261.325)",
26
+ "500": "oklch(55.1% .027 264.364)",
27
+ "600": "oklch(44.6% .03 256.802)",
28
+ "700": "oklch(37.3% .034 259.733)",
29
+ "800": "oklch(27.8% .033 256.848)",
30
+ "900": "oklch(21% .034 264.665)",
31
+ "950": "oklch(13% .028 261.692)",
32
32
  },
33
33
  "primary": {
34
- "50": "250, 245, 255",
35
- "100": "243, 232, 255",
36
- "200": "233, 213, 255",
37
- "300": "216, 180, 254",
38
- "400": "192, 132, 252",
39
- "500": "168, 85, 247",
40
- "600": "147, 51, 234",
41
- "700": "126, 34, 206",
42
- "800": "107, 33, 168",
43
- "900": "88, 28, 135",
44
- "950": "59, 7, 100",
34
+ "50": "oklch(97.7% .014 308.299)",
35
+ "100": "oklch(94.6% .033 307.174)",
36
+ "200": "oklch(90.2% .063 306.703)",
37
+ "300": "oklch(82.7% .119 306.383)",
38
+ "400": "oklch(71.4% .203 305.504)",
39
+ "500": "oklch(62.7% .265 303.9)",
40
+ "600": "oklch(55.8% .288 302.321)",
41
+ "700": "oklch(49.6% .265 301.924)",
42
+ "800": "oklch(43.8% .218 303.724)",
43
+ "900": "oklch(38.1% .176 304.987)",
44
+ "950": "oklch(29.1% .149 302.717)",
45
45
  },
46
46
  "font": {
47
47
  "subtle-light": "var(--color-base-500)", # text-base-500
@@ -64,8 +64,14 @@ CONFIG_DEFAULTS = {
64
64
  "action": None,
65
65
  "navigation": [],
66
66
  },
67
+ "COMMAND": {
68
+ "search_models": False, # Enable search in the models
69
+ "show_history": False, # Enable history in the command search
70
+ "search_callback": None, # Inject a custom callback to the search form
71
+ },
67
72
  "SIDEBAR": {
68
73
  "show_search": False,
74
+ "command_search": False,
69
75
  "show_all_applications": False,
70
76
  "navigation": [],
71
77
  },