django-unfold 0.42.0__py3-none-any.whl → 0.43.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. {django_unfold-0.42.0.dist-info → django_unfold-0.43.0.dist-info}/METADATA +1 -1
  2. {django_unfold-0.42.0.dist-info → django_unfold-0.43.0.dist-info}/RECORD +27 -21
  3. unfold/admin.py +2 -0
  4. unfold/components.py +47 -0
  5. unfold/contrib/import_export/templates/admin/import_export/import_validation.html +26 -21
  6. unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html +5 -3
  7. unfold/static/unfold/css/styles.css +1 -1
  8. unfold/templates/admin/change_form.html +8 -0
  9. unfold/templates/admin/nav_sidebar.html +1 -10
  10. unfold/templates/unfold/change_list_filter.html +3 -5
  11. unfold/templates/unfold/components/card.html +1 -1
  12. unfold/templates/unfold/components/chart/cohort.html +59 -0
  13. unfold/templates/unfold/components/navigation.html +1 -1
  14. unfold/templates/unfold/components/tracker.html +5 -0
  15. unfold/templates/unfold/helpers/messages/debug.html +3 -0
  16. unfold/templates/unfold/helpers/messages/error.html +5 -3
  17. unfold/templates/unfold/helpers/messages/info.html +2 -2
  18. unfold/templates/unfold/helpers/messages/success.html +3 -0
  19. unfold/templates/unfold/helpers/messages/warning.html +3 -0
  20. unfold/templates/unfold/helpers/messages.html +13 -14
  21. unfold/templates/unfold/helpers/welcomemsg.html +9 -1
  22. unfold/templates/unfold/layouts/skeleton.html +1 -1
  23. unfold/templates/unfold/widgets/clearable_file_input.html +1 -1
  24. unfold/templates/unfold/widgets/clearable_file_input_small.html +1 -1
  25. unfold/templatetags/unfold.py +26 -7
  26. {django_unfold-0.42.0.dist-info → django_unfold-0.43.0.dist-info}/LICENSE.md +0 -0
  27. {django_unfold-0.42.0.dist-info → django_unfold-0.43.0.dist-info}/WHEEL +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-unfold
3
- Version: 0.42.0
3
+ Version: 0.43.0
4
4
  Summary: Modern Django admin theme for seamless interface development
5
5
  Home-page: https://unfoldadmin.com
6
6
  License: MIT
@@ -1,7 +1,8 @@
1
1
  unfold/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- unfold/admin.py,sha256=agIUptBOFAZWqxPLkf4tMaJHd5sz9IOWRNmtXkWCw0c,19971
2
+ unfold/admin.py,sha256=mipNoMPKxrKv3dhzpWqWJgkE5U6Ve0O4EKQWBI6pvws,20060
3
3
  unfold/apps.py,sha256=SlBXPYrUd2uXn67qFbRvbXSUk3XFWrF4-5WELgDCvho,381
4
4
  unfold/checks.py,sha256=Smgji9w19hnYjJElJ_FJnnyTEAE-E-OUB6otHu7lasY,1670
5
+ unfold/components.py,sha256=OKYEpAeawhqSUWOy0VB8EZTsPRzV19oOjSrWckLLeHI,1295
5
6
  unfold/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
7
  unfold/contrib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
8
  unfold/contrib/filters/admin.py,sha256=EXg7eQSVKxobhV0l7Uk4h4zSiEfUB5sJs0qLvfugqRY,21022
@@ -51,8 +52,8 @@ unfold/contrib/import_export/templates/admin/import_export/import_confirm.html,s
51
52
  unfold/contrib/import_export/templates/admin/import_export/import_errors.html,sha256=edsP56v1xeCezliXTxPIVo8mvv8rdVwh8yz0LeP5Zjk,1430
52
53
  unfold/contrib/import_export/templates/admin/import_export/import_form.html,sha256=mMuMTAbgMbJ1IyCQPBkzmob4m5lJmZ69_QSo3GvvSiY,990
53
54
  unfold/contrib/import_export/templates/admin/import_export/import_preview.html,sha256=UZG5ep4BRbq3K9g3Yv0sNJdVRYmEi4luHi51IHNGNU8,2263
