@netless/window-manager 0.4.32 → 1.0.0-canary.10

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 (56) 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 -5
  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 +9 -8
  11. package/dist/Helper.d.ts +12 -4
  12. package/dist/InternalEmitter.d.ts +6 -1
  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 +17 -0
  17. package/dist/View/MainView.d.ts +4 -6
  18. package/dist/constants.d.ts +1 -0
  19. package/dist/index.cjs.js +21 -22
  20. package/dist/index.d.ts +6 -5
  21. package/dist/index.es.js +2512 -2059
  22. package/dist/index.umd.js +21 -22
  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 +4 -3
  28. package/pnpm-lock.yaml +90 -97
  29. package/src/App/AppContext.ts +72 -75
  30. package/src/App/AppPageStateImpl.ts +25 -6
  31. package/src/App/AppProxy.ts +206 -35
  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 +107 -115
  39. package/src/Cursor/index.ts +5 -5
  40. package/src/Helper.ts +12 -16
  41. package/src/InternalEmitter.ts +10 -4
  42. package/src/Page/PageController.ts +1 -0
  43. package/src/ReconnectRefresher.ts +1 -0
  44. package/src/Utils/Common.ts +6 -0
  45. package/src/View/CameraSynchronizer.ts +72 -0
  46. package/src/View/MainView.ts +53 -78
  47. package/src/constants.ts +2 -0
  48. package/src/index.ts +31 -36
  49. package/src/style.css +9 -0
  50. package/src/typings.ts +4 -0
  51. package/vite.config.js +0 -1
  52. package/dist/ContainerResizeObserver.d.ts +0 -11
  53. package/dist/index.cjs.js.map +0 -1
  54. package/dist/index.es.js.map +0 -1
  55. package/dist/index.umd.js.map +0 -1
  56. package/src/ContainerResizeObserver.ts +0 -73
package/pnpm-lock.yaml CHANGED
@@ -4,7 +4,7 @@ specifiers:
4
4
  '@juggle/resize-observer': ^3.3.1
5
5
  '@netless/app-docs-viewer': ^0.2.9
6
6
  '@netless/app-media-player': 0.1.0-beta.5
7
- '@netless/telebox-insider': 0.2.26
7
+ '@netless/telebox-insider': 1.0.0-alpha.14
8
8
  '@rollup/plugin-commonjs': ^20.0.0
9
9
  '@rollup/plugin-node-resolve': ^13.0.4
10
10
  '@rollup/plugin-url': ^6.1.0
@@ -31,10 +31,11 @@ specifiers:
31
31
  prettier-plugin-svelte: ^2.4.0
32
32
  rollup-plugin-analyzer: ^4.0.0
33
33
  rollup-plugin-styles: ^3.14.1
34
- side-effect-manager: ^0.1.5
34
+ side-effect-manager: ^1.1.0
35
35
  svelte: ^3.42.4
36
36
  typescript: ^4.5.5
37
37
  uuid: ^7.0.3
38
+ value-enhancer: ^1.2.1
38
39
  video.js: '>=7'
39
40
  vite: ^2.5.3
40
41
  vitest: ^0.14.1
@@ -42,12 +43,13 @@ specifiers:
42
43
 
43
44
  dependencies:
44
45
  '@juggle/resize-observer': registry.npmmirror.com/@juggle/resize-observer/3.3.1
45
- '@netless/telebox-insider': registry.npmmirror.com/@netless/telebox-insider/0.2.26
46
+ '@netless/telebox-insider': 1.0.0-alpha.14
46
47
  emittery: registry.npmmirror.com/emittery/0.9.2
47
48
  lodash: registry.npmmirror.com/lodash/4.17.21
48
49
  p-retry: registry.npmmirror.com/p-retry/4.6.1
49
- side-effect-manager: registry.npmmirror.com/side-effect-manager/0.1.5
50
+ side-effect-manager: 1.1.0
50
51
  uuid: registry.npmmirror.com/uuid/7.0.3
52
+ value-enhancer: 1.2.1
51
53
  video.js: registry.npmmirror.com/video.js/7.18.1
52
54
 
53
55
  devDependencies:
@@ -86,7 +88,6 @@ packages:
86
88
 
87
89
  /@juggle/resize-observer/3.3.1:
88
90
  resolution: {integrity: sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==}
89
- dev: true
90
91
 
