Files
chat_grid/client/index.html

93 lines
3.8 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Chat Grid</title>
</head>
<body>
<main class="app">
<h1>Chat Grid</h1>
<div id="connectionStatus" role="status" aria-live="polite" aria-atomic="true"></div>
<section id="loginView" class="auth-panel">
<h2>Login</h2>
<div class="auth-row">
<label for="authUsername">Username</label>
<input id="authUsername" type="text" maxlength="32" autocomplete="username" />
</div>
<div class="auth-row">
<label for="authPassword">Password</label>
<input id="authPassword" type="password" maxlength="64" autocomplete="current-password" />
</div>
<button id="showRegisterButton" type="button">Register</button>
</section>
<section id="registerView" class="auth-panel hidden">
<h2>Register</h2>
<div class="auth-row">
<label for="registerUsername">Username</label>
<input id="registerUsername" type="text" maxlength="32" autocomplete="username" />
</div>
<div class="auth-row">
<label for="registerPassword">Password</label>
<input id="registerPassword" type="password" maxlength="64" autocomplete="new-password" />
</div>
<div class="auth-row">
<label for="registerPasswordConfirm">Confirm Password</label>
<input id="registerPasswordConfirm" type="password" maxlength="64" autocomplete="new-password" />
</div>
<div class="auth-row">
<label for="registerEmail">Email (optional)</label>
<input id="registerEmail" type="email" maxlength="320" autocomplete="email" />
</div>
<p id="authPolicyHintRegister" class="auth-hint"></p>
<button id="showLoginButton" type="button">Login</button>
</section>
<div class="controls" id="button-container">
<button id="connectButton">Connect</button>
<button id="logoutButton" class="hidden">Log out</button>
<button id="settingsButton">Audio setup</button>
<button id="disconnectButton" class="hidden">Disconnect</button>
<button id="focusGridButton" class="hidden" aria-controls="gameCanvas">Chat Grid</button>
</div>
<div id="deviceSummary">
<p id="audioInputCurrent" class="hidden"></p>
<p id="audioOutputCurrent" class="hidden"></p>
</div>
<div id="status" role="region" aria-live="polite"></div>
<canvas
id="gameCanvas"
width="600"
height="600"
tabindex="0"
class="hidden"
aria-label="Chat Grid, press question mark for help."
></canvas>
<div id="instructions" class="hidden"></div>
<footer id="appFooter">
<small id="appVersion">Another AI experiment with Jage. Version</small>
<section id="updatesSection" class="updates-section">
<h2>Latest Updates</h2>
<button id="updatesToggle" type="button" aria-expanded="false" aria-controls="updatesPanel">
Show updates
</button>
<div id="updatesPanel" class="hidden" hidden></div>
</section>
</footer>
<div id="settingsModal" class="hidden" role="dialog" aria-modal="true" aria-labelledby="modalTitle">
<div class="modal-content">
<h2 id="modalTitle">Audio Settings</h2>
<label for="audioInputSelect">Microphone (Input)</label>
<select id="audioInputSelect"></select>
<label for="audioOutputSelect">Speakers (Output)</label>
<select id="audioOutputSelect"></select>
<button id="closeSettingsButton">Close</button>
</div>
</div>
</main>
<script src="%BASE_URL%version.js"></script>
<script type="module" src="/src/main.ts"></script>
</body>
</html>