Linear design system: new admin UI + display design switcher (8 designs)
Admin UI: Linear.app dark theme — near-black canvas, indigo-violet accent, Inter font Display: Minimal, Minimal Color, Bold, Analog Clock, Magazine, Cards, Kiosk, Classic
This commit is contained in:
@@ -365,10 +365,30 @@ DISPLAY_THEMES = {
|
||||
},
|
||||
}
|
||||
|
||||
# Display designs — the actual visual layout approach
|
||||
DISPLAY_DESIGNS = {
|
||||
"classic": {
|
||||
"label": "Classic",
|
||||
"desc": "Original flat design, white background",
|
||||
},
|
||||
"magazine": {
|
||||
"label": "Magazine",
|
||||
"desc": "Bold typography, minimal, colored accent bars",
|
||||
},
|
||||
"cards": {
|
||||
"label": "Cards",
|
||||
"desc": "iOS-style panels with emoji icons, warm white",
|
||||
},
|
||||
"kiosk": {
|
||||
"label": "Kiosk",
|
||||
"desc": "Data-dense, dark background, inverted info cards",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@app.route("/api/display_theme", methods=["GET", "POST"])
|
||||
def api_display_theme():
|
||||
"""Theme für das Display. GET = aktuelles Theme, POST = setzen."""
|
||||
"""GET: list themes + current. POST: set theme (legacy color-only)."""
|
||||
a = require_auth()
|
||||
if a: return a
|
||||
cfg = dashboard_mod.load_config()
|
||||
@@ -389,6 +409,27 @@ def api_display_theme():
|
||||
return jsonify({"ok": True, "current": theme_key, "theme": DISPLAY_THEMES[theme_key]})
|
||||
|
||||
|
||||
@app.route("/api/display_design", methods=["GET", "POST"])
|
||||
def api_display_design():
|
||||
"""Design für das Display (classic/magazine/cards/kiosk)."""
|
||||
a = require_auth()
|
||||
if a: return a
|
||||
cfg = dashboard_mod.load_config()
|
||||
if request.method == "GET":
|
||||
design_key = cfg.get("display_design", "classic")
|
||||
return jsonify({
|
||||
"current": design_key,
|
||||
"designs": {k: {"label": v["label"], "desc": v["desc"]} for k, v in DISPLAY_DESIGNS.items()},
|
||||
})
|
||||
data = request.get_json(silent=True) or {}
|
||||
design_key = data.get("design", "classic")
|
||||
if design_key not in DISPLAY_DESIGNS:
|
||||
return jsonify({"ok": False, "error": "unknown design"}), 400
|
||||
cfg["display_design"] = design_key
|
||||
dashboard_mod.save_config(cfg)
|
||||
return jsonify({"ok": True, "current": design_key})
|
||||
|
||||
|
||||
@app.route("/api/plugin_config/<plugin_name>", methods=["GET", "POST"])
|
||||
def api_plugin_config(plugin_name):
|
||||
"""Plugin-spezifische Config (separat vom Layout)."""
|
||||
|
||||
Reference in New Issue
Block a user