@netless/window-manager 1.0.0-canary.1 → 1.0.0-canary.12

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.
Files changed (49) hide show
  1. package/__mocks__/white-web-sdk.ts +10 -1
  2. package/dist/App/AppContext.d.ts +16 -15
  3. package/dist/App/AppPageStateImpl.d.ts +6 -2
  4. package/dist/App/AppProxy.d.ts +26 -4
  5. package/dist/App/AppViewSync.d.ts +11 -0
  6. package/dist/App/WhiteboardView.d.ts +24 -0
  7. package/dist/App/index.d.ts +1 -0
  8. package/dist/AppManager.d.ts +5 -3
  9. package/dist/AttributesDelegate.d.ts +6 -14
  10. package/dist/BoxManager.d.ts +2 -3
  11. package/dist/Helper.d.ts +12 -2
  12. package/dist/InternalEmitter.d.ts +4 -0
  13. package/dist/Page/PageController.d.ts +1 -0
  14. package/dist/ReconnectRefresher.d.ts +1 -1
  15. package/dist/Utils/Common.d.ts +1 -0
  16. package/dist/View/CameraSynchronizer.d.ts +7 -7
  17. package/dist/View/MainView.d.ts +0 -1
  18. package/dist/constants.d.ts +1 -0
  19. package/dist/index.cjs.js +12 -12
  20. package/dist/index.d.ts +6 -3
  21. package/dist/index.es.js +715 -654
  22. package/dist/index.umd.js +12 -12
  23. package/dist/style.css +1 -1
  24. package/dist/typings.d.ts +4 -0
  25. package/docs/app-context.md +98 -64
  26. package/docs/develop-app.md +2 -5
  27. package/package.json +3 -2
  28. package/pnpm-lock.yaml +11 -5
  29. package/src/App/AppContext.ts +71 -74
  30. package/src/App/AppPageStateImpl.ts +25 -6
  31. package/src/App/AppProxy.ts +206 -26
  32. package/src/App/AppViewSync.ts +73 -0
  33. package/src/App/Storage/index.ts +4 -4
  34. package/src/App/WhiteboardView.ts +89 -0
  35. package/src/App/index.ts +1 -0
  36. package/src/AppManager.ts +32 -23
  37. package/src/AttributesDelegate.ts +14 -17
  38. package/src/BoxManager.ts +5 -8
  39. package/src/Helper.ts +10 -1
  40. package/src/InternalEmitter.ts +4 -0
  41. package/src/Page/PageController.ts +1 -0
  42. package/src/ReconnectRefresher.ts +1 -0
  43. package/src/Utils/Common.ts +6 -0
  44. package/src/View/CameraSynchronizer.ts +32 -27
  45. package/src/View/MainView.ts +22 -39
  46. package/src/constants.ts +2 -0
  47. package/src/index.ts +24 -10
  48. package/src/style.css +9 -0
  49. package/src/typings.ts +4 -0
@@ -34,8 +34,17 @@ enum ViewMode {
34
34
  Broadcaster = "broadcaster",
35
35
  }
36
36
 
37
+ enum AnimationMode {
38
+ Immediately = "immediately",
39
+ Continuous = "continuous",
40
+ }
41
+
37
42
  const isPlayer = vi.fn(() => false);
43
+ const unlistenDisposed = vi.fn();
44
+ const unlistenUpdated = vi.fn();
45
+ const toJS = vi.fn();
38
46
 
39
47
  export {
40
- InvisiblePlugin, UpdateEventKind, ApplianceNames, ViewMode, isPlayer
48
+ InvisiblePlugin, UpdateEventKind, ApplianceNames, ViewMode, isPlayer, unlistenDisposed,
49
+ unlistenUpdated, toJS, AnimationMode
41
50
  }
@@ -4,12 +4,12 @@ import type { Room, SceneDefinition, View } from "white-web-sdk";
4
4
  import type { ReadonlyTeleBox } from "@netless/telebox-insider";
5
5
  import type Emittery from "emittery";
6
6
  import type { BoxManager } from "../BoxManager";
7
- import type { AppEmitterEvent } from "../index";
7
+ import type { AppEmitterEvent, Member } from "../index";
8
8
  import type { AppManager } from "../AppManager";
