@vived/app 2.30.0 → 2.31.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.
@@ -9,6 +9,10 @@ export declare abstract class AppDispatcher {
9
9
  abstract dispatch: (request: Request) => void;
10
10
  abstract stateHasChanged: (state: object, validationErrorMessage?: string) => void;
11
11
  abstract stateIsCompleted: () => void;
12
+ abstract goToPreviousState: () => void;
13
+ abstract goToNextState: () => void;
14
+ abstract hasPreviousState: () => Promise<boolean>;
15
+ abstract hasNextState: () => Promise<boolean>;
12
16
  abstract getAppAssetsURL: () => Promise<string>;
13
17
  abstract registerExternalStylesheets: (stylesheets: string[]) => void;
14
18
  abstract appIsReady: () => void;
@@ -24,5 +28,6 @@ export declare abstract class AppDispatcher {
24
28
  abstract getAssetMeta: (assetID: string) => Promise<AssetMetaDTO>;
25
29
  abstract getAssetsForOwner: (ownerID: string) => Promise<AssetMetaDTO[]>;
26
30
  abstract submitNewActivityAsset: (file: File) => Promise<string>;
31
+ abstract stopZSpace: () => void;
27
32
  }
28
33
  export declare function makeAppDispatcher(): AppDispatcher;
@@ -228,6 +228,47 @@ class AppDistpatcherImp extends AppDispatcher {
228
228
  }
229
229
  });
230
230
  };
231
+ this.goToPreviousState = () => {
232
+ this.formRequestAndDispatch("GO_TO_PREVIOUS_STATE", 1);
233
+ };
234
+ this.goToNextState = () => {
235
+ this.formRequestAndDispatch("GO_TO_NEXT_STATE", 1);
236
+ };
237
+ this.stopZSpace = () => {
238
+ this.formRequestAndDispatch("STOP_ZSPACE", 1);
239
+ };
240
+ this.hasNextState = () => {
241
+ return new Promise((resolve, reject) => {
242
+ const callback = (hasNextState) => {
243
+ resolve(hasNextState);
244
+ };
245
+ const payload = {
246
+ callback,
247
+ };
248
+ if (!this.hostHandler) {
249
+ reject(new Error("No host handler has been registered"));
250
+ }
251
+ else {
252
+ this.formRequestAndDispatch("HAS_NEXT_STATE", 1, payload);
253
+ }
254
+ });
255
+ };
256
+ this.hasPreviousState = () => {
257
+ return new Promise((resolve, reject) => {
258
+ const callback = (hasPreviousState) => {
259
+ resolve(hasPreviousState);
260
+ };
261
+ const payload = {
262
+ callback,
263
+ };
264
+ if (!this.hostHandler) {
265
+ reject(new Error("No host handler has been registered"));
266
+ }
267
+ else {
268
+ this.formRequestAndDispatch("HAS_PREVIOUS_STATE", 1, payload);
269
+ }
270
+ });
271
+ };
231
272
  }
