@microsoft/live-share-react 2.0.0-internal.4 → 2.0.0-internal.6

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 (380) hide show
  1. package/.nycrc.json +9 -9
  2. package/LICENSE +64 -61
  3. package/README.md +173 -168
  4. package/bin/cjs/index.d.ts +7 -0
  5. package/bin/cjs/index.d.ts.map +1 -0
  6. package/bin/cjs/index.js +23 -0
  7. package/bin/cjs/index.js.map +1 -0
  8. package/bin/cjs/interfaces/LiveInterfaceExtensions.d.ts.map +1 -0
  9. package/bin/cjs/interfaces/LiveInterfaceExtensions.js +7 -0
  10. package/bin/cjs/interfaces/LiveInterfaceExtensions.js.map +1 -0
  11. package/bin/cjs/interfaces/index.d.ts +2 -0
  12. package/bin/cjs/interfaces/index.d.ts.map +1 -0
  13. package/bin/cjs/interfaces/index.js +18 -0
  14. package/bin/cjs/interfaces/index.js.map +1 -0
  15. package/bin/cjs/internal/errors.d.ts.map +1 -0
  16. package/bin/cjs/internal/errors.js +48 -0
  17. package/bin/cjs/internal/errors.js.map +1 -0
  18. package/bin/cjs/internal/index.d.ts +3 -0
  19. package/bin/cjs/internal/index.d.ts.map +1 -0
  20. package/bin/cjs/internal/index.js +19 -0
  21. package/bin/cjs/internal/index.js.map +1 -0
  22. package/bin/{internal → cjs/internal}/type-guards.d.ts +1 -1
  23. package/bin/cjs/internal/type-guards.d.ts.map +1 -0
  24. package/bin/cjs/internal/type-guards.js +24 -0
  25. package/bin/cjs/internal/type-guards.js.map +1 -0
  26. package/bin/cjs/live-hooks/index.d.ts +8 -0
  27. package/bin/cjs/live-hooks/index.d.ts.map +1 -0
  28. package/bin/cjs/live-hooks/index.js +24 -0
  29. package/bin/cjs/live-hooks/index.js.map +1 -0
  30. package/bin/cjs/live-hooks/useLiveCanvas.d.ts +80 -0
  31. package/bin/cjs/live-hooks/useLiveCanvas.d.ts.map +1 -0
  32. package/bin/cjs/live-hooks/useLiveCanvas.js +244 -0
  33. package/bin/cjs/live-hooks/useLiveCanvas.js.map +1 -0
  34. package/bin/{live-hooks → cjs/live-hooks}/useLiveEvent.d.ts +37 -1
  35. package/bin/cjs/live-hooks/useLiveEvent.d.ts.map +1 -0
  36. package/bin/cjs/live-hooks/useLiveEvent.js +150 -0
  37. package/bin/cjs/live-hooks/useLiveEvent.js.map +1 -0
  38. package/bin/cjs/live-hooks/useLiveFollowMode.d.ts +163 -0
  39. package/bin/cjs/live-hooks/useLiveFollowMode.d.ts.map +1 -0
  40. package/bin/cjs/live-hooks/useLiveFollowMode.js +360 -0
  41. package/bin/cjs/live-hooks/useLiveFollowMode.js.map +1 -0
  42. package/bin/cjs/live-hooks/useLivePresence.d.ts +76 -0
  43. package/bin/cjs/live-hooks/useLivePresence.d.ts.map +1 -0
  44. package/bin/cjs/live-hooks/useLivePresence.js +166 -0
  45. package/bin/cjs/live-hooks/useLivePresence.js.map +1 -0
  46. package/bin/{live-hooks → cjs/live-hooks}/useLiveState.d.ts +46 -1
  47. package/bin/cjs/live-hooks/useLiveState.d.ts.map +1 -0
  48. package/bin/cjs/live-hooks/useLiveState.js +130 -0
  49. package/bin/cjs/live-hooks/useLiveState.js.map +1 -0
  50. package/bin/{live-hooks → cjs/live-hooks}/useLiveTimer.d.ts +56 -1
  51. package/bin/cjs/live-hooks/useLiveTimer.d.ts.map +1 -0
  52. package/bin/cjs/live-hooks/useLiveTimer.js +233 -0
  53. package/bin/cjs/live-hooks/useLiveTimer.js.map +1 -0
  54. package/bin/cjs/live-hooks/useMediaSynchronizer.d.ts +86 -0
  55. package/bin/cjs/live-hooks/useMediaSynchronizer.d.ts.map +1 -0
  56. package/bin/cjs/live-hooks/useMediaSynchronizer.js +301 -0
  57. package/bin/cjs/live-hooks/useMediaSynchronizer.js.map +1 -0
  58. package/bin/cjs/package.json +1 -0
  59. package/bin/{providers → cjs/providers}/AzureProvider.d.ts +9 -9
  60. package/bin/cjs/providers/AzureProvider.d.ts.map +1 -0
  61. package/bin/cjs/providers/AzureProvider.js +127 -0
  62. package/bin/cjs/providers/AzureProvider.js.map +1 -0
  63. package/bin/{providers → cjs/providers}/LiveShareProvider.d.ts +106 -4
  64. package/bin/cjs/providers/LiveShareProvider.d.ts.map +1 -0
  65. package/bin/cjs/providers/LiveShareProvider.js +205 -0
  66. package/bin/cjs/providers/LiveShareProvider.js.map +1 -0
  67. package/bin/cjs/providers/index.d.ts +3 -0
  68. package/bin/cjs/providers/index.d.ts.map +1 -0
  69. package/bin/cjs/providers/index.js +19 -0
  70. package/bin/cjs/providers/index.js.map +1 -0
  71. package/bin/cjs/shared-hooks/index.d.ts +7 -0
  72. package/bin/cjs/shared-hooks/index.d.ts.map +1 -0
  73. package/bin/cjs/shared-hooks/index.js +23 -0
  74. package/bin/cjs/shared-hooks/index.js.map +1 -0
  75. package/bin/cjs/shared-hooks/internals/tree-node-constants.d.ts +3 -0
  76. package/bin/cjs/shared-hooks/internals/tree-node-constants.d.ts.map +1 -0
  77. package/bin/cjs/shared-hooks/internals/tree-node-constants.js +6 -0
  78. package/bin/cjs/shared-hooks/internals/tree-node-constants.js.map +1 -0
  79. package/bin/cjs/shared-hooks/internals/tree-node-types.d.ts +10 -0
  80. package/bin/cjs/shared-hooks/internals/tree-node-types.d.ts.map +1 -0
  81. package/bin/cjs/shared-hooks/internals/tree-node-types.js +23 -0
  82. package/bin/cjs/shared-hooks/internals/tree-node-types.js.map +1 -0
  83. package/bin/cjs/shared-hooks/internals/tree-node-utils.d.ts +33 -0
  84. package/bin/cjs/shared-hooks/internals/tree-node-utils.d.ts.map +1 -0
  85. package/bin/cjs/shared-hooks/internals/tree-node-utils.js +193 -0
  86. package/bin/cjs/shared-hooks/internals/tree-node-utils.js.map +1 -0
  87. package/bin/{shared-hooks → cjs/shared-hooks}/useDynamicDDS.d.ts +4 -4
  88. package/bin/cjs/shared-hooks/useDynamicDDS.d.ts.map +1 -0
  89. package/bin/cjs/shared-hooks/useDynamicDDS.js +87 -0
  90. package/bin/cjs/shared-hooks/useDynamicDDS.js.map +1 -0
  91. package/bin/{shared-hooks → cjs/shared-hooks}/useSharedMap.d.ts +4 -2
  92. package/bin/cjs/shared-hooks/useSharedMap.d.ts.map +1 -0
  93. package/bin/cjs/shared-hooks/useSharedMap.js +134 -0
  94. package/bin/cjs/shared-hooks/useSharedMap.js.map +1 -0
  95. package/bin/{shared-hooks → cjs/shared-hooks}/useSharedState.d.ts +1 -1
  96. package/bin/cjs/shared-hooks/useSharedState.d.ts.map +1 -0
  97. package/bin/cjs/shared-hooks/useSharedState.js +80 -0
  98. package/bin/cjs/shared-hooks/useSharedState.js.map +1 -0
  99. package/bin/{shared-hooks → cjs/shared-hooks}/useSharedStateRegistry.d.ts +1 -1
  100. package/bin/cjs/shared-hooks/useSharedStateRegistry.d.ts.map +1 -0
  101. package/bin/cjs/shared-hooks/useSharedStateRegistry.js +120 -0
  102. package/bin/cjs/shared-hooks/useSharedStateRegistry.js.map +1 -0
  103. package/bin/cjs/shared-hooks/useSharedTree.d.ts +57 -0
  104. package/bin/cjs/shared-hooks/useSharedTree.d.ts.map +1 -0
  105. package/bin/cjs/shared-hooks/useSharedTree.js +123 -0
  106. package/bin/cjs/shared-hooks/useSharedTree.js.map +1 -0
  107. package/bin/cjs/shared-hooks/useTreeNode.d.ts +96 -0
  108. package/bin/cjs/shared-hooks/useTreeNode.d.ts.map +1 -0
  109. package/bin/cjs/shared-hooks/useTreeNode.js +135 -0
  110. package/bin/cjs/shared-hooks/useTreeNode.js.map +1 -0
  111. package/bin/{types → cjs/types}/ActionTypes.d.ts +7 -7
  112. package/bin/cjs/types/ActionTypes.d.ts.map +1 -0
  113. package/bin/cjs/types/ActionTypes.js +7 -0
  114. package/bin/cjs/types/ActionTypes.js.map +1 -0
  115. package/bin/cjs/types/PropTypes.d.ts +56 -0
  116. package/bin/cjs/types/PropTypes.d.ts.map +1 -0
  117. package/bin/cjs/types/PropTypes.js +7 -0
  118. package/bin/cjs/types/PropTypes.js.map +1 -0
  119. package/bin/{types → cjs/types}/ResultTypes.d.ts +46 -18
  120. package/bin/cjs/types/ResultTypes.d.ts.map +1 -0
  121. package/bin/cjs/types/ResultTypes.js +7 -0
  122. package/bin/cjs/types/ResultTypes.js.map +1 -0
  123. package/bin/cjs/types/index.d.ts +4 -0
  124. package/bin/cjs/types/index.d.ts.map +1 -0
  125. package/bin/cjs/types/index.js +20 -0
  126. package/bin/cjs/types/index.js.map +1 -0
  127. package/bin/cjs/utils/index.d.ts +2 -0
  128. package/bin/cjs/utils/index.d.ts.map +1 -0
  129. package/bin/cjs/utils/index.js +18 -0
  130. package/bin/cjs/utils/index.js.map +1 -0
  131. package/bin/cjs/utils/type-check.d.ts.map +1 -0
  132. package/bin/cjs/utils/type-check.js +62 -0
  133. package/bin/cjs/utils/type-check.js.map +1 -0
  134. package/bin/esm/index.d.ts +7 -0
  135. package/bin/esm/index.d.ts.map +1 -0
  136. package/bin/esm/index.js +7 -0
  137. package/bin/esm/index.js.map +1 -0
  138. package/bin/esm/interfaces/LiveInterfaceExtensions.d.ts +26 -0
  139. package/bin/esm/interfaces/LiveInterfaceExtensions.d.ts.map +1 -0
  140. package/bin/esm/interfaces/LiveInterfaceExtensions.js.map +1 -0
  141. package/bin/esm/interfaces/index.d.ts +2 -0
  142. package/bin/esm/interfaces/index.d.ts.map +1 -0
  143. package/bin/esm/interfaces/index.js +2 -0
  144. package/bin/esm/interfaces/index.js.map +1 -0
  145. package/bin/esm/internal/errors.d.ts +41 -0
  146. package/bin/esm/internal/errors.d.ts.map +1 -0
  147. package/bin/esm/internal/errors.js.map +1 -0
  148. package/bin/esm/internal/index.d.ts +3 -0
  149. package/bin/esm/internal/index.d.ts.map +1 -0
  150. package/bin/esm/internal/index.js +3 -0
  151. package/bin/esm/internal/index.js.map +1 -0
  152. package/bin/esm/internal/type-guards.d.ts +11 -0
  153. package/bin/esm/internal/type-guards.d.ts.map +1 -0
  154. package/bin/esm/internal/type-guards.js.map +1 -0
  155. package/bin/esm/live-hooks/index.d.ts +8 -0
  156. package/bin/esm/live-hooks/index.d.ts.map +1 -0
  157. package/bin/esm/live-hooks/index.js +8 -0
  158. package/bin/esm/live-hooks/index.js.map +1 -0
  159. package/bin/esm/live-hooks/useLiveCanvas.d.ts +80 -0
  160. package/bin/esm/live-hooks/useLiveCanvas.d.ts.map +1 -0
  161. package/bin/esm/live-hooks/useLiveCanvas.js +238 -0
  162. package/bin/esm/live-hooks/useLiveCanvas.js.map +1 -0
  163. package/bin/esm/live-hooks/useLiveEvent.d.ts +59 -0
  164. package/bin/esm/live-hooks/useLiveEvent.d.ts.map +1 -0
  165. package/bin/{live-hooks → esm/live-hooks}/useLiveEvent.js +41 -5
  166. package/bin/esm/live-hooks/useLiveEvent.js.map +1 -0
  167. package/bin/esm/live-hooks/useLiveFollowMode.d.ts +163 -0
  168. package/bin/esm/live-hooks/useLiveFollowMode.d.ts.map +1 -0
  169. package/bin/{live-hooks → esm/live-hooks}/useLiveFollowMode.js +148 -5
  170. package/bin/esm/live-hooks/useLiveFollowMode.js.map +1 -0
  171. package/bin/esm/live-hooks/useLivePresence.d.ts +76 -0
  172. package/bin/esm/live-hooks/useLivePresence.d.ts.map +1 -0
  173. package/bin/{live-hooks → esm/live-hooks}/useLivePresence.js +67 -13
  174. package/bin/esm/live-hooks/useLivePresence.js.map +1 -0
  175. package/bin/esm/live-hooks/useLiveState.d.ts +66 -0
  176. package/bin/esm/live-hooks/useLiveState.d.ts.map +1 -0
  177. package/bin/{live-hooks → esm/live-hooks}/useLiveState.js +48 -3
  178. package/bin/esm/live-hooks/useLiveState.js.map +1 -0
  179. package/bin/esm/live-hooks/useLiveTimer.d.ts +80 -0
  180. package/bin/esm/live-hooks/useLiveTimer.d.ts.map +1 -0
  181. package/bin/{live-hooks → esm/live-hooks}/useLiveTimer.js +58 -3
  182. package/bin/esm/live-hooks/useLiveTimer.js.map +1 -0
  183. package/bin/esm/live-hooks/useMediaSynchronizer.d.ts +86 -0
  184. package/bin/esm/live-hooks/useMediaSynchronizer.d.ts.map +1 -0
  185. package/bin/{live-hooks → esm/live-hooks}/useMediaSynchronizer.js +65 -4
  186. package/bin/esm/live-hooks/useMediaSynchronizer.js.map +1 -0
  187. package/bin/esm/providers/AzureProvider.d.ts +113 -0
  188. package/bin/esm/providers/AzureProvider.d.ts.map +1 -0
  189. package/bin/{providers → esm/providers}/AzureProvider.js +10 -10
  190. package/bin/esm/providers/AzureProvider.js.map +1 -0
  191. package/bin/esm/providers/LiveShareProvider.d.ts +193 -0
  192. package/bin/esm/providers/LiveShareProvider.d.ts.map +1 -0
  193. package/bin/{providers → esm/providers}/LiveShareProvider.js +111 -9
  194. package/bin/esm/providers/LiveShareProvider.js.map +1 -0
  195. package/bin/esm/providers/index.d.ts +3 -0
  196. package/bin/esm/providers/index.d.ts.map +1 -0
  197. package/bin/esm/providers/index.js +3 -0
  198. package/bin/esm/providers/index.js.map +1 -0
  199. package/bin/esm/shared-hooks/index.d.ts +7 -0
  200. package/bin/esm/shared-hooks/index.d.ts.map +1 -0
  201. package/bin/esm/shared-hooks/index.js +7 -0
  202. package/bin/esm/shared-hooks/index.js.map +1 -0
  203. package/bin/esm/shared-hooks/internals/tree-node-constants.d.ts +3 -0
  204. package/bin/esm/shared-hooks/internals/tree-node-constants.d.ts.map +1 -0
  205. package/bin/esm/shared-hooks/internals/tree-node-constants.js +3 -0
  206. package/bin/esm/shared-hooks/internals/tree-node-constants.js.map +1 -0
  207. package/bin/esm/shared-hooks/internals/tree-node-types.d.ts +10 -0
  208. package/bin/esm/shared-hooks/internals/tree-node-types.d.ts.map +1 -0
  209. package/bin/esm/shared-hooks/internals/tree-node-types.js +18 -0
  210. package/bin/esm/shared-hooks/internals/tree-node-types.js.map +1 -0
  211. package/bin/esm/shared-hooks/internals/tree-node-utils.d.ts +33 -0
  212. package/bin/esm/shared-hooks/internals/tree-node-utils.d.ts.map +1 -0
  213. package/bin/esm/shared-hooks/internals/tree-node-utils.js +188 -0
  214. package/bin/esm/shared-hooks/internals/tree-node-utils.js.map +1 -0
  215. package/bin/esm/shared-hooks/useDynamicDDS.d.ts +23 -0
  216. package/bin/esm/shared-hooks/useDynamicDDS.d.ts.map +1 -0
  217. package/bin/{shared-hooks → esm/shared-hooks}/useDynamicDDS.js +20 -11
  218. package/bin/esm/shared-hooks/useDynamicDDS.js.map +1 -0
  219. package/bin/esm/shared-hooks/useSharedMap.d.ts +25 -0
  220. package/bin/esm/shared-hooks/useSharedMap.d.ts.map +1 -0
  221. package/bin/{shared-hooks → esm/shared-hooks}/useSharedMap.js +27 -13
  222. package/bin/esm/shared-hooks/useSharedMap.js.map +1 -0
  223. package/bin/esm/shared-hooks/useSharedState.d.ts +22 -0
  224. package/bin/esm/shared-hooks/useSharedState.d.ts.map +1 -0
  225. package/bin/{shared-hooks → esm/shared-hooks}/useSharedState.js +2 -2
  226. package/bin/esm/shared-hooks/useSharedState.js.map +1 -0
  227. package/bin/esm/shared-hooks/useSharedStateRegistry.d.ts +37 -0
  228. package/bin/esm/shared-hooks/useSharedStateRegistry.d.ts.map +1 -0
  229. package/bin/{shared-hooks → esm/shared-hooks}/useSharedStateRegistry.js +27 -19
  230. package/bin/esm/shared-hooks/useSharedStateRegistry.js.map +1 -0
  231. package/bin/esm/shared-hooks/useSharedTree.d.ts +57 -0
  232. package/bin/esm/shared-hooks/useSharedTree.d.ts.map +1 -0
  233. package/bin/esm/shared-hooks/useSharedTree.js +117 -0
  234. package/bin/esm/shared-hooks/useSharedTree.js.map +1 -0
  235. package/bin/esm/shared-hooks/useTreeNode.d.ts +96 -0
  236. package/bin/esm/shared-hooks/useTreeNode.d.ts.map +1 -0
  237. package/bin/esm/shared-hooks/useTreeNode.js +132 -0
  238. package/bin/esm/shared-hooks/useTreeNode.js.map +1 -0
  239. package/bin/esm/types/ActionTypes.d.ts +112 -0
  240. package/bin/esm/types/ActionTypes.d.ts.map +1 -0
  241. package/bin/esm/types/ActionTypes.js.map +1 -0
  242. package/bin/esm/types/PropTypes.d.ts +56 -0
  243. package/bin/esm/types/PropTypes.d.ts.map +1 -0
  244. package/bin/esm/types/PropTypes.js.map +1 -0
  245. package/bin/esm/types/ResultTypes.d.ts +330 -0
  246. package/bin/esm/types/ResultTypes.d.ts.map +1 -0
  247. package/bin/esm/types/ResultTypes.js.map +1 -0
  248. package/bin/esm/types/index.d.ts +4 -0
  249. package/bin/esm/types/index.d.ts.map +1 -0
  250. package/bin/esm/types/index.js +4 -0
  251. package/bin/esm/types/index.js.map +1 -0
  252. package/bin/esm/utils/index.d.ts +2 -0
  253. package/bin/esm/utils/index.d.ts.map +1 -0
  254. package/bin/esm/utils/index.js +2 -0
  255. package/bin/esm/utils/index.js.map +1 -0
  256. package/bin/esm/utils/type-check.d.ts +15 -0
  257. package/bin/esm/utils/type-check.d.ts.map +1 -0
  258. package/bin/esm/utils/type-check.js.map +1 -0
  259. package/package.json +61 -47
  260. package/src/index.ts +6 -6
  261. package/src/interfaces/index.ts +1 -1
  262. package/src/internal/index.ts +2 -2
  263. package/src/internal/type-guards.ts +1 -1
  264. package/src/live-hooks/index.ts +7 -7
  265. package/src/live-hooks/useLiveCanvas.ts +154 -82
  266. package/src/live-hooks/useLiveEvent.ts +43 -7
  267. package/src/live-hooks/useLiveFollowMode.ts +149 -6
  268. package/src/live-hooks/useLivePresence.ts +74 -17
  269. package/src/live-hooks/useLiveState.ts +49 -4
  270. package/src/live-hooks/useLiveTimer.ts +59 -4
  271. package/src/live-hooks/useMediaSynchronizer.ts +70 -5
  272. package/src/providers/AzureProvider.tsx +21 -21
  273. package/src/providers/LiveShareProvider.tsx +115 -13
  274. package/src/providers/index.ts +2 -2
  275. package/src/shared-hooks/index.ts +6 -4
  276. package/src/shared-hooks/internals/tree-node-constants.ts +2 -0
  277. package/src/shared-hooks/internals/tree-node-types.ts +26 -0
  278. package/src/shared-hooks/internals/tree-node-utils.ts +269 -0
  279. package/src/shared-hooks/useDynamicDDS.ts +28 -17
  280. package/src/shared-hooks/useSharedMap.ts +42 -17
  281. package/src/shared-hooks/useSharedState.ts +6 -3
  282. package/src/shared-hooks/useSharedStateRegistry.ts +44 -22
  283. package/src/shared-hooks/useSharedTree.ts +144 -0
  284. package/src/shared-hooks/useTreeNode.ts +147 -0
  285. package/src/types/ActionTypes.ts +13 -9
  286. package/src/types/PropTypes.ts +57 -0
  287. package/src/types/ResultTypes.ts +67 -17
  288. package/src/types/index.ts +3 -3
  289. package/src/utils/index.ts +1 -1
  290. package/tsconfig.cjs.json +14 -0
  291. package/tsconfig.json +65 -70
  292. package/bin/index.d.ts +0 -7
  293. package/bin/index.d.ts.map +0 -1
  294. package/bin/index.js +0 -7
  295. package/bin/index.js.map +0 -1
  296. package/bin/interfaces/LiveInterfaceExtensions.d.ts.map +0 -1
  297. package/bin/interfaces/LiveInterfaceExtensions.js.map +0 -1
  298. package/bin/interfaces/index.d.ts +0 -2
  299. package/bin/interfaces/index.d.ts.map +0 -1
  300. package/bin/interfaces/index.js +0 -2
  301. package/bin/interfaces/index.js.map +0 -1
  302. package/bin/internal/errors.d.ts.map +0 -1
  303. package/bin/internal/errors.js.map +0 -1
  304. package/bin/internal/index.d.ts +0 -3
  305. package/bin/internal/index.d.ts.map +0 -1
  306. package/bin/internal/index.js +0 -3
  307. package/bin/internal/index.js.map +0 -1
  308. package/bin/internal/type-guards.d.ts.map +0 -1
  309. package/bin/internal/type-guards.js.map +0 -1
  310. package/bin/live-hooks/index.d.ts +0 -8
  311. package/bin/live-hooks/index.d.ts.map +0 -1
  312. package/bin/live-hooks/index.js +0 -8
  313. package/bin/live-hooks/index.js.map +0 -1
  314. package/bin/live-hooks/useLiveCanvas.d.ts +0 -29
  315. package/bin/live-hooks/useLiveCanvas.d.ts.map +0 -1
  316. package/bin/live-hooks/useLiveCanvas.js +0 -160
  317. package/bin/live-hooks/useLiveCanvas.js.map +0 -1
  318. package/bin/live-hooks/useLiveEvent.d.ts.map +0 -1
  319. package/bin/live-hooks/useLiveEvent.js.map +0 -1
  320. package/bin/live-hooks/useLiveFollowMode.d.ts +0 -24
  321. package/bin/live-hooks/useLiveFollowMode.d.ts.map +0 -1
  322. package/bin/live-hooks/useLiveFollowMode.js.map +0 -1
  323. package/bin/live-hooks/useLivePresence.d.ts +0 -26
  324. package/bin/live-hooks/useLivePresence.d.ts.map +0 -1
  325. package/bin/live-hooks/useLivePresence.js.map +0 -1
  326. package/bin/live-hooks/useLiveState.d.ts.map +0 -1
  327. package/bin/live-hooks/useLiveState.js.map +0 -1
  328. package/bin/live-hooks/useLiveTimer.d.ts.map +0 -1
  329. package/bin/live-hooks/useLiveTimer.js.map +0 -1
  330. package/bin/live-hooks/useMediaSynchronizer.d.ts +0 -25
  331. package/bin/live-hooks/useMediaSynchronizer.d.ts.map +0 -1
  332. package/bin/live-hooks/useMediaSynchronizer.js.map +0 -1
  333. package/bin/providers/AzureProvider.d.ts.map +0 -1
  334. package/bin/providers/AzureProvider.js.map +0 -1
  335. package/bin/providers/LiveShareProvider.d.ts.map +0 -1
  336. package/bin/providers/LiveShareProvider.js.map +0 -1
  337. package/bin/providers/index.d.ts +0 -3
  338. package/bin/providers/index.d.ts.map +0 -1
  339. package/bin/providers/index.js +0 -3
  340. package/bin/providers/index.js.map +0 -1
  341. package/bin/shared-hooks/index.d.ts +0 -5
  342. package/bin/shared-hooks/index.d.ts.map +0 -1
  343. package/bin/shared-hooks/index.js +0 -5
  344. package/bin/shared-hooks/index.js.map +0 -1
  345. package/bin/shared-hooks/useDynamicDDS.d.ts.map +0 -1
  346. package/bin/shared-hooks/useDynamicDDS.js.map +0 -1
  347. package/bin/shared-hooks/useSharedMap.d.ts.map +0 -1
  348. package/bin/shared-hooks/useSharedMap.js.map +0 -1
  349. package/bin/shared-hooks/useSharedState.d.ts.map +0 -1
  350. package/bin/shared-hooks/useSharedState.js.map +0 -1
  351. package/bin/shared-hooks/useSharedStateRegistry.d.ts.map +0 -1
  352. package/bin/shared-hooks/useSharedStateRegistry.js.map +0 -1
  353. package/bin/types/ActionTypes.d.ts.map +0 -1
  354. package/bin/types/ActionTypes.js.map +0 -1
  355. package/bin/types/PropTypes.d.ts +0 -8
  356. package/bin/types/PropTypes.d.ts.map +0 -1
  357. package/bin/types/PropTypes.js.map +0 -1
  358. package/bin/types/ResultTypes.d.ts.map +0 -1
  359. package/bin/types/ResultTypes.js.map +0 -1
  360. package/bin/types/index.d.ts +0 -4
  361. package/bin/types/index.d.ts.map +0 -1
  362. package/bin/types/index.js +0 -4
  363. package/bin/types/index.js.map +0 -1
  364. package/bin/utils/index.d.ts +0 -2
  365. package/bin/utils/index.d.ts.map +0 -1
  366. package/bin/utils/index.js +0 -2
  367. package/bin/utils/index.js.map +0 -1
  368. package/bin/utils/type-check.d.ts.map +0 -1
  369. package/bin/utils/type-check.js.map +0 -1
  370. package/tsconfig.build.json +0 -6
  371. /package/bin/{interfaces → cjs/interfaces}/LiveInterfaceExtensions.d.ts +0 -0
  372. /package/bin/{internal → cjs/internal}/errors.d.ts +0 -0
  373. /package/bin/{utils → cjs/utils}/type-check.d.ts +0 -0
  374. /package/bin/{interfaces → esm/interfaces}/LiveInterfaceExtensions.js +0 -0
  375. /package/bin/{internal → esm/internal}/errors.js +0 -0
  376. /package/bin/{internal → esm/internal}/type-guards.js +0 -0
  377. /package/bin/{types → esm/types}/ActionTypes.js +0 -0
  378. /package/bin/{types → esm/types}/PropTypes.js +0 -0
  379. /package/bin/{types → esm/types}/ResultTypes.js +0 -0
  380. /package/bin/{utils → esm/utils}/type-check.js +0 -0
