@aalis/api-webui 0.11.0 → 0.12.0

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/page.d.ts ADDED
@@ -0,0 +1,423 @@
1
+ import type { UserIdentity } from '@aalis/api-authority';
2
+ import type { SessionKind } from '@aalis/api-session-manager';
3
+ import type { ConfigOf, SchemaField } from '@aalis/schema-config';
4
+ import type { FrameHostCapability } from './frame.js';
5
+ /** 一屏(页面最外层、一个标签、一个详情)最多几个组件;webui-server 登记时校验,超了不登记 */
6
+ export declare const MAX_SCREEN_COMPONENTS = 6;
7
+ /** 一页最多几个标签 */
8
+ export declare const MAX_PAGE_TABS = 6;
9
+ /**
10
+ * 页面放在哪:
11
+ * - `plugin`(默认):本插件详情的页面区块,地址 `/p/:instance/:pageKey`,占整个主区;用户可以把它固定到图标栏;
12
+ * - `settings`:设置里的一节;
13
+ * - `session`:会话右侧面板的一个标签,从面板标签栏的「+」按需打开。
14
+ */
15
+ export type PagePlacement = 'plugin' | 'settings' | 'session';
16
+ /** 数据源与动作收到的调用上下文 */
17
+ export interface PageContext {
18
+ /** 调用者:认证出的身份。只有 owner 能调用页面 */
19
+ caller: UserIdentity;
20
+ }
21
+ /** 会话面板的调用上下文:会话 id 由宿主单独给出,不从参数里取;调用前宿主核过会话存在,给的是规范化后的 id */
22
+ export interface SessionPageContext extends PageContext {
23
+ sessionId: string;
24
+ }
25
+ /** 按位置取调用上下文 */
26
+ export type PageContextOf<P extends PagePlacement> = P extends 'session' ? SessionPageContext : PageContext;
27
+ /** 会话面板的 applies 收到的会话 */
28
+ export interface PanelSession {
29
+ sessionId: string;
30
+ kind: SessionKind;
31
+ }
32
+ /**
33
+ * 单元格的显示种类,封闭集合,不写为 `text`:
34
+ * - `time`:毫秒时间戳或 ISO 字符串,显示为本地时间;`countdown`:毫秒时间戳,显示剩余时间,到零不重取;
35
+ * - `link`:只认 http、https,新标签打开,其余按文本;`status`:{@link StatusValue};`code`:等宽;
36
+ * `long-text`:单行省略,可以展开;
37
+ * - `image`:值是存储地址,宿主换成 `/api/media` 地址,按需懒加载;
38
+ * - `file`:值是存储地址,宿主换成下载句柄({@link FileCell})。插件私有数据的根(data、pluginData)里的文件不签发,只显示名字。
39
+ */
40
+ export type CellKind = 'text' | 'time' | 'countdown' | 'link' | 'status' | 'code' | 'long-text' | 'image' | 'file';
41
+ /** 状态单元格的值:一句话,正常时不写 state、不上色 */
42
+ export interface StatusValue {
43
+ text: string;
44
+ /** attention 需要处理,error 出错,running 进行中,inactive 停用或弱化 */
45
+ state?: 'attention' | 'error' | 'running' | 'inactive';
46
+ }
47
+ /** 数据源给出的单元格值 */
48
+ export type CellValue = string | number | boolean | null | undefined | StatusValue;
49
+ /** 数据源返回的一行:rowKey 指名的字段是这一行的非空字符串标识,visibleWhen 指名的字段是布尔值 */
50
+ export type TableRow = Record<string, CellValue>;
51
+ export interface TableColumn {
52
+ key: string;
53
+ label: string;
54
+ kind?: CellKind;
55
+ /** 窄时(手机、会话面板)只显示标了的列;都没标时显示第一列,带详情的表格另留选中用的那一列 */
56
+ primary?: boolean;
57
+ }
58
+ /** 表格行上的按钮:引用 actions 里的行动作;visibleWhen 指名的行字段为真时才显示 */
59
+ export interface RowAction<A extends string = string> {
60
+ action: A;
61
+ visibleWhen?: string;
62
+ }
63
+ /** 键值组件的一项;数字用等宽数字 */
64
+ export interface InfoItem {
65
+ label: string;
66
+ value: CellValue;
67
+ /** 显示种类,同表格的单元格,不收 image、file */
68
+ kind?: Exclude<CellKind, 'image' | 'file'>;
69
+ }
70
+ /** 关系图的分类色:1 到 6 对应 `--color-chart-1` 到 `-6`,随主题变,不收颜色值 */
71
+ export type ChartTone = 1 | 2 | 3 | 4 | 5 | 6;
72
+ /** 关系图里的一类节点或边:取色与图例 */
73
+ export interface GraphKind {
74
+ kind: string;
75
+ label: string;
76
+ tone: ChartTone;
77
+ }
78
+ /** 关系图的数据:节点 id 唯一,边的两端都是节点 id */
79
+ export interface GraphData {
80
+ nodes: Array<{
81
+ id: string;
82
+ label: string;
83
+ kind?: string;
84
+ }>;
85
+ edges: Array<{
86
+ source: string;
87
+ target: string;
88
+ label?: string;
89
+ kind?: string;
90
+ }>;
91
+ }
92
+ /** 页面最外层与标签里的数据源只收上下文 */
93
+ export interface DataArgs<C> {
94
+ ctx: C;
95
+ }
96
+ /** 详情里的数据源另收选中行的 rowKey(关系图是选中节点的 id),插件按它重新查 */
97
+ export interface DetailDataArgs<C> extends DataArgs<C> {
98
+ rowKey: string;
99
+ }
100
+ /** 组件共有的小标题与一句说明 */
101
+ interface ComponentBase {
102
+ label?: string;
103
+ description?: string;
104
+ }
105
+ /** 表格与关系图可带详情:选中一行(一个节点)后显示的组件,宽时在右边、窄时进下一级。详情里的组件不再带详情 */
106
+ type WithDetail<D> = [D] extends [never] ? {
107
+ detail?: never;
108
+ } : {
109
+ detail?: D[];
110
+ };
111
+ /** 表格:数据源返回全部行,排序、搜索与分页由宿主在界面上做,行数超过一页才出现搜索框与分页 */
112
+ export type TableDefinition<A extends string, X, D> = ComponentBase & WithDetail<D> & {
113
+ type: 'table';
114
+ /** 页面内唯一:取数与 invalidate 都按它 */
115
+ id: string;
116
+ rowKey: string;
117
+ columns: TableColumn[];
118
+ /** 没有行时的一句话 */
119
+ empty?: string;
120
+ rowActions?: RowAction<A>[];
121
+ data(args: X): TableRow[] | Promise<TableRow[]>;
122
+ };
123
+ /** 关系图:节点与边按类别取色,可以缩放查看 */
124
+ export type GraphDefinition<X, D> = ComponentBase & WithDetail<D> & {
125
+ type: 'graph';
126
+ id: string;
127
+ empty?: string;
128
+ nodeKinds?: GraphKind[];
129
+ edgeKinds?: GraphKind[];
130
+ /** 布局疏密:理想边长,单位像素;不写时宿主取默认 */
131
+ spacing?: number;
132
+ data(args: X): GraphData | Promise<GraphData>;
133
+ };
134
+ /** 键值:一组「名称 → 值」 */
135
+ export interface InfoDefinition<X> extends ComponentBase {
136
+ type: 'info';
137
+ id: string;
138
+ data(args: X): InfoItem[] | Promise<InfoItem[]>;
139
+ }
140
+ /** 只读文字(Markdown):不渲染原始 HTML,图片只认 `/api/media` 地址,链接只许 http、https、mailto */
141
+ export interface MarkdownDefinition<X> extends ComponentBase {
142
+ type: 'markdown';
143
+ id: string;
144
+ data(args: X): string | Promise<string>;
145
+ }
146
+ /**
147
+ * 把一段原文包成 Markdown 代码块,给文字组件显示 YAML、JSON 这类原文:围栏比原文里最长的一串反引号多一个,
148
+ * 原文里的反引号与 Markdown 记号都原样显示
149
+ */
150
+ export declare function markdownCode(text: string, language?: string): string;
151
+ /** 一组按钮,每个按钮对应一个动作。页面最外层与标签里的只收页面动作,详情里的只收行动作(作用于选中的那一行) */
152
+ export interface ActionsDefinition<A extends string> extends ComponentBase {
153
+ type: 'actions';
154
+ actions: A[];
155
+ }
156
+ export type ComponentDefinition<A extends string, X, D> = TableDefinition<A, X, D> | GraphDefinition<X, D> | InfoDefinition<X> | MarkdownDefinition<X> | ActionsDefinition<A>;
157
+ /** 详情里的组件 */
158
+ export type DetailComponentDefinition<A extends string, C> = ComponentDefinition<A, DetailDataArgs<C>, never>;
159
+ /** 页面最外层与标签里的组件 */
160
+ export type PageComponentDefinition<A extends string, C> = ComponentDefinition<A, DataArgs<C>, DetailComponentDefinition<A, C>>;
161
+ export interface PageTab<T> {
162
+ /** 页面内唯一 */
163
+ key: string;
164
+ title: string;
165
+ content: T[];
166
+ }
167
+ /** 页面内容:竖排的组件,或者标签页(只在页面最外层,标签里不再套标签) */
168
+ export type PageContent<T> = T[] | {
169
+ tabs: PageTab<T>[];
170
+ };
171
+ /**
172
+ * 动作的效果:read 只读,write 改数据,destructive 不可撤销。按钮样式与确认由它推出:插件页面里的按钮一律是次要或文字按钮,
173
+ * destructive 用危险色字,由宿主弹确认框;插件不能自己画确认框。write 与 destructive 的调用宿主记一行 info 日志
174
+ */
175
+ export type ActionEffect = 'read' | 'write' | 'destructive';
176
+ /** 动作的输入:一组 schema-config 字段。点了按钮弹一个小表单;行动作的表单里,与行字段同名的输入项用这一行的值预填 */
177
+ export type ActionInputFields = Record<string, SchemaField>;
178
+ /**
179
+ * 处理函数的返回:成功时可以给一句结果,宿主用 Toast 显示;失败就抛错,原因显示给操作的人。
180
+ * 用 void 而非 undefined:没有结果的处理函数不必写 `return undefined`
181
+ */
182
+ export type ActionResult = string | void | Promise<string | void>;
183
+ /** definePage 推断输入时得到的是只读字面量,ConfigOf 要的是可写的字段表 */
184
+ type Writable<T> = {
185
+ -readonly [K in keyof T]: Writable<T[K]>;
186
+ };
187
+ type InputSchema<I> = Writable<Exclude<I, undefined>>;
188
+ /** 处理函数收到的输入:按声明的字段推出;宿主已按字段校验类型、必填与可选项,拒收多余的键,并补上默认值 */
189
+ export type ActionInput<I> = unknown extends I ? undefined : [InputSchema<I>] extends [ActionInputFields] ? ConfigOf<InputSchema<I>> : undefined;
190
+ /** 写错的输入字段在 input 上报错 */
191
+ type CheckedInput<I> = unknown extends I ? unknown : [InputSchema<I>] extends [ActionInputFields] ? unknown : ActionInputFields;
192
+ /** 动作共有的字段 */
193
+ type ActionFields<I> = {
194
+ /** 按钮上的字:两到四个字的动词 */
195
+ label: string;
196
+ effect: ActionEffect;
197
+ /** 只给 destructive:确认框(带输入的是表单)里的警示,非空;不写时宿主写「这个操作不能撤销。」 */
198
+ confirm?: string;
199
+ input?: I & CheckedInput<I>;
200
+ };
201
+ export type ActionDefinition<I, C> = ActionFields<I> & ({
202
+ /** 行动作:放在表格行上或详情里,处理函数收到那一行的 rowKey,按它重新查,不信任界面回传的整行 */
203
+ row: true;
204
+ handler(args: {
205
+ rowKey: string;
206
+ input: ActionInput<I>;
207
+ ctx: C;
208
+ }): ActionResult;
209
+ } | {
210
+ row?: false;
211
+ handler(args: {
212
+ input: ActionInput<I>;
213
+ ctx: C;
214
+ }): ActionResult;
215
+ });
216
+ /**
217
+ * 插件前端的动作:与声明式的同一个定义,只是不收 row。插件前端里没有宿主画的表格行,要指定对象就放进 input;
218
+ * destructive 的由宿主弹确认框,框里按输入字段列出这次的值
219
+ */
220
+ export type FrameActionDefinition<I, C> = ActionFields<I> & {
221
+ row?: never;
222
+ handler(args: {
223
+ input: ActionInput<I>;
224
+ ctx: C;
225
+ }): ActionResult;
226
+ };
227
+ /** 两种页面共有的字段 */
228
+ interface PageDefinitionBase {
229
+ /** 本插件实例内唯一 */
230
+ key: string;
231
+ title: string;
232
+ /** lucide 图标名(kebab-case);界面不认识的名字换成通用图标 */
233
+ icon?: string;
234
+ /** 同一位置里的先后,小的在前 */
235
+ order?: number;
236
+ /** 只给会话面板:这个会话用不用得上本页,不写就适用于全部会话。抛错或超时按不适用处理 */
237
+ applies?(session: PanelSession): boolean | Promise<boolean>;
238
+ }
239
+ /**
240
+ * 声明式页面。P 是位置,S 是各动作的输入字段(由 definePage 推断),A 是可以引用的动作名。
241
+ * 登记时 webui-server 按质量门槛校验:一屏最多 {@link MAX_SCREEN_COMPONENTS} 个组件、最多 {@link MAX_PAGE_TABS} 个标签、
242
+ * 嵌套最多一层、组件 id 唯一、引用的动作都存在且放对了地方、不认识的字段一律拒收;不过就不登记并记一条错误日志
243
+ */
244
+ export interface DeclarativePageDefinition<P extends PagePlacement = PagePlacement, S extends Record<string, unknown> = Record<string, unknown>, A extends string = keyof S & string> extends PageDefinitionBase {
245
+ placement?: P;
246
+ content: PageContent<PageComponentDefinition<A, PageContextOf<P>>>;
247
+ actions?: {
248
+ [K in keyof S]: ActionDefinition<S[K], PageContextOf<P>>;
249
+ };
250
+ frame?: never;
251
+ sources?: never;
252
+ }
253
+ /** 插件前端只放在这两个位置:插件页面与会话面板 */
254
+ export type FramePlacement = Exclude<PagePlacement, 'settings'>;
255
+ /**
256
+ * 插件前端在插件包里的位置。webui-server 从 module 所在目录往上找最近一个带 name 字段的 package.json(只写 type 的
257
+ * 跳过),它的 name 要等于插件名,那一层就是插件包根;只托管包根下 webui/ 目录里的文件。包的 files 里要带上 webui
258
+ */
259
+ export interface FrameDefinition {
260
+ /** 声明这个页面的模块地址:写 import.meta.url */
261
+ module: string;
262
+ /** webui/ 下的入口:以 .html 结尾的相对路径,不以 / 开头、各段不以点开头;不写为 index.html */
263
+ entry?: string;
264
+ /** 申请的宿主数据能力,从词表(frame.ts 的 FRAME_HOST_CAPABILITIES)里选、不重复;不写就没有 */
265
+ host?: FrameHostCapability[];
266
+ }
267
+ /** 插件前端的一个数据源:输入的写法与校验同动作的 input,data 返回可以 JSON 化的值 */
268
+ export interface FrameSourceDefinition<I, C> {
269
+ input?: I & CheckedInput<I>;
270
+ data(args: {
271
+ input: ActionInput<I>;
272
+ ctx: C;
273
+ }): unknown;
274
+ }
275
+ /**
276
+ * 插件前端页面。P 是位置,S 是各动作的输入字段,R 是各数据源的输入字段(都由 definePage 推断)。
277
+ * 框架经消息通道按名字取数据源、调动作,数据源的名字与输入、动作的声明都由服务端核;登记时另核插件包根、webui/ 与入口
278
+ */
279
+ export interface FramePageDefinition<P extends PagePlacement = PagePlacement, S extends Record<string, unknown> = Record<string, unknown>, R extends Record<string, unknown> = Record<string, unknown>> extends PageDefinitionBase {
280
+ placement?: P & FramePlacement;
281
+ frame: FrameDefinition;
282
+ sources?: {
283
+ [K in keyof R]: FrameSourceDefinition<R[K], PageContextOf<P>>;
284
+ };
285
+ actions?: {
286
+ [K in keyof S]: FrameActionDefinition<S[K], PageContextOf<P>>;
287
+ };
288
+ content?: never;
289
+ }
290
+ /** 一个页面的声明:声明式(写 content)与插件前端(写 frame)二选一 */
291
+ export type PageDefinition<P extends PagePlacement = PagePlacement, S extends Record<string, unknown> = Record<string, unknown>, A extends string = keyof S & string, R extends Record<string, unknown> = Record<string, unknown>> = DeclarativePageDefinition<P, S, A> | FramePageDefinition<P, S, R>;
292
+ /** definePage 的返回 */
293
+ export interface PageHandle {
294
+ /**
295
+ * 这一页的数据变了:打开着它的界面重取。componentId 只重取这个组件(插件前端是数据源名),不写为整页;sessionId 只让
296
+ * 打开着这个会话的面板重取。宿主按这四项合并短时间内的连发
297
+ */
298
+ invalidate(componentId?: string, sessionId?: string): void;
299
+ }
300
+ /** 一条提示:需要处理的事或出了故障,出现在「需要处理」与插件详情。归属这次激活,插件停用就撤回 */
301
+ export interface Notice {
302
+ /** 本插件实例内唯一;同一个 id 再发一次就是替换 */
303
+ id: string;
304
+ /** action 需要你处理,error 出错 */
305
+ level: 'action' | 'error';
306
+ /** 出了什么事;数量写进标题,例如「3 件作品待裁决」 */
307
+ title: string;
308
+ /** 用户该做什么,具体到配置项、命令或页面 */
309
+ detail?: string;
310
+ /** 跳转:去本插件的配置,或打开本插件位置为 plugin 或 settings 的页面(按页面的 key);按钮上的字由宿主推出 */
311
+ open?: 'config' | {
312
+ page: string;
313
+ };
314
+ }
315
+ /** notify 的返回:只有插件自己能撤回,问题没解决就一直在 */
316
+ export interface NoticeHandle {
317
+ clear(): void;
318
+ }
319
+ type AnyFunction = (...args: any[]) => unknown;
320
+ /** 声明经 JSON 下发给界面时的样子:数据源、处理函数与 applies 去掉,其余原样 */
321
+ export type Serialized<T> = T extends AnyFunction ? never : T extends readonly (infer E)[] ? Serialized<E>[] : T extends object ? {
322
+ [K in keyof T as NonNullable<T[K]> extends AnyFunction ? never : K]: Serialized<T[K]>;
323
+ } : T;
324
+ /** 界面拿到的组件(含详情里的) */
325
+ export type ComponentView = Serialized<PageComponentDefinition<string, PageContext>>;
326
+ /** 界面拿到的动作:按钮上的字、效果、确认文案、输入字段,以及是不是行动作 */
327
+ export interface ActionView {
328
+ label: string;
329
+ effect: ActionEffect;
330
+ confirm?: string;
331
+ input?: ActionInputFields;
332
+ row?: boolean;
333
+ }
334
+ /** 两种页面在界面上共有的字段:所属的插件实例与 placement 总是给出 */
335
+ interface PageViewBase {
336
+ instance: string;
337
+ key: string;
338
+ title: string;
339
+ icon?: string;
340
+ placement: PagePlacement;
341
+ order?: number;
342
+ actions?: Record<string, ActionView>;
343
+ }
344
+ /** 声明式页面:声明去掉函数 */
345
+ export interface DeclarativePageView extends PageViewBase {
346
+ content: PageContent<ComponentView>;
347
+ frame?: never;
348
+ }
349
+ /**
350
+ * 插件前端页面:不带 content 与数据源,带宿主签发的框架地址与申请的能力;actions 供宿主决定确认框。
351
+ * 不下发插件包的本机路径(module)与单独的 entry 字段,入口已含在 src 里
352
+ */
353
+ export interface FramePageView extends PageViewBase {
354
+ frame: {
355
+ /** 框架地址 `/frames/<token>/<入口>`:页面撤回或重新登记后换新的 */
356
+ src: string;
357
+ host: FrameHostCapability[];
358
+ };
359
+ content?: never;
360
+ }
361
+ /** GET /api/pages 的一项 */
362
+ export type PageView = DeclarativePageView | FramePageView;
363
+ /** 界面收到的文件单元格:宿主签发的下载句柄(`GET /api/page-file?handle=`)与文件名;不能签发时只有名字 */
364
+ export interface FileCell {
365
+ name: string;
366
+ handle?: string;
367
+ }
368
+ /** 界面收到的一行:image 列已换成 `/api/media` 地址,file 列已换成 {@link FileCell} */
369
+ export type PageRow = Record<string, CellValue | FileCell>;
370
+ /** 各种组件的数据源取回的数据 */
371
+ export interface PageDataByType {
372
+ table: PageRow[];
373
+ graph: GraphData;
374
+ info: InfoItem[];
375
+ markdown: string;
376
+ }
377
+ /** 一个页面的位置标识:插件实例与页面 key */
378
+ export interface PageRef {
379
+ instance: string;
380
+ pageKey: string;
381
+ }
382
+ /**
383
+ * 会话右侧面板里宿主自己的标签,按宿主的顺序:计划、设置、用量、后台(子会话与后台任务)。每个对应会话协议里的一类
384
+ * 数据,由宿主按数据画,不走页面登记;照同一套协议实现的前端也有同样的标签。封闭集合,以后按加法加
385
+ */
386
+ export declare const HOST_PANEL_TABS: readonly ["plan", "settings", "usage", "background"];
387
+ export type HostPanelTab = (typeof HOST_PANEL_TABS)[number];
388
+ /** 会话面板一个标签的引用:宿主的标签,或一个位置为 session 的页面 */
389
+ export type PanelTabRef = {
390
+ host: HostPanelTab;
391
+ } | PageRef;
392
+ /** owner 的界面布局,在所有会话、所有设备上一致 */
393
+ export interface LayoutRecords {
394
+ /** 图标栏上固定的页面,按 owner 排的顺序 */
395
+ pinned: PageRef[];
396
+ /**
397
+ * 会话面板的标签,按 owner 排的顺序:开着的在标签栏里,关着的在「+」里,都只在此刻可用时出现。
398
+ * 宿主标签总在表里;插件标签第一次打开时追加在末尾,关了位置保留
399
+ */
400
+ panelTabs: Array<{
401
+ tab: PanelTabRef;
402
+ open: boolean;
403
+ }>;
404
+ }
405
+ /**
406
+ * 布局记录的一个操作。固定只收此刻登记着、位置为 plugin 的页面;打开插件标签只收此刻登记着、位置为 session 的页面。
407
+ * 移出(remove-tab)只收插件标签,把它从表里删掉:关闭只设为关、位置保留,插件标签累计到上限后,移出用不着的才能打开新的;
408
+ * 宿主标签只能关、不能移出。其余只动记录,所属插件停用时也能做
409
+ */
410
+ export type LayoutOperation = {
411
+ op: 'pin' | 'unpin' | 'move-up' | 'move-down';
412
+ page: PageRef;
413
+ } | {
414
+ op: 'open-tab' | 'close-tab' | 'tab-up' | 'tab-down';
415
+ tab: PanelTabRef;
416
+ } | {
417
+ op: 'remove-tab';
418
+ tab: PageRef;
419
+ };
420
+ /** 布局记录各自最多几条;会话面板的标签连同宿主标签算 */
421
+ export declare const MAX_LAYOUT_ENTRIES = 50;
422
+ export {};
423
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"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"}
package/dist/page.js ADDED
@@ -0,0 +1,28 @@
1
+ // ----- 页面 -----
2
+ //
3
+ // 页面默认声明式,需要自绘时用插件前端。声明式页面只交声明:组件与它们的数据源、动作与它们的处理函数在 definePage 里
4
+ // 一次给出,返回形状按组件种类推出;样式、窄屏变形、确认框与输入表单都由宿主统一画。组件只有表格、关系图、键值、文字、
5
+ // 按钮组五样,另有标签页这一种排法。插件前端是插件包里的一份静态网页,在宿主画的隔离框架里运行,只放在插件页面与
6
+ // 会话面板,经消息通道调这一页声明过的数据源与动作(frame.ts)。
7
+ // 界面经 REST 取页面的声明(函数去掉,见 PageView)、取数、调动作;路由与返回形状见 rest.ts。
8
+ /** 一屏(页面最外层、一个标签、一个详情)最多几个组件;webui-server 登记时校验,超了不登记 */
9
+ export const MAX_SCREEN_COMPONENTS = 6;
10
+ /** 一页最多几个标签 */
11
+ export const MAX_PAGE_TABS = 6;
12
+ /**
13
+ * 把一段原文包成 Markdown 代码块,给文字组件显示 YAML、JSON 这类原文:围栏比原文里最长的一串反引号多一个,
14
+ * 原文里的反引号与 Markdown 记号都原样显示
15
+ */
16
+ export function markdownCode(text, language = '') {
17
+ const longest = Math.max(0, ...(text.match(/`+/g) ?? []).map(run => run.length));
18
+ const fence = '`'.repeat(Math.max(3, longest + 1));
19
+ return `${fence}${language}\n${text.replace(/\n$/, '')}\n${fence}`;
20
+ }
21
+ /**
22
+ * 会话右侧面板里宿主自己的标签,按宿主的顺序:计划、设置、用量、后台(子会话与后台任务)。每个对应会话协议里的一类
23
+ * 数据,由宿主按数据画,不走页面登记;照同一套协议实现的前端也有同样的标签。封闭集合,以后按加法加
24
+ */
25
+ export const HOST_PANEL_TABS = ['plan', 'settings', 'usage', 'background'];
26
+ /** 布局记录各自最多几条;会话面板的标签连同宿主标签算 */
27
+ export const MAX_LAYOUT_ENTRIES = 50;
28
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../src/page.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,EAAE;AACF,kEAAkE;AAClE,6DAA6D;AAC7D,0DAA0D;AAC1D,sCAAsC;AACtC,4DAA4D;AAO5D,yDAAyD;AACzD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,eAAe;AACf,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AA2J/B;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAQ,GAAG,EAAE;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,GAAG,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;AACrE,CAAC;AAkSD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC;AA4BpF,gCAAgC;AAChC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC"}