@enigmax/dashboard 0.1.5 → 0.1.6
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.
- package/assets/index.html +18 -5
- package/package.json +1 -1
package/assets/index.html
CHANGED
|
@@ -118,6 +118,8 @@
|
|
|
118
118
|
}
|
|
119
119
|
.tag.ext { color: var(--accent2); }
|
|
120
120
|
.tag.warn { color: var(--accent); border-color: var(--accent); }
|
|
121
|
+
.tag.exp { color: var(--accent); border-color: var(--accent); background: rgba(224,164,88,0.10); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }
|
|
122
|
+
.tag.meas { color: var(--good); border-color: var(--good); background: rgba(111,207,151,0.10); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }
|
|
121
123
|
.editor {
|
|
122
124
|
width: 100%; min-height: 360px; resize: vertical; background: var(--surface2); color: var(--text);
|
|
123
125
|
border: 1px solid var(--border); border-radius: 8px; padding: 12px;
|
|
@@ -669,6 +671,15 @@
|
|
|
669
671
|
// --- settings subpage (mirrors the TUI registry over /api/settings) ---
|
|
670
672
|
function esc(s) { return String(s).replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ }[c])); }
|
|
671
673
|
|
|
674
|
+
// Turn "(experimental)" and " · measured/experimental" label suffixes into visual badges.
|
|
675
|
+
function labelWithBadges(text) {
|
|
676
|
+
let name = String(text);
|
|
677
|
+
const badges = [];
|
|
678
|
+
if (/\(experimental\)/i.test(name)) { name = name.replace(/\s*\(experimental\)/i, ""); badges.push(["experimental", "exp"]); }
|
|
679
|
+
name = name.replace(/\s*·\s*(measured|experimental)\b/gi, (_, w) => { badges.push([w.toLowerCase(), w.toLowerCase() === "experimental" ? "exp" : "meas"]); return ""; });
|
|
680
|
+
return esc(name) + badges.map(([t, c]) => ' <span class="tag ' + c + '">' + esc(t) + "</span>").join("");
|
|
681
|
+
}
|
|
682
|
+
|
|
672
683
|
function settingRow(s) {
|
|
673
684
|
const ctl = s.choices
|
|
674
685
|
? '<select class="choice" data-skey="' + esc(s.key) + '">'
|
|
@@ -676,7 +687,7 @@
|
|
|
676
687
|
+ "</select>"
|
|
677
688
|
: '<button type="button" class="toggle' + (s.value ? " on" : "") + '" data-skey="' + esc(s.key)
|
|
678
689
|
+ '" data-kind="bool" data-on="' + (s.value ? 1 : 0) + '">' + (s.value ? "On" : "Off") + "</button>";
|
|
679
|
-
return '<div class="set-row"><div class="set-meta"><div class="set-name">' +
|
|
690
|
+
return '<div class="set-row"><div class="set-meta"><div class="set-name">' + labelWithBadges(s.label) + "</div>"
|
|
680
691
|
+ '<div class="set-hint">' + esc(s.hint) + (s.globalOnly ? " · global" : "") + "</div></div>"
|
|
681
692
|
+ '<div class="set-ctl">' + ctl + "</div></div>";
|
|
682
693
|
}
|
|
@@ -732,7 +743,7 @@
|
|
|
732
743
|
function renderSystems(s) {
|
|
733
744
|
const el = $("systems");
|
|
734
745
|
if (!s) { el.innerHTML = '<div class="empty" style="padding:16px 0">Status unavailable.</div>'; return; }
|
|
735
|
-
const item = (k, v) => '<div class="sys-item"><span class="k">' + k + '</span><span class="v">' + v + "</span></div>";
|
|
746
|
+
const item = (k, v) => '<div class="sys-item"><span class="k">' + labelWithBadges(k) + '</span><span class="v">' + v + "</span></div>";
|
|
736
747
|
const sk = s.skills || {};
|
|
737
748
|
const skillTags = '<span class="tag">' + (sk.enigma || 0) + " enigma</span>"
|
|
738
749
|
+ '<span class="tag ext">' + (sk.external || 0) + " external</span>"
|
|
@@ -765,9 +776,11 @@
|
|
|
765
776
|
try {
|
|
766
777
|
const res = await fetch("/api/update", { method: "POST", headers: { "Content-Type": "application/json" }, body: "{}" });
|
|
767
778
|
const out = await res.json();
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
779
|
+
if (!out.ok) { $("updateNote").textContent = "Update failed: " + (out.error || "error"); return; }
|
|
780
|
+
// The UI bundle may have been refreshed server-side; reload so the browser
|
|
781
|
+
// picks up the new dashboard and fresh data automatically.
|
|
782
|
+
$("updateNote").textContent = (out.note || "Updated.") + " Refreshing the dashboard...";
|
|
783
|
+
setTimeout(() => location.reload(), 1200);
|
|
771
784
|
} catch { $("updateNote").textContent = "Could not reach the server to update."; }
|
|
772
785
|
}
|
|
773
786
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enigmax/dashboard",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Local browser dashboard UI for enigma: the static page and chart assets enigma serves on its loopback dashboard (savings, real tool usage, in-browser settings). Installed on demand by enigma-cli; not a runtime dependency.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|