django-unfold 0.63.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 (323) hide show
  1. {django_unfold-0.63.0 → django_unfold-0.64.0}/PKG-INFO +1 -1
  2. {django_unfold-0.63.0 → django_unfold-0.64.0}/pyproject.toml +1 -1
  3. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/admin.py +1 -1
  4. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/constance/templates/admin/constance/change_list.html +0 -18
  5. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_slider.html +1 -1
  6. django_unfold-0.64.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +13 -0
  7. django_unfold-0.64.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +31 -0
  8. django_unfold-0.64.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +32 -0
  9. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/export.html +0 -23
  10. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import.html +0 -23
  11. django_unfold-0.64.0/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +23 -0
  12. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history_list.html +0 -1
  13. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/dataclasses.py +8 -0
  14. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/settings.py +28 -22
  15. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/sites.py +120 -43
  16. django_unfold-0.64.0/src/unfold/static/unfold/css/styles.css +2 -0
  17. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/app.js +147 -9
  18. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/styles.css +32 -32
  19. django_unfold-0.64.0/src/unfold/templates/admin/app_index.html +21 -0
  20. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/auth/user/change_password.html +1 -26
  21. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/base.html +0 -16
  22. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_form.html +0 -33
  23. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_list.html +0 -19
  24. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_list_results.html +2 -2
  25. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/delete_confirmation.html +0 -21
  26. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/delete_selected_confirmation.html +0 -22
  27. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/index.html +0 -2
  28. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/object_history.html +0 -24
  29. django_unfold-0.64.0/src/unfold/templates/registration/password_change_done.html +12 -0
  30. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/registration/password_change_form.html +0 -17
  31. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/navigation.html +2 -2
  32. django_unfold-0.64.0/src/unfold/templates/unfold/components/table.html +93 -0
  33. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/boolean.html +15 -0
  34. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/command.html +53 -0
  35. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/command_history.html +54 -0
  36. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/command_results.html +50 -0
  37. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/header_back_button.html +21 -0
  38. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/header_title.html +11 -0
  39. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/label.html +1 -1
  40. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/navigation_header.html +2 -2
  41. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/search.html +48 -0
  42. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/search_results.html +2 -2
  43. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/shortcut.html +3 -0
  44. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_dropdown.html +1 -1
  45. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/tab_items.html +29 -0
  46. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/tab_list.html +1 -1
  47. django_unfold-0.64.0/src/unfold/templates/unfold/helpers/welcomemsg.html +29 -0
  48. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/base_simple.html +0 -6
  49. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/skeleton.html +4 -1
  50. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/unauthenticated.html +0 -2
  51. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templatetags/unfold.py +141 -0
  52. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/utils.py +25 -10
  53. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/views.py +4 -1
  54. django_unfold-0.63.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage.html +0 -37
  55. django_unfold-0.63.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_group.html +0 -57
  56. django_unfold-0.63.0/src/unfold/contrib/guardian/templates/admin/guardian/model/obj_perms_manage_user.html +0 -58
  57. django_unfold-0.63.0/src/unfold/contrib/simple_history/templates/simple_history/object_history_form.html +0 -55
  58. django_unfold-0.63.0/src/unfold/static/unfold/css/styles.css +0 -2
  59. django_unfold-0.63.0/src/unfold/templates/admin/app_index.html +0 -39
  60. django_unfold-0.63.0/src/unfold/templates/registration/password_change_done.html +0 -29
  61. django_unfold-0.63.0/src/unfold/templates/unfold/components/table.html +0 -47
  62. django_unfold-0.63.0/src/unfold/templates/unfold/helpers/boolean.html +0 -15
  63. django_unfold-0.63.0/src/unfold/templates/unfold/helpers/header_back_button.html +0 -13
  64. django_unfold-0.63.0/src/unfold/templates/unfold/helpers/search.html +0 -30
  65. django_unfold-0.63.0/src/unfold/templates/unfold/helpers/shortcut.html +0 -3
  66. django_unfold-0.63.0/src/unfold/templates/unfold/helpers/tab_items.html +0 -47
  67. django_unfold-0.63.0/src/unfold/templates/unfold/helpers/welcomemsg.html +0 -41
  68. {django_unfold-0.63.0 → django_unfold-0.64.0}/LICENSE.md +0 -0
  69. {django_unfold-0.63.0 → django_unfold-0.64.0}/README.md +0 -0
  70. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/__init__.py +0 -0
  71. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/apps.py +0 -0
  72. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/checks.py +0 -0
  73. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/components.py +0 -0
  74. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/__init__.py +0 -0
  75. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/constance/__init__.py +0 -0
  76. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/constance/apps.py +0 -0
  77. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/constance/settings.py +0 -0
  78. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/constance/templates/admin/constance/includes/results_list.html +0 -0
  79. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/__init__.py +0 -0
  80. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/__init__.py +0 -0
  81. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/autocomplete_filters.py +0 -0
  82. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/choice_filters.py +0 -0
  83. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/datetime_filters.py +0 -0
  84. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/dropdown_filters.py +0 -0
  85. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/mixins.py +0 -0
  86. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/numeric_filters.py +0 -0
  87. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/admin/text_filters.py +0 -0
  88. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/apps.py +0 -0
  89. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/forms.py +0 -0
  90. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/LICENSE +0 -0
  91. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/css/nouislider/nouislider.min.css +0 -0
  92. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/DateTimeShortcuts.js +0 -0
  93. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/admin-numeric-filter.js +0 -0
  94. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/LICENSE +0 -0
  95. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/nouislider/nouislider.min.js +0 -0
  96. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/LICENSE +0 -0
  97. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/static/unfold/filters/js/wnumb/wNumb.min.js +0 -0
  98. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_date_range.html +0 -0
  99. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_datetime_range.html +0 -0
  100. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_field.html +0 -0
  101. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_range.html +0 -0
  102. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/filters/templates/unfold/filters/filters_numeric_single.html +0 -0
  103. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/__init__.py +0 -0
  104. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/apps.py +0 -0
  105. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/LICENSE +0 -0
  106. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/css/trix/trix.css +0 -0
  107. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/LICENSE +0 -0
  108. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix/trix.js +0 -0
  109. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/static/unfold/forms/js/trix.config.js +0 -0
  110. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/templates/unfold/forms/array.html +0 -0
  111. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/templates/unfold/forms/helpers/toolbar.html +0 -0
  112. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/templates/unfold/forms/wysiwyg.html +0 -0
  113. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/forms/widgets.py +0 -0
  114. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/__init__.py +0 -0
  115. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/apps.py +0 -0
  116. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/change_form.html +0 -0
  117. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/admin/guardian/model/field.html +0 -0
  118. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/unfold/guardian/group_form.html +0 -0
  119. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/guardian/templates/unfold/guardian/user_form.html +0 -0
  120. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/__init__.py +0 -0
  121. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/apps.py +0 -0
  122. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/forms.py +0 -0
  123. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/base.html +0 -0
  124. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_form.html +0 -0
  125. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export.html +0 -0
  126. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_export_item.html +0 -0
  127. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import.html +0 -0
  128. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_export.html +0 -0
  129. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/change_list_import_item.html +0 -0
  130. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_confirm.html +0 -0
  131. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_errors.html +0 -0
  132. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_form.html +0 -0
  133. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_preview.html +0 -0
  134. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/import_validation.html +0 -0
  135. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +0 -0
  136. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/__init__.py +0 -0
  137. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/admin.py +0 -0
  138. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/apps.py +0 -0
  139. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/checks.py +0 -0
  140. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/inlines/forms.py +0 -0
  141. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/location_field/__init__.py +0 -0
  142. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/location_field/apps.py +0 -0
  143. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/location_field/templates/location_field/map_widget.html +0 -0
  144. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/__init__.py +0 -0
  145. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/apps.py +0 -0
  146. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/templates/simple_history/object_history.html +0 -0
  147. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/contrib/simple_history/templates/simple_history/submit_line.html +0 -0
  148. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/decorators.py +0 -0
  149. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/enums.py +0 -0
  150. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/exceptions.py +0 -0
  151. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/fields.py +0 -0
  152. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/forms.py +0 -0
  153. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/layout.py +0 -0
  154. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/mixins/__init__.py +0 -0
  155. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/mixins/action_model_admin.py +0 -0
  156. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/mixins/base_model_admin.py +0 -0
  157. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/overrides.py +0 -0
  158. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/paginator.py +0 -0
  159. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/sections.py +0 -0
  160. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/admin/js/admin/RelatedObjectLookups.js +0 -0
  161. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/admin/js/inlines.js +0 -0
  162. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/css/simplebar/LICENSE +0 -0
  163. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/css/simplebar/simplebar.css +0 -0
  164. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-Bold.woff2 +0 -0
  165. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-Medium.woff2 +0 -0
  166. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-Regular.woff2 +0 -0
  167. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/Inter-SemiBold.woff2 +0 -0
  168. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/LICENSE +0 -0
  169. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/inter/styles.css +0 -0
  170. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/material-symbols/LICENSE +0 -0
  171. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/material-symbols/Material-Symbols-Outlined.woff2 +0 -0
  172. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/fonts/material-symbols/styles.css +0 -0
  173. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/LICENSE +0 -0
  174. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.anchor.js +0 -0
  175. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.js +0 -0
  176. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.persist.js +0 -0
  177. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.resize.js +0 -0
  178. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/alpine/alpine.sort.js +0 -0
  179. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/chart/LICENSE +0 -0
  180. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/chart/chart.js +0 -0
  181. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/htmx/LICENSE +0 -0
  182. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/htmx/htmx.js +0 -0
  183. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/select2.init.js +0 -0
  184. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/simplebar/LICENSE +0 -0
  185. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/static/unfold/js/simplebar/simplebar.js +0 -0
  186. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/actions.html +0 -0
  187. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/app_list.html +0 -0
  188. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/auth/user/add_form.html +0 -0
  189. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/base_site.html +0 -0
  190. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_form_object_tools.html +0 -0
  191. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/change_list_object_tools.html +0 -0
  192. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/date_hierarchy.html +0 -0
  193. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/edit_inline/stacked.html +0 -0
  194. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/edit_inline/tabular.html +0 -0
  195. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/filter.html +0 -0
  196. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/includes/fieldset.html +0 -0
  197. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/includes/object_delete_summary.html +0 -0
  198. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/login.html +0 -0
  199. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/nav_sidebar.html +0 -0
  200. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/pagination.html +0 -0
  201. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/search_form.html +0 -0
  202. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/admin/submit_line.html +0 -0
  203. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/auth/widgets/read_only_password_hash.html +0 -0
  204. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/registration/logged_out.html +0 -0
  205. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/button.html +0 -0
  206. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/card.html +0 -0
  207. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/chart/bar.html +0 -0
  208. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/chart/cohort.html +0 -0
  209. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/chart/line.html +0 -0
  210. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/container.html +0 -0
  211. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/flex.html +0 -0
  212. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/icon.html +0 -0
  213. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/progress.html +0 -0
  214. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/separator.html +0 -0
  215. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/text.html +0 -0
  216. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/title.html +0 -0
  217. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/components/tracker.html +0 -0
  218. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/account_links.html +0 -0
  219. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/actions_row.html +0 -0
  220. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/add_link.html +0 -0
  221. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/app_list.html +0 -0
  222. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/app_list_default.html +0 -0
  223. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/attrs.html +0 -0
  224. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/breadcrumb_item.html +0 -0
  225. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/change_list_actions.html +0 -0
  226. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/change_list_filter.html +0 -0
  227. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/change_list_filter_actions.html +0 -0
  228. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/delete_submit_line.html +0 -0
  229. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/display_dropdown.html +0 -0
  230. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/display_header.html +0 -0
  231. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/display_label.html +0 -0
  232. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_delete.html +0 -0
  233. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_error.html +0 -0
  234. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_field.html +0 -0
  235. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_heading.html +0 -0
  236. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_row.html +0 -0
  237. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/edit_inline/tabular_title.html +0 -0
  238. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/empty_results.html +0 -0
  239. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/field.html +0 -0
  240. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/field_readonly.html +0 -0
  241. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/field_readonly_value.html +0 -0
  242. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldset_row.html +0 -0
  243. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldset_row_checkbox.html +0 -0
  244. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldset_row_field.html +0 -0
  245. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/fieldsets_tabs.html +0 -0
  246. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/form_errors.html +0 -0
  247. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/form_label.html +0 -0
  248. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/header.html +0 -0
  249. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/help_text.html +0 -0
  250. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/history.html +0 -0
  251. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/language_form.html +0 -0
  252. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/language_switch.html +0 -0
  253. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/debug.html +0 -0
  254. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/error.html +0 -0
  255. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/errornote.html +0 -0
  256. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/info.html +0 -0
  257. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/success.html +0 -0
  258. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages/warning.html +0 -0
  259. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/messages.html +0 -0
  260. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/navigation.html +0 -0
  261. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination.html +0 -0
  262. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_current_item.html +0 -0
  263. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_default.html +0 -0
  264. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_ellipsis.html +0 -0
  265. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_infinite.html +0 -0
  266. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/pagination_inline.html +0 -0
  267. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/popup_header.html +0 -0
  268. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_branding.html +0 -0
  269. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_icon.html +0 -0
  270. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/site_logo.html +0 -0
  271. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/submit.html +0 -0
  272. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/tab_action.html +0 -0
  273. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/tab_actions.html +0 -0
  274. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/theme_switch.html +0 -0
  275. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/unauthenticated_header.html +0 -0
  276. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/unauthenticated_title.html +0 -0
  277. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/helpers/userlinks.html +0 -0
  278. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/layouts/base.html +0 -0
  279. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/templatetags/preserve_changelist_filters.html +0 -0
  280. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/clearable_file_input.html +0 -0
  281. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/clearable_file_input_small.html +0 -0
  282. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/date.html +0 -0
  283. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/foreign_key_raw_id.html +0 -0
  284. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/radio.html +0 -0
  285. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/radio_option.html +0 -0
  286. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/range.html +0 -0
  287. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/related_widget_wrapper.html +0 -0
  288. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/select.html +0 -0
  289. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/split_datetime.html +0 -0
  290. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/split_datetime_vertical.html +0 -0
  291. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/split_money.html +0 -0
  292. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/text.html +0 -0
  293. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/textarea.html +0 -0
  294. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/time.html +0 -0
  295. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold/widgets/url.html +0 -0
  296. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/display_form.html +0 -0
  297. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/errors.html +0 -0
  298. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/errors_formset.html +0 -0
  299. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/field.html +0 -0
  300. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/inputs.html +0 -0
  301. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/attrs.html +0 -0
  302. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/baseinput.html +0 -0
  303. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/button.html +0 -0
  304. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/buttonholder.html +0 -0
  305. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/checkbox.html +0 -0
  306. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/column.html +0 -0
  307. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/div.html +0 -0
  308. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/field_errors.html +0 -0
  309. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/fieldset.html +0 -0
  310. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/fieldset_subheader.html +0 -0
  311. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/help_text.html +0 -0
  312. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/help_text_and_errors.html +0 -0
  313. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/hr.html +0 -0
  314. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/radio_checkbox_select.html +0 -0
  315. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/row.html +0 -0
  316. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/layout/table_inline_formset.html +0 -0
  317. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/uni_form.html +0 -0
  318. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/whole_uni_form.html +0 -0
  319. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templates/unfold_crispy/whole_uni_formset.html +0 -0
  320. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templatetags/__init__.py +0 -0
  321. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/templatetags/unfold_list.py +0 -0
  322. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/typing.py +0 -0
  323. {django_unfold-0.63.0 → django_unfold-0.64.0}/src/unfold/widgets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-unfold
