hd-wallet-ui 1.2.0 → 1.2.1
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/package.json +5 -3
- package/src/app.js +372 -254
- package/src/template.js +159 -132
- package/styles/main.css +428 -26
package/src/template.js
CHANGED
|
@@ -3,14 +3,13 @@ export function getModalHTML() {
|
|
|
3
3
|
<!-- Keys Modal -->
|
|
4
4
|
<div id="keys-modal" class="modal">
|
|
5
5
|
<div class="modal-glass modal-wide">
|
|
6
|
-
<div class="modal-header"><div class="account-header-info"><div class="account-header-top"><h3>Account</h3><h3 class="account-total-value" id="account-total-value"></h3></div><div class="account-address-row"><
|
|
6
|
+
<div class="modal-header"><div class="account-header-info"><div class="account-header-top"><h3>Account</h3><h3 class="account-total-value" id="account-total-value"></h3></div><div class="account-address-row"><span class="account-address-label">xpub</span><code class="account-address-display" id="account-address-display"></code><button class="account-address-copy" id="account-address-copy" title="Copy xpub"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg></button></div></div><button class="modal-close">×</button></div>
|
|
7
7
|
<div class="modal-tabs">
|
|
8
8
|
<button class="modal-tab active" data-modal-tab="vcard-tab-content">Identity</button>
|
|
9
9
|
<button class="modal-tab" data-modal-tab="keys-tab-content">Keys</button>
|
|
10
10
|
<button class="modal-tab" data-modal-tab="trust-tab-content">Trust Map</button>
|
|
11
11
|
<button class="modal-tab" data-modal-tab="bond-tab-content">Bond</button>
|
|
12
|
-
<button class="modal-tab" data-modal-tab="
|
|
13
|
-
<button class="modal-tab" data-modal-tab="decrypt-tab-content">Decrypt</button>
|
|
12
|
+
<button class="modal-tab" data-modal-tab="messaging-tab-content">Messaging</button>
|
|
14
13
|
</div>
|
|
15
14
|
<div class="modal-body">
|
|
16
15
|
<div id="keys-tab-content" class="modal-tab-content">
|
|
@@ -69,23 +68,59 @@ export function getModalHTML() {
|
|
|
69
68
|
</div>
|
|
70
69
|
<div id="vcard-tab-content" class="modal-tab-content active">
|
|
71
70
|
<div id="vcard-form-view">
|
|
72
|
-
<div class="
|
|
73
|
-
<div class="
|
|
74
|
-
<
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
71
|
+
<div class="identity-card">
|
|
72
|
+
<div class="identity-card-photo">
|
|
73
|
+
<div class="photo-preview" id="vcard-photo-preview">
|
|
74
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="photo-placeholder-icon">
|
|
75
|
+
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>
|
|
76
|
+
</svg>
|
|
77
|
+
<video id="vcard-camera-video" autoplay playsinline style="display:none;width:100%;height:100%;object-fit:contain;"></video>
|
|
78
|
+
<div id="vcard-photo-actions" class="photo-actions">
|
|
79
|
+
<label class="glass-btn small" for="vcard-photo-input">Upload</label>
|
|
80
|
+
<button id="vcard-camera-btn" class="glass-btn small" style="display:none;">Take Photo</button>
|
|
81
|
+
<button id="vcard-camera-capture" class="glass-btn small primary" style="display:none;">Capture</button>
|
|
82
|
+
<button id="vcard-camera-cancel" class="glass-btn small" style="display:none;">Cancel</button>
|
|
83
|
+
<button id="vcard-photo-remove" class="glass-btn small" style="display:none;">Remove</button>
|
|
84
|
+
</div>
|
|
85
|
+
<button type="button" id="vcard-photo-edit-btn" class="photo-edit-overlay" title="Edit Photo">
|
|
86
|
+
<svg class="photo-edit-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>
|
|
87
|
+
<svg class="photo-close-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
|
|
88
|
+
</button>
|
|
89
|
+
</div>
|
|
81
90
|
<input type="file" id="vcard-photo-input" accept="image/*" hidden>
|
|
82
|
-
<button id="vcard-camera-btn" class="glass-btn small" style="display:none;">Take Photo</button>
|
|
83
|
-
<button id="vcard-camera-capture" class="glass-btn small primary" style="display:none;">Capture</button>
|
|
84
|
-
<button id="vcard-camera-cancel" class="glass-btn small" style="display:none;">Cancel</button>
|
|
85
|
-
<button id="vcard-photo-remove" class="glass-btn small" style="display:none;">Remove</button>
|
|
86
91
|
</div>
|
|
92
|
+
<div class="identity-card-info" id="identity-card-info">
|
|
93
|
+
<button class="identity-edit-btn" id="identity-edit-btn" title="Edit Identity">
|
|
94
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>
|
|
95
|
+
</button>
|
|
96
|
+
<div class="identity-card-name" id="identity-card-name">--</div>
|
|
97
|
+
<div class="identity-card-detail" id="identity-card-title"></div>
|
|
98
|
+
<div class="identity-card-detail" id="identity-card-org"></div>
|
|
99
|
+
<div class="identity-card-detail" id="identity-card-email"></div>
|
|
100
|
+
<div class="identity-card-detail" id="identity-card-phone"></div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<div class="vcard-actions-footer">
|
|
105
|
+
<div class="vcard-split-btn-group">
|
|
106
|
+
<button id="generate-vcard" class="glass-btn vcard-split-btn vcard-split-export">Export vCard</button>
|
|
107
|
+
<label class="glass-btn vcard-split-btn vcard-split-import" for="vcf-import-input">Import vCard</label>
|
|
108
|
+
<input type="file" id="vcf-import-input" accept=".vcf,text/vcard" hidden>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<div id="vcf-import-result" class="vcf-import-result" style="display: none;">
|
|
113
|
+
<h4 class="section-label">Imported Contact</h4>
|
|
114
|
+
<div class="vcf-import-card">
|
|
115
|
+
<div class="vcf-import-photo" id="vcf-import-photo"></div>
|
|
116
|
+
<div class="vcf-import-fields" id="vcf-import-fields"></div>
|
|
117
|
+
</div>
|
|
118
|
+
<div id="vcf-import-sig-status" class="vcard-sig-badge" style="display:none;"></div>
|
|
87
119
|
</div>
|
|
120
|
+
</div>
|
|
88
121
|
|
|
122
|
+
<div id="vcard-edit-view" class="identity-edit-view" style="display: none;">
|
|
123
|
+
<div class="identity-edit-scroll">
|
|
89
124
|
<div class="identity-form">
|
|
90
125
|
<div class="vcard-form-stack">
|
|
91
126
|
<div class="vcard-form-row name-row">
|
|
@@ -112,6 +147,10 @@ export function getModalHTML() {
|
|
|
112
147
|
<input type="text" id="vcard-suffix" class="vcard-input" placeholder="Jr.">
|
|
113
148
|
</div>
|
|
114
149
|
</div>
|
|
150
|
+
<div class="vcard-input-group">
|
|
151
|
+
<label>Nickname</label>
|
|
152
|
+
<input type="text" id="vcard-nickname" class="vcard-input" placeholder="e.g., Johnny, Ace">
|
|
153
|
+
</div>
|
|
115
154
|
<div class="vcard-form-row">
|
|
116
155
|
<div class="vcard-input-group">
|
|
117
156
|
<label>Email</label>
|
|
@@ -156,46 +195,34 @@ export function getModalHTML() {
|
|
|
156
195
|
</div>
|
|
157
196
|
</div>
|
|
158
197
|
</div>
|
|
159
|
-
|
|
160
|
-
<div class="keys-display-section">
|
|
161
|
-
<h4 class="section-label">Cryptographic Keys <span class="readonly-badge">Read Only</span></h4>
|
|
162
|
-
<p class="keys-display-info">These keys are derived from your HD wallet master seed and cannot be edited.</p>
|
|
163
|
-
|
|
164
|
-
<div class="keys-display-grid" id="vcard-keys-display">
|
|
165
|
-
<!-- Keys will be populated here -->
|
|
166
|
-
</div>
|
|
167
198
|
</div>
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
<
|
|
171
|
-
<div class="vcf-import-card">
|
|
172
|
-
<div class="vcf-import-photo" id="vcf-import-photo"></div>
|
|
173
|
-
<div class="vcf-import-fields" id="vcf-import-fields"></div>
|
|
174
|
-
</div>
|
|
199
|
+
<div class="identity-edit-actions">
|
|
200
|
+
<button id="identity-save-btn" class="glass-btn primary">Save</button>
|
|
201
|
+
<button id="identity-back-btn" class="glass-btn">Back</button>
|
|
175
202
|
</div>
|
|
176
203
|
</div>
|
|
177
204
|
|
|
178
205
|
<div id="vcard-result-view" style="display: none;">
|
|
206
|
+
<div class="vcard-view-toggle">
|
|
207
|
+
<button id="vcard-toggle-qr" class="vcard-toggle-btn active">QR</button>
|
|
208
|
+
<button id="vcard-toggle-raw" class="vcard-toggle-btn">Raw</button>
|
|
209
|
+
</div>
|
|
179
210
|
<div class="qr-container"><canvas id="qr-code"></canvas></div>
|
|
211
|
+
<pre id="vcard-raw-view" class="vcard-raw-view" style="display:none;"></pre>
|
|
212
|
+
<div id="vcard-sig-badge" class="vcard-sig-badge sig-verified" style="display:none;">
|
|
213
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
|
|
214
|
+
Signed with Ed25519
|
|
215
|
+
</div>
|
|
180
216
|
<div class="vcard-result-actions">
|
|
181
217
|
<button id="download-vcard" class="glass-btn primary">Download .vcf</button>
|
|
182
218
|
<button id="copy-vcard" class="glass-btn">Copy</button>
|
|
183
219
|
</div>
|
|
184
|
-
<details class="vcard-details">
|
|
185
|
-
<summary>View Raw vCard</summary>
|
|
186
|
-
<pre id="vcard-preview"></pre>
|
|
187
|
-
</details>
|
|
188
220
|
<button id="vcard-back-btn" class="glass-btn vcard-back-btn">
|
|
189
221
|
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2">
|
|
190
222
|
<path d="M19 12H5M12 19l-7-7 7-7"/>
|
|
191
223
|
</svg> Back to Editor
|
|
192
224
|
</button>
|
|
193
225
|
</div>
|
|
194
|
-
<div class="vcard-actions-footer">
|
|
195
|
-
<button id="generate-vcard" class="glass-btn vcard-export-btn">Export vCard</button>
|
|
196
|
-
<label class="glass-btn vcard-import-btn" for="vcf-import-input">Import vCard</label>
|
|
197
|
-
<input type="file" id="vcf-import-input" accept=".vcf,text/vcard" hidden>
|
|
198
|
-
</div>
|
|
199
226
|
</div>
|
|
200
227
|
<!-- Trust Map Tab -->
|
|
201
228
|
<div id="trust-tab-content" class="modal-tab-content">
|
|
@@ -273,111 +300,111 @@ export function getModalHTML() {
|
|
|
273
300
|
</div>
|
|
274
301
|
</div>
|
|
275
302
|
|
|
276
|
-
<!--
|
|
277
|
-
<div id="
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
<
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
<
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
<div class="encrypt-key-
|
|
292
|
-
<
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
+
<!-- Messaging Tab (Encrypt + Decrypt) -->
|
|
304
|
+
<div id="messaging-tab-content" class="modal-tab-content">
|
|
305
|
+
<div class="messaging-sub-tabs">
|
|
306
|
+
<button class="messaging-sub-tab active" data-messaging-sub="encrypt-sub">Encrypt</button>
|
|
307
|
+
<button class="messaging-sub-tab" data-messaging-sub="decrypt-sub">Decrypt</button>
|
|
308
|
+
</div>
|
|
309
|
+
<div id="encrypt-sub" class="messaging-sub-content active">
|
|
310
|
+
<!-- Encrypt Step 1: Compose -->
|
|
311
|
+
<div id="encrypt-step-compose" class="encrypt-step">
|
|
312
|
+
<div class="encrypt-tab-intro">
|
|
313
|
+
<h4 class="section-label">Encrypt a Message</h4>
|
|
314
|
+
<p>ECDH key agreement + HKDF + AES-256-GCM (ECIES)</p>
|
|
315
|
+
</div>
|
|
316
|
+
<div class="encrypt-keys-section">
|
|
317
|
+
<div class="encrypt-key-row">
|
|
318
|
+
<div class="encrypt-key-card glass-card">
|
|
319
|
+
<div class="encrypt-key-header">
|
|
320
|
+
<span class="encrypt-role-badge sender">Sender (You)</span>
|
|
321
|
+
</div>
|
|
322
|
+
<div class="encrypt-key-detail">
|
|
323
|
+
<label>Encryption Public Key</label>
|
|
324
|
+
<code id="encrypt-sender-pubkey" class="truncate">--</code>
|
|
325
|
+
</div>
|
|
326
|
+
<div class="encrypt-key-detail">
|
|
327
|
+
<label>Derivation Path</label>
|
|
328
|
+
<code id="encrypt-sender-path">--</code>
|
|
329
|
+
</div>
|
|
303
330
|
</div>
|
|
304
|
-
<div class="encrypt-key-
|
|
305
|
-
<
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
331
|
+
<div class="encrypt-key-card glass-card">
|
|
332
|
+
<div class="encrypt-key-header">
|
|
333
|
+
<span class="encrypt-role-badge recipient">Recipient</span>
|
|
334
|
+
</div>
|
|
335
|
+
<div class="encrypt-key-detail">
|
|
336
|
+
<label>Recipient Public Key (hex)</label>
|
|
337
|
+
<div class="encrypt-recipient-input-row">
|
|
338
|
+
<input type="text" id="encrypt-recipient-pubkey" class="glass-input compact" placeholder="Paste recipient's secp256k1 public key (hex)">
|
|
339
|
+
<button id="encrypt-use-self" class="glass-btn small" title="Use your own key (for testing)">Self</button>
|
|
340
|
+
</div>
|
|
309
341
|
</div>
|
|
310
342
|
</div>
|
|
311
343
|
</div>
|
|
312
344
|
</div>
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
<
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
<button id="encrypt-btn" class="glass-btn primary" disabled>Encrypt</button>
|
|
345
|
+
<div class="encrypt-message-section">
|
|
346
|
+
<div class="encrypt-input-group">
|
|
347
|
+
<label class="section-label">Message</label>
|
|
348
|
+
<textarea id="encrypt-plaintext" class="glass-input glass-textarea" rows="3" placeholder="Enter a message to encrypt..."></textarea>
|
|
349
|
+
</div>
|
|
350
|
+
<div class="encrypt-actions">
|
|
351
|
+
<button id="encrypt-btn" class="glass-btn primary" disabled>Encrypt</button>
|
|
352
|
+
</div>
|
|
322
353
|
</div>
|
|
323
354
|
</div>
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
<button id="encrypt-back-btn" class="glass-btn small encrypt-back-btn"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 12H5M12 19l-7-7 7-7"/></svg> Back</button>
|
|
330
|
-
<h4 class="section-label">Encrypted Payload</h4>
|
|
331
|
-
</div>
|
|
332
|
-
<div class="encrypt-output-fields">
|
|
333
|
-
<div class="encrypt-field"><label>Ciphertext</label><code id="encrypt-out-ciphertext" class="encrypt-out-value truncate"></code><button class="copy-btn" data-copy="encrypt-out-ciphertext" title="Copy"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button></div>
|
|
334
|
-
<div class="encrypt-field"><label>Auth Tag</label><code id="encrypt-out-tag" class="encrypt-out-value truncate"></code></div>
|
|
335
|
-
<div class="encrypt-field"><label>IV (nonce)</label><code id="encrypt-out-iv" class="encrypt-out-value truncate"></code></div>
|
|
336
|
-
<div class="encrypt-field"><label>HKDF Salt</label><code id="encrypt-out-salt" class="encrypt-out-value truncate"></code></div>
|
|
337
|
-
<div class="encrypt-field"><label>Sender Public Key</label><code id="encrypt-out-sender-pub" class="encrypt-out-value truncate"></code></div>
|
|
338
|
-
</div>
|
|
339
|
-
<div class="encrypt-bundle-group">
|
|
340
|
-
<div class="encrypt-format-toggle">
|
|
341
|
-
<label class="section-label">Payload Bundle</label>
|
|
342
|
-
<div class="encrypt-format-btns">
|
|
343
|
-
<button class="glass-btn small encrypt-fmt-btn active" data-format="json">JSON</button>
|
|
344
|
-
<button class="glass-btn small encrypt-fmt-btn" data-format="flatbuffer">FlatBuffer</button>
|
|
345
|
-
</div>
|
|
355
|
+
<!-- Encrypt Step 2: Result -->
|
|
356
|
+
<div id="encrypt-step-result" class="encrypt-step" style="display:none;">
|
|
357
|
+
<div class="encrypt-step-header">
|
|
358
|
+
<button id="encrypt-back-btn" class="glass-btn small encrypt-back-btn"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 12H5M12 19l-7-7 7-7"/></svg> Back</button>
|
|
359
|
+
<h4 class="section-label">Encrypted Payload</h4>
|
|
346
360
|
</div>
|
|
347
|
-
<div class="encrypt-
|
|
348
|
-
<
|
|
361
|
+
<div class="encrypt-output-fields">
|
|
362
|
+
<div class="encrypt-field"><label>Ciphertext</label><code id="encrypt-out-ciphertext" class="encrypt-out-value truncate"></code><button class="copy-btn" data-copy="encrypt-out-ciphertext" title="Copy"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button></div>
|
|
363
|
+
<div class="encrypt-field"><label>Auth Tag</label><code id="encrypt-out-tag" class="encrypt-out-value truncate"></code></div>
|
|
364
|
+
<div class="encrypt-field"><label>IV (nonce)</label><code id="encrypt-out-iv" class="encrypt-out-value truncate"></code></div>
|
|
365
|
+
<div class="encrypt-field"><label>HKDF Salt</label><code id="encrypt-out-salt" class="encrypt-out-value truncate"></code></div>
|
|
366
|
+
<div class="encrypt-field"><label>Sender Public Key</label><code id="encrypt-out-sender-pub" class="encrypt-out-value truncate"></code></div>
|
|
349
367
|
</div>
|
|
350
|
-
<
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
368
|
+
<div class="encrypt-bundle-group">
|
|
369
|
+
<div class="encrypt-format-toggle">
|
|
370
|
+
<label class="section-label">Payload Bundle</label>
|
|
371
|
+
<div class="encrypt-format-btns">
|
|
372
|
+
<button class="glass-btn small encrypt-fmt-btn active" data-format="json">JSON</button>
|
|
373
|
+
<button class="glass-btn small encrypt-fmt-btn" data-format="flatbuffer">FlatBuffer</button>
|
|
374
|
+
</div>
|
|
375
|
+
</div>
|
|
376
|
+
<div class="encrypt-format-info">
|
|
377
|
+
<span id="encrypt-format-label" class="encrypt-format-label">EME (Encrypted Message Envelope) — SpaceDataStandards.org</span>
|
|
378
|
+
</div>
|
|
379
|
+
<textarea id="encrypt-bundle" class="glass-input glass-textarea" rows="4" readonly></textarea>
|
|
380
|
+
<div class="encrypt-bundle-actions">
|
|
381
|
+
<button class="glass-btn small" id="encrypt-copy-bundle">Copy</button>
|
|
382
|
+
<button class="glass-btn small" id="encrypt-download-bundle">Download</button>
|
|
383
|
+
</div>
|
|
354
384
|
</div>
|
|
355
385
|
</div>
|
|
356
386
|
</div>
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
<
|
|
365
|
-
<
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
<div class="encrypt-actions">
|
|
369
|
-
<button id="decrypt-btn" class="glass-btn primary" disabled>Decrypt</button>
|
|
370
|
-
</div>
|
|
371
|
-
</div>
|
|
372
|
-
|
|
373
|
-
<!-- Step 2: Result (replaces input) -->
|
|
374
|
-
<div id="decrypt-step-result" class="encrypt-step" style="display:none;">
|
|
375
|
-
<div class="encrypt-step-header">
|
|
376
|
-
<button id="decrypt-back-btn" class="glass-btn small encrypt-back-btn"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 12H5M12 19l-7-7 7-7"/></svg> Back</button>
|
|
377
|
-
<h4 class="section-label">Decrypted Message</h4>
|
|
387
|
+
<div id="decrypt-sub" class="messaging-sub-content">
|
|
388
|
+
<!-- Decrypt Step 1: Input -->
|
|
389
|
+
<div id="decrypt-step-input" class="encrypt-step">
|
|
390
|
+
<div class="encrypt-tab-intro">
|
|
391
|
+
<h4 class="section-label">Decrypt a Message</h4>
|
|
392
|
+
<p>Paste an EME payload (JSON or base64 FlatBuffer) to decrypt with your key.</p>
|
|
393
|
+
</div>
|
|
394
|
+
<textarea id="decrypt-payload" class="glass-input glass-textarea" rows="6" placeholder='Paste EME JSON or base64 FlatBuffer here...'></textarea>
|
|
395
|
+
<div class="encrypt-actions">
|
|
396
|
+
<button id="decrypt-btn" class="glass-btn primary" disabled>Decrypt</button>
|
|
397
|
+
</div>
|
|
378
398
|
</div>
|
|
379
|
-
|
|
380
|
-
|
|
399
|
+
<!-- Decrypt Step 2: Result -->
|
|
400
|
+
<div id="decrypt-step-result" class="encrypt-step" style="display:none;">
|
|
401
|
+
<div class="encrypt-step-header">
|
|
402
|
+
<button id="decrypt-back-btn" class="glass-btn small encrypt-back-btn"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 12H5M12 19l-7-7 7-7"/></svg> Back</button>
|
|
403
|
+
<h4 class="section-label">Decrypted Message</h4>
|
|
404
|
+
</div>
|
|
405
|
+
<div class="decrypt-result">
|
|
406
|
+
<div class="decrypt-result-value" id="decrypt-result-value"></div>
|
|
407
|
+
</div>
|
|
381
408
|
</div>
|
|
382
409
|
</div>
|
|
383
410
|
</div>
|