91
92
  /@netless/app-docs-viewer/0.2.9:
92
93
  resolution: {integrity: sha512-yuhfQ02nr61polMq8s3OiIIvA85yonJwCckr/rPYCB8hm8YV9Di9cYb85fB8Wy3A3do/1UVfYHTWa6Vcge6fLw==}
@@ -96,10 +97,36 @@ packages:
96
97
  vanilla-lazyload: 17.6.1
97
98
  dev: true
98
99
 
100
+ /@netless/telebox-insider/1.0.0-alpha.14:
101
+ resolution: {integrity: sha512-kDhoxnEZUOCjQDf/lDgHVBb/TaKywlnUXhSlSbyVDWefcVXcaXi6/zEPwDR0gMYWCqQQoEPFz9Jr8hd8hcEkyQ==}
102
+ dependencies:
103
+ '@juggle/resize-observer': 3.3.1
104
+ '@types/shallowequal': 1.1.1
105
+ emittery: 0.11.0
106
+ shallowequal: 1.1.0
107
+ side-effect-manager: 1.1.0
108
+ stylefire: 7.0.3
109
+ value-enhancer: 1.3.0
110
+ dev: false
111
+
99
112
  /@polka/url/1.0.0-next.21:
100
113
  resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
101
114
  dev: true
102
115
 
116
+ /@popmotion/easing/1.0.2:
117
+ resolution: {integrity: sha512-IkdW0TNmRnWTeWI7aGQIVDbKXPWHVEYdGgd5ZR4SH/Ty/61p63jCjrPxX1XrR7IGkl08bjhJROStD7j+RKgoIw==}
118
+ dev: false
119
+
120
+ /@popmotion/popcorn/0.4.4:
121
+ resolution: {integrity: sha512-jYO/8319fKoNLMlY4ZJPiPu8Ea8occYwRZhxpaNn/kZsK4QG2E7XFlXZMJBsTWDw7I1i0uaqyC4zn1nwEezLzg==}
122
+ dependencies:
123
+ '@popmotion/easing': 1.0.2
124
+ framesync: 4.1.0
125
+ hey-listen: 1.0.8
126
+ style-value-types: 3.2.0
127
+ tslib: 1.14.1
128
+ dev: false
129
+
103
130
  /@tootallnate/once/2.0.0:
104
131
  resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
105
132
  engines: {node: '>= 10'}
@@ -119,6 +146,10 @@ packages:
119
146
  resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==}
120
147
  dev: true
121
148
 
149
+ /@types/shallowequal/1.1.1:
150
+ resolution: {integrity: sha512-Lhni3aX80zbpdxRuWhnuYPm8j8UQaa571lHP/xI4W+7BAFhSIhRReXnqjEgT/XzPoXZTJkCqstFMJ8CZTK6IlQ==}
151
+ dev: false
152
+
122
153
  /@types/yauzl/2.10.0:
123
154
  resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==}
124
155
  requiresBuild: true
@@ -299,6 +330,11 @@ packages:
299
330
  webidl-conversions: 7.0.0
300
331
  dev: true
301
332
 
333
+ /emittery/0.11.0:
334
+ resolution: {integrity: sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g==}
335
+ engines: {node: '>=12'}
336
+ dev: false
337
+
302
338
  /errno/0.1.8:
303
339
  resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
304
340
  hasBin: true
@@ -558,6 +594,12 @@ packages:
558
594
  mime-types: 2.1.35
559
595
  dev: true
560
596
 
597
+ /framesync/4.1.0:
598
+ resolution: {integrity: sha512-MmgZ4wCoeVxNbx2xp5hN/zPDCbLSKiDt4BbbslK7j/pM2lg5S0vhTNv1v8BCVb99JPIo6hXBFdwzU7Q4qcAaoQ==}
599
+ dependencies:
600
+ hey-listen: 1.0.8
601
+ dev: false
602
+
561
603
  /fsevents/2.3.2:
562
604
  resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
563
605
  engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -586,6 +628,10 @@ packages:
586
628
  function-bind: 1.1.1
587
629
  dev: true
588
630
 
631
+ /hey-listen/1.0.8:
632
+ resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
633
+ dev: false
634
+
589
635
  /html-encoding-sniffer/3.0.0:
590
636
  resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
591
637
  engines: {node: '>=12'}
@@ -851,6 +897,14 @@ packages:
851
897
  xmlchars: 2.2.0