54
- unfold/contrib/import_export/templates/admin/import_export/import_validation.html,sha256=iOjwNDSQQHN6XVUZemYbsWI_wYeYEXTGc3T181Wg5NA,4635
55
- unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html,sha256=7LzgBiT73c4GHVZx3-ap_cuMz57EnIJ1ESGA5xR31mM,871
55
+ unfold/contrib/import_export/templates/admin/import_export/import_validation.html,sha256=3FKreXso0U3Jvz8LKGiKpLXAD2kqwH9xf3KHPZ3ALMs,5065
56
+ unfold/contrib/import_export/templates/admin/import_export/resource_fields_list.html,sha256=Bc6uD8aHA5YYbZgLAPpGUckFjnxn9uq19YuKKFxTj4Y,887
56
57
  unfold/contrib/inlines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
58
  unfold/contrib/inlines/admin.py,sha256=LloGe9KaY0hb9LX0jICpWi01DcdnSCXRfpAdY9VxkiY,5929
58
59
  unfold/contrib/inlines/apps.py,sha256=Z9JBnzywq-DanZbD56fG0ndBfLXbojzkjVBleqoOBSU,136
@@ -74,7 +75,7 @@ unfold/sites.py,sha256=GTClpbOENkPRallC2IrskwtgbqrbuWE5Pr5wsCoB9Us,14566
74
75
  unfold/static/admin/js/admin/RelatedObjectLookups.js,sha256=alI0-yq7YPDJJJn-yg1ce79-Cv88yQDUrfaGqFZnsaY,9048
75
76
  unfold/static/admin/js/inlines.js,sha256=-WGZO7BO07zNGAvb5ZdnR4PjqqhU29gyVMKsBn-PBUw,14577
76
77
  unfold/static/unfold/css/simplebar.css,sha256=5LLaEM11pKi6JFCOLt4XKuZxTpT9rpdq_tNlaQytFlU,4647
77
- unfold/static/unfold/css/styles.css,sha256=Vq9hqf8Rc3uU0Wdn13SxhdCfirf8X1_WH0Wc5CdMiNo,115794
78
+ unfold/static/unfold/css/styles.css,sha256=jRv4QVgYBUhJFFjOD_0ujpoQnSmIgE8p8umy1pViX7k,148327
78
79
  unfold/static/unfold/fonts/inter/Inter-Bold.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
79
80
  unfold/static/unfold/fonts/inter/Inter-Medium.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
80
81
  unfold/static/unfold/fonts/inter/Inter-Regular.woff2,sha256=O88EyjAeRPE_QEyKBKpK5wf2epUOEu8wwjj5bnhCZqE,46552
@@ -99,7 +100,7 @@ unfold/templates/admin/auth/user/add_form.html,sha256=L0ylU7BLEIoZc3nS4Rq6DA0H94
99
100
  unfold/templates/admin/auth/user/change_password.html,sha256=q7RMscF4thZisdt5CrZLugk-MWDr8DgQ-3KXDv2QlGk,2902
100
101
  unfold/templates/admin/base.html,sha256=9iTxs17eoeBhdUbnvq_fpq_gKmO9_D9XMnAuRdDESsE,2364
101
102
  unfold/templates/admin/base_site.html,sha256=FM8OOaXsQqJlYapeJvBznXCOt7poMiWrweTWcsMHzeI,365
102
- unfold/templates/admin/change_form.html,sha256=U4bsIz17mk46ylgxFG8VEfnVp3FBbbCCzE7mgzMQ9es,4990
103
+ unfold/templates/admin/change_form.html,sha256=LfeAeLYpJvNhOMJWQFeb9oSrAznlB4pnFrqTVMCIy4o,5340
103
104
  unfold/templates/admin/change_form_object_tools.html,sha256=eyeH-i2HgEM0Yi-OJA2D1VnKJyC19A_my1IDGxxoP8Y,593
104
105
  unfold/templates/admin/change_list.html,sha256=qpfVyQC6S-ypJZeYqPGBDvksw182d2fUH9KDmbTr9SI,5634
105
106
  unfold/templates/admin/change_list_object_tools.html,sha256=cmMiT2nT20Ph5yfpj9aHPr76Z-JP4aSXp0o-Rnad28s,147
@@ -114,7 +115,7 @@ unfold/templates/admin/includes/fieldset.html,sha256=eyo5icIIrihKBLT7k3FCgoVhK55
114
115
  unfold/templates/admin/includes/object_delete_summary.html,sha256=w_lPVnBrng0oqvFy6rzvr8c5bzdU8GpqvYUAvaXza0c,444
