dsh-plugin-core 0.20.3 → 0.20.6

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.
Files changed (159) hide show
  1. package/dist/design/tokens-css.generated.d.ts +1 -1
  2. package/dist/design/tokens-css.generated.d.ts.map +1 -1
  3. package/dist/design/tokens-css.generated.js +1 -1
  4. package/dist/design/tokens-css.generated.js.map +1 -1
  5. package/dist/explorer/FileBrowser.d.ts +13 -6
  6. package/dist/explorer/FileBrowser.d.ts.map +1 -1
  7. package/dist/explorer/FileBrowser.js +190 -305
  8. package/dist/explorer/FileBrowser.js.map +1 -1
  9. package/dist/explorer/crumb-nav.d.ts +45 -0
  10. package/dist/explorer/crumb-nav.d.ts.map +1 -0
  11. package/dist/explorer/crumb-nav.js +75 -0
  12. package/dist/explorer/crumb-nav.js.map +1 -0
  13. package/dist/explorer/crumbs-menu.d.ts +37 -0
  14. package/dist/explorer/crumbs-menu.d.ts.map +1 -0
  15. package/dist/explorer/crumbs-menu.js +102 -0
  16. package/dist/explorer/crumbs-menu.js.map +1 -0
  17. package/dist/explorer/explorer-css.generated.d.ts +1 -1
  18. package/dist/explorer/explorer-css.generated.d.ts.map +1 -1
  19. package/dist/explorer/explorer-css.generated.js +1 -1
  20. package/dist/explorer/explorer-css.generated.js.map +1 -1
  21. package/dist/explorer/fs-face.d.ts +36 -0
  22. package/dist/explorer/fs-face.d.ts.map +1 -0
  23. package/dist/explorer/fs-face.js +74 -0
  24. package/dist/explorer/fs-face.js.map +1 -0
  25. package/dist/explorer/index.d.ts +2 -1
  26. package/dist/explorer/index.d.ts.map +1 -1
  27. package/dist/explorer/index.js +2 -1
  28. package/dist/explorer/index.js.map +1 -1
  29. package/dist/explorer/landing.d.ts +26 -0
  30. package/dist/explorer/landing.d.ts.map +1 -0
  31. package/dist/explorer/landing.js +43 -0
  32. package/dist/explorer/landing.js.map +1 -0
  33. package/dist/explorer/open.d.ts +35 -38
  34. package/dist/explorer/open.d.ts.map +1 -1
  35. package/dist/explorer/open.js +124 -156
  36. package/dist/explorer/open.js.map +1 -1
  37. package/dist/explorer/preview/BytesPreview.d.ts +2 -3
  38. package/dist/explorer/preview/BytesPreview.d.ts.map +1 -1
  39. package/dist/explorer/preview/BytesPreview.js +3 -3
  40. package/dist/explorer/preview/BytesPreview.js.map +1 -1
  41. package/dist/explorer/preview/HtmlPreview.d.ts +2 -3
  42. package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -1
  43. package/dist/explorer/preview/HtmlPreview.js +4 -5
  44. package/dist/explorer/preview/HtmlPreview.js.map +1 -1
  45. package/dist/explorer/preview/OfficePreview.d.ts +2 -1
  46. package/dist/explorer/preview/OfficePreview.d.ts.map +1 -1
  47. package/dist/explorer/preview/OfficePreview.js +9 -2
  48. package/dist/explorer/preview/OfficePreview.js.map +1 -1
  49. package/dist/explorer/preview/TextPreview.d.ts +2 -3
  50. package/dist/explorer/preview/TextPreview.d.ts.map +1 -1
  51. package/dist/explorer/preview/TextPreview.js +3 -3
  52. package/dist/explorer/preview/TextPreview.js.map +1 -1
  53. package/dist/explorer/preview/index.d.ts +6 -3
  54. package/dist/explorer/preview/index.d.ts.map +1 -1
  55. package/dist/explorer/preview/index.js +3 -6
  56. package/dist/explorer/preview/index.js.map +1 -1
  57. package/dist/explorer/preview-title-bar.d.ts +26 -0
  58. package/dist/explorer/preview-title-bar.d.ts.map +1 -0
  59. package/dist/explorer/preview-title-bar.js +48 -0
  60. package/dist/explorer/preview-title-bar.js.map +1 -0
  61. package/dist/explorer/types.d.ts +25 -23
  62. package/dist/explorer/types.d.ts.map +1 -1
  63. package/dist/explorer/types.js +61 -120
  64. package/dist/explorer/types.js.map +1 -1
  65. package/dist/host/fs-route.d.ts +25 -0
  66. package/dist/host/fs-route.d.ts.map +1 -0
  67. package/dist/host/fs-route.js +243 -0
  68. package/dist/host/fs-route.js.map +1 -0
  69. package/dist/host/index.d.ts +2 -0
  70. package/dist/host/index.d.ts.map +1 -1
  71. package/dist/host/index.js +1 -0
  72. package/dist/host/index.js.map +1 -1
  73. package/dist/session/session-css.generated.d.ts +1 -1
  74. package/dist/session/session-css.generated.d.ts.map +1 -1
  75. package/dist/session/session-css.generated.js +1 -1
  76. package/dist/session/session-css.generated.js.map +1 -1
  77. package/dist/ui/DateTimePicker.d.ts.map +1 -1
  78. package/dist/ui/DateTimePicker.js +5 -1
  79. package/dist/ui/DateTimePicker.js.map +1 -1
  80. package/dist/ui/Modal.d.ts.map +1 -1
  81. package/dist/ui/Modal.js +7 -2
  82. package/dist/ui/Modal.js.map +1 -1
  83. package/dist/ui/PanelDock.d.ts.map +1 -1
  84. package/dist/ui/PanelDock.js +4 -8
  85. package/dist/ui/PanelDock.js.map +1 -1
  86. package/dist/ui/Picker.d.ts.map +1 -1
  87. package/dist/ui/Picker.js +6 -3
  88. package/dist/ui/Picker.js.map +1 -1
  89. package/dist/ui/code-viewer-css.generated.d.ts +1 -1
  90. package/dist/ui/code-viewer-css.generated.d.ts.map +1 -1
  91. package/dist/ui/code-viewer-css.generated.js +1 -1
  92. package/dist/ui/code-viewer-css.generated.js.map +1 -1
  93. package/dist/ui/controls/datetime-css.generated.d.ts +1 -1
  94. package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -1
  95. package/dist/ui/controls/datetime-css.generated.js +1 -1
  96. package/dist/ui/controls/datetime-css.generated.js.map +1 -1
  97. package/dist/ui/controls/field-css.generated.d.ts +1 -1
  98. package/dist/ui/controls/field-css.generated.d.ts.map +1 -1
  99. package/dist/ui/controls/field-css.generated.js +1 -1
  100. package/dist/ui/controls/field-css.generated.js.map +1 -1
  101. package/dist/ui/controls/loading-css.generated.d.ts +1 -1
  102. package/dist/ui/controls/loading-css.generated.d.ts.map +1 -1
  103. package/dist/ui/controls/loading-css.generated.js +1 -1
  104. package/dist/ui/controls/loading-css.generated.js.map +1 -1
  105. package/dist/ui/feedback-css.generated.d.ts +1 -1
  106. package/dist/ui/feedback-css.generated.d.ts.map +1 -1
  107. package/dist/ui/feedback-css.generated.js +1 -1
  108. package/dist/ui/feedback-css.generated.js.map +1 -1
  109. package/dist/ui/marquee-css.generated.d.ts +1 -1
  110. package/dist/ui/marquee-css.generated.d.ts.map +1 -1
  111. package/dist/ui/marquee-css.generated.js +1 -1
  112. package/dist/ui/marquee-css.generated.js.map +1 -1
  113. package/dist/ui/overlay-css.generated.d.ts +1 -1
  114. package/dist/ui/overlay-css.generated.d.ts.map +1 -1
  115. package/dist/ui/overlay-css.generated.js +1 -1
  116. package/dist/ui/overlay-css.generated.js.map +1 -1
  117. package/dist/ui/overlay.d.ts +8 -2
  118. package/dist/ui/overlay.d.ts.map +1 -1
  119. package/dist/ui/overlay.js +7 -6
  120. package/dist/ui/overlay.js.map +1 -1
  121. package/dist/ui/panel-css.d.ts +2 -0
  122. package/dist/ui/panel-css.d.ts.map +1 -0
  123. package/dist/ui/panel-css.generated.d.ts +2 -0
  124. package/dist/ui/panel-css.generated.d.ts.map +1 -0
  125. package/dist/ui/panel-css.generated.js +4 -0
  126. package/dist/ui/panel-css.generated.js.map +1 -0
  127. package/dist/ui/panel-css.js +2 -0
  128. package/dist/ui/panel-css.js.map +1 -0
  129. package/dist/ui/panel-dock-css.generated.d.ts +1 -1
  130. package/dist/ui/panel-dock-css.generated.d.ts.map +1 -1
  131. package/dist/ui/panel-dock-css.generated.js +1 -1
  132. package/dist/ui/panel-dock-css.generated.js.map +1 -1
  133. package/dist/ui/panel.d.ts +41 -0
  134. package/dist/ui/panel.d.ts.map +1 -0
  135. package/dist/ui/panel.js +37 -0
  136. package/dist/ui/panel.js.map +1 -0
  137. package/dist/ui/picker-css.generated.d.ts +1 -1
  138. package/dist/ui/picker-css.generated.d.ts.map +1 -1
  139. package/dist/ui/picker-css.generated.js +1 -1
  140. package/dist/ui/picker-css.generated.js.map +1 -1
  141. package/dist/ui/side-panel-css.generated.d.ts +1 -1
  142. package/dist/ui/side-panel-css.generated.d.ts.map +1 -1
  143. package/dist/ui/side-panel-css.generated.js +1 -1
  144. package/dist/ui/side-panel-css.generated.js.map +1 -1
  145. package/dist/utils/i18n.d.ts +1 -1
  146. package/dist/utils/i18n.d.ts.map +1 -1
  147. package/dist/utils/i18n.js +6 -0
  148. package/dist/utils/i18n.js.map +1 -1
  149. package/docs/design/architecture.md +9 -4
  150. package/docs/design/external/dsh-host.md +60 -0
  151. package/docs/design/style.md +54 -0
  152. package/docs/help/explorer.doc.ts +35 -30
  153. package/docs/help/explorer.md +23 -19
  154. package/docs/help/integration.doc.ts +15 -10
  155. package/docs/help/integration.md +15 -10
  156. package/docs/help/ui.doc.ts +2 -2
  157. package/docs/help/ui.md +2 -2
  158. package/docs/requirements.md +2 -1
  159. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- export declare const SIDE_PANEL_CSS = "/* \u4FA7\u8FB9\u9762\u677F\u7684\u516C\u5171\u76AE\u80A4 \u2014\u2014 PanelDock\uFF08\u5360\u5BBD\u5206\u680F\uFF09\u4E0E SideSheet\uFF08\u8986\u76D6\u62BD\u5C49\uFF09\u5171\u7528\u8FD9\u4E00\u4EFD\u3002\n *\n * \u5206\u754C\uFF1A**\u76AE\u80A4\u5728\u8FD9\u91CC\uFF0C\u5B9A\u4F4D\u5404\u81EA\u5199**\u3002\u4E24\u8005\u552F\u4E00\u7684\u5F62\u6001\u5DEE\u5F02\u5C31\u662F\u300C\u600E\u4E48\u5360\u4F4D\u300D\u2014\u2014\n * PanelDock \u7528 sticky \u5360\u5BBD\u6324\u7A84\u4E3B\u533A\uFF08panel-dock.css\uFF09\uFF0CSideSheet \u7528 absolute \u76D6\u5728\u9875\u9762\u4E0A\uFF08side-sheet.css\uFF09\u3002\n *\n * \u7C7B\u540D\u6CBF\u7528 dshpc-dock__* \u524D\u7F00\uFF1A\u90A3\u662F\u65E2\u6709\u516C\u5F00\u9762\uFF08\u6587\u6863\u4E0E\u6D88\u8D39\u65B9\u90FD\u5728\u7528\uFF09\uFF0C\n * \u8FD9\u91CC\u53EA\u642C\u6587\u4EF6\u4E0D\u6539\u540D\uFF1B\u65B0\u589E\u7684\u4E2D\u6027\u7C7B\u662F .dshpc-side-surface\uFF08\u5916\u89C2\u57FA\u7C7B\uFF09\u3002 */\n\n/* \u5165\u573A\uFF1A\u5BBD\u5EA6\u4ECE 0 \u957F\u51FA\u6765\uFF08keyframes \u53EA\u5199 from\uFF0C\u7EC8\u70B9\u53D6\u5185\u8054 / \u72B6\u6001\u5BBD\u5EA6\uFF09\u3002\u4E24\u8FB9\u5171\u7528\u3002 */\n@keyframes dshpc-side-in{from{width:0;opacity:0;overflow:hidden}}\n\n/* \u5916\u89C2\u57FA\u7C7B\uFF1A\u80CC\u666F / \u6587\u5B57\u8272 / \u9634\u5F71 / \u7EB5\u5411 flex\u3002**\u4E0D\u542B** position\u3001\u9AD8\u5EA6\u3001\u8FB9\u6846\u65B9\u5411\u3001\u52A8\u753B\u89E6\u53D1\u3002 */\n.dshpc-side-surface{\n box-sizing:border-box;\n display:flex;flex-direction:column;flex:0 0 auto;min-width:0;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n box-shadow:var(--dshpc-shadow-2);\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease);\n animation:dshpc-side-in .22s var(--dshpc-ease);\n}\n\n/* \u5934\u90E8\uFF1A\u53F3\u4FA7 34px = 8(\u8FB9\u8DDD) + 20(\u5173\u94AE) + 6(\u547C\u5438)\uFF1A\u7ED9\u7EDD\u5BF9\u5B9A\u4F4D\u7684\u5173\u94AE\u7559\u4F4D\uFF0C\u6807\u9898/extra \u4E0D\u4ECE\u5B83\u5E95\u4E0B\u94BB\u3002 */\n.dshpc-dock__head{\n flex:none;display:flex;align-items:center;gap:8px;\n padding:10px 34px 10px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);\n}\n/* \u56FE\u6807\u4F4D / \u6807\u9898\u53F3\u4FA7\u7684\u5185\u5BB9\u4F4D\uFF1A\u6D88\u8D39\u65B9\u4F20 ReactNode\uFF0C\u53EF\u585E\u591A\u4E2A\uFF1B\u5E93\u53EA\u8D1F\u8D23\u6392\u5E03\uFF0C\u4E0D\u62A2\u5BBD\u5EA6\u3002 */\n.dshpc-dock__lead{display:inline-flex;align-items:center;gap:6px;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-dock__extra{display:inline-flex;align-items:center;gap:6px;flex:none;margin-left:auto}\n/* \u81EA\u5B9A\u4E49\u5934\u90E8\uFF1A\u6574\u884C\u5F52\u8C03\u7528\u65B9 \u2014\u2014 \u4E0D\u52A0\u5185\u8FB9\u8DDD/\u8FB9\u6846/\u80CC\u666F\uFF0C\u4E5F\u4E0D\u7ED9\u5173\u94AE\u7559\u5185\u8054\u7A7A\u95F4\uFF08\u5173\u94AE\u662F\u7EDD\u5BF9\u5B9A\u4F4D\u7684\uFF09\u3002 */\n.dshpc-dock__head--custom{display:block;padding:0;border-bottom:none}\n.dshpc-dock__title{\n flex:1 1 auto;min-width:0;\n overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\n font-size:var(--dshpc-font-md);font-weight:600;\n}\n/* \u5173\u95ED\u94AE\uFF1A20\u00D720 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF08\u4E0E Modal \u7684\u5173\u95ED\u94AE\u540C\u89C4\u683C\uFF0C\u4E0D\u501F Picker \u89E6\u53D1\u5668\u76AE\u80A4\uFF09\u3002 */\n.dshpc-dock__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:20px;height:20px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);\n font-family:inherit;font-size:13px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-dock__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-dock__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* \u5934\u90E8\u5173\u94AE\uFF1A\u7EDD\u5BF9\u5B9A\u4F4D\uFF08top 10 / right 8\uFF09\uFF0C\u951A\u70B9\u662F\u9762\u677F\u672C\u8EAB \u2014\u2014 \u6B63\u6587\u6EDA\u52A8\u5B83\u4E0D\u8DDF\u6EDA\u3002 */\n.dshpc-dock__close--abs{position:absolute;top:10px;right:8px;z-index:8}\n/* \u6D6E\u52A8\u5173\u94AE\uFF1A\u65E0\u5934\u90E8\u9762\u677F\u7528\uFF0C\u7565\u6536\u4E00\u70B9\u8FB9\u8DDD\u3002 */\n.dshpc-dock__close--floating{\n position:absolute;top:6px;right:6px;z-index:8;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border-faint);\n}\n\n/* \u5185\u5BB9\u533A\u81EA\u5DF1\u6EDA\uFF08\u9762\u677F\u9AD8\u5EA6\u9501\u6B7B\uFF0C\u5185\u5BB9\u4E0D\u8BBE\u5185\u90E8\u6EDA\u52A8\u5C31\u4F1A\u628A\u9875\u9762\u6491\u9AD8\uFF09\u3002 */\n.dshpc-dock__body{flex:1 1 auto;min-height:0;overflow:auto}\n\n/* \u62D6\u62FD\u6761\uFF1A6px \u547D\u4E2D\u533A\uFF0C**\u81EA\u5DF1\u4E0D\u753B\u4EFB\u4F55\u7EBF**\uFF08\u8D34\u5728\u671D\u5185\u90A3\u4E00\u4FA7\uFF0C\u955C\u50CF\u7531\u5404\u81EA\u7684\u5B9A\u4F4D\u6587\u4EF6\u505A\uFF09\u3002\n hover / \u62D6\u52A8\u65F6\u628A\u9762\u677F\u81EA\u5DF1\u7684\u8FB9\u6846\u67D3\u6210\u84DD \u2014\u2014 \u84DD\u7EBF\u53EA\u51C6\u6539\u539F\u7EBF\uFF0C\u4E0D\u51C6\u5728\u65C1\u8FB9\u518D\u52A0\u4E00\u6761\u3002\n z-index 7 \u5FC5\u987B\u9AD8\u4E8E\u9762\u677F\u5185\u5BB9\u91CC\u7684\u6D6E\u5C42\uFF08\u590D\u5236\u94AE\u4E00\u7C7B\uFF09\uFF0C\u5426\u5219\u547D\u4E2D\u533A\u4F1A\u88AB\u5185\u5BB9\u76D6\u4F4F\u3002 */\n.dshpc-dock__resizer{\n position:absolute;left:0;top:0;bottom:0;width:6px;\n z-index:7;cursor:col-resize;background:transparent;\n}\n.dshpc-side-surface:has(> .dshpc-dock__resizer:hover),\n.dshpc-side-surface--resizing{\n /* \u539F\u7EBF\u4FDD\u7559\u300C\u4E0A\u4E0B\u6E10\u9690\u300D\u5DE5\u4F5C\u533A\u6307\u793A\u6761\u8D28\u611F\uFF1A\u628A\u9762\u677F\u81EA\u5DF1\u7684\u90A3\u6761\u8FB9\u6846\u6362\u6210\u540C\u6B3E\u6E10\u53D8\u3002\n \u9762\u677F\u56DB\u8FB9\u91CC\u53EA\u6709\u671D\u5185\u4E00\u4FA7\u6709\u5BBD\u5EA6\uFF0C\u6240\u4EE5\u6E10\u53D8\u53EA\u843D\u5728\u90A3\u4E00\u4FA7\u3002 */\n border-image:linear-gradient(180deg,transparent,var(--dshpc-business) 30% 70%,transparent) 1;\n}\n/* \u62D6\u52A8\u671F\uFF1A\u2460 <iframe>\uFF08PDF / HTML \u9884\u89C8\uFF09\u662F\u72EC\u7ACB\u6587\u6863\uFF0C\u4F1A\u541E\u6389\u7236\u6587\u6863\u7684 pointermove \u2014\u2014\n \u8BA9\u51FA\u6307\u9488\u4E8B\u4EF6\uFF1B\u2461 contain \u628A\u91CD\u6392\u9694\u79BB\u5728\u9762\u677F\u5185\uFF0C\u5426\u5219\u6BCF\u5E27\u6539\u5BBD\u90FD\u4F1A\u7275\u52A8\u6574\u9875\u91CD\u6392\u3002 */\n.dshpc-side-surface--resizing{contain:layout paint;will-change:width}\n.dshpc-side-surface--resizing iframe{pointer-events:none}\n\n/* \u52A8\u6548\u793C\u8C8C\uFF1A\u7CFB\u7EDF\u58F0\u660E\u51CF\u5C11\u52A8\u6548\u65F6\u9000\u5316\u4E3A\u77AC\u65F6\uFF08\u529F\u80FD\u4E0D\u53D7\u5F71\u54CD\uFF09\u3002 */\n@media (prefers-reduced-motion:reduce){\n .dshpc-side-surface{animation:none}\n}\n";