852
898
  dev: true
853
899
 
900
+ /shallowequal/1.1.0:
901
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
902
+ dev: false
903
+
904
+ /side-effect-manager/1.1.0:
905
+ resolution: {integrity: sha512-Gqy1tsBBYcKclLPIGDxMQiZJLM8CGdGg/DM3a5/8ic2x2A19rVUhVk/+Mt5RwNbpaNKmBPO/wxxzAnY2myQVTg==}
906
+ dev: false
907
+
854
908
  /sirv/2.0.2:
855
909
  resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==}
856
910
  engines: {node: '>= 10'}
@@ -870,6 +924,23 @@ packages:
870
924
  engines: {node: '>=0.10.0'}
871
925
  dev: true
872
926
 
927
+ /style-value-types/3.2.0:
928
+ resolution: {integrity: sha512-ih0mGsrYYmVvdDi++/66O6BaQPRPRMQHoZevNNdMMcPlP/cH28Rnfsqf1UEba/Bwfuw9T8BmIMwbGdzsPwQKrQ==}
929
+ dependencies:
930
+ hey-listen: 1.0.8
931
+ tslib: 1.14.1
932
+ dev: false
933
+
934
+ /stylefire/7.0.3:
935
+ resolution: {integrity: sha512-Q0l7NSeFz/OkX+o6/7Zg3VZxSAZeQzQpYomWmIpOehFM/rJNMSLVX5fgg6Q48ut2ETNKwdhm97mPNU643EBCoQ==}
936
+ dependencies:
937
+ '@popmotion/popcorn': 0.4.4
938
+ framesync: 4.1.0
939
+ hey-listen: 1.0.8
940
+ style-value-types: 3.2.0
941
+ tslib: 1.14.1
942
+ dev: false
943
+
873
944
  /supports-preserve-symlinks-flag/1.0.0:
874
945
  resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
875
946
  engines: {node: '>= 0.4'}
@@ -910,6 +981,10 @@ packages:
910
981
  punycode: 2.1.1
911
982
  dev: true
912
983
 
984
+ /tslib/1.14.1:
985
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
986
+ dev: false
987
+
913
988
  /type-check/0.3.2:
914
989
  resolution: {integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=}
915
990
  engines: {node: '>= 0.8.0'}
@@ -927,6 +1002,14 @@ packages:
927
1002
  engines: {node: '>= 4.0.0'}
928
1003
  dev: true
929
1004
 
1005
+ /value-enhancer/1.2.1:
1006
+ resolution: {integrity: sha512-11IrGi9xmVbr3twzuaMRrdUGzhdaE4eXvT6qYZlB5VrhK5uQzSPlYOEBlsIGH+dMvkakNkWGNIbxdZi87/MWuQ==}
1007
+ dev: false
1008
+
1009
+ /value-enhancer/1.3.0:
1010
+ resolution: {integrity: sha512-shI9N5ML4MGwD6bMu/My1l1+REFqhZGOuIjDN5Gf+k7gACfY2k8WtJEcqgdZMfepwivfhQxIfZp0riobUDZpDQ==}
1011
+ dev: false
1012
+
930
1013
  /vanilla-lazyload/17.6.1:
931
1014
  resolution: {integrity: sha512-Jn/WpWEIe+d6UUb8hw1qDO49W8lceFLW/ucWt8pdRcQvoQaucLtMnc9QHsm0Iz/xe4SCElEE2fyMZB8xC3e/6Q==}
932
1015
  dev: true
@@ -1202,19 +1285,6 @@ packages:
1202
1285
  version: 0.0.4
1203
1286
  dev: true
1204
1287
 
1205
- registry.npmmirror.com/@netless/telebox-insider/0.2.26:
1206
- resolution: {integrity: sha512-HOBi9HWK0Zf0nvzfjM0V/0QmZ69ec7L/lCKMwRcfiQHxAAJ/zo9fEm468WocYFsliixWW5L7HwMN0eHb0mw7hA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@netless/telebox-insider/-/telebox-insider-0.2.26.tgz}
1207
- name: '@netless/telebox-insider'
1208
- version: 0.2.26
1209
- dependencies:
1210
- '@types/shallowequal': registry.npmmirror.com/@types/shallowequal/1.1.1
1211
- eventemitter3: registry.npmmirror.com/eventemitter3/4.0.7
1212
- shallowequal: registry.npmmirror.com/shallowequal/1.1.0
1213
- side-effect-manager: registry.npmmirror.com/side-effect-manager/0.1.5
1214
- stylefire: registry.npmmirror.com/stylefire/7.0.3
1215
- value-enhancer: registry.npmmirror.com/value-enhancer/0.0.8
1216
- dev: false
1217
-
1218
1288
  registry.npmmirror.com/@netless/xml-js/1.6.15:
