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

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 (42) hide show
  1. package/dist/App/AppContext.d.ts +14 -15
  2. package/dist/App/AppPageStateImpl.d.ts +6 -2
  3. package/dist/App/AppProxy.d.ts +5 -2
  4. package/dist/App/WhiteBoardView.d.ts +16 -0
  5. package/dist/App/index.d.ts +1 -0
  6. package/dist/AppManager.d.ts +2 -0
  7. package/dist/BoxManager.d.ts +7 -5
  8. package/dist/Helper.d.ts +12 -4
  9. package/dist/InternalEmitter.d.ts +4 -1
  10. package/dist/View/CameraSynchronizer.d.ts +17 -0
  11. package/dist/View/MainView.d.ts +4 -5
  12. package/dist/constants.d.ts +1 -0
  13. package/dist/index.cjs.js +21 -22
  14. package/dist/index.d.ts +0 -2
  15. package/dist/index.es.js +2186 -1970
  16. package/dist/index.umd.js +21 -22
  17. package/dist/style.css +1 -1
  18. package/dist/typings.d.ts +4 -0
  19. package/package.json +4 -3
  20. package/pnpm-lock.yaml +86 -97
  21. package/src/App/AppContext.ts +58 -73
  22. package/src/App/AppPageStateImpl.ts +25 -6
  23. package/src/App/AppProxy.ts +39 -15
  24. package/src/App/Storage/index.ts +4 -4
  25. package/src/App/WhiteBoardView.ts +68 -0
  26. package/src/App/index.ts +1 -0
  27. package/src/AppManager.ts +9 -1
  28. package/src/BoxManager.ts +102 -107
  29. package/src/Cursor/index.ts +5 -5
  30. package/src/Helper.ts +12 -16
  31. package/src/InternalEmitter.ts +8 -4
  32. package/src/View/CameraSynchronizer.ts +67 -0
  33. package/src/View/MainView.ts +45 -53
  34. package/src/constants.ts +2 -0
  35. package/src/index.ts +13 -33
  36. package/src/typings.ts +4 -0
  37. package/vite.config.js +0 -1
  38. package/dist/ContainerResizeObserver.d.ts +0 -11
  39. package/dist/index.cjs.js.map +0 -1
  40. package/dist/index.es.js.map +0 -1
  41. package/dist/index.umd.js.map +0 -1
  42. 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.8
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.8
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.8:
101
+ resolution: {integrity: sha512-GFQpS8fVwc2kSjFFg88QQObQ5P25a2eVblC/wWn6J/IF8PihO8kDs/kI9lN+KtbRJltI2Ca9g9QlQAHi7SArHw==}
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.2.1
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,10 @@ 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
+
930
1009
  /vanilla-lazyload/17.6.1:
931
1010
  resolution: {integrity: sha512-Jn/WpWEIe+d6UUb8hw1qDO49W8lceFLW/ucWt8pdRcQvoQaucLtMnc9QHsm0Iz/xe4SCElEE2fyMZB8xC3e/6Q==}
932
1011
  dev: true
@@ -1202,19 +1281,6 @@ packages:
1202
1281
  version: 0.0.4
1203
1282
  dev: true
1204
1283
 
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
1284
  registry.npmmirror.com/@netless/xml-js/1.6.15:
1219
1285
  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
1286
  name: '@netless/xml-js'
@@ -1249,24 +1315,6 @@ packages:
1249
1315
  fastq: registry.npmmirror.com/fastq/1.13.0
1250
1316
  dev: true
1251
1317
 
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
1318
  registry.npmmirror.com/@protobufjs/aspromise/1.1.2:
1271
1319
  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
1320
  name: '@protobufjs/aspromise'
@@ -1522,12 +1570,6 @@ packages:
1522
1570
  version: 0.12.1
1523
1571
  dev: false
1524
1572
 
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
1573
  registry.npmmirror.com/@types/sinonjs__fake-timers/6.0.4:
1532
1574
  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
1575
  name: '@types/sinonjs__fake-timers'
@@ -3077,6 +3119,7 @@ packages:
3077
3119
  resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz}
3078
3120
  name: eventemitter3
3079
3121
  version: 4.0.7
3122
+ dev: true
3080
3123
 
3081
3124
  registry.npmmirror.com/execa/4.1.0:
3082
3125
  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 +3297,6 @@ packages:
3254
3297
  version: 4.2.0
3255
3298
  dev: true
3256
3299
 
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
3300
  registry.npmmirror.com/fs-extra/9.1.0:
3266
3301
  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
3302
  name: fs-extra
@@ -3457,12 +3492,6 @@ packages:
3457
3492
  version: 1.1.0
3458
3493
  dev: true
3459
3494
 
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
3495
  registry.npmmirror.com/hsl-regex/1.0.0:
3467
3496
  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
3497
  name: hsl-regex
@@ -5524,12 +5553,6 @@ packages:
5524
5553
  lru-cache: registry.npmmirror.com/lru-cache/6.0.0
5525
5554
  dev: true
5526
5555
 
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
5556
  registry.npmmirror.com/shebang-command/2.0.0:
5534
5557
  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
5558
  name: shebang-command
@@ -5556,12 +5579,6 @@ packages:
5556
5579
  object-inspect: registry.npmmirror.com/object-inspect/1.12.0
5557
5580
  dev: true
5558
5581
 
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
5582
  registry.npmmirror.com/signal-exit/3.0.7:
5566
5583
  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
5584
  name: signal-exit
@@ -5741,27 +5758,6 @@ packages:
5741
5758
  engines: {node: '>=8'}