232
273
  formRequestAndDispatch(type, version, payload) {
233
274
  const request = {
@@ -1,4 +1,4 @@
1
- import { ParametricLine, Result, Vector2, Vector3 } from "../ValueObjects";
1
+ import { ParametricLine, Vector2, Vector3 } from "../ValueObjects";
2
2
  export declare type OnBabylonChange = () => void;
3
3
  export interface ScenePick {
4
4
  mouseRay: ParametricLine;
@@ -6,17 +6,18 @@ export interface ScenePick {
6
6
  worldPickPoint?: Vector3;
7
7
  objectPickMeta?: object;
8
8
  }
9
- export declare type ScenePicker = (pixelPos: Vector2) => ScenePick;
10
- export declare type SceneRayer = (pixelPos: Vector2) => ParametricLine;
11
9
  export interface Babylon {
12
10
  engine: unknown;
13
11
  scene: unknown;
14
12
  workingCanvas?: HTMLCanvasElement;
15
13
  showInspector: boolean;
16
14
  renderCanvas?: HTMLCanvasElement;
17
- scenePick: (pixelPos: Vector2) => ScenePick;
18
- sceneRay: (pixelPos: Vector2) => ParametricLine;
19
- sceneObjectPick: (pixelPos: Vector2) => Result<string, SceneObjectPickErrors>;
15
+ isRendering: boolean;
16
+ pixelToSceneRay: (pixelPos: Vector2) => ParametricLine;
17
+ sceneRayPick: (ray: ParametricLine) => ScenePick | undefined;
18
+ scenePixelPick: (pixelPos: Vector2) => ScenePick | undefined;
19
+ sceneObjectRayPick: (ray: ParametricLine) => string | undefined;
20
+ sceneObjectPixelPick: (pixelPos: Vector2) => string | undefined;
20
21
  makeSceneObjectMeta: (id: string) => object;
21
22
  updateCanvasSize: () => void;
22
23
  submitRenderCanvas: (canvas: HTMLCanvasElement) => void;
@@ -24,19 +25,7 @@ export interface Babylon {
24
25
  registerResizeEnging: (resizeEngine: () => void) => void;
25
26
  registerStartRendering: (startRendering: (canvas: HTMLCanvasElement) => void) => void;
26
27
  registerStopRendering: (stopRendering: (canvas: HTMLCanvasElement) => void) => void;
27
- registerScenePicker: (picker: ScenePicker) => void;
28
- registerSceneRayer: (rayer: SceneRayer) => void;
29
28
  addObserver: (observer: OnBabylonChange) => void;
30
29
  removeObserver: (observer: OnBabylonChange) => void;
31
30
  }
32
31
  export declare function makeBabylon(): Babylon;
33
- export declare class SceneObjectPickErrorNoPicker extends Error {
34
- constructor();
35
- }
36
- export declare class SceneObjectPickErrorNoPick extends Error {
37
- constructor();
38
- }
39
- export declare class SceneObjectPickErrorNoID extends Error {
40
- constructor();
41
- }
42
- export declare type SceneObjectPickErrors = SceneObjectPickErrorNoPicker | SceneObjectPickErrorNoPick | SceneObjectPickErrorNoID;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SceneObjectPickErrorNoID = exports.SceneObjectPickErrorNoPick = exports.SceneObjectPickErrorNoPicker = exports.makeBabylon = void 0;
3
+ exports.makeBabylon = void 0;
4
4
  const ValueObjects_1 = require("../ValueObjects");
5
5
  const MemoizedBoolean_1 = require("./MemoizedBoolean");
6
6
  const MemoizedVector2_1 = require("./MemoizedVector2");
@@ -11,18 +11,6 @@ function makeBabylon() {
11
11
  exports.makeBabylon = makeBabylon;
12
12
  class BabylonImp {
13
13
  constructor() {
14
- this._scenePickerHasBeenSet = false;
15
- this.scenePick = () => {
16
- console.warn("orignal scene picker");
17
- return {
18
- mouseRay: ValueObjects_1.ParametricLine.Forward(),
19
- hit: false,
20
- };
21
- };
22
- this.sceneRay = () => {
23
- console.warn("orignal scene ray");
24
- return ValueObjects_1.ParametricLine.Forward();
25
- };
26
14
  this.observers = new ObserverList_1.ObserverList();
27
15
  this.updateCanvasSize = () => {
28
16
  if (!this.workingCanvas)
@@ -77,33 +65,56 @@ class BabylonImp {
77
65
  this.removeObserver = (observer) => {
78
66
  this.observers.remove(observer);
79
67
  };
80
- this.registerScenePicker = (picker) => {
81
- this.scenePick = picker;
82
- this._scenePickerHasBeenSet = true;
68
+ this.makeSceneObjectMeta = (id) => {
69
+ return { sceneObjectID: id };
70
+ };
71
+ this.getSceneObjectIDFromMeta = (meta) => {
72
+ if (meta === null || meta === void 0 ? void 0 : meta.hasOwnProperty("sceneObjectID")) {
73
+ return meta.sceneObjectID;
74
+ }
75
+ else {
76
+ return;
77
+ }
83
78
  };
84
- this.registerSceneRayer = (rayer) => {
85
- this.sceneRay = rayer;
79
+ this.memoizedIsRendering = new MemoizedBoolean_1.MemoizedBoolean(false, this.observers.notify);
80
+ this.sceneRayPick = (ray) => {
81
+ throw new Error("Scene ray pick has not been injected");
86
82
  };
87
- this.sceneObjectPick = (pixelPos) => {
88
- var _a;
89
- if (!this._scenePickerHasBeenSet) {
90
- return ValueObjects_1.reject(new SceneObjectPickErrorNoPicker());
83
+ this.sceneObjectRayPick = (ray) => {
84
+ try {
85
+ const pick = this.sceneRayPick(ray);
86
+ if (pick === undefined)
87
+ return;
88
+ const sceneObjectId = this.getSceneObjectIDFromMeta(pick.objectPickMeta);
89
+ return sceneObjectId;
91
90
  }
92
- const scenePick = this.scenePick(pixelPos);
93
- if (!scenePick.hit) {
94
- return ValueObjects_1.reject(new SceneObjectPickErrorNoPick());
91
+ catch (e) {
92
+ console.warn(e);
93
+ return;
95
94
  }
96
- if (!((_a = scenePick.objectPickMeta) === null || _a === void 0 ? void 0 : _a.hasOwnProperty("sceneObjectID"))) {
97
- return ValueObjects_1.reject(new SceneObjectPickErrorNoID());
95
+ };
96
+ this.sceneObjectPixelPick = (pixelPos) => {
97
+ try {
98
+ const ray = this.pixelToSceneRay(pixelPos);
99
+ return this.sceneObjectRayPick(ray);
98
100
  }
99
- const sceneObjectId = scenePick.objectPickMeta.sceneObjectID;
100
- if (!sceneObjectId) {
101
- return ValueObjects_1.reject(new SceneObjectPickErrorNoID());
101
+ catch (e) {
102
+ console.warn(e);
103
+ return;
102
104
  }
103
- return ValueObjects_1.resolve(sceneObjectId);
104
105
  };
105
- this.makeSceneObjectMeta = (id) => {
106
- return { sceneObjectID: id };
106
+ this.scenePixelPick = (pixelPos) => {
107
+ try {
108
+ const ray = this.pixelToSceneRay(pixelPos);
109
+ return this.sceneRayPick(ray);
110
+ }
111
+ catch (e) {
112
+ console.warn(e);
113
+ return;
114
+ }
115
+ };
116
+ this.pixelToSceneRay = (pixelPos) => {
117
+ throw new Error("Pixel to scene ray has not been injected");
107
118
  };
108
119
  this.memoizedShowInspector = new MemoizedBoolean_1.MemoizedBoolean(false, this.observers.notify);
109
120
  this.memoizedCanvasSize = new MemoizedVector2_1.MemoizedVector2(ValueObjects_1.Vector2.One(), this.observers.notify);
@@ -123,25 +134,10 @@ class BabylonImp {
123
134
  set canvasSize(val) {
124
135
  this.memoizedCanvasSize.val = val;
125
136
  }
126
- }
127
- class SceneObjectPickErrorNoPicker extends Error {
128
- constructor() {
129
- super();
130
- this.message = "No picker has been registered";
131
- }
132
- }
133
- exports.SceneObjectPickErrorNoPicker = SceneObjectPickErrorNoPicker;
134
- class SceneObjectPickErrorNoPick extends Error {
135
- constructor() {
136
- super();
137
- this.message = "Nothing was picked on";
137
+ get isRendering() {
138
+ return this.memoizedIsRendering.val;
138
139
  }
139
- }
140
- exports.SceneObjectPickErrorNoPick = SceneObjectPickErrorNoPick;
141
- class SceneObjectPickErrorNoID extends Error {
142
- constructor() {
143
- super();
144
- this.message = "Picked object does not have a scene ID";
140
+ set isRendering(val) {
141
+ this.memoizedIsRendering.val = val;
145
142
  }
146
143
  }
147
- exports.SceneObjectPickErrorNoID = SceneObjectPickErrorNoID;
@@ -1,7 +1,9 @@
1
+ import { ObservableEntity } from "./ObservableEntity";
1
2
  export declare type OnBaseAppChange = () => void;
2
- export interface BaseApp {
3
- isAuthoring: boolean;
4
- addObserver(observer: OnBaseAppChange): void;
5
- removeObserver(observer: OnBaseAppChange): void;
3
+ export declare abstract class BaseApp extends ObservableEntity {
4
+ abstract get isAuthoring(): boolean;
5
+ abstract set isAuthoring(val: boolean);
6
+ abstract startRendering: (container: HTMLElement) => void;
7
+ abstract stopRendering: () => void;
6
8
  }
7
9
  export declare function makeBaseApp(): BaseApp;
@@ -1,22 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeBaseApp = void 0;
3
+ exports.makeBaseApp = exports.BaseApp = void 0;
4
4
  const MemoizedBoolean_1 = require("./MemoizedBoolean");
5
- const ObserverList_1 = require("./ObserverList");
5
+ const ObservableEntity_1 = require("./ObservableEntity");
6
+ class BaseApp extends ObservableEntity_1.ObservableEntity {
7
+ }
8
+ exports.BaseApp = BaseApp;
6
9
  function makeBaseApp() {
7
10
  return new BaseAppImp();
8
11
  }
9
12
  exports.makeBaseApp = makeBaseApp;
10
- class BaseAppImp {
13
+ class BaseAppImp extends BaseApp {
11
14
  constructor() {
12
- this.observers = new ObserverList_1.ObserverList();
13
- this.memoizedIsAuthoring = new MemoizedBoolean_1.MemoizedBoolean(false, this.observers.notify);
14
- this.addObserver = (observer) => {
15
- this.observers.add(observer);
15
+ super(...arguments);
16
+ this.startRendering = (container) => {
17
+ throw new Error("[Base App] Start rendering function has not been injected");
16
18
  };
17
- this.removeObserver = (observer) => {
18
- this.observers.remove(observer);
19
+ this.stopRendering = () => {
20
+ throw new Error("[Base App] Stop rendering function has not been injected");
19
21
  };
22
+ this.memoizedIsAuthoring = new MemoizedBoolean_1.MemoizedBoolean(false, this.notify);
20
23
  }
21
24
  get isAuthoring() {
22
25
  return this.memoizedIsAuthoring.val;
@@ -1,9 +1,9 @@
1
1
  import { BaseApp } from "../Entities";
2
- export declare class IsAuthoringPM {
2
+ import { PresentionManager } from "./PresentationManager";
3
+ export declare class IsAuthoringPM extends PresentionManager {
3
4
  private baseApp;
4
5
  private updateView;
5
6
  private lastSetState?;
6
- private doUpdateView;
7
- dispose(): void;
7
+ doUpdateView: () => void;
8
8
  constructor(baseApp: BaseApp, updateView: (isAuthoring: boolean) => void);
9
9
  }
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IsAuthoringPM = void 0;
4
- class IsAuthoringPM {
4
+ const PresentationManager_1 = require("./PresentationManager");
5
+ class IsAuthoringPM extends PresentationManager_1.PresentionManager {
5
6
  constructor(baseApp, updateView) {
7
+ super(baseApp);
8
+ this.baseApp = baseApp;
9
+ this.updateView = updateView;
6
10
  this.doUpdateView = () => {
7
11
  const isAuthoring = this.baseApp.isAuthoring;
8
12
  if (isAuthoring === this.lastSetState)
@@ -10,13 +14,7 @@ class IsAuthoringPM {
10
14
  this.updateView(isAuthoring);
11
15
  this.lastSetState = isAuthoring;
12
16
  };
13
- this.baseApp = baseApp;
14
- this.updateView = updateView;
15
17
  this.doUpdateView();
16
- this.baseApp.addObserver(this.doUpdateView);
17
- }
18
- dispose() {
19
- this.baseApp.removeObserver(this.doUpdateView);
20
18
  }
21
19
  }
22
20
  exports.IsAuthoringPM = IsAuthoringPM;
@@ -0,0 +1,9 @@
1
+ import { BaseApp } from "../Entities";
2
+ import { PresentionManager } from "./PresentationManager";
3
+ export declare class IsRenderingPM extends PresentionManager {
4
+ private baseApp;
5
+ private updateView;
6
+ private lastSetState?;
7
+ doUpdateView: () => void;
8
+ constructor(baseApp: BaseApp, updateView: (isAuthoring: boolean) => void);
9
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsRenderingPM = void 0;
4
+ const PresentationManager_1 = require("./PresentationManager");
5
+ class IsRenderingPM extends PresentationManager_1.PresentionManager {
6
+ constructor(baseApp, updateView) {
7
+ super(baseApp);
8
+ this.baseApp = baseApp;
9
+ this.updateView = updateView;
10
+ this.doUpdateView = () => {
11
+ const isRendering = this.baseApp.isRendering;
12
+ if (isRendering === this.lastSetState)
13
+ return;
14
+ this.updateView(isRendering);
15
+ this.lastSetState = isRendering;
16
+ };
17
+ this.doUpdateView();
18
+ }
19
+ }
20
+ exports.IsRenderingPM = IsRenderingPM;
@@ -0,0 +1,10 @@
1
+ import { AppHandler, RequestHandler } from "../../Entities";
2
+ export declare type SetZSpaceEnabledAction = (isEnabled: boolean) => void;
3
+ export declare class SetZSpaceEnabledBase extends RequestHandler {
4
+ readonly requestType = "SET_ZSPACE_ENABLED";
5
+ readonly payloadVersion = 1;
6
+ action: SetZSpaceEnabledAction;
7
+ handleRequest: (version: number, payload: unknown) => void;
8
+ private castPayloadV1;
9
+ constructor(handler: AppHandler);
10
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetZSpaceEnabledBase = void 0;
4
+ const Entities_1 = require("../../Entities");
5
+ class SetZSpaceEnabledBase extends Entities_1.RequestHandler {
6
+ constructor(handler) {
7
+ super();
8
+ this.requestType = "SET_ZSPACE_ENABLED";
9
+ this.payloadVersion = 1;
10
+ this.action = () => {
11
+ throw new Entities_1.ActionNotImplemented(this.requestType);
12
+ };
13
+ this.handleRequest = (version, payload) => {
14
+ if (version === this.payloadVersion) {
15
+ const { isEnabled } = this.castPayloadV1(payload);
16
+ this.action(isEnabled);
17
+ }
18
+ else {
19
+ throw new Entities_1.UnsupportedRequestVerion(this.requestType, version);
20
+ }
21
+ };
22
+ handler.registerRequestHandler(this);
23
+ }
24
+ castPayloadV1(payload) {
25
+ const castPayload = payload;
26
+ if (castPayload.isEnabled === undefined) {
27
+ throw new Entities_1.UnableToParsePayload(this.requestType, 1, JSON.stringify(payload));
28
+ }
29
+ return castPayload;
30
+ }
31
+ }
32
+ exports.SetZSpaceEnabledBase = SetZSpaceEnabledBase;
@@ -0,0 +1,10 @@
1
+ import { AppHandler, RequestHandler } from "../../Entities";
2
+ export declare type StartZSpaceAction = (device: string, session: any) => void;
3
+ export declare class StartZSpaceBase extends RequestHandler {
4
+ readonly requestType = "START_ZSPACE";
5
+ readonly payloadVersion = 1;
6
+ action: StartZSpaceAction;
7
+ handleRequest: (version: number, payload: unknown) => void;
8
+ private castPayloadV1;
9
+ constructor(handler: AppHandler);
10
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StartZSpaceBase = void 0;
4
+ const Entities_1 = require("../../Entities");
5
+ class StartZSpaceBase extends Entities_1.RequestHandler {
6
+ constructor(handler) {
7
+ super();
8
+ this.requestType = "START_ZSPACE";
9
+ this.payloadVersion = 1;
10
+ this.action = () => {
11
+ throw new Entities_1.ActionNotImplemented(this.requestType);
12
+ };
13
+ this.handleRequest = (version, payload) => {
14
+ if (version === this.payloadVersion) {
15
+ const { device, session } = this.castPayloadV1(payload);
16
+ this.action(device, session);
17
+ }
18
+ else {
19
+ throw new Entities_1.UnsupportedRequestVerion(this.requestType, version);
20
+ }
21
+ };
22
+ handler.registerRequestHandler(this);
23
+ }
24
+ castPayloadV1(payload) {
25
+ const castPayload = payload;
26
+ if (castPayload.device === undefined || castPayload.session === undefined) {
27
+ throw new Entities_1.UnableToParsePayload(this.requestType, 1, JSON.stringify(payload));
28
+ }
29
+ return castPayload;
30
+ }
31
+ }
32
+ exports.StartZSpaceBase = StartZSpaceBase;
@@ -0,0 +1,8 @@
1
+ import { AppHandler, RequestHandler } from "../../Entities";
2
+ export declare class StopZSpaceBase extends RequestHandler {
3
+ readonly requestType = "STOP_ZSPACE";
4
+ readonly payloadVersion = 1;
5
+ action: () => void;
6
+ handleRequest: (version: number) => void;
7
+ constructor(handler: AppHandler);
8
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StopZSpaceBase = void 0;
4
+ const Entities_1 = require("../../Entities");
5
+ class StopZSpaceBase extends Entities_1.RequestHandler {
6
+ constructor(handler) {
7
+ super();
8
+ this.requestType = "STOP_ZSPACE";
9
+ this.payloadVersion = 1;
10
+ this.action = () => {
11
+ throw new Entities_1.ActionNotImplemented(this.requestType);
12
+ };
13
+ this.handleRequest = (version) => {
14
+ if (version === this.payloadVersion) {
15
+ this.action();
16
+ }
17
+ else {
18
+ throw new Entities_1.UnsupportedRequestVerion(this.requestType, version);
19
+ }
20
+ };
21
+ handler.registerRequestHandler(this);
22
+ }
23
+ }
24
+ exports.StopZSpaceBase = StopZSpaceBase;
@@ -2,6 +2,8 @@ export * from "./DisposeAppBase";
2
2
  export * from "./SetAppStateBase";
3
3
  export * from "./SetDevicePreviewBase";
4
4
  export * from "./SetIsAuthoringBase";
5
+ export * from "./StartZSpaceBase";
5
6
  export * from "./ShowBabylonInspectorBase";
6
7
  export * from "./StartAppBase";
7
8
  export * from "./StopAppBase";
9
+ export * from "./StopZSpaceBase";
@@ -14,6 +14,8 @@ __exportStar(require("./DisposeAppBase"), exports);
14
14
  __exportStar(require("./SetAppStateBase"), exports);
15
15
  __exportStar(require("./SetDevicePreviewBase"), exports);
16
16
  __exportStar(require("./SetIsAuthoringBase"), exports);
17
+ __exportStar(require("./StartZSpaceBase"), exports);
17
18
  __exportStar(require("./ShowBabylonInspectorBase"), exports);
18
19
  __exportStar(require("./StartAppBase"), exports);
19
20
  __exportStar(require("./StopAppBase"), exports);
21
+ __exportStar(require("./StopZSpaceBase"), exports);
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeTrySetHoverLabel = void 0;
4
4
  function makeTrySetHoverLabel(hoverLabels, babylon) {
5
5
  return function trySetHoverLabel(position) {
6
- babylon.sceneObjectPick(position).then(sceneObjectID => {
6
+ const sceneObjectID = babylon.sceneObjectPixelPick(position);
7
+ if (sceneObjectID) {
7
8
  hoverLabels.showLabelForSceneObject(sceneObjectID, position);
8
- });
9
+ }
9
10
  };
10
11
  }
11
12
  exports.makeTrySetHoverLabel = makeTrySetHoverLabel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vived/app",
3
- "version": "2.30.0",
3
+ "version": "2.31.0",
4
4
  "description": "Public package for the VIVED Learning App system",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",