django-cfg 1.2.6__py3-none-any.whl → 1.2.8__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.
- django_cfg/__init__.py +1 -1
- django_cfg/apps/agents/admin/execution_admin.py +9 -2
- django_cfg/apps/agents/admin/registry_admin.py +10 -2
- django_cfg/apps/agents/admin/toolsets_admin.py +14 -3
- django_cfg/apps/knowbase/admin/archive_admin.py +3 -2
- django_cfg/apps/knowbase/admin/chat_admin.py +3 -2
- django_cfg/apps/knowbase/admin/document_admin.py +11 -2
- django_cfg/apps/knowbase/admin/external_data_admin.py +2 -1
- django_cfg/apps/urls.py +2 -2
- django_cfg/modules/django_import_export/__init__.py +12 -5
- django_cfg/modules/django_unfold/callbacks/__init__.py +9 -0
- django_cfg/modules/django_unfold/callbacks/actions.py +50 -0
- django_cfg/modules/django_unfold/callbacks/base.py +98 -0
- django_cfg/modules/django_unfold/callbacks/charts.py +224 -0
- django_cfg/modules/django_unfold/callbacks/commands.py +40 -0
- django_cfg/modules/django_unfold/callbacks/main.py +191 -0
- django_cfg/modules/django_unfold/callbacks/revolution.py +76 -0
- django_cfg/modules/django_unfold/callbacks/statistics.py +240 -0
- django_cfg/modules/django_unfold/callbacks/system.py +180 -0
- django_cfg/modules/django_unfold/callbacks/users.py +65 -0
- django_cfg/modules/django_unfold/models/config.py +10 -3
- django_cfg/modules/django_unfold/tailwind.py +68 -0
- django_cfg/templates/admin/components/action_grid.html +49 -0
- django_cfg/templates/admin/components/card.html +50 -0
- django_cfg/templates/admin/components/data_table.html +67 -0
- django_cfg/templates/admin/components/metric_card.html +39 -0
- django_cfg/templates/admin/components/modal.html +58 -0
- django_cfg/templates/admin/components/progress_bar.html +25 -0
- django_cfg/templates/admin/components/section_header.html +26 -0
- django_cfg/templates/admin/components/stat_item.html +32 -0
- django_cfg/templates/admin/components/stats_grid.html +72 -0
- django_cfg/templates/admin/components/status_badge.html +28 -0
- django_cfg/templates/admin/components/user_avatar.html +27 -0
- django_cfg/templates/admin/layouts/dashboard_with_tabs.html +7 -7
- django_cfg/templates/admin/snippets/components/activity_tracker.html +48 -11
- django_cfg/templates/admin/snippets/components/charts_section.html +63 -13
- django_cfg/templates/admin/snippets/components/django_commands.html +18 -18
- django_cfg/templates/admin/snippets/components/quick_actions.html +3 -47
- django_cfg/templates/admin/snippets/components/recent_activity.html +28 -38
- django_cfg/templates/admin/snippets/components/recent_users_table.html +22 -53
- django_cfg/templates/admin/snippets/components/stats_cards.html +2 -66
- django_cfg/templates/admin/snippets/components/system_health.html +13 -63
- django_cfg/templates/admin/snippets/components/system_metrics.html +8 -25
- django_cfg/templates/admin/snippets/tabs/commands_tab.html +1 -1
- django_cfg/templates/admin/snippets/tabs/overview_tab.html +4 -4
- django_cfg/templates/admin/snippets/zones/zones_table.html +12 -33
- django_cfg/templatetags/django_cfg.py +2 -1
- {django_cfg-1.2.6.dist-info → django_cfg-1.2.8.dist-info}/METADATA +2 -1
- {django_cfg-1.2.6.dist-info → django_cfg-1.2.8.dist-info}/RECORD +52 -32
- django_cfg/modules/django_unfold/callbacks.py +0 -795
- {django_cfg-1.2.6.dist-info → django_cfg-1.2.8.dist-info}/WHEEL +0 -0
- {django_cfg-1.2.6.dist-info → django_cfg-1.2.8.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.2.6.dist-info → django_cfg-1.2.8.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,21 @@
|
|
1
1
|
{% load unfold %}
|
2
2
|
|
3
|
-
<!-- Recent Users Table
|
3
|
+
<!-- Recent Users Table using reusable components -->
|
4
|
+
{% capture as table_actions silent %}
|
5
|
+
<span class="text-xs text-font-subtle-light dark:text-font-subtle-dark">Last 24 hours</span>
|
6
|
+
{% if user_admin_urls %}
|
7
|
+
<a href="{{ user_admin_urls.list }}" class="text-sm text-primary-600 hover:text-primary-700 dark:text-primary-500 dark:hover:text-primary-400 flex items-center">
|
8
|
+
View all
|
9
|
+
<span class="material-icons text-xs ml-1">arrow_forward</span>
|
10
|
+
</a>
|
11
|
+
{% else %}
|
12
|
+
<a href="/admin/accounts/customuser/" class="text-sm text-primary-600 hover:text-primary-700 dark:text-primary-500 dark:hover:text-primary-400 flex items-center">
|
13
|
+
View all
|
14
|
+
<span class="material-icons text-xs ml-1">arrow_forward</span>
|
15
|
+
</a>
|
16
|
+
{% endif %}
|
17
|
+
{% endcapture %}
|
18
|
+
|
4
19
|
<div class="bg-white dark:bg-base-900 rounded-lg border border-base-200 dark:border-base-700 overflow-hidden shadow-xs">
|
5
20
|
<!-- Card Header -->
|
6
21
|
<div class="px-6 py-4 border-b border-base-200 dark:border-base-700 bg-base-50 dark:bg-base-800">
|
@@ -10,18 +25,7 @@
|
|
10
25
|
<h3 class="text-lg font-semibold text-font-important-light dark:text-font-important-dark">Recent Users</h3>
|
11
26
|
</div>
|
12
27
|
<div class="flex items-center space-x-2">
|
13
|
-
|
14
|
-
{% if user_admin_urls %}
|
15
|
-
<a href="{{ user_admin_urls.list }}" class="text-sm text-primary-600 hover:text-primary-700 dark:text-primary-500 dark:hover:text-primary-400 flex items-center">
|
16
|
-
View all
|
17
|
-
<span class="material-icons text-xs ml-1">arrow_forward</span>
|
18
|
-
</a>
|
19
|
-
{% else %}
|
20
|
-
<a href="/admin/accounts/customuser/" class="text-sm text-primary-600 hover:text-primary-700 dark:text-primary-500 dark:hover:text-primary-400 flex items-center">
|
21
|
-
View all
|
22
|
-
<span class="material-icons text-xs ml-1">arrow_forward</span>
|
23
|
-
</a>
|
24
|
-
{% endif %}
|
28
|
+
{{ table_actions }}
|
25
29
|
</div>
|
26
30
|
</div>
|
27
31
|
</div>
|
@@ -47,53 +51,18 @@
|
|
47
51
|
{% for user in recent_users %}
|
48
52
|
<tr class="hover:bg-base-100 dark:hover:bg-base-800 transition-colors duration-150">
|
49
53
|
<td class="px-6 py-4 whitespace-nowrap">
|
50
|
-
|
51
|
-
<div class="h-8 w-8 bg-primary-100 dark:bg-primary-900/20 rounded-full flex items-center justify-center mr-3">
|
52
|
-
<span class="text-sm font-medium text-primary-600 dark:text-primary-400">
|
53
|
-
{{ user.username|default:user.email|slice:":1"|upper }}
|
54
|
-
</span>
|
55
|
-
</div>
|
56
|
-
<div>
|
57
|
-
<div class="text-sm font-medium text-font-default-light dark:text-font-default-dark">
|
58
|
-
{{ user.username|default:user.email|truncatechars:20 }}
|
59
|
-
</div>
|
60
|
-
{% if user.email and user.username %}
|
61
|
-
<div class="text-xs text-font-subtle-light dark:text-font-subtle-dark">
|
62
|
-
{{ user.email|truncatechars:30 }}
|
63
|
-
</div>
|
64
|
-
{% endif %}
|
65
|
-
</div>
|
66
|
-
</div>
|
54
|
+
{% include 'admin/components/user_avatar.html' with name=user.username email=user.email show_details=True %}
|
67
55
|
</td>
|
68
56
|
<td class="px-6 py-4 whitespace-nowrap">
|
69
|
-
{%
|
70
|
-
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400">
|
71
|
-
<span class="material-icons text-xs mr-1">check_circle</span>
|
72
|
-
Active
|
73
|
-
</span>
|
74
|
-
{% else %}
|
75
|
-
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-base-100 dark:bg-base-800 text-font-subtle-light dark:text-font-subtle-dark">
|
76
|
-
<span class="material-icons text-xs mr-1">cancel</span>
|
77
|
-
Inactive
|
78
|
-
</span>
|
79
|
-
{% endif %}
|
57
|
+
{% include 'admin/components/status_badge.html' with status=user.is_active|yesno:'active,inactive' %}
|
80
58
|
</td>
|
81
59
|
<td class="px-6 py-4 whitespace-nowrap">
|
82
60
|
{% if user.is_superuser %}
|
83
|
-
|
84
|
-
<span class="material-icons text-xs mr-1">admin_panel_settings</span>
|
85
|
-
Admin
|
86
|
-
</span>
|
61
|
+
{% include 'admin/components/status_badge.html' with status='error' text='Admin' icon='admin_panel_settings' %}
|
87
62
|
{% elif user.is_staff %}
|
88
|
-
|
89
|
-
<span class="material-icons text-xs mr-1">manage_accounts</span>
|
90
|
-
Staff
|
91
|
-
</span>
|
63
|
+
{% include 'admin/components/status_badge.html' with status='info' text='Staff' icon='manage_accounts' %}
|
92
64
|
{% else %}
|
93
|
-
|
94
|
-
<span class="material-icons text-xs mr-1">person</span>
|
95
|
-
User
|
96
|
-
</span>
|
65
|
+
{% include 'admin/components/status_badge.html' with status='' text='User' icon='person' %}
|
97
66
|
{% endif %}
|
98
67
|
</td>
|
99
68
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-font-subtle-light dark:text-font-subtle-dark">
|
@@ -1,68 +1,4 @@
|
|
1
1
|
{% load unfold %}
|
2
2
|
|
3
|
-
<!-- Modern Statistics Cards Grid -->
|
4
|
-
|
5
|
-
{% for card in cards %}
|
6
|
-
<div class="bg-white dark:bg-base-900 rounded-xl shadow-sm hover:shadow-md transition-all duration-300 border border-base-200 dark:border-base-700 overflow-hidden group">
|
7
|
-
<div class="p-5">
|
8
|
-
<div class="flex items-start justify-between">
|
9
|
-
<div class="flex-1">
|
10
|
-
<!-- Title -->
|
11
|
-
<div class="text-xs font-semibold text-font-subtle-light dark:text-font-subtle-dark uppercase tracking-wider mb-2">
|
12
|
-
{{ card.title }}
|
13
|
-
</div>
|
14
|
-
|
15
|
-
<!-- Value -->
|
16
|
-
<div class="text-2xl font-bold text-font-important-light dark:text-font-important-dark mb-1">
|
17
|
-
{{ card.value }}
|
18
|
-
</div>
|
19
|
-
|
20
|
-
<!-- Change indicator -->
|
21
|
-
{% if card.change %}
|
22
|
-
<div class="flex items-center">
|
23
|
-
<div class="flex items-center px-2 py-1 rounded-full text-xs font-medium
|
24
|
-
{% if card.change_type == 'positive' %}bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400
|
25
|
-
{% elif card.change_type == 'negative' %}bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400
|
26
|
-
{% else %}bg-base-100 dark:bg-base-800 text-font-default-light dark:text-font-default-dark{% endif %}">
|
27
|
-
|
28
|
-
<span class="material-icons text-xs mr-1">
|
29
|
-
{% if card.change_type == 'positive' %}arrow_upward
|
30
|
-
{% elif card.change_type == 'negative' %}arrow_downward
|
31
|
-
{% else %}remove{% endif %}
|
32
|
-
</span>
|
33
|
-
{{ card.change }}
|
34
|
-
</div>
|
35
|
-
</div>
|
36
|
-
{% endif %}
|
37
|
-
|
38
|
-
<!-- Description -->
|
39
|
-
{% if card.description %}
|
40
|
-
<div class="text-xs text-font-subtle-light dark:text-font-subtle-dark mt-1">
|
41
|
-
{{ card.description }}
|
42
|
-
</div>
|
43
|
-
{% endif %}
|
44
|
-
</div>
|
45
|
-
|
46
|
-
<!-- Icon -->
|
47
|
-
<div class="flex-shrink-0 ml-3">
|
48
|
-
<div class="w-10 h-10 flex items-center justify-center group-hover:scale-110 transition-transform duration-300">
|
49
|
-
<span class="material-icons text-2xl
|
50
|
-
{% if card.change_type == 'positive' %}text-green-600 dark:text-green-400
|
51
|
-
{% elif card.change_type == 'negative' %}text-red-600 dark:text-red-400
|
52
|
-
{% else %}text-primary-600 dark:text-primary-400{% endif %}">
|
53
|
-
{{ card.icon }}
|
54
|
-
</span>
|
55
|
-
</div>
|
56
|
-
</div>
|
57
|
-
</div>
|
58
|
-
</div>
|
59
|
-
|
60
|
-
<!-- Subtle bottom accent -->
|
61
|
-
<div class="h-1 w-full
|
62
|
-
{% if card.change_type == 'positive' %}bg-gradient-to-r from-green-400 to-green-600
|
63
|
-
{% elif card.change_type == 'negative' %}bg-gradient-to-r from-red-400 to-red-600
|
64
|
-
{% else %}bg-gradient-to-r from-primary-400 to-primary-600{% endif %}">
|
65
|
-
</div>
|
66
|
-
</div>
|
67
|
-
{% endfor %}
|
68
|
-
</div>
|
3
|
+
<!-- Modern Statistics Cards Grid using reusable component -->
|
4
|
+
{% include 'admin/components/stats_grid.html' with stats=cards cols=4 gap=4 class="mb-8 w-full" %}
|
@@ -1,72 +1,22 @@
|
|
1
1
|
{% load unfold %}
|
2
2
|
|
3
|
-
<!-- System Health Grid
|
3
|
+
<!-- System Health Grid using reusable components -->
|
4
4
|
<div class="mt-8 w-full">
|
5
|
-
|
6
|
-
<div class="flex items-center justify-center w-8 h-8 bg-green-100 dark:bg-green-900/20 rounded-lg mr-3">
|
7
|
-
<span class="material-icons text-green-600 dark:text-green-400 text-lg">health_and_safety</span>
|
8
|
-
</div>
|
9
|
-
<h2 class="text-xl font-semibold text-font-important-light dark:text-font-important-dark">
|
10
|
-
System Health
|
11
|
-
</h2>
|
12
|
-
</div>
|
5
|
+
{% include 'admin/components/section_header.html' with title='System Health' icon='health_and_safety' icon_color='green' %}
|
13
6
|
|
14
7
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 w-full">
|
15
8
|
{% for key, value in system_health.items %}
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
<span class="material-icons text-blue-600 dark:text-blue-400">folder</span>
|
28
|
-
{% else %}
|
29
|
-
<span class="material-icons text-font-subtle-light dark:text-font-subtle-dark">info</span>
|
30
|
-
{% endif %}
|
31
|
-
</div>
|
32
|
-
<div>
|
33
|
-
<div class="text-sm font-medium text-font-default-light dark:text-font-default-dark">
|
34
|
-
{% if key == "database_status" %}Database
|
35
|
-
{% elif key == "cache_status" %}Cache
|
36
|
-
{% elif key == "queue_status" %}Queue
|
37
|
-
{% elif key == "storage_status" %}Storage
|
38
|
-
{% else %}{{ key|title }}{% endif %}
|
39
|
-
</div>
|
40
|
-
<div class="text-xs text-font-subtle-light dark:text-font-subtle-dark mt-1">
|
41
|
-
{% if key == "database_status" %}Connection & queries
|
42
|
-
{% elif key == "cache_status" %}Redis & memory
|
43
|
-
{% elif key == "queue_status" %}Background jobs
|
44
|
-
{% elif key == "storage_status" %}Disk & files
|
45
|
-
{% else %}System component{% endif %}
|
46
|
-
</div>
|
47
|
-
</div>
|
48
|
-
</div>
|
49
|
-
|
50
|
-
<div class="flex-shrink-0">
|
51
|
-
{% if value == 'healthy' or value == 'ok' or value == 'connected' %}
|
52
|
-
<span class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-semibold bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400">
|
53
|
-
<span class="material-icons text-xs mr-1">check_circle</span>
|
54
|
-
{{ value|title }}
|
55
|
-
</span>
|
56
|
-
{% elif value == 'warning' or value == 'degraded' %}
|
57
|
-
<span class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-semibold bg-amber-100 dark:bg-amber-900/20 text-amber-600 dark:text-amber-400">
|
58
|
-
<span class="material-icons text-xs mr-1">warning</span>
|
59
|
-
{{ value|title }}
|
60
|
-
</span>
|
61
|
-
{% else %}
|
62
|
-
<span class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-semibold bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400">
|
63
|
-
<span class="material-icons text-xs mr-1">error</span>
|
64
|
-
{{ value|title }}
|
65
|
-
</span>
|
66
|
-
{% endif %}
|
67
|
-
</div>
|
68
|
-
</div>
|
69
|
-
</div>
|
9
|
+
{% if key == "database_status" %}
|
10
|
+
{% include 'admin/components/metric_card.html' with title='Database' description='Connection & queries' icon='storage' status=value|yesno:'healthy,error' status_text=value|title %}
|
11
|
+
{% elif key == "cache_status" %}
|
12
|
+
{% include 'admin/components/metric_card.html' with title='Cache' description='Redis & memory' icon='memory' status=value|yesno:'healthy,error' status_text=value|title %}
|
13
|
+
{% elif key == "queue_status" %}
|
14
|
+
{% include 'admin/components/metric_card.html' with title='Queue' description='Background jobs' icon='queue' status=value|yesno:'healthy,error' status_text=value|title %}
|
15
|
+
{% elif key == "storage_status" %}
|
16
|
+
{% include 'admin/components/metric_card.html' with title='Storage' description='Disk & files' icon='folder' status=value|yesno:'healthy,error' status_text=value|title %}
|
17
|
+
{% else %}
|
18
|
+
{% include 'admin/components/metric_card.html' with title=key|title description='System component' icon='info' status=value|yesno:'healthy,error' status_text=value|title %}
|
19
|
+
{% endif %}
|
70
20
|
{% endfor %}
|
71
21
|
</div>
|
72
22
|
</div>
|
@@ -2,17 +2,7 @@
|
|
2
2
|
|
3
3
|
<!-- System Metrics -->
|
4
4
|
<div class="mt-8 w-full">
|
5
|
-
|
6
|
-
<div class="flex items-center justify-center w-8 h-8 bg-blue-100 dark:bg-blue-900/20 rounded-lg mr-3">
|
7
|
-
<span class="material-icons text-blue-600 dark:text-blue-400 text-lg">analytics</span>
|
8
|
-
</div>
|
9
|
-
<h2 class="text-xl font-semibold text-font-important-light dark:text-font-important-dark">
|
10
|
-
System Metrics
|
11
|
-
</h2>
|
12
|
-
<span class="ml-auto text-xs text-font-subtle-light dark:text-font-subtle-dark bg-base-100 dark:bg-base-800 px-2 py-1 rounded-full">
|
13
|
-
Live Data
|
14
|
-
</span>
|
15
|
-
</div>
|
5
|
+
{% include 'admin/components/section_header.html' with title='System Metrics' icon='analytics' icon_color='blue' badge='Live Data' %}
|
16
6
|
|
17
7
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 w-full">
|
18
8
|
{% if system_metrics %}
|
@@ -27,8 +17,7 @@
|
|
27
17
|
{% else %}text-red-600 dark:text-red-400{% endif %} mr-2">storage</span>
|
28
18
|
<span class="text-sm text-font-subtle-light dark:text-font-subtle-dark">{{ system_metrics.database.type }}</span>
|
29
19
|
</div>
|
30
|
-
{%
|
31
|
-
{% endcomponent %}
|
20
|
+
{% include 'admin/components/progress_bar.html' with value=system_metrics.database.health_percentage title="Connection Health" description=system_metrics.database.description %}
|
32
21
|
{% endcomponent %}
|
33
22
|
</div>
|
34
23
|
{% endif %}
|
@@ -44,8 +33,7 @@
|
|
44
33
|
{% else %}text-red-600 dark:text-red-400{% endif %} mr-2">memory</span>
|
45
34
|
<span class="text-sm text-font-subtle-light dark:text-font-subtle-dark">{{ system_metrics.cache.type }}</span>
|
46
35
|
</div>
|
47
|
-
{%
|
48
|
-
{% endcomponent %}
|
36
|
+
{% include 'admin/components/progress_bar.html' with value=system_metrics.cache.health_percentage title="Performance" description=system_metrics.cache.description %}
|
49
37
|
{% endcomponent %}
|
50
38
|
</div>
|
51
39
|
{% endif %}
|
@@ -61,8 +49,7 @@
|
|
61
49
|
{% else %}text-gray-600 dark:text-gray-400{% endif %} mr-2">folder</span>
|
62
50
|
<span class="text-sm text-font-subtle-light dark:text-font-subtle-dark">{{ system_metrics.storage.type }}</span>
|
63
51
|
</div>
|
64
|
-
{%
|
65
|
-
{% endcomponent %}
|
52
|
+
{% include 'admin/components/progress_bar.html' with value=system_metrics.storage.health_percentage title="Usage" description=system_metrics.storage.description %}
|
66
53
|
{% endcomponent %}
|
67
54
|
</div>
|
68
55
|
{% endif %}
|
@@ -78,8 +65,7 @@
|
|
78
65
|
{% else %}text-red-600 dark:text-red-400{% endif %} mr-2">api</span>
|
79
66
|
<span class="text-sm text-font-subtle-light dark:text-font-subtle-dark">{{ system_metrics.api.type }}</span>
|
80
67
|
</div>
|
81
|
-
{%
|
82
|
-
{% endcomponent %}
|
68
|
+
{% include 'admin/components/progress_bar.html' with value=system_metrics.api.health_percentage title="URL Patterns" description=system_metrics.api.description %}
|
83
69
|
{% endcomponent %}
|
84
70
|
</div>
|
85
71
|
{% endif %}
|
@@ -91,8 +77,7 @@
|
|
91
77
|
<span class="material-icons text-green-600 dark:text-green-400 mr-2">storage</span>
|
92
78
|
<span class="text-sm text-font-subtle-light dark:text-font-subtle-dark">PostgreSQL</span>
|
93
79
|
</div>
|
94
|
-
{%
|
95
|
-
{% endcomponent %}
|
80
|
+
{% include 'admin/components/progress_bar.html' with value=85 title="Connection Health" description="Healthy - 85%" %}
|
96
81
|
{% endcomponent %}
|
97
82
|
</div>
|
98
83
|
|
@@ -102,8 +87,7 @@
|
|
102
87
|
<span class="material-icons text-primary-600 dark:text-primary-500 mr-2">memory</span>
|
103
88
|
<span class="text-sm text-font-subtle-light dark:text-font-subtle-dark">Memory Cache</span>
|
104
89
|
</div>
|
105
|
-
{%
|
106
|
-
{% endcomponent %}
|
90
|
+
{% include 'admin/components/progress_bar.html' with value=90 title="Performance" description="Optimal - 90%" %}
|
107
91
|
{% endcomponent %}
|
108
92
|
</div>
|
109
93
|
|
@@ -113,8 +97,7 @@
|
|
113
97
|
<span class="material-icons text-amber-600 dark:text-amber-400 mr-2">folder</span>
|
114
98
|
<span class="text-sm text-font-subtle-light dark:text-font-subtle-dark">Disk Space</span>
|
115
99
|
</div>
|
116
|
-
{%
|
117
|
-
{% endcomponent %}
|
100
|
+
{% include 'admin/components/progress_bar.html' with value=67 title="Usage" description="67% used (33% free)" %}
|
118
101
|
{% endcomponent %}
|
119
102
|
</div>
|
120
103
|
{% endif %}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<!-- Commands Tab Content -->
|
4
4
|
<div class="space-y-8">
|
5
5
|
<!-- Header -->
|
6
|
-
<div class="
|
6
|
+
<div class="">
|
7
7
|
<div class="flex items-center justify-between mb-6">
|
8
8
|
<div>
|
9
9
|
<h1 class="text-2xl font-bold text-font-important-light dark:text-font-important-dark">Django Commands</h1>
|
@@ -1,9 +1,9 @@
|
|
1
1
|
{% load unfold %}
|
2
2
|
|
3
3
|
<!-- Overview Tab Content -->
|
4
|
-
<div class="space-y-10">
|
4
|
+
<div class="space-y-10 flex flex-col gap-8">
|
5
5
|
<!-- Hero Section with Key Metrics -->
|
6
|
-
<div
|
6
|
+
<div>
|
7
7
|
<div class="flex items-center justify-between mb-6">
|
8
8
|
<div>
|
9
9
|
<h1 class="text-2xl font-bold text-font-important-light dark:text-font-important-dark">System Overview</h1>
|
@@ -22,7 +22,7 @@
|
|
22
22
|
</div>
|
23
23
|
|
24
24
|
<!-- Primary Dashboard Row -->
|
25
|
-
<div class="grid grid-cols-1 xl:grid-cols-3 gap
|
25
|
+
<div class="grid grid-cols-1 xl:grid-cols-3" style="gap: 2rem;">
|
26
26
|
<!-- Main Content Area -->
|
27
27
|
<div class="xl:col-span-2 space-y-8">
|
28
28
|
<!-- Charts Section -->
|
@@ -70,7 +70,7 @@
|
|
70
70
|
</div>
|
71
71
|
|
72
72
|
<!-- Secondary Metrics Row -->
|
73
|
-
<div class="grid grid-cols-1 lg:grid-cols-2 gap
|
73
|
+
<div class="grid grid-cols-1 lg:grid-cols-2 ье" style="gap: 2rem;">
|
74
74
|
<!-- System Metrics -->
|
75
75
|
<div class="bg-white dark:bg-base-900 rounded-lg border border-base-200 dark:border-base-700 shadow-xs">
|
76
76
|
<div class="p-6 border-b border-base-200 dark:border-base-700">
|
@@ -1,21 +1,12 @@
|
|
1
1
|
{% load unfold %}
|
2
2
|
|
3
|
-
<!-- API Zones Table
|
3
|
+
<!-- API Zones Table using reusable components -->
|
4
4
|
<div class="w-full">
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
API Zones
|
11
|
-
</h2>
|
12
|
-
<p class="text-sm text-font-subtle-light dark:text-font-subtle-dark mt-1">
|
13
|
-
Configure and monitor API zone access and permissions
|
14
|
-
</p>
|
15
|
-
</div>
|
16
|
-
</div>
|
17
|
-
|
18
|
-
</div>
|
5
|
+
{% capture as zone_subtitle silent %}
|
6
|
+
Configure and monitor API zone access and permissions
|
7
|
+
{% endcapture %}
|
8
|
+
|
9
|
+
{% include 'admin/components/section_header.html' with title='API Zones' icon='public' icon_color='blue' %}
|
19
10
|
|
20
11
|
<div class="bg-white dark:bg-base-900 rounded-lg border border-base-200 dark:border-base-700 overflow-hidden shadow-sm max-w-full">
|
21
12
|
{% if zones_table.rows %}
|
@@ -35,8 +26,8 @@
|
|
35
26
|
<tr class="hover:bg-base-100 dark:hover:bg-base-800 transition-colors duration-150">
|
36
27
|
<td class="px-6 py-4 whitespace-nowrap">
|
37
28
|
<div class="flex items-center">
|
38
|
-
<div class="flex-shrink-0">
|
39
|
-
<div class="h-8 w-8 bg-primary-100 dark:bg-primary-900/20 rounded-lg flex items-center justify-center
|
29
|
+
<div class="flex-shrink-0 mr-3">
|
30
|
+
<div class="h-8 w-8 bg-primary-100 dark:bg-primary-900/20 rounded-lg flex items-center justify-center">
|
40
31
|
<span class="material-icons text-sm text-primary-600 dark:text-primary-400">
|
41
32
|
{% if row.name == 'public' %}public
|
42
33
|
{% elif row.name == 'internal' %}corporate_fare
|
@@ -82,25 +73,13 @@
|
|
82
73
|
</td>
|
83
74
|
<td class="px-6 py-4 whitespace-nowrap">
|
84
75
|
{% if row.status == 'active' or row.status == 'enabled' %}
|
85
|
-
|
86
|
-
<span class="material-icons text-xs mr-1">check_circle</span>
|
87
|
-
Active
|
88
|
-
</span>
|
76
|
+
{% include 'admin/components/status_badge.html' with status='active' text='Active' %}
|
89
77
|
{% elif row.status == 'maintenance' %}
|
90
|
-
|
91
|
-
<span class="material-icons text-xs mr-1">build</span>
|
92
|
-
Maintenance
|
93
|
-
</span>
|
78
|
+
{% include 'admin/components/status_badge.html' with status='warning' text='Maintenance' icon='build' %}
|
94
79
|
{% elif row.status == 'disabled' %}
|
95
|
-
|
96
|
-
<span class="material-icons text-xs mr-1">block</span>
|
97
|
-
Disabled
|
98
|
-
</span>
|
80
|
+
{% include 'admin/components/status_badge.html' with status='error' text='Disabled' icon='block' %}
|
99
81
|
{% else %}
|
100
|
-
|
101
|
-
<span class="material-icons text-xs mr-1">help</span>
|
102
|
-
{{ row.status|title }}
|
103
|
-
</span>
|
82
|
+
{% include 'admin/components/status_badge.html' with status='' text=row.status|title icon='help' %}
|
104
83
|
{% endif %}
|
105
84
|
</td>
|
106
85
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
|
@@ -14,7 +14,8 @@ def lib_name():
|
|
14
14
|
"""Get the library name."""
|
15
15
|
# Lazy import to avoid AppRegistryNotReady error
|
16
16
|
from django_cfg.config import LIB_NAME
|
17
|
-
|
17
|
+
from django_cfg import __version__
|
18
|
+
return f"{LIB_NAME} ({__version__})"
|
18
19
|
|
19
20
|
|
20
21
|
@register.simple_tag
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: django-cfg
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.8
|
4
4
|
Summary: 🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one.
|
5
5
|
Project-URL: Homepage, https://django-cfg.com
|
6
6
|
Project-URL: Documentation, https://django-cfg.com
|
@@ -110,6 +110,7 @@ Requires-Dist: pymdown-extensions<11.0,>=10.16; extra == 'docs'
|
|
110
110
|
Provides-Extra: full
|
111
111
|
Requires-Dist: django<6.0,>=5.2; extra == 'full'
|
112
112
|
Requires-Dist: redis<7.0,>=6.4.0; extra == 'full'
|
113
|
+
Provides-Extra: local
|
113
114
|
Provides-Extra: tasks
|
114
115
|
Requires-Dist: redis<7.0,>=6.4.0; extra == 'tasks'
|
115
116
|
Provides-Extra: test
|