@@ -3,12 +3,14 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  import React from "react";
6
- import { isEntries, isJSON, isMap } from "../utils";
7
- import { useDynamicDDS } from "./useDynamicDDS";
8
- import { SharedMap } from "fluid-framework";
9
- import { useFluidObjectsContext } from "../providers";
10
- import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } from "../internal";
6
+ import { isEntries, isJSON, isMap } from "../utils/index.js";
7
+ import { useDynamicDDS } from "./useDynamicDDS.js";
8
+ import { SharedMap } from "fluid-framework/legacy";
9
+ import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } from "../internal/errors.js";
10
+ import { useFluidObjectsContext } from "../providers/AzureProvider.js";
11
11
  /**
12
+ * @deprecated use {@link useSharedTree} instead.
13
+ *
12
14
  * React hook for using a Fluid `SharedMap`.
13
15
  *
14
16
  * @remarks
@@ -22,13 +24,9 @@ import { ActionContainerNotJoinedError, ActionLiveDataObjectUndefinedError, } fr
22
24
  * will be created, otherwise it will use the existing one.
23
25
  * @param initialData a JS Map, entries array, or JSON object to insert into the `SharedMap` when creating
24
26
  * the DDS for the first time.
25
- * @returns stateful `map` entries, `setEntry` callback, `deleteEntry` callback, and the Fluid `sharedMap`.
27
+ * @returns the Fluid `sharedMap`.
26
28
  */