115
116
  unfold/templates/admin/index.html,sha256=pkGdKWdD3zzOvkRdELvdb15sleSpfl4eHPA14PAh7z0,684
116
117
  unfold/templates/admin/login.html,sha256=Xw50tZZxESEwz9YOcV1CSPeyyI2H1l0q4x4zBrC4dps,4170
117
- unfold/templates/admin/nav_sidebar.html,sha256=31g1dbGHe7m_8GXFrehLqWD84Nx7jEoeLhyNBZbaqRM,1163
118
+ unfold/templates/admin/nav_sidebar.html,sha256=m5xcM5k-wfZ_hbwKq9dXpjfCW-3A0ahVEXr3y64W1lQ,618
118
119
  unfold/templates/admin/object_history.html,sha256=0NvY31OEO0g8JHEYVzUUhg95nJxOto2J0I_K4sMf6wc,4825
119
120
  unfold/templates/admin/pagination.html,sha256=KrwOM6gRizfpTMP59TESQaNGcQzkga2k02opl_7BxLo,1130
120
121
  unfold/templates/admin/search_form.html,sha256=NNTJ38yABrSBOet3ivkbzciYHd_I_mGHlgRvLHSL5ig,1219
@@ -123,20 +124,22 @@ unfold/templates/auth/widgets/read_only_password_hash.html,sha256=UK36u2lYyiY_oS
123
124
  unfold/templates/registration/logged_out.html,sha256=cg4YjMbVtuMdOJD3hkkJZntv0G8gnzQYkDpZJVRNM2g,995
124
125
  unfold/templates/registration/password_change_done.html,sha256=MjwUFjMoM26GcQ4sduh5afNzt11HbOVFEVb4nZ6bdD8,1080
125
126
  unfold/templates/registration/password_change_form.html,sha256=YKIjlijh9wTFkCO-KWgNBxZdgx4RzXUWr4l2zO1ZNJA,2235
126
- unfold/templates/unfold/change_list_filter.html,sha256=ie3M5Nau5xchwkCMfrLfDX60vyM3j_3pD5SmN2sDOx0,3456
127
+ unfold/templates/unfold/change_list_filter.html,sha256=owa9BIj19AQJZ1hmdM6mkA4BMvkbDRDQUrf-pvDW-O0,3259
127
128
  unfold/templates/unfold/components/button.html,sha256=E9B5Y0ZzUrFmw50tK8Fi8-V0V6-ONbWcBMuyoxaDjSI,476
128
- unfold/templates/unfold/components/card.html,sha256=3HHpqXOYS1b9yPa-ipbsWHBJUuI4knmk2od5B9kMcIs,1087
129
+ unfold/templates/unfold/components/card.html,sha256=UlBRe4flU_GQkMyFibS50YeW8zu9VUaHMlh-xmrI61s,1118
129
130
  unfold/templates/unfold/components/chart/bar.html,sha256=nDdDCUXvFd793OpNgNPQo0vBmvYngMsQyPHVTf1vfOw,297
131
+ unfold/templates/unfold/components/chart/cohort.html,sha256=4vywJdz5_ZXlPklmOChp33lq96C1qJxtE0P-IyeVUk4,2355
130
132
  unfold/templates/unfold/components/chart/line.html,sha256=DHaZUFTlCs5cX7ioYdTzoN4ITHWNcEoNSUp7v3hlo_E,298
131
133
  unfold/templates/unfold/components/container.html,sha256=WBk1rGHnTsObi3pJCpL3dfFAUQ2abDmokU0Lee7R9CI,83
132
134
  unfold/templates/unfold/components/flex.html,sha256=_hBsQLJ6-7MfEfXNp5Wy-ykNtPMnnNg_io2IMGegn3s,134
133
135
  unfold/templates/unfold/components/icon.html,sha256=Qlhcf41FOwNVJ-nvA0RJ_Dn6JW6PUFXO6tOR3Xtf6e8,99
134
- unfold/templates/unfold/components/navigation.html,sha256=KNDfB6oT_dgbD8Fy09oRt6Txw7ERHa9iv-TPyFEo2wg,892
136
+ unfold/templates/unfold/components/navigation.html,sha256=5YFple8oIVZZcr22TOZY56_Xk5M-MvKF4U6krwMOKD0,887
135
137
  unfold/templates/unfold/components/progress.html,sha256=BnH2uC_ZL5ITvMjHiHoM0gjtbRTLNU1-tFcfCuJO0BE,808