3
- Version: 0.63.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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-unfold"
3
- version = "0.63.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
  )
@@ -10,24 +10,6 @@
10
10
  <script type="text/javascript" src="{% static 'admin/js/constance.js' %}"></script>
11
11
  {% endblock %}
12
12
 
13
- {% block breadcrumbs %}
14
- <div class="px-4">
15
- <div class="container mb-6 mx-auto -my-3 lg:mb-12">
16
- <ul class="flex flex-wrap">
17
- {% url 'admin:index' as link %}
18
- {% trans 'Home' as name %}
19
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=name %}
20
-
21
- {% url 'admin:app_list' app_label=opts.app_label as link %}
22
- {% include 'unfold/helpers/breadcrumb_item.html' with link=link name=opts.app_config.verbose_name %}
23
-
24
- {% include 'unfold/helpers/breadcrumb_item.html' with link='' name=opts.verbose_name_plural|capfirst %}
25
- </ul>
26
- </div>
27
- </div>
28
- {% endblock %}
29
-
30
-
31
13
  {% block content %}
32
14
  <div id="content-main" class="constance">
33
15
  <div id="changelist" class="flex flex-col gap-8 w-full">
@@ -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]
@@ -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
  },
@@ -1,17 +1,20 @@
1
1
  import copy
2
+ import time
2
3
  from http import HTTPStatus
