@javierfrancoleal/dsh-supervisor 1.0.32 → 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.
Files changed (2) hide show
  1. package/dashboard.html +12 -13
  2. 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(124,92,255,.30);border:1px solid rgba(255,255,255,.40);border-radius:10px;backdrop-filter:blur(10px);overflow:hidden;cursor:pointer;position:relative;box-shadow:0 10px 30px rgba(76,29,149,.25)}
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
- setTimeout(()=>{$("splash").classList.add("done");},1300);
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("#langTicks .tick,#langStepTicks .tick").forEach(t=>t.classList.toggle("active",t.dataset.l===cur));
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,18 +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
- setTimeout(()=>{
580
- try{
581
- if(!localStorage.getItem("dsh-lang")){$("langStep").style.display="flex";}
582
- }catch(e){}
583
- },1900);
582
+
584
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);}}
585
584
  for(const l of Object.keys(LANG))pill(l);
586
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.32",
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",