@fiduswriter/editor 0.1.9 → 0.1.11

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 (52) hide show
  1. package/dist/collab/chat.js +1 -1
  2. package/dist/collab/chat.js.map +1 -1
  3. package/dist/collab/doc.js +8 -8
  4. package/dist/collab/doc.js.map +1 -1
  5. package/dist/dialogs/figure.js +1 -1
  6. package/dist/dialogs/figure.js.map +1 -1
  7. package/dist/document_template/exporter.js +1 -1
  8. package/dist/document_template/exporter.js.map +1 -1
  9. package/dist/document_template/index.js +2 -2
  10. package/dist/document_template/index.js.map +1 -1
  11. package/dist/e2ee/snapshot-manager.js +5 -5
  12. package/dist/e2ee/snapshot-manager.js.map +1 -1
  13. package/dist/exporter/native/copy.js +2 -2
  14. package/dist/exporter/native/copy.js.map +1 -1
  15. package/dist/footnotes/editor.js +1 -1
  16. package/dist/footnotes/editor.js.map +1 -1
  17. package/dist/images/edit_dialog/edit_dialog/index.js +1 -1
  18. package/dist/images/edit_dialog/edit_dialog/index.js.map +1 -1
  19. package/dist/index.js +7 -7
  20. package/dist/index.js.map +1 -1
  21. package/dist/menus/headerbar/model.js +4 -4
  22. package/dist/menus/headerbar/model.js.map +1 -1
  23. package/package.json +3 -3
  24. package/src/collab/chat.js +1 -1
  25. package/src/collab/doc.js +8 -8
  26. package/src/dialogs/figure.js +1 -1
  27. package/src/document_template/exporter.js +1 -1
  28. package/src/document_template/index.js +2 -2
  29. package/src/e2ee/snapshot-manager.js +5 -5
  30. package/src/exporter/native/copy.js +2 -2
  31. package/src/footnotes/editor.js +1 -1
  32. package/src/images/edit_dialog/edit_dialog/index.js +1 -1
  33. package/src/index.js +7 -7
  34. package/src/menus/headerbar/model.js +4 -4
  35. package/dist/e2ee/encryptor.js +0 -201
  36. package/dist/e2ee/encryptor.js.map +0 -1
  37. package/dist/e2ee/key-manager.js +0 -171
  38. package/dist/e2ee/key-manager.js.map +0 -1
  39. package/dist/e2ee/passphrase-crypto.js +0 -365
  40. package/dist/e2ee/passphrase-crypto.js.map +0 -1
  41. package/dist/e2ee/passphrase-dialog.js +0 -548
  42. package/dist/e2ee/passphrase-dialog.js.map +0 -1
  43. package/dist/e2ee/passphrase-manager.js +0 -350
  44. package/dist/e2ee/passphrase-manager.js.map +0 -1
  45. package/dist/e2ee/password-dialog.js +0 -552
  46. package/dist/e2ee/password-dialog.js.map +0 -1
  47. package/src/e2ee/encryptor.js +0 -228
  48. package/src/e2ee/key-manager.js +0 -202
  49. package/src/e2ee/passphrase-crypto.js +0 -606
  50. package/src/e2ee/passphrase-dialog.js +0 -655
  51. package/src/e2ee/passphrase-manager.js +0 -502
  52. package/src/e2ee/password-dialog.js +0 -652
