- Shows 'tap titan' fullscreen overlay when Titan interaction is needed - Hides intro first, shows tap overlay, waits for backend, then transitions to main UI on success - On error, returns to intro screen - Wired into: register, connect (unregistered), connect (registered)
- commit
- 404b0f5ba2855628de24f07a879a1508d7bb5777
- parent
- 3956ee729cbe499d3d2eceed3716b346f01d98e2
- author
- dami etoile <dami.etoile@gmail.com>
| M | src/ | 49 | +++++++++++++++++++++--------- |
@@ -372,6 +372,15 @@
372372 </style>373373 </head>374374 <body>375+ <!-- Titan tap overlay -->376+ <div class="setup hidden" id="tap-overlay" style="z-index: 200;">377+ <div class="setup-content">378+ <h1>tap titan</h1>379+ <p>Touch the sensor on your key when it blinks.</p>380+ <div class="setup-status pending" id="tap-status">waiting...</div>381+ </div>382+ </div>383+375384 <!-- Intro screen (adaptive — shows both workflows) -->376385 <div class="setup hidden" id="setup">377386 <div class="setup-content">@@ -387,7 +396,7 @@
387396 <button class="setup-btn" id="setup-btn" onclick="setupRegister()">register</button>388397 <button class="setup-btn" onclick="introConnect()">connect</button>389398 </div>390- <div class="setup-status" id="setup-status">tap titan when it blinks</div>399+ <div class="setup-status" id="setup-status"></div>391400 </div>392401 393402 <!-- Registered: host or connect -->@@ -401,7 +410,7 @@
401410 <div style="display: flex; gap: 16px; justify-content: center; margin-top: 12px;">402411 <button class="setup-btn" onclick="introConnectRegistered()">connect</button>403412 </div>404- <div class="setup-status" id="setup-status-reg">tap titan when it blinks</div>413+ <div class="setup-status" id="setup-status-reg"></div>405414 </div>406415 </div>407416 </div>@@ -524,6 +533,14 @@
524533 }525534 }526535 536+ // ─── Tap overlay ───────────────────────────────────────────────────537+ function showTap() {538+ document.getElementById('tap-overlay').classList.remove('hidden');539+ }540+ function hideTap() {541+ document.getElementById('tap-overlay').classList.add('hidden');542+ }543+527544 // ─── Intro actions ─────────────────────────────────────────────────528545 function hideIntro() {529546 document.getElementById('setup').classList.add('hidden');@@ -538,8 +555,10 @@
538555 return;539556 }540557 hideIntro();558+ showTap();541559 document.getElementById('pin-input').value = pin;542560 await connectHost();561+ hideTap();543562 }544563 545564 async function introConnectRegistered() {@@ -551,8 +570,10 @@
551570 return;552571 }553572 hideIntro();573+ showTap();554574 document.getElementById('pin-input').value = pin;555575 await connectHost();576+ hideTap();556577 }557578 558579 async function introHost() {@@ -567,30 +588,30 @@
567588 const status = document.getElementById('setup-status');568589 if (!pin) {569590 status.className = 'setup-status err';570- status.textContent = 'enter PIN';591+ status.textContent = 'enter pin';571592 return;572593 }573594 btn.disabled = true;574- status.className = 'setup-status pending';575- status.textContent = 'tap titan...';595+ hideIntro();596+ showTap();576597 try {577598 const result = await invoke('titan_register_host', { pin });578599 if (result.registered) {579- status.className = 'setup-status ok';580- status.textContent = 'registered';581- setTimeout(() => {582- document.getElementById('setup').classList.add('hidden');583- document.getElementById('node-id-text').textContent =584- result.node_id.substring(0, 16) + '...';585- registered = true;586- checkRegistration();587- }, 600);600+ hideTap();601+ registered = true;602+ document.getElementById('node-id-text').textContent =603+ result.node_id.substring(0, 16) + '...';604+ checkRegistration();588605 } else {606+ hideTap();607+ document.getElementById('setup').classList.remove('hidden');589608 status.className = 'setup-status err';590609 status.textContent = 'failed';591610 btn.disabled = false;592611 }593612 } catch (e) {613+ hideTap();614+ document.getElementById('setup').classList.remove('hidden');594615 status.className = 'setup-status err';595616 status.textContent = 'error: ' + e;596617 btn.disabled = false;