1219
1289
  resolution: {integrity: sha512-e0emMs7YtDB/ATUns1SJ61R9n9nfVvwwFodoc539Qt0ScksaCLCaFWgpEbLloj9sr60ry6Xd8QFHKULFIZB6zA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@netless/xml-js/-/xml-js-1.6.15.tgz}
1220
1290
  name: '@netless/xml-js'
@@ -1249,24 +1319,6 @@ packages:
1249
1319
  fastq: registry.npmmirror.com/fastq/1.13.0
1250
1320
  dev: true
1251
1321
 
1252
- registry.npmmirror.com/@popmotion/easing/1.0.2:
1253
- resolution: {integrity: sha512-IkdW0TNmRnWTeWI7aGQIVDbKXPWHVEYdGgd5ZR4SH/Ty/61p63jCjrPxX1XrR7IGkl08bjhJROStD7j+RKgoIw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@popmotion/easing/-/easing-1.0.2.tgz}
1254
- name: '@popmotion/easing'
1255
- version: 1.0.2
1256
- dev: false
1257
-
1258
- registry.npmmirror.com/@popmotion/popcorn/0.4.4:
1259
- resolution: {integrity: sha512-jYO/8319fKoNLMlY4ZJPiPu8Ea8occYwRZhxpaNn/kZsK4QG2E7XFlXZMJBsTWDw7I1i0uaqyC4zn1nwEezLzg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@popmotion/popcorn/-/popcorn-0.4.4.tgz}
1260
- name: '@popmotion/popcorn'
1261
- version: 0.4.4
1262
- dependencies:
1263
- '@popmotion/easing': registry.npmmirror.com/@popmotion/easing/1.0.2
1264
- framesync: registry.npmmirror.com/framesync/4.1.0
1265
- hey-listen: registry.npmmirror.com/hey-listen/1.0.8
1266
- style-value-types: registry.npmmirror.com/style-value-types/3.2.0
1267
- tslib: registry.npmmirror.com/tslib/1.14.1
1268
- dev: false
1269
-
1270
1322
  registry.npmmirror.com/@protobufjs/aspromise/1.1.2:
1271
1323
  resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz}
1272
1324
  name: '@protobufjs/aspromise'
@@ -1522,12 +1574,6 @@ packages:
1522
1574
  version: 0.12.1
1523
1575
  dev: false
1524
1576
 
1525
- registry.npmmirror.com/@types/shallowequal/1.1.1:
1526
- resolution: {integrity: sha512-Lhni3aX80zbpdxRuWhnuYPm8j8UQaa571lHP/xI4W+7BAFhSIhRReXnqjEgT/XzPoXZTJkCqstFMJ8CZTK6IlQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/shallowequal/-/shallowequal-1.1.1.tgz}
1527
- name: '@types/shallowequal'
1528
- version: 1.1.1
1529
- dev: false
1530
-
1531
1577
  registry.npmmirror.com/@types/sinonjs__fake-timers/6.0.4:
1532
1578
  resolution: {integrity: sha512-IFQTJARgMUBF+xVd2b+hIgXWrZEjND3vJtRCvIelcFB5SIXfjV4bOHbHJ0eXKh+0COrBRc8MqteKAz/j88rE0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz}
1533
1579
  name: '@types/sinonjs__fake-timers'
@@ -3077,6 +3123,7 @@ packages:
3077
3123
  resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz}
3078
3124
  name: eventemitter3
3079
3125
  version: 4.0.7
3126
+ dev: true
3080
3127
 
3081
3128
  registry.npmmirror.com/execa/4.1.0:
3082
3129
  resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz}
@@ -3254,14 +3301,6 @@ packages:
3254
3301
  version: 4.2.0
3255
3302
  dev: true
3256
3303
 
