@lyhue1991/dsh-soup 0.5.3 → 0.5.4

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.
@@ -30797,7 +30797,7 @@
30797
30797
  goalTag.textContent = GOAL_CSS;
30798
30798
  document.head.appendChild(goalTag);
30799
30799
  }
30800
- var FILEVIEW_CSS = '.dfv-root{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);user-select:text;-webkit-user-select:text;}.dfv-header{position:sticky;top:0;z-index:2;flex:none;background:var(--dsw-specific-sidebar-fill);}.dfv-tabbar{display:flex;align-items:center;gap:2px;flex:none;overflow-x:auto;padding:6px 10px 0;border-bottom:1px solid var(--dsw-alias-border-l1);scrollbar-width:none;}.dfv-tabbar::-webkit-scrollbar{display:none;}.dfv-tab{display:inline-flex;align-items:center;gap:5px;padding:5px 8px 5px 10px;border:none;border-radius:8px 8px 0 0;background:transparent;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.4;cursor:pointer;white-space:nowrap;max-width:220px;}.dfv-tab:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);}.dfv-tab.active{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);box-shadow:inset 0 -2px 0 var(--dsw-alias-state-business-primary);}.dfv-tab-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.dfv-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:4px;background:transparent;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1;cursor:pointer;padding:0;}.dfv-close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);}.dfv-body{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--dsw-alias-bg-layer-1);}.dfv-toolbar{display:flex;align-items:center;gap:8px;flex:none;padding:6px 12px;border-bottom:1px solid var(--dsw-alias-border-l1);font-size:11px;color:var(--dsw-alias-label-secondary);}.dfv-toolbar-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left;unicode-bidi:plaintext;font-family:var(--ds-font-family-code);}.dfv-btn{flex:none;display:inline-flex;align-items:center;gap:5px;height:26px;box-sizing:border-box;background:transparent;border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);font-size:12px;line-height:1;padding:0 10px;border-radius:7px;cursor:pointer;}.dfv-btn:hover{background:var(--dsw-alias-interactive-bg-hover);}.dfv-btn svg{width:14px;height:14px;display:block;flex:none;}.dfv-btn:disabled{opacity:.45;cursor:default;}.dfv-btn-primary{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary);}.dfv-status{flex:none;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-state-warning-primary);}.dfv-save-error{flex:none;max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-state-error-primary);}.dfv-saved{color:var(--dsw-alias-state-success-primary);}.dfv-cm-editor{--dsh-soup-code-cursor:#1f2328;--dsh-soup-code-plain:#1f2328;--dsh-soup-code-comment:#57606a;--dsh-soup-code-keyword:#cf3476;--dsh-soup-code-string:#116329;--dsh-soup-code-number:#953800;--dsh-soup-code-type:#0969da;--dsh-soup-code-variable:#1f2328;--dsh-soup-code-function:#8250df;--dsh-soup-code-property:#0550ae;--dsh-soup-code-punctuation:#57606a;--dsh-soup-code-invalid:#cf222e;--dsh-soup-json-property:#0550ae;--dsh-soup-json-string:#116329;--dsh-soup-json-number:#953800;--dsh-soup-json-literal:#8250df;--dsh-soup-json-punctuation:#57606a;flex:1;min-height:0;min-width:0;overflow:hidden;background:var(--dsw-alias-bg-layer-1);}body[data-ds-dark-theme] .dfv-cm-editor{--dsh-soup-code-cursor:#f9fafb;--dsh-soup-code-plain:#f9fafb;--dsh-soup-code-comment:#7d8590;--dsh-soup-code-keyword:#faa2c1;--dsh-soup-code-string:#8ce99a;--dsh-soup-code-number:#ffa94d;--dsh-soup-code-type:#4dabf7;--dsh-soup-code-variable:#f9fafb;--dsh-soup-code-function:#b197fc;--dsh-soup-code-property:#82aaff;--dsh-soup-code-punctuation:#ced4da;--dsh-soup-code-invalid:#ff6b6b;--dsh-soup-json-property:#82aaff;--dsh-soup-json-string:#9ece8f;--dsh-soup-json-number:#e0a96d;--dsh-soup-json-literal:#c792ea;--dsh-soup-json-punctuation:#ced4da;}.dfv-cm-editor .cm-editor{height:100%;color:var(--dsh-soup-code-plain);background:transparent;font:12.5px/1.55 var(--ds-font-family-code);}.dfv-cm-editor .cm-scroller{overflow:auto;font:inherit;}.dfv-cm-editor .cm-content{padding:10px 14px;min-height:calc(100% - 20px);caret-color:var(--dsh-soup-code-cursor);}.dfv-cm-editor .cm-cursor{border-left-color:var(--dsh-soup-code-cursor)!important;}.dfv-cm-editor .cm-line{padding:0;}.dfv-cm-editor .cm-gutters{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-caption);font:12.5px/1.55 var(--ds-font-family-code);}.dfv-cm-editor .cm-gutterElement{box-sizing:content-box;padding:0 8px 0 12px!important;min-width:0!important;}.dfv-cm-editor .cm-activeLine,.dfv-cm-editor .cm-activeLineGutter{background:transparent;}.dfv-cm-editor .cm-selectionBackground{background:var(--dsw-alias-state-business-primary-hover);}.dfv-cm-editor .cm-focused{outline:none;}.dfv-editor{flex:1;min-height:0;width:100%;box-sizing:border-box;margin:0;padding:10px 14px;border:none;outline:none;resize:none;overflow:auto;background:transparent;color:var(--dsh-soup-code-plain);caret-color:var(--dsh-soup-code-cursor);font:12.5px/1.55 var(--ds-font-family-code);letter-spacing:normal;text-align:left;text-indent:0;text-transform:none;direction:ltr;white-space:pre;overflow-wrap:normal;word-break:normal;tab-size:2;}.dfv-editor::selection{background:var(--dsw-alias-state-business-primary-hover);}.dfv-dirty{flex:none;width:7px;height:7px;border-radius:999px;background:var(--dsw-alias-state-warning-primary);}.dfv-error{padding:8px 14px;font-size:12px;color:var(--dsw-alias-state-error-primary);flex:none;}.dfv-muted{padding:24px 14px;font-size:13px;color:var(--dsw-alias-label-tertiary);text-align:center;}.dfv-cap{padding:5px 14px;font-size:11px;color:var(--dsw-alias-label-caption);border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;}.dfv-code{flex:1;min-height:0;width:100%;box-sizing:border-box;margin:0;padding:10px 14px;overflow:auto;background:transparent;color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code);font-size:12.5px;line-height:1.55;white-space:pre;tab-size:2;user-select:text;}.dfv-code-wrap{flex:1;min-height:0;overflow:auto;padding:8px 10px;}.dfv-code-lines{flex:1;min-height:0;display:flex;overflow:auto;}.dfv-code-gutter{position:sticky;left:0;z-index:1;flex:none;padding:10px 8px 10px 12px;box-sizing:border-box;text-align:right;color:var(--dsw-alias-label-caption);font-family:var(--ds-font-family-code);font-size:12.5px;line-height:1.55;user-select:none;background:var(--dsw-alias-bg-layer-1);border-right:1px solid var(--dsw-alias-border-l1);}.dfv-code-main{flex:1;min-width:0;}.dfv-code-main .dfv-code{overflow:visible;width:auto;}.dfv-code-main .md-code-block{margin:0;border-radius:0;background:transparent;}.dfv-code-main .md-code-block>div:first-child{display:none!important;}.dfv-code-main .md-code-block pre{padding:10px 14px!important;margin:0!important;font:12.5px/1.55 var(--ds-font-family-code)!important;background:transparent!important;border-radius:0!important;white-space:pre!important;word-break:normal!important;}.dfv-nb{flex:1;min-height:0;overflow:auto;background:var(--dsw-alias-bg-base);}.dfv-nb-cell{display:flex;border-bottom:1px solid var(--dsw-alias-border-l1);}.dfv-nb-gutter{flex:none;width:44px;padding:8px 6px;text-align:right;font-family:var(--ds-font-family-code);font-size:11px;color:var(--dsw-alias-label-caption);border-right:1px solid var(--dsw-alias-border-l1);user-select:none;background:var(--dsw-specific-sidebar-fill);}.dfv-nb-cellbody{flex:1;min-width:0;padding:4px 0;}.dfv-nb-cellbody .md-code-block,.dfv-nb-cellbody .dfv-code{margin:4px 10px;border-radius:8px;overflow:hidden;}.dfv-nb-cellbody .dfv-code-lines{border-radius:8px;overflow:hidden;}.dfv-nb-cellbody .dfv-code-gutter{padding:8px 6px 8px 10px;font-size:12px;}.dfv-nb-cell.dfv-nb-markdown .dfv-md-wrap{padding:2px 14px;}.dfv-nb-raw{color:var(--dsw-alias-label-secondary);}.dfv-nb-outputs{border-top:1px dashed var(--dsw-alias-border-l1);padding:6px 10px;display:flex;flex-direction:column;gap:8px;}.dfv-nb-out{margin:0;padding:6px 8px;font-family:var(--ds-font-family-code);font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:6px;max-height:320px;overflow:auto;}.dfv-nb-out-err{color:var(--dsw-alias-state-error-primary);}.dfv-nb-error{border:1px solid var(--dsw-alias-state-error-primary);border-radius:8px;overflow:hidden;}.dfv-nb-error-head{padding:5px 10px;font-family:var(--ds-font-family-code);font-size:12px;font-weight:600;color:#fff;background:var(--dsw-alias-state-error-primary);}.dfv-nb-trace{margin:0;padding:8px 10px;font-family:var(--ds-font-family-code);font-size:11.5px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);max-height:260px;overflow:auto;}.dfv-nb-img{max-width:100%;height:auto;border-radius:6px;}.dfv-nb-html{width:100%;height:240px;border:1px solid var(--dsw-alias-border-l1);border-radius:6px;background:#fff;}.dfv-md-wrap{flex:1;min-height:0;overflow:auto;background:var(--dsw-alias-bg-base);}.dfv-md{padding:6px 18px 16px;font-size:13px;line-height:1.65;color:var(--dsw-alias-label-primary);}.dfv-frame{flex:1;min-height:0;width:100%;border:none;background:#fff;}.dfv-image-wrap{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto;}.dfv-image{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px;box-shadow:var(--dsw-shadow-lv2);}.dfv-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--dsw-alias-label-tertiary);font-size:13px;}.dfv-json .dfv-tok-key{color:#82aaff;}.dfv-json .dfv-tok-str{color:#9ece8f;}.dfv-json .dfv-tok-num{color:#e0a96d;}.dfv-json .dfv-tok-bool,.dfv-json .dfv-tok-null{color:#c792ea;}.dfv-table-wrap{flex:1;min-height:0;overflow:auto;}.dfv-table{border-collapse:collapse;font-size:12px;font-family:var(--ds-font-family-code);}.dfv-th{position:sticky;top:0;z-index:1;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font-weight:600;text-align:left;padding:5px 10px;border-bottom:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l1);white-space:nowrap;}.dfv-td{padding:4px 10px;border-bottom:1px solid var(--dsw-alias-border-l1);border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;max-width:360px;}.dfv-overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:var(--dsw-alias-bg-mask-1,rgba(0,0,0,.24));backdrop-filter:var(--dsw-mask-blur,blur(2px));}.dfv-overlay-panel{display:flex;flex-direction:column;width:800px;height:min(800px,calc(100vh - 48px));max-width:calc(100vw - 48px);border-radius:24px;overflow:hidden;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3);user-select:text;-webkit-user-select:text;}.dfv-overlay-panel.dfv-overlay-max{width:100vw;height:100vh;max-width:none;border-radius:0;border:none;}.dfv-overlay-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;border-radius:6px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:14px;line-height:1;cursor:pointer;padding:0;}.dfv-overlay-close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);}[data-dsh-soup-preview="1"] [data-composer-seat]{display:none !important;}[data-dsh-soup-preview="1"] .wSkVaW_composerSeat{display:none !important;}[data-dsh-soup-preview="1"] .FJxK0a_root{display:none !important;}';
30800
+ var FILEVIEW_CSS = '.dfv-root{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);user-select:text;-webkit-user-select:text;}.dfv-header{position:sticky;top:0;z-index:2;flex:none;background:var(--dsw-specific-sidebar-fill);}.dfv-tabbar{display:flex;align-items:center;gap:2px;flex:none;overflow-x:auto;padding:6px 10px 0;border-bottom:1px solid var(--dsw-alias-border-l1);scrollbar-width:none;}.dfv-tabbar::-webkit-scrollbar{display:none;}.dfv-tab{display:inline-flex;align-items:center;gap:5px;padding:5px 8px 5px 10px;border:none;border-radius:8px 8px 0 0;background:transparent;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.4;cursor:pointer;white-space:nowrap;max-width:220px;}.dfv-tab:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);}.dfv-tab.active{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);box-shadow:inset 0 -2px 0 var(--dsw-alias-state-business-primary);}.dfv-tab-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.dfv-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:none;border-radius:4px;background:transparent;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1;cursor:pointer;padding:0;}.dfv-close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);}.dfv-body{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--dsw-alias-bg-layer-1);}.dfv-toolbar{display:flex;align-items:center;gap:8px;flex:none;padding:6px 12px;border-bottom:1px solid var(--dsw-alias-border-l1);font-size:11px;color:var(--dsw-alias-label-secondary);}.dfv-toolbar-path{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left;unicode-bidi:plaintext;font-family:var(--ds-font-family-code);}.dfv-btn{flex:none;display:inline-flex;align-items:center;gap:5px;height:26px;box-sizing:border-box;background:transparent;border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);font-size:12px;line-height:1;padding:0 10px;border-radius:7px;cursor:pointer;}.dfv-btn:hover{background:var(--dsw-alias-interactive-bg-hover);}.dfv-btn svg{width:14px;height:14px;display:block;flex:none;}.dfv-btn:disabled{opacity:.45;cursor:default;}.dfv-btn-primary{border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-state-business-primary);}.dfv-status{flex:none;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-state-warning-primary);}.dfv-save-error{flex:none;max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-state-error-primary);}.dfv-saved{color:var(--dsw-alias-state-success-primary);}.dfv-cm-editor{--dsh-soup-code-cursor:#1f2328;--dsh-soup-code-plain:#1f2328;--dsh-soup-code-comment:#57606a;--dsh-soup-code-keyword:#cf3476;--dsh-soup-code-string:#116329;--dsh-soup-code-number:#953800;--dsh-soup-code-type:#0969da;--dsh-soup-code-variable:#1f2328;--dsh-soup-code-function:#8250df;--dsh-soup-code-property:#0550ae;--dsh-soup-code-punctuation:#57606a;--dsh-soup-code-invalid:#cf222e;--dsh-soup-json-property:#0550ae;--dsh-soup-json-string:#116329;--dsh-soup-json-number:#953800;--dsh-soup-json-literal:#8250df;--dsh-soup-json-punctuation:#57606a;flex:1;min-height:0;min-width:0;overflow:hidden;background:var(--dsw-alias-bg-layer-1);}body[data-ds-dark-theme] .dfv-cm-editor{--dsh-soup-code-cursor:#f9fafb;--dsh-soup-code-plain:#f9fafb;--dsh-soup-code-comment:#7d8590;--dsh-soup-code-keyword:#faa2c1;--dsh-soup-code-string:#8ce99a;--dsh-soup-code-number:#ffa94d;--dsh-soup-code-type:#4dabf7;--dsh-soup-code-variable:#f9fafb;--dsh-soup-code-function:#b197fc;--dsh-soup-code-property:#82aaff;--dsh-soup-code-punctuation:#ced4da;--dsh-soup-code-invalid:#ff6b6b;--dsh-soup-json-property:#82aaff;--dsh-soup-json-string:#9ece8f;--dsh-soup-json-number:#e0a96d;--dsh-soup-json-literal:#c792ea;--dsh-soup-json-punctuation:#ced4da;}.dfv-cm-editor .cm-editor{height:100%;color:var(--dsh-soup-code-plain);background:transparent;font:12.5px/1.55 var(--ds-font-family-code);}.dfv-cm-editor .cm-scroller{overflow:auto;font:inherit;}.dfv-cm-editor .cm-content{padding:10px 14px;min-height:calc(100% - 20px);caret-color:var(--dsh-soup-code-cursor);}.dfv-cm-editor .cm-cursor{border-left-color:var(--dsh-soup-code-cursor)!important;}.dfv-cm-editor .cm-line{padding:0;}.dfv-cm-editor .cm-gutters{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-caption);font:12.5px/1.55 var(--ds-font-family-code);}.dfv-cm-editor .cm-gutterElement{box-sizing:content-box;padding:0 8px 0 12px!important;min-width:0!important;}.dfv-cm-editor .cm-activeLine,.dfv-cm-editor .cm-activeLineGutter{background:transparent;}.dfv-cm-editor .cm-selectionBackground{background:var(--dsw-alias-state-business-primary-hover);}.dfv-cm-editor .cm-focused{outline:none;}.dfv-editor{flex:1;min-height:0;width:100%;box-sizing:border-box;margin:0;padding:10px 14px;border:none;outline:none;resize:none;overflow:auto;background:transparent;color:var(--dsh-soup-code-plain);caret-color:var(--dsh-soup-code-cursor);font:12.5px/1.55 var(--ds-font-family-code);letter-spacing:normal;text-align:left;text-indent:0;text-transform:none;direction:ltr;white-space:pre;overflow-wrap:normal;word-break:normal;tab-size:2;}.dfv-editor::selection{background:var(--dsw-alias-state-business-primary-hover);}.dfv-dirty{flex:none;width:7px;height:7px;border-radius:999px;background:var(--dsw-alias-state-warning-primary);}.dfv-error{padding:8px 14px;font-size:12px;color:var(--dsw-alias-state-error-primary);flex:none;}.dfv-muted{padding:24px 14px;font-size:13px;color:var(--dsw-alias-label-tertiary);text-align:center;}.dfv-cap{padding:5px 14px;font-size:11px;color:var(--dsw-alias-label-caption);border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;}.dfv-code{flex:1;min-height:0;width:100%;box-sizing:border-box;margin:0;padding:10px 14px;overflow:auto;background:transparent;color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code);font-size:12.5px;line-height:1.55;white-space:pre;tab-size:2;user-select:text;}.dfv-code-wrap{flex:1;min-height:0;overflow:auto;padding:8px 10px;}.dfv-code-lines{flex:1;min-height:0;display:flex;overflow:auto;}.dfv-code-gutter{position:sticky;left:0;z-index:1;flex:none;padding:10px 8px 10px 12px;box-sizing:border-box;text-align:right;color:var(--dsw-alias-label-caption);font-family:var(--ds-font-family-code);font-size:12.5px;line-height:1.55;user-select:none;background:var(--dsw-alias-bg-layer-1);border-right:1px solid var(--dsw-alias-border-l1);}.dfv-code-main{flex:1;min-width:0;}.dfv-code-main .dfv-code{overflow:visible;width:auto;}.dfv-code-main .md-code-block{margin:0;border-radius:0;background:transparent;}.dfv-code-main .md-code-block>div:first-child{display:none!important;}.dfv-code-main .md-code-block pre{padding:10px 14px!important;margin:0!important;font:12.5px/1.55 var(--ds-font-family-code)!important;background:transparent!important;border-radius:0!important;white-space:pre!important;word-break:normal!important;}.dfv-nb{flex:1;min-height:0;overflow:auto;background:var(--dsw-alias-bg-base);}.dfv-nb-cell{display:flex;border-bottom:1px solid var(--dsw-alias-border-l1);}.dfv-nb-gutter{flex:none;width:44px;padding:8px 6px;text-align:right;font-family:var(--ds-font-family-code);font-size:11px;color:var(--dsw-alias-label-caption);border-right:1px solid var(--dsw-alias-border-l1);user-select:none;background:var(--dsw-specific-sidebar-fill);}.dfv-nb-cellbody{flex:1;min-width:0;padding:4px 0;}.dfv-nb-cellbody .md-code-block,.dfv-nb-cellbody .dfv-code{margin:4px 10px;border-radius:8px;overflow:hidden;}.dfv-nb-cellbody .dfv-code-lines{border-radius:8px;overflow:hidden;}.dfv-nb-cellbody .dfv-code-gutter{padding:8px 6px 8px 10px;font-size:12px;}.dfv-nb-cell.dfv-nb-markdown .dfv-md-wrap{padding:2px 14px;}.dfv-nb-raw{color:var(--dsw-alias-label-secondary);}.dfv-nb-outputs{border-top:1px dashed var(--dsw-alias-border-l1);padding:6px 10px;display:flex;flex-direction:column;gap:8px;}.dfv-nb-out{margin:0;padding:6px 8px;font-family:var(--ds-font-family-code);font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:6px;max-height:320px;overflow:auto;}.dfv-nb-out-err{color:var(--dsw-alias-state-error-primary);}.dfv-nb-error{border:1px solid var(--dsw-alias-state-error-primary);border-radius:8px;overflow:hidden;}.dfv-nb-error-head{padding:5px 10px;font-family:var(--ds-font-family-code);font-size:12px;font-weight:600;color:#fff;background:var(--dsw-alias-state-error-primary);}.dfv-nb-trace{margin:0;padding:8px 10px;font-family:var(--ds-font-family-code);font-size:11.5px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);max-height:260px;overflow:auto;}.dfv-nb-img{max-width:100%;height:auto;border-radius:6px;}.dfv-nb-html{width:100%;height:240px;border:1px solid var(--dsw-alias-border-l1);border-radius:6px;background:#fff;}.dfv-md-wrap{flex:1;min-height:0;overflow:auto;background:var(--dsw-alias-bg-base);}.dfv-md{padding:6px 18px 16px;font-size:13px;line-height:1.65;color:var(--dsw-alias-label-primary);}.dfv-frame{flex:1;min-height:0;width:100%;border:none;background:#fff;}.dfv-image-wrap{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto;}.dfv-image{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px;box-shadow:var(--dsw-shadow-lv2);}.dfv-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--dsw-alias-label-tertiary);font-size:13px;}.dfv-json .dfv-tok-key{color:#82aaff;}.dfv-json .dfv-tok-str{color:#9ece8f;}.dfv-json .dfv-tok-num{color:#e0a96d;}.dfv-json .dfv-tok-bool,.dfv-json .dfv-tok-null{color:#c792ea;}.dfv-table-wrap{flex:1;min-height:0;overflow:auto;}.dfv-table{border-collapse:collapse;font-size:12px;font-family:var(--ds-font-family-code);}.dfv-th{position:sticky;top:0;z-index:1;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font-weight:600;text-align:left;padding:5px 10px;border-bottom:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l1);white-space:nowrap;}.dfv-td{padding:4px 10px;border-bottom:1px solid var(--dsw-alias-border-l1);border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;max-width:360px;}.dfv-overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:var(--dsw-alias-bg-mask-1,rgba(0,0,0,.24));backdrop-filter:var(--dsw-mask-blur,blur(2px));}.dfv-overlay-panel{display:flex;flex-direction:column;width:800px;height:min(800px,calc(100vh - 48px));max-width:calc(100vw - 48px);border-radius:24px;overflow:hidden;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3);user-select:text;-webkit-user-select:text;}.dfv-overlay-panel.dfv-overlay-max{width:100vw;height:100vh;max-width:none;border-radius:0;border:none;}.dfv-overlay-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;border-radius:6px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:14px;line-height:1;cursor:pointer;padding:0;}.dfv-overlay-close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);}[data-dsh-soup-preview="1"] [data-composer-seat]{display:none !important;}[data-dsh-soup-preview="1"] .wSkVaW_composerSeat{display:none !important;}[data-dsh-soup-preview="1"] .FJxK0a_root{display:none !important;}[data-dsh-soup-preview="1"] [data-width-handle]{display:none !important;}[data-dsh-soup-preview="1"] .wSkVaW_widthHandle{display:none !important;}body.dsh-soup-preview-active [data-width-handle]{display:none !important;pointer-events:none !important;}body.dsh-soup-preview-active .wSkVaW_widthHandle{display:none !important;pointer-events:none !important;}';
30801
30801
  if (typeof document !== "undefined" && document.querySelector('style[data-plugin-css="@lyhue1991/dsh-soup/fileview.css"]') === null) {
30802
30802
  var fileviewTag = document.createElement("style");
30803
30803
  fileviewTag.dataset.plugin = "@lyhue1991/dsh-soup";
@@ -32699,6 +32699,62 @@
32699
32699
  }
