adminita 0.1.0__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,142 @@
1
+
2
+ {% load i18n static %}
3
+ <!DOCTYPE html>
4
+ <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" class="h-full">
5
+ <head>
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>{% trans 'Log in' %} | {{ site_title }}</title>
9
+ <link rel="stylesheet" href="{% static 'adminita/adminita-tailwind.css' %}">
10
+
11
+ <script>
12
+ // Dark mode handling
13
+ if (localStorage.getItem('darkMode') === 'true' ||
14
+ (!localStorage.getItem('darkMode') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
15
+ document.documentElement.classList.add('dark');
16
+ }
17
+ </script>
18
+ </head>
19
+
20
+ <body class="h-full bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800">
21
+
22
+ <div class="min-h-full flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8">
23
+ <div class="max-w-md w-full">
24
+
25
+ <!-- Logo/Header -->
26
+ <div class="text-center mb-8">
27
+ <h1 class="text-3xl font-bold text-gray-900 dark:text-white mb-2">
28
+ {{ site_header|default:_('Django administration') }}
29
+ </h1>
30
+ <p class="text-sm text-gray-600 dark:text-gray-400">
31
+ {% trans 'Sign in to your account' %}
32
+ </p>
33
+ </div>
34
+
35
+ <!-- Login Form -->
36
+ <div class="bg-white dark:bg-gray-800 rounded-xl shadow-xl border border-gray-200 dark:border-gray-700 overflow-hidden">
37
+
38
+ {% if form.errors %}
39
+ <div class="bg-red-50 dark:bg-red-900/20 border-b border-red-200 dark:border-red-800 px-6 py-4">
40
+ <div class="flex items-start">
41
+ <svg class="w-5 h-5 text-red-600 dark:text-red-400 mt-0.5 mr-3 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
42
+ <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd"/>
43
+ </svg>
44
+ <div>
45
+ <p class="text-sm text-red-800 dark:text-red-200">
46
+ {% if form.errors.items|length == 1 %}
47
+ {% trans "Please correct the error below." %}
48
+ {% else %}
49
+ {% trans "Please correct the errors below." %}
50
+ {% endif %}
51
+ </p>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ {% endif %}
56
+
57
+ <div class="px-8 py-10">
58
+ <form method="post" id="login-form">
59
+ {% csrf_token %}
60
+
61
+ <input type="hidden" name="next" value="{{ next }}">
62
+
63
+ <div class="space-y-6">
64
+ <!-- Username -->
65
+ <div>
66
+ <label for="id_username" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
67
+ {{ form.username.label }}
68
+ <span class="text-red-600 dark:text-red-400">*</span>
69
+ </label>
70
+ <input type="text"
71
+ name="username"
72
+ id="id_username"
73
+ autocomplete="username"
74
+ autofocus
75
+ required
76
+ class="w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 placeholder-gray-500 dark:placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors">
77
+
78
+ {% if form.username.errors %}
79
+ <div class="mt-2 text-sm text-red-600 dark:text-red-400">
80
+ {{ form.username.errors }}
81
+ </div>
82
+ {% endif %}
83
+ </div>
84
+
85
+ <!-- Password -->
86
+ <div>
87
+ <label for="id_password" class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">
88
+ {{ form.password.label }}
89
+ <span class="text-red-600 dark:text-red-400">*</span>
90
+ </label>
91
+ <input type="password"
92
+ name="password"
93
+ id="id_password"
94
+ autocomplete="current-password"
95
+ required
96
+ class="w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 placeholder-gray-500 dark:placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-colors">
97
+
98
+ {% if form.password.errors %}
99
+ <div class="mt-2 text-sm text-red-600 dark:text-red-400">
100
+ {{ form.password.errors }}
101
+ </div>
102
+ {% endif %}
103
+ </div>
104
+ </div>
105
+
106
+ <div class="mt-8">
107
+ <button type="submit" class="w-full flex justify-center py-3 px-4 border border-transparent rounded-lg shadow-sm text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors">
108
+ {% trans 'Log in' %}
109
+ </button>
110
+ </div>
111
+ </form>
112
+ </div>
113
+ </div>
114
+
115
+ <!-- Dark Mode Toggle -->
116
+ <div class="mt-6 text-center">
117
+ <button id="dark-mode-toggle" type="button" class="inline-flex items-center px-4 py-2 text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200 transition-colors">
118
+ <svg class="w-5 h-5 mr-2 hidden dark:block" fill="currentColor" viewBox="0 0 20 20">
119
+ <path d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z"/>
120
+ </svg>
121
+ <svg class="w-5 h-5 mr-2 block dark:hidden" fill="currentColor" viewBox="0 0 20 20">
122
+ <path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"/>
123
+ </svg>
124
+ <span class="hidden dark:inline">{% trans 'Light mode' %}</span>
125
+ <span class="inline dark:hidden">{% trans 'Dark mode' %}</span>
126
+ </button>
127
+ </div>
128
+ </div>
129
+ </div>
130
+ <!-- Footer -->
131
+ <footer class="mt-12 px-6 py-4 text-center text-sm text-gray-600 dark:text-gray-400">
132
+ Powered by
133
+ <a href="/"
134
+ class="text-primary-600 dark:text-primary-400 hover:underline"
135
+ target="_blank">
136
+ Adminita
137
+ </a>
138
+ </footer>
139
+
140
+ <script src="{% static 'adminita/adminita-tailwind.js' %}" defer></script>
141
+ </body>
142
+ </html>
adminita/utils.py ADDED
@@ -0,0 +1,70 @@
1
+ from django.contrib import admin
2
+
3
+
4
+ class AlwaysVisibleAdmin(admin.ModelAdmin):
5
+ """
6
+ Ensures a model always appears in the admin index, even if:
7
+ - It's a singleton
8
+ - The changelist redirects
9
+ - Add is disabled
10
+ - Custom permissions exist
11
+ - Proxy models are used
12
+
13
+ Usage:
14
+ from adminita.utils import AlwaysVisibleAdmin
15
+
16
+ @admin.register(SiteConfiguration)
17
+ class SiteConfigurationAdmin(AlwaysVisibleAdmin):
18
+ pass
19
+ """
20
+
21
+ def has_module_permission(self, request):
22
+ # Show the model in the sidebar/app list
23
+ return True
24
+
25
+ def has_view_permission(self, request, obj=None):
26
+ # Default: allow viewing the single instance
27
+ return True
28
+
29
+ def get_changelist(self, request, **kwargs):
30
+ """
31
+ Prevent redirect-based changelists from breaking app_list rendering.
32
+ Even if the developer overrides changelist_view, we ensure Django
33
+ still thinks the model is viewable.
34
+ """
35
+ return super().get_changelist(request, **kwargs)
36
+
37
+
38
+ class SingletonAdmin(AlwaysVisibleAdmin):
39
+ """
40
+ For models that should only have one instance (Site Settings, etc.)
41
+
42
+ Usage:
43
+ from adminita.utils import SingletonAdmin
44
+
45
+ @admin.register(SiteConfiguration)
46
+ class SiteConfigurationAdmin(SingletonAdmin):
47
+ pass
48
+ """
49
+
50
+ def has_add_permission(self, request):
51
+ # Prevent adding new instances if one exists
52
+ return not self.model.objects.exists()
53
+
54
+ def has_delete_permission(self, request, obj=None):
55
+ # Prevent deletion of the singleton
56
+ return False
57
+
58
+ def changelist_view(self, request, extra_context=None):
59
+ # If an instance exists, redirect directly to edit it
60
+ obj = self.model.objects.first()
61
+ if obj:
62
+ from django.shortcuts import redirect
63
+ from django.urls import reverse
64
+ url = reverse(
65
+ f'admin:{self.model._meta.app_label}_{self.model._meta.model_name}_change',
66
+ args=[obj.pk]
67
+ )
68
+ return redirect(url)
69
+ # Otherwise show the standard changelist (with Add button)
70
+ return super().changelist_view(request, extra_context=extra_context)
@@ -0,0 +1,416 @@
1
+ Metadata-Version: 2.4
2
+ Name: adminita
3
+ Version: 0.1.0
4
+ Summary: A modern, beautiful admin interface for Django using Tailwind CSS v4
5
+ Author-email: Djangify <djangify@djangify.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://adminita.djangify.com
8
+ Project-URL: Repository, https://github.com/djangify/adminita
9
+ Project-URL: Issues, https://github.com/djangify/adminita/issues
10
+ Keywords: django,admin,tailwind,tailwindcss,ui,adminita
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Framework :: Django
14
+ Classifier: Framework :: Django :: 4.2
15
+ Classifier: Framework :: Django :: 5.0
16
+ Classifier: Framework :: Django :: 5.1
17
+ Classifier: Framework :: Django :: 5.2
18
+ Classifier: Framework :: Django :: 6.0
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: License :: OSI Approved :: MIT License
21
+ Classifier: Operating System :: OS Independent
22
+ Classifier: Programming Language :: Python
23
+ Classifier: Programming Language :: Python :: 3
24
+ Classifier: Programming Language :: Python :: 3.8
25
+ Classifier: Programming Language :: Python :: 3.9
26
+ Classifier: Programming Language :: Python :: 3.10
27
+ Classifier: Programming Language :: Python :: 3.11
28
+ Classifier: Programming Language :: Python :: 3.12
29
+ Classifier: Programming Language :: Python :: 3.13
30
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
+ Requires-Python: >=3.8
32
+ Description-Content-Type: text/markdown
33
+ License-File: LICENSE
34
+ Requires-Dist: Django>=4.0
35
+ Provides-Extra: dev
36
+ Requires-Dist: pytest; extra == "dev"
37
+ Requires-Dist: pytest-django; extra == "dev"
38
+ Requires-Dist: black; extra == "dev"
39
+ Requires-Dist: ruff; extra == "dev"
40
+ Dynamic: license-file
41
+
42
+ readme for Adminita
43
+
44
+ ![adminita header](https://github.com/djangify/adminita/blob/336735abb0e7679f4e2622615f891d178fd4bab3/adminita-homepage.png)
45
+
46
+
47
+ # Adminita
48
+
49
+ A modern, beautiful Django admin theme built with Tailwind CSS v4. Transform your Django admin interface into a sleek, responsive dashboard with dark mode support.
50
+
51
+ ![License](https://img.shields.io/badge/license-MIT-blue.svg)
52
+ ![Python](https://img.shields.io/badge/python-3.8+-blue.svg)
53
+ ![Django](https://img.shields.io/badge/django-4.0+-green.svg)
54
+ ![Tailwind CSS](https://img.shields.io/badge/tailwind-v4-38bdf8.svg)
55
+
56
+ ## ✨ Features
57
+
58
+ - 🎨 **Modern UI** - Clean, professional interface built with Tailwind CSS v4
59
+ - πŸŒ“ **Dark Mode** - System preference detection with manual toggle
60
+ - πŸ“± **Responsive Design** - Works seamlessly on desktop, tablet, and mobile
61
+ - 🎯 **Easy Integration** - Drop-in replacement for Django's default admin
62
+ - ⚑ **Fast** - Optimized CSS with no unnecessary bloat
63
+ - πŸ”§ **Customizable** - Easy to customize colors and styling
64
+ - πŸ†“ **Open Source** - MIT licensed, free to use and modify
65
+
66
+ ## πŸ“Έ Screenshots
67
+
68
+ ### Light Mode
69
+
70
+ ![adminita light dashboard](https://github.com/djangify/adminita/blob/ac1e111dcf7ffae28dcdca60a78dbf32c848d035/adminita-lightdashboard.png)
71
+
72
+ ### Dark Mode
73
+ ![Dark Mode Dashboard - IMAGE COMING SOON - once I fix it!]
74
+
75
+ ## πŸš€ Quick Start
76
+
77
+ ### Installation
78
+
79
+ 1. **Install via pip** (recommended for production):
80
+
81
+ ```bash
82
+ pip install adminita
83
+ ```
84
+
85
+ 2. **Or install from source** (for development):
86
+
87
+ ```bash
88
+ git clone https://github.com/djangify/adminita.git
89
+ cd adminita
90
+ pip install -e .
91
+ ```
92
+
93
+ ### Configuration
94
+
95
+ 1. **Add to INSTALLED_APPS** in your Django settings (must be before `django.contrib.admin`):
96
+
97
+ ```python
98
+ INSTALLED_APPS = [
99
+ "adminita", # Must be FIRST!
100
+ "django.contrib.admin",
101
+ "django.contrib.auth",
102
+ "django.contrib.contenttypes",
103
+ "django.contrib.sessions",
104
+ "django.contrib.messages",
105
+ "django.contrib.staticfiles",
106
+ # ... your other apps
107
+ ]
108
+ ```
109
+
110
+ 2. **Configure static files**:
111
+
112
+ ```python
113
+ STATIC_URL = "/static/"
114
+ STATIC_ROOT = BASE_DIR / "staticfiles"
115
+ ```
116
+
117
+ 3. **Add customization to project urls.py file**:
118
+ Adminita uses Django's built-in admin site customization. Add these lines to your `urls.py`:
119
+ ```python
120
+ from django.contrib import admin
121
+
122
+ admin.site.site_header = "Your Site Name"
123
+ admin.site.site_title = "Your Site Title"
124
+ admin.site.index_title = "Welcome to Your Site"
125
+ ```
126
+
127
+ 4. **Collect static files**:
128
+
129
+ ```bash
130
+ python manage.py collectstatic --noinput
131
+ ```
132
+
133
+ 5. **Run your server**:
134
+
135
+ ```bash
136
+ python manage.py runserver
137
+ ```
138
+
139
+ 6. **Visit the admin** at `http://localhost:8000/admin/`
140
+
141
+ That's it! Your Django admin should now have the Adminita theme applied.
142
+
143
+ ## 🎨 Customization
144
+
145
+ ### Changing Colors
146
+
147
+ Adminita uses Tailwind CSS v4's new `@theme` syntax. To customize colors:
148
+
149
+ 1. **Edit the source CSS** at `adminita/static/src/input.css`:
150
+
151
+ ```css
152
+ @theme {
153
+ /* Change primary colors to match your brand */
154
+ --color-primary-500: #10b981; /* Your brand color */
155
+ --color-primary-600: #059669; /* Darker shade */
156
+ --color-primary-700: #047857; /* Even darker */
157
+ }
158
+ ```
159
+
160
+ 2. **Rebuild the CSS**:
161
+
162
+ ```bash
163
+ cd path/to/adminita
164
+ npm install # If you haven't already
165
+ npm run build
166
+ ```
167
+
168
+ 3. **Collect static files** in your project:
169
+
170
+ ```bash
171
+ python manage.py collectstatic --noinput
172
+ ```
173
+
174
+ ### Available Color Variables
175
+
176
+ ```css
177
+ --color-primary-50 through --color-primary-950
178
+ --color-gray-50 through --color-gray-900
179
+ --color-gray-750 (custom for dark mode)
180
+ ```
181
+ ## πŸ”§ Utility Classes
182
+
183
+ Adminita provides utility classes to help with common admin patterns.
184
+
185
+ ### AlwaysVisibleAdmin
186
+
187
+ Ensures models always appear in the admin index, even if they have custom permissions:
188
+ ```python
189
+ from adminita.utils import AlwaysVisibleAdmin
190
+
191
+ @admin.register(MyModel)
192
+ class MyModelAdmin(AlwaysVisibleAdmin):
193
+ pass
194
+ ```
195
+
196
+ ### SingletonAdmin
197
+
198
+ For models that should only have one instance (like Site Settings):
199
+ ```python
200
+ from adminita.utils import SingletonAdmin
201
+
202
+ @admin.register(SiteConfiguration)
203
+ class SiteConfigurationAdmin(SingletonAdmin):
204
+ list_display = ['site_name']
205
+ ```
206
+
207
+ ## πŸ› οΈ Development
208
+
209
+ ### Setting Up Development Environment
210
+
211
+ 1. **Clone the repository**:
212
+
213
+ ```bash
214
+ git clone https://github.com/djangify/adminita.git
215
+ cd adminita
216
+ ```
217
+
218
+ 2. **Create a virtual environment**:
219
+
220
+ ```bash
221
+ python -m venv venv
222
+ source venv/bin/activate # On Windows: venv\Scripts\activate
223
+ ```
224
+
225
+ 3. **Install dependencies**:
226
+
227
+ ```bash
228
+ pip install -r requirements.txt
229
+ npm install
230
+ ```
231
+
232
+ 4. **Build CSS**:
233
+
234
+ ```bash
235
+ npm run build # One-time build
236
+ npm run watch # Auto-rebuild on changes
237
+ ```
238
+
239
+ 5. **Run the demo project**:
240
+
241
+ ```bash
242
+ python manage.py migrate
243
+ python manage.py createsuperuser
244
+ python manage.py runserver
245
+ ```
246
+
247
+ ### Project Structure
248
+
249
+ ```
250
+ adminita/
251
+ β”œβ”€β”€ adminita/ # The Django app package
252
+ β”‚ β”œβ”€β”€ static/
253
+ β”‚ β”‚ β”œβ”€β”€ css/
254
+ β”‚ β”‚ β”‚ └── output.css # Generated CSS (don't edit)
255
+ β”‚ β”‚ β”œβ”€β”€ js/
256
+ β”‚ β”‚ β”‚ └── admin.js # JavaScript for dark mode & mobile menu
257
+ β”‚ β”‚ └── src/
258
+ β”‚ β”‚ └── input.css # Source CSS with Tailwind v4 syntax
259
+ β”‚ β”œβ”€β”€ templates/
260
+ β”‚ β”‚ └── admin/ # Template overrides
261
+ β”‚ β”‚ β”œβ”€β”€ base.html
262
+ β”‚ β”‚ β”œβ”€β”€ base_site.html
263
+ β”‚ β”‚ β”œβ”€β”€ index.html
264
+ β”‚ β”‚ β”œβ”€β”€ login.html
265
+ β”‚ β”‚ β”œβ”€β”€ change_list.html
266
+ β”‚ β”‚ └── change_form.html
267
+ β”‚ β”œβ”€β”€ __init__.py
268
+ β”‚ └── apps.py
269
+ β”œβ”€β”€ config/ # Django project settings
270
+ β”‚ β”œβ”€β”€ settings.py
271
+ β”‚ β”œβ”€β”€ urls.py
272
+ β”‚ └── wsgi.py
273
+ β”œβ”€β”€ manage.py
274
+ β”œβ”€β”€ package.json # Node.js dependencies for Tailwind
275
+ β”œβ”€β”€ pyproject.toml # Python package configuration
276
+ └── README.md
277
+ ```
278
+
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
301
+
302
+ ## πŸ“š Documentation
303
+
304
+ ### Tailwind CSS v4 Notes
305
+
306
+ Adminita uses Tailwind CSS v4, which has a different syntax than v3:
307
+
308
+ - Uses `@import "tailwindcss"` instead of `@tailwind` directives
309
+ - Theme customization uses `@theme {}` blocks in CSS
310
+ - More streamlined, CSS-first approach
311
+
312
+ ### Template Inheritance
313
+
314
+ When extending Adminita templates in your own project:
315
+
316
+ ```django
317
+ {% extends "admin/base.html" %}
318
+ ```
319
+
320
+ **Not** `adminita/admin/base.html` - Django finds templates automatically because `adminita` is in `INSTALLED_APPS`.
321
+
322
+ ## 🀝 Contributing
323
+
324
+ We welcome contributions! Adminita is an open-source project and we'd love your help making it better.
325
+
326
+ ### How to Contribute
327
+
328
+ 1. **Fork the repository**
329
+ 2. **Create a feature branch**: `git checkout -b feature/amazing-feature`
330
+ 3. **Make your changes**
331
+ 4. **Test thoroughly**
332
+ 5. **Commit your changes**: `git commit -m 'Add amazing feature'`
333
+ 6. **Push to the branch**: `git push origin feature/amazing-feature`
334
+ 7. **Open a Pull Request**
335
+
336
+ ### Priority Issues
337
+
338
+ We especially need help with:
339
+
340
+ - πŸ› **Dark Mode Bug** - The toggle isn't working (see [Known Issues](#-known-issues))
341
+ - πŸ“± **Mobile Responsiveness** - Testing on various devices
342
+ - β™Ώ **Accessibility** - ARIA labels, keyboard navigation, screen reader support
343
+ - 🎨 **Additional Themes** - Creating alternative color schemes
344
+ - πŸ“ **Documentation** - Improving guides and examples
345
+
346
+ ### Development Guidelines
347
+
348
+ - Follow Django's template style guidelines
349
+ - Use Tailwind CSS utility classes (avoid custom CSS when possible)
350
+ - Test on multiple browsers (Chrome, Firefox, Safari, Edge)
351
+ - Ensure dark mode compatibility for all new features
352
+ - Update documentation for any new features
353
+
354
+ ## πŸ“¦ Requirements
355
+
356
+ - Python 3.10+
357
+ - Django 4.2+
358
+ - Node.js (for building CSS during development)
359
+ - npm (for managing Tailwind CSS)
360
+
361
+ ## πŸ§ͺ Testing
362
+
363
+ ```bash
364
+ # Run Django tests
365
+ python manage.py test
366
+
367
+ # Test in multiple browsers
368
+ # Test dark mode toggle
369
+ # Test responsive design on mobile devices
370
+ ```
371
+
372
+ ## πŸ“„ License
373
+
374
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
375
+
376
+ ## πŸ‘ Acknowledgments
377
+
378
+ - Built with [Django](https://www.djangoproject.com/)
379
+ - Styled with [Tailwind CSS v4](https://tailwindcss.com/)
380
+ - Inspired by modern admin dashboards
381
+
382
+ ## πŸ”— Links
383
+
384
+ - **GitHub**: https://github.com/djangify/adminita
385
+ - **Issues**: https://github.com/djangify/adminita/issues
386
+ - **PyPI**: https://pypi.org/project/adminita/ (coming soon)
387
+
388
+ ## πŸ’¬ Support
389
+
390
+ Having trouble? Here are some ways to get help:
391
+
392
+ - πŸ“– Check the [documentation](https://github.com/djangify/adminita/wiki)
393
+ - πŸ› [Open an issue](https://github.com/djangify/adminita/issues/new)
394
+ - πŸ’‘ [Start a discussion](https://github.com/djangify/adminita/discussions)
395
+
396
+ ## πŸ—ΊοΈ Roadmap
397
+
398
+ - [ ] Fix dark mode toggle functionality
399
+ - [ ] Add more customization options
400
+ - [ ] Create additional color themes
401
+ - [ ] Improve accessibility (ARIA labels, keyboard navigation)
402
+ - [ ] Add comprehensive test suite
403
+ - [ ] Create video tutorials
404
+ - [ ] Publish to PyPI
405
+ - [ ] Add support for Django inline forms
406
+ - [ ] Create a documentation website
407
+
408
+ ## ⭐ Star History
409
+
410
+ If you find Adminita useful, please consider giving it a star on GitHub! It helps others discover the project.
411
+
412
+ ---
413
+
414
+ Made with ❀️ by a Django enthusiast
415
+
416
+ **Note**: This is an open-source project. I appreciate your patience and contributions!
@@ -0,0 +1,18 @@
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=VCW4s9OPZJxhuZNQx-eYn2TMJ9TMguBpi7fy2lLOmsk,61700
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=NiKu8s4SFvF7ctmaxNFyMOc0WlEGYUSTGxi_ZwF4jos,11788
8
+ adminita/templates/admin/base.html,sha256=VIbw4DQ08DIRpwx468xYXns4a2hNBIg4F_-emPaM1tI,9930
9
+ adminita/templates/admin/change_form.html,sha256=iDkKdYrpNtrMe3XX_Cooo0ueQ9tRYt5Ps7xWXkd-mgM,8808
10
+ adminita/templates/admin/change_list.html,sha256=8cwBQ5HMzyfv0I6Z92XFE7lqM4rBfAMgN2Ke34SVG2A,8589
11
+ adminita/templates/admin/index.html,sha256=MEYoBvs1WMhMhD8h46DrecAUcW70qcQXmr3Wprin8bg,7009
12
+ adminita/templates/admin/logged_out.html,sha256=MsSzjMTXkIZQ4m92MVv89p1ASD-IUM6TpuY4bNzZxDU,6643
13
+ adminita/templates/admin/login.html,sha256=HbyS7zQ6A2EXE4Odzin3xH70HEtkqY9sjbW34GXSJt4,8426
14
+ adminita-0.1.0.dist-info/licenses/LICENSE,sha256=pH2s9_dYGXbt81EPn0RTenMzlMmgH65KfQhnUuENiT0,1131
15
+ adminita-0.1.0.dist-info/METADATA,sha256=dNwlyxcw7kdWxXLSSbAaUDDFPdq0kN1UURvlFrPUqBc,12210
16
+ adminita-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
17
+ adminita-0.1.0.dist-info/top_level.txt,sha256=bHXkKMEo8dBqliVV347K_MWJG-dyuNzj9cwXYg6gEa8,9
18
+ adminita-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Diane Corriette @Djangify
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the β€œSoftware”), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED β€œAS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1 @@
1
+ adminita