136
138
  unfold/templates/unfold/components/separator.html,sha256=TlKnvg1h3diDvm9A_FWc2atflAxb4e3HtnxYTxR75SU,168
137
139
  unfold/templates/unfold/components/table.html,sha256=iC7mhLlPLRgCaV0sVjEkxIR7A4NLV2-rSHqEbmwpaHw,2028
138
140
  unfold/templates/unfold/components/text.html,sha256=-GjxvdiaBQIaNfPSzT6SSIwnc3R27FkSDQMoF3FDPso,102
139
141
  unfold/templates/unfold/components/title.html,sha256=aMYSO30ybFYqPnqwlJVh2uNmcgnVrRycZkHTjJTjpX8,171
142
+ unfold/templates/unfold/components/tracker.html,sha256=9DLc_vjiAVgdcp1v_sheJ3YZl8BXOZ-o6YBXlNqDfF0,284
140
143
  unfold/templates/unfold/helpers/account_links.html,sha256=QRcsosWnq3cHH6UMmxGAFZTomOWubbwfn4NymFAQ-XA,1863
141
144
  unfold/templates/unfold/helpers/actions_row.html,sha256=1cZ6eI-ljhuaRIeb8AQkELCwuCchom9uwOITdkhKc-4,1931
142
145
  unfold/templates/unfold/helpers/add_link.html,sha256=CUFZ3quvp1JMAPmTkFRjpUXSy9GVXnIWNcRzv_gpq1A,810
@@ -160,10 +163,13 @@ unfold/templates/unfold/helpers/help_text.html,sha256=o-2_hyruIr_Xt0fo38aGgrpptP
160
163
  unfold/templates/unfold/helpers/history.html,sha256=tfpOWNDzo2k7orcb7avfFBWVFe8Z5yVxtMkshD2C42E,1927
161
164
  unfold/templates/unfold/helpers/label.html,sha256=ye13yN-yY_A9Oe_9CEUJSwCgc7wWwgNdSc1zaeUtcJ8,900
162
165
  unfold/templates/unfold/helpers/language_switch.html,sha256=1B53ken8CmwOcaPzjJ7D_EP2B_ToTaMJxQLdKk47uSQ,1463
163
- unfold/templates/unfold/helpers/messages/error.html,sha256=mlHVdfpG2ycsKIDBJB9CZs6fM4bMGkpmJvtxHjEApjE,558
166
+ unfold/templates/unfold/helpers/messages/debug.html,sha256=kl-_k6gZg2o2b1BaIjJt3Li9gJ5xMpXngTrN_YsLdOE,144
167
+ unfold/templates/unfold/helpers/messages/error.html,sha256=j6YsIJKltSHV7ZqXJgLxJI9hzjmDSchary0OX7BQ5M8,595
164
168
  unfold/templates/unfold/helpers/messages/errornote.html,sha256=5ChxoVYkF4jI-cw72gVHh0CRxDnG9ME_U6UQOArax2k,404
165
- unfold/templates/unfold/helpers/messages/info.html,sha256=js95Hm3CzqpP6_XJpnA2vG7qt8eyHmJJJcDF0e5PLtQ,143
166
- unfold/templates/unfold/helpers/messages.html,sha256=UILjthMscQzFVgO6RKroQ6015grNuQySBH1y7Dn1QtQ,1023
169
+ unfold/templates/unfold/helpers/messages/info.html,sha256=SwAZPKKa7rF4hPxwsmakpF_QYkfy_jsCt5ODJbNC2Pk,144
170
+ unfold/templates/unfold/helpers/messages/success.html,sha256=eJcvQtV1nLpS0h3cXzclM_W9dCmDGwHUiDIBlXPVlC4,148
171
+ unfold/templates/unfold/helpers/messages/warning.html,sha256=NEsNP7HLU3bdEOKetq0co9qyDsOK1_CAIygXB2Rerxk,152
172
+ unfold/templates/unfold/helpers/messages.html,sha256=I9RIKfi4T65AG16-2s0C32RwbFkn0qLhdSqDfXpSbyE,915
167
173
  unfold/templates/unfold/helpers/navigation.html,sha256=3-vUm7vrxfCk6y1CUKGyiYeQaYjV0qNJSO3AAYKBun4,1252
