@netless/forge-slide 0.1.0 → 0.1.1-alpha.1

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/Slide.d.ts CHANGED
@@ -19,15 +19,71 @@ export interface SlideEvents {
19
19
  * @param {number} pageIndex 页面索引
20
20
  */
21
21
  renderEnd: (pageIndex: number) => void;
22
+ /**
23
+ * 主序列动画完成时触发
24
+ * @param {number} animateIndex 主动画索引
25
+ */
26
+ mainSeqStepEnd: (animateIndex: number) => void;
27
+ /**
28
+ * 主序列动画开始时触发
29
+ * @param {number} animateIndex 主动画索引
30
+ */
31
+ mainSeqStepStart: (animateIndex: number) => void;
22
32
  }
23
33
  export declare class SlideForge extends EventEmitter<SlideEvents> implements ApplicationInstanceType {
24
34
  readonly view: HTMLDivElement;
25
35
  readonly permissions: ForgeSlidePermissions;
36
+ readonly footView: HTMLDivElement;
37
+ /**
38
+ * 当前页面索引, 从 0 开始
39
+ */
26
40
  readonly pageIndex: number;
41
+ /**
42
+ * 总页数
43
+ */
44
+ readonly pageCount: number;
27
45
  /**
28
46
  * 切换到参数指定页面, index 从 0 开始
29
47
  * @param {number} index 页面索引
30
48
  */
31
- goto: (index: number) => Promise<void>;
49
+ goto: (index: number) => void;
50
+ /**
51
+ * 下一步, 如果已经是本页的最后一步, 则切换到下一页
52
+ */
53
+ nextStep: () => void;
54
+ /**
55
+ * 上一步, 如果已经是本页的第一步, 则切换到上一页
56
+ */
57
+ prevStep: () => void;
58
+ /**
59
+ * 下一页, 如果是最后一页, 则不执行任何操作
60
+ */
61
+ nextPage: () => void;
62
+ /**
63
+ * 上一页, 如果是第一页, 则不执行任何操作
64
+ */
65
+ prevPage: () => void;
66
+ /**
67
+ * 切换侧栏显示状态
68
+ */
69
+ sideBarToggle: () => void;
70
+ /**
71
+ * 获取预览图图片内容, base64 编码
72
+ * @param {number} index 页面索引
73
+ */
74
+ imgContent: (index: number) => Promise<string>;
75
+ /**
76
+ * 获取预览图图片链接
77
+ * @param {number} index 页面索引
78
+ */
79
+ imgUrl: (index: number) => Promise<string>;
80
+ /**
81
+ * 获取预览图图片尺寸
82
+ * @param {number} index 页面索引
83
+ */
84
+ imgSize: (index: number) => Promise<{
85
+ width: number;
86
+ height: number;
87
+ }>;
32
88
  }
33
89
  //# sourceMappingURL=Slide.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Slide.d.ts","sourceRoot":"","sources":["../src/Slide.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,MAAM,WAAW,WAAW;IACxB;;;;;OAKG;IACH,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7F;;;OAGG;IACH,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;OAGG;IACH,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAGD,qBAAa,UAAW,SAAQ,YAAY,CAAC,WAAW,CAAE,YAAW,uBAAuB;IAExF,SAAgB,IAAI,EAAG,cAAc,CAAC;IACtC,SAAgB,WAAW,EAAG,qBAAqB,CAAC;IACpD,SAAgB,SAAS,EAAG,MAAM,CAAC;IAEnC;;;OAGG;IACI,IAAI,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACjD"}
