@doubleelec/dsh-workspace-explorer 0.8.0 → 0.9.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: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-row": "pEQVpG_dshwe-row",
21
- "dshwe-row-file": "pEQVpG_dshwe-row-file",
22
- "dshwe-head": "pEQVpG_dshwe-head",
23
- "dshwe-layer": "pEQVpG_dshwe-layer",
24
- "dshwe-selrow": "pEQVpG_dshwe-selrow",
25
- "dshwe-md-h2": "pEQVpG_dshwe-md-h2",
26
- "dshwe-md-h5": "pEQVpG_dshwe-md-h5",
27
- "dshwe-md-quote": "pEQVpG_dshwe-md-quote",
28
- "dshwe-md-h": "pEQVpG_dshwe-md-h",
29
- "dshwe-md-tablewrap": "pEQVpG_dshwe-md-tablewrap",
30
- "dshwe-name": "pEQVpG_dshwe-name",
31
- "dshwe-preview-actions": "pEQVpG_dshwe-preview-actions",
32
- "dshwe-editor": "pEQVpG_dshwe-editor",
33
- "dshwe-edit-saving": "pEQVpG_dshwe-edit-saving",
34
- "dshwe-hint-chip": "pEQVpG_dshwe-hint-chip",
35
- "dshwe-set": "pEQVpG_dshwe-set",
36
- "dshwe-setsec": "pEQVpG_dshwe-setsec",
37
- "dshwe-switch": "pEQVpG_dshwe-switch",
38
- "dshwe-setnote": "pEQVpG_dshwe-setnote",
39
- "dshwe-star-row": "pEQVpG_dshwe-star-row",
40
- "dshwe-star-label": "pEQVpG_dshwe-star-label",
41
- "dshwe-addbtn": "pEQVpG_dshwe-addbtn",
42
- "dshwe-star-link": "pEQVpG_dshwe-star-link",
43
- "dshwe-filterrow": "pEQVpG_dshwe-filterrow",
44
- "dshwe-preview-name": "pEQVpG_dshwe-preview-name",
45
- "dshwe-chev": "pEQVpG_dshwe-chev",
46
- "dshwe-chev-slot": "pEQVpG_dshwe-chev-slot",
47
- "dshwe-size": "pEQVpG_dshwe-size",
48
- "dshwe-md-h6": "pEQVpG_dshwe-md-h6",
49
- "dshwe-md-p": "pEQVpG_dshwe-md-p",
50
- "dshwe-tabs": "pEQVpG_dshwe-tabs",
51
- "dshwe-setinfo": "pEQVpG_dshwe-setinfo",
52
- "dshwe-slide-in": "pEQVpG_dshwe-slide-in",
53
- "dshwe-md": "pEQVpG_dshwe-md",
54
- "dshwe-filter-clear": "pEQVpG_dshwe-filter-clear",
55
- "dshwe-hintline": "pEQVpG_dshwe-hintline",
56
- "dshwe-row-preview-dot": "pEQVpG_dshwe-row-preview-dot",
57
- "dshwe-ico": "pEQVpG_dshwe-ico",
58
- "dshwe-note-err": "pEQVpG_dshwe-note-err",
59
- "dshwe-preview-meta": "pEQVpG_dshwe-preview-meta",
60
- "dshwe-row-dir": "pEQVpG_dshwe-row-dir",
61
- "dshwe-md-h4": "pEQVpG_dshwe-md-h4",
62
- "dshwe-md-link": "pEQVpG_dshwe-md-link",
63
- "dshwe-md-lang": "pEQVpG_dshwe-md-lang",
64
- "dshwe-tree": "pEQVpG_dshwe-tree",
65
- "dshwe-hint": "pEQVpG_dshwe-hint",
66
- "dshwe-tab": "pEQVpG_dshwe-tab",
67
- "dshwe-md-h1": "pEQVpG_dshwe-md-h1",
68
- "dshwe-setselect": "pEQVpG_dshwe-setselect",
69
- "dshwe-row-active": "pEQVpG_dshwe-row-active",
70
- "dshwe-hicon": "pEQVpG_dshwe-hicon",
71
- "dshwe-head-ico": "pEQVpG_dshwe-head-ico",
72
- "dshwe-icobtn": "pEQVpG_dshwe-icobtn",
73
- "dshwe-share-btn-on": "pEQVpG_dshwe-share-btn-on",
74
- "dshwe-star-section": "pEQVpG_dshwe-star-section",
75
- "dshwe-setpage": "pEQVpG_dshwe-setpage",
76
- "dshwe-star-info": "pEQVpG_dshwe-star-info",
77
- "dshwe-edit-saveerr": "pEQVpG_dshwe-edit-saveerr",
78
- "dshwe-resize-corner": "pEQVpG_dshwe-resize-corner",
79
- "dshwe-act": "pEQVpG_dshwe-act",
80
- "dshwe-file-ico-btn": "pEQVpG_dshwe-file-ico-btn",
81
- "dshwe-preview-slot": "pEQVpG_dshwe-preview-slot",
82
- "dshwe-tab-ind": "pEQVpG_dshwe-tab-ind",
83
- "dshwe-md-check": "pEQVpG_dshwe-md-check",
84
- "dshwe-tree-col": "pEQVpG_dshwe-tree-col",
85
- "dshwe-setfoot": "pEQVpG_dshwe-setfoot",
86
- "dshwe-tabbody": "pEQVpG_dshwe-tabbody",
87
- "dshwe-spin": "pEQVpG_dshwe-spin",
88
- "dshwe-preview-btn-on": "pEQVpG_dshwe-preview-btn-on",
89
- "dshwe-hicon-on": "pEQVpG_dshwe-hicon-on",
90
- "dshwe-popup": "pEQVpG_dshwe-popup",
91
- "dshwe-panel": "pEQVpG_dshwe-panel",
92
- "dshwe-md-hr": "pEQVpG_dshwe-md-hr",
93
- "dshwe-md-table": "pEQVpG_dshwe-md-table",
94
- "dshwe-popup-on": "pEQVpG_dshwe-popup-on",
95
- "dshwe-md-code": "pEQVpG_dshwe-md-code",
96
- "dshwe-preview-pre": "pEQVpG_dshwe-preview-pre",
97
- "dshwe-md-pre": "pEQVpG_dshwe-md-pre",
98
- "dshwe-sel": "pEQVpG_dshwe-sel",
99
- "dshwe-md-h3": "pEQVpG_dshwe-md-h3",
100
- "dshwe-popup-full": "pEQVpG_dshwe-popup-full",
101
- "dshwe-filter": "pEQVpG_dshwe-filter",
102
- "dshwe-pager-btn": "pEQVpG_dshwe-pager-btn",
103
- "dshwe-md-ol": "pEQVpG_dshwe-md-ol",
104
- "dshwe-preview-tab": "pEQVpG_dshwe-preview-tab",
105
- "dshwe-md-check-on": "pEQVpG_dshwe-md-check-on",
106
- "dshwe-prevbtn-on": "pEQVpG_dshwe-prevbtn-on",
107
- "dshwe-folder-svg": "pEQVpG_dshwe-folder-svg",
108
- "dshwe-prevbtn": "pEQVpG_dshwe-prevbtn",
109
- "dshwe-md-ul": "pEQVpG_dshwe-md-ul",
110
- "dshwe-note": "pEQVpG_dshwe-note",
111
- "dshwe-act-on": "pEQVpG_dshwe-act-on",
112
- "dshwe-setrow": "pEQVpG_dshwe-setrow",
113
- "dshwe-setlabel": "pEQVpG_dshwe-setlabel",
114
- "dshwe-body": "pEQVpG_dshwe-body",
115
- "dshwe-row-sel": "pEQVpG_dshwe-row-sel",
116
- "dshwe-empty": "pEQVpG_dshwe-empty",
117
- "dshwe-selbar": "pEQVpG_dshwe-selbar",
118
- "dshwe-preview-panel": "pEQVpG_dshwe-preview-panel",
119
- "dshwe-setcap": "pEQVpG_dshwe-setcap",
120
- "dshwe-empty-ico": "pEQVpG_dshwe-empty-ico",
121
- "dshwe-chev-on": "pEQVpG_dshwe-chev-on",
122
- "dshwe-md-task": "pEQVpG_dshwe-md-task",
123
- "dshwe-tab-on": "pEQVpG_dshwe-tab-on",
124
- "dshwe-preview-btn": "pEQVpG_dshwe-preview-btn",
125
- "dshwe-resize-corner-bar": "pEQVpG_dshwe-resize-corner-bar",
126
- "dshwe-selbar-count": "pEQVpG_dshwe-selbar-count",
127
- "dshwe-share-btn": "pEQVpG_dshwe-share-btn",
128
- "dshwe-preview-head": "pEQVpG_dshwe-preview-head",
129
- "dshwe-title": "pEQVpG_dshwe-title"
20
+ "dshwe-act": "_4fxDUa_dshwe-act",
21
+ "dshwe-act-on": "_4fxDUa_dshwe-act-on",
22
+ "dshwe-addbtn": "_4fxDUa_dshwe-addbtn",
23
+ "dshwe-body": "_4fxDUa_dshwe-body",
24
+ "dshwe-chev": "_4fxDUa_dshwe-chev",
25
+ "dshwe-chev-on": "_4fxDUa_dshwe-chev-on",
26
+ "dshwe-chev-slot": "_4fxDUa_dshwe-chev-slot",
27
+ "dshwe-edit-saveerr": "_4fxDUa_dshwe-edit-saveerr",
28
+ "dshwe-edit-saving": "_4fxDUa_dshwe-edit-saving",
29
+ "dshwe-editor": "_4fxDUa_dshwe-editor",
30
+ "dshwe-empty": "_4fxDUa_dshwe-empty",
31
+ "dshwe-empty-ico": "_4fxDUa_dshwe-empty-ico",
32
+ "dshwe-file-ico-btn": "_4fxDUa_dshwe-file-ico-btn",
33
+ "dshwe-filter": "_4fxDUa_dshwe-filter",
34
+ "dshwe-filter-clear": "_4fxDUa_dshwe-filter-clear",
35
+ "dshwe-filterrow": "_4fxDUa_dshwe-filterrow",
36
+ "dshwe-folder-svg": "_4fxDUa_dshwe-folder-svg",
37
+ "dshwe-head": "_4fxDUa_dshwe-head",
38
+ "dshwe-head-ico": "_4fxDUa_dshwe-head-ico",
39
+ "dshwe-hicon": "_4fxDUa_dshwe-hicon",
40
+ "dshwe-hicon-on": "_4fxDUa_dshwe-hicon-on",
41
+ "dshwe-hint": "_4fxDUa_dshwe-hint",
42
+ "dshwe-hint-chip": "_4fxDUa_dshwe-hint-chip",
43
+ "dshwe-hintline": "_4fxDUa_dshwe-hintline",
44
+ "dshwe-ico": "_4fxDUa_dshwe-ico",
45
+ "dshwe-icobtn": "_4fxDUa_dshwe-icobtn",
46
+ "dshwe-layer": "_4fxDUa_dshwe-layer",
47
+ "dshwe-md": "_4fxDUa_dshwe-md",
48
+ "dshwe-md-check": "_4fxDUa_dshwe-md-check",
49
+ "dshwe-md-check-on": "_4fxDUa_dshwe-md-check-on",
50
+ "dshwe-md-code": "_4fxDUa_dshwe-md-code",
51
+ "dshwe-md-h": "_4fxDUa_dshwe-md-h",
52
+ "dshwe-md-h1": "_4fxDUa_dshwe-md-h1",
53
+ "dshwe-md-h2": "_4fxDUa_dshwe-md-h2",
54
+ "dshwe-md-h3": "_4fxDUa_dshwe-md-h3",
55
+ "dshwe-md-h4": "_4fxDUa_dshwe-md-h4",
56
+ "dshwe-md-h5": "_4fxDUa_dshwe-md-h5",
57
+ "dshwe-md-h6": "_4fxDUa_dshwe-md-h6",
58
+ "dshwe-md-hr": "_4fxDUa_dshwe-md-hr",
59
+ "dshwe-md-lang": "_4fxDUa_dshwe-md-lang",
60
+ "dshwe-md-link": "_4fxDUa_dshwe-md-link",
61
+ "dshwe-md-ol": "_4fxDUa_dshwe-md-ol",
62
+ "dshwe-md-p": "_4fxDUa_dshwe-md-p",
63
+ "dshwe-md-pre": "_4fxDUa_dshwe-md-pre",
64
+ "dshwe-md-quote": "_4fxDUa_dshwe-md-quote",
65
+ "dshwe-md-table": "_4fxDUa_dshwe-md-table",
66
+ "dshwe-md-tablewrap": "_4fxDUa_dshwe-md-tablewrap",
67
+ "dshwe-md-task": "_4fxDUa_dshwe-md-task",
68
+ "dshwe-md-ul": "_4fxDUa_dshwe-md-ul",
69
+ "dshwe-mm": "_4fxDUa_dshwe-mm",
70
+ "dshwe-mm-bar": "_4fxDUa_dshwe-mm-bar",
71
+ "dshwe-mm-svg": "_4fxDUa_dshwe-mm-svg",
72
+ "dshwe-name": "_4fxDUa_dshwe-name",
73
+ "dshwe-note": "_4fxDUa_dshwe-note",
74
+ "dshwe-note-err": "_4fxDUa_dshwe-note-err",
75
+ "dshwe-pager-btn": "_4fxDUa_dshwe-pager-btn",
76
+ "dshwe-panel": "_4fxDUa_dshwe-panel",
77
+ "dshwe-popup": "_4fxDUa_dshwe-popup",
78
+ "dshwe-popup-full": "_4fxDUa_dshwe-popup-full",
79
+ "dshwe-popup-on": "_4fxDUa_dshwe-popup-on",
80
+ "dshwe-prevbtn": "_4fxDUa_dshwe-prevbtn",
81
+ "dshwe-prevbtn-on": "_4fxDUa_dshwe-prevbtn-on",
82
+ "dshwe-preview-actions": "_4fxDUa_dshwe-preview-actions",
83
+ "dshwe-preview-btn": "_4fxDUa_dshwe-preview-btn",
84
+ "dshwe-preview-btn-on": "_4fxDUa_dshwe-preview-btn-on",
85
+ "dshwe-preview-head": "_4fxDUa_dshwe-preview-head",
86
+ "dshwe-preview-meta": "_4fxDUa_dshwe-preview-meta",
87
+ "dshwe-preview-name": "_4fxDUa_dshwe-preview-name",
88
+ "dshwe-preview-panel": "_4fxDUa_dshwe-preview-panel",
89
+ "dshwe-preview-pre": "_4fxDUa_dshwe-preview-pre",
90
+ "dshwe-preview-slot": "_4fxDUa_dshwe-preview-slot",
91
+ "dshwe-preview-tab": "_4fxDUa_dshwe-preview-tab",
92
+ "dshwe-resize-corner": "_4fxDUa_dshwe-resize-corner",
93
+ "dshwe-resize-corner-bar": "_4fxDUa_dshwe-resize-corner-bar",
94
+ "dshwe-row": "_4fxDUa_dshwe-row",
95
+ "dshwe-row-active": "_4fxDUa_dshwe-row-active",
96
+ "dshwe-row-dir": "_4fxDUa_dshwe-row-dir",
97
+ "dshwe-row-file": "_4fxDUa_dshwe-row-file",
98
+ "dshwe-row-preview-dot": "_4fxDUa_dshwe-row-preview-dot",
99
+ "dshwe-row-sel": "_4fxDUa_dshwe-row-sel",
100
+ "dshwe-selbar": "_4fxDUa_dshwe-selbar",
101
+ "dshwe-selbar-count": "_4fxDUa_dshwe-selbar-count",
102
+ "dshwe-set": "_4fxDUa_dshwe-set",
103
+ "dshwe-setcap": "_4fxDUa_dshwe-setcap",
104
+ "dshwe-setfoot": "_4fxDUa_dshwe-setfoot",
105
+ "dshwe-setinfo": "_4fxDUa_dshwe-setinfo",
106
+ "dshwe-setlabel": "_4fxDUa_dshwe-setlabel",
107
+ "dshwe-setnote": "_4fxDUa_dshwe-setnote",
108
+ "dshwe-setpage": "_4fxDUa_dshwe-setpage",
109
+ "dshwe-setrow": "_4fxDUa_dshwe-setrow",
110
+ "dshwe-setsec": "_4fxDUa_dshwe-setsec",
111
+ "dshwe-setselect": "_4fxDUa_dshwe-setselect",
112
+ "dshwe-share-btn": "_4fxDUa_dshwe-share-btn",
113
+ "dshwe-share-btn-on": "_4fxDUa_dshwe-share-btn-on",
114
+ "dshwe-size": "_4fxDUa_dshwe-size",
115
+ "dshwe-slide-in": "_4fxDUa_dshwe-slide-in",
116
+ "dshwe-spin": "_4fxDUa_dshwe-spin",
117
+ "dshwe-star-info": "_4fxDUa_dshwe-star-info",
118
+ "dshwe-star-label": "_4fxDUa_dshwe-star-label",
119
+ "dshwe-star-link": "_4fxDUa_dshwe-star-link",
120
+ "dshwe-star-row": "_4fxDUa_dshwe-star-row",
121
+ "dshwe-star-section": "_4fxDUa_dshwe-star-section",
122
+ "dshwe-switch": "_4fxDUa_dshwe-switch",
123
+ "dshwe-tab": "_4fxDUa_dshwe-tab",
124
+ "dshwe-tab-ind": "_4fxDUa_dshwe-tab-ind",
125
+ "dshwe-tab-on": "_4fxDUa_dshwe-tab-on",
126
+ "dshwe-tabbody": "_4fxDUa_dshwe-tabbody",
127
+ "dshwe-tabs": "_4fxDUa_dshwe-tabs",
128
+ "dshwe-title": "_4fxDUa_dshwe-title",
129
+ "dshwe-tree": "_4fxDUa_dshwe-tree",
130
+ "dshwe-tree-col": "_4fxDUa_dshwe-tree-col"
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.1";
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)
@@ -551,6 +683,9 @@ window.__ModuleLoader__.load({
551
683
  "preview.lines": "{n} 行",
552
684
  "preview.prev": "上一页",
553
685
  "preview.next": "下一页",
686
+ "font.dec": "缩小字体",
687
+ "font.inc": "放大字体",
688
+ "font.reset": "重置字体大小",
554
689
  "edit": "编辑",
555
690
  "edit.save": "保存",
556
691
  "edit.discard": "放弃",
@@ -569,12 +704,18 @@ window.__ModuleLoader__.load({
569
704
  "md.rendered": "渲染",
570
705
  "md.source.tip": "查看 Markdown 源码",
571
706
  "md.rendered.tip": "查看渲染效果",
707
+ "mermaid.render": "渲染图表",
708
+ "mermaid.loading": "图表加载中…",
709
+ "mermaid.source": "看源码",
710
+ "mermaid.diagram": "看图表",
711
+ "mermaid.retry": "重试",
712
+ "mermaid.fail": "图表渲染失败: ",
572
713
  "preview.empty": "还没有预览。点击任意文件行,即可在这里查看。",
573
714
  "resize.tip": "左下角拖拽调整大小,双击恢复自动",
574
715
  "settings.title": "面板设置",
575
716
  "settings.general": "通用",
576
717
  "settings.hideNoise": "隐藏噪声目录",
577
- "settings.hideNoise.desc": ".git · node_modules · dist 等",
718
+ "settings.hideNoise.desc": ". 开头目录 · node_modules · dist 等",
578
719
  "settings.showSize": "显示文件大小",
579
720
  "settings.refStyle": "文件引用格式",
580
721
  "settings.refStyle.rel": "相对路径",
@@ -582,7 +723,8 @@ window.__ModuleLoader__.load({
582
723
  "settings.restore": "恢复默认",
583
724
  "settings.note": "配置在本次会话内生效,重启插件后恢复默认。",
584
725
  "settings.nav": "工作区文件",
585
- "star.ask": " 顺手留颗 Star,维护者能高兴一整天",
726
+ "settings.version": "版本 v{ver}",
727
+ "star.ask": "⭐ 授人 Star,手留余香",
586
728
  "star.cta": "★ 给一颗 Star",
587
729
  "drawer.tip": "文件目录",
588
730
  "drawer.open": "打开文件抽屉",
@@ -629,6 +771,9 @@ window.__ModuleLoader__.load({
629
771
  "preview.lines": "{n} lines",
630
772
  "preview.prev": "Previous page",
631
773
  "preview.next": "Next page",
774
+ "font.dec": "Decrease font size",
775
+ "font.inc": "Increase font size",
776
+ "font.reset": "Reset font size",
632
777
  "edit": "Edit",
633
778
  "edit.save": "Save",
634
779
  "edit.discard": "Discard",
@@ -647,12 +792,18 @@ window.__ModuleLoader__.load({
647
792
  "md.rendered": "Rendered",
648
793
  "md.source.tip": "View Markdown source",
649
794
  "md.rendered.tip": "View rendered output",
795
+ "mermaid.render": "Render diagram",
796
+ "mermaid.loading": "Loading diagram…",
797
+ "mermaid.source": "Source",
798
+ "mermaid.diagram": "Diagram",
799
+ "mermaid.retry": "Retry",
800
+ "mermaid.fail": "Diagram render failed: ",
650
801
  "preview.empty": "No preview yet. Click any file row to view it here.",
651
802
  "resize.tip": "Drag from the corner to resize, double-click to reset",
652
803
  "settings.title": "Panel settings",
653
804
  "settings.general": "General",
654
805
  "settings.hideNoise": "Hide noise dirs",
655
- "settings.hideNoise.desc": ".git · node_modules · dist …",
806
+ "settings.hideNoise.desc": "dot-dirs · node_modules · dist …",
656
807
  "settings.showSize": "Show file sizes",
657
808
  "settings.refStyle": "File reference format",
658
809
  "settings.refStyle.rel": "Relative path",
@@ -660,7 +811,8 @@ window.__ModuleLoader__.load({
660
811
  "settings.restore": "Reset to defaults",
661
812
  "settings.note": "Settings apply for this run; they reset when the plugin restarts.",
662
813
  "settings.nav": "Workspace Explorer",
663
- "star.ask": " Drop a Star if it helped — it makes the maintainer's day",
814
+ "settings.version": "Version v{ver}",
815
+ "star.ask": "⭐ Give Stars, keep the fragrance",
664
816
  "star.cta": "★ Give a Star",
665
817
  "drawer.tip": "Files",
666
818
  "drawer.open": "Open files drawer",
@@ -893,6 +1045,77 @@ window.__ModuleLoader__.load({
893
1045
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("s", { children: renderMdInline(n.children, key) }, key);
894
1046
  });
895
1047
  }
1048
+ function MermaidBlock(props) {
1049
+ const [state, setState] = (0, react.useState)("idle");
1050
+ const [svg, setSvg] = (0, react.useState)("");
1051
+ const [errMsg, setErrMsg] = (0, react.useState)("");
1052
+ const [showSource, setShowSource] = (0, react.useState)(false);
1053
+ const hostRef = (0, react.useRef)(null);
1054
+ const idRef = (0, react.useRef)(`dshwe-mm-${props.idKey.replace(/[^a-zA-Z0-9_-]/g, "")}-${Math.random().toString(36).slice(2)}`);
1055
+ const renderNow = () => {
1056
+ setState("loading");
1057
+ setErrMsg("");
1058
+ loadMermaid().then((api) => api.render(idRef.current, props.code)).then(({ svg }) => {
1059
+ setSvg(svg);
1060
+ setShowSource(false);
1061
+ setState("ok");
1062
+ }).catch((err) => {
1063
+ setErrMsg(String(err?.message ?? err));
1064
+ setState("error");
1065
+ });
1066
+ };
1067
+ (0, react.useEffect)(() => {
1068
+ if (state === "ok" && hostRef.current) hostRef.current.innerHTML = svg;
1069
+ }, [state, svg]);
1070
+ (0, react.useEffect)(() => {
1071
+ setState("idle");
1072
+ setSvg("");
1073
+ setErrMsg("");
1074
+ setShowSource(false);
1075
+ }, [props.code]);
1076
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1077
+ className: C("dshwe-mm"),
1078
+ children: [
1079
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1080
+ className: C("dshwe-mm-bar"),
1081
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1082
+ className: C("dshwe-md-lang"),
1083
+ children: "mermaid"
1084
+ }), state === "idle" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1085
+ type: "button",
1086
+ className: C("dshwe-prevbtn"),
1087
+ onClick: renderNow,
1088
+ children: tr("mermaid.render")
1089
+ }) : state === "loading" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1090
+ className: C("dshwe-note"),
1091
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: C("dshwe-spin") }), tr("mermaid.loading")]
1092
+ }) : state === "ok" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1093
+ type: "button",
1094
+ className: C("dshwe-prevbtn"),
1095
+ onClick: () => setShowSource((v) => !v),
1096
+ children: showSource ? tr("mermaid.diagram") : tr("mermaid.source")
1097
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1098
+ type: "button",
1099
+ className: C("dshwe-prevbtn"),
1100
+ onClick: renderNow,
1101
+ children: tr("mermaid.retry")
1102
+ })]
1103
+ }),
1104
+ state === "error" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1105
+ className: C("dshwe-note dshwe-note-err"),
1106
+ children: [tr("mermaid.fail"), errMsg]
1107
+ }) : null,
1108
+ state === "ok" && !showSource ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1109
+ ref: hostRef,
1110
+ className: C("dshwe-mm-svg")
1111
+ }) : null,
1112
+ state === "idle" || state === "loading" || state === "error" || showSource ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
1113
+ className: C("dshwe-md-pre"),
1114
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: props.code })
1115
+ }) : null
1116
+ ]
1117
+ });
1118
+ }
896
1119
  function renderMdBlocks(nodes, keyPrefix) {
897
1120
  return nodes.map((n, i) => {
898
1121
  const key = `${keyPrefix}-${i}`;
@@ -907,13 +1130,19 @@ window.__ModuleLoader__.load({
907
1130
  className: C("dshwe-md-p"),
908
1131
  children: renderMdInline(n.inline, key)
909
1132
  }, 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);
1133
+ if (n.t === "code") {
1134
+ if (isMermaidLang(n.lang)) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MermaidBlock, {
1135
+ code: n.text,
1136
+ idKey: key
1137
+ }, key);
1138
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("pre", {
1139
+ className: C("dshwe-md-pre"),
1140
+ children: [n.lang !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1141
+ className: C("dshwe-md-lang"),
1142
+ children: n.lang
1143
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: n.text })]
1144
+ }, key);
1145
+ }
917
1146
  if (n.t === "quote") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("blockquote", {
918
1147
  className: C("dshwe-md-quote"),
919
1148
  children: renderMdBlocks(n.children, key)
@@ -1109,10 +1338,12 @@ window.__ModuleLoader__.load({
1109
1338
  (0, react.useEffect)(() => subscribeOpen(setOn), []);
1110
1339
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1111
1340
  type: "button",
1341
+ "data-dshwe-toggle": "",
1112
1342
  className: C("dshwe-hicon") + (on ? ` ${C("dshwe-hicon-on")}` : ""),
1113
1343
  onClick: toggleDrawer,
1114
1344
  title: tr("drawer.tip"),
1115
1345
  "aria-label": tr("drawer.open"),
1346
+ "aria-expanded": on,
1116
1347
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tr("drawer.label") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1117
1348
  viewBox: "0 0 16 16",
1118
1349
  width: 13,
@@ -1195,6 +1426,7 @@ window.__ModuleLoader__.load({
1195
1426
  value: "absolute",
1196
1427
  label: tr("settings.refStyle.abs")
1197
1428
  }];
1429
+ const version$1 = version ?? "?";
1198
1430
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1199
1431
  className: C("dshwe-set"),
1200
1432
  children: [
@@ -1250,14 +1482,16 @@ window.__ModuleLoader__.load({
1250
1482
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1251
1483
  className: C("dshwe-setnote"),
1252
1484
  children: tr("settings.note")
1485
+ }),
1486
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1487
+ className: C("dshwe-setnote"),
1488
+ children: tr("settings.version", { ver: version$1 })
1253
1489
  })
1254
1490
  ]
1255
1491
  });
