weboffice-js-sdk 2.0.3-beta.7 → 2.0.3-beta.9

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 CHANGED
@@ -152,6 +152,35 @@ command.onCommandClick = async () => {
152
152
  }
153
153
  ```
154
154
 
155
+ ### Docs `slashMenu` 初始化参数
156
+
157
+ `connect()` 支持为 docs 套件透传 `slashMenu` 初始化参数。该配置只在 docs 文件类型下生效,`button.callback` 会保留在宿主页执行,iframe 内点击按钮后会通过 SDK 通道回调到宿主。
158
+
159
+ ```ts
160
+ const sdk = await connect({
161
+ ...options,
162
+ slashMenu: {
163
+ entries: [
164
+ {
165
+ name: 'aiMenu',
166
+ type: 'entry',
167
+ label: '智能 AI',
168
+ children: [
169
+ {
170
+ name: 'openDocsAiPanel',
171
+ type: 'button',
172
+ label: '打开 AI 面板',
173
+ callback: () => {
174
+ console.log('docs slash menu clicked')
175
+ }
176
+ }
177
+ ]
178
+ }
179
+ ]
180
+ }
181
+ })
182
+ ```
183
+
155
184
  ### 协作者模块使用说明
156
185
 
157
186
  当 iframe 套件开启协作者能力后(依赖 `ENABLE_SDK_COLLABORATORS_MODULE` 开关),shimo-js-sdk 使用方可按以下方式接入:
@@ -8,40 +8,11 @@ import { ContainerMethod, ContainerRect, DisableMentionCards, FileType, InvokeMe
8
8
  import { Document, DocumentPro, Presentation, Spreadsheet, Table, Form, Flowchart } from '.';
9
9
  import { EmptyPageOptions } from './types/EmptyPage';
10
10
  import { BaseEditor } from './types/BaseEditor';
11
- export interface HeaderBarsCommandDefinition {
12
- id: string;
13
- section?: string;
14
- order?: number;
15
- label?: string;
16
- visible?: boolean;
17
- disabled?: boolean;
18
- editable?: boolean;
19
- type?: 'action' | 'structural';
20
- renderType?: string;
21
- src?: string;
22
- onClick?: () => void | Promise<void>;
23
- }
24
- export interface HeaderBarsCommandState extends HeaderBarsCommandDefinition {
25
- type: 'action' | 'structural';
26
- }
27
- export interface HeaderBarsCommandRef {
28
- readonly id: string;
29
- visible: boolean;
30
- disabled: boolean;
31
- editable?: boolean;
32
- onCommandClick?: () => void | Promise<void>;
33
- getState: () => HeaderBarsCommandState | undefined;
34
- }
35
- export type HeaderBarsTitleChangeHandler = (title: string) => void | Promise<void>;
36
- export interface HeaderBarsFacade {
37
- visible: boolean;
38
- onTitleChange?: HeaderBarsTitleChangeHandler;
39
- getVisible: () => Promise<boolean>;
40
- setVisible: (visible: boolean) => Promise<void>;
41
- addCommand: (command: HeaderBarsCommandDefinition, posCommand: string, pos?: 'before' | 'after') => Promise<boolean>;
42
- getCommand: (id: string) => HeaderBarsCommandRef;
43
- listViewCommands: () => Promise<HeaderBarsCommandState[]>;
44
- }
11
+ import { SlashMenuOptions } from './types/SlashMenu';
12
+ import type { CollaboratorFacade, CommentsFacade, ContentFacade, DiscussionFacade, DocsSearchFacade, DocsSelectionFacade, DocsSettingsFacade, DocsSidebarFacade, DocsTOCsFacade, DocsTablesFacade, ExternalAppFacade, HistoryFacade, LocksFacade, MentionFacade, PresentationEventSubscriptionFacade, PresentationFacade, PresentationSelectionFacade, PresentationSlidesFacade, PresentationTextFacade, PresentationZoomFacade, SheetChartsFacade, SheetSelectionsFacade, SheetWorkbookFacade, SheetWorksheetFacade, TitleFacade, VersionFacade } from './OfficeSDK.facade.types';
13
+ import type { HeaderBarsFacade } from './OfficeSDK.headerBars';
14
+ export * from './OfficeSDK.facade.types';
15
+ export * from './OfficeSDK.headerBars';
45
16
  export declare const MessageEvent: typeof InvokeMethod;
46
17
  export declare class OfficeSDK extends TinyEmitter {
47
18
  /**
@@ -66,10 +37,121 @@ export declare class OfficeSDK extends TinyEmitter {
66
37
  */
67
38
  spreadsheet?: Spreadsheet.Editor;
68
39
  /**
69
- * 专业幻灯片编辑器实例
70
- * @deprecated - 用 `sdk.getEditor<T>()` 替代
40
+ * 当前套件支持的标题能力。
41
+ */
42
+ title?: TitleFacade;
43
+ /**
44
+ * 当前套件支持的历史能力。
45
+ */
46
+ history?: HistoryFacade;
47
+ /**
48
+ * 当前套件支持的评论能力。
49
+ */
50
+ comments?: CommentsFacade;
51
+ /**
52
+ * 当前套件支持的讨论能力。
53
+ */
54
+ discussion?: DiscussionFacade;
55
+ /**
56
+ * 当前套件支持的编写者侧边栏能力。
57
+ */
58
+ collaborator?: CollaboratorFacade;
59
+ /**
60
+ * 当前套件支持的第三方应用插入能力。
61
+ */
62
+ externalApp?: ExternalAppFacade;
63
+ /**
64
+ * 当前套件支持的锁定能力。
65
+ */
66
+ locks?: LocksFacade;
67
+ /**
68
+ * 当前套件支持的提及定位能力。
69
+ */
70
+ mention?: MentionFacade;
71
+ /**
72
+ * 当前套件支持的内容写入能力。
73
+ */
74
+ content?: ContentFacade;
75
+ /**
76
+ * 当前套件支持的版本能力。
77
+ */
78
+ version?: VersionFacade;
79
+ /**
80
+ * 当前套件支持的演示能力。
81
+ */
82
+ presentation?: PresentationFacade;
83
+ /**
84
+ * 当前套件支持的选区能力。
85
+ */
86
+ selection?: DocsSelectionFacade | PresentationSelectionFacade;
87
+ /**
88
+ * 当前套件支持的搜索能力。
89
+ */
90
+ search?: DocsSearchFacade;
91
+ /**
92
+ * 当前套件支持的目录能力。
93
+ */
94
+ TOCs?: DocsTOCsFacade;
95
+ /**
96
+ * 当前套件支持的侧边栏能力。
97
+ */
98
+ sidebar?: DocsSidebarFacade;
99
+ /**
100
+ * 当前套件支持的表格集合能力。
101
+ */
102
+ tables?: DocsTablesFacade;
103
+ /**
104
+ * 当前套件支持的设置能力。
105
+ */
106
+ settings?: DocsSettingsFacade;
107
+ /**
108
+ * 当前套件支持的工作簿能力。
109
+ */
110
+ workbook?: SheetWorkbookFacade;
111
+ /**
112
+ * 当前套件支持的当前工作表能力。
113
+ */
114
+ activeSheet?: SheetWorksheetFacade;
115
+ /**
116
+ * 当前套件支持的图表能力。
117
+ */
118
+ charts?: SheetChartsFacade;
119
+ /**
120
+ * 当前套件支持的多选区能力。
121
+ */
122
+ selections?: SheetSelectionsFacade;
123
+ /**
124
+ * 当前套件支持的幻灯片集合能力。
71
125
  */
72
- presentation?: Presentation.Editor;
126
+ slides?: PresentationSlidesFacade;
127
+ /**
128
+ * 当前套件支持的文本能力。
129
+ */
130
+ text?: PresentationTextFacade;
131
+ /**
132
+ * 当前套件支持的缩放能力。
133
+ */
134
+ zoom?: PresentationZoomFacade;
135
+ /**
136
+ * 当前套件支持的事件订阅能力。
137
+ */
138
+ eventSubscription?: PresentationEventSubscriptionFacade;
139
+ /**
140
+ * 当前套件支持的批量变更能力。
141
+ */
142
+ batchChanges?: <T>(callback: () => T | Promise<T>) => Promise<Awaited<T>>;
143
+ /**
144
+ * 当前套件支持的导出能力。
145
+ */
146
+ export?: (type: string) => Promise<void>;
147
+ /**
148
+ * 当前套件支持的打印能力。
149
+ */
150
+ print?: () => Promise<void>;
151
+ /**
152
+ * 当前套件支持的聚焦能力。
153
+ */
154
+ setFocus?: (isFocus: boolean) => Promise<void>;
73
155
  /**
74
156
  * 应用表格编辑器实例
75
157
  * @deprecated - 用 `sdk.getEditor<T>()` 替代
@@ -113,6 +195,8 @@ export declare class OfficeSDK extends TinyEmitter {
113
195
  private headerBarsVisible;
114
196
  private readonly headerBarsCommands;
115
197
  private readonly headerBarsCommandOverrides;
198
+ private readonly slashMenuCallbacks;
199
+ private readonly editorFacadeCallbacks;
116
200
  private readonly headerBarsCommandRefs;
117
201
  private headerBarsTitleChangeHandler?;
118
202
  private headerBarsTitleChangeSubscribed;
@@ -127,6 +211,36 @@ export declare class OfficeSDK extends TinyEmitter {
127
211
  constructor(options: OfficeSDKOptions);
128
212
  get fileType(): FileType;
129
213
  get readyState(): ReadyState;
214
+ /**
215
+ * 判断当前实例是否应该向 iframe 暴露 slashMenu。
216
+ * 输入:无,读取当前文件类型与 startParams.type 提示。
217
+ * 输出:仅在明确是 docs,或尚未拿到文件类型且没有明确非 docs 提示时返回 true。
218
+ */
219
+ private shouldExposeSlashMenu;
220
+ /**
221
+ * 从 startParams 中提取文件类型提示。
222
+ * 输入:无。
223
+ * 输出:标准化后的 type 字符串;若未配置则返回 undefined。
224
+ */
225
+ private getSlashMenuTypeHint;
226
+ /**
227
+ * 将宿主传入的 slashMenu 转成可跨 iframe 传输的纯数据结构。
228
+ * 输入:当前实例上的 `OfficeSDKOptions.slashMenu`。
229
+ * 输出:去除真实函数、附带 callbackId 的 slashMenu 配置;不适用时返回 undefined。
230
+ */
231
+ private createSerializedSlashMenu;
232
+ /**
233
+ * 递归序列化 slashMenu 菜单项,并登记 button callback。
234
+ * 输入:菜单项数组与当前递归路径。
235
+ * 输出:仅包含结构化克隆安全字段的菜单项数组。
236
+ */
237
+ private serializeSlashMenuItems;
238
+ /**
239
+ * 为 slashMenu button callback 生成稳定 id 并注册到内存表。
240
+ * 输入:菜单路径与可选 callback。
241
+ * 输出:注册后的 callbackId;若未提供 callback 则返回 undefined。
242
+ */
243
+ private registerSlashMenuCallback;
130
244
  getEditor<T extends BaseEditor | Document.Editor | DocumentPro.Editor | Presentation.Editor | Spreadsheet.Editor | Form.Editor | Flowchart.Editor | Table.Editor = BaseEditor>(): T;
131
245
  /**
132
246
  * 更新鉴权 signature 和 token
@@ -158,6 +272,10 @@ export declare class OfficeSDK extends TinyEmitter {
158
272
  * 比如受浏览器限制无法发出 postMessage() 时,Promise 将会一直 pending。
159
273
  */
160
274
  init(): Promise<void>;
275
+ /**
276
+ * 等待 SDK 进入 Ready 状态。若已 ready,则直接返回。
277
+ */
278
+ ready(): Promise<void>;
161
279
  private initIframe;
162
280
  private runPreloadHandshake;
163
281
  private initChannel;
@@ -174,10 +292,60 @@ export declare class OfficeSDK extends TinyEmitter {
174
292
  private ensureHeaderBarsTitleChangeSubscription;
175
293
  private invokeHeaderBars;
176
294
  private syncHeaderBarsCommands;
295
+ private createHeaderBarsHost;
177
296
  private applyHeaderBarsChanged;
178
297
  private syncHeaderBarsVisible;
179
298
  private setHeaderBarsVisible;
180
299
  private getHeaderBarsCommandRef;
300
+ /**
301
+ * 注册一个可供 iframe 侧反向调用的 facade callback。
302
+ * 输入:宿主侧 callback。
303
+ * 输出:供跨窗协议使用的 callbackId。
304
+ */
305
+ private registerEditorFacadeCallback;
306
+ /**
307
+ * 注销已注册的 facade callback。
308
+ * 输入:callbackId。
309
+ * 输出:无。
310
+ */
311
+ private unregisterEditorFacadeCallback;
312
+ /**
313
+ * 创建基于 method-path 的模块 facade。
314
+ * 输入:模块前缀与少量自定义实现覆盖。
315
+ * 输出:其余方法按 `${prefix}.${method}` 自动桥接。
316
+ */
317
+ private createEditorFacadeModule;
318
+ /**
319
+ * 为 value-based locator 创建本地对象 facade。
320
+ * 输入:method-path 前缀、locator 和静态属性。
321
+ * 输出:支持继续远程调用的本地 facade。
322
+ */
323
+ private createValueObjectFacade;
324
+ /**
325
+ * 注册一个基于 callback 协议的 listener。
326
+ * 输入:注册方法名与监听器。
327
+ * 输出:供宿主侧取消注册的函数。
328
+ */
329
+ private registerEditorFacadeListener;
330
+ private installRootFacade;
331
+ /**
332
+ * 重置根级能力命名空间,避免不同套件间字段残留。
333
+ * 输入:无。
334
+ * 输出:将所有 facade 字段置空。
335
+ */
336
+ private clearRootFacade;
337
+ /**
338
+ * 调用显式 editor facade method-path。
339
+ * 输入:method-path 与参数数组。
340
+ * 输出:返回 iframe 侧序列化结果。
341
+ */
342
+ private invokeEditorFacade;
343
+ /**
344
+ * 为结构化 facade 建立 editor 事件监听,并返回取消监听函数。
345
+ * 输入:事件名与监听器。
346
+ * 输出:返回一个可取消当前监听的函数。
347
+ */
348
+ private listenEditorEvent;
181
349
  private initEditor;
182
350
  private shouldHandleMessage;
183
351
  private getContainerRect;
@@ -419,6 +587,12 @@ export interface OfficeSDKOptions extends Omit<ContainerMethods, 'getContainerRe
419
587
  * 控制 headerbar 组件是否展示,false 表示隐藏。
420
588
  */
421
589
  headerBarsVisible?: boolean;
590
+ /**
591
+ * docs 斜杠菜单配置。
592
+ * 仅 docs 文件类型生效;`button.callback` 实际运行在宿主页,
593
+ * 会在 iframe 内点击菜单按钮后通过 postMessage/channel 回调触发。
594
+ */
595
+ slashMenu?: SlashMenuOptions;
422
596
  /**
423
597
  * 是否显示内置的加载动画,只在静态资源加载到编辑器渲染这个阶段显示
424
598
  */
@@ -0,0 +1,15 @@
1
+ import { FileType } from 'weboffice-js-sdk-shared';
2
+ import type { OfficeSDKRootFacadeState } from './OfficeSDK.facade.types';
3
+ type EditorFacadeCallback = (...args: unknown[]) => unknown | Promise<unknown>;
4
+ interface FacadeHost {
5
+ fileType: FileType;
6
+ invokeEditorFacade<T>(method: string, args?: unknown[]): Promise<T>;
7
+ listenEditorEvent<T>(event: string, listener: (payload: T) => void): () => void;
8
+ createEditorFacadeModule<T extends object>(prefix: string, staticFields?: Partial<T>): T;
9
+ createValueObjectFacade<T extends object>(prefix: string, locator: Record<string, unknown>, staticFields: Partial<T>): T;
10
+ registerEditorFacadeListener<T>(method: string, listener: (payload: T) => void): () => void;
11
+ registerEditorFacadeCallback(callback: EditorFacadeCallback): string;
12
+ unregisterEditorFacadeCallback(callbackId: string): void;
13
+ }
14
+ export declare function buildRootFacadeState(host: FacadeHost): OfficeSDKRootFacadeState;
15
+ export {};