3257
- registry.npmmirror.com/framesync/4.1.0:
3258
- resolution: {integrity: sha512-MmgZ4wCoeVxNbx2xp5hN/zPDCbLSKiDt4BbbslK7j/pM2lg5S0vhTNv1v8BCVb99JPIo6hXBFdwzU7Q4qcAaoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/framesync/-/framesync-4.1.0.tgz}
3259
- name: framesync
3260
- version: 4.1.0
3261
- dependencies:
3262
- hey-listen: registry.npmmirror.com/hey-listen/1.0.8
3263
- dev: false
3264
-
3265
3304
  registry.npmmirror.com/fs-extra/9.1.0:
3266
3305
  resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz}
3267
3306
  name: fs-extra
@@ -3457,12 +3496,6 @@ packages:
3457
3496
  version: 1.1.0
3458
3497
  dev: true
3459
3498
 
3460
- registry.npmmirror.com/hey-listen/1.0.8:
3461
- resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hey-listen/-/hey-listen-1.0.8.tgz}
3462
- name: hey-listen
3463
- version: 1.0.8
3464
- dev: false
3465
-
3466
3499
  registry.npmmirror.com/hsl-regex/1.0.0:
3467
3500
  resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz}
3468
3501
  name: hsl-regex
@@ -5524,12 +5557,6 @@ packages:
5524
5557
  lru-cache: registry.npmmirror.com/lru-cache/6.0.0
5525
5558
  dev: true
5526
5559
 
5527
- registry.npmmirror.com/shallowequal/1.1.0:
5528
- resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz}
5529
- name: shallowequal
5530
- version: 1.1.0
5531
- dev: false
5532
-
5533
5560
  registry.npmmirror.com/shebang-command/2.0.0:
5534
5561
  resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz}
5535
5562
  name: shebang-command
@@ -5556,12 +5583,6 @@ packages:
5556
5583
  object-inspect: registry.npmmirror.com/object-inspect/1.12.0
5557
5584
  dev: true
5558
5585
 
5559
- registry.npmmirror.com/side-effect-manager/0.1.5:
5560
- resolution: {integrity: sha512-aAEXMS+9qW7rY2cwq4S6UjW3IBO/ZLWRI0sH1oGJ1eDE7YBFR1TW950qffnpx/0hByusAOVbu2zjThk9Vcjs+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/side-effect-manager/-/side-effect-manager-0.1.5.tgz}
5561
- name: side-effect-manager
5562
- version: 0.1.5
5563
- dev: false
5564
-
5565
5586
  registry.npmmirror.com/signal-exit/3.0.7:
5566
5587
  resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz}
5567
5588
  name: signal-exit
@@ -5741,27 +5762,6 @@ packages:
5741
5762
  engines: {node: '>=8'}
5742
5763
  dev: true
5743
5764
 
5744
- registry.npmmirror.com/style-value-types/3.2.0:
5745
- resolution: {integrity: sha512-ih0mGsrYYmVvdDi++/66O6BaQPRPRMQHoZevNNdMMcPlP/cH28Rnfsqf1UEba/Bwfuw9T8BmIMwbGdzsPwQKrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/style-value-types/-/style-value-types-3.2.0.tgz}
5746
- name: style-value-types
5747
- version: 3.2.0
5748
- dependencies:
5749
- hey-listen: registry.npmmirror.com/hey-listen/1.0.8
5750
- tslib: registry.npmmirror.com/tslib/1.14.1
5751
- dev: false
5752
-
5753
- registry.npmmirror.com/stylefire/7.0.3:
5754
- resolution: {integrity: sha512-Q0l7NSeFz/OkX+o6/7Zg3VZxSAZeQzQpYomWmIpOehFM/rJNMSLVX5fgg6Q48ut2ETNKwdhm97mPNU643EBCoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylefire/-/stylefire-7.0.3.tgz}
5755
- name: stylefire
5756
- version: 7.0.3
5757
- dependencies:
5758
- '@popmotion/popcorn': registry.npmmirror.com/@popmotion/popcorn/0.4.4
5759
- framesync: registry.npmmirror.com/framesync/4.1.0
5760
- hey-listen: registry.npmmirror.com/hey-listen/1.0.8
5761
- style-value-types: registry.npmmirror.com/style-value-types/3.2.0
5762
- tslib: registry.npmmirror.com/tslib/1.14.1
5763
- dev: false
5764
-
5765
5765
  registry.npmmirror.com/stylehacks/4.0.3:
5766
5766
  resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz}