168
174
  unfold/templates/unfold/helpers/pagination_current_item.html,sha256=4cZ2KLVcP0Y7xuGyXgexDQ07r94cgM5Gnmtv11dkRPQ,69
169
175
  unfold/templates/unfold/helpers/pagination_ellipsis.html,sha256=Ar9Ntf2I_79mIVW5Hadwkn1Kx1Lj3d8eIXNXI1IIBfg,56
@@ -176,13 +182,13 @@ unfold/templates/unfold/helpers/tab_action.html,sha256=Hq20p5yRWi-wPwkFVI5uekoAF
176
182
  unfold/templates/unfold/helpers/tab_list.html,sha256=MN8EzKsN7hBzTtlC71E1haSsDz2mCAhENLnVCi_00a0,4515
177
183
  unfold/templates/unfold/helpers/theme_switch.html,sha256=LzMTlNEbZaMN8UpdXoVZ6_cFCX1iBd1UcmT3gmCZOYE,2196
178
184
  unfold/templates/unfold/helpers/userlinks.html,sha256=yg6b17oFDzN9US7rnbzwwrmIzdull0yOc76nu2y_E-c,763
179
- unfold/templates/unfold/helpers/welcomemsg.html,sha256=u-svEbNA-lg_hYM2ZGWJWuffSjkDNyyu8qa0O-5Q0yE,1263
185
+ unfold/templates/unfold/helpers/welcomemsg.html,sha256=T50G1zypryUk0oOBmJCIvKioGIHbvYMPb1G243ONPQs,1670
180
186
  unfold/templates/unfold/layouts/base.html,sha256=bAXZDbyiyxNiE-49mqr7pHUFhC2mHZQzIDUY-js_yZ0,379
181
187
  unfold/templates/unfold/layouts/base_simple.html,sha256=Znb4SJqQ0Bk-sz4nPHrQXjLQtjmO6x1_xVtq7HxsJTI,1178
182
- unfold/templates/unfold/layouts/skeleton.html,sha256=IhCy6o2C7tdJKCYN5PusV6ET-rv-UHNCzwBkvVcwglM,4146
188
+ unfold/templates/unfold/layouts/skeleton.html,sha256=iXWxjILRlHzuIRC4JkSRDUVW6VfGnhrbeOYLlv8uWMU,4147
183
189
  unfold/templates/unfold/templatetags/preserve_changelist_filters.html,sha256=sx2jUhogNY4emBhY8PqxQ6mXifbXQb_IQI9Hd0boJI0,111
184
- unfold/templates/unfold/widgets/clearable_file_input.html,sha256=MOJXfId4e5jr6wnQJlFl0lwo4s9wwOicg_hQehx9bh8,2152
185
- unfold/templates/unfold/widgets/clearable_file_input_small.html,sha256=rChcaCdL34mDFjQUrpYOJdzey01EOMWm7_hsyclwLE8,2802
190
+ unfold/templates/unfold/widgets/clearable_file_input.html,sha256=VrQJaYtdbWke1hkmx28nYLVgXlRK7c8lD2FftqadVpY,2160
191
+ unfold/templates/unfold/widgets/clearable_file_input_small.html,sha256=RaJ5ITNFudOI-L3M3RVD58jk_kUvzHVU4mwQYs6ETEo,2810
186
192
  unfold/templates/unfold/widgets/date.html,sha256=WXo2LG1v_gBZBSg-zocj7oujMKI0MWLYCIFfB04HMLQ,122
187
193
  unfold/templates/unfold/widgets/foreign_key_raw_id.html,sha256=Us8UqXRfRNWbQQn_9NMRO4ddUvt9Q53_NyFYUkdxY_g,1075
188
194
  unfold/templates/unfold/widgets/radio.html,sha256=3WcmclQNg7R_pRjEHL1dHkGjAzWlWNYnhHkAirC4nuA,646
@@ -197,13 +203,13 @@ unfold/templates/unfold/widgets/textarea_expandable.html,sha256=4xIGWb20Duwiwumn
197
203
  unfold/templates/unfold/widgets/time.html,sha256=WXo2LG1v_gBZBSg-zocj7oujMKI0MWLYCIFfB04HMLQ,122
198
204
  unfold/templates/unfold/widgets/url.html,sha256=IRLgW44VTKN7UrSWeywJwaxQhfG5jhhXuT-KTadKX58,304
