@doubleelec/dsh-workspace-explorer 0.7.1-fork.4 → 0.9.0

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:panel.module.css.mjs
10
- const css = ".pEQVpG_dshwe-layer{z-index:100;pointer-events:none;position:fixed;inset:0}.pEQVpG_dshwe-popup{background:var(--dsw-alias-bg-layer-2,#262626);border:1px solid var(--dsw-alias-border-inverted,#80808047);width:384px;box-shadow:var(--dsw-shadow-lv3,0 12px 32px #00000059);color:var(--dsw-alias-label-primary,#e8e8e8);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2,#80808066);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2,#80808099);pointer-events:auto;opacity:0;transform-origin:100% 0;border-radius:16px;flex-direction:column;font:13px/1.45 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;transition:opacity .18s,transform .18s,width .22s;display:flex;position:fixed;right:16px;overflow:hidden;transform:translateY(-8px)scale(.98)}.pEQVpG_dshwe-popup-on{opacity:1;transform:translateY(0)scale(1)}.pEQVpG_dshwe-popup-full{transform-origin:0 0;right:auto!important}@media (prefers-reduced-motion:reduce){.pEQVpG_dshwe-popup{transition:none}}.pEQVpG_dshwe-popup .pEQVpG_dshwe-panel{width:auto;height:auto;min-height:0;box-shadow:none;pointer-events:auto;border:0;border-radius:0;flex:1;position:static;top:auto;bottom:auto;right:auto}.pEQVpG_dshwe-hicon{border:1px solid var(--dsw-alias-border-l2,#80808059);height:32px;color:var(--dsw-alias-label-primary,#e8e8e8);cursor:pointer;background:0 0;border-radius:18px;flex:none;justify-content:center;align-items:center;gap:4px;padding:6px 12px;font-size:13px;font-weight:400;line-height:20px;display:inline-flex}.pEQVpG_dshwe-hicon span,.pEQVpG_dshwe-hicon svg{flex:none}.pEQVpG_dshwe-hicon span{white-space:nowrap}.pEQVpG_dshwe-hicon:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.pEQVpG_dshwe-hicon-on{color:var(--dsw-alias-state-business-primary,#4176e6);border-color:#4176e680}.pEQVpG_dshwe-panel{pointer-events:auto;background:var(--dsw-alias-bg-layer-2,#262626);border:0;border-left:1px solid var(--dsw-alias-border-inverted,#80808047);width:384px;height:calc(100dvh - 96px);min-height:320px;box-shadow:var(--dsw-shadow-lv3,0 12px 32px #00000040);color:var(--dsw-alias-label-primary,#e8e8e8);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2,#80808066);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2,#80808099);border-radius:0 0 0 20px;flex-direction:column;font:13px/1.45 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;display:flex;position:fixed;top:0;bottom:auto;right:0;overflow:hidden}.pEQVpG_dshwe-head{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);flex:none;align-items:center;gap:8px;padding:14px 16px 12px 18px;display:flex}.pEQVpG_dshwe-head-ico{color:var(--dsw-alias-state-business-primary,#4176e6);flex:none;display:inline-flex}.pEQVpG_dshwe-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:15px;font-weight:600;overflow:hidden}.pEQVpG_dshwe-icobtn{color:var(--dsw-alias-label-secondary,#9a9a9a);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.pEQVpG_dshwe-icobtn:hover{background:var(--dsw-alias-interactive-bg-hover,#80808024);color:var(--dsw-alias-label-primary,#e8e8e8)}.pEQVpG_dshwe-selrow{align-items:center;gap:8px;padding:12px 16px 4px;display:flex}.pEQVpG_dshwe-sel,.pEQVpG_dshwe-filter{min-width:0;height:30px;color:var(--dsw-alias-label-primary,#e8e8e8);border:1px solid var(--dsw-alias-border-l2,#80808059);font:inherit;background:0 0;border-radius:8px;outline:none;flex:1;padding:0 8px;font-size:12.5px}.pEQVpG_dshwe-sel:focus-visible,.pEQVpG_dshwe-filter:focus-visible{border-color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-filter::placeholder{color:var(--dsw-alias-label-caption,#8a8a8a)}.pEQVpG_dshwe-filterrow{align-items:center;gap:6px;padding:0 16px 6px;display:flex}.pEQVpG_dshwe-filter-clear{color:var(--dsw-alias-label-secondary,#9a9a9a);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;width:26px;height:26px;display:inline-flex}.pEQVpG_dshwe-filter-clear:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.pEQVpG_dshwe-addbtn{border:1px solid var(--dsw-alias-border-l2,#80808059);height:30px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:3px;padding:0 10px;font-size:12.5px;display:inline-flex}.pEQVpG_dshwe-addbtn:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.pEQVpG_dshwe-hintline{color:var(--dsw-alias-label-caption,#8a8a8a);align-items:center;gap:6px;padding:0 18px 8px;font-size:11px;display:flex}.pEQVpG_dshwe-tree{flex:1;padding:2px 6px 10px;scroll-padding-bottom:30px;overflow:auto}.pEQVpG_dshwe-tree:after{content:\"\";flex:none;height:30px;display:block}.pEQVpG_dshwe-row{cursor:pointer;user-select:none;white-space:nowrap;box-sizing:border-box;text-align:left;width:100%;max-width:100%;color:inherit;font:inherit;background:0 0;border:0;border-radius:10px;align-items:center;gap:5px;padding:4.5px 10px;display:flex;overflow:hidden}.pEQVpG_dshwe-row:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.pEQVpG_dshwe-row-file{cursor:grab}.pEQVpG_dshwe-row-file:active{cursor:grabbing}.pEQVpG_dshwe-chev-slot{flex:none;justify-content:center;align-items:center;width:14px;display:inline-flex}.pEQVpG_dshwe-chev{color:var(--dsw-alias-label-dimmed,#777);transition:transform .16s;display:inline-flex}.pEQVpG_dshwe-chev-on{transform:rotate(90deg)}@media (prefers-reduced-motion:reduce){.pEQVpG_dshwe-chev{transition:none}}.pEQVpG_dshwe-ico{flex:none;justify-content:center;align-items:center;display:inline-flex}.pEQVpG_dshwe-folder-svg{color:#dcb67a}.pEQVpG_dshwe-name{text-overflow:ellipsis;flex:1;min-width:0;font-size:12.5px;overflow:hidden}.pEQVpG_dshwe-row-dir .pEQVpG_dshwe-name{font-weight:600}.pEQVpG_dshwe-row-sel{box-shadow:inset 2px 0 0 var(--dsw-alias-state-business-primary,#4176e6);background:#4176e629}.pEQVpG_dshwe-row-sel:hover{background:#4176e63d}.pEQVpG_dshwe-selbar{border-top:1px solid var(--dsw-alias-border-l3,#80808033);background:var(--dsw-alias-bg-layer-1,#222);flex:none;align-items:center;gap:8px;padding:8px 14px;display:flex}.pEQVpG_dshwe-selbar-count{min-width:0;color:var(--dsw-alias-label-primary,#e8e8e8);font-variant-numeric:tabular-nums;flex:1;font-size:12px}.pEQVpG_dshwe-pager-btn{border:1px solid var(--dsw-alias-border-l2,#80808059);width:24px;height:24px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;font-size:14px;line-height:1;display:inline-flex}.pEQVpG_dshwe-pager-btn:hover:not(:disabled){color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.pEQVpG_dshwe-pager-btn:disabled{opacity:.4;cursor:not-allowed}.pEQVpG_dshwe-size{color:var(--dsw-alias-label-caption,#8a8a8a);font-variant-numeric:tabular-nums;flex:none;padding-left:6px;font-size:11px}.pEQVpG_dshwe-file-ico-btn{cursor:pointer;color:inherit;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:2px;transition:background .12s;display:inline-flex}.pEQVpG_dshwe-file-ico-btn:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.pEQVpG_dshwe-file-ico-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}.pEQVpG_dshwe-share-btn{cursor:pointer;width:26px;height:26px;color:var(--dsw-alias-label-secondary,#9a9a9a);background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;transition:background .12s,color .12s;display:inline-flex}.pEQVpG_dshwe-share-btn:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f);color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-share-btn-on{color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-share-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}.pEQVpG_dshwe-preview-btn{cursor:pointer;width:26px;height:26px;color:var(--dsw-alias-label-secondary,#9a9a9a);background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;transition:background .12s,color .12s;display:inline-flex}.pEQVpG_dshwe-preview-btn:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f);color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-preview-btn-on{color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-preview-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}.pEQVpG_dshwe-row-active{background:#4176e614}.pEQVpG_dshwe-row-active:hover{background:#4176e624}.pEQVpG_dshwe-row-preview-dot{background:var(--dsw-alias-state-business-primary,#4176e6);border-radius:50%;flex:none;width:6px;height:6px;margin-left:4px}.pEQVpG_dshwe-note{color:var(--dsw-alias-label-caption,#8a8a8a);align-items:center;gap:8px;padding:6px 16px;font-size:12px;display:flex}.pEQVpG_dshwe-note-err{color:var(--dsw-alias-state-error-primary,#e5484d)}.pEQVpG_dshwe-spin{border:2px solid var(--dsw-alias-border-l2,#80808066);border-top-color:var(--dsw-alias-state-business-primary,#4176e6);border-radius:50%;flex:none;width:13px;height:13px;animation:.7s linear infinite pEQVpG_dshwe-spin}@keyframes pEQVpG_dshwe-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.pEQVpG_dshwe-spin{animation-duration:1.6s}}.pEQVpG_dshwe-empty{color:var(--dsw-alias-label-secondary,#9a9a9a);flex-direction:column;align-items:flex-start;gap:12px;padding:20px 18px;font-size:12.5px;display:flex}.pEQVpG_dshwe-empty-ico{color:var(--dsw-alias-label-dimmed,#777);opacity:.8}.pEQVpG_dshwe-body{flex:1;min-height:0;display:flex;overflow:hidden}.pEQVpG_dshwe-tree-col{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.pEQVpG_dshwe-preview-tab{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.pEQVpG_dshwe-preview-slot{border-right:1px solid var(--dsw-alias-border-l3,#80808033);background:var(--dsw-alias-bg-layer-1,#222);flex-direction:column;flex:none;width:340px;animation:.2s pEQVpG_dshwe-slide-in;display:flex}@keyframes pEQVpG_dshwe-slide-in{0%{opacity:0;width:0}to{opacity:1;width:340px}}@media (prefers-reduced-motion:reduce){.pEQVpG_dshwe-preview-slot{animation:none}}.pEQVpG_dshwe-resize-corner{cursor:nesw-resize;touch-action:none;z-index:2;justify-content:flex-start;align-items:flex-end;width:30px;height:30px;padding:6px;display:flex;position:absolute;bottom:0;left:0}.pEQVpG_dshwe-resize-corner-bar{border-left:3px solid var(--dsw-alias-border-l2,#80808066);border-bottom:3px solid var(--dsw-alias-border-l2,#80808066);opacity:.7;border-bottom-left-radius:6px;width:16px;height:16px}.pEQVpG_dshwe-resize-corner:hover .pEQVpG_dshwe-resize-corner-bar{border-color:var(--dsw-alias-state-business-primary,#4176e6);opacity:1}.pEQVpG_dshwe-preview-panel{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.pEQVpG_dshwe-preview-head{flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:10px 12px 6px;display:flex}.pEQVpG_dshwe-preview-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12.5px;font-weight:600;overflow:hidden}.pEQVpG_dshwe-preview-meta{color:var(--dsw-alias-label-caption,#8a8a8a);flex:none;font-size:11px}.pEQVpG_dshwe-preview-pre{color:var(--dsw-alias-label-primary,#e8e8e8);white-space:pre;flex:1;margin:0;padding:4px 12px 10px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.pEQVpG_dshwe-md{color:var(--dsw-alias-label-primary,#e8e8e8);overflow-wrap:anywhere;flex:1;margin:0;padding:6px 14px 12px;font-size:12.5px;line-height:1.65;overflow:auto}.pEQVpG_dshwe-md>:first-child{margin-top:2px}.pEQVpG_dshwe-md-h{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);margin:12px 0 6px;padding-bottom:4px;font-weight:700;line-height:1.4}.pEQVpG_dshwe-md-h1{font-size:17px}.pEQVpG_dshwe-md-h2{font-size:15px}.pEQVpG_dshwe-md-h3{border-bottom:0;padding-bottom:0;font-size:13.5px}.pEQVpG_dshwe-md-h4,.pEQVpG_dshwe-md-h5,.pEQVpG_dshwe-md-h6{color:var(--dsw-alias-label-secondary,#9a9a9a);border-bottom:0;padding-bottom:0;font-size:12.5px}.pEQVpG_dshwe-md-p{margin:6px 0}.pEQVpG_dshwe-md-code{background:var(--dsw-alias-interactive-bg-hover,#80808024);border-radius:5px;padding:1px 5px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.pEQVpG_dshwe-md-pre{background:var(--dsw-alias-bg-layer-1,#222);border:1px solid var(--dsw-alias-border-l3,#80808033);white-space:pre;border-radius:10px;margin:8px 0;padding:10px 12px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;position:relative;overflow:auto}.pEQVpG_dshwe-md-pre code{background:0 0;padding:0}.pEQVpG_dshwe-md-lang{color:var(--dsw-alias-label-caption,#8a8a8a);font:10px/1.4 -apple-system,Segoe UI,sans-serif;position:absolute;top:6px;right:10px}.pEQVpG_dshwe-md-quote{border-left:3px solid var(--dsw-alias-state-business-primary,#4176e6);color:var(--dsw-alias-label-secondary,#9a9a9a);margin:8px 0;padding:2px 0 2px 12px}.pEQVpG_dshwe-md-quote>:first-child{margin-top:0}.pEQVpG_dshwe-md-quote>:last-child{margin-bottom:0}.pEQVpG_dshwe-md-ul,.pEQVpG_dshwe-md-ol,.pEQVpG_dshwe-md-task{margin:6px 0;padding-left:22px}.pEQVpG_dshwe-md-ul li,.pEQVpG_dshwe-md-ol li,.pEQVpG_dshwe-md-task li{margin:3px 0}.pEQVpG_dshwe-md-ul li::marker,.pEQVpG_dshwe-md-ol li::marker{color:var(--dsw-alias-label-caption,#8a8a8a)}.pEQVpG_dshwe-md-task{padding-left:4px;list-style:none}.pEQVpG_dshwe-md-check{border:1px solid var(--dsw-alias-border-l2,#80808066);color:#fff;vertical-align:-1px;border-radius:4px;justify-content:center;align-items:center;width:14px;height:14px;margin-right:7px;font-size:10px;line-height:1;display:inline-flex}.pEQVpG_dshwe-md-check-on{background:var(--dsw-alias-state-business-primary,#4176e6);border-color:#0000}.pEQVpG_dshwe-md-hr{border:0;border-top:1px solid var(--dsw-alias-border-l3,#80808033);margin:12px 0}.pEQVpG_dshwe-md-link{color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-md-tablewrap{border:1px solid var(--dsw-alias-border-l3,#80808033);border-radius:10px;margin:8px 0;overflow:auto}.pEQVpG_dshwe-md-table{border-collapse:collapse;width:100%;font-size:12px}.pEQVpG_dshwe-md-table th,.pEQVpG_dshwe-md-table td{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);text-align:left;vertical-align:top;padding:6px 10px}.pEQVpG_dshwe-md-table thead th{background:var(--dsw-alias-bg-layer-1,#222);font-weight:600}.pEQVpG_dshwe-md-table tbody tr:last-child td{border-bottom:0}.pEQVpG_dshwe-prevbtn-on{color:var(--dsw-alias-state-business-primary,#4176e6);border-color:#4176e680}.pEQVpG_dshwe-preview-actions{flex:none;align-items:center;gap:8px;padding:0 12px 10px;display:flex}.pEQVpG_dshwe-editor{resize:none;color:var(--dsw-alias-label-primary,#e8e8e8);white-space:pre;tab-size:2;background:0 0;border:0;outline:none;flex:1;padding:4px 12px 10px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.pEQVpG_dshwe-editor:focus{outline:none}.pEQVpG_dshwe-edit-saving{color:var(--dsw-alias-label-caption,#8a8a8a);font-size:11px}.pEQVpG_dshwe-edit-saveerr{color:var(--dsw-alias-state-error-primary,#e5484d);text-overflow:ellipsis;white-space:nowrap;max-width:120px;font-size:11px;overflow:hidden}.pEQVpG_dshwe-prevbtn{border:1px solid var(--dsw-alias-border-l2,#80808059);height:28px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 10px;font-size:12px;display:inline-flex}.pEQVpG_dshwe-prevbtn:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.pEQVpG_dshwe-prevbtn:disabled{opacity:.45;cursor:not-allowed}.pEQVpG_dshwe-hint{border:1.5px dashed var(--dsw-alias-state-business-primary,#4176e6);pointer-events:none;border-radius:20px;justify-content:center;align-items:center;display:flex;position:absolute;inset:10px}.pEQVpG_dshwe-hint-chip{background:var(--dsw-alias-bg-layer-2,#262626);color:var(--dsw-alias-label-primary,#e8e8e8);box-shadow:var(--dsw-shadow-lv2,0 4px 12px #00000040);border-radius:999px;align-items:center;gap:7px;padding:9px 15px;font-size:13px;display:flex}.pEQVpG_dshwe-hint-chip svg{color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-act{color:var(--dsw-alias-label-secondary,#9a9a9a);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;padding:5px 8px;display:inline-flex}.pEQVpG_dshwe-act:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f);color:var(--dsw-alias-label-primary,#e8e8e8)}.pEQVpG_dshwe-act-on{color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-row:focus-visible,.pEQVpG_dshwe-hicon:focus-visible,.pEQVpG_dshwe-icobtn:focus-visible,.pEQVpG_dshwe-act:focus-visible,.pEQVpG_dshwe-addbtn:focus-visible,.pEQVpG_dshwe-prevbtn:focus-visible,.pEQVpG_dshwe-file-ico-btn:focus-visible,.pEQVpG_dshwe-share-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}.pEQVpG_dshwe-tabs{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);flex:none;gap:2px;padding:0 14px;display:flex}.pEQVpG_dshwe-tab{height:36px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:10px 10px 0 0;flex:1;justify-content:center;align-items:center;gap:6px;font-size:12.5px;font-weight:500;display:inline-flex;position:relative}.pEQVpG_dshwe-tab:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#80808014)}.pEQVpG_dshwe-tab-on{color:var(--dsw-alias-label-primary,#e8e8e8)}.pEQVpG_dshwe-tab-ind{background:var(--dsw-alias-state-business-primary,#4176e6);opacity:0;border-radius:999px;height:2px;transition:opacity .16s,transform .16s;position:absolute;bottom:-1px;left:24%;right:24%;transform:scaleX(.4)}.pEQVpG_dshwe-tab-on .pEQVpG_dshwe-tab-ind{opacity:1;transform:scaleX(1)}.pEQVpG_dshwe-tab:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}@media (prefers-reduced-motion:reduce){.pEQVpG_dshwe-tab-ind{transition:none}}.pEQVpG_dshwe-tabbody{flex-direction:column;flex:1;min-height:0;display:flex}.pEQVpG_dshwe-set{flex-direction:column;flex:1;gap:2px;padding:8px 16px 14px;display:flex;overflow:auto}.pEQVpG_dshwe-setsec{letter-spacing:.05em;text-transform:uppercase;color:var(--dsw-alias-label-caption,#8a8a8a);padding:10px 4px 6px;font-size:11px;font-weight:600}.pEQVpG_dshwe-setrow{border-radius:12px;align-items:center;gap:12px;padding:9px 10px;display:flex}.pEQVpG_dshwe-setrow:hover{background:var(--dsw-alias-interactive-bg-hover,#8080800f)}.pEQVpG_dshwe-setinfo{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.pEQVpG_dshwe-setlabel{color:var(--dsw-alias-label-primary,#e8e8e8);font-size:12.5px}.pEQVpG_dshwe-setcap{color:var(--dsw-alias-label-caption,#8a8a8a);font-size:11px}.pEQVpG_dshwe-switch{border:1px solid var(--dsw-alias-border-l2,#80808066);background:var(--dsw-alias-interactive-bg-hover,#8080802e);cursor:pointer;border-radius:999px;flex:none;width:34px;height:20px;padding:0;transition:background .15s,border-color .15s;position:relative}.pEQVpG_dshwe-switch:after{content:\"\";background:var(--dsw-alias-label-secondary,#9a9a9a);border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px}.pEQVpG_dshwe-switch[aria-checked=true]{background:var(--dsw-alias-state-business-primary,#4176e6);border-color:#0000}.pEQVpG_dshwe-switch[aria-checked=true]:after{background:#fff;transform:translate(14px)}@media (prefers-reduced-motion:reduce){.pEQVpG_dshwe-switch,.pEQVpG_dshwe-switch:after{transition:none}}.pEQVpG_dshwe-setselect{min-width:118px;height:28px;color:var(--dsw-alias-label-primary,#e8e8e8);border:1px solid var(--dsw-alias-border-l2,#80808059);font:inherit;background:0 0;border-radius:8px;outline:none;flex:none;padding:0 8px;font-size:12px}.pEQVpG_dshwe-setselect:focus-visible{border-color:var(--dsw-alias-state-business-primary,#4176e6)}.pEQVpG_dshwe-setfoot{justify-content:flex-end;padding:8px 4px 2px;display:flex}.pEQVpG_dshwe-setnote{color:var(--dsw-alias-label-dimmed,#777);padding:2px 10px 8px;font-size:11px}.pEQVpG_dshwe-setpage{max-width:640px;padding:8px 8px 28px}.pEQVpG_dshwe-star-section{border-top:1px solid var(--dsw-alias-border-l3,#80808033);padding:12px 10px 0}.pEQVpG_dshwe-star-row{align-items:center;gap:12px;display:flex}.pEQVpG_dshwe-star-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.pEQVpG_dshwe-star-label{color:var(--dsw-alias-label-primary,#e8e8e8);font-size:12.5px}.pEQVpG_dshwe-star-link{border:1px solid var(--dsw-alias-border-l2,#80808059);height:28px;color:var(--dsw-alias-state-business-primary,#4176e6);font:inherit;cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 12px;font-size:12px;text-decoration:none;transition:background .12s,color .12s;display:inline-flex}.pEQVpG_dshwe-star-link:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.dsw-text-ref,[data-text-ref]{background:#5a9e6f1f;border-radius:3px;padding:1px 3px;font-weight:500;transition:background .15s;color:#5a9e6f!important}.dsw-text-ref:hover,[data-text-ref]:hover{background:#5a9e6f38}";
10
+ const css = "._4fxDUa_dshwe-layer{z-index:100;pointer-events:none;position:fixed;inset:0}._4fxDUa_dshwe-popup{background:var(--dsw-alias-bg-layer-2,#262626);border:1px solid var(--dsw-alias-border-inverted,#80808047);width:384px;box-shadow:var(--dsw-shadow-lv3,0 12px 32px #00000059);color:var(--dsw-alias-label-primary,#e8e8e8);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2,#80808066);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2,#80808099);pointer-events:auto;opacity:0;transform-origin:100% 0;border-radius:16px;flex-direction:column;font:13px/1.45 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;transition:opacity .18s,transform .18s,width .22s;display:flex;position:fixed;right:16px;overflow:hidden;transform:translateY(-8px)scale(.98)}._4fxDUa_dshwe-popup-on{opacity:1;transform:translateY(0)scale(1)}._4fxDUa_dshwe-popup-full{transform-origin:0 0;right:auto!important}@media (prefers-reduced-motion:reduce){._4fxDUa_dshwe-popup{transition:none}}._4fxDUa_dshwe-popup ._4fxDUa_dshwe-panel{width:auto;height:auto;min-height:0;box-shadow:none;pointer-events:auto;border:0;border-radius:0;flex:1;position:static;top:auto;bottom:auto;right:auto}._4fxDUa_dshwe-hicon{border:1px solid var(--dsw-alias-border-l2,#80808059);height:32px;color:var(--dsw-alias-label-primary,#e8e8e8);cursor:pointer;background:0 0;border-radius:18px;flex:none;justify-content:center;align-items:center;gap:4px;padding:6px 12px;font-size:13px;font-weight:400;line-height:20px;display:inline-flex}._4fxDUa_dshwe-hicon span,._4fxDUa_dshwe-hicon svg{flex:none}._4fxDUa_dshwe-hicon span{white-space:nowrap}._4fxDUa_dshwe-hicon:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}._4fxDUa_dshwe-hicon-on{color:var(--dsw-alias-state-business-primary,#4176e6);border-color:#4176e680}._4fxDUa_dshwe-panel{pointer-events:auto;background:var(--dsw-alias-bg-layer-2,#262626);border:0;border-left:1px solid var(--dsw-alias-border-inverted,#80808047);width:384px;height:calc(100dvh - 96px);min-height:320px;box-shadow:var(--dsw-shadow-lv3,0 12px 32px #00000040);color:var(--dsw-alias-label-primary,#e8e8e8);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2,#80808066);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2,#80808099);border-radius:0 0 0 20px;flex-direction:column;font:13px/1.45 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;display:flex;position:fixed;top:0;bottom:auto;right:0;overflow:hidden}._4fxDUa_dshwe-head{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);flex:none;align-items:center;gap:8px;padding:8px 12px 8px 14px;display:flex}._4fxDUa_dshwe-head-ico{color:var(--dsw-alias-state-business-primary,#4176e6);flex:none;display:inline-flex}._4fxDUa_dshwe-title{white-space:nowrap;text-align:left;text-overflow:ellipsis;direction:rtl;flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden}._4fxDUa_dshwe-icobtn{color:var(--dsw-alias-label-secondary,#9a9a9a);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}._4fxDUa_dshwe-icobtn:hover{background:var(--dsw-alias-interactive-bg-hover,#80808024);color:var(--dsw-alias-label-primary,#e8e8e8)}._4fxDUa_dshwe-filter{min-width:0;height:30px;color:var(--dsw-alias-label-primary,#e8e8e8);border:1px solid var(--dsw-alias-border-l2,#80808059);font:inherit;background:0 0;border-radius:8px;outline:none;flex:1;padding:0 8px;font-size:12.5px}._4fxDUa_dshwe-filter:focus-visible{border-color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-filter::placeholder{color:var(--dsw-alias-label-caption,#8a8a8a)}._4fxDUa_dshwe-filterrow{align-items:center;gap:6px;padding:0 16px 6px;display:flex}._4fxDUa_dshwe-filter-clear{color:var(--dsw-alias-label-secondary,#9a9a9a);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;width:26px;height:26px;display:inline-flex}._4fxDUa_dshwe-filter-clear:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}._4fxDUa_dshwe-addbtn{border:1px solid var(--dsw-alias-border-l2,#80808059);height:30px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border-radius:8px;flex:none;align-items:center;gap:3px;padding:0 10px;font-size:12.5px;display:inline-flex}._4fxDUa_dshwe-addbtn:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}._4fxDUa_dshwe-hintline{color:var(--dsw-alias-label-caption,#8a8a8a);align-items:center;gap:6px;padding:0 18px 8px;font-size:11px;display:flex}._4fxDUa_dshwe-tree{flex:1;padding:2px 6px 10px;scroll-padding-bottom:30px;overflow:auto}._4fxDUa_dshwe-tree:after{content:\"\";flex:none;height:30px;display:block}._4fxDUa_dshwe-row{cursor:pointer;user-select:none;white-space:nowrap;box-sizing:border-box;text-align:left;width:100%;max-width:100%;color:inherit;font:inherit;background:0 0;border:0;border-radius:10px;align-items:center;gap:5px;padding:4.5px 10px;display:flex;overflow:hidden}._4fxDUa_dshwe-row:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}._4fxDUa_dshwe-row-file{cursor:grab}._4fxDUa_dshwe-row-file:active{cursor:grabbing}._4fxDUa_dshwe-chev-slot{flex:none;justify-content:center;align-items:center;width:14px;display:inline-flex}._4fxDUa_dshwe-chev{color:var(--dsw-alias-label-dimmed,#777);transition:transform .16s;display:inline-flex}._4fxDUa_dshwe-chev-on{transform:rotate(90deg)}@media (prefers-reduced-motion:reduce){._4fxDUa_dshwe-chev{transition:none}}._4fxDUa_dshwe-ico{flex:none;justify-content:center;align-items:center;display:inline-flex}._4fxDUa_dshwe-folder-svg{color:#dcb67a}._4fxDUa_dshwe-name{text-overflow:ellipsis;flex:1;min-width:0;font-size:12.5px;overflow:hidden}._4fxDUa_dshwe-row-dir ._4fxDUa_dshwe-name{font-weight:600}._4fxDUa_dshwe-row-sel{box-shadow:inset 2px 0 0 var(--dsw-alias-state-business-primary,#4176e6);background:#4176e629}._4fxDUa_dshwe-row-sel:hover{background:#4176e63d}._4fxDUa_dshwe-selbar{border-top:1px solid var(--dsw-alias-border-l3,#80808033);background:var(--dsw-alias-bg-layer-1,#222);flex:none;align-items:center;gap:8px;padding:8px 14px;display:flex}._4fxDUa_dshwe-selbar-count{min-width:0;color:var(--dsw-alias-label-primary,#e8e8e8);font-variant-numeric:tabular-nums;flex:1;font-size:12px}._4fxDUa_dshwe-pager-btn{border:1px solid var(--dsw-alias-border-l2,#80808059);width:24px;height:24px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;font-size:14px;line-height:1;display:inline-flex}._4fxDUa_dshwe-pager-btn:hover:not(:disabled){color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}._4fxDUa_dshwe-pager-btn:disabled{opacity:.4;cursor:not-allowed}._4fxDUa_dshwe-size{color:var(--dsw-alias-label-caption,#8a8a8a);font-variant-numeric:tabular-nums;flex:none;padding-left:6px;font-size:11px}._4fxDUa_dshwe-file-ico-btn{cursor:pointer;color:inherit;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:2px;transition:background .12s;display:inline-flex}._4fxDUa_dshwe-file-ico-btn:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}._4fxDUa_dshwe-file-ico-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}._4fxDUa_dshwe-share-btn{cursor:pointer;width:26px;height:26px;color:var(--dsw-alias-label-secondary,#9a9a9a);background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;transition:background .12s,color .12s;display:inline-flex}._4fxDUa_dshwe-share-btn:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f);color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-share-btn-on{color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-share-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}._4fxDUa_dshwe-preview-btn{cursor:pointer;width:26px;height:26px;color:var(--dsw-alias-label-secondary,#9a9a9a);background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;transition:background .12s,color .12s;display:inline-flex}._4fxDUa_dshwe-preview-btn:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f);color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-preview-btn-on{color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-preview-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}._4fxDUa_dshwe-row-active{background:#4176e614}._4fxDUa_dshwe-row-active:hover{background:#4176e624}._4fxDUa_dshwe-row-preview-dot{background:var(--dsw-alias-state-business-primary,#4176e6);border-radius:50%;flex:none;width:6px;height:6px;margin-left:4px}._4fxDUa_dshwe-note{color:var(--dsw-alias-label-caption,#8a8a8a);align-items:center;gap:8px;padding:6px 16px;font-size:12px;display:flex}._4fxDUa_dshwe-note-err{color:var(--dsw-alias-state-error-primary,#e5484d)}._4fxDUa_dshwe-spin{border:2px solid var(--dsw-alias-border-l2,#80808066);border-top-color:var(--dsw-alias-state-business-primary,#4176e6);border-radius:50%;flex:none;width:13px;height:13px;animation:.7s linear infinite _4fxDUa_dshwe-spin}@keyframes _4fxDUa_dshwe-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){._4fxDUa_dshwe-spin{animation-duration:1.6s}}._4fxDUa_dshwe-empty{color:var(--dsw-alias-label-secondary,#9a9a9a);flex-direction:column;align-items:flex-start;gap:12px;padding:20px 18px;font-size:12.5px;display:flex}._4fxDUa_dshwe-empty-ico{color:var(--dsw-alias-label-dimmed,#777);opacity:.8}._4fxDUa_dshwe-body{flex:1;min-height:0;display:flex;overflow:hidden}._4fxDUa_dshwe-tree-col{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}._4fxDUa_dshwe-preview-tab{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}._4fxDUa_dshwe-preview-slot{border-right:1px solid var(--dsw-alias-border-l3,#80808033);background:var(--dsw-alias-bg-layer-1,#222);flex-direction:column;flex:none;width:340px;animation:.2s _4fxDUa_dshwe-slide-in;display:flex}@keyframes _4fxDUa_dshwe-slide-in{0%{opacity:0;width:0}to{opacity:1;width:340px}}@media (prefers-reduced-motion:reduce){._4fxDUa_dshwe-preview-slot{animation:none}}._4fxDUa_dshwe-resize-corner{cursor:nesw-resize;touch-action:none;z-index:2;justify-content:flex-start;align-items:flex-end;width:30px;height:30px;padding:6px;display:flex;position:absolute;bottom:0;left:0}._4fxDUa_dshwe-resize-corner-bar{border-left:3px solid var(--dsw-alias-border-l2,#80808066);border-bottom:3px solid var(--dsw-alias-border-l2,#80808066);opacity:.7;border-bottom-left-radius:6px;width:16px;height:16px}._4fxDUa_dshwe-resize-corner:hover ._4fxDUa_dshwe-resize-corner-bar{border-color:var(--dsw-alias-state-business-primary,#4176e6);opacity:1}._4fxDUa_dshwe-preview-panel{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}._4fxDUa_dshwe-preview-head{flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:10px 12px 6px;display:flex}._4fxDUa_dshwe-preview-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12.5px;font-weight:600;overflow:hidden}._4fxDUa_dshwe-preview-meta{color:var(--dsw-alias-label-caption,#8a8a8a);flex:none;font-size:11px}._4fxDUa_dshwe-preview-pre{color:var(--dsw-alias-label-primary,#e8e8e8);white-space:pre;flex:1;margin:0;padding:4px 12px 10px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}._4fxDUa_dshwe-md{color:var(--dsw-alias-label-primary,#e8e8e8);overflow-wrap:anywhere;flex:1;margin:0;padding:6px 14px 12px;font-size:12.5px;line-height:1.65;overflow:auto}._4fxDUa_dshwe-md>:first-child{margin-top:2px}._4fxDUa_dshwe-md-h{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);margin:12px 0 6px;padding-bottom:4px;font-weight:700;line-height:1.4}._4fxDUa_dshwe-md-h1{font-size:17px}._4fxDUa_dshwe-md-h2{font-size:15px}._4fxDUa_dshwe-md-h3{border-bottom:0;padding-bottom:0;font-size:13.5px}._4fxDUa_dshwe-md-h4,._4fxDUa_dshwe-md-h5,._4fxDUa_dshwe-md-h6{color:var(--dsw-alias-label-secondary,#9a9a9a);border-bottom:0;padding-bottom:0;font-size:12.5px}._4fxDUa_dshwe-md-p{margin:6px 0}._4fxDUa_dshwe-md-code{background:var(--dsw-alias-interactive-bg-hover,#80808024);border-radius:5px;padding:1px 5px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._4fxDUa_dshwe-md-pre{background:var(--dsw-alias-bg-layer-1,#222);border:1px solid var(--dsw-alias-border-l3,#80808033);white-space:pre;border-radius:10px;margin:8px 0;padding:10px 12px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;position:relative;overflow:auto}._4fxDUa_dshwe-md-pre code{background:0 0;padding:0}._4fxDUa_dshwe-md-lang{color:var(--dsw-alias-label-caption,#8a8a8a);font:10px/1.4 -apple-system,Segoe UI,sans-serif;position:absolute;top:6px;right:10px}._4fxDUa_dshwe-md-quote{border-left:3px solid var(--dsw-alias-state-business-primary,#4176e6);color:var(--dsw-alias-label-secondary,#9a9a9a);margin:8px 0;padding:2px 0 2px 12px}._4fxDUa_dshwe-md-quote>:first-child{margin-top:0}._4fxDUa_dshwe-md-quote>:last-child{margin-bottom:0}._4fxDUa_dshwe-md-ul,._4fxDUa_dshwe-md-ol,._4fxDUa_dshwe-md-task{margin:6px 0;padding-left:22px}._4fxDUa_dshwe-md-ul li,._4fxDUa_dshwe-md-ol li,._4fxDUa_dshwe-md-task li{margin:3px 0}._4fxDUa_dshwe-md-ul li::marker,._4fxDUa_dshwe-md-ol li::marker{color:var(--dsw-alias-label-caption,#8a8a8a)}._4fxDUa_dshwe-md-task{padding-left:4px;list-style:none}._4fxDUa_dshwe-md-check{border:1px solid var(--dsw-alias-border-l2,#80808066);color:#fff;vertical-align:-1px;border-radius:4px;justify-content:center;align-items:center;width:14px;height:14px;margin-right:7px;font-size:10px;line-height:1;display:inline-flex}._4fxDUa_dshwe-md-check-on{background:var(--dsw-alias-state-business-primary,#4176e6);border-color:#0000}._4fxDUa_dshwe-md-hr{border:0;border-top:1px solid var(--dsw-alias-border-l3,#80808033);margin:12px 0}._4fxDUa_dshwe-md-link{color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-mm{border:1px solid var(--dsw-alias-border-l3,#80808033);background:var(--dsw-alias-bg-layer-1,#222);border-radius:10px;margin:8px 0;overflow:hidden}._4fxDUa_dshwe-mm-bar{justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;display:flex}._4fxDUa_dshwe-mm-bar ._4fxDUa_dshwe-md-lang{position:static}._4fxDUa_dshwe-mm-svg{justify-content:center;padding:4px 10px 10px;display:flex;overflow:auto}._4fxDUa_dshwe-mm-svg svg{max-width:100%;height:auto}._4fxDUa_dshwe-mm ._4fxDUa_dshwe-md-pre{margin:0 10px 10px}._4fxDUa_dshwe-md-tablewrap{border:1px solid var(--dsw-alias-border-l3,#80808033);border-radius:10px;margin:8px 0;overflow:auto}._4fxDUa_dshwe-md-table{border-collapse:collapse;width:100%;font-size:12px}._4fxDUa_dshwe-md-table th,._4fxDUa_dshwe-md-table td{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);text-align:left;vertical-align:top;padding:6px 10px}._4fxDUa_dshwe-md-table thead th{background:var(--dsw-alias-bg-layer-1,#222);font-weight:600}._4fxDUa_dshwe-md-table tbody tr:last-child td{border-bottom:0}._4fxDUa_dshwe-prevbtn-on{color:var(--dsw-alias-state-business-primary,#4176e6);border-color:#4176e680}._4fxDUa_dshwe-preview-actions{flex:none;align-items:center;gap:8px;padding:0 12px 10px;display:flex}._4fxDUa_dshwe-editor{resize:none;color:var(--dsw-alias-label-primary,#e8e8e8);white-space:pre;tab-size:2;background:0 0;border:0;outline:none;flex:1;padding:4px 12px 10px;font:11.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}._4fxDUa_dshwe-editor:focus{outline:none}._4fxDUa_dshwe-edit-saving{color:var(--dsw-alias-label-caption,#8a8a8a);font-size:11px}._4fxDUa_dshwe-edit-saveerr{color:var(--dsw-alias-state-error-primary,#e5484d);text-overflow:ellipsis;white-space:nowrap;max-width:120px;font-size:11px;overflow:hidden}._4fxDUa_dshwe-prevbtn{border:1px solid var(--dsw-alias-border-l2,#80808059);height:28px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 10px;font-size:12px;display:inline-flex}._4fxDUa_dshwe-prevbtn:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#8080801f)}._4fxDUa_dshwe-prevbtn:disabled{opacity:.45;cursor:not-allowed}._4fxDUa_dshwe-hint{border:1.5px dashed var(--dsw-alias-state-business-primary,#4176e6);pointer-events:none;border-radius:20px;justify-content:center;align-items:center;display:flex;position:absolute;inset:10px}._4fxDUa_dshwe-hint-chip{background:var(--dsw-alias-bg-layer-2,#262626);color:var(--dsw-alias-label-primary,#e8e8e8);box-shadow:var(--dsw-shadow-lv2,0 4px 12px #00000040);border-radius:999px;align-items:center;gap:7px;padding:9px 15px;font-size:13px;display:flex}._4fxDUa_dshwe-hint-chip svg{color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-act{color:var(--dsw-alias-label-secondary,#9a9a9a);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;padding:5px 8px;display:inline-flex}._4fxDUa_dshwe-act:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f);color:var(--dsw-alias-label-primary,#e8e8e8)}._4fxDUa_dshwe-act-on{color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-row:focus-visible,._4fxDUa_dshwe-hicon:focus-visible,._4fxDUa_dshwe-icobtn:focus-visible,._4fxDUa_dshwe-act:focus-visible,._4fxDUa_dshwe-addbtn:focus-visible,._4fxDUa_dshwe-prevbtn:focus-visible,._4fxDUa_dshwe-file-ico-btn:focus-visible,._4fxDUa_dshwe-share-btn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}._4fxDUa_dshwe-tabs{border-bottom:1px solid var(--dsw-alias-border-l3,#80808033);flex:none;gap:2px;padding:0 14px;display:flex}._4fxDUa_dshwe-tab{height:36px;color:var(--dsw-alias-label-secondary,#9a9a9a);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:10px 10px 0 0;flex:1;justify-content:center;align-items:center;gap:6px;font-size:12.5px;font-weight:500;display:inline-flex;position:relative}._4fxDUa_dshwe-tab:hover{color:var(--dsw-alias-label-primary,#e8e8e8);background:var(--dsw-alias-interactive-bg-hover,#80808014)}._4fxDUa_dshwe-tab-on{color:var(--dsw-alias-label-primary,#e8e8e8)}._4fxDUa_dshwe-tab-ind{background:var(--dsw-alias-state-business-primary,#4176e6);opacity:0;border-radius:999px;height:2px;transition:opacity .16s,transform .16s;position:absolute;bottom:-1px;left:24%;right:24%;transform:scaleX(.4)}._4fxDUa_dshwe-tab-on ._4fxDUa_dshwe-tab-ind{opacity:1;transform:scaleX(1)}._4fxDUa_dshwe-tab:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4176e6);outline-offset:-2px}@media (prefers-reduced-motion:reduce){._4fxDUa_dshwe-tab-ind{transition:none}}._4fxDUa_dshwe-tabbody{flex-direction:column;flex:1;min-height:0;display:flex}._4fxDUa_dshwe-set{flex-direction:column;flex:1;gap:2px;padding:8px 16px 14px;display:flex;overflow:auto}._4fxDUa_dshwe-setsec{letter-spacing:.05em;text-transform:uppercase;color:var(--dsw-alias-label-caption,#8a8a8a);padding:10px 4px 6px;font-size:11px;font-weight:600}._4fxDUa_dshwe-setrow{border-radius:12px;align-items:center;gap:12px;padding:9px 10px;display:flex}._4fxDUa_dshwe-setrow:hover{background:var(--dsw-alias-interactive-bg-hover,#8080800f)}._4fxDUa_dshwe-setinfo{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}._4fxDUa_dshwe-setlabel{color:var(--dsw-alias-label-primary,#e8e8e8);font-size:12.5px}._4fxDUa_dshwe-setcap{color:var(--dsw-alias-label-caption,#8a8a8a);font-size:11px}._4fxDUa_dshwe-switch{border:1px solid var(--dsw-alias-border-l2,#80808066);background:var(--dsw-alias-interactive-bg-hover,#8080802e);cursor:pointer;border-radius:999px;flex:none;width:34px;height:20px;padding:0;transition:background .15s,border-color .15s;position:relative}._4fxDUa_dshwe-switch:after{content:\"\";background:var(--dsw-alias-label-secondary,#9a9a9a);border-radius:50%;width:14px;height:14px;transition:transform .15s;position:absolute;top:2px;left:2px}._4fxDUa_dshwe-switch[aria-checked=true]{background:var(--dsw-alias-state-business-primary,#4176e6);border-color:#0000}._4fxDUa_dshwe-switch[aria-checked=true]:after{background:#fff;transform:translate(14px)}@media (prefers-reduced-motion:reduce){._4fxDUa_dshwe-switch,._4fxDUa_dshwe-switch:after{transition:none}}._4fxDUa_dshwe-setselect{min-width:118px;height:28px;color:var(--dsw-alias-label-primary,#e8e8e8);border:1px solid var(--dsw-alias-border-l2,#80808059);font:inherit;background:0 0;border-radius:8px;outline:none;flex:none;padding:0 8px;font-size:12px}._4fxDUa_dshwe-setselect:focus-visible{border-color:var(--dsw-alias-state-business-primary,#4176e6)}._4fxDUa_dshwe-setfoot{justify-content:flex-end;padding:8px 4px 2px;display:flex}._4fxDUa_dshwe-setnote{color:var(--dsw-alias-label-dimmed,#777);padding:2px 10px 8px;font-size:11px}._4fxDUa_dshwe-setpage{max-width:640px;padding:8px 8px 28px}._4fxDUa_dshwe-star-section{border-top:1px solid var(--dsw-alias-border-l3,#80808033);padding:12px 10px 0}._4fxDUa_dshwe-star-row{align-items:center;gap:12px;display:flex}._4fxDUa_dshwe-star-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}._4fxDUa_dshwe-star-label{color:var(--dsw-alias-label-primary,#e8e8e8);font-size:12.5px}._4fxDUa_dshwe-star-link{border:1px solid var(--dsw-alias-border-l2,#80808059);height:28px;color:var(--dsw-alias-state-business-primary,#4176e6);font:inherit;cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 12px;font-size:12px;text-decoration:none;transition:background .12s,color .12s;display:inline-flex}._4fxDUa_dshwe-star-link:hover{background:var(--dsw-alias-interactive-bg-hover,#8080801f)}.dsw-text-ref,[data-text-ref]{background:#5a9e6f1f;border-radius:3px;padding:1px 3px;font-weight:500;transition:background .15s;color:#5a9e6f!important}.dsw-text-ref:hover,[data-text-ref]:hover{background:#5a9e6f38}";
11
11
  const tagId = "@doubleelec/dsh-workspace-explorer/panel.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,116 +17,117 @@ window.__ModuleLoader__.load({