32700
32700
  setFiles({ list: state.files.list.slice(), active: path });
32701
32701
  }
32702
+ var FILE_ADDRESS_PREFIX = "dsh-resource://file/";
32703
+ function decodeSegmentSafe(segment) {
32704
+ try {
32705
+ return decodeURIComponent(segment);
32706
+ } catch (e) {
32707
+ return null;
32708
+ }
32709
+ }
32710
+ function parseFileAddress(address) {
32711
+ if (typeof address !== "string" || address.indexOf(FILE_ADDRESS_PREFIX) !== 0) return null;
32712
+ var end = address.search(/[?#]/);
32713
+ var body = address.slice(FILE_ADDRESS_PREFIX.length, end === -1 ? void 0 : end);
32714
+ var parts = body.split("/");
32715
+ if (parts[0] === "session") {
32716
+ var sessionId = decodeSegmentSafe(parts[1] || "");
32717
+ if (!sessionId) return null;
32718
+ var segments = [];
32719
+ for (var i = 2; i < parts.length; i++) {
32720
+ var seg = decodeSegmentSafe(parts[i]);
32721
+ if (seg === null) return null;
32722
+ segments.push(seg);
32723
+ }
32724
+ if (!segments.length) return null;
32725
+ return { scope: "session", sessionId, path: segments.join("/") };
32726
+ }
32727
+ if (parts[0] === "absolute") {
32728
+ var absolute = [];
32729
+ for (var j = 1; j < parts.length; j++) {
32730
+ var abs = decodeSegmentSafe(parts[j]);
32731
+ if (abs === null) return null;
32732
+ absolute.push(abs);
32733
+ }
32734
+ if (!absolute.length) return null;
32735
+ return { scope: "absolute", path: "/" + absolute.join("/") };
32736
+ }
32737
+ return null;
32738
+ }
32739
+ function fileAddressMatches(address, sessionIdHint) {
32740
+ var parsed = parseFileAddress(address);
32741
+ if (!parsed) return false;
32742
+ if (parsed.scope === "session" && (sessionIdHint || parsed.sessionId) !== activeSessionId) return false;
32743
+ return true;
32744
+ }
32745
+ async function openFileAddressInSoup(address, sessionIdHint) {
32746
+ var parsed = parseFileAddress(address);
32747
+ if (!parsed) return false;
32748
+ var sid = sessionIdHint || parsed.sessionId;
32749
+ if (parsed.scope === "session" && sid !== activeSessionId) return false;
32750
+ var target = parsed.path;
32751
+ if (parsed.scope === "session" && target.charAt(0) !== "/") {
32752
+ var cwd = state.cwd || await defaultCwd(parsed.sessionId);
32753
+ if (cwd) target = String(cwd).replace(/\/+$/, "") + "/" + target;
32754
+ }
32755
+ openFileInTab(target);
32756
+ return true;
32757
+ }
32702
32758
  async function reloadFile(path) {
32703
32759
  var entry = findFileEntry(path);
32704
32760
  if (!entry) return;
@@ -33668,6 +33724,7 @@
33668
33724
  React.useEffect(function() {
33669
33725
  var observer = null;
33670
33726
  var marked = null;
33727
+ document.body.classList.add("dsh-soup-preview-active");
33671
33728
  function apply2() {
33672
33729
  var el = rootRef.current;
33673
33730
  if (!el) return;
@@ -33689,6 +33746,7 @@
33689
33746
  return function() {
33690
33747
  if (observer) observer.disconnect();
33691
33748
  if (marked) marked.removeAttribute("data-dsh-soup-preview");
33749
+ document.body.classList.remove("dsh-soup-preview-active");
33692
33750
  marked = null;
33693
33751
  };
33694
33752
  }, []);
@@ -34253,6 +34311,73 @@
34253
34311
  document.removeEventListener("click", onOfficialExpand, true);
34254
34312
  });
34255
34313
  }
34314
+ var bridgePatched = false;
34315
+ function resolveSidebarRight() {
34316
+ try {
34317
+ if (ctx.sidebarRight) return ctx.sidebarRight;
34318
+ } catch (e) {
34319
+ }
34320
+ try {
34321
+ if (typeof ctx.get === "function") {
34322
+ var viaGet = ctx.get("sidebarRight", false);
34323
+ if (viaGet) return viaGet;
34324
+ }
34325
+ } catch (e) {
34326
+ }
34327
+ try {
34328
+ if (ctx.reflect && typeof ctx.reflect.get === "function") {
34329
+ var viaReflect = ctx.reflect.get("sidebarRight", false);
34330
+ if (viaReflect) return viaReflect;
34331
+ }
34332
+ } catch (e) {
34333
+ }
34334
+ return null;
34335
+ }
34336
+ function patchSidebarRightBridge() {
34337
+ if (bridgePatched) return true;
34338
+ var service = resolveSidebarRight();
34339
+ if (!service || typeof service.openResource !== "function") return false;
34340
+ if (!service.__dshSoupFileBridge) {
34341
+ var origResource = service.openResource;
34342
+ var origResourceIn = service.openResourceIn;
34343
+ service.openResource = function(address, options) {
34344
+ if (fileAddressMatches(address, null)) {
34345
+ openFileAddressInSoup(address, null);
34346
+ return;
34347
+ }
34348
+ return origResource.call(service, address, options);
34349
+ };
34350
+ if (typeof origResourceIn === "function") {
34351
+ service.openResourceIn = function(sessionId, address, options) {
34352
+ if (fileAddressMatches(address, sessionId)) {
34353
+ openFileAddressInSoup(address, sessionId);
34354
+ return;
34355
+ }
34356
+ return origResourceIn.call(service, sessionId, address, options);
34357
+ };
34358
+ }
34359
+ try {
34360
+ Object.defineProperty(service, "__dshSoupFileBridge", { value: true });
34361
+ } catch (e) {
34362
+ service.__dshSoupFileBridge = true;
34363
+ }
34364
+ }
34365
+ bridgePatched = true;
34366
+ try {
34367
+ if (typeof window !== "undefined") window.__DSH_SOUP_FILE_BRIDGE = true;
34368
+ } catch (e) {
34369
+ }
34370
+ return true;
34371
+ }
34372
+ patchSidebarRightBridge();
34373
+ var bridgeTries = 0;
34374
+ var bridgeTimer = setInterval(function() {
34375
+ bridgeTries += 1;
34376
+ if (patchSidebarRightBridge() || bridgeTries >= 10) clearInterval(bridgeTimer);
34377
+ }, 1e3);
34378
+ disposers.push(function() {
34379
+ clearInterval(bridgeTimer);
34380
+ });
34256
34381
  if (ctx.locale && typeof ctx.locale.register === "function") {
34257
34382
  ctx.effect(function() {
34258
34383
  return ctx.locale.register(NS, DICT);
package/lib/client.js CHANGED
@@ -285,7 +285,17 @@ window.__ModuleLoader__.load({
285
285
  // 优先用稳定选择器;旧 hash 规则保留以兼容更老的宿主版本。
286
286
  '[data-dsh-soup-preview="1"] [data-composer-seat]{display:none !important;}' +
287
287
  '[data-dsh-soup-preview="1"] .wSkVaW_composerSeat{display:none !important;}' +
288
- '[data-dsh-soup-preview="1"] .FJxK0a_root{display:none !important;}'
288
+ '[data-dsh-soup-preview="1"] .FJxK0a_root{display:none !important;}' +
289
+ // 宿主会话文本宽度调整手柄(DSH 0.1.5-rc 起带稳定属性 data-width-handle,
290
+ // left/right 各一个;旧版 hash 类名兜底)。它是给对话正文调宽用的,
291
+ // 预览页里没有对应内容,悬停边缘时不应出现。
292
+ '[data-dsh-soup-preview="1"] [data-width-handle]{display:none !important;}' +
293
+ '[data-dsh-soup-preview="1"] .wSkVaW_widthHandle{display:none !important;}' +
294
+ // Desktop 版的宽度手柄在部分版本中是会话根的相邻节点而非其后代,
295
+ // 上面的作用域选择器覆盖不到。FilesView 存活时会在 body 上设置该状态,
296
+ // 以稳定属性为主全局禁用手柄和它的 hover 指示线。
297
+ 'body.dsh-soup-preview-active [data-width-handle]{display:none !important;pointer-events:none !important;}' +
298
+ 'body.dsh-soup-preview-active .wSkVaW_widthHandle{display:none !important;pointer-events:none !important;}'
289
299
  if (typeof document !== 'undefined' && document.querySelector('style[data-plugin-css="@lyhue1991/dsh-soup/fileview.css"]') === null) {
290
300
  var fileviewTag = document.createElement('style')
291
301
  fileviewTag.dataset.plugin = '@lyhue1991/dsh-soup'
@@ -295,6 +305,9 @@ window.__ModuleLoader__.load({
295
305
  }
296
306
 
297
307
  /** 需要的客户端服务:slots、layout、timer、sessions、locale(i18n 词典)+ remote.goals(goal 动作动词)。 */
308
+ // 注意:sidebarRight 不能进 inject——DSH Desktop (0.1.5-rc.2) 宿主里该服务
309
+ // 永远不就绪,可选注入也会让插件一直 pending("waiting for service"),
310
+ // 被 desktop 判为阻挡启动。桥接改为运行时轮询解析(见 resolveSidebarRight)。
298
311
  var inject = ['slots', 'layout', 'timer', 'sessions', 'locale', 'remote', 'remote.goals']
299
312
 
300
313
  // ------------------------------------------------------------------
@@ -2009,6 +2022,75 @@ window.__ModuleLoader__.load({
2009
2022
  setFiles({ list: state.files.list.slice(), active: path })
2010
2023
  }
2011
2024
 
2025
+ // ------------------------------------------------------------------
2026
+ // 官方 file 地址桥接:dsh-soup 遮蔽 rightbar 槽位后,官方 SidebarRight
2027
+ // 面板组件永不挂载,会话里的文件产物卡片 / 内联文件链接调用
2028
+ // ctx.sidebarRight.openResource('dsh-resource://file/…') 会抛
2029
+ // "sidebarRight: no session surface is mounted"。这里把 file 地址解析
2030
+ // 回路径,转投 dsh-soup 自己的预览 tab(openFileInTab)。
2031
+ // ------------------------------------------------------------------
2032
+ var FILE_ADDRESS_PREFIX = 'dsh-resource://file/'
2033
+
2034
+ function decodeSegmentSafe(segment) {
2035
+ try { return decodeURIComponent(segment) } catch (e) { return null }
2036
+ }
2037
+
2038
+ /** 解析官方 file 地址;非 file 地址或编码非法返回 null(与 workspace-path 同规则)。 */
2039
+ function parseFileAddress(address) {
2040
+ if (typeof address !== 'string' || address.indexOf(FILE_ADDRESS_PREFIX) !== 0) return null
2041
+ var end = address.search(/[?#]/)
2042
+ var body = address.slice(FILE_ADDRESS_PREFIX.length, end === -1 ? undefined : end)
2043
+ var parts = body.split('/')
2044
+ if (parts[0] === 'session') {
2045
+ var sessionId = decodeSegmentSafe(parts[1] || '')
2046
+ if (!sessionId) return null
2047
+ var segments = []
2048
+ for (var i = 2; i < parts.length; i++) {
2049
+ var seg = decodeSegmentSafe(parts[i])
2050
+ if (seg === null) return null
2051
+ segments.push(seg)
2052
+ }
2053
+ if (!segments.length) return null
2054
+ return { scope: 'session', sessionId: sessionId, path: segments.join('/') }
2055
+ }
2056
+ if (parts[0] === 'absolute') {
2057
+ var absolute = []
2058
+ for (var j = 1; j < parts.length; j++) {
2059
+ var abs = decodeSegmentSafe(parts[j])
2060
+ if (abs === null) return null
2061
+ absolute.push(abs)
2062
+ }
2063
+ if (!absolute.length) return null
2064
+ return { scope: 'absolute', path: '/' + absolute.join('/') }
2065
+ }
2066
+ return null
2067
+ }
2068
+
2069
+ /** 同步判断:该 file 地址是否应由 dsh-soup 接住(当前会话或绝对路径)。 */
2070
+ function fileAddressMatches(address, sessionIdHint) {
2071
+ var parsed = parseFileAddress(address)
2072
+ if (!parsed) return false
2073
+ if (parsed.scope === 'session' && (sessionIdHint || parsed.sessionId) !== activeSessionId) return false
2074
+ return true
2075
+ }
2076
+
2077
+ /** file 地址 → dsh-soup 预览。session 作用域的路径相对会话 cwd,
2078
+ * 必须先解析成绝对路径再读——宿主 read 对相对路径按服务进程 cwd
2079
+ * (桌面端为 launch-root)解析,直接透传会 ENOENT。 */
2080
+ async function openFileAddressInSoup(address, sessionIdHint) {
2081
+ var parsed = parseFileAddress(address)
2082
+ if (!parsed) return false
2083
+ var sid = sessionIdHint || parsed.sessionId
2084
+ if (parsed.scope === 'session' && sid !== activeSessionId) return false
2085
+ var target = parsed.path
2086
+ if (parsed.scope === 'session' && target.charAt(0) !== '/') {
2087
+ var cwd = state.cwd || await defaultCwd(parsed.sessionId)
2088
+ if (cwd) target = String(cwd).replace(/\/+$/, '') + '/' + target
2089
+ }
2090
+ openFileInTab(target)
2091
+ return true
2092
+ }
2093
+
2012
2094
  async function reloadFile(path) {
2013
2095
  var entry = findFileEntry(path)
2014
2096
  if (!entry) return
@@ -2957,6 +3039,7 @@ window.__ModuleLoader__.load({
2957
3039
  React.useEffect(function () {
2958
3040
  var observer = null
2959
3041
  var marked = null
3042
+ document.body.classList.add('dsh-soup-preview-active')
2960
3043
  function apply() {
2961
3044
  var el = rootRef.current
2962
3045
  if (!el) return
@@ -2976,6 +3059,7 @@ window.__ModuleLoader__.load({
2976
3059
  return function () {
2977
3060
  if (observer) observer.disconnect()
2978
3061
  if (marked) marked.removeAttribute('data-dsh-soup-preview')
3062
+ document.body.classList.remove('dsh-soup-preview-active')
2979
3063
  marked = null
2980
3064
  }
2981
3065
  }, [])
@@ -3505,6 +3589,57 @@ window.__ModuleLoader__.load({
3505
3589
  document.addEventListener('click', onOfficialExpand, true)
3506
3590
  disposers.push(function () { document.removeEventListener('click', onOfficialExpand, true) })
3507
3591
  }
3592
+ // 官方产物链接桥接:包装 sidebarRight 服务(见 parseFileAddress 处注释)。
3593
+ // 优先走可选注入的 ctx.sidebarRight(框架保证就绪),并保留
3594
+ // ctx.get / ctx.reflect.get 多条解析路径与短轮询兜底。
3595
+ var bridgePatched = false
3596
+ function resolveSidebarRight() {
3597
+ try { if (ctx.sidebarRight) return ctx.sidebarRight } catch (e) {}
3598
+ try {
3599
+ if (typeof ctx.get === 'function') {
3600
+ var viaGet = ctx.get('sidebarRight', false)
3601
+ if (viaGet) return viaGet
3602
+ }
3603
+ } catch (e) {}
3604
+ try {
3605
+ if (ctx.reflect && typeof ctx.reflect.get === 'function') {
3606
+ var viaReflect = ctx.reflect.get('sidebarRight', false)
3607
+ if (viaReflect) return viaReflect
3608
+ }
3609
+ } catch (e) {}
3610
+ return null
3611
+ }
3612
+ function patchSidebarRightBridge() {
3613
+ if (bridgePatched) return true
3614
+ var service = resolveSidebarRight()
3615
+ if (!service || typeof service.openResource !== 'function') return false
3616
+ if (!service.__dshSoupFileBridge) {
3617
+ var origResource = service.openResource
3618
+ var origResourceIn = service.openResourceIn
3619
+ service.openResource = function (address, options) {
3620
+ if (fileAddressMatches(address, null)) { openFileAddressInSoup(address, null); return }
3621
+ return origResource.call(service, address, options)
3622
+ }
3623
+ if (typeof origResourceIn === 'function') {
3624
+ service.openResourceIn = function (sessionId, address, options) {
3625
+ if (fileAddressMatches(address, sessionId)) { openFileAddressInSoup(address, sessionId); return }
3626
+ return origResourceIn.call(service, sessionId, address, options)
3627
+ }
3628
+ }
3629
+ try { Object.defineProperty(service, '__dshSoupFileBridge', { value: true }) }
3630
+ catch (e) { service.__dshSoupFileBridge = true }
3631
+ }
3632
+ bridgePatched = true
3633
+ try { if (typeof window !== 'undefined') window.__DSH_SOUP_FILE_BRIDGE = true } catch (e) {}
3634
+ return true
3635
+ }
3636
+ patchSidebarRightBridge()
3637
+ var bridgeTries = 0
3638
+ var bridgeTimer = setInterval(function () {
3639
+ bridgeTries += 1
3640
+ if (patchSidebarRightBridge() || bridgeTries >= 10) clearInterval(bridgeTimer)
3641
+ }, 1000)
3642
+ disposers.push(function () { clearInterval(bridgeTimer) })
3508
3643
  // i18n:注册双语词典;模块级 T 供组件外回调(菜单/错误横幅)取当前语言文案。
3509
3644
  if (ctx.locale && typeof ctx.locale.register === 'function') {
3510
3645
  ctx.effect(function () { return ctx.locale.register(NS, DICT) }, 'dsh-soup: dictionaries')
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lyhue1991/dsh-soup",
3
3
  "description": "DSH 项目资源管理器:右侧 details 列文件树(并列网格、宽度对齐宿主 details 合同 300-520px),有 Session log 时在其右侧、空白新会话在输入框上方右端提供 📁 切换按钮;支持多选、双击展开/打开、右键菜单(打开/系统打开/重命名/废纸篓/新建/复制路径)、拖拽移动、上传。文件「打开」在会话区新增「文件」标签页(原生 conversation.view,与对话/轨迹同级):文本可编辑 ⌘S 保存、图片预览、二进制提示。附带模型吞吐徽标:输入框正上方显示「正在等待模型...」与彩色 t/s 徽标(数据来自 llm/stream 真实流)。附带 GoalBar 多行展示:把原生单行截断 GoalBar 放开为多行完整显示,编辑用 textarea,工具与数据仍走原生 goal。",
4
- "version": "0.5.3",
4
+ "version": "0.5.4",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "scripts": {