1
+ export declare const SIDE_PANEL_CSS = "/* \u4FA7\u8FB9\u9762\u677F\u7684\u516C\u5171\u76AE\u80A4 \u2014\u2014 PanelDock\uFF08\u5360\u5BBD\u5206\u680F\uFF09\u4E0E SideSheet\uFF08\u8986\u76D6\u62BD\u5C49\uFF09\u5171\u7528\u8FD9\u4E00\u4EFD\u3002\n *\n * \u5206\u754C\uFF1A**\u76AE\u80A4\u5728\u8FD9\u91CC\uFF0C\u5B9A\u4F4D\u5404\u81EA\u5199**\u3002\u4E24\u8005\u552F\u4E00\u7684\u5F62\u6001\u5DEE\u5F02\u5C31\u662F\u300C\u600E\u4E48\u5360\u4F4D\u300D\u2014\u2014\n * PanelDock \u7528 sticky \u5360\u5BBD\u6324\u7A84\u4E3B\u533A\uFF08panel-dock.css\uFF09\uFF0CSideSheet \u7528 absolute \u76D6\u5728\u9875\u9762\u4E0A\uFF08side-sheet.css\uFF09\u3002\n *\n * \u7C7B\u540D\u6CBF\u7528 dshpc-dock__* \u524D\u7F00\uFF1A\u90A3\u662F\u65E2\u6709\u516C\u5F00\u9762\uFF08\u6587\u6863\u4E0E\u6D88\u8D39\u65B9\u90FD\u5728\u7528\uFF09\uFF0C\n * \u8FD9\u91CC\u53EA\u642C\u6587\u4EF6\u4E0D\u6539\u540D\uFF1B\u65B0\u589E\u7684\u4E2D\u6027\u7C7B\u662F .dshpc-side-surface\uFF08\u5916\u89C2\u57FA\u7C7B\uFF09\u3002 */\n\n/* \u5165\u573A\uFF1A\u5BBD\u5EA6\u4ECE 0 \u957F\u51FA\u6765\uFF08keyframes \u53EA\u5199 from\uFF0C\u7EC8\u70B9\u53D6\u5185\u8054 / \u72B6\u6001\u5BBD\u5EA6\uFF09\u3002\u4E24\u8FB9\u5171\u7528\u3002 */\n@keyframes dshpc-side-in{from{width:0;opacity:0;overflow:hidden}}\n\n/* \u5916\u89C2\u57FA\u7C7B\uFF1A\u80CC\u666F / \u6587\u5B57\u8272 / \u9634\u5F71 / \u7EB5\u5411 flex\u3002**\u4E0D\u542B** position\u3001\u9AD8\u5EA6\u3001\u8FB9\u6846\u65B9\u5411\u3001\u52A8\u753B\u89E6\u53D1\u3002 */\n.dshpc-side-surface{\n box-sizing:border-box;\n display:flex;flex-direction:column;flex:0 0 auto;min-width:0;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n box-shadow:var(--dshpc-shadow-2);\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease);\n animation:dshpc-side-in .22s var(--dshpc-ease);\n}\n\n/* \u5934\u90E8\uFF1A\u53F3\u4FA7 34px = 8(\u8FB9\u8DDD) + 20(\u5173\u94AE) + 6(\u547C\u5438)\uFF1A\u7ED9\u7EDD\u5BF9\u5B9A\u4F4D\u7684\u5173\u94AE\u7559\u4F4D\uFF0C\u6807\u9898/extra \u4E0D\u4ECE\u5B83\u5E95\u4E0B\u94BB\u3002 */\n.dshpc-dock__head{\n flex:none;display:flex;align-items:center;gap:8px;\n padding:10px 34px 10px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);\n}\n/* \u56FE\u6807\u4F4D / \u6807\u9898\u53F3\u4FA7\u7684\u5185\u5BB9\u4F4D\uFF1A\u6D88\u8D39\u65B9\u4F20 ReactNode\uFF0C\u53EF\u585E\u591A\u4E2A\uFF1B\u5E93\u53EA\u8D1F\u8D23\u6392\u5E03\uFF0C\u4E0D\u62A2\u5BBD\u5EA6\u3002 */\n.dshpc-dock__lead{display:inline-flex;align-items:center;gap:6px;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-dock__extra{display:inline-flex;align-items:center;gap:6px;flex:none;margin-left:auto}\n/* \u81EA\u5B9A\u4E49\u5934\u90E8\uFF1A\u6574\u884C\u5F52\u8C03\u7528\u65B9 \u2014\u2014 \u4E0D\u52A0\u5185\u8FB9\u8DDD/\u8FB9\u6846/\u80CC\u666F\uFF0C\u4E5F\u4E0D\u7ED9\u5173\u94AE\u7559\u5185\u8054\u7A7A\u95F4\uFF08\u5173\u94AE\u662F\u7EDD\u5BF9\u5B9A\u4F4D\u7684\uFF09\u3002 */\n.dshpc-dock__head--custom{display:block;padding:0;border-bottom:none}\n.dshpc-dock__title{\n flex:1 1 auto;min-width:0;\n overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\n font-size:var(--dshpc-font-md);font-weight:600;\n}\n/* \u5173\u95ED\u94AE\uFF1A20\u00D720 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF08\u4E0E Modal \u7684\u5173\u95ED\u94AE\u540C\u89C4\u683C\uFF0C\u4E0D\u501F Picker \u89E6\u53D1\u5668\u76AE\u80A4\uFF09\u3002 */\n.dshpc-dock__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:20px;height:20px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);\n font-family:inherit;font-size:13px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-dock__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-dock__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* \u5934\u90E8\u5173\u94AE\uFF1A\u7EDD\u5BF9\u5B9A\u4F4D\uFF08top 10 / right 8\uFF09\uFF0C\u951A\u70B9\u662F\u9762\u677F\u672C\u8EAB \u2014\u2014 \u6B63\u6587\u6EDA\u52A8\u5B83\u4E0D\u8DDF\u6EDA\u3002 */\n.dshpc-dock__close--abs{position:absolute;top:10px;right:8px;z-index:8}\n/* \u6D6E\u52A8\u5173\u94AE\uFF1A\u65E0\u5934\u90E8\u9762\u677F\u7528\uFF0C\u7565\u6536\u4E00\u70B9\u8FB9\u8DDD\u3002 */\n.dshpc-dock__close--floating{\n position:absolute;top:6px;right:6px;z-index:8;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border-faint);\n}\n\n/* \u5185\u5BB9\u533A\u81EA\u5DF1\u6EDA\uFF08\u9762\u677F\u9AD8\u5EA6\u9501\u6B7B\uFF0C\u5185\u5BB9\u4E0D\u8BBE\u5185\u90E8\u6EDA\u52A8\u5C31\u4F1A\u628A\u9875\u9762\u6491\u9AD8\uFF09\u3002\n \u900F\u660E\u53F3\u8FB9\u6846 = \u6EDA\u52A8\u6761\u4E0E\u9762\u677F\u53F3\u7F18\u9694 1px\uFF08\u53E3\u5F84\u89C1 style.md \u00A7\u6EDA\u52A8\u6761\u8BA9\u4F4D\uFF09\u3002 */\n.dshpc-dock__body{flex:1 1 auto;min-height:0;overflow:auto;border-right:1px solid transparent}\n\n/* \u62D6\u62FD\u6761\uFF1A6px \u547D\u4E2D\u533A\uFF0C**\u81EA\u5DF1\u4E0D\u753B\u4EFB\u4F55\u7EBF**\uFF08\u8D34\u5728\u671D\u5185\u90A3\u4E00\u4FA7\uFF0C\u955C\u50CF\u7531\u5404\u81EA\u7684\u5B9A\u4F4D\u6587\u4EF6\u505A\uFF09\u3002\n hover / \u62D6\u52A8\u65F6\u628A\u9762\u677F\u81EA\u5DF1\u7684\u8FB9\u6846\u67D3\u6210\u84DD \u2014\u2014 \u84DD\u7EBF\u53EA\u51C6\u6539\u539F\u7EBF\uFF0C\u4E0D\u51C6\u5728\u65C1\u8FB9\u518D\u52A0\u4E00\u6761\u3002\n z-index 7 \u5FC5\u987B\u9AD8\u4E8E\u9762\u677F\u5185\u5BB9\u91CC\u7684\u6D6E\u5C42\uFF08\u590D\u5236\u94AE\u4E00\u7C7B\uFF09\uFF0C\u5426\u5219\u547D\u4E2D\u533A\u4F1A\u88AB\u5185\u5BB9\u76D6\u4F4F\u3002 */\n.dshpc-dock__resizer{\n position:absolute;left:0;top:0;bottom:0;width:6px;\n z-index:7;cursor:col-resize;background:transparent;\n}\n.dshpc-side-surface:has(> .dshpc-dock__resizer:hover),\n.dshpc-side-surface--resizing{\n /* \u539F\u7EBF\u4FDD\u7559\u300C\u4E0A\u4E0B\u6E10\u9690\u300D\u5DE5\u4F5C\u533A\u6307\u793A\u6761\u8D28\u611F\uFF1A\u628A\u9762\u677F\u81EA\u5DF1\u7684\u90A3\u6761\u8FB9\u6846\u6362\u6210\u540C\u6B3E\u6E10\u53D8\u3002\n \u9762\u677F\u56DB\u8FB9\u91CC\u53EA\u6709\u671D\u5185\u4E00\u4FA7\u6709\u5BBD\u5EA6\uFF0C\u6240\u4EE5\u6E10\u53D8\u53EA\u843D\u5728\u90A3\u4E00\u4FA7\u3002 */\n border-image:linear-gradient(180deg,transparent,var(--dshpc-business) 30% 70%,transparent) 1;\n}\n/* \u62D6\u52A8\u671F\uFF1A\u2460 <iframe>\uFF08PDF / HTML \u9884\u89C8\uFF09\u662F\u72EC\u7ACB\u6587\u6863\uFF0C\u4F1A\u541E\u6389\u7236\u6587\u6863\u7684 pointermove \u2014\u2014\n \u8BA9\u51FA\u6307\u9488\u4E8B\u4EF6\uFF1B\u2461 contain \u628A\u91CD\u6392\u9694\u79BB\u5728\u9762\u677F\u5185\uFF0C\u5426\u5219\u6BCF\u5E27\u6539\u5BBD\u90FD\u4F1A\u7275\u52A8\u6574\u9875\u91CD\u6392\u3002 */\n.dshpc-side-surface--resizing{contain:layout paint;will-change:width}\n.dshpc-side-surface--resizing iframe{pointer-events:none}\n\n/* \u52A8\u6548\u793C\u8C8C\uFF1A\u7CFB\u7EDF\u58F0\u660E\u51CF\u5C11\u52A8\u6548\u65F6\u9000\u5316\u4E3A\u77AC\u65F6\uFF08\u529F\u80FD\u4E0D\u53D7\u5F71\u54CD\uFF09\u3002 */\n@media (prefers-reduced-motion:reduce){\n .dshpc-side-surface{animation:none}\n}\n";
2
2
  //# sourceMappingURL=side-panel-css.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-panel-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/side-panel-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,uwNAAohH,CAAA"}