17
17
  document.head.appendChild(tag);
18
18
  }
19
19
  var _dsh_css_panel_module_css_default = {
20
- "dshwe-md-ol": "pEQVpG_dshwe-md-ol",
21
- "dshwe-panel": "pEQVpG_dshwe-panel",
22
- "dshwe-tabbody": "pEQVpG_dshwe-tabbody",
23
- "dshwe-md-table": "pEQVpG_dshwe-md-table",
24
- "dshwe-hicon-on": "pEQVpG_dshwe-hicon-on",
25
- "dshwe-md": "pEQVpG_dshwe-md",
26
- "dshwe-setpage": "pEQVpG_dshwe-setpage",
27
- "dshwe-empty-ico": "pEQVpG_dshwe-empty-ico",
28
- "dshwe-title": "pEQVpG_dshwe-title",
29
- "dshwe-row": "pEQVpG_dshwe-row",
30
- "dshwe-md-task": "pEQVpG_dshwe-md-task",
31
- "dshwe-edit-saveerr": "pEQVpG_dshwe-edit-saveerr",
32
- "dshwe-set": "pEQVpG_dshwe-set",
33
- "dshwe-md-tablewrap": "pEQVpG_dshwe-md-tablewrap",
34
- "dshwe-filter-clear": "pEQVpG_dshwe-filter-clear",
35
- "dshwe-md-ul": "pEQVpG_dshwe-md-ul",
36
- "dshwe-note": "pEQVpG_dshwe-note",
37
- "dshwe-preview-actions": "pEQVpG_dshwe-preview-actions",
38
- "dshwe-popup-on": "pEQVpG_dshwe-popup-on",
39
- "dshwe-preview-pre": "pEQVpG_dshwe-preview-pre",
40
- "dshwe-row-sel": "pEQVpG_dshwe-row-sel",
41
- "dshwe-md-h1": "pEQVpG_dshwe-md-h1",
42
- "dshwe-hint": "pEQVpG_dshwe-hint",
43
- "dshwe-filter": "pEQVpG_dshwe-filter",
44
- "dshwe-chev-on": "pEQVpG_dshwe-chev-on",
45
- "dshwe-row-preview-dot": "pEQVpG_dshwe-row-preview-dot",
46
- "dshwe-resize-corner": "pEQVpG_dshwe-resize-corner",
47
- "dshwe-md-p": "pEQVpG_dshwe-md-p",
48
- "dshwe-tab-ind": "pEQVpG_dshwe-tab-ind",
49
- "dshwe-tree": "pEQVpG_dshwe-tree",
50
- "dshwe-hicon": "pEQVpG_dshwe-hicon",
51
- "dshwe-layer": "pEQVpG_dshwe-layer",
52
- "dshwe-md-lang": "pEQVpG_dshwe-md-lang",
53
- "dshwe-tab": "pEQVpG_dshwe-tab",
54
- "dshwe-edit-saving": "pEQVpG_dshwe-edit-saving",
55
- "dshwe-act-on": "pEQVpG_dshwe-act-on",
56
- "dshwe-setsec": "pEQVpG_dshwe-setsec",
57
- "dshwe-setrow": "pEQVpG_dshwe-setrow",
58
- "dshwe-popup-full": "pEQVpG_dshwe-popup-full",
59
- "dshwe-setselect": "pEQVpG_dshwe-setselect",
60
- "dshwe-setfoot": "pEQVpG_dshwe-setfoot",
61
- "dshwe-setnote": "pEQVpG_dshwe-setnote",
62
- "dshwe-star-section": "pEQVpG_dshwe-star-section",
63
- "dshwe-star-info": "pEQVpG_dshwe-star-info",
64
- "dshwe-editor": "pEQVpG_dshwe-editor",
65
- "dshwe-star-label": "pEQVpG_dshwe-star-label",
66
- "dshwe-folder-svg": "pEQVpG_dshwe-folder-svg",
67
- "dshwe-hint-chip": "pEQVpG_dshwe-hint-chip",
68
- "dshwe-preview-name": "pEQVpG_dshwe-preview-name",
69
- "dshwe-share-btn": "pEQVpG_dshwe-share-btn",
70
- "dshwe-selbar": "pEQVpG_dshwe-selbar",
71
- "dshwe-filterrow": "pEQVpG_dshwe-filterrow",
72
- "dshwe-row-active": "pEQVpG_dshwe-row-active",
73
- "dshwe-popup": "pEQVpG_dshwe-popup",
74
- "dshwe-sel": "pEQVpG_dshwe-sel",
75
- "dshwe-preview-btn-on": "pEQVpG_dshwe-preview-btn-on",
76
- "dshwe-empty": "pEQVpG_dshwe-empty",
77
- "dshwe-md-h2": "pEQVpG_dshwe-md-h2",
78
- "dshwe-addbtn": "pEQVpG_dshwe-addbtn",
79
- "dshwe-share-btn-on": "pEQVpG_dshwe-share-btn-on",
80
- "dshwe-head": "pEQVpG_dshwe-head",
81
- "dshwe-head-ico": "pEQVpG_dshwe-head-ico",
82
- "dshwe-md-check": "pEQVpG_dshwe-md-check",
83
- "dshwe-name": "pEQVpG_dshwe-name",
84
- "dshwe-md-hr": "pEQVpG_dshwe-md-hr",
85
- "dshwe-md-link": "pEQVpG_dshwe-md-link",
86
- "dshwe-preview-meta": "pEQVpG_dshwe-preview-meta",
87
- "dshwe-md-code": "pEQVpG_dshwe-md-code",
88
- "dshwe-preview-slot": "pEQVpG_dshwe-preview-slot",
89
- "dshwe-prevbtn-on": "pEQVpG_dshwe-prevbtn-on",
90
- "dshwe-tabs": "pEQVpG_dshwe-tabs",
91
- "dshwe-tree-col": "pEQVpG_dshwe-tree-col",
92
- "dshwe-setlabel": "pEQVpG_dshwe-setlabel",
93
- "dshwe-prevbtn": "pEQVpG_dshwe-prevbtn",
94
- "dshwe-star-link": "pEQVpG_dshwe-star-link",
95
- "dshwe-md-quote": "pEQVpG_dshwe-md-quote",
96
- "dshwe-setinfo": "pEQVpG_dshwe-setinfo",
97
- "dshwe-spin": "pEQVpG_dshwe-spin",
98
- "dshwe-selrow": "pEQVpG_dshwe-selrow",
99
- "dshwe-selbar-count": "pEQVpG_dshwe-selbar-count",
100
- "dshwe-preview-tab": "pEQVpG_dshwe-preview-tab",
101
- "dshwe-star-row": "pEQVpG_dshwe-star-row",
102
- "dshwe-md-h": "pEQVpG_dshwe-md-h",
103
- "dshwe-row-dir": "pEQVpG_dshwe-row-dir",
104
- "dshwe-pager-btn": "pEQVpG_dshwe-pager-btn",
105
- "dshwe-file-ico-btn": "pEQVpG_dshwe-file-ico-btn",
106
- "dshwe-ico": "pEQVpG_dshwe-ico",
107
- "dshwe-resize-corner-bar": "pEQVpG_dshwe-resize-corner-bar",
108
- "dshwe-setcap": "pEQVpG_dshwe-setcap",
109
- "dshwe-preview-btn": "pEQVpG_dshwe-preview-btn",
110
- "dshwe-note-err": "pEQVpG_dshwe-note-err",
111
- "dshwe-hintline": "pEQVpG_dshwe-hintline",
112
- "dshwe-body": "pEQVpG_dshwe-body",
113
- "dshwe-md-h4": "pEQVpG_dshwe-md-h4",
114
- "dshwe-switch": "pEQVpG_dshwe-switch",
115
- "dshwe-md-h5": "pEQVpG_dshwe-md-h5",
116
- "dshwe-preview-head": "pEQVpG_dshwe-preview-head",
117
- "dshwe-preview-panel": "pEQVpG_dshwe-preview-panel",
118
- "dshwe-chev-slot": "pEQVpG_dshwe-chev-slot",
119
- "dshwe-icobtn": "pEQVpG_dshwe-icobtn",
120
- "dshwe-md-pre": "pEQVpG_dshwe-md-pre",
121
- "dshwe-md-check-on": "pEQVpG_dshwe-md-check-on",
122
- "dshwe-slide-in": "pEQVpG_dshwe-slide-in",
123
- "dshwe-md-h6": "pEQVpG_dshwe-md-h6",
124
- "dshwe-chev": "pEQVpG_dshwe-chev",
125
- "dshwe-md-h3": "pEQVpG_dshwe-md-h3",
126
- "dshwe-act": "pEQVpG_dshwe-act",
127
- "dshwe-row-file": "pEQVpG_dshwe-row-file",
128
- "dshwe-size": "pEQVpG_dshwe-size",
129
- "dshwe-tab-on": "pEQVpG_dshwe-tab-on"
20
+ "dshwe-title": "_4fxDUa_dshwe-title",
21
+ "dshwe-selbar-count": "_4fxDUa_dshwe-selbar-count",
22
+ "dshwe-empty-ico": "_4fxDUa_dshwe-empty-ico",
23
+ "dshwe-body": "_4fxDUa_dshwe-body",
24
+ "dshwe-preview-name": "_4fxDUa_dshwe-preview-name",
25
+ "dshwe-md-ol": "_4fxDUa_dshwe-md-ol",
26
+ "dshwe-setpage": "_4fxDUa_dshwe-setpage",
27
+ "dshwe-note-err": "_4fxDUa_dshwe-note-err",
28
+ "dshwe-md-link": "_4fxDUa_dshwe-md-link",
29
+ "dshwe-tabbody": "_4fxDUa_dshwe-tabbody",
30
+ "dshwe-star-section": "_4fxDUa_dshwe-star-section",
31
+ "dshwe-tabs": "_4fxDUa_dshwe-tabs",
32
+ "dshwe-star-label": "_4fxDUa_dshwe-star-label",
33
+ "dshwe-folder-svg": "_4fxDUa_dshwe-folder-svg",
34
+ "dshwe-md-h2": "_4fxDUa_dshwe-md-h2",
35
+ "dshwe-md-tablewrap": "_4fxDUa_dshwe-md-tablewrap",
36
+ "dshwe-head": "_4fxDUa_dshwe-head",
37
+ "dshwe-edit-saving": "_4fxDUa_dshwe-edit-saving",
38
+ "dshwe-mm": "_4fxDUa_dshwe-mm",
39
+ "dshwe-hintline": "_4fxDUa_dshwe-hintline",
40
+ "dshwe-preview-slot": "_4fxDUa_dshwe-preview-slot",
41
+ "dshwe-chev-slot": "_4fxDUa_dshwe-chev-slot",
42
+ "dshwe-head-ico": "_4fxDUa_dshwe-head-ico",
43
+ "dshwe-mm-bar": "_4fxDUa_dshwe-mm-bar",
44
+ "dshwe-preview-actions": "_4fxDUa_dshwe-preview-actions",
45
+ "dshwe-md-check-on": "_4fxDUa_dshwe-md-check-on",
46
+ "dshwe-filter-clear": "_4fxDUa_dshwe-filter-clear",
47
+ "dshwe-hicon": "_4fxDUa_dshwe-hicon",
48
+ "dshwe-filter": "_4fxDUa_dshwe-filter",
49
+ "dshwe-tree": "_4fxDUa_dshwe-tree",
50
+ "dshwe-ico": "_4fxDUa_dshwe-ico",
51
+ "dshwe-popup-full": "_4fxDUa_dshwe-popup-full",
52
+ "dshwe-file-ico-btn": "_4fxDUa_dshwe-file-ico-btn",
53
+ "dshwe-note": "_4fxDUa_dshwe-note",
54
+ "dshwe-preview-btn-on": "_4fxDUa_dshwe-preview-btn-on",
55
+ "dshwe-preview-panel": "_4fxDUa_dshwe-preview-panel",
56
+ "dshwe-md": "_4fxDUa_dshwe-md",
57
+ "dshwe-md-p": "_4fxDUa_dshwe-md-p",
58
+ "dshwe-preview-btn": "_4fxDUa_dshwe-preview-btn",
59
+ "dshwe-md-h4": "_4fxDUa_dshwe-md-h4",
60
+ "dshwe-prevbtn-on": "_4fxDUa_dshwe-prevbtn-on",
61
+ "dshwe-md-table": "_4fxDUa_dshwe-md-table",
62
+ "dshwe-addbtn": "_4fxDUa_dshwe-addbtn",
63
+ "dshwe-prevbtn": "_4fxDUa_dshwe-prevbtn",
64
+ "dshwe-panel": "_4fxDUa_dshwe-panel",
65
+ "dshwe-tree-col": "_4fxDUa_dshwe-tree-col",
66
+ "dshwe-preview-meta": "_4fxDUa_dshwe-preview-meta",
67
+ "dshwe-md-code": "_4fxDUa_dshwe-md-code",
68
+ "dshwe-md-quote": "_4fxDUa_dshwe-md-quote",
69
+ "dshwe-layer": "_4fxDUa_dshwe-layer",
70
+ "dshwe-resize-corner-bar": "_4fxDUa_dshwe-resize-corner-bar",
71
+ "dshwe-pager-btn": "_4fxDUa_dshwe-pager-btn",
72
+ "dshwe-edit-saveerr": "_4fxDUa_dshwe-edit-saveerr",
73
+ "dshwe-act-on": "_4fxDUa_dshwe-act-on",
74
+ "dshwe-spin": "_4fxDUa_dshwe-spin",
75
+ "dshwe-row-dir": "_4fxDUa_dshwe-row-dir",
76
+ "dshwe-selbar": "_4fxDUa_dshwe-selbar",
77
+ "dshwe-slide-in": "_4fxDUa_dshwe-slide-in",
78
+ "dshwe-name": "_4fxDUa_dshwe-name",
79
+ "dshwe-share-btn": "_4fxDUa_dshwe-share-btn",
80
+ "dshwe-md-lang": "_4fxDUa_dshwe-md-lang",
81
+ "dshwe-set": "_4fxDUa_dshwe-set",
82
+ "dshwe-star-row": "_4fxDUa_dshwe-star-row",
83
+ "dshwe-chev-on": "_4fxDUa_dshwe-chev-on",
84
+ "dshwe-row-sel": "_4fxDUa_dshwe-row-sel",
85
+ "dshwe-tab": "_4fxDUa_dshwe-tab",
86
+ "dshwe-preview-head": "_4fxDUa_dshwe-preview-head",
87
+ "dshwe-hicon-on": "_4fxDUa_dshwe-hicon-on",
88
+ "dshwe-md-h6": "_4fxDUa_dshwe-md-h6",
89
+ "dshwe-md-ul": "_4fxDUa_dshwe-md-ul",
90
+ "dshwe-row-preview-dot": "_4fxDUa_dshwe-row-preview-dot",
91
+ "dshwe-editor": "_4fxDUa_dshwe-editor",
92
+ "dshwe-act": "_4fxDUa_dshwe-act",
93
+ "dshwe-setsec": "_4fxDUa_dshwe-setsec",
94
+ "dshwe-resize-corner": "_4fxDUa_dshwe-resize-corner",
95
+ "dshwe-md-h": "_4fxDUa_dshwe-md-h",
96
+ "dshwe-setrow": "_4fxDUa_dshwe-setrow",
97
+ "dshwe-tab-on": "_4fxDUa_dshwe-tab-on",
98
+ "dshwe-md-hr": "_4fxDUa_dshwe-md-hr",
99
+ "dshwe-md-h3": "_4fxDUa_dshwe-md-h3",
100
+ "dshwe-setlabel": "_4fxDUa_dshwe-setlabel",
101
+ "dshwe-switch": "_4fxDUa_dshwe-switch",
102
+ "dshwe-row-file": "_4fxDUa_dshwe-row-file",
103
+ "dshwe-md-check": "_4fxDUa_dshwe-md-check",
104
+ "dshwe-md-h1": "_4fxDUa_dshwe-md-h1",
105
+ "dshwe-mm-svg": "_4fxDUa_dshwe-mm-svg",
106
+ "dshwe-setinfo": "_4fxDUa_dshwe-setinfo",
107
+ "dshwe-setselect": "_4fxDUa_dshwe-setselect",
108
+ "dshwe-setfoot": "_4fxDUa_dshwe-setfoot",
109
+ "dshwe-setnote": "_4fxDUa_dshwe-setnote",
110
+ "dshwe-star-info": "_4fxDUa_dshwe-star-info",
111
+ "dshwe-setcap": "_4fxDUa_dshwe-setcap",
112
+ "dshwe-star-link": "_4fxDUa_dshwe-star-link",
113
+ "dshwe-empty": "_4fxDUa_dshwe-empty",
114
+ "dshwe-md-pre": "_4fxDUa_dshwe-md-pre",
115
+ "dshwe-size": "_4fxDUa_dshwe-size",
116
+ "dshwe-popup-on": "_4fxDUa_dshwe-popup-on",
117
+ "dshwe-preview-pre": "_4fxDUa_dshwe-preview-pre",
118
+ "dshwe-md-h5": "_4fxDUa_dshwe-md-h5",
119
+ "dshwe-popup": "_4fxDUa_dshwe-popup",
120
+ "dshwe-filterrow": "_4fxDUa_dshwe-filterrow",
121
+ "dshwe-chev": "_4fxDUa_dshwe-chev",
122
+ "dshwe-row": "_4fxDUa_dshwe-row",
123
+ "dshwe-icobtn": "_4fxDUa_dshwe-icobtn",
124
+ "dshwe-preview-tab": "_4fxDUa_dshwe-preview-tab",
125
+ "dshwe-hint": "_4fxDUa_dshwe-hint",
126
+ "dshwe-hint-chip": "_4fxDUa_dshwe-hint-chip",
127
+ "dshwe-tab-ind": "_4fxDUa_dshwe-tab-ind",
128
+ "dshwe-share-btn-on": "_4fxDUa_dshwe-share-btn-on",
129
+ "dshwe-row-active": "_4fxDUa_dshwe-row-active",
130
+ "dshwe-md-task": "_4fxDUa_dshwe-md-task"
130
131
  };
