dsh-vault 1.9.3 → 1.9.4-rc.2

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/lib/client.js CHANGED
@@ -7,7 +7,7 @@ window.__ModuleLoader__.load({
7
7
  let react = require("react");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  //#region \0dsh-css:/Users/zhipeng/Desktop/work/dsh test/dsh-vault/src/client/VaultSection.module.css.mjs
10
- const css = ".t_j5va_section{flex-direction:column;gap:12px;padding:16px 0;display:flex}.t_j5va_intro{opacity:.75;margin:0;font-size:13px}.t_j5va_srOnly{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.t_j5va_toolbar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.t_j5va_healthSummary{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.t_j5va_selectActive{border-color:var(--dsh-color-primary,#2e9e5b);color:var(--dsh-color-primary,#2e9e5b)}.t_j5va_bulkBar{background:var(--dsh-color-surface-2,#80808014);border-radius:6px;flex-wrap:wrap;align-items:center;gap:10px;margin:6px 0;padding:6px 10px;display:flex}.t_j5va_bulkItem{align-items:center;gap:6px;font-size:13px;display:inline-flex}.t_j5va_bulkCount{opacity:.8;font-size:13px}.t_j5va_rowCheck{flex-shrink:0;align-self:center;margin:0 8px 0 0}.t_j5va_rowSelected{outline:1px solid var(--dsh-color-primary,#2e9e5b);border-radius:4px}.t_j5va_searchBox{flex:150px;min-width:150px;display:flex}.t_j5va_searchBox input{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;flex:1;padding:6px 10px;font-size:13px}.t_j5va_addButton,.t_j5va_saveButton{background:var(--color-accent,#4f8cff);color:#fff;cursor:pointer;border:1px solid #0000;border-radius:6px;padding:6px 12px;font-size:13px}.t_j5va_addButton:disabled,.t_j5va_saveButton:disabled,.t_j5va_rowActions button:disabled{opacity:.5;cursor:not-allowed}.t_j5va_list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.t_j5va_row{border:1px solid var(--color-border,#333);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;display:flex}.t_j5va_rowMain{flex-direction:column;gap:2px;min-width:0;display:flex}.t_j5va_title{font-size:14px;font-weight:600}.t_j5va_identity{opacity:.7;text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.t_j5va_totp{font-family:var(--font-mono,monospace);color:var(--color-accent,#4f8cff);font-size:13px}.t_j5va_totpRing{vertical-align:-2px;margin-right:4px;display:inline-block}.t_j5va_rowActions{flex-shrink:0;align-items:center;gap:6px;display:flex}.t_j5va_rowActions button{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:4px 8px;font-size:12px}.t_j5va_deleteButton{color:#e5484d}.t_j5va_copied{color:#30a46c;font-size:12px}.t_j5va_empty,.t_j5va_status,.t_j5va_error{opacity:.8;font-size:13px}.t_j5va_lockedBanner{color:#8a5a00;background:#fff4e5;border:1px solid #e0a83a;border-radius:6px;margin:0 0 10px;padding:8px 12px;font-size:13px}.t_j5va_modeReadonly,.t_j5va_modeAsk,.t_j5va_modeAuto{border-radius:999px;width:fit-content;margin:0;padding:4px 10px;font-size:12px;display:inline-block}.t_j5va_modeReadonly{color:#e5484d;border:1px solid #e5484d80}.t_j5va_modeAsk{color:#f5a524;border:1px solid #f5a52480}.t_j5va_modeAuto{color:#30a46c;border:1px solid #30a46c80}.t_j5va_policyBar{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.t_j5va_policyField{align-items:center;gap:8px;font-size:13px;display:flex}.t_j5va_policyField select{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;padding:4px 8px;font-size:13px}.t_j5va_emptyBox{flex-direction:column;gap:4px;display:flex}.t_j5va_emptyHint{opacity:.65;margin:0;font-size:12px}.t_j5va_error{color:#e5484d}.t_j5va_editor{border:1px solid var(--color-border,#444);border-radius:8px;padding:12px}.t_j5va_editorBody{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 12px;display:grid}.t_j5va_checkField{align-items:center;gap:8px;font-size:13px;display:inline-flex}.t_j5va_field{flex-direction:column;gap:4px;font-size:12px;display:flex}.t_j5va_field input,.t_j5va_field select{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;padding:5px 8px;font-size:13px}.t_j5va_editorActions{justify-content:flex-end;gap:8px;margin-top:12px;display:flex}.t_j5va_editorActions button{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:6px 12px;font-size:13px}.t_j5va_reportBox{border:1px solid #f5a52466;border-radius:8px;flex-direction:column;gap:2px;padding:8px 10px;font-size:12px;display:flex}.t_j5va_reportTitle{margin:0;font-weight:600}.t_j5va_reportLine{opacity:.8;margin:0}.t_j5va_histAdd{color:#2e9e5b}.t_j5va_histDanger{color:#cf3d3d}.t_j5va_histUpdate{color:#c98a1b}.t_j5va_histNeutral{opacity:.7}.t_j5va_reportSub{color:var(--dsh-color-text-2,#666);margin:2px 0 0 10px;font-size:12px}.t_j5va_trashButton{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;align-self:flex-start;padding:4px 8px;font-size:12px}.t_j5va_secretField{gap:4px;display:flex}.t_j5va_secretField input{flex:1;min-width:0}.t_j5va_revealButton{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:0 8px;font-size:12px}.t_j5va_kindFilter{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;padding:6px 8px;font-size:13px}.t_j5va_highBadge{color:#e5484d;vertical-align:middle;background:#e5484d26;border-radius:4px;margin-left:6px;padding:1px 6px;font-size:10px;font-weight:600}.t_j5va_pinStar{color:#f5a524;cursor:pointer;background:0 0;border:none;margin-right:4px;padding:0 2px;font-size:13px;line-height:1}.t_j5va_pinOff{color:#80808073}.t_j5va_pinOn{color:#f5a524}.t_j5va_clearButton{color:inherit;cursor:pointer;opacity:.6;background:0 0;border:none;padding:0 8px;font-size:16px}.t_j5va_field textarea{border:1px solid var(--color-border,#444);color:inherit;resize:vertical;background:0 0;border-radius:6px;padding:5px 8px;font-family:inherit;font-size:13px}.t_j5va_row{transition:background .12s}.t_j5va_row:hover{background:var(--color-hover,#80808014)}.t_j5va_healthBar{flex-wrap:wrap;gap:6px;margin:0 0 10px;display:flex}.t_j5va_badge{border:1px solid var(--dsh-color-border,#ddd);background:var(--dsh-color-surface-2,#f7f7f8);color:var(--dsh-color-text-2,#555);border-radius:999px;padding:4px 10px;font-size:12px;line-height:1}.t_j5va_backupButton{border:1px solid var(--dsh-color-border,#ccc);background:var(--dsh-color-surface-2,#f7f7f8);cursor:pointer;border-radius:999px;align-self:flex-start;padding:4px 10px;font-size:12px;line-height:1}.t_j5va_badgeOk{color:#2e9e5b;border-color:#2e9e5b}.t_j5va_badgeWarn{color:#b57f1a;border-color:#c98a1b}.t_j5va_rowDue{border-left:3px solid #c98a1b}.t_j5va_rowExpired{border-left:3px solid #cf3d3d}.t_j5va_dueBadge{border-radius:999px;margin-left:6px;padding:3px 8px;font-size:11px;font-weight:600;line-height:1}.t_j5va_badgeDanger{color:#c03a3a;border-color:#cf3d3d}.t_j5va_footer{opacity:.6;margin:0;font-size:12px}.t_j5va_kindIcon{margin-right:4px;font-size:12px}.t_j5va_dangerButton{color:#e5484d;cursor:pointer;background:0 0;border:1px solid #e5484d80;border-radius:6px;align-self:flex-start;padding:4px 8px;font-size:12px}.t_j5va_rowMain{cursor:pointer}.t_j5va_detailBox{background:var(--color-hover,#8080800f);border-radius:6px;flex-wrap:wrap;grid-column:1/-1;gap:4px 12px;padding:6px 8px;font-size:12px;display:flex}.t_j5va_detailItem{opacity:.85}.t_j5va_sortButton{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:6px 10px;font-size:13px}.t_j5va_dupGroup{justify-content:space-between;align-items:center;gap:8px;margin:4px 0;display:flex}.t_j5va_dupNames{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.t_j5va_dupMerge{border:1px solid var(--dsh-color-border,#ccc);cursor:pointer;border-radius:6px;flex-shrink:0;padding:2px 8px;font-size:12px}.t_j5va_auditRow{align-items:center;gap:8px;margin:4px 0;display:flex}.t_j5va_auditIssues{color:var(--dsh-color-text-2,#666);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;overflow:hidden}.t_j5va_retryButton{border:1px solid var(--dsh-color-border,#ccc);cursor:pointer;border-radius:6px;margin-left:6px;padding:2px 8px;font-size:12px}.t_j5va_scoreRing{vertical-align:-2px;margin-right:4px;display:inline-block}.t_j5va_genOpts{border:1px solid var(--dsh-color-border,#ddd);border-radius:8px;flex-direction:column;gap:6px;padding:8px 10px;display:flex}.t_j5va_genOptRow{justify-content:space-between;align-items:center;gap:8px;font-size:13px;display:flex}.t_j5va_genOptRow input[type=number]{width:64px}.t_j5va_pwMeter{align-items:center;gap:8px;font-size:12px;display:flex}.t_j5va_pwBar{border-radius:999px;height:6px;transition:width .2s}.t_j5va_pwWeak{background:#cf3d3d}.t_j5va_pwFair{background:#c98a1b}.t_j5va_pwStrong{background:#2e9e5b}.t_j5va_pwLabel{color:var(--dsh-color-text-2,#666)}.t_j5va_resultCount{color:var(--dsh-color-text-2,#666);flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 6px;font-size:12px;display:flex}.t_j5va_kindChip{border:1px solid var(--dsh-color-border,#ddd);border-radius:999px;padding:2px 8px;font-size:11px}.t_j5va_uriCode{overflow-wrap:anywhere;opacity:.85;font-size:10px}.t_j5va_genHist{flex-wrap:wrap;gap:4px;font-size:12px;display:flex}.t_j5va_genHist span{align-self:center}.t_j5va_lockedTag{color:#c98a1b;font-size:12px;font-weight:600}.t_j5va_tabs{flex-wrap:wrap;gap:6px;margin:0 0 12px;display:flex}.t_j5va_tab{border:1px solid var(--dsh-color-border,#ccc);color:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:5px 14px;font-size:13px}.t_j5va_tabActive{background:var(--dsh-color-primary,#4a6cf7);color:#fff;border-color:#0000}.t_j5va_tabPane{margin-top:2px}";
10
+ const css = ".t_j5va_section{flex-direction:column;gap:12px;padding:16px 0;display:flex}.t_j5va_intro{opacity:.75;margin:0;font-size:13px}.t_j5va_srOnly{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.t_j5va_toolbar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.t_j5va_healthSummary{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.t_j5va_selectActive{border-color:var(--dsh-color-primary,#2e9e5b);color:var(--dsh-color-primary,#2e9e5b)}.t_j5va_bulkBar{background:var(--dsh-color-surface-2,#80808014);border-radius:6px;flex-wrap:wrap;align-items:center;gap:10px;margin:6px 0;padding:6px 10px;display:flex}.t_j5va_bulkItem{align-items:center;gap:6px;font-size:13px;display:inline-flex}.t_j5va_bulkCount{opacity:.8;font-size:13px}.t_j5va_rowCheck{flex-shrink:0;align-self:center;margin:0 8px 0 0}.t_j5va_rowSelected{outline:1px solid var(--dsh-color-primary,#2e9e5b);border-radius:4px}.t_j5va_searchBox{flex:150px;min-width:150px;display:flex}.t_j5va_searchBox input{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;flex:1;padding:6px 10px;font-size:13px}.t_j5va_addButton,.t_j5va_saveButton{background:var(--color-accent,#4f8cff);color:#fff;cursor:pointer;border:1px solid #0000;border-radius:6px;padding:6px 12px;font-size:13px}.t_j5va_addButton:disabled,.t_j5va_saveButton:disabled,.t_j5va_rowActions button:disabled{opacity:.5;cursor:not-allowed}.t_j5va_list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.t_j5va_row{border:1px solid var(--color-border,#333);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:8px 10px;display:flex}.t_j5va_rowMain{flex-direction:column;gap:2px;min-width:0;display:flex}.t_j5va_title{font-size:14px;font-weight:600}.t_j5va_identity{opacity:.7;text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.t_j5va_totp{font-family:var(--font-mono,monospace);color:var(--color-accent,#4f8cff);font-size:13px}.t_j5va_totpRing{vertical-align:-2px;margin-right:4px;display:inline-block}.t_j5va_rowActions{flex-shrink:0;align-items:center;gap:6px;display:flex}.t_j5va_rowActions button{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:4px 8px;font-size:12px}.t_j5va_deleteButton{color:#e5484d}.t_j5va_copied{color:#30a46c;font-size:12px}.t_j5va_empty,.t_j5va_status,.t_j5va_error{opacity:.8;font-size:13px}.t_j5va_lockedBanner{color:#8a5a00;background:#fff4e5;border:1px solid #e0a83a;border-radius:6px;margin:0 0 10px;padding:8px 12px;font-size:13px}.t_j5va_modeReadonly,.t_j5va_modeAsk,.t_j5va_modeAuto{border-radius:999px;width:fit-content;margin:0;padding:4px 10px;font-size:12px;display:inline-block}.t_j5va_modeReadonly{color:#e5484d;border:1px solid #e5484d80}.t_j5va_modeAsk{color:#f5a524;border:1px solid #f5a52480}.t_j5va_modeAuto{color:#30a46c;border:1px solid #30a46c80}.t_j5va_policyBar{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.t_j5va_policyField{align-items:center;gap:8px;font-size:13px;display:flex}.t_j5va_policyField select{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;padding:4px 8px;font-size:13px}.t_j5va_emptyBox{flex-direction:column;gap:4px;display:flex}.t_j5va_emptyHint{opacity:.65;margin:0;font-size:12px}.t_j5va_error{color:#e5484d}.t_j5va_editor{border:1px solid var(--color-border,#444);border-radius:8px;padding:12px}.t_j5va_editorBody{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 12px;display:grid}.t_j5va_checkField{align-items:center;gap:8px;font-size:13px;display:inline-flex}.t_j5va_field{flex-direction:column;gap:4px;font-size:12px;display:flex}.t_j5va_field input,.t_j5va_field select{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;padding:5px 8px;font-size:13px}.t_j5va_editorActions{justify-content:flex-end;gap:8px;margin-top:12px;display:flex}.t_j5va_editorActions button{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:6px 12px;font-size:13px}.t_j5va_reportBox{border:1px solid #f5a52466;border-radius:8px;flex-direction:column;gap:2px;padding:8px 10px;font-size:12px;display:flex}.t_j5va_reportTitle{margin:0;font-weight:600}.t_j5va_reportLine{opacity:.8;margin:0}.t_j5va_histAdd{color:#2e9e5b}.t_j5va_pwHistBox{border:1px solid var(--dsh-color-border,#ddd);background:var(--dsh-color-surface-2,#8080800f);border-radius:8px;margin:8px 0;padding:10px 12px}.t_j5va_pwHistRow{align-items:center;gap:10px;padding:4px 0;display:flex}.t_j5va_pwHistPwd{font-family:var(--dsh-font-mono,monospace);word-break:break-all;font-size:13px}.t_j5va_pwHistTime{opacity:.7;white-space:nowrap;font-size:12px}.t_j5va_histDanger{color:#cf3d3d}.t_j5va_histUpdate{color:#c98a1b}.t_j5va_histNeutral{opacity:.7}.t_j5va_reportSub{color:var(--dsh-color-text-2,#666);margin:2px 0 0 10px;font-size:12px}.t_j5va_trashButton{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;align-self:flex-start;padding:4px 8px;font-size:12px}.t_j5va_secretField{gap:4px;display:flex}.t_j5va_secretField input{flex:1;min-width:0}.t_j5va_revealButton{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:0 8px;font-size:12px}.t_j5va_kindFilter{border:1px solid var(--color-border,#444);color:inherit;background:0 0;border-radius:6px;padding:6px 8px;font-size:13px}.t_j5va_highBadge{color:#e5484d;vertical-align:middle;background:#e5484d26;border-radius:4px;margin-left:6px;padding:1px 6px;font-size:10px;font-weight:600}.t_j5va_pinStar{color:#f5a524;cursor:pointer;background:0 0;border:none;margin-right:4px;padding:0 2px;font-size:13px;line-height:1}.t_j5va_pinOff{color:#80808073}.t_j5va_pinOn{color:#f5a524}.t_j5va_clearButton{color:inherit;cursor:pointer;opacity:.6;background:0 0;border:none;padding:0 8px;font-size:16px}.t_j5va_field textarea{border:1px solid var(--color-border,#444);color:inherit;resize:vertical;background:0 0;border-radius:6px;padding:5px 8px;font-family:inherit;font-size:13px}.t_j5va_row{transition:background .12s}.t_j5va_row:hover{background:var(--color-hover,#80808014)}.t_j5va_healthBar{flex-wrap:wrap;gap:6px;margin:0 0 10px;display:flex}.t_j5va_badge{border:1px solid var(--dsh-color-border,#ddd);background:var(--dsh-color-surface-2,#f7f7f8);color:var(--dsh-color-text-2,#555);border-radius:999px;padding:4px 10px;font-size:12px;line-height:1}.t_j5va_backupButton{border:1px solid var(--dsh-color-border,#ccc);background:var(--dsh-color-surface-2,#f7f7f8);cursor:pointer;border-radius:999px;align-self:flex-start;padding:4px 10px;font-size:12px;line-height:1}.t_j5va_badgeOk{color:#2e9e5b;border-color:#2e9e5b}.t_j5va_badgeWarn{color:#b57f1a;border-color:#c98a1b}.t_j5va_rowDue{border-left:3px solid #c98a1b}.t_j5va_rowExpired{border-left:3px solid #cf3d3d}.t_j5va_dueBadge{border-radius:999px;margin-left:6px;padding:3px 8px;font-size:11px;font-weight:600;line-height:1}.t_j5va_badgeDanger{color:#c03a3a;border-color:#cf3d3d}.t_j5va_footer{opacity:.6;margin:0;font-size:12px}.t_j5va_kindIcon{margin-right:4px;font-size:12px}.t_j5va_dangerButton{color:#e5484d;cursor:pointer;background:0 0;border:1px solid #e5484d80;border-radius:6px;align-self:flex-start;padding:4px 8px;font-size:12px}.t_j5va_rowMain{cursor:pointer}.t_j5va_detailBox{background:var(--color-hover,#8080800f);border-radius:6px;flex-wrap:wrap;grid-column:1/-1;gap:4px 12px;padding:6px 8px;font-size:12px;display:flex}.t_j5va_detailItem{opacity:.85}.t_j5va_sortButton{border:1px solid var(--color-border,#444);color:inherit;cursor:pointer;background:0 0;border-radius:6px;padding:6px 10px;font-size:13px}.t_j5va_dupGroup{justify-content:space-between;align-items:center;gap:8px;margin:4px 0;display:flex}.t_j5va_dupNames{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.t_j5va_dupMerge{border:1px solid var(--dsh-color-border,#ccc);cursor:pointer;border-radius:6px;flex-shrink:0;padding:2px 8px;font-size:12px}.t_j5va_auditRow{align-items:center;gap:8px;margin:4px 0;display:flex}.t_j5va_auditIssues{color:var(--dsh-color-text-2,#666);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;overflow:hidden}.t_j5va_retryButton{border:1px solid var(--dsh-color-border,#ccc);cursor:pointer;border-radius:6px;margin-left:6px;padding:2px 8px;font-size:12px}.t_j5va_scoreRing{vertical-align:-2px;margin-right:4px;display:inline-block}.t_j5va_genOpts{border:1px solid var(--dsh-color-border,#ddd);border-radius:8px;flex-direction:column;gap:6px;padding:8px 10px;display:flex}.t_j5va_genOptRow{justify-content:space-between;align-items:center;gap:8px;font-size:13px;display:flex}.t_j5va_genOptRow input[type=number]{width:64px}.t_j5va_pwMeter{align-items:center;gap:8px;font-size:12px;display:flex}.t_j5va_pwBar{border-radius:999px;height:6px;transition:width .2s}.t_j5va_pwWeak{background:#cf3d3d}.t_j5va_pwFair{background:#c98a1b}.t_j5va_pwStrong{background:#2e9e5b}.t_j5va_pwLabel{color:var(--dsh-color-text-2,#666)}.t_j5va_resultCount{color:var(--dsh-color-text-2,#666);flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 6px;font-size:12px;display:flex}.t_j5va_kindChip{border:1px solid var(--dsh-color-border,#ddd);border-radius:999px;padding:2px 8px;font-size:11px}.t_j5va_uriCode{overflow-wrap:anywhere;opacity:.85;font-size:10px}.t_j5va_genHist{flex-wrap:wrap;gap:4px;font-size:12px;display:flex}.t_j5va_genHist span{align-self:center}.t_j5va_lockedTag{color:#c98a1b;font-size:12px;font-weight:600}.t_j5va_tabs{flex-wrap:wrap;gap:6px;margin:0 0 12px;display:flex}.t_j5va_tab{border:1px solid var(--dsh-color-border,#ccc);color:inherit;cursor:pointer;background:0 0;border-radius:999px;padding:5px 14px;font-size:13px}.t_j5va_tabActive{background:var(--dsh-color-primary,#4a6cf7);color:#fff;border-color:#0000}.t_j5va_tabPane{margin-top:2px}";
11
11
  const tagId = "dsh-vault/VaultSection.module.css";
12
12
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
13
13
  const tag = document.createElement("style");
@@ -17,102 +17,106 @@ window.__ModuleLoader__.load({
17
17
  document.head.appendChild(tag);
18
18
  }
19
19
  var VaultSection_module_css_default = {
20
- "addButton": "t_j5va_addButton",
21
- "identity": "t_j5va_identity",
22
- "pinOff": "t_j5va_pinOff",
23
- "badgeWarn": "t_j5va_badgeWarn",
24
- "retryButton": "t_j5va_retryButton",
25
- "editorBody": "t_j5va_editorBody",
26
- "dueBadge": "t_j5va_dueBadge",
27
- "scoreRing": "t_j5va_scoreRing",
28
- "genHist": "t_j5va_genHist",
29
- "bulkCount": "t_j5va_bulkCount",
30
- "empty": "t_j5va_empty",
31
- "lockedBanner": "t_j5va_lockedBanner",
32
- "modeAsk": "t_j5va_modeAsk",
33
- "reportBox": "t_j5va_reportBox",
34
- "row": "t_j5va_row",
35
- "secretField": "t_j5va_secretField",
36
- "modeAuto": "t_j5va_modeAuto",
37
- "rowExpired": "t_j5va_rowExpired",
38
- "footer": "t_j5va_footer",
39
- "pinOn": "t_j5va_pinOn",
40
- "emptyBox": "t_j5va_emptyBox",
41
- "checkField": "t_j5va_checkField",
42
- "histUpdate": "t_j5va_histUpdate",
43
- "clearButton": "t_j5va_clearButton",
44
- "healthBar": "t_j5va_healthBar",
45
- "dupNames": "t_j5va_dupNames",
46
- "selectActive": "t_j5va_selectActive",
47
- "searchBox": "t_j5va_searchBox",
48
- "histAdd": "t_j5va_histAdd",
49
- "deleteButton": "t_j5va_deleteButton",
50
- "kindChip": "t_j5va_kindChip",
51
- "tabPane": "t_j5va_tabPane",
52
- "editorActions": "t_j5va_editorActions",
20
+ "backupButton": "t_j5va_backupButton",
21
+ "emptyHint": "t_j5va_emptyHint",
53
22
  "list": "t_j5va_list",
54
- "status": "t_j5va_status",
55
- "bulkItem": "t_j5va_bulkItem",
23
+ "histUpdate": "t_j5va_histUpdate",
24
+ "toolbar": "t_j5va_toolbar",
25
+ "sortButton": "t_j5va_sortButton",
26
+ "genHist": "t_j5va_genHist",
56
27
  "kindIcon": "t_j5va_kindIcon",
57
- "dupGroup": "t_j5va_dupGroup",
58
- "detailItem": "t_j5va_detailItem",
28
+ "policyField": "t_j5va_policyField",
59
29
  "kindFilter": "t_j5va_kindFilter",
60
- "rowSelected": "t_j5va_rowSelected",
61
- "pwStrong": "t_j5va_pwStrong",
62
- "histDanger": "t_j5va_histDanger",
63
- "pinStar": "t_j5va_pinStar",
64
- "policyBar": "t_j5va_policyBar",
30
+ "rowCheck": "t_j5va_rowCheck",
31
+ "tabActive": "t_j5va_tabActive",
32
+ "reportLine": "t_j5va_reportLine",
65
33
  "lockedTag": "t_j5va_lockedTag",
34
+ "reportSub": "t_j5va_reportSub",
35
+ "reportTitle": "t_j5va_reportTitle",
66
36
  "dangerButton": "t_j5va_dangerButton",
67
- "dupMerge": "t_j5va_dupMerge",
68
- "resultCount": "t_j5va_resultCount",
69
- "bulkBar": "t_j5va_bulkBar",
37
+ "emptyBox": "t_j5va_emptyBox",
38
+ "highBadge": "t_j5va_highBadge",
39
+ "secretField": "t_j5va_secretField",
40
+ "auditIssues": "t_j5va_auditIssues",
41
+ "histDanger": "t_j5va_histDanger",
42
+ "bulkItem": "t_j5va_bulkItem",
43
+ "genOpts": "t_j5va_genOpts",
44
+ "status": "t_j5va_status",
70
45
  "revealButton": "t_j5va_revealButton",
71
46
  "totpRing": "t_j5va_totpRing",
72
- "detailBox": "t_j5va_detailBox",
73
- "reportTitle": "t_j5va_reportTitle",
74
- "section": "t_j5va_section",
47
+ "copied": "t_j5va_copied",
48
+ "field": "t_j5va_field",
49
+ "pwHistBox": "t_j5va_pwHistBox",
50
+ "footer": "t_j5va_footer",
75
51
  "histNeutral": "t_j5va_histNeutral",
76
- "reportSub": "t_j5va_reportSub",
77
- "rowDue": "t_j5va_rowDue",
78
- "pwMeter": "t_j5va_pwMeter",
52
+ "totp": "t_j5va_totp",
79
53
  "pwWeak": "t_j5va_pwWeak",
80
- "rowMain": "t_j5va_rowMain",
54
+ "srOnly": "t_j5va_srOnly",
55
+ "dupGroup": "t_j5va_dupGroup",
56
+ "pinOff": "t_j5va_pinOff",
57
+ "row": "t_j5va_row",
58
+ "tabs": "t_j5va_tabs",
59
+ "pwStrong": "t_j5va_pwStrong",
60
+ "pwHistTime": "t_j5va_pwHistTime",
81
61
  "rowActions": "t_j5va_rowActions",
82
- "badgeOk": "t_j5va_badgeOk",
83
- "genOpts": "t_j5va_genOpts",
84
- "tabActive": "t_j5va_tabActive",
85
- "reportLine": "t_j5va_reportLine",
86
- "highBadge": "t_j5va_highBadge",
87
- "error": "t_j5va_error",
88
- "intro": "t_j5va_intro",
89
- "modeReadonly": "t_j5va_modeReadonly",
90
- "badgeDanger": "t_j5va_badgeDanger",
62
+ "dueBadge": "t_j5va_dueBadge",
63
+ "resultCount": "t_j5va_resultCount",
64
+ "empty": "t_j5va_empty",
65
+ "addButton": "t_j5va_addButton",
91
66
  "genOptRow": "t_j5va_genOptRow",
92
- "uriCode": "t_j5va_uriCode",
93
- "saveButton": "t_j5va_saveButton",
94
- "toolbar": "t_j5va_toolbar",
95
- "sortButton": "t_j5va_sortButton",
96
- "srOnly": "t_j5va_srOnly",
97
- "rowCheck": "t_j5va_rowCheck",
98
- "trashButton": "t_j5va_trashButton",
99
- "auditIssues": "t_j5va_auditIssues",
100
- "copied": "t_j5va_copied",
101
- "emptyHint": "t_j5va_emptyHint",
67
+ "lockedBanner": "t_j5va_lockedBanner",
68
+ "badgeWarn": "t_j5va_badgeWarn",
69
+ "checkField": "t_j5va_checkField",
70
+ "detailBox": "t_j5va_detailBox",
71
+ "section": "t_j5va_section",
72
+ "reportBox": "t_j5va_reportBox",
73
+ "pinOn": "t_j5va_pinOn",
74
+ "rowSelected": "t_j5va_rowSelected",
102
75
  "editor": "t_j5va_editor",
103
- "field": "t_j5va_field",
104
- "tabs": "t_j5va_tabs",
76
+ "selectActive": "t_j5va_selectActive",
77
+ "pwHistRow": "t_j5va_pwHistRow",
78
+ "healthBar": "t_j5va_healthBar",
79
+ "healthSummary": "t_j5va_healthSummary",
80
+ "detailItem": "t_j5va_detailItem",
81
+ "trashButton": "t_j5va_trashButton",
82
+ "badge": "t_j5va_badge",
105
83
  "auditRow": "t_j5va_auditRow",
106
- "policyField": "t_j5va_policyField",
107
- "pwLabel": "t_j5va_pwLabel",
108
84
  "title": "t_j5va_title",
109
- "healthSummary": "t_j5va_healthSummary",
110
- "totp": "t_j5va_totp",
111
- "backupButton": "t_j5va_backupButton",
85
+ "error": "t_j5va_error",
86
+ "clearButton": "t_j5va_clearButton",
87
+ "pwMeter": "t_j5va_pwMeter",
88
+ "retryButton": "t_j5va_retryButton",
89
+ "pwBar": "t_j5va_pwBar",
90
+ "kindChip": "t_j5va_kindChip",
91
+ "uriCode": "t_j5va_uriCode",
92
+ "searchBox": "t_j5va_searchBox",
93
+ "histAdd": "t_j5va_histAdd",
112
94
  "tab": "t_j5va_tab",
95
+ "editorActions": "t_j5va_editorActions",
96
+ "bulkBar": "t_j5va_bulkBar",
97
+ "editorBody": "t_j5va_editorBody",
98
+ "pwHistPwd": "t_j5va_pwHistPwd",
99
+ "scoreRing": "t_j5va_scoreRing",
100
+ "pwLabel": "t_j5va_pwLabel",
101
+ "identity": "t_j5va_identity",
102
+ "intro": "t_j5va_intro",
103
+ "rowMain": "t_j5va_rowMain",
104
+ "dupNames": "t_j5va_dupNames",
105
+ "modeAsk": "t_j5va_modeAsk",
106
+ "rowExpired": "t_j5va_rowExpired",
107
+ "pinStar": "t_j5va_pinStar",
108
+ "deleteButton": "t_j5va_deleteButton",
109
+ "badgeDanger": "t_j5va_badgeDanger",
110
+ "dupMerge": "t_j5va_dupMerge",
111
+ "modeAuto": "t_j5va_modeAuto",
112
+ "badgeOk": "t_j5va_badgeOk",
113
+ "modeReadonly": "t_j5va_modeReadonly",
114
+ "policyBar": "t_j5va_policyBar",
115
+ "bulkCount": "t_j5va_bulkCount",
113
116
  "pwFair": "t_j5va_pwFair",
114
- "pwBar": "t_j5va_pwBar",
115
- "badge": "t_j5va_badge"
117
+ "tabPane": "t_j5va_tabPane",
118
+ "rowDue": "t_j5va_rowDue",
119
+ "saveButton": "t_j5va_saveButton"
116
120
  };
117
121
  //#endregion
118
122
  //#region src/client/VaultSection.tsx
@@ -297,7 +301,7 @@ window.__ModuleLoader__.load({
297
301
  }
298
302
  /** Render the Vault settings section. */
299
303
  function VaultSection(props) {
300
- const { t, config, setAccessMode, setAutoCapture, setAutoLock, list, search, get, add, update, remove, purge, trash, rotation, health, duplicates, duplicateGroups, merge, history, stats, backupStatus, backup, recent, restore, undeleteAll, totp, status, switchVault, listVaults, touch, setFavorite, attachments, detach, verifyAll, breachCheck, generatePassword, strength, generateUsername, templates, saveTemplate, lock, totpUri, tags, renameTag, generatorHistory, backups, deleteBackup, restoreBackup, importChrome, importFirefox, import1password, importManagerCsv, importEnpass, importBitwarden, import1pif, importKeePassXml, importKdbx, importBitwardenEncrypted, keychainImport, searchSystem, sessionOpen, sessionCollect, sessionClose, sessionListOpen, sessionListSaved, sessionSave, sessionExport, sessionGet, sessionPrune, vaultRename, vaultDelete, watchtower, export1pux, exportBitwarden, recoveryCode, verifyRecovery, recoveryStatus, unlock } = props;
304
+ const { t, config, setAccessMode, setAutoCapture, setAutoLock, list, search, get, add, update, remove, purge, trash, rotation, health, duplicates, duplicateGroups, merge, history, stats, backupStatus, backup, recent, restore, undeleteAll, totp, status, switchVault, listVaults, touch, setFavorite, attachments, detach, verifyAll, breachCheck, generatePassword, strength, generateUsername, templates, saveTemplate, lock, totpUri, tags, renameTag, generatorHistory, backups, deleteBackup, restoreBackup, importChrome, importFirefox, import1password, importManagerCsv, importEnpass, importBitwarden, import1pif, importKeePassXml, importKdbx, importBitwardenEncrypted, keychainImport, searchSystem, sessionOpen, sessionCollect, sessionClose, sessionListOpen, sessionListSaved, sessionSave, sessionExport, sessionGet, sessionPrune, passwordHistory, passwordRollback, vaultRename, vaultDelete, watchtower, export1pux, exportBitwarden, recoveryCode, verifyRecovery, recoveryStatus, unlock } = props;
301
305
  const searchId = (0, react.useId)();
302
306
  const [query, setQuery] = (0, react.useState)("");
303
307
  const [state, setState] = (0, react.useState)({ status: "loading" });
@@ -346,6 +350,9 @@ window.__ModuleLoader__.load({
346
350
  const [attachmentsMap, setAttachmentsMap] = (0, react.useState)({});
347
351
  const [selectMode, setSelectMode] = (0, react.useState)(false);
348
352
  const [selectedIds, setSelectedIds] = (0, react.useState)(/* @__PURE__ */ new Set());
353
+ const [pwHistory, setPwHistory] = (0, react.useState)(null);
354
+ const [pwHistoryFor, setPwHistoryFor] = (0, react.useState)(null);
355
+ const [pwHistRevealed, setPwHistRevealed] = (0, react.useState)(null);
349
356
  const [visibleCount, setVisibleCount] = (0, react.useState)(50);
350
357
  const [sortBy, setSortBy] = (0, react.useState)("alpha");
351
358
  const [activeTab, setActiveTab] = (0, react.useState)("entries");
@@ -1544,6 +1551,37 @@ window.__ModuleLoader__.load({
1544
1551
  setBusy(false);
1545
1552
  }
1546
1553
  }
1554
+ /** Show an entry's password history (1Password-style) and allow rollback. */
1555
+ async function showPasswordHistory(id) {
1556
+ setBusy(true);
1557
+ try {
1558
+ setPwHistory(await passwordHistory(id));
1559
+ setPwHistoryFor(id);
1560
+ } catch (err) {
1561
+ setMessage(errText(err));
1562
+ } finally {
1563
+ setBusy(false);
1564
+ }
1565
+ }
1566
+ /** Roll the entry's password back to a history point. */
1567
+ async function rollbackPassword(at) {
1568
+ if (pwHistoryFor === null) return;
1569
+ if (!window.confirm(t("pwRollbackConfirm"))) return;
1570
+ setBusy(true);
1571
+ try {
1572
+ if ((await passwordRollback(pwHistoryFor, at)).rolledBack) {
1573
+ setMessage(t("pwRolledBack"));
1574
+ setPwHistory(null);
1575
+ setPwHistoryFor(null);
1576
+ refresh();
1577
+ refreshHealth();
1578
+ } else setMessage(t("pwRollbackFailed"));
1579
+ } catch (err) {
1580
+ setMessage(errText(err));
1581
+ } finally {
1582
+ setBusy(false);
1583
+ }
1584
+ }
1547
1585
  /** Copy a field value to the clipboard and flash the row. */
1548
1586
  const clipboardTimer = (0, react.useRef)(null);
1549
1587
  const CLIPBOARD_CLEAR_MS = 3e4;
@@ -1930,6 +1968,57 @@ window.__ModuleLoader__.load({
1930
1968
  className: VaultSection_module_css_default.error,
1931
1969
  children: message
1932
1970
  }),
1971
+ pwHistory !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1972
+ className: VaultSection_module_css_default.pwHistBox,
1973
+ role: "dialog",
1974
+ "aria-label": t("pwHistory"),
1975
+ children: [
1976
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1977
+ className: VaultSection_module_css_default.reportTitle,
1978
+ children: t("pwHistory")
1979
+ }),
1980
+ pwHistory.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1981
+ className: VaultSection_module_css_default.reportSub,
1982
+ children: t("pwHistoryEmpty")
1983
+ }),
1984
+ pwHistory.map((h, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1985
+ className: VaultSection_module_css_default.pwHistRow,
1986
+ children: [
1987
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
1988
+ className: VaultSection_module_css_default.pwHistPwd,
1989
+ children: pwHistRevealed === i ? h.password : "••••••••"
1990
+ }),
1991
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1992
+ type: "button",
1993
+ className: VaultSection_module_css_default.revealButton,
1994
+ title: t("pwHistoryHint"),
1995
+ onClick: () => setPwHistRevealed(pwHistRevealed === i ? null : i),
1996
+ children: pwHistRevealed === i ? t("hide") : t("show")
1997
+ }),
1998
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1999
+ className: VaultSection_module_css_default.pwHistTime,
2000
+ children: relTime(h.at)
2001
+ }),
2002
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2003
+ type: "button",
2004
+ className: VaultSection_module_css_default.dupMerge,
2005
+ disabled: busy || readonly || locked,
2006
+ onClick: () => void rollbackPassword(h.at),
2007
+ children: t("pwRollback")
2008
+ })
2009
+ ]
2010
+ }, i)),
2011
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2012
+ type: "button",
2013
+ className: VaultSection_module_css_default.backupButton,
2014
+ onClick: () => {
2015
+ setPwHistory(null);
2016
+ setPwHistoryFor(null);
2017
+ },
2018
+ children: t("cancel")
2019
+ })
2020
+ ]
2021
+ }),
1933
2022
  state.status === "loading" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1934