5742
5759
  dev: true
5743
5760
 
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
5761
  registry.npmmirror.com/stylehacks/4.0.3:
5766
5762
  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
5763
  name: stylehacks
@@ -5930,6 +5926,7 @@ packages:
5930
5926
  resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz}
5931
5927
  name: tslib
5932
5928
  version: 1.14.1
5929
+ dev: true
5933
5930
 
5934
5931
  registry.npmmirror.com/tslib/2.3.1:
5935
5932
  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 +6110,6 @@ packages:
6113
6110
  version: 2.3.0
6114
6111
  dev: true
6115
6112
 
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
6113
  registry.npmmirror.com/vendors/1.0.4:
6125
6114
  resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz}
6126
6115
  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,13 @@ 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 { putScenes } from "../Utils/Common";
33
+ import { isNumber } from "lodash";
31
34
 
32
- export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOptions = any>
33
- implements PageController
34
- {
35
+ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOptions = any> {
35
36
  public readonly emitter: Emittery<AppEmitterEvent<TAttributes>>;
36
37
  public readonly mobxUtils = {
37
38
  autorun,
@@ -48,6 +49,7 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
48
49
  private store = this.manager.store;
49
50
  public readonly isAddApp: boolean;
50
51
  public readonly isReplay = this.manager.isReplay;
52
+ private whiteBoardView?: WhiteBoardView;
51
53
 
52
54
  constructor(
53
55
  private manager: AppManager,
@@ -60,7 +62,7 @@ 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
  };
66
68
 
@@ -78,32 +80,50 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
78
80
  }
79
81
  };
80
82
 
81
- public getView = (): View | undefined => {
83
+ public get view(): View | undefined {
82
84
  return this.appProxy.view;
83
85
  };
84
86
 
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);
87
+ public createWhiteBoardView = (size?: number): WhiteBoardView => {
88
+ if (this.whiteBoardView) {
89
+ return this.whiteBoardView;
93
90
  }
94
- };
91
+ let view = this.view;
92
+ if (!view) {
93
+ view = this.appProxy.createAppDir();
94
+ }
95
+ view.divElement = this.box.$content as HTMLDivElement;
96
+ this.initPageSize(size);
97
+ this.whiteBoardView = new WhiteBoardView(this, this.appProxy);
98
+ return this.whiteBoardView;
99
+ }
100
+
101
+ private initPageSize = (size?: number) => {
102
+ if (!isNumber(size)) return;
103
+ if (!this.appProxy.scenePath) return;
104
+ if (this.appProxy.pageState.length >= size) return;
105
+ if (size <= 0 || size >= MAX_PAGE_SIZE) {
106
+ throw Error(`[WindowManager]: size ${size} muse be in range [1, ${MAX_PAGE_SIZE}]`);
107
+ }
108
+ const needInsert = size - this.appProxy.pageState.length;
109
+ const startPageNumber = this.appProxy.pageState.length;
110
+ const scenes = new Array(needInsert).fill({}).map((_, index) => {
111
+ return { name: `${startPageNumber + index + 1}` };
112
+ });
113
+ putScenes(this.room, this.appProxy.scenePath, scenes);
114
+ }
95
115
 
96
116
  public getInitScenePath = () => {
97
117
  return this.manager.getAppInitPath(this.appId);
98
118
  };
99
119
 
100
120
  /** Get App writable status. */
101
- public getIsWritable = (): boolean => {
121
+ public get isWritable(): boolean {
102
122
  return this.manager.canOperate;
103
123
  };
104
124
 
105
125
  /** Get the App Window UI box. */
106
- public getBox = (): ReadonlyTeleBox => {
126
+ public get box(): ReadonlyTeleBox {
107
127
  const box = this.boxManager.getBox(this.appId);
108
128
  if (box) {
109
129
  return box;
@@ -112,10 +132,25 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
112
132
  }
113
133
  };
114
134
 
115
- public getRoom = (): Room | undefined => {
135
+ public get room(): Room | undefined {
116
136
  return this.manager.room;
117
137
  };
118
138
 
139
+ public get members() {
140
+ return this.manager.members;
141
+ }
142
+
143
+ public get memberState(): Member {
144
+ const self = findMemberByUid(this.room, this.manager.uid);
145
+ if (!self) {
146
+ throw new Error(`Member ${this.manager.uid} not found.`);
147
+ }
148
+ return {
149
+ uid: this.manager.uid,
150
+ ...self,
151
+ }
152
+ }
153
+
119
154
  /** @deprecated Use context.storage.setState instead. */
120
155
  public setAttributes = (attributes: TAttributes) => {
121
156
  this.manager.safeSetAttributes({ [this.appId]: attributes });
@@ -128,11 +163,12 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
128
163
  }
129
164
  };
130
165
 
166
+ /** @deprecated Use Pages api instead. */
131
167
  public setScenePath = async (scenePath: string): Promise<void> => {
132
168
  if (!this.appProxy.box) return;
133
169
  this.appProxy.setFullPath(scenePath);
134
170
  // 兼容 15 版本 SDK 的切页
135
- this.getRoom()?.setScenePath(scenePath);
171
+ this.room?.setScenePath(scenePath);
136
172
  };
137
173
 
138
174
  /** Get the local App options. */
@@ -196,55 +232,4 @@ export class AppContext<TAttributes = any, TMagixEventPayloads = any, TAppOption
196
232
  public removeMagixEventListener = this.manager.displayer.removeMagixEventListener.bind(
197
233
  this.manager.displayer
198
234
  ) 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
235
  }
@@ -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
  }