Files
steam-chat/public/index.html

169 lines
8.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Steam Chat</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<div id="dropOverlay" class="drop-overlay">
<div class="drop-overlay-card">松开即可发送图片</div>
</div>
<div id="sidebarBackdrop" class="sidebar-backdrop" aria-hidden="true"></div>
<div id="imageLightbox" class="image-lightbox" aria-hidden="true">
<div class="image-lightbox-dialog" role="dialog" aria-modal="true" aria-label="图片预览" tabindex="-1">
<button id="closeImageLightbox" class="secondary image-lightbox-close" type="button" aria-label="关闭">×</button>
<div id="imageLightboxViewport" class="image-lightbox-viewport">
<img id="imageLightboxImage" alt="放大预览" />
</div>
<div class="image-lightbox-toolbar">
<button id="imageZoomOut" class="secondary" type="button" aria-label="缩小"></button>
<button id="imageZoomReset" class="secondary" type="button" aria-label="重置缩放">100%</button>
<button id="imageZoomIn" class="secondary" type="button" aria-label="放大"></button>
</div>
<div id="imageLightboxCaption" class="image-lightbox-caption"></div>
</div>
</div>
<div class="app">
<aside class="sidebar">
<div class="sidebar-mobile-header">
<strong>会话与设置</strong>
<button id="closeSidebar" class="secondary" type="button">关闭</button>
</div>
<div class="card sidebar-config-card">
<div class="toolbar">
<label>
<span class="field-label">打开会话</span>
<input id="targetId" placeholder="输入 SteamID64" />
</label>
<button id="openConversation" type="button">打开</button>
</div>
<div class="toolbar toolbar-spaced">
<label class="field-compact">
<span class="field-label">历史条数</span>
<input id="historyLimit" type="number" min="1" max="500" value="100" />
</label>
<button id="reloadHistory" class="secondary" type="button">刷新历史</button>
</div>
<div id="feedbackStatus" class="feedback-status" aria-live="polite">准备就绪</div>
</div>
<div class="card conversation-card card-fill">
<div class="sidebar-tabs" role="tablist" aria-label="侧边栏列表">
<button type="button" id="sidebarTabButtonConversations" class="sidebar-tab active" data-tab="conversations" role="tab" aria-selected="true" aria-controls="sidebarTabConversations">最近会话</button>
<button type="button" id="sidebarTabButtonFriends" class="sidebar-tab" data-tab="friends" role="tab" aria-selected="false" aria-controls="sidebarTabFriends" tabindex="-1">好友</button>
<button type="button" id="sidebarTabButtonGroups" class="sidebar-tab" data-tab="groups" role="tab" aria-selected="false" aria-controls="sidebarTabGroups" tabindex="-1">群组</button>
</div>
<div id="sidebarTabConversations" class="sidebar-tab-panel" role="tabpanel" aria-labelledby="sidebarTabButtonConversations">
<div class="chat-header sidebar-section-header">
<strong>最近会话</strong>
<button id="reloadConversations" class="secondary" type="button">刷新列表</button>
</div>
<div id="conversationList" class="sidebar-list"></div>
</div>
<div id="sidebarTabFriends" class="sidebar-tab-panel" role="tabpanel" aria-labelledby="sidebarTabButtonFriends" hidden>
<div class="chat-header sidebar-section-header">
<strong>好友列表</strong>
<button id="reloadFriends" class="secondary" type="button">刷新列表</button>
</div>
<div id="friendsList" class="sidebar-list"></div>
</div>
<div id="sidebarTabGroups" class="sidebar-tab-panel" role="tabpanel" aria-labelledby="sidebarTabButtonGroups" hidden>
<div class="chat-header sidebar-section-header">
<strong>群组列表</strong>
<button id="reloadGroups" class="secondary" type="button">刷新列表</button>
</div>
<div id="groupsList" class="sidebar-list"></div>
</div>
</div>
</aside>
<main class="chat-panel">
<div class="card chat-topbar">
<div class="chat-header">
<div class="chat-heading">
<div id="chatTitle" class="chat-title">未选择会话</div>
<div id="chatSubtitle" class="chat-subtitle">请选择左侧会话,或手动输入 SteamID64</div>
</div>
<div class="chat-header-actions">
<button id="mobileSidebarToggle" class="secondary mobile-nav-button" type="button" aria-expanded="false">会话列表</button>
<div id="connectionStatus" class="connection-chip is-connecting" role="status" aria-live="polite">
<span class="connection-chip-dot" aria-hidden="true"></span>
<span id="connectionStatusLabel">连接中</span>
</div>
</div>
</div>
</div>
<div id="messages" class="card">
<div class="empty-state">请选择一个会话开始聊天</div>
</div>
<div class="card composer">
<div id="attachmentPreview" class="attachment-preview">
<img id="attachmentPreviewImage" alt="attachment preview" hidden />
<div class="attachment-preview-body">
<div id="attachmentPreviewTitle" class="attachment-preview-title"></div>
<div id="attachmentPreviewSubtitle" class="attachment-preview-subtitle"></div>
</div>
<button id="clearAttachment" class="secondary" type="button">移除</button>
</div>
<div id="uploadQueue" class="upload-queue">
<div class="upload-queue-title">发送队列</div>
<div id="uploadQueueList"></div>
</div>
<div id="urlPanel" class="url-panel">
<label>
<span class="field-label">图片 URL</span>
<input id="imageUrl" placeholder="https://example.com/a.png" />
</label>
<button id="confirmImageUrl" type="button">添加</button>
<button id="cancelImageUrl" class="secondary" type="button">取消</button>
</div>
<div class="composer-row">
<div class="composer-actions">
<button id="attachmentButton" class="secondary icon-button" type="button" title="选择图片或图片 URL"></button>
<div id="attachmentMenu" class="attachment-menu">
<button id="chooseImageButton" type="button">选择图片</button>
<button id="chooseUrlButton" type="button">输入图片 URL</button>
<div class="attachment-hint">支持直接粘贴剪切板图片到输入框</div>
</div>
<button id="pickerButton" class="secondary icon-button" type="button" title="表情和贴纸"></button>
<div id="pickerPanel" class="picker-panel">
<div class="picker-tabs">
<button type="button" class="picker-tab active" data-tab="emoticons">表情</button>
<button type="button" class="picker-tab" data-tab="stickers">贴纸</button>
</div>
<div class="picker-search">
<input id="pickerSearch" type="text" placeholder="搜索..." />
</div>
<div id="pickerGrid" class="picker-grid"></div>
<div id="pickerEmpty" class="picker-empty">加载中…</div>
</div>
<input id="imageFile" type="file" accept="image/*" hidden />
</div>
<label class="composer-field">
<span class="field-label">文本消息</span>
<textarea
id="messageInput"
placeholder="输入消息Enter 发送Shift+Enter 换行;也可直接粘贴图片"
data-desktop-placeholder="输入消息Enter 发送Shift+Enter 换行;也可直接粘贴图片"
data-mobile-placeholder="输入消息"
></textarea>
<div id="emoticonSuggestions" class="emoticon-suggestions">
<div id="emoticonPreview" class="emoticon-preview">
<img id="emoticonPreviewImage" alt="emoticon preview" />
<div id="emoticonPreviewLabel" class="emoticon-preview-label"></div>
</div>
</div>
</label>
<button id="sendMessage" type="button">发送</button>
</div>
</div>
</main>
</div>
<script type="module" src="/app.js"></script>
</body>
</html>