dsh-plugin-core 0.35.11 → 0.35.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/README.zh-CN.md +7 -6
- package/dist/host/index.d.ts +31 -8
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.js +29 -9
- package/dist/host/index.js.map +1 -1
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -2
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/infra/host-data.d.ts +8 -0
- package/dist/ui/infra/host-data.d.ts.map +1 -1
- package/dist/ui/infra/host-data.js +41 -11
- package/dist/ui/infra/host-data.js.map +1 -1
- package/dist/ui/inputs/ModelPicker.d.ts +7 -0
- package/dist/ui/inputs/ModelPicker.d.ts.map +1 -1
- package/dist/ui/inputs/ModelPicker.js +19 -6
- package/dist/ui/inputs/ModelPicker.js.map +1 -1
- package/dist/ui/inputs/picker-logic.d.ts +14 -0
- package/dist/ui/inputs/picker-logic.d.ts.map +1 -1
- package/dist/ui/inputs/picker-logic.js +30 -0
- package/dist/ui/inputs/picker-logic.js.map +1 -1
- package/dist/ui/navigation/Pagination.d.ts +3 -0
- package/dist/ui/navigation/Pagination.d.ts.map +1 -1
- package/dist/ui/navigation/Pagination.js +1 -0
- package/dist/ui/navigation/Pagination.js.map +1 -1
- package/docs/design/external/dsh-host.md +16 -0
- package/docs/help/integration.doc.ts +23 -3
- package/docs/help/integration.md +26 -4
- package/docs/help/ui.doc.ts +28 -4
- package/docs/help/ui.md +26 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -119,7 +119,8 @@ Everything is built from tokens, takes its data through props, and follows the h
|
|
|
119
119
|
- `Input`, `PrefixedInput`, `NumberInput`, `Textarea` — one shared field metric (`fieldMetricsOf`) so every control lines up; error state, leading icon slot, search clear button, and a question-mark hint that uses the host's tooltip.
|
|
120
120
|
- `Checkbox`, and the official `Switch` for on/off semantics.
|
|
121
121
|
- `Picker` — single or multiple, search, groups, selection cap, clearable, empty state; keyboard driven (Esc / arrows / Enter). Its logic (`toGroups`, `filterGroups`, `toggleValue`) is exported separately.
|
|
122
|
-
- `WorkspacePicker`
|
|
122
|
+
- `WorkspacePicker` — a domain picker that brings its own data: call `connectHost(ctx)` once in the plugin `apply` and it subscribes to the official `workspaces` snapshot.
|
|
123
|
+
- `ModelPicker` — a domain picker for the host model catalog, wired on both sides: in the host `apply` register `serveModelCatalog(ctx, { path })` from `dsh-plugin-core/host`, then in the client `apply` call `connectHost(ctx, { modelsPath: path })` with the **same** path constant; `refreshModelCatalog()` re-pulls the catalog when providers or models change. Unwired pickers show an empty state rather than inventing entries.
|
|
123
124
|
- `DateTimePicker` — one control for a single instant or a range, precision `day` / `hour` / `minute` / `second`, two independent calendars, keyboard support, start floored and end ceiled.
|
|
124
125
|
- `InputGroup` — input with attached actions.
|
|
125
126
|
|
package/README.zh-CN.md
CHANGED
|
@@ -108,22 +108,23 @@ export function TaskEditor(props: { name: string; setName: (v: string) => void }
|
|
|
108
108
|
|
|
109
109
|
全部由 token 搭出来,数据走 props,配色跟随宿主主题。props 就是定制面——组合 props,不要 fork 源码。每个参数的完整说明见[控件参考](https://github.com/cq-guojia/dsh-plugin-core/blob/main/docs/help/ui.md)。
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
#### 动作
|
|
112
112
|
|
|
113
113
|
- `Button`——18 档外观(实心 / 线框 / 无底:`primary`、`secondary`、`danger`、`success`、`warning`、`info`、`outline`、`danger-outline`、`ghost`、`link`,加扩展八色),三档高度(24 / 28 / 32),前置与后置图标,固定 / 最小 / 最大宽度(超长跑马灯),自动 loading:`onClick` 返回 Promise 就转圈、禁用、settle 后自恢复,reject 同样恢复。
|
|
114
114
|
- `IconButton`——纯图标版本,无障碍名强制给。
|
|
115
115
|
- `Segmented`——单选 / 多选、可选 1px 外框、段内图标 / 计数 / 角标、`tone` 换选中片配色。
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
#### 录入
|
|
118
118
|
|
|
119
119
|
- `Input`、`PrefixedInput`、`NumberInput`、`Textarea`——共用一套字段尺寸(`fieldMetricsOf`),错误态、左侧图标槽、搜索清空键,问号提示直接走宿主 tooltip。
|
|
120
120
|
- `Checkbox`;开关语义用官方 `Switch`。
|
|
121
121
|
- `Picker`——单选 / 多选、搜索、分组、选择上限、可清空、空态;键盘可全操作(Esc / ↑↓ / Enter)。底层逻辑(`toGroups`、`filterGroups`、`toggleValue`)单独导出。
|
|
122
|
-
- `WorkspacePicker
|
|
122
|
+
- `WorkspacePicker`——自带数据的领域选择器:插件 `apply` 里调一次 `connectHost(ctx)` 即订阅官方 `workspaces` 快照。
|
|
123
|
+
- `ModelPicker`——选择模型的领域选择器,两段式接线:宿主 `apply` 调 `dsh-plugin-core/host` 的 `serveModelCatalog(ctx, { path })`,client `apply` 用**同一个 path 常量**调 `connectHost(ctx, { modelsPath: path })`;供应商 / 模型有增减时调 `refreshModelCatalog()` 重拉。没接线就是空态,不编造。
|
|
123
124
|
- `DateTimePicker`——一个控件覆盖「一个时刻」与「时间段」,精度 `day` / `hour` / `minute` / `second`,左右两块独立月历,键盘可用,起始端归零、结束端拉满。
|
|
124
125
|
- `InputGroup`——带附着动作的输入框。
|
|
125
126
|
|
|
126
|
-
|
|
127
|
+
#### 展示
|
|
127
128
|
|
|
128
129
|
- `Surface`——纯框容器,tone / 边框 / 内距 / 圆角四轴。
|
|
129
130
|
- `Card` / `StripCard`——带强调色的卡片。
|
|
@@ -131,14 +132,14 @@ export function TaskEditor(props: { name: string; setName: (v: string) => void }
|
|
|
131
132
|
- `Table`——多行分组表头、通栏分组(一张表装多个板块)、跨行跨列、行选中、密度 / 斑马纹 / 边框开关、列级对齐与表头语义色、内置空态、加载态与加载更多、可选内置分页。数据驱动:不排序、不取数、不虚拟滚动。
|
|
132
133
|
- `FieldHint`——独立的问号提示,浮层用的是宿主官方 tooltip。
|
|
133
134
|
|
|
134
|
-
|
|
135
|
+
#### 反馈
|
|
135
136
|
|
|
136
137
|
- `Modal`、`SideSheet`——定尺寸弹窗与侧边抽屉,都支持 `busy` 锁。
|
|
137
138
|
- `AlertModal`、`ConfirmModal`、`alertModal()`、`confirmModal()`——Promise 形态的确认 / 提示。
|
|
138
139
|
- `showToast`、`notify`——Sonner 底座的 toast,全屏单例、多插件共用。
|
|
139
140
|
- `Loader`、`LoaderBar`、`Loading`、`LoadingBlock`、`LoadingToast`、`RunningBlocks`、`showLoading`——转圈图标、不定进度条、全局单槽加载卡。
|
|
140
141
|
|
|
141
|
-
|
|
142
|
+
#### 布局与导航
|
|
142
143
|
|
|
143
144
|
- `PanelDock` / `DockPanel` / `createPanelDock`——右侧停靠分栏的通用壳:是布局成员而不是浮层,占宽挤窄主区;支持多栏、拖宽、宽度记忆、收起成右侧耳朵。
|
|
144
145
|
- `QuickToolbar`——随滚动出现的工具栏,带回到顶部与可见性规则。
|
package/dist/host/index.d.ts
CHANGED
|
@@ -23,14 +23,26 @@ export interface HostLlmLike {
|
|
|
23
23
|
name?: string;
|
|
24
24
|
}[]>;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* 宿主 `webServer` 交给 handler 的原始 Node 请求的结构化子集。
|
|
28
|
+
* 官方 `WebRoute.handler` 收的是 `IncomingMessage`(docs/design/external/dsh-host.md §11.1.1),
|
|
29
|
+
* 宿主不做 server-wide 鉴权、闸门由路由方自持 ⇒ 这里必须留出 headers / socket,
|
|
30
|
+
* 否则消费方连自己的同源守卫都接不上。
|
|
31
|
+
*/
|
|
32
|
+
export interface HostHttpRequest {
|
|
33
|
+
url?: string;
|
|
34
|
+
method?: string;
|
|
35
|
+
headers?: Record<string, string | string[] | undefined>;
|
|
36
|
+
socket?: {
|
|
37
|
+
remoteAddress?: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
26
40
|
/** 宿主 `webServer` 服务的最小面(WebRoute 形状)。 */
|
|
27
41
|
export interface HostWebServerLike {
|
|
28
42
|
register: (route: {
|
|
29
43
|
kind: 'exact' | 'prefix';
|
|
30
44
|
path: string;
|
|
31
|
-
handler: (req: {
|
|
32
|
-
url?: string;
|
|
33
|
-
}, res: {
|
|
45
|
+
handler: (req: HostHttpRequest, res: {
|
|
34
46
|
writeHead: (status: number, headers: Record<string, string>) => void;
|
|
35
47
|
end: (body: string) => void;
|
|
36
48
|
}) => void | Promise<void>;
|
|
@@ -39,6 +51,8 @@ export interface HostWebServerLike {
|
|
|
39
51
|
/** 插件宿主 ctx 的最小面。 */
|
|
40
52
|
export interface HostContextLike {
|
|
41
53
|
inject: (deps: string[], cb: (services: Record<string, unknown>) => void) => void;
|
|
54
|
+
/** cordis `ctx.get(name)`:惰性读服务,未挂载返回 undefined 且不抛;不需要 inject 声明。 */
|
|
55
|
+
get?: (name: string, strict?: boolean) => unknown;
|
|
42
56
|
}
|
|
43
57
|
/** 一条路由:一个供应商 + 它的模型。 */
|
|
44
58
|
export interface ModelRouteData {
|
|
@@ -54,15 +68,24 @@ export interface ModelRouteData {
|
|
|
54
68
|
* 导出是为了单测与「不用 HTTP 也要这份数据」的宿主场景。
|
|
55
69
|
*/
|
|
56
70
|
export declare function buildModelRoutes(llm: HostLlmLike): Promise<ModelRouteData[]>;
|
|
71
|
+
/** `serveModelCatalog` 的可选策略:宿主不做 server-wide 鉴权,闸门由路由方自持。 */
|
|
72
|
+
export interface ModelCatalogOptions {
|
|
73
|
+
/** 路由路径,客户端要用**同一个常量**去 fetch(如 `/api/x/models`)。 */
|
|
74
|
+
path: string;
|
|
75
|
+
/** 请求闸门:返回 false ⇒ 403。不传 = 沿用宿主既有边界,由消费方自行负责。 */
|
|
76
|
+
authorize?: (req: HostHttpRequest) => boolean | Promise<boolean>;
|
|
77
|
+
/** 惰性取 `llm` 的覆盖口:默认走 cordis `ctx.get('llm')`。 */
|
|
78
|
+
getLlm?: () => HostLlmLike | undefined;
|
|
79
|
+
}
|
|
57
80
|
/**
|
|
58
81
|
* 注册模型目录路由(插件宿主 `apply` 里调一次)。
|
|
59
82
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
83
|
+
* 只声明 `webServer` 一条注入线:`webServer` 是宿主必启服务,而 `llm` 可能晚挂载、或这份
|
|
84
|
+
* 组合里根本没有 —— 把它写进 `ctx.inject` 的依赖会让回调永远不触发、路由直接不注册
|
|
85
|
+
* (cordis `inject` = 声明依赖,齐了才 apply)。`llm` 改为每个请求用 `ctx.get('llm')`
|
|
86
|
+
* 惰性现取(未挂载返回 undefined、不抛),取不到回 503,客户端据此显示降级提示。
|
|
62
87
|
*/
|
|
63
|
-
export declare function serveModelCatalog(ctx: HostContextLike, options:
|
|
64
|
-
path: string;
|
|
65
|
-
}): void;
|
|
88
|
+
export declare function serveModelCatalog(ctx: HostContextLike, options: ModelCatalogOptions): void;
|
|
66
89
|
export { serveFsRoute, FS_PAGE_LIMIT, normalizeAbsPath } from './fs-route.js';
|
|
67
90
|
export type { FsRouteEntry, FsRouteListing } from './fs-route.js';
|
|
68
91
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/host/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5D,qCAAqC;IACrC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CACpF;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,CAAC,GAAG,EAAE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5D,qCAAqC;IACrC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CACpF;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;IACvD,MAAM,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACpC;AAED,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE;YAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;YAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;SAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KACpK,KAAK,OAAO,CAAA;CACd;AAED,qBAAqB;AACrB,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,IAAI,CAAA;IACjF,sEAAsE;IACtE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CAClD;AAED,yBAAyB;AACzB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACxC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBlF;AAED,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,kDAAkD;IAClD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChE,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;CACvC;AAID;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CA+B1F;AAED,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC7E,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/host/index.js
CHANGED
|
@@ -34,25 +34,45 @@ export async function buildModelRoutes(llm) {
|
|
|
34
34
|
routes.sort((left, right) => left.displayName.localeCompare(right.displayName));
|
|
35
35
|
return routes;
|
|
36
36
|
}
|
|
37
|
+
const JSON_HEADERS = { 'content-type': 'application/json; charset=utf-8' };
|
|
37
38
|
/**
|
|
38
39
|
* 注册模型目录路由(插件宿主 `apply` 里调一次)。
|
|
39
40
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
41
|
+
* 只声明 `webServer` 一条注入线:`webServer` 是宿主必启服务,而 `llm` 可能晚挂载、或这份
|
|
42
|
+
* 组合里根本没有 —— 把它写进 `ctx.inject` 的依赖会让回调永远不触发、路由直接不注册
|
|
43
|
+
* (cordis `inject` = 声明依赖,齐了才 apply)。`llm` 改为每个请求用 `ctx.get('llm')`
|
|
44
|
+
* 惰性现取(未挂载返回 undefined、不抛),取不到回 503,客户端据此显示降级提示。
|
|
42
45
|
*/
|
|
43
46
|
export function serveModelCatalog(ctx, options) {
|
|
44
|
-
ctx.inject(['
|
|
45
|
-
const llm = services.llm;
|
|
47
|
+
ctx.inject(['webServer'], (services) => {
|
|
46
48
|
const webServer = services.webServer;
|
|
47
|
-
if (
|
|
49
|
+
if (webServer === undefined)
|
|
48
50
|
return;
|
|
49
51
|
webServer.register({
|
|
50
52
|
kind: 'exact',
|
|
51
53
|
path: options.path,
|
|
52
|
-
handler: async (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
handler: async (req, res) => {
|
|
55
|
+
if (options.authorize !== undefined && !(await options.authorize(req))) {
|
|
56
|
+
res.writeHead(403, JSON_HEADERS);
|
|
57
|
+
res.end(JSON.stringify({ error: 'forbidden' }));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const llm = options.getLlm?.() ?? ctx.get?.('llm');
|
|
61
|
+
if (llm === undefined) {
|
|
62
|
+
res.writeHead(503, JSON_HEADERS);
|
|
63
|
+
res.end(JSON.stringify({ routes: [], error: 'llm-unavailable' }));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const routes = await buildModelRoutes(llm);
|
|
68
|
+
res.writeHead(200, JSON_HEADERS);
|
|
69
|
+
res.end(JSON.stringify({ routes }));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
// listProviders 抛错时也要自己收口:宿主对「发头后抛错」会直接 destroy 连接。
|
|
73
|
+
res.writeHead(500, JSON_HEADERS);
|
|
74
|
+
res.end(JSON.stringify({ routes: [], error: String(error) }));
|
|
75
|
+
}
|
|
56
76
|
},
|
|
57
77
|
});
|
|
58
78
|
});
|
package/dist/host/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export { CONTROLS_DOMAIN, ensureControls, getStyleKit, setStyleKit } from './infra/css.js';
|
|
2
2
|
export { useLocale } from './infra/locale.js';
|
|
3
|
-
export { filterGroups, flattenOptions, groupOf, labelsOf, resolveMenuSizing, resolveTriggerSizing, sliceGroups, toFlatOptions, toGroups, toggleValue, type PickerGroup, type PickerOption, type PickerSizing, } from './inputs/picker-logic.js';
|
|
3
|
+
export { filterGroups, flattenOptions, groupOf, labelsOf, resolveMenuSizing, resolveTriggerSizing, retainSelectedValue, sliceGroups, toFlatOptions, toGroups, toggleValue, type PickerGroup, type PickerOption, type PickerSizing, } from './inputs/picker-logic.js';
|
|
4
4
|
export { Picker, type PickerProps, type PickerSize } from './inputs/Picker.js';
|
|
5
5
|
export { DateTimePicker, type DateTimeOutput, type DateTimePickerProps, type DateTimeSize, } from './inputs/DateTimePicker.js';
|
|
6
6
|
export { buildMonthCells, ceilToPrecision, clampUnit, dayCaption, floorToPrecision, formatDateTimeIso, monthCaption, msToParts, nowParts, nowTimeFor, parseDateTime, partsOf, partsToMs, rangeIsValid, resolvePresetExpr, sameLocalDay, stepMax, stepUnit, toEndDraft, weekdayLabels, type DateTimeParts, type DateTimePrecision, type DateTimePreset, type DayCell, type DayRef, type EndDraft, type StepUnit, type TimeParts, } from './inputs/datetime-logic.js';
|
|
7
7
|
export { ModelPicker, type ModelPickerProps, type ModelPickerVariant } from './inputs/ModelPicker.js';
|
|
8
8
|
export { WorkspacePicker, type WorkspacePickerProps } from './inputs/WorkspacePicker.js';
|
|
9
|
-
export { connectHost, getWorkspaceFiles, modelCatalog, workspaceList, type ConnectHostOptions, type HostClientContext, type HostWorkspaceItem, type HostWorkspaceSource, type ModelCatalogState, type ModelRoute, } from './infra/host-data.js';
|
|
9
|
+
export { connectHost, getWorkspaceFiles, modelCatalog, refreshModelCatalog, workspaceList, type ConnectHostOptions, type HostClientContext, type HostWorkspaceItem, type HostWorkspaceSource, type ModelCatalogState, type ModelRoute, } from './infra/host-data.js';
|
|
10
10
|
export { Modal, type ModalProps, type ModalSize } from './feedback/Modal.js';
|
|
11
11
|
export { SideSheet, type SideSheetProps, type SideSheetSide } from './feedback/SideSheet.js';
|
|
12
12
|
export { AlertModal, type AlertModalProps, type AlertSeverity, } from './feedback/AlertModal.js';
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,eAAe,EACf,eAAe,EACf,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACrG,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACxF,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEtF,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEjE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE3D,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,UAAU,EACV,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,SAAS,EACT,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrI,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1F,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpG,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AACrG,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EACL,SAAS,EACT,SAAS,EACT,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,MAAM,EACN,SAAS,EACT,WAAW,EACX,aAAa,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAA"}
|
package/dist/ui/index.js
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
// `ensureControls()` 退化为可选的 token 预热,不再需要调。
|
|
5
5
|
export { CONTROLS_DOMAIN, ensureControls, getStyleKit, setStyleKit } from './infra/css.js';
|
|
6
6
|
export { useLocale } from './infra/locale.js';
|
|
7
|
-
export { filterGroups, flattenOptions, groupOf, labelsOf, resolveMenuSizing, resolveTriggerSizing, sliceGroups, toFlatOptions, toGroups, toggleValue, } from './inputs/picker-logic.js';
|
|
7
|
+
export { filterGroups, flattenOptions, groupOf, labelsOf, resolveMenuSizing, resolveTriggerSizing, retainSelectedValue, sliceGroups, toFlatOptions, toGroups, toggleValue, } from './inputs/picker-logic.js';
|
|
8
8
|
export { Picker } from './inputs/Picker.js';
|
|
9
9
|
export { DateTimePicker, } from './inputs/DateTimePicker.js';
|
|
10
10
|
export { buildMonthCells, ceilToPrecision, clampUnit, dayCaption, floorToPrecision, formatDateTimeIso, monthCaption, msToParts, nowParts, nowTimeFor, parseDateTime, partsOf, partsToMs, rangeIsValid, resolvePresetExpr, sameLocalDay, stepMax, stepUnit, toEndDraft, weekdayLabels, } from './inputs/datetime-logic.js';
|
|
11
11
|
export { ModelPicker } from './inputs/ModelPicker.js';
|
|
12
12
|
export { WorkspacePicker } from './inputs/WorkspacePicker.js';
|
|
13
|
-
export { connectHost, getWorkspaceFiles, modelCatalog, workspaceList, } from './infra/host-data.js';
|
|
13
|
+
export { connectHost, getWorkspaceFiles, modelCatalog, refreshModelCatalog, workspaceList, } from './infra/host-data.js';
|
|
14
14
|
export { Modal } from './feedback/Modal.js';
|
|
15
15
|
export { SideSheet } from './feedback/SideSheet.js';
|
|
16
16
|
export { AlertModal, } from './feedback/AlertModal.js';
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,6 +108,14 @@ export interface ConnectHostOptions {
|
|
|
108
108
|
/** 模型目录路由(宿主侧 `serveModelCatalog` 注册的同一个 path);不传 = 不取模型目录。 */
|
|
109
109
|
modelsPath?: string;
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* 重拉模型目录(供应商 / 模型有增减、或上一次取失败要重试时调)。
|
|
113
|
+
*
|
|
114
|
+
* 宿主路由每次请求现查,这里显式 `cache: 'no-store'`,避免浏览器把上次的目录缓存回来。
|
|
115
|
+
* 不传 path 就用 `connectHost(ctx, { modelsPath })` 记下的那个;还没接线则 reject。
|
|
116
|
+
* 返回 Promise:await 之后 `modelCatalog.getSnapshot()` 即本次结果。
|
|
117
|
+
*/
|
|
118
|
+
export declare function refreshModelCatalog(path?: string): Promise<ModelCatalogState>;
|
|
111
119
|
/**
|
|
112
120
|
* 把宿主数据面接进核心(插件 client `apply` 里调**一次**)。
|
|
113
121
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-data.d.ts","sourceRoot":"","sources":["../../../src/ui/infra/host-data.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"host-data.d.ts","sourceRoot":"","sources":["../../../src/ui/infra/host-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,45 @@ let workspaceFiles;
|
|
|
77
77
|
export function getWorkspaceFiles() {
|
|
78
78
|
return workspaceFiles;
|
|
79
79
|
}
|
|
80
|
+
/** 最近一次接线的模型目录路径(`refreshModelCatalog()` 不带参时用它)。 */
|
|
81
|
+
let boundModelsPath;
|
|
82
|
+
/** 进行中的目录请求:并发刷新合并成一次,避免连点发一串相同请求。 */
|
|
83
|
+
let catalogInFlight;
|
|
84
|
+
function loadModelCatalog(path) {
|
|
85
|
+
if (catalogInFlight !== undefined)
|
|
86
|
+
return catalogInFlight;
|
|
87
|
+
const job = fetch(path, { cache: 'no-store' })
|
|
88
|
+
.then((response) => (response.ok ? response.json() : Promise.reject(new Error(`HTTP ${response.status}`))))
|
|
89
|
+
.then((data) => {
|
|
90
|
+
const routes = data?.routes;
|
|
91
|
+
if (!Array.isArray(routes))
|
|
92
|
+
throw new Error('模型目录响应缺少 routes');
|
|
93
|
+
modelCatalog.setRoutes(routes);
|
|
94
|
+
})
|
|
95
|
+
.catch((error) => {
|
|
96
|
+
modelCatalog.setUnavailable(String(error));
|
|
97
|
+
})
|
|
98
|
+
.finally(() => {
|
|
99
|
+
catalogInFlight = undefined;
|
|
100
|
+
});
|
|
101
|
+
catalogInFlight = job;
|
|
102
|
+
return job;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 重拉模型目录(供应商 / 模型有增减、或上一次取失败要重试时调)。
|
|
106
|
+
*
|
|
107
|
+
* 宿主路由每次请求现查,这里显式 `cache: 'no-store'`,避免浏览器把上次的目录缓存回来。
|
|
108
|
+
* 不传 path 就用 `connectHost(ctx, { modelsPath })` 记下的那个;还没接线则 reject。
|
|
109
|
+
* 返回 Promise:await 之后 `modelCatalog.getSnapshot()` 即本次结果。
|
|
110
|
+
*/
|
|
111
|
+
export async function refreshModelCatalog(path) {
|
|
112
|
+
const target = path ?? boundModelsPath;
|
|
113
|
+
if (target === undefined) {
|
|
114
|
+
throw new Error('模型目录未接线:先调 connectHost(ctx, { modelsPath })');
|
|
115
|
+
}
|
|
116
|
+
await loadModelCatalog(target);
|
|
117
|
+
return modelCatalog.getSnapshot();
|
|
118
|
+
}
|
|
80
119
|
function isWorkspaceSource(value) {
|
|
81
120
|
if (value === null || typeof value !== 'object')
|
|
82
121
|
return false;
|
|
@@ -107,16 +146,7 @@ export function connectHost(ctx, options = {}) {
|
|
|
107
146
|
const modelsPath = options.modelsPath;
|
|
108
147
|
if (modelsPath === undefined)
|
|
109
148
|
return;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
.then((data) => {
|
|
113
|
-
const routes = data?.routes;
|
|
114
|
-
if (!Array.isArray(routes))
|
|
115
|
-
throw new Error('模型目录响应缺少 routes');
|
|
116
|
-
modelCatalog.setRoutes(routes);
|
|
117
|
-
})
|
|
118
|
-
.catch((error) => {
|
|
119
|
-
modelCatalog.setUnavailable(String(error));
|
|
120
|
-
});
|
|
149
|
+
boundModelsPath = modelsPath;
|
|
150
|
+
void loadModelCatalog(modelsPath);
|
|
121
151
|
}
|
|
122
152
|
//# sourceMappingURL=host-data.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-data.js","sourceRoot":"","sources":["../../../src/ui/infra/host-data.ts"],"names":[],"mappings":"AAqCA,yDAAyD;AACzD,MAAM,iBAAiB;IAAvB;QACU,aAAQ,GAAsB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QAC1C,cAAS,GAAG,IAAI,GAAG,EAAc,CAAA;QAEzC,gBAAW,GAAG,GAAsB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAA;QAEpD,cAAS,GAAG,CAAC,QAAoB,EAAgB,EAAE;YAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC5B,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,CAAC,CAAA;QACH,CAAC,CAAA;IAcH,CAAC;IAZS,MAAM,CAAC,IAAuB;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,QAAQ,EAAE,CAAA;IACnD,CAAC;IAED,SAAS,CAAC,MAA6B;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;CACF;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAA;AAkCnD,qDAAqD;AACrD,MAAM,oBAAoB,GAAsB,EAAE,CAAA;AAElD;;;;GAIG;AACH,MAAM,kBAAkB;IAAxB;QACU,UAAK,GAAiC,EAAE,CAAA;QACxC,uBAAkB,GAAsB,oBAAoB,CAAA;QACnD,cAAS,GAAG,IAAI,GAAG,EAAc,CAAA;QAgBzC,gBAAW,GAAG,GAAiC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAA;QAErE,6DAA6D;QACpD,uBAAkB,GAAG,GAAsB,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAA;QAErE,sBAAiB,GAAG,CAAC,SAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAE/F,cAAS,GAAG,CAAC,QAAoB,EAAgB,EAAE;YAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC5B,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,CAAC,CAAA;QACH,CAAC,CAAA;IACH,CAAC;IA1BC,oCAAoC;IACpC,SAAS,CAAC,MAA2B;QACnC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAA;QACpB,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;YACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YACvB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,oBAAoB,CAAA;YACzE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;gBAAE,QAAQ,EAAE,CAAA;QACnD,CAAC,CAAA;QACD,IAAI,EAAE,CAAA;QACN,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;CAeF;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAA;AAErD,oEAAoE;AAEpE;;;;;;GAMG;AACH,IAAI,cAA8C,CAAA;AAElD,qDAAqD;AACrD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAA;AACvB,CAAC;AAcD,
|
|
1
|
+
{"version":3,"file":"host-data.js","sourceRoot":"","sources":["../../../src/ui/infra/host-data.ts"],"names":[],"mappings":"AAqCA,yDAAyD;AACzD,MAAM,iBAAiB;IAAvB;QACU,aAAQ,GAAsB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QAC1C,cAAS,GAAG,IAAI,GAAG,EAAc,CAAA;QAEzC,gBAAW,GAAG,GAAsB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAA;QAEpD,cAAS,GAAG,CAAC,QAAoB,EAAgB,EAAE;YAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC5B,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,CAAC,CAAA;QACH,CAAC,CAAA;IAcH,CAAC;IAZS,MAAM,CAAC,IAAuB;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,QAAQ,EAAE,CAAA;IACnD,CAAC;IAED,SAAS,CAAC,MAA6B;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;CACF;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAA;AAkCnD,qDAAqD;AACrD,MAAM,oBAAoB,GAAsB,EAAE,CAAA;AAElD;;;;GAIG;AACH,MAAM,kBAAkB;IAAxB;QACU,UAAK,GAAiC,EAAE,CAAA;QACxC,uBAAkB,GAAsB,oBAAoB,CAAA;QACnD,cAAS,GAAG,IAAI,GAAG,EAAc,CAAA;QAgBzC,gBAAW,GAAG,GAAiC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAA;QAErE,6DAA6D;QACpD,uBAAkB,GAAG,GAAsB,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAA;QAErE,sBAAiB,GAAG,CAAC,SAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAE/F,cAAS,GAAG,CAAC,QAAoB,EAAgB,EAAE;YAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC5B,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,CAAC,CAAA;QACH,CAAC,CAAA;IACH,CAAC;IA1BC,oCAAoC;IACpC,SAAS,CAAC,MAA2B;QACnC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAA;QACpB,MAAM,IAAI,GAAG,GAAS,EAAE;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;YACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YACvB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,oBAAoB,CAAA;YACzE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;gBAAE,QAAQ,EAAE,CAAA;QACnD,CAAC,CAAA;QACD,IAAI,EAAE,CAAA;QACN,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;CAeF;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAA;AAErD,oEAAoE;AAEpE;;;;;;GAMG;AACH,IAAI,cAA8C,CAAA;AAElD,qDAAqD;AACrD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAA;AACvB,CAAC;AAcD,qDAAqD;AACrD,IAAI,eAAmC,CAAA;AACvC,sCAAsC;AACtC,IAAI,eAA0C,CAAA;AAE9C,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,eAAe,KAAK,SAAS;QAAE,OAAO,eAAe,CAAA;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SAC3C,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;SAC1G,IAAI,CAAC,CAAC,IAAa,EAAE,EAAE;QACtB,MAAM,MAAM,GAAI,IAAoC,EAAE,MAAM,CAAA;QAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAC9D,YAAY,CAAC,SAAS,CAAC,MAAsB,CAAC,CAAA;IAChD,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxB,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE;QACZ,eAAe,GAAG,SAAS,CAAA;IAC7B,CAAC,CAAC,CAAA;IACJ,eAAe,GAAG,GAAG,CAAA;IACrB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAa;IACrD,MAAM,MAAM,GAAG,IAAI,IAAI,eAAe,CAAA;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;IACD,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC9B,OAAO,YAAY,CAAC,WAAW,EAAE,CAAA;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,OAAO,OAAO,GAAG,CAAC,WAAW,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,UAAU,CAAA;AACrF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAsB,EAAE,UAA8B,EAAE;IAClF,GAAG,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACjC,MAAM,MAAM,GAAI,GAAkD,EAAE,UAAU,EAAE,IAAI,CAAA;QACpF,IAAI,iBAAiB,CAAC,MAAM,CAAC;YAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IACF,6CAA6C;IAC7C,wDAAwD;IACxD,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACtD,MAAM,GAAG,GAAG,GAA0F,CAAA;QACtG,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,uBAAuB,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,cAAc,CAAA;QAC/E,IAAI,OAAQ,SAA4C,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9E,cAAc,GAAG,SAA+B,CAAA;QAClD,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IACrC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAM;IACpC,eAAe,GAAG,UAAU,CAAA;IAC5B,KAAK,gBAAgB,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -43,7 +43,14 @@ export interface ModelPickerProps extends PickerSizing {
|
|
|
43
43
|
searchable?: boolean;
|
|
44
44
|
size?: PickerSize;
|
|
45
45
|
placement?: 'down' | 'up';
|
|
46
|
+
/** 组件根元素的类名:grouped / flat 落在 Picker 根,cascade 落在两框外层 row。 */
|
|
46
47
|
className?: string;
|
|
48
|
+
/** cascade 外层 row 的附加类名(与 className 叠加,单独定制布局用)。 */
|
|
49
|
+
rowClassName?: string;
|
|
50
|
+
/** cascade 厂商框的类名。 */
|
|
51
|
+
providerClassName?: string;
|
|
52
|
+
/** cascade 模型框的类名。 */
|
|
53
|
+
modelClassName?: string;
|
|
47
54
|
/** 下拉内搜索框的宽度三轴(所有形态共用);不传沿用 CSS 的 100% 铺满。 */
|
|
48
55
|
searchSizing?: PickerSizing;
|
|
49
56
|
/** cascade:厂商框单独宽度;不传跟随 width / minWidth / maxWidth。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../../src/ui/inputs/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACrG,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../../src/ui/inputs/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACrG,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAA+D,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMpI;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAE/D,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,gCAAgC;IAChC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,sCAAsC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kDAAkD;IAClD,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sBAAsB;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,wDAAwD;IACxD,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,wDAAwD;IACxD,WAAW,CAAC,EAAE,YAAY,CAAA;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAsJzE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createElement as h, useEffect, useState, useSyncExternalStore } from 'react';
|
|
2
2
|
import { t } from '../../utils/i18n.js';
|
|
3
3
|
import { Picker } from './Picker.js';
|
|
4
|
-
import { flattenOptions, groupOf, toFlatOptions } from './picker-logic.js';
|
|
4
|
+
import { flattenOptions, groupOf, retainSelectedValue, toFlatOptions } from './picker-logic.js';
|
|
5
5
|
import { modelCatalog } from '../infra/host-data.js';
|
|
6
6
|
import { sparkleIcon } from './picker-icons.js';
|
|
7
7
|
import { ensureComponentStyles } from '../infra/css.js';
|
|
@@ -17,7 +17,7 @@ export function ModelPicker(props) {
|
|
|
17
17
|
: { value: '', label: props.defaultLabel ?? tt('modelDefault') };
|
|
18
18
|
// 目录状态:外部没喂目录(Node 自检 / 宿主缺服务)⇒ 空 + 如实降级,不编数据。
|
|
19
19
|
const catalog = useSyncExternalStore(modelCatalog.subscribe, modelCatalog.getSnapshot, modelCatalog.getSnapshot);
|
|
20
|
-
const
|
|
20
|
+
const catalogGroups = props.groups ??
|
|
21
21
|
(catalog.status === 'ready'
|
|
22
22
|
? catalog.routes.map((route) => ({
|
|
23
23
|
value: route.provider,
|
|
@@ -28,8 +28,14 @@ export function ModelPicker(props) {
|
|
|
28
28
|
})),
|
|
29
29
|
}))
|
|
30
30
|
: []);
|
|
31
|
-
//
|
|
32
|
-
|
|
31
|
+
// 旧值可能已不在目录里(供应商被摘掉 / 目录刷新):按真实值补一条保留项,
|
|
32
|
+
// 让触发器与菜单都显示它、级联态也能反推出 provider,绝不静默丢掉用户的选择。
|
|
33
|
+
const retained = retainSelectedValue(catalogGroups, props.value);
|
|
34
|
+
const groups = retained.groups;
|
|
35
|
+
// 目录不可用、空目录、或旧值已失效 ⇒ 如实提示「候选可能不完整」,别让空列表看起来像坏了。
|
|
36
|
+
const degraded = props.degraded ?? (catalog.status === 'unavailable'
|
|
37
|
+
|| (catalog.status === 'ready' && catalogGroups.length === 0)
|
|
38
|
+
|| retained.retained);
|
|
33
39
|
const icon = props.icon === undefined ? sparkleIcon() : props.icon ?? undefined;
|
|
34
40
|
const emitModel = (v) => {
|
|
35
41
|
props.onChange?.(typeof v === 'string' ? v : v[0] ?? '');
|
|
@@ -96,7 +102,12 @@ export function ModelPicker(props) {
|
|
|
96
102
|
// cascade:两个下拉联动 —— 供应商筛模型;换供应商清空模型
|
|
97
103
|
const group = groups.find((g) => g.value === provider);
|
|
98
104
|
const options = group === undefined ? [] : flattenOptions([group]);
|
|
99
|
-
|
|
105
|
+
// 根元素统一吃 className(其它形态根就是 Picker),row 另留一条独立定制轴;
|
|
106
|
+
// 两个框各自的类名也交出去,消费方才能分别控制布局。
|
|
107
|
+
const rowClass = ['dshpc-picker__row', props.className, props.rowClassName]
|
|
108
|
+
.filter((part) => part !== undefined && part !== '')
|
|
109
|
+
.join(' ');
|
|
110
|
+
return h('div', { className: rowClass }, h(Picker, {
|
|
100
111
|
options: groups.map((g) => ({ value: g.value, label: g.label })),
|
|
101
112
|
value: provider === '' ? undefined : provider,
|
|
102
113
|
placeholder: tt('modelProvider'),
|
|
@@ -106,6 +117,8 @@ export function ModelPicker(props) {
|
|
|
106
117
|
searchSizing: props.searchSizing,
|
|
107
118
|
searchable,
|
|
108
119
|
size: props.size,
|
|
120
|
+
placement: props.placement,
|
|
121
|
+
className: props.providerClassName,
|
|
109
122
|
translate: props.translate,
|
|
110
123
|
onChange: (v) => {
|
|
111
124
|
setPickedProvider(typeof v === 'string' ? v : v[0] ?? '');
|
|
@@ -126,7 +139,7 @@ export function ModelPicker(props) {
|
|
|
126
139
|
hint: props.hint,
|
|
127
140
|
size: props.size,
|
|
128
141
|
placement: props.placement,
|
|
129
|
-
className: props.
|
|
142
|
+
className: props.modelClassName,
|
|
130
143
|
translate: props.translate,
|
|
131
144
|
onChange: emitModel,
|
|
132
145
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../../src/ui/inputs/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAkB,MAAM,OAAO,CAAA;AACrG,OAAO,EAAE,CAAC,EAAkB,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAmB,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAuC,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../../src/ui/inputs/ModelPicker.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,20 @@ export declare function toggleValue(current: readonly string[], value: string, m
|
|
|
34
34
|
export declare function labelsOf(groups: PickerGroup[], values: readonly string[]): string[];
|
|
35
35
|
/** 值落在哪个组里(按模型值反推供应商等场景)。 */
|
|
36
36
|
export declare function groupOf(groups: PickerGroup[], value: string): PickerGroup | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* 把「不在候选里的受控值」作为一条真实保留项插回目录(领域选择器用)。
|
|
39
|
+
*
|
|
40
|
+
* 目录刷新 / 供应商被摘掉后,调用方持有的旧值仍然真实存在;通用 `labelsOf` 找不到它就
|
|
41
|
+
* 会让触发器退回 placeholder,级联态还会因反推不出 provider 把模型框禁用 —— 表现为
|
|
42
|
+
* 静默丢掉用户的选择。这里按 `provider/id` 的前缀把旧值归到对应组(没有该组就补一组),
|
|
43
|
+
* label 一律用旧值原文,绝不编造模型名。返回值 `retained` 供 degraded 提示使用。
|
|
44
|
+
*
|
|
45
|
+
* 通用 `Picker` 不调用它:纯零件的数据由调用方给,是否保留旧值由调用方决定。
|
|
46
|
+
*/
|
|
47
|
+
export declare function retainSelectedValue(groups: PickerGroup[], value: string | undefined): {
|
|
48
|
+
groups: PickerGroup[];
|
|
49
|
+
retained: boolean;
|
|
50
|
+
};
|
|
37
51
|
/** 触发器宽度解析:把 width / minWidth / maxWidth 译成内联样式。
|
|
38
52
|
* 定宽(width)忽略 min/max 并锁定三值;否则各自生效,缺省沿用 CSS 默认(min 120px、max 100%)。
|
|
39
53
|
* 数值按 px 处理,字符串原样透传。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-logic.d.ts","sourceRoot":"","sources":["../../../src/ui/inputs/picker-logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC3B;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,CACtB,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EACjC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,GAClC,WAAW,EAAE,CAIf;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAIpE;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAOnE;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAShF;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAU/E;AAED,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAK7F;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQnF;AAED,6BAA6B;AAC7B,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrF;AAED;;wBAEwB;AACxB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAUtE;AAED;;;mEAGmE;AACnE,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,YAAY,CAAC,EAAE,YAAY,GAC1B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CASxC"}
|
|
1
|
+
{"version":3,"file":"picker-logic.d.ts","sourceRoot":"","sources":["../../../src/ui/inputs/picker-logic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC3B;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,CACtB,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EACjC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,GAClC,WAAW,EAAE,CAIf;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAIpE;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAOnE;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAShF;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAU/E;AAED,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAK7F;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQnF;AAED,6BAA6B;AAC7B,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EAAE,EACrB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAiB9C;AAED;;wBAEwB;AACxB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAUtE;AAED;;;mEAGmE;AACnE,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,YAAY,CAAC,EAAE,YAAY,GAC1B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CASxC"}
|
|
@@ -70,6 +70,36 @@ export function groupOf(groups, value) {
|
|
|
70
70
|
return undefined;
|
|
71
71
|
return groups.find((g) => g.options.some((o) => o.value === value));
|
|
72
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* 把「不在候选里的受控值」作为一条真实保留项插回目录(领域选择器用)。
|
|
75
|
+
*
|
|
76
|
+
* 目录刷新 / 供应商被摘掉后,调用方持有的旧值仍然真实存在;通用 `labelsOf` 找不到它就
|
|
77
|
+
* 会让触发器退回 placeholder,级联态还会因反推不出 provider 把模型框禁用 —— 表现为
|
|
78
|
+
* 静默丢掉用户的选择。这里按 `provider/id` 的前缀把旧值归到对应组(没有该组就补一组),
|
|
79
|
+
* label 一律用旧值原文,绝不编造模型名。返回值 `retained` 供 degraded 提示使用。
|
|
80
|
+
*
|
|
81
|
+
* 通用 `Picker` 不调用它:纯零件的数据由调用方给,是否保留旧值由调用方决定。
|
|
82
|
+
*/
|
|
83
|
+
export function retainSelectedValue(groups, value) {
|
|
84
|
+
if (value === undefined || value === '')
|
|
85
|
+
return { groups, retained: false };
|
|
86
|
+
if (flattenOptions(groups).some((o) => o.value === value))
|
|
87
|
+
return { groups, retained: false };
|
|
88
|
+
const slash = value.indexOf('/');
|
|
89
|
+
const provider = slash > 0 ? value.slice(0, slash) : '';
|
|
90
|
+
const option = { value, label: value };
|
|
91
|
+
const group = groups.find((g) => g.value === provider && g.value !== '');
|
|
92
|
+
if (group !== undefined) {
|
|
93
|
+
return {
|
|
94
|
+
groups: groups.map((g) => (g === group ? { value: g.value, label: g.label, options: [option, ...g.options] } : g)),
|
|
95
|
+
retained: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
groups: [...groups, { value: provider, label: provider, options: [option] }],
|
|
100
|
+
retained: true,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
73
103
|
/** 触发器宽度解析:把 width / minWidth / maxWidth 译成内联样式。
|
|
74
104
|
* 定宽(width)忽略 min/max 并锁定三值;否则各自生效,缺省沿用 CSS 默认(min 120px、max 100%)。
|
|
75
105
|
* 数值按 px 处理,字符串原样透传。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picker-logic.js","sourceRoot":"","sources":["../../../src/ui/inputs/picker-logic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"picker-logic.js","sourceRoot":"","sources":["../../../src/ui/inputs/picker-logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
2
|
import { type Translate } from '../../utils/i18n.js';
|
|
3
|
+
import { type PickerSize } from '../inputs/Picker.js';
|
|
3
4
|
import { type PageTotalRenderer, type PaginationAlign } from './pagination-logic.js';
|
|
4
5
|
/**
|
|
5
6
|
* 分页控件 props。
|
|
@@ -24,6 +25,8 @@ export interface PaginationProps {
|
|
|
24
25
|
boundaryCount?: number;
|
|
25
26
|
/** 传了才出现「每页条数」下拉(如 `[10, 20, 50]`)。 */
|
|
26
27
|
pageSizeOptions?: readonly number[];
|
|
28
|
+
/** 「每页条数」下拉的尺寸档位(`sm` / `md` / `lg`,默认 `md`);页码按钮固定 `md`。 */
|
|
29
|
+
size?: PickerSize;
|
|
27
30
|
/** 总数文案:`true` 走内置字典,也可给函数自定义(收到总条数、起始行、结束行)。 */
|
|
28
31
|
showTotal?: boolean | PageTotalRenderer;
|
|
29
32
|
/** 只有一页时整条不渲染。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/ui/navigation/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/ui/navigation/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAGvD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAI7D,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAA;AAE9B;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,kBAAkB;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,sBAAsB;IACtB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,sBAAsB;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAA;IACvC,kBAAkB;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CA2H5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../src/ui/navigation/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAsC,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,CAAC,EAAkB,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Pagination.js","sourceRoot":"","sources":["../../../src/ui/navigation/Pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAsC,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,CAAC,EAAkB,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAmB,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,GAGV,MAAM,uBAAuB,CAAA;AAsD9B;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,qBAAqB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IACnD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAEzC,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAE9D,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAA;IAClD,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;IAEnD,MAAM,EAAE,GAAG,CAAC,IAAY,EAAQ,EAAE;QAChC,IAAI,QAAQ;YAAE,OAAM;QACpB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACrC,IAAI,MAAM,KAAK,IAAI;YAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACvD,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG;QACf,kBAAkB;QAClB,qBAAqB,KAAK,CAAC,KAAK,IAAI,OAAO,EAAE;QAC7C,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE;QACvD,KAAK,CAAC,SAAS,IAAI,EAAE;KACtB;SACE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAA;IAEZ,MAAM,SAAS,GAAG,CAAC,GAAc,EAAE;QACjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QACjC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK;YAAE,OAAO,IAAI,CAAA;QAC/D,IAAI,OAAO,SAAS,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QACtE,OAAO,KAAK,KAAK,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC;YAC3B,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC,CAAC,EAAE,CAAA;IAEJ,0DAA0D;IAC1D,0CAA0C;IAC1C,MAAM,UAAU,GAAG,CAAC,CAAS,EAAwB,EAAE,CACrD,CAAC,CACC,MAAM,EACN;QACE,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACtC,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC/C,YAAY,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,QAAQ;QACR,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACrB,EACD,CAAC,CACF,CAAA;IAEH,MAAM,SAAS,GAAG,CAAC,SAA0B,EAAwB,EAAE;QACrE,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAA;QAClE,OAAO,CAAC,CACN,MAAM,EACN;YACE,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,uBAAuB;YAClC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAChE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACtE,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC;YAC1D,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;SAChD,EACD,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,wBAAwB,EAAE,EAAE,KAAK,CAAC,CAC1D,CAAA;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,IAAI;QACnB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAClF,IAAI,KAAK,KAAK;YACZ,CAAC,CAAC,CAAC,CACC,MAAM,EACN,EAAE,GAAG,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,EAAE,EAC/F,GAAG,CACJ;YACH,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CACrB,CAAA;IAEP,6DAA6D;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAA;IAC3C,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;YACR,SAAS,EAAE,wBAAwB;YACnC,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,EAAE,CAAC,0BAA0B,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;aACnD,CAAC,CAAC;YACH,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;YACvB,QAAQ;YACR,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC;YACvC,QAAQ,EAAE,CAAC,KAAwB,EAAE,EAAE;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;oBAAE,OAAM;gBAC9C,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;YACzB,CAAC;SACF,CAAC,CAAA;IAER,OAAO,CAAC,CACN,KAAK,EACL;QACE,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,gBAAgB,CAAC;KACtD,EACD,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,yBAAyB,EAAE,EAAE,SAAS,CAAC,EAC1F,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,yBAAyB,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EACnG,QAAQ,CACT,CAAA;AACH,CAAC"}
|
|
@@ -195,6 +195,22 @@
|
|
|
195
195
|
- 来源:`dsh-task-dispatch-table/src/host.ts:214-232`(`HostLlm` 面)、`src/dispatch.ts:81-88`(listModels 用法)、
|
|
196
196
|
`dsh-task-ledger/packages/plugin/src/host/routes.ts:20-44`(webServer.register + sendJson)。
|
|
197
197
|
|
|
198
|
+
### 11.1.1 路由请求策略与惰性取服务(2026-11-10 解包核实)
|
|
199
|
+
|
|
200
|
+
- 事实(`@deepseek-ai/dsh-host-webserver@0.2.0-rc.2`):`WebRoute.handler` 类型是
|
|
201
|
+
`(req: IncomingMessage, res: ServerResponse) => void | Promise<void>`(`lib/types/index.d.ts:33-38`),
|
|
202
|
+
即路由拿到的是**原始 Node 请求**(含 `headers` / `method` / `socket`),不是只有 `url` 的瘦对象。
|
|
203
|
+
- 事实(同包 `README.md:113`):*"No server-wide TLS, authentication, or origin policy — route owners …
|
|
204
|
+
enforce their own request policy."* ⇒ 宿主不把关,信任闸门由**路由方**自持;核心库不能假装自己有
|
|
205
|
+
鉴权,也不能把 `req` 裁到消费方接不上自家守卫。
|
|
206
|
+
- 事实(`@deepseek-ai/cordis`):`ctx.get(name, strict = true)` 的注释是 *"Read a service from the
|
|
207
|
+
store without the inject requirement … undefined when not (yet) provided"*(`lib/index.js:763-770`、
|
|
208
|
+
`lib/types/reflect.d.ts:10-16`);`ctx.inject(inject, callback)` 是 `plugin({ inject, apply: callback })`
|
|
209
|
+
(`lib/index.js:1600`)—— 依赖未齐时回调不执行。⇒ 晚到 / 缺席的服务用 `get` 惰性取,
|
|
210
|
+
绝不写进 `inject` 依赖。
|
|
211
|
+
- 落地:本包 `serveModelCatalog` 只声明 `['webServer']`,每次请求 `ctx.get('llm')` 现取,并开放可选
|
|
212
|
+
`authorize(req)` 让消费方接自己的守卫(不传则沿用宿主既有边界)。
|
|
213
|
+
|
|
198
214
|
### 11.2 归档变更的官方推送链与打开判据(2026-11-04 解包核实)
|
|
199
215
|
|
|
200
216
|
版本:`@deepseek-ai/dsh-workspace@0.2.1-rc.5`、`@deepseek-ai/dsh-api-workspace-controller@0.2.1-rc.5`、`@deepseek-ai/dsh-client-ui-workspace@0.2.1-rc.5`(§13 记录的宿主当前线;§11 事实 3 的 0.2.0-rc.2 结论在此版本仍成立)。
|
|
@@ -14,13 +14,27 @@ const useControl = `import { Button, Input, Picker, showToast } from 'dsh-plugin
|
|
|
14
14
|
h(Input, { value: name, onChange: setName, placeholder: '任务名', error: nameError })
|
|
15
15
|
h(Button, { variant: 'primary', onClick: save }, '保存')
|
|
16
16
|
h(Picker, {
|
|
17
|
-
options:
|
|
17
|
+
options: priorities, // [{ value, label }]:通用 Picker 的选项由调用方给
|
|
18
18
|
value: current,
|
|
19
19
|
onChange: (v) => setCurrent(v as string),
|
|
20
20
|
searchable: true,
|
|
21
21
|
clearable: true,
|
|
22
22
|
})
|
|
23
23
|
showToast('已保存', { variant: 'success' })`
|
|
24
|
+
const useModelCatalog = `// paths.ts —— 宿主与 client 共用同一个常量
|
|
25
|
+
export const MODELS_PATH = '/api/dsh-task-reminder/models'
|
|
26
|
+
|
|
27
|
+
// 宿主 apply:注册只读模型目录路由
|
|
28
|
+
import { serveModelCatalog } from 'dsh-plugin-core/host'
|
|
29
|
+
serveModelCatalog(ctx, { path: MODELS_PATH })
|
|
30
|
+
|
|
31
|
+
// client apply:接同一个 path
|
|
32
|
+
import { connectHost, refreshModelCatalog, ModelPicker } from 'dsh-plugin-core/ui'
|
|
33
|
+
connectHost(ctx, { modelsPath: MODELS_PATH })
|
|
34
|
+
|
|
35
|
+
// 三种形态共用同一份目录,onChange 一律发 provider/id
|
|
36
|
+
h(ModelPicker, { variant: 'cascade', value: current, onChange: setCurrent })
|
|
37
|
+
await refreshModelCatalog() // 供应商 / 模型有增减时重拉(Promise)`
|
|
24
38
|
const useUtils = `import { formatDateTime, relativeFuture, formatBytes } from 'dsh-plugin-core/utils'
|
|
25
39
|
|
|
26
40
|
formatDateTime(task.runAt, { seconds: true }) // 2026-10-18 09:30:05
|
|
@@ -73,7 +87,11 @@ const doc: DocTopic = {
|
|
|
73
87
|
zh: '§1 初始化样式(入口一次):`id` 必须插件内唯一,多插件同页靠它互不覆盖;变量与类名固定 `dshpc` 前缀,不需传参。',
|
|
74
88
|
en: '§1 Initialize styles (once at entry): `id` must be unique within the plugin so co-mounted plugins don’t clobber; vars and classes use the fixed `dshpc` prefix, no parameter.',
|
|
75
89
|
},
|
|
76
|
-
{ zh: '§2
|
|
90
|
+
{ zh: '§2 用一个控件:通用 `Picker` 的选项由调用方给(示例里是 `priorities`,不是模型目录)。', en: '§2 Use a control: a generic `Picker` takes its options from the caller (`priorities` in the example, not a model catalog).' },
|
|
91
|
+
{
|
|
92
|
+
zh: '§2 附:选模型不要手搓数组 —— 宿主 `serveModelCatalog(ctx, { path })` 注册只读目录路由,client `connectHost(ctx, { modelsPath: path })` 用同一个 path 常量接上,再渲染 `ModelPicker`;供应商 / 模型有增减调 `await refreshModelCatalog()` 重拉。漏了 `modelsPath` 就是空目录,且不会有报错。',
|
|
93
|
+
en: '§2a Model selection: never hand-roll a models array. Register `serveModelCatalog(ctx, { path })` on the host, call `connectHost(ctx, { modelsPath: path })` on the client with the same path constant, then render `ModelPicker`. `await refreshModelCatalog()` re-pulls the catalog when providers change. Omitting `modelsPath` leaves the catalog empty, silently.',
|
|
94
|
+
},
|
|
77
95
|
{ zh: '§3 用通用方法', en: '§3 Use helpers' },
|
|
78
96
|
{
|
|
79
97
|
zh: '§4 接文件浏览:`mount` 必填(预览面板是布局成员,占宽挤窄主区),传页面那层 flex 行——元素或选择器都行,解析不到就放弃、不回落 body;数据面要在宿主 `serveFsRoute` + client `connectFs` 用同一个 path 常量接上,浏览本身不需要会话。',
|
|
@@ -89,6 +107,7 @@ const doc: DocTopic = {
|
|
|
89
107
|
{ id: 'integration-install', lang: 'bash', src: install },
|
|
90
108
|
{ id: 'integration-init-style', lang: 'ts', src: initStyle },
|
|
91
109
|
{ id: 'integration-use-control', lang: 'tsx', src: useControl },
|
|
110
|
+
{ id: 'integration-use-model-catalog', lang: 'tsx', src: useModelCatalog },
|
|
92
111
|
{ id: 'integration-use-utils', lang: 'ts', src: useUtils },
|
|
93
112
|
{ id: 'integration-use-explorer', lang: 'tsx', src: useExplorer },
|
|
94
113
|
{ id: 'integration-use-session', lang: 'tsx', src: useSession },
|
|
@@ -109,7 +128,8 @@ const doc: DocTopic = {
|
|
|
109
128
|
{ name: '指望本包帮你引官方 @deepseek-ai/*', type: '现象:Node 下 ERR_MODULE_NOT_FOUND', def: '—', desc: { zh: '本包 ui 零官方依赖;要用官方件请自行处理平台模块', en: 'Our ui has zero official deps; handle platform modules yourself' } },
|
|
110
129
|
{ name: '给 read 少传第三参 range', type: "现象:远端拒:expected 3 business argument(s) … got 2", def: '—', desc: { zh: '一律显式传 {}', en: 'Always pass {} explicitly' } },
|
|
111
130
|
{ name: '用 relativePast 显示未来时间', type: '现象:「3 分钟后」显示成「刚刚」', def: '—', desc: { zh: '用 relativeFuture', en: 'Use relativeFuture' } },
|
|
112
|
-
{ name: '
|
|
131
|
+
{ name: '给通用 Picker 手搓 models 数组', type: '现象:候选写死 / 空目录', def: '—', desc: { zh: '选模型走 ModelPicker + 宿主 serveModelCatalog / client connectHost(ctx, { modelsPath }) 两段式接线', en: 'Use ModelPicker with the two-sided serveModelCatalog / connectHost(ctx, { modelsPath }) wiring' } },
|
|
132
|
+
{ name: 'connectHost(ctx) 不带 modelsPath', type: '现象:模型目录永远停在 loading,不报错', def: '—', desc: { zh: '模型目录不是快照,必须传宿主注册的同一个 path', en: 'The model catalog is an HTTP route, not a snapshot: pass the same path registered on the host' } },
|
|
113
133
|
{ name: '暗色不跟随宿主', type: '现象:插件固守一种明暗', def: '—', desc: { zh: '判据是 body[data-ds-dark-theme],别用 prefers-color-scheme', en: 'Predicate is body[data-ds-dark-theme], not prefers-color-scheme' } },
|
|
114
134
|
],
|
|
115
135
|
},
|
package/docs/help/integration.md
CHANGED
|
@@ -20,9 +20,13 @@
|
|
|
20
20
|
|
|
21
21
|
> EN: §1 Initialize styles (once at entry): `id` must be unique within the plugin so co-mounted plugins don’t clobber; vars and classes use the fixed `dshpc` prefix, no parameter.
|
|
22
22
|
|
|
23
|
-
§2
|
|
23
|
+
§2 用一个控件:通用 `Picker` 的选项由调用方给(示例里是 `priorities`,不是模型目录)。
|
|
24
24
|
|
|
25
|
-
> EN: §2 Use a control
|
|
25
|
+
> EN: §2 Use a control: a generic `Picker` takes its options from the caller (`priorities` in the example, not a model catalog).
|
|
26
|
+
|
|
27
|
+
§2 附:选模型不要手搓数组 —— 宿主 `serveModelCatalog(ctx, { path })` 注册只读目录路由,client `connectHost(ctx, { modelsPath: path })` 用同一个 path 常量接上,再渲染 `ModelPicker`;供应商 / 模型有增减调 `await refreshModelCatalog()` 重拉。漏了 `modelsPath` 就是空目录,且不会有报错。
|
|
28
|
+
|
|
29
|
+
> EN: §2a Model selection: never hand-roll a models array. Register `serveModelCatalog(ctx, { path })` on the host, call `connectHost(ctx, { modelsPath: path })` on the client with the same path constant, then render `ModelPicker`. `await refreshModelCatalog()` re-pulls the catalog when providers change. Omitting `modelsPath` leaves the catalog empty, silently.
|
|
26
30
|
|
|
27
31
|
§3 用通用方法
|
|
28
32
|
|
|
@@ -60,7 +64,7 @@ import { Button, Input, Picker, showToast } from 'dsh-plugin-core/ui'
|
|
|
60
64
|
h(Input, { value: name, onChange: setName, placeholder: '任务名', error: nameError })
|
|
61
65
|
h(Button, { variant: 'primary', onClick: save }, '保存')
|
|
62
66
|
h(Picker, {
|
|
63
|
-
options:
|
|
67
|
+
options: priorities, // [{ value, label }]:通用 Picker 的选项由调用方给
|
|
64
68
|
value: current,
|
|
65
69
|
onChange: (v) => setCurrent(v as string),
|
|
66
70
|
searchable: true,
|
|
@@ -69,6 +73,23 @@ h(Picker, {
|
|
|
69
73
|
showToast('已保存', { variant: 'success' })
|
|
70
74
|
```
|
|
71
75
|
|
|
76
|
+
```tsx id="integration-use-model-catalog"
|
|
77
|
+
// paths.ts —— 宿主与 client 共用同一个常量
|
|
78
|
+
export const MODELS_PATH = '/api/dsh-task-reminder/models'
|
|
79
|
+
|
|
80
|
+
// 宿主 apply:注册只读模型目录路由
|
|
81
|
+
import { serveModelCatalog } from 'dsh-plugin-core/host'
|
|
82
|
+
serveModelCatalog(ctx, { path: MODELS_PATH })
|
|
83
|
+
|
|
84
|
+
// client apply:接同一个 path
|
|
85
|
+
import { connectHost, refreshModelCatalog, ModelPicker } from 'dsh-plugin-core/ui'
|
|
86
|
+
connectHost(ctx, { modelsPath: MODELS_PATH })
|
|
87
|
+
|
|
88
|
+
// 三种形态共用同一份目录,onChange 一律发 provider/id
|
|
89
|
+
h(ModelPicker, { variant: 'cascade', value: current, onChange: setCurrent })
|
|
90
|
+
await refreshModelCatalog() // 供应商 / 模型有增减时重拉(Promise)
|
|
91
|
+
```
|
|
92
|
+
|
|
72
93
|
```ts id="integration-use-utils"
|
|
73
94
|
import { formatDateTime, relativeFuture, formatBytes } from 'dsh-plugin-core/utils'
|
|
74
95
|
|
|
@@ -130,5 +151,6 @@ kit.dispose() // 撤掉 <style> 标签并清空登记域(插件卸载 / HMR
|
|
|
130
151
|
| `指望本包帮你引官方 @deepseek-ai/*` | `现象:Node 下 ERR_MODULE_NOT_FOUND` | — | 本包 ui 零官方依赖;要用官方件请自行处理平台模块 | Our ui has zero official deps; handle platform modules yourself |
|
|
131
152
|
| `给 read 少传第三参 range` | `现象:远端拒:expected 3 business argument(s) … got 2` | — | 一律显式传 {} | Always pass {} explicitly |
|
|
132
153
|
| `用 relativePast 显示未来时间` | `现象:「3 分钟后」显示成「刚刚」` | — | 用 relativeFuture | Use relativeFuture |
|
|
133
|
-
|
|
|
154
|
+
| `给通用 Picker 手搓 models 数组` | `现象:候选写死 / 空目录` | — | 选模型走 ModelPicker + 宿主 serveModelCatalog / client connectHost(ctx, { modelsPath }) 两段式接线 | Use ModelPicker with the two-sided serveModelCatalog / connectHost(ctx, { modelsPath }) wiring |
|
|
155
|
+
| `connectHost(ctx) 不带 modelsPath` | `现象:模型目录永远停在 loading,不报错` | — | 模型目录不是快照,必须传宿主注册的同一个 path | The model catalog is an HTTP route, not a snapshot: pass the same path registered on the host |
|
|
134
156
|
| `暗色不跟随宿主` | `现象:插件固守一种明暗` | — | 判据是 body[data-ds-dark-theme],别用 prefers-color-scheme | Predicate is body[data-ds-dark-theme], not prefers-color-scheme |
|
package/docs/help/ui.doc.ts
CHANGED
|
@@ -106,6 +106,21 @@ const workspacePickerExample = `import { WorkspacePicker, connectHost } from 'ds
|
|
|
106
106
|
// apply(ctx) 里:connectHost(ctx)
|
|
107
107
|
h(WorkspacePicker, { value: cur, onChange: setCur, clearable: true })`
|
|
108
108
|
|
|
109
|
+
const modelPickerExample = `// paths.ts —— 宿主与 client 共用同一个常量
|
|
110
|
+
export const MODELS_PATH = '/api/dsh-task-reminder/models'
|
|
111
|
+
|
|
112
|
+
// 宿主 apply:注册只读模型目录路由
|
|
113
|
+
import { serveModelCatalog } from 'dsh-plugin-core/host'
|
|
114
|
+
serveModelCatalog(ctx, { path: MODELS_PATH })
|
|
115
|
+
|
|
116
|
+
// client apply:接同一个 path
|
|
117
|
+
import { connectHost, refreshModelCatalog, ModelPicker } from 'dsh-plugin-core/ui'
|
|
118
|
+
connectHost(ctx, { modelsPath: MODELS_PATH })
|
|
119
|
+
|
|
120
|
+
// 三种形态共用同一份目录,onChange 一律发 provider/id
|
|
121
|
+
h(ModelPicker, { variant: 'cascade', value: current, onChange: setCurrent })
|
|
122
|
+
await refreshModelCatalog() // 供应商 / 模型有增减时重拉(Promise)`
|
|
123
|
+
|
|
109
124
|
const dateTimePickerExample = `import { DateTimePicker } from 'dsh-plugin-core/ui'
|
|
110
125
|
|
|
111
126
|
// 单个时刻,精确到分(起始端归零:14:30 ⇒ 14:30:00.000)
|
|
@@ -239,6 +254,7 @@ h(Pagination, {
|
|
|
239
254
|
onChange: (nextPage, nextSize) => { setPage(nextPage); setPageSize(nextSize) },
|
|
240
255
|
align: 'right', // left / center / right(默认 right)
|
|
241
256
|
pageSizeOptions: [10, 20, 50], // 传了才出现「每页条数」下拉
|
|
257
|
+
size: 'sm', // 该下拉的尺寸:sm / md / lg(默认 md)
|
|
242
258
|
showTotal: true, // 传了才出现「第 1-10 条,共 86 条」
|
|
243
259
|
siblingCount: 1, // 当前页两侧留几页(默认 1)
|
|
244
260
|
boundaryCount: 1, // 首尾各固定几页(默认 1;1/1 合计最多 7 个位置)
|
|
@@ -424,8 +440,8 @@ const doc: DocTopic = {
|
|
|
424
440
|
en: 'WorkspacePicker: a domain picker that brings its own data. Call `connectHost(ctx)` once in the plugin apply and it subscribes to the official `workspaces` snapshot. Unwired = empty state, never fabricated data. Trigger and search-box sizing (`width` / `minWidth` / `maxWidth` / `searchSizing`) matches Picker; `translate` overrides all built-in copy in the component and its dropdown.',
|
|
425
441
|
},
|
|
426
442
|
{
|
|
427
|
-
zh: 'ModelPicker
|
|
428
|
-
en: 'ModelPicker: the complete model selector. Three variants share one host catalog
|
|
443
|
+
zh: 'ModelPicker:选择模型的完整封装,三种形态共用同一份宿主目录,`onChange` 一律发 `provider/id`:`grouped`(默认)= 一个下拉、供应商做组头;`flat` = 一个下拉、全部模型平铺成「厂商-模型」并带搜索,搜厂商名即可筛;`cascade` = 两个下拉联动,厂商框与模型框都带搜索,换厂商清空模型。**接线是两段式**:宿主 `serveModelCatalog(ctx, { path })` + client `connectHost(ctx, { modelsPath: path })` 用同一个 path 常量,漏了 `modelsPath` 目录永远停在 loading;供应商 / 模型有增减时 `await refreshModelCatalog()` 重拉。`width` / `minWidth` / `maxWidth` 管触发器,`searchSizing` 管所有搜索框,`providerSizing` / `modelSizing` 让联动态两个框分别设宽。旧值已不在目录里时按真实值保留一项并如实提示「候选可能不完整」,不静默丢弃。',
|
|
444
|
+
en: 'ModelPicker: the complete model selector. Three variants share one host catalog and always emit `provider/id`: `grouped` (default) groups models under provider headers in one dropdown; `flat` lists every model as `vendor-model` in one searchable dropdown; `cascade` links two searchable dropdowns (provider then model). **Wiring is two-sided**: `serveModelCatalog(ctx, { path })` on the host and `connectHost(ctx, { modelsPath: path })` on the client with the same path constant — without `modelsPath` the catalog stays `loading` forever; `await refreshModelCatalog()` re-pulls it when providers change. `width`/`minWidth`/`maxWidth` size triggers, `searchSizing` sizes every search box, and `providerSizing`/`modelSizing` size the two cascade boxes separately. A controlled value no longer present in the catalog is retained as-is with an honest "candidates may be incomplete" hint instead of being silently dropped.',
|
|
429
445
|
},
|
|
430
446
|
],
|
|
431
447
|
api: [
|
|
@@ -481,11 +497,18 @@ const doc: DocTopic = {
|
|
|
481
497
|
{ name: 'providerSizing / modelSizing', type: 'PickerSizing', def: '跟随 width / minWidth / maxWidth', desc: { zh: 'cascade 的厂商框 / 模型框分别设宽;不传就跟随通用宽度', en: 'Separate sizing for the cascade provider / model box; omitted follows the common width' } },
|
|
482
498
|
{ name: 'allowDefault / defaultLabel', type: '「默认模型」选项:默认提供;false 关闭;选中发 \'\'', def: '—', desc: { zh: '文案可传 defaultLabel', en: 'Pass defaultLabel for the text' } },
|
|
483
499
|
{ name: 'placeholder', type: 'string', def: '默认「模型」', desc: { zh: 'icon:不传 = 默认星形;null = 不显示;传元素 = 自定义', en: 'icon: omitted = default star; null = hidden; element = custom' } },
|
|
484
|
-
{ name: '
|
|
500
|
+
{ name: 'className', type: 'string', def: '—', desc: { zh: '组件根元素:grouped / flat 落在 Picker 根,cascade 落在两框外层 row', en: 'Root element: the Picker root for grouped/flat, the outer row for cascade' } },
|
|
501
|
+
{ name: 'rowClassName', type: 'string', def: '—', desc: { zh: 'cascade 外层 row 的附加类名(控制两框间距 / 布局)', en: 'Extra class for the cascade outer row (gap / layout)' } },
|
|
502
|
+
{ name: 'providerClassName / modelClassName', type: 'string', def: '—', desc: { zh: 'cascade 厂商框 / 模型框各自的类名', en: 'Class for the cascade provider / model box' } },
|
|
503
|
+
{ name: 'refreshModelCatalog()', type: '(path?: string) => Promise<ModelCatalogState>', def: '—', desc: { zh: '供应商 / 模型有增减时重拉目录;不传 path 用 connectHost 记下的那个;未接线则 reject', en: 'Re-pull the catalog when providers change; omit path to reuse the wired one; rejects if unwired' } },
|
|
504
|
+
{ name: '透传 Picker', type: 'value / defaultValue / onChange / clearable / searchable / hint / size / placement / disabled / degraded / translate', def: '—', desc: { zh: '同 Picker 同名参数', en: 'Same-named params as Picker' } },
|
|
485
505
|
],
|
|
486
506
|
},
|
|
487
507
|
],
|
|
488
|
-
code: [
|
|
508
|
+
code: [
|
|
509
|
+
{ id: 'ui-workspacepicker-example', lang: 'tsx', src: workspacePickerExample },
|
|
510
|
+
{ id: 'ui-modelpicker-example', lang: 'tsx', src: modelPickerExample },
|
|
511
|
+
],
|
|
489
512
|
},
|
|
490
513
|
{
|
|
491
514
|
id: 'split-group',
|
|
@@ -875,6 +898,7 @@ const doc: DocTopic = {
|
|
|
875
898
|
{ name: 'align', type: "'left' | 'center' | 'right'", def: "'right'", desc: { zh: '分页条位置(默认放右边)', en: 'Pager placement (right by default)' } },
|
|
876
899
|
{ name: 'siblingCount / boundaryCount', type: 'number / number', def: '1 / 1', desc: { zh: '当前页两侧页数 / 首尾固定页数;1/1 合计最多 7 个位置', en: 'Pages beside the current one / pages pinned at each end; 1/1 gives at most 7 slots' } },
|
|
877
900
|
{ name: 'pageSizeOptions', type: 'number[]', def: '—', desc: { zh: '传了才出现「每页条数」下拉', en: 'Only then does the rows-per-page select appear' } },
|
|
901
|
+
{ name: 'size', type: "'sm' | 'md' | 'lg'", def: "'md'", desc: { zh: '「每页条数」下拉的尺寸档位;页码按钮固定 md', en: 'Size of the rows-per-page select; page buttons stay md' } },
|
|
878
902
|
{ name: 'showTotal', type: 'boolean | (total, from, to) => ReactNode', def: '—', desc: { zh: '总数文案:不传 = 不显示(默认关),传 true 走内置字典,传函数可自定义', en: 'Total copy: omitted = hidden (off by default), true uses the dictionary, a renderer customises it' } },
|
|
879
903
|
{ name: 'hideOnSinglePage', type: 'boolean', def: 'false', desc: { zh: '只有一页时整条不渲染', en: 'Render nothing when there is a single page' } },
|
|
880
904
|
{ name: 'simple', type: 'boolean', def: 'false', desc: { zh: '简洁模式:只留「‹ 2 / 36 ›」', en: 'Simple mode: only “‹ 2 / 36 ›”' } },
|
package/docs/help/ui.md
CHANGED
|
@@ -111,9 +111,9 @@ WorkspacePicker:数据自带的领域选择器。在插件 apply 里调一次
|
|
|
111
111
|
|
|
112
112
|
> EN: WorkspacePicker: a domain picker that brings its own data. Call `connectHost(ctx)` once in the plugin apply and it subscribes to the official `workspaces` snapshot. Unwired = empty state, never fabricated data. Trigger and search-box sizing (`width` / `minWidth` / `maxWidth` / `searchSizing`) matches Picker; `translate` overrides all built-in copy in the component and its dropdown.
|
|
113
113
|
|
|
114
|
-
ModelPicker
|
|
114
|
+
ModelPicker:选择模型的完整封装,三种形态共用同一份宿主目录,`onChange` 一律发 `provider/id`:`grouped`(默认)= 一个下拉、供应商做组头;`flat` = 一个下拉、全部模型平铺成「厂商-模型」并带搜索,搜厂商名即可筛;`cascade` = 两个下拉联动,厂商框与模型框都带搜索,换厂商清空模型。**接线是两段式**:宿主 `serveModelCatalog(ctx, { path })` + client `connectHost(ctx, { modelsPath: path })` 用同一个 path 常量,漏了 `modelsPath` 目录永远停在 loading;供应商 / 模型有增减时 `await refreshModelCatalog()` 重拉。`width` / `minWidth` / `maxWidth` 管触发器,`searchSizing` 管所有搜索框,`providerSizing` / `modelSizing` 让联动态两个框分别设宽。旧值已不在目录里时按真实值保留一项并如实提示「候选可能不完整」,不静默丢弃。
|
|
115
115
|
|
|
116
|
-
> EN: ModelPicker: the complete model selector. Three variants share one host catalog
|
|
116
|
+
> EN: ModelPicker: the complete model selector. Three variants share one host catalog and always emit `provider/id`: `grouped` (default) groups models under provider headers in one dropdown; `flat` lists every model as `vendor-model` in one searchable dropdown; `cascade` links two searchable dropdowns (provider then model). **Wiring is two-sided**: `serveModelCatalog(ctx, { path })` on the host and `connectHost(ctx, { modelsPath: path })` on the client with the same path constant — without `modelsPath` the catalog stays `loading` forever; `await refreshModelCatalog()` re-pulls it when providers change. `width`/`minWidth`/`maxWidth` size triggers, `searchSizing` sizes every search box, and `providerSizing`/`modelSizing` size the two cascade boxes separately. A controlled value no longer present in the catalog is retained as-is with an honest "candidates may be incomplete" hint instead of being silently dropped.
|
|
117
117
|
|
|
118
118
|
| 参数 | 类型 | 默认 | 说明(zh) | 说明(en) |
|
|
119
119
|
|---|---|---|---|---|
|
|
@@ -162,7 +162,11 @@ ModelPicker:选择模型的完整封装,三种形态共用同一份宿主目
|
|
|
162
162
|
| `providerSizing / modelSizing` | `PickerSizing` | 跟随 width / minWidth / maxWidth | cascade 的厂商框 / 模型框分别设宽;不传就跟随通用宽度 | Separate sizing for the cascade provider / model box; omitted follows the common width |
|
|
163
163
|
| `allowDefault / defaultLabel` | `「默认模型」选项:默认提供;false 关闭;选中发 ''` | — | 文案可传 defaultLabel | Pass defaultLabel for the text |
|
|
164
164
|
| `placeholder` | `string` | 默认「模型」 | icon:不传 = 默认星形;null = 不显示;传元素 = 自定义 | icon: omitted = default star; null = hidden; element = custom |
|
|
165
|
-
|
|
|
165
|
+
| `className` | `string` | — | 组件根元素:grouped / flat 落在 Picker 根,cascade 落在两框外层 row | Root element: the Picker root for grouped/flat, the outer row for cascade |
|
|
166
|
+
| `rowClassName` | `string` | — | cascade 外层 row 的附加类名(控制两框间距 / 布局) | Extra class for the cascade outer row (gap / layout) |
|
|
167
|
+
| `providerClassName / modelClassName` | `string` | — | cascade 厂商框 / 模型框各自的类名 | Class for the cascade provider / model box |
|
|
168
|
+
| `refreshModelCatalog()` | `(path?: string) => Promise<ModelCatalogState>` | — | 供应商 / 模型有增减时重拉目录;不传 path 用 connectHost 记下的那个;未接线则 reject | Re-pull the catalog when providers change; omit path to reuse the wired one; rejects if unwired |
|
|
169
|
+
| `透传 Picker` | `value / defaultValue / onChange / clearable / searchable / hint / size / placement / disabled / degraded / translate` | — | 同 Picker 同名参数 | Same-named params as Picker |
|
|
166
170
|
|
|
167
171
|
```tsx id="ui-workspacepicker-example"
|
|
168
172
|
import { WorkspacePicker, connectHost } from 'dsh-plugin-core/ui'
|
|
@@ -171,6 +175,23 @@ import { WorkspacePicker, connectHost } from 'dsh-plugin-core/ui'
|
|
|
171
175
|
h(WorkspacePicker, { value: cur, onChange: setCur, clearable: true })
|
|
172
176
|
```
|
|
173
177
|
|
|
178
|
+
```tsx id="ui-modelpicker-example"
|
|
179
|
+
// paths.ts —— 宿主与 client 共用同一个常量
|
|
180
|
+
export const MODELS_PATH = '/api/dsh-task-reminder/models'
|
|
181
|
+
|
|
182
|
+
// 宿主 apply:注册只读模型目录路由
|
|
183
|
+
import { serveModelCatalog } from 'dsh-plugin-core/host'
|
|
184
|
+
serveModelCatalog(ctx, { path: MODELS_PATH })
|
|
185
|
+
|
|
186
|
+
// client apply:接同一个 path
|
|
187
|
+
import { connectHost, refreshModelCatalog, ModelPicker } from 'dsh-plugin-core/ui'
|
|
188
|
+
connectHost(ctx, { modelsPath: MODELS_PATH })
|
|
189
|
+
|
|
190
|
+
// 三种形态共用同一份目录,onChange 一律发 provider/id
|
|
191
|
+
h(ModelPicker, { variant: 'cascade', value: current, onChange: setCurrent })
|
|
192
|
+
await refreshModelCatalog() // 供应商 / 模型有增减时重拉(Promise)
|
|
193
|
+
```
|
|
194
|
+
|
|
174
195
|
## SplitGroup(组合选择框)
|
|
175
196
|
|
|
176
197
|
> EN: SplitGroup (combined selectors)
|
|
@@ -700,6 +721,7 @@ h(Table, {
|
|
|
700
721
|
| `align` | `'left' \| 'center' \| 'right'` | — | 'right' | 分页条位置(默认放右边) | Pager placement (right by default) |
|
|
701
722
|
| `siblingCount / boundaryCount` | `number / number` | — | 1 / 1 | 当前页两侧页数 / 首尾固定页数;1/1 合计最多 7 个位置 | Pages beside the current one / pages pinned at each end; 1/1 gives at most 7 slots |
|
|
702
723
|
| `pageSizeOptions` | `number[]` | — | — | 传了才出现「每页条数」下拉 | Only then does the rows-per-page select appear |
|
|
724
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | — | 'md' | 「每页条数」下拉的尺寸档位;页码按钮固定 md | Size of the rows-per-page select; page buttons stay md |
|
|
703
725
|
| `showTotal` | `boolean \| (total, from, to) => ReactNode` | — | — | 总数文案:不传 = 不显示(默认关),传 true 走内置字典,传函数可自定义 | Total copy: omitted = hidden (off by default), true uses the dictionary, a renderer customises it |
|
|
704
726
|
| `hideOnSinglePage` | `boolean` | — | false | 只有一页时整条不渲染 | Render nothing when there is a single page |
|
|
705
727
|
| `simple` | `boolean` | — | false | 简洁模式:只留「‹ 2 / 36 ›」 | Simple mode: only “‹ 2 / 36 ›” |
|
|
@@ -716,6 +738,7 @@ h(Pagination, {
|
|
|
716
738
|
onChange: (nextPage, nextSize) => { setPage(nextPage); setPageSize(nextSize) },
|
|
717
739
|
align: 'right', // left / center / right(默认 right)
|
|
718
740
|
pageSizeOptions: [10, 20, 50], // 传了才出现「每页条数」下拉
|
|
741
|
+
size: 'sm', // 该下拉的尺寸:sm / md / lg(默认 md)
|
|
719
742
|
showTotal: true, // 传了才出现「第 1-10 条,共 86 条」
|
|
720
743
|
siblingCount: 1, // 当前页两侧留几页(默认 1)
|
|
721
744
|
boundaryCount: 1, // 首尾各固定几页(默认 1;1/1 合计最多 7 个位置)
|
package/package.json
CHANGED