1
+ {"version":3,"file":"Slide.d.ts","sourceRoot":"","sources":["../src/Slide.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,MAAM,WAAW,WAAW;IACxB;;;;;OAKG;IACH,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7F;;;OAGG;IACH,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;OAGG;IACH,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC;;;OAGG;IACH,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/C;;;OAGG;IACH,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAGD,qBAAa,UAAW,SAAQ,YAAY,CAAC,WAAW,CAAE,YAAW,uBAAuB;IAExF,SAAgB,IAAI,EAAG,cAAc,CAAC;IACtC,SAAgB,WAAW,EAAG,qBAAqB,CAAC;IACpD,SAAgB,QAAQ,EAAG,cAAc,CAAC;IAC1C;;OAEG;IACH,SAAgB,SAAS,EAAG,MAAM,CAAC;IACnC;;OAEG;IACH,SAAgB,SAAS,EAAG,MAAM,CAAC;IACnC;;;OAGG;IACI,IAAI,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC;;OAEG;IACI,QAAQ,EAAG,MAAM,IAAI,CAAA;IAC5B;;OAEG;IACI,QAAQ,EAAG,MAAM,IAAI,CAAA;IAC5B;;OAEG;IACI,QAAQ,EAAG,MAAM,IAAI,CAAA;IAC5B;;OAEG;IACI,QAAQ,EAAG,MAAM,IAAI,CAAA;IAC5B;;OAEG;IACI,aAAa,EAAG,MAAM,IAAI,CAAA;IAEjC;;;OAGG;IACI,UAAU,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD;;;OAGG;IACI,MAAM,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACI,OAAO,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CAChF"}
@@ -14,6 +14,7 @@ export declare const Slide_APP_NAME = "forge_slide";
14
14
  export declare class SlideApplication extends AbstractApplication<SlideApplicationOption, SlideForge> {
15
15
  static applicationName: string;
16
16
  readonly name: string;
17
+ readonly emitter: SlideForge;
17
18
  private whiteboardApp;
18
19
  private whiteboard;
19
20
  private rootView;
@@ -25,8 +26,13 @@ export declare class SlideApplication extends AbstractApplication<SlideApplicati
25
26
  private sideBar;
26
27
  private slide;
27
28
  private currentSlideIndex;
29
+ private taskId;
30
+ private prefix;
28
31
  constructor();
29
- emitter: SlideForge;
32
+ private getPreviewImage;
33
+ private getImageUrl;
34
+ private getImageSize;
35
+ private getImageContent;
30
36
  private applySlideState;
31
37
  private onSlideEventHandler;
32
38
  initialize(option: SlideApplicationOption): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"SlideApplication.d.ts","sourceRoot":"","sources":["../src/SlideApplication.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAOnC,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C,qBAAa,gBAAiB,SAAQ,mBAAmB,CAAC,sBAAsB,EAAE,UAAU,CAAC;IAEzF,MAAM,CAAC,eAAe,SAAkB;IAExC,SAAgB,IAAI,EAAE,MAAM,CAAkB;IAE9C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,gBAAgB,CAAiD;IACzE,OAAO,CAAC,mBAAmB,CAAiD;IAC5E,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,iBAAiB,CAAa;;IA6GtC,OAAO,EAAE,UAAU,CAAoB;IAEvC,OAAO,CAAC,eAAe,CAiBtB;IAED,OAAO,CAAC,mBAAmB,CAS1B;IAEY,UAAU,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwHtE,OAAO,CAAC,OAAO;IAIF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CASxC"}
1
+ {"version":3,"file":"SlideApplication.d.ts","sourceRoot":"","sources":["../src/SlideApplication.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAQnC,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC;AASD,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAE5C,qBAAa,gBAAiB,SAAQ,mBAAmB,CAAC,sBAAsB,EAAE,UAAU,CAAC;IAEzF,MAAM,CAAC,eAAe,SAAkB;IAExC,SAAgB,IAAI,EAAE,MAAM,CAAkB;IAC9C,SAAgB,OAAO,EAAE,UAAU,CAAoB;IAEvD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,gBAAgB,CAAiD;IACzE,OAAO,CAAC,mBAAmB,CAAiD;IAC5E,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAc;;YAkLd,eAAe;YAuBf,WAAW;YAIX,YAAY;YAiBZ,eAAe;IAiB7B,OAAO,CAAC,eAAe,CAYtB;IAED,OAAO,CAAC,mBAAmB,CAS1B;IAEY,UAAU,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoItE,OAAO,CAAC,OAAO;IAIF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CASxC"}
package/dist/index.esm.js CHANGED
@@ -66585,12 +66585,55 @@ import EventEmitter14 from "eventemitter3";
66585
66585
  var SlideForge = class extends EventEmitter14 {
66586
66586
  view;
66587
66587
  permissions;
66588
+ footView;
66589
+ /**
66590
+ * 当前页面索引, 从 0 开始
66591
+ */
66588
66592
  pageIndex;
66593
+ /**
66594
+ * 总页数
66595
+ */
66596
+ pageCount;
66589
66597
  /**
66590
66598
  * 切换到参数指定页面, index 从 0 开始
66591
66599
  * @param {number} index 页面索引
66592
66600
  */
66593
66601
  goto;
66602
+ /**
66603
+ * 下一步, 如果已经是本页的最后一步, 则切换到下一页
66604
+ */
66605
+ nextStep;
66606
+ /**
66607
+ * 上一步, 如果已经是本页的第一步, 则切换到上一页
66608
+ */
66609
+ prevStep;
66610
+ /**
66611
+ * 下一页, 如果是最后一页, 则不执行任何操作
66612
+ */
66613
+ nextPage;
66614
+ /**
66615
+ * 上一页, 如果是第一页, 则不执行任何操作
66616
+ */
66617
+ prevPage;
66618
+ /**
66619
+ * 切换侧栏显示状态
66620
+ */
66621
+ sideBarToggle;
66622
+ /**
66623
+ * 获取预览图图片内容, base64 编码
66624
+ * @param {number} index 页面索引
66625
+ */
66626
+ imgContent;
66627
+ /**
66628
+ * 获取预览图图片链接
66629
+ * @param {number} index 页面索引
66630
+ */
66631
+ imgUrl;
66632
+ /**
66633
+ * 获取预览图图片尺寸
66634
+ * @param {number} index 页面索引
66635
+ */
66636
+ imgSize;
66594
66637
  };
66595
66638
 
66596
66639
  // src/ForgeSlidePermession.ts
@@ -66934,10 +66977,12 @@ async function delay2(time) {
66934
66977
  }
66935
66978
 
66936
66979
  // src/SlideApplication.ts
66980
+ import { kvStore } from "@netless/forge-room";
66937
66981
  var Slide_APP_NAME = "forge_slide";
66938
66982
  var SlideApplication = class extends AbstractApplication2 {
66939
66983
  static applicationName = Slide_APP_NAME;
66940
66984
  name = Slide_APP_NAME;
66985
+ emitter = new SlideForge();
66941
66986
  whiteboardApp;
66942
66987
  whiteboard;
66943
66988
  rootView = document.createElement("div");
@@ -66949,8 +66994,11 @@ var SlideApplication = class extends AbstractApplication2 {
66949
66994
  sideBar;
66950
66995
  slide;
66951
66996
  currentSlideIndex = 0;
66997
+ taskId = "";
66998
+ prefix = "";
66952
66999
  constructor() {
66953
67000
  super();
67001
+ window.emitter = this.emitter;
66954
67002
  this.rootView.setAttribute("data-forge-app", Slide_APP_NAME);
66955
67003
  this.rootView.style.background = "#f0f0f0f0";
66956
67004
  this.rootView.style.overflow = "hidden";
@@ -66963,7 +67011,9 @@ var SlideApplication = class extends AbstractApplication2 {
66963
67011
  this.footer = new FooterView();
66964
67012
  this.sideBar = new SideBarView();
66965
67013
  this.sideBar.on("pageChange", (index) => {
66966
- this.slide.renderSlide(index);
67014
+ if (index > 0 && index <= this.slide.slideCount) {
67015
+ this.slide.renderSlide(index);
67016
+ }
66967
67017
  });
66968
67018
  this.footer.on("prevStep", () => {
66969
67019
  if (!this.permissions.hasPermission(1 /* changeStep */)) {
@@ -67032,28 +67082,147 @@ var SlideApplication = class extends AbstractApplication2 {
67032
67082
  return that.permissions;
67033
67083
  }
67034
67084
  });
67085
+ Object.defineProperty(this.emitter, "footView", {
67086
+ get() {
67087
+ return that.footer.root;
67088
+ }
67089
+ });
67035
67090
  Object.defineProperty(this.emitter, "pageIndex", {
67036
67091
  get() {
67037
67092
  return that.currentSlideIndex;
67038
67093
  }
67039
67094
  });
67040
- Object.defineProperty(this.emitter, "goto", {
67095
+ Object.defineProperty(this.emitter, "pageCount", {
67041
67096
  get() {
67042
- return (index) => {
67043
- if (index > 0 && index < this.slide.slideCount) {
67044
- this.slide.renderSlide(index);
67045
- }
67046
- };
67097
+ return that.slide.slideCount;
67098
+ }
67099
+ });
67100
+ Object.defineProperty(this.emitter, "goto", {
67101
+ writable: false,
67102
+ enumerable: false,
67103
+ value: (pageIndex) => {
67104
+ this.sideBar.emit("pageChange", pageIndex);
67105
+ }
67106
+ });
67107
+ Object.defineProperty(this.emitter, "nextStep", {
67108
+ writable: false,
67109
+ enumerable: false,
67110
+ value: () => {
67111
+ this.footer.emit("nextStep");
67112
+ }
67113
+ });
67114
+ Object.defineProperty(this.emitter, "prevStep", {
67115
+ writable: false,
67116
+ enumerable: false,
67117
+ value: () => {
67118
+ this.footer.emit("prevStep");
67119
+ }
67120
+ });
67121
+ Object.defineProperty(this.emitter, "nextPage", {
67122
+ writable: false,
67123
+ enumerable: false,
67124
+ value: () => {
67125
+ this.footer.emit("nextPage");
67126
+ }
67127
+ });
67128
+ Object.defineProperty(this.emitter, "prevPage", {
67129
+ writable: false,
67130
+ enumerable: false,
67131
+ value: () => {
67132
+ this.footer.emit("prevPage");
67133
+ }
67134
+ });
67135
+ Object.defineProperty(this.emitter, "sideBarToggle", {
67136
+ writable: false,
67137
+ enumerable: false,
67138
+ value: () => {
67139
+ this.footer.emit("sideBarToggle");
67140
+ }
67141
+ });
67142
+ Object.defineProperty(this.emitter, "imgContent", {
67143
+ writable: false,
67144
+ enumerable: false,
67145
+ value: (pageIndex) => {
67146
+ return this.getImageContent(pageIndex);
67147
+ }
67148
+ });
67149
+ Object.defineProperty(this.emitter, "imgUrl", {
67150
+ writable: false,
67151
+ enumerable: false,
67152
+ value: (pageIndex) => {
67153
+ return this.getImageUrl(pageIndex);
67154
+ }
67155
+ });
67156
+ Object.defineProperty(this.emitter, "imgSize", {
67157
+ writable: false,
67158
+ enumerable: false,
67159
+ value: (pageIndex) => {
67160
+ return this.getImageSize(pageIndex);
67047
67161
  }
67048
67162
  });
67049
67163
  }
67050
- emitter = new SlideForge();
67164
+ async getPreviewImage(imageUrl) {
67165
+ const image = fetch(imageUrl);
67166
+ return await image.then((res) => res.blob()).then((blob) => {
67167
+ return new Promise((resolve) => {
67168
+ const reader = new FileReader();
67169
+ reader.onloadend = () => {
67170
+ const base64Data = reader.result;
67171
+ const img = document.createElement("img");
67172
+ img.src = base64Data;
67173
+ img.onload = () => {
67174
+ resolve({
67175
+ url: imageUrl,
67176
+ src: base64Data,
67177
+ width: img.width,
67178
+ height: img.height
67179
+ });
67180
+ };
67181
+ };
67182
+ reader.readAsDataURL(blob);
67183
+ });
67184
+ });
67185
+ }
67186
+ async getImageUrl(pageIndex) {
67187
+ return `${this.prefix}/${this.taskId}/preview/${pageIndex + 1}.png`;
67188
+ }
67189
+ async getImageSize(pageIndex) {
67190
+ const imageUrl = `${this.prefix}/${this.taskId}/preview/${pageIndex + 1}.png`;
67191
+ let preview = null;
67192
+ try {
67193
+ const result = await kvStore.getItem(imageUrl);
67194
+ preview = result ? JSON.parse(result) : null;
67195
+ } catch (e) {
67196
+ console.warn("kvStore getItem error", e);
67197
+ }
67198
+ if (preview) {
67199
+ return { width: preview.width, height: preview.height };
67200
+ }
67201
+ preview = await this.getPreviewImage(imageUrl);
67202
+ await kvStore.setItem(imageUrl, JSON.stringify(preview));
67203
+ return { width: preview.width, height: preview.height };
67204
+ }
67205
+ async getImageContent(pageIndex) {
67206
+ const imageUrl = `${this.prefix}/${this.taskId}/preview/${pageIndex + 1}.png`;
67207
+ let preview = null;
67208
+ try {
67209
+ const result = await kvStore.getItem(imageUrl);
67210
+ preview = result ? JSON.parse(result) : null;
67211
+ } catch (e) {
67212
+ console.warn("kvStore getItem error", e);
67213
+ }
67214
+ if (preview) {
67215
+ return preview.src;
67216
+ }
67217
+ preview = await this.getPreviewImage(imageUrl);
67218
+ await kvStore.setItem(imageUrl, JSON.stringify(preview));
67219
+ return preview.src;
67220
+ }
67051
67221
  applySlideState = async (slideState, lastDispatch) => {
67052
67222
  if (this.slide.slideState.currentSlideIndex < 0) {
67053
67223
  this.slide.emit(import_slide.SLIDE_EVENTS.syncReceive, lastDispatch);
67054
67224
  return;
67055
67225
  }
67056
- console.log("%cisEqual", "color: blue; font-size: 20px;", deepEqual(this.slide.slideState, slideState));
67057
67226
  if (this.slide.slideState.currentSlideIndex > 0 && deepEqual(this.slide.slideState, slideState)) {
67058
67227
  this.slide.emit(import_slide.SLIDE_EVENTS.syncReceive, lastDispatch);
67059
67228
  } else {
@@ -67073,6 +67242,8 @@ var SlideApplication = class extends AbstractApplication2 {
67073
67242
  }
67074
67243
  };
67075
67244
  async initialize(option) {
67245
+ this.prefix = option.prefix;
67246
+ this.taskId = option.taskId;
67076
67247
  const whiteboardApp = new WhiteboardApplication();
67077
67248
  whiteboardApp.roomDoc = this.roomDoc;
67078
67249
  whiteboardApp.appId = `${option.taskId}_wb`;
@@ -67106,7 +67277,6 @@ var SlideApplication = class extends AbstractApplication2 {
67106
67277
  this.contentContainer.appendChild(this.sideBar.root);
67107
67278
  if (option.inheritWhiteboardId) {
67108
67279
  whiteboardApp.linkToWhiteboard(option.inheritWhiteboardId);
67109
- console.log("inheritWhiteboardId", option.inheritWhiteboardId);
67110
67280
  }
67111
67281
  this.whiteboard.setViewModeToMain();
67112
67282
  this.slideContainer.setAttribute("builder", "slide-builder");
@@ -67129,14 +67299,22 @@ var SlideApplication = class extends AbstractApplication2 {
67129
67299
  dispatch: event
67130
67300
  });
67131
67301
  });
67302
+ this.slide.on("mainSeqStepStart", (animateIndex) => {
67303
+ this.emitter.emit("mainSeqStepStart", animateIndex);
67304
+ });
67305
+ this.slide.on("mainSeqStepEnd", (animateIndex) => {
67306
+ this.emitter.emit("mainSeqStepEnd", animateIndex);
67307
+ });
67132
67308
  this.slide.on("renderStart", (slideIndex) => {
67133
67309
  this.whiteboardApp.emitter.view.style.opacity = "0";
67134
67310
  this.whiteboardApp.emitter.addPage(`${slideIndex}`);
67135
67311
  this.whiteboardApp.emitter.gotoPage(`${slideIndex}`);
67312
+ this.emitter.emit("renderStart", slideIndex);
67136
67313
  });
67137
67314
  this.slide.on("renderEnd", (slideIndex) => {
67138
67315
  this.currentSlideIndex = slideIndex;
67139
67316
  this.whiteboardApp.emitter.view.style.opacity = "1";
67317
+ this.emitter.emit("renderEnd", slideIndex);
67140
67318
  });
67141
67319
  this.slide.on("stateChange", (state) => {
67142
67320
  this.getMap(this.name).set("slideState", state);
@@ -67144,6 +67322,7 @@ var SlideApplication = class extends AbstractApplication2 {
67144
67322
  this.getMap(this.name).observe(this.onSlideEventHandler);
67145
67323
  window.slide = this.slide;
67146
67324
  window.slideWhiteboard = this.whiteboardApp;
67325
+ window.forgeSlide = this;
67147
67326
  const syncSlide = this.getMap(this.name).get("slideState");
67148
67327
  if (syncSlide && syncSlide.taskId === option.taskId) {
67149
67328
  await this.slide.setSlideState(syncSlide);
@@ -67154,7 +67333,7 @@ var SlideApplication = class extends AbstractApplication2 {
67154
67333
  return this.userMap(userId);
67155
67334
  });
67156
67335
  this.permissions.on("change", (userId, flags, value) => {
67157
- console.log(userId, flags, value);
67336
+ this.emitter.emit("permissionChange", userId, flags, value);
67158
67337
  if (this.userId === userId) {
67159
67338
  if (flags.includes(4 /* clickAnim */)) {
67160
67339
  this.slideContainer.style.pointerEvents = "auto";