dsh-vault 1.9.3 → 1.9.4-rc.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/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",
20
+ "bulkBar": "t_j5va_bulkBar",
26
21
  "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",
22
+ "rowSelected": "t_j5va_rowSelected",
23
+ "totpRing": "t_j5va_totpRing",
24
+ "intro": "t_j5va_intro",
52
25
  "editorActions": "t_j5va_editorActions",
53
- "list": "t_j5va_list",
54
- "status": "t_j5va_status",
26
+ "histNeutral": "t_j5va_histNeutral",
55
27
  "bulkItem": "t_j5va_bulkItem",
56
- "kindIcon": "t_j5va_kindIcon",
57
- "dupGroup": "t_j5va_dupGroup",
28
+ "badgeWarn": "t_j5va_badgeWarn",
29
+ "sortButton": "t_j5va_sortButton",
30
+ "pwMeter": "t_j5va_pwMeter",
31
+ "dangerButton": "t_j5va_dangerButton",
32
+ "uriCode": "t_j5va_uriCode",
58
33
  "detailItem": "t_j5va_detailItem",
59
- "kindFilter": "t_j5va_kindFilter",
60
- "rowSelected": "t_j5va_rowSelected",
34
+ "trashButton": "t_j5va_trashButton",
35
+ "genOptRow": "t_j5va_genOptRow",
36
+ "policyField": "t_j5va_policyField",
37
+ "histAdd": "t_j5va_histAdd",
38
+ "pwWeak": "t_j5va_pwWeak",
61
39
  "pwStrong": "t_j5va_pwStrong",
62
- "histDanger": "t_j5va_histDanger",
40
+ "resultCount": "t_j5va_resultCount",
41
+ "kindChip": "t_j5va_kindChip",
42
+ "field": "t_j5va_field",
43
+ "editorBody": "t_j5va_editorBody",
44
+ "identity": "t_j5va_identity",
45
+ "badgeOk": "t_j5va_badgeOk",
46
+ "totp": "t_j5va_totp",
47
+ "retryButton": "t_j5va_retryButton",
48
+ "reportLine": "t_j5va_reportLine",
63
49
  "pinStar": "t_j5va_pinStar",
64
- "policyBar": "t_j5va_policyBar",
65
50
  "lockedTag": "t_j5va_lockedTag",
66
- "dangerButton": "t_j5va_dangerButton",
67
51
  "dupMerge": "t_j5va_dupMerge",
68
- "resultCount": "t_j5va_resultCount",
69
- "bulkBar": "t_j5va_bulkBar",
70
- "revealButton": "t_j5va_revealButton",
71
- "totpRing": "t_j5va_totpRing",
72
- "detailBox": "t_j5va_detailBox",
73
- "reportTitle": "t_j5va_reportTitle",
74
- "section": "t_j5va_section",
75
- "histNeutral": "t_j5va_histNeutral",
76
- "reportSub": "t_j5va_reportSub",
77
- "rowDue": "t_j5va_rowDue",
78
- "pwMeter": "t_j5va_pwMeter",
79
- "pwWeak": "t_j5va_pwWeak",
80
52
  "rowMain": "t_j5va_rowMain",
81
- "rowActions": "t_j5va_rowActions",
82
- "badgeOk": "t_j5va_badgeOk",
53
+ "backupButton": "t_j5va_backupButton",
54
+ "pwHistBox": "t_j5va_pwHistBox",
55
+ "secretField": "t_j5va_secretField",
56
+ "histDanger": "t_j5va_histDanger",
57
+ "pinOff": "t_j5va_pinOff",
58
+ "copied": "t_j5va_copied",
59
+ "error": "t_j5va_error",
60
+ "policyBar": "t_j5va_policyBar",
61
+ "emptyBox": "t_j5va_emptyBox",
62
+ "healthBar": "t_j5va_healthBar",
83
63
  "genOpts": "t_j5va_genOpts",
84
- "tabActive": "t_j5va_tabActive",
85
- "reportLine": "t_j5va_reportLine",
64
+ "searchBox": "t_j5va_searchBox",
65
+ "pwHistPwd": "t_j5va_pwHistPwd",
66
+ "dupNames": "t_j5va_dupNames",
67
+ "selectActive": "t_j5va_selectActive",
68
+ "checkField": "t_j5va_checkField",
69
+ "dupGroup": "t_j5va_dupGroup",
70
+ "pwLabel": "t_j5va_pwLabel",
71
+ "emptyHint": "t_j5va_emptyHint",
86
72
  "highBadge": "t_j5va_highBadge",
87
- "error": "t_j5va_error",
88
- "intro": "t_j5va_intro",
89
- "modeReadonly": "t_j5va_modeReadonly",
90
- "badgeDanger": "t_j5va_badgeDanger",
91
- "genOptRow": "t_j5va_genOptRow",
92
- "uriCode": "t_j5va_uriCode",
73
+ "list": "t_j5va_list",
74
+ "healthSummary": "t_j5va_healthSummary",
93
75
  "saveButton": "t_j5va_saveButton",
