diff --git a/.SRCINFO b/.SRCINFO index 4ee8d2e..62976cb 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,6 +1,6 @@ pkgbase = coolerdash pkgdesc = Monitor telemetry data on an AIO liquid cooler with an integrated LCD display - pkgver = 2.1.3 + pkgver = 2.1.4 pkgrel = 1 url = https://github.com/damachine/coolerdash install = coolerdash.install diff --git a/VERSION b/VERSION index ac2cdeb..7d2ed7c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.1.3 +2.1.4 diff --git a/etc/coolercontrol/plugins/coolerdash/config.json b/etc/coolercontrol/plugins/coolerdash/config.json index fd642fb..715b18a 100644 --- a/etc/coolercontrol/plugins/coolerdash/config.json +++ b/etc/coolercontrol/plugins/coolerdash/config.json @@ -22,16 +22,23 @@ "height": 0, "shape": "auto", "content_scale_factor": 0.98, - "inscribe_factor": 0.70710678 + "inscribe_factor": 0.70710678, + "sensor_slot_up": "cpu", + "sensor_slot_mid": "liquid", + "sensor_slot_down": "gpu" }, "layout": { "bar_height": 24, "bar_width": 98, "bar_gap": 12, - "bar_border": 2.0, + "bar_border": 1.0, + "bar_border_enabled": 1, "label_margin_left": 1, - "label_margin_bar": 1 + "label_margin_bar": 1, + "bar_height_up": 0, + "bar_height_mid": 0, + "bar_height_down": 0 }, "colors": { @@ -47,7 +54,18 @@ "size_labels": 30.0 }, - "temperature": { + "cpu": { + "threshold_1": 55.0, + "threshold_2": 65.0, + "threshold_3": 75.0, + "max_scale": 115.0, + "threshold_1_color": { "r": 0, "g": 255, "b": 0 }, + "threshold_2_color": { "r": 255, "g": 140, "b": 0 }, + "threshold_3_color": { "r": 255, "g": 70, "b": 0 }, + "threshold_4_color": { "r": 255, "g": 0, "b": 0 } + }, + + "gpu": { "threshold_1": 55.0, "threshold_2": 65.0, "threshold_3": 75.0, diff --git a/etc/coolercontrol/plugins/coolerdash/ui/index.html b/etc/coolercontrol/plugins/coolerdash/ui/index.html index 1716af2..d90b428 100644 --- a/etc/coolercontrol/plugins/coolerdash/ui/index.html +++ b/etc/coolercontrol/plugins/coolerdash/ui/index.html @@ -12,26 +12,33 @@ --bg-primary: rgb(26, 26, 46); --bg-secondary: rgb(22, 33, 62); --bg-card: rgb(30, 35, 55); + --bg-input: rgb(20, 28, 48); --border: rgb(45, 66, 99); + --border-light: rgb(55, 76, 109); --text: rgb(234, 234, 234); - --text-dim: rgb(160, 160, 180); + --text-dim: rgb(140, 145, 165); + --text-muted: rgb(100, 105, 125); --accent: rgb(233, 69, 96); --accent-hover: rgb(255, 89, 116); + --accent-glow: rgba(233, 69, 96, 0.15); --success: rgb(34, 197, 94); - --radius: 8px; - --shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + --radius: 10px; + --radius-sm: 6px; + --shadow: 0 4px 20px rgba(0, 0, 0, 0.25); + --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.2); } body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; - background: var(--bg-secondary); + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Inter', sans-serif; + background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-primary) 100%); color: var(--text); line-height: 1.6; - padding: 20px; + padding: 24px; + min-height: 100vh; } .container { - max-width: 900px; + max-width: 920px; margin: 0 auto; } @@ -39,18 +46,23 @@ .header { background: var(--bg-card); border-radius: var(--radius); - padding: 24px; + padding: 28px 32px; margin-bottom: 20px; box-shadow: var(--shadow); + border: 1px solid var(--border); } .header h1 { - font-size: 24px; + font-size: 26px; font-weight: 700; - margin-bottom: 8px; + margin-bottom: 10px; display: flex; align-items: center; gap: 12px; + background: linear-gradient(135deg, var(--text) 0%, var(--text-dim) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; } .header p { @@ -61,38 +73,41 @@ /* Tabs */ .tabs { display: flex; - gap: 8px; + gap: 6px; margin-bottom: 20px; background: var(--bg-card); - padding: 8px; + padding: 10px; border-radius: var(--radius); - box-shadow: var(--shadow); + box-shadow: var(--shadow-sm); overflow-x: auto; + flex-wrap: wrap; + border: 1px solid var(--border); } .tab { flex: 1; - min-width: 100px; - padding: 12px 16px; + min-width: 85px; + padding: 11px 14px; background: transparent; border: none; - border-radius: 6px; + border-radius: var(--radius-sm); color: var(--text-dim); cursor: pointer; - font-size: 14px; + font-size: 13px; font-weight: 500; - transition: all 0.2s; + transition: all 0.2s ease; white-space: nowrap; } .tab:hover { - background: rgba(233, 69, 96, 0.1); + background: var(--accent-glow); color: var(--text); } .tab.active { background: var(--accent); color: white; + box-shadow: 0 2px 8px rgba(233, 69, 96, 0.4); } /* Panel */ @@ -100,9 +115,10 @@ display: none; background: var(--bg-card); border-radius: var(--radius); - padding: 24px; + padding: 28px 32px; box-shadow: var(--shadow); - animation: fadeIn 0.3s; + animation: fadeIn 0.3s ease; + border: 1px solid var(--border); } .panel.active { @@ -110,139 +126,190 @@ } @keyframes fadeIn { - from { opacity: 0; transform: translateY(10px); } + from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } - /* Form Elements */ - .form-group { - margin-bottom: 20px; + /* Section Title */ + .section-title { + margin: 32px 0 20px; + font-size: 13px; + font-weight: 600; + color: var(--accent); + border-bottom: 1px solid var(--border); + padding-bottom: 10px; + text-transform: uppercase; + letter-spacing: 1px; } - .form-group:last-child { + .section-title:first-child { + margin-top: 0; + } + + /* Form Elements */ + .form-group { margin-bottom: 0; } .form-label { display: block; font-weight: 500; - margin-bottom: 6px; - font-size: 14px; + margin-bottom: 8px; + font-size: 13px; + color: var(--text); } .form-hint { display: block; - font-size: 12px; - color: var(--text-dim); + font-size: 11px; + color: var(--text-muted); margin-bottom: 8px; } .form-control { width: 100%; - padding: 10px 12px; - background: var(--bg-secondary); + padding: 11px 14px; + background: var(--bg-input); border: 1px solid var(--border); - border-radius: 6px; + border-radius: var(--radius-sm); color: var(--text); font-size: 14px; - transition: all 0.2s; + transition: all 0.2s ease; + } + + .form-control:hover { + border-color: var(--border-light); } .form-control:focus { outline: none; border-color: var(--accent); - box-shadow: 0 0 0 3px rgba(233, 69, 96, 0.1); + box-shadow: 0 0 0 3px var(--accent-glow); + background: var(--bg-secondary); } .form-control[type="number"] { - max-width: 150px; + width: 100%; + font-variant-numeric: tabular-nums; + } + + select.form-control { + width: 100%; + cursor: pointer; } /* Grid Layout */ .grid { display: grid; - gap: 20px; + gap: 20px 28px; + margin-bottom: 20px; + } + + .grid:last-child { + margin-bottom: 0; + } + + .grid-2 { grid-template-columns: repeat(2, 1fr); } + .grid-3 { grid-template-columns: repeat(3, 1fr); } + .grid-4 { grid-template-columns: repeat(4, 1fr); } + + @media (max-width: 768px) { + .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; } + .panel { padding: 20px; } + .header { padding: 20px; } } - .grid-2 { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); } - .grid-3 { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); } + @media (min-width: 769px) and (max-width: 900px) { + .grid-3, .grid-4 { grid-template-columns: repeat(2, 1fr); } + } /* Range Slider */ .range-group { display: flex; align-items: center; - gap: 12px; + gap: 16px; } .range-input { flex: 1; height: 6px; - background: var(--bg-secondary); + background: var(--bg-input); border-radius: 3px; outline: none; -webkit-appearance: none; + border: 1px solid var(--border); } .range-input::-webkit-slider-thumb { -webkit-appearance: none; - width: 18px; - height: 18px; + width: 20px; + height: 20px; background: var(--accent); border-radius: 50%; cursor: pointer; + box-shadow: 0 2px 6px rgba(233, 69, 96, 0.4); + transition: transform 0.15s ease; + } + + .range-input::-webkit-slider-thumb:hover { + transform: scale(1.1); } .range-value { - min-width: 50px; + min-width: 55px; text-align: right; font-weight: 600; color: var(--accent); + font-size: 14px; + font-variant-numeric: tabular-nums; } /* Color Picker */ .color-group { display: flex; align-items: center; - gap: 12px; + gap: 14px; } .color-swatch { - width: 50px; - height: 40px; - border-radius: 6px; + width: 52px; + height: 42px; + border-radius: var(--radius-sm); border: 2px solid var(--border); cursor: pointer; - transition: transform 0.2s; + transition: all 0.2s ease; } .color-swatch:hover { transform: scale(1.05); + border-color: var(--border-light); } .color-rgb { - font-family: 'Courier New', monospace; - font-size: 13px; - color: var(--text-dim); + font-family: 'SF Mono', 'Fira Code', 'Courier New', monospace; + font-size: 12px; + color: var(--text-muted); + letter-spacing: 0.3px; } /* Buttons */ .btn-group { display: flex; - gap: 12px; - margin-top: 24px; - padding-top: 24px; + gap: 14px; + margin-top: 28px; + padding-top: 28px; border-top: 1px solid var(--border); } .btn { flex: 1; - padding: 12px 24px; + padding: 13px 28px; border: none; - border-radius: 6px; + border-radius: var(--radius-sm); font-size: 14px; font-weight: 600; cursor: pointer; - transition: all 0.2s; + transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; @@ -250,44 +317,51 @@ } .btn-primary { - background: var(--accent); + background: linear-gradient(135deg, var(--accent) 0%, var(--accent-hover) 100%); color: white; + box-shadow: 0 4px 14px rgba(233, 69, 96, 0.35); } .btn-primary:hover { - background: var(--accent-hover); transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(233, 69, 96, 0.3); + box-shadow: 0 6px 20px rgba(233, 69, 96, 0.45); } .btn-secondary { - background: var(--bg-secondary); + background: var(--bg-input); color: var(--text); border: 1px solid var(--border); } .btn-secondary:hover { - background: var(--bg-primary); + background: var(--bg-secondary); + border-color: var(--border-light); } /* Alert */ .alert { - background: rgba(233, 69, 96, 0.1); + background: var(--accent-glow); border-left: 4px solid var(--accent); - padding: 12px 16px; - border-radius: 6px; - margin-bottom: 20px; + padding: 14px 18px; + border-radius: var(--radius-sm); + margin-bottom: 24px; font-size: 13px; } .alert strong { display: block; - margin-bottom: 4px; + margin-bottom: 6px; + color: var(--text); + } + + .alert-warning { + background: rgba(255, 140, 0, 0.12); + border-left-color: #ff8c00; } /* Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } - ::-webkit-scrollbar-track { background: var(--bg-secondary); } + ::-webkit-scrollbar-track { background: var(--bg-primary); border-radius: 4px; } ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--accent); } @@ -296,24 +370,28 @@
-

- CoolerDash Configuration -

+

CoolerDash Configuration

Customize your LCD temperature dashboard • Changes require plugin restart

+

+ 💡 Tip: After an update, click Reset to apply new default values added by the developer. +

- - - - + + + + + + +
- +
CoolerControl API @@ -322,43 +400,93 @@

- Default: http://localhost:11987 + HTTP or HTTPS supported (Default: http://localhost:11987)
- +
- Leave empty if authentication is disabled + Leave empty if authentication is disabled (Default: coolAdmin)

- +
-
- - +

Display Mode

+ +
+
+ + +
+ + +
+ +

Sensor Slots

+
+ Sensor Assignment + Assign sensors to display positions. Use "None" to disable a slot.
-