django-cfg 1.4.88__py3-none-any.whl → 1.4.89__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/apps/centrifugo/views/__init__.py +0 -2
- django_cfg/apps/dashboard/services/__init__.py +2 -0
- django_cfg/apps/dashboard/services/overview_service.py +205 -0
- django_cfg/apps/frontend/test_routing.py +134 -0
- django_cfg/apps/frontend/views.py +69 -28
- django_cfg/apps/urls.py +0 -1
- django_cfg/core/builders/apps_builder.py +0 -58
- django_cfg/modules/django_unfold/__init__.py +5 -24
- django_cfg/modules/django_unfold/models/__init__.py +0 -23
- django_cfg/modules/django_unfold/models/config.py +11 -65
- django_cfg/modules/django_unfold/{dashboard.py → navigation.py} +21 -152
- django_cfg/modules/django_unfold/tailwind.py +2 -4
- django_cfg/pyproject.toml +1 -1
- django_cfg/registry/third_party.py +0 -9
- django_cfg/routing/callbacks.py +1 -43
- django_cfg/static/frontend/admin/404/index.html +1 -1
- django_cfg/static/frontend/admin/404.html +1 -1
- django_cfg/static/frontend/admin/500/index.html +1 -1
- django_cfg/static/frontend/admin/_next/static/{D_d9HRw5Yn7BRHAX5q89_ → 0sN9ktsgXH48ygtGSrhfu}/_buildManifest.js +1 -1
- django_cfg/static/frontend/admin/_next/static/chunks/50314-9443faa6df24aebf.js +1 -0
- django_cfg/static/frontend/admin/_next/static/chunks/pages/{_app-1c0fff0f59a6d683.js → _app-c7dcd3aa616fab68.js} +1 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/private/{centrifugo-44a8313fa040e9ad.js → centrifugo-f9ecbc3ae0052a03.js} +1 -1
- django_cfg/static/frontend/admin/auth/index.html +1 -1
- django_cfg/static/frontend/admin/index.html +1 -1
- django_cfg/static/frontend/admin/legal/cookies/index.html +1 -1
- django_cfg/static/frontend/admin/legal/privacy/index.html +1 -1
- django_cfg/static/frontend/admin/legal/security/index.html +1 -1
- django_cfg/static/frontend/admin/legal/terms/index.html +1 -1
- django_cfg/static/frontend/admin/private/centrifugo/index.html +1 -1
- django_cfg/static/frontend/admin/private/index.html +1 -1
- django_cfg/static/frontend/admin/private/profile/index.html +1 -1
- django_cfg/static/frontend/admin/private/ui/index.html +2 -2
- {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/METADATA +1 -1
- {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/RECORD +39 -143
- django_cfg/apps/centrifugo/static/django_cfg_centrifugo/css/dashboard.css +0 -260
- django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_channels.mjs +0 -313
- django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_testing.mjs +0 -803
- django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/main.mjs +0 -341
- django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/overview.mjs +0 -432
- django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/testing.mjs +0 -33
- django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/websocket.mjs +0 -210
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/channels_content.html +0 -46
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/live_channels_content.html +0 -123
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/overview_content.html +0 -45
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/publishes_content.html +0 -84
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/stat_cards.html +0 -53
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/system_status.html +0 -91
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/tab_navigation.html +0 -29
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/testing_tools.html +0 -415
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/layout/base.html +0 -61
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/pages/dashboard.html +0 -58
- django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/tags/connection_script.html +0 -48
- django_cfg/apps/centrifugo/templatetags/__init__.py +0 -1
- django_cfg/apps/centrifugo/templatetags/centrifugo_tags.py +0 -81
- django_cfg/apps/centrifugo/urls_admin.py +0 -20
- django_cfg/apps/centrifugo/views/dashboard.py +0 -28
- django_cfg/modules/django_dashboard/__init__.py +0 -23
- django_cfg/modules/django_dashboard/components.py +0 -312
- django_cfg/modules/django_dashboard/debug.py +0 -174
- django_cfg/modules/django_dashboard/management/__init__.py +0 -0
- django_cfg/modules/django_dashboard/management/commands/__init__.py +0 -0
- django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +0 -109
- django_cfg/modules/django_dashboard/sections/__init__.py +0 -1
- django_cfg/modules/django_dashboard/sections/base.py +0 -129
- django_cfg/modules/django_dashboard/sections/commands.py +0 -33
- django_cfg/modules/django_dashboard/sections/documentation.py +0 -393
- django_cfg/modules/django_dashboard/sections/overview.py +0 -398
- django_cfg/modules/django_dashboard/sections/stats.py +0 -48
- django_cfg/modules/django_dashboard/sections/system.py +0 -74
- django_cfg/modules/django_dashboard/sections/widgets.py +0 -222
- django_cfg/modules/django_unfold/callbacks/__init__.py +0 -9
- django_cfg/modules/django_unfold/callbacks/actions.py +0 -51
- django_cfg/modules/django_unfold/callbacks/apizones.py +0 -122
- django_cfg/modules/django_unfold/callbacks/base.py +0 -290
- django_cfg/modules/django_unfold/callbacks/charts.py +0 -223
- django_cfg/modules/django_unfold/callbacks/commands.py +0 -40
- django_cfg/modules/django_unfold/callbacks/main.py +0 -322
- django_cfg/modules/django_unfold/callbacks/statistics.py +0 -240
- django_cfg/modules/django_unfold/callbacks/system.py +0 -180
- django_cfg/modules/django_unfold/callbacks/users.py +0 -65
- django_cfg/modules/django_unfold/models/dashboard.py +0 -207
- django_cfg/modules/django_unfold/models/tabs.py +0 -26
- django_cfg/modules/django_unfold/models.py +0 -98
- django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +0 -102
- django_cfg/static/frontend/admin/_next/static/chunks/50314-5ec79b293c2283dd.js +0 -1
- django_cfg/templates/admin/sections/commands_section.html +0 -5
- django_cfg/templates/admin/sections/documentation_section.html +0 -5
- django_cfg/templates/admin/sections/overview_section.html +0 -5
- django_cfg/templates/admin/sections/stats_section.html +0 -5
- django_cfg/templates/admin/sections/system_section.html +0 -5
- django_cfg/templates/admin/sections/widgets_section.html +0 -11
- django_cfg/templates/admin_old/components/action_grid.html +0 -49
- django_cfg/templates/admin_old/components/card.html +0 -50
- django_cfg/templates/admin_old/components/data_table.html +0 -67
- django_cfg/templates/admin_old/components/metric_card.html +0 -39
- django_cfg/templates/admin_old/components/modal.html +0 -58
- django_cfg/templates/admin_old/components/progress_bar.html +0 -20
- django_cfg/templates/admin_old/components/section_header.html +0 -26
- django_cfg/templates/admin_old/components/stat_item.html +0 -32
- django_cfg/templates/admin_old/components/stats_grid.html +0 -72
- django_cfg/templates/admin_old/components/status_badge.html +0 -28
- django_cfg/templates/admin_old/components/user_avatar.html +0 -27
- django_cfg/templates/admin_old/constance/change_list.html +0 -74
- django_cfg/templates/admin_old/constance/includes/default_value.html +0 -24
- django_cfg/templates/admin_old/constance/includes/fieldset_header.html +0 -15
- django_cfg/templates/admin_old/constance/includes/results_list.html +0 -16
- django_cfg/templates/admin_old/constance/includes/setting_row.html +0 -50
- django_cfg/templates/admin_old/constance/includes/table_headers.html +0 -10
- django_cfg/templates/admin_old/examples/component_class_example.html +0 -156
- django_cfg/templates/admin_old/import_export/change_list_export.html +0 -24
- django_cfg/templates/admin_old/import_export/change_list_import.html +0 -24
- django_cfg/templates/admin_old/import_export/change_list_import_export.html +0 -34
- django_cfg/templates/admin_old/index.html +0 -80
- django_cfg/templates/admin_old/index_new.html +0 -119
- django_cfg/templates/admin_old/layouts/base_dashboard.html +0 -62
- django_cfg/templates/admin_old/layouts/dashboard_with_tabs.html +0 -176
- django_cfg/templates/admin_old/sections/commands_section.html +0 -549
- django_cfg/templates/admin_old/sections/documentation_section.html +0 -152
- django_cfg/templates/admin_old/sections/overview_section.html +0 -112
- django_cfg/templates/admin_old/sections/stats_section.html +0 -35
- django_cfg/templates/admin_old/sections/system_section.html +0 -99
- django_cfg/templates/admin_old/sections/widgets_section.html +0 -129
- django_cfg/templates/admin_old/snippets/components/activity_tracker.html +0 -70
- django_cfg/templates/admin_old/snippets/components/charts_section.html +0 -113
- django_cfg/templates/admin_old/snippets/components/django_commands.html +0 -270
- django_cfg/templates/admin_old/snippets/components/quick_actions.html +0 -66
- django_cfg/templates/admin_old/snippets/components/recent_activity_improved.html +0 -25
- django_cfg/templates/admin_old/snippets/components/recent_users_table.html +0 -102
- django_cfg/templates/admin_old/snippets/components/stats_cards.html +0 -4
- django_cfg/templates/admin_old/snippets/components/stats_tiles.html +0 -92
- django_cfg/templates/admin_old/snippets/components/system_health.html +0 -22
- django_cfg/templates/admin_old/snippets/components/system_metrics.html +0 -199
- django_cfg/templates/admin_old/snippets/components/user_permissions.html +0 -57
- django_cfg/templates/admin_old/snippets/tabs/app_stats_tab.html +0 -201
- django_cfg/templates/admin_old/snippets/tabs/commands_tab.html +0 -114
- django_cfg/templates/admin_old/snippets/tabs/documentation_tab.html +0 -42
- django_cfg/templates/admin_old/snippets/tabs/overview_tab.html +0 -116
- django_cfg/templates/admin_old/snippets/tabs/stats_tab.html +0 -89
- django_cfg/templates/admin_old/snippets/tabs/users_tab.html +0 -51
- django_cfg/templates/admin_old/snippets/tabs/widgets_tab.html +0 -38
- django_cfg/templates/admin_old/snippets/zones/zones_table.html +0 -176
- /django_cfg/static/frontend/admin/_next/static/{D_d9HRw5Yn7BRHAX5q89_ → 0sN9ktsgXH48ygtGSrhfu}/_ssgManifest.js +0 -0
- {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{% comment %}
|
|
2
|
-
Widgets Section - Legacy Template
|
|
3
|
-
This template is kept for backward compatibility with django_dashboard callbacks.
|
|
4
|
-
The actual dashboard is now rendered by Next.js in the iframe.
|
|
5
|
-
{% endcomment %}
|
|
6
|
-
|
|
7
|
-
<!-- Empty section - widgets are rendered in Next.js iframe -->
|
|
8
|
-
<div class="hidden">
|
|
9
|
-
<!-- This section is intentionally empty -->
|
|
10
|
-
<!-- Dashboard widgets are now rendered by Next.js Admin Panel -->
|
|
11
|
-
</div>
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Action Grid Component -->
|
|
4
|
-
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
5
|
-
{% for action in actions %}
|
|
6
|
-
<a href="{{ action.link }}"
|
|
7
|
-
class="group flex items-center p-4 theme-card rounded-lg border theme-border hover:border-blue-600 dark:hover:border-blue-500 hover:shadow-md transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2">
|
|
8
|
-
|
|
9
|
-
<!-- Icon -->
|
|
10
|
-
<div class="flex-shrink-0 mr-4">
|
|
11
|
-
<div class="p-2 rounded-lg transition-colors duration-200
|
|
12
|
-
{% if action.color == 'primary' %}bg-blue-100 dark:bg-blue-900/20 group-hover:bg-blue-200 dark:group-hover:bg-blue-800/30
|
|
13
|
-
{% elif action.color == 'success' %}bg-green-100 dark:bg-green-900/20 group-hover:bg-green-200 dark:group-hover:bg-green-800/30
|
|
14
|
-
{% elif action.color == 'warning' %}bg-amber-100 dark:bg-amber-900/20 group-hover:bg-amber-200 dark:group-hover:bg-amber-800/30
|
|
15
|
-
{% elif action.color == 'danger' %}bg-red-100 dark:bg-red-900/20 group-hover:bg-red-200 dark:group-hover:bg-red-800/30
|
|
16
|
-
{% else %}bg-gray-100 dark:bg-gray-800 group-hover:bg-gray-200 dark:group-hover:bg-gray-700{% endif %}">
|
|
17
|
-
|
|
18
|
-
<span class="material-icons text-lg
|
|
19
|
-
{% if action.color == 'primary' %}text-blue-600 dark:text-blue-400
|
|
20
|
-
{% elif action.color == 'success' %}text-green-600 dark:text-green-400
|
|
21
|
-
{% elif action.color == 'warning' %}text-amber-600 dark:text-amber-400
|
|
22
|
-
{% elif action.color == 'danger' %}text-red-600 dark:text-red-400
|
|
23
|
-
{% else %}text-gray-600 dark:text-gray-400{% endif %}">
|
|
24
|
-
{{ action.icon }}
|
|
25
|
-
</span>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<!-- Content -->
|
|
30
|
-
<div class="flex-1 min-w-0">
|
|
31
|
-
<h3 class="text-sm font-medium theme-text group-hover:text-blue-600 dark:group-hover:text-blue-500 transition-colors duration-200">
|
|
32
|
-
{{ action.title }}
|
|
33
|
-
</h3>
|
|
34
|
-
{% if action.description %}
|
|
35
|
-
<p class="text-xs text-gray-500 dark:text-gray-400 mt-1 line-clamp-2">
|
|
36
|
-
{{ action.description }}
|
|
37
|
-
</p>
|
|
38
|
-
{% endif %}
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<!-- Arrow -->
|
|
42
|
-
<div class="flex-shrink-0 ml-2">
|
|
43
|
-
<span class="material-icons text-gray-400 dark:text-gray-500 group-hover:text-blue-600 dark:group-hover:text-blue-500 transition-colors duration-200">
|
|
44
|
-
arrow_forward
|
|
45
|
-
</span>
|
|
46
|
-
</div>
|
|
47
|
-
</a>
|
|
48
|
-
{% endfor %}
|
|
49
|
-
</div>
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Enhanced Card Component following Unfold patterns -->
|
|
4
|
-
<div class="bg-white dark:bg-base-900 rounded-lg border border-base-200 dark:border-base-700 shadow-xs overflow-hidden {% if hover %}hover:shadow-md hover:border-base-300 dark:hover:border-base-600 transition-all duration-200{% endif %}{% if class %} {{ class }}{% endif %}">
|
|
5
|
-
|
|
6
|
-
<!-- Card Header -->
|
|
7
|
-
{% if title or header_actions %}
|
|
8
|
-
<div class="p-6 border-b border-base-200 dark:border-base-700 {% if header_bg %}{{ header_bg }}{% else %}bg-base-50 dark:bg-base-800{% endif %}">
|
|
9
|
-
<div class="flex items-center justify-between">
|
|
10
|
-
{% if title %}
|
|
11
|
-
<div class="flex items-center space-x-3">
|
|
12
|
-
{% if icon %}
|
|
13
|
-
<div class="flex items-center justify-center w-8 h-8 bg-{{ icon_color|default:'primary' }}-100 dark:bg-{{ icon_color|default:'primary' }}-900/20 rounded-lg">
|
|
14
|
-
<span class="material-icons text-{{ icon_color|default:'primary' }}-600 dark:text-{{ icon_color|default:'primary' }}-400 text-lg">{{ icon }}</span>
|
|
15
|
-
</div>
|
|
16
|
-
{% endif %}
|
|
17
|
-
<div>
|
|
18
|
-
<h3 class="text-lg font-semibold text-font-important-light dark:text-font-important-dark">
|
|
19
|
-
{{ title }}
|
|
20
|
-
</h3>
|
|
21
|
-
{% if subtitle %}
|
|
22
|
-
<p class="text-sm text-font-subtle-light dark:text-font-subtle-dark mt-1">
|
|
23
|
-
{{ subtitle }}
|
|
24
|
-
</p>
|
|
25
|
-
{% endif %}
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
{% endif %}
|
|
29
|
-
|
|
30
|
-
{% if header_actions %}
|
|
31
|
-
<div class="flex items-center space-x-2">
|
|
32
|
-
{{ header_actions }}
|
|
33
|
-
</div>
|
|
34
|
-
{% endif %}
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
{% endif %}
|
|
38
|
-
|
|
39
|
-
<!-- Card Body -->
|
|
40
|
-
<div class="p-6{% if compact %} p-4{% endif %}">
|
|
41
|
-
{{ content }}
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<!-- Card Footer -->
|
|
45
|
-
{% if footer %}
|
|
46
|
-
<div class="px-6 py-4 border-t border-base-200 dark:border-base-700 bg-base-50 dark:bg-base-800">
|
|
47
|
-
{{ footer }}
|
|
48
|
-
</div>
|
|
49
|
-
{% endif %}
|
|
50
|
-
</div>
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Data Table Component -->
|
|
4
|
-
<div class="bg-white dark:bg-base-900 rounded-lg border border-base-200 dark:border-base-700 overflow-hidden shadow-xs">
|
|
5
|
-
|
|
6
|
-
<!-- Table Header -->
|
|
7
|
-
{% if title or actions %}
|
|
8
|
-
<div class="px-6 py-4 border-b border-base-200 dark:border-base-700 bg-base-50 dark:bg-base-800">
|
|
9
|
-
<div class="flex items-center justify-between">
|
|
10
|
-
{% if title %}
|
|
11
|
-
<div class="flex items-center">
|
|
12
|
-
{% if icon %}
|
|
13
|
-
<span class="material-icons text-primary-600 mr-2">{{ icon }}</span>
|
|
14
|
-
{% endif %}
|
|
15
|
-
<h3 class="text-lg font-semibold text-font-important-light dark:text-font-important-dark">{{ title }}</h3>
|
|
16
|
-
</div>
|
|
17
|
-
{% endif %}
|
|
18
|
-
|
|
19
|
-
{% if actions %}
|
|
20
|
-
<div class="flex items-center space-x-2">
|
|
21
|
-
{{ actions }}
|
|
22
|
-
</div>
|
|
23
|
-
{% endif %}
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
{% endif %}
|
|
27
|
-
|
|
28
|
-
<!-- Table Content -->
|
|
29
|
-
<div class="overflow-x-auto">
|
|
30
|
-
<table class="w-full">
|
|
31
|
-
{% if headers %}
|
|
32
|
-
<thead class="bg-base-50 dark:bg-base-800">
|
|
33
|
-
<tr>
|
|
34
|
-
{% for header in headers %}
|
|
35
|
-
<th class="px-6 py-3 text-left text-xs font-medium text-font-subtle-light dark:text-font-subtle-dark uppercase tracking-wider">
|
|
36
|
-
{{ header }}
|
|
37
|
-
</th>
|
|
38
|
-
{% endfor %}
|
|
39
|
-
</tr>
|
|
40
|
-
</thead>
|
|
41
|
-
{% endif %}
|
|
42
|
-
|
|
43
|
-
<tbody class="bg-white dark:bg-base-900 divide-y divide-base-200 dark:divide-base-700">
|
|
44
|
-
{% if rows %}
|
|
45
|
-
{% for row in rows %}
|
|
46
|
-
<tr class="hover:bg-base-100 dark:hover:bg-base-800 transition-colors duration-150">
|
|
47
|
-
{% for cell in row %}
|
|
48
|
-
<td class="px-6 py-4 whitespace-nowrap">
|
|
49
|
-
{{ cell }}
|
|
50
|
-
</td>
|
|
51
|
-
{% endfor %}
|
|
52
|
-
</tr>
|
|
53
|
-
{% endfor %}
|
|
54
|
-
{% else %}
|
|
55
|
-
<tr>
|
|
56
|
-
<td colspan="{{ headers|length|default:'5' }}" class="px-6 py-8 text-center">
|
|
57
|
-
<div class="flex flex-col items-center">
|
|
58
|
-
<span class="material-icons text-4xl text-base-400 dark:text-base-500 mb-2">{{ empty_icon|default:'inbox' }}</span>
|
|
59
|
-
<p class="text-font-subtle-light dark:text-font-subtle-dark">{{ empty_message|default:'No data available' }}</p>
|
|
60
|
-
</div>
|
|
61
|
-
</td>
|
|
62
|
-
</tr>
|
|
63
|
-
{% endif %}
|
|
64
|
-
</tbody>
|
|
65
|
-
</table>
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Metric Card Component -->
|
|
4
|
-
<div class="theme-card rounded-lg p-5 border theme-border hover:shadow-md transition-shadow duration-200">
|
|
5
|
-
<div class="flex items-center justify-between">
|
|
6
|
-
<div class="flex items-center space-x-3">
|
|
7
|
-
<div class="flex-shrink-0">
|
|
8
|
-
<span class="material-icons
|
|
9
|
-
{% if status == 'healthy' or status == 'success' %}text-green-600 dark:text-green-400
|
|
10
|
-
{% elif status == 'warning' %}text-amber-600 dark:text-amber-400
|
|
11
|
-
{% elif status == 'error' or status == 'failed' %}text-red-600 dark:text-red-400
|
|
12
|
-
{% elif status == 'info' %}text-blue-600 dark:text-blue-400
|
|
13
|
-
{% else %}text-blue-600 dark:text-blue-400{% endif %}">
|
|
14
|
-
{{ icon }}
|
|
15
|
-
</span>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="min-w-0 flex-1">
|
|
18
|
-
<div class="text-sm font-medium theme-text truncate">
|
|
19
|
-
{{ title }}
|
|
20
|
-
</div>
|
|
21
|
-
{% if description %}
|
|
22
|
-
<div class="text-xs text-gray-500 dark:text-gray-400 mt-1 truncate">
|
|
23
|
-
{{ description }}
|
|
24
|
-
</div>
|
|
25
|
-
{% endif %}
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<div class="flex-shrink-0">
|
|
30
|
-
{% include 'admin/components/status_badge.html' with status=status text=status_text %}
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
|
|
34
|
-
{% if progress %}
|
|
35
|
-
<div class="mt-4">
|
|
36
|
-
{% include 'admin/components/progress_bar.html' with value=progress title=progress_title description=progress_description %}
|
|
37
|
-
</div>
|
|
38
|
-
{% endif %}
|
|
39
|
-
</div>
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Reusable Modal Component based on Unfold patterns -->
|
|
4
|
-
<div id="{{ modal_id|default:'modal' }}" class="fixed inset-0 bg-black/80 backdrop-blur-sm hidden z-50">
|
|
5
|
-
<div class="flex items-center justify-center min-h-screen p-4">
|
|
6
|
-
<div class="bg-white dark:bg-base-900 rounded-lg shadow-2xl max-w-{{ max_width|default:'4xl' }} w-full max-h-[80vh] flex flex-col border border-base-200 dark:border-base-700">
|
|
7
|
-
|
|
8
|
-
<!-- Modal Header -->
|
|
9
|
-
{% if title or closable %}
|
|
10
|
-
<div class="flex items-center justify-between p-4 border-b border-base-200 dark:border-base-700 bg-base-50 dark:bg-base-800">
|
|
11
|
-
{% if title %}
|
|
12
|
-
<div class="flex items-center space-x-3">
|
|
13
|
-
{% if icon %}
|
|
14
|
-
<div class="flex items-center justify-center w-10 h-10 bg-primary-100 dark:bg-primary-900/20 rounded-lg">
|
|
15
|
-
<span class="material-icons text-primary-600 dark:text-primary-400">{{ icon }}</span>
|
|
16
|
-
</div>
|
|
17
|
-
{% endif %}
|
|
18
|
-
<div>
|
|
19
|
-
<h3 class="text-lg font-semibold text-font-important-light dark:text-font-important-dark">
|
|
20
|
-
{{ title }}
|
|
21
|
-
</h3>
|
|
22
|
-
{% if subtitle %}
|
|
23
|
-
<p class="text-sm text-font-subtle-light dark:text-font-subtle-dark">
|
|
24
|
-
{{ subtitle }}
|
|
25
|
-
</p>
|
|
26
|
-
{% endif %}
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
{% endif %}
|
|
30
|
-
|
|
31
|
-
{% if closable %}
|
|
32
|
-
<button @click="{{ close_function|default:'close' }}" class="p-2 text-font-subtle-light dark:text-font-subtle-dark hover:text-font-default-light dark:hover:text-font-default-dark hover:bg-base-100 dark:hover:bg-base-700 rounded-lg transition-colors">
|
|
33
|
-
<span class="material-icons">close</span>
|
|
34
|
-
</button>
|
|
35
|
-
{% endif %}
|
|
36
|
-
</div>
|
|
37
|
-
{% endif %}
|
|
38
|
-
|
|
39
|
-
<!-- Modal Body -->
|
|
40
|
-
<div class="flex-1 overflow-hidden p-4">
|
|
41
|
-
{% if scrollable %}
|
|
42
|
-
<div class="bg-base-100 dark:bg-base-800 rounded-lg border border-base-200 dark:border-base-700 h-full overflow-y-auto p-4">
|
|
43
|
-
{{ content }}
|
|
44
|
-
</div>
|
|
45
|
-
{% else %}
|
|
46
|
-
{{ content }}
|
|
47
|
-
{% endif %}
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
<!-- Modal Footer -->
|
|
51
|
-
{% if footer %}
|
|
52
|
-
<div class="flex items-center justify-between p-4 border-t border-base-200 dark:border-base-700 bg-base-50 dark:bg-base-800">
|
|
53
|
-
{{ footer }}
|
|
54
|
-
</div>
|
|
55
|
-
{% endif %}
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{#
|
|
2
|
-
⚠️ DEPRECATED: This component is deprecated.
|
|
3
|
-
|
|
4
|
-
Use Unfold's built-in progress component instead:
|
|
5
|
-
{% component "unfold/components/progress.html" with value=... title=... description=... %}
|
|
6
|
-
{% endcomponent %}
|
|
7
|
-
|
|
8
|
-
This wrapper will be removed in a future version.
|
|
9
|
-
For now it redirects to the Unfold component for backwards compatibility.
|
|
10
|
-
#}
|
|
11
|
-
|
|
12
|
-
{% load unfold %}
|
|
13
|
-
|
|
14
|
-
<!-- Wrapper for backwards compatibility - redirects to Unfold component -->
|
|
15
|
-
{% component "unfold/components/progress.html" with
|
|
16
|
-
value=value
|
|
17
|
-
title=title
|
|
18
|
-
description=description
|
|
19
|
-
class=class %}
|
|
20
|
-
{% endcomponent %}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Section Header Component -->
|
|
4
|
-
<div class="flex items-center mb-6">
|
|
5
|
-
{% if icon %}
|
|
6
|
-
<div class="flex items-center justify-center w-8 h-8 bg-{{ icon_color|default:'primary' }}-100 dark:bg-{{ icon_color|default:'primary' }}-900/20 rounded-lg mr-3">
|
|
7
|
-
<span class="material-icons text-{{ icon_color|default:'primary' }}-600 dark:text-{{ icon_color|default:'primary' }}-400 text-lg">{{ icon }}</span>
|
|
8
|
-
</div>
|
|
9
|
-
{% endif %}
|
|
10
|
-
|
|
11
|
-
<h2 class="text-xl font-semibold text-font-important-light dark:text-font-important-dark">
|
|
12
|
-
{{ title }}
|
|
13
|
-
</h2>
|
|
14
|
-
|
|
15
|
-
{% if badge %}
|
|
16
|
-
<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">
|
|
17
|
-
{{ badge }}
|
|
18
|
-
</span>
|
|
19
|
-
{% endif %}
|
|
20
|
-
|
|
21
|
-
{% if actions %}
|
|
22
|
-
<div class="ml-auto flex items-center space-x-2">
|
|
23
|
-
{{ actions }}
|
|
24
|
-
</div>
|
|
25
|
-
{% endif %}
|
|
26
|
-
</div>
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Stat Item Component -->
|
|
4
|
-
<div class="flex items-center justify-between p-3 bg-base-50 dark:bg-base-800 rounded-lg hover:bg-base-100 dark:hover:bg-base-700 transition-colors duration-150 group">
|
|
5
|
-
<div class="flex items-center">
|
|
6
|
-
{% if icon %}
|
|
7
|
-
<div class="w-8 h-8 rounded-lg flex items-center justify-center mr-3 bg-{{ color|default:'primary' }}-100 dark:bg-{{ color|default:'primary' }}-900/20">
|
|
8
|
-
<span class="material-icons text-xs text-{{ color|default:'primary' }}-600 dark:text-{{ color|default:'primary' }}-400">{{ icon }}</span>
|
|
9
|
-
</div>
|
|
10
|
-
{% endif %}
|
|
11
|
-
<div>
|
|
12
|
-
<div class="text-sm font-medium text-font-default-light dark:text-font-default-dark">{{ title }}</div>
|
|
13
|
-
{% if description %}
|
|
14
|
-
<div class="text-xs text-font-subtle-light dark:text-font-subtle-dark">{{ description }}</div>
|
|
15
|
-
{% endif %}
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div class="flex items-center gap-3">
|
|
20
|
-
<span class="inline-flex items-center px-3 py-1 rounded-full text-xs font-medium bg-{{ color|default:'primary' }}-100 dark:bg-{{ color|default:'primary' }}-900/20 text-{{ color|default:'primary' }}-600 dark:text-{{ color|default:'primary' }}-400">
|
|
21
|
-
{{ count|default:0 }}
|
|
22
|
-
</span>
|
|
23
|
-
|
|
24
|
-
{% if url %}
|
|
25
|
-
<a href="{{ url }}"
|
|
26
|
-
class="inline-flex items-center gap-1 px-3 py-1 bg-primary-600 hover:bg-primary-700 dark:bg-primary-500 dark:hover:bg-primary-600 text-white rounded-lg text-xs font-medium transition-colors duration-150 group-hover:shadow-sm">
|
|
27
|
-
<span class="material-icons text-xs">visibility</span>
|
|
28
|
-
<span>View</span>
|
|
29
|
-
</a>
|
|
30
|
-
{% endif %}
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Statistics Grid Component -->
|
|
4
|
-
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-{{ cols|default:'4' }} gap-{{ gap|default:'4' }} {% if class %}{{ class }}{% endif %}">
|
|
5
|
-
{% for stat in stats %}
|
|
6
|
-
<div class="bg-white dark:bg-base-900 rounded-lg 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
|
-
{{ stat.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
|
-
{{ stat.value }}
|
|
18
|
-
</div>
|
|
19
|
-
|
|
20
|
-
<!-- Change indicator -->
|
|
21
|
-
{% if stat.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 stat.change_type == 'positive' %}bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400
|
|
25
|
-
{% elif stat.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 stat.change_type == 'positive' %}arrow_upward
|
|
30
|
-
{% elif stat.change_type == 'negative' %}arrow_downward
|
|
31
|
-
{% else %}remove{% endif %}
|
|
32
|
-
</span>
|
|
33
|
-
{{ stat.change }}
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
{% endif %}
|
|
37
|
-
|
|
38
|
-
<!-- Description -->
|
|
39
|
-
{% if stat.description %}
|
|
40
|
-
<div class="text-xs text-font-subtle-light dark:text-font-subtle-dark mt-1">
|
|
41
|
-
{{ stat.description }}
|
|
42
|
-
</div>
|
|
43
|
-
{% endif %}
|
|
44
|
-
</div>
|
|
45
|
-
|
|
46
|
-
<!-- Icon -->
|
|
47
|
-
{% if stat.icon %}
|
|
48
|
-
<div class="flex-shrink-0 ml-3">
|
|
49
|
-
<div class="w-10 h-10 flex items-center justify-center group-hover:scale-110 transition-transform duration-300">
|
|
50
|
-
<span class="material-icons text-2xl
|
|
51
|
-
{% if stat.change_type == 'positive' %}text-green-600 dark:text-green-400
|
|
52
|
-
{% elif stat.change_type == 'negative' %}text-red-600 dark:text-red-400
|
|
53
|
-
{% else %}text-primary-600 dark:text-primary-400{% endif %}">
|
|
54
|
-
{{ stat.icon }}
|
|
55
|
-
</span>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
{% endif %}
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
61
|
-
|
|
62
|
-
<!-- Accent bar -->
|
|
63
|
-
{% if stat.show_accent %}
|
|
64
|
-
<div class="h-1 w-full
|
|
65
|
-
{% if stat.change_type == 'positive' %}bg-gradient-to-r from-green-400 to-green-600
|
|
66
|
-
{% elif stat.change_type == 'negative' %}bg-gradient-to-r from-red-400 to-red-600
|
|
67
|
-
{% else %}bg-gradient-to-r from-primary-400 to-primary-600{% endif %}">
|
|
68
|
-
</div>
|
|
69
|
-
{% endif %}
|
|
70
|
-
</div>
|
|
71
|
-
{% endfor %}
|
|
72
|
-
</div>
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- Status Badge Component -->
|
|
4
|
-
<span class="status-badge inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium
|
|
5
|
-
{% if status == 'active' or status == 'healthy' or status == 'success' %}bg-green-100 dark:bg-green-900/20 text-green-600 dark:text-green-400
|
|
6
|
-
{% elif status == 'warning' or status == 'pending' %}bg-amber-100 dark:bg-amber-900/20 text-amber-600 dark:text-amber-400
|
|
7
|
-
{% elif status == 'error' or status == 'failed' or status == 'inactive' %}bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400
|
|
8
|
-
{% elif status == 'info' or status == 'processing' %}bg-blue-100 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400
|
|
9
|
-
{% else %}bg-gray-100 dark:bg-gray-800 text-gray-600 dark:text-gray-400{% endif %}">
|
|
10
|
-
|
|
11
|
-
{% if icon %}
|
|
12
|
-
<span class="material-icons text-xs mr-1">{{ icon }}</span>
|
|
13
|
-
{% else %}
|
|
14
|
-
{% if status == 'active' or status == 'healthy' or status == 'success' %}
|
|
15
|
-
<span class="material-icons text-xs mr-1">check_circle</span>
|
|
16
|
-
{% elif status == 'warning' or status == 'pending' %}
|
|
17
|
-
<span class="material-icons text-xs mr-1">warning</span>
|
|
18
|
-
{% elif status == 'error' or status == 'failed' %}
|
|
19
|
-
<span class="material-icons text-xs mr-1">error</span>
|
|
20
|
-
{% elif status == 'inactive' %}
|
|
21
|
-
<span class="material-icons text-xs mr-1">cancel</span>
|
|
22
|
-
{% elif status == 'info' or status == 'processing' %}
|
|
23
|
-
<span class="material-icons text-xs mr-1">info</span>
|
|
24
|
-
{% endif %}
|
|
25
|
-
{% endif %}
|
|
26
|
-
|
|
27
|
-
{{ text|default:status|title }}
|
|
28
|
-
</span>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{% load unfold %}
|
|
2
|
-
|
|
3
|
-
<!-- User Avatar Component -->
|
|
4
|
-
<div class="flex items-center">
|
|
5
|
-
<div class="h-{{ size|default:'8' }} w-{{ size|default:'8' }} bg-{{ color|default:'primary' }}-100 dark:bg-{{ color|default:'primary' }}-900/20 rounded-full flex items-center justify-center mr-3">
|
|
6
|
-
{% if image %}
|
|
7
|
-
<img src="{{ image }}" alt="{{ name }}" class="h-{{ size|default:'8' }} w-{{ size|default:'8' }} rounded-full object-cover">
|
|
8
|
-
{% else %}
|
|
9
|
-
<span class="text-sm font-medium text-{{ color|default:'primary' }}-600 dark:text-{{ color|default:'primary' }}-400">
|
|
10
|
-
{% if name %}{{ name|slice:":1"|upper }}{% elif email %}{{ email|slice:":1"|upper }}{% else %}?{% endif %}
|
|
11
|
-
</span>
|
|
12
|
-
{% endif %}
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
{% if show_details %}
|
|
16
|
-
<div>
|
|
17
|
-
<div class="text-sm font-medium text-font-default-light dark:text-font-default-dark">
|
|
18
|
-
{% if name %}{{ name|truncatechars:20 }}{% elif email %}{{ email|truncatechars:20 }}{% else %}Unknown User{% endif %}
|
|
19
|
-
</div>
|
|
20
|
-
{% if email and name %}
|
|
21
|
-
<div class="text-xs text-font-subtle-light dark:text-font-subtle-dark">
|
|
22
|
-
{{ email|truncatechars:30 }}
|
|
23
|
-
</div>
|
|
24
|
-
{% endif %}
|
|
25
|
-
</div>
|
|
26
|
-
{% endif %}
|
|
27
|
-
</div>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
{% extends "admin/base_site.html" %}
|
|
2
|
-
|
|
3
|
-
{% load admin_list static i18n %}
|
|
4
|
-
|
|
5
|
-
{% block extrahead %}
|
|
6
|
-
{% url 'admin:jsi18n' as jsi18nurl %}
|
|
7
|
-
<script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
|
|
8
|
-
{{ block.super }}
|
|
9
|
-
{{ media.js }}
|
|
10
|
-
<script type="text/javascript" src="{% static 'admin/js/constance.js' %}"></script>
|
|
11
|
-
|
|
12
|
-
<!-- Constance UI Styles -->
|
|
13
|
-
<link rel="stylesheet" href="{% static 'admin/css/constance.css' %}"}
|
|
14
|
-
{% endblock %}
|
|
15
|
-
|
|
16
|
-
{% block content %}
|
|
17
|
-
<div id="content-main" class="constance">
|
|
18
|
-
<div id="changelist" class="flex flex-col gap-8 w-full">
|
|
19
|
-
<form id="changelist-form" action="" method="post" enctype="multipart/form-data" novalidate class="flex flex-col gap-8 w-full">
|
|
20
|
-
{% csrf_token %}
|
|
21
|
-
|
|
22
|
-
{% include "unfold/helpers/form_errors.html" with errors=form.non_field_errors %}
|
|
23
|
-
|
|
24
|
-
{% for field in form.hidden_fields %}
|
|
25
|
-
{{ field }}
|
|
26
|
-
{% endfor %}
|
|
27
|
-
|
|
28
|
-
<!-- Collapse/Expand All Controls -->
|
|
29
|
-
<div class="flex justify-between items-center mb-4" x-data="{ allExpanded: true }">
|
|
30
|
-
<div class="text-sm text-base-600 dark:text-base-400">
|
|
31
|
-
{% trans "Configuration Settings" %}
|
|
32
|
-
</div>
|
|
33
|
-
<div class="flex gap-2">
|
|
34
|
-
<button type="button"
|
|
35
|
-
@click="allExpanded = false; $dispatch('collapse-all')"
|
|
36
|
-
class="px-3 py-1 text-xs bg-base-100 hover:bg-base-200 dark:bg-base-800 dark:hover:bg-base-700 border border-base-300 dark:border-base-600 rounded transition-colors">
|
|
37
|
-
{% trans "Collapse All" %}
|
|
38
|
-
</button>
|
|
39
|
-
<button type="button"
|
|
40
|
-
@click="allExpanded = true; $dispatch('expand-all')"
|
|
41
|
-
class="px-3 py-1 text-xs bg-base-100 hover:bg-base-200 dark:bg-base-800 dark:hover:bg-base-700 border border-base-300 dark:border-base-600 rounded transition-colors">
|
|
42
|
-
{% trans "Expand All" %}
|
|
43
|
-
</button>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<div class="border border-base-200 rounded-default overflow-x-auto simplebar-horizontal-scrollbar-top dark:border-base-800" data-simplebar data-simplebar-auto-hide="false">
|
|
48
|
-
<table class="w-full border-collapse">
|
|
49
|
-
{% if fieldsets %}
|
|
50
|
-
{% for fieldset in fieldsets %}
|
|
51
|
-
{% with config_values=fieldset.config_values %}
|
|
52
|
-
{% include "admin/constance/includes/results_list.html" %}
|
|
53
|
-
{% endwith %}
|
|
54
|
-
{% endfor %}
|
|
55
|
-
{% else %}
|
|
56
|
-
{% include "admin/constance/includes/results_list.html" %}
|
|
57
|
-
{% endif %}
|
|
58
|
-
|
|
59
|
-
<tfoot>
|
|
60
|
-
<tr>
|
|
61
|
-
<td class="border-t border-base-200 px-3 py-2 dark:border-base-800" colspan="100%">
|
|
62
|
-
<div class="flex justify-end">
|
|
63
|
-
{% trans "Save" as title %}
|
|
64
|
-
{% include "unfold/helpers/submit.html" with title=title %}
|
|
65
|
-
</div>
|
|
66
|
-
</td>
|
|
67
|
-
</tr>
|
|
68
|
-
</tfoot>
|
|
69
|
-
</table>
|
|
70
|
-
</div>
|
|
71
|
-
</form>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
{% endblock %}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{% load i18n %}
|
|
2
|
-
|
|
3
|
-
{% if item.default %}
|
|
4
|
-
{% if item.default|length > 80 %}
|
|
5
|
-
<!-- Long default value with smart truncation -->
|
|
6
|
-
<div x-data="{ expanded: false }" class="constance-expandable">
|
|
7
|
-
<div x-show="!expanded" @click="expanded = true" class="cursor-pointer hover:bg-base-50 dark:hover:bg-base-800 p-1 rounded transition-colors">
|
|
8
|
-
{% include "unfold/helpers/label.html" with text=item.default|truncatechars:60 %}
|
|
9
|
-
<br><small class="text-base-400 dark:text-base-500 text-xs">{% trans "Click to expand" %}</small>
|
|
10
|
-
</div>
|
|
11
|
-
<div x-show="expanded" @click="expanded = false" class="cursor-pointer">
|
|
12
|
-
<div class="max-w-xs break-words whitespace-pre-wrap text-xs bg-base-100 dark:bg-base-800 p-2 rounded border border-base-200 dark:border-base-700 shadow-sm">
|
|
13
|
-
{{ item.default }}
|
|
14
|
-
</div>
|
|
15
|
-
<small class="text-base-400 dark:text-base-500 text-xs">{% trans "Click to collapse" %}</small>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
{% else %}
|
|
19
|
-
<!-- Short default value - normal display -->
|
|
20
|
-
{% include "unfold/helpers/label.html" with text=item.default %}
|
|
21
|
-
{% endif %}
|
|
22
|
-
{% else %}
|
|
23
|
-
<span class="text-base-400 dark:text-base-500">-</span>
|
|
24
|
-
{% endif %}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{% load i18n %}
|
|
2
|
-
|
|
3
|
-
{% if fieldset.title %}
|
|
4
|
-
<tr x-on:click="rowsOpen = !rowsOpen" class="cursor-pointer hover:bg-base-25 dark:hover:bg-base-900 transition-colors">
|
|
5
|
-
<th class="bg-base-50 border-t border-base-200 font-semibold px-3 py-2 text-left text-font-important-light dark:text-font-important-dark dark:border-base-800 dark:bg-white/[.04] {% if forloop.first %}border-t-0{% endif %}" colspan="100%">
|
|
6
|
-
<div class="flex items-center justify-between">
|
|
7
|
-
<span>{{ fieldset.title }}</span>
|
|
8
|
-
|
|
9
|
-
<span class="material-symbols-outlined select-none transition-transform duration-300 ease-in-out" title="{% trans "Toggle" %}" x-bind:class="rowsOpen ? 'rotate-180' : ''">
|
|
10
|
-
expand_more
|
|
11
|
-
</span>
|
|
12
|
-
</div>
|
|
13
|
-
</th>
|
|
14
|
-
</tr>
|
|
15
|
-
{% endif %}
|