199
205
  unfold/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
- unfold/templatetags/unfold.py,sha256=NY6Ei1vaWiBlkVRAI1iWB-r2Ex6uCCSnNqjcmoeXgpE,7780
206
+ unfold/templatetags/unfold.py,sha256=7N4wUXIKjJazdbuHQs-H8xyRkWIhHVhk6j2rYE-yXW8,8379
201
207
  unfold/templatetags/unfold_list.py,sha256=ofVee2a5WtBVNFExzqxvn8UrSxmPzczR4gF5jTbu0zU,13986
202
208
  unfold/typing.py,sha256=1P8PWM2oeaceUJtA5j071RbKEBpHYaux441u7Hd6wv4,643
203
209
  unfold/utils.py,sha256=36WgmgGRayf_fkNtjoFoI1_G9w8f8gZflNzzqQ3256U,5459
204
210
  unfold/views.py,sha256=hQCyeeMa9kcJV1IZeeYqj8PGW7J4QWME8n-5n0UGmiU,1003
205
211
  unfold/widgets.py,sha256=wwiAbb_7-UWvFcH3HdnTv5f26fjiQn0h5tlAK3-kXVY,17186
206
- django_unfold-0.42.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
207
- django_unfold-0.42.0.dist-info/METADATA,sha256=M7AC-pj3uQl6FtQpsgiCh134dsa4Gla11_BT8yZgbng,4699
208
- django_unfold-0.42.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
209
- django_unfold-0.42.0.dist-info/RECORD,,
212
+ django_unfold-0.43.0.dist-info/LICENSE.md,sha256=Ltk_quRyyvV3J5v3brtOqmibeZSw2Hrb8bY1W3ya0Ik,1077
213
+ django_unfold-0.43.0.dist-info/METADATA,sha256=jJQ__BQbwCGpQ0GMEihLpYLcn3rm5IJWxLLJI-81jXA,4699
214
+ django_unfold-0.43.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
215
+ django_unfold-0.43.0.dist-info/RECORD,,
unfold/admin.py CHANGED
@@ -240,6 +240,8 @@ class ModelAdmin(ModelAdminMixin, BaseModelAdmin):
240
240
  list_after_template = None
241
241
  change_form_before_template = None
242
242
  change_form_after_template = None
243
+ change_form_outer_before_template = None
244
+ change_form_outer_after_template = None
243
245
  compressed_fields = False
244
246
  readonly_preprocess_fields = {}
245
247
  warn_unsaved_form = False
unfold/components.py ADDED
@@ -0,0 +1,47 @@
1
+ from typing import Any, Dict, Optional, Type
2
+
3
+ from django.http import HttpRequest
4
+
5
+
6
+ class ComponentRegistry:
7
+ _registry: Dict[str, Type] = {}
8
+
9
+ @classmethod
10
+ def register_class(cls, component_cls: Type) -> None:
11
+ if not issubclass(component_cls, BaseComponent):
12
+ raise ValueError(
13
+ f"Class '{component_cls.__name__}' must inherit from BaseComponent."
14
+ )
15
+
16
+ class_name = component_cls.__name__
17
+
18
+ if class_name in cls._registry:
19
+ raise ValueError(f"Class '{class_name}' is already registered.")
20
+
21
+ cls._registry[class_name] = component_cls
22
+
23
+ @classmethod
24
+ def get_class(cls, class_name: str) -> Optional[Type]:
25
+ return cls._registry.get(class_name)
26
+
27
+ @classmethod
28
+ def create_instance(cls, class_name: str, **kwargs: Any) -> Any:
29
+ component_cls = cls.get_class(class_name)
30
+
31
+ if component_cls is None:
32
+ raise ValueError(f"Class '{class_name}' is not registered.")
33
+
34
+ return component_cls(**kwargs)
35
+
36
+
37
+ def register_component(cls: Type) -> Type:
38
+ ComponentRegistry.register_class(cls)
39
+ return cls
40
+
41
+
42
+ class BaseComponent:
43
+ def __init__(self, request: HttpRequest):
44
+ self.request = request
45
+
46
+ def get_context_data(self, **kwargs):
47
+ return kwargs
@@ -1,21 +1,21 @@
1
1
  {% load i18n unfold %}
2
2
 
3
3
  {% block validation_errors %}
