2026-03-03 03:23:43 -04:00
|
|
|
"""CSS styles and theme configurations for modern templates."""
|
|
|
|
|
|
2026-03-03 03:56:39 -04:00
|
|
|
####################################################################################################
|
|
|
|
|
# Copyright (C) 2026 by WallyHackenslacker wallyhackenslacker@noreply.git.hackenslacker.space #
|
|
|
|
|
# #
|
|
|
|
|
# Permission to use, copy, modify, and/or distribute this software for any purpose with or without #
|
|
|
|
|
# fee is hereby granted. #
|
|
|
|
|
# #
|
|
|
|
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS #
|
|
|
|
|
# SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE #
|
|
|
|
|
# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES #
|
|
|
|
|
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, #
|
|
|
|
|
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE #
|
|
|
|
|
# OF THIS SOFTWARE. #
|
|
|
|
|
####################################################################################################
|
|
|
|
|
|
2026-03-03 03:23:43 -04:00
|
|
|
import json
|
2026-03-03 03:29:25 -04:00
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
# Directory where templates are located
|
|
|
|
|
TEMPLATES_DIR = Path(__file__).parent / "templates"
|
2026-03-03 03:23:43 -04:00
|
|
|
|
|
|
|
|
# Theme configurations for Chart.js
|
|
|
|
|
THEME_CONFIGS = {
|
|
|
|
|
"brutalism": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#ff0000", "#0000ff", "#ffff00", "#00ff00", "#ff00ff",
|
|
|
|
|
"#00ffff", "#ff8800", "#8800ff", "#0088ff", "#88ff00",
|
|
|
|
|
"#888888"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "'Courier New', monospace",
|
|
|
|
|
"fontWeight": "bold",
|
|
|
|
|
"pointStyle": "rect",
|
|
|
|
|
"textColorLight": "#000000",
|
|
|
|
|
"textColorDark": "#ffffff",
|
|
|
|
|
"borderColorLight": "#000000",
|
|
|
|
|
"borderColorDark": "#ffffff",
|
|
|
|
|
"borderWidth": 3,
|
|
|
|
|
"tooltipBg": "#000000",
|
|
|
|
|
"tooltipTitleColor": "#ffffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "#ffffff",
|
|
|
|
|
"tooltipBorderWidth": 2,
|
|
|
|
|
"tooltipCornerRadius": 0,
|
|
|
|
|
"uppercaseTooltip": True
|
|
|
|
|
},
|
|
|
|
|
"glassmorphism": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#6366f1", "#8b5cf6", "#ec4899", "#f43f5e", "#f97316",
|
|
|
|
|
"#eab308", "#22c55e", "#14b8a6", "#06b6d4", "#3b82f6",
|
|
|
|
|
"#64748b"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "'Inter', sans-serif",
|
|
|
|
|
"fontWeight": "normal",
|
|
|
|
|
"pointStyle": "circle",
|
|
|
|
|
"textColorLight": "#1a1a2e",
|
|
|
|
|
"textColorDark": "#f0f0f5",
|
|
|
|
|
"borderColorLight": "rgba(255, 255, 255, 0.2)",
|
|
|
|
|
"borderColorDark": "rgba(255, 255, 255, 0.2)",
|
|
|
|
|
"borderWidth": 2,
|
|
|
|
|
"tooltipBg": "rgba(0, 0, 0, 0.8)",
|
|
|
|
|
"tooltipTitleColor": "#ffffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "transparent",
|
|
|
|
|
"tooltipBorderWidth": 0,
|
|
|
|
|
"tooltipCornerRadius": 8,
|
|
|
|
|
"uppercaseTooltip": False
|
|
|
|
|
},
|
|
|
|
|
"neumorphism": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#6366f1", "#8b5cf6", "#ec4899", "#f43f5e", "#f97316",
|
|
|
|
|
"#eab308", "#22c55e", "#14b8a6", "#06b6d4", "#3b82f6",
|
|
|
|
|
"#64748b"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "'Inter', sans-serif",
|
|
|
|
|
"fontWeight": "normal",
|
|
|
|
|
"pointStyle": "circle",
|
|
|
|
|
"textColorLight": "#2d3436",
|
|
|
|
|
"textColorDark": "#f0f0f5",
|
|
|
|
|
"borderColorLight": "rgba(255, 255, 255, 0.3)",
|
|
|
|
|
"borderColorDark": "rgba(255, 255, 255, 0.3)",
|
|
|
|
|
"borderWidth": 3,
|
|
|
|
|
"tooltipBg": "rgba(0, 0, 0, 0.8)",
|
|
|
|
|
"tooltipTitleColor": "#ffffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "transparent",
|
|
|
|
|
"tooltipBorderWidth": 0,
|
|
|
|
|
"tooltipCornerRadius": 8,
|
|
|
|
|
"uppercaseTooltip": False
|
2026-03-08 12:36:14 -04:00
|
|
|
},
|
|
|
|
|
"material": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#6200ee", "#03dac6", "#3700b3", "#018786", "#b00020",
|
|
|
|
|
"#ff0266", "#aa00ff", "#0091ea", "#00c853", "#ffd600",
|
|
|
|
|
"#757575"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "'Roboto', sans-serif",
|
|
|
|
|
"fontWeight": "normal",
|
|
|
|
|
"pointStyle": "circle",
|
|
|
|
|
"textColorLight": "#212121",
|
|
|
|
|
"textColorDark": "#ffffff",
|
|
|
|
|
"borderColorLight": "#ffffff",
|
|
|
|
|
"borderColorDark": "#1e1e1e",
|
|
|
|
|
"borderWidth": 2,
|
|
|
|
|
"tooltipBg": "rgba(97, 97, 97, 0.9)",
|
|
|
|
|
"tooltipTitleColor": "#ffffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "transparent",
|
|
|
|
|
"tooltipBorderWidth": 0,
|
|
|
|
|
"tooltipCornerRadius": 4,
|
|
|
|
|
"uppercaseTooltip": False
|
2026-03-12 03:13:17 -04:00
|
|
|
},
|
|
|
|
|
"flat": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#ffadad", "#ffd6a5", "#fdffb6", "#caffbf", "#9bf6ff",
|
|
|
|
|
"#a0c4ff", "#bdb2ff", "#ffc6ff", "#ff9aa2", "#e2f0cb",
|
|
|
|
|
"#b5ead7"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif",
|
|
|
|
|
"fontWeight": "500",
|
|
|
|
|
"pointStyle": "circle",
|
|
|
|
|
"textColorLight": "#1d1d1f",
|
|
|
|
|
"textColorDark": "#f5f5f7",
|
|
|
|
|
"borderColorLight": "#ffffff",
|
|
|
|
|
"borderColorDark": "#1c1c1e",
|
|
|
|
|
"borderWidth": 2,
|
|
|
|
|
"tooltipBg": "rgba(0, 0, 0, 0.8)",
|
|
|
|
|
"tooltipTitleColor": "#ffffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "transparent",
|
|
|
|
|
"tooltipBorderWidth": 0,
|
|
|
|
|
"tooltipCornerRadius": 12,
|
|
|
|
|
"uppercaseTooltip": False
|
2026-03-12 04:16:26 -04:00
|
|
|
},
|
|
|
|
|
"synthwave": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#ff00ff", "#00ffff", "#ffff00", "#ff0055", "#00ff99",
|
|
|
|
|
"#7a5af8", "#ff8800", "#ff00aa", "#00ccff", "#ccff00",
|
|
|
|
|
"#999999"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "'Orbitron', 'Segoe UI', sans-serif",
|
|
|
|
|
"fontWeight": "bold",
|
|
|
|
|
"pointStyle": "triangle",
|
|
|
|
|
"textColorLight": "#2d004d",
|
|
|
|
|
"textColorDark": "#ff00ff",
|
|
|
|
|
"borderColorLight": "rgba(255, 0, 255, 0.2)",
|
|
|
|
|
"borderColorDark": "rgba(0, 255, 255, 0.2)",
|
|
|
|
|
"borderWidth": 2,
|
|
|
|
|
"tooltipBg": "rgba(45, 0, 77, 0.9)",
|
|
|
|
|
"tooltipTitleColor": "#00ffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "#ff00ff",
|
|
|
|
|
"tooltipBorderWidth": 1,
|
|
|
|
|
"tooltipCornerRadius": 0,
|
|
|
|
|
"uppercaseTooltip": True
|
|
|
|
|
},
|
|
|
|
|
"vaporwave": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#ff71ce", "#01cdfe", "#05ffa1", "#b967ff", "#fffb96",
|
|
|
|
|
"#ff99cc", "#99ccff", "#ccff99", "#ffcc99", "#ffffcc",
|
|
|
|
|
"#e0e0e0"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "'MS PGothic', 'Palatino Linotype', serif",
|
|
|
|
|
"fontWeight": "normal",
|
|
|
|
|
"pointStyle": "circle",
|
|
|
|
|
"textColorLight": "#ff71ce",
|
|
|
|
|
"textColorDark": "#01cdfe",
|
|
|
|
|
"borderColorLight": "rgba(255, 255, 255, 0.5)",
|
|
|
|
|
"borderColorDark": "rgba(255, 255, 255, 0.2)",
|
|
|
|
|
"borderWidth": 1,
|
|
|
|
|
"tooltipBg": "rgba(255, 113, 206, 0.8)",
|
|
|
|
|
"tooltipTitleColor": "#ffffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "#01cdfe",
|
|
|
|
|
"tooltipBorderWidth": 2,
|
|
|
|
|
"tooltipCornerRadius": 4,
|
|
|
|
|
"uppercaseTooltip": False
|
|
|
|
|
},
|
|
|
|
|
"terminal": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#00ff00", "#00cc00", "#009900", "#006600", "#003300",
|
|
|
|
|
"#33ff33", "#66ff66", "#99ff99", "#ccffcc", "#ffffff",
|
|
|
|
|
"#888888"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "'Courier New', Courier, monospace",
|
|
|
|
|
"fontWeight": "bold",
|
|
|
|
|
"pointStyle": "rectRot",
|
|
|
|
|
"textColorLight": "#006600",
|
|
|
|
|
"textColorDark": "#00ff00",
|
|
|
|
|
"borderColorLight": "#000000",
|
|
|
|
|
"borderColorDark": "#00ff00",
|
|
|
|
|
"borderWidth": 1,
|
|
|
|
|
"tooltipBg": "#000000",
|
|
|
|
|
"tooltipTitleColor": "#00ff00",
|
|
|
|
|
"tooltipBodyColor": "#00ff00",
|
|
|
|
|
"tooltipBorderColor": "#00ff00",
|
|
|
|
|
"tooltipBorderWidth": 1,
|
|
|
|
|
"tooltipCornerRadius": 0,
|
|
|
|
|
"uppercaseTooltip": True
|
|
|
|
|
},
|
|
|
|
|
"highcontrast": {
|
|
|
|
|
"colors": [
|
|
|
|
|
"#888888", "#444444", "#cccccc", "#666666", "#aaaaaa",
|
|
|
|
|
"#333333", "#dddddd", "#555555", "#bbbbbb", "#222222",
|
|
|
|
|
"#999999"
|
|
|
|
|
],
|
|
|
|
|
"fontFamily": "Arial, Helvetica, sans-serif",
|
|
|
|
|
"fontWeight": "900",
|
|
|
|
|
"pointStyle": "rect",
|
|
|
|
|
"textColorLight": "#000000",
|
|
|
|
|
"textColorDark": "#ffffff",
|
|
|
|
|
"borderColorLight": "#000000",
|
|
|
|
|
"borderColorDark": "#ffffff",
|
|
|
|
|
"borderWidth": 4,
|
|
|
|
|
"tooltipBg": "#000000",
|
|
|
|
|
"tooltipTitleColor": "#ffffff",
|
|
|
|
|
"tooltipBodyColor": "#ffffff",
|
|
|
|
|
"tooltipBorderColor": "#ffffff",
|
|
|
|
|
"tooltipBorderWidth": 3,
|
|
|
|
|
"tooltipCornerRadius": 0,
|
|
|
|
|
"uppercaseTooltip": True
|
2026-03-03 03:23:43 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_theme_css(style: str) -> str:
|
2026-03-03 03:29:25 -04:00
|
|
|
"""Get the CSS for a given style by reading from the corresponding .css file."""
|
|
|
|
|
css_file = TEMPLATES_DIR / f"{style}.css"
|
|
|
|
|
if css_file.exists():
|
|
|
|
|
return css_file.read_text(encoding="utf-8")
|
|
|
|
|
# Fallback to glassmorphism if style not found
|
|
|
|
|
fallback = TEMPLATES_DIR / "glassmorphism.css"
|
|
|
|
|
return fallback.read_text(encoding="utf-8")
|
2026-03-03 03:23:43 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_theme_config(style: str) -> str:
|
|
|
|
|
"""Get the theme config as JSON string for a given style."""
|
|
|
|
|
config = THEME_CONFIGS.get(style, THEME_CONFIGS["glassmorphism"])
|
|
|
|
|
return json.dumps(config)
|