131
132
  //#endregion
132
133
  //#region src/client/format.ts
@@ -151,6 +152,33 @@ window.__ModuleLoader__.load({
151
152
  const i = name.lastIndexOf(".");
152
153
  return i <= 0 ? "" : name.slice(i + 1).toLowerCase();
153
154
  };
155
+ /** 展示层噪声目录名单(与 host 名单一致,前端展示过滤用,host 不动)。 */
156
+ const NOISE_DIRS = [
157
+ ".git",
158
+ "node_modules",
159
+ "__pycache__",
160
+ ".venv",
161
+ "venv",
162
+ ".pytest_cache",
163
+ ".ruff_cache",
164
+ ".mypy_cache",
165
+ "dist",
166
+ "build",
167
+ ".next",
168
+ ".nuxt",
169
+ "coverage",
170
+ ".idea",
171
+ "target"
172
+ ];
173
+ /** 展示层噪声判断(纯前端,host 不动):名单命中的目录必藏;hideNoise 开时外加所有 `.` 开头目录。点开头文件永远保留。 */
174
+ function isNoiseDir(name, hideNoise) {
175
+ return NOISE_DIRS.includes(name) || hideNoise && name.startsWith(".");
176
+ }
177
+ /** 展示层过滤:文件树渲染前调用;host 返回全量,@ 搜索走原数据不受影响。 */
178
+ function visibleEntries(entries, hideNoise) {
179
+ if (!hideNoise) return entries.filter((e) => !(e.type === "directory" && NOISE_DIRS.includes(e.name)));
180
+ return entries.filter((e) => e.type !== "directory" || !isNoiseDir(e.name, true));
181
+ }
154
182
  //#endregion
155
183
  //#region src/client/markdown.ts
156
184
  const INLINE_RULES = [
@@ -410,6 +438,72 @@ window.__ModuleLoader__.load({
410
438
  const ext = name.slice(i + 1).toLowerCase();
411
439
  return ext === "md" || ext === "mdx" || ext === "markdown" || ext === "mkd";
412
440
  }
441
+ //#endregion
442
+ //#region src/client/mermaid.ts
443
+ /**
444
+ * Mermaid 图表懒加载(浏览器端)。
445
+ *
446
+ * 约束:client bundle 走 purity 门禁(非平台 @deepseek-ai/* 一律内联),
447
+ * mermaid 体积 ~1MB+ 不能打进 lib/client.js(当前仅 119KB)。
448
+ * 因此运行时从 CDN 懒加载,点「渲染图表」时才拉取;无网/CSP 拦截时
449
+ * 回落显示源码,不阻塞 Markdown 预览主流程。
450
+ */
451
+ const MERMAID_CDN_URLS = ["https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js", "https://unpkg.com/mermaid@10/dist/mermaid.min.js"];
452
+ /** 是否 mermaid 代码块(大小写/首尾空格不敏感)。 */
453
+ function isMermaidLang(lang) {
454
+ return lang.trim().toLowerCase() === "mermaid";
455
+ }
456
+ let cached = null;
457
+ function injectScript(src) {
458
+ return new Promise((resolve, reject) => {
459
+ const el = document.createElement("script");
460
+ el.src = src;
461
+ el.async = true;
462
+ el.crossOrigin = "anonymous";
463
+ el.onload = () => resolve();
464
+ el.onerror = () => {
465
+ el.remove();
466
+ reject(/* @__PURE__ */ new Error(`load failed: ${src}`));
467
+ };
468
+ document.head.appendChild(el);
469
+ });
470
+ }
471
+ function pickTheme() {
472
+ try {
473
+ return window.matchMedia("(prefers-color-scheme: light)").matches ? "default" : "dark";
474
+ } catch {
475
+ return "dark";
476
+ }
477
+ }
478
+ /** 懒加载 mermaid(首选 jsdelivr,失败回落 unpkg),并完成一次性 initialize。 */
479
+ function loadMermaid() {
480
+ const w = window;
481
+ if (w.mermaid?.render) return Promise.resolve(w.mermaid);
482
+ if (cached) return cached;
483
+ cached = (async () => {
484
+ let lastErr = null;
485
+ for (const url of MERMAID_CDN_URLS) try {
486
+ await injectScript(url);
487
+ const api = window.mermaid;
488
+ if (api?.render) {
489
+ try {
490
+ api.initialize({
491
+ startOnLoad: false,
492
+ securityLevel: "strict",
493
+ theme: pickTheme()
494
+ });
495
+ } catch {}
496
+ return api;
497
+ }
498
+ lastErr = /* @__PURE__ */ new Error(`no mermaid api at ${url}`);
499
+ } catch (err) {
500
+ lastErr = err;
501
+ }
502
+ cached = null;
503
+ throw lastErr instanceof Error ? lastErr : /* @__PURE__ */ new Error("mermaid load failed");
504
+ })();
505
+ return cached;
506
+ }
413
507
  /** 手动高度 localStorage key。 */
414
508
  const POPUP_MANUAL_KEY = "dshwe.popupH.v1";
415
509
  /** 手动宽度 localStorage key。 */
@@ -490,6 +584,44 @@ window.__ModuleLoader__.load({
490
584
  } catch {}
491
585
  }
492
586
  //#endregion
587
+ //#region package.json
588
+ var version = "0.9.0";
589
+ //#endregion
590
+ //#region src/client/previewState.ts
591
+ let savedTab = "files";
592
+ let savedPreview = null;
593
+ let savedMdView = "rendered";
594
+ function getSavedTab() {
595
+ return savedTab;
596
+ }
597
+ function savePreviewTab(t) {
598
+ savedTab = t;
599
+ }
600
+ function getSavedPreview() {
601
+ return savedPreview;
602
+ }
603
+ function savePreviewRef(root, rel, name, size) {
604
+ savedPreview = {
605
+ root,
606
+ rel,
607
+ name,
608
+ size
609
+ };
610
+ }
611
+ function clearSavedPreview() {
612
+ savedPreview = null;
613
+ }
614
+ function getSavedMdView() {
615
+ return savedMdView;
616
+ }
617
+ function saveMdView(v) {
618
+ savedMdView = v;
619
+ }
620
+ /** 同 root 才恢复预览(工作区切换后旧 rel 不再有效)。 */
621
+ function shouldRestorePreview(saved, root) {
622
+ return saved !== null && root !== null && saved.root === root;
623
+ }
624
+ //#endregion
493
625
  //#region src/client/index.tsx
494
626
  /**
495
627
  * dsh-workspace-explorer — Client 半区(原生包 v0.3)
@@ -569,12 +701,18 @@ window.__ModuleLoader__.load({
569
701
  "md.rendered": "渲染",
570
702
  "md.source.tip": "查看 Markdown 源码",
571
703
  "md.rendered.tip": "查看渲染效果",
704
+ "mermaid.render": "渲染图表",
705
+ "mermaid.loading": "图表加载中…",
706
+ "mermaid.source": "看源码",
707
+ "mermaid.diagram": "看图表",
708
+ "mermaid.retry": "重试",
709
+ "mermaid.fail": "图表渲染失败: ",
572
710
  "preview.empty": "还没有预览。点击任意文件行,即可在这里查看。",
573
711
  "resize.tip": "左下角拖拽调整大小,双击恢复自动",
574
712
  "settings.title": "面板设置",
575
713
  "settings.general": "通用",
576
714
  "settings.hideNoise": "隐藏噪声目录",
577
- "settings.hideNoise.desc": ".git · node_modules · dist 等",
715
+ "settings.hideNoise.desc": ". 开头目录 · node_modules · dist 等",
578
716
  "settings.showSize": "显示文件大小",
579
717
  "settings.refStyle": "文件引用格式",
580
718
  "settings.refStyle.rel": "相对路径",
@@ -582,7 +720,8 @@ window.__ModuleLoader__.load({
582
720
  "settings.restore": "恢复默认",
583
721
  "settings.note": "配置在本次会话内生效,重启插件后恢复默认。",
584
722
  "settings.nav": "工作区文件",
585
- "star.ask": " 顺手留颗 Star,维护者能高兴一整天",
723
+ "settings.version": "版本 v{ver}",
724
+ "star.ask": "⭐ 授人 Star,手留余香",
586
725
  "star.cta": "★ 给一颗 Star",
587
726
  "drawer.tip": "文件目录",
588
727
  "drawer.open": "打开文件抽屉",
@@ -647,12 +786,18 @@ window.__ModuleLoader__.load({
647
786
  "md.rendered": "Rendered",
648
787
  "md.source.tip": "View Markdown source",
649
788
  "md.rendered.tip": "View rendered output",
789
+ "mermaid.render": "Render diagram",
790
+ "mermaid.loading": "Loading diagram…",
791
+ "mermaid.source": "Source",
792
+ "mermaid.diagram": "Diagram",
793
+ "mermaid.retry": "Retry",
794
+ "mermaid.fail": "Diagram render failed: ",
650
795
  "preview.empty": "No preview yet. Click any file row to view it here.",
651
796
  "resize.tip": "Drag from the corner to resize, double-click to reset",
652
797
  "settings.title": "Panel settings",
653
798
  "settings.general": "General",
654
799
  "settings.hideNoise": "Hide noise dirs",
655
- "settings.hideNoise.desc": ".git · node_modules · dist …",
800
+ "settings.hideNoise.desc": "dot-dirs · node_modules · dist …",
656
801
  "settings.showSize": "Show file sizes",
657
802
  "settings.refStyle": "File reference format",
658
803
  "settings.refStyle.rel": "Relative path",
@@ -660,7 +805,8 @@ window.__ModuleLoader__.load({
660
805
  "settings.restore": "Reset to defaults",
661
806
  "settings.note": "Settings apply for this run; they reset when the plugin restarts.",
662
807
  "settings.nav": "Workspace Explorer",
663
- "star.ask": " Drop a Star if it helped — it makes the maintainer's day",
808
+ "settings.version": "Version v{ver}",
809
+ "star.ask": "⭐ Give Stars, keep the fragrance",
664
810
  "star.cta": "★ Give a Star",
665
811
  "drawer.tip": "Files",
666
812
  "drawer.open": "Open files drawer",
@@ -893,6 +1039,77 @@ window.__ModuleLoader__.load({
893
1039
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("s", { children: renderMdInline(n.children, key) }, key);
894
1040
  });
895
1041
  }
1042
+ function MermaidBlock(props) {
1043
+ const [state, setState] = (0, react.useState)("idle");
1044
+ const [svg, setSvg] = (0, react.useState)("");
1045
+ const [errMsg, setErrMsg] = (0, react.useState)("");
1046
+ const [showSource, setShowSource] = (0, react.useState)(false);
1047
+ const hostRef = (0, react.useRef)(null);
1048
+ const idRef = (0, react.useRef)(`dshwe-mm-${props.idKey.replace(/[^a-zA-Z0-9_-]/g, "")}-${Math.random().toString(36).slice(2)}`);
1049
+ const renderNow = () => {
1050
+ setState("loading");
1051
+ setErrMsg("");
1052
+ loadMermaid().then((api) => api.render(idRef.current, props.code)).then(({ svg }) => {
1053
+ setSvg(svg);
1054
+ setShowSource(false);
1055
+ setState("ok");
1056
+ }).catch((err) => {
1057
+ setErrMsg(String(err?.message ?? err));
1058
+ setState("error");
1059
+ });
1060
+ };
1061
+ (0, react.useEffect)(() => {
1062
+ if (state === "ok" && hostRef.current) hostRef.current.innerHTML = svg;
1063
+ }, [state, svg]);
1064
+ (0, react.useEffect)(() => {
1065
+ setState("idle");
1066
+ setSvg("");
1067
+ setErrMsg("");
1068
+ setShowSource(false);
1069
+ }, [props.code]);
1070
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1071
+ className: C("dshwe-mm"),
1072
+ children: [
1073
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1074
+ className: C("dshwe-mm-bar"),
1075
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1076
+ className: C("dshwe-md-lang"),
1077
+ children: "mermaid"
1078
+ }), state === "idle" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1079
+ type: "button",
1080
+ className: C("dshwe-prevbtn"),
1081
+ onClick: renderNow,
1082
+ children: tr("mermaid.render")
1083
+ }) : state === "loading" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1084
+ className: C("dshwe-note"),
1085
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: C("dshwe-spin") }), tr("mermaid.loading")]
1086
+ }) : state === "ok" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1087
+ type: "button",
1088
+ className: C("dshwe-prevbtn"),
1089
+ onClick: () => setShowSource((v) => !v),
1090
+ children: showSource ? tr("mermaid.diagram") : tr("mermaid.source")
1091
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1092
+ type: "button",
1093
+ className: C("dshwe-prevbtn"),
1094
+ onClick: renderNow,
1095
+ children: tr("mermaid.retry")
1096
+ })]
1097
+ }),
1098
+ state === "error" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1099
+ className: C("dshwe-note dshwe-note-err"),
1100
+ children: [tr("mermaid.fail"), errMsg]
1101
+ }) : null,
1102
+ state === "ok" && !showSource ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1103
+ ref: hostRef,
1104
+ className: C("dshwe-mm-svg")
1105
+ }) : null,
1106
+ state === "idle" || state === "loading" || state === "error" || showSource ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
1107
+ className: C("dshwe-md-pre"),
1108
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: props.code })
1109
+ }) : null
1110
+ ]
1111
+ });
1112
+ }
896
1113
  function renderMdBlocks(nodes, keyPrefix) {
897
1114
  return nodes.map((n, i) => {
898
1115
  const key = `${keyPrefix}-${i}`;
@@ -907,13 +1124,19 @@ window.__ModuleLoader__.load({
907
1124
  className: C("dshwe-md-p"),
908
1125
  children: renderMdInline(n.inline, key)
909
1126
  }, key);
910
- if (n.t === "code") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("pre", {
911
- className: C("dshwe-md-pre"),
912
- children: [n.lang !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
913
- className: C("dshwe-md-lang"),
914
- children: n.lang
915
- }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: n.text })]
916
- }, key);
1127
+ if (n.t === "code") {
1128
+ if (isMermaidLang(n.lang)) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MermaidBlock, {
1129
+ code: n.text,
1130
+ idKey: key
1131
+ }, key);
1132
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("pre", {
1133
+ className: C("dshwe-md-pre"),
1134
+ children: [n.lang !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1135
+ className: C("dshwe-md-lang"),
1136
+ children: n.lang
1137
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: n.text })]
1138
+ }, key);
1139
+ }
917
1140
  if (n.t === "quote") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("blockquote", {
918
1141
  className: C("dshwe-md-quote"),
919
1142
  children: renderMdBlocks(n.children, key)
@@ -1109,10 +1332,12 @@ window.__ModuleLoader__.load({
1109
1332
  (0, react.useEffect)(() => subscribeOpen(setOn), []);
1110
1333
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1111
1334
  type: "button",
1335
+ "data-dshwe-toggle": "",
1112
1336
  className: C("dshwe-hicon") + (on ? ` ${C("dshwe-hicon-on")}` : ""),
1113
1337
  onClick: toggleDrawer,
1114
1338
  title: tr("drawer.tip"),
1115
1339
  "aria-label": tr("drawer.open"),
1340
+ "aria-expanded": on,
1116
1341
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tr("drawer.label") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1117
1342
  viewBox: "0 0 16 16",
1118
1343
  width: 13,
@@ -1195,6 +1420,7 @@ window.__ModuleLoader__.load({
1195
1420
  value: "absolute",
1196
1421
  label: tr("settings.refStyle.abs")
1197
1422
  }];
1423
+ const version$1 = version ?? "?";
1198
1424
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1199
1425
  className: C("dshwe-set"),
1200
1426
  children: [
@@ -1250,14 +1476,16 @@ window.__ModuleLoader__.load({
1250
1476
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1251
1477
  className: C("dshwe-setnote"),
1252
1478
  children: tr("settings.note")
1479
+ }),
1480
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1481
+ className: C("dshwe-setnote"),
1482
+ children: tr("settings.version", { ver: version$1 })
1253
1483
  })
1254
1484
  ]
1255
1485
  });
1256
1486
  }
1257
1487
  function Panel(props) {
1258
- const wsState = props.useWorkspaces((s) => s);
1259
1488
  const sessions = props.useSessions((s) => s);
1260
- const workspaces = wsState.items ?? [];
1261
1489
  const cwd = (sessions.current && sessions.byId ? sessions.byId[sessions.current] : void 0)?.cwd;
1262
1490
  const [root, setRoot] = (0, react.useState)(null);
1263
1491
  const [dirs, setDirs] = (0, react.useState)({});
@@ -1266,34 +1494,14 @@ window.__ModuleLoader__.load({
1266
1494
  const [preview, setPreview] = (0, react.useState)(null);
1267
1495
  const [selected, setSelected] = (0, react.useState)(/* @__PURE__ */ new Set());
1268
1496
  const [selAnchor, setSelAnchor] = (0, react.useState)(null);
1269
- const [tab, setTab] = (0, react.useState)("files");
1270
- const [mdView, setMdView] = (0, react.useState)("rendered");
1497
+ const [tab, setTab] = (0, react.useState)(() => getSavedTab());
1498
+ const [mdView, setMdView] = (0, react.useState)(() => getSavedMdView());
1271
1499
  const [c, setC] = (0, react.useState)(getCfg());
1272
1500
  (0, react.useEffect)(() => subscribeCfg(setC), []);
1273
- const recentItem = workspaces.find((w) => w.workspaceId === wsState.recentWorkspaceId);
1274
- const firstItem = workspaces[0];
1275
- (0, react.useEffect)(() => {
1276
- if (root !== null) return;
1277
- const cand = cwd ?? recentItem?.path ?? firstItem?.path;
1278
- if (cand) setRoot(cand);
1279
- }, [
1280
- root,
1281
- cwd,
1282
- wsState.state,
1283
- recentItem,
1284
- firstItem
1285
- ]);
1286
- const knownRoots = /* @__PURE__ */ new Set();
1287
- if (cwd) knownRoots.add(cwd);
1288
- for (const w of workspaces) knownRoots.add(w.path);
1289
1501
  (0, react.useEffect)(() => {
1290
- if (root === null || knownRoots.has(root)) return;
1291
- setRoot(cwd ?? workspaces[0]?.path ?? null);
1292
- }, [
1293
- root,
1294
- cwd,
1295
- wsState.items
1296
- ]);
1502
+ const cand = cwd ?? null;
1503
+ if (cand !== root) setRoot(cand);
1504
+ }, [cwd]);
1297
1505
  const loadDir = (0, react.useCallback)(async (r, rel) => {
1298
1506
  setDirs((d) => ({
1299
1507
  ...d,
@@ -1335,10 +1543,20 @@ window.__ModuleLoader__.load({
1335
1543
  if (root === null) return;
1336
1544
  setDirs({});
1337
1545
  setExpanded({});
1338
- setPreview(null);
1339
1546
  setSelected(/* @__PURE__ */ new Set());
1340
1547
  setSelAnchor(null);
1341
1548
  loadDir(root, "");
1549
+ const saved = getSavedPreview();
1550
+ if (shouldRestorePreview(saved, root)) {
1551
+ setMdView(getSavedMdView());
1552
+ loadPreviewPage({
1553
+ name: saved.name,
1554
+ type: "file",
1555
+ path: `${root.replace(/\/+$/, "")}/${saved.rel}`,
1556
+ rel: saved.rel,
1557
+ size: saved.size
1558
+ }, 0);
1559
+ } else setPreview(null);
1342
1560
  setActiveRoot(root);
1343
1561
  return () => setActiveRoot(null);
1344
1562
  }, [root, loadDir]);
@@ -1373,7 +1591,7 @@ window.__ModuleLoader__.load({
1373
1591
  const insertMarker = (entry) => {
1374
1592
  getBridge()?.insert(refAt(entry));
1375
1593
  };
1376
- const WHOLE_MAX = 4194304;
1594
+ const WHOLE_MAX = 524288;
1377
1595
  const loadPreviewPage = (0, react.useCallback)(async (entry, page, keepMode = false) => {
1378
1596
  setPreview((prev) => ({
1379
1597
  entry,
@@ -1428,8 +1646,11 @@ window.__ModuleLoader__.load({
1428
1646
  }, [root]);
1429
1647
  const openPreview = (entry) => {
1430
1648
  setMdView("rendered");
1431
- loadPreviewPage(entry, 0);
1649
+ saveMdView("rendered");
1650
+ if (root !== null) savePreviewRef(root, entry.rel, entry.name, entry.size);
1432
1651
  setTab("preview");
1652
+ savePreviewTab("preview");
1653
+ loadPreviewPage(entry, 0);
1433
1654
  };
1434
1655
  const previewPrev = () => {
1435
1656
  if (preview && preview.page > 0 && !preview.loading) loadPreviewPage(preview.entry, preview.page - 1);
@@ -1561,8 +1782,7 @@ window.__ModuleLoader__.load({
1561
1782
  try {
1562
1783
  const p = await workspacesSvc.pickDirectory();
1563
1784
  if (!p) return;
1564
- const v = await workspacesSvc.create({ path: p });
1565
- if (v?.path) setRoot(v.path);
1785
+ await workspacesSvc.create({ path: p });
1566
1786
  } catch (err) {
1567
1787
  console.warn("addWorkspace failed", String(err?.message ?? err));
1568
1788
  }
@@ -1588,7 +1808,7 @@ window.__ModuleLoader__.load({
1588
1808
  };
1589
1809
  }, [q, root]);
1590
1810
  const collectAllMatches = (out) => {
1591
- for (const f of searchFiles) if (f.name.toLowerCase().includes(q) || f.rel.toLowerCase().includes(q)) out.push({
1811
+ for (const f of visibleEntries(searchFiles, c.hideNoise)) if (f.name.toLowerCase().includes(q) || f.rel.toLowerCase().includes(q)) out.push({
1592
1812
  name: f.name,
1593
1813
  type: f.type,
1594
1814
  path: f.path,
@@ -1606,7 +1826,7 @@ window.__ModuleLoader__.load({
1606
1826
  const walk = (rel) => {
1607
1827
  const data = dirs[rel];
1608
1828
  if (!data) return;
1609
- for (const entry of data.entries) {
1829
+ for (const entry of visibleEntries(data.entries, c.hideNoise)) {
1610
1830
  out.push(entry);
1611
1831
  if (entry.type === "directory" && expanded[entry.rel]) walk(entry.rel);
1612
1832
  }
@@ -1728,7 +1948,7 @@ window.__ModuleLoader__.load({
1728
1948
  const data = dirs[rel];
1729
1949
  if (!data) return [];
1730
1950
  const rows = [];
1731
- for (const entry of data.entries) {
1951
+ for (const entry of visibleEntries(data.entries, c.hideNoise)) {
1732
1952
  const isExp = entry.type === "directory" && !!expanded[entry.rel];
1733
1953
  rows.push(rowFor(entry, depth, isExp));
1734
1954
  if (isExp) rows.push(...renderTree(entry.rel, depth + 1));
@@ -1785,24 +2005,13 @@ window.__ModuleLoader__.load({
1785
2005
  ]
1786
2006
  });
1787
2007
  else body = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: renderTree("", 0) });
1788
- const options = [];
1789
- if (cwd) options.push({
1790
- value: cwd,
1791
- label: `${tr("ws.current")} · ${basename(cwd)}`
1792
- });
1793
- for (const w of workspaces) options.push({
1794
- value: w.path,
1795
- label: `${w.title} · ${w.path}`
1796
- });
1797
- const seen = /* @__PURE__ */ new Set();
1798
- const uniqOptions = options.filter((o) => seen.has(o.value) ? false : (seen.add(o.value), true));
1799
2008
  const rootLabel = root ? basename(root) : "";
1800
2009
  let pv = null;
1801
2010
  if (preview) {
1802
2011
  const d = preview.data;
1803
2012
  const isEdit = preview.mode === "edit";
1804
2013
  const canInline = !preview.loading && !preview.error && !!d && !d.binary && (d.size ?? 0) <= 32768;
1805
- const canEdit = !preview.loading && !preview.error && !!d && !d.binary && (d.size ?? 0) <= 4194304;
2014
+ const canEdit = !preview.loading && !preview.error && !!d && !d.binary && (d.size ?? 0) <= WHOLE_MAX;
1806
2015
  const metaBits = [];
1807
2016
  if (preview.entry.size != null) metaBits.push(fmtSize(preview.entry.size));
1808
2017
  if (d?.lineCount != null && d.lineCount > 0) metaBits.push(tr("preview.lines", { n: d.lineCount }));
@@ -1918,7 +2127,11 @@ window.__ModuleLoader__.load({
1918
2127
  mdRendered ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1919
2128
  type: "button",
1920
2129
  className: C("dshwe-prevbtn") + (mdView === "source" ? ` ${C("dshwe-prevbtn-on")}` : ""),
1921
- onClick: () => setMdView(mdView === "rendered" ? "source" : "rendered"),
2130
+ onClick: () => {
2131
+ const v = mdView === "rendered" ? "source" : "rendered";
2132
+ setMdView(v);
2133
+ saveMdView(v);
2134
+ },
1922
2135
  title: mdView === "rendered" ? tr("md.source.tip") : tr("md.rendered.tip"),
1923
2136
  children: mdView === "rendered" ? tr("md.source") : tr("md.rendered")
1924
2137
  }) : null,
@@ -1931,7 +2144,12 @@ window.__ModuleLoader__.load({
1931
2144
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1932
2145
  type: "button",
1933
2146
  className: C("dshwe-icobtn"),
1934
- onClick: () => setPreview(null),
2147
+ onClick: () => {
2148
+ setPreview(null);
2149
+ clearSavedPreview();
2150
+ setTab("files");
2151
+ savePreviewTab("files");
2152
+ },
1935
2153
  title: tr("close.preview"),
1936
2154
  "aria-label": tr("close.preview"),
1937
2155
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
@@ -1972,26 +2190,9 @@ window.__ModuleLoader__.load({
1972
2190
  });
1973
2191
  }
1974
2192
  const filesBody = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
1975
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1976
- className: C("dshwe-selrow"),
1977
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
1978
- className: C("dshwe-sel"),
1979
- value: root ?? "",
1980
- onChange: (e) => setRoot(e.target.value),
1981
- children: uniqOptions.map((o) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
1982
- value: o.value,
1983
- children: o.label
1984
- }, o.value))
1985
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1986
- type: "button",
1987
- className: C("dshwe-addbtn"),
1988
- onClick: () => void addWorkspace(),
1989
- title: tr("add.ws"),
1990
- children: "+"
1991
- })]
1992
- }),
1993
2193
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1994
2194
  className: C("dshwe-filterrow"),
2195
+ style: { paddingTop: 12 },
1995
2196
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
1996
2197
  className: C("dshwe-filter"),
1997
2198
  type: "text",
@@ -2071,9 +2272,10 @@ window.__ModuleLoader__.load({
2071
2272
  })
2072
2273
  })
2073
2274
  }),
2074
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2275
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2075
2276
  className: C("dshwe-title"),
2076
- children: [tr("panel.title"), rootLabel ? ` · ${rootLabel}` : ""]
2277
+ title: root ?? tr("panel.title"),
2278
+ children: rootLabel !== "" ? rootLabel : tr("panel.title")
2077
2279
  }),
2078
2280
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2079
2281
  type: "button",
@@ -2160,7 +2362,10 @@ window.__ModuleLoader__.load({
2160
2362
  role: "tab",
2161
2363
  "aria-selected": tab === "files",
2162
2364
  className: C("dshwe-tab") + (tab === "files" ? ` ${C("dshwe-tab-on")}` : ""),
2163
- onClick: () => setTab("files"),
2365
+ onClick: () => {
2366
+ setTab("files");
2367
+ savePreviewTab("files");
2368
+ },
2164
2369
  children: [
2165
2370
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabFolderSvg, {}),
2166
2371
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tr("tab.files") }),
@@ -2172,7 +2377,10 @@ window.__ModuleLoader__.load({
2172
2377
  role: "tab",
2173
2378
  "aria-selected": tab === "preview",
2174
2379
  className: C("dshwe-tab") + (tab === "preview" ? ` ${C("dshwe-tab-on")}` : ""),
2175
- onClick: () => setTab("preview"),
2380
+ onClick: () => {
2381
+ setTab("preview");
2382
+ savePreviewTab("preview");
2383
+ },
2176
2384
  children: [
2177
2385
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
2178
2386
  viewBox: "0 0 16 16",
@@ -2196,7 +2404,10 @@ window.__ModuleLoader__.load({
2196
2404
  role: "tab",
2197
2405
  "aria-selected": tab === "settings",
2198
2406
  className: C("dshwe-tab") + (tab === "settings" ? ` ${C("dshwe-tab-on")}` : ""),
2199
- onClick: () => setTab("settings"),
2407
+ onClick: () => {
2408
+ setTab("settings");
2409
+ savePreviewTab("settings");
2410
+ },
2200
2411
  children: [
2201
2412
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GearSvg, {}),
2202
2413
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tr("tab.settings") }),
@@ -2292,16 +2503,24 @@ window.__ModuleLoader__.load({
2292
2503
  document.addEventListener("keydown", onKey);
2293
2504
  return () => document.removeEventListener("keydown", onKey);
2294
2505
  }, []);
2506
+ const closeAtRef = (0, react.useRef)(0);
2507
+ (0, react.useEffect)(() => {
2508
+ if (!on) closeAtRef.current = Date.now();
2509
+ }, [on]);
2295
2510
  (0, react.useEffect)(() => {
2296
2511
  if (!on || fullscreen) return;
2297
2512
  const onDown = (e) => {
2298
2513
  const t = e.target instanceof HTMLElement ? e.target : null;
2299
2514
  if (!t) return;
2300
- if (t.closest("[data-dshwe-popup], [data-composer-card], .dshwe-hicon")) return;
2515
+ if (t.closest("[data-dshwe-popup], [data-composer-card], [data-dshwe-toggle]")) return;
2301
2516
  closeDrawer();
2302
2517
  };
2303
- document.addEventListener("pointerdown", onDown, true);
2304
- return () => document.removeEventListener("pointerdown", onDown, true);
2518
+ const onDownGuarded = (e) => {
2519
+ if ((e.target instanceof HTMLElement ? e.target : null)?.closest("[data-dshwe-toggle]") && Date.now() - closeAtRef.current < 300) return;
2520
+ onDown(e);
2521
+ };
2522
+ document.addEventListener("pointerdown", onDownGuarded, true);
2523
+ return () => document.removeEventListener("pointerdown", onDownGuarded, true);
2305
2524
  }, [on, fullscreen]);
2306
2525
  const rectRef = (0, react.useRef)(rect);
2307
2526
  rectRef.current = rect;