@javierfrancoleal/dsh-supervisor 1.0.31 → 1.0.33
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 +12 -11
- package/package.json +1 -1
package/dashboard.html
CHANGED
|
@@ -117,6 +117,7 @@ td,th{border-bottom:1px solid var(--line);padding:9px 6px;text-align:left}
|
|
|
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
119
|
.langstep-inner .langreel{width:min(340px,86vw)}
|
|
120
|
+
.langstep-inner svg{width:150px;height:150px}
|
|
120
121
|
.langstep-inner svg path.draw{stroke-dasharray:100;animation:drawStroke 1.2s cubic-bezier(.4,0,.2,1) forwards}
|
|
121
122
|
@media (prefers-reduced-motion: reduce){.langstep-inner svg path.draw{animation:none}}
|
|
122
123
|
#loginView{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;box-shadow:none;text-align:center}
|
|
@@ -127,7 +128,7 @@ td,th{border-bottom:1px solid var(--line);padding:9px 6px;text-align:left}
|
|
|
127
128
|
#loginView .loginerr{background:rgba(239,68,68,.25);color:#fff;border:1px solid rgba(255,255,255,.3)}
|
|
128
129
|
#loginView .eye{color:#fff}
|
|
129
130
|
#loginView .btn.gray{background:rgba(255,255,255,.16);color:#fff;border:1px solid rgba(255,255,255,.3)}
|
|
130
|
-
.langreel{width:min(340px,86vw);height:58px;margin:10px auto;background:rgba(
|
|
131
|
+
.langreel{width:min(340px,86vw);height:58px;margin:10px auto;background:rgba(167,139,250,.45);border:1px solid rgba(255,255,255,.55);border-radius:10px;backdrop-filter:blur(14px);overflow:hidden;cursor:pointer;position:relative;box-shadow:0 10px 30px rgba(76,29,149,.20)}
|
|
131
132
|
body.dark .langreel{background:rgba(124,92,255,.35)}
|
|
132
133
|
.ticks{display:flex;flex-direction:column;will-change:transform}
|
|
133
134
|
.tick{height:58px;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:600;opacity:.85;color:#fff}
|
|
@@ -180,7 +181,6 @@ body.wall pre{max-height:40vh}
|
|
|
180
181
|
<div id="langStep" class="hidden" style="display:none">
|
|
181
182
|
<div class="langstep-inner">
|
|
182
183
|
<svg width="110" height="110" viewBox="0 0 64 64" aria-hidden="true"><path class="draw" pathLength="100" d="M10 32 C10 22 16 14 32 14 C48 14 54 22 54 32 C54 42 48 50 32 50 C20 50 12.5 45.2 10.5 38.5 C14 42.5 20 41 25.4 34.8 A6.6 6.6 0 0 1 38.6 34.8 C38.6 31.4 36.6 28.2 32 22.5 C27.4 28.2 25.4 31.4 25.4 34.8" fill="none" stroke="#fff" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
|
183
|
-
<p id="langStepHint" class="langstep-hint">Choose your language</p>
|
|
184
184
|
<div class="langreel" id="langStepReel"><div class="ticks" id="langStepTicks"></div></div>
|
|
185
185
|
</div>
|
|
186
186
|
</div>
|
|
@@ -208,7 +208,6 @@ body.wall pre{max-height:40vh}
|
|
|
208
208
|
<p id="tagline">The AI works. The human decides.</p>
|
|
209
209
|
</div>
|
|
210
210
|
<h2 id="loginTitle" style="font-size:14px;color:var(--muted);text-align:center">Log in</h2>
|
|
211
|
-
<div class="langreel" id="langReel"><div class="ticks" id="langTicks"></div></div>
|
|
212
211
|
<input id="loginUser" placeholder="User" autocomplete="username">
|
|
213
212
|
<div class="passwrap">
|
|
214
213
|
<input id="loginPass" type="password" placeholder="Password" autocomplete="current-password">
|
|
@@ -416,7 +415,13 @@ $("soundBtn").onclick=()=>{soundOn=!soundOn;try{localStorage.setItem("dsh-sound"
|
|
|
416
415
|
try{darkOn=localStorage.getItem("dsh-dark")==="1";soundOn=localStorage.getItem("dsh-sound")!=="0";}catch(e){}
|
|
417
416
|
applyToggles();
|
|
418
417
|
document.body.classList.add("loginpage");
|
|
419
|
-
|
|
418
|
+
const firstRun=(()=>{try{return !localStorage.getItem("dsh-lang");}catch(e){return true;}})();
|
|
419
|
+
if(firstRun){
|
|
420
|
+
$("splash").classList.add("done");
|
|
421
|
+
setTimeout(()=>{$("langStep").style.display="flex";},300);
|
|
422
|
+
}else{
|
|
423
|
+
setTimeout(()=>{$("splash").classList.add("done");},1300);
|
|
424
|
+
}
|
|
420
425
|
async function reRenderDynamic(){
|
|
421
426
|
if(!me)return;
|
|
422
427
|
if(me.role==="owner"){loadMetrics($("ownerMetrics"));loadUsers();loadUsage();loadField();renderOrders();renderSuggest();}
|
|
@@ -545,12 +550,12 @@ function buildLangMenu(){
|
|
|
545
550
|
const r=document.createElement("div");
|
|
546
551
|
r.className="orow"+(l==="en"?" center":"");
|
|
547
552
|
r.innerHTML='<span>'+LANGNAMES[l]+'</span><span class="sub">'+l.toUpperCase()+'</span>';
|
|
548
|
-
r.onclick=()=>{cur=l;applyLang();$("langOverlay").style.display="none";markReel();$("langStep").classList.add("done");};
|
|
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);};
|
|
549
554
|
rows.appendChild(r);
|
|
550
555
|
}
|
|
551
556
|
}
|
|
552
557
|
function markReel(){
|
|
553
|
-
document.querySelectorAll("#
|
|
558
|
+
document.querySelectorAll("#langStepTicks .tick").forEach(t=>t.classList.toggle("active",t.dataset.l===cur));
|
|
554
559
|
}
|
|
555
560
|
function buildReel(ticksId){
|
|
556
561
|
for(let pass=0;pass<2;pass++){
|
|
@@ -569,16 +574,12 @@ function buildReel(ticksId){
|
|
|
569
574
|
})(t0);
|
|
570
575
|
}
|
|
571
576
|
buildLangMenu();
|
|
572
|
-
buildReel("langTicks");
|
|
573
577
|
buildReel("langStepTicks");
|
|
574
578
|
markReel();
|
|
575
|
-
$("langReel").onclick=()=>{$("langOverlay").style.display="flex";const en=document.querySelector("#langRows .center");if(en)en.scrollIntoView({block:"center"});};
|
|
576
579
|
$("langStepReel").onclick=()=>{$("langOverlay").style.display="flex";const en=document.querySelector("#langRows .center");if(en)en.scrollIntoView({block:"center"});};
|
|
577
580
|
$("closeOverlay").onclick=()=>{$("langOverlay").style.display="none";};
|
|
578
581
|
// The Apple flow: after the splash, the language menu opens once (until chosen).
|
|
579
|
-
|
|
580
|
-
$("langStep").style.display="flex";
|
|
581
|
-
},1900);
|
|
582
|
+
|
|
582
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);}}
|
|
583
584
|
for(const l of Object.keys(LANG))pill(l);
|
|
584
585
|
try{const q=new URLSearchParams(location.search);const ql=q.get("lang");if(ql&&S[ql])cur=ql;}catch(e){}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@javierfrancoleal/dsh-supervisor",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.33",
|
|
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",
|