27
29
  export function useSharedMap(uniqueKey, initialData) {
28
- /**
29
- * Stateful readonly map (user facing) with most recent values from `SharedMap` and its setter method.
30
- */
31
- const [map, setMap] = React.useState(getInitialData(initialData));
32
30
  const onFirstInitialize = React.useCallback((newDDS) => {
33
31
  /**
34
32
  * Callback method to set the `initialData` into the map when the `SharedMap` is first created.
@@ -43,6 +41,18 @@ export function useSharedMap(uniqueKey, initialData) {
43
41
  */
44
42
  const { dds: sharedMap } = useDynamicDDS(uniqueKey, SharedMap, onFirstInitialize);
45
43
  const { container } = useFluidObjectsContext();
44
+ /**
45
+ * User facing: get a value from the Fluid `SharedMap`.
46
+ */
47
+ const getEntry = React.useCallback((key) => {
48
+ if (!container) {
49
+ throw new ActionContainerNotJoinedError("sharedMap", "getEntry");
50
+ }
51
+ if (sharedMap === undefined) {
52
+ throw new ActionLiveDataObjectUndefinedError("sharedMap", "getEntry");
53
+ }
54
+ return sharedMap.get(key);
55
+ }, [container, sharedMap]);
46
56
  /**
47
57
  * User facing: set a value to the Fluid `SharedMap`.
48
58
  */
@@ -67,13 +77,17 @@ export function useSharedMap(uniqueKey, initialData) {
67
77
  }
68
78
  sharedMap.delete(key);
69
79
  }, [container, sharedMap]);
80
+ const [sharedMapProxy, setSharedMapProxy] = React.useState();
70
81
  // Setup change listeners, initial values, etc.
71
82
  React.useEffect(() => {
72
83
  if (!sharedMap)
73
84
  return;
85
+ setSharedMapProxy(sharedMap);
86
+ class SharedMapProxyHandler {
87
+ }
74
88
  // Register valueChanged listener for `SharedMap`.
75
89
  const onValueChanged = () => {
76
- setMap(new Map(sharedMap.entries()));
90
+ setSharedMapProxy(new Proxy(sharedMap, new SharedMapProxyHandler()));
77
91
  };
78
92
  sharedMap.on("valueChanged", onValueChanged);
79
93
  // Get initial values from `SharedMap`.
@@ -84,10 +98,10 @@ export function useSharedMap(uniqueKey, initialData) {
84
98
  };
85
99
  }, [sharedMap]);
86
100
  return {
87
- map,
101
+ sharedMap: sharedMapProxy,
102
+ getEntry,
88
103
  setEntry,
89
104
  deleteEntry,
90
- sharedMap,
91
105
  };
92
106
  }