9
9
  import type { AppProxy } from "./AppProxy";
10
10
  import type { MagixEventAddListener, MagixEventDispatcher, MagixEventRemoveListener } from "./MagixEvent";
11
- import type { AddPageParams, PageController, PageState } from "../Page";
12
- export declare class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOptions = any> implements PageController {
11
+ import { WhiteBoardView } from "./WhiteboardView";
12
+ export declare class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOptions = any> {
13
13
  private manager;
14
14
  private boxManager;
15
15
  appId: string;
@@ -30,23 +30,30 @@ export declare class AppContext<TAttributes = any, TMagixEventPayloads = any, TA
30
30
  private store;
31
31
  readonly isAddApp: boolean;
32
32
  readonly isReplay: boolean;
33
+ private whiteBoardView?;
34
+ _viewWrapper?: HTMLElement;
33
35
  constructor(manager: AppManager, boxManager: BoxManager, appId: string, appProxy: AppProxy, appOptions?: TAppOptions | (() => TAppOptions) | undefined);
34
- getDisplayer: () => import("white-web-sdk").Displayer<import("white-web-sdk").DisplayerCallbacks>;
36
+ get displayer(): import("white-web-sdk").Displayer<import("white-web-sdk").DisplayerCallbacks>;
37
+ get destroyed(): boolean;
35
38
  /** @deprecated Use context.storage.state instead. */
36
39
  getAttributes: () => TAttributes | undefined;
37
40
  getScenes: () => SceneDefinition[] | undefined;
38
- getView: () => View | undefined;
39
- mountView: (dom: HTMLElement) => void;
41
+ get view(): View | undefined;
42
+ createWhiteBoardView: (size?: number | undefined) => WhiteBoardView;
43
+ private ensurePageSize;
40
44
  getInitScenePath: () => string | undefined;
41
45
  /** Get App writable status. */
42
- getIsWritable: () => boolean;
46
+ get isWritable(): boolean;
43
47
  /** Get the App Window UI box. */
44
- getBox: () => ReadonlyTeleBox;
45
- getRoom: () => Room | undefined;
48
+ get box(): ReadonlyTeleBox;
49
+ get room(): Room | undefined;
50
+ get members(): Member[];
51
+ get memberState(): Member;
46
52
  /** @deprecated Use context.storage.setState instead. */
47
53
  setAttributes: (attributes: TAttributes) => void;
48
54
  /** @deprecated Use context.storage.setState instead. */
49
55
  updateAttributes: (keys: string[], value: any) => void;
56
+ /** @deprecated Use Pages api instead. */
50
57
  setScenePath: (scenePath: string) => Promise<void>;
51
58
  /** Get the local App options. */
52
59
  getAppOptions: () => TAppOptions | undefined;
@@ -66,10 +73,4 @@ export declare class AppContext<TAttributes = any, TMagixEventPayloads = any, TA
66
73
  addMagixEventListener: MagixEventAddListener<TMagixEventPayloads>;
67
74
  /** Remove a Magix event listener. */
68
75
  removeMagixEventListener: MagixEventRemoveListener<TMagixEventPayloads>;
69
- /** PageController */
70
- nextPage: () => Promise<boolean>;
71
- prevPage: () => Promise<boolean>;
72
- addPage: (params?: AddPageParams | undefined) => Promise<void>;
73
- removePage: (index?: number | undefined) => Promise<boolean>;
74
- get pageState(): PageState;
75
76
  }
@@ -1,4 +1,4 @@
1
- import type { Displayer, View } from "white-web-sdk";
1
+ import type { Displayer, ScenesCallbacksNode, View } from "white-web-sdk";
2
2
  import type { PageState } from "../Page";
3
3
  export declare type AppPageStateParams = {
4
4
  displayer: Displayer;
@@ -8,8 +8,12 @@ export declare type AppPageStateParams = {
8
8
  };
9
9
  export declare class AppPageStateImpl {
10
10
  private params;
11
- private sceneNode;
11
+ sceneNode: ScenesCallbacksNode | null;
12
+ private scenePath?;
13
+ private view?;
12
14
  constructor(params: AppPageStateParams);
15
+ createSceneNode: (scenePath: string) => ScenesCallbacksNode | null;
16
+ setView(view: View): void;
13
17
  private onSceneChange;
14
18
  getFullPath(index: number): string | undefined;
15
19
  toObject(): PageState;
@@ -1,7 +1,10 @@
1
1
  import Emittery from "emittery";
2
2
  import { AppContext } from "./AppContext";
3
+ import { AppPageStateImpl } from "./AppPageStateImpl";
4
+ import { Val } from "value-enhancer";
5
+ import type { ICamera, ISize } from "../AttributesDelegate";
3
6
  import type { AppEmitterEvent, AppInitState, BaseInsertParams } from "../index";
4
- import type { SceneState, View, SceneDefinition } from "white-web-sdk";
7
+ import type { SceneState, View, SceneDefinition, Camera } from "white-web-sdk";
5
8
  import type { AppManager } from "../AppManager";
6
9
  import type { NetlessApp } from "../typings";
7
10
  import type { ReadonlyTeleBox } from "@netless/telebox-insider";
@@ -13,6 +16,7 @@ export declare class AppProxy implements PageRemoveService {
13
16
  kind: string;
14
17
  id: string;
15
18
  scenePath?: string;
19
+ private appScenePath;
16
20
  appEmitter: AppEmitter;
17
21
  scenes?: SceneDefinition[];
18
22
  private appListener;
@@ -20,14 +24,26 @@ export declare class AppProxy implements PageRemoveService {
20
24
  private appProxies;
21
25
  private viewManager;
22
26
  private store;
27
+ uid: string;
23
28
  isAddApp: boolean;
24
- private status;
29
+ status: "normal" | "destroyed";
25
30
  private stateKey;
26
- private _pageState;
27
- private _prevFullPath;
31
+ _pageState: AppPageStateImpl;
28
32
  appResult?: NetlessApp<any>;
29
33
  appContext?: AppContext<any, any>;
34
+ private sideEffectManager;
35
+ private valManager;
36
+ private fullPath$;
37
+ private appViewSync?;
38
+ camera$: Val<ICamera | undefined, any>;
39
+ size$: Val<ISize | undefined, any>;
40
+ box$: Val<ReadonlyTeleBox | undefined, any>;
41
+ view$: Val<View | undefined, any>;
30
42
  constructor(params: BaseInsertParams, manager: AppManager, appId: string, isAddApp: boolean);
43
+ fireMemberStateChange: () => void;
44
+ private onMemberStateChange;
45
+ private computedInitialRect;
46
+ createAppDir(): View;
31
47
  private initScenes;
32
48
  get view(): View | undefined;
33
49
  get viewIndex(): number | undefined;
@@ -61,6 +77,12 @@ export declare class AppProxy implements PageRemoveService {
61
77
  removeSceneByIndex(index: number): Promise<boolean>;
62
78
  setSceneIndexWithoutSync(index: number): void;
63
79
  setSceneIndex(index: number): void;
80
+ storeCamera: (camera: ICamera) => void;
81
+ storeSize: (size: ISize) => void;
82
+ updateSize: (width: number, height: number) => void;
83
+ moveCamera: (camera: Camera) => void;
64
84
  destroy(needCloseBox: boolean, cleanAttrs: boolean, skipUpdate: boolean, error?: Error): Promise<void>;
85
+ private addCameraReaction;
86
+ private addSizeReaction;
65
87
  close(): Promise<void>;
66
88
  }
@@ -0,0 +1,11 @@
1
+ import type { View } from "white-web-sdk";
2
+ import type { AppProxy } from "./AppProxy";
3
+ export declare class AppViewSync {
4
+ private appProxy;
5
+ private sem;
6
+ private synchronizer;
7
+ constructor(appProxy: AppProxy);
8
+ bindView: (view?: View | undefined) => void;
9
+ private onCameraUpdatedByDevice;
10
+ destroy(): void;
11
+ }
@@ -0,0 +1,24 @@
1
+ import type { ReadonlyVal } from "value-enhancer";
2
+ import type { AddPageParams, PageController, PageState } from "../Page";
3
+ import type { AppProxy } from "./AppProxy";
4
+ import type { AppContext } from "./AppContext";
5
+ import type { Camera, View } from "white-web-sdk";
6
+ import type { TeleBoxRect } from "@netless/telebox-insider";
7
+ export declare class WhiteBoardView implements PageController {
8
+ view: View;
9
+ protected appContext: AppContext;
10
+ protected appProxy: AppProxy;
11
+ private removeViewWrapper;
12
+ ensureSize: (size: number) => void;
13
+ readonly pageState$: ReadonlyVal<PageState>;
14
+ constructor(view: View, appContext: AppContext, appProxy: AppProxy, removeViewWrapper: () => void, ensureSize: (size: number) => void);
15
+ get pageState(): PageState;
16
+ moveCamera(camera: Camera): void;
17
+ nextPage: () => Promise<boolean>;
18
+ prevPage: () => Promise<boolean>;
19
+ jumpPage: (index: number) => Promise<boolean>;
20
+ addPage: (params?: AddPageParams | undefined) => Promise<void>;
21
+ removePage: (index?: number | undefined) => Promise<boolean>;
22
+ setRect(rect: Omit<TeleBoxRect, "x" | "y">): void;
23
+ destroy(): void;
24
+ }
@@ -1,2 +1,3 @@
1
1
  export * from "./AppProxy";
2
2
  export * from "./AppContext";
3
+ export * from "./WhiteboardView";
@@ -7,6 +7,7 @@ import type { ReconnectRefresher } from "./ReconnectRefresher";
7
7
  import type { BoxManager } from "./BoxManager";
8
8
  import type { Displayer, Room, SceneState } from "white-web-sdk";
9
9
  import type { AddAppParams, TeleBoxRect } from "./index";
10
+ import type { Member } from "./Helper";
10
11
  export declare class AppManager {
11
12
  windowManger: WindowManager;
12
13
  displayer: Displayer;
@@ -15,15 +16,15 @@ export declare class AppManager {
15
16
  appStatus: Map<string, AppStatus>;
16
17
  store: import("./AttributesDelegate").AttributesDelegate;
17
18
  mainViewProxy: MainViewProxy;
18
- refresher?: ReconnectRefresher;
19
+ refresher: ReconnectRefresher;
19
20
  isReplay: boolean;
20
21
  mainViewScenesLength: number;
21
22
  private appListeners;
22
23
  boxManager?: BoxManager;
23
- private _prevSceneIndex;
24
- private _prevFocused;
25
24
  private callbacksNode;
26
25
  private appCreateQueue;
26
+ private sceneIndex$;
27
+ private focused$;
27
28
  private sideEffectManager;
28
29
  sceneState: SceneState | null;
29
30
  rootDirRemoving: boolean;
@@ -50,6 +51,7 @@ export declare class AppManager {
50
51
  get mainView(): import("white-web-sdk").View;
51
52
  get focusApp(): AppProxy | undefined;
52
53
  get uid(): string;
54
+ get members(): Member[];
53
55
  getMainViewSceneDir(): string;
54
56
  private onCreated;
55
57
  private onBoxMove;
@@ -14,7 +14,9 @@ export declare enum Fields {
14
14
  Position = "position",
15
15
  CursorState = "cursorState",
16
16
  FullPath = "fullPath",
17
- Registered = "registered"
17
+ Registered = "registered",
18
+ Camera = "camera",
19
+ Size = "size"
18
20
  }
19
21
  export declare type Apps = {
20
22
  [key: string]: AppSyncAttributes;
@@ -50,6 +52,7 @@ export declare class AttributesDelegate {
50
52
  getMinimized(): any;
51
53
  setupAppAttributes(params: AddAppParams, id: string, isDynamicPPT: boolean): void;
52
54
  updateAppState(appId: string, stateName: AppAttributes, state: any): void;
55
+ updateAppAttributes(appId: string, key: string, value: any): void;
53
56
  cleanAppAttributes(id: string): void;
54
57
  cleanFocus(): void;
55
58
  getAppSceneIndex(id: string): any;
@@ -59,8 +62,8 @@ export declare class AttributesDelegate {
59
62
  getBoxState(): any;
60
63
  setMainViewScenePath(scenePath: string): void;
61
64
  setMainViewSceneIndex(index: number): void;
62
- getMainViewCamera(): MainViewCamera;
63
- getMainViewSize(): MainViewSize;
65
+ getMainViewCamera(): ICamera;
66
+ getMainViewSize(): ISize;
64
67
  setMainViewCamera(camera: ICamera): void;
65
68
  setMainViewSize(size: ISize): void;
66
69
  setMainViewCameraAndSize(camera: ICamera, size: ISize): void;
@@ -71,17 +74,6 @@ export declare class AttributesDelegate {
71
74
  cleanCursor(uid: string): void;
72
75
  setMainViewFocusPath(mainView: View): void;
73
76
  }
74
- export declare type MainViewSize = {
75
- id: string;
76
- width: number;
77
- height: number;
78
- };
79
- export declare type MainViewCamera = {
80
- id: string;
81
- centerX: number;
82
- centerY: number;
83
- scale: number;
84
- };
85
77
  export declare type Cursors = {
86
78
  [key: string]: Cursor;
87
79
  };
@@ -44,10 +44,10 @@ export declare type CreateTeleBoxManagerConfig = {
44
44
  collectorStyles?: Partial<CSSStyleDeclaration>;
45
45
  prefersColorScheme?: TeleBoxColorScheme;
46
46
  stageRatio?: number;
47
+ highlightStage?: boolean;
47
48
  };
48
49
  export declare type BoxManagerContext = {
49
50
  safeSetAttributes: (attributes: any) => void;
50
- getMainView: () => View;
51
51
  updateAppState: (appId: string, field: AppAttributes, value: any) => void;
52
52
  emitter: EmitterType;
53
53
  boxEmitter: BoxEmitterType;
@@ -63,7 +63,6 @@ export declare class BoxManager {
63
63
  teleBoxManager: TeleBoxManager;
64
64
  protected sideEffectManager: SideEffectManager;
65
65
  constructor(context: BoxManagerContext, createTeleBoxManagerConfig?: CreateTeleBoxManagerConfig);
66
- private get mainView();
67
66
  private get canOperate();
68
67
  get boxState(): "normal" | "minimized" | "maximized";
69
68
  get maximized(): boolean;
@@ -72,7 +71,7 @@ export declare class BoxManager {
72
71
  get prefersColorScheme(): TeleBoxColorScheme;
73
72
  get boxSize(): number;
74
73
  get stageRect(): TeleBoxRect;
75
- createBox(params: CreateBoxParams): void;
74
+ createBox(params: CreateBoxParams): ReadonlyTeleBox | undefined;
76
75
  setupBoxManager(createTeleBoxManagerConfig?: CreateTeleBoxManagerConfig): TeleBoxManager;
77
76
  getBox(appId: string): ReadonlyTeleBox | undefined;
78
77
  closeBox(appId: string, skipUpdate?: boolean): ReadonlyTeleBox | undefined;
package/dist/Helper.d.ts CHANGED
@@ -1,7 +1,17 @@
1
- import type { Room } from "white-web-sdk";
1
+ import type { Room, RoomMember } from "white-web-sdk";
2
2
  export declare const setupWrapper: (root: HTMLElement) => {
3
3
  playground: HTMLDivElement;
4
4
  mainViewElement: HTMLDivElement;
5
5
  };
6
6
  export declare const checkVersion: () => void;
7
- export declare const findMemberByUid: (room: Room | undefined, uid: string) => import("white-web-sdk").RoomMember | undefined;
7
+ export declare const findMemberByUid: (room: Room | undefined, uid: string) => RoomMember | undefined;
8
+ export declare type Member = RoomMember & {
9
+ uid: string;
10
+ };
11
+ export declare const serializeRoomMembers: (members: readonly RoomMember[]) => {
12
+ memberId: number;
13
+ memberState: import("white-web-sdk").MemberState;
14
+ session: string;
15
+ payload?: import("white-web-sdk").UserPayload | undefined;
16
+ uid: string;
17
+ }[];
@@ -1,6 +1,8 @@
1
1
  import Emittery from "emittery";
2
2
  import type { TeleBoxRect } from "@netless/telebox-insider";
3
3
  import type { AppInitState, CursorMovePayload } from "./index";
4
+ import type { Member } from "./Helper";
5
+ import type { MemberState } from "white-web-sdk";
4
6
  export declare type RemoveSceneParams = {
5
7
  scenePath: string;
6
8
  index?: number;
@@ -30,6 +32,8 @@ export declare type EmitterEvent = {
30
32
  changePageState: undefined;
31
33
  writableChange: boolean;
32
34
  containerSizeRatioUpdate: number;
35
+ roomMembersChange: Member[];
36
+ memberStateChange: MemberState;
33
37
  };
34
38
  export declare type EmitterType = Emittery<EmitterEvent>;
35
39
  export declare const emitter: EmitterType;
@@ -10,6 +10,7 @@ export declare type PageState = {
10
10
  export interface PageController {
11
11
  nextPage: () => Promise<boolean>;
12
12
  prevPage: () => Promise<boolean>;
13
+ jumpPage: (index: number) => Promise<boolean>;
13
14
  addPage: (params?: AddPageParams) => Promise<void>;
14
15
  removePage: (index: number) => Promise<boolean>;
15
16
  pageState: PageState;
@@ -17,7 +17,7 @@ export declare class ReconnectRefresher {
17
17
  private _onReconnected;
18
18
  private releaseDisposers;
19
19
  refresh(): void;
20
- add(id: string, func: any): void;
20
+ add(id: string, func: any): () => void;
21
21
  remove(id: string): void;
22
22
  hasReactor(id: string): boolean;
23
23
  destroy(): void;
@@ -4,6 +4,7 @@ import type Emittery from "emittery";
4
4
  export declare const genAppId: (kind: string) => Promise<string>;
5
5
  export declare const setViewFocusScenePath: (view: View, focusScenePath: string) => View | undefined;
6
6
  export declare const setViewSceneIndex: (view: View, index: number) => View | undefined;
7
+ export declare const releaseView: (view: View) => void;
7
8
  export declare const setScenePath: (room: Room | undefined, scenePath: string) => void;
8
9
  export declare const getScenePath: (room: Room | undefined, dir: string | undefined, index: number) => string | undefined;
9
10
  export declare const removeScenes: (room: Room | undefined, scenePath: string, index?: number | undefined) => void;
@@ -1,17 +1,17 @@
1
1
  import type { TeleBoxRect } from "@netless/telebox-insider";
2
- import type { Camera, View, Size } from "white-web-sdk";
3
- import type { MainViewSize } from "../AttributesDelegate";
2
+ import type { Camera, View } from "white-web-sdk";
3
+ import type { ISize } from "../AttributesDelegate";
4
4
  export declare type SaveCamera = (camera: Camera) => void;
5
5
  export declare class CameraSynchronizer {
6
6
  protected saveCamera: SaveCamera;
7
- protected remoteCamera?: Camera;
8
- protected remoteSize?: MainViewSize;
7
+ remoteCamera?: Camera;
8
+ remoteSize?: ISize;
9
9
  protected rect?: TeleBoxRect;
10
10
  protected view?: View;
11
11
  constructor(saveCamera: SaveCamera);
12
- setRect(rect: TeleBoxRect): void;
12
+ setRect: import("lodash").DebouncedFunc<(rect: TeleBoxRect) => void>;
13
13
  setView(view: View): void;
14
- onRemoteUpdate: import("lodash").DebouncedFunc<(camera: Camera, size: MainViewSize) => void>;
14
+ onRemoteUpdate: import("lodash").DebouncedFunc<(camera: Camera, size: ISize) => void>;
15
+ onRemoteSizeUpdate(size: ISize): void;
15
16
  onLocalCameraUpdate(camera: Camera): void;
16
- onLocalSizeUpdate(size: Size): void;
17
17
  }
@@ -19,7 +19,6 @@ export declare class MainViewProxy {
19
19
  addCameraReaction: () => void;
20
20
  setCameraAndSize(): void;
21
21
  private cameraReaction;
22
- sizeChangeHandler: import("lodash").DebouncedFunc<(size: Size) => void>;
23
22
  onUpdateContainerSizeRatio: () => void;
24
23
  get view(): View;
25
24
  get cameraState(): {
@@ -46,3 +46,4 @@ export declare const DEFAULT_CONTAINER_RATIO: number;
46
46
  export declare const ROOT_DIR = "/";
47
47
  export declare const INIT_DIR = "/init";
48
48
  export declare const SETUP_APP_DELAY = 50;
49
+ export declare const MAX_PAGE_SIZE = 500;