dsh-life-pack 0.3.4 → 0.3.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.
- package/dist/client.js +132 -37
- package/dist/client.js.map +1 -1
- package/dist/directory-browser-api.d.ts +8 -6
- package/dist/directory-browser-api.d.ts.map +1 -1
- package/dist/directory-browser-api.js +6 -5
- package/dist/directory-browser-api.js.map +1 -1
- package/dist/directory-browser-contract.d.ts +13 -4
- package/dist/directory-browser-contract.d.ts.map +1 -1
- package/dist/directory-browser-contract.js +0 -10
- package/dist/directory-browser-contract.js.map +1 -1
- package/dist/directory-browser-parts.d.ts +65 -0
- package/dist/directory-browser-parts.d.ts.map +1 -0
- package/dist/directory-browser-parts.js +189 -0
- package/dist/directory-browser-parts.js.map +1 -0
- package/dist/directory-browser-roots.d.ts +21 -0
- package/dist/directory-browser-roots.d.ts.map +1 -0
- package/dist/directory-browser-roots.js +40 -0
- package/dist/directory-browser-roots.js.map +1 -0
- package/dist/directory-browser-state.d.ts +9 -1
- package/dist/directory-browser-state.d.ts.map +1 -1
- package/dist/directory-browser-state.js +23 -0
- package/dist/directory-browser-state.js.map +1 -1
- package/dist/directory-browser-ui.d.ts +4 -22
- package/dist/directory-browser-ui.d.ts.map +1 -1
- package/dist/directory-browser-ui.js +8 -150
- package/dist/directory-browser-ui.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/roots.d.ts +34 -0
- package/dist/roots.d.ts.map +1 -0
- package/dist/roots.js +95 -0
- package/dist/roots.js.map +1 -0
- package/dist/update-contract.d.ts +7 -0
- package/dist/update-contract.d.ts.map +1 -1
- package/dist/update-contract.js +7 -0
- package/dist/update-contract.js.map +1 -1
- package/dist/update-host.d.ts.map +1 -1
- package/dist/update-host.js +5 -1
- package/dist/update-host.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
/** 目录浏览器的公开门(**六家只 import 这一个名字**)。
|
|
2
2
|
*
|
|
3
|
-
* 为什么需要它:`package.json` 的 exports
|
|
4
|
-
*
|
|
5
|
-
* 六家就取不到「开图接线」(它在 state
|
|
3
|
+
* 为什么需要它:`package.json` 的 exports 一条子路径只能指一个文件,而本件分五份写
|
|
4
|
+
* (契约/状态/视图/零件/根取数)。若把 `./directory-browser` 直接指到 `directory-browser-contract.js`,
|
|
5
|
+
* 六家就取不到「开图接线」(它在 state 那份里)。故设这一个门,把纯逻辑与取数接线都转出;
|
|
6
6
|
* 视图那一份走 `./directory-browser-ui`(它要吃 React,单独一条)。
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* 本件不含实现、也不含判断,只做转出——实现见同目录那几份。
|
|
9
9
|
*/
|
|
10
|
-
export { browseFaceOf, filterEntries, hasPickFn, hiddenCount, isBrowseFace, joinPath,
|
|
10
|
+
export { browseFaceOf, filterEntries, hasPickFn, hiddenCount, isBrowseFace, joinPath, parentOf, pickerModeOf, readBrowseAnswer, readPickAnswer, splitDraft, validateFolderName, visibleEntries, } from './directory-browser-contract.js';
|
|
11
11
|
export { BrowseAnswerError } from './directory-browser-contract.js';
|
|
12
|
-
export type { BrowseFailure, DirectoryBrowseFace, DirectoryCrumb, DirectoryEntry, DirectoryListing, PickEnvelope, PickerMode, PickOutcome, } from './directory-browser-contract.js';
|
|
12
|
+
export type { BrowseFailure, DirectoryBrowseFace, DirectoryCrumb, DirectoryEntry, DirectoryListing, PickEnvelope, PickerMode, PickOutcome, RootKind, RootRow, } from './directory-browser-contract.js';
|
|
13
13
|
export { canGoUp, createBaseOf, createBrowseController, createDirectoryRowBrowser, describe, entryPath, openRowBrowser, rowsOf, targetOf, } from './directory-browser-state.js';
|
|
14
14
|
export type { BrowseController, BrowseListener, BrowsePhase, BrowseState, DirectoryRowBrowser, } from './directory-browser-state.js';
|
|
15
|
+
export { createRootsSource, readRootsAnswer } from './directory-browser-roots.js';
|
|
16
|
+
export type { RootsCall } from './directory-browser-roots.js';
|
|
15
17
|
import type { PickerMode } from './directory-browser-contract.js';
|
|
16
18
|
/** 一行目录配置的入口(**六家画按钮就靠这两格**):
|
|
17
19
|
* `mode` 决定按钮写什么(`native`=「选择文件夹…」/`browse`=「浏览…」),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-browser-api.d.ts","sourceRoot":"","sources":["../src/directory-browser-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"directory-browser-api.d.ts","sourceRoot":"","sources":["../src/directory-browser-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,QAAQ,EACR,OAAO,GACR,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,OAAO,EACP,YAAY,EACZ,sBAAsB,EACtB,yBAAyB,EACzB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,MAAM,EACN,QAAQ,GACT,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,WAAW,EACX,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,YAAY,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;;kDAGkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;CAC7D"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/** 目录浏览器的公开门(**六家只 import 这一个名字**)。
|
|
2
2
|
*
|
|
3
|
-
* 为什么需要它:`package.json` 的 exports
|
|
4
|
-
*
|
|
5
|
-
* 六家就取不到「开图接线」(它在 state
|
|
3
|
+
* 为什么需要它:`package.json` 的 exports 一条子路径只能指一个文件,而本件分五份写
|
|
4
|
+
* (契约/状态/视图/零件/根取数)。若把 `./directory-browser` 直接指到 `directory-browser-contract.js`,
|
|
5
|
+
* 六家就取不到「开图接线」(它在 state 那份里)。故设这一个门,把纯逻辑与取数接线都转出;
|
|
6
6
|
* 视图那一份走 `./directory-browser-ui`(它要吃 React,单独一条)。
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* 本件不含实现、也不含判断,只做转出——实现见同目录那几份。
|
|
9
9
|
*/
|
|
10
|
-
export { browseFaceOf, filterEntries, hasPickFn, hiddenCount, isBrowseFace, joinPath,
|
|
10
|
+
export { browseFaceOf, filterEntries, hasPickFn, hiddenCount, isBrowseFace, joinPath, parentOf, pickerModeOf, readBrowseAnswer, readPickAnswer, splitDraft, validateFolderName, visibleEntries, } from './directory-browser-contract.js';
|
|
11
11
|
export { BrowseAnswerError } from './directory-browser-contract.js';
|
|
12
12
|
export { canGoUp, createBaseOf, createBrowseController, createDirectoryRowBrowser, describe, entryPath, openRowBrowser, rowsOf, targetOf, } from './directory-browser-state.js';
|
|
13
|
+
export { createRootsSource, readRootsAnswer } from './directory-browser-roots.js';
|
|
13
14
|
//# sourceMappingURL=directory-browser-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-browser-api.js","sourceRoot":"","sources":["../src/directory-browser-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"directory-browser-api.js","sourceRoot":"","sources":["../src/directory-browser-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAcpE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,sBAAsB,EACtB,yBAAyB,EACzB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,MAAM,EACN,QAAQ,GACT,MAAM,8BAA8B,CAAC;AAStC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -50,6 +50,16 @@ export interface BrowseFailure {
|
|
|
50
50
|
* 所以「有没有 `pick`/有没有 `list`」问不出组合里服务哪种能力,只有真调一次、看它拒没拒才知道。 */
|
|
51
51
|
/** 目录行入口的三态判定结果:**按命名空间上有什么动词**看一眼,不是问组合里服务哪种能力。 */
|
|
52
52
|
export type PickerMode = 'native' | 'browse' | 'none';
|
|
53
|
+
/** 一个「根」是什么类型:界面只拿它写悬停说明,不拿它做任何判断。
|
|
54
|
+
*
|
|
55
|
+
* 这五个值由**取数方**(宿主半)归一:Windows 上是 `DriveInfo.DriveType` 映过来的;
|
|
56
|
+
* 别的根(挂载点等)落 `other`。本件不认识任何宿主名词,只认识这五个值。 */
|
|
57
|
+
export type RootKind = 'fixed' | 'network' | 'removable' | 'optical' | 'other';
|
|
58
|
+
/** 一个可跳转的根:`path` 是绝对路径(Windows 上形如 `D:\`),`kind` 只用于显示。 */
|
|
59
|
+
export interface RootRow {
|
|
60
|
+
readonly path: string;
|
|
61
|
+
readonly kind: RootKind;
|
|
62
|
+
}
|
|
53
63
|
/** 平台回执的信封(各家的 `DirectoryPickerAnswer` 与此同形;本件只认这三格,不认别家的类名)。 */
|
|
54
64
|
export interface PickEnvelope {
|
|
55
65
|
readonly ok: boolean;
|
|
@@ -61,8 +71,9 @@ export interface PickEnvelope {
|
|
|
61
71
|
}
|
|
62
72
|
/** 一次「唤起选择器」的归一结果:选中/取消/供不了,永不抛。
|
|
63
73
|
*
|
|
64
|
-
* `code` 只在平台给了的时候带上(就是 `error.code
|
|
65
|
-
*
|
|
74
|
+
* `code` 只在平台给了的时候带上(就是 `error.code`):调用方据它分辨「宿主没给这条路」与
|
|
75
|
+
* 「别的失败」——前者该换一条路走,后者才该报出来。那个码由调用方从自己的宿主镜像里传进来
|
|
76
|
+
* (见 `openRowBrowser` 的 `refusalCode`),本件不认它的名字。 */
|
|
66
77
|
export type PickOutcome = {
|
|
67
78
|
readonly kind: 'picked';
|
|
68
79
|
readonly path: string;
|
|
@@ -134,8 +145,6 @@ export declare function splitDraft(draft: string): {
|
|
|
134
145
|
};
|
|
135
146
|
/** 按筛选词过一层目录(大小写不敏感;空筛选词=全留)。 */
|
|
136
147
|
export declare function filterEntries(entries: readonly DirectoryEntry[], filter: string): readonly DirectoryEntry[];
|
|
137
|
-
/** 给界面用的一句话位置说明:优先显示相对 home 的说法,省得整条绝对路径占满一行。 */
|
|
138
|
-
export declare function locationLabel(listing: DirectoryListing): string;
|
|
139
148
|
/** 新建文件夹的名字合不合法(单个路径段:不许分隔符、不许空、不许 `.`/`..`)。
|
|
140
149
|
*
|
|
141
150
|
* 与宿主 browse 后端的校验同口径——这里先拦一道,是为了在图上给得出人话,不是替代宿主校验。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-browser-contract.d.ts","sourceRoot":"","sources":["../src/directory-browser-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9D;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;4DAK4D;AAE5D,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED
|
|
1
|
+
{"version":3,"file":"directory-browser-contract.d.ts","sourceRoot":"","sources":["../src/directory-browser-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -159,16 +159,6 @@ export function filterEntries(entries, filter) {
|
|
|
159
159
|
return entries;
|
|
160
160
|
return entries.filter((entry) => entry.name.toLowerCase().includes(needle));
|
|
161
161
|
}
|
|
162
|
-
/** 给界面用的一句话位置说明:优先显示相对 home 的说法,省得整条绝对路径占满一行。 */
|
|
163
|
-
export function locationLabel(listing) {
|
|
164
|
-
const home = listing.home.replace(/[\\/]+$/, '');
|
|
165
|
-
if (home !== '' && listing.path !== home && listing.path.startsWith(home)) {
|
|
166
|
-
const tail = listing.path.slice(home.length).replace(/^[\\/]+/, '');
|
|
167
|
-
if (tail !== '')
|
|
168
|
-
return '~' + (listing.path.includes('\\') ? '\\' : '/') + tail;
|
|
169
|
-
}
|
|
170
|
-
return listing.path;
|
|
171
|
-
}
|
|
172
162
|
/** 新建文件夹的名字合不合法(单个路径段:不许分隔符、不许空、不许 `.`/`..`)。
|
|
173
163
|
*
|
|
174
164
|
* 与宿主 browse 后端的校验同口径——这里先拦一道,是为了在图上给得出人话,不是替代宿主校验。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-browser-contract.js","sourceRoot":"","sources":["../src/directory-browser-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"directory-browser-contract.js","sourceRoot":"","sources":["../src/directory-browser-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** 文件浏览器视图半的**零件**:样式表与四行控件(面包屑/根/一行子目录/新建行)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么拆出来:整张对话框的组版与这些零件的变化频率不同——零件跟着「图上多一行/少一行」动,
|
|
4
|
+
* 组版跟着「对话框长什么样」动。拆开之后两边都在 350 行告警线内,而对外面不变
|
|
5
|
+
* (`directory-browser-ui.ts` 照旧转出组件与两个接线函数)。
|
|
6
|
+
*
|
|
7
|
+
* 本件与视图半同样**不认识宿主**:只认状态与文案。
|
|
8
|
+
*/
|
|
9
|
+
import * as React from 'react';
|
|
10
|
+
import type { BrowseState } from './directory-browser-state.js';
|
|
11
|
+
import type { DirectoryEntry } from './directory-browser-contract.js';
|
|
12
|
+
/** 图上出现的每一句文案;调用方给(本件不自造口径)。 */
|
|
13
|
+
export interface DirectoryBrowserLabels {
|
|
14
|
+
/** 对话框标题,例:「选择数据目录」。 */
|
|
15
|
+
readonly title: string;
|
|
16
|
+
readonly close: string;
|
|
17
|
+
readonly up: string;
|
|
18
|
+
readonly pathPlaceholder: string;
|
|
19
|
+
readonly go: string;
|
|
20
|
+
readonly showHidden: (count: number) => string;
|
|
21
|
+
readonly empty: string;
|
|
22
|
+
readonly loading: string;
|
|
23
|
+
readonly newFolder: string;
|
|
24
|
+
readonly createConfirm: string;
|
|
25
|
+
readonly createCancel: string;
|
|
26
|
+
readonly select: string;
|
|
27
|
+
readonly selected: string;
|
|
28
|
+
readonly open: string;
|
|
29
|
+
readonly cancel: string;
|
|
30
|
+
/** 选中预览那一行的前缀,例:「将选定:」。 */
|
|
31
|
+
readonly willPick: string;
|
|
32
|
+
}
|
|
33
|
+
export declare const S: {
|
|
34
|
+
readonly scrim: React.CSSProperties;
|
|
35
|
+
readonly dialog: React.CSSProperties;
|
|
36
|
+
readonly head: React.CSSProperties;
|
|
37
|
+
readonly title: React.CSSProperties;
|
|
38
|
+
readonly crumbs: React.CSSProperties;
|
|
39
|
+
readonly chromeButton: React.CSSProperties;
|
|
40
|
+
readonly crumbSep: React.CSSProperties;
|
|
41
|
+
readonly roots: React.CSSProperties;
|
|
42
|
+
readonly rootButton: React.CSSProperties;
|
|
43
|
+
readonly pathRow: React.CSSProperties;
|
|
44
|
+
readonly input: React.CSSProperties;
|
|
45
|
+
readonly button: React.CSSProperties;
|
|
46
|
+
readonly buttonOff: React.CSSProperties;
|
|
47
|
+
readonly list: React.CSSProperties;
|
|
48
|
+
readonly row: React.CSSProperties;
|
|
49
|
+
readonly rowSelected: React.CSSProperties;
|
|
50
|
+
readonly empty: React.CSSProperties;
|
|
51
|
+
readonly footNote: React.CSSProperties;
|
|
52
|
+
readonly foot: React.CSSProperties;
|
|
53
|
+
readonly target: React.CSSProperties;
|
|
54
|
+
readonly error: React.CSSProperties;
|
|
55
|
+
};
|
|
56
|
+
/** 面包屑:从文件系统根到当前层,每一格都是跳转目标(`listing.crumbs` 由取数方给)。 */
|
|
57
|
+
export declare function crumbRow(state: BrowseState, onEnter: (path: string) => void): React.ReactElement | null;
|
|
58
|
+
/** 可跳转的根那一行(Windows 上的盘符等):**就是本机全部磁盘**,故不加行首说明。
|
|
59
|
+
* **少于两个根就不画**:一个根没有「跳到别处」可言。 */
|
|
60
|
+
export declare function rootsRow(state: BrowseState, onEnter: (path: string) => void): React.ReactElement | null;
|
|
61
|
+
/** 一行子目录:点名字进它,点「选」把它当目标(「选」再点一次取消)。 */
|
|
62
|
+
export declare function entryRow(entry: DirectoryEntry, selected: boolean, labels: DirectoryBrowserLabels, onToggleSelect: (path: string) => void, onEnter: (path: string) => void): React.ReactElement;
|
|
63
|
+
/** 「新建文件夹」那一行(`creatingName === null` 时收起)。 */
|
|
64
|
+
export declare function createRow(labels: DirectoryBrowserLabels, onName: (name: string) => void, onCancel: () => void, onCreate: (name: string) => void, creatingName: string | null): React.ReactElement | null;
|
|
65
|
+
//# sourceMappingURL=directory-browser-parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-browser-parts.d.ts","sourceRoot":"","sources":["../src/directory-browser-parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/** 文件浏览器视图半的**零件**:样式表与四行控件(面包屑/根/一行子目录/新建行)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么拆出来:整张对话框的组版与这些零件的变化频率不同——零件跟着「图上多一行/少一行」动,
|
|
4
|
+
* 组版跟着「对话框长什么样」动。拆开之后两边都在 350 行告警线内,而对外面不变
|
|
5
|
+
* (`directory-browser-ui.ts` 照旧转出组件与两个接线函数)。
|
|
6
|
+
*
|
|
7
|
+
* 本件与视图半同样**不认识宿主**:只认状态与文案。
|
|
8
|
+
*/
|
|
9
|
+
import * as React from 'react';
|
|
10
|
+
/** 根的类型说明(悬停可见):**本件自己的词汇**,与取数方无关。 */
|
|
11
|
+
const ROOT_KIND_TEXT = {
|
|
12
|
+
fixed: '固定磁盘',
|
|
13
|
+
network: '网络驱动器',
|
|
14
|
+
removable: '可移动磁盘',
|
|
15
|
+
optical: '光驱',
|
|
16
|
+
other: '磁盘',
|
|
17
|
+
};
|
|
18
|
+
export const S = {
|
|
19
|
+
scrim: {
|
|
20
|
+
position: 'fixed',
|
|
21
|
+
inset: 0,
|
|
22
|
+
background: 'rgba(0,0,0,0.35)',
|
|
23
|
+
display: 'flex',
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
justifyContent: 'center',
|
|
26
|
+
zIndex: 9999,
|
|
27
|
+
},
|
|
28
|
+
dialog: {
|
|
29
|
+
width: 680,
|
|
30
|
+
maxWidth: '92vw',
|
|
31
|
+
height: 500,
|
|
32
|
+
maxHeight: '86vh',
|
|
33
|
+
display: 'flex',
|
|
34
|
+
flexDirection: 'column',
|
|
35
|
+
background: 'var(--dsw-alias-bg-layer-1, #1f1f23)',
|
|
36
|
+
color: 'var(--dsw-alias-label-primary, inherit)',
|
|
37
|
+
border: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.35))',
|
|
38
|
+
borderRadius: 10,
|
|
39
|
+
boxShadow: '0 12px 32px rgba(0,0,0,0.35)',
|
|
40
|
+
overflow: 'hidden',
|
|
41
|
+
},
|
|
42
|
+
head: {
|
|
43
|
+
display: 'flex',
|
|
44
|
+
alignItems: 'center',
|
|
45
|
+
gap: 8,
|
|
46
|
+
padding: '10px 12px',
|
|
47
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.25))',
|
|
48
|
+
},
|
|
49
|
+
title: { fontSize: 14, fontWeight: 700 },
|
|
50
|
+
crumbs: { display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: 2, padding: '8px 12px 0', fontSize: 12 },
|
|
51
|
+
chromeButton: {
|
|
52
|
+
background: 'transparent',
|
|
53
|
+
border: 'none',
|
|
54
|
+
color: 'var(--dsw-alias-label-primary, inherit)',
|
|
55
|
+
cursor: 'pointer',
|
|
56
|
+
padding: '2px 4px',
|
|
57
|
+
fontSize: 12,
|
|
58
|
+
opacity: 0.85,
|
|
59
|
+
},
|
|
60
|
+
crumbSep: { opacity: 0.45, fontSize: 12 },
|
|
61
|
+
roots: { display: 'flex', flexWrap: 'wrap', alignItems: 'center', gap: 6, padding: '0 12px 8px', fontSize: 12 },
|
|
62
|
+
rootButton: {
|
|
63
|
+
border: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.35))',
|
|
64
|
+
borderRadius: 6,
|
|
65
|
+
padding: '3px 8px',
|
|
66
|
+
opacity: 1,
|
|
67
|
+
},
|
|
68
|
+
pathRow: { display: 'flex', gap: 6, padding: '8px 12px' },
|
|
69
|
+
input: {
|
|
70
|
+
flex: 1,
|
|
71
|
+
minWidth: 0,
|
|
72
|
+
fontSize: 12,
|
|
73
|
+
padding: '5px 8px',
|
|
74
|
+
background: 'var(--dsw-alias-bg-layer-2, rgba(128,128,128,0.12))',
|
|
75
|
+
color: 'inherit',
|
|
76
|
+
border: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.35))',
|
|
77
|
+
borderRadius: 6,
|
|
78
|
+
},
|
|
79
|
+
button: {
|
|
80
|
+
fontSize: 12,
|
|
81
|
+
padding: '5px 10px',
|
|
82
|
+
cursor: 'pointer',
|
|
83
|
+
background: 'var(--dsw-alias-bg-layer-2, rgba(128,128,128,0.12))',
|
|
84
|
+
color: 'inherit',
|
|
85
|
+
border: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.35))',
|
|
86
|
+
borderRadius: 6,
|
|
87
|
+
},
|
|
88
|
+
buttonOff: { opacity: 0.45, cursor: 'default' },
|
|
89
|
+
list: {
|
|
90
|
+
flex: 1,
|
|
91
|
+
minHeight: 0,
|
|
92
|
+
overflowY: 'auto',
|
|
93
|
+
margin: '0 12px',
|
|
94
|
+
border: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.25))',
|
|
95
|
+
borderRadius: 6,
|
|
96
|
+
},
|
|
97
|
+
row: {
|
|
98
|
+
display: 'flex',
|
|
99
|
+
alignItems: 'center',
|
|
100
|
+
gap: 8,
|
|
101
|
+
width: '100%',
|
|
102
|
+
padding: '6px 10px',
|
|
103
|
+
textAlign: 'left',
|
|
104
|
+
background: 'transparent',
|
|
105
|
+
color: 'inherit',
|
|
106
|
+
border: 'none',
|
|
107
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.12))',
|
|
108
|
+
cursor: 'pointer',
|
|
109
|
+
fontSize: 13,
|
|
110
|
+
},
|
|
111
|
+
rowSelected: { background: 'var(--dsw-alias-bg-layer-2, rgba(128,128,128,0.18))' },
|
|
112
|
+
empty: { padding: '14px 12px', fontSize: 12, opacity: 0.7 },
|
|
113
|
+
footNote: { padding: '6px 12px 0', fontSize: 12, minHeight: 20 },
|
|
114
|
+
foot: {
|
|
115
|
+
display: 'flex',
|
|
116
|
+
alignItems: 'center',
|
|
117
|
+
gap: 8,
|
|
118
|
+
padding: '10px 12px',
|
|
119
|
+
borderTop: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.25))',
|
|
120
|
+
},
|
|
121
|
+
target: { marginRight: 'auto', fontSize: 12, opacity: 0.8, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },
|
|
122
|
+
error: { color: 'var(--dsw-alias-label-error, #e66)' },
|
|
123
|
+
};
|
|
124
|
+
/** 面包屑:从文件系统根到当前层,每一格都是跳转目标(`listing.crumbs` 由取数方给)。 */
|
|
125
|
+
export function crumbRow(state, onEnter) {
|
|
126
|
+
const listing = state.listing;
|
|
127
|
+
if (listing === null || listing.crumbs.length === 0)
|
|
128
|
+
return null;
|
|
129
|
+
const parts = [];
|
|
130
|
+
listing.crumbs.forEach((crumb, index) => {
|
|
131
|
+
if (index > 0)
|
|
132
|
+
parts.push(React.createElement('span', { key: 'sep-' + crumb.path, style: S.crumbSep }, '›'));
|
|
133
|
+
const isCurrent = crumb.path === listing.path;
|
|
134
|
+
parts.push(React.createElement('button', {
|
|
135
|
+
key: crumb.path,
|
|
136
|
+
type: 'button',
|
|
137
|
+
style: { ...S.chromeButton, fontWeight: isCurrent ? 700 : 400 },
|
|
138
|
+
title: crumb.path,
|
|
139
|
+
onClick: () => onEnter(crumb.path),
|
|
140
|
+
},
|
|
141
|
+
// 每一格都写**它自己那一层的名字**:第一格是文件系统根(`C:\`),不是「上一级」——
|
|
142
|
+
// 「上一级」是路径行那颗按钮的活(#744 返修:这一格原先串了那颗按钮的文案)。
|
|
143
|
+
crumb.name));
|
|
144
|
+
});
|
|
145
|
+
return React.createElement('div', { style: S.crumbs }, parts);
|
|
146
|
+
}
|
|
147
|
+
/** 可跳转的根那一行(Windows 上的盘符等):**就是本机全部磁盘**,故不加行首说明。
|
|
148
|
+
* **少于两个根就不画**:一个根没有「跳到别处」可言。 */
|
|
149
|
+
export function rootsRow(state, onEnter) {
|
|
150
|
+
if (state.roots.length < 2)
|
|
151
|
+
return null;
|
|
152
|
+
const parts = state.roots.map((root) => React.createElement('button', {
|
|
153
|
+
key: root.path,
|
|
154
|
+
type: 'button',
|
|
155
|
+
style: { ...S.chromeButton, ...S.rootButton },
|
|
156
|
+
title: ROOT_KIND_TEXT[root.kind] ?? ROOT_KIND_TEXT.other,
|
|
157
|
+
onClick: () => onEnter(root.path),
|
|
158
|
+
}, root.path));
|
|
159
|
+
return React.createElement('div', { style: S.roots }, parts);
|
|
160
|
+
}
|
|
161
|
+
/** 一行子目录:点名字进它,点「选」把它当目标(「选」再点一次取消)。 */
|
|
162
|
+
export function entryRow(entry, selected, labels, onToggleSelect, onEnter) {
|
|
163
|
+
return React.createElement('div', { key: entry.path, style: { ...S.row, padding: 0, ...(selected ? S.rowSelected : {}) } }, React.createElement('button', { type: 'button', style: { ...S.row, flex: 1, border: 'none' }, onClick: () => onEnter(entry.path) }, '📁 ' + entry.name), React.createElement('button', {
|
|
164
|
+
type: 'button',
|
|
165
|
+
style: { ...S.button, marginRight: 8, padding: '2px 8px' },
|
|
166
|
+
'aria-pressed': selected,
|
|
167
|
+
title: selected ? labels.selected : labels.select,
|
|
168
|
+
onClick: () => onToggleSelect(entry.path),
|
|
169
|
+
}, selected ? '✓' : labels.select));
|
|
170
|
+
}
|
|
171
|
+
/** 「新建文件夹」那一行(`creatingName === null` 时收起)。 */
|
|
172
|
+
export function createRow(labels, onName, onCancel, onCreate, creatingName) {
|
|
173
|
+
if (creatingName === null)
|
|
174
|
+
return null;
|
|
175
|
+
return React.createElement('div', { style: { ...S.pathRow, borderTop: '1px solid var(--dsw-alias-border-l2, rgba(128,128,128,0.25))' } }, React.createElement('input', {
|
|
176
|
+
style: S.input,
|
|
177
|
+
value: creatingName,
|
|
178
|
+
placeholder: labels.newFolder,
|
|
179
|
+
'aria-label': labels.newFolder,
|
|
180
|
+
onChange: (event) => onName(event.currentTarget.value),
|
|
181
|
+
onKeyDown: (event) => {
|
|
182
|
+
if (event.key === 'Enter')
|
|
183
|
+
onCreate(creatingName);
|
|
184
|
+
if (event.key === 'Escape')
|
|
185
|
+
onCancel();
|
|
186
|
+
},
|
|
187
|
+
}), React.createElement('button', { type: 'button', style: S.button, onClick: () => onCreate(creatingName) }, labels.createConfirm), React.createElement('button', { type: 'button', style: S.button, onClick: onCancel }, labels.createCancel));
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=directory-browser-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-browser-parts.js","sourceRoot":"","sources":["../src/directory-browser-parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** 「本机根清单」的取数接线(客户端半):把一通电话变成图上那一行可跳转的根。
|
|
2
|
+
*
|
|
3
|
+
* **不认识宿主**:载体基段、通道名(第二段)、电话名全由调用方传进来——各家从自己的宿主镜像里拿
|
|
4
|
+
* 那几个字面量(和 `openRowBrowser` 的 `refusalCode` 同一条规矩)。本件只做两件事:
|
|
5
|
+
* 发一次调用、把回执信封拆成根清单;**任何失败都当空清单**(图上少画一行,不报错、不挡路)。
|
|
6
|
+
*/
|
|
7
|
+
import type { RootRow } from './directory-browser-contract.js';
|
|
8
|
+
/** 取数口:`connection.rpc.call` 的形状,每次现取(连接后到也不永久缺席)。 */
|
|
9
|
+
export type RootsCall = (base: string, endpoint: string, payload: unknown, signal?: AbortSignal) => Promise<unknown>;
|
|
10
|
+
/** 信封 → 根清单(纯函数,**永不抛**):`{ok:true, value:{roots:[…]}}` 之外的形状一律当空。 */
|
|
11
|
+
export declare function readRootsAnswer(raw: unknown): readonly RootRow[];
|
|
12
|
+
/** 建一个「根清单取数器」:给调用口与三个名字,回一个 `() => Promise<RootRow[]>`。
|
|
13
|
+
*
|
|
14
|
+
* 界面按需调它(开图一次),不在渲染里调,也不缓存到这里——缓存是宿主半的事。 */
|
|
15
|
+
export declare function createRootsSource(input: {
|
|
16
|
+
readonly getCall: () => unknown;
|
|
17
|
+
readonly base: string;
|
|
18
|
+
readonly endpoint: string;
|
|
19
|
+
readonly method: string;
|
|
20
|
+
}): () => Promise<readonly RootRow[]>;
|
|
21
|
+
//# sourceMappingURL=directory-browser-roots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-browser-roots.d.ts","sourceRoot":"","sources":["../src/directory-browser-roots.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAEzE,sDAAsD;AACtD,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,OAAO,CAAC,CAAC;AAStB,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAMhE;AAED;;4CAE4C;AAC5C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAYpC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** 「本机根清单」的取数接线(客户端半):把一通电话变成图上那一行可跳转的根。
|
|
2
|
+
*
|
|
3
|
+
* **不认识宿主**:载体基段、通道名(第二段)、电话名全由调用方传进来——各家从自己的宿主镜像里拿
|
|
4
|
+
* 那几个字面量(和 `openRowBrowser` 的 `refusalCode` 同一条规矩)。本件只做两件事:
|
|
5
|
+
* 发一次调用、把回执信封拆成根清单;**任何失败都当空清单**(图上少画一行,不报错、不挡路)。
|
|
6
|
+
*/
|
|
7
|
+
/** 认一认某个值像不像一个根(认不出的行丢掉:图的干净比多画一行重要)。 */
|
|
8
|
+
function isRootRow(raw) {
|
|
9
|
+
if (typeof raw !== 'object' || raw === null)
|
|
10
|
+
return false;
|
|
11
|
+
const row = raw;
|
|
12
|
+
return typeof row.path === 'string' && row.path !== '' && typeof row.kind === 'string';
|
|
13
|
+
}
|
|
14
|
+
/** 信封 → 根清单(纯函数,**永不抛**):`{ok:true, value:{roots:[…]}}` 之外的形状一律当空。 */
|
|
15
|
+
export function readRootsAnswer(raw) {
|
|
16
|
+
const answer = (typeof raw === 'object' && raw !== null ? raw : {});
|
|
17
|
+
if (answer.ok !== true)
|
|
18
|
+
return [];
|
|
19
|
+
const value = (typeof answer.value === 'object' && answer.value !== null ? answer.value : {});
|
|
20
|
+
if (!Array.isArray(value.roots))
|
|
21
|
+
return [];
|
|
22
|
+
return value.roots.filter(isRootRow).map((row) => ({ path: row.path, kind: row.kind }));
|
|
23
|
+
}
|
|
24
|
+
/** 建一个「根清单取数器」:给调用口与三个名字,回一个 `() => Promise<RootRow[]>`。
|
|
25
|
+
*
|
|
26
|
+
* 界面按需调它(开图一次),不在渲染里调,也不缓存到这里——缓存是宿主半的事。 */
|
|
27
|
+
export function createRootsSource(input) {
|
|
28
|
+
return async () => {
|
|
29
|
+
const call = input.getCall();
|
|
30
|
+
if (typeof call !== 'function')
|
|
31
|
+
return [];
|
|
32
|
+
try {
|
|
33
|
+
return readRootsAnswer(await call(input.base, input.endpoint, { method: input.method, payload: {} }));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=directory-browser-roots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-browser-roots.js","sourceRoot":"","sources":["../src/directory-browser-roots.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,yCAAyC;AACzC,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,GAAG,GAAG,GAAyC,CAAC;IACtD,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;AACzF,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAsC,CAAC;IACzG,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAwB,CAAC;IACrH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAgB,EAAE,CAAC,CAAC,CAAC;AACtG,CAAC;AAED;;4CAE4C;AAC5C,MAAM,UAAU,iBAAiB,CAAC,KAKjC;IACC,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,eAAe,CACpB,MAAO,IAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAC7F,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 数据来源只有两格:`list(path?)` 与 `createDirectory(path, name)`(调用方注入的 `DirectoryBrowseFace`)。
|
|
8
8
|
*/
|
|
9
|
-
import type { BrowseFailure, DirectoryBrowseFace, DirectoryEntry, DirectoryListing } from './directory-browser-contract.js';
|
|
9
|
+
import type { BrowseFailure, DirectoryBrowseFace, DirectoryEntry, DirectoryListing, RootRow } from './directory-browser-contract.js';
|
|
10
10
|
/** 一层列举的三态:加载中/拿到了/这一层读不出来。 */
|
|
11
11
|
export type BrowsePhase = 'idle' | 'loading' | 'ready' | 'failed';
|
|
12
12
|
/** 图上的全部状态。视图只读它,不改它。 */
|
|
@@ -27,6 +27,8 @@ export interface BrowseState {
|
|
|
27
27
|
readonly creating: string | null;
|
|
28
28
|
/** 上一次操作的失败人话(新建失败等);看一眼就好,下一次操作清掉。 */
|
|
29
29
|
readonly notice: string | null;
|
|
30
|
+
/** 可跳转的根(Windows 上的盘符等):取数方给什么就是什么,空数组=不画那一行。 */
|
|
31
|
+
readonly roots: readonly RootRow[];
|
|
30
32
|
}
|
|
31
33
|
/** 订阅者拿到的状态(不可变,每次变更是新对象)。 */
|
|
32
34
|
export type BrowseListener = (state: BrowseState) => void;
|
|
@@ -69,6 +71,8 @@ export declare function createBrowseController(deps: {
|
|
|
69
71
|
readonly onClose: () => void;
|
|
70
72
|
/** 失败人话的前缀,默认「浏览失败」。 */
|
|
71
73
|
readonly failureLabel?: string;
|
|
74
|
+
/** 可跳转的根从哪来;不给就是没有这一行(都是空清单,一样不画)。 */
|
|
75
|
+
readonly rootsSource?: () => Promise<readonly RootRow[]>;
|
|
72
76
|
}): BrowseController;
|
|
73
77
|
/** 图上这一层要画的行(按隐藏开关与草稿末段过滤之后的)。 */
|
|
74
78
|
export declare function rowsOf(state: BrowseState): readonly DirectoryEntry[];
|
|
@@ -116,6 +120,8 @@ export declare function createDirectoryRowBrowser(deps: {
|
|
|
116
120
|
readonly onPicked: (path: string) => void;
|
|
117
121
|
readonly onClosed?: () => void;
|
|
118
122
|
readonly failureLabel?: string;
|
|
123
|
+
/** 可跳转的根从哪来(各家给的是同一份「总管电话」的取数器);不给就没有那一行。 */
|
|
124
|
+
readonly rootsSource?: () => Promise<readonly RootRow[]>;
|
|
119
125
|
}): DirectoryRowBrowser;
|
|
120
126
|
/** 一条目录行点下去该走哪条路(**六家共用这一处策略**,单独写在各家就会各错各的)。
|
|
121
127
|
*
|
|
@@ -135,5 +141,7 @@ export declare function openRowBrowser(input: {
|
|
|
135
141
|
readonly onChange: (next: string) => void;
|
|
136
142
|
readonly onRow: (row: DirectoryRowBrowser | null) => void;
|
|
137
143
|
readonly refusalCode: string;
|
|
144
|
+
/** 可跳转的根从哪来(可选:不给就是图上没有那一行)。 */
|
|
145
|
+
readonly rootsSource?: () => Promise<readonly RootRow[]>;
|
|
138
146
|
}): Promise<'open' | 'refused'> | undefined;
|
|
139
147
|
//# sourceMappingURL=directory-browser-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-browser-state.d.ts","sourceRoot":"","sources":["../src/directory-browser-state.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,gBAAgB,
|
|
1
|
+
{"version":3,"file":"directory-browser-state.d.ts","sourceRoot":"","sources":["../src/directory-browser-state.ts"],"names":[],"mappings":"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"}
|