94
76
  "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",
77
+ "modeAuto": "t_j5va_modeAuto",
78
+ "badgeDanger": "t_j5va_badgeDanger",
79
+ "rowActions": "t_j5va_rowActions",
80
+ "reportSub": "t_j5va_reportSub",
81
+ "badge": "t_j5va_badge",
82
+ "modeAsk": "t_j5va_modeAsk",
83
+ "rowDue": "t_j5va_rowDue",
84
+ "scoreRing": "t_j5va_scoreRing",
85
+ "modeReadonly": "t_j5va_modeReadonly",
86
+ "pwHistRow": "t_j5va_pwHistRow",
87
+ "rowExpired": "t_j5va_rowExpired",
88
+ "addButton": "t_j5va_addButton",
89
+ "genHist": "t_j5va_genHist",
90
+ "tabActive": "t_j5va_tabActive",
91
+ "reportTitle": "t_j5va_reportTitle",
92
+ "pinOn": "t_j5va_pinOn",
93
+ "tab": "t_j5va_tab",
94
+ "footer": "t_j5va_footer",
95
+ "status": "t_j5va_status",
102
96
  "editor": "t_j5va_editor",
103
- "field": "t_j5va_field",
104
- "tabs": "t_j5va_tabs",
97
+ "kindFilter": "t_j5va_kindFilter",
98
+ "rowCheck": "t_j5va_rowCheck",
99
+ "lockedBanner": "t_j5va_lockedBanner",
100
+ "histUpdate": "t_j5va_histUpdate",
101
+ "clearButton": "t_j5va_clearButton",
102
+ "pwBar": "t_j5va_pwBar",
103
+ "row": "t_j5va_row",
104
+ "tabPane": "t_j5va_tabPane",
105
+ "pwFair": "t_j5va_pwFair",
106
+ "section": "t_j5va_section",
107
+ "deleteButton": "t_j5va_deleteButton",
108
+ "kindIcon": "t_j5va_kindIcon",
105
109
  "auditRow": "t_j5va_auditRow",
106
- "policyField": "t_j5va_policyField",
107
- "pwLabel": "t_j5va_pwLabel",
110
+ "revealButton": "t_j5va_revealButton",
108
111
  "title": "t_j5va_title",
109
- "healthSummary": "t_j5va_healthSummary",
110
- "totp": "t_j5va_totp",
111
- "backupButton": "t_j5va_backupButton",
112
- "tab": "t_j5va_tab",
113
- "pwFair": "t_j5va_pwFair",
114
- "pwBar": "t_j5va_pwBar",
115
- "badge": "t_j5va_badge"
112
+ "empty": "t_j5va_empty",
113
+ "pwHistTime": "t_j5va_pwHistTime",
114
+ "auditIssues": "t_j5va_auditIssues",
115
+ "tabs": "t_j5va_tabs",
116
+ "detailBox": "t_j5va_detailBox",
117
+ "srOnly": "t_j5va_srOnly",
118
+ "bulkCount": "t_j5va_bulkCount",
119
+ "reportBox": "t_j5va_reportBox"
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,8 @@ 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);
349
355
  const [visibleCount, setVisibleCount] = (0, react.useState)(50);
350
356
  const [sortBy, setSortBy] = (0, react.useState)("alpha");
351
357
  const [activeTab, setActiveTab] = (0, react.useState)("entries");
@@ -1544,6 +1550,37 @@ window.__ModuleLoader__.load({
1544
1550
  setBusy(false);
1545
1551
  }
1546
1552
  }
1553
+ /** Show an entry's password history (1Password-style) and allow rollback. */
1554
+ async function showPasswordHistory(id) {
1555
+ setBusy(true);
1556
+ try {
1557
+ setPwHistory(await passwordHistory(id));
1558
+ setPwHistoryFor(id);
1559
+ } catch (err) {
1560
+ setMessage(errText(err));
1561
+ } finally {
1562
+ setBusy(false);
1563
+ }
1564
+ }
1565
+ /** Roll the entry's password back to a history point. */
1566
+ async function rollbackPassword(at) {
1567
+ if (pwHistoryFor === null) return;
1568
+ if (!window.confirm(t("pwRollbackConfirm"))) return;
1569
+ setBusy(true);
1570
+ try {
1571
+ if ((await passwordRollback(pwHistoryFor, at)).rolledBack) {
1572
+ setMessage(t("pwRolledBack"));
1573
+ setPwHistory(null);
1574
+ setPwHistoryFor(null);
1575
+ refresh();
1576
+ refreshHealth();
1577
+ } else setMessage(t("pwRollbackFailed"));
1578
+ } catch (err) {
1579
+ setMessage(errText(err));
1580
+ } finally {
1581
+ setBusy(false);
1582
+ }
1583
+ }
1547
1584
  /** Copy a field value to the clipboard and flash the row. */
