django-cfg 1.4.97__py3-none-any.whl → 1.4.99__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.
Potentially problematic release.
This version of django-cfg might be problematic. Click here for more details.
- django_cfg/__init__.py +1 -1
- django_cfg/modules/django_unfold/navigation.py +1 -1
- django_cfg/modules/nextjs_admin/views.py +14 -28
- django_cfg/pyproject.toml +1 -1
- django_cfg/static/frontend/admin.zip +0 -0
- django_cfg/templates/admin/index.html +99 -43
- django_cfg/templatetags/django_cfg.py +8 -8
- {django_cfg-1.4.97.dist-info → django_cfg-1.4.99.dist-info}/METADATA +1 -1
- {django_cfg-1.4.97.dist-info → django_cfg-1.4.99.dist-info}/RECORD +12 -12
- {django_cfg-1.4.97.dist-info → django_cfg-1.4.99.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.97.dist-info → django_cfg-1.4.99.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.97.dist-info → django_cfg-1.4.99.dist-info}/licenses/LICENSE +0 -0
django_cfg/__init__.py
CHANGED
|
@@ -63,7 +63,7 @@ class NavigationManager(BaseCfgModule):
|
|
|
63
63
|
separator=True,
|
|
64
64
|
collapsible=True,
|
|
65
65
|
items=[
|
|
66
|
-
NavigationItem(title="Dashboard", icon=Icons.MONITOR_HEART, link="/cfg/admin/
|
|
66
|
+
NavigationItem(title="Dashboard", icon=Icons.MONITOR_HEART, link="/cfg/admin/admin/centrifugo"),
|
|
67
67
|
NavigationItem(title="Logs", icon=Icons.LIST_ALT, link=str(reverse_lazy("admin:django_cfg_centrifugo_centrifugolog_changelist"))),
|
|
68
68
|
]
|
|
69
69
|
)
|
|
@@ -4,15 +4,13 @@ Views for Next.js admin integration.
|
|
|
4
4
|
Serves Next.js static files with SPA routing support and JWT injection.
|
|
5
5
|
|
|
6
6
|
Features:
|
|
7
|
-
- Priority-based ZIP resolution (solution project → package fallback)
|
|
8
7
|
- Automatic extraction with metadata comparison (ZIP size + mtime vs marker file)
|
|
9
8
|
- Cache busting (no-store headers for HTML)
|
|
10
9
|
- SPA routing with fallback strategies
|
|
11
10
|
- JWT token injection for authenticated users
|
|
12
11
|
|
|
13
|
-
ZIP
|
|
14
|
-
|
|
15
|
-
2. Package fallback: django_cfg/static/frontend/nextjs_admin.zip → django_cfg/static/frontend/nextjs_admin/
|
|
12
|
+
ZIP Location:
|
|
13
|
+
- Solution project: {BASE_DIR}/static/nextjs_admin.zip → {BASE_DIR}/static/nextjs_admin/
|
|
16
14
|
|
|
17
15
|
Extraction Logic:
|
|
18
16
|
- Marker file (.zip_meta) tracks ZIP metadata (size:mtime)
|
|
@@ -41,16 +39,14 @@ class NextJsAdminView(ZipExtractionMixin, LoginRequiredMixin, View):
|
|
|
41
39
|
Serve Next.js admin panel with JWT injection and SPA routing.
|
|
42
40
|
|
|
43
41
|
Features:
|
|
44
|
-
- Serves Next.js static build files
|
|
45
|
-
- Priority-based ZIP resolution (solution first, package fallback)
|
|
42
|
+
- Serves Next.js static build files from solution project
|
|
46
43
|
- Smart ZIP extraction: metadata comparison (size + mtime) with marker file
|
|
47
44
|
- Cache busting: no-store headers for HTML files
|
|
48
45
|
- Automatic JWT token injection for authenticated users
|
|
49
46
|
- SPA routing support (path/to/route → path/to/route/index.html)
|
|
50
47
|
|
|
51
|
-
ZIP
|
|
52
|
-
|
|
53
|
-
2. Package: django_cfg/static/frontend/nextjs_admin.zip → django_cfg/static/frontend/nextjs_admin/
|
|
48
|
+
ZIP Location:
|
|
49
|
+
- {BASE_DIR}/static/nextjs_admin.zip → {BASE_DIR}/static/nextjs_admin/
|
|
54
50
|
|
|
55
51
|
ZIP Extraction Logic:
|
|
56
52
|
- If directory doesn't exist: extract from ZIP
|
|
@@ -76,28 +72,18 @@ class NextJsAdminView(ZipExtractionMixin, LoginRequiredMixin, View):
|
|
|
76
72
|
|
|
77
73
|
nextjs_config = config.nextjs_admin
|
|
78
74
|
|
|
79
|
-
#
|
|
75
|
+
# Use solution project static directory
|
|
80
76
|
from django.conf import settings
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
#
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
# Choose which ZIP to use
|
|
89
|
-
if solution_zip.exists():
|
|
90
|
-
zip_path = solution_zip
|
|
91
|
-
base_dir = solution_base_dir
|
|
92
|
-
logger.info(f"[nextjs_admin] Using ZIP from solution project: {solution_zip}")
|
|
93
|
-
elif default_zip.exists():
|
|
94
|
-
zip_path = default_zip
|
|
95
|
-
base_dir = default_base_dir
|
|
96
|
-
logger.info(f"[nextjs_admin] Using ZIP from django_cfg package: {default_zip}")
|
|
97
|
-
else:
|
|
98
|
-
logger.error(f"[nextjs_admin] No ZIP found in solution ({solution_zip}) or package ({default_zip})")
|
|
77
|
+
zip_path = Path(settings.BASE_DIR) / 'static' / 'nextjs_admin.zip'
|
|
78
|
+
base_dir = Path(settings.BASE_DIR) / 'static' / 'nextjs_admin'
|
|
79
|
+
|
|
80
|
+
# Check if ZIP exists
|
|
81
|
+
if not zip_path.exists():
|
|
82
|
+
logger.error(f"[nextjs_admin] ZIP not found: {zip_path}")
|
|
99
83
|
return render(request, 'frontend/404.html', status=404)
|
|
100
84
|
|
|
85
|
+
logger.info(f"[nextjs_admin] Using ZIP from solution project: {zip_path}")
|
|
86
|
+
|
|
101
87
|
# Extract ZIP if needed using mixin
|
|
102
88
|
if not self.extract_zip_if_needed(base_dir, zip_path, 'nextjs_admin'):
|
|
103
89
|
return render(request, 'frontend/404.html', status=404)
|
django_cfg/pyproject.toml
CHANGED
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "django-cfg"
|
|
7
|
-
version = "1.4.
|
|
7
|
+
version = "1.4.99"
|
|
8
8
|
description = "Modern Django framework with type-safe Pydantic v2 configuration, Next.js admin integration, real-time WebSockets, and 8 enterprise apps. Replace settings.py with validated models, 90% less code. Production-ready with AI agents, auto-generated TypeScript clients, and zero-config features."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
keywords = [ "django", "configuration", "pydantic", "settings", "type-safety", "pydantic-settings", "django-environ", "startup-validation", "ide-autocomplete", "nextjs-admin", "react-admin", "websocket", "centrifugo", "real-time", "typescript-generation", "ai-agents", "enterprise-django", "django-settings", "type-safe-config", "modern-django",]
|
|
Binary file
|
|
@@ -9,28 +9,80 @@
|
|
|
9
9
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
10
10
|
<link rel="stylesheet" href="{% static 'admin/css/dashboard.css' %}">
|
|
11
11
|
<style>
|
|
12
|
+
/* Make content container full height and full width */
|
|
13
|
+
#content {
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
height: 100%;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Remove container centering and width limits */
|
|
20
|
+
#content.container,
|
|
21
|
+
#content.mx-auto,
|
|
22
|
+
#content .mx-auto {
|
|
23
|
+
margin-left: 0 !important;
|
|
24
|
+
margin-right: 0 !important;
|
|
25
|
+
max-width: none !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Also remove from unfold container component and make it full height */
|
|
29
|
+
#content > .mx-auto {
|
|
30
|
+
margin-left: 0 !important;
|
|
31
|
+
margin-right: 0 !important;
|
|
32
|
+
max-width: none !important;
|
|
33
|
+
height: 100%;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Remove horizontal padding on mobile for @container */
|
|
37
|
+
@media (max-width: 768px) {
|
|
38
|
+
div[class*="@container"].px-4 {
|
|
39
|
+
padding-left: 0 !important;
|
|
40
|
+
padding-right: 0 !important;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Make Alpine tabs wrapper full height */
|
|
45
|
+
#content [x-data] {
|
|
46
|
+
height: 100%;
|
|
47
|
+
display: flex;
|
|
48
|
+
flex-direction: column;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Make tab content blocks full height */
|
|
52
|
+
#content [x-data] > div[x-show] {
|
|
53
|
+
flex: 1;
|
|
54
|
+
display: flex;
|
|
55
|
+
flex-direction: column;
|
|
56
|
+
}
|
|
57
|
+
|
|
12
58
|
.nextjs-dashboard-iframe {
|
|
13
59
|
width: 100%;
|
|
14
|
-
|
|
15
|
-
height: 500px;
|
|
60
|
+
height: 100%;
|
|
16
61
|
border: none;
|
|
17
62
|
display: block;
|
|
18
63
|
visibility: hidden;
|
|
19
64
|
opacity: 0;
|
|
20
|
-
transition:
|
|
65
|
+
transition: opacity 0.3s ease-in-out;
|
|
21
66
|
}
|
|
22
67
|
|
|
23
68
|
.nextjs-dashboard-iframe.loaded {
|
|
24
69
|
visibility: visible;
|
|
25
70
|
opacity: 1;
|
|
26
|
-
height: auto;
|
|
27
|
-
min-height: 600px;
|
|
28
71
|
}
|
|
29
72
|
|
|
30
73
|
.iframe-container {
|
|
31
74
|
position: relative;
|
|
32
75
|
background: transparent;
|
|
33
|
-
|
|
76
|
+
flex: 1;
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
border: 1px solid rgba(209, 213, 219, 0.2);
|
|
80
|
+
border-radius: 0.375rem; /* rounded-md */
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.dark .iframe-container {
|
|
85
|
+
border-color: rgba(75, 85, 99, 0.2);
|
|
34
86
|
}
|
|
35
87
|
|
|
36
88
|
.iframe-loading {
|
|
@@ -67,6 +119,8 @@
|
|
|
67
119
|
|
|
68
120
|
{% block breadcrumbs %}{% endblock %}
|
|
69
121
|
|
|
122
|
+
{% block coltype %}{% endblock %}
|
|
123
|
+
|
|
70
124
|
{% block title %}
|
|
71
125
|
{% if subtitle %}{{ subtitle }} | {% endif %}
|
|
72
126
|
{{ title }} | {{ site_title|default:'Django site admin' }}
|
|
@@ -102,7 +156,7 @@
|
|
|
102
156
|
}">
|
|
103
157
|
{% if is_frontend_dev_mode %}
|
|
104
158
|
<!-- Development Mode Badge -->
|
|
105
|
-
<div class="bg-yellow-100 dark:bg-yellow-900 border-l-4 border-yellow-500 text-yellow-700 dark:text-yellow-300
|
|
159
|
+
<div class="bg-yellow-100 dark:bg-yellow-900 border-l-4 border-yellow-500 text-yellow-700 dark:text-yellow-300" role="alert">
|
|
106
160
|
<div class="flex items-center">
|
|
107
161
|
<svg class="w-5 h-5 mr-2" fill="currentColor" viewBox="0 0 20 20">
|
|
108
162
|
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"/>
|
|
@@ -118,14 +172,15 @@
|
|
|
118
172
|
<!-- Tab Navigation -->
|
|
119
173
|
{% has_nextjs_external_admin as is_external_enabled %}
|
|
120
174
|
{% if is_external_enabled %}
|
|
121
|
-
<div
|
|
175
|
+
<div>
|
|
122
176
|
<div class="border-b border-gray-300 dark:border-gray-600" style="border-bottom-color: rgba(209, 213, 219, 0.2);">
|
|
123
177
|
<style>
|
|
124
178
|
.dark [style*="border-bottom-color"] {
|
|
125
179
|
border-bottom-color: rgba(75, 85, 99, 0.2) !important;
|
|
126
180
|
}
|
|
127
181
|
</style>
|
|
128
|
-
<
|
|
182
|
+
<div class="flex items-center justify-between px-4">
|
|
183
|
+
<nav class="-mb-px flex space-x-8" aria-label="Dashboard Tabs">
|
|
129
184
|
<button @click="switchTab('builtin')"
|
|
130
185
|
class="whitespace-nowrap py-4 px-2 border-b-2 font-medium text-sm flex items-center gap-2 transition-all duration-200"
|
|
131
186
|
:class="activeTab === 'builtin'
|
|
@@ -144,6 +199,15 @@
|
|
|
144
199
|
<span>{% nextjs_external_admin_title %}</span>
|
|
145
200
|
</button>
|
|
146
201
|
</nav>
|
|
202
|
+
|
|
203
|
+
<!-- Version info -->
|
|
204
|
+
<div class="py-4 text-xs text-gray-400 dark:text-gray-500">
|
|
205
|
+
{% load django_cfg %}
|
|
206
|
+
<a href="{% lib_site_url %}" class="text-blue-600 hover:text-blue-700">
|
|
207
|
+
{% lib_name %}
|
|
208
|
+
</a>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
147
211
|
</div>
|
|
148
212
|
</div>
|
|
149
213
|
{% endif %}
|
|
@@ -163,7 +227,6 @@
|
|
|
163
227
|
data-original-src="{% nextjs_admin_url %}"
|
|
164
228
|
title="Next.js Dashboard"
|
|
165
229
|
sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-storage-access-by-user-activation"
|
|
166
|
-
scrolling="no"
|
|
167
230
|
></iframe>
|
|
168
231
|
</div>
|
|
169
232
|
</div>
|
|
@@ -179,31 +242,16 @@
|
|
|
179
242
|
|
|
180
243
|
<iframe
|
|
181
244
|
id="nextjs-dashboard-iframe-nextjs"
|
|
182
|
-
class="nextjs-dashboard-iframe
|
|
245
|
+
class="nextjs-dashboard-iframe"
|
|
183
246
|
src="{% nextjs_external_admin_url %}"
|
|
184
247
|
data-original-src="{% nextjs_external_admin_url %}"
|
|
185
248
|
title="{% nextjs_external_admin_title %}"
|
|
186
249
|
sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-modals allow-storage-access-by-user-activation"
|
|
187
|
-
scrolling="no"
|
|
188
250
|
></iframe>
|
|
189
251
|
</div>
|
|
190
252
|
</div>
|
|
191
253
|
{% endif %}
|
|
192
254
|
</div>
|
|
193
|
-
|
|
194
|
-
<!-- Footer Section -->
|
|
195
|
-
<div class="text-center py-8 mt-5">
|
|
196
|
-
<p class="text-sm text-gray-500 dark:text-gray-400">
|
|
197
|
-
{% load django_cfg %}
|
|
198
|
-
<a href="{% lib_site_url %}" class="text-blue-600 hover:text-blue-700 font-medium">
|
|
199
|
-
{% lib_name %}
|
|
200
|
-
</a>
|
|
201
|
-
<span class="mx-2">•</span>
|
|
202
|
-
<a href="{% lib_health_url %}" class="text-blue-600 hover:text-blue-700">
|
|
203
|
-
System Health
|
|
204
|
-
</a>
|
|
205
|
-
</p>
|
|
206
|
-
</div>
|
|
207
255
|
{% endcomponent %}
|
|
208
256
|
{% endblock %}
|
|
209
257
|
|
|
@@ -392,23 +440,31 @@
|
|
|
392
440
|
break;
|
|
393
441
|
|
|
394
442
|
case 'iframe-resize':
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
443
|
+
// DISABLED: Fixed height 80vh instead of dynamic resize
|
|
444
|
+
// if (data?.height && typeof data.height === 'number') {
|
|
445
|
+
// // First resize - show iframe immediately
|
|
446
|
+
// if (!iframe.classList.contains('loaded')) {
|
|
447
|
+
// console.log('[Django-CFG] First resize received - showing iframe');
|
|
448
|
+
// if (loading) loading.classList.add('hidden');
|
|
449
|
+
// iframe.classList.add('loaded');
|
|
450
|
+
// }
|
|
451
|
+
//
|
|
452
|
+
// // Debounce resize updates (300ms delay)
|
|
453
|
+
// if (resizeTimer) {
|
|
454
|
+
// clearTimeout(resizeTimer);
|
|
455
|
+
// }
|
|
456
|
+
//
|
|
457
|
+
// resizeTimer = setTimeout(() => {
|
|
458
|
+
// const newHeight = Math.max(600, data.height + 50);
|
|
459
|
+
// iframe.style.height = newHeight + 'px';
|
|
460
|
+
// }, 300);
|
|
461
|
+
// }
|
|
462
|
+
|
|
463
|
+
// Show iframe on first resize event
|
|
464
|
+
if (!iframe.classList.contains('loaded')) {
|
|
465
|
+
console.log('[Django-CFG] First resize received - showing iframe');
|
|
466
|
+
if (loading) loading.classList.add('hidden');
|
|
467
|
+
iframe.classList.add('loaded');
|
|
412
468
|
}
|
|
413
469
|
break;
|
|
414
470
|
|
|
@@ -174,30 +174,30 @@ def nextjs_admin_url(path=''):
|
|
|
174
174
|
2. Otherwise → /cfg/admin/admin/{path} (static files)
|
|
175
175
|
|
|
176
176
|
Note: Port 3000 is reserved for external Next.js admin (Tab 2).
|
|
177
|
+
Both tabs use /admin route for consistency.
|
|
177
178
|
|
|
178
179
|
Usage in template:
|
|
179
180
|
{% load django_cfg %}
|
|
180
181
|
<iframe src="{% nextjs_admin_url %}"></iframe>
|
|
181
|
-
<iframe src="{% nextjs_admin_url '
|
|
182
|
+
<iframe src="{% nextjs_admin_url 'crypto' %}"></iframe>
|
|
182
183
|
"""
|
|
183
184
|
# Normalize path - remove leading/trailing slashes
|
|
184
185
|
path = path.strip('/')
|
|
185
186
|
|
|
186
187
|
if not settings.DEBUG:
|
|
187
|
-
# Production mode: always use static files
|
|
188
|
-
return f'/cfg/admin/{path}' if path else '/cfg/admin/'
|
|
188
|
+
# Production mode: always use static files with /admin route
|
|
189
|
+
return f'/cfg/admin/admin/{path}' if path else '/cfg/admin/admin/'
|
|
189
190
|
|
|
190
191
|
# Check if port 3001 is available for Tab 1 (built-in admin)
|
|
191
192
|
port_3001_available = _is_port_available('localhost', 3001)
|
|
192
193
|
|
|
193
194
|
if port_3001_available:
|
|
194
|
-
# Dev server is running on 3001 - use
|
|
195
|
-
base_url = 'http://localhost:3001'
|
|
195
|
+
# Dev server is running on 3001 - use /admin route for consistency
|
|
196
|
+
base_url = 'http://localhost:3001/admin'
|
|
196
197
|
return f'{base_url}/{path}' if path else base_url
|
|
197
198
|
else:
|
|
198
|
-
# No dev server
|
|
199
|
-
|
|
200
|
-
return f'/cfg/admin/{path}' if path else '/cfg/admin/'
|
|
199
|
+
# No dev server - use static files with /admin route
|
|
200
|
+
return f'/cfg/admin/admin/{path}' if path else '/cfg/admin/admin/'
|
|
201
201
|
|
|
202
202
|
|
|
203
203
|
@register.simple_tag
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-cfg
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.99
|
|
4
4
|
Summary: Modern Django framework with type-safe Pydantic v2 configuration, Next.js admin integration, real-time WebSockets, and 8 enterprise apps. Replace settings.py with validated models, 90% less code. Production-ready with AI agents, auto-generated TypeScript clients, and zero-config features.
|
|
5
5
|
Project-URL: Homepage, https://djangocfg.com
|
|
6
6
|
Project-URL: Documentation, https://djangocfg.com
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
django_cfg/__init__.py,sha256=
|
|
2
|
+
django_cfg/__init__.py,sha256=2_6He9GXwm8Mx_NZieYsriBE-ZI6kzIIoeAoLHEJgEs,1620
|
|
3
3
|
django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
|
|
4
4
|
django_cfg/config.py,sha256=y4Z3rnYsHBE0TehpwAIPaxr---mkvyKrZGGsNwYso74,1398
|
|
5
5
|
django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
|
|
@@ -1010,7 +1010,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
|
|
|
1010
1010
|
django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
|
|
1011
1011
|
django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
|
|
1012
1012
|
django_cfg/modules/django_unfold/__init__.py,sha256=Uquez6xgPUIc8FBMP7qif-adRYQSjQ2dBHxnJPom3eQ,1337
|
|
1013
|
-
django_cfg/modules/django_unfold/navigation.py,sha256=
|
|
1013
|
+
django_cfg/modules/django_unfold/navigation.py,sha256=4lEFyL-qB0aYMYDsqSU24XOIuMGaBDHci6f6adbQjTU,11519
|
|
1014
1014
|
django_cfg/modules/django_unfold/system_monitor.py,sha256=KcrTa5irstdB1pDKe3sC0zl4tz9LVjhp7xvbqUM4YVk,6781
|
|
1015
1015
|
django_cfg/modules/django_unfold/tailwind.py,sha256=NY8nWcUdQw61oNmjPoPl7agcTb-r5IqcpFYy35MNsTM,9107
|
|
1016
1016
|
django_cfg/modules/django_unfold/utils.py,sha256=5aFaceRc9B3eXfpOVyKRD2wWqFt8KcHxjQg54oD7Oyg,4482
|
|
@@ -1021,7 +1021,7 @@ django_cfg/modules/django_unfold/models/navigation.py,sha256=PPEeqA2HBaA1-VjADiX
|
|
|
1021
1021
|
django_cfg/modules/nextjs_admin/__init__.py,sha256=lfrZYyNRExH3Z5De8G4hQBIZoFlW5Ejze3couNrztbY,312
|
|
1022
1022
|
django_cfg/modules/nextjs_admin/apps.py,sha256=HxVUMmWTKdYpwJ00iIfWVFsBzsawsOVhEPZqjk_izjI,347
|
|
1023
1023
|
django_cfg/modules/nextjs_admin/urls.py,sha256=7n0yStm0WNchw14Rtu_mgsIA3WKQsYP9WZt3-YOUWjU,603
|
|
1024
|
-
django_cfg/modules/nextjs_admin/views.py,sha256=
|
|
1024
|
+
django_cfg/modules/nextjs_admin/views.py,sha256=SELkdq6ioNqFLInDKfYyRSZRaXRtuGAVjQfE8sACQ_Q,10382
|
|
1025
1025
|
django_cfg/modules/nextjs_admin/models/__init__.py,sha256=WGw9KXcYd1O9AoA_bpMoz2gLZUlRzjGmUBjjbObcUi0,100
|
|
1026
1026
|
django_cfg/modules/nextjs_admin/models/config.py,sha256=0ADqLuiywSCQfx_z9dkwjFCca3lr3F2uQffIjTr_QXw,5864
|
|
1027
1027
|
django_cfg/modules/nextjs_admin/templatetags/__init__.py,sha256=ChVBnJggCIY8rMhfyJFoA8k0qKo-8FtJknrk54Vx4wM,51
|
|
@@ -1050,7 +1050,7 @@ django_cfg/static/admin/js/alpine/commands-section.js,sha256=8z2MQNwZF9Tx_2EK1AY
|
|
|
1050
1050
|
django_cfg/static/admin/js/alpine/dashboard-tabs.js,sha256=ob8Q_I9lFLDv_hFERXgTyvqMDBspAGfzCxI_7slRur4,1354
|
|
1051
1051
|
django_cfg/static/admin/js/alpine/system-metrics.js,sha256=m-Fg55K_vpHXToD46PXL9twl4OBF_V9MONvbSWbQqDw,440
|
|
1052
1052
|
django_cfg/static/admin/js/alpine/toggle-section.js,sha256=T141NFmy0fRJyGGuuaCJRjJXwPam-xxtQNW1hi8BJbc,672
|
|
1053
|
-
django_cfg/static/frontend/admin.zip,sha256=
|
|
1053
|
+
django_cfg/static/frontend/admin.zip,sha256=tJMXJynfHO7oj85nhrx3iGg-stYsF4Imtuwnf2Vs0k8,7631452
|
|
1054
1054
|
django_cfg/static/js/api-loader.mjs,sha256=boGqqRGnFR-Mzo_RQOjhAzNvsb7QxZddSwMKROzkk9Q,5163
|
|
1055
1055
|
django_cfg/static/js/api/base.mjs,sha256=KUxZHHdELAV8mNnACpwJRvaQhdJxp-n5LFEQ4oUZxBo,4707
|
|
1056
1056
|
django_cfg/static/js/api/index.mjs,sha256=_-Q04jjHcgwi4CGfiaLyiOR6NW7Yu1HBhJWp2J1cjpc,2538
|
|
@@ -1072,11 +1072,11 @@ django_cfg/static/js/api/support/index.mjs,sha256=oPA3iGkUWYyKQuJlI5-tSxD3AOhwlA
|
|
|
1072
1072
|
django_cfg/static/js/api/tasks/client.mjs,sha256=tIy8K-finXzTUL9kOo_L4Q1kchDaHyuzjwS4VymiWPM,3579
|
|
1073
1073
|
django_cfg/static/js/api/tasks/index.mjs,sha256=yCY1GzdD-RtFZ3pAfk1l0msgO1epyo0lsGCjH0g1Afc,294
|
|
1074
1074
|
django_cfg/templates/__init__.py,sha256=IzLjt-a7VIJ0OutmAE1_-w0_LpL2u0MgGpnIabjZuW8,19
|
|
1075
|
-
django_cfg/templates/admin/index.html,sha256=
|
|
1075
|
+
django_cfg/templates/admin/index.html,sha256=bKpeJFRJltoe3iWmFcR5YUzTwPgnogwAsQXjUlELQEE,20072
|
|
1076
1076
|
django_cfg/templates/emails/base_email.html,sha256=TWcvYa2IHShlF_E8jf1bWZStRO0v8G4L_GexPxvz6XQ,8836
|
|
1077
1077
|
django_cfg/templates/unfold/layouts/skeleton.html,sha256=2ArkcNZ34mFs30cOAsTQ1EZiDXcB0aVxkO71lJq9SLE,718
|
|
1078
1078
|
django_cfg/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1079
|
-
django_cfg/templatetags/django_cfg.py,sha256=
|
|
1079
|
+
django_cfg/templatetags/django_cfg.py,sha256=pAUZQhq3k_JJtQXzabQnXyiHxkDoEGt0iUceeVHz6os,9498
|
|
1080
1080
|
django_cfg/utils/__init__.py,sha256=64wwXJuXytvwt8Ze_erSR2HmV07nGWJ6DV5wloRBvYE,435
|
|
1081
1081
|
django_cfg/utils/path_resolution.py,sha256=2n0I04lQkSssFaELu3A93YyMAl1K10KPdpxMt5k4Iy0,13341
|
|
1082
1082
|
django_cfg/utils/smart_defaults.py,sha256=ZUj6K_Deq-fp5O0Dy_Emt257UWFn0f9bkgFv9YCR58U,9239
|
|
@@ -1084,9 +1084,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
|
|
|
1084
1084
|
django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
|
|
1085
1085
|
django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
|
|
1086
1086
|
django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
1087
|
-
django_cfg/pyproject.toml,sha256=
|
|
1088
|
-
django_cfg-1.4.
|
|
1089
|
-
django_cfg-1.4.
|
|
1090
|
-
django_cfg-1.4.
|
|
1091
|
-
django_cfg-1.4.
|
|
1092
|
-
django_cfg-1.4.
|
|
1087
|
+
django_cfg/pyproject.toml,sha256=OR5Tftp5DeqgABTw9E9_Dc6qIuaMUO98Q7rTmg1ZXT0,8572
|
|
1088
|
+
django_cfg-1.4.99.dist-info/METADATA,sha256=hax4GWcL1VKcaR4GmP6Tx_2gyt3gMoTWaDWwKna4PIU,23733
|
|
1089
|
+
django_cfg-1.4.99.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
1090
|
+
django_cfg-1.4.99.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
|
|
1091
|
+
django_cfg-1.4.99.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
1092
|
+
django_cfg-1.4.99.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|