@pactor-app/blocks 0.0.0-stage → 1.44.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/LICENSE +21 -0
- package/dist/index.cjs +4562 -0
- package/dist/index.d.cts +1003 -0
- package/dist/index.d.ts +1003 -0
- package/dist/index.js +4581 -0
- package/package.json +78 -3
- package/styles.css +1340 -0
- package/README.md +0 -3
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,1003 @@
|
|
|
1
|
+
import { ComponentRegistry } from '@pactor-app/runtime';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import { ReactNode, CSSProperties } from 'react';
|
|
4
|
+
import { TagColor, ButtonVariant, TextType, ControlSize } from '@pactor-app/ui/components';
|
|
5
|
+
import { DslNode } from '@pactor-app/core';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 结构模式(对应《登录页产品结构设计》的容器关系):
|
|
9
|
+
* - `split`(默认,01–04、12)左右分栏:比例、方向、认证区容器均可配置
|
|
10
|
+
* - `centered`(05/07)居中认证区
|
|
11
|
+
* - `brand-card`(06)品牌区为独立卡片 + 右侧裸表单
|
|
12
|
+
* - `overlap`(08)品牌卡片与登录卡片局部叠加
|
|
13
|
+
* - `backdrop`(11)整页渐变品牌背景 + 悬浮认证卡片
|
|
14
|
+
* (10 扫码登录不在组件范围内)
|
|
15
|
+
*/
|
|
16
|
+
type LoginVariant = "split" | "centered" | "brand-card" | "overlap" | "backdrop";
|
|
17
|
+
interface LoginBrandInfo {
|
|
18
|
+
/** Logo 图片地址 */
|
|
19
|
+
logo?: string;
|
|
20
|
+
/** 品牌/产品名称 */
|
|
21
|
+
name?: string;
|
|
22
|
+
/** 品牌主标题 / Slogan */
|
|
23
|
+
title?: string;
|
|
24
|
+
/** 品牌副标题 / 说明 */
|
|
25
|
+
description?: string;
|
|
26
|
+
/** 品牌展示插画地址(窄屏不展示);缺省展示内置默认插画,传空字符串可隐藏 */
|
|
27
|
+
illustration?: string;
|
|
28
|
+
}
|
|
29
|
+
interface LoginLink {
|
|
30
|
+
text: string;
|
|
31
|
+
/** 配置后渲染为链接直接跳转;缺省时点击触发对应 DSL 事件 */
|
|
32
|
+
href?: string;
|
|
33
|
+
}
|
|
34
|
+
interface LoginProps {
|
|
35
|
+
/** 结构模式,默认 split */
|
|
36
|
+
layout?: LoginVariant;
|
|
37
|
+
/**
|
|
38
|
+
* 品牌区方向(split / brand-card / overlap / backdrop 生效;centered 无分栏不适用),
|
|
39
|
+
* 默认 left;right 即文档 12「左表单 + 右概念展示」的镜像结构
|
|
40
|
+
* (窄屏均为认证区在前,品牌区隐藏或后置)
|
|
41
|
+
*/
|
|
42
|
+
brandSide?: "left" | "right";
|
|
43
|
+
/** 品牌区分栏占比 0–1(仅 split),默认 0.5;0.6 即文档 04 的品牌大区 */
|
|
44
|
+
brandRatio?: number;
|
|
45
|
+
/**
|
|
46
|
+
* 认证区容器(split / centered 生效):
|
|
47
|
+
* `plain` 裸表单(320–380px);`card` 常规卡片(默认,400px);
|
|
48
|
+
* `float` 大尺寸悬浮卡片(440px + 大留白 + 强阴影,即文档 03)
|
|
49
|
+
*/
|
|
50
|
+
authVariant?: "plain" | "card" | "float";
|
|
51
|
+
/** split 品牌面板是否带渐变背景,默认 true */
|
|
52
|
+
brandPanelBackground?: boolean;
|
|
53
|
+
/** 是否渲染默认背景装饰(圆斑/圆环/点阵/流线),默认 true */
|
|
54
|
+
decor?: boolean;
|
|
55
|
+
/** 品牌区配置;居中布局下仅展示 logo+name(配置了才渲染) */
|
|
56
|
+
brand?: LoginBrandInfo;
|
|
57
|
+
/** 认证区标题 */
|
|
58
|
+
title?: string;
|
|
59
|
+
/** 认证区说明 */
|
|
60
|
+
subtitle?: string;
|
|
61
|
+
usernameLabel?: string;
|
|
62
|
+
usernamePlaceholder?: string;
|
|
63
|
+
passwordLabel?: string;
|
|
64
|
+
passwordPlaceholder?: string;
|
|
65
|
+
/** 提交按钮文案 */
|
|
66
|
+
submitText?: string;
|
|
67
|
+
/** 注册入口(未配置不渲染) */
|
|
68
|
+
registerLink?: LoginLink;
|
|
69
|
+
/** 找回密码入口(未配置不渲染) */
|
|
70
|
+
forgotLink?: LoginLink;
|
|
71
|
+
/** 页脚文案(版权/协议行,未配置不渲染) */
|
|
72
|
+
footer?: string;
|
|
73
|
+
/**
|
|
74
|
+
* 认证区内容插槽(DSL children 或 ReactNode):提供时替换内置账号密码表单,
|
|
75
|
+
* 标题/副标题与辅助入口(registerLink / forgotLink)保留。
|
|
76
|
+
* 可内嵌 Tabs 切换多种登录方式(手机验证码 / 账号密码等);
|
|
77
|
+
* 插槽内的表单字段、校验与提交事件由使用方自行编排,Login 的 onSubmit 不再生效
|
|
78
|
+
*/
|
|
79
|
+
children?: ReactNode;
|
|
80
|
+
/** 通用:根节点 class(与内置样式合并) */
|
|
81
|
+
className?: string;
|
|
82
|
+
/** 通用:根节点内联样式 */
|
|
83
|
+
style?: CSSProperties;
|
|
84
|
+
/** 校验通过后触发,参数为 { username, password };登录请求与跳转由 DSL 编排 */
|
|
85
|
+
onSubmit?: (values: Record<string, unknown>) => void;
|
|
86
|
+
onRegisterClick?: () => void;
|
|
87
|
+
onForgotClick?: () => void;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Login 登录业务组件(business 目录):
|
|
91
|
+
* 品牌区 + 认证区 + 辅助入口 + 页脚的整页组合,内部复用 Form/Input/Button。
|
|
92
|
+
* 结构模式(layout)与修饰配置(方向/比例/卡片样式/背景/装饰)正交组合;
|
|
93
|
+
* 认证区内容支持 children 插槽替换内置表单(可内嵌 Tabs 切换多种登录方式);
|
|
94
|
+
* 样式全部走语义令牌(深浅色/换肤自适应);文案缺省走 i18n(pactor.login.*),
|
|
95
|
+
* 同名 props 优先。组件不内置登录请求。
|
|
96
|
+
*/
|
|
97
|
+
declare function Login({ layout, brandSide, brandRatio, authVariant, brandPanelBackground, decor, brand, title, subtitle, usernameLabel, usernamePlaceholder, passwordLabel, passwordPlaceholder, submitText, registerLink, forgotLink, footer, children, className, style, onSubmit, onRegisterClick, onForgotClick, }: LoginProps): react.JSX.Element;
|
|
98
|
+
|
|
99
|
+
/** 上层右侧状态/分类标签 */
|
|
100
|
+
interface EntityCardTag {
|
|
101
|
+
text: string;
|
|
102
|
+
/** 语义色,默认 default */
|
|
103
|
+
color?: TagColor;
|
|
104
|
+
}
|
|
105
|
+
/** 下层操作按钮;key 缺省取 text */
|
|
106
|
+
interface EntityCardAction {
|
|
107
|
+
text: string;
|
|
108
|
+
key?: string;
|
|
109
|
+
variant?: ButtonVariant;
|
|
110
|
+
danger?: boolean;
|
|
111
|
+
}
|
|
112
|
+
interface EntityCardProps {
|
|
113
|
+
/** 图标名(Icon 白名单);与 logo 二选一,logo 优先 */
|
|
114
|
+
icon?: string;
|
|
115
|
+
/** Logo 图片地址 */
|
|
116
|
+
logo?: string;
|
|
117
|
+
/** 主标题 */
|
|
118
|
+
title?: string;
|
|
119
|
+
/** 标题下方辅助短文案(版本号、编码等) */
|
|
120
|
+
subtitle?: string;
|
|
121
|
+
/** 上层右侧标签组 */
|
|
122
|
+
tags?: EntityCardTag[];
|
|
123
|
+
/** 中层描述说明,固定两行高度、超出截断 */
|
|
124
|
+
description?: string;
|
|
125
|
+
/** 中层右侧维护信息(与描述平铺,如「平台组 · 更新于 2026-09-28」) */
|
|
126
|
+
meta?: string;
|
|
127
|
+
/** 下层操作按钮组(居右);不配置则不渲染下层 */
|
|
128
|
+
actions?: EntityCardAction[];
|
|
129
|
+
/** 下层是否带浅底栏背景,默认 true */
|
|
130
|
+
footerBackground?: boolean;
|
|
131
|
+
/** 整卡可点:手型 + hover 边框/背景高亮,常配 events.onClick */
|
|
132
|
+
hoverable?: boolean;
|
|
133
|
+
/** 通用:根节点 class(与内置样式合并) */
|
|
134
|
+
className?: string;
|
|
135
|
+
/** 通用:内容区 class */
|
|
136
|
+
contentClassName?: string;
|
|
137
|
+
/** 通用:根节点内联样式 */
|
|
138
|
+
style?: CSSProperties;
|
|
139
|
+
/** 整卡点击(actions 区域不触发) */
|
|
140
|
+
onClick?: () => void;
|
|
141
|
+
/** 操作按钮点击,参数 { key, text, index } */
|
|
142
|
+
onAction?: (event: {
|
|
143
|
+
key: string;
|
|
144
|
+
text: string;
|
|
145
|
+
index: number;
|
|
146
|
+
}) => void;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* EntityCard 实体摘要卡(business 目录):上(图标+标题+副文案 / 标签组)、
|
|
150
|
+
* 中(描述 / 维护信息)、下(浅底栏操作按钮组)三层结构;按钮点击独立于
|
|
151
|
+
* 整卡点击(stopPropagation)。组件不内置请求,交互由 DSL events 编排。
|
|
152
|
+
*/
|
|
153
|
+
declare function EntityCard({ icon, logo, title, subtitle, tags, description, meta, actions, footerBackground, hoverable, className, contentClassName, style, onClick, onAction, }: EntityCardProps): react.JSX.Element;
|
|
154
|
+
|
|
155
|
+
/** 卡片数据项:字段与 EntityCard props 同形,可携带额外业务字段(事件参数原样回传) */
|
|
156
|
+
interface CardListItem {
|
|
157
|
+
icon?: string;
|
|
158
|
+
logo?: string;
|
|
159
|
+
title?: string;
|
|
160
|
+
subtitle?: string;
|
|
161
|
+
tags?: EntityCardTag[];
|
|
162
|
+
description?: string;
|
|
163
|
+
meta?: string;
|
|
164
|
+
actions?: EntityCardAction[];
|
|
165
|
+
[key: string]: unknown;
|
|
166
|
+
}
|
|
167
|
+
interface CardListProps {
|
|
168
|
+
/** 卡片数据 */
|
|
169
|
+
items?: CardListItem[];
|
|
170
|
+
/** 网格列数,默认 3 */
|
|
171
|
+
columns?: number;
|
|
172
|
+
/** 卡片间距(px),默认 16 */
|
|
173
|
+
gap?: number;
|
|
174
|
+
/** 配置后首格展示虚线新建占位卡(文案如「新建插件」) */
|
|
175
|
+
createText?: string;
|
|
176
|
+
/** 新建占位卡图标,默认 plus */
|
|
177
|
+
createIcon?: string;
|
|
178
|
+
/** 卡片是否整卡可点(透传 EntityCard hoverable),默认 false */
|
|
179
|
+
hoverable?: boolean;
|
|
180
|
+
/** 底部是否展示「共 N 个」计数,默认 false */
|
|
181
|
+
showCount?: boolean;
|
|
182
|
+
/** 空数据文案(默认 i18n pactor.table.empty) */
|
|
183
|
+
emptyText?: string;
|
|
184
|
+
/** 通用:根节点 class(与内置样式合并) */
|
|
185
|
+
className?: string;
|
|
186
|
+
/** 通用:根节点内联样式 */
|
|
187
|
+
style?: CSSProperties;
|
|
188
|
+
/** 整卡点击,参数 { item, index } */
|
|
189
|
+
onItemClick?: (event: {
|
|
190
|
+
item: CardListItem;
|
|
191
|
+
index: number;
|
|
192
|
+
}) => void;
|
|
193
|
+
/** 卡内操作按钮点击,参数 { key, text, item, index } */
|
|
194
|
+
onItemAction?: (event: {
|
|
195
|
+
key: string;
|
|
196
|
+
text: string;
|
|
197
|
+
item: CardListItem;
|
|
198
|
+
index: number;
|
|
199
|
+
}) => void;
|
|
200
|
+
/** 新建占位卡点击 */
|
|
201
|
+
onCreateClick?: () => void;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* CardList 卡片列表(business 目录):响应式网格渲染实体摘要卡,
|
|
205
|
+
* 支持首格新建占位卡、空状态与结果计数;交互经 events 编排
|
|
206
|
+
* (onItemClick / onItemAction / onCreateClick,参数经 ${event} 读取)。
|
|
207
|
+
*/
|
|
208
|
+
declare function CardList({ items, columns, gap, createText, createIcon, hoverable, showCount, emptyText, className, style, onItemClick, onItemAction, onCreateClick, }: CardListProps): react.JSX.Element;
|
|
209
|
+
|
|
210
|
+
/** 过滤 pill 项(全部 / 会议 / 来自设备 / 未整理…) */
|
|
211
|
+
interface RecordingFilterItem {
|
|
212
|
+
key: string;
|
|
213
|
+
label: string;
|
|
214
|
+
}
|
|
215
|
+
/** 录音条目状态语义色(缺省 secondary 弱提示灰) */
|
|
216
|
+
type RecordingStatusType = Extract<TextType, 'success' | 'danger' | 'secondary'>;
|
|
217
|
+
/** 录音记录条目 */
|
|
218
|
+
interface RecordingItem {
|
|
219
|
+
id: string;
|
|
220
|
+
title: string;
|
|
221
|
+
/** 日期时间(如 07 月 28 日 14:02) */
|
|
222
|
+
time?: string;
|
|
223
|
+
/** 时长(如 42:18) */
|
|
224
|
+
duration?: string;
|
|
225
|
+
/** 状态标签(如 纪要已生成 / 上传失败 / 转写中);提供才渲染 */
|
|
226
|
+
status?: string;
|
|
227
|
+
/** 状态语义色:success(绿)/ danger(红)/ secondary(灰,缺省) */
|
|
228
|
+
statusType?: RecordingStatusType;
|
|
229
|
+
/** 条目图标(Icon 白名单),缺省 audio-lines */
|
|
230
|
+
icon?: string;
|
|
231
|
+
[key: string]: unknown;
|
|
232
|
+
}
|
|
233
|
+
/** 录音分组(今天 / 昨天 / 本周…) */
|
|
234
|
+
interface RecordingGroup {
|
|
235
|
+
key?: string;
|
|
236
|
+
label: string;
|
|
237
|
+
items: RecordingItem[];
|
|
238
|
+
}
|
|
239
|
+
/** 原文转写说话人段落 */
|
|
240
|
+
interface RecordingTranscriptSegment {
|
|
241
|
+
/** 说话人名(如 王原 / 发言人 1) */
|
|
242
|
+
speaker?: string;
|
|
243
|
+
/** 头像占位字(缺省取 speaker 首字符,无 speaker 为 ?) */
|
|
244
|
+
avatarText?: string;
|
|
245
|
+
/** 段起始时间戳(如 00:42),展示在行右 */
|
|
246
|
+
time?: string;
|
|
247
|
+
/** 已标记:行右展示「⚑ 已标记」徽标 */
|
|
248
|
+
marked?: boolean;
|
|
249
|
+
/** 段落正文 */
|
|
250
|
+
content?: string;
|
|
251
|
+
}
|
|
252
|
+
/** 修改发言人弹层的人员选项 */
|
|
253
|
+
interface RecordingSpeaker {
|
|
254
|
+
name: string;
|
|
255
|
+
/** 头像占位字(缺省取 name 首字符) */
|
|
256
|
+
avatarText?: string;
|
|
257
|
+
/** 角色 / 组织(如 产品负责人 · Hojo) */
|
|
258
|
+
role?: string;
|
|
259
|
+
/** 行右来源标签(如 参会人 / 自动识别 / 用户创建);提供才渲染 */
|
|
260
|
+
tag?: string;
|
|
261
|
+
}
|
|
262
|
+
/** 发言人修改(onSpeakerChange 事件载荷) */
|
|
263
|
+
interface RecordingSpeakerChange {
|
|
264
|
+
/** 段落索引(segments 下标) */
|
|
265
|
+
index: number;
|
|
266
|
+
/** 修改前发言人 */
|
|
267
|
+
previous?: string;
|
|
268
|
+
/** 修改后发言人姓名 */
|
|
269
|
+
name: string;
|
|
270
|
+
}
|
|
271
|
+
/** 分享内容选项(头部「分享」Popover 复选列表) */
|
|
272
|
+
interface RecordingShareOption {
|
|
273
|
+
key: string;
|
|
274
|
+
label: string;
|
|
275
|
+
/** 禁用(勾选态锁定,不可取消) */
|
|
276
|
+
disabled?: boolean;
|
|
277
|
+
}
|
|
278
|
+
/** 详情页签项;content 缺省且 key 命中 transcriptTabKey 时渲染 segments */
|
|
279
|
+
interface RecordingTabItem {
|
|
280
|
+
key: string;
|
|
281
|
+
label: string;
|
|
282
|
+
/** 页签自定义内容(React 元素或 DslNode),优先于内建转写段落 */
|
|
283
|
+
content?: DslNode | ReactNode;
|
|
284
|
+
}
|
|
285
|
+
/** 播放条数据;提供才渲染底部播放条 */
|
|
286
|
+
interface RecordingPlayer {
|
|
287
|
+
/** 当前进度文案(如 14:22) */
|
|
288
|
+
currentTime?: string;
|
|
289
|
+
/** 总时长文案(如 42:18) */
|
|
290
|
+
totalTime?: string;
|
|
291
|
+
/** 进度百分比(0-100) */
|
|
292
|
+
progress?: number;
|
|
293
|
+
}
|
|
294
|
+
/** 详细纪要 - 思维导图(中心节点 + 左右两侧子节点) */
|
|
295
|
+
interface RecordingSummaryMindmap {
|
|
296
|
+
/** 中心节点(深色胶囊) */
|
|
297
|
+
center: string;
|
|
298
|
+
/** 左侧节点 */
|
|
299
|
+
left?: string[];
|
|
300
|
+
/** 右侧节点 */
|
|
301
|
+
right?: string[];
|
|
302
|
+
}
|
|
303
|
+
/** 详细纪要 - 主要议题卡 */
|
|
304
|
+
interface RecordingSummaryTopic {
|
|
305
|
+
title: string;
|
|
306
|
+
content?: string;
|
|
307
|
+
}
|
|
308
|
+
/** 详细纪要 - 评审结论行(事项 / 会议结论 / 负责人) */
|
|
309
|
+
interface RecordingSummaryConclusion {
|
|
310
|
+
item: string;
|
|
311
|
+
conclusion?: string;
|
|
312
|
+
owner?: string;
|
|
313
|
+
}
|
|
314
|
+
/** 详细纪要 - 相关材料条目 */
|
|
315
|
+
interface RecordingSummaryMaterial {
|
|
316
|
+
id?: string;
|
|
317
|
+
title: string;
|
|
318
|
+
/** 右侧元信息(如 7 月 21 日 · 文档) */
|
|
319
|
+
meta?: string;
|
|
320
|
+
/** 左侧图标(Icon 白名单),缺省 file-text */
|
|
321
|
+
icon?: string;
|
|
322
|
+
[key: string]: unknown;
|
|
323
|
+
}
|
|
324
|
+
/** 详细纪要 - 待办事项条目 */
|
|
325
|
+
interface RecordingSummaryTodo {
|
|
326
|
+
id?: string;
|
|
327
|
+
title: string;
|
|
328
|
+
/** 右侧归属(如 李珂 · 本周) */
|
|
329
|
+
owner?: string;
|
|
330
|
+
/** 完成态(绿色对勾);作为非受控选中态的初始值(点击可切换) */
|
|
331
|
+
done?: boolean;
|
|
332
|
+
[key: string]: unknown;
|
|
333
|
+
}
|
|
334
|
+
/** 详细纪要 - 底部操作项(复制 / 分享 / 赞 / 踩…),点击经 onSummaryAction 传出 key */
|
|
335
|
+
interface RecordingSummaryAction {
|
|
336
|
+
key: string;
|
|
337
|
+
/** 图标名(Icon 白名单) */
|
|
338
|
+
icon?: string;
|
|
339
|
+
}
|
|
340
|
+
/** AI 解读 - 章节速览条目(时间戳 + 标题 + 解读正文) */ interface RecordingInsightChapter {
|
|
341
|
+
/** 章节起始时间戳(如 00:05) */
|
|
342
|
+
time?: string;
|
|
343
|
+
title: string;
|
|
344
|
+
content?: string;
|
|
345
|
+
}
|
|
346
|
+
/** AI 解读 - 观点分析条目(发言人视角观点) */
|
|
347
|
+
interface RecordingInsightViewpoint {
|
|
348
|
+
/** 发言人名(如 李珂) */
|
|
349
|
+
speaker: string;
|
|
350
|
+
/** 头像占位字(缺省取 speaker 首字符) */
|
|
351
|
+
avatarText?: string;
|
|
352
|
+
/** 行右标签(如「自动识别」);缺省「自动识别」,置空字符串不渲染 */
|
|
353
|
+
tag?: string;
|
|
354
|
+
/** 观点加粗前缀(如「数据优先」) */
|
|
355
|
+
label?: string;
|
|
356
|
+
/** 观点正文 */
|
|
357
|
+
content?: string;
|
|
358
|
+
}
|
|
359
|
+
/** AI 解读结构化内容(insightTabKey 页签内建渲染,各段提供才展示) */
|
|
360
|
+
interface RecordingInsight {
|
|
361
|
+
/** 视角横幅标题(如「AI 判断你负责产品战略与关键业务决策」) */
|
|
362
|
+
perspectiveTitle?: string;
|
|
363
|
+
/** 视角横幅右上操作文案(如「修改」);提供才渲染,点击打开内建解读身份弹层 */
|
|
364
|
+
perspectiveActionLabel?: string;
|
|
365
|
+
/** 解读身份弹层文本受控值(提供即受控,配合 onPerspectiveApply 闭环) */
|
|
366
|
+
perspectiveInput?: string;
|
|
367
|
+
/** 解读身份弹层文本非受控初始值 */
|
|
368
|
+
defaultPerspectiveInput?: string;
|
|
369
|
+
/** 解读身份弹层标题,缺省「修改解读身份」 */
|
|
370
|
+
perspectiveDialogTitle?: string;
|
|
371
|
+
/** 解读身份弹层说明,缺省「用自然语言说明你在本次会议中的身份与关注点。」 */
|
|
372
|
+
perspectiveDialogHint?: string;
|
|
373
|
+
/** 解读身份弹层输入框占位文案 */
|
|
374
|
+
perspectivePlaceholder?: string;
|
|
375
|
+
/** 解读身份弹层取消按钮文案,缺省「取消」 */
|
|
376
|
+
perspectiveCancelLabel?: string;
|
|
377
|
+
/** 解读身份弹层确定按钮文案,缺省「应用身份」 */
|
|
378
|
+
perspectiveConfirmLabel?: string;
|
|
379
|
+
/** 视角横幅说明(如「本页会从决策者视角解读会议…」) */
|
|
380
|
+
perspectiveHint?: string;
|
|
381
|
+
/** 基础信息段标题,缺省「基础信息」 */
|
|
382
|
+
basicsTitle?: string;
|
|
383
|
+
/** 基础信息正文 */
|
|
384
|
+
basics?: string;
|
|
385
|
+
/** 章节速览段标题,缺省「章节速览与解读」 */
|
|
386
|
+
chaptersTitle?: string;
|
|
387
|
+
/** 章节速览条目 */
|
|
388
|
+
chapters?: RecordingInsightChapter[];
|
|
389
|
+
/** 观点分析段标题,缺省「观点分析」 */
|
|
390
|
+
viewpointsTitle?: string;
|
|
391
|
+
/** 观点分析条目 */
|
|
392
|
+
viewpoints?: RecordingInsightViewpoint[];
|
|
393
|
+
/** 底部操作项(如复制 / 分享 / 赞 / 踩);提供才渲染操作条 */
|
|
394
|
+
actions?: RecordingSummaryAction[];
|
|
395
|
+
}
|
|
396
|
+
/** 知识记忆 - 条目(标题 + 正文卡片) */
|
|
397
|
+
interface RecordingMemoryItem {
|
|
398
|
+
title: string;
|
|
399
|
+
content?: string;
|
|
400
|
+
}
|
|
401
|
+
/** 知识记忆 - 分组(客观事实 / 决策 / 核心观点…;标题自动拼接条目计数) */
|
|
402
|
+
interface RecordingMemoryGroup {
|
|
403
|
+
key?: string;
|
|
404
|
+
label: string;
|
|
405
|
+
items: RecordingMemoryItem[];
|
|
406
|
+
}
|
|
407
|
+
/** 知识记忆结构化内容(memoryTabKey 页签内建渲染,各段提供才展示) */
|
|
408
|
+
interface RecordingMemory {
|
|
409
|
+
/** 分组列表;组标题展示为「label · 条目数」 */
|
|
410
|
+
groups?: RecordingMemoryGroup[];
|
|
411
|
+
/** 底部操作项(如复制 / 分享 / 赞 / 踩);提供才渲染操作条 */
|
|
412
|
+
actions?: RecordingSummaryAction[];
|
|
413
|
+
}
|
|
414
|
+
/** 翻译 - 双语对照段落(说话人原文 + 译文) */
|
|
415
|
+
interface RecordingTranslationSegment {
|
|
416
|
+
/** 说话人名(如 王原) */
|
|
417
|
+
speaker?: string;
|
|
418
|
+
/** 头像占位字(缺省取 speaker 首字符,无 speaker 为 ?) */
|
|
419
|
+
avatarText?: string;
|
|
420
|
+
/** 原文 */
|
|
421
|
+
source?: string;
|
|
422
|
+
/** 译文 */
|
|
423
|
+
target?: string;
|
|
424
|
+
}
|
|
425
|
+
/** 翻译 - 语言选项(原文语言识别 / 译文语言选择弹层条目) */
|
|
426
|
+
interface RecordingLanguageOption {
|
|
427
|
+
key: string;
|
|
428
|
+
label: string;
|
|
429
|
+
}
|
|
430
|
+
/** 翻译语种变更(onLanguageChange 事件载荷) */
|
|
431
|
+
interface RecordingLanguageChange {
|
|
432
|
+
/** 原文语言识别选中 key */
|
|
433
|
+
source?: string;
|
|
434
|
+
/** 原文语言识别选中项文案 */
|
|
435
|
+
sourceLabel?: string;
|
|
436
|
+
/** 译文语言选择选中 key */
|
|
437
|
+
target?: string;
|
|
438
|
+
/** 译文语言选择选中项文案 */
|
|
439
|
+
targetLabel?: string;
|
|
440
|
+
}
|
|
441
|
+
/** 翻译结构化内容(translationTabKey 页签内建渲染) */
|
|
442
|
+
interface RecordingTranslation {
|
|
443
|
+
/** 语言选择器文案(如「自动判断 → English」);提供才渲染选择器 */
|
|
444
|
+
languageLabel?: string;
|
|
445
|
+
/** 译文列标题(如「译文 · 英语」),缺省「译文」 */
|
|
446
|
+
targetLabel?: string;
|
|
447
|
+
/** 双语对照段落 */
|
|
448
|
+
segments?: RecordingTranslationSegment[];
|
|
449
|
+
/** 原文语言识别选项(弹层左列);与 targetLanguages 任一提供即启用语种弹层 */
|
|
450
|
+
sourceLanguages?: RecordingLanguageOption[];
|
|
451
|
+
/** 译文语言选择选项(弹层右列) */
|
|
452
|
+
targetLanguages?: RecordingLanguageOption[];
|
|
453
|
+
/** 原文语言受控选中 key(提供即受控,配合 onLanguageChange 闭环) */
|
|
454
|
+
sourceLanguage?: string;
|
|
455
|
+
/** 译文语言受控选中 key */
|
|
456
|
+
targetLanguage?: string;
|
|
457
|
+
/** 原文语言非受控初始选中 key,缺省首项 */
|
|
458
|
+
defaultSourceLanguage?: string;
|
|
459
|
+
/** 译文语言非受控初始选中 key,缺省首项 */
|
|
460
|
+
defaultTargetLanguage?: string;
|
|
461
|
+
/** 语种弹层标题,缺省「选择翻译语言」 */
|
|
462
|
+
languageDialogTitle?: string;
|
|
463
|
+
/** 弹层左列标题,缺省「原文语言识别」 */
|
|
464
|
+
sourceLanguagesTitle?: string;
|
|
465
|
+
/** 弹层右列标题,缺省「译文语言选择」 */
|
|
466
|
+
targetLanguagesTitle?: string;
|
|
467
|
+
/** 弹层取消按钮文案,缺省「取消」 */
|
|
468
|
+
cancelLabel?: string;
|
|
469
|
+
/** 弹层确定按钮文案,缺省「确定」 */
|
|
470
|
+
confirmLabel?: string;
|
|
471
|
+
/** 底部操作项(如复制 / 分享 / 赞 / 踩);提供才渲染操作条 */
|
|
472
|
+
actions?: RecordingSummaryAction[];
|
|
473
|
+
}
|
|
474
|
+
/** 详细纪要结构化内容(summaryTabKey 页签内建渲染,各段提供才展示) */
|
|
475
|
+
interface RecordingSummary {
|
|
476
|
+
/** 思维导图段标题,缺省「思维导图」 */
|
|
477
|
+
mindmapTitle?: string;
|
|
478
|
+
/** 思维导图段右上操作文案(如「查看思维导图」);提供才渲染 */
|
|
479
|
+
mindmapActionLabel?: string;
|
|
480
|
+
/** 思维导图节点 */
|
|
481
|
+
mindmap?: RecordingSummaryMindmap;
|
|
482
|
+
/** 会议概况段标题,缺省「会议概况」 */
|
|
483
|
+
overviewTitle?: string;
|
|
484
|
+
/** 会议概况正文 */
|
|
485
|
+
overview?: string;
|
|
486
|
+
/** 主要议题段标题,缺省「主要议题」 */
|
|
487
|
+
topicsTitle?: string;
|
|
488
|
+
/** 主要议题卡(两列网格) */
|
|
489
|
+
topics?: RecordingSummaryTopic[];
|
|
490
|
+
/** 评审结论段标题,缺省「评审结论与后续安排」 */
|
|
491
|
+
conclusionsTitle?: string;
|
|
492
|
+
/** 评审结论表行 */
|
|
493
|
+
conclusions?: RecordingSummaryConclusion[];
|
|
494
|
+
/** 后续说明段标题(如「资源缺口与后续」);提供 followUp 时展示 */
|
|
495
|
+
followUpTitle?: string;
|
|
496
|
+
/** 后续说明正文 */
|
|
497
|
+
followUp?: string;
|
|
498
|
+
/** 相关材料段标题,缺省「相关材料」 */
|
|
499
|
+
materialsTitle?: string;
|
|
500
|
+
/** 相关材料条目 */
|
|
501
|
+
materials?: RecordingSummaryMaterial[];
|
|
502
|
+
/** 待办事项段标题,缺省「待办事项」 */
|
|
503
|
+
todosTitle?: string;
|
|
504
|
+
/** 待办事项条目 */
|
|
505
|
+
todos?: RecordingSummaryTodo[];
|
|
506
|
+
/** 底部操作项(如复制 / 分享 / 赞 / 踩);提供才渲染操作条 */
|
|
507
|
+
actions?: RecordingSummaryAction[];
|
|
508
|
+
}
|
|
509
|
+
interface RecordingPageProps {
|
|
510
|
+
/** 左列列表标题,缺省「录音记录列表」 */
|
|
511
|
+
listTitle?: string;
|
|
512
|
+
/** 列表标题右侧操作文案(如「选择」);提供才渲染,点击进入多选模式 */
|
|
513
|
+
selectLabel?: string;
|
|
514
|
+
/** 多选模式标题右侧操作文案,缺省「完成」 */
|
|
515
|
+
selectDoneLabel?: string;
|
|
516
|
+
/** 多选模式全选文案,缺省「全选」 */
|
|
517
|
+
selectAllLabel?: string;
|
|
518
|
+
/** 多选模式已选计数文案({count} 占位),缺省「已选 {count} 条」 */
|
|
519
|
+
selectedCountText?: string;
|
|
520
|
+
/** 多选模式底部删除按钮文案,缺省「删除」 */
|
|
521
|
+
deleteLabel?: string;
|
|
522
|
+
/** 删除二次确认弹层标题,缺省「删除录音」 */
|
|
523
|
+
deleteConfirmTitle?: string;
|
|
524
|
+
/** 删除二次确认弹层正文({count} 占位选中条数),缺省「确定删除选中的 {count} 条录音吗?删除后不可恢复。」 */
|
|
525
|
+
deleteConfirmText?: string;
|
|
526
|
+
/** 删除二次确认取消按钮文案,缺省「取消」 */
|
|
527
|
+
deleteCancelLabel?: string;
|
|
528
|
+
/** 删除二次确认确定按钮文案,缺省「删除」 */
|
|
529
|
+
deleteConfirmLabel?: string;
|
|
530
|
+
/** 多选模式选中录音 id 列表(提供即受控,配合 onRecordingSelectionChange 闭环) */
|
|
531
|
+
selectedRecordingIds?: string[];
|
|
532
|
+
/** 多选模式非受控初始选中 id 列表,缺省空 */
|
|
533
|
+
defaultSelectedRecordingIds?: string[];
|
|
534
|
+
/** 多选模式勾选变化事件,传出完整选中 id 列表 */
|
|
535
|
+
onRecordingSelectionChange?: (ids: string[]) => void;
|
|
536
|
+
/** 多选模式「删除」点击后先弹二次确认弹层,确认经 onDeleteRecordings 传出选中 id 列表 */
|
|
537
|
+
onDeleteRecordings?: (ids: string[]) => void;
|
|
538
|
+
/** 「选择」点击事件(同时进入多选模式) */
|
|
539
|
+
onSelectClick?: () => void;
|
|
540
|
+
/** 过滤 pill 组(缺省不渲染) */
|
|
541
|
+
filters?: RecordingFilterItem[];
|
|
542
|
+
/** 过滤受控选中 key(提供即受控,配合 onFilterChange 闭环) */
|
|
543
|
+
activeFilterKey?: string;
|
|
544
|
+
/** 过滤非受控初始选中 key,缺省首项 */
|
|
545
|
+
defaultActiveFilterKey?: string;
|
|
546
|
+
/** 过滤切换事件,传出 key */
|
|
547
|
+
onFilterChange?: (key: string) => void;
|
|
548
|
+
/** 处理中横幅主文案(如「3 条录音处理中」);提供才渲染横幅 */
|
|
549
|
+
processingText?: string;
|
|
550
|
+
/** 处理中横幅副文案(如「另有 3 条处理失败」) */
|
|
551
|
+
processingHint?: string;
|
|
552
|
+
/** 处理中横幅点击事件 */
|
|
553
|
+
onProcessingClick?: () => void;
|
|
554
|
+
/** 新建录音按钮文案,缺省「开始新录音」;置 null 不渲染 */
|
|
555
|
+
newRecordingLabel?: string | null;
|
|
556
|
+
/** 新建录音点击事件 */
|
|
557
|
+
onNewRecording?: () => void;
|
|
558
|
+
/** 录音分组列表(今天 / 昨天 / 本周…) */
|
|
559
|
+
groups?: RecordingGroup[];
|
|
560
|
+
/** 选中录音 id(提供即受控,配合 onSelectRecording 闭环) */
|
|
561
|
+
activeRecordingId?: string;
|
|
562
|
+
/** 非受控初始选中录音 id */
|
|
563
|
+
defaultActiveRecordingId?: string;
|
|
564
|
+
/** 录音条目点击事件,传出 id */
|
|
565
|
+
onSelectRecording?: (id: string) => void;
|
|
566
|
+
/** 左列宽度(px),缺省 300 */
|
|
567
|
+
listWidth?: number;
|
|
568
|
+
/** 列表空数据文案 */
|
|
569
|
+
emptyText?: string;
|
|
570
|
+
/** 右列详情标题(通常为当前录音标题) */
|
|
571
|
+
title?: string;
|
|
572
|
+
/** 标题下元信息(如 07 月 28 日 14:02 · 42:18) */
|
|
573
|
+
meta?: string;
|
|
574
|
+
/** 头部右侧「编辑」文案;提供才渲染 */
|
|
575
|
+
editLabel?: string;
|
|
576
|
+
/** 头部右侧「分享」按钮文案;提供才渲染 */
|
|
577
|
+
shareLabel?: string;
|
|
578
|
+
/** 分享内容选项(Popover 复选列表);提供非空时「分享」点击打开内建 Popover */
|
|
579
|
+
shareOptions?: RecordingShareOption[];
|
|
580
|
+
/** 分享内容受控选中 key 列表(提供即受控,配合 onShareConfirm 闭环) */
|
|
581
|
+
shareSelectedKeys?: string[];
|
|
582
|
+
/** 分享内容非受控初始选中 key 列表,缺省全部选项 */
|
|
583
|
+
defaultShareSelectedKeys?: string[];
|
|
584
|
+
/** 分享 Popover 标题,缺省「选择分享内容」 */
|
|
585
|
+
sharePopoverTitle?: string;
|
|
586
|
+
/** 分享 Popover 取消按钮文案,缺省「取消」 */
|
|
587
|
+
shareCancelLabel?: string;
|
|
588
|
+
/** 分享 Popover 确定按钮文案,缺省「确定」 */
|
|
589
|
+
shareConfirmLabel?: string;
|
|
590
|
+
/** 分享对话框标题,缺省「分享会议内容」 */
|
|
591
|
+
shareDialogTitle?: string;
|
|
592
|
+
/** 分享对话框链接;提供才渲染链接行 */
|
|
593
|
+
shareLink?: string;
|
|
594
|
+
/** 复制链接按钮文案,缺省「复制链接」 */
|
|
595
|
+
shareCopyLinkLabel?: string;
|
|
596
|
+
/** 复制成功后的短暂按钮文案,缺省「已复制」 */
|
|
597
|
+
shareCopiedLabel?: string;
|
|
598
|
+
/** 邮件按钮文案,缺省「邮件」 */
|
|
599
|
+
shareMailLabel?: string;
|
|
600
|
+
/** 系统分享按钮文案,缺省「系统分享」 */
|
|
601
|
+
shareSystemLabel?: string;
|
|
602
|
+
/** 分享 Popover「确定」事件,传出选中内容 key 列表(同时打开分享对话框) */
|
|
603
|
+
onShareConfirm?: (keys: string[]) => void;
|
|
604
|
+
/** 分享对话框渠道点击事件,传出 'copyLink' | 'mail' | 'system' */
|
|
605
|
+
onShareChannel?: (channel: string) => void;
|
|
606
|
+
/** 编辑点击事件 */
|
|
607
|
+
onEdit?: () => void;
|
|
608
|
+
/** 分享点击事件(提供 shareOptions 时点击同时打开内建 Popover) */
|
|
609
|
+
onShare?: () => void;
|
|
610
|
+
/** 详情页签(原文转写 / 详细纪要 / AI 解读…);缺省不渲染页签 */
|
|
611
|
+
tabs?: RecordingTabItem[];
|
|
612
|
+
/** 页签受控激活 key(提供即受控,配合 onTabChange 闭环) */
|
|
613
|
+
activeTabKey?: string;
|
|
614
|
+
/** 页签非受控初始激活 key,缺省首项 */
|
|
615
|
+
defaultActiveTabKey?: string;
|
|
616
|
+
/** 页签切换事件,传出 key */
|
|
617
|
+
onTabChange?: (key: string) => void;
|
|
618
|
+
/** 原文转写页签 key,缺省 transcript:该页签渲染 segments 说话人段落 */
|
|
619
|
+
transcriptTabKey?: string;
|
|
620
|
+
/** 原文转写说话人段落 */
|
|
621
|
+
segments?: RecordingTranscriptSegment[];
|
|
622
|
+
/** 修改发言人弹层的人员选项列表(参会人 / 自动识别 / 用户创建…) */
|
|
623
|
+
speakers?: RecordingSpeaker[];
|
|
624
|
+
/** 修改发言人弹层标题,缺省「修改发言人」 */
|
|
625
|
+
speakerDialogTitle?: string;
|
|
626
|
+
/** 修改发言人弹层说明,缺省「选择参会信息、已识别人员或你曾手动创建的联系人。」 */
|
|
627
|
+
speakerDialogHint?: string;
|
|
628
|
+
/** 修改发言人弹层姓名输入框占位,缺省「输入姓名」 */
|
|
629
|
+
speakerInputPlaceholder?: string;
|
|
630
|
+
/** 修改发言人弹层确定按钮文案,缺省「应用姓名」 */
|
|
631
|
+
speakerApplyLabel?: string;
|
|
632
|
+
/** 发言人修改事件(点段落改名铅笔,弹层「应用姓名」触发),传出 { index, previous, name } */
|
|
633
|
+
onSpeakerChange?: (change: RecordingSpeakerChange) => void;
|
|
634
|
+
/** 详细纪要结构化内容(summaryTabKey 页签内建渲染) */
|
|
635
|
+
summary?: RecordingSummary;
|
|
636
|
+
/** 详细纪要页签 key,缺省 summary */
|
|
637
|
+
summaryTabKey?: string;
|
|
638
|
+
/** 「查看思维导图」点击事件 */
|
|
639
|
+
onMindmapAction?: () => void;
|
|
640
|
+
/** 相关材料条目点击事件,传出 id(无 id 传 index) */
|
|
641
|
+
onMaterialClick?: (id: string | number) => void;
|
|
642
|
+
/** 待办事项条目点击事件,传出 id(无 id 传 index);点击同时在组件内切换选中态 */
|
|
643
|
+
onTodoClick?: (id: string | number) => void;
|
|
644
|
+
/** 待办选中 id 列表(提供即受控,配合 onTodoSelectionChange 闭环;无 id 用行索引) */
|
|
645
|
+
selectedTodoIds?: (string | number)[];
|
|
646
|
+
/** 待办非受控初始选中 id 列表,缺省取 done=true 的条目 */
|
|
647
|
+
defaultSelectedTodoIds?: (string | number)[];
|
|
648
|
+
/** 待办选中变更事件,传出变更后的完整选中 id 列表 */
|
|
649
|
+
onTodoSelectionChange?: (ids: (string | number)[]) => void;
|
|
650
|
+
/** 纪要底部操作点击事件,传出 action key */
|
|
651
|
+
onSummaryAction?: (key: string) => void;
|
|
652
|
+
/** AI 解读结构化内容(insightTabKey 页签内建渲染) */
|
|
653
|
+
insight?: RecordingInsight;
|
|
654
|
+
/** AI 解读页签 key,缺省 ai */
|
|
655
|
+
insightTabKey?: string;
|
|
656
|
+
/** 视角横幅「修改」点击事件(点击同时打开内建解读身份弹层) */
|
|
657
|
+
onPerspectiveEdit?: () => void;
|
|
658
|
+
/** 解读身份弹层「应用身份」事件,传出文本值 */
|
|
659
|
+
onPerspectiveApply?: (value: string) => void;
|
|
660
|
+
/** AI 解读底部操作点击事件,传出 action key */
|
|
661
|
+
onInsightAction?: (key: string) => void;
|
|
662
|
+
/** 知识记忆结构化内容(memoryTabKey 页签内建渲染) */
|
|
663
|
+
memory?: RecordingMemory;
|
|
664
|
+
/** 知识记忆页签 key,缺省 knowledge */
|
|
665
|
+
memoryTabKey?: string;
|
|
666
|
+
/** 知识记忆底部操作点击事件,传出 action key */
|
|
667
|
+
onMemoryAction?: (key: string) => void;
|
|
668
|
+
/** 翻译结构化内容(translationTabKey 页签内建渲染) */
|
|
669
|
+
translation?: RecordingTranslation;
|
|
670
|
+
/** 翻译页签 key,缺省 translation */
|
|
671
|
+
translationTabKey?: string;
|
|
672
|
+
/** 语言选择器点击事件(点击同时打开内建语种弹层) */
|
|
673
|
+
onLanguageClick?: () => void;
|
|
674
|
+
/** 语种弹层「确定」事件,传出 { source, sourceLabel, target, targetLabel } */
|
|
675
|
+
onLanguageChange?: (change: RecordingLanguageChange) => void;
|
|
676
|
+
/** 翻译底部操作点击事件,传出 action key */
|
|
677
|
+
onTranslationAction?: (key: string) => void;
|
|
678
|
+
/** 底部播放条数据;提供才渲染 */
|
|
679
|
+
player?: RecordingPlayer;
|
|
680
|
+
/** 播放 / 暂停点击事件 */
|
|
681
|
+
onPlay?: () => void;
|
|
682
|
+
/** 快退点击事件 */
|
|
683
|
+
onSkipBack?: () => void;
|
|
684
|
+
/** 快进点击事件 */
|
|
685
|
+
onSkipForward?: () => void;
|
|
686
|
+
/** 通用:根节点 class(与内置样式合并) */
|
|
687
|
+
className?: string;
|
|
688
|
+
/** 通用:根节点内联样式 */
|
|
689
|
+
style?: CSSProperties;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
/**
|
|
693
|
+
* RecordingPage 录音工作区(business 目录):左列录音记录列表(浅色
|
|
694
|
+
* 圆角块容器,无右边框——标题 / 过滤 pills / 处理状态横幅 / 新建录音钮 /
|
|
695
|
+
* 分组条目——条目含波形
|
|
696
|
+
* 图标、标题、状态标与日期时长,选中白底高亮;点「选择」进入多选模式:
|
|
697
|
+
* 条目左侧圆形复选框、顶部「已选 N 条 + 全选」、底部红色「删除」(点击先弹
|
|
698
|
+
* 二次确认弹层,确认才经 onDeleteRecordings 传出选中 id 列表),勾选
|
|
699
|
+
* 经 onRecordingSelectionChange 传出 id
|
|
700
|
+
* 列表),右列转写详情(标题 +
|
|
701
|
+
* 元信息头部、编辑 / 分享操作(提供 shareOptions 时分享按钮下方弹出
|
|
702
|
+
* 「选择分享内容」复选 Popover,确定经 onShareConfirm 传出选中 key 列表
|
|
703
|
+
* 并打开「分享会议内容」对话框:链接 + 复制链接 / 邮件 / 系统分享,渠道
|
|
704
|
+
* 点击经 onShareChannel 传出)、胶囊页签——transcriptTabKey 页签内建渲染
|
|
705
|
+
* segments 说话人段落(头像 + 姓名 + 改名铅笔(打开内建修改发言人弹层,
|
|
706
|
+
* 应用经 onSpeakerChange 传出 { index, previous, name })+ 时间戳 +
|
|
707
|
+
* 正文,可附「已标记」徽标),summaryTabKey 页签内建渲染 summary 结构化纪要
|
|
708
|
+
* (思维导图 / 会议概况 / 主要议题 / 评审结论表 / 后续说明 / 相关材料 /
|
|
709
|
+
* 待办事项(点击切换选中态,变更经 onTodoSelectionChange 传出完整选中
|
|
710
|
+
* id 列表)/ 底部操作条,各段提供才展示),insightTabKey 页签内建渲染
|
|
711
|
+
* insight AI 解读(视角横幅 / 解读身份弹层(修改入口,应用经
|
|
712
|
+
* onPerspectiveApply 传出文本)/ 基础信息 / 章节速览 / 观点分析 /
|
|
713
|
+
* 操作条),
|
|
714
|
+
* memoryTabKey 页签内建渲染 memory 知识记忆(分组卡片,组标题自动拼接
|
|
715
|
+
* 条目计数;底部操作条),translationTabKey 页签内建渲染 translation
|
|
716
|
+
* 翻译(语言选择器 + 内建语种弹层(原文语言识别 / 译文语言选择单选,
|
|
717
|
+
* 确定经 onLanguageChange 传出 { source, sourceLabel, target,
|
|
718
|
+
* targetLabel })+ 双语对照段落 + 操作条),其余页签可传 content 槽)、
|
|
719
|
+
* 底部播放条(快退 / 播放 /
|
|
720
|
+
* 快进 + 进度,提供 player 才渲染)。
|
|
721
|
+
* 数据与行为全部经 props / events 进出;过滤、选中录音与页签缺省非受控,
|
|
722
|
+
* 均可经受控 prop + change 事件闭环。常作为 ChatPage 的 content 槽使用。
|
|
723
|
+
* 实现拆分:list.tsx(左列列表)/ detail.tsx(右列详情)/
|
|
724
|
+
* summary.tsx(详细纪要)/ insight.tsx(AI 解读)/ memory.tsx(知识记忆)/
|
|
725
|
+
* translation.tsx(翻译)/ language-dialog.tsx(翻译语种弹层)/
|
|
726
|
+
* perspective-dialog.tsx(解读身份弹层)/ speaker-dialog.tsx(修改发言人
|
|
727
|
+
* 弹层)/ share.tsx(分享 Popover + 分享对话框)/ types.ts(公开类型)。
|
|
728
|
+
*/
|
|
729
|
+
declare function RecordingPage({ listTitle, selectLabel, selectDoneLabel, selectAllLabel, selectedCountText, deleteLabel, deleteConfirmTitle, deleteConfirmText, deleteCancelLabel, deleteConfirmLabel, selectedRecordingIds, defaultSelectedRecordingIds, onRecordingSelectionChange, onDeleteRecordings, onSelectClick, filters, activeFilterKey, defaultActiveFilterKey, onFilterChange, processingText, processingHint, onProcessingClick, newRecordingLabel, onNewRecording, groups, activeRecordingId, defaultActiveRecordingId, onSelectRecording, listWidth, emptyText, title, meta, editLabel, shareLabel, shareOptions, shareSelectedKeys, defaultShareSelectedKeys, sharePopoverTitle, shareCancelLabel, shareConfirmLabel, shareDialogTitle, shareLink, shareCopyLinkLabel, shareCopiedLabel, shareMailLabel, shareSystemLabel, onShareConfirm, onShareChannel, onEdit, onShare, tabs, activeTabKey, defaultActiveTabKey, onTabChange, transcriptTabKey, segments, speakers, speakerDialogTitle, speakerDialogHint, speakerInputPlaceholder, speakerApplyLabel, onSpeakerChange, summary, summaryTabKey, onMindmapAction, onMaterialClick, onTodoClick, selectedTodoIds, defaultSelectedTodoIds, onTodoSelectionChange, onSummaryAction, insight, insightTabKey, onPerspectiveEdit, onPerspectiveApply, onInsightAction, memory, memoryTabKey, onMemoryAction, translation, translationTabKey, onLanguageClick, onLanguageChange, onTranslationAction, player, onPlay, onSkipBack, onSkipForward, className, style, }: RecordingPageProps): react.JSX.Element;
|
|
730
|
+
|
|
731
|
+
/** 页脚链接:有 href 渲染 Link(SPA 语义),无 href 渲染 button 并触发 onLinkClick */
|
|
732
|
+
interface SiteFooterLink {
|
|
733
|
+
/** 链接文案 */
|
|
734
|
+
text: string;
|
|
735
|
+
/** 链接地址;配置后渲染为 <a>(站内 SPA 跳转 / 站外新窗口由 Link 语义处理) */
|
|
736
|
+
href?: string;
|
|
737
|
+
}
|
|
738
|
+
/** 链接列组:标题 + 组内链接列表 */
|
|
739
|
+
interface SiteFooterLinkGroup {
|
|
740
|
+
/** 组标题(如「产品」「资源」) */
|
|
741
|
+
title: string;
|
|
742
|
+
/** 组内链接 */
|
|
743
|
+
links: SiteFooterLink[];
|
|
744
|
+
}
|
|
745
|
+
/** 品牌区配置(左列:logo / 名称 / 描述) */
|
|
746
|
+
interface SiteFooterBrand {
|
|
747
|
+
/** Logo 图片地址 */
|
|
748
|
+
logo?: string;
|
|
749
|
+
/** 品牌名称 */
|
|
750
|
+
name?: string;
|
|
751
|
+
/** 品牌描述 / 副文案 */
|
|
752
|
+
description?: string;
|
|
753
|
+
}
|
|
754
|
+
interface SiteFooterProps {
|
|
755
|
+
/** 品牌区配置;未配置不渲染品牌列 */
|
|
756
|
+
brand?: SiteFooterBrand;
|
|
757
|
+
/** 链接列组;未配置不渲染链接区 */
|
|
758
|
+
groups?: SiteFooterLinkGroup[];
|
|
759
|
+
/** 底部栏版权文案(如「© 2026 Pactor」) */
|
|
760
|
+
copyright?: string;
|
|
761
|
+
/** 底部栏辅助链接(备案号 / 隐私协议 / 服务条款等) */
|
|
762
|
+
bottomLinks?: SiteFooterLink[];
|
|
763
|
+
/** 链接点击(仅无 href 的链接),回传 { key, text }(key 缺省取 text,对齐 EntityCardAction 约定) */
|
|
764
|
+
onLinkClick?: (event: {
|
|
765
|
+
key: string;
|
|
766
|
+
text: string;
|
|
767
|
+
}) => void;
|
|
768
|
+
/** 通用:根节点 class(与内置样式合并) */
|
|
769
|
+
className?: string;
|
|
770
|
+
/** 通用:根节点内联样式 */
|
|
771
|
+
style?: CSSProperties;
|
|
772
|
+
}
|
|
773
|
+
/**
|
|
774
|
+
* SiteFooter 站点页脚(business 级组合组件):
|
|
775
|
+
* 上层左侧品牌区(logo / 名称 / 描述)+ 右侧链接列组(标题 + 链接),
|
|
776
|
+
* 底部版权栏(copyright 左、辅助链接右,border 分隔);
|
|
777
|
+
* 与 Layout 子区域 Footer 区分(后者为页面骨架槽位,本组件为独立站点页脚资产)。
|
|
778
|
+
* 布局响应式:窄屏上下堆叠(主区 flex-col、底部栏居中堆叠),宽屏左右分栏。
|
|
779
|
+
*/
|
|
780
|
+
declare function SiteFooter({ brand, groups, copyright, bottomLinks, onLinkClick, className, style, }: SiteFooterProps): react.JSX.Element | null;
|
|
781
|
+
|
|
782
|
+
/** 候选字段(datasource.json 结构) */
|
|
783
|
+
interface ConditionFieldOption {
|
|
784
|
+
featureCode: string;
|
|
785
|
+
featureName: string;
|
|
786
|
+
/** DATE | STRING | NUMBER | BOOLEAN */
|
|
787
|
+
fieldType: string;
|
|
788
|
+
recommended?: boolean;
|
|
789
|
+
}
|
|
790
|
+
interface FieldConditionItem {
|
|
791
|
+
field: {
|
|
792
|
+
value?: string;
|
|
793
|
+
label?: string;
|
|
794
|
+
dataType?: string;
|
|
795
|
+
};
|
|
796
|
+
term: {
|
|
797
|
+
value?: string;
|
|
798
|
+
label?: string;
|
|
799
|
+
};
|
|
800
|
+
value?: any;
|
|
801
|
+
}
|
|
802
|
+
interface FieldConditionGroup {
|
|
803
|
+
relation: 'AND' | 'OR';
|
|
804
|
+
children: FieldConditionItem[];
|
|
805
|
+
}
|
|
806
|
+
interface FieldConditionValue {
|
|
807
|
+
relation: 'AND' | 'OR';
|
|
808
|
+
children: FieldConditionGroup[];
|
|
809
|
+
}
|
|
810
|
+
interface FieldConditionProps {
|
|
811
|
+
value?: FieldConditionValue;
|
|
812
|
+
onChange?: (value: FieldConditionValue) => void;
|
|
813
|
+
/** 候选字段(datasource.json 结构) */
|
|
814
|
+
fields?: ConditionFieldOption[];
|
|
815
|
+
disabled?: boolean;
|
|
816
|
+
/** 控件尺寸(默认 middle;行内字段/操作符/值控件统一按尺寸令牌渲染) */
|
|
817
|
+
size?: ControlSize;
|
|
818
|
+
}
|
|
819
|
+
declare function FieldCondition({ value, onChange, fields, disabled, size, }: FieldConditionProps): react.JSX.Element;
|
|
820
|
+
|
|
821
|
+
/**
|
|
822
|
+
* valueMapping 条目:描述模板中一个 ${key} / {{key}} 占位符的取值方式,
|
|
823
|
+
* 结构与表单项(FormFieldDefinition)一致。
|
|
824
|
+
*/
|
|
825
|
+
interface ExpressionMappingItem {
|
|
826
|
+
name?: string | null;
|
|
827
|
+
label?: string | null;
|
|
828
|
+
/**
|
|
829
|
+
* 控件类型:"select" 下拉框、"number" 数值输入、"fieldCondition" 条件组编辑器,
|
|
830
|
+
* 其他值(input、nodeType、edgeType 等)回退为文本输入框
|
|
831
|
+
*/
|
|
832
|
+
type?: string | null;
|
|
833
|
+
required?: boolean | null;
|
|
834
|
+
placeholder?: string | null;
|
|
835
|
+
/** select 的内联候选 */
|
|
836
|
+
options?: Array<{
|
|
837
|
+
label: string;
|
|
838
|
+
value: string;
|
|
839
|
+
}> | null;
|
|
840
|
+
/**
|
|
841
|
+
* select 的候选来源:匹配页面 optionSource 中的同名条目,
|
|
842
|
+
* 支持静态 { options };远程 { request, valueField, labelField } 条目
|
|
843
|
+
* 在本移植版中不支持(无 fetchApi 通道),按空候选处理。
|
|
844
|
+
*/
|
|
845
|
+
optionSource?: string | null;
|
|
846
|
+
/** 默认值 */
|
|
847
|
+
default?: any;
|
|
848
|
+
multiple?: boolean | null;
|
|
849
|
+
/**
|
|
850
|
+
* 校验规则(与 type 同级):pattern 为正则字符串,message 为失败提示;
|
|
851
|
+
* 与外层表单字段的 validation 同构,编辑态逐项校验,不通过则阻断提交
|
|
852
|
+
*/
|
|
853
|
+
validation?: {
|
|
854
|
+
pattern?: string | null;
|
|
855
|
+
message?: string | null;
|
|
856
|
+
} | null;
|
|
857
|
+
}
|
|
858
|
+
interface ExpressionEditorProps {
|
|
859
|
+
id?: string;
|
|
860
|
+
value?: string;
|
|
861
|
+
onChange?: (value: string) => void;
|
|
862
|
+
/**
|
|
863
|
+
* 表单值模板,如 "return ft.period(${a}, ${b})"。
|
|
864
|
+
* 占位符支持 ${key} 与 {{key}} 两种写法;DSL props 内联书写时须用 {{key}},
|
|
865
|
+
* 因为 ${ 会被 DSL 表达式引擎提前求值(后端数据 / state 透传的模板不受此限)。
|
|
866
|
+
*/
|
|
867
|
+
valueTemplate: string;
|
|
868
|
+
/** 模板占位符到控件的映射,key 与模板中 ${key} / {{key}} 对应 */
|
|
869
|
+
valueMapping?: Record<string, ExpressionMappingItem>;
|
|
870
|
+
/**
|
|
871
|
+
* 页面级 optionSource 集合,供 mapping 条目的 optionSource 匹配。
|
|
872
|
+
* 仅静态 { options } 条目生效;远程 { request } 条目被忽略(按空候选渲染)。
|
|
873
|
+
*/
|
|
874
|
+
optionSources?: Record<string, any>;
|
|
875
|
+
/** 字段标签:渲染在头部左侧,右侧为「编辑」按钮 */
|
|
876
|
+
label?: string | null;
|
|
877
|
+
/** 必填标记(label 后显示 *) */
|
|
878
|
+
required?: boolean;
|
|
879
|
+
readonly?: boolean;
|
|
880
|
+
/** 控件尺寸(默认 middle;编辑态子控件与表达式文本框统一按尺寸令牌渲染) */
|
|
881
|
+
size?: ControlSize;
|
|
882
|
+
/**
|
|
883
|
+
* 只读展示模式:以「表单控件」形态展示(控件禁用、隐藏编辑/确定/取消按钮),
|
|
884
|
+
* 供详情页等"只看不改"的场景复用同一套组件。
|
|
885
|
+
*/
|
|
886
|
+
viewOnly?: boolean;
|
|
887
|
+
className?: string;
|
|
888
|
+
/**
|
|
889
|
+
* 校验状态上报:编辑态存在未通过校验的草稿时为 true。
|
|
890
|
+
* 模板子字段的校验无法由外层表单 rules 感知,外层需据此在提交前阻断。
|
|
891
|
+
*/
|
|
892
|
+
onValidityChange?: (invalid: boolean) => void;
|
|
893
|
+
}
|
|
894
|
+
declare function ExpressionEditor({ id, value, onChange, valueTemplate, valueMapping, optionSources, label, required, readonly, viewOnly, size, className, onValidityChange, }: ExpressionEditorProps): react.JSX.Element | null;
|
|
895
|
+
|
|
896
|
+
type ConditionOpt = 'GREATER' | 'GREATER_EQUAL' | 'LESS_EQUAL' | 'LESS' | 'EQUAL' | 'IN' | 'NOT_IN' | 'UNEQUAL' | 'LIKE' | 'NULL' | 'HASVAL' | 'NOTNULL' | 'BETWEEN';
|
|
897
|
+
interface Condition {
|
|
898
|
+
key: number;
|
|
899
|
+
opt: ConditionOpt;
|
|
900
|
+
value?: string | number | (string | number)[];
|
|
901
|
+
score?: number;
|
|
902
|
+
}
|
|
903
|
+
interface RuleConfigValue {
|
|
904
|
+
score?: number;
|
|
905
|
+
ruleConditions: Condition[];
|
|
906
|
+
}
|
|
907
|
+
interface RuleConfigProps {
|
|
908
|
+
value?: RuleConfigValue;
|
|
909
|
+
onChange?: (value: RuleConfigValue) => void;
|
|
910
|
+
disabled?: boolean;
|
|
911
|
+
/** 控件尺寸(默认 middle;权重/取值/评分输入与操作符下拉统一按尺寸令牌渲染) */
|
|
912
|
+
size?: ControlSize;
|
|
913
|
+
}
|
|
914
|
+
declare function RuleConfig({ value, onChange, disabled, size }: RuleConfigProps): react.JSX.Element;
|
|
915
|
+
|
|
916
|
+
interface RuleExpressionOption {
|
|
917
|
+
label: string;
|
|
918
|
+
value: string;
|
|
919
|
+
}
|
|
920
|
+
/** 组件值:expression 为表达式串(其中字段使用选项的 value),expressionLabel 为 label 组成的串,sourceField 为所有选中特征字段的 value 数组 */
|
|
921
|
+
interface RuleExpressionValue {
|
|
922
|
+
expression: string;
|
|
923
|
+
expressionLabel: string;
|
|
924
|
+
sourceField: string[];
|
|
925
|
+
}
|
|
926
|
+
interface RuleExpressionProps {
|
|
927
|
+
/** 特征字段候选(label 用于匹配与展示,value 写入 sourceField) */
|
|
928
|
+
options?: RuleExpressionOption[];
|
|
929
|
+
value?: RuleExpressionValue | string | null;
|
|
930
|
+
onChange?: (value: RuleExpressionValue) => void;
|
|
931
|
+
placeholder?: string;
|
|
932
|
+
disabled?: boolean;
|
|
933
|
+
/** 控件尺寸(默认 middle;影响编辑区内边距与字号,高度仍随内容增长) */
|
|
934
|
+
size?: ControlSize;
|
|
935
|
+
id?: string;
|
|
936
|
+
className?: string;
|
|
937
|
+
}
|
|
938
|
+
/**
|
|
939
|
+
* 规则表达式编辑器:contentEditable 富文本输入框,高度随内容增长。
|
|
940
|
+
* 选中的字段渲染为 contentEditable=false 的整体 chip,
|
|
941
|
+
* 光标可用鼠标点击或 ←/→ 在任意位置自由定位(chip 作为原子单位越过);
|
|
942
|
+
* 输入时按光标前的尾部词匹配特征字段 label 候选,↑/↓ 选择、回车选中;
|
|
943
|
+
* chip 旁的退格/Delete 整体删除 chip;未匹配的输入保留为字符串。
|
|
944
|
+
*/
|
|
945
|
+
declare function RuleExpression({ options, value, onChange, placeholder, disabled, size, id, className, }: RuleExpressionProps): react.JSX.Element;
|
|
946
|
+
|
|
947
|
+
interface ScriptFunctionParameter {
|
|
948
|
+
name: string;
|
|
949
|
+
type?: string;
|
|
950
|
+
description?: string;
|
|
951
|
+
}
|
|
952
|
+
/** 自定义函数定义:联想时以 snippet 形式补全(如 SUM(${1:field})) */
|
|
953
|
+
interface ScriptFunctionDef {
|
|
954
|
+
name: string;
|
|
955
|
+
description?: string;
|
|
956
|
+
parameters?: ScriptFunctionParameter[];
|
|
957
|
+
}
|
|
958
|
+
/** 自定义变量定义:联想时直接补全变量名 */
|
|
959
|
+
interface ScriptVariableDef {
|
|
960
|
+
name: string;
|
|
961
|
+
type?: string;
|
|
962
|
+
description?: string;
|
|
963
|
+
}
|
|
964
|
+
interface ScriptEditorProps {
|
|
965
|
+
id?: string;
|
|
966
|
+
value?: string;
|
|
967
|
+
onChange?: (value: string) => void;
|
|
968
|
+
placeholder?: string;
|
|
969
|
+
/** 语法模式,默认 python;未知值回退为纯文本 */
|
|
970
|
+
language?: string;
|
|
971
|
+
functions?: ScriptFunctionDef[];
|
|
972
|
+
variables?: ScriptVariableDef[];
|
|
973
|
+
readonly?: boolean;
|
|
974
|
+
/** 编辑器高度(px),默认 160 */
|
|
975
|
+
height?: number;
|
|
976
|
+
className?: string;
|
|
977
|
+
}
|
|
978
|
+
declare function ScriptEditor({ id, value, onChange, placeholder, language, functions, variables, readonly, height, className, }: ScriptEditorProps): react.JSX.Element;
|
|
979
|
+
|
|
980
|
+
/**
|
|
981
|
+
* DSL 类型名 → 区块组件映射。
|
|
982
|
+
* 表单类组件(FieldCondition / ExpressionEditor / RuleConfig / RuleExpression /
|
|
983
|
+
* ScriptEditor)为 value/onChange 受控:DSL 用 props.value + events.onChange
|
|
984
|
+
* 读写 ${event}。
|
|
985
|
+
*/
|
|
986
|
+
declare const blockComponents: {
|
|
987
|
+
readonly Login: typeof Login;
|
|
988
|
+
readonly EntityCard: typeof EntityCard;
|
|
989
|
+
readonly CardList: typeof CardList;
|
|
990
|
+
readonly RecordingPage: typeof RecordingPage;
|
|
991
|
+
readonly SiteFooter: typeof SiteFooter;
|
|
992
|
+
readonly FieldCondition: typeof FieldCondition;
|
|
993
|
+
readonly ExpressionEditor: typeof ExpressionEditor;
|
|
994
|
+
readonly RuleConfig: typeof RuleConfig;
|
|
995
|
+
readonly RuleExpression: typeof RuleExpression;
|
|
996
|
+
readonly ScriptEditor: typeof ScriptEditor;
|
|
997
|
+
};
|
|
998
|
+
/** 把区块组件集按 DSL 类型名注册到给定 ComponentRegistry(可与 ui 主注册表合并) */
|
|
999
|
+
declare function registerBlockComponents(registry: ComponentRegistry): void;
|
|
1000
|
+
/** 创建只注册了区块组件集的新 ComponentRegistry */
|
|
1001
|
+
declare function createBlockComponentRegistry(): ComponentRegistry;
|
|
1002
|
+
|
|
1003
|
+
export { CardList, type CardListItem, type CardListProps, type Condition, type ConditionFieldOption, type ConditionOpt, EntityCard, type EntityCardAction, type EntityCardProps, type EntityCardTag, ExpressionEditor, type ExpressionEditorProps, type ExpressionMappingItem, FieldCondition, type FieldConditionGroup, type FieldConditionItem, type FieldConditionProps, type FieldConditionValue, Login, type LoginBrandInfo, type LoginLink, type LoginProps, type LoginVariant, type RecordingFilterItem, type RecordingGroup, type RecordingInsight, type RecordingInsightChapter, type RecordingInsightViewpoint, type RecordingItem, type RecordingLanguageChange, type RecordingLanguageOption, type RecordingMemory, type RecordingMemoryGroup, type RecordingMemoryItem, RecordingPage, type RecordingPageProps, type RecordingPlayer, type RecordingShareOption, type RecordingSpeaker, type RecordingSpeakerChange, type RecordingStatusType, type RecordingSummary, type RecordingSummaryAction, type RecordingSummaryConclusion, type RecordingSummaryMaterial, type RecordingSummaryMindmap, type RecordingSummaryTodo, type RecordingSummaryTopic, type RecordingTabItem, type RecordingTranscriptSegment, type RecordingTranslation, type RecordingTranslationSegment, RuleConfig, type RuleConfigProps, type RuleConfigValue, RuleExpression, type RuleExpressionOption, type RuleExpressionProps, type RuleExpressionValue, ScriptEditor, type ScriptEditorProps, type ScriptFunctionDef, type ScriptFunctionParameter, type ScriptVariableDef, SiteFooter, type SiteFooterBrand, type SiteFooterLink, type SiteFooterLinkGroup, type SiteFooterProps, blockComponents, createBlockComponentRegistry, registerBlockComponents };
|