3
4
  from typing import Any, Callable, Optional, Union
4
5
  from urllib.parse import parse_qs, urlparse
5
6
 
6
7
  from django.contrib.admin import AdminSite
8
+ from django.core.cache import cache
7
9
  from django.core.validators import EMPTY_VALUES
8
10
  from django.http import HttpRequest, HttpResponse
9
11
  from django.template.response import TemplateResponse
10
12
  from django.urls import URLPattern, path, reverse, reverse_lazy
11
13
  from django.utils.functional import lazy
12
14
  from django.utils.module_loading import import_string
15
+ from django.utils.text import slugify
13
16
 
14
- from unfold.dataclasses import DropdownItem, Favicon
17
+ from unfold.dataclasses import DropdownItem, Favicon, SearchResult
15
18
 
16
19
  try:
17
20
  from django.contrib.auth.decorators import login_not_required
@@ -22,7 +25,7 @@ except ImportError:
22
25
 
23
26
 
24
27
  from unfold.settings import get_config
25
- from unfold.utils import hex_to_rgb
28
+ from unfold.utils import convert_color
26
29
  from unfold.widgets import (
27
30
  BUTTON_CLASSES,
28
31
  CHECKBOX_CLASSES,
@@ -112,6 +115,12 @@ class UnfoldAdminSite(AdminSite):
112
115
  "tab_list": self.get_tabs_list(request),
113
116
  "styles": self._get_list("STYLES", request),
114
117
  "scripts": self._get_list("SCRIPTS", request),
118
+ "command_show_history": self._get_config("COMMAND", request).get(
119
+ "show_history"
120
+ ),
121
+ "sidebar_command_search": self._get_config("SIDEBAR", request).get(
122
+ "command_search"
123
+ ),
115
124
  "sidebar_show_all_applications": self._get_value(
116
125
  sidebar_config.get("show_all_applications"), request
117
126
  ),
@@ -165,26 +174,21 @@ class UnfoldAdminSite(AdminSite):
165
174
 
166
175
  return HttpResponse(status=HTTPStatus.OK)
167
176
 
168
- def search(
169
- self, request: HttpRequest, extra_context: Optional[dict[str, Any]] = None
170
- ) -> TemplateResponse:
171
- query = request.GET.get("s").lower()
172
- app_list = super().get_app_list(request)
173
- apps = []
177
+ def _search_apps(
178
+ self, app_list: list[dict[str, Any]], search_term: str
179
+ ) -> list[SearchResult]:
174
180
  results = []
175
-
176
- if query in EMPTY_VALUES:
177
- return HttpResponse()
181
+ apps = []
178
182
 
179
183
  for app in app_list:
180
- if query in app["name"].lower():
184
+ if search_term in app["name"].lower():
181
185
  apps.append(app)
182
186
  continue
183
187
 
184
188
  models = []
185
189
 
186
190
  for model in app["models"]:
187
- if query in model["name"].lower():
191
+ if search_term in model["name"].lower():
188
192
  models.append(model)
189
193
 
190
194
  if len(models) > 0:
@@ -194,17 +198,111 @@ class UnfoldAdminSite(AdminSite):
194
198
  for app in apps:
195
199
  for model in app["models"]:
196
200
  results.append(
197
- {
198
- "app": app,
199
- "model": model,
200
- }
201
+ SearchResult(
202
+ title=str(model["name"]),
203
+ description=app["name"],
204
+ link=model["admin_url"],
205
+ icon="tag",
206
+ )
207
+ )
208
+
209
+ return results
210
+
211
+ def _search_models(
212
+ self, request: HttpRequest, app_list: list[dict[str, Any]], search_term: str
213
+ ) -> list[SearchResult]:
214
+ results = []
215
+
216
+ for app in app_list:
217
+ for model in app["models"]:
218
+ admin_instance = self._registry.get(model["model"])
219
+ search_fields = admin_instance.get_search_fields(request)
220
+
221
+ if not search_fields:
222
+ continue
223
+
224
+ pks = []
225
+
226
+ qs = admin_instance.get_queryset(request)
227
+ search_results, _has_duplicates = admin_instance.get_search_results(
228
+ request, qs, search_term
201
229
  )
202
230
 
231
+ for item in search_results:
232
+ if item.pk in pks:
233
+ continue
234
+
235
+ pks.append(item.pk)
236
+
237
+ link = reverse_lazy(
238
+ f"{self.name}:{admin_instance.model._meta.app_label}_{admin_instance.model._meta.model_name}_change",
239
+ args=(item.pk,),
240
+ )
241
+
242
+ results.append(
243
+ SearchResult(
244
+ title=str(item),
245
+ description=f"{item._meta.app_label.capitalize()} - {item._meta.verbose_name.capitalize()}",
246
+ link=link,
247
+ icon="data_object",
248
+ )
249
+ )
250
+
251
+ return results
252
+
253
+ def search(
254
+ self, request: HttpRequest, extra_context: Optional[dict[str, Any]] = None
255
+ ) -> TemplateResponse:
256
+ start_time = time.time()
257
+
258
+ CACHE_TIMEOUT = 10
259
+
260
+ search_term = request.GET.get("s")
261
+ extended_search = "extended" in request.GET
262
+ app_list = super().get_app_list(request)
263
+ template_name = "unfold/helpers/search_results.html"
264
+
265
+ if search_term in EMPTY_VALUES:
266
+ return HttpResponse()
267
+
268
+ search_term = search_term.lower()
269
+ cache_key = f"unfold_search_{request.user.pk}_{slugify(search_term)}"
270
+ cache_results = cache.get(cache_key)
271
+
272
+ if extended_search:
273
+ template_name = "unfold/helpers/command_results.html"
274
+
275
+ if cache_results:
276
+ results = cache_results
277
+ else:
278
+ results = self._search_apps(app_list, search_term)
279
+ search_models = self._get_config("COMMAND", request).get("search_models")
280
+ search_callback = self._get_config("COMMAND", request).get(
281
+ "search_callback"
282
+ )
283
+
284
+ if extended_search:
285
+ if search_callback:
286
+ results.extend(
287
+ self._get_value(search_callback, request, search_term)
288
+ )
289
+
290
+ if search_models is True:
291
+ results.extend(self._search_models(request, app_list, search_term))
292
+
293
+ cache.set(cache_key, results, timeout=CACHE_TIMEOUT)
294
+
295
+ execution_time = time.time() - start_time
296
+
203
297
  return TemplateResponse(
204
298
  request,
205
- template="unfold/helpers/search_results.html",
299
+ template=template_name,
206
300
  context={
207
301
  "results": results,
302
+ "execution_time": execution_time,
303
+ "command_show_history": self._get_config("COMMAND", request).get(
304
+ "show_history"
305
+ ),
208
306
  },
209
307
  headers={
210
308
  "HX-Trigger": "search",
@@ -260,8 +358,8 @@ class UnfoldAdminSite(AdminSite):
260
358
  # Checks if any tab item is active and then marks the sidebar link as active
261
359
  if (
262
360
  tabs
263
- and (is_active := self._get_is_tab_active(request, tabs, link))
264
- and is_active
361
+ and self._get_is_tab_active(request, tabs, link)
362
+ and "active" not in item
265
363
  ):
266
364
  item["active"] = True
267
365
 
@@ -408,7 +506,7 @@ class UnfoldAdminSite(AdminSite):
408
506
  request, tab_item.get("link_callback") or tab_item["link"]
409
507
  ):
410
508
  has_tab_link_active = True
411
- break
509
+ continue
412
510
 
413
511
  if has_primary_link and has_tab_link_active:
414
512
  return True
@@ -440,33 +538,12 @@ class UnfoldAdminSite(AdminSite):
440
538
  def _get_colors(self, key: str, *args) -> dict[str, dict[str, str]]:
441
539
  colors = self._get_config(key, *args)
442
540
 
443
- def rgb_to_values(value: str) -> str:
444
- return ", ".join(
445
- list(
446
- map(
447
- str.strip,
448
- value.removeprefix("rgb(").removesuffix(")").split(","),
449
- )
450
- )
451
- )
452
-
453
- def hex_to_values(value: str) -> str:
454
- return ", ".join(str(item) for item in hex_to_rgb(value))
455
-
456
541
  for name, weights in colors.items():
457
542
  weights = self._get_value(weights, *args)
458
543
  colors[name] = weights
459
544
 
460
545
  for weight, value in weights.items():
461
- if value[0] == "#":
462
- colors[name][weight] = hex_to_values(value)
463
- elif value.startswith("rgb"):
464
- colors[name][weight] = rgb_to_values(value)
465
- elif isinstance(value, str) and all(
466
- part.isdigit() for part in value.split()
467
- ):
468
- colors[name][weight] = ", ".join(value.split(" "))
469
- pass
546
+ colors[name][weight] = convert_color(value)
470
547
 
471
548
  return colors
472
549