93
107
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedMap.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { DisposeSharedStateAction, SetSharedStateAction } from "../types/index.js";
6
+ /**
7
+ * Inspired by React's `useState` hook, `useSharedState` makes it easy to synchronize state in your app.
8
+ *
9
+ * @remarks
10
+ * Values set through this state is automatically attached to a `SharedMap` that the `AzureProvider`
11
+ * creates. If you are synchronizing complex data structures that multiple users will be setting simultaneously,
12
+ * consider using an optimized hook for your data structure (e.g., `useSharedMap`, `useSharedString`, etc.).
13
+ * This hook can only be used in a child component of `<LiveShareProvider>` or `<AzureProvider>`.
14
+ *
15
+ * @template S Typing for objects stored associated with the `uniqueKey`.
16
+ * @param uniqueKey the unique key for a `SharedMap`. If you use the same key for multiple components, those components will reference the same state.
17
+ * @param initialState a default state for the `SharedMap`.
18
+ *
19
+ * @returns a stateful value, the function to update it, and an optional dispose method to delete it from the `SharedMap`.
20
+ */
21
+ export declare function useSharedState<S = any>(uniqueKey: string, initialState: S): [S, SetSharedStateAction<S>, DisposeSharedStateAction];
22
+ //# sourceMappingURL=useSharedState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedState.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,wBAAwB,EACxB,oBAAoB,EACvB,MAAM,mBAAmB,CAAC;AAI3B;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,GAAG,EAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,CAAC,GAChB,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAkExD"}
@@ -3,9 +3,9 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  import React from "react";
6
- import { useFluidObjectsContext } from "../providers";
6
+ import { useFluidObjectsContext } from "../providers/index.js";
7
7
  import { v4 as uuid } from "uuid";