5767
5767
  name: stylehacks
@@ -5930,6 +5930,7 @@ packages:
5930
5930
  resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz}
5931
5931
  name: tslib
5932
5932
  version: 1.14.1
5933
+ dev: true
5933
5934
 
5934
5935
  registry.npmmirror.com/tslib/2.3.1:
5935
5936
  resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.1.tgz}
@@ -6113,14 +6114,6 @@ packages:
6113
6114
  version: 2.3.0
6114
6115
  dev: true
6115
6116
 
6116
- registry.npmmirror.com/value-enhancer/0.0.8:
6117
- resolution: {integrity: sha512-ba8Rcyp9ItqlLWoyZVqHGaEdY1tqP1mcbRhlOrCnIrDxdl8rKNH1Rq45syo4IMYNSkwC2oV9xBWcV9dmL14aQg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/value-enhancer/-/value-enhancer-0.0.8.tgz}
6118
- name: value-enhancer
6119
- version: 0.0.8
6120
- dependencies:
6121
- side-effect-manager: registry.npmmirror.com/side-effect-manager/0.1.5
6122
- dev: false
6123
-
6124
6117
  registry.npmmirror.com/vendors/1.0.4:
6125
6118
  resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz}
6126
6119
  name: vendors
@@ -1,5 +1,4 @@
1
1
  import { BoxNotCreatedError } from "../Utils/error";
2
- import { putScenes } from "../Utils/Common";
3
2
  import { Storage } from "./Storage";
