dsh-plugin-core 0.20.4 → 0.20.7
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/dist/design/tokens-css.generated.d.ts +1 -1
- package/dist/design/tokens-css.generated.d.ts.map +1 -1
- package/dist/design/tokens-css.generated.js +1 -1
- package/dist/design/tokens-css.generated.js.map +1 -1
- package/dist/explorer/FileBrowser.d.ts +13 -6
- package/dist/explorer/FileBrowser.d.ts.map +1 -1
- package/dist/explorer/FileBrowser.js +190 -305
- package/dist/explorer/FileBrowser.js.map +1 -1
- package/dist/explorer/crumb-nav.d.ts +45 -0
- package/dist/explorer/crumb-nav.d.ts.map +1 -0
- package/dist/explorer/crumb-nav.js +75 -0
- package/dist/explorer/crumb-nav.js.map +1 -0
- package/dist/explorer/crumbs-menu.d.ts +37 -0
- package/dist/explorer/crumbs-menu.d.ts.map +1 -0
- package/dist/explorer/crumbs-menu.js +102 -0
- package/dist/explorer/crumbs-menu.js.map +1 -0
- package/dist/explorer/explorer-css.generated.d.ts +1 -1
- package/dist/explorer/explorer-css.generated.d.ts.map +1 -1
- package/dist/explorer/explorer-css.generated.js +1 -1
- package/dist/explorer/explorer-css.generated.js.map +1 -1
- package/dist/explorer/fs-face.d.ts +36 -0
- package/dist/explorer/fs-face.d.ts.map +1 -0
- package/dist/explorer/fs-face.js +74 -0
- package/dist/explorer/fs-face.js.map +1 -0
- package/dist/explorer/index.d.ts +2 -1
- package/dist/explorer/index.d.ts.map +1 -1
- package/dist/explorer/index.js +2 -1
- package/dist/explorer/index.js.map +1 -1
- package/dist/explorer/landing.d.ts +26 -0
- package/dist/explorer/landing.d.ts.map +1 -0
- package/dist/explorer/landing.js +43 -0
- package/dist/explorer/landing.js.map +1 -0
- package/dist/explorer/open.d.ts +35 -38
- package/dist/explorer/open.d.ts.map +1 -1
- package/dist/explorer/open.js +124 -156
- package/dist/explorer/open.js.map +1 -1
- package/dist/explorer/preview/BytesPreview.d.ts +2 -3
- package/dist/explorer/preview/BytesPreview.d.ts.map +1 -1
- package/dist/explorer/preview/BytesPreview.js +3 -3
- package/dist/explorer/preview/BytesPreview.js.map +1 -1
- package/dist/explorer/preview/HtmlPreview.d.ts +2 -3
- package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -1
- package/dist/explorer/preview/HtmlPreview.js +4 -5
- package/dist/explorer/preview/HtmlPreview.js.map +1 -1
- package/dist/explorer/preview/OfficePreview.d.ts +2 -1
- package/dist/explorer/preview/OfficePreview.d.ts.map +1 -1
- package/dist/explorer/preview/OfficePreview.js +9 -2
- package/dist/explorer/preview/OfficePreview.js.map +1 -1
- package/dist/explorer/preview/TextPreview.d.ts +2 -3
- package/dist/explorer/preview/TextPreview.d.ts.map +1 -1
- package/dist/explorer/preview/TextPreview.js +3 -3
- package/dist/explorer/preview/TextPreview.js.map +1 -1
- package/dist/explorer/preview/index.d.ts +6 -3
- package/dist/explorer/preview/index.d.ts.map +1 -1
- package/dist/explorer/preview/index.js +3 -6
- package/dist/explorer/preview/index.js.map +1 -1
- package/dist/explorer/preview-title-bar.d.ts +26 -0
- package/dist/explorer/preview-title-bar.d.ts.map +1 -0
- package/dist/explorer/preview-title-bar.js +48 -0
- package/dist/explorer/preview-title-bar.js.map +1 -0
- package/dist/explorer/types.d.ts +25 -23
- package/dist/explorer/types.d.ts.map +1 -1
- package/dist/explorer/types.js +61 -120
- package/dist/explorer/types.js.map +1 -1
- package/dist/host/fs-route.d.ts +25 -0
- package/dist/host/fs-route.d.ts.map +1 -0
- package/dist/host/fs-route.js +243 -0
- package/dist/host/fs-route.js.map +1 -0
- package/dist/host/index.d.ts +2 -0
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.js +1 -0
- package/dist/host/index.js.map +1 -1
- package/dist/session/session-css.generated.d.ts +1 -1
- package/dist/session/session-css.generated.d.ts.map +1 -1
- package/dist/session/session-css.generated.js +1 -1
- package/dist/session/session-css.generated.js.map +1 -1
- package/dist/ui/DateTimePicker.d.ts.map +1 -1
- package/dist/ui/DateTimePicker.js +5 -1
- package/dist/ui/DateTimePicker.js.map +1 -1
- package/dist/ui/Modal.d.ts.map +1 -1
- package/dist/ui/Modal.js +7 -2
- package/dist/ui/Modal.js.map +1 -1
- package/dist/ui/Picker.d.ts.map +1 -1
- package/dist/ui/Picker.js +6 -3
- package/dist/ui/Picker.js.map +1 -1
- package/dist/ui/controls/datetime-css.generated.d.ts +1 -1
- package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -1
- package/dist/ui/controls/datetime-css.generated.js +1 -1
- package/dist/ui/controls/datetime-css.generated.js.map +1 -1
- package/dist/ui/controls/field-css.generated.d.ts +1 -1
- package/dist/ui/controls/field-css.generated.d.ts.map +1 -1
- package/dist/ui/controls/field-css.generated.js +1 -1
- package/dist/ui/controls/field-css.generated.js.map +1 -1
- package/dist/ui/controls/loading-css.generated.d.ts +1 -1
- package/dist/ui/controls/loading-css.generated.d.ts.map +1 -1
- package/dist/ui/controls/loading-css.generated.js +1 -1
- package/dist/ui/controls/loading-css.generated.js.map +1 -1
- package/dist/ui/feedback-css.generated.d.ts +1 -1
- package/dist/ui/feedback-css.generated.d.ts.map +1 -1
- package/dist/ui/feedback-css.generated.js +1 -1
- package/dist/ui/feedback-css.generated.js.map +1 -1
- package/dist/ui/marquee-css.generated.d.ts +1 -1
- package/dist/ui/marquee-css.generated.d.ts.map +1 -1
- package/dist/ui/marquee-css.generated.js +1 -1
- package/dist/ui/marquee-css.generated.js.map +1 -1
- package/dist/ui/overlay-css.generated.d.ts +1 -1
- package/dist/ui/overlay-css.generated.d.ts.map +1 -1
- package/dist/ui/overlay-css.generated.js +1 -1
- package/dist/ui/overlay-css.generated.js.map +1 -1
- package/dist/ui/overlay.d.ts +8 -2
- package/dist/ui/overlay.d.ts.map +1 -1
- package/dist/ui/overlay.js +7 -6
- package/dist/ui/overlay.js.map +1 -1
- package/dist/ui/panel-css.d.ts +2 -0
- package/dist/ui/panel-css.d.ts.map +1 -0
- package/dist/ui/panel-css.generated.d.ts +2 -0
- package/dist/ui/panel-css.generated.d.ts.map +1 -0
- package/dist/ui/panel-css.generated.js +4 -0
- package/dist/ui/panel-css.generated.js.map +1 -0
- package/dist/ui/panel-css.js +2 -0
- package/dist/ui/panel-css.js.map +1 -0
- package/dist/ui/panel.d.ts +41 -0
- package/dist/ui/panel.d.ts.map +1 -0
- package/dist/ui/panel.js +37 -0
- package/dist/ui/panel.js.map +1 -0
- package/dist/ui/picker-css.generated.d.ts +1 -1
- package/dist/ui/picker-css.generated.d.ts.map +1 -1
- package/dist/ui/picker-css.generated.js +1 -1
- package/dist/ui/picker-css.generated.js.map +1 -1
- package/dist/utils/i18n.d.ts +1 -1
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +8 -2
- package/dist/utils/i18n.js.map +1 -1
- package/docs/design/architecture.md +9 -4
- package/docs/design/external/dsh-host.md +60 -0
- package/docs/design/style.md +26 -1
- package/docs/help/explorer.doc.ts +35 -30
- package/docs/help/explorer.md +23 -19
- package/docs/help/integration.doc.ts +15 -10
- package/docs/help/integration.md +15 -10
- package/docs/requirements.md +2 -1
- package/package.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* client 侧的**只读文件面**:fetch 宿主 `serveFsRoute` 挂的那条路由(`src/host/fs-route.ts`)。
|
|
3
|
+
*
|
|
4
|
+
* 返回体沿用官方 remote 的信封(成功是值本身,失败是 `{ ok:false, error }`),所以
|
|
5
|
+
* `listingOf` / `textPageOf` / `bytesOf`(`./types.js`)原样能解析,不用再写一套。
|
|
6
|
+
*
|
|
7
|
+
* 与 `WorkspaceFilesFace` 的差别只有一个:**不吃 sessionId,路径一律绝对**。
|
|
8
|
+
* 这也是「入口不传会话」成立的原因 —— 浏览完全不需要会话;只有 Office 预览还要。
|
|
9
|
+
*/
|
|
10
|
+
/** 路由没就位 / 网络失败时的统一回执。 */
|
|
11
|
+
function failure(message) {
|
|
12
|
+
return { ok: false, error: { code: 'service-unavailable', message } };
|
|
13
|
+
}
|
|
14
|
+
async function call(basePath, params, signal) {
|
|
15
|
+
const query = new URLSearchParams();
|
|
16
|
+
for (const [key, value] of Object.entries(params)) {
|
|
17
|
+
if (value !== undefined)
|
|
18
|
+
query.set(key, String(value));
|
|
19
|
+
}
|
|
20
|
+
let reply;
|
|
21
|
+
try {
|
|
22
|
+
const response = await fetch(`${basePath}?${query.toString()}`, { signal });
|
|
23
|
+
reply = (await response.json());
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (signal?.aborted === true)
|
|
27
|
+
return failure('aborted');
|
|
28
|
+
return failure(error instanceof Error ? error.message : 'fs route unreachable');
|
|
29
|
+
}
|
|
30
|
+
if (reply === null || typeof reply !== 'object')
|
|
31
|
+
return failure('fs route returned a non-object');
|
|
32
|
+
if (reply.ok === false)
|
|
33
|
+
return reply;
|
|
34
|
+
return reply.value ?? reply;
|
|
35
|
+
}
|
|
36
|
+
/** 造一个走 HTTP 的文件面。`basePath` 必须与宿主 `serveFsRoute({ path })` 同一个常量。 */
|
|
37
|
+
export function createHttpFsFace(basePath) {
|
|
38
|
+
return {
|
|
39
|
+
list: (path, signal) => call(basePath, { op: 'list', path }, signal),
|
|
40
|
+
read: (path, range, signal) => call(basePath, { op: 'read', path, offset: range.offset, limit: range.limit }, signal),
|
|
41
|
+
readBytes: async (path, options, signal) => {
|
|
42
|
+
const value = await call(basePath, {
|
|
43
|
+
op: 'readBytes',
|
|
44
|
+
path,
|
|
45
|
+
offset: options.range?.offset,
|
|
46
|
+
limit: options.range?.length,
|
|
47
|
+
}, signal);
|
|
48
|
+
const data = value?.data;
|
|
49
|
+
if (typeof data !== 'string')
|
|
50
|
+
return value;
|
|
51
|
+
const raw = atob(data);
|
|
52
|
+
const bytes = new Uint8Array(raw.length);
|
|
53
|
+
for (let index = 0; index < raw.length; index++)
|
|
54
|
+
bytes[index] = raw.charCodeAt(index);
|
|
55
|
+
return { ...value, data: bytes };
|
|
56
|
+
},
|
|
57
|
+
roots: async () => {
|
|
58
|
+
const value = (await call(basePath, { op: 'roots' }));
|
|
59
|
+
const list = value?.roots;
|
|
60
|
+
return Array.isArray(list) && list.every((item) => typeof item === 'string') ? list : ['/'];
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// ── 单例接线(同 ui/host-data 的做法:绑一次,调用方不必每次传) ──
|
|
65
|
+
let current;
|
|
66
|
+
/** 接上宿主 `serveFsRoute` 挂的那条路由(插件 client `apply` 里调一次)。 */
|
|
67
|
+
export function connectFs(options) {
|
|
68
|
+
current = createHttpFsFace(options.path);
|
|
69
|
+
}
|
|
70
|
+
/** 当前已接上的文件面;没接(宿主没这能力 / 没调 connectFs)⇒ undefined。 */
|
|
71
|
+
export function getFsFace() {
|
|
72
|
+
return current;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=fs-face.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-face.js","sourceRoot":"","sources":["../../src/explorer/fs-face.ts"],"names":[],"mappings":"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"}
|
package/dist/explorer/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { FileBrowser, type FileBrowserProps } from './FileBrowser.js';
|
|
2
2
|
export { openFilePreview, pickWorkspaceFile, type FilePreviewHandle, type OpenFilePreviewOptions, type PickedFile, type PickWorkspaceFileOptions, } from './open.js';
|
|
3
3
|
export { FilePreview, type FilePreviewProps } from './preview/index.js';
|
|
4
|
-
export {
|
|
4
|
+
export { connectFs, createHttpFsFace, getFsFace, type FsFace } from './fs-face.js';
|
|
5
|
+
export { bareCode, errView, isFailed, joinPath, listPathOf, listingOf, matchesFilter, pickWorkspaceAnchor, previewInfoOf, previewKindOf, sortEntries, workspaceAnchorForPath, anchorSessionForTitle, type DirEntry, type ErrView, type Listing, type OfficeToPdfFace, type PickFilter, type PickedPath, type PreviewInfo, type PreviewKind, type WorkspaceAnchor, type WorkspaceAnchorItem, type WorkspaceFilesFace, } from './types.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,wBAAwB,GAC9B,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,wBAAwB,GAC9B,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AAClF,OAAO,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
|
package/dist/explorer/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { FileBrowser } from './FileBrowser.js';
|
|
2
2
|
export { openFilePreview, pickWorkspaceFile, } from './open.js';
|
|
3
3
|
export { FilePreview } from './preview/index.js';
|
|
4
|
-
export {
|
|
4
|
+
export { connectFs, createHttpFsFace, getFsFace } from './fs-face.js';
|
|
5
|
+
export { bareCode, errView, isFailed, joinPath, listPathOf, listingOf, matchesFilter, pickWorkspaceAnchor, previewInfoOf, previewKindOf, sortEntries, workspaceAnchorForPath, anchorSessionForTitle, } from './types.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAA;AACrE,OAAO,EACL,eAAe,EACf,iBAAiB,GAKlB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAA;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explorer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAA;AACrE,OAAO,EACL,eAAe,EACf,iBAAiB,GAKlB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAe,MAAM,cAAc,CAAA;AAClF,OAAO,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,qBAAqB,GAYtB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 落地页主体(picker 刚打开、还没进任何目录时的那张表):上面一排根层(「根目录」或盘符),
|
|
3
|
+
* 下面全部工作区。行 = 进去,行尾钮 = 直接选这个目录。
|
|
4
|
+
*
|
|
5
|
+
* 2026-11-03 从 `FileBrowser.ts` 拆出:这里只有「怎么画」,状态与取数全在调用方。
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactNode } from 'react';
|
|
8
|
+
import type { Translate } from '../utils/i18n.js';
|
|
9
|
+
import type { WorkspaceAnchorItem } from './types.js';
|
|
10
|
+
export interface LandingBodyProps {
|
|
11
|
+
translate: Translate;
|
|
12
|
+
/** 根层条目:POSIX 单条「根目录」,Windows 一排盘符。 */
|
|
13
|
+
roots: ReadonlyArray<{
|
|
14
|
+
label: string;
|
|
15
|
+
path: string;
|
|
16
|
+
}>;
|
|
17
|
+
anchors: readonly WorkspaceAnchorItem[];
|
|
18
|
+
/** 选择器形态:行尾出「选择」钮(浏览器形态不出)。 */
|
|
19
|
+
pickable: boolean;
|
|
20
|
+
/** 进入该目录(点行 / 回车)。 */
|
|
21
|
+
onOpen: (target: string) => void;
|
|
22
|
+
/** 直接选中该目录(行尾钮)。 */
|
|
23
|
+
onPickDir: (target: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare function LandingBody(props: LandingBodyProps): ReactNode;
|
|
26
|
+
//# sourceMappingURL=landing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"landing.d.ts","sourceRoot":"","sources":["../../src/explorer/landing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAI1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,SAAS,CAAA;IACpB,uCAAuC;IACvC,KAAK,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrD,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAA;IACvC,+BAA+B;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,sBAAsB;IACtB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,oBAAoB;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CA8C9D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 落地页主体(picker 刚打开、还没进任何目录时的那张表):上面一排根层(「根目录」或盘符),
|
|
3
|
+
* 下面全部工作区。行 = 进去,行尾钮 = 直接选这个目录。
|
|
4
|
+
*
|
|
5
|
+
* 2026-11-03 从 `FileBrowser.ts` 拆出:这里只有「怎么画」,状态与取数全在调用方。
|
|
6
|
+
*/
|
|
7
|
+
import { createElement as h } from 'react';
|
|
8
|
+
import { Button } from '../ui/Button.js';
|
|
9
|
+
import { IconFolderCloseRegular } from '../ui/official.js';
|
|
10
|
+
import { ensureComponentStyles } from '../ui/css.js';
|
|
11
|
+
import { EXPLORER_CSS } from './explorer-css.js';
|
|
12
|
+
export function LandingBody(props) {
|
|
13
|
+
ensureComponentStyles('explorer', EXPLORER_CSS);
|
|
14
|
+
const { translate: tt, roots, anchors, pickable, onOpen, onPickDir } = props;
|
|
15
|
+
const row = (key, label, target) => h('div', {
|
|
16
|
+
key,
|
|
17
|
+
className: 'dshpc-fb__row',
|
|
18
|
+
role: 'button',
|
|
19
|
+
tabIndex: 0,
|
|
20
|
+
onClick: () => onOpen(target),
|
|
21
|
+
onKeyDown: (event) => {
|
|
22
|
+
if (event.key === 'Enter' || event.key === ' ')
|
|
23
|
+
onOpen(target);
|
|
24
|
+
},
|
|
25
|
+
}, h('span', { className: 'dshpc-fb__row-icon' }, h(IconFolderCloseRegular, { size: 18 })), h('span', { className: 'dshpc-fb__row-name' }, label),
|
|
26
|
+
// 行 = 展开进去;行尾钮 = 直接选这个目录(根目录 / 盘符 / 工作区根本身都能选)。
|
|
27
|
+
pickable
|
|
28
|
+
? h(Button, {
|
|
29
|
+
variant: 'outline',
|
|
30
|
+
size: 'sm',
|
|
31
|
+
className: 'dshpc-fb__row-act',
|
|
32
|
+
'aria-label': tt('explorerPickDirAria'),
|
|
33
|
+
onClick: (event) => {
|
|
34
|
+
event.stopPropagation();
|
|
35
|
+
onPickDir(target);
|
|
36
|
+
},
|
|
37
|
+
}, tt('explorerPickDir'))
|
|
38
|
+
: null);
|
|
39
|
+
return h('div', { className: 'dshpc-fb__tree' }, roots.map((root) => row(`root:${root.path}`, root.label, root.path)), anchors
|
|
40
|
+
.filter((item) => item.path !== undefined && item.path !== '')
|
|
41
|
+
.map((item) => row(`ws:${item.title}`, item.title, item.path)));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=landing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"landing.js","sourceRoot":"","sources":["../../src/explorer/landing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAkB,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAgBhD,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC/C,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAE5E,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc,EAAa,EAAE,CACpE,CAAC,CACC,KAAK,EACL;QACE,GAAG;QACH,SAAS,EAAE,eAAe;QAC1B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,SAAS,EAAE,CAAC,KAAsB,EAAE,EAAE;YACpC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;gBAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAChE,CAAC;KACF,EACD,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EACvF,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,KAAK,CAAC;IACrD,gDAAgD;IAChD,QAAQ;QACN,CAAC,CAAC,CAAC,CACC,MAAM,EACN;YACE,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,mBAAmB;YAC9B,YAAY,EAAE,EAAE,CAAC,qBAAqB,CAAC;YACvC,OAAO,EAAE,CAAC,KAAsC,EAAE,EAAE;gBAClD,KAAK,CAAC,eAAe,EAAE,CAAA;gBACvB,SAAS,CAAC,MAAM,CAAC,CAAA;YACnB,CAAC;SACF,EACD,EAAE,CAAC,iBAAiB,CAAC,CACtB;QACH,CAAC,CAAC,IAAI,CACT,CAAA;IAEH,OAAO,CAAC,CACN,KAAK,EACL,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EACpE,OAAO;SACJ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;SAC7D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC,CAC3E,CAAA;AACH,CAAC"}
|
package/dist/explorer/open.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import { type Translate } from '../utils/i18n.js';
|
|
3
|
-
import type { OfficeToPdfFace,
|
|
3
|
+
import type { OfficeToPdfFace, PickedPath, PickFilter, WorkspaceAnchorItem } from './types.js';
|
|
4
|
+
type Anchors = readonly WorkspaceAnchorItem[];
|
|
5
|
+
/**
|
|
6
|
+
* 入参路径解析成**绝对路径**(`''` = 虚拟根)。用户 2026-11-03 定:绝对/相对都收。
|
|
7
|
+
*
|
|
8
|
+
* 相对路径必须有一个基准:显式 `sessionId` 所属工作区优先,其次「最近有会话的工作区」。
|
|
9
|
+
* 解析不出 ⇒ `null`(调用方提示 `explorerNoBase`,不猜)。
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveStartPath(path: string, anchors: Anchors, sessionId?: string): string | null;
|
|
4
12
|
export interface FilePreviewHandle {
|
|
5
13
|
/** 关闭预览(幂等)。 */
|
|
6
14
|
close(): void;
|
|
@@ -8,15 +16,7 @@ export interface FilePreviewHandle {
|
|
|
8
16
|
readonly path: string;
|
|
9
17
|
}
|
|
10
18
|
export interface OpenFilePreviewOptions {
|
|
11
|
-
/**
|
|
12
|
-
* 工作区文件服务。**一般不用传**:`connectHost(ctx)` 接线后核心自己持有
|
|
13
|
-
* (`getWorkspaceFiles()`)。传了就以传入的为准(多服务 / 覆盖场景)。
|
|
14
|
-
* 传了 `content` 时(自定义审阅内容,例如变更 diff),这一组文件定位参数都可省略。
|
|
15
|
-
*/
|
|
16
|
-
workspaceFiles?: WorkspaceFilesFace;
|
|
17
|
-
/** 该工作区的真实会话 id。**一般不用传**:按路径匹配工作区 / 最近有会话的工作区自动解析。 */
|
|
18
|
-
sessionId?: string;
|
|
19
|
-
/** 文件或文件夹路径。与 `content` 二选一:传 `content` 时本字段可省略。 */
|
|
19
|
+
/** 文件或文件夹路径:绝对 / 工作区相对都收;`''` = 从根节点(工作区清单 + 盘符)开。 */
|
|
20
20
|
path?: string;
|
|
21
21
|
/**
|
|
22
22
|
* 自定义审阅内容:传入则核心渲染它进右侧 dock,**替代**内置 FileBrowser(解耦用途——
|
|
@@ -24,18 +24,20 @@ export interface OpenFilePreviewOptions {
|
|
|
24
24
|
*/
|
|
25
25
|
content?: () => ReactNode;
|
|
26
26
|
officeToPdf?: OfficeToPdfFace | null;
|
|
27
|
-
/**
|
|
27
|
+
/** 相对路径的基准工作区(也是 Office 预览用的会话)。可省。 */
|
|
28
|
+
sessionId?: string;
|
|
29
|
+
/** 工作区根显示名(面包屑第一段的兜底)。 */
|
|
28
30
|
rootName?: string;
|
|
29
|
-
/**
|
|
31
|
+
/** 相对路径 / 面包屑的基准目录;不传 = 按路径匹配出的工作区根。 */
|
|
32
|
+
rootPath?: string;
|
|
33
|
+
/** ▾ 下拉顶部的工作区清单(显示名);不传 = 宿主快照里的全部。 */
|
|
30
34
|
workspaces?: readonly string[];
|
|
31
35
|
/**
|
|
32
|
-
* 宿主工作区清单(带绝对 path
|
|
33
|
-
*
|
|
34
|
-
* **不传 = 自动用宿主 workspaces 快照**(connectHost 注入的 workspaceList)——
|
|
35
|
-
* 调用方零传参也能匹配、能切。仅在「覆盖快照 / 宿主未接线」时才需要显式传。
|
|
36
|
+
* 宿主工作区清单(带绝对 path):**可选覆盖**。不传 = 自动用宿主 workspaces 快照
|
|
37
|
+
* (connectHost 注入的 workspaceList)——调用方零传参也能匹配、能切。
|
|
36
38
|
*/
|
|
37
39
|
workspaceAnchors?: readonly WorkspaceAnchorItem[];
|
|
38
|
-
/** 从 ▾
|
|
40
|
+
/** 从 ▾ 下拉选择其他工作区(核心默认自己开,一般不用接)。 */
|
|
39
41
|
onSelectWorkspace?: (name: string) => void;
|
|
40
42
|
/** 关闭后回调(✕ / Esc / handle.close 都触发)。 */
|
|
41
43
|
onClose?: () => void;
|
|
@@ -49,8 +51,6 @@ export interface OpenFilePreviewOptions {
|
|
|
49
51
|
mainMinWidth?: number;
|
|
50
52
|
/** 面板无障碍名(没有头部,只用于 aria-label)。 */
|
|
51
53
|
title?: string;
|
|
52
|
-
/** 工作区根缓存(与调用方共享时传)。 */
|
|
53
|
-
rootCache?: RootCache;
|
|
54
54
|
translate?: Translate;
|
|
55
55
|
/**
|
|
56
56
|
* **必填**:挂进哪个布局容器(`PanelDock` 是布局成员 —— 占宽度、把左边挤窄)。
|
|
@@ -65,46 +65,43 @@ export interface OpenFilePreviewOptions {
|
|
|
65
65
|
* 打开工作区文件/文件夹的**停靠**预览(分栏:挤窄 `mount` 左边的兄弟,不是盖上去)。
|
|
66
66
|
* 重复打开会关掉上一个(同侧边栏位)。
|
|
67
67
|
*
|
|
68
|
-
* 消费方最少写法(`connectHost(ctx)` 已接线):
|
|
69
|
-
* `openFilePreview({ mount, path })` ——
|
|
68
|
+
* 消费方最少写法(`connectHost(ctx)` + `connectFs({ path })` 已接线):
|
|
69
|
+
* `openFilePreview({ mount, path })` —— 路径解析、工作区匹配都由核心自己解。
|
|
70
70
|
*/
|
|
71
71
|
export declare function openFilePreview(options: OpenFilePreviewOptions): FilePreviewHandle | null;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
path: string;
|
|
75
|
-
/** true = 选的是整个文件夹。 */
|
|
76
|
-
isDir: boolean;
|
|
77
|
-
}
|
|
72
|
+
/** 兼容旧名:`PickedPath` 的前身(`path` 现在是绝对路径)。 */
|
|
73
|
+
export type PickedFile = PickedPath;
|
|
78
74
|
export interface PickWorkspaceFileOptions {
|
|
79
|
-
/** 工作区文件服务。**一般不用传**:`connectHost(ctx)` 接线后核心自己持有。 */
|
|
80
|
-
workspaceFiles?: WorkspaceFilesFace;
|
|
81
|
-
/** 该工作区的真实会话 id。**一般不用传**:缺省取「最近有会话的工作区」。 */
|
|
82
|
-
sessionId?: string;
|
|
83
75
|
/** 锚点元素:弹窗左缘与之对齐、优先落在它**下方**(下方不够才翻到上方);不传 = 屏幕居中。 */
|
|
84
76
|
anchor?: HTMLElement | null;
|
|
85
77
|
/** 过滤:exts = 只要这些扩展名(小写无点);dirs = 只要文件夹;不传 = 不限。 */
|
|
86
78
|
filter?: PickFilter;
|
|
87
79
|
officeToPdf?: OfficeToPdfFace | null;
|
|
88
|
-
/**
|
|
80
|
+
/** 起步位置:绝对 / 相对路径都收;不传 = 根节点(工作区清单 + 盘符)。 */
|
|
81
|
+
path?: string;
|
|
82
|
+
/** 相对路径的基准工作区(也是 Office 预览用的会话)。可省。 */
|
|
83
|
+
sessionId?: string;
|
|
84
|
+
/** 工作区根显示名(面包屑第一段的兜底)。 */
|
|
89
85
|
rootName?: string;
|
|
86
|
+
/** 相对路径 / 面包屑的基准目录;不传 = 按路径匹配出的工作区根。 */
|
|
87
|
+
rootPath?: string;
|
|
90
88
|
/** ▾ 下拉的工作区清单(切换工作区浏览)。 */
|
|
91
89
|
workspaces?: readonly string[];
|
|
92
90
|
onSelectWorkspace?: (name: string) => void;
|
|
93
91
|
/** 取消回调(Esc / 点外部 / ✕)。 */
|
|
94
92
|
onCancel?: () => void;
|
|
95
|
-
rootCache?: RootCache;
|
|
96
93
|
/**
|
|
97
|
-
* 文案注入:调用时把自己的 `t`
|
|
98
|
-
* 就走你的字典;不传则用核心内置中英字典。**与 openFilePreview 同一个 prop、同一套文案**。
|
|
94
|
+
* 文案注入:调用时把自己的 `t` 传进来,面板里所有文字(就走你的字典);不传则用核心内置中英字典。
|
|
99
95
|
*/
|
|
100
96
|
translate?: Translate;
|
|
101
97
|
}
|
|
102
98
|
/**
|
|
103
|
-
*
|
|
99
|
+
* 弹出「选择文件」模态弹窗,Promise 返回选中结果;取消(Esc / 点外部 / ✕)resolve `null`。
|
|
104
100
|
*
|
|
105
101
|
* **面板内容与 `openFilePreview` 完完全全是同一个 `FileBrowser`**(不是复制一套):
|
|
106
102
|
* 差别只有 ① 承载(这里挂在锚点旁的弹窗面板里,那边挂在核心 PanelDock 分栏里)、
|
|
107
|
-
* ② `picker`
|
|
103
|
+
* ② `picker` 形态参数(点文件即回传、行尾按钮变「选择」)。
|
|
108
104
|
*/
|
|
109
|
-
export declare function pickWorkspaceFile(options: PickWorkspaceFileOptions): Promise<
|
|
105
|
+
export declare function pickWorkspaceFile(options: PickWorkspaceFileOptions): Promise<PickedPath | null>;
|
|
106
|
+
export {};
|
|
110
107
|
//# sourceMappingURL=open.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/explorer/open.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/explorer/open.ts"],"names":[],"mappings":"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"}
|