@javierfrancoleal/dsh-supervisor 1.0.33 → 1.0.35
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/dashboard.html +10 -9
- package/package.json +1 -1
package/dashboard.html
CHANGED
|
@@ -116,7 +116,7 @@ td,th{border-bottom:1px solid var(--line);padding:9px 6px;text-align:left}
|
|
|
116
116
|
#langStep.done{opacity:0;visibility:hidden}
|
|
117
117
|
.langstep-inner{text-align:center}
|
|
118
118
|
.langstep-hint{color:rgba(255,255,255,.9);font-size:14px;margin:18px 0 4px}
|
|
119
|
-
.langstep-inner .langreel{width:min(340px,86vw)}
|
|
119
|
+
.langstep-inner .langreel{width:min(340px,86vw);background:rgba(167,139,250,.55)!important;border:1px solid rgba(255,255,255,.6)!important;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
|
|
120
120
|
.langstep-inner svg{width:150px;height:150px}
|
|
121
121
|
.langstep-inner svg path.draw{stroke-dasharray:100;animation:drawStroke 1.2s cubic-bezier(.4,0,.2,1) forwards}
|
|
122
122
|
@media (prefers-reduced-motion: reduce){.langstep-inner svg path.draw{animation:none}}
|
|
@@ -164,8 +164,8 @@ body.dark .langreel{background:rgba(124,92,255,.35)}
|
|
|
164
164
|
.wall-clock span{font-size:12px;opacity:.75}
|
|
165
165
|
.live-dot{display:flex;align-items:center;gap:7px;color:#4ade80;font-weight:800;font-size:13px;letter-spacing:.08em}
|
|
166
166
|
.live-dot::before{content:"";width:9px;height:9px;border-radius:50%;background:#4ade80;animation:pulse 1.6s infinite}
|
|
167
|
-
.
|
|
168
|
-
.
|
|
167
|
+
.wtick{background:#1b2436;color:#d7e3f4;border-radius:10px;padding:8px 12px;font-size:13.5px;margin:6px 0}
|
|
168
|
+
.wtick.dim{color:#64748b;background:none;border:1px dashed #334155}
|
|
169
169
|
.wall-note{color:#64748b;font-size:12px;text-align:center;margin-top:10px}
|
|
170
170
|
.welcome{position:relative;border-left:4px solid var(--blue);animation:rise .4s ease}
|
|
171
171
|
.welcome .wclose{position:absolute;top:10px;right:10px;background:none;border:none;font-size:16px;color:var(--muted);cursor:pointer}
|
|
@@ -417,8 +417,9 @@ applyToggles();
|
|
|
417
417
|
document.body.classList.add("loginpage");
|
|
418
418
|
const firstRun=(()=>{try{return !localStorage.getItem("dsh-lang");}catch(e){return true;}})();
|
|
419
419
|
if(firstRun){
|
|
420
|
-
$("splash").
|
|
421
|
-
|
|
420
|
+
$("splash").style.display="none";
|
|
421
|
+
$("loginView").style.display="none";
|
|
422
|
+
$("langStep").style.display="flex";
|
|
422
423
|
}else{
|
|
423
424
|
setTimeout(()=>{$("splash").classList.add("done");},1300);
|
|
424
425
|
}
|
|
@@ -506,7 +507,7 @@ $("exportBtn").onclick=()=>doExport("reports");
|
|
|
506
507
|
$("exportOrdersBtn").onclick=()=>doExport("orders");
|
|
507
508
|
function panelLinks(){const u=me?encodeURIComponent(me.name):"",r=me?encodeURIComponent(me.role):"",lb=me?encodeURIComponent(me.label||me.name):"";$("openPanelLink").setAttribute("href","/panel?user="+u+"&role="+r+"&label="+lb+"&lang="+cur);$("leadOpenPanelLink").setAttribute("href","/panel?user="+u+"&role="+r+"&label="+lb+"&lang="+cur);}
|
|
508
509
|
function applyLang(){
|
|
509
|
-
|
|
510
|
+
// (the language is persisted only on an explicit human choice)
|
|
510
511
|
$("welcomeClose").onclick=()=>{$("welcomeCard").style.display="none";try{localStorage.setItem("lv-welcome","1");}catch(e){}};
|
|
511
512
|
$("splashTag").textContent=t("tagline");
|
|
512
513
|
$("welcomeTitle").textContent=t("welcomeTitle");$("welcomeBody").textContent=t("welcomeBody");$("wallNote").textContent=t("wallNote");
|
|
@@ -550,7 +551,7 @@ function buildLangMenu(){
|
|
|
550
551
|
const r=document.createElement("div");
|
|
551
552
|
r.className="orow"+(l==="en"?" center":"");
|
|
552
553
|
r.innerHTML='<span>'+LANGNAMES[l]+'</span><span class="sub">'+l.toUpperCase()+'</span>';
|
|
553
|
-
r.onclick=()=>{cur=l;applyLang();$("langOverlay").style.display="none";markReel();$("langStep").classList.add("done");const sp=$("splash");sp.classList.remove("done");const p=sp.querySelector(".draw");if(p){p.style.animation="none";void p.offsetWidth;p.style.animation="";}setTimeout(()=>{sp.classList.add("done");},2600);};
|
|
554
|
+
r.onclick=()=>{cur=l;try{localStorage.setItem("dsh-lang",cur);}catch(e){}applyLang();$("langOverlay").style.display="none";markReel();$("langStep").classList.add("done");const sp=$("splash");sp.classList.remove("done");const p=sp.querySelector(".draw");if(p){p.style.animation="none";void p.offsetWidth;p.style.animation="";}setTimeout(()=>{$("loginView").style.display="";},2100);setTimeout(()=>{sp.classList.add("done");},2600);};
|
|
554
555
|
rows.appendChild(r);
|
|
555
556
|
}
|
|
556
557
|
}
|
|
@@ -580,7 +581,7 @@ $("langStepReel").onclick=()=>{$("langOverlay").style.display="flex";const en=do
|
|
|
580
581
|
$("closeOverlay").onclick=()=>{$("langOverlay").style.display="none";};
|
|
581
582
|
// The Apple flow: after the splash, the language menu opens once (until chosen).
|
|
582
583
|
|
|
583
|
-
function pill(l){for(const host of ["footLangs"]){const el=$(host);if(!el)continue;const b=document.createElement("button");b.className="pill";b.dataset.l=l;b.textContent=LANG[l];b.onclick=()=>{cur=l;applyLang();};$(host).appendChild(b);}}
|
|
584
|
+
function pill(l){for(const host of ["footLangs"]){const el=$(host);if(!el)continue;const b=document.createElement("button");b.className="pill";b.dataset.l=l;b.textContent=LANG[l];b.onclick=()=>{cur=l;try{localStorage.setItem("dsh-lang",cur);}catch(e){}applyLang();};$(host).appendChild(b);}}
|
|
584
585
|
for(const l of Object.keys(LANG))pill(l);
|
|
585
586
|
try{const q=new URLSearchParams(location.search);const ql=q.get("lang");if(ql&&S[ql])cur=ql;}catch(e){}
|
|
586
587
|
try{const saved=localStorage.getItem("dsh-lang");if(saved&&S[saved])cur=saved;}catch(e){}
|
|
@@ -752,7 +753,7 @@ api("/api/setup-status").then((st)=>{if(st&&st.users===0){$("setupSection").clas
|
|
|
752
753
|
const st=sessionStorage.getItem("dsh-sup-token");
|
|
753
754
|
if(st){token=st;me=JSON.parse(sessionStorage.getItem("dsh-sup-me")||"null");(async()=>{const r=await api("/api/me");if(!r||!r.name){logout();return;}enter();})();}
|
|
754
755
|
else setWho();
|
|
755
|
-
async function wallTick(){try{const r=await (await fetch("/api/wall")).json();const cards=[[t("week"),r.reportsWeek],[t("ordersTitle"),r.orders],[t("feedback"),r.feedback],[t("workersActive"),r.workers],[t("reportsTotal"),r.reports]];$("wallCards").innerHTML=cards.map(c=>'<div class="wall-card"><div class="v">'+(c[1]===undefined?"–":c[1])+'</div><div class="l">'+c[0]+'</div></div>').join("");const ticks=[...(r.ordersTail||[]).map(x=>"🔔 "+esc(x)),...(r.feedbackTail||"").split("\n").filter(Boolean).slice(-4).map(esc)];$("wallFeed").innerHTML=ticks.length?ticks.map(x=>'<div class="
|
|
756
|
+
async function wallTick(){try{const r=await (await fetch("/api/wall")).json();const cards=[[t("week"),r.reportsWeek],[t("ordersTitle"),r.orders],[t("feedback"),r.feedback],[t("workersActive"),r.workers],[t("reportsTotal"),r.reports]];$("wallCards").innerHTML=cards.map(c=>'<div class="wall-card"><div class="v">'+(c[1]===undefined?"–":c[1])+'</div><div class="l">'+c[0]+'</div></div>').join("");const ticks=[...(r.ordersTail||[]).map(x=>"🔔 "+esc(x)),...(r.feedbackTail||"").split("\n").filter(Boolean).slice(-4).map(esc)];$("wallFeed").innerHTML=ticks.length?ticks.map(x=>'<div class="wtick">'+x+'</div>').join(""):'<div class="wtick dim">'+t("noActivity")+'</div>';try{const s=await (await fetch("/api/sector")).json();$("wallSector").textContent=(s&&s.id)?s.id:"";}catch(e){}}catch(e){$("wallFeed").innerHTML='<div class="wtick dim">'+t("cannotReach")+'</div>';}}
|
|
756
757
|
function clockTick(){const d=new Date();$("wallClock").textContent=d.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});$("wallDate").textContent=d.toLocaleDateString([],{weekday:"short",day:"numeric",month:"short"});}
|
|
757
758
|
if(location.search.indexOf("wall=1")>=0){
|
|
758
759
|
document.body.classList.add("wall");show("wallView");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@javierfrancoleal/dsh-supervisor",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.35",
|
|
4
4
|
"description": "The Veilleux central control plane of the J.Franco agentic workflow suite: user accounts, the live conversation flow (listen → per-person summary → confirm → orders), telemetry, and the universal sector dashboard with 10 languages. Created by J.Franco.",
|
|
5
5
|
"author": "J.Franco",
|
|
6
6
|
"license": "MIT",
|