2023
  className: VaultSection_module_css_default.status,
1935
2024
  children: t("loading")
@@ -3345,6 +3434,13 @@ window.__ModuleLoader__.load({
3345
3434
  title: t("touchHint"),
3346
3435
  children: t("touch")
3347
3436
  }),
3437
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3438
+ type: "button",
3439
+ onClick: () => void showPasswordHistory(entry.id),
3440
+ disabled: busy || locked,
3441
+ title: t("pwHistoryHint"),
3442
+ children: t("pwHistory")
3443
+ }),
3348
3444
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3349
3445
  type: "button",
3350
3446
  onClick: () => void startEdit(entry.id),
@@ -4202,6 +4298,13 @@ window.__ModuleLoader__.load({
4202
4298
  copyUsername: "Copy username",
4203
4299
  copyUsernameHint: "Copy the username",
4204
4300
  copyTitleHint: "Copy the title",
4301
+ pwHistory: "Password history",
4302
+ pwHistoryHint: "View past passwords for this entry",
4303
+ pwHistoryEmpty: "No password history yet.",
4304
+ pwRollback: "Restore",
4305
+ pwRollbackConfirm: "Restore this old password? The current one moves to history.",
4306
+ pwRolledBack: "Password restored from history.",
4307
+ pwRollbackFailed: "Could not restore that password.",
4205
4308
  bulkSelect: "Select",
4206
4309
  bulkDone: "Done",
4207
4310
  bulkSelectAll: "Select all",
@@ -4544,6 +4647,13 @@ window.__ModuleLoader__.load({
4544
4647
  copyUsername: "复制用户名",
4545
4648
  copyUsernameHint: "复制用户名",
4546
4649
  copyTitleHint: "复制标题",
4650
+ pwHistory: "密码历史",
4651
+ pwHistoryHint: "查看该条目的历史密码",
4652
+ pwHistoryEmpty: "暂无密码历史。",
4653
+ pwRollback: "恢复",
4654
+ pwRollbackConfirm: "恢复此旧密码?当前密码将移入历史。",
4655
+ pwRolledBack: "已从历史恢复密码。",
4656
+ pwRollbackFailed: "无法恢复该密码。",
4547
4657
  bulkSelect: "批量选择",
4548
4658
  bulkDone: "完成",
4549
4659
  bulkSelectAll: "全选",
@@ -4793,6 +4903,11 @@ window.__ModuleLoader__.load({
4793
4903
  id,
4794
4904
  preview: preview ?? false
4795
4905
  }),
4906
+ passwordHistory: (id) => invoke("passwordHistory", { id }),
4907
+ passwordRollback: (id, at) => invoke("passwordRollback", {
4908
+ id,
4909
+ at
4910
+ }),
4796
4911
  watchtower: () => invoke("watchtower"),
4797
4912
  export1pux: (path) => invoke("export1pux", { path }),
4798
4913
  exportBitwarden: (path) => invoke("exportBitwarden", { path }),