1548
1585
  const clipboardTimer = (0, react.useRef)(null);
1549
1586
  const CLIPBOARD_CLEAR_MS = 3e4;
@@ -1930,6 +1967,50 @@ window.__ModuleLoader__.load({
1930
1967
  className: VaultSection_module_css_default.error,
1931
1968
  children: message
1932
1969
  }),
1970
+ pwHistory !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1971
+ className: VaultSection_module_css_default.pwHistBox,
1972
+ role: "dialog",
1973
+ "aria-label": t("pwHistory"),
1974
+ children: [
1975
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1976
+ className: VaultSection_module_css_default.reportTitle,
1977
+ children: t("pwHistory")
1978
+ }),
1979
+ pwHistory.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1980
+ className: VaultSection_module_css_default.reportSub,
1981
+ children: t("pwHistoryEmpty")
1982
+ }),
1983
+ pwHistory.map((h, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1984
+ className: VaultSection_module_css_default.pwHistRow,
1985
+ children: [
1986
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
1987
+ className: VaultSection_module_css_default.pwHistPwd,
1988
+ children: h.password
1989
+ }),
1990
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1991
+ className: VaultSection_module_css_default.pwHistTime,
1992
+ children: relTime(h.at)
1993
+ }),
1994
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1995
+ type: "button",
1996
+ className: VaultSection_module_css_default.dupMerge,
1997
+ disabled: busy || readonly || locked,
1998
+ onClick: () => void rollbackPassword(h.at),
1999
+ children: t("pwRollback")
2000
+ })
2001
+ ]
2002
+ }, i)),
2003
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2004
+ type: "button",
2005
+ className: VaultSection_module_css_default.backupButton,
2006
+ onClick: () => {
2007
+ setPwHistory(null);
2008
+ setPwHistoryFor(null);
2009
+ },
2010
+ children: t("cancel")
2011
+ })
2012
+ ]
2013
+ }),
1933
2014
  state.status === "loading" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1934
2015
  className: VaultSection_module_css_default.status,
1935
2016
  children: t("loading")
@@ -3345,6 +3426,13 @@ window.__ModuleLoader__.load({
3345
3426
  title: t("touchHint"),
3346
3427
  children: t("touch")
3347
3428
  }),
3429
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3430
+ type: "button",
3431
+ onClick: () => void showPasswordHistory(entry.id),
3432
+ disabled: busy || locked,
3433
+ title: t("pwHistoryHint"),
3434
+ children: t("pwHistory")
3435
+ }),
3348
3436
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3349
3437
  type: "button",
3350
3438
  onClick: () => void startEdit(entry.id),
@@ -4202,6 +4290,13 @@ window.__ModuleLoader__.load({
4202
4290
  copyUsername: "Copy username",
4203
4291
  copyUsernameHint: "Copy the username",
4204
4292
  copyTitleHint: "Copy the title",
4293
+ pwHistory: "Password history",
4294
+ pwHistoryHint: "View past passwords for this entry",
4295
+ pwHistoryEmpty: "No password history yet.",
4296
+ pwRollback: "Restore",
4297
+ pwRollbackConfirm: "Restore this old password? The current one moves to history.",
4298
+ pwRolledBack: "Password restored from history.",
4299
+ pwRollbackFailed: "Could not restore that password.",
4205
4300
  bulkSelect: "Select",
4206
4301
  bulkDone: "Done",
4207
4302
  bulkSelectAll: "Select all",
@@ -4544,6 +4639,13 @@ window.__ModuleLoader__.load({
4544
4639
  copyUsername: "复制用户名",
4545
4640
  copyUsernameHint: "复制用户名",
4546
4641
  copyTitleHint: "复制标题",
4642
+ pwHistory: "密码历史",
4643
+ pwHistoryHint: "查看该条目的历史密码",
4644
+ pwHistoryEmpty: "暂无密码历史。",
4645
+ pwRollback: "恢复",
4646
+ pwRollbackConfirm: "恢复此旧密码?当前密码将移入历史。",
4647
+ pwRolledBack: "已从历史恢复密码。",
4648
+ pwRollbackFailed: "无法恢复该密码。",
4547
4649
  bulkSelect: "批量选择",
4548
4650
  bulkDone: "完成",
4549
4651
  bulkSelectAll: "全选",
@@ -4793,6 +4895,11 @@ window.__ModuleLoader__.load({
4793
4895
  id,
4794
4896
  preview: preview ?? false
4795
4897
  }),
4898
+ passwordHistory: (id) => invoke("passwordHistory", { id }),
4899
+ passwordRollback: (id, at) => invoke("passwordRollback", {
4900
+ id,
4901
+ at
4902
+ }),
4796
4903
  watchtower: () => invoke("watchtower"),
4797
4904
  export1pux: (path) => invoke("export1pux", { path }),
4798
4905
  exportBitwarden: (path) => invoke("exportBitwarden", { path }),