adminita 0.1.4__py3-none-any.whl → 0.1.6__py3-none-any.whl

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.
@@ -0,0 +1,176 @@
1
+ {% load i18n admin_urls static %}
2
+ <div class="js-inline-admin-formset inline-group"
3
+ id="{{ inline_admin_formset.formset.prefix }}-group"
4
+ data-inline-type="tabular"
5
+ data-inline-formset="{{ inline_admin_formset.inline_formset_data }}">
6
+
7
+ <fieldset class="module {{ inline_admin_formset.classes }} bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 mb-6 overflow-hidden">
8
+
9
+ {# Section Header #}
10
+ <h2 class="text-lg font-semibold text-gray-900 dark:text-white px-4 py-3 bg-gray-50 dark:bg-gray-750 border-b border-gray-200 dark:border-gray-700">
11
+ {% if inline_admin_formset.formset.max_num == 1 %}
12
+ {{ inline_admin_formset.opts.verbose_name|capfirst }}
13
+ {% else %}
14
+ {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}
15
+ {% endif %}
16
+ </h2>
17
+
18
+ {{ inline_admin_formset.formset.management_form }}
19
+
20
+ {# Non-form errors #}
21
+ {% if inline_admin_formset.formset.non_form_errors %}
22
+ <div class="px-4 py-2 bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-400 text-sm border-b border-red-200 dark:border-red-800">
23
+ {{ inline_admin_formset.formset.non_form_errors }}
24
+ </div>
25
+ {% endif %}
26
+
27
+ {# Table Container #}
28
+ <div class="tabular-container overflow-x-auto">
29
+ <table class="w-full min-w-full divide-y divide-gray-200 dark:divide-gray-700">
30
+
31
+ {# Table Header #}
32
+ <thead class="bg-gray-50 dark:bg-gray-750">
33
+ <tr>
34
+ <th scope="col" class="px-3 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider w-8">
35
+ &nbsp;
36
+ </th>
37
+
38
+ {% for field in inline_admin_formset.fields %}
39
+ {% if not field.widget.is_hidden %}
40
+ <th scope="col" class="px-3 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">
41
+ {{ field.label|capfirst }}
42
+ {% if field.required %}<span class="text-red-500">*</span>{% endif %}
43
+ </th>
44
+ {% endif %}
45
+ {% endfor %}
46
+
47
+ {% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}
48
+ <th scope="col" class="px-3 py-3 text-center text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider w-20">
49
+ {% translate "Delete" %}
50
+ </th>
51
+ {% endif %}
52
+ </tr>
53
+ </thead>
54
+
55
+ <tbody class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700">
56
+ {% for inline_admin_form in inline_admin_formset %}
57
+ <tr class="form-row {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form{% endif %} hover:bg-gray-50 dark:hover:bg-gray-750 transition-colors"
58
+ id="{{ inline_admin_formset.formset.prefix }}-{% if forloop.last and inline_admin_formset.has_add_permission %}empty{% else %}{{ forloop.counter0 }}{% endif %}">
59
+
60
+ <td class="original px-3 py-3 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
61
+ {% if inline_admin_form.original %}
62
+ <span class="inline-flex items-center justify-center w-6 h-6 text-xs font-medium bg-gray-200 dark:bg-gray-600 rounded-full">
63
+ {{ forloop.counter }}
64
+ </span>
65
+ {% else %}
66
+ <span class="inline-flex items-center justify-center w-6 h-6 text-xs font-medium bg-primary-100 dark:bg-primary-900 text-primary-600 dark:text-primary-400 rounded-full">
67
+ +
68
+ </span>
69
+ {% endif %}
70
+
71
+ {% if inline_admin_form.needs_explicit_pk_field %}
72
+ {{ inline_admin_form.pk_field.field }}
73
+ {% endif %}
74
+ {{ inline_admin_form.fk_field.field }}
75
+
76
+ {% if inline_admin_form.form.non_field_errors %}
77
+ <div class="text-red-500 text-xs mt-1">{{ inline_admin_form.form.non_field_errors }}</div>
78
+ {% endif %}
79
+ </td>
80
+
81
+ {% for fieldset in inline_admin_form %}
82
+ {% for line in fieldset %}
83
+ {% for field in line %}
84
+ {% if not field.field.is_hidden %}
85
+ <td class="px-3 py-3 {% if field.field.name %}field-{{ field.field.name }}{% endif %}">
86
+ {% if field.is_readonly %}
87
+ <div class="readonly-field text-gray-900 dark:text-gray-100">{{ field.contents }}</div>
88
+ {% if inline_admin_form.show_url %}
89
+ <a href="{{ inline_admin_form.absolute_url }}" class="text-xs text-primary-600 dark:text-primary-400 hover:underline ml-2">
90
+ {% translate "View" %}
91
+ </a>
92
+ {% endif %}
93
+ {% else %}
94
+ {% if field.field.errors %}
95
+ <div class="text-red-500 text-xs mb-1">{{ field.field.errors }}</div>
96
+ {% endif %}
97
+ {{ field.field }}
98
+ {% endif %}
99
+ </td>
100
+ {% endif %}
101
+ {% endfor %}
102
+ {% endfor %}
103
+ {% endfor %}
104
+
105
+ {% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}
106
+ <td class="delete px-3 py-3 text-center">
107
+ {% if inline_admin_form.original %}
108
+ <label class="sr-only" for="id_{{ inline_admin_formset.formset.prefix }}-{{ forloop.counter0 }}-DELETE">
109
+ {% translate "Delete" %}
110
+ </label>
111
+ <div class="flex items-center justify-center">
112
+ <input type="checkbox"
113
+ name="{{ inline_admin_formset.formset.prefix }}-{{ forloop.counter0 }}-DELETE"
114
+ id="id_{{ inline_admin_formset.formset.prefix }}-{{ forloop.counter0 }}-DELETE"
115
+ class="delete-checkbox w-5 h-5 text-red-600 bg-white dark:bg-gray-700 border-gray-300 dark:border-gray-600 rounded focus:ring-red-500 focus:ring-2 cursor-pointer"
116
+ title="{% translate 'Check to delete' %}">
117
+ </div>
118
+ {% endif %}
119
+ </td>
120
+ {% endif %}
121
+ </tr>
122
+ {% endfor %}
123
+ </tbody>
124
+ </table>
125
+ </div>
126
+
127
+ </fieldset>
128
+
129
+ {# Add Another Row - Outside fieldset for proper JS handling #}
130
+ {# Django's inlines.js will create the add-row dynamically #}
131
+
132
+ </div>
133
+
134
+ <style>
135
+ /* Style the add-row link to look like a simple link, not a button */
136
+ .add-row {
137
+ background: transparent;
138
+ border: none;
139
+ }
140
+ .add-row a,
141
+ .add-row a:link,
142
+ .add-row a:visited {
143
+ display: inline-flex;
144
+ align-items: center;
145
+ gap: 0.5rem;
146
+ font-size: 0.875rem;
147
+ font-weight: 500;
148
+ color: #2563eb;
149
+ text-decoration: none;
150
+ background: transparent !important;
151
+ border: none !important;
152
+ padding: 0 !important;
153
+ box-shadow: none !important;
154
+ }
155
+ .add-row a:hover {
156
+ color: #1d4ed8;
157
+ text-decoration: underline;
158
+ }
159
+ .add-row a::before {
160
+ content: "+";
161
+ font-size: 1.25rem;
162
+ font-weight: 400;
163
+ margin-right: 0.25rem;
164
+ }
165
+ /* Dark mode */
166
+ @media (prefers-color-scheme: dark) {
167
+ .add-row a,
168
+ .add-row a:link,
169
+ .add-row a:visited {
170
+ color: #60a5fa;
171
+ }
172
+ .add-row a:hover {
173
+ color: #93c5fd;
174
+ }
175
+ }
176
+ </style>
@@ -0,0 +1,25 @@
1
+ {% load i18n static %}<!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>{% trans "Popup closing…" %}</title>
5
+ </head>
6
+ <body>
7
+ <script type="application/json" id="django-admin-popup-response-constants">{{ popup_response_data }}</script>
8
+ <script type="text/javascript">
9
+ (function() {
10
+ var initData = JSON.parse(document.getElementById("django-admin-popup-response-constants").textContent);
11
+ switch(initData.action) {
12
+ case 'change':
13
+ opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value);
14
+ break;
15
+ case 'delete':
16
+ opener.dismissDeleteRelatedObjectPopup(window, initData.value);
17
+ break;
18
+ default:
19
+ opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj);
20
+ break;
21
+ }
22
+ })();
23
+ </script>
24
+ </body>
25
+ </html>
@@ -0,0 +1,22 @@
1
+ {% load i18n admin_urls %}
2
+
3
+ <div class="flex items-center justify-between bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 px-4 py-2">
4
+ <div class="flex items-center space-x-3">
5
+ {# Always show these three main buttons #}
6
+ <input type="submit" value="{% translate 'Save' %}" name="_save" class="inline-flex items-center px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors cursor-pointer">
7
+
8
+ <input type="submit" value="{% translate 'Save and add another' %}" name="_addanother" class="inline-flex items-center px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors cursor-pointer">
9
+
10
+ <input type="submit" value="{% translate 'Save and continue editing' %}" name="_continue" class="inline-flex items-center px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-lg font-medium transition-colors cursor-pointer">
11
+ </div>
12
+
13
+ <div class="flex items-center space-x-3">
14
+ {# Delete link - only show if we have an original object #}
15
+ {% if original %}
16
+ {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
17
+ <a href="{% add_preserved_filters delete_url %}" class="inline-flex items-center px-4 py-2 bg-red-600 hover:bg-red-700 text-white rounded-lg font-medium transition-colors">
18
+ {% translate "Delete" %}
19
+ </a>
20
+ {% endif %}
21
+ </div>
22
+ </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adminita
3
- Version: 0.1.4
3
+ Version: 0.1.6
4
4
  Summary: A modern admin interface for Django using Tailwind CSS v4
5
5
  Author-email: Adminita <hello@todiane.com>
6
6
  License: MIT
@@ -251,9 +251,9 @@ adminita/
251
251
  ├── adminita/ # The Django app package
252
252
  │ ├── static/
253
253
  │ │ ├── css/
254
- │ │ │ └── output.css # Generated CSS (don't edit)
254
+ │ │ │ └── adminita-tailwind.css # Generated CSS (don't edit)
255
255
  │ │ ├── js/
256
- │ │ │ └── admin.js # JavaScript for dark mode & mobile menu
256
+ │ │ │ └── adminita-tailwind.js # JavaScript for dark mode & mobile menu
257
257
  │ │ └── src/
258
258
  │ │ └── input.css # Source CSS with Tailwind v4 syntax
259
259
  │ ├── templates/
@@ -277,27 +277,7 @@ adminita/
277
277
  ```
278
278
 
279
279
  ## 🐛 Known Issues
280
-
281
- ### Dark Mode Not Working
282
-
283
- **Status**: Open Issue
284
- **Priority**: High
285
-
286
- The dark mode toggle button appears in the interface, but clicking it does not switch between light and dark themes. This is a known bug that we're actively working on.
287
-
288
- **Expected Behavior**: Clicking the moon/sun icon should toggle between light and dark mode, with the preference saved to localStorage.
289
-
290
- **Current Behavior**: Nothing happens when the toggle button is clicked.
291
-
292
- **Workaround**: None currently available.
293
-
294
- **Help Wanted**: If you have experience with JavaScript and dark mode implementation, we'd love your help! See [Contributing](#-contributing) below.
295
-
296
- ### Adding Filter Sidebar
297
-
298
- ~~Wanted to include a filter section on the side but kept clashing with Django files. Need to pay more time to it to get it working~~
299
-
300
- **Status**: Still experimenting
280
+ None not as of December 2025
301
281
 
302
282
  ## 📚 Documentation
303
283
 
@@ -383,13 +363,18 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
383
363
 
384
364
  - **GitHub**: https://github.com/djangify/adminita
385
365
  - **Issues**: https://github.com/djangify/adminita/issues
386
- - **PyPI**: https://pypi.org/project/adminita/ (coming soon)
366
+ - **PyPI**: https://pypi.org/project/adminita/
367
+
368
+ - **Website - GitHub**: https://github.com/djangify/adminita_demo
369
+
370
+ - **Website**: https://adminita.todiane.com (demo user login available)
371
+
387
372
 
388
373
  ## 💬 Support
389
374
 
390
375
  Having trouble? Here are some ways to get help:
391
376
 
392
- - 📖 Check the [documentation](https://github.com/djangify/adminita/wiki)
377
+ - 📖 Check the [documentation](https://adminita.todiane.com/infopages/docs)
393
378
  - 🐛 [Open an issue](https://github.com/djangify/adminita/issues/new)
394
379
  - 💡 [Start a discussion](https://github.com/djangify/adminita/discussions)
395
380
 
@@ -414,3 +399,9 @@ If you find Adminita useful, please consider giving it a star on GitHub! It help
414
399
  Made with ❤️ by a Django enthusiast
415
400
 
416
401
  **Note**: This is an open-source project. I appreciate your patience and contributions!
402
+
403
+ **Developer**: https://www.todiane.com
404
+
405
+ **Developer LinkedIn**: https://linkedin.com/in/todianedev
406
+
407
+ **Coffee Always Welcome**: https://ko-fi.com/todianedev ❤️
@@ -0,0 +1,29 @@
1
+ adminita/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ adminita/apps.py,sha256=8kNa2rgHierXR7asVySUKI46VJu8bmwd9EOivEF42oA,185
3
+ adminita/context_processors.py,sha256=59Q7TyKak3eM924QGjr5EeGOiSZ98YaVCyjTcHS769c,525
4
+ adminita/utils.py,sha256=pUsSfyOsOdpYZ5KACajLLV9GfoWW_TK1ABG3uUJa6g4,2306
5
+ adminita/static/adminita/adminita-tailwind.css,sha256=P_7P6huWHNoAV1AWfgN0bd7b17uspti9OeYuICnT7dM,65546
6
+ adminita/static/adminita/adminita-tailwind.js,sha256=wd6kQZCBJhQk-kCngMmxyiXx51kRQ0PK-STKoYe9xHE,3318
7
+ adminita/static/css/output.css,sha256=f7xqy5Mr0jOJMhFVS_tyke4Iax9I8ypYB9CUJ4zepUU,82912
8
+ adminita/static/src/input.css,sha256=YkbCM9244MYpi6I1Po83man9GMqhTj6zui0pdE0zd5w,12855
9
+ adminita/templates/admin/app_index.html,sha256=rPlhwWcDz_6WyszObeVGsCx-xfEwSBzC2iDx6ZO5Hf8,3206
10
+ adminita/templates/admin/base.html,sha256=t5jujpmoB1NxGbvLCPcTnz9TTpgB-OYLxcv-_IQnb3c,11028
11
+ adminita/templates/admin/change_form.html,sha256=EE0ZXt1agxRrCwnjhZjv2V8KbN1x6TIXvm7SZzIUdGU,9450
12
+ adminita/templates/admin/change_list.html,sha256=89ip4IoaJ5-0JAISFm_YCNRHMC3cPUp0318Ty5J54LU,9028
13
+ adminita/templates/admin/delete_confirmation.html,sha256=Mzgi8lZZ1FTn2eZSM8HqK4GhALesQkZu2QTyssLzpPg,5836
14
+ adminita/templates/admin/delete_selected_confirmation.html,sha256=tq0vIJ9eeLADNZSRgxELaE0UK8L0r0vnn6QZqJxieQ4,6051
15
+ adminita/templates/admin/index.html,sha256=MEYoBvs1WMhMhD8h46DrecAUcW70qcQXmr3Wprin8bg,7009
16
+ adminita/templates/admin/logged_out.html,sha256=rMcFawfTVMUrKr47mKFoSnrd95yUUsN90TG8cJmXlOY,6670
17
+ adminita/templates/admin/login.html,sha256=9HsOKISPrsxVDvdgm9s9oNnz1CZYAHHbjga3sM9ePOs,8453
18
+ adminita/templates/admin/object_history.html,sha256=t01XSu9xqeGIs8QZNtZav6jchyH1_8dmz9VTG-0HONE,6718
19
+ adminita/templates/admin/password_change_done.html,sha256=_n0CtRSyi5J-E7wsTZqn4u7URs1eL294D6ipo5MpWVI,1831
20
+ adminita/templates/admin/password_change_form.html,sha256=fw58OLBteChy7r0DRbCiFTsk7Twa5fz1FAiFxZ9DH5c,7304
21
+ adminita/templates/admin/popup_response.html,sha256=GJtE8squ1qpcgZkeMjHgkSQDv5rXTV1SWSQR58AFZII,924
22
+ adminita/templates/admin/submit_line.html,sha256=nyM06xhlT0lGaOK8nYfqjfNu_52Kk7J-LH0d63ThiLc,1513
23
+ adminita/templates/admin/edit_inline/stacked.html,sha256=oItxAp76TVdB5NmR1Bf1WlbjA0WNttlGk-ntbt-jCaI,5580
24
+ adminita/templates/admin/edit_inline/tabular.html,sha256=fAuSecCg5p64zC80uuW6oLzdM1a58VjwFSOtnc3F7yg,7767
25
+ adminita-0.1.6.dist-info/licenses/LICENSE,sha256=pH2s9_dYGXbt81EPn0RTenMzlMmgH65KfQhnUuENiT0,1131
26
+ adminita-0.1.6.dist-info/METADATA,sha256=D1AczWhoNAywHrZ3Ww3g4uwslRhC32EDewqjwbRykxE,11701
27
+ adminita-0.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
+ adminita-0.1.6.dist-info/top_level.txt,sha256=bHXkKMEo8dBqliVV347K_MWJG-dyuNzj9cwXYg6gEa8,9
29
+ adminita-0.1.6.dist-info/RECORD,,
@@ -1,24 +0,0 @@
1
- adminita/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- adminita/apps.py,sha256=8kNa2rgHierXR7asVySUKI46VJu8bmwd9EOivEF42oA,185
3
- adminita/utils.py,sha256=pUsSfyOsOdpYZ5KACajLLV9GfoWW_TK1ABG3uUJa6g4,2306
4
- adminita/static/adminita/adminita-tailwind.css,sha256=DYsuwhyK3z67iKuBMdC1YEpK0l_0z33MGNE-5-IDWRM,63980
5
- adminita/static/adminita/adminita-tailwind.js,sha256=wd6kQZCBJhQk-kCngMmxyiXx51kRQ0PK-STKoYe9xHE,3318
6
- adminita/static/css/output.css,sha256=iESJzTwRkBGsrzaxp-O7gDov40CAYVxx06Zh6tP6vtg,78705
7
- adminita/static/src/input.css,sha256=RJdxa-y5oOawPZfNDdDfFdDWokF2BbPsdTKtXDVYL70,11875
8
- adminita/templates/admin/app_index.html,sha256=rPlhwWcDz_6WyszObeVGsCx-xfEwSBzC2iDx6ZO5Hf8,3206
9
- adminita/templates/admin/base.html,sha256=IZVQHMmU2mOvZCZ2s0_J1aPbB81yMP4hNC5JmffULRY,9922
10
- adminita/templates/admin/change_form.html,sha256=QsRQSoI_s9wTVo9ui2cr5zwbK9CBVZA8eC8j6qs1AB4,10174
11
- adminita/templates/admin/change_list.html,sha256=89ip4IoaJ5-0JAISFm_YCNRHMC3cPUp0318Ty5J54LU,9028
12
- adminita/templates/admin/delete_confirmation.html,sha256=vk08fctcOIDGmuEc1QBSDcEizIlX8H-Fqt2ibKuC3wo,5764
13
- adminita/templates/admin/delete_selected_confirmation.html,sha256=ddGh4fEVzGLPYUNuEgdPNwV4h5MjxG3h_-nBy4DcVjM,6043
14
- adminita/templates/admin/index.html,sha256=MEYoBvs1WMhMhD8h46DrecAUcW70qcQXmr3Wprin8bg,7009
15
- adminita/templates/admin/logged_out.html,sha256=rMcFawfTVMUrKr47mKFoSnrd95yUUsN90TG8cJmXlOY,6670
16
- adminita/templates/admin/login.html,sha256=9HsOKISPrsxVDvdgm9s9oNnz1CZYAHHbjga3sM9ePOs,8453
17
- adminita/templates/admin/object_history.html,sha256=t01XSu9xqeGIs8QZNtZav6jchyH1_8dmz9VTG-0HONE,6718
18
- adminita/templates/admin/password_change_done.html,sha256=_n0CtRSyi5J-E7wsTZqn4u7URs1eL294D6ipo5MpWVI,1831
19
- adminita/templates/admin/password_change_form.html,sha256=fw58OLBteChy7r0DRbCiFTsk7Twa5fz1FAiFxZ9DH5c,7304
20
- adminita-0.1.4.dist-info/licenses/LICENSE,sha256=pH2s9_dYGXbt81EPn0RTenMzlMmgH65KfQhnUuENiT0,1131
21
- adminita-0.1.4.dist-info/METADATA,sha256=UeETlfFNuZ_nlS7EoCyyxRh2rHlxjz6S5pS62iBXPsA,12205
22
- adminita-0.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
23
- adminita-0.1.4.dist-info/top_level.txt,sha256=bHXkKMEo8dBqliVV347K_MWJG-dyuNzj9cwXYg6gEa8,9
24
- adminita-0.1.4.dist-info/RECORD,,