@netless/fastboard-core 0.2.11 → 0.3.0-canary.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/README.md +9 -0
- package/dist/index.d.ts +291 -3
- package/dist/index.js +257 -216
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +579 -14
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -12
- package/src/behaviors/{register-apps.ts → index.ts} +12 -7
- package/src/impl/{app.ts → FastboardApp.ts} +177 -50
- package/src/impl/FastboardPlayer.ts +201 -0
- package/src/impl/index.ts +4 -0
- package/src/index.ts +2 -3
- package/src/internal.ts +14 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/misc.ts +49 -0
- package/src/utils/store.ts +87 -0
- package/src/utils/uid.ts +12 -0
- package/src/utils/warn.ts +11 -0
- package/dist/chunk-IHDHV4XE.mjs +0 -538
- package/dist/chunk-IHDHV4XE.mjs.map +0 -1
- package/dist/minimal.d.ts +0 -286
- package/dist/minimal.js +0 -559
- package/dist/minimal.js.map +0 -1
- package/dist/minimal.mjs +0 -13
- package/dist/minimal.mjs.map +0 -1
- package/minimal.mjs +0 -1
- package/src/behaviors/register-slide.ts +0 -11
- package/src/helpers/emitter.ts +0 -21
- package/src/helpers/utils.ts +0 -78
- package/src/helpers/value.ts +0 -84
- package/src/impl/player.ts +0 -122
- package/src/minimal.ts +0 -163
package/dist/index.js
CHANGED
|
@@ -58,66 +58,89 @@ var __toCommonJS = /* @__PURE__ */ ((cache) => {
|
|
|
58
58
|
// src/index.ts
|
|
59
59
|
var src_exports = {};
|
|
60
60
|
__export(src_exports, {
|
|
61
|
-
|
|
61
|
+
FastboardApp: () => FastboardApp,
|
|
62
|
+
FastboardPlayer: () => FastboardPlayer,
|
|
63
|
+
convertedFileToScene: () => convertedFileToScene,
|
|
62
64
|
createFastboard: () => createFastboard,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
genUID: () => genUID,
|
|
66
|
+
getImageSize: () => getImageSize,
|
|
67
|
+
makeSlideParams: () => makeSlideParams,
|
|
68
|
+
readable: () => readable,
|
|
69
|
+
replayFastboard: () => replayFastboard,
|
|
70
|
+
warn: () => warn,
|
|
71
|
+
writable: () => writable
|
|
65
72
|
});
|
|
66
73
|
|
|
67
|
-
// src/
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
var DefaultApps = {
|
|
85
|
-
Monaco: {
|
|
86
|
-
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-monaco/0.1.12/dist/main.iife.js"
|
|
87
|
-
},
|
|
88
|
-
Countdown: {
|
|
89
|
-
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-countdown/0.0.2/dist/main.iife.js"
|
|
90
|
-
},
|
|
91
|
-
GeoGebra: {
|
|
92
|
-
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-geogebra/0.0.4/dist/main.iife.js",
|
|
93
|
-
appOptions: {
|
|
94
|
-
HTML5Codebase: "https://flat-storage-cn-hz.whiteboard.agora.io/GeoGebra/HTML5/5.0/web3d"
|
|
74
|
+
// src/utils/store.ts
|
|
75
|
+
function noop() {
|
|
76
|
+
}
|
|
77
|
+
function safe_not_equal(a, b) {
|
|
78
|
+
return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function";
|
|
79
|
+
}
|
|
80
|
+
function readable(value, start = noop) {
|
|
81
|
+
let stop;
|
|
82
|
+
const subscribers = /* @__PURE__ */ new Set();
|
|
83
|
+
function set(new_value) {
|
|
84
|
+
if (safe_not_equal(value, new_value)) {
|
|
85
|
+
value = new_value;
|
|
86
|
+
if (stop) {
|
|
87
|
+
for (const run of subscribers) {
|
|
88
|
+
run(value);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
95
91
|
}
|
|
96
|
-
},
|
|
97
|
-
EmbeddedPage: {
|
|
98
|
-
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-embedded-page/0.1.1/dist/main.iife.js"
|
|
99
|
-
},
|
|
100
|
-
Player: {
|
|
101
|
-
name: "NetlessAppMediaPlayer",
|
|
102
|
-
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-media-player/0.1.1/dist/main.iife.js"
|
|
103
92
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
const options = config[kind];
|
|
109
|
-
import_window_manager2.WindowManager.register(__spreadValues({ kind }, options));
|
|
93
|
+
function subscribe(run) {
|
|
94
|
+
subscribers.add(run);
|
|
95
|
+
if (subscribers.size === 1) {
|
|
96
|
+
stop = start(set) || noop;
|
|
110
97
|
}
|
|
98
|
+
run(value);
|
|
99
|
+
return () => {
|
|
100
|
+
subscribers.delete(run);
|
|
101
|
+
if (subscribers.size === 0) {
|
|
102
|
+
stop && stop();
|
|
103
|
+
stop = void 0;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
111
106
|
}
|
|
107
|
+
function reaction(run) {
|
|
108
|
+
subscribers.add(run);
|
|
109
|
+
if (subscribers.size === 1) {
|
|
110
|
+
stop = start(set) || noop;
|
|
111
|
+
}
|
|
112
|
+
return () => {
|
|
113
|
+
subscribers.delete(run);
|
|
114
|
+
if (subscribers.size === 0) {
|
|
115
|
+
stop && stop();
|
|
116
|
+
stop = void 0;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
get value() {
|
|
122
|
+
return value;
|
|
123
|
+
},
|
|
124
|
+
subscribe,
|
|
125
|
+
reaction
|
|
126
|
+
};
|
|
112
127
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
128
|
+
function writable(value, start = noop, set) {
|
|
129
|
+
const internal = readable(value, start);
|
|
130
|
+
return {
|
|
131
|
+
get value() {
|
|
132
|
+
return internal.value;
|
|
133
|
+
},
|
|
134
|
+
subscribe: internal.subscribe,
|
|
135
|
+
reaction: internal.reaction,
|
|
136
|
+
set,
|
|
137
|
+
update(fn) {
|
|
138
|
+
set(fn(value));
|
|
139
|
+
}
|
|
140
|
+
};
|
|
120
141
|
}
|
|
142
|
+
|
|
143
|
+
// src/utils/misc.ts
|
|
121
144
|
function getImageSize(url, fallback) {
|
|
122
145
|
return new Promise((resolve) => {
|
|
123
146
|
const img = new Image();
|
|
@@ -144,7 +167,7 @@ function makeSlideParams(scenes) {
|
|
|
144
167
|
url = "https" + match.groups.prefix;
|
|
145
168
|
break;
|
|
146
169
|
}
|
|
147
|
-
return { emptyScenes, taskId, url };
|
|
170
|
+
return { scenes: emptyScenes, taskId, url };
|
|
148
171
|
}
|
|
149
172
|
function convertedFileToScene(f, i) {
|
|
150
173
|
return {
|
|
@@ -157,14 +180,10 @@ function convertedFileToScene(f, i) {
|
|
|
157
180
|
}
|
|
158
181
|
};
|
|
159
182
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return joinRoom;
|
|
165
|
-
}
|
|
166
|
-
var SOUP = "!#%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
167
|
-
var SOUP_LEN = SOUP.length;
|
|
183
|
+
|
|
184
|
+
// src/utils/uid.ts
|
|
185
|
+
var SOUP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
186
|
+
var SOUP_LEN = 62;
|
|
168
187
|
var ID_LEN = 20;
|
|
169
188
|
var reusedIdCarrier = /* @__PURE__ */ Array(ID_LEN);
|
|
170
189
|
function genUID() {
|
|
@@ -174,75 +193,46 @@ function genUID() {
|
|
|
174
193
|
return reusedIdCarrier.join("");
|
|
175
194
|
}
|
|
176
195
|
|
|
177
|
-
// src/
|
|
178
|
-
var
|
|
179
|
-
|
|
180
|
-
// src/helpers/emitter.ts
|
|
181
|
-
var FastboardEmitter = class {
|
|
182
|
-
constructor() {
|
|
183
|
-
this.listeners = /* @__PURE__ */ new Set();
|
|
184
|
-
}
|
|
185
|
-
get length() {
|
|
186
|
-
return this.listeners.size;
|
|
187
|
-
}
|
|
188
|
-
dispatch(message) {
|
|
189
|
-
this.listeners.forEach((callback) => callback(message));
|
|
190
|
-
}
|
|
191
|
-
addListener(listener) {
|
|
192
|
-
this.listeners.add(listener);
|
|
193
|
-
}
|
|
194
|
-
removeListener(listener) {
|
|
195
|
-
this.listeners.delete(listener);
|
|
196
|
-
}
|
|
196
|
+
// src/utils/warn.ts
|
|
197
|
+
var warnings = {
|
|
198
|
+
"no-ppt-in-scenes": "You're probably inserting the slide app in a wrong way, there shouldn't exist `scenes[0].ppt`."
|
|
197
199
|
};
|
|
200
|
+
var warned = /* @__PURE__ */ new Set();
|
|
201
|
+
function warn(id) {
|
|
202
|
+
if (warned.has(id))
|
|
203
|
+
return;
|
|
204
|
+
warned.add(id);
|
|
205
|
+
console.warn(warnings[id]);
|
|
206
|
+
}
|
|
198
207
|
|
|
199
|
-
// src/
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
function subscribe(callback) {
|
|
209
|
-
emitter.addListener(callback);
|
|
210
|
-
callback(value);
|
|
211
|
-
return () => emitter.removeListener(callback);
|
|
212
|
-
}
|
|
213
|
-
function reaction(callback) {
|
|
214
|
-
emitter.addListener(callback);
|
|
215
|
-
return () => emitter.removeListener(callback);
|
|
208
|
+
// src/impl/FastboardApp.ts
|
|
209
|
+
var import_white_web_sdk = require("white-web-sdk");
|
|
210
|
+
var import_window_manager2 = require("@netless/window-manager");
|
|
211
|
+
|
|
212
|
+
// src/internal.ts
|
|
213
|
+
var import_window_manager = require("@netless/window-manager");
|
|
214
|
+
function ensure_window_manager(joinRoom) {
|
|
215
|
+
if (!joinRoom.invisiblePlugins || !joinRoom.invisiblePlugins.includes(import_window_manager.WindowManager)) {
|
|
216
|
+
joinRoom.invisiblePlugins = [...joinRoom.invisiblePlugins || [], import_window_manager.WindowManager];
|
|
216
217
|
}
|
|
217
|
-
return
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
subscribe,
|
|
222
|
-
reaction,
|
|
223
|
-
setValue,
|
|
224
|
-
dispose
|
|
225
|
-
};
|
|
218
|
+
return joinRoom;
|
|
219
|
+
}
|
|
220
|
+
function transform_app_status(status) {
|
|
221
|
+
return status === "start" ? "loading" : status === "failed" ? "failed" : "idle";
|
|
226
222
|
}
|
|
227
223
|
|
|
228
|
-
// src/impl/
|
|
224
|
+
// src/impl/FastboardApp.ts
|
|
229
225
|
var FastboardAppBase = class {
|
|
230
226
|
constructor(sdk, room, manager, hotKeys) {
|
|
231
227
|
this.sdk = sdk;
|
|
232
228
|
this.room = room;
|
|
233
229
|
this.manager = manager;
|
|
234
230
|
this.hotKeys = hotKeys;
|
|
235
|
-
this._disposers = [];
|
|
236
231
|
this._destroyed = false;
|
|
237
|
-
this.createValue = (...args) => {
|
|
238
|
-
const value = createValue(...args);
|
|
239
|
-
this._disposers.push(value.dispose);
|
|
240
|
-
return value;
|
|
241
|
-
};
|
|
242
232
|
}
|
|
243
233
|
_assertNotDestroyed() {
|
|
244
234
|
if (this._destroyed) {
|
|
245
|
-
throw new Error("
|
|
235
|
+
throw new Error("FastboardApp has been destroyed");
|
|
246
236
|
}
|
|
247
237
|
}
|
|
248
238
|
_addRoomListener(name, listener) {
|
|
@@ -250,10 +240,10 @@ var FastboardAppBase = class {
|
|
|
250
240
|
this.room.callbacks.on(name, listener);
|
|
251
241
|
return () => this.room.callbacks.off(name, listener);
|
|
252
242
|
}
|
|
253
|
-
_addManagerListener(name,
|
|
243
|
+
_addManagerListener(name, listener) {
|
|
254
244
|
this._assertNotDestroyed();
|
|
255
|
-
this.manager.emitter.on(name,
|
|
256
|
-
return () => this.manager.emitter.off(name,
|
|
245
|
+
this.manager.emitter.on(name, listener);
|
|
246
|
+
return () => this.manager.emitter.off(name, listener);
|
|
257
247
|
}
|
|
258
248
|
_addMainViewListener(name, listener) {
|
|
259
249
|
this._assertNotDestroyed();
|
|
@@ -261,8 +251,6 @@ var FastboardAppBase = class {
|
|
|
261
251
|
return () => this.manager.mainView.callbacks.off(name, listener);
|
|
262
252
|
}
|
|
263
253
|
destroy() {
|
|
264
|
-
this._disposers.forEach((dispose) => dispose());
|
|
265
|
-
this._disposers.length = 0;
|
|
266
254
|
this._destroyed = true;
|
|
267
255
|
this.manager.destroy();
|
|
268
256
|
return this.room.disconnect();
|
|
@@ -271,21 +259,18 @@ var FastboardAppBase = class {
|
|
|
271
259
|
var FastboardApp = class extends FastboardAppBase {
|
|
272
260
|
constructor() {
|
|
273
261
|
super(...arguments);
|
|
274
|
-
this.writable =
|
|
275
|
-
this.boxState =
|
|
276
|
-
this.focusedApp =
|
|
277
|
-
this.canRedoSteps =
|
|
278
|
-
this.canUndoSteps =
|
|
279
|
-
this.camera =
|
|
280
|
-
this.memberState =
|
|
281
|
-
this.sceneIndex =
|
|
282
|
-
this.sceneLength =
|
|
262
|
+
this.writable = writable(this.room.isWritable, (set) => this._addRoomListener("onEnableWriteNowChanged", () => set(this.room.isWritable)), this.room.setWritable.bind(this.room));
|
|
263
|
+
this.boxState = readable(this.manager.boxState, (set) => this._addManagerListener("boxStateChange", set));
|
|
264
|
+
this.focusedApp = readable(this.manager.focused, (set) => this._addManagerListener("focusedChange", set));
|
|
265
|
+
this.canRedoSteps = readable(this.manager.canRedoSteps, (set) => this._addManagerListener("canRedoStepsChange", set));
|
|
266
|
+
this.canUndoSteps = readable(this.manager.canUndoSteps, (set) => this._addManagerListener("canUndoStepsChange", set));
|
|
267
|
+
this.camera = readable(this.manager.mainView.camera, (set) => this._addMainViewListener("onCameraUpdated", set));
|
|
268
|
+
this.memberState = readable(this.room.state.memberState, (set) => this._addRoomListener("onRoomStateChanged", ({ memberState: m }) => m && set(m)));
|
|
269
|
+
this.sceneIndex = writable(this.manager.mainViewSceneIndex, (set) => this._addManagerListener("mainViewSceneIndexChange", set), this.manager.setMainViewSceneIndex.bind(this.manager));
|
|
270
|
+
this.sceneLength = readable(this.manager.mainViewScenesLength, (set) => this._addManagerListener("mainViewScenesLengthChange", set));
|
|
283
271
|
this._appsStatus = {};
|
|
284
|
-
this.appsStatus =
|
|
285
|
-
this._appsStatus[kind] = {
|
|
286
|
-
status: status === "start" ? "loading" : status === "failed" ? "failed" : "idle",
|
|
287
|
-
reason
|
|
288
|
-
};
|
|
272
|
+
this.appsStatus = readable({}, (set) => this._addManagerListener("loadApp", ({ kind, status, reason }) => {
|
|
273
|
+
this._appsStatus[kind] = { status: transform_app_status(status), reason };
|
|
289
274
|
set(this._appsStatus);
|
|
290
275
|
}));
|
|
291
276
|
}
|
|
@@ -299,11 +284,11 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
299
284
|
}
|
|
300
285
|
undo() {
|
|
301
286
|
this._assertNotDestroyed();
|
|
302
|
-
this.manager.
|
|
287
|
+
this.manager.undo();
|
|
303
288
|
}
|
|
304
289
|
redo() {
|
|
305
290
|
this._assertNotDestroyed();
|
|
306
|
-
this.manager.
|
|
291
|
+
this.manager.redo();
|
|
307
292
|
}
|
|
308
293
|
moveCamera(camera) {
|
|
309
294
|
this._assertNotDestroyed();
|
|
@@ -319,7 +304,10 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
319
304
|
}
|
|
320
305
|
setAppliance(appliance, shape) {
|
|
321
306
|
this._assertNotDestroyed();
|
|
322
|
-
this.manager.mainView.setMemberState({
|
|
307
|
+
this.manager.mainView.setMemberState({
|
|
308
|
+
currentApplianceName: appliance,
|
|
309
|
+
shapeType: shape
|
|
310
|
+
});
|
|
323
311
|
}
|
|
324
312
|
setStrokeWidth(strokeWidth) {
|
|
325
313
|
this._assertNotDestroyed();
|
|
@@ -329,6 +317,18 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
329
317
|
this._assertNotDestroyed();
|
|
330
318
|
this.manager.mainView.setMemberState({ strokeColor });
|
|
331
319
|
}
|
|
320
|
+
prevPage() {
|
|
321
|
+
this._assertNotDestroyed();
|
|
322
|
+
return this.manager.prevPage();
|
|
323
|
+
}
|
|
324
|
+
nextPage() {
|
|
325
|
+
this._assertNotDestroyed();
|
|
326
|
+
return this.manager.nextPage();
|
|
327
|
+
}
|
|
328
|
+
addPage(params) {
|
|
329
|
+
this._assertNotDestroyed();
|
|
330
|
+
return this.manager.addPage(params);
|
|
331
|
+
}
|
|
332
332
|
async insertImage(url) {
|
|
333
333
|
this._assertNotDestroyed();
|
|
334
334
|
await this.manager.switchMainViewToWriter();
|
|
@@ -353,19 +353,20 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
353
353
|
this.manager.moveCameraToContain({ originX, originY, width, height });
|
|
354
354
|
}
|
|
355
355
|
insertDocs(arg1, arg2) {
|
|
356
|
+
this._assertNotDestroyed();
|
|
356
357
|
if (typeof arg1 === "object" && "fileType" in arg1) {
|
|
357
358
|
return this._insertDocsImpl(arg1);
|
|
358
359
|
} else if (arg2 && arg2.status !== "Finished") {
|
|
359
|
-
throw new Error("
|
|
360
|
+
throw new Error("FastboardApp cannot insert a converting doc.");
|
|
360
361
|
} else if (arg2 && arg2.progress) {
|
|
361
|
-
const
|
|
362
|
+
const title = arg1;
|
|
362
363
|
const scenePath = `/${arg2.uuid}/${genUID()}`;
|
|
363
|
-
const
|
|
364
|
+
const scenes1 = arg2.progress.convertedFileList.map(convertedFileToScene);
|
|
365
|
+
const { scenes, taskId, url } = makeSlideParams(scenes1);
|
|
364
366
|
if (taskId && url) {
|
|
365
|
-
|
|
366
|
-
return this._insertDocsImpl({ fileType: "pptx", scenePath, taskId, title, url, scenes: emptyScenes });
|
|
367
|
+
return this._insertDocsImpl({ fileType: "pptx", scenePath, scenes, title, taskId, url });
|
|
367
368
|
} else {
|
|
368
|
-
return this._insertDocsImpl({ fileType: "pdf", scenePath, scenes, title
|
|
369
|
+
return this._insertDocsImpl({ fileType: "pdf", scenePath, scenes: scenes1, title });
|
|
369
370
|
}
|
|
370
371
|
}
|
|
371
372
|
}
|
|
@@ -379,6 +380,9 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
379
380
|
options: { scenePath, title, scenes }
|
|
380
381
|
});
|
|
381
382
|
case "pptx":
|
|
383
|
+
if (scenes && scenes[0].ppt) {
|
|
384
|
+
warn("no-ppt-in-scenes");
|
|
385
|
+
}
|
|
382
386
|
return this.manager.addApp({
|
|
383
387
|
kind: "Slide",
|
|
384
388
|
options: { scenePath, title, scenes },
|
|
@@ -403,7 +407,7 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
403
407
|
insertMedia(title, src) {
|
|
404
408
|
this._assertNotDestroyed();
|
|
405
409
|
return this.manager.addApp({
|
|
406
|
-
kind:
|
|
410
|
+
kind: import_window_manager2.BuiltinApps.MediaPlayer,
|
|
407
411
|
options: { title },
|
|
408
412
|
attributes: { src }
|
|
409
413
|
});
|
|
@@ -416,24 +420,61 @@ var FastboardApp = class extends FastboardAppBase {
|
|
|
416
420
|
});
|
|
417
421
|
}
|
|
418
422
|
};
|
|
423
|
+
async function createFastboard(_a) {
|
|
424
|
+
var _b = _a, {
|
|
425
|
+
sdkConfig,
|
|
426
|
+
joinRoom: _c
|
|
427
|
+
} = _b, _d = _c, { callbacks } = _d, joinRoomParams = __objRest(_d, ["callbacks"]), {
|
|
428
|
+
managerConfig
|
|
429
|
+
} = _b;
|
|
430
|
+
const sdk = new import_white_web_sdk.WhiteWebSdk(__spreadProps(__spreadValues({}, sdkConfig), {
|
|
431
|
+
useMobXState: true
|
|
432
|
+
}));
|
|
433
|
+
const hotKeys = __spreadProps(__spreadValues({}, import_white_web_sdk.DefaultHotKeys), {
|
|
434
|
+
changeToSelector: "s",
|
|
435
|
+
changeToLaserPointer: "z",
|
|
436
|
+
changeToPencil: "p",
|
|
437
|
+
changeToRectangle: "r",
|
|
438
|
+
changeToEllipse: "c",
|
|
439
|
+
changeToEraser: "e",
|
|
440
|
+
changeToText: "t",
|
|
441
|
+
changeToStraight: "l",
|
|
442
|
+
changeToArrow: "a",
|
|
443
|
+
changeToHand: "h"
|
|
444
|
+
});
|
|
445
|
+
const room = await sdk.joinRoom(__spreadProps(__spreadValues({
|
|
446
|
+
floatBar: true,
|
|
447
|
+
hotKeys
|
|
448
|
+
}, ensure_window_manager(joinRoomParams)), {
|
|
449
|
+
useMultiViews: true,
|
|
450
|
+
disableNewPencil: false,
|
|
451
|
+
disableMagixEventDispatchLimit: true
|
|
452
|
+
}), callbacks);
|
|
453
|
+
const manager = await import_window_manager2.WindowManager.mount(__spreadProps(__spreadValues({
|
|
454
|
+
cursor: true
|
|
455
|
+
}, managerConfig), {
|
|
456
|
+
room
|
|
457
|
+
}));
|
|
458
|
+
manager.mainView.setCameraBound({
|
|
459
|
+
minContentMode: (0, import_white_web_sdk.contentModeScale)(0.3),
|
|
460
|
+
maxContentMode: (0, import_white_web_sdk.contentModeScale)(3)
|
|
461
|
+
});
|
|
462
|
+
return new FastboardApp(sdk, room, manager, hotKeys);
|
|
463
|
+
}
|
|
419
464
|
|
|
420
|
-
// src/impl/
|
|
465
|
+
// src/impl/FastboardPlayer.ts
|
|
466
|
+
var import_white_web_sdk2 = require("white-web-sdk");
|
|
467
|
+
var import_window_manager3 = require("@netless/window-manager");
|
|
421
468
|
var FastboardPlayerBase = class {
|
|
422
469
|
constructor(sdk, player, manager) {
|
|
423
470
|
this.sdk = sdk;
|
|
424
471
|
this.player = player;
|
|
425
472
|
this.manager = manager;
|
|
426
|
-
this._disposers = [];
|
|
427
473
|
this._destroyed = false;
|
|
428
|
-
this.createValue = (...args) => {
|
|
429
|
-
const value = createValue(...args);
|
|
430
|
-
this._disposers.push(value.dispose);
|
|
431
|
-
return value;
|
|
432
|
-
};
|
|
433
474
|
}
|
|
434
475
|
_assertNotDestroyed() {
|
|
435
476
|
if (this._destroyed) {
|
|
436
|
-
throw new Error("
|
|
477
|
+
throw new Error("FastboardApp has been destroyed");
|
|
437
478
|
}
|
|
438
479
|
}
|
|
439
480
|
_addPlayerListener(name, listener) {
|
|
@@ -441,10 +482,10 @@ var FastboardPlayerBase = class {
|
|
|
441
482
|
this.player.callbacks.on(name, listener);
|
|
442
483
|
return () => this.player.callbacks.off(name, listener);
|
|
443
484
|
}
|
|
444
|
-
_addManagerListener(name,
|
|
485
|
+
_addManagerListener(name, listener) {
|
|
445
486
|
this._assertNotDestroyed();
|
|
446
|
-
this.manager.emitter.on(name,
|
|
447
|
-
return () => this.manager.emitter.off(name,
|
|
487
|
+
this.manager.emitter.on(name, listener);
|
|
488
|
+
return () => this.manager.emitter.off(name, listener);
|
|
448
489
|
}
|
|
449
490
|
_addMainViewListener(name, listener) {
|
|
450
491
|
this._assertNotDestroyed();
|
|
@@ -452,30 +493,37 @@ var FastboardPlayerBase = class {
|
|
|
452
493
|
return () => this.manager.mainView.callbacks.off(name, listener);
|
|
453
494
|
}
|
|
454
495
|
destroy() {
|
|
455
|
-
this._disposers.forEach((dispose) => dispose());
|
|
456
|
-
this._disposers.length = 0;
|
|
457
496
|
this._destroyed = true;
|
|
458
497
|
this.manager.destroy();
|
|
459
|
-
this.player.callbacks.off();
|
|
498
|
+
return this.player.callbacks.off();
|
|
460
499
|
}
|
|
461
500
|
};
|
|
462
501
|
var FastboardPlayer = class extends FastboardPlayerBase {
|
|
463
502
|
constructor() {
|
|
464
503
|
super(...arguments);
|
|
465
|
-
this.currentTime =
|
|
466
|
-
this.phase =
|
|
467
|
-
this.canplay =
|
|
468
|
-
this.speed =
|
|
504
|
+
this.currentTime = writable(this.player.progressTime, (set) => this._addPlayerListener("onProgressTimeChanged", set), this.player.seekToProgressTime.bind(this.player));
|
|
505
|
+
this.phase = readable(this.player.phase, (set) => this._addPlayerListener("onPhaseChanged", set));
|
|
506
|
+
this.canplay = readable(this.player.isPlayable, (set) => this._addPlayerListener("onIsPlayableChanged", set));
|
|
507
|
+
this.speed = writable(this.player.playbackSpeed, (set) => {
|
|
469
508
|
this._setSpeed = set;
|
|
470
509
|
}, (value) => {
|
|
471
510
|
this.player.playbackSpeed = value;
|
|
472
511
|
this._setSpeed(value);
|
|
473
512
|
});
|
|
474
|
-
this.
|
|
513
|
+
this.ready = readable(false, (set) => {
|
|
514
|
+
this._setReady = set;
|
|
515
|
+
});
|
|
516
|
+
this.duration = readable(0, (set) => {
|
|
517
|
+
this._setDuration = set;
|
|
518
|
+
});
|
|
519
|
+
this.state = readable(null, (set) => {
|
|
475
520
|
const update = () => set(this.player.state);
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
521
|
+
this.player.callbacks.once("onLoadFirstFrame", () => {
|
|
522
|
+
this._setDuration(this.player.timeDuration);
|
|
523
|
+
this._setReady(true);
|
|
524
|
+
update();
|
|
525
|
+
});
|
|
526
|
+
return this._addPlayerListener("onPlayerStateChanged", update);
|
|
479
527
|
});
|
|
480
528
|
}
|
|
481
529
|
bindContainer(container) {
|
|
@@ -502,68 +550,25 @@ var FastboardPlayer = class extends FastboardPlayerBase {
|
|
|
502
550
|
this._assertNotDestroyed();
|
|
503
551
|
this.player.stop();
|
|
504
552
|
}
|
|
553
|
+
setSpeed(value) {
|
|
554
|
+
this._assertNotDestroyed();
|
|
555
|
+
this.speed.set(value);
|
|
556
|
+
}
|
|
505
557
|
};
|
|
506
|
-
|
|
507
|
-
// src/minimal.ts
|
|
508
|
-
async function createFastboard(_a) {
|
|
509
|
-
var _b = _a, {
|
|
510
|
-
sdkConfig,
|
|
511
|
-
joinRoom: _c
|
|
512
|
-
} = _b, _d = _c, { callbacks } = _d, joinRoomParams = __objRest(_d, ["callbacks"]), {
|
|
513
|
-
managerConfig,
|
|
514
|
-
appsConfig = DefaultApps
|
|
515
|
-
} = _b;
|
|
516
|
-
registerApps(appsConfig);
|
|
517
|
-
const sdk = new import_white_web_sdk.WhiteWebSdk(__spreadProps(__spreadValues({}, sdkConfig), {
|
|
518
|
-
useMobXState: true
|
|
519
|
-
}));
|
|
520
|
-
const hotKeys = __spreadProps(__spreadValues({}, import_white_web_sdk.DefaultHotKeys), {
|
|
521
|
-
changeToSelector: "s",
|
|
522
|
-
changeToLaserPointer: "z",
|
|
523
|
-
changeToPencil: "p",
|
|
524
|
-
changeToRectangle: "r",
|
|
525
|
-
changeToEllipse: "c",
|
|
526
|
-
changeToEraser: "e",
|
|
527
|
-
changeToText: "t",
|
|
528
|
-
changeToStraight: "l",
|
|
529
|
-
changeToArrow: "a",
|
|
530
|
-
changeToHand: "h"
|
|
531
|
-
});
|
|
532
|
-
const room = await sdk.joinRoom(__spreadProps(__spreadValues({
|
|
533
|
-
floatBar: true,
|
|
534
|
-
hotKeys
|
|
535
|
-
}, ensureWindowManager(joinRoomParams)), {
|
|
536
|
-
useMultiViews: true,
|
|
537
|
-
disableNewPencil: false,
|
|
538
|
-
disableMagixEventDispatchLimit: true
|
|
539
|
-
}), callbacks);
|
|
540
|
-
const manager = await import_window_manager5.WindowManager.mount(__spreadProps(__spreadValues({
|
|
541
|
-
cursor: true
|
|
542
|
-
}, managerConfig), {
|
|
543
|
-
room
|
|
544
|
-
}));
|
|
545
|
-
manager.mainView.setCameraBound({
|
|
546
|
-
minContentMode: (0, import_white_web_sdk.contentModeScale)(0.3),
|
|
547
|
-
maxContentMode: (0, import_white_web_sdk.contentModeScale)(3)
|
|
548
|
-
});
|
|
549
|
-
return new FastboardApp(sdk, room, manager, hotKeys);
|
|
550
|
-
}
|
|
551
558
|
async function replayFastboard(_a) {
|
|
552
559
|
var _b = _a, {
|
|
553
560
|
sdkConfig,
|
|
554
561
|
replayRoom: _c
|
|
555
562
|
} = _b, _d = _c, { callbacks } = _d, replayRoomParams = __objRest(_d, ["callbacks"]), {
|
|
556
|
-
managerConfig
|
|
557
|
-
appsConfig = DefaultApps
|
|
563
|
+
managerConfig
|
|
558
564
|
} = _b;
|
|
559
|
-
|
|
560
|
-
const sdk = new import_white_web_sdk.WhiteWebSdk(__spreadProps(__spreadValues({}, sdkConfig), {
|
|
565
|
+
const sdk = new import_white_web_sdk2.WhiteWebSdk(__spreadProps(__spreadValues({}, sdkConfig), {
|
|
561
566
|
useMobXState: true
|
|
562
567
|
}));
|
|
563
|
-
const player = await sdk.replayRoom(__spreadProps(__spreadValues({},
|
|
568
|
+
const player = await sdk.replayRoom(__spreadProps(__spreadValues({}, ensure_window_manager(replayRoomParams)), {
|
|
564
569
|
useMultiViews: true
|
|
565
570
|
}), callbacks);
|
|
566
|
-
const managerPromise =
|
|
571
|
+
const managerPromise = import_window_manager3.WindowManager.mount(__spreadProps(__spreadValues({
|
|
567
572
|
cursor: true
|
|
568
573
|
}, managerConfig), {
|
|
569
574
|
room: player
|
|
@@ -573,5 +578,41 @@ async function replayFastboard(_a) {
|
|
|
573
578
|
player.pause();
|
|
574
579
|
return new FastboardPlayer(sdk, player, manager);
|
|
575
580
|
}
|
|
581
|
+
|
|
582
|
+
// src/behaviors/index.ts
|
|
583
|
+
var import_window_manager4 = require("@netless/window-manager");
|
|
584
|
+
var import_app_slide = __toESM(require("@netless/app-slide"));
|
|
585
|
+
var DefaultApps = {
|
|
586
|
+
Monaco: {
|
|
587
|
+
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-monaco/0.1.12/dist/main.iife.js"
|
|
588
|
+
},
|
|
589
|
+
Countdown: {
|
|
590
|
+
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-countdown/0.0.2/dist/main.iife.js"
|
|
591
|
+
},
|
|
592
|
+
GeoGebra: {
|
|
593
|
+
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-geogebra/0.0.4/dist/main.iife.js",
|
|
594
|
+
appOptions: {
|
|
595
|
+
HTML5Codebase: "https://flat-storage-cn-hz.whiteboard.agora.io/GeoGebra/HTML5/5.0/web3d"
|
|
596
|
+
}
|
|
597
|
+
},
|
|
598
|
+
EmbeddedPage: {
|
|
599
|
+
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-embedded-page/0.1.1/dist/main.iife.js"
|
|
600
|
+
},
|
|
601
|
+
Player: {
|
|
602
|
+
name: "NetlessAppMediaPlayer",
|
|
603
|
+
src: "https://netless-app.oss-cn-hangzhou.aliyuncs.com/@netless/app-media-player/0.1.1/dist/main.iife.js"
|
|
604
|
+
}
|
|
605
|
+
};
|
|
606
|
+
import_window_manager4.WindowManager.register({
|
|
607
|
+
kind: "Slide",
|
|
608
|
+
appOptions: { debug: false },
|
|
609
|
+
src: import_app_slide.default
|
|
610
|
+
});
|
|
611
|
+
for (const kind in DefaultApps) {
|
|
612
|
+
if (Object.prototype.hasOwnProperty.call(DefaultApps, kind)) {
|
|
613
|
+
const options = DefaultApps[kind];
|
|
614
|
+
import_window_manager4.WindowManager.register(__spreadValues({ kind }, options));
|
|
615
|
+
}
|
|
616
|
+
}
|
|
576
617
|
module.exports = __toCommonJS(src_exports);
|
|
577
618
|
//# sourceMappingURL=index.js.map
|