8
- import { isPrevStateCallback } from "../internal";
8
+ import { isPrevStateCallback } from "../internal/index.js";
9
9
  /**
10
10
  * Inspired by React's `useState` hook, `useSharedState` makes it easy to synchronize state in your app.
11
11
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedState.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC1B,SAAiB,EACjB,YAAe;IAEf;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpE;;OAEG;IACH,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C;;OAEG;IACH,MAAM,EACF,4BAA4B,EAC5B,8BAA8B,EAC9B,iBAAiB,EACjB,iBAAiB,GACpB,GAAG,sBAAsB,EAAE,CAAC;IAE7B;;OAEG;IACH,MAAM,cAAc,GAA4B,KAAK,CAAC,WAAW,CAC7D,CAAC,KAAgC,EAAE,EAAE;QACjC,aAAa,CAAC,CAAC,SAAS,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,mBAAmB,CAAI,KAAK,CAAC;gBAC5C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;gBAClB,CAAC,CAAC,KAAK,CAAC;YACZ,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACzC,OAAO,UAAU,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC,EACD,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAChD,CAAC;IAEF;;OAEG;IACH,MAAM,kBAAkB,GACpB,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnB,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEvC;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,4BAA4B,CACxB,SAAS,EACT,cAAc,CAAC,OAAO,EACtB,aAAa,CAChB,CAAC;QACF,OAAO,GAAG,EAAE;YACR,8BAA8B,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC,CAAC;IACN,CAAC,EAAE;QACC,SAAS;QACT,4BAA4B;QAC5B,8BAA8B;KACjC,CAAC,CAAC;IAEH,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,37 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { DeleteSharedStateAction, IAzureContainerResults, RegisterSharedSetStateAction, UnregisterSharedSetStateAction, UpdateSharedStateAction } from "../types/index.js";
6
+ /**
7
+ * Response for the {@link useSharedStateRegistry} hook.
8
+ */
9
+ export interface ISharedStateRegistryResponse {
10
+ /**
11
+ * Register a set state action callback
12
+ */
13
+ registerSharedSetStateAction: RegisterSharedSetStateAction;
14
+ /**
15
+ * Unregister a set state action callback
16
+ */
17
+ unregisterSharedSetStateAction: UnregisterSharedSetStateAction;
18
+ /**
19
+ * Setter callback to update the shared state
20
+ */
21
+ updateSharedState: UpdateSharedStateAction;
22
+ /**
23
+ * Delete a shared state value
24
+ */
25
+ deleteSharedState: DeleteSharedStateAction;
26
+ }
27
+ /**
28
+ * Hook used internally to keep track of the SharedSetStateActionMap for each unique key. It sets state values for provided keys and updates components listening to the values.
29
+ *
30
+ * @remarks
31
+ * Use this if you are building a custom `LiveShareProvider` or `AzureProvider` implementation in your app.
32
+ *
33
+ * @param results IAzureContainerResults response or undefined
34
+ * @returns ISharedStateRegistryResponse object
35
+ */
36
+ export declare const useSharedStateRegistry: (results: IAzureContainerResults | undefined) => ISharedStateRegistryResponse;
37
+ //# sourceMappingURL=useSharedStateRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedStateRegistry.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EACH,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAE5B,8BAA8B,EAC9B,uBAAuB,EAC1B,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,4BAA4B,EAAE,4BAA4B,CAAC;IAC3D;;OAEG;IACH,8BAA8B,EAAE,8BAA8B,CAAC;IAC/D;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C;;OAEG;IACH,iBAAiB,EAAE,uBAAuB,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,YACtB,sBAAsB,GAAG,SAAS,KAC5C,4BAgHF,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Licensed under the Microsoft Live Share SDK License.
4
4
  */