@@ -1,548 +0,0 @@
1
- /**
2
- * Passphrase Dialog - UI for the Personal Passphrase system.
3
- *
4
- * Provides dialogs for:
5
- * 1. Setup passphrase - first-time key generation
6
- * 2. Enter passphrase - unlock keys from sessionStorage
7
- * 3. Display recovery key - show recovery key after setup
8
- * 4. Recover with key - use recovery key to reset passphrase
9
- */
10
- import { Dialog, escapeText } from "fwtoolkit";
11
- import { passwordStrength, strengthInfo } from "./password-dialog.js";
12
- /**
13
- * Show a dialog to set up the personal passphrase for the first time.
14
- *
15
- * @param {Function} onSetup - Callback called with the passphrase string
16
- * @returns {Promise<void>}
17
- */
18
- export function setupPassphraseDialog(onSetup) {
19
- return new Promise(resolve => {
20
- const dialogId = "e2ee-setup-passphrase";
21
- const body = `
22
- <div class="e2ee-password-dialog">
23
- <p>${gettext("Set up a personal encryption passphrase. This passphrase will unlock all your encrypted documents — you will not need separate passwords for each document.")}</p>
24
- <p class="e2ee-password-hint"><strong>${gettext("Important:")}</strong> ${gettext("This passphrase is separate from your login password. If you lose it, your encrypted documents cannot be recovered.")}</p>
25
- <div class="e2ee-password-field">
26
- <label for="e2ee-passphrase-input">${gettext("Passphrase")}</label>
27
- <input type="password" id="e2ee-passphrase-input" class="e2ee-password-input"
28
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" />
29
- <button type="button" class="e2ee-toggle-visibility" title="${gettext("Show passphrase")}">
30
- <i class="fa-solid fa-eye"></i>
31
- </button>
32
- </div>
33
- <div class="e2ee-strength-meter">
34
- <div class="e2ee-strength-bar" id="e2ee-strength-bar"></div>
35
- <span class="e2ee-strength-label" id="e2ee-strength-label"></span>
36
- </div>
37
- <div class="e2ee-password-field">
38
- <label for="e2ee-confirm-passphrase-input">${gettext("Confirm passphrase")}</label>
39
- <input type="password" id="e2ee-confirm-passphrase-input" class="e2ee-password-input"
40
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" />
41
- </div>
42
- <div class="e2ee-password-error" id="e2ee-passphrase-error"></div>
43
- </div>
44
- `;
45
- const buttons = [
46
- {
47
- text: gettext("Set Up Encryption"),
48
- classes: "fw-button fw-dark",
49
- click: () => {
50
- const input = document.getElementById("e2ee-passphrase-input");
51
- const confirmInput = document.getElementById("e2ee-confirm-passphrase-input");
52
- const errorEl = document.getElementById("e2ee-passphrase-error");
53
- const passphrase = input ? input.value : "";
54
- const confirmPassphrase = confirmInput
55
- ? confirmInput.value
56
- : "";
57
- if (passphrase.length < 8) {
58
- if (errorEl) {
59
- errorEl.textContent = gettext("Passphrase must be at least 8 characters long.");
60
- }
61
- return;
62
- }
63
- if (passphrase !== confirmPassphrase) {
64
- if (errorEl) {
65
- errorEl.textContent = gettext("Passphrases do not match.");
66
- }
67
- return;
68
- }
69
- dialogInstance.close();
70
- onSetup(passphrase);
71
- resolve();
72
- }
73
- }
74
- ];
75
- const dialog = {
76
- title: gettext("Set Up Personal Encryption"),
77
- id: dialogId,
78
- body: body,
79
- buttons: buttons,
80
- canClose: true,
81
- width: 450
82
- };
83
- const dialogInstance = new Dialog(dialog);
84
- dialogInstance.open();
85
- // The dialog content is short and should not scroll. Ensure it starts
86
- // at the top so the explanatory text and title are fully visible.
87
- requestAnimationFrame(() => {
88
- const contentEl = document.getElementById(dialogId);
89
- if (contentEl) {
90
- contentEl.scrollTop = 0;
91
- }
92
- });
93
- setTimeout(() => {
94
- const toggleBtns = document.querySelectorAll(`#${dialogId} .e2ee-toggle-visibility`);
95
- toggleBtns.forEach(btn => {
96
- btn.addEventListener("click", () => {
97
- const input = btn.parentElement.querySelector("input");
98
- if (input) {
99
- if (input.type === "password") {
100
- input.type = "text";
101
- btn.innerHTML =
102
- '<i class="fa-solid fa-eye-slash"></i>';
103
- }
104
- else {
105
- input.type = "password";
106
- btn.innerHTML = '<i class="fa-solid fa-eye"></i>';
107
- }
108
- }
109
- });
110
- });
111
- const passphraseInput = document.getElementById("e2ee-passphrase-input");
112
- if (passphraseInput) {
113
- passphraseInput.addEventListener("input", () => {
114
- const score = passwordStrength(passphraseInput.value);
115
- const info = strengthInfo(score);
116
- const bar = document.getElementById("e2ee-strength-bar");
117
- const label = document.getElementById("e2ee-strength-label");
118
- if (bar) {
119
- bar.className = `e2ee-strength-bar ${info.cssClass}`;
120
- bar.style.width = `${(score + 1) * 25}%`;
121
- }
122
- if (label) {
123
- label.textContent = info.label;
124
- label.className = `e2ee-strength-label ${info.cssClass}`;
125
- }
126
- });
127
- passphraseInput.dispatchEvent(new Event("input"));
128
- passphraseInput.focus();
129
- }
130
- const confirmInput = document.getElementById("e2ee-confirm-passphrase-input");
131
- if (confirmInput) {
132
- confirmInput.addEventListener("keypress", event => {
133
- if (event.key === "Enter") {
134
- event.preventDefault();
135
- buttons[0].click();
136
- }
137
- });
138
- }
139
- }, 100);
140
- });
141
- }
142
- /**
143
- * Show a dialog to enter the personal passphrase to unlock encryption keys.
144
- *
145
- * @param {Function} onUnlock - Callback called with the passphrase string
146
- * @param {Function} onRecover - Callback when user clicks "Recover with key"
147
- * @param {Object} [options] - Optional settings
148
- * @param {string} [options.errorMessage] - Inline error to display
149
- * @returns {Promise<void>}
150
- */
151
- export function enterPassphraseDialog(onUnlock, onRecover = null, options = {}) {
152
- return new Promise(resolve => {
153
- const dialogId = "e2ee-enter-passphrase";
154
- const errorMessage = options.errorMessage || "";
155
- const body = `
156
- <div class="e2ee-password-dialog">
157
- <p>${gettext("Enter your personal encryption passphrase to unlock your documents.")}</p>
158
- <div class="e2ee-password-field">
159
- <label for="e2ee-passphrase-input">${gettext("Passphrase")}</label>
160
- <input type="password" id="e2ee-passphrase-input" class="e2ee-password-input"
161
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" autofocus />
162
- <button type="button" class="e2ee-toggle-visibility" title="${gettext("Show passphrase")}">
163
- <i class="fa-solid fa-eye"></i>
164
- </button>
165
- </div>
166
- <div class="e2ee-password-error" id="e2ee-passphrase-error">${escapeText(errorMessage)}</div>
167
- </div>
168
- `;
169
- const buttons = [
170
- {
171
- text: gettext("Unlock"),
172
- classes: "fw-button fw-dark",
173
- click: () => {
174
- const input = document.getElementById("e2ee-passphrase-input");
175
- const passphrase = input ? input.value : "";
176
- if (passphrase.length === 0) {
177
- const errorEl = document.getElementById("e2ee-passphrase-error");
178
- if (errorEl) {
179
- errorEl.textContent = gettext("Please enter your passphrase.");
180
- }
181
- return;
182
- }
183
- dialogInstance.close();
184
- onUnlock(passphrase);
185
- resolve();
186
- }
187
- },
188
- {
189
- text: gettext("Cancel"),
190
- classes: "fw-button fw-light",
191
- click: () => {
192
- dialogInstance.close();
193
- resolve();
194
- }
195
- }
196
- ];
197
- if (onRecover) {
198
- buttons.push({
199
- text: gettext("Recover with key"),
200
- classes: "fw-button fw-orange",
201
- click: () => {
202
- dialogInstance.close();
203
- onRecover();
204
- resolve();
205
- }
206
- });
207
- }
208
- const dialog = {
209
- title: gettext("Unlock Encryption"),
210
- id: dialogId,
211
- body: body,
212
- buttons: buttons,
213
- canClose: true
214
- };
215
- const dialogInstance = new Dialog(dialog);
216
- dialogInstance.open();
217
- setTimeout(() => {
218
- const toggleBtn = document.querySelector(`#${dialogId} .e2ee-toggle-visibility`);
219
- const input = document.getElementById("e2ee-passphrase-input");
220
- if (toggleBtn && input) {
221
- toggleBtn.addEventListener("click", () => {
222
- if (input.type === "password") {
223
- input.type = "text";
224
- toggleBtn.innerHTML =
225
- '<i class="fa-solid fa-eye-slash"></i>';
226
- toggleBtn.title = gettext("Hide passphrase");
227
- }
228
- else {
229
- input.type = "password";
230
- toggleBtn.innerHTML = '<i class="fa-solid fa-eye"></i>';
231
- toggleBtn.title = gettext("Show passphrase");
232
- }
233
- });
234
- }
235
- if (input) {
236
- input.addEventListener("keypress", event => {
237
- if (event.key === "Enter") {
238
- event.preventDefault();
239
- buttons[0].click();
240
- }
241
- });
242
- input.focus();
243
- }
244
- }, 100);
245
- });
246
- }
247
- /**
248
- * Show a dialog displaying the recovery key to the user.
249
- *
250
- * @param {string} recoveryKey - The recovery key to display
251
- * @param {Function} onContinue - Callback when user clicks Continue
252
- * @returns {Promise<void>}
253
- */
254
- export function showRecoveryKeyDialog(recoveryKey, onContinue) {
255
- return new Promise(resolve => {
256
- const dialogId = "e2ee-recovery-key";
257
- const body = `
258
- <div class="e2ee-password-dialog">
259
- <p><strong>${gettext("This is your recovery key.")}</strong></p>
260
- <p>${gettext("Store it somewhere safe (e.g., a password manager, printed copy). If you forget your passphrase, this is the ONLY way to recover your encrypted documents. We cannot recover it for you.")}</p>
261
- <div class="e2ee-recovery-key-box">
262
- <code id="e2ee-recovery-key-value">${recoveryKey}</code>
263
- <button type="button" class="fw-button fw-light" id="e2ee-copy-recovery-key">
264
- <i class="fa-solid fa-copy"></i> ${gettext("Copy")}
265
- </button>
266
- </div>
267
- <p class="e2ee-password-hint"><strong>${gettext("Copy it now — it will not be shown again.")}</strong></p>
268
- </div>
269
- `;
270
- const buttons = [
271
- {
272
- text: gettext("I have saved it"),
273
- classes: "fw-button fw-dark",
274
- click: () => {
275
- dialogInstance.close();
276
- if (typeof onContinue === "function") {
277
- onContinue();
278
- }
279
- resolve();
280
- }
281
- }
282
- ];
283
- const dialog = {
284
- title: gettext("Recovery Key"),
285
- id: dialogId,
286
- body: body,
287
- buttons: buttons,
288
- canClose: false
289
- };
290
- const dialogInstance = new Dialog(dialog);
291
- dialogInstance.open();
292
- setTimeout(() => {
293
- const copyBtn = document.getElementById("e2ee-copy-recovery-key");
294
- if (copyBtn) {
295
- copyBtn.addEventListener("click", () => {
296
- navigator.clipboard.writeText(recoveryKey).then(() => {
297
- copyBtn.innerHTML = `<i class="fa-solid fa-check"></i> ${gettext("Copied!")}`;
298
- setTimeout(() => {
299
- copyBtn.innerHTML = `<i class="fa-solid fa-copy"></i> ${gettext("Copy")}`;
300
- }, 2000);
301
- });
302
- });
303
- }
304
- }, 100);
305
- });
306
- }
307
- /**
308
- * Show a dialog to recover encryption keys using the recovery key.
309
- *
310
- * @param {Function} onRecover - Callback called with {recoveryKey: string, newPassphrase: string}
311
- * @returns {Promise<void>}
312
- */
313
- export function recoverWithKeyDialog(onRecover) {
314
- return new Promise(resolve => {
315
- const dialogId = "e2ee-recover-with-key";
316
- const body = `
317
- <div class="e2ee-password-dialog">
318
- <p>${gettext("Enter your recovery key and a new passphrase to regain access to your encrypted documents.")}</p>
319
- <div class="e2ee-password-field">
320
- <label for="e2ee-recovery-key-input">${gettext("Recovery key")}</label>
321
- <input type="text" id="e2ee-recovery-key-input" class="e2ee-password-input"
322
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" autofocus />
323
- </div>
324
- <div class="e2ee-password-field">
325
- <label for="e2ee-new-passphrase-input">${gettext("New passphrase")}</label>
326
- <input type="password" id="e2ee-new-passphrase-input" class="e2ee-password-input"
327
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" />
328
- <button type="button" class="e2ee-toggle-visibility" title="${gettext("Show passphrase")}">
329
- <i class="fa-solid fa-eye"></i>
330
- </button>
331
- </div>
332
- <div class="e2ee-password-field">
333
- <label for="e2ee-confirm-passphrase-input">${gettext("Confirm new passphrase")}</label>
334
- <input type="password" id="e2ee-confirm-passphrase-input" class="e2ee-password-input"
335
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" />
336
- </div>
337
- <div class="e2ee-password-error" id="e2ee-recover-error"></div>
338
- </div>
339
- `;
340
- const buttons = [
341
- {
342
- text: gettext("Recover"),
343
- classes: "fw-button fw-dark",
344
- click: () => {
345
- const recoveryInput = document.getElementById("e2ee-recovery-key-input");
346
- const newInput = document.getElementById("e2ee-new-passphrase-input");
347
- const confirmInput = document.getElementById("e2ee-confirm-passphrase-input");
348
- const errorEl = document.getElementById("e2ee-recover-error");
349
- const recoveryKey = recoveryInput
350
- ? recoveryInput.value.trim()
351
- : "";
352
- const newPassphrase = newInput ? newInput.value : "";
353
- const confirmPassphrase = confirmInput
354
- ? confirmInput.value
355
- : "";
356
- if (recoveryKey.length === 0) {
357
- if (errorEl) {
358
- errorEl.textContent = gettext("Please enter your recovery key.");
359
- }
360
- return;
361
- }
362
- if (newPassphrase.length < 8) {
363
- if (errorEl) {
364
- errorEl.textContent = gettext("Passphrase must be at least 8 characters long.");
365
- }
366
- return;
367
- }
368
- if (newPassphrase !== confirmPassphrase) {
369
- if (errorEl) {
370
- errorEl.textContent = gettext("Passphrases do not match.");
371
- }
372
- return;
373
- }
374
- dialogInstance.close();
375
- onRecover({ recoveryKey, newPassphrase });
376
- resolve();
377
- }
378
- },
379
- {
380
- text: gettext("Cancel"),
381
- classes: "fw-button fw-light",
382
- click: () => {
383
- dialogInstance.close();
384
- resolve();
385
- }
386
- }
387
- ];
388
- const dialog = {
389
- title: gettext("Recover Encryption"),
390
- id: dialogId,
391
- body: body,
392
- buttons: buttons,
393
- canClose: true
394
- };
395
- const dialogInstance = new Dialog(dialog);
396
- dialogInstance.open();
397
- setTimeout(() => {
398
- const toggleBtns = document.querySelectorAll(`#${dialogId} .e2ee-toggle-visibility`);
399
- toggleBtns.forEach(btn => {
400
- btn.addEventListener("click", () => {
401
- const input = btn.parentElement.querySelector("input");
402
- if (input) {
403
- if (input.type === "password") {
404
- input.type = "text";
405
- btn.innerHTML =
406
- '<i class="fa-solid fa-eye-slash"></i>';
407
- }
408
- else {
409
- input.type = "password";
410
- btn.innerHTML = '<i class="fa-solid fa-eye"></i>';
411
- }
412
- }
413
- });
414
- });
415
- const confirmInput = document.getElementById("e2ee-confirm-passphrase-input");
416
- if (confirmInput) {
417
- confirmInput.addEventListener("keypress", event => {
418
- if (event.key === "Enter") {
419
- event.preventDefault();
420
- buttons[0].click();
421
- }
422
- });
423
- }
424
- }, 100);
425
- });
426
- }
427
- /**
428
- * Show a dialog to change the encryption passphrase.
429
- *
430
- * @param {Function} onChange - Callback called with {oldPassphrase: string, newPassphrase: string}
431
- * @returns {Promise<void>}
432
- */
433
- export function changePassphraseDialog(onChange) {
434
- return new Promise(resolve => {
435
- const dialogId = "e2ee-change-passphrase";
436
- const body = `
437
- <div class="e2ee-password-dialog">
438
- <p>${gettext("Enter your current passphrase and a new passphrase to change your encryption password.")}</p>
439
- <div class="e2ee-password-field">
440
- <label for="e2ee-old-passphrase-input">${gettext("Current passphrase")}</label>
441
- <input type="password" id="e2ee-old-passphrase-input" class="e2ee-password-input"
442
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" autofocus />
443
- <button type="button" class="e2ee-toggle-visibility" title="${gettext("Show passphrase")}">
444
- <i class="fa-solid fa-eye"></i>
445
- </button>
446
- </div>
447
- <div class="e2ee-password-field">
448
- <label for="e2ee-new-passphrase-input">${gettext("New passphrase")}</label>
449
- <input type="password" id="e2ee-new-passphrase-input" class="e2ee-password-input"
450
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" />
451
- <button type="button" class="e2ee-toggle-visibility" title="${gettext("Show passphrase")}">
452
- <i class="fa-solid fa-eye"></i>
453
- </button>
454
- </div>
455
- <div class="e2ee-password-field">
456
- <label for="e2ee-confirm-new-passphrase-input">${gettext("Confirm new passphrase")}</label>
457
- <input type="password" id="e2ee-confirm-new-passphrase-input" class="e2ee-password-input"
458
- autocomplete="off" data-1p-ignore data-lp-ignore data-lpignore="true" data-bwignore data-form-type="other" />
459
- </div>
460
- <div class="e2ee-password-error" id="e2ee-change-error"></div>
461
- </div>
462
- `;
463
- const buttons = [
464
- {
465
- text: gettext("Change Passphrase"),
466
- classes: "fw-button fw-dark",
467
- click: () => {
468
- const oldInput = document.getElementById("e2ee-old-passphrase-input");
469
- const newInput = document.getElementById("e2ee-new-passphrase-input");
470
- const confirmInput = document.getElementById("e2ee-confirm-new-passphrase-input");
471
- const errorEl = document.getElementById("e2ee-change-error");
472
- const oldPassphrase = oldInput ? oldInput.value : "";
473
- const newPassphrase = newInput ? newInput.value : "";
474
- const confirmPassphrase = confirmInput
475
- ? confirmInput.value
476
- : "";
477
- if (oldPassphrase.length === 0) {
478
- if (errorEl) {
479
- errorEl.textContent = gettext("Please enter your current passphrase.");
480
- }
481
- return;
482
- }
483
- if (newPassphrase.length < 8) {
484
- if (errorEl) {
485
- errorEl.textContent = gettext("Passphrase must be at least 8 characters long.");
486
- }
487
- return;
488
- }
489
- if (newPassphrase !== confirmPassphrase) {
490
- if (errorEl) {
491
- errorEl.textContent = gettext("Passphrases do not match.");
492
- }
493
- return;
494
- }
495
- dialogInstance.close();
496
- onChange({ oldPassphrase, newPassphrase });
497
- resolve();
498
- }
499
- },
500
- {
501
- text: gettext("Cancel"),
502
- classes: "fw-button fw-light",
503
- click: () => {
504
- dialogInstance.close();
505
- resolve();
506
- }
507
- }
508
- ];
509
- const dialog = {
510
- title: gettext("Change Encryption Passphrase"),
511
- id: dialogId,
512
- body: body,
513
- buttons: buttons,
514
- canClose: true
515
- };
516
- const dialogInstance = new Dialog(dialog);
517
- dialogInstance.open();
518
- setTimeout(() => {
519
- const toggleBtns = document.querySelectorAll(`#${dialogId} .e2ee-toggle-visibility`);
520
- toggleBtns.forEach(btn => {
521
- btn.addEventListener("click", () => {
522
- const input = btn.parentElement.querySelector("input");
523
- if (input) {
524
- if (input.type === "password") {
525
- input.type = "text";
526
- btn.innerHTML =
527
- '<i class="fa-solid fa-eye-slash"></i>';
528
- }
529
- else {
530
- input.type = "password";
531
- btn.innerHTML = '<i class="fa-solid fa-eye"></i>';
532
- }
533
- }
534
- });
535
- });
536
- const confirmInput = document.getElementById("e2ee-confirm-new-passphrase-input");
537
- if (confirmInput) {
538
- confirmInput.addEventListener("keypress", event => {
539
- if (event.key === "Enter") {
540
- event.preventDefault();
541
- buttons[0].click();
542
- }
543
- });
544
- }
545
- }, 100);
546
- });
547
- }
548
- //# sourceMappingURL=passphrase-dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"passphrase-dialog.js","sourceRoot":"","sources":["../../src/e2ee/passphrase-dialog.js"],"names":[],"mappings":"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"}