qodalis-cli-server-plugin-admin 1.0.0b7__tar.gz → 1.0.0b8__tar.gz

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.
Files changed (26) hide show
  1. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/PKG-INFO +1 -1
  2. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/pyproject.toml +1 -1
  3. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/__init__.py +12 -0
  4. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/cli_admin_builder.py +27 -1
  5. qodalis_cli_server_plugin_admin-1.0.0b7/qodalis_cli_admin/dashboard/assets/index-BAmUWZCS.js → qodalis_cli_server_plugin_admin-1.0.0b8/qodalis_cli_admin/dashboard/assets/index-CThBrI8x.js +54 -48
  6. qodalis_cli_server_plugin_admin-1.0.0b7/qodalis_cli_admin/dashboard/assets/index-BF7ofZj2.css → qodalis_cli_server_plugin_admin-1.0.0b8/qodalis_cli_admin/dashboard/assets/index-SAFC7f6i.css +1 -1
  7. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/dashboard/index.html +3 -3
  8. qodalis_cli_server_plugin_admin-1.0.0b8/qodalis_cli_admin/services/admin_theme.py +117 -0
  9. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/spa_static_files.py +21 -0
  10. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/.gitignore +0 -0
  11. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/auth/__init__.py +0 -0
  12. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/auth/auth_controller.py +0 -0
  13. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/auth/auth_middleware.py +0 -0
  14. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/auth/jwt_service.py +0 -0
  15. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/controllers/__init__.py +0 -0
  16. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/controllers/config_controller.py +0 -0
  17. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/controllers/logs_controller.py +0 -0
  18. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/controllers/plugins_controller.py +0 -0
  19. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/controllers/status_controller.py +0 -0
  20. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/controllers/ws_clients_controller.py +0 -0
  21. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/dashboard/assets/wasm/qodalis_cli_wasm_bg.wasm +0 -0
  22. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/dashboard_resolver.py +0 -0
  23. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/services/__init__.py +0 -0
  24. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/services/admin_config.py +0 -0
  25. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/services/log_ring_buffer.py +0 -0
  26. {qodalis_cli_server_plugin_admin-1.0.0b7 → qodalis_cli_server_plugin_admin-1.0.0b8}/qodalis_cli_admin/services/module_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: qodalis-cli-server-plugin-admin
3
- Version: 1.0.0b7
3
+ Version: 1.0.0b8
4
4
  Summary: Admin dashboard plugin for Qodalis CLI servers
5
5
  Project-URL: Homepage, https://github.com/qodalis-solutions/cli-server-python
6
6
  Project-URL: Repository, https://github.com/qodalis-solutions/cli-server-python
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "qodalis-cli-server-plugin-admin"
7
- version = "1.0.0b7"
7
+ version = "1.0.0b8"
8
8
  description = "Admin dashboard plugin for Qodalis CLI servers"
9
9
  readme = { text = "", content-type = "text/plain" }
10
10
  license = "MIT"
@@ -6,10 +6,19 @@ from .auth.auth_middleware import create_auth_dependency
6
6
  from .auth.auth_controller import create_auth_router
7
7
  from .dashboard_resolver import resolve_dashboard_dir
8
8
  from .services.admin_config import AdminConfig
9
+ from .services.admin_theme import (
10
+ ADMIN_THEME_MODES,
11
+ ADMIN_THEME_TOKENS,
12
+ admin_theme_json,
13
+ is_theme_color,
14
+ validate_admin_theme,
15
+ )
9
16
  from .services.log_ring_buffer import LogRingBuffer
10
17
  from .services.module_registry import ModuleRegistry
11
18
 
12
19
  __all__ = [
20
+ "ADMIN_THEME_MODES",
21
+ "ADMIN_THEME_TOKENS",
13
22
  "AdminBuildDeps",
14
23
  "AdminConfig",
15
24
  "BroadcastFn",
@@ -18,7 +27,10 @@ __all__ = [
18
27
  "JwtService",
19
28
  "LogRingBuffer",
20
29
  "ModuleRegistry",
30
+ "admin_theme_json",
21
31
  "create_auth_dependency",
22
32
  "create_auth_router",
33
+ "is_theme_color",
23
34
  "resolve_dashboard_dir",
35
+ "validate_admin_theme",
24
36
  ]
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import os
6
6
  import time
7
7
  from dataclasses import dataclass
8
+ from collections.abc import Mapping
8
9
  from typing import Any, Callable, Awaitable
9
10
 
10
11
  from fastapi import APIRouter
@@ -19,6 +20,7 @@ from .controllers.config_controller import create_config_router
19
20
  from .controllers.logs_controller import create_logs_router
20
21
  from .controllers.ws_clients_controller import create_ws_clients_router
21
22
  from .services.admin_config import AdminConfig
23
+ from .services.admin_theme import admin_theme_json
22
24
  from .services.log_ring_buffer import LogRingBuffer
23
25
  from .services.module_registry import ModuleRegistry
24
26
  from .dashboard_resolver import resolve_dashboard_dir
@@ -64,6 +66,7 @@ class CliAdminBuilder:
64
66
  self._dashboard_path: str | None = None
65
67
  self._trust_proxy = False
66
68
  self._users_plugin: Any = None
69
+ self._theme_json: bytes = admin_theme_json(None)
67
70
 
68
71
  def set_credentials(self, username: str, password: str) -> CliAdminBuilder:
69
72
  """Set admin login credentials (overrides env vars)."""
@@ -91,6 +94,27 @@ class CliAdminBuilder:
91
94
  self._trust_proxy = trust
92
95
  return self
93
96
 
97
+ def set_theme(self, theme: Mapping[str, Any]) -> CliAdminBuilder:
98
+ """Set the dashboard's color scheme.
99
+
100
+ ``{"mode": "dark" | "light" | "system", "dark": {...}, "light": {...}}``
101
+ with color overrides per scheme; tokens left out keep the dashboard
102
+ defaults. Token keys are camelCase (``primaryHover``) or snake_case
103
+ (``primary_hover``). Values must be plain CSS colors (hex,
104
+ ``rgb()``/``hsl()``/``oklch()``... or a named color); anything else
105
+ raises :class:`ValueError` here.
106
+
107
+ Example::
108
+
109
+ builder.set_theme({
110
+ "mode": "system",
111
+ "light": {"primary": "#2a6bba", "background": "#f1f6fa"},
112
+ "dark": {"primary": "#4f9be0", "background": "#0d1823"},
113
+ })
114
+ """
115
+ self._theme_json = admin_theme_json(theme)
116
+ return self
117
+
94
118
  def set_users_plugin(self, users_plugin: Any) -> CliAdminBuilder:
95
119
  """Authenticate the dashboard through the users plugin."""
96
120
  self._users_plugin = users_plugin
@@ -164,7 +188,9 @@ class CliAdminBuilder:
164
188
  dashboard_app = None
165
189
 
166
190
  if dashboard_dir:
167
- dashboard_app = SPAStaticFiles(directory=dashboard_dir, html=True)
191
+ dashboard_app = SPAStaticFiles(
192
+ directory=dashboard_dir, html=True, theme_json=self._theme_json,
193
+ )
168
194
 
169
195
  return CliAdminPlugin(
170
196
  prefix="/api/v1/qcli",