5
5
  import React from "react";
6
+ import { getRootDataObject, getRootDirectory, TurboDirectory, TurboStateMap, } from "@microsoft/live-share/internal";
6
7
  /**
7
8
  * Hook used internally to keep track of the SharedSetStateActionMap for each unique key. It sets state values for provided keys and updates components listening to the values.
8
9
  *
@@ -14,6 +15,7 @@ import React from "react";
14
15
  */
15
16
  export const useSharedStateRegistry = (results) => {
16
17
  const registeredSharedSetStateActionMapRef = React.useRef(new Map());
18
+ const stateMap = useStateMap(results === null || results === void 0 ? void 0 : results.container);
17
19
  /**
18
20
  * @see ISharedStateRegistryResponse.registerSharedSetStateAction
19
21
  */
@@ -30,12 +32,11 @@ export const useSharedStateRegistry = (results) => {
30
32
  registeredSharedSetStateActionMapRef.current.set(uniqueKey, actionsMap);
31
33
  }
32
34
  // Set initial values, if known
33
- const stateMap = results === null || results === void 0 ? void 0 : results.container.initialObjects.TURBO_STATE_MAP;
34
35
  const initialValue = stateMap === null || stateMap === void 0 ? void 0 : stateMap.get(uniqueKey);
35
36
  if (initialValue) {
36
37
  setLocalStateAction(initialValue);
37
38
  }
38
- }, [results]);
39
+ }, [stateMap]);
39
40
  /**
40
41
  * @see ISharedStateRegistryResponse.unregisterSharedSetStateAction
41
42
  */
@@ -49,34 +50,26 @@ export const useSharedStateRegistry = (results) => {
49
50
  * @see ISharedStateRegistryResponse.updateSharedState
50
51
  */
51
52
  const updateSharedState = React.useCallback((uniqueKey, value) => {
52
- if (!results)
53
+ if (!stateMap)
53
54
  return;
54
- const { container } = results;
55
- const stateMap = container.initialObjects
56
- .TURBO_STATE_MAP;
57
- stateMap.set(uniqueKey, value);
58
- }, [results]);
55
+ stateMap === null || stateMap === void 0 ? void 0 : stateMap.set(uniqueKey, value);
56
+ }, [stateMap]);
59
57
  /**
60
58
  * @see ISharedStateRegistryResponse.deleteSharedState
61
59
  */
62
60
  const deleteSharedState = React.useCallback((uniqueKey) => {
63
- if (!results)
61
+ if (!stateMap)
64
62
  return;
65
- const { container } = results;
66
63
  let actionsMap = registeredSharedSetStateActionMapRef.current.get(uniqueKey);
67
64
  actionsMap === null || actionsMap === void 0 ? void 0 : actionsMap.clear();
68
- const stateMap = container.initialObjects
69
- .TURBO_STATE_MAP;
70
65
  stateMap.delete(uniqueKey);
71
- }, [results]);
66
+ }, [stateMap]);
72
67
  React.useEffect(() => {
73
- if (!results)
68
+ if (!stateMap)
74
69
  return;
75
- const { container } = results;
76
- const stateMap = container.initialObjects.TURBO_STATE_MAP;
77
70
  const valueChangedListener = (changed) => {
78
71
  if (registeredSharedSetStateActionMapRef.current.has(changed.key)) {
79
- const value = stateMap.get(changed.key);
72
+ const value = stateMap === null || stateMap === void 0 ? void 0 : stateMap.get(changed.key);
80
73
  const actionMap = registeredSharedSetStateActionMapRef.current.get(changed.key);
81
74
  actionMap === null || actionMap === void 0 ? void 0 : actionMap.forEach((setLocalStateHandler) => {
82
75
  setLocalStateHandler(value);
@@ -92,9 +85,9 @@ export const useSharedStateRegistry = (results) => {
92
85
  });
93
86
  });
94
87
  return () => {
95
- stateMap.off("valueChanged", valueChangedListener);
88
+ stateMap === null || stateMap === void 0 ? void 0 : stateMap.off("valueChanged", valueChangedListener);
96
89
  };
97
- }, [results]);
90
+ }, [stateMap]);
98
91
  return {
99
92
  registerSharedSetStateAction,
100
93
  unregisterSharedSetStateAction,
@@ -102,4 +95,19 @@ export const useSharedStateRegistry = (results) => {
102
95
  deleteSharedState,
103
96
  };
104
97
  };
98
+ const useStateMap = (container) => {
99
+ const [stateMap, setStateMap] = React.useState();
100
+ React.useEffect(() => {
101
+ if (!container) {
102
+ return;
103
+ }
104
+ const rootDataObject = getRootDataObject(container);
105
+ const rootDirectory = getRootDirectory(rootDataObject);
106
+ const turboDir = rootDirectory.getSubDirectory(TurboDirectory);
107
+ turboDir === null || turboDir === void 0 ? void 0 : turboDir.get(TurboStateMap).get().then((state) => {
108
+ setStateMap(state);
109
+ });
110
+ }, [container]);
111
+ return stateMap;
112
+ };
105
113
  //# sourceMappingURL=useSharedStateRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedStateRegistry.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedStateRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { ImplicitFieldSchema, TreeViewConfiguration, InsertableTreeFieldFromImplicitField } from "fluid-framework";
