@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.
- package/assets/index.html +19 -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 + ' <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.
|
|
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": [
|