4
- <div class="bg-red-50 border border-red-200 mb-4 mt-8 rounded shadow-sm text-red-500 text-sm dark:bg-red-500/20 dark:border-red-500/20">
5
- <div class="border-b border-red-200 flex flex-row py-3 px-4 dark:border-red-500/20">
6
- <h2 class="font-medium">
7
- {% trans "Some rows failed to validate" %}
8
- </h2>
9
- </div>
4
+ {% capture as import_error silent %}
5
+ <span class="block font-semibold mb-2">
6
+ {% trans "Some rows failed to validate" %}
7
+ </span>
10
8
 
11
- <div class="px-4 py-3">
12
- <p>
13
- {% trans "Please correct these errors in your data where possible, then reupload it using the form above." %}
14
- </p>
15
- </div>
9
+ <span class="block">
10
+ {% trans "Please correct these errors in your data where possible, then reupload it using the form above." %}
11
+ </span>
12
+ {% endcapture %}
13
+
14
+ <div class="mt-8">
15
+ {% include "unfold/helpers/messages/error.html" with error=import_error %}
16
16
  </div>
17
17
 
18
- <table class="border-gray-200 border-spacing-none border-separate w-full lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
18
+ <table class="import-preview border-gray-200 border-spacing-none border-separate w-full lg:border lg:rounded-md lg:shadow-sm lg:dark:border-gray-800">
19
19
  <thead class="hidden lg:table-header-group font-semibold text-gray-900 dark:text-gray-100">
20
20
  <tr>
21
21
  <th class="align-middle capitalize px-3 py-2 text-left">
@@ -41,19 +41,24 @@
41
41
  {{ row.number }}
42
42
  </td>
43
43
 
44
- <td data-label="{% trans "Errors" %}" class="align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:block before:capitalize before:content-[attr(data-label)] before:mr-auto lg:before:hidden lg:py-3 lg:table-cell dark:border-gray-800">
45
- <div>
46
- <span class="bg-red-600 font-semibold ml-2 px-1 rounded-sm text-xs text-white">{{ row.error_count }}</span>
47
- </div>
44
+ <td data-label="{% trans "Errors" %}" class="errors align-middle flex border-t border-gray-200 font-normal px-3 py-2 text-left before:block before:capitalize before:content-[attr(data-label)] before:mr-auto lg:before:hidden lg:py-3 lg:table-cell dark:border-gray-800">
45
+ <span class="validation-error-count bg-red-600 font-semibold ml-2 px-1 rounded-sm text-xs text-white">{{ row.error_count }}</span>
48
46
 
49
- <div class="validation-error-container">
47
+ <div class="validation-error-container rounded-md !bg-white border left-12 !m-0 !p-0 !top-3 dark:!bg-gray-800 dark:!border-gray-700 min-w-72">
50
48
  <ul class="validation-error-list">
51
49
  {% for field_name, error_list in row.field_specific_errors.items %}
52
- <li>
53
- <span class="validation-error-field-label">{{ field_name }}</span>
54
- <ul>
50
+ <li class="p-3">
51
+ <span class="validation-error-field-label !border-0 font-semibold mb-1 !text-font-important-light dark:!text-font-important-dark">
52
+ {{ field_name }}
53
+ </span>
54
+
55
+ <ul class="text-xs !m-0">
55
56
  {% for error in error_list %}
56
- <li>{{ error }}</li>
57
+ <li class="!m-0">
58
+ <p class="leading-normal">
59
+ {{ error }}
60
+ </p>
61
+ </li>
57
62
  {% endfor %}
58
63
  </ul>
59
64
  </li>
@@ -1,7 +1,7 @@
1
- {% load i18n %}
1
+ {% load unfold i18n %}
2
2
 
3
3
  {% block fields_help %}
4
- <div class="bg-blue-50 mb-4 text-blue-500 px-3 py-3 rounded-md text-sm dark:bg-blue-500/20 dark:border-blue-500/10">
4
+ {% capture as fields_help silent %}
5
5
  {% if import_or_export == "export" %}
6
6
  {% trans "This exporter will export the following fields: " %}
7
7
  {% elif import_or_export == "import" %}
@@ -20,5 +20,7 @@
20
20
  {% endfor %}
21
21
  </dl>
22
22
  {% endif %}
23
- </div>
23
+ {% endcapture %}
24
+
25
+ {% include "unfold/helpers/messages/info.html" with message=fields_help %}
24
26
  {% endblock %}