4
3
  import {
5
4
  autorun,
@@ -14,12 +13,12 @@ import type {
14
13
  Room,
15
14
  SceneDefinition,
16
15
  View,
17
- EventListener as WhiteEventListener,
16
+ EventListener as WhiteEventListener
18
17
  } from "white-web-sdk";
19
18
  import type { ReadonlyTeleBox } from "@netless/telebox-insider";
20
19
  import type Emittery from "emittery";
21
20
  import type { BoxManager } from "../BoxManager";
22
- import type { AppEmitterEvent } from "../index";
21
+ import type { AppEmitterEvent, Member } from "../index";
23
22
  import type { AppManager } from "../AppManager";
24
23
  import type { AppProxy } from "./AppProxy";
25
24
  import type {
@@ -27,11 +26,12 @@ import type {
27
26
  MagixEventDispatcher,
28
27
  MagixEventRemoveListener,
29
28
  } from "./MagixEvent";
30
- import type { AddPageParams, PageController, PageState } from "../Page";
29
+ import { WhiteBoardView } from "./WhiteboardView";
30
+ import { findMemberByUid } from "../Helper";
31
+ import { MAX_PAGE_SIZE } from "../constants";
32
+ import { isNumber } from "lodash";
31
33
 
32
- export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOptions = any>
33
- implements PageController
34
- {
34
+ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOptions = any> {
35
35
  public readonly emitter: Emittery<AppEmitterEvent<TAttributes>>;
36
36
  public readonly mobxUtils = {
37
37
  autorun,
@@ -48,6 +48,8 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
48
48
  private store = this.manager.store;
49
49
  public readonly isAddApp: boolean;
50
50
  public readonly isReplay = this.manager.isReplay;
51
+ private whiteBoardView?: WhiteBoardView;
52
+ public _viewWrapper?: HTMLElement;
51
53
 
52
54
  constructor(
53
55
  private manager: AppManager,
@@ -60,9 +62,13 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
60
62
  this.isAddApp = appProxy.isAddApp;
61
63
  }
62
64
 
63
- public getDisplayer = () => {
65
+ public get displayer() {
64
66
  return this.manager.displayer;
65
- };
67
+ }
68
+
69
+ public get destroyed() {
70
+ return this.appProxy.status === "destroyed";
71
+ }
66
72
 
67
73
  /** @deprecated Use context.storage.state instead. */
68
74
  public getAttributes = (): TAttributes | undefined => {
@@ -78,32 +84,58 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
78
84
  }
79
85
  };
80
86
 
81
- public getView = (): View | undefined => {
87
+ public get view(): View | undefined {
82
88
  return this.appProxy.view;
83
89
  };
84
90
 
85
- public mountView = (dom: HTMLElement): void => {
86
- const view = this.getView();
87
- if (view) {
88
- view.divElement = dom as HTMLDivElement;
89
- setTimeout(() => {
90
- // 渲染需要时间,延迟 refresh
91
- this.getRoom()?.refreshViewSize();
92
- }, 1000);
91
+ public createWhiteBoardView = (size?: number): WhiteBoardView => {
92
+ if (this.whiteBoardView) {
93
+ return this.whiteBoardView;
93
94
  }
94
- };
95
+ let view = this.view;
96
+ if (!view) {
97
+ view = this.appProxy.createAppDir();
98
+ }
99
+ const viewWrapper = document.createElement("div");
100
+ this._viewWrapper = viewWrapper;
101
+ viewWrapper.className = "window-manager-view-wrapper";
102
+ this.box.$content.parentElement?.appendChild(viewWrapper);
103
+ const removeViewWrapper = () => {
104
+ this.box.$content.parentElement?.removeChild(viewWrapper);
105
+ this._viewWrapper = undefined;
106
+ }
107
+ view.divElement = viewWrapper;
108
+ this.appProxy.fireMemberStateChange();
109
+ if (this.isAddApp) {
110
+ this.ensurePageSize(size);
111
+ }
112
+ this.whiteBoardView = new WhiteBoardView(view, this, this.appProxy, removeViewWrapper, this.ensurePageSize);
113
+ return this.whiteBoardView;
114
+ }
115
+
116
+ private ensurePageSize = (size?: number) => {
117
+ if (!isNumber(size)) return;
118
+ if (!this.appProxy.scenePath) return;
119
+ if (this.appProxy.pageState.length >= size) return;
120
+ if (size <= 0 || size >= MAX_PAGE_SIZE) {
121
+ throw Error(`[WindowManager]: size ${size} muse be in range [1, ${MAX_PAGE_SIZE}]`);
122
+ }
123
+ const needInsert = size - this.appProxy.pageState.length;
124
+ const scenes = new Array(needInsert).fill({});
125
+ this.room?.putScenes(this.appProxy.scenePath, scenes);
126
+ }
95
127
 
96
128
  public getInitScenePath = () => {
97
129
  return this.manager.getAppInitPath(this.appId);
98
130
  };
99
131
 
100
132
  /** Get App writable status. */
101
- public getIsWritable = (): boolean => {
102
- return this.manager.canOperate;
133
+ public get isWritable(): boolean {
134
+ return this.manager.canOperate && !this.destroyed;
103
135
  };
104
136
 
105
137
  /** Get the App Window UI box. */
106
- public getBox = (): ReadonlyTeleBox => {
138
+ public get box(): ReadonlyTeleBox {
107
139
  const box = this.boxManager.getBox(this.appId);
108
140
  if (box) {
109
141
  return box;
@@ -112,10 +144,25 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
112
144
  }
113
145
  };
114
146
 
115
- public getRoom = (): Room | undefined => {
147
+ public get room(): Room | undefined {
116
148
  return this.manager.room;
117
149
  };
118
150
 
151
+ public get members() {
152
+ return this.manager.members;
153
+ }
154
+
155
+ public get memberState(): Member {
156
+ const self = findMemberByUid(this.room, this.manager.uid);
157
+ if (!self) {
158
+ throw new Error(`Member ${this.manager.uid} not found.`);
159
+ }
160
+ return {
161
+ uid: this.manager.uid,
162
+ ...self,
163
+ }
164
+ }
165
+
119
166
  /** @deprecated Use context.storage.setState instead. */
120
167
  public setAttributes = (attributes: TAttributes) => {
121
168
  this.manager.safeSetAttributes({ [this.appId]: attributes });
@@ -128,11 +175,12 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
128
175
  }
129
176
  };
130
177
 
178
+ /** @deprecated Use Pages api instead. */
131
179
  public setScenePath = async (scenePath: string): Promise<void> => {
132
180
  if (!this.appProxy.box) return;
133
181
  this.appProxy.setFullPath(scenePath);
134
182
  // 兼容 15 版本 SDK 的切页
135
- this.getRoom()?.setScenePath(scenePath);
183
+ this.room?.setScenePath(scenePath);
136
184
  };
137
185
 
138
186
  /** Get the local App options. */
@@ -196,55 +244,4 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
196
244
  public removeMagixEventListener = this.manager.displayer.removeMagixEventListener.bind(
197
245
  this.manager.displayer
198
246
  ) as MagixEventRemoveListener<TMagixEventPayloads>;
199
-
200
- /** PageController */
201
- public nextPage = async (): Promise<boolean> => {
202
- const nextIndex = this.pageState.index + 1;
203
- if (nextIndex > this.pageState.length - 1) {
204
- console.warn("[WindowManager] nextPage: index out of range");
205
- return false;
206
- }
207
- this.appProxy.setSceneIndex(nextIndex);
208
- return true;
209
- };
210
-
211
- public prevPage = async (): Promise<boolean> => {
212
- const nextIndex = this.pageState.index - 1;
213
- if (nextIndex < 0) {
214
- console.warn("[WindowManager] prevPage: index out of range");
215
- return false;
216
- }
217
- this.appProxy.setSceneIndex(nextIndex);
218
- return true;
219
- };
220
-
221
- public addPage = async (params?: AddPageParams) => {
222
- const after = params?.after;
223
- const scene = params?.scene;
224
- const scenePath = this.appProxy.scenePath;
225
- if (!scenePath) return;
226
- if (after) {
227
- const nextIndex = this.pageState.index + 1;
228
- putScenes(this.manager.room, scenePath, [scene || {}], nextIndex);
229
- } else {
230
- putScenes(this.manager.room, scenePath, [scene || {}]);
231
- }
232
- };
233
-
234
- public removePage = async (index?: number): Promise<boolean> => {
235
- const needRemoveIndex = index === undefined ? this.pageState.index : index;
236
- if (this.pageState.length === 1) {
237
- console.warn(`[WindowManager]: can not remove the last page`);
238
- return false;
239
- }
240
- if (needRemoveIndex < 0 || needRemoveIndex >= this.pageState.length) {
241
- console.warn(`[WindowManager]: page index ${index} out of range`);
242
- return false;
243
- }
244
- return this.appProxy.removeSceneByIndex(needRemoveIndex);;
245
- }
246
-
247
- public get pageState(): PageState {
248
- return this.appProxy.pageState;
249
- }
250
247
  }
@@ -9,11 +9,15 @@ export type AppPageStateParams = {
9
9
  };
10
10
 
11
11
  export class AppPageStateImpl {
12
- private sceneNode: ScenesCallbacksNode | null = null;
12
+ public sceneNode: ScenesCallbacksNode | null = null;
13
+ private scenePath?: string;
14
+ private view?: View;
13
15
 
14
16
  constructor(private params: AppPageStateParams) {
15
17
  const { displayer, scenePath } = this.params;
18
+ this.view = this.params.view;
16
19
  if (scenePath) {
20
+ this.scenePath = scenePath;
17
21
  this.sceneNode = displayer.createScenesCallback(scenePath, {
18
22
  onAddScene: this.onSceneChange,
19
23
  onRemoveScene: this.onSceneChange,
@@ -21,24 +25,39 @@ export class AppPageStateImpl {
21
25
  }
22
26
  }
23
27
 
24
- private onSceneChange = (node: ScenesCallbacksNode) => {
25
- this.sceneNode = node;
28
+ public createSceneNode = (scenePath: string) => {
29
+ this.scenePath = scenePath;
30
+ if (this.sceneNode) {
31
+ this.sceneNode.dispose();
32
+ }
33
+ this.sceneNode = this.params.displayer.createScenesCallback(scenePath, {
34
+ onAddScene: this.onSceneChange,
35
+ onRemoveScene: this.onSceneChange,
36
+ });
37
+ return this.sceneNode;
38
+ }
39
+
40
+ public setView(view: View) {
41
+ this.view = view;
42
+ }
43
+
44
+ private onSceneChange = () => {
26
45
  this.params.notifyPageStateChange();
27
46
  };
28
47
 
29
48
  public getFullPath(index: number) {
30
49
  const scenes = this.sceneNode?.scenes;
31
- if (this.params.scenePath && scenes) {
50
+ if (this.scenePath && scenes) {
32
51
  const name = scenes[index];
33
52
  if (name) {
34
- return `${this.params.scenePath}/${name}`;
53
+ return `${this.scenePath}/${name}`;
35
54
  }
36
55
  }
37
56
  }
38
57
 
39
58
  public toObject(): PageState {
40
59
  return {
41
- index: this.params.view?.focusSceneIndex || 0,
60
+ index: this.view?.focusSceneIndex || 0,
42
61
  length: this.sceneNode?.scenes.length || 0,
43
62
  };
44
63
  }