1
+ {"version":3,"file":"side-panel-css.generated.d.ts","sourceRoot":"","sources":["../../src/ui/side-panel-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,49NAAumH,CAAA"}
@@ -1,4 +1,4 @@
1
1
  // ⚠️ 生成物,勿手改。真源 = src/ui/side-panel.css
2
2
  // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
- export const SIDE_PANEL_CSS = "/* 侧边面板的公共皮肤 —— PanelDock(占宽分栏)与 SideSheet(覆盖抽屉)共用这一份。\n *\n * 分界:**皮肤在这里,定位各自写**。两者唯一的形态差异就是「怎么占位」——\n * PanelDock 用 sticky 占宽挤窄主区(panel-dock.css),SideSheet 用 absolute 盖在页面上(side-sheet.css)。\n *\n * 类名沿用 dshpc-dock__* 前缀:那是既有公开面(文档与消费方都在用),\n * 这里只搬文件不改名;新增的中性类是 .dshpc-side-surface(外观基类)。 */\n\n/* 入场:宽度从 0 长出来(keyframes 只写 from,终点取内联 / 状态宽度)。两边共用。 */\n@keyframes dshpc-side-in{from{width:0;opacity:0;overflow:hidden}}\n\n/* 外观基类:背景 / 文字色 / 阴影 / 纵向 flex。**不含** position、高度、边框方向、动画触发。 */\n.dshpc-side-surface{\n box-sizing:border-box;\n display:flex;flex-direction:column;flex:0 0 auto;min-width:0;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n box-shadow:var(--dshpc-shadow-2);\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease);\n animation:dshpc-side-in .22s var(--dshpc-ease);\n}\n\n/* 头部:右侧 34px = 8(边距) + 20(关钮) + 6(呼吸):给绝对定位的关钮留位,标题/extra 不从它底下钻。 */\n.dshpc-dock__head{\n flex:none;display:flex;align-items:center;gap:8px;\n padding:10px 34px 10px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);\n}\n/* 图标位 / 标题右侧的内容位:消费方传 ReactNode,可塞多个;库只负责排布,不抢宽度。 */\n.dshpc-dock__lead{display:inline-flex;align-items:center;gap:6px;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-dock__extra{display:inline-flex;align-items:center;gap:6px;flex:none;margin-left:auto}\n/* 自定义头部:整行归调用方 —— 不加内边距/边框/背景,也不给关钮留内联空间(关钮是绝对定位的)。 */\n.dshpc-dock__head--custom{display:block;padding:0;border-bottom:none}\n.dshpc-dock__title{\n flex:1 1 auto;min-width:0;\n overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\n font-size:var(--dshpc-font-md);font-weight:600;\n}\n/* 关闭钮:20×20 方角图标位(与 Modal 的关闭钮同规格,不借 Picker 触发器皮肤)。 */\n.dshpc-dock__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:20px;height:20px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);\n font-family:inherit;font-size:13px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-dock__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-dock__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* 头部关钮:绝对定位(top 10 / right 8),锚点是面板本身 —— 正文滚动它不跟滚。 */\n.dshpc-dock__close--abs{position:absolute;top:10px;right:8px;z-index:8}\n/* 浮动关钮:无头部面板用,略收一点边距。 */\n.dshpc-dock__close--floating{\n position:absolute;top:6px;right:6px;z-index:8;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border-faint);\n}\n\n/* 内容区自己滚(面板高度锁死,内容不设内部滚动就会把页面撑高)。 */\n.dshpc-dock__body{flex:1 1 auto;min-height:0;overflow:auto}\n\n/* 拖拽条:6px 命中区,**自己不画任何线**(贴在朝内那一侧,镜像由各自的定位文件做)。\n hover / 拖动时把面板自己的边框染成蓝 —— 蓝线只准改原线,不准在旁边再加一条。\n z-index 7 必须高于面板内容里的浮层(复制钮一类),否则命中区会被内容盖住。 */\n.dshpc-dock__resizer{\n position:absolute;left:0;top:0;bottom:0;width:6px;\n z-index:7;cursor:col-resize;background:transparent;\n}\n.dshpc-side-surface:has(> .dshpc-dock__resizer:hover),\n.dshpc-side-surface--resizing{\n /* 原线保留「上下渐隐」工作区指示条质感:把面板自己的那条边框换成同款渐变。\n 面板四边里只有朝内一侧有宽度,所以渐变只落在那一侧。 */\n border-image:linear-gradient(180deg,transparent,var(--dshpc-business) 30% 70%,transparent) 1;\n}\n/* 拖动期:① <iframe>(PDF / HTML 预览)是独立文档,会吞掉父文档的 pointermove ——\n 让出指针事件;② contain 把重排隔离在面板内,否则每帧改宽都会牵动整页重排。 */\n.dshpc-side-surface--resizing{contain:layout paint;will-change:width}\n.dshpc-side-surface--resizing iframe{pointer-events:none}\n\n/* 动效礼貌:系统声明减少动效时退化为瞬时(功能不受影响)。 */\n@media (prefers-reduced-motion:reduce){\n .dshpc-side-surface{animation:none}\n}\n";
3
+ export const SIDE_PANEL_CSS = "/* 侧边面板的公共皮肤 —— PanelDock(占宽分栏)与 SideSheet(覆盖抽屉)共用这一份。\n *\n * 分界:**皮肤在这里,定位各自写**。两者唯一的形态差异就是「怎么占位」——\n * PanelDock 用 sticky 占宽挤窄主区(panel-dock.css),SideSheet 用 absolute 盖在页面上(side-sheet.css)。\n *\n * 类名沿用 dshpc-dock__* 前缀:那是既有公开面(文档与消费方都在用),\n * 这里只搬文件不改名;新增的中性类是 .dshpc-side-surface(外观基类)。 */\n\n/* 入场:宽度从 0 长出来(keyframes 只写 from,终点取内联 / 状态宽度)。两边共用。 */\n@keyframes dshpc-side-in{from{width:0;opacity:0;overflow:hidden}}\n\n/* 外观基类:背景 / 文字色 / 阴影 / 纵向 flex。**不含** position、高度、边框方向、动画触发。 */\n.dshpc-side-surface{\n box-sizing:border-box;\n display:flex;flex-direction:column;flex:0 0 auto;min-width:0;\n background:var(--dshpc-surface-base);color:var(--dshpc-fg);\n box-shadow:var(--dshpc-shadow-2);\n transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease);\n animation:dshpc-side-in .22s var(--dshpc-ease);\n}\n\n/* 头部:右侧 34px = 8(边距) + 20(关钮) + 6(呼吸):给绝对定位的关钮留位,标题/extra 不从它底下钻。 */\n.dshpc-dock__head{\n flex:none;display:flex;align-items:center;gap:8px;\n padding:10px 34px 10px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);\n}\n/* 图标位 / 标题右侧的内容位:消费方传 ReactNode,可塞多个;库只负责排布,不抢宽度。 */\n.dshpc-dock__lead{display:inline-flex;align-items:center;gap:6px;flex:none;color:var(--dshpc-fg-2)}\n.dshpc-dock__extra{display:inline-flex;align-items:center;gap:6px;flex:none;margin-left:auto}\n/* 自定义头部:整行归调用方 —— 不加内边距/边框/背景,也不给关钮留内联空间(关钮是绝对定位的)。 */\n.dshpc-dock__head--custom{display:block;padding:0;border-bottom:none}\n.dshpc-dock__title{\n flex:1 1 auto;min-width:0;\n overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\n font-size:var(--dshpc-font-md);font-weight:600;\n}\n/* 关闭钮:20×20 方角图标位(与 Modal 的关闭钮同规格,不借 Picker 触发器皮肤)。 */\n.dshpc-dock__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:20px;height:20px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);\n font-family:inherit;font-size:13px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-dock__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-dock__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n/* 头部关钮:绝对定位(top 10 / right 8),锚点是面板本身 —— 正文滚动它不跟滚。 */\n.dshpc-dock__close--abs{position:absolute;top:10px;right:8px;z-index:8}\n/* 浮动关钮:无头部面板用,略收一点边距。 */\n.dshpc-dock__close--floating{\n position:absolute;top:6px;right:6px;z-index:8;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border-faint);\n}\n\n/* 内容区自己滚(面板高度锁死,内容不设内部滚动就会把页面撑高)。\n 透明右边框 = 滚动条与面板右缘隔 1px(口径见 style.md §滚动条让位)。 */\n.dshpc-dock__body{flex:1 1 auto;min-height:0;overflow:auto;border-right:1px solid transparent}\n\n/* 拖拽条:6px 命中区,**自己不画任何线**(贴在朝内那一侧,镜像由各自的定位文件做)。\n hover / 拖动时把面板自己的边框染成蓝 —— 蓝线只准改原线,不准在旁边再加一条。\n z-index 7 必须高于面板内容里的浮层(复制钮一类),否则命中区会被内容盖住。 */\n.dshpc-dock__resizer{\n position:absolute;left:0;top:0;bottom:0;width:6px;\n z-index:7;cursor:col-resize;background:transparent;\n}\n.dshpc-side-surface:has(> .dshpc-dock__resizer:hover),\n.dshpc-side-surface--resizing{\n /* 原线保留「上下渐隐」工作区指示条质感:把面板自己的那条边框换成同款渐变。\n 面板四边里只有朝内一侧有宽度,所以渐变只落在那一侧。 */\n border-image:linear-gradient(180deg,transparent,var(--dshpc-business) 30% 70%,transparent) 1;\n}\n/* 拖动期:① <iframe>(PDF / HTML 预览)是独立文档,会吞掉父文档的 pointermove ——\n 让出指针事件;② contain 把重排隔离在面板内,否则每帧改宽都会牵动整页重排。 */\n.dshpc-side-surface--resizing{contain:layout paint;will-change:width}\n.dshpc-side-surface--resizing iframe{pointer-events:none}\n\n/* 动效礼貌:系统声明减少动效时退化为瞬时(功能不受影响)。 */\n@media (prefers-reduced-motion:reduce){\n .dshpc-side-surface{animation:none}\n}\n";
4
4
  //# sourceMappingURL=side-panel-css.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-panel-css.generated.js","sourceRoot":"","sources":["../../src/ui/side-panel-css.generated.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,ihHAAihH,CAAA"}
1
+ {"version":3,"file":"side-panel-css.generated.js","sourceRoot":"","sources":["../../src/ui/side-panel-css.generated.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,omHAAomH,CAAA"}
@@ -7,7 +7,7 @@
7
7
  */
8
8
  export type Locale = 'zh' | 'en';
9
9
  /** utils 内置文案的 key(ui 的选择器也复用这套字典,保持单一 locale 状态)。 */
10
- export type UtilMessageKey = 'sessionLoading' | 'sessionFailed' | 'sessionEmpty' | 'explorerLoading' | 'loadingDefault' | 'explorerFailed' | 'explorerRoot' | 'explorerTruncated' | 'explorerEmptyDir' | 'explorerLevels' | 'explorerExpand' | 'explorerCollapse' | 'explorerEnter' | 'explorerRootName' | 'explorerCrumbsAria' | 'explorerPickFile' | 'explorerPickDir' | 'explorerPickDirAria' | 'previewClose' | 'previewCopyPath' | 'previewRefresh' | 'previewRender' | 'previewSource' | 'previewMdSwitchAria' | 'previewHtmlSwitchAria' | 'previewLoadMore' | 'previewTruncated' | 'previewOfficeUnavailable' | 'previewRenderFailed' | 'previewBadPayload' | 'previewOutside' | 'previewNotFound' | 'previewNotDirectory' | 'previewTooLarge' | 'previewNotText' | 'previewFailedCode' | 'mdCopy' | 'mdCopied' | 'mdCode' | 'mdWrap' | 'mdUnwrap' | 'mdFootnotes' | 'cardToggle' | 'tableEmpty' | 'tableLoading' | 'tableLoadingMore' | 'tableNoMore' | 'paginationAria' | 'paginationPrev' | 'paginationNext' | 'paginationPage' | 'paginationTotal' | 'paginationTotalZero' | 'paginationPageSizeOption' | 'paginationPageSizeAria' | 'modalClose' | 'dockClose' | 'dockResize' | 'dockCollapse' | 'dockExpand' | 'backToTop' | 'quickToolbarAria' | 'errorRetry' | 'confirm' | 'cancel' | 'dialogOk' | 'pickerPlaceholder' | 'pickerClear' | 'pickerEmpty' | 'pickerNoMatch' | 'pickerSearch' | 'pickerSelected' | 'pickerMaxReached' | 'pickerDegraded' | 'modelProvider' | 'modelModel' | 'modelDefault' | 'workspaceAll' | 'relNow' | 'relInJustNow' | 'relInMinutes' | 'relInHours' | 'relInDays' | 'relInMonths' | 'relInYears' | 'relJustNow' | 'relMinutesAgo' | 'relHoursAgo' | 'relDaysAgo' | 'relWeeksAgo' | 'relMonthsAgo' | 'relYearsAgo' | 'codeCopy' | 'codeCopied' | 'sessionUnknownKind' | 'sessionLoadOlder' | 'sessionProcess' | 'triggerRequest' | 'triggerGoal' | 'triggerAgent' | 'triggerTeam' | 'triggerSubagent' | 'triggerGithub' | 'triggerWebhook' | 'triggerSchedule' | 'triggerJob' | 'triggerPlugin' | 'triggerExplanation' | 'turnProcessTook' | 'turnProcessDeepDiving' | 'turnProcessWorked' | 'turnProcessFailed' | 'turnStopped' | 'chatDeepDiving' | 'thinkLabel' | 'durationSeconds' | 'durationMinutes' | 'durationHours' | 'durationMilliseconds' | 'retryActive' | 'retryCancelled' | 'retryStarted' | 'retryScheduled' | 'retryStatus' | 'retryDelay' | 'retryFailure' | 'turnErrorTitle' | 'accountStopped' | 'maxTokensTitle' | 'maxTokensHint' | 'failureAuth' | 'failureQuota' | 'failureAccountSignedOut' | 'failureAccountSignInRequired' | 'clockDate' | 'clockDateYear' | 'copyLabel' | 'copiedLabel' | 'branchLabel' | 'branchUnavailableLabel' | 'turnUsageTitle' | 'turnUsageModel' | 'turnUsageCacheHit' | 'turnUsageInput' | 'turnUsageCacheRead' | 'turnUsageCacheWrite' | 'turnUsageOutput' | 'turnUsageReasoning' | 'turnUsageConsumed' | 'turnUsageCount' | 'numberThousand' | 'numberMillion' | 'numberGroupSeparator' | 'stepProcessDoneThinking' | 'stepProcessDoneRead' | 'stepProcessDoneReadImage' | 'stepProcessDoneWrite' | 'stepProcessDoneSearch' | 'stepProcessDoneEdit' | 'stepProcessDoneCommands' | 'stepProcessDoneCode' | 'stepProcessDoneWebSearch' | 'stepProcessDoneWebFetch' | 'stepProcessDoneSubagents' | 'stepProcessDonePlan' | 'stepProcessDoneQuestions' | 'stepProcessDoneTools' | 'stepProcessJoinTwo' | 'stepProcessComma' | 'stepProcessSharedPrefix' | 'stepProcessMore' | 'toolTitleRead' | 'toolTitleReadImage' | 'toolTitleGrep' | 'toolTitleGlob' | 'toolTitleBash' | 'toolTitleWrite' | 'toolTitleEdit' | 'toolTitleCode' | 'toolTitleWebSearch' | 'toolTitleWebFetch' | 'toolTitleGeneric' | 'toolTitleSearch' | 'toolInputLabel' | 'toolOutputLabel' | 'rowPreparing' | 'rowRunning' | 'rowFailed' | 'rowStopped' | 'commandRunning' | 'commandFailed' | 'commandDone' | 'commandTitle' | 'collapseLabel' | 'readWindow' | 'readCollapseAria' | 'readExpandAria' | 'readExpandRest' | 'terminalSignal' | 'terminalExitCode' | 'terminalNoExitCode' | 'terminalRunning' | 'terminalFailed' | 'terminalDone' | 'terminalNoOutput' | 'terminalCollapseAria' | 'terminalExpandAria' | 'terminalExpandRest' | 'terminalCommandLine' | 'terminalSendInput' | 'terminalSession' | 'codeBlockLabel' | 'diffWrapLabel' | 'diffUnwrapLabel' | 'diffCollapseAria' | 'diffExpandAria' | 'diffExpandRest' | 'sessionArchived' | 'sessionHeading' | 'changesSingle' | 'changesMulti' | 'changesBinary' | 'changesAll' | 'changesCollapse' | 'changesOversized' | 'diffLoading' | 'diffMissing' | 'diffError' | 'diffBinary' | 'diffOversized' | 'diffCreated' | 'diffDeleted' | 'diffUnchanged' | 'diffCoarse' | 'diffTruncated' | 'continueBranch' | 'forkConfirmTitle' | 'forkConfirmText' | 'forkConfirmAccept' | 'forkWorking' | 'forkFailed' | 'deliverRowTitle' | 'deliverRowPreparing' | 'deliverRowRunning' | 'deliverRowOk' | 'deliverRowError' | 'deliverRowStopped' | 'deliverFileLabel' | 'deliverPreviewHint' | 'deliverPreviewCard' | 'deliverAll' | 'deliverCollapse' | 'deliverExpandAria' | 'deliverCollapseAria' | 'composerPlaceholder' | 'composerHint' | 'dtPlaceholder' | 'dtStart' | 'dtEnd' | 'dtToday' | 'dtNow' | 'dtClear' | 'dtHour' | 'dtMinute' | 'dtSecond' | 'dtPrevYear' | 'dtPrevMonth' | 'dtNextMonth' | 'dtNextYear' | 'dtInvalidRange';
10
+ export type UtilMessageKey = 'sessionLoading' | 'sessionFailed' | 'sessionEmpty' | 'explorerLoading' | 'loadingDefault' | 'explorerFailed' | 'explorerRoot' | 'explorerTruncated' | 'explorerEmptyDir' | 'explorerLevels' | 'explorerExpand' | 'explorerCollapse' | 'explorerEnter' | 'explorerRootName' | 'explorerCrumbsAria' | 'explorerPickFile' | 'explorerPickDir' | 'explorerPickDirAria' | 'explorerRootDir' | 'previewClose' | 'previewCopyPath' | 'previewRefresh' | 'previewRender' | 'previewSource' | 'previewMdSwitchAria' | 'previewHtmlSwitchAria' | 'previewLoadMore' | 'previewTruncated' | 'previewOfficeUnavailable' | 'previewOfficeNoSession' | 'previewRenderFailed' | 'previewBadPayload' | 'previewOutside' | 'previewNotFound' | 'previewNotDirectory' | 'previewNotFile' | 'previewTooLarge' | 'previewNotText' | 'previewFailedCode' | 'mdCopy' | 'mdCopied' | 'mdCode' | 'mdWrap' | 'mdUnwrap' | 'mdFootnotes' | 'cardToggle' | 'tableEmpty' | 'tableLoading' | 'tableLoadingMore' | 'tableNoMore' | 'paginationAria' | 'paginationPrev' | 'paginationNext' | 'paginationPage' | 'paginationTotal' | 'paginationTotalZero' | 'paginationPageSizeOption' | 'paginationPageSizeAria' | 'modalClose' | 'dockClose' | 'dockResize' | 'dockCollapse' | 'dockExpand' | 'backToTop' | 'quickToolbarAria' | 'errorRetry' | 'confirm' | 'cancel' | 'dialogOk' | 'pickerPlaceholder' | 'pickerClear' | 'pickerEmpty' | 'pickerNoMatch' | 'pickerSearch' | 'pickerSelected' | 'pickerMaxReached' | 'pickerDegraded' | 'modelProvider' | 'modelModel' | 'modelDefault' | 'workspaceAll' | 'relNow' | 'relInJustNow' | 'relInMinutes' | 'relInHours' | 'relInDays' | 'relInMonths' | 'relInYears' | 'relJustNow' | 'relMinutesAgo' | 'relHoursAgo' | 'relDaysAgo' | 'relWeeksAgo' | 'relMonthsAgo' | 'relYearsAgo' | 'codeCopy' | 'codeCopied' | 'sessionUnknownKind' | 'sessionLoadOlder' | 'sessionProcess' | 'triggerRequest' | 'triggerGoal' | 'triggerAgent' | 'triggerTeam' | 'triggerSubagent' | 'triggerGithub' | 'triggerWebhook' | 'triggerSchedule' | 'triggerJob' | 'triggerPlugin' | 'triggerExplanation' | 'turnProcessTook' | 'turnProcessDeepDiving' | 'turnProcessWorked' | 'turnProcessFailed' | 'turnStopped' | 'chatDeepDiving' | 'thinkLabel' | 'durationSeconds' | 'durationMinutes' | 'durationHours' | 'durationMilliseconds' | 'retryActive' | 'retryCancelled' | 'retryStarted' | 'retryScheduled' | 'retryStatus' | 'retryDelay' | 'retryFailure' | 'turnErrorTitle' | 'accountStopped' | 'maxTokensTitle' | 'maxTokensHint' | 'failureAuth' | 'failureQuota' | 'failureAccountSignedOut' | 'failureAccountSignInRequired' | 'clockDate' | 'clockDateYear' | 'copyLabel' | 'copiedLabel' | 'branchLabel' | 'branchUnavailableLabel' | 'turnUsageTitle' | 'turnUsageModel' | 'turnUsageCacheHit' | 'turnUsageInput' | 'turnUsageCacheRead' | 'turnUsageCacheWrite' | 'turnUsageOutput' | 'turnUsageReasoning' | 'turnUsageConsumed' | 'turnUsageCount' | 'numberThousand' | 'numberMillion' | 'numberGroupSeparator' | 'stepProcessDoneThinking' | 'stepProcessDoneRead' | 'stepProcessDoneReadImage' | 'stepProcessDoneWrite' | 'stepProcessDoneSearch' | 'stepProcessDoneEdit' | 'stepProcessDoneCommands' | 'stepProcessDoneCode' | 'stepProcessDoneWebSearch' | 'stepProcessDoneWebFetch' | 'stepProcessDoneSubagents' | 'stepProcessDonePlan' | 'stepProcessDoneQuestions' | 'stepProcessDoneTools' | 'stepProcessJoinTwo' | 'stepProcessComma' | 'stepProcessSharedPrefix' | 'stepProcessMore' | 'toolTitleRead' | 'toolTitleReadImage' | 'toolTitleGrep' | 'toolTitleGlob' | 'toolTitleBash' | 'toolTitleWrite' | 'toolTitleEdit' | 'toolTitleCode' | 'toolTitleWebSearch' | 'toolTitleWebFetch' | 'toolTitleGeneric' | 'toolTitleSearch' | 'toolInputLabel' | 'toolOutputLabel' | 'rowPreparing' | 'rowRunning' | 'rowFailed' | 'rowStopped' | 'commandRunning' | 'commandFailed' | 'commandDone' | 'commandTitle' | 'collapseLabel' | 'readWindow' | 'readCollapseAria' | 'readExpandAria' | 'readExpandRest' | 'terminalSignal' | 'terminalExitCode' | 'terminalNoExitCode' | 'terminalRunning' | 'terminalFailed' | 'terminalDone' | 'terminalNoOutput' | 'terminalCollapseAria' | 'terminalExpandAria' | 'terminalExpandRest' | 'terminalCommandLine' | 'terminalSendInput' | 'terminalSession' | 'codeBlockLabel' | 'diffWrapLabel' | 'diffUnwrapLabel' | 'diffCollapseAria' | 'diffExpandAria' | 'diffExpandRest' | 'sessionArchived' | 'sessionHeading' | 'changesSingle' | 'changesMulti' | 'changesBinary' | 'changesAll' | 'changesCollapse' | 'changesOversized' | 'diffLoading' | 'diffMissing' | 'diffError' | 'diffBinary' | 'diffOversized' | 'diffCreated' | 'diffDeleted' | 'diffUnchanged' | 'diffCoarse' | 'diffTruncated' | 'continueBranch' | 'forkConfirmTitle' | 'forkConfirmText' | 'forkConfirmAccept' | 'forkWorking' | 'forkFailed' | 'deliverRowTitle' | 'deliverRowPreparing' | 'deliverRowRunning' | 'deliverRowOk' | 'deliverRowError' | 'deliverRowStopped' | 'deliverFileLabel' | 'deliverPreviewHint' | 'deliverPreviewCard' | 'deliverAll' | 'deliverCollapse' | 'deliverExpandAria' | 'deliverCollapseAria' | 'composerPlaceholder' | 'composerHint' | 'dtPlaceholder' | 'dtStart' | 'dtEnd' | 'dtToday' | 'dtNow' | 'dtClear' | 'dtHour' | 'dtMinute' | 'dtSecond' | 'dtPrevYear' | 'dtPrevMonth' | 'dtNextMonth' | 'dtNextYear' | 'dtInvalidRange';
11
11
  /** 文案函数:`vars` 用于填 `{n}` 这类占位。 */
12
12
  export type Translate = (key: UtilMessageKey, vars?: Record<string, number | string>) => string;
13
13
  export declare function setLocale(locale: Locale): void;
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ const DICT = {
20
20
  explorerExpand: '展开',
21
21
  explorerCollapse: '收起',
22
22
  explorerEnter: '进入',
23
+ explorerRootDir: '根目录',
23
24
  explorerRootName: '(工作区根目录)',
24
25
  explorerCrumbsAria: '目录路径',
25
26
  explorerPickFile: '选择此文件',
@@ -35,11 +36,13 @@ const DICT = {
35
36
  previewLoadMore: '加载更多',
36
37
  previewTruncated: '内容过大,仅显示前 {n}',
37
38
  previewOfficeUnavailable: 'Office 预览不可用',
39
+ previewOfficeNoSession: 'Office 预览不可用(还没有任何会话)',
38
40
  previewRenderFailed: '预览渲染失败',
39
41
  previewBadPayload: '返回数据不符合预期',
40
42
  previewOutside: '路径在工作区之外',
41
43
  previewNotFound: '文件不存在',
42
44
  previewNotDirectory: '不是文件夹',
45
+ previewNotFile: '不是文件',
43
46
  previewTooLarge: '文件过大,无法预览',
44
47
  previewNotText: '不是文本文件',
45
48
  previewFailedCode: '加载失败({code})',
@@ -293,6 +296,7 @@ const DICT = {
293
296
  explorerExpand: 'Expand',
294
297
  explorerCollapse: 'Collapse',
295
298
  explorerEnter: 'Open',
299
+ explorerRootDir: '根目录',
296
300
  explorerRootName: '(workspace root)',
297
301
  explorerCrumbsAria: 'Breadcrumb',
298
302
  explorerPickFile: 'Pick this file',
@@ -308,11 +312,13 @@ const DICT = {
308
312
  previewLoadMore: 'Load more',
309
313
  previewTruncated: 'Content too large, showing first {n}',
310
314
  previewOfficeUnavailable: 'Office preview unavailable',
315
+ previewOfficeNoSession: 'Office preview unavailable (no session yet)',
311
316
  previewRenderFailed: 'Failed to render preview',
312
317
  previewBadPayload: 'Unexpected response payload',
313
318
  previewOutside: 'Path is outside the workspace',
314
319
  previewNotFound: 'File not found',
315
320
  previewNotDirectory: 'Not a folder',
321
+ previewNotFile: 'Not a file',
316
322
  previewTooLarge: 'File too large to preview',
317
323
  previewNotText: 'Not a text file',
318
324
  previewFailedCode: 'Failed to load ({code})',
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"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"}
@@ -93,16 +93,21 @@ dist/** 产物形态不变,仍由 createStyleKit 拼成一份
93
93
  - 模型目录:client 侧 remote **拿不到**每个 provider 的模型 ⇒ 插件宿主侧
94
94
  `llm.listModels()` 现查、`serveModelCatalog()`(`src/host/index.ts`,`./host` 子路径)挂成只读路由,
95
95
  client 侧 `connectHost(ctx, { modelsPath })` fetch。两侧共用同一个 path 常量。
96
- - 读文件:client 侧 `ctx.inject(['remote', 'remote.workspaceFiles'])`,封装在
97
- `src/ui/host-data.ts` 的 `getWorkspaceFiles()`;会话 id 由「路径 → 工作区 → 该区会话」自己解。
96
+ - 读文件(2026-11-03 换数据面):**不再走 `remote.workspaceFiles`**(它的 `list` 被
97
+ `contains(workspaceRoot, target)` 卡死,出不了工作区)。改走插件自己的只读路由:
98
+ 宿主 `serveFsRoute({ path })`(`src/host/fs-route.ts`,`./host` 子路径)+ client
99
+ `connectFs({ path })`(`src/explorer/fs-face.ts`,`createHttpFsFace` 内部 fetch)。
100
+ **浏览不吃会话**:路径一律绝对;相对路径只在入口按 `sessionId` → 工作区根解析一次。
101
+ 会话还剩一处用途 —— Office 预览的授权探针(懒取任意一条,见
102
+ `docs/design/external/dsh-host.md` §13.1)。
98
103
  任一通路缺席只影响那一块:选择器渲染空态 / 降级提示,`openFilePreview` 直接不打开并留痕。
99
104
 
100
105
  | 组件 | 数据从哪来 |
101
106
  |---|---|
102
107
  | `Picker` | 选项数据(props) |
103
108
  | `ModelPicker` / `WorkspacePicker` | 自取(connectHost 接线;`groups` 参数仅作覆盖) |
104
- | `openFilePreview` / `pickWorkspaceFile` | 自取(connectHost 接线;`workspaceFiles` / `sessionId` 仅作覆盖) |
105
- | `FileBrowser` | `WorkspaceFilesFace`(props,纯零件) |
109
+ | `openFilePreview` / `pickWorkspaceFile` | 自取(connectHost + connectFs 接线;`sessionId` 仅作相对路径基准 / Office 覆盖) |
110
+ | `FileBrowser` | `FsFace`(props,纯零件;绝对路径、只读) |
106
111
  | `SessionPreview` | `SessionSource`(props) |
107
112
 
108
113
  不传整个 `ctx`:ctx 是宿主给的整个大对象,传进来就把本包和宿主版本焊死;只传需要的那一小块,
@@ -222,3 +222,63 @@
222
222
  透传;匹配不到 ⇒ 回落 `props.sessionId` + `crumbBarPlain` 的 hint 说破原因。
223
223
  - 来源:官方包 `lib/index.js:489-512 / 563-583 / 421 / 480`;`dsh-task-dispatch-table/src/host.ts:174-187`;
224
224
  `dsh-better-sidebar` README + `docs/plans/2026-08-29-workspace-fence-toggle-design.md` + `src/client/use-session-root.ts`。
225
+
226
+ > ⚠️ 上面这条「处置(本仓)」是 2026-10-22 的做法,已被下面的 §13 取代(浏览不再吃会话)。
227
+
228
+ ## 13. 跨工作区浏览:官方能力边界与本仓自建只读路由(2026-11-03 解包核实)
229
+
230
+ 解包版本:`dsh-api-workspace-files@0.2.1-rc.5`、`dsh-office-to-pdf@0.2.1-rc.5`、`dsh-fs@0.2.1-rc.5`、
231
+ `dsh-api-workspace-controller@0.2.1-rc.5`、`dsh-host-directory-picker@0.2.1-rc.5`、
232
+ `dsh-client-ui-workspace@0.2.1-rc.5`。
233
+
234
+ ### 13.1 会话到底绑在哪一步(修正 §12 的粗判)
235
+
236
+ - **只有 `list` 被栅栏卡住**:`list` 走 `inspect` + `confine`(`workspace-files/lib/index.js:495-505 / 576-583`)。
237
+ - **`inspect` 不做 contains**:`read` / `readBytes` / `stat` 走 `locateFile → inspect`(`index.js:563-574 / 589-605`),
238
+ `inspect` 只 `fs.lstat(path, { cwd: workspaceRoot })`(注释原文:目录包含检查是 `list` 的事)。
239
+ ⇒ **相对路径按会话根解析,绝对路径任意文件都能读,与会话所属工作区无关**。
240
+ - **`officeToPdf` 的会话只用来做授权探针**:`renderFile` 先 `files.readBytes(scope, path, {range:{0,1}})`
241
+ 与 `files.stat(scope, path)`,真正的字节走宿主 `fs` 服务(`office-to-pdf/lib/index.js:519-560`,`this.ctx.get('fs')`)。
242
+ 因为上一条,探针不会因「文件在工作区外」失败 ⇒ **任意一条有效会话就够,不必按路径匹配所属工作区**。
243
+ - PDF / 图片 / 文本**不走 officeToPdf**:`.pdf` 走 `readBytes`(本仓 `preview/index.ts` → `BytesPreview`),
244
+ 只有 doc/docx/ppt/pptx 走 `OfficePreview`。
245
+
246
+ ### 13.2 官方别处的目录能力:`remote.directoryPicker`(能列任意目录,但只回目录)
247
+
248
+ | 事实 | 证据 |
249
+ |---|---|
250
+ | 宿主 Remote 服务,namespace `directoryPicker`,verb = `pick` / `list` / `createDirectory` | `api-workspace-controller/lib/types/directory-picker.d.ts:36-60`;`.js` 里 `Remote('pick'/'list'/'createDirectory')` |
251
+ | `list(path?)` 列**任意绝对路径**(不传 = 家目录),回 `{ path, home, crumbs, entries, truncated }` | `host-directory-picker/lib/types/types.d.ts` |
252
+ | `entries` 是 **direct child directories**(`{name, path, hidden}`)——**不含文件** | 同上,类型注释 |
253
+ | `crumbs` 直接给祖先链 | 同上 |
254
+ | 能力两档:`native`(桌面端弹系统框)/ `browse`(网页端只能逐层列);不匹配的 verb 抛 `directory-picker/unavailable` | `host-directory-picker/lib/types/index.d.ts` + `controller/lib/types/directory-picker.js:130` |
255
+ | 错误码:`directory-picker/{unavailable,unreadable,exists,create-failed}` | `controller/lib/types/directory-picker.js:140-145` |
256
+ | 官方「添加工作区」就走它 | `dsh-client-ui-workspace/lib/client.js:5011 / 5039 / 1560-1573` |
257
+
258
+ ⇒ **「列任意目录」官方本来就有**(我早先「官方做不到系统根」只对 `workspaceFiles.list` 成立);
259
+ 但**文件**它给不了,所以本仓不用它,自建一条只读路由。
260
+
261
+ ### 13.3 宿主 `ctx.fs` 服务(自建路由可以复用的那层)
262
+
263
+ `dsh-fs/lib/types/index.d.ts:94-208`:`resolve` / `lstat` / `stat` / `listDir` / `readBytes` / `readByteRange` /
264
+ `contains` / `fileUrl` / `processPath`。第一方插件这样用(`office-to-pdf` 的 `this.ctx.get('fs')`)。
265
+
266
+ 本仓**不依赖**它:第三方插件宿主半边能否 inject `fs` 未验证,且插件宿主进程本来就有磁盘权限,
267
+ `node:fs` 只多几十行、不引入跨版本耦合。
268
+
269
+ ### 13.4 本仓自建路由契约(`src/host/fs-route.ts` + `src/explorer/fs-face.ts`)
270
+
271
+ | 项 | 值 |
272
+ |---|---|
273
+ | 端点 | `GET <path>?op=list\|read\|readBytes\|roots&path=<绝对路径>&offset&limit` |
274
+ | 只读 | 只有这 4 个 op,没有任何写/删/改入口 |
275
+ | 鉴权 | 不加 token:宿主 HTTP 面本来就能调 `remote.workspaceFiles.read`(允许工作区外绝对路径),本路由不引入新暴露面;静态 token 写在同一个 bundle 里是装饰 |
276
+ | 每层上限 | 500 条(`FS_PAGE_LIMIT`),服务端先按名排序再切片,翻页不重复/不漏 |
277
+ | 文本分页 | **按行**:`offset` 是 1 起行号、`limit` 是行数(对齐官方 `read`,客户端下一页偏移 = `offset + lines`) |
278
+ | 二进制 | 单文件上限 32MB(超出 `too-large`),回 base64 |
279
+ | 错误码 | 复用官方词表:`not-found` / `not-directory` / `not-regular-file` / `too-large` / `not-text` / `service-unavailable`;`errView` 的兜底分支接不认识的码 |
280
+ | 根节点 | POSIX `['/']`;Windows 逐个 `X:\` 探(Node 无盘符枚举 API) |
281
+ | 超时 | 列目录 8s(`ETIMEDOUT` → `timeout`),网络挂载盘上不会挂死 |
282
+
283
+ 树模型、路径语义(绝对/相对都收、相对要 base)、返回值形状与 500 条上限的决策来龙去脉见
284
+ `ledger/worklog/202611/03-0053-12d5-选择器支持只选文件夹与非工作区目录.md`。
@@ -156,6 +156,60 @@ EN: Welding controls into one visual unit has exactly one recipe: the shell owns
156
156
  `SplitGroup` overrides inner classes with descendant selectors, so those class names are the coupling point —
157
157
  rename them and you must update `src/ui/controls/split-group.css`, or the weld fails silently.
158
158
 
159
+ ## 滚动条让位:一律离边缘 1px
160
+
161
+ > EN: Scrollbars always sit 1px off the edge
162
+
163
+ 本仓每个滚动容器(`overflow:auto` / `overflow-y:auto` / `overflow-x:auto`)都要带一条**透明边框**:
164
+ 纵向滚的加 `border-right`,横向滚的加 `border-bottom`,双向就两条:
165
+
166
+ ```css
167
+ border-right: 1px solid transparent;
168
+ ```
169
+
170
+ 原理:原生滚动条画在 padding box 之外、border 之内 —— 只有 border 能把它推离边缘,加 padding 无效。
171
+ **滚动条一律用浏览器默认样式,不许自绘。** 2026-11-02 试过 `::-webkit-scrollbar` 改 thumb(留 3px
172
+ 缝 + 圆角)当场被否:用户要的就是「让出 1 像素」,不是换一套滚动条外观。所以口径只有一条 ——
173
+ 让位量固定 1px,颜色 / 粗细 / 圆角全部归浏览器。
174
+
175
+ - 已有实色边框的容器(如 Picker 菜单的 `border:1px solid`,或挂 `.dshpc-panel` 后由面板提供的边框)
176
+ 滚动条贴的就是那条线,算已让位,**不要叠加**。
177
+ - 消费方自己的滚动容器(主区 / 侧栏)不在本仓代码里,配方相同:自己加那条 `border-right`。
178
+ 2026-11-02 起 `--dshpc-dock-gap` 已删,dock 不再替主区让 margin,改由主区容器自己让。
179
+ - 自检:`test/quality.test.mjs` 扫 `src/**/*.css`,滚动规则缺边框即红。
180
+
181
+ EN: every scroll container in this repo carries a transparent `border-right` (and `border-bottom` when it
182
+ scrolls horizontally). Native scrollbars are painted between the padding box and the border, so a border is
183
+ the only thing that moves them off the edge — padding does nothing. **Never restyle the scrollbar itself**:
184
+ a `::-webkit-scrollbar` thumb (3px gap + radius) was tried on 2026-11-02 and rejected — the ask is exactly
185
+ "give up 1 pixel", not a different scrollbar look; the inset stays 1px and the rest belongs to the browser.
186
+ Containers that already have a solid border count as done. Consumer-owned scroll containers use the same
187
+ one-liner; `--dshpc-dock-gap` was removed on 2026-11-02. A test enforces the border.
188
+
189
+ ## 浮层三档:模态 / 锚点面板 / 菜单
190
+
191
+ > EN: Three tiers for floating surfaces — modal / popover / menu
192
+
193
+ 所有「浮起来的框」的**表面**(底色 · 描边宽 · 圆角 · 阴影)只在 `src/ui/panel.css` 定义,档位只有三个
194
+ (2026-11-03 用户定:样式统一,交互各家自己管):
195
+
196
+ | 档位 | 用在 | 底色 | 描边 | 圆角 | 阴影 |
197
+ |---|---|---|---|---|---|
198
+ | `--modal` | `Modal` / `ConfirmModal` / `AlertModal` | `surface-1` | 3px | `radius-xl` | `shadow-2` |
199
+ | `--popover` | 选文件弹窗(`pickWorkspaceFile`) | `surface-1` | 1px | `radius-lg` | `shadow-2` |
200
+ | `--menu` | ▾ 选层、`Picker` 下拉 | `surface-menu` | 1px | `radius-sm` | `shadow-1` |
201
+
202
+ - 组件里**不许**再写这四个值;要改外观只改 `panel.css`。
203
+ - **定位不归档位管**:Modal 居中、选文件弹窗贴锚点并上下翻转、菜单挂触发器下方,各自实现。
204
+ - 关闭钮只有一枚 `.dshpc-panel__close`;旧类名 `.dshpc-overlay-head__close` 保留作别名(消费方覆盖不失效)。
205
+ - 层序只许用 `--dshpc-z-panel`(面板本体)/ `--dshpc-z-popmenu`(叠在面板上的菜单与其透明遮罩),不许写字面量。
206
+ - **不并入三档**:`PanelDock` 与 `SideSheet` 属贴边家族(`side-panel.css` 的 `.dshpc-side-surface`,
207
+ 2026-11-02 拍板两者皮肤一模一样),一个是布局成员、一个是贴边抽屉,都不是浮层。
208
+ - 组件**内部**的微层序(缩略按钮 5、拖拽条 7、dock 关闭钮 8、Segmented 的 0/1)不走 token ——
209
+ 它们只在各自 stacking context 里排序,跟页面浮层层级无关。
210
+ - 自检:`test/css-discipline.test.mjs` 盯「色值只进 `tokens.css`」「`--dshpc-panel-*` 只在 `panel.css`」;
211
+ `test/css-contract.test.mjs` 盯「一个类名一套皮肤」。
212
+
159
213
  ## 三条硬规矩
160
214
 
161
215
  > EN: Three hard rules
@@ -1,20 +1,25 @@
1
1
  // explorer 子包的使用帮助 —— 真源(TS 数据模块)。内容全在此一处,demo 与 md 都从这份派生。
2
2
  import type { DocTopic } from '../design/doc-format.js'
3
3
 
4
- const explorerUsage = `import { openFilePreview, pickWorkspaceFile } from 'dsh-plugin-core/explorer'
4
+ const explorerUsage = `import { connectFs, openFilePreview, pickWorkspaceFile } from 'dsh-plugin-core/explorer'
5
+ import { serveFsRoute } from 'dsh-plugin-core/host'
6
+ import { FS_PATH } from './paths' // 你自己的常量:宿主与 client 必须用同一个
5
7
 
6
- // 只在 client apply 里接线一次(接工作区快照 + 读文件服务),之后不用再碰服务
8
+ // ── 宿主半边(apply):挂一条只读文件路由(不限工作区;读文件/列目录都在它上面) ──
9
+ serveFsRoute(ctx, { path: FS_PATH })
10
+
11
+ // ── client 半边(apply):接一次(connectHost 照旧负责工作区快照) ──
7
12
  connectHost(ctx)
13
+ connectFs({ path: FS_PATH })
8
14
 
9
15
  // 右侧分栏预览(占宽度、挤窄主区):一个容器 + 一个路径就够
10
- openFilePreview({ mount, path: '/abs/ledger' }) // 文件夹 ⇒ 目录树;文件 ⇒ 直接预览
11
- openFilePreview({ mount, path: 'docs/README.md' }) // 工作区相对路径也行
12
-
13
- // 覆盖项:指定工作区快照 / 指定会话 / Office 转 PDF / 与别处共用的根缓存
14
- openFilePreview({ mount, path, workspaceAnchors, sessionId, officeToPdf, rootCache })
16
+ openFilePreview({ mount, path: '/abs/ledger' }) // 文件夹 ⇒ 目录树;文件 ⇒ 直接预览
17
+ openFilePreview({ mount, path: 'docs/README.md' }) // 工作区相对路径也行(相对谁见下)
18
+ openFilePreview({ mount }) // 不给路径 ⇒ 根节点(工作区清单 + 盘符)
15
19
 
16
- // 锚定弹窗选文件(Promise 返回路径,不自己挂 dock)
17
- const r = await pickWorkspaceFile({ anchor, filter: { exts: ['md'] } })`
20
+ // 锚定弹窗选文件(Promise 返回**绝对路径**,不自己挂 dock)
21
+ const r = await pickWorkspaceFile({ anchor, filter: { exts: ['md'] } })
22
+ const dir = await pickWorkspaceFile({ anchor, filter: { dirs: true } }) // 只选文件夹`
18
23
 
19
24
  const doc: DocTopic = {
20
25
  title: { zh: 'explorer —— 工作区浏览', en: 'explorer — Workspace browsing' },
@@ -25,20 +30,20 @@ const doc: DocTopic = {
25
30
  heading: { zh: '概览', en: 'Overview' },
26
31
  prose: [
27
32
  {
28
- zh: '提供工作区文件浏览与选择,数据来自宿主提供的工作区文件快照。',
29
- en: 'Workspace file browsing and picking, driven by the host-provided workspace file snapshot.',
33
+ zh: '提供文件浏览与选择;数据走宿主侧只读 FS 路由,**不限工作区**(工作区之外也能浏览)。界面与原版一致。',
34
+ en: 'File browsing and picking **not limited to workspaces**: one root tree (workspace nodes + the real root), served by a host-side read-only FS route.',
30
35
  },
31
36
  {
32
- zh: '**接线归核心**:client `apply` 里调一次 `connectHost(ctx)`,读文件服务、会话 id、工作区快照都由核心自己解,调用时只给容器和路径。',
33
- en: '**Wiring belongs to core**: call `connectHost(ctx)` once in the client apply; the file service, session id and workspace snapshot are resolved by core — you only pass a container and a path.',
37
+ zh: '**接线归核心,但要两条**:宿主 `apply` 调 `serveFsRoute({ path })`,client `apply` 用同一个常量调 `connectFs({ path })`(`connectHost(ctx)` 照旧负责工作区快照)。浏览**不需要会话**。',
38
+ en: '**Core does the wiring, but with two calls**: `serveFsRoute({ path })` on the host side and `connectFs({ path })` with the same constant on the client side (`connectHost(ctx)` still covers the workspace snapshot). Browsing needs **no session**.',
34
39
  },
35
40
  {
36
41
  zh: '落点只给一个元素:页面里**包住主区**的那个(核心会补成 flex 行、让主区伸展,关闭时还原),不要传 `document.body` 再自己套 fixed——那是浮层,不是分栏。',
37
42
  en: 'Pass one element: the one wrapping the main area. Core makes it a flex row and lets the main area stretch, restoring it on close. Never pass `document.body` with your own fixed positioning — that is an overlay, not a split.',
38
43
  },
39
44
  {
40
- zh: '绝对路径按最长前缀匹配所属工作区;落在任何工作区外时,文件照样能预览(官方 read 允许工作区外文件),只有目录树退化成只读路径栏。',
41
- en: 'Absolute paths are matched to their workspace by longest prefix. Outside every workspace the file still previews (official read allows it); only the directory tree degrades to a read-only path bar.',
45
+ zh: '面包屑口径不变:路径所属工作区名作根名,其下按相对层级展开。▾ 下拉**根层置顶**(其余仍列各工作区):POSIX 是一条「根目录」,**Windows 没有根目录这东西,列的是盘符**(`C:/`、`D:/`…,由宿主 `op:roots` 探出来)。点其他工作区 = 直接列该区根目录(不需要会话)。',
46
+ en: 'Inside a workspace the breadcrumb starts at its name and the ▾ menu nests it there; outside it starts at the real root (`/` or a drive). A workspace root still appears in the real path, tagged “Workspace”.',
42
47
  },
43
48
  ],
44
49
  },
@@ -84,29 +89,23 @@ const doc: DocTopic = {
84
89
  en: 'The element wrapping the main area; no flex needed (core turns it into a flex row, stretches the main area, and restores it on close). Never `document.body`',
85
90
  },
86
91
  },
87
- {
88
- name: 'opts.workspaceFiles',
89
- type: 'WorkspaceFilesFace',
90
- def: '—',
91
- desc: {
92
- zh: '读文件服务。**一般不用传**:`connectHost(ctx)` 接线后核心自己持有;传了以传入为准。传 `content` 时可省',
93
- en: 'File service. **Usually unnecessary**: core holds it after `connectHost(ctx)`; when passed it wins. Optional when passing `content`',
94
- },
95
- },
96
92
  {
97
93
  name: 'opts.sessionId',
98
94
  type: 'string',
99
95
  def: '—',
100
96
  desc: {
101
- zh: '该工作区的真实会话 id。**一般不用传**:按路径匹配所属工作区,匹配不出就取最近有会话的工作区;传 `content` 时可省',
102
- en: 'A real session id. **Usually unnecessary**: resolved from the path’s workspace, else the most recently updated workspace with a session; optional when passing `content`',
97
+ zh: '**只在两种情况下需要**:① 相对路径的基准工作区;② Office 预览(转 PDF 要一条有效会话,缺省由核心取最近有会话的工作区)',
98
+ en: 'Needed in exactly two cases: (1) the base workspace for a relative path; (2) Office preview (conversion needs one valid session; core falls back to the most recent workspace with one)',
103
99
  },
104
100
  },
105
101
  {
106
102
  name: 'opts.path',
107
103
  type: 'string',
108
104
  def: '—',
109
- desc: { zh: '工作区相对路径;绝对路径会自动按最长前缀匹配所属工作区。与 `content` 二选一', en: 'Workspace-relative path; absolute paths are matched to their workspace by longest prefix. Mutually exclusive with `content`' },
105
+ desc: {
106
+ zh: '绝对路径或工作区相对路径(相对路径要有可解析的基准,否则返回 `null` 并 warn);不传 ⇒ 根节点。与 `content` 二选一',
107
+ en: 'Absolute or workspace-relative (a relative one needs a resolvable base, else `null` + a warning); omitted ⇒ the root node. Mutually exclusive with `content`',
108
+ },
110
109
  },
111
110
  {
112
111
  name: 'opts.content',
@@ -128,9 +127,12 @@ const doc: DocTopic = {
128
127
  },
129
128
  {
130
129
  name: 'pickWorkspaceFile(opts)',
131
- type: 'PickWorkspaceFileOptions => Promise<PickedFile>',
130
+ type: 'PickWorkspaceFileOptions => Promise<PickedPath | null>',
132
131
  def: '—',
133
- desc: { zh: '锚定按钮弹出模态选文件,解析出 `{ path, isDir }`', en: 'Anchored modal picker that resolves `{ path, isDir }`' },
132
+ desc: {
133
+ zh: '锚定按钮弹出模态选文件,解析出 `{ path, isDir, workspaceRel?, workspace? }`;`path` 是**绝对路径**',
134
+ en: 'Anchored modal picker resolving `{ path, isDir, workspaceRel?, workspace? }`; `path` is **absolute**',
135
+ },
134
136
  },
135
137
  {
136
138
  name: 'opts.anchor',
@@ -143,7 +145,10 @@ const doc: DocTopic = {
143
145
  name: 'opts.filter',
144
146
  type: 'PickFilter',
145
147
  def: '—',
146
- desc: { zh: '按扩展名过滤 `{ exts: [\'md\'] }`;`dirs: true` 则只允许选文件夹', en: 'Filter by extension `{ exts: [\'md\'] }`; `dirs: true` restricts picking to folders' },
148
+ desc: {
149
+ zh: '`exts` 只要这些扩展名(目录仍可展开导航);`dirs: true` 只允许选文件夹(文件不渲染)',
150
+ en: '`exts` limits files (folders still expand); `dirs: true` picks folders only (files hidden, plus a “Select this folder” action in the crumb bar)',
151
+ },
147
152
  },
148
153
  ],
149
154
  },