1256
1492
  }
1257
1493
  function Panel(props) {
1258
- const wsState = props.useWorkspaces((s) => s);
1259
1494
  const sessions = props.useSessions((s) => s);
1260
- const workspaces = wsState.items ?? [];
1261
1495
  const cwd = (sessions.current && sessions.byId ? sessions.byId[sessions.current] : void 0)?.cwd;
1262
1496
  const [root, setRoot] = (0, react.useState)(null);
1263
1497
  const [dirs, setDirs] = (0, react.useState)({});
@@ -1266,34 +1500,24 @@ window.__ModuleLoader__.load({
1266
1500
  const [preview, setPreview] = (0, react.useState)(null);
1267
1501
  const [selected, setSelected] = (0, react.useState)(/* @__PURE__ */ new Set());
1268
1502
  const [selAnchor, setSelAnchor] = (0, react.useState)(null);
1269
- const [tab, setTab] = (0, react.useState)("files");
1270
- const [mdView, setMdView] = (0, react.useState)("rendered");
1503
+ const [tab, setTab] = (0, react.useState)(() => getSavedTab());
1504
+ const [mdView, setMdView] = (0, react.useState)(() => getSavedMdView());
1505
+ const [fontStep, setFontStep] = (0, react.useState)(0);
1506
+ const fontScale = [
1507
+ .85,
1508
+ 1,
1509
+ 1.18,
1510
+ 1.36,
1511
+ 1.56
1512
+ ][Math.min(Math.max(fontStep + 1, 0), 4)] ?? 1;
1513
+ const fontDec = () => setFontStep((s) => Math.max(-1, s - 1));
1514
+ const fontInc = () => setFontStep((s) => Math.min(3, s + 1));
1271
1515
  const [c, setC] = (0, react.useState)(getCfg());
1272
1516
  (0, react.useEffect)(() => subscribeCfg(setC), []);
1273
- const recentItem = workspaces.find((w) => w.workspaceId === wsState.recentWorkspaceId);
1274
- const firstItem = workspaces[0];
1275
1517
  (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
- (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
- ]);
1518
+ const cand = cwd ?? null;
1519
+ if (cand !== root) setRoot(cand);
1520
+ }, [cwd]);
1297
1521
  const loadDir = (0, react.useCallback)(async (r, rel) => {
1298
1522
  setDirs((d) => ({
1299
1523
  ...d,
@@ -1335,10 +1559,20 @@ window.__ModuleLoader__.load({
1335
1559
  if (root === null) return;
1336
1560
  setDirs({});
1337
1561
  setExpanded({});
1338
- setPreview(null);
1339
1562
  setSelected(/* @__PURE__ */ new Set());
1340
1563
  setSelAnchor(null);
1341
1564
  loadDir(root, "");
1565
+ const saved = getSavedPreview();
1566
+ if (shouldRestorePreview(saved, root)) {
1567
+ setMdView(getSavedMdView());
1568
+ loadPreviewPage({
1569
+ name: saved.name,
1570
+ type: "file",
1571
+ path: `${root.replace(/\/+$/, "")}/${saved.rel}`,
1572
+ rel: saved.rel,
1573
+ size: saved.size
1574
+ }, 0);
1575
+ } else setPreview(null);
1342
1576
  setActiveRoot(root);
1343
1577
  return () => setActiveRoot(null);
1344
1578
  }, [root, loadDir]);
@@ -1373,7 +1607,7 @@ window.__ModuleLoader__.load({
1373
1607
  const insertMarker = (entry) => {
1374
1608
  getBridge()?.insert(refAt(entry));
1375
1609
  };
1376
- const WHOLE_MAX = 4194304;
1610
+ const WHOLE_MAX = 524288;
1377
1611
  const loadPreviewPage = (0, react.useCallback)(async (entry, page, keepMode = false) => {
1378
1612
  setPreview((prev) => ({
1379
1613
  entry,
@@ -1428,8 +1662,11 @@ window.__ModuleLoader__.load({
1428
1662
  }, [root]);
1429
1663
  const openPreview = (entry) => {
1430
1664
  setMdView("rendered");
1431
- loadPreviewPage(entry, 0);
1665
+ saveMdView("rendered");
1666
+ if (root !== null) savePreviewRef(root, entry.rel, entry.name, entry.size);
1432
1667
  setTab("preview");
1668
+ savePreviewTab("preview");
1669
+ loadPreviewPage(entry, 0);
1433
1670
  };
1434
1671
  const previewPrev = () => {
1435
1672
  if (preview && preview.page > 0 && !preview.loading) loadPreviewPage(preview.entry, preview.page - 1);
@@ -1561,8 +1798,7 @@ window.__ModuleLoader__.load({
1561
1798
  try {
1562
1799
  const p = await workspacesSvc.pickDirectory();
1563
1800
  if (!p) return;
1564
- const v = await workspacesSvc.create({ path: p });
1565
- if (v?.path) setRoot(v.path);
1801
+ await workspacesSvc.create({ path: p });
1566
1802
  } catch (err) {
1567
1803
  console.warn("addWorkspace failed", String(err?.message ?? err));
1568
1804
  }
@@ -1588,7 +1824,7 @@ window.__ModuleLoader__.load({
1588
1824
  };
1589
1825
  }, [q, root]);
1590
1826
  const collectAllMatches = (out) => {
1591
- for (const f of searchFiles) if (f.name.toLowerCase().includes(q) || f.rel.toLowerCase().includes(q)) out.push({
1827
+ for (const f of visibleEntries(searchFiles, c.hideNoise)) if (f.name.toLowerCase().includes(q) || f.rel.toLowerCase().includes(q)) out.push({
1592
1828
  name: f.name,
1593
1829
  type: f.type,
1594
1830
  path: f.path,
@@ -1606,7 +1842,7 @@ window.__ModuleLoader__.load({
1606
1842
  const walk = (rel) => {
1607
1843
  const data = dirs[rel];
1608
1844
  if (!data) return;
1609
- for (const entry of data.entries) {
1845
+ for (const entry of visibleEntries(data.entries, c.hideNoise)) {
1610
1846
  out.push(entry);
1611
1847
  if (entry.type === "directory" && expanded[entry.rel]) walk(entry.rel);
1612
1848
  }
@@ -1728,7 +1964,7 @@ window.__ModuleLoader__.load({
1728
1964
  const data = dirs[rel];
1729
1965
  if (!data) return [];
1730
1966
  const rows = [];
1731
- for (const entry of data.entries) {
1967
+ for (const entry of visibleEntries(data.entries, c.hideNoise)) {
1732
1968
  const isExp = entry.type === "directory" && !!expanded[entry.rel];
1733
1969
  rows.push(rowFor(entry, depth, isExp));
1734
1970
  if (isExp) rows.push(...renderTree(entry.rel, depth + 1));
@@ -1785,24 +2021,13 @@ window.__ModuleLoader__.load({
1785
2021
  ]
1786
2022
  });
1787
2023
  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
2024
  const rootLabel = root ? basename(root) : "";
1800
2025
  let pv = null;
1801
2026
  if (preview) {
1802
2027
  const d = preview.data;
1803
2028
  const isEdit = preview.mode === "edit";
1804
2029
  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;
2030
+ const canEdit = !preview.loading && !preview.error && !!d && !d.binary && (d.size ?? 0) <= WHOLE_MAX;
1806
2031
  const metaBits = [];
1807
2032
  if (preview.entry.size != null) metaBits.push(fmtSize(preview.entry.size));
1808
2033
  if (d?.lineCount != null && d.lineCount > 0) metaBits.push(tr("preview.lines", { n: d.lineCount }));
@@ -1830,10 +2055,12 @@ window.__ModuleLoader__.load({
1830
2055
  });
1831
2056
  else if (mdRendered && mdView === "rendered") contentArea = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1832
2057
  className: C("dshwe-md"),
2058
+ style: { fontSize: `${fontScale}em` },
1833
2059
  children: renderMdBlocks(parseMarkdown(d?.content ?? ""), preview.entry.rel)
1834
2060
  });
1835
2061
  else contentArea = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
1836
2062
  className: C("dshwe-preview-pre"),
2063
+ style: { fontSize: `${fontScale}em` },
1837
2064
  children: d?.content ?? ""
1838
2065
  });
1839
2066
  pv = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -1897,7 +2124,7 @@ window.__ModuleLoader__.load({
1897
2124
  })
1898
2125
  })
1899
2126
  ] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
1900
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2127
+ (preview.page > 0 || d?.hasMore === true) && !preview.loading ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1901
2128
  type: "button",
1902
2129
  className: C("dshwe-pager-btn"),
1903
2130
  disabled: preview.page === 0 || preview.loading,
@@ -1905,8 +2132,7 @@ window.__ModuleLoader__.load({
1905
2132
  title: tr("preview.prev"),
1906
2133
  "aria-label": tr("preview.prev"),
1907
2134
  children: "‹"
1908
- }),
1909
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2135
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1910
2136
  type: "button",
1911
2137
  className: C("dshwe-pager-btn"),
1912
2138
  disabled: d?.hasMore !== true || preview.loading,
@@ -1914,11 +2140,33 @@ window.__ModuleLoader__.load({
1914
2140
  title: tr("preview.next"),
1915
2141
  "aria-label": tr("preview.next"),
1916
2142
  children: "›"
2143
+ })] }) : null,
2144
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2145
+ type: "button",
2146
+ className: C("dshwe-pager-btn"),
2147
+ disabled: fontStep <= -1 || preview.loading,
2148
+ onClick: fontDec,
2149
+ title: tr("font.dec"),
2150
+ "aria-label": tr("font.dec"),
2151
+ children: "A-"
2152
+ }),
2153
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2154
+ type: "button",
2155
+ className: C("dshwe-pager-btn"),
2156
+ disabled: fontStep >= 3 || preview.loading,
2157
+ onClick: fontInc,
2158
+ title: tr("font.inc"),
2159
+ "aria-label": tr("font.inc"),
2160
+ children: "A+"
1917
2161
  }),
1918
2162
  mdRendered ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1919
2163
  type: "button",
1920
2164
  className: C("dshwe-prevbtn") + (mdView === "source" ? ` ${C("dshwe-prevbtn-on")}` : ""),
1921
- onClick: () => setMdView(mdView === "rendered" ? "source" : "rendered"),
2165
+ onClick: () => {
2166
+ const v = mdView === "rendered" ? "source" : "rendered";
2167
+ setMdView(v);
2168
+ saveMdView(v);
2169
+ },
1922
2170
  title: mdView === "rendered" ? tr("md.source.tip") : tr("md.rendered.tip"),
1923
2171
  children: mdView === "rendered" ? tr("md.source") : tr("md.rendered")
1924
2172
  }) : null,
@@ -1931,7 +2179,12 @@ window.__ModuleLoader__.load({
1931
2179
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1932
2180
  type: "button",
1933
2181
  className: C("dshwe-icobtn"),
1934
- onClick: () => setPreview(null),
2182
+ onClick: () => {
2183
+ setPreview(null);
2184
+ clearSavedPreview();
2185
+ setTab("files");
2186
+ savePreviewTab("files");
2187
+ },
1935
2188
  title: tr("close.preview"),
1936
2189
  "aria-label": tr("close.preview"),
1937
2190
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
@@ -1972,26 +2225,9 @@ window.__ModuleLoader__.load({
1972
2225
  });
1973
2226
  }
1974
2227
  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
2228
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1994
2229
  className: C("dshwe-filterrow"),
2230
+ style: { paddingTop: 12 },
1995
2231
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
1996
2232
  className: C("dshwe-filter"),
1997
2233
  type: "text",
@@ -2071,9 +2307,10 @@ window.__ModuleLoader__.load({
2071
2307
  })
2072
2308
  })
2073
2309
  }),
2074
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2310
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2075
2311
  className: C("dshwe-title"),
2076
- children: [tr("panel.title"), rootLabel ? ` · ${rootLabel}` : ""]
2312
+ title: root ?? tr("panel.title"),
2313
+ children: rootLabel !== "" ? rootLabel : tr("panel.title")
2077
2314
  }),
2078
2315
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2079
2316
  type: "button",
@@ -2160,7 +2397,10 @@ window.__ModuleLoader__.load({
2160
2397
  role: "tab",
2161
2398
  "aria-selected": tab === "files",
2162
2399
  className: C("dshwe-tab") + (tab === "files" ? ` ${C("dshwe-tab-on")}` : ""),
2163
- onClick: () => setTab("files"),
2400
+ onClick: () => {
2401
+ setTab("files");
2402
+ savePreviewTab("files");
2403
+ },
2164
2404
  children: [
2165
2405
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabFolderSvg, {}),
2166
2406
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tr("tab.files") }),
@@ -2172,7 +2412,10 @@ window.__ModuleLoader__.load({
2172
2412
  role: "tab",
2173
2413
  "aria-selected": tab === "preview",
2174
2414
  className: C("dshwe-tab") + (tab === "preview" ? ` ${C("dshwe-tab-on")}` : ""),
2175
- onClick: () => setTab("preview"),
2415
+ onClick: () => {
2416
+ setTab("preview");
2417
+ savePreviewTab("preview");
2418
+ },
2176
2419
  children: [
2177
2420
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
2178
2421
  viewBox: "0 0 16 16",
@@ -2196,7 +2439,10 @@ window.__ModuleLoader__.load({
2196
2439
  role: "tab",
2197
2440
  "aria-selected": tab === "settings",
2198
2441
  className: C("dshwe-tab") + (tab === "settings" ? ` ${C("dshwe-tab-on")}` : ""),
2199
- onClick: () => setTab("settings"),
2442
+ onClick: () => {
2443
+ setTab("settings");
2444
+ savePreviewTab("settings");
2445
+ },
2200
2446
  children: [
2201
2447
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GearSvg, {}),
2202
2448
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: tr("tab.settings") }),
@@ -2292,16 +2538,24 @@ window.__ModuleLoader__.load({
2292
2538
  document.addEventListener("keydown", onKey);
2293
2539
  return () => document.removeEventListener("keydown", onKey);
2294
2540
  }, []);
2541
+ const closeAtRef = (0, react.useRef)(0);
2542
+ (0, react.useEffect)(() => {
2543
+ if (!on) closeAtRef.current = Date.now();
2544
+ }, [on]);
2295
2545
  (0, react.useEffect)(() => {
2296
2546
  if (!on || fullscreen) return;
2297
2547
  const onDown = (e) => {
2298
2548
  const t = e.target instanceof HTMLElement ? e.target : null;
2299
2549
  if (!t) return;
2300
- if (t.closest("[data-dshwe-popup], [data-composer-card], .dshwe-hicon")) return;
2550
+ if (t.closest("[data-dshwe-popup], [data-composer-card], [data-dshwe-toggle]")) return;
2301
2551
  closeDrawer();
2302
2552
  };
2303
- document.addEventListener("pointerdown", onDown, true);
2304
- return () => document.removeEventListener("pointerdown", onDown, true);
2553
+ const onDownGuarded = (e) => {
2554
+ if ((e.target instanceof HTMLElement ? e.target : null)?.closest("[data-dshwe-toggle]") && Date.now() - closeAtRef.current < 300) return;
2555
+ onDown(e);
2556
+ };
2557
+ document.addEventListener("pointerdown", onDownGuarded, true);
2558
+ return () => document.removeEventListener("pointerdown", onDownGuarded, true);
2305
2559
  }, [on, fullscreen]);
2306
2560
  const rectRef = (0, react.useRef)(rect);
2307
2561
  rectRef.current = rect;