@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/DEV.md +160 -0
- package/README.md +16 -65
- package/dsh.plugin.json +1 -1
- package/lib/client.js +416 -197
- package/lib/index.js +10 -1
- package/lib/types/client/format.d.ts +12 -0
- package/lib/types/client/mermaid.d.ts +22 -0
- package/lib/types/client/previewState.d.ts +26 -0
- package/manifest.json +1 -1
- package/package.json +3 -3
- package/scripts/setup.ps1 +89 -0
- package/README.zh.md +0 -175
- package/docs/awesome-submission.yml +0 -23
- package/docs/experience.md +0 -252
- package/docs/install.md +0 -26
- package/docs/local-debugging.md +0 -197
- package/docs/publish.md +0 -47
- package/docs/verify-native.md +0 -51
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-
|
|
21
|
-
"dshwe-
|
|
22
|
-
"dshwe-
|
|
23
|
-
"dshwe-
|
|
24
|
-
"dshwe-
|
|
25
|
-
"dshwe-md": "
|
|
26
|
-
"dshwe-setpage": "
|
|
27
|
-
"dshwe-
|
|
28
|
-
"dshwe-
|
|
29
|
-
"dshwe-
|
|
30
|
-
"dshwe-
|
|
31
|
-
"dshwe-
|
|
32
|
-
"dshwe-
|
|
33
|
-
"dshwe-
|
|
34
|
-
"dshwe-
|
|
35
|
-
"dshwe-md-
|
|
36
|
-
"dshwe-
|
|
37
|
-
"dshwe-
|
|
38
|
-
"dshwe-
|
|
39
|
-
"dshwe-
|
|
40
|
-
"dshwe-
|
|
41
|
-
"dshwe-
|
|
42
|
-
"dshwe-
|
|
43
|
-
"dshwe-
|
|
44
|
-
"dshwe-
|
|
45
|
-
"dshwe-
|
|
46
|
-
"dshwe-
|
|
47
|
-
"dshwe-
|
|
48
|
-
"dshwe-
|
|
49
|
-
"dshwe-tree": "
|
|
50
|
-
"dshwe-
|
|
51
|
-
"dshwe-
|
|
52
|
-
"dshwe-
|
|
53
|
-
"dshwe-
|
|
54
|
-
"dshwe-
|
|
55
|
-
"dshwe-
|
|
56
|
-
"dshwe-
|
|
57
|
-
"dshwe-
|
|
58
|
-
"dshwe-
|
|
59
|
-
"dshwe-
|
|
60
|
-
"dshwe-
|
|
61
|
-
"dshwe-
|
|
62
|
-
"dshwe-
|
|
63
|
-
"dshwe-
|
|
64
|
-
"dshwe-
|
|
65
|
-
"dshwe-
|
|
66
|
-
"dshwe-
|
|
67
|
-
"dshwe-
|
|
68
|
-
"dshwe-
|
|
69
|
-
"dshwe-
|
|
70
|
-
"dshwe-
|
|
71
|
-
"dshwe-
|
|
72
|
-
"dshwe-
|
|
73
|
-
"dshwe-
|
|
74
|
-
"dshwe-
|
|
75
|
-
"dshwe-
|
|
76
|
-
"dshwe-
|
|
77
|
-
"dshwe-
|
|
78
|
-
"dshwe-
|
|
79
|
-
"dshwe-share-btn
|
|
80
|
-
"dshwe-
|
|
81
|
-
"dshwe-
|
|
82
|
-
"dshwe-
|
|
83
|
-
"dshwe-
|
|
84
|
-
"dshwe-
|
|
85
|
-
"dshwe-
|
|
86
|
-
"dshwe-preview-
|
|
87
|
-
"dshwe-
|
|
88
|
-
"dshwe-
|
|
89
|
-
"dshwe-
|
|
90
|
-
"dshwe-
|
|
91
|
-
"dshwe-
|
|
92
|
-
"dshwe-
|
|
93
|
-
"dshwe-
|
|
94
|
-
"dshwe-
|
|
95
|
-
"dshwe-md-
|
|
96
|
-
"dshwe-
|
|
97
|
-
"dshwe-
|
|
98
|
-
"dshwe-
|
|
99
|
-
"dshwe-
|
|
100
|
-
"dshwe-
|
|
101
|
-
"dshwe-
|
|
102
|
-
"dshwe-
|
|
103
|
-
"dshwe-
|
|
104
|
-
"dshwe-
|
|
105
|
-
"dshwe-
|
|
106
|
-
"dshwe-
|
|
107
|
-
"dshwe-
|
|
108
|
-
"dshwe-
|
|
109
|
-
"dshwe-
|
|
110
|
-
"dshwe-
|
|
111
|
-
"dshwe-
|
|
112
|
-
"dshwe-
|
|
113
|
-
"dshwe-
|
|
114
|
-
"dshwe-
|
|
115
|
-
"dshwe-
|
|
116
|
-
"dshwe-
|
|
117
|
-
"dshwe-preview-
|
|
118
|
-
"dshwe-
|
|
119
|
-
"dshwe-
|
|
120
|
-
"dshwe-
|
|
121
|
-
"dshwe-
|
|
122
|
-
"dshwe-
|
|
123
|
-
"dshwe-
|
|
124
|
-
"dshwe-
|
|
125
|
-
"dshwe-
|
|
126
|
-
"dshwe-
|
|
127
|
-
"dshwe-
|
|
128
|
-
"dshwe-
|
|
129
|
-
"dshwe-
|
|
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": ".
|
|
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
|
-
"
|
|
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": "
|
|
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
|
-
"
|
|
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")
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
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)(
|
|
1270
|
-
const [mdView, setMdView] = (0, react.useState)(
|
|
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
|
-
|
|
1291
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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) <=
|
|
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: () =>
|
|
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: () =>
|
|
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.
|
|
2275
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2075
2276
|
className: C("dshwe-title"),
|
|
2076
|
-
|
|
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: () =>
|
|
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: () =>
|
|
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: () =>
|
|
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],
|
|
2515
|
+
if (t.closest("[data-dshwe-popup], [data-composer-card], [data-dshwe-toggle]")) return;
|
|
2301
2516
|
closeDrawer();
|
|
2302
2517
|
};
|
|
2303
|
-
|
|
2304
|
-
|
|
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;
|