@enigmax/dashboard 0.1.65 → 0.1.67

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 +19 -2
  2. package/package.json +1 -1
package/assets/index.html CHANGED
@@ -3804,10 +3804,21 @@ export {
3804
3804
  + '<button type="button" class="toggle" data-pack="update" data-id="' + esc(p.id) + '">Update</button>'
3805
3805
  + '<button type="button" class="btn-danger" data-pack="remove" data-id="' + esc(p.id) + '">Remove</button>'
3806
3806
  : '<button type="button" class="toggle on" data-pack="install" data-id="' + esc(p.id) + '">Install</button>';
3807
+ const stTag = (s) => s === "expired" ? " (login expired)" : s === "empty" ? " (not signed in)" : s === "absent" ? " (no login)" : "";
3808
+ const opts = '<option value="">follow active (' + esc(p.resolvedAccount || "default") + ")" + stTag(p.resolvedState) + "</option>"
3809
+ + (p.accounts || []).map((a) => '<option value="' + esc(a.name) + '"' + (p.defaultAccount === a.name ? " selected" : "") + ">" + esc(a.name) + (a.label && a.label !== a.name ? " - " + esc(a.label) : "") + stTag(a.state) + "</option>").join("");
3810
+ const warn = p.installed && (p.resolvedState === "expired" || p.resolvedState === "empty")
3811
+ ? '<div class="set-hint" style="margin-top:6px;color:var(--warn,#e0a020)">This login is ' + (p.resolvedState === "expired" ? "expired" : "not signed in") + ' - the pack may ask you to log in. Refresh it (launch that account once) or pick another above.</div>'
3812
+ : "";
3813
+ const accountSel = p.installed
3814
+ ? '<label class="set-hint" style="display:flex;align-items:center;gap:8px;margin-top:10px">Account that seeds this pack:'
3815
+ + '<select data-pack-account data-id="' + esc(p.id) + '">' + opts + "</select></label>" + warn
3816
+ : "";
3807
3817
  return '<div class="panel"><div class="set-row"><div class="set-meta">'
3808
3818
  + '<div class="set-name">' + esc(p.label) + " " + state + " " + added + '</div>'
3809
3819
  + '<div class="set-hint">' + esc(p.description) + '</div>'
3810
3820
  + '<div class="set-hint" style="margin-top:6px">' + tags + ' &nbsp; <a href="' + esc(p.homepage) + '" target="_blank" rel="noopener">source</a></div>'
3821
+ + accountSel
3811
3822
  + '</div></div><div class="set-ctl" style="display:flex;gap:8px;flex-wrap:wrap;margin-top:8px">' + actions + '</div></div>';
3812
3823
  }).join("");
3813
3824
  }
@@ -3816,12 +3827,12 @@ export {
3816
3827
  try { renderPacks((await (await fetch("/api/packs", { cache: "no-store" })).json()).packs); }
3817
3828
  catch { $("packsBody").innerHTML = '<div class="empty" style="padding:12px 0">Packs unavailable.</div>'; }
3818
3829
  }
3819
- async function packAction(id, action) {
3830
+ async function packAction(id, action, value) {
3820
3831
  const confirmMsg = action === "remove" ? "Remove this pack and its isolated context?" : null;
3821
3832
  if (confirmMsg && !(await askConfirm("Confirm", confirmMsg, true))) return;
3822
3833
  setNote("packsNote", action === "install" || action === "update" ? "Working..." : "Saving...");
3823
3834
  try {
3824
- const out = await (await fetch("/api/packs", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ id, action }) })).json();
3835
+ const out = await (await fetch("/api/packs", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ id, action, value }) })).json();
3825
3836
  if (out.packs) renderPacks(out.packs);
3826
3837
  if (out.command) { try { await navigator.clipboard.writeText(out.command); } catch { /* clipboard blocked */ } }
3827
3838
  setNote("packsNote", out.note || out.error || (out.ok ? "Done." : "Action failed."), out.ok ? "ok" : "err");
@@ -3834,6 +3845,12 @@ export {
3834
3845
  if (!b) return;
3835
3846
  packAction(b.dataset.id, b.dataset.pack);
3836
3847
  });
3848
+ // Pin which account seeds a pack (empty value = follow the active account).
3849
+ $("view-packs").addEventListener("change", (e) => {
3850
+ const sel = e.target.closest("select[data-pack-account]");
3851
+ if (!sel) return;
3852
+ packAction(sel.dataset.id, "set-account", sel.value);
3853
+ });
3837
3854
  }
3838
3855
 
3839
3856
  // --- recall subpage (local session memory; reads your own transcripts) ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enigmax/dashboard",
3
- "version": "0.1.65",
3
+ "version": "0.1.67",
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": [