@sparkelf/dsh-knowledge-base 0.1.20 → 0.1.22
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/README.md +32 -0
- package/lib/client.js +1228 -851
- package/lib/client.js.map +1 -1
- package/lib/index.js +497 -115
- package/lib/types/index.d.ts +24 -1
- package/lib/types/knowledgeTools.d.ts +12 -10
- package/lib/types/managementTools.d.ts +11 -7
- package/lib/types/toolDisclosure.d.ts +188 -0
- package/package.json +7 -6
- package/skills/kb-vectorize/i18n/zh.json +10 -0
package/lib/client.js
CHANGED
|
@@ -322,32 +322,32 @@ window.__ModuleLoader__.load({
|
|
|
322
322
|
document.head.appendChild(tag);
|
|
323
323
|
}
|
|
324
324
|
var KnowledgeSettingsSection_module_css_default = {
|
|
325
|
-
"body": "c269jW_body",
|
|
326
|
-
"badgeWarn": "c269jW_badgeWarn",
|
|
327
|
-
"pairs": "c269jW_pairs",
|
|
328
|
-
"statusRow": "c269jW_statusRow",
|
|
329
325
|
"error": "c269jW_error",
|
|
326
|
+
"badgeOk": "c269jW_badgeOk",
|
|
327
|
+
"stepLabel": "c269jW_stepLabel",
|
|
328
|
+
"statusLabel": "c269jW_statusLabel",
|
|
330
329
|
"steps": "c269jW_steps",
|
|
331
|
-
"
|
|
332
|
-
"
|
|
333
|
-
"select": "c269jW_select",
|
|
330
|
+
"pairs": "c269jW_pairs",
|
|
331
|
+
"logBox": "c269jW_logBox",
|
|
334
332
|
"field": "c269jW_field",
|
|
335
|
-
"groupTitle": "c269jW_groupTitle",
|
|
336
|
-
"statusLabel": "c269jW_statusLabel",
|
|
337
333
|
"wizard": "c269jW_wizard",
|
|
338
|
-
"
|
|
339
|
-
"
|
|
334
|
+
"section": "c269jW_section",
|
|
335
|
+
"statusRow": "c269jW_statusRow",
|
|
336
|
+
"title": "c269jW_title",
|
|
340
337
|
"step": "c269jW_step",
|
|
338
|
+
"modeRow": "c269jW_modeRow",
|
|
341
339
|
"modeOption": "c269jW_modeOption",
|
|
342
340
|
"input": "c269jW_input",
|
|
341
|
+
"groupTitle": "c269jW_groupTitle",
|
|
342
|
+
"detail": "c269jW_detail",
|
|
343
|
+
"log": "c269jW_log",
|
|
343
344
|
"saveRow": "c269jW_saveRow",
|
|
344
|
-
"
|
|
345
|
+
"select": "c269jW_select",
|
|
346
|
+
"body": "c269jW_body",
|
|
345
347
|
"pair": "c269jW_pair",
|
|
346
|
-
"notice": "c269jW_notice",
|
|
347
|
-
"badgeOk": "c269jW_badgeOk",
|
|
348
348
|
"fieldLabel": "c269jW_fieldLabel",
|
|
349
|
-
"
|
|
350
|
-
"
|
|
349
|
+
"badgeWarn": "c269jW_badgeWarn",
|
|
350
|
+
"notice": "c269jW_notice"
|
|
351
351
|
};
|
|
352
352
|
//#endregion
|
|
353
353
|
//#region src/client/VectorSettingsGroup.tsx
|
|
@@ -1894,46 +1894,46 @@ window.__ModuleLoader__.load({
|
|
|
1894
1894
|
document.head.appendChild(tag);
|
|
1895
1895
|
}
|
|
1896
1896
|
var KnowledgePermissions_module_css_default = {
|
|
1897
|
-
"
|
|
1898
|
-
"
|
|
1899
|
-
"principalName": "W1jiya_principalName",
|
|
1900
|
-
"sourceHint": "W1jiya_sourceHint",
|
|
1901
|
-
"tabs": "W1jiya_tabs",
|
|
1902
|
-
"dialogNotice": "W1jiya_dialogNotice",
|
|
1903
|
-
"pageTitle": "W1jiya_pageTitle",
|
|
1904
|
-
"principalMeta": "W1jiya_principalMeta",
|
|
1905
|
-
"statCard": "W1jiya_statCard",
|
|
1906
|
-
"path": "W1jiya_path",
|
|
1907
|
-
"principalId": "W1jiya_principalId",
|
|
1908
|
-
"rowActions": "W1jiya_rowActions",
|
|
1909
|
-
"statLabel": "W1jiya_statLabel",
|
|
1910
|
-
"dialogSelect": "W1jiya_dialogSelect",
|
|
1897
|
+
"holderKind": "W1jiya_holderKind",
|
|
1898
|
+
"overviewEmpty": "W1jiya_overviewEmpty",
|
|
1911
1899
|
"dialogField": "W1jiya_dialogField",
|
|
1900
|
+
"statLabel": "W1jiya_statLabel",
|
|
1912
1901
|
"overview": "W1jiya_overview",
|
|
1902
|
+
"pageSize": "W1jiya_pageSize",
|
|
1903
|
+
"actionCell": "W1jiya_actionCell",
|
|
1904
|
+
"dialogForm": "W1jiya_dialogForm",
|
|
1905
|
+
"sourceHint": "W1jiya_sourceHint",
|
|
1906
|
+
"emptyRow": "W1jiya_emptyRow",
|
|
1913
1907
|
"pageHint": "W1jiya_pageHint",
|
|
1914
|
-
"
|
|
1915
|
-
"
|
|
1908
|
+
"paths": "W1jiya_paths",
|
|
1909
|
+
"pathCell": "W1jiya_pathCell",
|
|
1910
|
+
"path": "W1jiya_path",
|
|
1911
|
+
"dialogNotice": "W1jiya_dialogNotice",
|
|
1916
1912
|
"pager": "W1jiya_pager",
|
|
1913
|
+
"actions": "W1jiya_actions",
|
|
1917
1914
|
"pagerStatus": "W1jiya_pagerStatus",
|
|
1918
|
-
"
|
|
1919
|
-
"
|
|
1915
|
+
"linkButton": "W1jiya_linkButton",
|
|
1916
|
+
"principalName": "W1jiya_principalName",
|
|
1920
1917
|
"statValue": "W1jiya_statValue",
|
|
1918
|
+
"countCell": "W1jiya_countCell",
|
|
1919
|
+
"pageTitle": "W1jiya_pageTitle",
|
|
1920
|
+
"placeholder": "W1jiya_placeholder",
|
|
1921
|
+
"principalMeta": "W1jiya_principalMeta",
|
|
1922
|
+
"holder": "W1jiya_holder",
|
|
1923
|
+
"principalId": "W1jiya_principalId",
|
|
1924
|
+
"tabs": "W1jiya_tabs",
|
|
1925
|
+
"sourceCell": "W1jiya_sourceCell",
|
|
1921
1926
|
"holders": "W1jiya_holders",
|
|
1922
|
-
"partialMark": "W1jiya_partialMark",
|
|
1923
|
-
"dialogForm": "W1jiya_dialogForm",
|
|
1924
|
-
"pathCell": "W1jiya_pathCell",
|
|
1925
|
-
"chips": "W1jiya_chips",
|
|
1926
|
-
"overviewEmpty": "W1jiya_overviewEmpty",
|
|
1927
|
-
"holderName": "W1jiya_holderName",
|
|
1928
|
-
"emptyRow": "W1jiya_emptyRow",
|
|
1929
1927
|
"emptyNote": "W1jiya_emptyNote",
|
|
1930
|
-
"
|
|
1931
|
-
"sourceCell": "W1jiya_sourceCell",
|
|
1932
|
-
"table": "W1jiya_table",
|
|
1933
|
-
"paths": "W1jiya_paths",
|
|
1928
|
+
"holderName": "W1jiya_holderName",
|
|
1934
1929
|
"statRow": "W1jiya_statRow",
|
|
1935
|
-
"
|
|
1936
|
-
"
|
|
1930
|
+
"rowActions": "W1jiya_rowActions",
|
|
1931
|
+
"pageHead": "W1jiya_pageHead",
|
|
1932
|
+
"table": "W1jiya_table",
|
|
1933
|
+
"partialMark": "W1jiya_partialMark",
|
|
1934
|
+
"statCard": "W1jiya_statCard",
|
|
1935
|
+
"dialogSelect": "W1jiya_dialogSelect",
|
|
1936
|
+
"chips": "W1jiya_chips"
|
|
1937
1937
|
};
|
|
1938
1938
|
//#endregion
|
|
1939
1939
|
//#region src/client/KnowledgePermissionOverview.tsx
|
|
@@ -2466,7 +2466,7 @@ window.__ModuleLoader__.load({
|
|
|
2466
2466
|
}
|
|
2467
2467
|
//#endregion
|
|
2468
2468
|
//#region \0dsh-css:/root/projects/dsh-plugins-plus/packages/knowledge-base/src/client/KnowledgePanel.module.css.mjs
|
|
2469
|
-
const css$15 = ".uNOdFq_page{height:100%;min-height:0;font:var(--dsw-font-s-14);flex-direction:column;display:flex}.uNOdFq_body{flex:auto;grid-template-columns:280px minmax(0,1fr);min-height:0;display:grid}.uNOdFq_bodyCollapsed{grid-template-columns:56px minmax(0,1fr)}.uNOdFq_rail{border-right:.5px solid var(--dsw-alias-border-l3);flex-direction:column;min-height:0;display:flex;overflow:hidden}.uNOdFq_railTop{box-sizing:border-box;flex:none;align-items:center;gap:4px;height:36px;padding:0 6px 0 12px;display:flex}.uNOdFq_railBrand{align-items:center;gap:8px;min-width:0;display:flex}.uNOdFq_railBrandName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);overflow:hidden}.uNOdFq_railTopSpacer{margin-left:auto}.uNOdFq_bodyCollapsed .uNOdFq_railTop{justify-content:center;padding:0 14px}.uNOdFq_bodyCollapsed .uNOdFq_railBrand,.uNOdFq_bodyCollapsed .uNOdFq_railTopSpacer{display:none}.uNOdFq_sectionHeader{box-sizing:border-box;height:36px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:4px;padding:0 0 0 4px;display:flex}.uNOdFq_sectionName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-tertiary);line-height:20px;overflow:hidden}.uNOdFq_sectionActions{align-items:center;gap:4px;margin-left:auto;padding-right:8px;display:flex}.uNOdFq_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.uNOdFq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_iconButton:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_iconButton:disabled{opacity:.4;cursor:default}.uNOdFq_treeScroll{flex:auto;min-height:0;padding:0 8px 12px;overflow:auto}.uNOdFq_searchBox{flex:none;margin:0 0 8px;padding:10px 12px 0}.uNOdFq_searchBox>span{box-sizing:border-box;width:100%;margin:0 2px;display:flex}.uNOdFq_menu{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 12px;display:flex}.uNOdFq_menuFolded{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 8px;display:flex}.uNOdFq_menuFolded .uNOdFq_menuRow,.uNOdFq_menuFolded .uNOdFq_menuRowActive{justify-content:center;padding:7px 0}.uNOdFq_menuRow,.uNOdFq_menuRowActive{box-sizing:border-box;border-radius:var(--dsw-radius-md);min-height:36px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;margin:0 2px;padding:7px 8px;line-height:22px;display:flex}.uNOdFq_menuRow:hover,.uNOdFq_menuRowActive:hover{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_menuRowActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_menuRow:focus-visible,.uNOdFq_menuRowActive:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_menuGlyph{flex:none;justify-content:center;align-items:center;display:inline-flex}.uNOdFq_menuLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.uNOdFq_railBody{flex-direction:column;flex:auto;min-height:0;padding:0 8px 12px;display:flex;overflow:auto}.uNOdFq_pinnedBand{flex-direction:column;flex:none;max-height:180px;display:flex;overflow-y:auto}.uNOdFq_treeBand{flex-direction:column;flex:auto;min-height:0;display:flex}.uNOdFq_treeFilter{flex:none;padding:0 0 8px}.uNOdFq_treeFilter>span{box-sizing:border-box;width:100%;display:flex}.uNOdFq_contentColumn{flex-direction:column;min-width:0;min-height:0;display:flex}.uNOdFq_content{flex:auto;min-width:0;min-height:0;padding:16px 24px 20px;overflow:auto}.uNOdFq_header{border-bottom:.5px solid var(--dsw-alias-border-l3);flex-flow:wrap;flex:none;align-items:center;gap:8px 12px;padding:16px 14px 8px 24px;display:flex}.uNOdFq_headerActions{flex:none;align-items:center;gap:8px;margin-left:auto;display:flex}.uNOdFq_headerTitle{min-width:0;min-height:28px;font:var(--dsw-font-base-strong-16);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:none;align-items:flex-end;margin:0;display:flex;overflow:hidden}.uNOdFq_headerFact{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;align-items:center;gap:6px;margin:0;display:flex;overflow:hidden}.uNOdFq_headerPath{font:var(--dsw-font-xxs-12) var(--ds-font-family-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_headerHint{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);flex-basis:100%;margin:0}.uNOdFq_surface{flex-direction:column;align-items:flex-start;gap:12px;max-width:900px;display:flex}.uNOdFq_tableSurface{align-items:stretch;width:100%;min-width:0;max-width:none}.uNOdFq_tableSurface table{width:100%}.uNOdFq_tableSurface th:last-child,.uNOdFq_tableSurface td:last-child{text-align:right;white-space:nowrap}.uNOdFq_tableSurface td[colspan]{text-align:center;white-space:normal;padding:24px 16px}.uNOdFq_title{font:var(--dsw-font-base-strong-16);margin:0}.uNOdFq_subhead{font:var(--dsw-font-s-strong-14);margin:8px 0 0}.uNOdFq_muted{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_error{color:var(--dsw-alias-state-error-primary,#c0392b);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_notice{color:var(--dsw-alias-state-success-primary,#1a7f37);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_empty{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);flex-direction:column;align-items:center;padding:48px 20px;display:flex}.uNOdFq_emptyGlyph{color:var(--dsw-alias-label-caption);margin-bottom:12px}.uNOdFq_emptyTitle{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);margin:0;line-height:1.6}.uNOdFq_factDot{opacity:.6}.uNOdFq_hits{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.uNOdFq_hit,.uNOdFq_hitActive{box-sizing:border-box;border-radius:var(--dsw-radius-md,8px);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;grid-template-columns:minmax(0,auto) minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:8px 10px;display:grid}.uNOdFq_hit:hover,.uNOdFq_hitActive{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_hitName{font:var(--dsw-font-xs-strong-13);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitPath{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitTime{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));font:var(--dsw-font-xxs-12);grid-column:1/-1}.uNOdFq_hitLine{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;gap:8px;display:flex;overflow:hidden}.uNOdFq_hitLineNo{text-align:right;opacity:.7;flex:none;min-width:2.5em}.uNOdFq_path{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);overflow-wrap:anywhere;margin:0}.uNOdFq_preview{border:1px solid var(--dsw-alias-border-l1,#0000001f);border-radius:var(--dsw-radius-md,8px);background:var(--dsw-alias-bg-layer-2);font:var(--dsw-font-xs-13) var(--ds-font-family-code);white-space:pre-wrap;overflow-wrap:anywhere;max-height:calc(100vh - 160px);margin:0;padding:12px;line-height:1.55;overflow:auto}.uNOdFq_pairs{flex-direction:column;gap:6px;margin:0;display:flex}.uNOdFq_pair{font:var(--dsw-font-xs-13);gap:12px;display:flex}.uNOdFq_pair dt{min-width:6.5em;color:var(--dsw-alias-label-secondary);flex:none}.uNOdFq_pair dd{overflow-wrap:anywhere;margin:0}.uNOdFq_form{border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-md);flex-wrap:wrap;align-items:flex-end;gap:10px;padding:12px;display:flex}.uNOdFq_field{flex-direction:column;gap:4px;min-width:0;display:flex}.uNOdFq_field>span{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);min-width:10em;height:32px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);padding:0 10px}.uNOdFq_input:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.uNOdFq_retry{border-radius:var(--dsw-radius-sm);border:1px solid var(--dsw-alias-border-l2);min-height:32px;font:var(--dsw-font-xxs-12);cursor:pointer;color:var(--dsw-alias-label-primary);background:0 0;align-self:flex-start;padding:4px 14px}.uNOdFq_retry:disabled{opacity:.55;cursor:default}.uNOdFq_table{border-collapse:collapse;width:100%;font:var(--dsw-font-xxs-12)}.uNOdFq_table th,.uNOdFq_table td{text-align:left;border-bottom:.5px solid var(--dsw-alias-border-l2);padding:6px 8px}.uNOdFq_table th{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_previewLayout{align-items:flex-start;gap:12px;width:100%;min-width:0;display:flex}.uNOdFq_previewColumn{flex-direction:column;flex:auto;align-items:flex-start;gap:12px;min-width:0;max-width:900px;display:flex}.uNOdFq_openedElsewhere{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;width:100%;min-height:240px;display:flex}.uNOdFq_bodyDocument{grid-template-columns:280px}.uNOdFq_bodyCollapsed.uNOdFq_bodyDocument{grid-template-columns:56px}.uNOdFq_surface+.uNOdFq_surface{border-top:1px solid var(--dsw-alias-border-l1);margin-top:20px;padding-top:24px}.uNOdFq_surface+.uNOdFq_surface>.uNOdFq_subhead{margin-top:0}.uNOdFq_referenceNote{z-index:20;border:1px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);max-width:420px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);box-shadow:var(--dsw-shadow-lv2);align-items:center;gap:8px;margin:0;padding:8px 10px;display:flex;position:fixed;inset-block-end:16px;inset-inline-start:16px}.uNOdFq_referenceNoteDismiss{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);cursor:pointer;background:0 0;border:0;flex:none;padding:0 2px;line-height:1}.uNOdFq_referenceNoteDismiss:hover{color:var(--dsw-alias-label-primary)}.uNOdFq_menuGroupLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);padding:6px 10px 2px;display:block}.uNOdFq_menuSeparator{border-top:.5px solid var(--dsw-alias-border-l2);height:0;margin:4px 6px;display:block}";
|
|
2469
|
+
const css$15 = ".uNOdFq_page{height:100%;min-height:0;font:var(--dsw-font-s-14);flex-direction:column;display:flex}.uNOdFq_body{flex:auto;grid-template-columns:280px minmax(0,1fr);min-height:0;display:grid}.uNOdFq_bodyCollapsed{grid-template-columns:56px minmax(0,1fr)}.uNOdFq_rail{border-right:.5px solid var(--dsw-alias-border-l3);flex-direction:column;min-height:0;display:flex;overflow:hidden}.uNOdFq_railTop{box-sizing:border-box;flex:none;align-items:center;gap:4px;height:36px;padding:0 6px 0 12px;display:flex}.uNOdFq_railBrand{align-items:center;gap:8px;min-width:0;display:flex}.uNOdFq_railBrandName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);overflow:hidden}.uNOdFq_railTopSpacer{margin-left:auto}.uNOdFq_bodyCollapsed .uNOdFq_railTop{justify-content:center;padding:0 14px}.uNOdFq_bodyCollapsed .uNOdFq_railBrand,.uNOdFq_bodyCollapsed .uNOdFq_railTopSpacer{display:none}.uNOdFq_sectionHeader{box-sizing:border-box;height:36px;color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:4px;padding:0 0 0 4px;display:flex}.uNOdFq_sectionName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-tertiary);line-height:20px;overflow:hidden}.uNOdFq_sectionActions{align-items:center;gap:4px;margin-left:auto;padding-right:8px;display:flex}.uNOdFq_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.uNOdFq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_iconButton:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_iconButton:disabled{opacity:.4;cursor:default}.uNOdFq_treeScroll{flex:auto;min-height:0;padding:0 8px 12px;overflow:auto}.uNOdFq_searchBox{flex:none;margin:0 0 8px;padding:10px 12px 0}.uNOdFq_searchBox>span{box-sizing:border-box;width:100%;margin:0 2px;display:flex}.uNOdFq_menu{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 12px;display:flex}.uNOdFq_menuFolded{flex-direction:column;flex:none;gap:4px;margin:0 0 8px;padding:0 8px;display:flex}.uNOdFq_menuFolded .uNOdFq_menuRow,.uNOdFq_menuFolded .uNOdFq_menuRowActive{justify-content:center;padding:7px 0}.uNOdFq_menuRow,.uNOdFq_menuRowActive{box-sizing:border-box;border-radius:var(--dsw-radius-md);min-height:36px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;margin:0 2px;padding:7px 8px;line-height:22px;display:flex}.uNOdFq_menuRow:hover,.uNOdFq_menuRowActive:hover{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_menuRowActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.uNOdFq_menuRow:focus-visible,.uNOdFq_menuRowActive:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.uNOdFq_menuGlyph{flex:none;justify-content:center;align-items:center;display:inline-flex}.uNOdFq_menuLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.uNOdFq_railBody{flex-direction:column;flex:auto;min-height:0;padding:0 8px 12px;display:flex;overflow:auto}.uNOdFq_pinnedBand{flex-direction:column;flex:none;max-height:180px;display:flex;overflow-y:auto}.uNOdFq_treeBand{flex-direction:column;flex:auto;min-height:0;display:flex}.uNOdFq_treeFilter{flex:none;padding:0 0 8px}.uNOdFq_treeFilter>span{box-sizing:border-box;width:100%;display:flex}.uNOdFq_contentColumn{flex-direction:column;min-width:0;min-height:0;display:flex}.uNOdFq_content{flex:auto;min-width:0;min-height:0;padding:16px 24px 20px;overflow:auto}.uNOdFq_header{border-bottom:.5px solid var(--dsw-alias-border-l3);flex-flow:wrap;flex:none;align-items:center;gap:8px 12px;padding:16px 14px 8px 24px;display:flex}.uNOdFq_headerActions{flex:none;align-items:center;gap:8px;margin-left:auto;display:flex}.uNOdFq_headerTitle{min-width:0;min-height:28px;font:var(--dsw-font-base-strong-16);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:none;align-items:flex-end;margin:0;display:flex;overflow:hidden}.uNOdFq_headerFact{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;align-items:center;gap:6px;margin:0;display:flex;overflow:hidden}.uNOdFq_headerPath{font:var(--dsw-font-xxs-12) var(--ds-font-family-code);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_headerHint{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);flex-basis:100%;margin:0}.uNOdFq_surface{flex-direction:column;align-items:flex-start;gap:12px;max-width:900px;display:flex}.uNOdFq_tableSurface{align-items:stretch;width:100%;min-width:0;max-width:none}.uNOdFq_tableSurface table{width:100%}.uNOdFq_tableSurface th:last-child,.uNOdFq_tableSurface td:last-child{text-align:right;white-space:nowrap}.uNOdFq_tableSurface td[colspan]{text-align:center;white-space:normal;padding:24px 16px}.uNOdFq_title{font:var(--dsw-font-base-strong-16);margin:0}.uNOdFq_subhead{font:var(--dsw-font-s-strong-14);margin:8px 0 0}.uNOdFq_muted{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_error{color:var(--dsw-alias-state-error-primary,#c0392b);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_notice{color:var(--dsw-alias-state-success-primary,#1a7f37);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_empty{text-align:center;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);flex-direction:column;align-items:center;padding:48px 20px;display:flex}.uNOdFq_emptyGlyph{color:var(--dsw-alias-label-caption);margin-bottom:12px}.uNOdFq_emptyTitle{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-s-14);margin:0;line-height:1.6}.uNOdFq_factDot{opacity:.6}.uNOdFq_hits{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.uNOdFq_hit,.uNOdFq_hitActive{box-sizing:border-box;border-radius:var(--dsw-radius-md,8px);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;grid-template-columns:minmax(0,auto) minmax(0,1fr);align-items:baseline;gap:2px 10px;padding:8px 10px;display:grid}.uNOdFq_hit:hover,.uNOdFq_hitActive{background:var(--dsw-alias-interactive-bg-hover)}.uNOdFq_hitName{font:var(--dsw-font-xs-strong-13);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitPath{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.uNOdFq_hitTime{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));font:var(--dsw-font-xxs-12);grid-column:1/-1}.uNOdFq_hitLine{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;gap:8px;display:flex;overflow:hidden}.uNOdFq_hitLineNo{text-align:right;opacity:.7;flex:none;min-width:2.5em}.uNOdFq_path{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12) var(--ds-font-family-code);overflow-wrap:anywhere;margin:0}.uNOdFq_preview{border:1px solid var(--dsw-alias-border-l1,#0000001f);border-radius:var(--dsw-radius-md,8px);background:var(--dsw-alias-bg-layer-2);font:var(--dsw-font-xs-13) var(--ds-font-family-code);white-space:pre-wrap;overflow-wrap:anywhere;max-height:calc(100vh - 160px);margin:0;padding:12px;line-height:1.55;overflow:auto}.uNOdFq_pairs{flex-direction:column;gap:6px;margin:0;display:flex}.uNOdFq_pair{font:var(--dsw-font-xs-13);gap:12px;display:flex}.uNOdFq_pair dt{min-width:6.5em;color:var(--dsw-alias-label-secondary);flex:none}.uNOdFq_pair dd{overflow-wrap:anywhere;margin:0}.uNOdFq_form{border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-md);flex-wrap:wrap;align-items:flex-end;gap:10px;padding:12px;display:flex}.uNOdFq_field{flex-direction:column;gap:4px;min-width:0;display:flex}.uNOdFq_field>span{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);min-width:10em;height:32px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);padding:0 10px}.uNOdFq_input:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.uNOdFq_retry{border-radius:var(--dsw-radius-sm);border:1px solid var(--dsw-alias-border-l2);min-height:32px;font:var(--dsw-font-xxs-12);cursor:pointer;color:var(--dsw-alias-label-primary);background:0 0;align-self:flex-start;padding:4px 14px}.uNOdFq_retry:disabled{opacity:.55;cursor:default}.uNOdFq_table{border-collapse:collapse;width:100%;font:var(--dsw-font-xxs-12)}.uNOdFq_table th,.uNOdFq_table td{text-align:left;border-bottom:.5px solid var(--dsw-alias-border-l2);padding:6px 8px}.uNOdFq_table th{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12)}.uNOdFq_previewLayout{align-items:flex-start;gap:12px;width:100%;min-width:0;display:flex}.uNOdFq_previewColumn{flex-direction:column;flex:auto;align-items:flex-start;gap:12px;min-width:0;max-width:900px;display:flex}.uNOdFq_openedElsewhere{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;width:100%;min-height:240px;display:flex}.uNOdFq_bodyDocument{grid-template-columns:280px}.uNOdFq_bodyCollapsed.uNOdFq_bodyDocument{grid-template-columns:56px}.uNOdFq_surface+.uNOdFq_surface{border-top:1px solid var(--dsw-alias-border-l1);margin-top:20px;padding-top:24px}.uNOdFq_surface+.uNOdFq_surface>.uNOdFq_subhead{margin-top:0}.uNOdFq_referenceNote{z-index:20;border:1px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);max-width:420px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);box-shadow:var(--dsw-shadow-lv2);align-items:center;gap:8px;margin:0;padding:8px 10px;display:flex;position:fixed;inset-block-end:16px;inset-inline-start:16px}.uNOdFq_referenceNoteDismiss{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);cursor:pointer;background:0 0;border:0;flex:none;padding:0 2px;line-height:1}.uNOdFq_referenceNoteDismiss:hover{color:var(--dsw-alias-label-primary)}.uNOdFq_menuGroupLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);padding:6px 10px 2px;display:block}.uNOdFq_menuSeparator{border-top:.5px solid var(--dsw-alias-border-l2);height:0;margin:4px 6px;display:block}.uNOdFq_errorPanel{text-align:center;flex-direction:column;flex:auto;justify-content:center;align-items:center;gap:10px;min-height:0;padding:48px 24px;display:flex}.uNOdFq_errorGlyph{background:var(--dsw-alias-fill-l2,#f2f3f5);width:40px;height:40px;color:var(--dsw-alias-state-error-primary,#c0392b);border-radius:50%;place-items:center;display:grid}.uNOdFq_errorTitle{color:var(--dsw-alias-label-primary);font:var(--dsw-font-m-16,600 16px/24px);margin:0}.uNOdFq_errorDetail{max-width:420px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xs-13);margin:0}.uNOdFq_errorPanel .uNOdFq_retry{align-self:center;margin-top:6px}";
|
|
2470
2470
|
const tagId$15 = "@sparkelf/dsh-knowledge-base/KnowledgePanel.module.css";
|
|
2471
2471
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$15) + "]") === null) {
|
|
2472
2472
|
const tag = document.createElement("style");
|
|
@@ -2476,74 +2476,78 @@ window.__ModuleLoader__.load({
|
|
|
2476
2476
|
document.head.appendChild(tag);
|
|
2477
2477
|
}
|
|
2478
2478
|
var KnowledgePanel_module_css_default = {
|
|
2479
|
-
"
|
|
2480
|
-
"rail": "uNOdFq_rail",
|
|
2481
|
-
"menuFolded": "uNOdFq_menuFolded",
|
|
2482
|
-
"hitName": "uNOdFq_hitName",
|
|
2483
|
-
"form": "uNOdFq_form",
|
|
2484
|
-
"previewLayout": "uNOdFq_previewLayout",
|
|
2485
|
-
"treeScroll": "uNOdFq_treeScroll",
|
|
2486
|
-
"notice": "uNOdFq_notice",
|
|
2487
|
-
"menuRowActive": "uNOdFq_menuRowActive",
|
|
2488
|
-
"hitPath": "uNOdFq_hitPath",
|
|
2489
|
-
"bodyDocument": "uNOdFq_bodyDocument",
|
|
2490
|
-
"pair": "uNOdFq_pair",
|
|
2491
|
-
"headerFact": "uNOdFq_headerFact",
|
|
2479
|
+
"railBrand": "uNOdFq_railBrand",
|
|
2492
2480
|
"menuLabel": "uNOdFq_menuLabel",
|
|
2493
|
-
"
|
|
2481
|
+
"headerPath": "uNOdFq_headerPath",
|
|
2482
|
+
"header": "uNOdFq_header",
|
|
2494
2483
|
"iconButton": "uNOdFq_iconButton",
|
|
2495
|
-
"
|
|
2496
|
-
"
|
|
2497
|
-
"
|
|
2484
|
+
"error": "uNOdFq_error",
|
|
2485
|
+
"notice": "uNOdFq_notice",
|
|
2486
|
+
"form": "uNOdFq_form",
|
|
2498
2487
|
"menuSeparator": "uNOdFq_menuSeparator",
|
|
2488
|
+
"retry": "uNOdFq_retry",
|
|
2489
|
+
"muted": "uNOdFq_muted",
|
|
2490
|
+
"sectionActions": "uNOdFq_sectionActions",
|
|
2491
|
+
"menuRowActive": "uNOdFq_menuRowActive",
|
|
2499
2492
|
"pinnedBand": "uNOdFq_pinnedBand",
|
|
2500
|
-
"error": "uNOdFq_error",
|
|
2501
|
-
"railTopSpacer": "uNOdFq_railTopSpacer",
|
|
2502
|
-
"openedElsewhere": "uNOdFq_openedElsewhere",
|
|
2503
2493
|
"bodyCollapsed": "uNOdFq_bodyCollapsed",
|
|
2504
|
-
"sectionName": "uNOdFq_sectionName",
|
|
2505
|
-
"menuRow": "uNOdFq_menuRow",
|
|
2506
|
-
"referenceNoteDismiss": "uNOdFq_referenceNoteDismiss",
|
|
2507
|
-
"hits": "uNOdFq_hits",
|
|
2508
|
-
"menuGroupLabel": "uNOdFq_menuGroupLabel",
|
|
2509
|
-
"page": "uNOdFq_page",
|
|
2510
|
-
"headerPath": "uNOdFq_headerPath",
|
|
2511
|
-
"field": "uNOdFq_field",
|
|
2512
|
-
"title": "uNOdFq_title",
|
|
2513
|
-
"hitActive": "uNOdFq_hitActive",
|
|
2514
2494
|
"factDot": "uNOdFq_factDot",
|
|
2515
|
-
"
|
|
2516
|
-
"railBody": "uNOdFq_railBody",
|
|
2495
|
+
"searchBox": "uNOdFq_searchBox",
|
|
2517
2496
|
"emptyTitle": "uNOdFq_emptyTitle",
|
|
2518
|
-
"retry": "uNOdFq_retry",
|
|
2519
|
-
"menuGlyph": "uNOdFq_menuGlyph",
|
|
2520
|
-
"treeBand": "uNOdFq_treeBand",
|
|
2521
|
-
"subhead": "uNOdFq_subhead",
|
|
2522
|
-
"emptyGlyph": "uNOdFq_emptyGlyph",
|
|
2523
|
-
"empty": "uNOdFq_empty",
|
|
2524
|
-
"hit": "uNOdFq_hit",
|
|
2525
2497
|
"railBrandName": "uNOdFq_railBrandName",
|
|
2526
|
-
"
|
|
2527
|
-
"
|
|
2528
|
-
"
|
|
2529
|
-
"
|
|
2530
|
-
"tableSurface": "uNOdFq_tableSurface",
|
|
2531
|
-
"headerTitle": "uNOdFq_headerTitle",
|
|
2532
|
-
"headerActions": "uNOdFq_headerActions",
|
|
2498
|
+
"referenceNote": "uNOdFq_referenceNote",
|
|
2499
|
+
"pairs": "uNOdFq_pairs",
|
|
2500
|
+
"referenceNoteDismiss": "uNOdFq_referenceNoteDismiss",
|
|
2501
|
+
"treeFilter": "uNOdFq_treeFilter",
|
|
2533
2502
|
"hitLine": "uNOdFq_hitLine",
|
|
2534
|
-
"
|
|
2535
|
-
"
|
|
2536
|
-
"searchBox": "uNOdFq_searchBox",
|
|
2537
|
-
"surface": "uNOdFq_surface",
|
|
2503
|
+
"hitPath": "uNOdFq_hitPath",
|
|
2504
|
+
"errorGlyph": "uNOdFq_errorGlyph",
|
|
2538
2505
|
"table": "uNOdFq_table",
|
|
2539
|
-
"
|
|
2540
|
-
"
|
|
2541
|
-
"
|
|
2506
|
+
"hit": "uNOdFq_hit",
|
|
2507
|
+
"field": "uNOdFq_field",
|
|
2508
|
+
"sectionName": "uNOdFq_sectionName",
|
|
2509
|
+
"railBody": "uNOdFq_railBody",
|
|
2510
|
+
"sectionHeader": "uNOdFq_sectionHeader",
|
|
2511
|
+
"empty": "uNOdFq_empty",
|
|
2512
|
+
"hitTime": "uNOdFq_hitTime",
|
|
2542
2513
|
"input": "uNOdFq_input",
|
|
2543
|
-
"
|
|
2514
|
+
"hitName": "uNOdFq_hitName",
|
|
2515
|
+
"bodyDocument": "uNOdFq_bodyDocument",
|
|
2516
|
+
"page": "uNOdFq_page",
|
|
2544
2517
|
"hitLineNo": "uNOdFq_hitLineNo",
|
|
2518
|
+
"railTop": "uNOdFq_railTop",
|
|
2519
|
+
"subhead": "uNOdFq_subhead",
|
|
2520
|
+
"menu": "uNOdFq_menu",
|
|
2521
|
+
"hitActive": "uNOdFq_hitActive",
|
|
2522
|
+
"headerTitle": "uNOdFq_headerTitle",
|
|
2523
|
+
"previewColumn": "uNOdFq_previewColumn",
|
|
2524
|
+
"hits": "uNOdFq_hits",
|
|
2525
|
+
"rail": "uNOdFq_rail",
|
|
2526
|
+
"menuGlyph": "uNOdFq_menuGlyph",
|
|
2527
|
+
"preview": "uNOdFq_preview",
|
|
2528
|
+
"contentColumn": "uNOdFq_contentColumn",
|
|
2529
|
+
"content": "uNOdFq_content",
|
|
2530
|
+
"errorTitle": "uNOdFq_errorTitle",
|
|
2531
|
+
"headerActions": "uNOdFq_headerActions",
|
|
2532
|
+
"errorDetail": "uNOdFq_errorDetail",
|
|
2533
|
+
"openedElsewhere": "uNOdFq_openedElsewhere",
|
|
2534
|
+
"menuRow": "uNOdFq_menuRow",
|
|
2535
|
+
"treeScroll": "uNOdFq_treeScroll",
|
|
2536
|
+
"headerHint": "uNOdFq_headerHint",
|
|
2537
|
+
"treeBand": "uNOdFq_treeBand",
|
|
2538
|
+
"headerFact": "uNOdFq_headerFact",
|
|
2539
|
+
"tableSurface": "uNOdFq_tableSurface",
|
|
2540
|
+
"title": "uNOdFq_title",
|
|
2541
|
+
"emptyGlyph": "uNOdFq_emptyGlyph",
|
|
2542
|
+
"path": "uNOdFq_path",
|
|
2543
|
+
"menuGroupLabel": "uNOdFq_menuGroupLabel",
|
|
2544
|
+
"pair": "uNOdFq_pair",
|
|
2545
|
+
"errorPanel": "uNOdFq_errorPanel",
|
|
2546
|
+
"railTopSpacer": "uNOdFq_railTopSpacer",
|
|
2547
|
+
"previewLayout": "uNOdFq_previewLayout",
|
|
2548
|
+
"menuFolded": "uNOdFq_menuFolded",
|
|
2545
2549
|
"body": "uNOdFq_body",
|
|
2546
|
-
"
|
|
2550
|
+
"surface": "uNOdFq_surface"
|
|
2547
2551
|
};
|
|
2548
2552
|
//#endregion
|
|
2549
2553
|
//#region src/client/KnowledgePermissions.tsx
|
|
@@ -3058,15 +3062,15 @@ window.__ModuleLoader__.load({
|
|
|
3058
3062
|
document.head.appendChild(tag);
|
|
3059
3063
|
}
|
|
3060
3064
|
var KnowledgeLoading_module_css_default = {
|
|
3061
|
-
"
|
|
3062
|
-
"
|
|
3065
|
+
"leaf": "HyIQta_leaf",
|
|
3066
|
+
"wrap": "HyIQta_wrap",
|
|
3063
3067
|
"pagesLeft": "HyIQta_pagesLeft",
|
|
3068
|
+
"coverBack": "HyIQta_coverBack",
|
|
3064
3069
|
"pagesRight": "HyIQta_pagesRight",
|
|
3065
|
-
"
|
|
3066
|
-
"leaf": "HyIQta_leaf",
|
|
3070
|
+
"kb-page-turn": "HyIQta_kb-page-turn",
|
|
3067
3071
|
"label": "HyIQta_label",
|
|
3068
3072
|
"srOnly": "HyIQta_srOnly",
|
|
3069
|
-
"
|
|
3073
|
+
"book": "HyIQta_book"
|
|
3070
3074
|
};
|
|
3071
3075
|
//#endregion
|
|
3072
3076
|
//#region src/client/KnowledgeLoading.tsx
|
|
@@ -3151,7 +3155,7 @@ window.__ModuleLoader__.load({
|
|
|
3151
3155
|
});
|
|
3152
3156
|
}
|
|
3153
3157
|
//#endregion
|
|
3154
|
-
//#region
|
|
3158
|
+
//#region ../../../DSH-better-sidebar/src/client/resource-address.ts
|
|
3155
3159
|
/**
|
|
3156
3160
|
* The DSH resource-address grammar for files (`dsh-resource://file/…`).
|
|
3157
3161
|
*
|
|
@@ -3658,42 +3662,42 @@ window.__ModuleLoader__.load({
|
|
|
3658
3662
|
document.head.appendChild(tag);
|
|
3659
3663
|
}
|
|
3660
3664
|
var KnowledgeHome_module_css_default = {
|
|
3661
|
-
"
|
|
3662
|
-
"
|
|
3663
|
-
"
|
|
3664
|
-
"
|
|
3665
|
-
"iconButton": "oNvFBa_iconButton",
|
|
3666
|
-
"rowActions": "oNvFBa_rowActions",
|
|
3667
|
-
"card": "oNvFBa_card",
|
|
3668
|
-
"docPager": "oNvFBa_docPager",
|
|
3665
|
+
"shareError": "oNvFBa_shareError",
|
|
3666
|
+
"emptyRow": "oNvFBa_emptyRow",
|
|
3667
|
+
"rowLink": "oNvFBa_rowLink",
|
|
3668
|
+
"shareEmpty": "oNvFBa_shareEmpty",
|
|
3669
3669
|
"cardPlate": "oNvFBa_cardPlate",
|
|
3670
|
-
"
|
|
3670
|
+
"muted": "oNvFBa_muted",
|
|
3671
|
+
"table": "oNvFBa_table",
|
|
3672
|
+
"dropZoneActive": "oNvFBa_dropZoneActive",
|
|
3673
|
+
"colLocation": "oNvFBa_colLocation",
|
|
3674
|
+
"cardMenu": "oNvFBa_cardMenu",
|
|
3675
|
+
"cardSlot": "oNvFBa_cardSlot",
|
|
3676
|
+
"cards": "oNvFBa_cards",
|
|
3677
|
+
"hiddenInput": "oNvFBa_hiddenInput",
|
|
3671
3678
|
"cardTitle": "oNvFBa_cardTitle",
|
|
3672
|
-
"
|
|
3673
|
-
"
|
|
3679
|
+
"iconButtonDanger": "oNvFBa_iconButtonDanger",
|
|
3680
|
+
"docPager": "oNvFBa_docPager",
|
|
3681
|
+
"iconButton": "oNvFBa_iconButton",
|
|
3682
|
+
"dropZone": "oNvFBa_dropZone",
|
|
3674
3683
|
"cardBody": "oNvFBa_cardBody",
|
|
3675
|
-
"shareError": "oNvFBa_shareError",
|
|
3676
3684
|
"iconButtonOn": "oNvFBa_iconButtonOn",
|
|
3685
|
+
"cardChevron": "oNvFBa_cardChevron",
|
|
3677
3686
|
"home": "oNvFBa_home",
|
|
3678
|
-
"
|
|
3679
|
-
"
|
|
3687
|
+
"card": "oNvFBa_card",
|
|
3688
|
+
"titleCell": "oNvFBa_titleCell",
|
|
3689
|
+
"favoriteMark": "oNvFBa_favoriteMark",
|
|
3680
3690
|
"cardMenuItem": "oNvFBa_cardMenuItem",
|
|
3681
|
-
"
|
|
3682
|
-
"
|
|
3691
|
+
"colActions": "oNvFBa_colActions",
|
|
3692
|
+
"rowActions": "oNvFBa_rowActions",
|
|
3693
|
+
"colOwner": "oNvFBa_colOwner",
|
|
3694
|
+
"actionsCell": "oNvFBa_actionsCell",
|
|
3695
|
+
"shareWrap": "oNvFBa_shareWrap",
|
|
3696
|
+
"colTime": "oNvFBa_colTime",
|
|
3683
3697
|
"colTitle": "oNvFBa_colTitle",
|
|
3684
|
-
"
|
|
3685
|
-
"hiddenInput": "oNvFBa_hiddenInput",
|
|
3686
|
-
"dropZoneActive": "oNvFBa_dropZoneActive",
|
|
3687
|
-
"iconButtonDanger": "oNvFBa_iconButtonDanger",
|
|
3688
|
-
"shareEmpty": "oNvFBa_shareEmpty",
|
|
3698
|
+
"cardText": "oNvFBa_cardText",
|
|
3689
3699
|
"shareBlock": "oNvFBa_shareBlock",
|
|
3690
|
-
"
|
|
3691
|
-
"colActions": "oNvFBa_colActions",
|
|
3692
|
-
"emptyRow": "oNvFBa_emptyRow",
|
|
3693
|
-
"cards": "oNvFBa_cards",
|
|
3694
|
-
"cardMenu": "oNvFBa_cardMenu",
|
|
3695
|
-
"titleCell": "oNvFBa_titleCell",
|
|
3696
|
-
"colTime": "oNvFBa_colTime"
|
|
3700
|
+
"sharePager": "oNvFBa_sharePager"
|
|
3697
3701
|
};
|
|
3698
3702
|
//#endregion
|
|
3699
3703
|
//#region \0dsh-css:/root/projects/dsh-plugins-plus/packages/knowledge-base/src/client/KnowledgeTemplates.module.css.mjs
|
|
@@ -3707,54 +3711,54 @@ window.__ModuleLoader__.load({
|
|
|
3707
3711
|
document.head.appendChild(tag);
|
|
3708
3712
|
}
|
|
3709
3713
|
var KnowledgeTemplates_module_css_default = {
|
|
3710
|
-
"
|
|
3711
|
-
"
|
|
3712
|
-
"notice": "Tg9J7q_notice",
|
|
3713
|
-
"quickFilter": "Tg9J7q_quickFilter",
|
|
3714
|
-
"cardIcon": "Tg9J7q_cardIcon",
|
|
3715
|
-
"documentPage": "Tg9J7q_documentPage",
|
|
3716
|
-
"cardMeta": "Tg9J7q_cardMeta",
|
|
3717
|
-
"categoryChip": "Tg9J7q_categoryChip",
|
|
3714
|
+
"quickFilters": "Tg9J7q_quickFilters",
|
|
3715
|
+
"form": "Tg9J7q_form",
|
|
3718
3716
|
"lineWide": "Tg9J7q_lineWide",
|
|
3719
|
-
"
|
|
3720
|
-
"fieldLabel": "Tg9J7q_fieldLabel",
|
|
3721
|
-
"manageName": "Tg9J7q_manageName",
|
|
3722
|
-
"field": "Tg9J7q_field",
|
|
3723
|
-
"coverPage": "Tg9J7q_coverPage",
|
|
3717
|
+
"previewModal": "Tg9J7q_previewModal",
|
|
3724
3718
|
"cardTags": "Tg9J7q_cardTags",
|
|
3725
|
-
"
|
|
3726
|
-
"
|
|
3727
|
-
"
|
|
3728
|
-
"
|
|
3729
|
-
"
|
|
3719
|
+
"manageRow": "Tg9J7q_manageRow",
|
|
3720
|
+
"quickFilter": "Tg9J7q_quickFilter",
|
|
3721
|
+
"destination": "Tg9J7q_destination",
|
|
3722
|
+
"cardActions": "Tg9J7q_cardActions",
|
|
3723
|
+
"notice": "Tg9J7q_notice",
|
|
3724
|
+
"cover": "Tg9J7q_cover",
|
|
3730
3725
|
"manage": "Tg9J7q_manage",
|
|
3726
|
+
"toolbar": "Tg9J7q_toolbar",
|
|
3731
3727
|
"manageBar": "Tg9J7q_manageBar",
|
|
3732
|
-
"
|
|
3728
|
+
"fieldHint": "Tg9J7q_fieldHint",
|
|
3729
|
+
"cardBody": "Tg9J7q_cardBody",
|
|
3730
|
+
"fileInput": "Tg9J7q_fileInput",
|
|
3731
|
+
"formActions": "Tg9J7q_formActions",
|
|
3732
|
+
"cardMain": "Tg9J7q_cardMain",
|
|
3733
|
+
"cardMeta": "Tg9J7q_cardMeta",
|
|
3734
|
+
"muted": "Tg9J7q_muted",
|
|
3735
|
+
"manageName": "Tg9J7q_manageName",
|
|
3736
|
+
"footer": "Tg9J7q_footer",
|
|
3737
|
+
"library": "Tg9J7q_library",
|
|
3738
|
+
"previewContent": "Tg9J7q_previewContent",
|
|
3739
|
+
"filterRow": "Tg9J7q_filterRow",
|
|
3740
|
+
"manageList": "Tg9J7q_manageList",
|
|
3733
3741
|
"cardHead": "Tg9J7q_cardHead",
|
|
3734
|
-
"favorite": "Tg9J7q_favorite",
|
|
3735
|
-
"quickFilters": "Tg9J7q_quickFilters",
|
|
3736
|
-
"previewModal": "Tg9J7q_previewModal",
|
|
3737
3742
|
"filterDivider": "Tg9J7q_filterDivider",
|
|
3743
|
+
"documentPage": "Tg9J7q_documentPage",
|
|
3738
3744
|
"slidePage": "Tg9J7q_slidePage",
|
|
3745
|
+
"coverPage": "Tg9J7q_coverPage",
|
|
3746
|
+
"sheetGrid": "Tg9J7q_sheetGrid",
|
|
3747
|
+
"destinationLabel": "Tg9J7q_destinationLabel",
|
|
3739
3748
|
"cardFoot": "Tg9J7q_cardFoot",
|
|
3740
|
-
"
|
|
3741
|
-
"
|
|
3749
|
+
"dialog": "Tg9J7q_dialog",
|
|
3750
|
+
"grid": "Tg9J7q_grid",
|
|
3742
3751
|
"manageActions": "Tg9J7q_manageActions",
|
|
3743
|
-
"
|
|
3744
|
-
"cover": "Tg9J7q_cover",
|
|
3745
|
-
"form": "Tg9J7q_form",
|
|
3746
|
-
"categoryFilters": "Tg9J7q_categoryFilters",
|
|
3747
|
-
"destination": "Tg9J7q_destination",
|
|
3752
|
+
"categoryChip": "Tg9J7q_categoryChip",
|
|
3748
3753
|
"lineShort": "Tg9J7q_lineShort",
|
|
3749
|
-
"
|
|
3750
|
-
"
|
|
3754
|
+
"categoryFilters": "Tg9J7q_categoryFilters",
|
|
3755
|
+
"field": "Tg9J7q_field",
|
|
3756
|
+
"cardTitle": "Tg9J7q_cardTitle",
|
|
3757
|
+
"cardIcon": "Tg9J7q_cardIcon",
|
|
3758
|
+
"favorite": "Tg9J7q_favorite",
|
|
3759
|
+
"fieldLabel": "Tg9J7q_fieldLabel",
|
|
3751
3760
|
"card": "Tg9J7q_card",
|
|
3752
|
-
"
|
|
3753
|
-
"sheetGrid": "Tg9J7q_sheetGrid",
|
|
3754
|
-
"filterRow": "Tg9J7q_filterRow",
|
|
3755
|
-
"manageRow": "Tg9J7q_manageRow",
|
|
3756
|
-
"toolbar": "Tg9J7q_toolbar",
|
|
3757
|
-
"fileInput": "Tg9J7q_fileInput"
|
|
3761
|
+
"modal": "Tg9J7q_modal"
|
|
3758
3762
|
};
|
|
3759
3763
|
//#endregion
|
|
3760
3764
|
//#region src/client/KnowledgeTemplates.tsx
|
|
@@ -4740,14 +4744,14 @@ window.__ModuleLoader__.load({
|
|
|
4740
4744
|
document.head.appendChild(tag);
|
|
4741
4745
|
}
|
|
4742
4746
|
var KnowledgeNewDocumentDialog_module_css_default = {
|
|
4743
|
-
"cards": "hXsYha_cards",
|
|
4744
4747
|
"iconPlate": "hXsYha_iconPlate",
|
|
4748
|
+
"card": "hXsYha_card",
|
|
4749
|
+
"modal": "hXsYha_modal",
|
|
4750
|
+
"cards": "hXsYha_cards",
|
|
4745
4751
|
"cardText": "hXsYha_cardText",
|
|
4752
|
+
"dialog": "hXsYha_dialog",
|
|
4746
4753
|
"cardTitle": "hXsYha_cardTitle",
|
|
4747
|
-
"footer": "hXsYha_footer"
|
|
4748
|
-
"modal": "hXsYha_modal",
|
|
4749
|
-
"card": "hXsYha_card",
|
|
4750
|
-
"dialog": "hXsYha_dialog"
|
|
4754
|
+
"footer": "hXsYha_footer"
|
|
4751
4755
|
};
|
|
4752
4756
|
//#endregion
|
|
4753
4757
|
//#region src/client/KnowledgeNewDocumentDialog.tsx
|
|
@@ -4838,55 +4842,55 @@ window.__ModuleLoader__.load({
|
|
|
4838
4842
|
document.head.appendChild(tag);
|
|
4839
4843
|
}
|
|
4840
4844
|
var KnowledgeCreateDialog_module_css_default = {
|
|
4841
|
-
"
|
|
4842
|
-
"
|
|
4843
|
-
"stepLine": "HX727W_stepLine",
|
|
4844
|
-
"uploadQueue": "HX727W_uploadQueue",
|
|
4845
|
-
"treeName": "HX727W_treeName",
|
|
4846
|
-
"uploadName": "HX727W_uploadName",
|
|
4847
|
-
"step": "HX727W_step",
|
|
4848
|
-
"visuallyHiddenInput": "HX727W_visuallyHiddenInput",
|
|
4849
|
-
"crumbSep": "HX727W_crumbSep",
|
|
4850
|
-
"fileRow": "HX727W_fileRow",
|
|
4851
|
-
"dropzoneHint": "HX727W_dropzoneHint",
|
|
4845
|
+
"uploadSize": "HX727W_uploadSize",
|
|
4846
|
+
"uploadSummary": "HX727W_uploadSummary",
|
|
4852
4847
|
"uploadRow": "HX727W_uploadRow",
|
|
4853
|
-
"
|
|
4854
|
-
"
|
|
4855
|
-
"
|
|
4856
|
-
"
|
|
4848
|
+
"pickerRow": "HX727W_pickerRow",
|
|
4849
|
+
"fieldLabel": "HX727W_fieldLabel",
|
|
4850
|
+
"pickerPathValue": "HX727W_pickerPathValue",
|
|
4851
|
+
"footer": "HX727W_footer",
|
|
4857
4852
|
"treeNotice": "HX727W_treeNotice",
|
|
4858
|
-
"
|
|
4859
|
-
"uploadLayout": "HX727W_uploadLayout",
|
|
4853
|
+
"fileName": "HX727W_fileName",
|
|
4860
4854
|
"treeChildren": "HX727W_treeChildren",
|
|
4861
|
-
"
|
|
4862
|
-
"
|
|
4863
|
-
"
|
|
4864
|
-
"
|
|
4865
|
-
"
|
|
4855
|
+
"dropzoneHint": "HX727W_dropzoneHint",
|
|
4856
|
+
"fileList": "HX727W_fileList",
|
|
4857
|
+
"uploadLayout": "HX727W_uploadLayout",
|
|
4858
|
+
"fileRow": "HX727W_fileRow",
|
|
4859
|
+
"dropzoneTitle": "HX727W_dropzoneTitle",
|
|
4866
4860
|
"crumbWrap": "HX727W_crumbWrap",
|
|
4867
|
-
"pickerBar": "HX727W_pickerBar",
|
|
4868
|
-
"fieldError": "HX727W_fieldError",
|
|
4869
4861
|
"uploadList": "HX727W_uploadList",
|
|
4870
|
-
"fileTarget": "HX727W_fileTarget",
|
|
4871
|
-
"fileName": "HX727W_fileName",
|
|
4872
|
-
"footer": "HX727W_footer",
|
|
4873
|
-
"pickerPathLabel": "HX727W_pickerPathLabel",
|
|
4874
|
-
"uploadSummary": "HX727W_uploadSummary",
|
|
4875
|
-
"tree": "HX727W_tree",
|
|
4876
|
-
"pickerPath": "HX727W_pickerPath",
|
|
4877
|
-
"dialog": "HX727W_dialog",
|
|
4878
|
-
"pickerPathValue": "HX727W_pickerPathValue",
|
|
4879
|
-
"fileInput": "HX727W_fileInput",
|
|
4880
4862
|
"treeToggle": "HX727W_treeToggle",
|
|
4863
|
+
"crumb": "HX727W_crumb",
|
|
4864
|
+
"fieldError": "HX727W_fieldError",
|
|
4865
|
+
"crumbSep": "HX727W_crumbSep",
|
|
4866
|
+
"removeFile": "HX727W_removeFile",
|
|
4881
4867
|
"steps": "HX727W_steps",
|
|
4868
|
+
"dialog": "HX727W_dialog",
|
|
4869
|
+
"tree": "HX727W_tree",
|
|
4870
|
+
"pickerPath": "HX727W_pickerPath",
|
|
4871
|
+
"treeMuted": "HX727W_treeMuted",
|
|
4872
|
+
"pickerPathLabel": "HX727W_pickerPathLabel",
|
|
4873
|
+
"fieldHint": "HX727W_fieldHint",
|
|
4874
|
+
"treeRow": "HX727W_treeRow",
|
|
4875
|
+
"treeName": "HX727W_treeName",
|
|
4876
|
+
"modal": "HX727W_modal",
|
|
4877
|
+
"picker": "HX727W_picker",
|
|
4882
4878
|
"pickerMuted": "HX727W_pickerMuted",
|
|
4883
|
-
"
|
|
4884
|
-
"
|
|
4879
|
+
"dropzone": "HX727W_dropzone",
|
|
4880
|
+
"uploadName": "HX727W_uploadName",
|
|
4881
|
+
"stepLine": "HX727W_stepLine",
|
|
4882
|
+
"uploadQueue": "HX727W_uploadQueue",
|
|
4883
|
+
"step": "HX727W_step",
|
|
4884
|
+
"visuallyHiddenInput": "HX727W_visuallyHiddenInput",
|
|
4885
|
+
"summary": "HX727W_summary",
|
|
4885
4886
|
"field": "HX727W_field",
|
|
4886
|
-
"
|
|
4887
|
+
"pickerList": "HX727W_pickerList",
|
|
4888
|
+
"pickerBar": "HX727W_pickerBar",
|
|
4889
|
+
"fileTarget": "HX727W_fileTarget",
|
|
4890
|
+
"fileInput": "HX727W_fileInput"
|
|
4887
4891
|
};
|
|
4888
4892
|
//#endregion
|
|
4889
|
-
//#region
|
|
4893
|
+
//#region ../../../DSH-better-sidebar/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
|
|
4890
4894
|
function r(e) {
|
|
4891
4895
|
var t, f, n = "";
|
|
4892
4896
|
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
@@ -5103,7 +5107,7 @@ window.__ModuleLoader__.load({
|
|
|
5103
5107
|
})(props);
|
|
5104
5108
|
}
|
|
5105
5109
|
//#endregion
|
|
5106
|
-
//#region
|
|
5110
|
+
//#region ../../../DSH-better-sidebar/src/client/desktop-env.ts
|
|
5107
5111
|
/**
|
|
5108
5112
|
* Absolute base for the plugin's own host transports — the HTTP routes
|
|
5109
5113
|
* (`/sidebar/api/*`, `/sidebar/file`, `/sidebar/bundle/*`, …) and the
|
|
@@ -5160,7 +5164,7 @@ window.__ModuleLoader__.load({
|
|
|
5160
5164
|
return hostTransportBase();
|
|
5161
5165
|
}
|
|
5162
5166
|
//#endregion
|
|
5163
|
-
//#region
|
|
5167
|
+
//#region ../../../DSH-better-sidebar/src/client/host-route-url.ts
|
|
5164
5168
|
/**
|
|
5165
5169
|
* Prefix-safe resolution of the plugin's own host routes (HTTP and WebSocket).
|
|
5166
5170
|
*
|
|
@@ -5227,7 +5231,7 @@ window.__ModuleLoader__.load({
|
|
|
5227
5231
|
return url.href;
|
|
5228
5232
|
}
|
|
5229
5233
|
//#endregion
|
|
5230
|
-
//#region
|
|
5234
|
+
//#region ../../../DSH-better-sidebar/src/client/paths.ts
|
|
5231
5235
|
/**
|
|
5232
5236
|
* Path projection helpers shared by the explorer rows: workspace-relative
|
|
5233
5237
|
* mentions and session-cwd-relative "copy relative path".
|
|
@@ -5314,7 +5318,7 @@ window.__ModuleLoader__.load({
|
|
|
5314
5318
|
return `${base.replace(/[\\/]+$/, "")}${separator}${path}`;
|
|
5315
5319
|
}
|
|
5316
5320
|
//#endregion
|
|
5317
|
-
//#region
|
|
5321
|
+
//#region ../../../DSH-better-sidebar/src/client/api.ts
|
|
5318
5322
|
/** One wire failure. */
|
|
5319
5323
|
var SidebarApiError = class extends Error {
|
|
5320
5324
|
code;
|
|
@@ -5589,6 +5593,10 @@ window.__ModuleLoader__.load({
|
|
|
5589
5593
|
gitCommitModel: (scope, signal) => call("git.commit-model", scopePayload(scope, {}), signal),
|
|
5590
5594
|
gitBranch: (scope, worktree, signal) => call("git.branch", gitPayload(scope, worktree, {}), signal),
|
|
5591
5595
|
gitCheckout: (scope, branch, worktree) => call("git.checkout", gitPayload(scope, worktree, { branch })),
|
|
5596
|
+
/** Read-only topological history; stale cursors require a fresh first page. */
|
|
5597
|
+
gitGraph: (scope, options = {}, worktree, signal) => call("git.graph", gitPayload(scope, worktree, { ...options }), signal),
|
|
5598
|
+
/** 图形界面超过分支上限时读取经状态指纹校验的分页历史。 */
|
|
5599
|
+
gitHistory: (scope, options = {}, worktree, signal) => call("git.history", gitPayload(scope, worktree, options), signal),
|
|
5592
5600
|
/** Recent commit history, lazily pageable (skip/count; defaults 0/30). */
|
|
5593
5601
|
gitLog: (scope, count, skip, worktree, signal) => call("git.log", gitPayload(scope, worktree, {
|
|
5594
5602
|
...count !== void 0 ? { count } : {},
|
|
@@ -5616,11 +5624,14 @@ window.__ModuleLoader__.load({
|
|
|
5616
5624
|
startLine,
|
|
5617
5625
|
endLine
|
|
5618
5626
|
}), signal),
|
|
5619
|
-
/** The session's file-tool events
|
|
5620
|
-
*
|
|
5621
|
-
*
|
|
5622
|
-
*
|
|
5623
|
-
changesOps: (scope, afterSeq, signal) => call("changes.ops", scopePayload(scope, {
|
|
5627
|
+
/** The session's file-tool events past `afterSeq` (absent = whole window,
|
|
5628
|
+
* floored at -1 host-side so a log opening on seq 0 is not dropped). With
|
|
5629
|
+
* `wait` the host parks the request until the next tool event (or 25 s)
|
|
5630
|
+
* instead of re-reading an unchanged window. */
|
|
5631
|
+
changesOps: (scope, afterSeq, signal, wait = false) => call("changes.ops", scopePayload(scope, {
|
|
5632
|
+
...afterSeq !== void 0 ? { afterSeq } : {},
|
|
5633
|
+
...wait ? { wait: true } : {}
|
|
5634
|
+
}), signal),
|
|
5624
5635
|
/** Discard the worktree changes of one file (the index is untouched). */
|
|
5625
5636
|
gitDiscard: (scope, path, worktree) => call("git.discard", gitPayload(scope, worktree, { path })),
|
|
5626
5637
|
/** Revert one commit onto the current branch. */
|
|
@@ -5829,10 +5840,15 @@ window.__ModuleLoader__.load({
|
|
|
5829
5840
|
return [...targets];
|
|
5830
5841
|
}
|
|
5831
5842
|
//#endregion
|
|
5832
|
-
//#region
|
|
5833
|
-
/**
|
|
5843
|
+
//#region ../../../DSH-better-sidebar/src/client/file-tree-sort.ts
|
|
5844
|
+
/**
|
|
5845
|
+
* The default choice: most recently modified first.
|
|
5846
|
+
*
|
|
5847
|
+
* NOT the order the host listing arrives in (that is `name`). The change is deliberate:
|
|
5848
|
+
* a reader opening a folder is usually looking for what they were just working on.
|
|
5849
|
+
*/
|
|
5834
5850
|
const DEFAULT_FILE_TREE_SORT = {
|
|
5835
|
-
key: "
|
|
5851
|
+
key: "mtime",
|
|
5836
5852
|
dirsFirst: true
|
|
5837
5853
|
};
|
|
5838
5854
|
/**
|
|
@@ -5869,7 +5885,19 @@ window.__ModuleLoader__.load({
|
|
|
5869
5885
|
function sortEntries(entries, sort) {
|
|
5870
5886
|
return [...entries].sort((a, b) => {
|
|
5871
5887
|
if (sort.dirsFirst && a.isDir !== b.isDir) return a.isDir ? -1 : 1;
|
|
5872
|
-
if (sort.key === "
|
|
5888
|
+
if (sort.key === "mtime") {
|
|
5889
|
+
const ma = a.mtimeMs;
|
|
5890
|
+
const mb = b.mtimeMs;
|
|
5891
|
+
if (ma !== void 0 && mb !== void 0 && ma !== mb) return mb - ma;
|
|
5892
|
+
if (ma === void 0 && mb !== void 0) return 1;
|
|
5893
|
+
if (ma !== void 0 && mb === void 0) return -1;
|
|
5894
|
+
} else if (sort.key === "size") {
|
|
5895
|
+
const sa = a.size;
|
|
5896
|
+
const sb = b.size;
|
|
5897
|
+
if (sa !== void 0 && sb !== void 0 && sa !== sb) return sb - sa;
|
|
5898
|
+
if (sa === void 0 && sb !== void 0) return 1;
|
|
5899
|
+
if (sa !== void 0 && sb === void 0) return -1;
|
|
5900
|
+
} else if (sort.key === "type") {
|
|
5873
5901
|
const ta = typeOf(a.name, a.isDir);
|
|
5874
5902
|
const tb = typeOf(b.name, b.isDir);
|
|
5875
5903
|
if (ta !== tb) return ta < tb ? -1 : 1;
|
|
@@ -5878,7 +5906,61 @@ window.__ModuleLoader__.load({
|
|
|
5878
5906
|
});
|
|
5879
5907
|
}
|
|
5880
5908
|
//#endregion
|
|
5881
|
-
//#region
|
|
5909
|
+
//#region ../../../DSH-better-sidebar/src/client/listing-filter.ts
|
|
5910
|
+
/**
|
|
5911
|
+
* Whether a name matches the reader's term.
|
|
5912
|
+
*
|
|
5913
|
+
* Substring, case-insensitive, on the NAME only: this is the tree's in-place narrowing,
|
|
5914
|
+
* and reading file bodies is what the cross-directory search is for.
|
|
5915
|
+
* @param name - the row's base name.
|
|
5916
|
+
* @param needle - the term, already trimmed and lower-cased by {@link normaliseNeedle}.
|
|
5917
|
+
* @returns Whether the row itself matches.
|
|
5918
|
+
*/
|
|
5919
|
+
function nameMatches$1(name, needle) {
|
|
5920
|
+
if (needle === "") return true;
|
|
5921
|
+
return name.toLowerCase().includes(needle.toLowerCase());
|
|
5922
|
+
}
|
|
5923
|
+
/**
|
|
5924
|
+
* Prepare the reader's raw input for matching.
|
|
5925
|
+
*
|
|
5926
|
+
* Trimmed because a trailing space is invisible and would otherwise make every term match
|
|
5927
|
+
* nothing; lower-cased once here rather than once per row.
|
|
5928
|
+
* @param raw - what the field holds.
|
|
5929
|
+
* @returns The term to compare against.
|
|
5930
|
+
*/
|
|
5931
|
+
function normaliseNeedle$1(raw) {
|
|
5932
|
+
return raw.trim().toLowerCase();
|
|
5933
|
+
}
|
|
5934
|
+
/**
|
|
5935
|
+
* Narrow one level, recursively, keeping every hit reachable.
|
|
5936
|
+
*
|
|
5937
|
+
* A directory is kept when it matches, when anything under it matches, or when an ANCESTOR
|
|
5938
|
+
* matched — the last case is what makes typing a folder name show the folder's contents
|
|
5939
|
+
* instead of an empty row. A deeply nested hit therefore drags its whole chain with it,
|
|
5940
|
+
* which is the only way a file inside a collapsed folder can be seen.
|
|
5941
|
+
* @param rows - this level's rows, in display order.
|
|
5942
|
+
* @param children - child rows by the parent's `relPath`; absent means "not loaded".
|
|
5943
|
+
* @param needle - the term, already normalised.
|
|
5944
|
+
* @param withinMatch - whether an ancestor already matched the term.
|
|
5945
|
+
* @returns The rows to draw at this level.
|
|
5946
|
+
*/
|
|
5947
|
+
function filterLevel$1(rows, childrenOf, needle, withinMatch = false) {
|
|
5948
|
+
if (needle === "") return [...rows];
|
|
5949
|
+
const kept = [];
|
|
5950
|
+
for (const entry of rows) {
|
|
5951
|
+
const selfMatch = nameMatches$1(entry.name, needle);
|
|
5952
|
+
if (entry.isDir) {
|
|
5953
|
+
const kids = childrenOf(entry);
|
|
5954
|
+
const kidMatch = kids === void 0 ? false : filterLevel$1(kids, childrenOf, needle, selfMatch).length > 0;
|
|
5955
|
+
if (selfMatch || kidMatch || withinMatch) kept.push(entry);
|
|
5956
|
+
continue;
|
|
5957
|
+
}
|
|
5958
|
+
if (selfMatch || withinMatch) kept.push(entry);
|
|
5959
|
+
}
|
|
5960
|
+
return kept;
|
|
5961
|
+
}
|
|
5962
|
+
//#endregion
|
|
5963
|
+
//#region ../../../DSH-better-sidebar/src/client/file-icons.tsx
|
|
5882
5964
|
/**
|
|
5883
5965
|
* A file row: the host's own classifier and artwork for any path. Unknown
|
|
5884
5966
|
* extensions land on the generic document glyph, exactly like the host's
|
|
@@ -5913,7 +5995,7 @@ window.__ModuleLoader__.load({
|
|
|
5913
5995
|
});
|
|
5914
5996
|
}
|
|
5915
5997
|
//#endregion
|
|
5916
|
-
//#region
|
|
5998
|
+
//#region ../../../DSH-better-sidebar/src/client/icons.tsx
|
|
5917
5999
|
/**
|
|
5918
6000
|
* Icons the sidebar needs beyond the primitives set: a terminal glyph (the
|
|
5919
6001
|
* icon library has none), a diff glyph, and the bottom-workbench toggle.
|
|
@@ -5960,7 +6042,7 @@ window.__ModuleLoader__.load({
|
|
|
5960
6042
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M23.15 2.587L18.21.21a1.494 1.494 0 0 0-1.705.29l-9.46 8.63-4.12-3.128a.999.999 0 0 0-1.276.057L.327 7.261A1 1 0 0 0 .326 8.74L3.899 12 .326 15.26a1 1 0 0 0 .001 1.479L1.65 17.94a.999.999 0 0 0 1.276.057l4.12-3.128 9.46 8.63a1.492 1.492 0 0 0 1.704.29l4.942-2.377A1.5 1.5 0 0 0 24 20.06V3.939a1.5 1.5 0 0 0-.85-1.352zm-5.146 14.861L10.826 12l7.178-5.448v10.896z" })
|
|
5961
6043
|
});
|
|
5962
6044
|
//#endregion
|
|
5963
|
-
//#region
|
|
6045
|
+
//#region ../../../DSH-better-sidebar/src/client/ime-guard.ts
|
|
5964
6046
|
/** The CONSERVATIVE decision, for non-intercepting callers where misreading a
|
|
5965
6047
|
* composition key costs more than ignoring an ordinary one: a bare 229 counts
|
|
5966
6048
|
* even outside a composition window. Pure — reads no module state, so it
|
|
@@ -5969,7 +6051,7 @@ window.__ModuleLoader__.load({
|
|
|
5969
6051
|
return event.isComposing === true || event.keyCode === 229;
|
|
5970
6052
|
}
|
|
5971
6053
|
//#endregion
|
|
5972
|
-
//#region
|
|
6054
|
+
//#region ../../../DSH-better-sidebar/src/client/menu-flip.ts
|
|
5973
6055
|
/**
|
|
5974
6056
|
* Submenu flip geometry for the portaled context menus.
|
|
5975
6057
|
*
|
|
@@ -6034,7 +6116,7 @@ window.__ModuleLoader__.load({
|
|
|
6034
6116
|
}, [menu]);
|
|
6035
6117
|
}
|
|
6036
6118
|
//#endregion
|
|
6037
|
-
//#region
|
|
6119
|
+
//#region ../../../DSH-better-sidebar/src/client/locales.ts
|
|
6038
6120
|
/**
|
|
6039
6121
|
* Minimal zh/en/ja copy for the sidebar. The copy follows the DSH i18n system:
|
|
6040
6122
|
* the client apply attaches the locale service (`ctx.locale`, provided by
|
|
@@ -6072,8 +6154,6 @@ window.__ModuleLoader__.load({
|
|
|
6072
6154
|
changesMdRaw: "原文",
|
|
6073
6155
|
changesHtmlRender: "渲染",
|
|
6074
6156
|
changesHtmlRaw: "原文",
|
|
6075
|
-
changesPdfRender: "渲染",
|
|
6076
|
-
changesPdfRaw: "原文",
|
|
6077
6157
|
changesWrite: "写入",
|
|
6078
6158
|
changesEdit: "编辑",
|
|
6079
6159
|
changesRunning: "执行中",
|
|
@@ -6140,6 +6220,7 @@ window.__ModuleLoader__.load({
|
|
|
6140
6220
|
openInAppEmpty: "没有可用于打开它的应用",
|
|
6141
6221
|
openInAppFailed: "无法打开:{path}",
|
|
6142
6222
|
revealInFileManager: "在文件管理器中显示",
|
|
6223
|
+
openContainingFolder: "打开所在文件夹",
|
|
6143
6224
|
filesSelected: "已选择 {count} 项",
|
|
6144
6225
|
clearSelection: "取消选择",
|
|
6145
6226
|
copyPaths: "复制路径",
|
|
@@ -6165,7 +6246,6 @@ window.__ModuleLoader__.load({
|
|
|
6165
6246
|
gitStatusRenamed: "已重命名",
|
|
6166
6247
|
gitStatusConflict: "有冲突",
|
|
6167
6248
|
changesClean: "工作区没有变更",
|
|
6168
|
-
changesNoHistory: "还没有提交历史",
|
|
6169
6249
|
changesNewFile: "新文件",
|
|
6170
6250
|
changesStageFailed: "暂存失败:{message}",
|
|
6171
6251
|
changesOpGone: "该操作已不在会话记录中",
|
|
@@ -6246,6 +6326,7 @@ window.__ModuleLoader__.load({
|
|
|
6246
6326
|
searchGo: "跳转",
|
|
6247
6327
|
binary: "二进制文件,无法预览",
|
|
6248
6328
|
loading: "加载中…",
|
|
6329
|
+
filterNoMatch: "没有匹配的文件",
|
|
6249
6330
|
error: "加载失败",
|
|
6250
6331
|
retry: "重试",
|
|
6251
6332
|
notRepo: "当前目录不是 git 仓库",
|
|
@@ -6254,7 +6335,18 @@ window.__ModuleLoader__.load({
|
|
|
6254
6335
|
unstage: "取消暂存",
|
|
6255
6336
|
stageAll: "全部暂存",
|
|
6256
6337
|
unstageAll: "全部取消暂存",
|
|
6257
|
-
|
|
6338
|
+
gitChanges: "更改",
|
|
6339
|
+
gitGraph: "提交图",
|
|
6340
|
+
gitMergeChanges: "合并更改",
|
|
6341
|
+
gitStagedChanges: "暂存的更改",
|
|
6342
|
+
gitMoreActions: "更多操作",
|
|
6343
|
+
gitRepository: "仓库",
|
|
6344
|
+
gitDetached: "游离 HEAD",
|
|
6345
|
+
gitBranchesUnavailable: "没有可用分支",
|
|
6346
|
+
gitNoUpstream: "未设置上游",
|
|
6347
|
+
gitSyncUnavailable: "同步不可用",
|
|
6348
|
+
gitSync: "同步更改",
|
|
6349
|
+
commitPlaceholder: "Message ({shortcut} to commit on \"{branch}\")",
|
|
6258
6350
|
commit: "提交",
|
|
6259
6351
|
generateCommitMessage: "生成提交信息",
|
|
6260
6352
|
generateCommitMessageWith: "生成提交信息(使用 {model})",
|
|
@@ -6280,12 +6372,26 @@ window.__ModuleLoader__.load({
|
|
|
6280
6372
|
worktree: "工作树",
|
|
6281
6373
|
checkoutError: "切换分支失败",
|
|
6282
6374
|
history: "历史",
|
|
6283
|
-
changes: "
|
|
6375
|
+
changes: "Git",
|
|
6284
6376
|
changesGitLens: "Git",
|
|
6377
|
+
graphAllBranches: "所有分支",
|
|
6378
|
+
graphBranchFilter: "分支筛选",
|
|
6379
|
+
graphEmpty: "暂无提交",
|
|
6380
|
+
graphLoadError: "加载提交历史失败",
|
|
6381
|
+
graphLinearFallback: "分支过多,当前显示线性历史列表(不表示分支拓扑)",
|
|
6382
|
+
graphStale: "提交历史已变化,请刷新",
|
|
6383
|
+
graphDetails: "提交详情",
|
|
6384
|
+
graphParents: "父提交",
|
|
6385
|
+
graphLoadMore: "加载更多",
|
|
6285
6386
|
changesSessionLens: "本轮文件",
|
|
6286
6387
|
changesFilterAll: "全部",
|
|
6287
6388
|
changesFilterEmpty: "没有此类操作",
|
|
6288
6389
|
changesOpenDiffTab: "在独立页签中打开",
|
|
6390
|
+
changesDiffTab: "差异",
|
|
6391
|
+
changesContentTab: "内容",
|
|
6392
|
+
changesNoCommit: "未选择提交",
|
|
6393
|
+
changesNoContent: "此视图暂无内容",
|
|
6394
|
+
changesReadNoDiff: "读取没有差异",
|
|
6289
6395
|
changesClosePreview: "关闭预览",
|
|
6290
6396
|
changesResizePreview: "调整预览高度",
|
|
6291
6397
|
changesLoadError: "会话文件记录暂不可用",
|
|
@@ -6317,7 +6423,6 @@ window.__ModuleLoader__.load({
|
|
|
6317
6423
|
timeHoursAgo: "{n} 小时前",
|
|
6318
6424
|
timeYesterday: "昨天",
|
|
6319
6425
|
loadMore: "加载更多",
|
|
6320
|
-
historyLoadError: "加载更多历史失败",
|
|
6321
6426
|
produced: "本次产出",
|
|
6322
6427
|
showInFolder: "在文件夹中显示",
|
|
6323
6428
|
disconnected: "终端连接断开,重连中…",
|
|
@@ -6369,6 +6474,14 @@ window.__ModuleLoader__.load({
|
|
|
6369
6474
|
settingsSubagentDesc: "当前会话产生新的子代理时,在侧边栏创建任务管理页并标记未读红点;若侧边栏正展开在其他页面则不抢焦点,点红点即可前往;宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后不再自动创建",
|
|
6370
6475
|
settingsJobsTitle: "有新后台任务时自动激活任务管理页",
|
|
6371
6476
|
settingsJobsDesc: "当前会话出现新的后台任务时,在侧边栏创建任务管理页并标记未读红点(每个新任务都会触发);若侧边栏正展开在其他页面则不抢焦点,点红点即可前往;宽屏同时展开侧边栏,窄屏不强制展开全屏抽屉;关闭后不再自动创建",
|
|
6477
|
+
settingsTasksAutoFoldSettledTitle: "自动折叠已结束叶子任务",
|
|
6478
|
+
settingsTasksAutoFoldSettledDesc: "自动折叠已完成、失败或停止且没有子代理的叶子任务;默认开启",
|
|
6479
|
+
settingsTasksAutoFoldBranchesTitle: "仅自动折叠完全结束的分支",
|
|
6480
|
+
settingsTasksAutoFoldBranchesDesc: "仅当整条分支全部结束才自动折叠;含有运行中后代的分支绝不折叠;默认开启",
|
|
6481
|
+
settingsTasksAutoFoldIdleTitle: "自动折叠空闲成员",
|
|
6482
|
+
settingsTasksAutoFoldIdleDesc: "空闲成员达到 3 个或以上时自动折叠;默认开启",
|
|
6483
|
+
settingsJobsAutoCollapseTitle: "自动收起后台任务抽屉",
|
|
6484
|
+
settingsJobsAutoCollapseDesc: "代理总数达到 8 个或以上时自动收起后台任务抽屉;手动开关仍然可用;默认开启",
|
|
6372
6485
|
settingsToolsTitle: "为模型注入终端工具",
|
|
6373
6486
|
settingsToolsDesc: "开启后,模型可通过 terminal_create 等 8 个工具创建并操作侧边栏终端(默认关闭)",
|
|
6374
6487
|
settingsBottomTerminalTitle: "底部面板首次展开自动开终端",
|
|
@@ -6467,6 +6580,8 @@ window.__ModuleLoader__.load({
|
|
|
6467
6580
|
sideChatCancelTitle: "中止当前回合(保留队列)",
|
|
6468
6581
|
sideChatError: "侧边对话出错:{message}",
|
|
6469
6582
|
sideChatTurnUsage: "输入 {input} tok · 输出 {output} tok",
|
|
6583
|
+
sideChatDeliverables: "交付文件",
|
|
6584
|
+
sideChatDeliverableOpen: "打开 {name}",
|
|
6470
6585
|
sideChatBlockCollapse: "收起",
|
|
6471
6586
|
sideChatBlockCollapseAria: "收起",
|
|
6472
6587
|
sideChatBlockExpand: "展开 {hidden} 行",
|
|
@@ -6478,6 +6593,7 @@ window.__ModuleLoader__.load({
|
|
|
6478
6593
|
sideChatBlockFailed: "失败",
|
|
6479
6594
|
sideChatBlockDone: "完成",
|
|
6480
6595
|
sideChatBlockNoOutput: "(无输出)",
|
|
6596
|
+
sideChatBlockCommandLine: "命令第 {line} 行",
|
|
6481
6597
|
codeBlockTitle: "代码块",
|
|
6482
6598
|
codeBlockWrap: "自动换行",
|
|
6483
6599
|
codeBlockUnwrap: "取消自动换行",
|
|
@@ -6592,6 +6708,14 @@ window.__ModuleLoader__.load({
|
|
|
6592
6708
|
workflowPhaseUnnamed: "未命名阶段",
|
|
6593
6709
|
workflowMembers: "{done}/{total} 成员",
|
|
6594
6710
|
jobsAutoCollapsed: "代理较多,已自动折叠",
|
|
6711
|
+
contextDiagnostics: "上下文诊断",
|
|
6712
|
+
contextDiagnosticsTarget: "当前会话",
|
|
6713
|
+
contextDiagnosticsFailed: "无法打开「{label}」的上下文诊断",
|
|
6714
|
+
contextDiagnosticsUnavailable: "dsh-context 的「上下文」页面不可用(未安装或未注册)",
|
|
6715
|
+
contextDiagnosticsNavigation: "无法定位到该会话",
|
|
6716
|
+
contextDiagnosticsTimeout: "打开超时,请重试",
|
|
6717
|
+
contextDiagnosticsOpenFailed: "页面打开失败",
|
|
6718
|
+
contextDiagnosticsDismiss: "关闭提示",
|
|
6595
6719
|
catalogLoadFailed: "{count} 个分支加载失败",
|
|
6596
6720
|
addPluginsTabCard: "添加 Tab 插件",
|
|
6597
6721
|
addPluginsTabCardDesc: "注册新的侧边栏页面",
|
|
@@ -6673,8 +6797,6 @@ window.__ModuleLoader__.load({
|
|
|
6673
6797
|
changesMdRaw: "Raw",
|
|
6674
6798
|
changesHtmlRender: "Render",
|
|
6675
6799
|
changesHtmlRaw: "Raw",
|
|
6676
|
-
changesPdfRender: "Render",
|
|
6677
|
-
changesPdfRaw: "Raw",
|
|
6678
6800
|
changesWrite: "Write",
|
|
6679
6801
|
changesEdit: "Edit",
|
|
6680
6802
|
changesRunning: "running",
|
|
@@ -6741,6 +6863,7 @@ window.__ModuleLoader__.load({
|
|
|
6741
6863
|
openInAppEmpty: "No application can open it",
|
|
6742
6864
|
openInAppFailed: "Could not open: {path}",
|
|
6743
6865
|
revealInFileManager: "Reveal in File Manager",
|
|
6866
|
+
openContainingFolder: "Open Containing Folder",
|
|
6744
6867
|
filesSelected: "{count} selected",
|
|
6745
6868
|
clearSelection: "Clear selection",
|
|
6746
6869
|
copyPaths: "Copy paths",
|
|
@@ -6766,7 +6889,6 @@ window.__ModuleLoader__.load({
|
|
|
6766
6889
|
gitStatusRenamed: "Renamed",
|
|
6767
6890
|
gitStatusConflict: "Conflicted",
|
|
6768
6891
|
changesClean: "No changes in the working tree",
|
|
6769
|
-
changesNoHistory: "No commits yet",
|
|
6770
6892
|
changesNewFile: "New file",
|
|
6771
6893
|
changesStageFailed: "Staging failed: {message}",
|
|
6772
6894
|
changesOpGone: "This operation is no longer in the session log",
|
|
@@ -6847,6 +6969,7 @@ window.__ModuleLoader__.load({
|
|
|
6847
6969
|
searchGo: "go",
|
|
6848
6970
|
binary: "Binary file, preview unavailable",
|
|
6849
6971
|
loading: "Loading…",
|
|
6972
|
+
filterNoMatch: "No matching files",
|
|
6850
6973
|
error: "Failed to load",
|
|
6851
6974
|
retry: "Retry",
|
|
6852
6975
|
notRepo: "This directory is not a git repository",
|
|
@@ -6855,7 +6978,18 @@ window.__ModuleLoader__.load({
|
|
|
6855
6978
|
unstage: "Unstage",
|
|
6856
6979
|
stageAll: "Stage all",
|
|
6857
6980
|
unstageAll: "Unstage all",
|
|
6858
|
-
|
|
6981
|
+
gitChanges: "Changes",
|
|
6982
|
+
gitGraph: "Graph",
|
|
6983
|
+
gitMergeChanges: "Merge Changes",
|
|
6984
|
+
gitStagedChanges: "Staged Changes",
|
|
6985
|
+
gitMoreActions: "More Actions",
|
|
6986
|
+
gitRepository: "Repository",
|
|
6987
|
+
gitDetached: "Detached HEAD",
|
|
6988
|
+
gitBranchesUnavailable: "No branches available",
|
|
6989
|
+
gitNoUpstream: "No upstream",
|
|
6990
|
+
gitSyncUnavailable: "Sync unavailable",
|
|
6991
|
+
gitSync: "Sync Changes",
|
|
6992
|
+
commitPlaceholder: "Message ({shortcut} to commit on \"{branch}\")",
|
|
6859
6993
|
commit: "Commit",
|
|
6860
6994
|
generateCommitMessage: "Generate commit message",
|
|
6861
6995
|
generateCommitMessageWith: "Generate commit message (using {model})",
|
|
@@ -6881,12 +7015,26 @@ window.__ModuleLoader__.load({
|
|
|
6881
7015
|
worktree: "Worktree",
|
|
6882
7016
|
checkoutError: "Branch switch failed",
|
|
6883
7017
|
history: "History",
|
|
6884
|
-
changes: "
|
|
7018
|
+
changes: "Git",
|
|
6885
7019
|
changesGitLens: "Git",
|
|
7020
|
+
graphAllBranches: "All branches",
|
|
7021
|
+
graphBranchFilter: "Branch filter",
|
|
7022
|
+
graphEmpty: "No commits",
|
|
7023
|
+
graphLoadError: "Failed to load commit history",
|
|
7024
|
+
graphLinearFallback: "Too many branches; showing a linear history list (not branch topology)",
|
|
7025
|
+
graphStale: "History has changed. Refresh to continue.",
|
|
7026
|
+
graphDetails: "Commit details",
|
|
7027
|
+
graphParents: "Parents",
|
|
7028
|
+
graphLoadMore: "Load more",
|
|
6886
7029
|
changesSessionLens: "Session",
|
|
6887
7030
|
changesFilterAll: "All",
|
|
6888
7031
|
changesFilterEmpty: "No operations of this kind",
|
|
6889
7032
|
changesOpenDiffTab: "Open in a diff tab",
|
|
7033
|
+
changesDiffTab: "Diff",
|
|
7034
|
+
changesContentTab: "Content",
|
|
7035
|
+
changesNoCommit: "No commit selected",
|
|
7036
|
+
changesNoContent: "Nothing to show here",
|
|
7037
|
+
changesReadNoDiff: "A read has no diff",
|
|
6890
7038
|
changesClosePreview: "Close preview",
|
|
6891
7039
|
changesResizePreview: "Resize preview",
|
|
6892
7040
|
changesLoadError: "Session file records are unavailable right now",
|
|
@@ -6918,7 +7066,6 @@ window.__ModuleLoader__.load({
|
|
|
6918
7066
|
timeHoursAgo: "{n} h ago",
|
|
6919
7067
|
timeYesterday: "yesterday",
|
|
6920
7068
|
loadMore: "Load more",
|
|
6921
|
-
historyLoadError: "Failed to load more history",
|
|
6922
7069
|
produced: "Produced",
|
|
6923
7070
|
showInFolder: "Show in folder",
|
|
6924
7071
|
disconnected: "Terminal disconnected, reconnecting…",
|
|
@@ -6970,6 +7117,14 @@ window.__ModuleLoader__.load({
|
|
|
6970
7117
|
settingsSubagentDesc: "When the current conversation spawns a new subagent, create the Tasks page in the side card and mark it with an unread dot; a side card already expanded on another page is left alone instead of being taken over — click the dot to go there; wide viewports also expand the side card, while narrow full-screen drawers are not forced open; turn off to stop creating it automatically",
|
|
6971
7118
|
settingsJobsTitle: "Auto-activate the Tasks page on a new background job",
|
|
6972
7119
|
settingsJobsDesc: "Whenever a new background job appears for the current conversation, create the Tasks page in the side card and mark it with an unread dot (every new job triggers); a side card already expanded on another page is left alone instead of being taken over — click the dot to go there; wide viewports also expand the side card, while narrow full-screen drawers are not forced open; turn off to stop creating it automatically",
|
|
7120
|
+
settingsTasksAutoFoldSettledTitle: "Auto-fold settled leaf tasks",
|
|
7121
|
+
settingsTasksAutoFoldSettledDesc: "Automatically fold leaf tasks that have completed, failed, or stopped and have no child agents; on by default",
|
|
7122
|
+
settingsTasksAutoFoldBranchesTitle: "Auto-fold fully finished branches only",
|
|
7123
|
+
settingsTasksAutoFoldBranchesDesc: "Automatically fold a branch only once the whole branch has finished; a branch with any running descendant is never folded; on by default",
|
|
7124
|
+
settingsTasksAutoFoldIdleTitle: "Auto-fold idle teammates",
|
|
7125
|
+
settingsTasksAutoFoldIdleDesc: "Automatically fold idle teammates once 3 or more are waiting for new instructions; on by default",
|
|
7126
|
+
settingsJobsAutoCollapseTitle: "Auto-collapse the background jobs drawer",
|
|
7127
|
+
settingsJobsAutoCollapseDesc: "Automatically collapse the background jobs drawer when there are 8 or more agents in total; the manual toggle still works; on by default",
|
|
6973
7128
|
settingsToolsTitle: "Inject terminal tools for the model",
|
|
6974
7129
|
settingsToolsDesc: "When enabled, the model can create and drive sidebar terminals through the 8 terminal_* tools (off by default)",
|
|
6975
7130
|
settingsBottomTerminalTitle: "Auto-open a terminal on the bottom panel's first expansion",
|
|
@@ -7068,6 +7223,8 @@ window.__ModuleLoader__.load({
|
|
|
7068
7223
|
sideChatCancelTitle: "Abort the running turn (queued work is kept)",
|
|
7069
7224
|
sideChatError: "Side Chat error: {message}",
|
|
7070
7225
|
sideChatTurnUsage: "Input {input} tok · Output {output} tok",
|
|
7226
|
+
sideChatDeliverables: "Present files",
|
|
7227
|
+
sideChatDeliverableOpen: "Open {name}",
|
|
7071
7228
|
sideChatBlockCollapse: "Collapse",
|
|
7072
7229
|
sideChatBlockCollapseAria: "Collapse",
|
|
7073
7230
|
sideChatBlockExpand: "Expand {hidden} lines",
|
|
@@ -7079,6 +7236,7 @@ window.__ModuleLoader__.load({
|
|
|
7079
7236
|
sideChatBlockFailed: "Failed",
|
|
7080
7237
|
sideChatBlockDone: "Done",
|
|
7081
7238
|
sideChatBlockNoOutput: "(no output)",
|
|
7239
|
+
sideChatBlockCommandLine: "Command line {line}",
|
|
7082
7240
|
codeBlockTitle: "Code block",
|
|
7083
7241
|
codeBlockWrap: "Wrap lines",
|
|
7084
7242
|
codeBlockUnwrap: "Do not wrap lines",
|
|
@@ -7193,6 +7351,14 @@ window.__ModuleLoader__.load({
|
|
|
7193
7351
|
workflowPhaseUnnamed: "Unnamed phase",
|
|
7194
7352
|
workflowMembers: "{done}/{total} members",
|
|
7195
7353
|
jobsAutoCollapsed: "Auto-collapsed (many agents)",
|
|
7354
|
+
contextDiagnostics: "Context diagnostics",
|
|
7355
|
+
contextDiagnosticsTarget: "Current session",
|
|
7356
|
+
contextDiagnosticsFailed: "Could not open Context diagnostics for \"{label}\"",
|
|
7357
|
+
contextDiagnosticsUnavailable: "The dsh-context \"Context\" page is unavailable (not installed or not registered)",
|
|
7358
|
+
contextDiagnosticsNavigation: "Could not locate that conversation",
|
|
7359
|
+
contextDiagnosticsTimeout: "Opening timed out — try again",
|
|
7360
|
+
contextDiagnosticsOpenFailed: "The page could not be opened",
|
|
7361
|
+
contextDiagnosticsDismiss: "Dismiss",
|
|
7196
7362
|
catalogLoadFailed: "{count} branches failed to load",
|
|
7197
7363
|
addPluginsTabCard: "Add tab plugins",
|
|
7198
7364
|
addPluginsTabCardDesc: "Register a new sidebar page",
|
|
@@ -7275,8 +7441,8 @@ window.__ModuleLoader__.load({
|
|
|
7275
7441
|
return text;
|
|
7276
7442
|
}
|
|
7277
7443
|
//#endregion
|
|
7278
|
-
//#region \0dsh-css:/root/projects/
|
|
7279
|
-
const css$9 = ".
|
|
7444
|
+
//#region \0dsh-css:/root/projects/DSH-better-sidebar/src/client/ui/kit.module.css.mjs
|
|
7445
|
+
const css$9 = ".lvzz-W_iconButton{box-sizing:border-box;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:3px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.lvzz-W_iconButtonMd{width:28px;height:28px}.lvzz-W_iconButtonSm{border-radius:3px;width:24px;height:24px}.lvzz-W_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.lvzz-W_iconButton:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.lvzz-W_iconButton:disabled{opacity:.4;cursor:default}.lvzz-W_iconButtonActive{color:var(--dsw-alias-state-business-primary)}.lvzz-W_iconButtonDanger{color:var(--dsw-alias-state-error-primary)}.lvzz-W_chip{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:22px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);white-space:nowrap;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:4px;padding:0 8px;display:inline-flex}.lvzz-W_chip:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.lvzz-W_chip:disabled{opacity:.4;cursor:default}.lvzz-W_chipActive,.lvzz-W_chipActive:hover{background:var(--dsw-alias-interactive-bg-hover-accent);border-color:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-primary)}.lvzz-W_chipLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}.lvzz-W_chipCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums}.lvzz-W_chipActive .lvzz-W_chipCount{color:var(--dsw-alias-label-secondary)}.lvzz-W_sectionHeader{box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l1);width:100%;height:28px;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;padding:0 12px;display:flex}.lvzz-W_sectionLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.lvzz-W_sectionCount{font:var(--dsw-font-xxxs-11);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);flex:none}.lvzz-W_sectionAction{flex:none;align-items:center;margin-left:auto;display:inline-flex}.lvzz-W_notice{box-sizing:border-box;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);white-space:pre-wrap}.lvzz-W_noticeWell{padding:4px 12px 8px}.lvzz-W_noticePage{text-align:center;padding:16px}.lvzz-W_noticeInline{padding:0;font-size:10px;line-height:1.45}.lvzz-W_noticeError{color:var(--dsw-alias-state-error-primary)}.lvzz-W_noticeWarn{color:var(--dsw-alias-state-warn-primary)}.lvzz-W_noticeHint{color:var(--dsw-alias-label-tertiary)}.lvzz-W_confirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);margin:0}.lvzz-W_confirmDesc[data-danger=true]{color:var(--dsw-alias-label-primary)}.lvzz-W_statusBadge{font:var(--dsw-font-xxxs-strong-11);font-family:var(--ds-font-family-code,monospace);color:var(--dsw-alias-label-secondary);border-radius:2px;flex:none;padding:0 4px}.lvzz-W_statusBadge[data-tone=modified]{color:var(--dsw-alias-state-warn-primary)}.lvzz-W_statusBadge[data-tone=added],.lvzz-W_statusBadge[data-tone=untracked]{color:var(--dsw-alias-state-success-primary)}.lvzz-W_statusBadge[data-tone=deleted]{color:var(--dsw-alias-state-error-primary)}.lvzz-W_statusBadge[data-tone=renamed]{color:var(--dsw-alias-state-business-primary)}.lvzz-W_statusBadge[data-tone=conflict]{color:var(--dsw-alias-state-error-primary)}.lvzz-W_statusBadge[data-tone=read]{color:var(--dsw-alias-state-success-primary)}.lvzz-W_statusBadge[data-tone=write]{color:var(--dsw-alias-state-business-primary)}.lvzz-W_statusBadge[data-tone=edit]{color:var(--dsw-alias-state-warn-primary)}.lvzz-W_statusBadge[data-tone=neutral]{color:var(--dsw-alias-label-tertiary)}";
|
|
7280
7446
|
const tagId$9 = "@sparkelf/dsh-knowledge-base/kit.module.css";
|
|
7281
7447
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$9) + "]") === null) {
|
|
7282
7448
|
const tag = document.createElement("style");
|
|
@@ -7286,31 +7452,31 @@ window.__ModuleLoader__.load({
|
|
|
7286
7452
|
document.head.appendChild(tag);
|
|
7287
7453
|
}
|
|
7288
7454
|
var kit_module_css_default = {
|
|
7289
|
-
"
|
|
7290
|
-
"
|
|
7291
|
-
"
|
|
7292
|
-
"
|
|
7293
|
-
"iconButtonSm": "
|
|
7294
|
-
"
|
|
7295
|
-
"
|
|
7296
|
-
"
|
|
7297
|
-
"
|
|
7298
|
-
"
|
|
7299
|
-
"
|
|
7300
|
-
"
|
|
7301
|
-
"
|
|
7302
|
-
"
|
|
7303
|
-
"
|
|
7304
|
-
"
|
|
7305
|
-
"
|
|
7306
|
-
"
|
|
7307
|
-
"
|
|
7308
|
-
"
|
|
7309
|
-
"
|
|
7310
|
-
"
|
|
7455
|
+
"statusBadge": "lvzz-W_statusBadge",
|
|
7456
|
+
"iconButtonDanger": "lvzz-W_iconButtonDanger",
|
|
7457
|
+
"chipCount": "lvzz-W_chipCount",
|
|
7458
|
+
"iconButtonMd": "lvzz-W_iconButtonMd",
|
|
7459
|
+
"iconButtonSm": "lvzz-W_iconButtonSm",
|
|
7460
|
+
"notice": "lvzz-W_notice",
|
|
7461
|
+
"noticePage": "lvzz-W_noticePage",
|
|
7462
|
+
"noticeError": "lvzz-W_noticeError",
|
|
7463
|
+
"noticeWarn": "lvzz-W_noticeWarn",
|
|
7464
|
+
"confirmDesc": "lvzz-W_confirmDesc",
|
|
7465
|
+
"noticeWell": "lvzz-W_noticeWell",
|
|
7466
|
+
"iconButtonActive": "lvzz-W_iconButtonActive",
|
|
7467
|
+
"iconButton": "lvzz-W_iconButton",
|
|
7468
|
+
"sectionCount": "lvzz-W_sectionCount",
|
|
7469
|
+
"sectionLabel": "lvzz-W_sectionLabel",
|
|
7470
|
+
"chip": "lvzz-W_chip",
|
|
7471
|
+
"sectionAction": "lvzz-W_sectionAction",
|
|
7472
|
+
"noticeHint": "lvzz-W_noticeHint",
|
|
7473
|
+
"chipActive": "lvzz-W_chipActive",
|
|
7474
|
+
"chipLabel": "lvzz-W_chipLabel",
|
|
7475
|
+
"sectionHeader": "lvzz-W_sectionHeader",
|
|
7476
|
+
"noticeInline": "lvzz-W_noticeInline"
|
|
7311
7477
|
};
|
|
7312
7478
|
//#endregion
|
|
7313
|
-
//#region
|
|
7479
|
+
//#region ../../../DSH-better-sidebar/src/client/ui/kit.tsx
|
|
7314
7480
|
/**
|
|
7315
7481
|
* A 28px (`md`) or 24px (`sm`) square glyph button — the ONE icon button of
|
|
7316
7482
|
* the plugin. Callers that need a pressed state pass `active`; the danger
|
|
@@ -7409,7 +7575,7 @@ window.__ModuleLoader__.load({
|
|
|
7409
7575
|
});
|
|
7410
7576
|
}
|
|
7411
7577
|
//#endregion
|
|
7412
|
-
//#region
|
|
7578
|
+
//#region ../../../DSH-better-sidebar/src/client/ui/git-status.ts
|
|
7413
7579
|
/**
|
|
7414
7580
|
* The plugin's ONE git-status store.
|
|
7415
7581
|
*
|
|
@@ -7453,6 +7619,24 @@ window.__ModuleLoader__.load({
|
|
|
7453
7619
|
* Bumping the version on every tick re-rendered every consumer — the file
|
|
7454
7620
|
* tree's rows included — once per cadence for no reason, which is what the
|
|
7455
7621
|
* snapshot identity check above exists to prevent.
|
|
7622
|
+
*
|
|
7623
|
+
* Retention: remembering a key is not a lease on memory. The last consumer of
|
|
7624
|
+
* a slot going away (unmount, a parked tab, a scope change) DROPS the slot —
|
|
7625
|
+
* snapshot, index and listeners and all — so a long session that walks through
|
|
7626
|
+
* files, worktrees and cwds cannot grow the map for the page's lifetime. Since
|
|
7627
|
+
* v0.25 every visited native tab body stays mounted, so there is no host-side
|
|
7628
|
+
* teardown that would have bounded this for us.
|
|
7629
|
+
*
|
|
7630
|
+
* Dropping is invisible to a consumer that still carries the slot object: its
|
|
7631
|
+
* next render re-mints the key (`slotOf`) and `retain` re-registers that same
|
|
7632
|
+
* object, so the next retain performs a FRESH fetch rather than serving a
|
|
7633
|
+
* stale answer (and never mints a second slot for one key — two slots would
|
|
7634
|
+
* mean two pollers). A slot with a fetch in flight is never dropped mid-flight
|
|
7635
|
+
* (the answer has to land somewhere); it goes when that fetch settles. As a
|
|
7636
|
+
* second bound the registry is capped at {@link SLOT_CAP} keys, because a
|
|
7637
|
+
* consumer that mounts while invisible mints a slot it never retains and never
|
|
7638
|
+
* releases — eviction only ever takes a slot with no retained consumer and no
|
|
7639
|
+
* fetch in flight.
|
|
7456
7640
|
*/
|
|
7457
7641
|
/** The porcelain letter → tone rule (both sides share one vocabulary). */
|
|
7458
7642
|
function toneOfLetter(letter) {
|
|
@@ -7502,11 +7686,8 @@ window.__ModuleLoader__.load({
|
|
|
7502
7686
|
return `${root.replace(/[\\/]+$/, "")}/${rel.replace(/^[\\/]+/, "")}`;
|
|
7503
7687
|
}
|
|
7504
7688
|
/**
|
|
7505
|
-
* Whether two
|
|
7506
|
-
*
|
|
7507
|
-
* lines appended to an already-modified file — must still publish a NEW
|
|
7508
|
-
* snapshot: keeping the previous identity would freeze the row's numbers at
|
|
7509
|
-
* their first reading for as long as the porcelain codes stay put.
|
|
7689
|
+
* Whether two sides carry the same line counts (both absent counts as equal —
|
|
7690
|
+
* the entry simply has no reading on that side).
|
|
7510
7691
|
*/
|
|
7511
7692
|
function sameCounts(left, right) {
|
|
7512
7693
|
if (left === right) return true;
|
|
@@ -7518,15 +7699,21 @@ window.__ModuleLoader__.load({
|
|
|
7518
7699
|
* Whether two status snapshots carry the same information. Compared field by
|
|
7519
7700
|
* field (never by serializing the whole object): the entries are the payload
|
|
7520
7701
|
* and their order is stable, so a length + pairwise compare is enough.
|
|
7702
|
+
*
|
|
7703
|
+
* Both sides' counts are compared, each on its own: a numstat-only change — an
|
|
7704
|
+
* edit that adds lines without touching either porcelain letter, e.g. more
|
|
7705
|
+
* lines appended to an already-modified file — must still publish a NEW
|
|
7706
|
+
* snapshot, because keeping the previous identity would freeze the row's
|
|
7707
|
+
* numbers at their first reading for as long as the porcelain codes stay put.
|
|
7521
7708
|
*/
|
|
7522
7709
|
function sameStatus(a, b) {
|
|
7523
7710
|
if (a === b) return true;
|
|
7524
|
-
if (a.isRepo !== b.isRepo || a.branch !== b.branch || a.root !== b.root || a.truncated !== b.truncated || a.entries.length !== b.entries.length) return false;
|
|
7711
|
+
if (a.isRepo !== b.isRepo || a.branch !== b.branch || a.root !== b.root || a.upstream !== b.upstream || a.ahead !== b.ahead || a.behind !== b.behind || a.detached !== b.detached || a.operation !== b.operation || a.truncated !== b.truncated || a.entries.length !== b.entries.length) return false;
|
|
7525
7712
|
if (a.repositories?.length !== b.repositories?.length) return false;
|
|
7526
7713
|
if (a.repositories !== void 0 && b.repositories !== void 0 && a.repositories.some((root, index) => root !== b.repositories[index])) return false;
|
|
7527
7714
|
return a.entries.every((entry, index) => {
|
|
7528
7715
|
const other = b.entries[index];
|
|
7529
|
-
return entry.path === other.path && entry.xy === other.xy && sameCounts(entry.
|
|
7716
|
+
return entry.path === other.path && entry.xy === other.xy && sameCounts(entry.staged, other.staged) && sameCounts(entry.unstaged, other.unstaged);
|
|
7530
7717
|
});
|
|
7531
7718
|
}
|
|
7532
7719
|
/** Build the lookup index for one snapshot (once per snapshot, O(rows × depth)). */
|
|
@@ -7581,6 +7768,34 @@ window.__ModuleLoader__.load({
|
|
|
7581
7768
|
null
|
|
7582
7769
|
];
|
|
7583
7770
|
const slots = /* @__PURE__ */ new Map();
|
|
7771
|
+
/**
|
|
7772
|
+
* The registry's hard ceiling. The primary rule is release-driven (see
|
|
7773
|
+
* {@link release}); this cap is the backstop for keys nobody ever released —
|
|
7774
|
+
* a consumer that mounts while invisible mints its slot without retaining it,
|
|
7775
|
+
* and only the cap bounds that path. Eviction never touches a slot a consumer
|
|
7776
|
+
* holds or one with a fetch in flight, so the cap is soft while many slots are
|
|
7777
|
+
* genuinely live.
|
|
7778
|
+
*/
|
|
7779
|
+
const SLOT_CAP = 256;
|
|
7780
|
+
/** Whether nothing depends on this slot: no consumer holds the answer and no
|
|
7781
|
+
* fetch is in flight. */
|
|
7782
|
+
function evictable(slot) {
|
|
7783
|
+
return slot.visible === 0 && !slot.running;
|
|
7784
|
+
}
|
|
7785
|
+
/** Drop one slot from the registry. Identity-checked, so a key that was
|
|
7786
|
+
* re-minted meanwhile keeps its live entry. */
|
|
7787
|
+
function forget(slot) {
|
|
7788
|
+
if (slots.get(slot.key) === slot) slots.delete(slot.key);
|
|
7789
|
+
}
|
|
7790
|
+
/** Make room for one key about to be minted: evict the oldest slots nobody
|
|
7791
|
+
* holds while the registry is at {@link SLOT_CAP}. Map order is mint order. */
|
|
7792
|
+
function trimSlots() {
|
|
7793
|
+
if (slots.size < SLOT_CAP) return;
|
|
7794
|
+
for (const slot of slots.values()) {
|
|
7795
|
+
if (slots.size < SLOT_CAP) break;
|
|
7796
|
+
if (evictable(slot)) forget(slot);
|
|
7797
|
+
}
|
|
7798
|
+
}
|
|
7584
7799
|
/** The automatic cadence of one slot; `null` = no timer (tier 3). */
|
|
7585
7800
|
function intervalOf(slot) {
|
|
7586
7801
|
const factor = TIER_FACTORS[slot.tier] ?? null;
|
|
@@ -7591,6 +7806,7 @@ window.__ModuleLoader__.load({
|
|
|
7591
7806
|
const key = `${sessionId}\u0000${cwd ?? ""}\u0000${repoRoot ?? ""}\u0000${worktree ?? ""}`;
|
|
7592
7807
|
const existing = slots.get(key);
|
|
7593
7808
|
if (existing !== void 0) return existing;
|
|
7809
|
+
trimSlots();
|
|
7594
7810
|
const slot = {
|
|
7595
7811
|
key,
|
|
7596
7812
|
sessionId,
|
|
@@ -7679,6 +7895,7 @@ window.__ModuleLoader__.load({
|
|
|
7679
7895
|
slot.pending = false;
|
|
7680
7896
|
fetchSlot(slot);
|
|
7681
7897
|
}
|
|
7898
|
+
if (evictable(slot)) forget(slot);
|
|
7682
7899
|
});
|
|
7683
7900
|
}
|
|
7684
7901
|
function startTimer(slot) {
|
|
@@ -7705,6 +7922,7 @@ window.__ModuleLoader__.load({
|
|
|
7705
7922
|
startTimer(slot);
|
|
7706
7923
|
}
|
|
7707
7924
|
function retain(slot, poll) {
|
|
7925
|
+
if (!slots.has(slot.key)) slots.set(slot.key, slot);
|
|
7708
7926
|
slot.visible += 1;
|
|
7709
7927
|
if (poll) slot.pollers += 1;
|
|
7710
7928
|
if (slot.visible === 1 && slot.snapshot === null) fetchSlot(slot);
|
|
@@ -7723,6 +7941,7 @@ window.__ModuleLoader__.load({
|
|
|
7723
7941
|
slot.index = null;
|
|
7724
7942
|
slot.indexSource = null;
|
|
7725
7943
|
notify(slot);
|
|
7944
|
+
if (!slot.running) forget(slot);
|
|
7726
7945
|
}
|
|
7727
7946
|
}
|
|
7728
7947
|
/** The index for the current snapshot, rebuilt only when the snapshot changed. */
|
|
@@ -7782,7 +8001,7 @@ window.__ModuleLoader__.load({
|
|
|
7782
8001
|
};
|
|
7783
8002
|
}
|
|
7784
8003
|
//#endregion
|
|
7785
|
-
//#region
|
|
8004
|
+
//#region ../../../DSH-better-sidebar/src/client/upload.ts
|
|
7786
8005
|
/** Sanitize a relative target: absolute paths, traversal, and empty segments
|
|
7787
8006
|
* are rejected (the host enforces the same rules with a 400). */
|
|
7788
8007
|
function sanitizeRelativePath(rel) {
|
|
@@ -7850,7 +8069,7 @@ window.__ModuleLoader__.load({
|
|
|
7850
8069
|
return (await Promise.all(entries.map((entry) => itemsFromEntry(entry, "").catch(() => [])))).flat();
|
|
7851
8070
|
}
|
|
7852
8071
|
//#endregion
|
|
7853
|
-
//#region
|
|
8072
|
+
//#region ../../../DSH-better-sidebar/src/client/use-dir-watch.ts
|
|
7854
8073
|
/**
|
|
7855
8074
|
* Live refresh for the file tree.
|
|
7856
8075
|
*
|
|
@@ -7860,21 +8079,31 @@ window.__ModuleLoader__.load({
|
|
|
7860
8079
|
* tree per-directory watching; this plugin owns its tree (it took the `files`
|
|
7861
8080
|
* kind over), so it carries its own.
|
|
7862
8081
|
*
|
|
7863
|
-
* One socket per session, open for as long as the tree is mounted
|
|
7864
|
-
* announces the folders it has expanded and the host watches
|
|
7865
|
-
* every notice names a directory whose listing is stale, and
|
|
7866
|
-
* that one cached level and re-lists it. Folders the reader
|
|
7867
|
-
* un-watched, so a long session does not accumulate handles.
|
|
8082
|
+
* One socket per session, open for as long as the tree is mounted AND visible.
|
|
8083
|
+
* The client announces the folders it has expanded and the host watches
|
|
8084
|
+
* exactly those; every notice names a directory whose listing is stale, and
|
|
8085
|
+
* the tree drops that one cached level and re-lists it. Folders the reader
|
|
8086
|
+
* collapsed are un-watched, so a long session does not accumulate handles.
|
|
8087
|
+
*
|
|
8088
|
+
* The host keeps every visited tab body mounted, so an un-gated watcher would
|
|
8089
|
+
* keep one socket (and its own set of up to 64 `fs.watch` handles on the host)
|
|
8090
|
+
* open per tree the reader ever opened, re-listing parked trees for nobody.
|
|
8091
|
+
* A parked tree (`visible: false`) therefore closes its socket outright — the
|
|
8092
|
+
* host releases that connection's handles when it goes — rather than sending
|
|
8093
|
+
* `unwatch` per path, and a tree with nothing to watch (no session, no root)
|
|
8094
|
+
* never opens one. Coming back reconnects and force-refreshes every watched
|
|
8095
|
+
* directory once, because whatever changed while it was parked was noticed by
|
|
8096
|
+
* nobody.
|
|
7868
8097
|
*/
|
|
7869
8098
|
/** How long to wait before re-opening a dropped socket; failures back off to the cap. */
|
|
7870
8099
|
const RETRY_BASE_MS = 1e3;
|
|
7871
8100
|
const RETRY_MAX_MS = 15e3;
|
|
7872
8101
|
/**
|
|
7873
8102
|
* Keep the file tree's expanded folders watched for the component's lifetime.
|
|
7874
|
-
* @param options - session, root, expanded directories, and the staleness callback.
|
|
8103
|
+
* @param options - session, root, expanded directories, visibility, and the staleness callback.
|
|
7875
8104
|
*/
|
|
7876
8105
|
function useDirectoryWatch(options) {
|
|
7877
|
-
const { sessionId, root, dirs, onStale } = options;
|
|
8106
|
+
const { sessionId, root, dirs, visible = true, onStale } = options;
|
|
7878
8107
|
const dirsKey = dirs.join("\0");
|
|
7879
8108
|
const wanted = (0, react.useMemo)(() => {
|
|
7880
8109
|
const listed = dirsKey === "" ? [] : dirsKey.split("\0");
|
|
@@ -7887,8 +8116,14 @@ window.__ModuleLoader__.load({
|
|
|
7887
8116
|
/** Set by the socket effect; reconciles the host's watch set with the tree's. */
|
|
7888
8117
|
const reconcileRef = (0, react.useRef)(() => {});
|
|
7889
8118
|
const wantedKey = (0, react.useMemo)(() => wanted.join("\0"), [wanted]);
|
|
8119
|
+
/**
|
|
8120
|
+
* Whether a socket should exist at all: a parked tree and a tree with an
|
|
8121
|
+
* empty watch set (no session, or no root and nothing expanded) hold none.
|
|
8122
|
+
*/
|
|
8123
|
+
const armed = visible && sessionId !== void 0 && wanted.length > 0;
|
|
7890
8124
|
(0, react.useEffect)(() => {
|
|
7891
|
-
if (sessionId === void 0) return;
|
|
8125
|
+
if (!armed || sessionId === void 0) return;
|
|
8126
|
+
const session = sessionId;
|
|
7892
8127
|
let socket = null;
|
|
7893
8128
|
let retry;
|
|
7894
8129
|
let closed = false;
|
|
@@ -7919,7 +8154,7 @@ window.__ModuleLoader__.load({
|
|
|
7919
8154
|
const connect = () => {
|
|
7920
8155
|
if (closed) return;
|
|
7921
8156
|
const url = hostWebSocketUrl("sidebar/ws/fs-watch");
|
|
7922
|
-
url.search = new URLSearchParams({ sessionId }).toString();
|
|
8157
|
+
url.search = new URLSearchParams({ sessionId: session }).toString();
|
|
7923
8158
|
socket = new WebSocket(url.toString());
|
|
7924
8159
|
socket.onopen = () => {
|
|
7925
8160
|
failures = 0;
|
|
@@ -7927,6 +8162,7 @@ window.__ModuleLoader__.load({
|
|
|
7927
8162
|
reconcile();
|
|
7928
8163
|
};
|
|
7929
8164
|
socket.onmessage = (event) => {
|
|
8165
|
+
if (closed) return;
|
|
7930
8166
|
if (typeof event.data !== "string") return;
|
|
7931
8167
|
let frame;
|
|
7932
8168
|
try {
|
|
@@ -7939,7 +8175,7 @@ window.__ModuleLoader__.load({
|
|
|
7939
8175
|
watching.add(frame.dir);
|
|
7940
8176
|
return;
|
|
7941
8177
|
}
|
|
7942
|
-
if (frame.ok === void 0) staleRef.current(frame.dir);
|
|
8178
|
+
if (frame.ok === void 0) staleRef.current([frame.dir]);
|
|
7943
8179
|
};
|
|
7944
8180
|
socket.onclose = () => {
|
|
7945
8181
|
if (closed) return;
|
|
@@ -7954,13 +8190,27 @@ window.__ModuleLoader__.load({
|
|
|
7954
8190
|
if (retry !== void 0) window.clearTimeout(retry);
|
|
7955
8191
|
socket?.close();
|
|
7956
8192
|
};
|
|
7957
|
-
}, [sessionId]);
|
|
8193
|
+
}, [sessionId, armed]);
|
|
7958
8194
|
(0, react.useEffect)(() => {
|
|
7959
8195
|
reconcileRef.current();
|
|
7960
8196
|
}, [wantedKey]);
|
|
8197
|
+
/**
|
|
8198
|
+
* Re-armed after being parked: the socket is brand new (the old one's
|
|
8199
|
+
* notices are gone with it), so nothing the host saw while the tree was
|
|
8200
|
+
* hidden was delivered. Re-list every watched directory once instead of
|
|
8201
|
+
* showing a listing that may be minutes old — as ONE batch (the caller
|
|
8202
|
+
* re-lists the set in a single `fs.trees` request), not one per directory.
|
|
8203
|
+
*/
|
|
8204
|
+
const wasArmedRef = (0, react.useRef)(armed);
|
|
8205
|
+
(0, react.useEffect)(() => {
|
|
8206
|
+
const previous = wasArmedRef.current;
|
|
8207
|
+
wasArmedRef.current = armed;
|
|
8208
|
+
if (!armed || previous) return;
|
|
8209
|
+
if (wantedRef.current.length > 0) staleRef.current(wantedRef.current);
|
|
8210
|
+
}, [armed]);
|
|
7961
8211
|
}
|
|
7962
8212
|
//#endregion
|
|
7963
|
-
//#region
|
|
8213
|
+
//#region ../../../DSH-better-sidebar/src/client/use-polling.ts
|
|
7964
8214
|
/**
|
|
7965
8215
|
* The sidebar's ONE polling loop: every timed client fetch — subagent live
|
|
7966
8216
|
* previews, side-chat transcript deltas, git status, session ops — funnels
|
|
@@ -8025,8 +8275,8 @@ window.__ModuleLoader__.load({
|
|
|
8025
8275
|
]);
|
|
8026
8276
|
}
|
|
8027
8277
|
//#endregion
|
|
8028
|
-
//#region \0dsh-css:/root/projects/
|
|
8029
|
-
const css$8 = "[data-dsh-panel-host]{z-index:25;pointer-events:none;height:100vh;position:fixed;inset:0;overflow:clip}html[data-platform] body>[data-dsh-better-sidebar],[data-dsh-panel-host]{-webkit-app-region:initial!important}[data-dsh-panel-host]>*{-webkit-app-region:no-drag}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}.QgejbG_dockFallback{z-index:40;align-items:center;gap:2px;display:inline-flex;position:fixed}.QgejbG_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.QgejbG_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_toggleButton:disabled,.QgejbG_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.QgejbG_panelBody{flex:1;min-width:0;min-height:0;display:flex}.QgejbG_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.QgejbG_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.QgejbG_bottomPanel[data-dragging]{transition:none}.QgejbG_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .QgejbG_panel,body[data-dsh-sidebar-dragging] .QgejbG_bottomPanel{will-change:transform}.QgejbG_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.QgejbG_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.QgejbG_bottomClose{z-index:4;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:3px;right:6px}.QgejbG_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_bottomPanel .QgejbG_tabBar{padding-right:40px}.QgejbG_toggleButton,.QgejbG_tabBar{-webkit-app-region:no-drag}.QgejbG_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.QgejbG_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_iconButton:disabled{opacity:.4;cursor:default}.QgejbG_workbench,.QgejbG_split{flex:1;min-width:0;min-height:0;display:flex}.QgejbG_splitRow{flex-direction:row}.QgejbG_splitCol{flex-direction:column}.QgejbG_splitChild{display:flex;position:relative;overflow:hidden}.QgejbG_divider{z-index:3;touch-action:none;flex:none;position:relative}.QgejbG_dividerRow:after,.QgejbG_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.QgejbG_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.QgejbG_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.QgejbG_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.QgejbG_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.QgejbG_divider:hover:after,.QgejbG_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.QgejbG_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.QgejbG_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.QgejbG_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.QgejbG_dropLeft{width:25%;top:0;bottom:0;left:0}.QgejbG_dropRight{width:25%;top:0;bottom:0;right:0}.QgejbG_dropUp{height:25%;top:0;left:0;right:0}.QgejbG_dropDown{height:25%;bottom:0;left:0;right:0}.QgejbG_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.QgejbG_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.QgejbG_chipIcon{flex:none;align-items:center;margin-right:6px;display:inline-flex}.QgejbG_chipUnread{background:var(--dsw-alias-danger);vertical-align:middle;border-radius:50%;width:6px;height:6px;margin-left:6px;display:inline-block}.QgejbG_tabUnreadDot{background:var(--dsw-alias-danger);border-radius:50%;flex:none;width:7px;height:7px}.QgejbG_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.QgejbG_paneTabHidden{display:none}.QgejbG_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));align-content:start;gap:12px;min-height:0;padding:12px;display:grid;overflow:hidden}.QgejbG_paneCard{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);min-width:0;min-height:56px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);cursor:pointer;text-align:left;border-radius:24px;flex-direction:row;justify-content:flex-start;align-items:center;gap:14px;padding:14px 20px;display:flex}.QgejbG_paneCard>svg{color:var(--dsw-alias-label-secondary);flex:none}.QgejbG_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l4)}.QgejbG_paneCard:disabled{opacity:.45;cursor:default}.QgejbG_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.QgejbG_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.QgejbG_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.QgejbG_tabList::-webkit-scrollbar{display:none}.QgejbG_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.QgejbG_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.QgejbG_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.QgejbG_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.QgejbG_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.QgejbG_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.QgejbG_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.QgejbG_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_tabBarRightActions{flex:0 auto;justify-content:flex-end;align-items:center;gap:2px;min-width:0;padding-right:4px;display:flex;overflow:hidden}.QgejbG_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.QgejbG_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.QgejbG_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.QgejbG_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.QgejbG_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:28px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:QgejbG_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:4px;align-items:center;gap:6px;padding:0 8px;display:flex;position:relative}.QgejbG_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.QgejbG_explorerRowSelected{background:var(--dsw-alias-interactive-bg-active)}.QgejbG_explorerRowSelected:before{content:\"\";background:var(--dsw-alias-state-business-primary);border-radius:1px;width:2px;position:absolute;top:4px;bottom:4px;left:0}.QgejbG_explorerGitName[data-git-tone=modified]{color:var(--dsw-alias-state-warn-primary)}.QgejbG_explorerGitName[data-git-tone=added],.QgejbG_explorerGitName[data-git-tone=untracked]{color:var(--dsw-alias-state-success-primary)}.QgejbG_explorerGitName[data-git-tone=deleted]{color:var(--dsw-alias-state-error-primary)}.QgejbG_explorerGitName[data-git-tone=renamed]{color:var(--dsw-alias-state-business-primary)}.QgejbG_explorerGitName[data-git-tone=copied]{color:var(--dsw-alias-state-success-primary)}.QgejbG_explorerGitName[data-git-tone=conflict]{color:var(--dsw-alias-state-error-primary)}.QgejbG_explorerDirChanged{color:var(--dsw-alias-state-business-primary)}.QgejbG_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.QgejbG_explorerRowRevealed+.QgejbG_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.QgejbG_explorerRowRevealed:has(+.QgejbG_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.QgejbG_explorerDir{font:var(--dsw-font-xxs-strong-12)}.QgejbG_explorerHidden{opacity:.45}.QgejbG_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.QgejbG_explorerBroken .QgejbG_explorerName{color:var(--dsw-alias-state-error-primary)}.QgejbG_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.QgejbG_explorerRenaming{cursor:text}.QgejbG_explorerRenameInput{box-sizing:border-box;border:1px solid var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-layer-1);min-width:0;height:22px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:3px;flex:auto;padding:0 6px}.QgejbG_explorerRenameInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.QgejbG_explorerActionError{box-sizing:border-box;border:1px solid var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border-radius:8px;align-items:flex-start;gap:6px;width:100%;margin-bottom:4px;padding:6px 8px;display:flex}.QgejbG_explorerActionErrorText{overflow-wrap:anywhere;min-width:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex:auto}.QgejbG_explorerSelectionBar{z-index:1;box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);border-radius:4px;align-items:center;gap:6px;width:100%;min-height:28px;margin-top:4px;padding:2px 8px;display:flex;position:sticky;bottom:0}.QgejbG_explorerSelectionText{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);flex:auto;overflow:hidden}.QgejbG_explorerSelectionActions{flex-wrap:wrap;flex:none;justify-content:flex-end;gap:4px;max-width:72%;display:flex}.QgejbG_explorerAppIcon{object-fit:contain;width:14px;height:14px;display:block}.QgejbG_explorerHiddenPane{display:none}.QgejbG_explorerTime{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;margin-left:auto;padding-left:8px}.QgejbG_explorerRow:hover .QgejbG_explorerTime,.QgejbG_explorerRow:focus-within .QgejbG_explorerTime{margin-left:0}.QgejbG_explorerRef,.QgejbG_explorerCopied{margin-left:auto}.QgejbG_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.QgejbG_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_explorerRow:hover .QgejbG_explorerRef,.QgejbG_explorerRow:focus-within .QgejbG_explorerRef{display:inline-flex}.QgejbG_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.QgejbG_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes QgejbG_dsh-row-in{0%{opacity:0}}.QgejbG_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.QgejbG_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover-accent);outline:1px dashed var(--dsw-alias-state-business-primary);outline-offset:-1px}.QgejbG_uploadDropMask{z-index:1001;pointer-events:none;background:color-mix(in srgb, var(--dsw-alias-bg-base) 62%, transparent);animation:QgejbG_dsh-row-in .15s var(--ds-ease-in-out);position:fixed;inset:0}.QgejbG_uploadDropZone{z-index:1002;pointer-events:none;border:2px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 4%, transparent);animation:QgejbG_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.QgejbG_uploadDropHero{flex-direction:column;align-items:center;gap:8px;max-width:100%;padding-top:8px;display:flex}.QgejbG_uploadDropArtPrimary{color:var(--dsw-alias-state-business-primary)}.QgejbG_uploadDropArtAccent{color:var(--dsw-alias-state-business-tertiary)}.QgejbG_uploadDropArtCut{color:var(--dsw-alias-bg-layer-1)}.QgejbG_uploadDropZonePill{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);max-width:100%;height:28px;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);border-radius:999px;align-items:center;gap:6px;padding:0 12px;display:flex}.QgejbG_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.QgejbG_uploadDropChatHint{z-index:1003;pointer-events:none;animation:QgejbG_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.QgejbG_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);flex-direction:column;align-items:center;gap:10px;display:flex}.QgejbG_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:QgejbG_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.QgejbG_uploadOverlayCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-width:240px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:8px;flex-direction:column;gap:10px;padding:16px;display:flex}.QgejbG_uploadOverlayTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);align-items:center;gap:6px;display:flex}.QgejbG_uploadOverlayTitle>svg{flex:none}.QgejbG_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.QgejbG_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.QgejbG_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.QgejbG_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxxs-11);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.QgejbG_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:4px;align-self:flex-end;padding:0 12px}.QgejbG_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.QgejbG_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.QgejbG_editor{flex-direction:column;flex:1;min-height:0;display:flex}.QgejbG_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.QgejbG_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.QgejbG_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.QgejbG_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.QgejbG_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.QgejbG_editorBody{flex:1;min-height:0;display:flex}.QgejbG_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.QgejbG_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.QgejbG_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.QgejbG_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.QgejbG_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.QgejbG_editorTreePanelFull{flex:1}.QgejbG_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.QgejbG_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.QgejbG_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.QgejbG_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.QgejbG_editorSearchResult{box-sizing:border-box;width:100%;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:6px;padding:0 8px;line-height:28px;display:flex;overflow:hidden}.QgejbG_editorSearchResultDir{color:var(--dsw-alias-label-secondary)}.QgejbG_editorSearchResultLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.QgejbG_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.QgejbG_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.QgejbG_editorStatusError{color:var(--dsw-alias-state-error-primary)}.QgejbG_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.QgejbG_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.QgejbG_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.QgejbG_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.QgejbG_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.QgejbG_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.QgejbG_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.QgejbG_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.QgejbG_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.QgejbG_editorBannerAction{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;margin-left:8px;padding:0;text-decoration:underline}.QgejbG_editorGitAdd{color:var(--dsw-alias-state-success-primary)}.QgejbG_editorGitMod{color:var(--dsw-alias-state-warn-primary)}.QgejbG_editorGitDel{color:var(--dsw-alias-state-error-primary)}.QgejbG_editorGitBarGutter{width:2px;min-width:2px}.QgejbG_editorGitBar,.QgejbG_editorGitBarSpacer{width:2px;height:100%}.QgejbG_editorGitBarAdd{background:var(--dsw-alias-state-success-primary)}.QgejbG_editorGitBarMod{background:var(--dsw-alias-state-warn-primary)}.QgejbG_editorGitBarDel{background:var(--dsw-alias-state-error-primary)}.QgejbG_editorBlame{max-width:420px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-primary);padding:4px 8px}.QgejbG_editorBlameHead{color:var(--dsw-alias-label-secondary)}.QgejbG_editorBlameSummary{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin-top:2px}.QgejbG_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.QgejbG_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.QgejbG_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.QgejbG_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.QgejbG_sandboxStatusOff .QgejbG_sandboxDot{background:var(--dsw-alias-state-error-primary)}.QgejbG_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.QgejbG_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.QgejbG_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.QgejbG_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.QgejbG_browser{flex-direction:column;flex:1;min-height:0;display:flex}.QgejbG_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.QgejbG_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.QgejbG_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.QgejbG_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.QgejbG_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.QgejbG_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.QgejbG_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.QgejbG_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.QgejbG_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.QgejbG_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.QgejbG_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.QgejbG_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.QgejbG_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.QgejbG_editorCmHidden{display:none}.QgejbG_editorCm .cm-editor{height:100%}.QgejbG_editorCm .cm-scroller{padding:12px 16px}.QgejbG_editorCm .cm-editor.cm-focused{outline:none}.QgejbG_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.QgejbG_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.QgejbG_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.QgejbG_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.QgejbG_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.QgejbG_editorMd .md-code-block:not([data-mermaid-processed])>div:first-child{z-index:auto;position:static}.QgejbG_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.QgejbG_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.QgejbG_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.QgejbG_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.QgejbG_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.QgejbG_mermaidBody svg{max-width:100%;height:auto}.QgejbG_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.QgejbG_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.QgejbG_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.QgejbG_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0;-webkit-app-region:initial!important}.QgejbG_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.QgejbG_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.QgejbG_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.QgejbG_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.QgejbG_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.QgejbG_mermaidModalStage svg:active{cursor:grabbing}.QgejbG_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.QgejbG_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-specific-menu);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.QgejbG_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.QgejbG_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.QgejbG_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.QgejbG_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.QgejbG_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.QgejbG_editorPdfFrameBlocked{pointer-events:none}.QgejbG_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.QgejbG_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .QgejbG_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .QgejbG_editorPdfDragShield{pointer-events:auto!important}.QgejbG_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.QgejbG_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.QgejbG_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.QgejbG_nativeTabHost{flex-direction:column;height:100%;min-height:0;display:flex}.QgejbG_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.QgejbG_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.QgejbG_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.QgejbG_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.QgejbG_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.QgejbG_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.QgejbG_toggleButton:focus-visible,.QgejbG_bottomClose:focus-visible,.QgejbG_iconButton:focus-visible,.QgejbG_tab:focus-visible,.QgejbG_tabClose:focus-visible,.QgejbG_tabBarPlus:focus-visible,.QgejbG_paneCard:focus-visible,.QgejbG_explorerRow:focus-visible,.QgejbG_explorerRef:focus-visible,.QgejbG_terminalRetry:focus-visible,.QgejbG_editorModeButton:focus-visible,.QgejbG_editorDownloadLink:focus-visible,.QgejbG_editorPptxButton:focus-visible,.QgejbG_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.QgejbG_bottomPanel,.QgejbG_bottomPanelHidden,.QgejbG_toggleButton,.QgejbG_tab,.QgejbG_tabBarPlus,.QgejbG_paneCard,.QgejbG_explorerRow,.QgejbG_divider,.QgejbG_dividerRow:after,.QgejbG_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.QgejbG_tab{min-width:48px;max-width:128px}}.QgejbG_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.QgejbG_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.QgejbG_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.QgejbG_openWithPin{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:5px;flex:none;justify-content:center;align-items:center;display:inline-flex}.QgejbG_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.QgejbG_editorHtmlBlock{margin:8px 0}.QgejbG_editorHtmlBlock img,.QgejbG_editorHtmlBlock video{max-width:100%}.QgejbG_editorHtmlBlock details{margin:4px 0;padding:4px 0}.QgejbG_editorHtmlBlock summary,.QgejbG_editorMd details>summary{cursor:pointer}.QgejbG_tocBar{z-index:7;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.QgejbG_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.QgejbG_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.QgejbG_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.QgejbG_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.QgejbG_tocItem[data-level=\"2\"]{padding-left:18px}.QgejbG_tocItem[data-level=\"3\"]{padding-left:28px}.QgejbG_tocItem[data-level=\"4\"]{padding-left:38px}.QgejbG_tocItem[data-level=\"5\"]{padding-left:48px}.QgejbG_tocItem[data-level=\"6\"]{padding-left:58px}.QgejbG_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.QgejbG_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes QgejbG_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.QgejbG_tocFlash{border-radius:4px;animation:1.2s ease-out QgejbG_dsh-toc-flash}.QgejbG_largeFile{flex-direction:column;flex:1;min-height:0;display:flex}.QgejbG_largeFileNotice{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.QgejbG_largeFileDownload{color:inherit;text-decoration:underline}.QgejbG_largeFileNoticeAction{font:inherit;color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:4px;margin-left:auto;padding:0 6px}.QgejbG_largeFileNoticeAction:disabled{opacity:.5;cursor:default}.QgejbG_largeFileBody{flex:1;min-height:0;overflow:auto}.QgejbG_largeFileRecords{padding:4px 0}.QgejbG_largeFileList{margin:0;padding:0;list-style:none}.QgejbG_largeFileRecord{gap:8px;padding:2px 8px;display:flex}.QgejbG_largeFileRecordExpanded{background:var(--dsw-alias-bg-layer-1)}.QgejbG_largeFileRecordInvalid{color:var(--dsw-alias-state-error-primary)}.QgejbG_largeFileRecordNo{text-align:right;min-width:4ch;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);user-select:none;flex:none}.QgejbG_largeFileRecordBody{flex:1;min-width:0}.QgejbG_largeFileRecordSummary{text-align:left;width:100%;font:var(--ds-font-family-code);color:var(--dsw-alias-label-primary);white-space:pre;text-overflow:ellipsis;cursor:pointer;background:0 0;border:0;padding:0;font-size:12px;display:block;overflow:hidden}.QgejbG_largeFileRecordSummary:disabled{cursor:default}.QgejbG_largeFileRecordRaw{font:var(--ds-font-family-code);white-space:pre-wrap;word-break:break-all;overflow-wrap:anywhere;margin:2px 0 0;font-size:12px}.QgejbG_largeFileRecordTree{font:var(--ds-font-family-code);margin-top:2px;font-size:12px}.QgejbG_largeFileLines{font:var(--ds-font-family-code);white-space:pre;padding:4px 0;font-size:12px}.QgejbG_largeFileLine{gap:8px;padding:0 8px;display:flex}.QgejbG_largeFileLineNo{text-align:right;min-width:5ch;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none}.QgejbG_largeFileLineText{color:var(--dsw-alias-label-primary);flex:none}.QgejbG_largeFilePager{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);flex:none;align-items:center;gap:4px;padding:2px 8px;display:flex}.QgejbG_largeFilePageLabel{text-align:center;min-width:0;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}";
|
|
8278
|
+
//#region \0dsh-css:/root/projects/DSH-better-sidebar/src/client/sidebar.module.css.mjs
|
|
8279
|
+
const css$8 = "[data-dsh-panel-host]{z-index:25;pointer-events:none;height:100vh;position:fixed;inset:0;overflow:clip}html[data-platform] body>[data-dsh-better-sidebar],[data-dsh-panel-host]{-webkit-app-region:initial!important}[data-dsh-panel-host]>*{-webkit-app-region:no-drag}[data-dockkit-float-resize]{z-index:2}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}.s56VVa_dockFallback{z-index:40;align-items:center;gap:2px;display:inline-flex;position:fixed}.s56VVa_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.s56VVa_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_toggleButton:disabled,.s56VVa_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.s56VVa_panelBody{flex:1;min-width:0;min-height:0;display:flex}.s56VVa_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.s56VVa_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.s56VVa_bottomPanel[data-dragging]{transition:none}.s56VVa_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .s56VVa_panel,body[data-dsh-sidebar-dragging] .s56VVa_bottomPanel{will-change:transform}.s56VVa_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.s56VVa_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.s56VVa_bottomClose{z-index:4;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:3px;right:6px}.s56VVa_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_bottomPanel .s56VVa_tabBar{padding-right:40px}.s56VVa_toggleButton,.s56VVa_tabBar{-webkit-app-region:no-drag}.s56VVa_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s56VVa_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_iconButton:disabled{opacity:.4;cursor:default}.s56VVa_workbench,.s56VVa_split{flex:1;min-width:0;min-height:0;display:flex}.s56VVa_splitRow{flex-direction:row}.s56VVa_splitCol{flex-direction:column}.s56VVa_splitChild{display:flex;position:relative;overflow:hidden}.s56VVa_divider{z-index:3;touch-action:none;flex:none;position:relative}.s56VVa_dividerRow:after,.s56VVa_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.s56VVa_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.s56VVa_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.s56VVa_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.s56VVa_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.s56VVa_divider:hover:after,.s56VVa_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.s56VVa_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.s56VVa_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.s56VVa_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.s56VVa_dropLeft{width:25%;top:0;bottom:0;left:0}.s56VVa_dropRight{width:25%;top:0;bottom:0;right:0}.s56VVa_dropUp{height:25%;top:0;left:0;right:0}.s56VVa_dropDown{height:25%;bottom:0;left:0;right:0}.s56VVa_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.s56VVa_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.s56VVa_chipIcon{flex:none;align-items:center;margin-right:6px;display:inline-flex}.s56VVa_chipUnread{background:var(--dsw-alias-danger);vertical-align:middle;border-radius:50%;width:6px;height:6px;margin-left:6px;display:inline-block}.s56VVa_tabUnreadDot{background:var(--dsw-alias-danger);border-radius:50%;flex:none;width:7px;height:7px}.s56VVa_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.s56VVa_paneTabHidden{display:none}.s56VVa_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));align-content:start;gap:12px;min-height:0;padding:12px;display:grid;overflow:hidden}.s56VVa_paneCard{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-layer-1);min-width:0;min-height:56px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);cursor:pointer;text-align:left;border-radius:24px;flex-direction:row;justify-content:flex-start;align-items:center;gap:14px;padding:14px 20px;display:flex}.s56VVa_paneCard>svg{color:var(--dsw-alias-label-secondary);flex:none}.s56VVa_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l4)}.s56VVa_paneCard:disabled{opacity:.45;cursor:default}.s56VVa_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.s56VVa_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.s56VVa_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.s56VVa_tabList::-webkit-scrollbar{display:none}.s56VVa_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.s56VVa_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.s56VVa_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.s56VVa_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.s56VVa_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.s56VVa_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s56VVa_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.s56VVa_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_tabBarRightActions{flex:0 auto;justify-content:flex-end;align-items:center;gap:2px;min-width:0;padding-right:4px;display:flex;overflow:hidden}.s56VVa_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.s56VVa_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.s56VVa_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.s56VVa_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.s56VVa_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:28px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:s56VVa_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:4px;align-items:center;gap:6px;padding:0 8px;display:flex;position:relative}.s56VVa_explorerRow>svg{flex:none;width:14px;height:14px}.s56VVa_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.s56VVa_explorerRowSelected{background:var(--dsw-alias-interactive-bg-active)}.s56VVa_explorerRowSelected:before{content:\"\";background:var(--dsw-alias-state-business-primary);border-radius:1px;width:2px;position:absolute;top:4px;bottom:4px;left:0}.s56VVa_explorerGitName[data-git-tone=modified]{color:var(--dsw-alias-state-warn-primary)}.s56VVa_explorerGitName[data-git-tone=added],.s56VVa_explorerGitName[data-git-tone=untracked]{color:var(--dsw-alias-state-success-primary)}.s56VVa_explorerGitName[data-git-tone=deleted]{color:var(--dsw-alias-state-error-primary)}.s56VVa_explorerGitName[data-git-tone=renamed]{color:var(--dsw-alias-state-business-primary)}.s56VVa_explorerGitName[data-git-tone=copied]{color:var(--dsw-alias-state-success-primary)}.s56VVa_explorerGitName[data-git-tone=conflict]{color:var(--dsw-alias-state-error-primary)}.s56VVa_explorerDirChanged{color:var(--dsw-alias-state-business-primary)}.s56VVa_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.s56VVa_explorerRowRevealed+.s56VVa_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.s56VVa_explorerRowRevealed:has(+.s56VVa_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.s56VVa_explorerDir{font:var(--dsw-font-xxs-strong-12)}.s56VVa_explorerHidden{opacity:.45}.s56VVa_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.s56VVa_explorerBroken .s56VVa_explorerName{color:var(--dsw-alias-state-error-primary)}.s56VVa_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.s56VVa_explorerRenaming{cursor:text}.s56VVa_explorerRenameInput{box-sizing:border-box;border:1px solid var(--dsw-alias-state-business-primary);background:var(--dsw-alias-bg-layer-1);min-width:0;height:22px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:3px;flex:auto;padding:0 6px}.s56VVa_explorerRenameInput:focus{border-color:var(--dsw-alias-state-business-primary);outline:none}.s56VVa_explorerActionError{box-sizing:border-box;border:1px solid var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-1);border-radius:8px;align-items:flex-start;gap:6px;width:100%;margin-bottom:4px;padding:6px 8px;display:flex}.s56VVa_explorerActionErrorText{overflow-wrap:anywhere;min-width:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex:auto}.s56VVa_explorerSelectionBar{z-index:1;box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);border-radius:4px;align-items:center;gap:6px;width:100%;min-height:28px;margin-top:4px;padding:2px 8px;display:flex;position:sticky;bottom:0}.s56VVa_explorerSelectionText{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);flex:auto;overflow:hidden}.s56VVa_explorerSelectionActions{flex-wrap:wrap;flex:none;justify-content:flex-end;gap:4px;max-width:72%;display:flex}.s56VVa_explorerAppIcon{object-fit:contain;width:14px;height:14px;display:block}.s56VVa_explorerHiddenPane{display:none}.s56VVa_explorerTime{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;margin-left:auto;padding-left:8px}.s56VVa_explorerRow:hover .s56VVa_explorerTime,.s56VVa_explorerRow:focus-within .s56VVa_explorerTime{margin-left:0}.s56VVa_explorerRef,.s56VVa_explorerCopied{margin-left:auto}.s56VVa_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.s56VVa_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_explorerRow:hover .s56VVa_explorerRef,.s56VVa_explorerRow:focus-within .s56VVa_explorerRef{display:inline-flex}.s56VVa_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.s56VVa_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes s56VVa_dsh-row-in{0%{opacity:0}}.s56VVa_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.s56VVa_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover-accent);outline:1px dashed var(--dsw-alias-state-business-primary);outline-offset:-1px}.s56VVa_uploadDropMask{z-index:1001;pointer-events:none;background:color-mix(in srgb, var(--dsw-alias-bg-base) 62%, transparent);animation:s56VVa_dsh-row-in .15s var(--ds-ease-in-out);position:fixed;inset:0}.s56VVa_uploadDropZone{z-index:1002;pointer-events:none;border:2px dashed var(--dsw-alias-border-l2);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 4%, transparent);animation:s56VVa_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.s56VVa_uploadDropHero{flex-direction:column;align-items:center;gap:8px;max-width:100%;padding-top:8px;display:flex}.s56VVa_uploadDropArtPrimary{color:var(--dsw-alias-state-business-primary)}.s56VVa_uploadDropArtAccent{color:var(--dsw-alias-state-business-tertiary)}.s56VVa_uploadDropArtCut{color:var(--dsw-alias-bg-layer-1)}.s56VVa_uploadDropZonePill{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);max-width:100%;height:28px;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);border-radius:999px;align-items:center;gap:6px;padding:0 12px;display:flex}.s56VVa_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.s56VVa_uploadDropChatHint{z-index:1003;pointer-events:none;animation:s56VVa_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.s56VVa_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);flex-direction:column;align-items:center;gap:10px;display:flex}.s56VVa_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:s56VVa_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.s56VVa_uploadOverlayCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-width:240px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:8px;flex-direction:column;gap:10px;padding:16px;display:flex}.s56VVa_uploadOverlayTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);align-items:center;gap:6px;display:flex}.s56VVa_uploadOverlayTitle>svg{flex:none}.s56VVa_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.s56VVa_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.s56VVa_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.s56VVa_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxxs-11);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.s56VVa_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:4px;align-self:flex-end;padding:0 12px}.s56VVa_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.s56VVa_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.s56VVa_editor{flex-direction:column;flex:1;min-height:0;display:flex}.s56VVa_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.s56VVa_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.s56VVa_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.s56VVa_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.s56VVa_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.s56VVa_editorBody{flex:1;min-height:0;display:flex}.s56VVa_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.s56VVa_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.s56VVa_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.s56VVa_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.s56VVa_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.s56VVa_editorTreePanelFull{flex:1}.s56VVa_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.s56VVa_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.s56VVa_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.s56VVa_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.s56VVa_editorSearchResult{box-sizing:border-box;width:100%;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:6px;padding:0 8px;line-height:28px;display:flex;overflow:hidden}.s56VVa_editorSearchResultDir{color:var(--dsw-alias-label-secondary)}.s56VVa_editorSearchResultLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.s56VVa_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.s56VVa_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.s56VVa_editorStatusError{color:var(--dsw-alias-state-error-primary)}.s56VVa_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.s56VVa_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.s56VVa_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.s56VVa_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.s56VVa_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.s56VVa_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.s56VVa_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.s56VVa_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.s56VVa_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.s56VVa_editorBannerAction{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;margin-left:8px;padding:0;text-decoration:underline}.s56VVa_editorGitAdd{color:var(--dsw-alias-state-success-primary)}.s56VVa_editorGitMod{color:var(--dsw-alias-state-warn-primary)}.s56VVa_editorGitDel{color:var(--dsw-alias-state-error-primary)}.s56VVa_editorGitBarGutter{width:2px;min-width:2px}.s56VVa_editorGitBar,.s56VVa_editorGitBarSpacer{width:2px;height:100%}.s56VVa_editorGitBarAdd{background:var(--dsw-alias-state-success-primary)}.s56VVa_editorGitBarMod{background:var(--dsw-alias-state-warn-primary)}.s56VVa_editorGitBarDel{background:var(--dsw-alias-state-error-primary)}.s56VVa_editorBlame{max-width:420px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-primary);padding:4px 8px}.s56VVa_editorBlameHead{color:var(--dsw-alias-label-secondary)}.s56VVa_editorBlameSummary{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin-top:2px}.s56VVa_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.s56VVa_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.s56VVa_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.s56VVa_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.s56VVa_sandboxStatusOff .s56VVa_sandboxDot{background:var(--dsw-alias-state-error-primary)}.s56VVa_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.s56VVa_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.s56VVa_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.s56VVa_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.s56VVa_browser{flex-direction:column;flex:1;min-height:0;display:flex}.s56VVa_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.s56VVa_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.s56VVa_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.s56VVa_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.s56VVa_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.s56VVa_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.s56VVa_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.s56VVa_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.s56VVa_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.s56VVa_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.s56VVa_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.s56VVa_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s56VVa_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.s56VVa_editorCmHidden{display:none}.s56VVa_editorCm .cm-editor{height:100%}.s56VVa_editorCm .cm-scroller{padding:12px 16px}.s56VVa_editorCm .cm-editor.cm-focused{outline:none}.s56VVa_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.s56VVa_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.s56VVa_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.s56VVa_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.s56VVa_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.s56VVa_editorMd .md-code-block:not([data-mermaid-processed])>div:first-child{z-index:auto;position:static}.s56VVa_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.s56VVa_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.s56VVa_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.s56VVa_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.s56VVa_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.s56VVa_mermaidBody svg{max-width:100%;height:auto}.s56VVa_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.s56VVa_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.s56VVa_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.s56VVa_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0;-webkit-app-region:initial!important}.s56VVa_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.s56VVa_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.s56VVa_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s56VVa_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.s56VVa_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.s56VVa_mermaidModalStage svg:active{cursor:grabbing}.s56VVa_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.s56VVa_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-specific-menu);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.s56VVa_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover-solid)}.s56VVa_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.s56VVa_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.s56VVa_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.s56VVa_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.s56VVa_editorPdfFrameBlocked{pointer-events:none}.s56VVa_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.s56VVa_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .s56VVa_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .s56VVa_editorPdfDragShield{pointer-events:auto!important}.s56VVa_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.s56VVa_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.s56VVa_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.s56VVa_nativeTabHost{flex-direction:column;height:100%;min-height:0;display:flex}.s56VVa_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.s56VVa_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.s56VVa_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.s56VVa_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.s56VVa_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.s56VVa_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.s56VVa_toggleButton:focus-visible,.s56VVa_bottomClose:focus-visible,.s56VVa_iconButton:focus-visible,.s56VVa_tab:focus-visible,.s56VVa_tabClose:focus-visible,.s56VVa_tabBarPlus:focus-visible,.s56VVa_paneCard:focus-visible,.s56VVa_explorerRow:focus-visible,.s56VVa_explorerRef:focus-visible,.s56VVa_terminalRetry:focus-visible,.s56VVa_editorModeButton:focus-visible,.s56VVa_editorDownloadLink:focus-visible,.s56VVa_editorPptxButton:focus-visible,.s56VVa_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.s56VVa_bottomPanel,.s56VVa_bottomPanelHidden,.s56VVa_toggleButton,.s56VVa_tab,.s56VVa_tabBarPlus,.s56VVa_paneCard,.s56VVa_explorerRow,.s56VVa_divider,.s56VVa_dividerRow:after,.s56VVa_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.s56VVa_tab{min-width:48px;max-width:128px}}.s56VVa_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.s56VVa_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.s56VVa_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.s56VVa_openWithPin{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:5px;flex:none;justify-content:center;align-items:center;display:inline-flex}.s56VVa_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.s56VVa_editorHtmlBlock{margin:8px 0}.s56VVa_editorHtmlBlock img,.s56VVa_editorHtmlBlock video{max-width:100%}.s56VVa_editorHtmlBlock details{margin:4px 0;padding:4px 0}.s56VVa_editorHtmlBlock summary,.s56VVa_editorMd details>summary{cursor:pointer}.s56VVa_tocBar{z-index:7;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.s56VVa_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.s56VVa_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.s56VVa_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.s56VVa_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s56VVa_tocItem[data-level=\"2\"]{padding-left:18px}.s56VVa_tocItem[data-level=\"3\"]{padding-left:28px}.s56VVa_tocItem[data-level=\"4\"]{padding-left:38px}.s56VVa_tocItem[data-level=\"5\"]{padding-left:48px}.s56VVa_tocItem[data-level=\"6\"]{padding-left:58px}.s56VVa_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.s56VVa_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes s56VVa_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.s56VVa_tocFlash{border-radius:4px;animation:1.2s ease-out s56VVa_dsh-toc-flash}.s56VVa_largeFile{flex-direction:column;flex:1;min-height:0;display:flex}.s56VVa_largeFileNotice{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.s56VVa_largeFileDownload{color:inherit;text-decoration:underline}.s56VVa_largeFileNoticeAction{font:inherit;color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:4px;margin-left:auto;padding:0 6px}.s56VVa_largeFileNoticeAction:disabled{opacity:.5;cursor:default}.s56VVa_largeFileBody{flex:1;min-height:0;overflow:auto}.s56VVa_largeFileRecords{padding:4px 0}.s56VVa_largeFileList{margin:0;padding:0;list-style:none}.s56VVa_largeFileRecord{gap:8px;padding:2px 8px;display:flex}.s56VVa_largeFileRecordExpanded{background:var(--dsw-alias-bg-layer-1)}.s56VVa_largeFileRecordInvalid{color:var(--dsw-alias-state-error-primary)}.s56VVa_largeFileRecordNo{text-align:right;min-width:4ch;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);user-select:none;flex:none}.s56VVa_largeFileRecordBody{flex:1;min-width:0}.s56VVa_largeFileRecordSummary{text-align:left;width:100%;font:var(--ds-font-family-code);color:var(--dsw-alias-label-primary);white-space:pre;text-overflow:ellipsis;cursor:pointer;background:0 0;border:0;padding:0;font-size:12px;display:block;overflow:hidden}.s56VVa_largeFileRecordSummary:disabled{cursor:default}.s56VVa_largeFileRecordRaw{font:var(--ds-font-family-code);white-space:pre-wrap;word-break:break-all;overflow-wrap:anywhere;margin:2px 0 0;font-size:12px}.s56VVa_largeFileRecordTree{font:var(--ds-font-family-code);margin-top:2px;font-size:12px}.s56VVa_largeFileLines{font:var(--ds-font-family-code);white-space:pre;padding:4px 0;font-size:12px}.s56VVa_largeFileLine{gap:8px;padding:0 8px;display:flex}.s56VVa_largeFileLineNo{text-align:right;min-width:5ch;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none}.s56VVa_largeFileLineText{color:var(--dsw-alias-label-primary);flex:none}.s56VVa_largeFilePager{border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);flex:none;align-items:center;gap:4px;padding:2px 8px;display:flex}.s56VVa_largeFilePageLabel{text-align:center;min-width:0;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.s56VVa_explorerMuted{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);cursor:default}[data-sidebar-right-guide]{grid-template-columns:repeat(auto-fill,minmax(96px,120px))!important;place-content:center!important;place-items:stretch stretch!important;gap:12px!important;padding:16px!important;display:grid!important;overflow:auto!important}[data-sidebar-right-guide]>div{aspect-ratio:1!important;flex:none!important;width:100%!important;min-width:0!important;max-width:none!important;min-height:0!important;display:flex!important}[data-sidebar-right-guide]>div [data-sidebar-right-guide-entry]{box-sizing:border-box!important;text-align:center!important;flex-direction:column!important;justify-content:center!important;align-items:center!important;gap:8px!important;width:100%!important;height:100%!important;padding:12px!important}[data-sidebar-right-guide] kbd,[data-sidebar-right-guide] span:has(>kbd){display:none!important}[data-sidebar-right-guide]>div [data-sidebar-right-guide-entry]>span:last-child{flex:0 auto!important;align-items:center!important;width:100%!important;height:auto!important;min-height:0!important}[data-sidebar-right-guide] [data-sidebar-right-guide-entry=terminal]{position:relative!important}[data-sidebar-right-guide] [data-sidebar-right-guide-entry=terminal] [class*=titleRow]{flex-flow:row!important;justify-content:center!important;align-items:center!important;gap:2px!important;height:20px!important;min-height:0!important;display:flex!important;position:static!important}[data-sidebar-right-guide] [data-sidebar-right-guide-entry=terminal] [class*=menu],[data-sidebar-right-guide] [data-sidebar-right-guide-entry=terminal] [class*=trigger],[data-sidebar-right-guide] [data-sidebar-right-guide-entry=terminal] button:not([class*=main]){z-index:1!important;flex:0 0 20px!important;width:20px!important;height:20px!important;min-height:0!important;padding:0!important;position:static!important;top:auto!important;bottom:auto!important;right:auto!important;transform:none!important}[data-sidebar-right-guide] [data-sidebar-right-guide-entry=terminal] [class*=title]{white-space:nowrap!important;text-overflow:ellipsis!important;overflow:hidden!important}[data-sidebar-right-guide]>div [data-sidebar-right-guide-entry] span{white-space:normal!important;text-overflow:clip!important;min-width:0!important;max-width:100%!important;overflow:visible!important}[data-sidebar-right-guide]>span:first-child{grid-column:1/-1;justify-self:center;margin:4px 0 8px}@media (width<=640px){[data-sidebar-right-guide]{grid-template-columns:repeat(auto-fill,minmax(88px,108px))!important;padding:12px!important}}[data-sidebar-right-guide-entry=terminal]{box-sizing:border-box!important;flex-direction:row!important;justify-content:center!important;align-self:stretch!important;align-items:center!important;gap:6px!important;width:100%!important;height:100%!important;min-height:0!important;padding:8px!important;display:flex!important;overflow:hidden!important}[data-sidebar-right-guide-entry=terminal]>span{flex:0 auto!important}[data-sidebar-right-guide-entry=terminal] [class*=text]{flex-direction:column!important;justify-content:center!important;align-items:center!important;gap:1px!important;min-width:0!important;display:flex!important}[data-sidebar-right-guide-entry=terminal] [class*=titleRow]{box-sizing:border-box!important;flex-flow:row!important;justify-content:center!important;align-items:center!important;gap:0!important;width:100%!important;height:18px!important;min-height:0!important;max-height:18px!important;padding:0 20px!important;display:flex!important;position:relative!important}[data-sidebar-right-guide-entry=terminal] [class*=title]{text-overflow:clip!important;white-space:nowrap!important;flex:none!important;max-width:none!important;font-size:12px!important;line-height:1.2!important;overflow:visible!important}[data-sidebar-right-guide-entry=terminal] [class*=trigger]{z-index:1!important;flex:0 0 16px!important;width:16px!important;min-width:16px!important;height:16px!important;min-height:16px!important;padding:0!important;position:absolute!important;top:50%!important;right:0!important;transform:translateY(-50%)!important}[data-sidebar-right-guide-entry=terminal] [class*=trigger] svg{width:12px!important;height:12px!important}[data-sidebar-right-guide-entry=terminal] [class*=description]{text-overflow:ellipsis!important;white-space:nowrap!important;max-width:100%!important;overflow:hidden!important}[data-sidebar-right-guide-entry]:not([data-sidebar-right-guide-entry=terminal]){justify-content:center!important;align-items:center!important}[data-sidebar-right-guide-entry]:not([data-sidebar-right-guide-entry=terminal])>span:last-child{flex-direction:column!important;justify-content:center!important;align-self:center!important;align-items:center!important;display:flex!important}[data-sidebar-right-guide-entry]:not([data-sidebar-right-guide-entry=terminal]){box-sizing:border-box!important;flex-direction:column!important;justify-content:center!important;align-self:stretch!important;align-items:center!important;width:100%!important;height:100%!important;display:flex!important}";
|
|
8030
8280
|
const tagId$8 = "@sparkelf/dsh-knowledge-base/sidebar.module.css";
|
|
8031
8281
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$8) + "]") === null) {
|
|
8032
8282
|
const tag = document.createElement("style");
|
|
@@ -8036,233 +8286,234 @@ window.__ModuleLoader__.load({
|
|
|
8036
8286
|
document.head.appendChild(tag);
|
|
8037
8287
|
}
|
|
8038
8288
|
var sidebar_module_css_default = {
|
|
8039
|
-
"
|
|
8040
|
-
"
|
|
8041
|
-
"
|
|
8042
|
-
"
|
|
8043
|
-
"
|
|
8044
|
-
"
|
|
8045
|
-
"
|
|
8046
|
-
"
|
|
8047
|
-
"
|
|
8048
|
-
"
|
|
8049
|
-
"
|
|
8050
|
-
"
|
|
8051
|
-
"
|
|
8052
|
-
"
|
|
8053
|
-
"
|
|
8054
|
-
"
|
|
8055
|
-
"
|
|
8056
|
-
"
|
|
8057
|
-
"
|
|
8058
|
-
"
|
|
8059
|
-
"
|
|
8060
|
-
"
|
|
8061
|
-
"
|
|
8062
|
-
"
|
|
8063
|
-
"
|
|
8064
|
-
"
|
|
8065
|
-
"
|
|
8066
|
-
"
|
|
8067
|
-
"
|
|
8068
|
-
"
|
|
8069
|
-
"
|
|
8070
|
-
"
|
|
8071
|
-
"
|
|
8072
|
-
"
|
|
8073
|
-
"
|
|
8074
|
-
"
|
|
8075
|
-
"
|
|
8076
|
-
"
|
|
8077
|
-
"
|
|
8078
|
-
"
|
|
8079
|
-
"
|
|
8080
|
-
"
|
|
8081
|
-
"
|
|
8082
|
-
"
|
|
8083
|
-
"
|
|
8084
|
-
"
|
|
8085
|
-
"
|
|
8086
|
-
"
|
|
8087
|
-
"
|
|
8088
|
-
"
|
|
8089
|
-
"
|
|
8090
|
-
"
|
|
8091
|
-
"
|
|
8092
|
-
"
|
|
8093
|
-
"
|
|
8094
|
-
"
|
|
8095
|
-
"
|
|
8096
|
-
"
|
|
8097
|
-
"
|
|
8098
|
-
"
|
|
8099
|
-
"
|
|
8100
|
-
"
|
|
8101
|
-
"
|
|
8102
|
-
"
|
|
8103
|
-
"
|
|
8104
|
-
"
|
|
8105
|
-
"
|
|
8106
|
-
"
|
|
8107
|
-
"
|
|
8108
|
-
"
|
|
8109
|
-
"
|
|
8110
|
-
"
|
|
8111
|
-
"
|
|
8112
|
-
"
|
|
8113
|
-
"
|
|
8114
|
-
"
|
|
8115
|
-
"
|
|
8116
|
-
"
|
|
8117
|
-
"
|
|
8118
|
-
"
|
|
8119
|
-
"
|
|
8120
|
-
"
|
|
8121
|
-
"
|
|
8122
|
-
"
|
|
8123
|
-
"
|
|
8124
|
-
"
|
|
8125
|
-
"
|
|
8126
|
-
"
|
|
8127
|
-
"
|
|
8128
|
-
"
|
|
8129
|
-
"
|
|
8130
|
-
"
|
|
8131
|
-
"
|
|
8132
|
-
"
|
|
8133
|
-
"
|
|
8134
|
-
"
|
|
8135
|
-
"
|
|
8136
|
-
"
|
|
8137
|
-
"
|
|
8138
|
-
"
|
|
8139
|
-
"
|
|
8140
|
-
"
|
|
8141
|
-
"
|
|
8142
|
-
"
|
|
8143
|
-
"
|
|
8144
|
-
"
|
|
8145
|
-
"
|
|
8146
|
-
"
|
|
8147
|
-
"
|
|
8148
|
-
"
|
|
8149
|
-
"
|
|
8150
|
-
"
|
|
8151
|
-
"
|
|
8152
|
-
"
|
|
8153
|
-
"
|
|
8154
|
-
"
|
|
8155
|
-
"
|
|
8156
|
-
"
|
|
8157
|
-
"
|
|
8158
|
-
"
|
|
8159
|
-
"
|
|
8160
|
-
"
|
|
8161
|
-
"
|
|
8162
|
-
"
|
|
8163
|
-
"
|
|
8164
|
-
"
|
|
8165
|
-
"
|
|
8166
|
-
"
|
|
8167
|
-
"
|
|
8168
|
-
"
|
|
8169
|
-
"
|
|
8170
|
-
"
|
|
8171
|
-
"
|
|
8172
|
-
"
|
|
8173
|
-
"
|
|
8174
|
-
"
|
|
8175
|
-
"
|
|
8176
|
-
"
|
|
8177
|
-
"
|
|
8178
|
-
"
|
|
8179
|
-
"
|
|
8180
|
-
"
|
|
8181
|
-
"
|
|
8182
|
-
"
|
|
8183
|
-
"
|
|
8184
|
-
"
|
|
8185
|
-
"
|
|
8186
|
-
"
|
|
8187
|
-
"
|
|
8188
|
-
"
|
|
8189
|
-
"
|
|
8190
|
-
"
|
|
8191
|
-
"
|
|
8192
|
-
"
|
|
8193
|
-
"
|
|
8194
|
-
"
|
|
8195
|
-
"
|
|
8196
|
-
"
|
|
8197
|
-
"
|
|
8198
|
-
"
|
|
8199
|
-
"
|
|
8200
|
-
"
|
|
8201
|
-
"
|
|
8202
|
-
"
|
|
8203
|
-
"
|
|
8204
|
-
"
|
|
8205
|
-
"
|
|
8206
|
-
"
|
|
8207
|
-
"
|
|
8208
|
-
"
|
|
8209
|
-
"
|
|
8210
|
-
"
|
|
8211
|
-
"
|
|
8212
|
-
"
|
|
8213
|
-
"
|
|
8214
|
-
"
|
|
8215
|
-
"
|
|
8216
|
-
"
|
|
8217
|
-
"
|
|
8218
|
-
"
|
|
8219
|
-
"
|
|
8220
|
-
"
|
|
8221
|
-
"
|
|
8222
|
-
"
|
|
8223
|
-
"
|
|
8224
|
-
"
|
|
8225
|
-
"
|
|
8226
|
-
"
|
|
8227
|
-
"
|
|
8228
|
-
"
|
|
8229
|
-
"
|
|
8230
|
-
"
|
|
8231
|
-
"
|
|
8232
|
-
"
|
|
8233
|
-
"
|
|
8234
|
-
"
|
|
8235
|
-
"
|
|
8236
|
-
"
|
|
8237
|
-
"
|
|
8238
|
-
"
|
|
8239
|
-
"
|
|
8240
|
-
"
|
|
8241
|
-
"
|
|
8242
|
-
"
|
|
8243
|
-
"
|
|
8244
|
-
"
|
|
8245
|
-
"
|
|
8246
|
-
"
|
|
8247
|
-
"
|
|
8248
|
-
"
|
|
8249
|
-
"
|
|
8250
|
-
"
|
|
8251
|
-
"
|
|
8252
|
-
"
|
|
8253
|
-
"
|
|
8254
|
-
"
|
|
8255
|
-
"
|
|
8256
|
-
"
|
|
8257
|
-
"
|
|
8258
|
-
"
|
|
8259
|
-
"
|
|
8260
|
-
"
|
|
8261
|
-
"
|
|
8262
|
-
"
|
|
8289
|
+
"uploadDropZone": "s56VVa_uploadDropZone",
|
|
8290
|
+
"editorTreeToggleActive": "s56VVa_editorTreeToggleActive",
|
|
8291
|
+
"editorSearchResultDir": "s56VVa_editorSearchResultDir",
|
|
8292
|
+
"dropDown": "s56VVa_dropDown",
|
|
8293
|
+
"panelBody": "s56VVa_panelBody",
|
|
8294
|
+
"chipIcon": "s56VVa_chipIcon",
|
|
8295
|
+
"browserBlockedTitle": "s56VVa_browserBlockedTitle",
|
|
8296
|
+
"uploadDropZonePill": "s56VVa_uploadDropZonePill",
|
|
8297
|
+
"explorerActionErrorText": "s56VVa_explorerActionErrorText",
|
|
8298
|
+
"uploadDropArtPrimary": "s56VVa_uploadDropArtPrimary",
|
|
8299
|
+
"largeFileRecordNo": "s56VVa_largeFileRecordNo",
|
|
8300
|
+
"dropCenter": "s56VVa_dropCenter",
|
|
8301
|
+
"explorerRow": "s56VVa_explorerRow",
|
|
8302
|
+
"pane": "s56VVa_pane",
|
|
8303
|
+
"uploadDropZoneText": "s56VVa_uploadDropZoneText",
|
|
8304
|
+
"tocButton": "s56VVa_tocButton",
|
|
8305
|
+
"terminalRetry": "s56VVa_terminalRetry",
|
|
8306
|
+
"largeFileRecordTree": "s56VVa_largeFileRecordTree",
|
|
8307
|
+
"boundaryError": "s56VVa_boundaryError",
|
|
8308
|
+
"largeFileLineNo": "s56VVa_largeFileLineNo",
|
|
8309
|
+
"paneCard": "s56VVa_paneCard",
|
|
8310
|
+
"editorHeader": "s56VVa_editorHeader",
|
|
8311
|
+
"editorPdfToolbar": "s56VVa_editorPdfToolbar",
|
|
8312
|
+
"editorBlameHead": "s56VVa_editorBlameHead",
|
|
8313
|
+
"paneTab": "s56VVa_paneTab",
|
|
8314
|
+
"tocItemText": "s56VVa_tocItemText",
|
|
8315
|
+
"mermaidMarkdown": "s56VVa_mermaidMarkdown",
|
|
8316
|
+
"editorSearchHint": "s56VVa_editorSearchHint",
|
|
8317
|
+
"editorHtmlBlock": "s56VVa_editorHtmlBlock",
|
|
8318
|
+
"tocItemLevel": "s56VVa_tocItemLevel",
|
|
8319
|
+
"gitDiffTabTitle": "s56VVa_gitDiffTabTitle",
|
|
8320
|
+
"openWithLabel": "s56VVa_openWithLabel",
|
|
8321
|
+
"editorBanner": "s56VVa_editorBanner",
|
|
8322
|
+
"paneContent": "s56VVa_paneContent",
|
|
8323
|
+
"explorerRowSelected": "s56VVa_explorerRowSelected",
|
|
8324
|
+
"split": "s56VVa_split",
|
|
8325
|
+
"selectionPopup": "s56VVa_selectionPopup",
|
|
8326
|
+
"orphanedType": "s56VVa_orphanedType",
|
|
8327
|
+
"tocFlash": "s56VVa_tocFlash",
|
|
8328
|
+
"dropUp": "s56VVa_dropUp",
|
|
8329
|
+
"mermaidInfo": "s56VVa_mermaidInfo",
|
|
8330
|
+
"sandboxDot": "s56VVa_sandboxDot",
|
|
8331
|
+
"editorStatus": "s56VVa_editorStatus",
|
|
8332
|
+
"explorerRoot": "s56VVa_explorerRoot",
|
|
8333
|
+
"editorPdfFrame": "s56VVa_editorPdfFrame",
|
|
8334
|
+
"editorTreePanelFull": "s56VVa_editorTreePanelFull",
|
|
8335
|
+
"editorBlame": "s56VVa_editorBlame",
|
|
8336
|
+
"tocItem": "s56VVa_tocItem",
|
|
8337
|
+
"splitRow": "s56VVa_splitRow",
|
|
8338
|
+
"gitDiffTabHeader": "s56VVa_gitDiffTabHeader",
|
|
8339
|
+
"largeFile": "s56VVa_largeFile",
|
|
8340
|
+
"editorSearchResult": "s56VVa_editorSearchResult",
|
|
8341
|
+
"editorBlameSummary": "s56VVa_editorBlameSummary",
|
|
8342
|
+
"editorTreeDock": "s56VVa_editorTreeDock",
|
|
8343
|
+
"explorerRef": "s56VVa_explorerRef",
|
|
8344
|
+
"explorerHidden": "s56VVa_explorerHidden",
|
|
8345
|
+
"editorGitBarMod": "s56VVa_editorGitBarMod",
|
|
8346
|
+
"gitPlaceholder": "s56VVa_gitPlaceholder",
|
|
8347
|
+
"sandboxAction": "s56VVa_sandboxAction",
|
|
8348
|
+
"paneDrop": "s56VVa_paneDrop",
|
|
8349
|
+
"editorGitBar": "s56VVa_editorGitBar",
|
|
8350
|
+
"explorerGitName": "s56VVa_explorerGitName",
|
|
8351
|
+
"largeFileRecordInvalid": "s56VVa_largeFileRecordInvalid",
|
|
8352
|
+
"dockFallback": "s56VVa_dockFallback",
|
|
8353
|
+
"tabClose": "s56VVa_tabClose",
|
|
8354
|
+
"uploadOverlayCard": "s56VVa_uploadOverlayCard",
|
|
8355
|
+
"browserFrame": "s56VVa_browserFrame",
|
|
8356
|
+
"gitEmpty": "s56VVa_gitEmpty",
|
|
8357
|
+
"tocPanel": "s56VVa_tocPanel",
|
|
8358
|
+
"largeFileLine": "s56VVa_largeFileLine",
|
|
8359
|
+
"editorStatusError": "s56VVa_editorStatusError",
|
|
8360
|
+
"explorerName": "s56VVa_explorerName",
|
|
8361
|
+
"tab": "s56VVa_tab",
|
|
8362
|
+
"editorError": "s56VVa_editorError",
|
|
8363
|
+
"mermaidModalHint": "s56VVa_mermaidModalHint",
|
|
8364
|
+
"editorPdfFrameBlocked": "s56VVa_editorPdfFrameBlocked",
|
|
8365
|
+
"dirtyDot": "s56VVa_dirtyDot",
|
|
8366
|
+
"uploadDropChatCard": "s56VVa_uploadDropChatCard",
|
|
8367
|
+
"paneTabHidden": "s56VVa_paneTabHidden",
|
|
8368
|
+
"editorCmHidden": "s56VVa_editorCmHidden",
|
|
8369
|
+
"explorerSelectionBar": "s56VVa_explorerSelectionBar",
|
|
8370
|
+
"explorerCopied": "s56VVa_explorerCopied",
|
|
8371
|
+
"editorTreeResize": "s56VVa_editorTreeResize",
|
|
8372
|
+
"sandboxStatus": "s56VVa_sandboxStatus",
|
|
8373
|
+
"browserMessage": "s56VVa_browserMessage",
|
|
8374
|
+
"openWithPin": "s56VVa_openWithPin",
|
|
8375
|
+
"editorGitMod": "s56VVa_editorGitMod",
|
|
8376
|
+
"tabList": "s56VVa_tabList",
|
|
8377
|
+
"explorerError": "s56VVa_explorerError",
|
|
8378
|
+
"uploadOverlay": "s56VVa_uploadOverlay",
|
|
8379
|
+
"explorerDir": "s56VVa_explorerDir",
|
|
8380
|
+
"iconButton": "s56VVa_iconButton",
|
|
8381
|
+
"editorPdfStage": "s56VVa_editorPdfStage",
|
|
8382
|
+
"editorMd": "s56VVa_editorMd",
|
|
8383
|
+
"browserBlockedActions": "s56VVa_browserBlockedActions",
|
|
8384
|
+
"editorGitBarGutter": "s56VVa_editorGitBarGutter",
|
|
8385
|
+
"editorGitBarAdd": "s56VVa_editorGitBarAdd",
|
|
8386
|
+
"explorerSymlink": "s56VVa_explorerSymlink",
|
|
8387
|
+
"editorPlaceholder": "s56VVa_editorPlaceholder",
|
|
8388
|
+
"explorerTime": "s56VVa_explorerTime",
|
|
8389
|
+
"tabBarRightActions": "s56VVa_tabBarRightActions",
|
|
8390
|
+
"editorGitAdd": "s56VVa_editorGitAdd",
|
|
8391
|
+
"mermaidCode": "s56VVa_mermaidCode",
|
|
8392
|
+
"mermaidModalToolbar": "s56VVa_mermaidModalToolbar",
|
|
8393
|
+
"tabBarPlus": "s56VVa_tabBarPlus",
|
|
8394
|
+
"editorMain": "s56VVa_editorMain",
|
|
8395
|
+
"uploadOverlayTitle": "s56VVa_uploadOverlayTitle",
|
|
8396
|
+
"bottomPanel": "s56VVa_bottomPanel",
|
|
8397
|
+
"editorModeToggle": "s56VVa_editorModeToggle",
|
|
8398
|
+
"editorBody": "s56VVa_editorBody",
|
|
8399
|
+
"browserBlockedDesc": "s56VVa_browserBlockedDesc",
|
|
8400
|
+
"panel": "s56VVa_panel",
|
|
8401
|
+
"editorPdfDragShieldActive": "s56VVa_editorPdfDragShieldActive",
|
|
8402
|
+
"editorGitBarDel": "s56VVa_editorGitBarDel",
|
|
8403
|
+
"tabUnreadDot": "s56VVa_tabUnreadDot",
|
|
8404
|
+
"tabBoundaryError": "s56VVa_tabBoundaryError",
|
|
8405
|
+
"editorBannerAction": "s56VVa_editorBannerAction",
|
|
8406
|
+
"splitChild": "s56VVa_splitChild",
|
|
8407
|
+
"largeFileNoticeAction": "s56VVa_largeFileNoticeAction",
|
|
8408
|
+
"dropLeft": "s56VVa_dropLeft",
|
|
8409
|
+
"editorPathInput": "s56VVa_editorPathInput",
|
|
8410
|
+
"mermaidModalButton": "s56VVa_mermaidModalButton",
|
|
8411
|
+
"tabBadge": "s56VVa_tabBadge",
|
|
8412
|
+
"toggleButton": "s56VVa_toggleButton",
|
|
8413
|
+
"editorBinary": "s56VVa_editorBinary",
|
|
8414
|
+
"explorerRowDropTarget": "s56VVa_explorerRowDropTarget",
|
|
8415
|
+
"uploadDropChatHint": "s56VVa_uploadDropChatHint",
|
|
8416
|
+
"bottomClose": "s56VVa_bottomClose",
|
|
8417
|
+
"uploadDropHero": "s56VVa_uploadDropHero",
|
|
8418
|
+
"largeFilePageLabel": "s56VVa_largeFilePageLabel",
|
|
8419
|
+
"largeFilePager": "s56VVa_largeFilePager",
|
|
8420
|
+
"tabBar": "s56VVa_tabBar",
|
|
8421
|
+
"tocBar": "s56VVa_tocBar",
|
|
8422
|
+
"editorModeActive": "s56VVa_editorModeActive",
|
|
8423
|
+
"explorerSelectionActions": "s56VVa_explorerSelectionActions",
|
|
8424
|
+
"largeFileList": "s56VVa_largeFileList",
|
|
8425
|
+
"uploadDropArtAccent": "s56VVa_uploadDropArtAccent",
|
|
8426
|
+
"explorerMuted": "s56VVa_explorerMuted",
|
|
8427
|
+
"largeFileRecordBody": "s56VVa_largeFileRecordBody",
|
|
8428
|
+
"uploadDropMask": "s56VVa_uploadDropMask",
|
|
8429
|
+
"browserInput": "s56VVa_browserInput",
|
|
8430
|
+
"bottomPanelHidden": "s56VVa_bottomPanelHidden",
|
|
8431
|
+
"openWithChevron": "s56VVa_openWithChevron",
|
|
8432
|
+
"mermaidHeader": "s56VVa_mermaidHeader",
|
|
8433
|
+
"largeFileBody": "s56VVa_largeFileBody",
|
|
8434
|
+
"editor": "s56VVa_editor",
|
|
8435
|
+
"explorerRenameInput": "s56VVa_explorerRenameInput",
|
|
8436
|
+
"largeFileLineText": "s56VVa_largeFileLineText",
|
|
8437
|
+
"paneEmptyCards": "s56VVa_paneEmptyCards",
|
|
8438
|
+
"editorSearchResultLabel": "s56VVa_editorSearchResultLabel",
|
|
8439
|
+
"uploadOverlayStatus": "s56VVa_uploadOverlayStatus",
|
|
8440
|
+
"sandboxStatusOn": "s56VVa_sandboxStatusOn",
|
|
8441
|
+
"explorerRowRevealed": "s56VVa_explorerRowRevealed",
|
|
8442
|
+
"openWithPinActive": "s56VVa_openWithPinActive",
|
|
8443
|
+
"mermaidError": "s56VVa_mermaidError",
|
|
8444
|
+
"browserBlockedButton": "s56VVa_browserBlockedButton",
|
|
8445
|
+
"largeFileRecordExpanded": "s56VVa_largeFileRecordExpanded",
|
|
8446
|
+
"editorSearchInput": "s56VVa_editorSearchInput",
|
|
8447
|
+
"chipUnread": "s56VVa_chipUnread",
|
|
8448
|
+
"gitDiffTab": "s56VVa_gitDiffTab",
|
|
8449
|
+
"dsh-toc-flash": "s56VVa_dsh-toc-flash",
|
|
8450
|
+
"explorerHiddenPane": "s56VVa_explorerHiddenPane",
|
|
8451
|
+
"dividerActive": "s56VVa_dividerActive",
|
|
8452
|
+
"browserBar": "s56VVa_browserBar",
|
|
8453
|
+
"mermaidModalStage": "s56VVa_mermaidModalStage",
|
|
8454
|
+
"explorerSelectionText": "s56VVa_explorerSelectionText",
|
|
8455
|
+
"explorerRenaming": "s56VVa_explorerRenaming",
|
|
8456
|
+
"editorDocxZoomRange": "s56VVa_editorDocxZoomRange",
|
|
8457
|
+
"uploadOverlayProgressFill": "s56VVa_uploadOverlayProgressFill",
|
|
8458
|
+
"editorPdf": "s56VVa_editorPdf",
|
|
8459
|
+
"tabBarDrop": "s56VVa_tabBarDrop",
|
|
8460
|
+
"editorGitDel": "s56VVa_editorGitDel",
|
|
8461
|
+
"editorGitBarSpacer": "s56VVa_editorGitBarSpacer",
|
|
8462
|
+
"dropOverlay": "s56VVa_dropOverlay",
|
|
8463
|
+
"uploadDropArtCut": "s56VVa_uploadDropArtCut",
|
|
8464
|
+
"explorerActionError": "s56VVa_explorerActionError",
|
|
8465
|
+
"browserStart": "s56VVa_browserStart",
|
|
8466
|
+
"editorTreePanel": "s56VVa_editorTreePanel",
|
|
8467
|
+
"browserBlocked": "s56VVa_browserBlocked",
|
|
8468
|
+
"tabTitle": "s56VVa_tabTitle",
|
|
8469
|
+
"explorerBody": "s56VVa_explorerBody",
|
|
8470
|
+
"editorCm": "s56VVa_editorCm",
|
|
8471
|
+
"editorPdfDragShield": "s56VVa_editorPdfDragShield",
|
|
8472
|
+
"bottomResizeActive": "s56VVa_bottomResizeActive",
|
|
8473
|
+
"divider": "s56VVa_divider",
|
|
8474
|
+
"explorerDirChanged": "s56VVa_explorerDirChanged",
|
|
8475
|
+
"uploadOverlayCancel": "s56VVa_uploadOverlayCancel",
|
|
8476
|
+
"sandboxStatusOff": "s56VVa_sandboxStatusOff",
|
|
8477
|
+
"dividerCol": "s56VVa_dividerCol",
|
|
8478
|
+
"tabActive": "s56VVa_tabActive",
|
|
8479
|
+
"sandboxStatusText": "s56VVa_sandboxStatusText",
|
|
8480
|
+
"editorModeButton": "s56VVa_editorModeButton",
|
|
8481
|
+
"mermaidCopy": "s56VVa_mermaidCopy",
|
|
8482
|
+
"browser": "s56VVa_browser",
|
|
8483
|
+
"editorDownloadLink": "s56VVa_editorDownloadLink",
|
|
8484
|
+
"mermaidBody": "s56VVa_mermaidBody",
|
|
8485
|
+
"editorTreeSearch": "s56VVa_editorTreeSearch",
|
|
8486
|
+
"explorerHeader": "s56VVa_explorerHeader",
|
|
8487
|
+
"editorHtml": "s56VVa_editorHtml",
|
|
8488
|
+
"dsh-row-in": "s56VVa_dsh-row-in",
|
|
8489
|
+
"workbench": "s56VVa_workbench",
|
|
8490
|
+
"explorerEmpty": "s56VVa_explorerEmpty",
|
|
8491
|
+
"bottomResize": "s56VVa_bottomResize",
|
|
8492
|
+
"splitCol": "s56VVa_splitCol",
|
|
8493
|
+
"explorerAppIcon": "s56VVa_explorerAppIcon",
|
|
8494
|
+
"nativeTabHost": "s56VVa_nativeTabHost",
|
|
8495
|
+
"largeFileDownload": "s56VVa_largeFileDownload",
|
|
8496
|
+
"largeFileRecordSummary": "s56VVa_largeFileRecordSummary",
|
|
8497
|
+
"uploadOverlayProgress": "s56VVa_uploadOverlayProgress",
|
|
8498
|
+
"editorTitle": "s56VVa_editorTitle",
|
|
8499
|
+
"editorPptxButton": "s56VVa_editorPptxButton",
|
|
8500
|
+
"largeFileNotice": "s56VVa_largeFileNotice",
|
|
8501
|
+
"editorBinaryNotice": "s56VVa_editorBinaryNotice",
|
|
8502
|
+
"mermaidWrap": "s56VVa_mermaidWrap",
|
|
8503
|
+
"mermaidModal": "s56VVa_mermaidModal",
|
|
8504
|
+
"dividerRow": "s56VVa_dividerRow",
|
|
8505
|
+
"gitError": "s56VVa_gitError",
|
|
8506
|
+
"largeFileRecord": "s56VVa_largeFileRecord",
|
|
8507
|
+
"dropRight": "s56VVa_dropRight",
|
|
8508
|
+
"largeFileRecords": "s56VVa_largeFileRecords",
|
|
8509
|
+
"largeFileLines": "s56VVa_largeFileLines",
|
|
8510
|
+
"explorerBroken": "s56VVa_explorerBroken",
|
|
8511
|
+
"largeFileRecordRaw": "s56VVa_largeFileRecordRaw",
|
|
8512
|
+
"explorer": "s56VVa_explorer",
|
|
8513
|
+
"openWithName": "s56VVa_openWithName"
|
|
8263
8514
|
};
|
|
8264
8515
|
//#endregion
|
|
8265
|
-
//#region
|
|
8516
|
+
//#region ../../../DSH-better-sidebar/src/client/FileTree.tsx
|
|
8266
8517
|
/**
|
|
8267
8518
|
* The controlled file tree behind the files window's tree panel (TreePanel
|
|
8268
8519
|
* wraps it with the search box): a lazy VSCode-style tree rooted at the
|
|
@@ -8343,6 +8594,13 @@ window.__ModuleLoader__.load({
|
|
|
8343
8594
|
}
|
|
8344
8595
|
/** How long the row's "copied" label stays after a successful write. */
|
|
8345
8596
|
const COPIED_MS = 1200;
|
|
8597
|
+
/**
|
|
8598
|
+
* How many per-path open-with listings one tree keeps. The host answers from
|
|
8599
|
+
* the machine's own application registry, so a handful covers any realistic
|
|
8600
|
+
* menu session; the cap is what keeps the map from growing for the life of the
|
|
8601
|
+
* page (the host keeps every visited tab body mounted).
|
|
8602
|
+
*/
|
|
8603
|
+
const APPS_CACHE_MAX = 32;
|
|
8346
8604
|
/** One changed row's tooltip word (the badge's status vocabulary). */
|
|
8347
8605
|
function gitToneLabel(tone) {
|
|
8348
8606
|
switch (tone) {
|
|
@@ -8689,11 +8947,14 @@ window.__ModuleLoader__.load({
|
|
|
8689
8947
|
return armed !== void 0 && live !== void 0 && armed.sessionId === live.sessionId && armed.cwd === live.cwd;
|
|
8690
8948
|
}
|
|
8691
8949
|
function FileTree(props) {
|
|
8692
|
-
const { sessionId, cwd, expanded, revealed, onOpenFileNewTab, onOpenFileSide, openInApp, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, openWithShowPluginTargets, exclude, onPathRenamed, onPathDeleted, refreshTick, onUploadRequest, busy, hidden, visible, service } = props;
|
|
8950
|
+
const { sessionId, cwd, expanded, revealed, onOpenFileNewTab, onOpenFileSide, openInApp, openWithTargets, openWithPinned, openWithSsh, onOpenWith, onToggleOpenWithPin, openWithShowPluginTargets, exclude, nameFilter, onPathRenamed, onPathDeleted, refreshTick, onUploadRequest, busy, hidden, visible, service } = props;
|
|
8693
8951
|
const sort = props.sort ?? DEFAULT_FILE_TREE_SORT;
|
|
8694
8952
|
/** The live props for the stable callbacks below (identity churns per render). */
|
|
8695
8953
|
const propsRef = (0, react.useRef)(props);
|
|
8696
8954
|
propsRef.current = props;
|
|
8955
|
+
/** Live visibility for the load effects: a parked tree fetches nothing. */
|
|
8956
|
+
const visibleRef = (0, react.useRef)(visible !== false);
|
|
8957
|
+
visibleRef.current = visible !== false;
|
|
8697
8958
|
const [data, setData] = (0, react.useState)({});
|
|
8698
8959
|
/**
|
|
8699
8960
|
* Registry revision for the file-icon feature: bumps on ANY registry
|
|
@@ -8711,6 +8972,27 @@ window.__ModuleLoader__.load({
|
|
|
8711
8972
|
const dataRef = (0, react.useRef)(data);
|
|
8712
8973
|
/** Bumped whenever the cache is wiped: a response from an older generation is dropped. */
|
|
8713
8974
|
const generationRef = (0, react.useRef)(0);
|
|
8975
|
+
/**
|
|
8976
|
+
* The context menu's native row ids.
|
|
8977
|
+
*
|
|
8978
|
+
* A caller's appended row is matched against these before its own `onSelect`
|
|
8979
|
+
* runs, so an id in this set has to be refused: letting it through would make
|
|
8980
|
+
* a caller's row answer the native id and take a shipped action away.
|
|
8981
|
+
*/
|
|
8982
|
+
const NATIVE_MENU_IDS = /* @__PURE__ */ new Set([
|
|
8983
|
+
"open-new-tab",
|
|
8984
|
+
"open-side",
|
|
8985
|
+
"download",
|
|
8986
|
+
"upload-here",
|
|
8987
|
+
"new-folder",
|
|
8988
|
+
"new-file",
|
|
8989
|
+
"archive-selection",
|
|
8990
|
+
"relative",
|
|
8991
|
+
"absolute",
|
|
8992
|
+
"rename",
|
|
8993
|
+
"delete",
|
|
8994
|
+
"reveal-in-file-manager"
|
|
8995
|
+
]);
|
|
8714
8996
|
/** The row whose path was just copied ("copied" label replaces its button). */
|
|
8715
8997
|
const [copiedPath, setCopiedPath] = (0, react.useState)(null);
|
|
8716
8998
|
/** Open context menu: the row path (and whether it is a directory) plus the cursor position. */
|
|
@@ -8916,6 +9198,7 @@ window.__ModuleLoader__.load({
|
|
|
8916
9198
|
* path — while leaving their current rows untouched until the answer lands.
|
|
8917
9199
|
*/
|
|
8918
9200
|
const loadLevels = (0, react.useCallback)((paths, options) => {
|
|
9201
|
+
if (visibleRef.current === false) return;
|
|
8919
9202
|
const force = options?.force === true;
|
|
8920
9203
|
const wanted = force ? [...new Set(paths)] : paths.filter((path) => {
|
|
8921
9204
|
const cached = dataRef.current[path];
|
|
@@ -9002,6 +9285,10 @@ window.__ModuleLoader__.load({
|
|
|
9002
9285
|
const retryDir = (0, react.useCallback)((dir) => {
|
|
9003
9286
|
loadLevels([dir], { force: true });
|
|
9004
9287
|
}, [loadLevels]);
|
|
9288
|
+
/** Re-list a SET of directories in ONE batch (the parked→visible re-arm). */
|
|
9289
|
+
const retryDirs = (0, react.useCallback)((dirs) => {
|
|
9290
|
+
if (dirs.length > 0) loadLevels([...dirs], { force: true });
|
|
9291
|
+
}, [loadLevels]);
|
|
9005
9292
|
/**
|
|
9006
9293
|
* Settle the tree after one rename/delete landed at `prefix`: drop every
|
|
9007
9294
|
* cached level at or under the old path, collapse the now-stale expanded
|
|
@@ -9043,6 +9330,7 @@ window.__ModuleLoader__.load({
|
|
|
9043
9330
|
(0, react.useEffect)(() => {
|
|
9044
9331
|
if (lastTick.current === refreshTick) return;
|
|
9045
9332
|
lastTick.current = refreshTick;
|
|
9333
|
+
if (visibleRef.current === false) return;
|
|
9046
9334
|
generationRef.current += 1;
|
|
9047
9335
|
forceNextLoad.current = true;
|
|
9048
9336
|
}, [refreshTick]);
|
|
@@ -9056,7 +9344,7 @@ window.__ModuleLoader__.load({
|
|
|
9056
9344
|
}, [excludeKey]);
|
|
9057
9345
|
(0, react.useEffect)(() => {
|
|
9058
9346
|
const root = cwd;
|
|
9059
|
-
if (root === void 0) return;
|
|
9347
|
+
if (root === void 0 || visibleRef.current === false) return;
|
|
9060
9348
|
const force = forceNextLoad.current;
|
|
9061
9349
|
forceNextLoad.current = false;
|
|
9062
9350
|
loadLevels([root, ...expanded], { force });
|
|
@@ -9067,7 +9355,7 @@ window.__ModuleLoader__.load({
|
|
|
9067
9355
|
loadLevels
|
|
9068
9356
|
]);
|
|
9069
9357
|
(0, react.useEffect)(() => {
|
|
9070
|
-
if (cwd === void 0) return;
|
|
9358
|
+
if (cwd === void 0 || visibleRef.current === false) return;
|
|
9071
9359
|
loadLevels(compactLoadTargets(dataRef.current, [cwd, ...propsRef.current.expanded]));
|
|
9072
9360
|
}, [
|
|
9073
9361
|
cwd,
|
|
@@ -9081,7 +9369,8 @@ window.__ModuleLoader__.load({
|
|
|
9081
9369
|
sessionId,
|
|
9082
9370
|
root: cwd,
|
|
9083
9371
|
dirs: expanded,
|
|
9084
|
-
|
|
9372
|
+
visible: visible !== false,
|
|
9373
|
+
onStale: retryDirs
|
|
9085
9374
|
});
|
|
9086
9375
|
(0, react.useEffect)(() => {
|
|
9087
9376
|
if (revealed.length === 0 || propsRef.current.hidden === true) return;
|
|
@@ -9456,7 +9745,9 @@ window.__ModuleLoader__.load({
|
|
|
9456
9745
|
* the machine + the path, so reopening the same row's menu is instant: no
|
|
9457
9746
|
* request, no disabled "Loading…" frame. A newly installed application shows
|
|
9458
9747
|
* up on the next tree mount — the alternative (re-probing per open) is the
|
|
9459
|
-
* churn the menu was reported for.
|
|
9748
|
+
* churn the menu was reported for. The cache is bounded (LRU): the host
|
|
9749
|
+
* keeps every visited tab body mounted, so an unbounded per-tree map of
|
|
9750
|
+
* paths would live for the life of the page.
|
|
9460
9751
|
*/
|
|
9461
9752
|
const appsCacheRef = (0, react.useRef)(/* @__PURE__ */ new Map());
|
|
9462
9753
|
(0, react.useEffect)(() => {
|
|
@@ -9465,6 +9756,8 @@ window.__ModuleLoader__.load({
|
|
|
9465
9756
|
const key = `${isDir ? "d" : "f"}\u0000${path}`;
|
|
9466
9757
|
const cached = appsCacheRef.current.get(key);
|
|
9467
9758
|
if (cached !== void 0) {
|
|
9759
|
+
appsCacheRef.current.delete(key);
|
|
9760
|
+
appsCacheRef.current.set(key, cached);
|
|
9468
9761
|
setApps({
|
|
9469
9762
|
path,
|
|
9470
9763
|
entries: cached
|
|
@@ -9474,7 +9767,13 @@ window.__ModuleLoader__.load({
|
|
|
9474
9767
|
let cancelled = false;
|
|
9475
9768
|
(isDir ? openInApp.directoryApps() : openInApp.fileApps(path)).then((entries) => {
|
|
9476
9769
|
if (cancelled) return;
|
|
9477
|
-
if (entries !== null)
|
|
9770
|
+
if (entries !== null) {
|
|
9771
|
+
appsCacheRef.current.set(key, entries);
|
|
9772
|
+
if (appsCacheRef.current.size > APPS_CACHE_MAX) for (const oldest of appsCacheRef.current.keys()) {
|
|
9773
|
+
appsCacheRef.current.delete(oldest);
|
|
9774
|
+
break;
|
|
9775
|
+
}
|
|
9776
|
+
}
|
|
9478
9777
|
setApps({
|
|
9479
9778
|
path,
|
|
9480
9779
|
entries
|
|
@@ -9686,6 +9985,39 @@ window.__ModuleLoader__.load({
|
|
|
9686
9985
|
}];
|
|
9687
9986
|
return [];
|
|
9688
9987
|
};
|
|
9988
|
+
/**
|
|
9989
|
+
* The caller's appended rows, as menu entries.
|
|
9990
|
+
*
|
|
9991
|
+
* `relPath` is resolved here rather than in the caller: the tree is the only
|
|
9992
|
+
* party that knows `cwd`, and the spelling has to match the "copy relative
|
|
9993
|
+
* path" row the user already reads in this same menu. An entry outside the
|
|
9994
|
+
* tree (or a tree with no `cwd`) passes through `relativeTo` unchanged,
|
|
9995
|
+
* which is also what that native row does.
|
|
9996
|
+
*
|
|
9997
|
+
* The group's separator is prepended only when at least one row survives
|
|
9998
|
+
* `when`, so a caller whose rows do not apply to this entry leaves the menu
|
|
9999
|
+
* exactly as it was — no stray hairline at the bottom.
|
|
10000
|
+
*/
|
|
10001
|
+
const extraRows = (() => {
|
|
10002
|
+
const target = rowMenu;
|
|
10003
|
+
const items = props.extraMenuItems;
|
|
10004
|
+
if (target === null || items === void 0 || items.length === 0) return [];
|
|
10005
|
+
if (items.some((item) => NATIVE_MENU_IDS.has(item.id))) return [];
|
|
10006
|
+
const hit = {
|
|
10007
|
+
relPath: relativeTo(cwd ?? "", target.path),
|
|
10008
|
+
isDir: target.isDir
|
|
10009
|
+
};
|
|
10010
|
+
const rows = items.filter((item) => item.when === void 0 || item.when(hit)).map((item) => ({
|
|
10011
|
+
id: item.id,
|
|
10012
|
+
label: item.label,
|
|
10013
|
+
...item.icon === void 0 ? {} : { icon: item.icon }
|
|
10014
|
+
}));
|
|
10015
|
+
if (rows.length === 0) return [];
|
|
10016
|
+
return [{
|
|
10017
|
+
id: "extra-items-sep",
|
|
10018
|
+
type: "separator"
|
|
10019
|
+
}, ...rows];
|
|
10020
|
+
})();
|
|
9689
10021
|
/** Download a file through the host route (raw bytes, binary-safe). */
|
|
9690
10022
|
const downloadFile = (path) => {
|
|
9691
10023
|
const url = downloadUrl({
|
|
@@ -9877,16 +10209,41 @@ window.__ModuleLoader__.load({
|
|
|
9877
10209
|
* `sortEntries` copies (the level cache keeps the host's own order and is
|
|
9878
10210
|
* never reordered in place).
|
|
9879
10211
|
*/
|
|
10212
|
+
/** The caller's filter, normalised once per change. */
|
|
10213
|
+
const needle = normaliseNeedle$1(nameFilter ?? "");
|
|
9880
10214
|
const entriesFor = (0, react.useMemo)(() => {
|
|
9881
10215
|
const cache = /* @__PURE__ */ new Map();
|
|
10216
|
+
/**
|
|
10217
|
+
* Every loaded level as a `children` map for the filter.
|
|
10218
|
+
*
|
|
10219
|
+
* Built from the level cache rather than from what is on screen: the filter has to see
|
|
10220
|
+
* the children of a COLLAPSED folder to know whether it should stay visible. Unloaded
|
|
10221
|
+
* levels are simply absent, which the rule set treats as "judge this row by its own
|
|
10222
|
+
* name" -- the same answer the reader would get after expanding it.
|
|
10223
|
+
*/
|
|
10224
|
+
/** The loaded children of one directory row, for the filter's descent. */
|
|
10225
|
+
const childrenOf = (entry) => {
|
|
10226
|
+
if (!entry.isDir) return void 0;
|
|
10227
|
+
const level = data[entry.path];
|
|
10228
|
+
return level?.entries === void 0 ? void 0 : sortEntries(level.entries, sort);
|
|
10229
|
+
};
|
|
10230
|
+
const filteredFor = (dir) => {
|
|
10231
|
+
const rows = sortEntries(data[dir]?.entries ?? [], sort);
|
|
10232
|
+
if (needle === "") return rows;
|
|
10233
|
+
return filterLevel$1(rows, childrenOf, needle);
|
|
10234
|
+
};
|
|
9882
10235
|
return (dir) => {
|
|
9883
10236
|
const cached = cache.get(dir);
|
|
9884
10237
|
if (cached !== void 0) return cached;
|
|
9885
|
-
const
|
|
9886
|
-
cache.set(dir,
|
|
9887
|
-
return
|
|
10238
|
+
const rows = filteredFor(dir);
|
|
10239
|
+
cache.set(dir, rows);
|
|
10240
|
+
return rows;
|
|
9888
10241
|
};
|
|
9889
|
-
}, [
|
|
10242
|
+
}, [
|
|
10243
|
+
data,
|
|
10244
|
+
sort,
|
|
10245
|
+
nameFilter
|
|
10246
|
+
]);
|
|
9890
10247
|
visibleRowsRef.current = (0, react.useMemo)(() => {
|
|
9891
10248
|
const rows = [];
|
|
9892
10249
|
const walk = (dir) => {
|
|
@@ -10052,8 +10409,14 @@ window.__ModuleLoader__.load({
|
|
|
10052
10409
|
children: level.error
|
|
10053
10410
|
})] });
|
|
10054
10411
|
const entries = entriesFor(dir);
|
|
10412
|
+
const emptyFromFilter = needle !== "" && entries.length === 0 && level.entries !== void 0 && level.entries.length > 0;
|
|
10055
10413
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
10056
10414
|
head,
|
|
10415
|
+
emptyFromFilter && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
10416
|
+
className: clsx(sidebar_module_css_default.explorerRow, sidebar_module_css_default.explorerMuted),
|
|
10417
|
+
style: { paddingLeft: depth * 22 + 6 },
|
|
10418
|
+
children: t("filterNoMatch")
|
|
10419
|
+
}),
|
|
10057
10420
|
entries.map((entry) => {
|
|
10058
10421
|
const chain = entry.isDir ? chainFor(entry) : void 0;
|
|
10059
10422
|
if (renaming !== null && (renaming.path === entry.path || chain?.some((link) => link.path === renaming.path) === true)) return renderRenameRow(entry, depth);
|
|
@@ -10287,7 +10650,8 @@ window.__ModuleLoader__.load({
|
|
|
10287
10650
|
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 14 }),
|
|
10288
10651
|
danger: true
|
|
10289
10652
|
}
|
|
10290
|
-
] : []
|
|
10653
|
+
] : [],
|
|
10654
|
+
...extraRows
|
|
10291
10655
|
],
|
|
10292
10656
|
onSelect: (id) => {
|
|
10293
10657
|
const target = rowMenu;
|
|
@@ -10361,6 +10725,14 @@ window.__ModuleLoader__.load({
|
|
|
10361
10725
|
});
|
|
10362
10726
|
return;
|
|
10363
10727
|
}
|
|
10728
|
+
const extra = propsRef.current.extraMenuItems?.find((item) => item.id === id);
|
|
10729
|
+
if (extra !== void 0) {
|
|
10730
|
+
extra.onSelect({
|
|
10731
|
+
relPath: relativeTo(cwd ?? "", target.path),
|
|
10732
|
+
isDir: target.isDir
|
|
10733
|
+
});
|
|
10734
|
+
return;
|
|
10735
|
+
}
|
|
10364
10736
|
copyPath(id === "relative" ? relativeTo(cwd ?? "", target.path) : target.path, target.path);
|
|
10365
10737
|
},
|
|
10366
10738
|
portal: true,
|
|
@@ -13464,19 +13836,19 @@ window.__ModuleLoader__.load({
|
|
|
13464
13836
|
document.head.appendChild(tag);
|
|
13465
13837
|
}
|
|
13466
13838
|
var KnowledgeShareDialog_module_css_default = {
|
|
13467
|
-
"hint": "nw--rq_hint",
|
|
13468
13839
|
"list": "nw--rq_list",
|
|
13469
|
-
"body": "nw--rq_body",
|
|
13470
|
-
"fieldLabel": "nw--rq_fieldLabel",
|
|
13471
13840
|
"notice": "nw--rq_notice",
|
|
13841
|
+
"hint": "nw--rq_hint",
|
|
13842
|
+
"intro": "nw--rq_intro",
|
|
13472
13843
|
"optionLabel": "nw--rq_optionLabel",
|
|
13844
|
+
"state": "nw--rq_state",
|
|
13473
13845
|
"chosenLabel": "nw--rq_chosenLabel",
|
|
13474
13846
|
"field": "nw--rq_field",
|
|
13475
|
-
"
|
|
13476
|
-
"state": "nw--rq_state",
|
|
13847
|
+
"optionDetail": "nw--rq_optionDetail",
|
|
13477
13848
|
"chosen": "nw--rq_chosen",
|
|
13478
|
-
"
|
|
13479
|
-
"
|
|
13849
|
+
"body": "nw--rq_body",
|
|
13850
|
+
"fieldLabel": "nw--rq_fieldLabel",
|
|
13851
|
+
"option": "nw--rq_option"
|
|
13480
13852
|
};
|
|
13481
13853
|
//#endregion
|
|
13482
13854
|
//#region src/client/KnowledgeShareDialog.tsx
|
|
@@ -15907,14 +16279,14 @@ window.__ModuleLoader__.load({
|
|
|
15907
16279
|
document.head.appendChild(tag);
|
|
15908
16280
|
}
|
|
15909
16281
|
var KnowledgeAudit_module_css_default = {
|
|
16282
|
+
"audit": "_0xqcPG_audit",
|
|
15910
16283
|
"pagerTotal": "_0xqcPG_pagerTotal",
|
|
16284
|
+
"pathCell": "_0xqcPG_pathCell",
|
|
15911
16285
|
"pager": "_0xqcPG_pager",
|
|
15912
|
-
"pagerSizeLabel": "_0xqcPG_pagerSizeLabel",
|
|
15913
|
-
"pagerSize": "_0xqcPG_pagerSize",
|
|
15914
16286
|
"pagerPosition": "_0xqcPG_pagerPosition",
|
|
15915
|
-
"
|
|
15916
|
-
"
|
|
15917
|
-
"
|
|
16287
|
+
"pagerSize": "_0xqcPG_pagerSize",
|
|
16288
|
+
"pagerSizeLabel": "_0xqcPG_pagerSizeLabel",
|
|
16289
|
+
"tabs": "_0xqcPG_tabs"
|
|
15918
16290
|
};
|
|
15919
16291
|
//#endregion
|
|
15920
16292
|
//#region src/client/KnowledgeAudit.tsx
|
|
@@ -16665,31 +17037,31 @@ window.__ModuleLoader__.load({
|
|
|
16665
17037
|
document.head.appendChild(tag);
|
|
16666
17038
|
}
|
|
16667
17039
|
var KnowledgeListing_module_css_default = {
|
|
16668
|
-
"entryTime": "_95AMVa_entryTime",
|
|
16669
|
-
"cardItem": "_95AMVa_cardItem",
|
|
16670
|
-
"pinDropZone": "_95AMVa_pinDropZone",
|
|
16671
|
-
"entryDir": "_95AMVa_entryDir",
|
|
16672
|
-
"entries": "_95AMVa_entries",
|
|
16673
|
-
"entryPin": "_95AMVa_entryPin",
|
|
16674
17040
|
"entryRef": "_95AMVa_entryRef",
|
|
16675
|
-
"
|
|
17041
|
+
"entries": "_95AMVa_entries",
|
|
17042
|
+
"cards": "_95AMVa_cards",
|
|
16676
17043
|
"cardDir": "_95AMVa_cardDir",
|
|
16677
|
-
"
|
|
16678
|
-
"
|
|
17044
|
+
"pinDropZone": "_95AMVa_pinDropZone",
|
|
17045
|
+
"empty": "_95AMVa_empty",
|
|
17046
|
+
"entry": "_95AMVa_entry",
|
|
16679
17047
|
"emptyAction": "_95AMVa_emptyAction",
|
|
16680
|
-
"
|
|
16681
|
-
"entryChildren": "_95AMVa_entryChildren",
|
|
17048
|
+
"entryDir": "_95AMVa_entryDir",
|
|
16682
17049
|
"kb-row-in": "_95AMVa_kb-row-in",
|
|
16683
|
-
"entryCheck": "_95AMVa_entryCheck",
|
|
16684
|
-
"cardName": "_95AMVa_cardName",
|
|
16685
17050
|
"entryGlyph": "_95AMVa_entryGlyph",
|
|
16686
|
-
"
|
|
16687
|
-
"entry": "_95AMVa_entry",
|
|
16688
|
-
"cards": "_95AMVa_cards",
|
|
17051
|
+
"entryTime": "_95AMVa_entryTime",
|
|
16689
17052
|
"card": "_95AMVa_card",
|
|
17053
|
+
"cardMeta": "_95AMVa_cardMeta",
|
|
17054
|
+
"entryCheck": "_95AMVa_entryCheck",
|
|
17055
|
+
"entryChildren": "_95AMVa_entryChildren",
|
|
16690
17056
|
"entryFavorite": "_95AMVa_entryFavorite",
|
|
16691
|
-
"
|
|
16692
|
-
"
|
|
17057
|
+
"cardGlyph": "_95AMVa_cardGlyph",
|
|
17058
|
+
"emptyGlyph": "_95AMVa_emptyGlyph",
|
|
17059
|
+
"entryName": "_95AMVa_entryName",
|
|
17060
|
+
"entryPin": "_95AMVa_entryPin",
|
|
17061
|
+
"cardItem": "_95AMVa_cardItem",
|
|
17062
|
+
"cardName": "_95AMVa_cardName",
|
|
17063
|
+
"cardTime": "_95AMVa_cardTime",
|
|
17064
|
+
"emptyTitle": "_95AMVa_emptyTitle"
|
|
16693
17065
|
};
|
|
16694
17066
|
//#endregion
|
|
16695
17067
|
//#region src/client/listingFilter.ts
|
|
@@ -17330,33 +17702,33 @@ window.__ModuleLoader__.load({
|
|
|
17330
17702
|
document.head.appendChild(tag);
|
|
17331
17703
|
}
|
|
17332
17704
|
var KnowledgeProgressPopover_module_css_default = {
|
|
17333
|
-
"badgeFailed": "x_PPca_badgeFailed",
|
|
17334
|
-
"badgeBusy": "x_PPca_badgeBusy",
|
|
17335
17705
|
"progressRow": "x_PPca_progressRow",
|
|
17336
|
-
"progressTrack": "x_PPca_progressTrack",
|
|
17337
|
-
"group": "x_PPca_group",
|
|
17338
17706
|
"badge": "x_PPca_badge",
|
|
17339
|
-
"
|
|
17340
|
-
"badgeDone": "x_PPca_badgeDone",
|
|
17341
|
-
"dialogContent": "x_PPca_dialogContent",
|
|
17342
|
-
"progressFill": "x_PPca_progressFill",
|
|
17343
|
-
"cardRow": "x_PPca_cardRow",
|
|
17344
|
-
"cardProgress": "x_PPca_cardProgress",
|
|
17345
|
-
"cardActions": "x_PPca_cardActions",
|
|
17707
|
+
"summaryLabel": "x_PPca_summaryLabel",
|
|
17346
17708
|
"summaryItem": "x_PPca_summaryItem",
|
|
17347
|
-
"summary": "x_PPca_summary",
|
|
17348
17709
|
"dialog": "x_PPca_dialog",
|
|
17710
|
+
"summaryValue": "x_PPca_summaryValue",
|
|
17711
|
+
"progressFill": "x_PPca_progressFill",
|
|
17712
|
+
"cardProgress": "x_PPca_cardProgress",
|
|
17349
17713
|
"cardReason": "x_PPca_cardReason",
|
|
17350
17714
|
"empty": "x_PPca_empty",
|
|
17351
|
-
"
|
|
17352
|
-
"
|
|
17353
|
-
"
|
|
17354
|
-
"
|
|
17715
|
+
"cardRow": "x_PPca_cardRow",
|
|
17716
|
+
"cardPath": "x_PPca_cardPath",
|
|
17717
|
+
"badgeDone": "x_PPca_badgeDone",
|
|
17718
|
+
"list": "x_PPca_list",
|
|
17719
|
+
"group": "x_PPca_group",
|
|
17720
|
+
"badgeBusy": "x_PPca_badgeBusy",
|
|
17721
|
+
"progressTrack": "x_PPca_progressTrack",
|
|
17355
17722
|
"progressPercent": "x_PPca_progressPercent",
|
|
17723
|
+
"bell": "x_PPca_bell",
|
|
17356
17724
|
"cardName": "x_PPca_cardName",
|
|
17725
|
+
"progressFillIndeterminate": "x_PPca_progressFillIndeterminate",
|
|
17726
|
+
"cardRawReason": "x_PPca_cardRawReason",
|
|
17357
17727
|
"card": "x_PPca_card",
|
|
17358
|
-
"
|
|
17359
|
-
"
|
|
17728
|
+
"dialogContent": "x_PPca_dialogContent",
|
|
17729
|
+
"cardActions": "x_PPca_cardActions",
|
|
17730
|
+
"summary": "x_PPca_summary",
|
|
17731
|
+
"badgeFailed": "x_PPca_badgeFailed"
|
|
17360
17732
|
};
|
|
17361
17733
|
//#endregion
|
|
17362
17734
|
//#region src/client/KnowledgeProgressPopover.tsx
|
|
@@ -18514,76 +18886,6 @@ window.__ModuleLoader__.load({
|
|
|
18514
18886
|
};
|
|
18515
18887
|
}
|
|
18516
18888
|
//#endregion
|
|
18517
|
-
//#region src/client/useViewMode.ts
|
|
18518
|
-
/**
|
|
18519
|
-
* The list/grid preference the rail renders.
|
|
18520
|
-
*
|
|
18521
|
-
* A document-level preference stored beside the pins, for the same reason they are:
|
|
18522
|
-
* a reader who switches to the grid on one machine expects it on the next. The
|
|
18523
|
-
* optimistic update exists because the toggle is a one-click gesture on a control
|
|
18524
|
-
* the reader is looking at, and waiting for a round trip before the layout changes
|
|
18525
|
-
* makes it feel broken when it is merely slow. A failed write reloads from the Host
|
|
18526
|
-
* rather than leaving the guess on screen.
|
|
18527
|
-
*
|
|
18528
|
-
* @module @sparkelf/dsh-knowledge-base/client
|
|
18529
|
-
*/
|
|
18530
|
-
/**
|
|
18531
|
-
* Read and write the caller's layout preference.
|
|
18532
|
-
* @param enabled - false while the mount point is unknown, which is the only state
|
|
18533
|
-
* where there is no view directory to hold the preference.
|
|
18534
|
-
* @returns The store.
|
|
18535
|
-
*/
|
|
18536
|
-
function useViewMode(enabled) {
|
|
18537
|
-
const [mode, setLocalMode] = (0, react.useState)("list");
|
|
18538
|
-
const [error, setError] = (0, react.useState)(void 0);
|
|
18539
|
-
const read = (0, react.useCallback)(async () => {
|
|
18540
|
-
if (!enabled) return;
|
|
18541
|
-
try {
|
|
18542
|
-
const response = await fetch(kbApiPath(KB_API.viewModeGet), {
|
|
18543
|
-
method: "POST",
|
|
18544
|
-
headers: { "content-type": "application/json" },
|
|
18545
|
-
body: "{}",
|
|
18546
|
-
cache: "no-store"
|
|
18547
|
-
});
|
|
18548
|
-
if (!response.ok) throw new Error("HTTP " + String(response.status));
|
|
18549
|
-
const body = await response.json();
|
|
18550
|
-
setLocalMode(body.mode === "grid" ? "grid" : body.mode === "explorer" ? "explorer" : "list");
|
|
18551
|
-
setError(void 0);
|
|
18552
|
-
} catch (failure) {
|
|
18553
|
-
setLocalMode("list");
|
|
18554
|
-
setError(failure instanceof Error ? failure.message : void 0);
|
|
18555
|
-
}
|
|
18556
|
-
}, [enabled]);
|
|
18557
|
-
(0, react.useEffect)(() => {
|
|
18558
|
-
read();
|
|
18559
|
-
}, [read]);
|
|
18560
|
-
return {
|
|
18561
|
-
mode,
|
|
18562
|
-
setMode: (0, react.useCallback)((next) => {
|
|
18563
|
-
setLocalMode(next);
|
|
18564
|
-
(async () => {
|
|
18565
|
-
try {
|
|
18566
|
-
const response = await fetch(kbApiPath(KB_API.viewModeSet), {
|
|
18567
|
-
method: "POST",
|
|
18568
|
-
headers: { "content-type": "application/json" },
|
|
18569
|
-
body: JSON.stringify({ mode: next }),
|
|
18570
|
-
cache: "no-store"
|
|
18571
|
-
});
|
|
18572
|
-
if (!response.ok) {
|
|
18573
|
-
const body = await response.json().catch(() => ({}));
|
|
18574
|
-
throw new Error(body.error ?? "HTTP " + String(response.status));
|
|
18575
|
-
}
|
|
18576
|
-
setError(void 0);
|
|
18577
|
-
} catch (failure) {
|
|
18578
|
-
setError(failure instanceof Error ? failure.message : void 0);
|
|
18579
|
-
await read();
|
|
18580
|
-
}
|
|
18581
|
-
})();
|
|
18582
|
-
}, [read]),
|
|
18583
|
-
error
|
|
18584
|
-
};
|
|
18585
|
-
}
|
|
18586
|
-
//#endregion
|
|
18587
18889
|
//#region src/client/useTreeSort.ts
|
|
18588
18890
|
/**
|
|
18589
18891
|
* The knowledge tree's row ordering, remembered per browser.
|
|
@@ -18675,110 +18977,156 @@ window.__ModuleLoader__.load({
|
|
|
18675
18977
|
};
|
|
18676
18978
|
}
|
|
18677
18979
|
//#endregion
|
|
18678
|
-
//#region
|
|
18679
|
-
/**
|
|
18680
|
-
*
|
|
18681
|
-
*
|
|
18682
|
-
*
|
|
18683
|
-
*
|
|
18684
|
-
*/
|
|
18685
|
-
function
|
|
18686
|
-
if (
|
|
18687
|
-
|
|
18688
|
-
|
|
18689
|
-
|
|
18690
|
-
|
|
18691
|
-
|
|
18980
|
+
//#region ../../../DSH-better-sidebar/src/client/conversation-draft.ts
|
|
18981
|
+
/**
|
|
18982
|
+
* The separating space an append needs on its left — one space, but never
|
|
18983
|
+
* doubled against existing whitespace. Both the string append and the span
|
|
18984
|
+
* channel (which does no splice math of its own) obey this single rule. A
|
|
18985
|
+
* blank draft takes no separator: it is replaced outright.
|
|
18986
|
+
*/
|
|
18987
|
+
function leadFor(draft) {
|
|
18988
|
+
if (draft.trim() === "") return "";
|
|
18989
|
+
return /\s$/.test(draft) ? "" : " ";
|
|
18990
|
+
}
|
|
18991
|
+
/** `draft` with `text` appended behind one separating space when needed. */
|
|
18992
|
+
function appendText(draft, text) {
|
|
18993
|
+
return `${draft}${leadFor(draft)}${text}`;
|
|
18994
|
+
}
|
|
18995
|
+
/**
|
|
18996
|
+
* Fold one clipboard-projection offset to its detect-projection twin.
|
|
18997
|
+
*
|
|
18998
|
+
* The host maintains two coordinate systems over the same document: the
|
|
18999
|
+
* clipboard projection (`InputState.draft`, `occurrences`) expands every chip
|
|
19000
|
+
* to its whole `clipboardText`, while the detect projection — the one every
|
|
19001
|
+
* insert/replace event's `span` must speak — collapses each chip to a single
|
|
19002
|
+
* placeholder character. Deriving a span from a draft offset without folding
|
|
19003
|
+
* therefore overshoots by `length - 1` per chip, and the host rejects the
|
|
19004
|
+
* out-of-range span (`applied = false`) — the second chip insert of a session
|
|
19005
|
+
* would silently fail.
|
|
19006
|
+
*
|
|
19007
|
+
* An offset inside a chip's expansion snaps to that chip's trailing edge: the
|
|
19008
|
+
* host only ever replaces whole chips, never splits one. An offset exactly at
|
|
19009
|
+
* a chip's START resolves to the position BEFORE the chip — the host's own
|
|
19010
|
+
* `detectOffsetOfClipboardOffset` reads that case as "inside" and returns the
|
|
19011
|
+
* trailing edge, which would move a caret one chip too far right.
|
|
19012
|
+
*/
|
|
19013
|
+
function foldClipboardOffset(draft, occurrences, offset) {
|
|
19014
|
+
const target = Math.max(0, Math.min(offset, draft.length));
|
|
19015
|
+
let shrink = 0;
|
|
19016
|
+
for (const occurrence of occurrences) {
|
|
19017
|
+
if (target >= occurrence.offset + occurrence.length) {
|
|
19018
|
+
shrink += occurrence.length - 1;
|
|
19019
|
+
continue;
|
|
19020
|
+
}
|
|
19021
|
+
if (target > occurrence.offset) return occurrence.offset - shrink + 1;
|
|
19022
|
+
break;
|
|
18692
19023
|
}
|
|
18693
|
-
|
|
18694
|
-
const suffix = draft.slice(caret.end);
|
|
18695
|
-
if (prefix === "" && suffix === "") return {
|
|
18696
|
-
draft: text,
|
|
18697
|
-
caretAfter: text.length
|
|
18698
|
-
};
|
|
18699
|
-
const left = prefix === "" || /\s$/.test(prefix) ? "" : " ";
|
|
18700
|
-
return {
|
|
18701
|
-
draft: `${prefix}${left}${text}${suffix === "" || /^\s/.test(suffix) || /\s$/.test(text) ? "" : " "}${suffix}`,
|
|
18702
|
-
caretAfter: prefix.length + left.length + text.length
|
|
18703
|
-
};
|
|
19024
|
+
return target - shrink;
|
|
18704
19025
|
}
|
|
18705
19026
|
/**
|
|
18706
|
-
*
|
|
18707
|
-
* `
|
|
18708
|
-
*
|
|
18709
|
-
*
|
|
18710
|
-
|
|
18711
|
-
|
|
18712
|
-
|
|
18713
|
-
|
|
18714
|
-
|
|
18715
|
-
|
|
18716
|
-
|
|
18717
|
-
|
|
18718
|
-
|
|
18719
|
-
|
|
18720
|
-
|
|
18721
|
-
|
|
18722
|
-
|
|
18723
|
-
|
|
18724
|
-
|
|
18725
|
-
* sync with the store draft, or has no measurable selection (jsdom/odd
|
|
18726
|
-
* hosts report null selectionStart/End).
|
|
18727
|
-
*/
|
|
18728
|
-
function probeComposerCaret(draft) {
|
|
18729
|
-
const el = findComposerTextarea();
|
|
18730
|
-
if (el === null || el.disabled || el.readOnly) return null;
|
|
18731
|
-
if (el.value !== draft) return null;
|
|
18732
|
-
let start = el.selectionStart;
|
|
18733
|
-
let end = el.selectionEnd;
|
|
18734
|
-
if (typeof start !== "number" || typeof end !== "number") return null;
|
|
18735
|
-
if (!Number.isFinite(start) || !Number.isFinite(end)) return null;
|
|
18736
|
-
start = Math.max(0, Math.min(start, draft.length));
|
|
18737
|
-
end = Math.max(start, Math.min(end, draft.length));
|
|
18738
|
-
return {
|
|
18739
|
-
start,
|
|
18740
|
-
end
|
|
18741
|
-
};
|
|
19027
|
+
* The detect-projection offset that appends at the document end, or
|
|
19028
|
+
* `undefined` when it cannot be derived.
|
|
19029
|
+
*
|
|
19030
|
+
* `foldClipboardOffset` alone is not enough: a command chip (`/goal `, present
|
|
19031
|
+
* while `phase === 'claimed'`) collapses to one detect character but never
|
|
19032
|
+
* appears in `occurrences` — the host only collects reference chips. The chip
|
|
19033
|
+
* covers exactly `claim.token`, a prefix of the draft, so its own characters
|
|
19034
|
+
* fold away and one placeholder takes their place.
|
|
19035
|
+
*/
|
|
19036
|
+
function appendOffset(snapshot) {
|
|
19037
|
+
const { draft, claim } = snapshot;
|
|
19038
|
+
const occurrences = snapshot.occurrences ?? [];
|
|
19039
|
+
const token = snapshot.phase === "claimed" && claim !== void 0 && draft.startsWith(claim.token) ? claim.token : "";
|
|
19040
|
+
if (token === "") return foldClipboardOffset(draft, occurrences, draft.length);
|
|
19041
|
+
const rest = draft.slice(token.length);
|
|
19042
|
+
return 1 + foldClipboardOffset(rest, occurrences.filter((occurrence) => occurrence.offset >= token.length).map((occurrence) => ({
|
|
19043
|
+
offset: occurrence.offset - token.length,
|
|
19044
|
+
length: occurrence.length
|
|
19045
|
+
})), rest.length);
|
|
18742
19046
|
}
|
|
18743
19047
|
/**
|
|
18744
|
-
*
|
|
18745
|
-
*
|
|
18746
|
-
*
|
|
18747
|
-
*
|
|
18748
|
-
*
|
|
18749
|
-
*
|
|
18750
|
-
*
|
|
18751
|
-
*
|
|
18752
|
-
|
|
18753
|
-
|
|
18754
|
-
|
|
18755
|
-
|
|
18756
|
-
|
|
18757
|
-
|
|
18758
|
-
|
|
18759
|
-
|
|
18760
|
-
|
|
18761
|
-
|
|
18762
|
-
|
|
18763
|
-
|
|
18764
|
-
|
|
18765
|
-
|
|
18766
|
-
|
|
18767
|
-
|
|
18768
|
-
|
|
18769
|
-
|
|
18770
|
-
|
|
19048
|
+
* Mint one reference chip through the host's own `insertReference` — the
|
|
19049
|
+
* same facade method the native `@` picker's event listener calls, so the
|
|
19050
|
+
* composer shows a compact chip while the model receives `reference.text`.
|
|
19051
|
+
* The host runs its own admission-phase and revision guards and reports
|
|
19052
|
+
* whether the edit applied.
|
|
19053
|
+
*
|
|
19054
|
+
* The chip's `clipboardText` is the compact `label`, not the full payload —
|
|
19055
|
+
* see {@link PendingReference.clipboardText}.
|
|
19056
|
+
*
|
|
19057
|
+
* Returns false when the host refused the insert (stale revision, a frozen
|
|
19058
|
+
* submission phase, or no chip channel at all) so the caller can fall back.
|
|
19059
|
+
*/
|
|
19060
|
+
function insertDraftReference(ctx, sessionId, reference) {
|
|
19061
|
+
let before;
|
|
19062
|
+
try {
|
|
19063
|
+
const actx = ctx.sessions.scope(sessionId);
|
|
19064
|
+
if (actx === void 0) return false;
|
|
19065
|
+
const conversation = ctx.get("conversation");
|
|
19066
|
+
if (conversation === void 0) return false;
|
|
19067
|
+
const input = conversation.input.for(actx);
|
|
19068
|
+
const snapshot = input.state.getSnapshot();
|
|
19069
|
+
if (input.insertReference === void 0 || snapshot.draftRev === void 0) return false;
|
|
19070
|
+
if (snapshot.phase === "adjudicating" || snapshot.phase === "submitting") return false;
|
|
19071
|
+
before = snapshot.draftRev;
|
|
19072
|
+
const at = appendOffset(snapshot);
|
|
19073
|
+
if (at === void 0) return false;
|
|
19074
|
+
let rev = snapshot.draftRev;
|
|
19075
|
+
let start = at;
|
|
19076
|
+
if (leadFor(snapshot.draft) !== "") {
|
|
19077
|
+
actx.emit("slash/input-insert-text", {
|
|
19078
|
+
text: " ",
|
|
19079
|
+
span: {
|
|
19080
|
+
draftRev: rev,
|
|
19081
|
+
start: at,
|
|
19082
|
+
end: at
|
|
19083
|
+
}
|
|
19084
|
+
});
|
|
19085
|
+
const afterSpace = input.state.getSnapshot();
|
|
19086
|
+
if (afterSpace.draftRev === rev) return false;
|
|
19087
|
+
rev = afterSpace.draftRev ?? rev;
|
|
19088
|
+
start = at + 1;
|
|
18771
19089
|
}
|
|
18772
|
-
const
|
|
18773
|
-
|
|
18774
|
-
|
|
18775
|
-
|
|
19090
|
+
const chip = {
|
|
19091
|
+
source: "reference",
|
|
19092
|
+
ref: reference.text,
|
|
19093
|
+
label: reference.label,
|
|
19094
|
+
...reference.appearance === void 0 ? {} : { appearance: reference.appearance },
|
|
19095
|
+
clipboardText: reference.clipboardText ?? reference.label
|
|
19096
|
+
};
|
|
19097
|
+
return input.insertReference(chip, {
|
|
19098
|
+
draftRev: rev,
|
|
19099
|
+
start,
|
|
19100
|
+
end: start
|
|
19101
|
+
});
|
|
19102
|
+
} catch (error) {
|
|
19103
|
+
console.warn("[dsh-better-sidebar] reference chip insert failed:", error);
|
|
19104
|
+
return revisionChanged(ctx, sessionId, before);
|
|
19105
|
+
}
|
|
19106
|
+
}
|
|
19107
|
+
/**
|
|
19108
|
+
* Whether the session's draft revision moved past `revision` — the only
|
|
19109
|
+
* trustworthy success signal after an exception swallowed the host's answer.
|
|
19110
|
+
* A missing service or snapshot counts as "no evidence of success".
|
|
19111
|
+
*/
|
|
19112
|
+
function revisionChanged(ctx, sessionId, revision) {
|
|
19113
|
+
try {
|
|
19114
|
+
const actx = ctx.sessions.scope(sessionId);
|
|
19115
|
+
if (actx === void 0) return false;
|
|
19116
|
+
const now = (ctx.get("conversation")?.input.for(actx))?.state.getSnapshot().draftRev;
|
|
19117
|
+
if (now === void 0 || revision === void 0) return false;
|
|
19118
|
+
return now !== revision;
|
|
19119
|
+
} catch {
|
|
19120
|
+
return false;
|
|
19121
|
+
}
|
|
18776
19122
|
}
|
|
18777
19123
|
/**
|
|
18778
|
-
*
|
|
18779
|
-
*
|
|
18780
|
-
*
|
|
18781
|
-
*
|
|
19124
|
+
* Append `text` to the session's composer draft. Returns false — and logs —
|
|
19125
|
+
* when the conversation service or the session scope is unavailable.
|
|
19126
|
+
*
|
|
19127
|
+
* The host composer is a Lexical contenteditable with no caret API on this
|
|
19128
|
+
* face, so this appends at the end; a mid-draft insert would need the caret
|
|
19129
|
+
* the host does not publish here.
|
|
18782
19130
|
*/
|
|
18783
19131
|
function appendToDraft(ctx, sessionId, text) {
|
|
18784
19132
|
try {
|
|
@@ -18793,10 +19141,25 @@ window.__ModuleLoader__.load({
|
|
|
18793
19141
|
return false;
|
|
18794
19142
|
}
|
|
18795
19143
|
const input = conversation.input.for(actx);
|
|
18796
|
-
const
|
|
18797
|
-
const
|
|
18798
|
-
|
|
18799
|
-
|
|
19144
|
+
const snapshot = input.state.getSnapshot();
|
|
19145
|
+
const draft = snapshot.draft;
|
|
19146
|
+
if ((snapshot.occurrences ?? []).length > 0 || snapshot.phase === "claimed") {
|
|
19147
|
+
const at = appendOffset(snapshot);
|
|
19148
|
+
if (snapshot.draftRev === void 0 || at === void 0) {
|
|
19149
|
+
console.warn("[dsh-better-sidebar] draft insert skipped: chip draft without a revision");
|
|
19150
|
+
return false;
|
|
19151
|
+
}
|
|
19152
|
+
actx.emit("slash/input-insert-text", {
|
|
19153
|
+
text: `${leadFor(draft)}${text}`,
|
|
19154
|
+
span: {
|
|
19155
|
+
draftRev: snapshot.draftRev,
|
|
19156
|
+
start: at,
|
|
19157
|
+
end: at
|
|
19158
|
+
}
|
|
19159
|
+
});
|
|
19160
|
+
return input.state.getSnapshot().draftRev !== snapshot.draftRev;
|
|
19161
|
+
}
|
|
19162
|
+
input.setDraft(appendText(draft, text));
|
|
18800
19163
|
return true;
|
|
18801
19164
|
} catch (error) {
|
|
18802
19165
|
console.warn("[dsh-better-sidebar] draft insert failed:", error);
|
|
@@ -18804,6 +19167,15 @@ window.__ModuleLoader__.load({
|
|
|
18804
19167
|
}
|
|
18805
19168
|
}
|
|
18806
19169
|
/**
|
|
19170
|
+
* Insert one reference as a chip, degrading to its plain-text form when the
|
|
19171
|
+
* host has no chip channel or refuses the insert. This is the ONE place the
|
|
19172
|
+
* fallback policy lives: the explorer's `@` button and the viewer selection
|
|
19173
|
+
* popup both come through here.
|
|
19174
|
+
*/
|
|
19175
|
+
function insertReferenceOrText(ctx, sessionId, reference) {
|
|
19176
|
+
return insertDraftReference(ctx, sessionId, reference) || appendToDraft(ctx, sessionId, reference.text);
|
|
19177
|
+
}
|
|
19178
|
+
/**
|
|
18807
19179
|
* The DSH `@` spelling for one relative path, mirroring the host grammar
|
|
18808
19180
|
* (`formatFileMention` in `@deepseek-ai/dsh-file-reference`): plain when
|
|
18809
19181
|
* there is no whitespace, quoted when there is, and `undefined` when the
|
|
@@ -18855,60 +19227,32 @@ window.__ModuleLoader__.load({
|
|
|
18855
19227
|
console.warn("[dsh-better-sidebar] reference insert skipped: workspace root unavailable or path outside workspace");
|
|
18856
19228
|
return false;
|
|
18857
19229
|
}
|
|
18858
|
-
|
|
18859
|
-
|
|
19230
|
+
if (isDir) {
|
|
19231
|
+
const mention = directoryMention(relative);
|
|
19232
|
+
if (mention === void 0) {
|
|
19233
|
+
console.warn("[dsh-better-sidebar] reference insert skipped: path cannot be represented as a mention");
|
|
19234
|
+
return false;
|
|
19235
|
+
}
|
|
19236
|
+
return appendToDraft(ctx, sessionId, `${mention} `);
|
|
19237
|
+
}
|
|
19238
|
+
const file = mentionFor(relative, "file");
|
|
19239
|
+
if (file === void 0) {
|
|
18860
19240
|
console.warn("[dsh-better-sidebar] reference insert skipped: path cannot be represented as a mention");
|
|
18861
19241
|
return false;
|
|
18862
19242
|
}
|
|
18863
|
-
|
|
18864
|
-
|
|
18865
|
-
|
|
18866
|
-
|
|
18867
|
-
|
|
18868
|
-
}
|
|
18869
|
-
}
|
|
18870
|
-
/**
|
|
18871
|
-
* Insert one FILE reference as a structured chip (like DSH's own `@` picker).
|
|
18872
|
-
* The chip displays `@<basename>` but serializes to `@<relative path>` on
|
|
18873
|
-
* send, so the reference stays a single link from trigger to basename.
|
|
18874
|
-
*
|
|
18875
|
-
* Directories keep the sidebar's plain-text completion behavior (`@dir/`)
|
|
18876
|
-
* through `insertWorkspaceReference`. The rc.1 picker also supports folder
|
|
18877
|
-
* chips on explicit selection; its drill action still inserts plain text.
|
|
18878
|
-
*/
|
|
18879
|
-
function insertFileReference(ctx, sessionId, relativePath) {
|
|
18880
|
-
const reference = mentionFor(relativePath, "file");
|
|
18881
|
-
if (reference === void 0) return false;
|
|
18882
|
-
try {
|
|
18883
|
-
const actx = ctx.sessions.scope(sessionId);
|
|
18884
|
-
if (actx === void 0) return false;
|
|
18885
|
-
const conversation = ctx.get("conversation");
|
|
18886
|
-
if (conversation === void 0) return false;
|
|
18887
|
-
const input = conversation.input.for(actx);
|
|
18888
|
-
const before = input.state.getSnapshot();
|
|
18889
|
-
if (before.draftRev === void 0) return false;
|
|
18890
|
-
actx.emit("slash/input-insert-reference", {
|
|
18891
|
-
reference: {
|
|
18892
|
-
source: "reference",
|
|
18893
|
-
ref: reference.mention,
|
|
18894
|
-
label: reference.label,
|
|
18895
|
-
appearance: "file",
|
|
18896
|
-
clipboardText: reference.mention
|
|
18897
|
-
},
|
|
18898
|
-
span: {
|
|
18899
|
-
draftRev: before.draftRev,
|
|
18900
|
-
start: before.draft.length,
|
|
18901
|
-
end: before.draft.length
|
|
18902
|
-
}
|
|
19243
|
+
return insertReferenceOrText(ctx, sessionId, {
|
|
19244
|
+
label: file.label,
|
|
19245
|
+
text: file.mention,
|
|
19246
|
+
clipboardText: file.mention,
|
|
19247
|
+
appearance: "file"
|
|
18903
19248
|
});
|
|
18904
|
-
return input.state.getSnapshot().draftRev !== before.draftRev;
|
|
18905
19249
|
} catch (error) {
|
|
18906
|
-
console.warn("[dsh-better-sidebar]
|
|
19250
|
+
console.warn("[dsh-better-sidebar] workspace-reference insert failed:", error);
|
|
18907
19251
|
return false;
|
|
18908
19252
|
}
|
|
18909
19253
|
}
|
|
18910
19254
|
//#endregion
|
|
18911
|
-
//#region
|
|
19255
|
+
//#region ../../../DSH-better-sidebar/src/client/reference-in-chat.ts
|
|
18912
19256
|
/**
|
|
18913
19257
|
* Reference one path in the session's conversation draft.
|
|
18914
19258
|
* @param ctx - the client context.
|
|
@@ -18931,14 +19275,14 @@ window.__ModuleLoader__.load({
|
|
|
18931
19275
|
document.head.appendChild(tag);
|
|
18932
19276
|
}
|
|
18933
19277
|
var KnowledgeReferencePicker_module_css_default = {
|
|
19278
|
+
"rowName": "uUHBaG_rowName",
|
|
18934
19279
|
"body": "uUHBaG_body",
|
|
18935
|
-
"
|
|
18936
|
-
"
|
|
19280
|
+
"rowWhen": "uUHBaG_rowWhen",
|
|
19281
|
+
"list": "uUHBaG_list",
|
|
18937
19282
|
"empty": "uUHBaG_empty",
|
|
18938
19283
|
"error": "uUHBaG_error",
|
|
18939
|
-
"
|
|
18940
|
-
"
|
|
18941
|
-
"list": "uUHBaG_list"
|
|
19284
|
+
"footer": "uUHBaG_footer",
|
|
19285
|
+
"content": "uUHBaG_content"
|
|
18942
19286
|
};
|
|
18943
19287
|
//#endregion
|
|
18944
19288
|
//#region src/client/insertReadiness.ts
|
|
@@ -20159,7 +20503,7 @@ window.__ModuleLoader__.load({
|
|
|
20159
20503
|
*/
|
|
20160
20504
|
const favorites = useFavorites(state.kind === "ready" && state.config.mountPoint !== "");
|
|
20161
20505
|
/** The caller's list/grid preference, read from their own view directory. */
|
|
20162
|
-
const viewMode =
|
|
20506
|
+
const viewMode = { mode: "explorer" };
|
|
20163
20507
|
/** The tree's row order, remembered in this browser (see `useTreeSort`). */
|
|
20164
20508
|
const sort = useTreeSort(state.kind === "ready" ? state.config.mountPoint : "");
|
|
20165
20509
|
/**
|
|
@@ -20451,20 +20795,53 @@ window.__ModuleLoader__.load({
|
|
|
20451
20795
|
announce: t("loading")
|
|
20452
20796
|
})
|
|
20453
20797
|
});
|
|
20454
|
-
if (state.kind === "unavailable") return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
20798
|
+
if (state.kind === "unavailable") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
20455
20799
|
className: KnowledgePanel_module_css_default.page,
|
|
20456
|
-
children:
|
|
20457
|
-
className: KnowledgePanel_module_css_default.
|
|
20800
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
20801
|
+
className: KnowledgePanel_module_css_default.errorPanel,
|
|
20458
20802
|
role: "alert",
|
|
20459
|
-
children:
|
|
20460
|
-
|
|
20461
|
-
|
|
20462
|
-
|
|
20463
|
-
|
|
20464
|
-
|
|
20465
|
-
|
|
20466
|
-
|
|
20467
|
-
|
|
20803
|
+
children: [
|
|
20804
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
20805
|
+
className: KnowledgePanel_module_css_default.errorGlyph,
|
|
20806
|
+
"aria-hidden": "true",
|
|
20807
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
20808
|
+
width: "20",
|
|
20809
|
+
height: "20",
|
|
20810
|
+
viewBox: "0 0 24 24",
|
|
20811
|
+
fill: "none",
|
|
20812
|
+
stroke: "currentColor",
|
|
20813
|
+
strokeWidth: "1.8",
|
|
20814
|
+
strokeLinecap: "round",
|
|
20815
|
+
strokeLinejoin: "round",
|
|
20816
|
+
children: [
|
|
20817
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
20818
|
+
cx: "12",
|
|
20819
|
+
cy: "12",
|
|
20820
|
+
r: "9"
|
|
20821
|
+
}),
|
|
20822
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M12 7.5v5.5" }),
|
|
20823
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M12 16.5h.01" })
|
|
20824
|
+
]
|
|
20825
|
+
})
|
|
20826
|
+
}),
|
|
20827
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
20828
|
+
className: KnowledgePanel_module_css_default.errorTitle,
|
|
20829
|
+
children: t("unavailable")
|
|
20830
|
+
}),
|
|
20831
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
20832
|
+
className: KnowledgePanel_module_css_default.errorDetail,
|
|
20833
|
+
children: t("unavailableDetail")
|
|
20834
|
+
}),
|
|
20835
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
20836
|
+
type: "button",
|
|
20837
|
+
className: KnowledgePanel_module_css_default.retry,
|
|
20838
|
+
onClick: () => {
|
|
20839
|
+
load();
|
|
20840
|
+
},
|
|
20841
|
+
children: t("retry")
|
|
20842
|
+
})
|
|
20843
|
+
]
|
|
20844
|
+
})
|
|
20468
20845
|
});
|
|
20469
20846
|
const { config, status } = state;
|
|
20470
20847
|
/**
|
|
@@ -22020,58 +22397,58 @@ window.__ModuleLoader__.load({
|
|
|
22020
22397
|
document.head.appendChild(tag);
|
|
22021
22398
|
}
|
|
22022
22399
|
var WorkflowPlaza_module_css_default = {
|
|
22400
|
+
"cardDesc": "lYC_0W_cardDesc",
|
|
22023
22401
|
"frequencies": "lYC_0W_frequencies",
|
|
22024
|
-
"failure": "lYC_0W_failure",
|
|
22025
|
-
"reviewList": "lYC_0W_reviewList",
|
|
22026
|
-
"reviewMeta": "lYC_0W_reviewMeta",
|
|
22027
|
-
"reviewDescription": "lYC_0W_reviewDescription",
|
|
22028
|
-
"tabs": "lYC_0W_tabs",
|
|
22029
22402
|
"pageTitle": "lYC_0W_pageTitle",
|
|
22030
|
-
"
|
|
22031
|
-
"
|
|
22032
|
-
"
|
|
22033
|
-
"
|
|
22034
|
-
"
|
|
22403
|
+
"reviewCard": "lYC_0W_reviewCard",
|
|
22404
|
+
"detailDialogBody": "lYC_0W_detailDialogBody",
|
|
22405
|
+
"mineStatus": "lYC_0W_mineStatus",
|
|
22406
|
+
"headerRow": "lYC_0W_headerRow",
|
|
22407
|
+
"dialogBody": "lYC_0W_dialogBody",
|
|
22408
|
+
"cronValid": "lYC_0W_cronValid",
|
|
22409
|
+
"tabs": "lYC_0W_tabs",
|
|
22410
|
+
"reviewDescription": "lYC_0W_reviewDescription",
|
|
22035
22411
|
"dialogIntro": "lYC_0W_dialogIntro",
|
|
22412
|
+
"tabActive": "lYC_0W_tabActive",
|
|
22036
22413
|
"mineScope": "lYC_0W_mineScope",
|
|
22037
|
-
"mineTime": "lYC_0W_mineTime",
|
|
22038
|
-
"reviewEmpty": "lYC_0W_reviewEmpty",
|
|
22039
|
-
"cardCron": "lYC_0W_cardCron",
|
|
22040
22414
|
"cardTitle": "lYC_0W_cardTitle",
|
|
22415
|
+
"reviewTitle": "lYC_0W_reviewTitle",
|
|
22041
22416
|
"mark": "lYC_0W_mark",
|
|
22042
|
-
"cronValid": "lYC_0W_cronValid",
|
|
22043
|
-
"detailDialogBody": "lYC_0W_detailDialogBody",
|
|
22044
|
-
"mineFooter": "lYC_0W_mineFooter",
|
|
22045
22417
|
"failureRow": "lYC_0W_failureRow",
|
|
22418
|
+
"failure": "lYC_0W_failure",
|
|
22046
22419
|
"reviewPrompt": "lYC_0W_reviewPrompt",
|
|
22047
|
-
"
|
|
22048
|
-
"
|
|
22049
|
-
"
|
|
22050
|
-
"
|
|
22051
|
-
"
|
|
22052
|
-
"
|
|
22053
|
-
"
|
|
22054
|
-
"detailInstruction": "lYC_0W_detailInstruction",
|
|
22420
|
+
"frequency": "lYC_0W_frequency",
|
|
22421
|
+
"tab": "lYC_0W_tab",
|
|
22422
|
+
"reviewActions": "lYC_0W_reviewActions",
|
|
22423
|
+
"mineTime": "lYC_0W_mineTime",
|
|
22424
|
+
"cardTop": "lYC_0W_cardTop",
|
|
22425
|
+
"mineFooter": "lYC_0W_mineFooter",
|
|
22426
|
+
"reviewMeta": "lYC_0W_reviewMeta",
|
|
22055
22427
|
"frequencyOn": "lYC_0W_frequencyOn",
|
|
22428
|
+
"body": "lYC_0W_body",
|
|
22429
|
+
"field": "lYC_0W_field",
|
|
22430
|
+
"page": "lYC_0W_page",
|
|
22431
|
+
"mineTags": "lYC_0W_mineTags",
|
|
22432
|
+
"actions": "lYC_0W_actions",
|
|
22056
22433
|
"cardFoot": "lYC_0W_cardFoot",
|
|
22057
|
-
"
|
|
22434
|
+
"cardCron": "lYC_0W_cardCron",
|
|
22058
22435
|
"review": "lYC_0W_review",
|
|
22059
|
-
"reviewNote": "lYC_0W_reviewNote",
|
|
22060
|
-
"reviewHead": "lYC_0W_reviewHead",
|
|
22061
|
-
"page": "lYC_0W_page",
|
|
22062
|
-
"cardTop": "lYC_0W_cardTop",
|
|
22063
|
-
"state": "lYC_0W_state",
|
|
22064
|
-
"tabCount": "lYC_0W_tabCount",
|
|
22065
22436
|
"cards": "lYC_0W_cards",
|
|
22066
|
-
"
|
|
22067
|
-
"
|
|
22068
|
-
"frequency": "lYC_0W_frequency",
|
|
22437
|
+
"state": "lYC_0W_state",
|
|
22438
|
+
"fieldLabel": "lYC_0W_fieldLabel",
|
|
22069
22439
|
"cronInvalid": "lYC_0W_cronInvalid",
|
|
22070
|
-
"
|
|
22071
|
-
"
|
|
22440
|
+
"dialogFoot": "lYC_0W_dialogFoot",
|
|
22441
|
+
"reviewEmpty": "lYC_0W_reviewEmpty",
|
|
22442
|
+
"cardIcon": "lYC_0W_cardIcon",
|
|
22443
|
+
"card": "lYC_0W_card",
|
|
22444
|
+
"reviewList": "lYC_0W_reviewList",
|
|
22445
|
+
"reviewHead": "lYC_0W_reviewHead",
|
|
22446
|
+
"detailInstruction": "lYC_0W_detailInstruction",
|
|
22072
22447
|
"cronInput": "lYC_0W_cronInput",
|
|
22073
|
-
"
|
|
22074
|
-
"
|
|
22448
|
+
"detailFacts": "lYC_0W_detailFacts",
|
|
22449
|
+
"detailDescription": "lYC_0W_detailDescription",
|
|
22450
|
+
"reviewNote": "lYC_0W_reviewNote",
|
|
22451
|
+
"tabCount": "lYC_0W_tabCount"
|
|
22075
22452
|
};
|
|
22076
22453
|
//#endregion
|
|
22077
22454
|
//#region src/client/workflows/WorkflowPlaza.tsx
|