@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.
Files changed (2) hide show
  1. package/assets/index.html +18 -5
  2. 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) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" }[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">' + esc(s.label) + "</div>"
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
- $("updateNote").textContent = out.ok ? (out.note || "Updated.") : ("Update failed: " + (out.error || "error"));
769
- loadSystems();
770
- if (skillsLoaded) loadSkills();
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.5",
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": [