@netless/window-manager 0.4.0-canary.2 → 0.4.0-canary.20
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/.idea/inspectionProfiles/Project_Default.xml +7 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/.idea/window-manager.iml +12 -0
- package/.vscode/settings.json +1 -0
- package/CHANGELOG.md +29 -1
- package/README.md +1 -0
- package/dist/App/MagixEvent/index.d.ts +29 -0
- package/dist/App/Storage/StorageEvent.d.ts +8 -0
- package/dist/App/Storage/index.d.ts +39 -0
- package/dist/App/Storage/typings.d.ts +22 -0
- package/dist/App/Storage/utils.d.ts +5 -0
- package/dist/AppContext.d.ts +40 -16
- package/dist/AppListener.d.ts +1 -1
- package/dist/AppManager.d.ts +15 -11
- package/dist/AppProxy.d.ts +6 -5
- package/dist/AttributesDelegate.d.ts +2 -2
- package/dist/BoxManager.d.ts +6 -3
- package/dist/BuiltinApps.d.ts +5 -0
- package/dist/ContainerResizeObserver.d.ts +10 -0
- package/dist/Cursor/Cursor.d.ts +8 -11
- package/dist/Cursor/index.d.ts +5 -16
- package/dist/Helper.d.ts +6 -0
- package/dist/ReconnectRefresher.d.ts +0 -1
- package/dist/Register/storage.d.ts +5 -1
- package/dist/Utils/Common.d.ts +7 -2
- package/dist/Utils/Reactive.d.ts +1 -1
- package/dist/Utils/RoomHacker.d.ts +1 -1
- package/dist/{MainView.d.ts → View/MainView.d.ts} +5 -6
- package/dist/View/ViewManager.d.ts +13 -0
- package/dist/constants.d.ts +3 -7
- package/dist/index.d.ts +25 -10
- package/dist/index.es.js +41 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +41 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/typings.d.ts +3 -2
- package/docs/api.md +36 -6
- package/docs/concept.md +9 -0
- package/package.json +7 -6
- package/src/App/MagixEvent/index.ts +68 -0
- package/src/App/Storage/StorageEvent.ts +21 -0
- package/src/App/Storage/index.ts +289 -0
- package/src/App/Storage/typings.ts +23 -0
- package/src/App/Storage/utils.ts +17 -0
- package/src/AppContext.ts +66 -24
- package/src/AppListener.ts +15 -14
- package/src/AppManager.ts +141 -63
- package/src/AppProxy.ts +50 -52
- package/src/AttributesDelegate.ts +2 -2
- package/src/BoxManager.ts +40 -24
- package/src/BuiltinApps.ts +23 -0
- package/src/ContainerResizeObserver.ts +62 -0
- package/src/Cursor/Cursor.ts +22 -36
- package/src/Cursor/index.ts +33 -139
- package/src/Helper.ts +30 -0
- package/src/ReconnectRefresher.ts +0 -5
- package/src/Register/index.ts +25 -16
- package/src/Register/loader.ts +1 -1
- package/src/Register/storage.ts +6 -1
- package/src/Utils/Common.ts +66 -13
- package/src/Utils/Reactive.ts +9 -3
- package/src/Utils/RoomHacker.ts +42 -13
- package/src/{MainView.ts → View/MainView.ts} +25 -36
- package/src/View/ViewManager.ts +52 -0
- package/src/constants.ts +3 -4
- package/src/index.ts +96 -72
- package/src/shim.d.ts +5 -0
- package/src/style.css +7 -1
- package/src/typings.ts +3 -2
- package/vite.config.js +8 -2
- package/dist/Base/Context.d.ts +0 -13
- package/dist/Base/index.d.ts +0 -7
- package/dist/Utils/CameraStore.d.ts +0 -15
- package/dist/ViewManager.d.ts +0 -29
- package/dist/sdk.d.ts +0 -14
- package/src/Base/Context.ts +0 -49
- package/src/Base/index.ts +0 -10
- package/src/Utils/CameraStore.ts +0 -72
- package/src/sdk.ts +0 -39
- package/src/viewManager.ts +0 -177
package/dist/sdk.d.ts
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
import { WindowManager } from './index';
|
2
|
-
import type { MountParams } from "./index";
|
3
|
-
import type { WhiteWebSdkConfiguration, JoinRoomParams } from "white-web-sdk";
|
4
|
-
declare type WhiteWindowSDKConfiguration = Omit<WhiteWebSdkConfiguration, "useMobXState">;
|
5
|
-
declare type WindowJoinRoomParams = {
|
6
|
-
joinRoomParams: Omit<JoinRoomParams, "useMultiViews" | "disableMagixEventDispatchLimit">;
|
7
|
-
mountParams: Omit<MountParams, "room">;
|
8
|
-
};
|
9
|
-
export declare class WhiteWindowSDK {
|
10
|
-
private sdk;
|
11
|
-
constructor(params: WhiteWindowSDKConfiguration);
|
12
|
-
mount(params: WindowJoinRoomParams): Promise<WindowManager>;
|
13
|
-
}
|
14
|
-
export {};
|
package/src/Base/Context.ts
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
import { emitter } from "../index";
|
2
|
-
import type { AppManager } from "../AppManager";
|
3
|
-
|
4
|
-
export class Context {
|
5
|
-
public observerId: number;
|
6
|
-
|
7
|
-
constructor(private manager: AppManager) {
|
8
|
-
this.observerId = manager.displayer.observerId;
|
9
|
-
|
10
|
-
emitter.on("observerIdChange", id => {
|
11
|
-
this.observerId = id;
|
12
|
-
});
|
13
|
-
};
|
14
|
-
|
15
|
-
public get uid() {
|
16
|
-
return this.manager.room?.uid || "";
|
17
|
-
}
|
18
|
-
|
19
|
-
public findMember = (memberId: number) => {
|
20
|
-
const roomMembers = this.manager.room?.state.roomMembers;
|
21
|
-
return roomMembers?.find(member => member.memberId === memberId);
|
22
|
-
}
|
23
|
-
|
24
|
-
public findMemberByUid = (uid: string) => {
|
25
|
-
const roomMembers = this.manager.room?.state.roomMembers;
|
26
|
-
return roomMembers?.find(member => member.payload?.uid === uid);
|
27
|
-
}
|
28
|
-
|
29
|
-
public updateManagerRect() {
|
30
|
-
this.manager.boxManager?.updateManagerRect();
|
31
|
-
}
|
32
|
-
|
33
|
-
public blurFocusBox() {
|
34
|
-
this.manager.boxManager?.blurAllBox();
|
35
|
-
}
|
36
|
-
|
37
|
-
public switchAppToWriter(id: string) {
|
38
|
-
this.manager.viewManager.switchAppToWriter(id);
|
39
|
-
}
|
40
|
-
}
|
41
|
-
|
42
|
-
let context: Context;
|
43
|
-
|
44
|
-
export const createContext = (manager: AppManager) => {
|
45
|
-
if (!context) {
|
46
|
-
context = new Context(manager);
|
47
|
-
}
|
48
|
-
return context;
|
49
|
-
};
|
package/src/Base/index.ts
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
import type { AppManager } from "../AppManager";
|
2
|
-
import { store } from "../AttributesDelegate";
|
3
|
-
import { createContext } from "./Context";
|
4
|
-
|
5
|
-
export class Base {
|
6
|
-
public store = store;
|
7
|
-
public context = createContext(this.manager);
|
8
|
-
|
9
|
-
constructor(public manager: AppManager) {}
|
10
|
-
}
|
package/src/Utils/CameraStore.ts
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
import { AnimationMode } from "white-web-sdk";
|
2
|
-
import type { Camera, View } from "white-web-sdk";
|
3
|
-
|
4
|
-
export class CameraStore {
|
5
|
-
private cameras: Map<string, Camera> = new Map();
|
6
|
-
private listeners: Map<string, any> = new Map();
|
7
|
-
|
8
|
-
public setCamera(id: string, camera: Camera) {
|
9
|
-
this.cameras.set(id, camera);
|
10
|
-
}
|
11
|
-
|
12
|
-
public getCamera(id: string) {
|
13
|
-
return this.cameras.get(id);
|
14
|
-
}
|
15
|
-
|
16
|
-
public deleteCamera(id: string) {
|
17
|
-
this.cameras.delete(id);
|
18
|
-
}
|
19
|
-
|
20
|
-
public recoverCamera(id: string, view?: View) {
|
21
|
-
const camera = this.cameras.get(id);
|
22
|
-
if (camera && view) {
|
23
|
-
view.moveCamera({
|
24
|
-
...camera,
|
25
|
-
animationMode: AnimationMode.Immediately,
|
26
|
-
});
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
public register(id: string, view: View) {
|
31
|
-
this.onListener(id, view);
|
32
|
-
this.setCamera(id, view.camera);
|
33
|
-
}
|
34
|
-
|
35
|
-
public unregister(id: string, view?: View) {
|
36
|
-
if (view) {
|
37
|
-
this.offListener(id, view);
|
38
|
-
}
|
39
|
-
this.listeners.delete(id);
|
40
|
-
this.deleteCamera(id);
|
41
|
-
}
|
42
|
-
|
43
|
-
private onListener = (id: string, view: View) => {
|
44
|
-
view.callbacks.on("onCameraUpdated", this.getOrCreateListener(id));
|
45
|
-
};
|
46
|
-
|
47
|
-
private offListener = (id: string, view: View) => {
|
48
|
-
view.callbacks.off("onCameraUpdated", this.getOrCreateListener(id));
|
49
|
-
};
|
50
|
-
|
51
|
-
public async switchView(id: string, view: View | undefined, callback: () => void) {
|
52
|
-
if (view) {
|
53
|
-
this.offListener(id, view);
|
54
|
-
await callback();
|
55
|
-
this.recoverCamera(id, view);
|
56
|
-
this.onListener(id, view);
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
private getOrCreateListener(id: string) {
|
61
|
-
let listener = this.listeners.get(id);
|
62
|
-
if (listener) {
|
63
|
-
return listener;
|
64
|
-
} else {
|
65
|
-
listener = (camera: Camera) => {
|
66
|
-
this.setCamera(id, camera);
|
67
|
-
};
|
68
|
-
this.listeners.set(id, listener);
|
69
|
-
return listener;
|
70
|
-
}
|
71
|
-
}
|
72
|
-
}
|
package/src/sdk.ts
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
import { isBoolean } from 'lodash';
|
2
|
-
import { WhiteWebSdk } from 'white-web-sdk';
|
3
|
-
import { WindowManager } from './index';
|
4
|
-
import type { MountParams } from "./index";
|
5
|
-
import type { WhiteWebSdkConfiguration, JoinRoomParams } from "white-web-sdk";
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
type WhiteWindowSDKConfiguration = Omit<WhiteWebSdkConfiguration, "useMobXState">
|
10
|
-
type WindowJoinRoomParams = {
|
11
|
-
joinRoomParams: Omit<JoinRoomParams, "useMultiViews" | "disableMagixEventDispatchLimit">,
|
12
|
-
mountParams: Omit<MountParams, "room">,
|
13
|
-
}
|
14
|
-
|
15
|
-
export class WhiteWindowSDK {
|
16
|
-
private sdk: WhiteWebSdk;
|
17
|
-
|
18
|
-
constructor(params: WhiteWindowSDKConfiguration) {
|
19
|
-
this.sdk = new WhiteWebSdk({ ...params, useMobXState: true });
|
20
|
-
}
|
21
|
-
|
22
|
-
public async mount(params: WindowJoinRoomParams): Promise<WindowManager> {
|
23
|
-
const invisiblePlugins = params.joinRoomParams.invisiblePlugins || [];
|
24
|
-
const room = await this.sdk.joinRoom({
|
25
|
-
...params.joinRoomParams,
|
26
|
-
useMultiViews: true,
|
27
|
-
invisiblePlugins: [...invisiblePlugins, WindowManager],
|
28
|
-
disableMagixEventDispatchLimit: true,
|
29
|
-
});
|
30
|
-
const manager = await WindowManager.mount({
|
31
|
-
room,
|
32
|
-
...params.mountParams
|
33
|
-
});
|
34
|
-
if (isBoolean(params.joinRoomParams.disableCameraTransform)) {
|
35
|
-
manager.mainView.disableCameraTransform = params.joinRoomParams.disableCameraTransform;
|
36
|
-
}
|
37
|
-
return manager;
|
38
|
-
}
|
39
|
-
}
|
package/src/viewManager.ts
DELETED
@@ -1,177 +0,0 @@
|
|
1
|
-
import { Base } from "./Base";
|
2
|
-
import { callbacks, WindowManager } from "./index";
|
3
|
-
import { reaction, ViewVisionMode } from "white-web-sdk";
|
4
|
-
import { SET_SCENEPATH_DELAY } from "./constants";
|
5
|
-
import { notifyMainViewModeChange, setScenePath, setViewMode } from "./Utils/Common";
|
6
|
-
import type { View, Displayer } from "white-web-sdk";
|
7
|
-
import type { AppManager } from "./AppManager";
|
8
|
-
|
9
|
-
export class ViewManager extends Base {
|
10
|
-
private views: Map<string, View> = new Map();
|
11
|
-
private timer?: number;
|
12
|
-
private appTimer?: number;
|
13
|
-
|
14
|
-
private mainViewProxy = this.manager.mainViewProxy;
|
15
|
-
private displayer = this.manager.displayer;
|
16
|
-
|
17
|
-
constructor(manager: AppManager) {
|
18
|
-
super(manager);
|
19
|
-
setTimeout(() => {
|
20
|
-
// 延迟初始化 focus 的 reaction
|
21
|
-
this.manager.refresher?.add("focus", () => {
|
22
|
-
return reaction(
|
23
|
-
() => this.store.focus,
|
24
|
-
focus => {
|
25
|
-
if (focus) {
|
26
|
-
this.switchAppToWriter(focus);
|
27
|
-
} else {
|
28
|
-
this.switchMainViewToWriter();
|
29
|
-
this.context.blurFocusBox();
|
30
|
-
}
|
31
|
-
},
|
32
|
-
{ fireImmediately: true }
|
33
|
-
);
|
34
|
-
});
|
35
|
-
}, 100);
|
36
|
-
}
|
37
|
-
|
38
|
-
public get currentScenePath(): string {
|
39
|
-
return this.displayer.state.sceneState.scenePath;
|
40
|
-
}
|
41
|
-
|
42
|
-
public get mainView(): View {
|
43
|
-
return this.mainViewProxy.view;
|
44
|
-
}
|
45
|
-
|
46
|
-
public createView(appId: string): View {
|
47
|
-
const view = createView(this.displayer);
|
48
|
-
setViewMode(view, ViewVisionMode.Freedom);
|
49
|
-
this.views.set(appId, view);
|
50
|
-
return view;
|
51
|
-
}
|
52
|
-
|
53
|
-
public destroyView(appId: string): void {
|
54
|
-
const view = this.views.get(appId);
|
55
|
-
if (view) {
|
56
|
-
this.releaseView(view);
|
57
|
-
this.views.delete(appId);
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
private releaseView(view: View) {
|
62
|
-
if (!(view as any).didRelease) {
|
63
|
-
view.release();
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
|
-
public getView(appId: string): View | undefined {
|
68
|
-
return this.views.get(appId);
|
69
|
-
}
|
70
|
-
|
71
|
-
public switchMainViewToWriter(): Promise<boolean> | undefined {
|
72
|
-
if (this.timer) {
|
73
|
-
clearTimeout(this.timer);
|
74
|
-
}
|
75
|
-
if (this.mainView.mode === ViewVisionMode.Writable) return;
|
76
|
-
this.freedomAllViews();
|
77
|
-
return new Promise((resolve, reject) => {
|
78
|
-
this.timer = window.setTimeout(() => {
|
79
|
-
try {
|
80
|
-
const mainViewScenePath = this.store.getMainViewScenePath();
|
81
|
-
if (mainViewScenePath) {
|
82
|
-
this.freedomAllViews();
|
83
|
-
setScenePath(this.manager.room, mainViewScenePath);
|
84
|
-
this.mainViewProxy.switchViewModeToWriter();
|
85
|
-
}
|
86
|
-
resolve(true);
|
87
|
-
} catch (error) {
|
88
|
-
reject(error);
|
89
|
-
}
|
90
|
-
}, SET_SCENEPATH_DELAY);
|
91
|
-
});
|
92
|
-
}
|
93
|
-
|
94
|
-
public freedomAllViews(): void {
|
95
|
-
this.manager.appProxies.forEach(appProxy => {
|
96
|
-
appProxy.setViewFocusScenePath();
|
97
|
-
if (appProxy.view) {
|
98
|
-
setViewMode(appProxy.view, ViewVisionMode.Freedom);
|
99
|
-
}
|
100
|
-
});
|
101
|
-
if (this.mainView.mode === ViewVisionMode.Writable) {
|
102
|
-
notifyMainViewModeChange(callbacks, ViewVisionMode.Freedom);
|
103
|
-
setViewMode(this.mainView, ViewVisionMode.Freedom);
|
104
|
-
}
|
105
|
-
if (!this.mainView.focusScenePath) {
|
106
|
-
this.store.setMainViewFocusPath(this.mainView);
|
107
|
-
}
|
108
|
-
}
|
109
|
-
|
110
|
-
public switchAppToWriter(id: string): void {
|
111
|
-
if (this.appTimer) {
|
112
|
-
clearTimeout(this.appTimer);
|
113
|
-
}
|
114
|
-
this.freedomAllViews();
|
115
|
-
// 为了同步端不闪烁, 需要给 room setScenePath 一个延迟
|
116
|
-
this.appTimer = setTimeout(() => {
|
117
|
-
const appProxy = this.manager.appProxies.get(id);
|
118
|
-
if (appProxy) {
|
119
|
-
if (this.manager.boxManager?.minimized) return;
|
120
|
-
appProxy.setScenePath();
|
121
|
-
appProxy.switchToWritable();
|
122
|
-
appProxy.focusBox();
|
123
|
-
}
|
124
|
-
}, SET_SCENEPATH_DELAY);
|
125
|
-
}
|
126
|
-
|
127
|
-
public destroy(): void {
|
128
|
-
this.mainViewProxy.removeMainViewListener();
|
129
|
-
if (WindowManager.wrapper) {
|
130
|
-
WindowManager.wrapper.parentNode?.removeChild(WindowManager.wrapper);
|
131
|
-
WindowManager.wrapper = undefined;
|
132
|
-
}
|
133
|
-
this.releaseView(this.mainView);
|
134
|
-
}
|
135
|
-
}
|
136
|
-
|
137
|
-
export const createView = (displayer: Displayer): View => {
|
138
|
-
const view = displayer.views.createView();
|
139
|
-
setDefaultCameraBound(view);
|
140
|
-
return view;
|
141
|
-
};
|
142
|
-
|
143
|
-
export const setDefaultCameraBound = (view: View) => {
|
144
|
-
view.setCameraBound({
|
145
|
-
maxContentMode: () => 10,
|
146
|
-
minContentMode: () => 0.1,
|
147
|
-
});
|
148
|
-
};
|
149
|
-
|
150
|
-
export const setupWrapper = (
|
151
|
-
root: HTMLElement
|
152
|
-
): {
|
153
|
-
playground: HTMLDivElement;
|
154
|
-
wrapper: HTMLDivElement;
|
155
|
-
sizer: HTMLDivElement;
|
156
|
-
mainViewElement: HTMLDivElement;
|
157
|
-
} => {
|
158
|
-
const playground = document.createElement("div");
|
159
|
-
playground.className = "netless-window-manager-playground";
|
160
|
-
|
161
|
-
const sizer = document.createElement("div");
|
162
|
-
sizer.className = "netless-window-manager-sizer";
|
163
|
-
|
164
|
-
const wrapper = document.createElement("div");
|
165
|
-
wrapper.className = "netless-window-manager-wrapper";
|
166
|
-
|
167
|
-
const mainViewElement = document.createElement("div");
|
168
|
-
mainViewElement.className = "netless-window-manager-main-view";
|
169
|
-
|
170
|
-
playground.appendChild(sizer);
|
171
|
-
sizer.appendChild(wrapper);
|
172
|
-
wrapper.appendChild(mainViewElement);
|
173
|
-
root.appendChild(playground);
|
174
|
-
WindowManager.wrapper = wrapper;
|
175
|
-
|
176
|
-
return { playground, wrapper, sizer, mainViewElement };
|
177
|
-
};
|