2
+ import { IUseSharedTreeResults } from "../types/index.js";
3
+ /**
4
+ * Creates a new Fluid `SharedTree` instance if one doesn't already exist.
5
+ * @remarks
6
+ * Use the `root` variable from the {@link IUseSharedTreeResults} response from this hook with {@link useTreeNode}.
7
+ * This makes `root` stateful with React whenever a leaf of `root` changes.
8
+ *
9
+ * @param uniqueKey the unique key for the `SharedTree`. If one does not yet exist, a new `SharedTree` will be created.
10
+ * Otherwise it will use the existing one.
11
+ * @param treeViewConfiguration the tree view configuration that contains the `SharedTree` field schema.
12
+ * @param initialData the initial data to load into the `SharedTree` when it is first created.
13
+ * @returns the {@link IUseSharedTreeResults} with the `root` node.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { SchemaFactory, TreeViewConfiguration } from "fluid-framework";
18
+ * import { useSharedTree, useTreeNode } from "@microsoft/live-share-react";
19
+ * // Declare a schema factory with your unique uuid
20
+ * const sf = new SchemaFactory("fc1db2e8-0000-11ee-be57-0242ac120002");
21
+ * class YourObject extends sf.object("YourObject", {
22
+ * listChangedCount: sf.number,
23
+ * list: sf.array(sf.string),
24
+ * }) {
25
+ * // You can add your own utility functions
26
+ * insert() {
27
+ * this.list.insertAtEnd("some text");
28
+ * this.listChangedCount += 1;
29
+ * }
30
+ * }
31
+ * const config = new TreeViewConfiguration({ schema: YourObject });
32
+ * const initialData = new YourObject({
33
+ * number: 0,
34
+ * list: [],
35
+ * });
36
+ *
37
+ * // Must be child component of <LiveShareProvider> or <AzureProvider>
38
+ * export const YourComponent = () => {
39
+ * // Get the root node of the `SharedTree` mapped to "some-unique-key"
40
+ * const { root } = useSharedTree("some-unique-key", config, initialData);
41
+ * // Makes root stateful / automatically update when the node changes (e.g., node.count)
42
+ * const { node } = useTreeNode(root);
43
+ * // node.list is its own TreeNode, so we make it stateful as well
44
+ * const { node: list } = useTreeNode(node?.list);
45
+ * if (!node || !list) return (<>"Loading"</>);
46
+ * return (
47
+ * <div>
48
+ * <div>Changed: {node.listChangedCount}</div>
49
+ * <button onClick={() => node.insert()}>Insert</button>
50
+ * { list.map((item) => <div key={item}>{item}</div>) }
51
+ * </div>
52
+ * );
53
+ * }
54
+ * ```
55
+ */
56
+ export declare function useSharedTree<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema>(uniqueKey: string, treeViewConfiguration: TreeViewConfiguration<TSchema>, initialData: InsertableTreeFieldFromImplicitField<TSchema>): IUseSharedTreeResults<TSchema>;
57
+ //# sourceMappingURL=useSharedTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedTree.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedTree.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EAIrB,oCAAoC,EAEvC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,aAAa,CACzB,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EAEzD,SAAS,EAAE,MAAM,EACjB,qBAAqB,EAAE,qBAAqB,CAAC,OAAO,CAAC,EACrD,WAAW,EAAE,oCAAoC,CAAC,OAAO,CAAC,GAC3D,qBAAqB,CAAC,OAAO,CAAC,CAuEhC"}
@@ -0,0 +1,117 @@
1
+ import { SharedTree, } from "fluid-framework";
2
+ import { useDynamicDDS } from "../shared-hooks/index.js";
3
+ import React from "react";
4
+ /**
5
+ * Creates a new Fluid `SharedTree` instance if one doesn't already exist.
6
+ * @remarks
7
+ * Use the `root` variable from the {@link IUseSharedTreeResults} response from this hook with {@link useTreeNode}.
8
+ * This makes `root` stateful with React whenever a leaf of `root` changes.
9
+ *
10
+ * @param uniqueKey the unique key for the `SharedTree`. If one does not yet exist, a new `SharedTree` will be created.
11
+ * Otherwise it will use the existing one.
12
+ * @param treeViewConfiguration the tree view configuration that contains the `SharedTree` field schema.
13
+ * @param initialData the initial data to load into the `SharedTree` when it is first created.
14
+ * @returns the {@link IUseSharedTreeResults} with the `root` node.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * import { SchemaFactory, TreeViewConfiguration } from "fluid-framework";
19
+ * import { useSharedTree, useTreeNode } from "@microsoft/live-share-react";
20
+ * // Declare a schema factory with your unique uuid
21
+ * const sf = new SchemaFactory("fc1db2e8-0000-11ee-be57-0242ac120002");
22
+ * class YourObject extends sf.object("YourObject", {
23
+ * listChangedCount: sf.number,
24
+ * list: sf.array(sf.string),
25
+ * }) {
26
+ * // You can add your own utility functions
27
+ * insert() {
28
+ * this.list.insertAtEnd("some text");
29
+ * this.listChangedCount += 1;
30
+ * }
31
+ * }
32
+ * const config = new TreeViewConfiguration({ schema: YourObject });
33
+ * const initialData = new YourObject({
34
+ * number: 0,
35
+ * list: [],
36
+ * });
37
+ *
38
+ * // Must be child component of <LiveShareProvider> or <AzureProvider>
39
+ * export const YourComponent = () => {
40
+ * // Get the root node of the `SharedTree` mapped to "some-unique-key"
41
+ * const { root } = useSharedTree("some-unique-key", config, initialData);
42
+ * // Makes root stateful / automatically update when the node changes (e.g., node.count)
43
+ * const { node } = useTreeNode(root);
44
+ * // node.list is its own TreeNode, so we make it stateful as well
45
+ * const { node: list } = useTreeNode(node?.list);
46
+ * if (!node || !list) return (<>"Loading"</>);
47
+ * return (
48
+ * <div>
49
+ * <div>Changed: {node.listChangedCount}</div>
50
+ * <button onClick={() => node.insert()}>Insert</button>
51
+ * { list.map((item) => <div key={item}>{item}</div>) }
52
+ * </div>
53
+ * );
54
+ * }
55
+ * ```
56
+ */
57
+ export function useSharedTree(uniqueKey, treeViewConfiguration, initialData) {
58
+ const [treeView, setTreeView] = React.useState();
59
+ const [root, setRoot] = React.useState();
60
+ const onFirstInitialize = React.useCallback((newDDS) => {
61
+ try {
62
+ // Create a `treeView` with the provided `treeViewConfiguration`
63
+ const _treeView = newDDS.viewWith(treeViewConfiguration);
64
+ if (_treeView.compatibility.canInitialize) {
65
+ // Set initial data
66
+ _treeView.initialize(initialData);
67
+ }
68
+ // `onFirstInitialize` is only called for the user that created the tree, but we need this object for all clients.
69
+ // Dispose, since we will call `sharedTree.viewWith` in a `useEffect` down below and set it to state.
70
+ _treeView.dispose();
71
+ }
72
+ catch (err) {
73
+ console.error(err);
74
+ }
75
+ }, [treeViewConfiguration, initialData]);
76
+ /**
77
+ * User facing: dynamically load the `SharedTree` DDS for the given unique key.
78
+ */
79
+ const { dds: sharedTree } = useDynamicDDS(uniqueKey, SharedTree, onFirstInitialize);
80
+ /**
81
+ * Sets the tree view and root view
82
+ */
83
+ React.useEffect(() => {
84
+ if (!sharedTree)
85
+ return;
86
+ let _treeView = undefined;
87
+ try {
88
+ // Create a `treeView` with the provided `treeViewConfiguration`
89
+ _treeView = sharedTree.viewWith(treeViewConfiguration);
90
+ setTreeView(_treeView);
91
+ }
92
+ catch (err) {
93
+ console.error(err);
94
+ }
95
+ // Listen for changes to root view
96
+ const updateRoot = () => {
97
+ if (_treeView === null || _treeView === void 0 ? void 0 : _treeView.compatibility.canView) {
98
+ setRoot(_treeView.root);
99
+ }
100
+ else {
101
+ setRoot(undefined);
102
+ }
103
+ };
104
+ updateRoot();
105
+ const unsubscribeToRoot = _treeView === null || _treeView === void 0 ? void 0 : _treeView.events.on("rootChanged", updateRoot);
106
+ return () => {
107
+ _treeView === null || _treeView === void 0 ? void 0 : _treeView.dispose();
108
+ unsubscribeToRoot === null || unsubscribeToRoot === void 0 ? void 0 : unsubscribeToRoot();
109
+ };
110
+ }, [sharedTree, treeViewConfiguration]);
111
+ return {
112
+ treeView,
113
+ sharedTree,
114
+ root,
115
+ };
116
+ }
117
+ //# sourceMappingURL=useSharedTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSharedTree.js","sourceRoot":"","sources":["../../../src/shared-hooks/useSharedTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,GAKb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAe,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,UAAU,aAAa,CAGzB,SAAiB,EACjB,qBAAqD,EACrD,WAA0D;IAE1D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAqB,CAAC;IACpE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GACjB,KAAK,CAAC,QAAQ,EAAuC,CAAC;IAE1D,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACvC,CAAC,MAAa,EAAQ,EAAE;QACpB,IAAI,CAAC;YACD,gEAAgE;YAChE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACzD,IAAI,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;gBACxC,mBAAmB;gBACnB,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC;YACD,kHAAkH;YAClH,qGAAqG;YACrG,SAAS,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACL,CAAC,EACD,CAAC,qBAAqB,EAAE,WAAW,CAAC,CACvC,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,aAAa,CACrC,SAAS,EACT,UAAU,EACV,iBAAiB,CACpB,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,IAAI,SAAS,GAAkC,SAAS,CAAC;QACzD,IAAI,CAAC;YACD,gEAAgE;YAChE,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACvD,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,kCAAkC;QAClC,MAAM,UAAU,GAAG,GAAS,EAAE;YAC1B,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa,CAAC,OAAO,EAAE,CAAC;gBACnC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACL,CAAC,CAAC;QAEF,UAAU,EAAE,CAAC;QACb,MAAM,iBAAiB,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAC,EAAE,CAC1C,aAAa,EACb,UAAU,CACb,CAAC;QACF,OAAO,GAAG,EAAE;YACR,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAE,CAAC;YACrB,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,EAAI,CAAC;QAC1B,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAExC,OAAO;QACH,QAAQ;QACR,UAAU;QACV,IAAI;KACP,CAAC;AACN,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { TreeChangeEvents, TreeNode } from "fluid-framework";
2
+ import { IUseTreeNodeResults } from "../types/index.js";
3
+ /**
4
+ * Makes a provided Fluid `TreeNode` stateful in React.
5
+ *
6
+ * @param node the Fluid `SharedTree` `TreeNode` instance to make stateful.
7
+ * @param stateChangeType listener type to apply changes for. Default value is "nodeChanged", which has the most optimal performance.
8
+ * Provide "treeChanged" to make all children nodes stateful as well when those child nodes change.
9
+ * When using the default, you must pass all child `TreeNode` values into `useTreeNode` for them to be stateful as well.
10
+ * @returns a stateful version `node`
11
+ *
12
+ * @example
13
+ * Example using default `"nodeChanged"` `stateChangeType`
14
+ * ```tsx
15
+ * import { SchemaFactory, TreeViewConfiguration } from "fluid-framework";
16
+ * import { useSharedTree, useTreeNode } from "@microsoft/live-share-react";
17
+ * // Declare a schema factory with your unique uuid
18
+ * const sf = new SchemaFactory("fc1db2e8-0000-11ee-be57-0242ac120002");
19
+ * class YourObject extends sf.object("YourObject", {
20
+ * listChangedCount: sf.number,
21
+ * list: sf.array(sf.string),
22
+ * }) {
23
+ * // You can add your own utility functions
24
+ * insert() {
25
+ * this.list.insertAtEnd("some text");
26
+ * this.listChangedCount += 1;
27
+ * }
28
+ * }
29
+ * const config = new TreeViewConfiguration({ schema: YourObject });
30
+ * const initialData = new YourObject({
31
+ * number: 0,
32
+ * list: [],
33
+ * });
34
+ *
35
+ * // Must be child component of <LiveShareProvider> or <AzureProvider>
36
+ * export const YourComponent = () => {
37
+ * // Get the root node of the `SharedTree` mapped to "some-unique-key"
38
+ * const { root } = useSharedTree("some-unique-key", config, initialData);
39
+ * // Makes root stateful / automatically update when the node changes (e.g., node.count)
40
+ * const { node } = useTreeNode(root);
41
+ * // node.list is its own TreeNode, so we make it stateful as well
42
+ * const { node: list } = useTreeNode(node?.list);
43
+ * if (!node || !list) return (<>"Loading"</>);
44
+ * return (
45
+ * <div>
46
+ * <div>Changed: {node.listChangedCount}</div>
47
+ * <button onClick={() => node.insert()}>Insert</button>
48
+ * { list.map((item) => <div key={item}>{item}</div>) }
49
+ * </div>
50
+ * );
51
+ * }
52
+ * ```
53
+ *
54
+ * @example
55
+ * Example using `"treeChanged"` `stateChangeType`
56
+ * ```tsx
57
+ * import { SchemaFactory, TreeViewConfiguration } from "fluid-framework";
58
+ * import { useSharedTree, useTreeNode } from "@microsoft/live-share-react";
59
+ * // Declare a schema factory with your unique uuid
60
+ * const sf = new SchemaFactory("fc1db2e8-0000-11ee-be57-0242ac120002");
61
+ *
62
+ * class ChildObject extends sf.object("ChildObject", {
63
+ * count: sf.number,
64
+ * }) {
65
+ * increment() {
66
+ * this.count += 1;
67
+ * }
68
+ * }
69
+ *
70
+ * class YourObject extends sf.object("YourObject", {
71
+ * child: ChildObject,
72
+ * }) {}
73
+ * const config = new TreeViewConfiguration({ schema: YourObject });
74
+ * const initialData = new YourObject({
75
+ * child: new ChildObject({ count: 0 }),
76
+ * });
77
+ *
78
+ * // Must be child component of <LiveShareProvider> or <AzureProvider>
79
+ * export const YourComponent = () => {
80
+ * // Get the root node of the `SharedTree` mapped to "some-unique-key"
81
+ * const { root } = useSharedTree("some-unique-key", config, initialData);
82
+ * // Using "treeChanged" prop makes all children nodes stateful as well.
83
+ * // Use with caution / measure render performance with React dev tools.
84
+ * const { node } = useTreeNode(root, "treeChanged");
85
+ * if (!node) return (<>"Loading"</>);
86
+ * return (
87
+ * <div>
88
+ * <div>Changed: {node.child.count}</div>
89
+ * <button onClick={() => node.increment()}>Insert</button>
90
+ * </div>
91
+ * );
92
+ * }
93
+ * ```
94
+ */
95
+ export declare function useTreeNode<TNode extends TreeNode | undefined = TreeNode>(node: TNode, stateChangeType?: keyof TreeChangeEvents): IUseTreeNodeResults<TNode>;
96
+ //# sourceMappingURL=useTreeNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTreeNode.d.ts","sourceRoot":"","sources":["../../../src/shared-hooks/useTreeNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,gBAAgB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAS,QAAQ,GAAG,SAAS,GAAG,QAAQ,EACrE,IAAI,EAAE,KAAK,EACX,eAAe,GAAE,MAAM,gBAAgC,GACxD,mBAAmB,CAAC,KAAK,CAAC,CA0C5B"}