@microsoft/live-share-react 1.0.0-preview.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nycrc.json +10 -0
- package/LICENSE +87 -0
- package/README.md +543 -0
- package/bin/index.d.ts +7 -0
- package/bin/index.d.ts.map +1 -0
- package/bin/index.js +7 -0
- package/bin/index.js.map +1 -0
- package/bin/interfaces/LiveInterfaceExtensions.d.ts +9 -0
- package/bin/interfaces/LiveInterfaceExtensions.d.ts.map +1 -0
- package/bin/interfaces/LiveInterfaceExtensions.js +6 -0
- package/bin/interfaces/LiveInterfaceExtensions.js.map +1 -0
- package/bin/interfaces/index.d.ts +2 -0
- package/bin/interfaces/index.d.ts.map +1 -0
- package/bin/interfaces/index.js +2 -0
- package/bin/interfaces/index.js.map +1 -0
- package/bin/internal-hooks/index.d.ts +2 -0
- package/bin/internal-hooks/index.d.ts.map +1 -0
- package/bin/internal-hooks/index.js +2 -0
- package/bin/internal-hooks/index.js.map +1 -0
- package/bin/internal-hooks/useDynamicDDSRegistry.d.ts +14 -0
- package/bin/internal-hooks/useDynamicDDSRegistry.d.ts.map +1 -0
- package/bin/internal-hooks/useDynamicDDSRegistry.js +142 -0
- package/bin/internal-hooks/useDynamicDDSRegistry.js.map +1 -0
- package/bin/internal-hooks/useSharedStateRegistry.d.ts +31 -0
- package/bin/internal-hooks/useSharedStateRegistry.d.ts.map +1 -0
- package/bin/internal-hooks/useSharedStateRegistry.js +100 -0
- package/bin/internal-hooks/useSharedStateRegistry.js.map +1 -0
- package/bin/internal-hooks/useStateRef.d.ts +7 -0
- package/bin/internal-hooks/useStateRef.d.ts.map +1 -0
- package/bin/internal-hooks/useStateRef.js +15 -0
- package/bin/internal-hooks/useStateRef.js.map +1 -0
- package/bin/live-hooks/index.d.ts +7 -0
- package/bin/live-hooks/index.d.ts.map +1 -0
- package/bin/live-hooks/index.js +7 -0
- package/bin/live-hooks/index.js.map +1 -0
- package/bin/live-hooks/useLiveAICompletion.d.ts +29 -0
- package/bin/live-hooks/useLiveAICompletion.d.ts.map +1 -0
- package/bin/live-hooks/useLiveAICompletion.js +186 -0
- package/bin/live-hooks/useLiveAICompletion.js.map +1 -0
- package/bin/live-hooks/useLiveCanvas.d.ts +28 -0
- package/bin/live-hooks/useLiveCanvas.d.ts.map +1 -0
- package/bin/live-hooks/useLiveCanvas.js +167 -0
- package/bin/live-hooks/useLiveCanvas.js.map +1 -0
- package/bin/live-hooks/useLiveCoPilot.d.ts +28 -0
- package/bin/live-hooks/useLiveCoPilot.d.ts.map +1 -0
- package/bin/live-hooks/useLiveCoPilot.js +178 -0
- package/bin/live-hooks/useLiveCoPilot.js.map +1 -0
- package/bin/live-hooks/useLiveEvent.d.ts +22 -0
- package/bin/live-hooks/useLiveEvent.d.ts.map +1 -0
- package/bin/live-hooks/useLiveEvent.js +86 -0
- package/bin/live-hooks/useLiveEvent.js.map +1 -0
- package/bin/live-hooks/useLivePresence.d.ts +26 -0
- package/bin/live-hooks/useLivePresence.d.ts.map +1 -0
- package/bin/live-hooks/useLivePresence.js +93 -0
- package/bin/live-hooks/useLivePresence.js.map +1 -0
- package/bin/live-hooks/useLiveState.d.ts +20 -0
- package/bin/live-hooks/useLiveState.d.ts.map +1 -0
- package/bin/live-hooks/useLiveState.js +71 -0
- package/bin/live-hooks/useLiveState.js.map +1 -0
- package/bin/live-hooks/useLiveTimer.d.ts +8 -0
- package/bin/live-hooks/useLiveTimer.d.ts.map +1 -0
- package/bin/live-hooks/useLiveTimer.js +132 -0
- package/bin/live-hooks/useLiveTimer.js.map +1 -0
- package/bin/live-hooks/useMediaSynchronizer.d.ts +23 -0
- package/bin/live-hooks/useMediaSynchronizer.d.ts.map +1 -0
- package/bin/live-hooks/useMediaSynchronizer.js +162 -0
- package/bin/live-hooks/useMediaSynchronizer.js.map +1 -0
- package/bin/live-share-turbo/AzureTurboClient.d.ts +39 -0
- package/bin/live-share-turbo/AzureTurboClient.d.ts.map +1 -0
- package/bin/live-share-turbo/AzureTurboClient.js +56 -0
- package/bin/live-share-turbo/AzureTurboClient.js.map +1 -0
- package/bin/live-share-turbo/LiveShareTurboClient.d.ts +53 -0
- package/bin/live-share-turbo/LiveShareTurboClient.d.ts.map +1 -0
- package/bin/live-share-turbo/LiveShareTurboClient.js +69 -0
- package/bin/live-share-turbo/LiveShareTurboClient.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboDataObject.d.ts +31 -0
- package/bin/live-share-turbo/dds-objects/TurboDataObject.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboDataObject.js +75 -0
- package/bin/live-share-turbo/dds-objects/TurboDataObject.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.d.ts +48 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.js +104 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveCanvas.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.d.ts +28 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.js +68 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveEvent.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.d.ts +60 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.js +111 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveMediaSession.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.d.ts +77 -0
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.js +137 -0
- package/bin/live-share-turbo/dds-objects/TurboLivePresence.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveState.d.ts +30 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveState.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveState.js +74 -0
- package/bin/live-share-turbo/dds-objects/TurboLiveState.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.d.ts +61 -0
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.js +108 -0
- package/bin/live-share-turbo/dds-objects/TurboSharedMap.js.map +1 -0
- package/bin/live-share-turbo/dds-objects/index.d.ts +8 -0
- package/bin/live-share-turbo/dds-objects/index.d.ts.map +1 -0
- package/bin/live-share-turbo/dds-objects/index.js +8 -0
- package/bin/live-share-turbo/dds-objects/index.js.map +1 -0
- package/bin/live-share-turbo/index.d.ts +5 -0
- package/bin/live-share-turbo/index.d.ts.map +1 -0
- package/bin/live-share-turbo/index.js +5 -0
- package/bin/live-share-turbo/index.js.map +1 -0
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.d.ts +15 -0
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.d.ts.map +1 -0
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.js +2 -0
- package/bin/live-share-turbo/interfaces/IFluidTurboClient.js.map +1 -0
- package/bin/live-share-turbo/interfaces/index.d.ts +3 -0
- package/bin/live-share-turbo/interfaces/index.d.ts.map +1 -0
- package/bin/live-share-turbo/interfaces/index.js +3 -0
- package/bin/live-share-turbo/interfaces/index.js.map +1 -0
- package/bin/live-share-turbo/internals/FluidTurboClient.d.ts +39 -0
- package/bin/live-share-turbo/internals/FluidTurboClient.d.ts.map +1 -0
- package/bin/live-share-turbo/internals/FluidTurboClient.js +121 -0
- package/bin/live-share-turbo/internals/FluidTurboClient.js.map +1 -0
- package/bin/live-share-turbo/internals/index.d.ts +2 -0
- package/bin/live-share-turbo/internals/index.d.ts.map +1 -0
- package/bin/live-share-turbo/internals/index.js +2 -0
- package/bin/live-share-turbo/internals/index.js.map +1 -0
- package/bin/live-share-turbo/internals/types.d.ts +4 -0
- package/bin/live-share-turbo/internals/types.d.ts.map +1 -0
- package/bin/live-share-turbo/internals/types.js +2 -0
- package/bin/live-share-turbo/internals/types.js.map +1 -0
- package/bin/providers/AzureProvider.d.ts +34 -0
- package/bin/providers/AzureProvider.d.ts.map +1 -0
- package/bin/providers/AzureProvider.js +102 -0
- package/bin/providers/AzureProvider.js.map +1 -0
- package/bin/providers/FluidContextProvider.d.ts +34 -0
- package/bin/providers/FluidContextProvider.d.ts.map +1 -0
- package/bin/providers/FluidContextProvider.js +99 -0
- package/bin/providers/FluidContextProvider.js.map +1 -0
- package/bin/providers/LiveShareContextProvider.d.ts +42 -0
- package/bin/providers/LiveShareContextProvider.d.ts.map +1 -0
- package/bin/providers/LiveShareContextProvider.js +63 -0
- package/bin/providers/LiveShareContextProvider.js.map +1 -0
- package/bin/providers/LiveShareProvider.d.ts +42 -0
- package/bin/providers/LiveShareProvider.d.ts.map +1 -0
- package/bin/providers/LiveShareProvider.js +66 -0
- package/bin/providers/LiveShareProvider.js.map +1 -0
- package/bin/providers/index.d.ts +3 -0
- package/bin/providers/index.d.ts.map +1 -0
- package/bin/providers/index.js +3 -0
- package/bin/providers/index.js.map +1 -0
- package/bin/shared-hooks/index.d.ts +5 -0
- package/bin/shared-hooks/index.d.ts.map +1 -0
- package/bin/shared-hooks/index.js +5 -0
- package/bin/shared-hooks/index.js.map +1 -0
- package/bin/shared-hooks/useDynamicDDS.d.ts +19 -0
- package/bin/shared-hooks/useDynamicDDS.d.ts.map +1 -0
- package/bin/shared-hooks/useDynamicDDS.js +68 -0
- package/bin/shared-hooks/useDynamicDDS.js.map +1 -0
- package/bin/shared-hooks/useLockedTask.d.ts +11 -0
- package/bin/shared-hooks/useLockedTask.d.ts.map +1 -0
- package/bin/shared-hooks/useLockedTask.js +82 -0
- package/bin/shared-hooks/useLockedTask.js.map +1 -0
- package/bin/shared-hooks/useSharedMap.d.ts +22 -0
- package/bin/shared-hooks/useSharedMap.d.ts.map +1 -0
- package/bin/shared-hooks/useSharedMap.js +106 -0
- package/bin/shared-hooks/useSharedMap.js.map +1 -0
- package/bin/shared-hooks/useSharedState.d.ts +21 -0
- package/bin/shared-hooks/useSharedState.d.ts.map +1 -0
- package/bin/shared-hooks/useSharedState.js +63 -0
- package/bin/shared-hooks/useSharedState.js.map +1 -0
- package/bin/shared-hooks/useTaskManager.d.ts +13 -0
- package/bin/shared-hooks/useTaskManager.d.ts.map +1 -0
- package/bin/shared-hooks/useTaskManager.js +86 -0
- package/bin/shared-hooks/useTaskManager.js.map +1 -0
- package/bin/types/ActionTypes.d.ts +30 -0
- package/bin/types/ActionTypes.d.ts.map +1 -0
- package/bin/types/ActionTypes.js +6 -0
- package/bin/types/ActionTypes.js.map +1 -0
- package/bin/types/PropTypes.d.ts +8 -0
- package/bin/types/PropTypes.d.ts.map +1 -0
- package/bin/types/PropTypes.js +6 -0
- package/bin/types/PropTypes.js.map +1 -0
- package/bin/types/ResultTypes.d.ts +163 -0
- package/bin/types/ResultTypes.d.ts.map +1 -0
- package/bin/types/ResultTypes.js +6 -0
- package/bin/types/ResultTypes.js.map +1 -0
- package/bin/types/index.d.ts +4 -0
- package/bin/types/index.d.ts.map +1 -0
- package/bin/types/index.js +4 -0
- package/bin/types/index.js.map +1 -0
- package/bin/utils/getContainerSchema.d.ts +8 -0
- package/bin/utils/getContainerSchema.d.ts.map +1 -0
- package/bin/utils/getContainerSchema.js +41 -0
- package/bin/utils/getContainerSchema.js.map +1 -0
- package/bin/utils/index.d.ts +2 -0
- package/bin/utils/index.d.ts.map +1 -0
- package/bin/utils/index.js +2 -0
- package/bin/utils/index.js.map +1 -0
- package/bin/utils/type-check.d.ts +15 -0
- package/bin/utils/type-check.d.ts.map +1 -0
- package/bin/utils/type-check.js +54 -0
- package/bin/utils/type-check.js.map +1 -0
- package/package.json +47 -0
- package/src/index.ts +6 -0
- package/src/interfaces/LiveInterfaceExtensions.ts +9 -0
- package/src/interfaces/index.ts +1 -0
- package/src/internal-hooks/index.ts +1 -0
- package/src/internal-hooks/useSharedStateRegistry.ts +163 -0
- package/src/live-hooks/index.ts +6 -0
- package/src/live-hooks/useLiveCanvas.ts +198 -0
- package/src/live-hooks/useLiveEvent.ts +117 -0
- package/src/live-hooks/useLivePresence.ts +124 -0
- package/src/live-hooks/useLiveState.ts +108 -0
- package/src/live-hooks/useLiveTimer.ts +184 -0
- package/src/live-hooks/useMediaSynchronizer.ts +200 -0
- package/src/providers/AzureProvider.tsx +177 -0
- package/src/providers/LiveShareProvider.tsx +140 -0
- package/src/providers/index.ts +2 -0
- package/src/shared-hooks/index.ts +4 -0
- package/src/shared-hooks/useDynamicDDS.ts +71 -0
- package/src/shared-hooks/useSharedMap.ts +132 -0
- package/src/shared-hooks/useSharedState.ts +85 -0
- package/src/shared-hooks/useTaskManager.ts +82 -0
- package/src/types/ActionTypes.ts +76 -0
- package/src/types/PropTypes.ts +10 -0
- package/src/types/ResultTypes.ts +187 -0
- package/src/types/index.ts +3 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/type-check.ts +69 -0
- package/tinylicious.log +4 -0
- package/tsconfig.build.json +6 -0
- package/tsconfig.json +72 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the Microsoft Live Share SDK License.
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { LiveMediaSession, } from "@microsoft/live-share-media";
|
|
7
|
+
import { isExtendedMediaMetadata, isMediaElement, isRefObject } from "../utils";
|
|
8
|
+
import { useDynamicDDS } from "../shared-hooks";
|
|
9
|
+
/**
|
|
10
|
+
* React hook for using a Live Share media `MediaPlayerSynchronizer`.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* Use this hook if you want to synchronize the playback position of a video or audio element during a Live Share session.
|
|
14
|
+
*
|
|
15
|
+
* @param uniqueKey uniqueKey value for the `LiveMediaSession` DDS object used by `MediaPlayerSynchronizer`.
|
|
16
|
+
* @param mediaPlayerElementRef React RefObject containing object/element conforming to IMediaPlayer interface or string id for <video> / <audio> element.
|
|
17
|
+
* @param initialTrack initial track to load. Either ExtendedMediaMetadata, trackId string, or null.
|
|
18
|
+
* @param allowedRoles Optional. Array of user roles that are eligible to modify group playback state.
|
|
19
|
+
* @param viewOnly Optional. Flag for whether or not the media synchronizer should be in viewOnly mode.
|
|
20
|
+
* @returns IUseMediaSynchronizerResults object.
|
|
21
|
+
*/
|
|
22
|
+
export function useMediaSynchronizer(uniqueKey, mediaPlayerElementRef, initialTrack, allowedRoles, viewOnly) {
|
|
23
|
+
/**
|
|
24
|
+
* User facing media synchronizer and non-user facing setter
|
|
25
|
+
*/
|
|
26
|
+
const [mediaSynchronizer, setMediaSynchronizer] = React.useState();
|
|
27
|
+
/**
|
|
28
|
+
* Suspension object and setter
|
|
29
|
+
*/
|
|
30
|
+
const [suspension, setSuspension] = React.useState();
|
|
31
|
+
/**
|
|
32
|
+
* User facing: dynamically load the LiveMediaSession DDS for the given unique key.
|
|
33
|
+
*/
|
|
34
|
+
const { dds: mediaSession } = useDynamicDDS(uniqueKey, LiveMediaSession);
|
|
35
|
+
/**
|
|
36
|
+
* User facing: play callback
|
|
37
|
+
*/
|
|
38
|
+
const play = React.useCallback(() => {
|
|
39
|
+
mediaSynchronizer === null || mediaSynchronizer === void 0 ? void 0 : mediaSynchronizer.play();
|
|
40
|
+
}, [mediaSynchronizer]);
|
|
41
|
+
/**
|
|
42
|
+
* User facing: pause callback
|
|
43
|
+
*/
|
|
44
|
+
const pause = React.useCallback(() => {
|
|
45
|
+
mediaSynchronizer === null || mediaSynchronizer === void 0 ? void 0 : mediaSynchronizer.pause();
|
|
46
|
+
}, [mediaSynchronizer]);
|
|
47
|
+
/**
|
|
48
|
+
* User facing: seek callback
|
|
49
|
+
*/
|
|
50
|
+
const seekTo = React.useCallback((time) => {
|
|
51
|
+
mediaSynchronizer === null || mediaSynchronizer === void 0 ? void 0 : mediaSynchronizer.seekTo(time);
|
|
52
|
+
}, [mediaSynchronizer]);
|
|
53
|
+
/**
|
|
54
|
+
* User facing: set track callback
|
|
55
|
+
*/
|
|
56
|
+
const setTrack = React.useCallback((track) => {
|
|
57
|
+
// TODO: fix force unwrap once synchronizer uses correct types
|
|
58
|
+
if (isExtendedMediaMetadata(track)) {
|
|
59
|
+
mediaSynchronizer.setTrack(track);
|
|
60
|
+
}
|
|
61
|
+
else if (typeof track === "string") {
|
|
62
|
+
mediaSynchronizer.setTrack({
|
|
63
|
+
trackIdentifier: track,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}, [mediaSynchronizer]);
|
|
67
|
+
/**
|
|
68
|
+
* User facing: create a new suspension and set it locally to state
|
|
69
|
+
*/
|
|
70
|
+
const beginSuspension = React.useCallback((waitPoint) => {
|
|
71
|
+
const suspension = mediaSession === null || mediaSession === void 0 ? void 0 : mediaSession.coordinator.beginSuspension(waitPoint);
|
|
72
|
+
setSuspension(suspension);
|
|
73
|
+
}, [mediaSession]);
|
|
74
|
+
/**
|
|
75
|
+
* User facing: if a suspension is active, end it. Called when "Follow presenter" button is clicked.
|
|
76
|
+
*/
|
|
77
|
+
const endSuspension = React.useCallback(() => {
|
|
78
|
+
suspension === null || suspension === void 0 ? void 0 : suspension.end();
|
|
79
|
+
setSuspension(undefined);
|
|
80
|
+
}, [suspension]);
|
|
81
|
+
/**
|
|
82
|
+
* Setup change listeners and start `LiveMediaSession` if needed
|
|
83
|
+
*/
|
|
84
|
+
React.useEffect(() => {
|
|
85
|
+
if (mediaSession === undefined || !mediaPlayerElementRef)
|
|
86
|
+
return;
|
|
87
|
+
// Query the HTML5 media element from the document and set reference
|
|
88
|
+
let mediaPlayer;
|
|
89
|
+
if (isRefObject(mediaPlayerElementRef)) {
|
|
90
|
+
if (!mediaPlayerElementRef.current)
|
|
91
|
+
return;
|
|
92
|
+
mediaPlayer = mediaPlayerElementRef.current;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const mediaPlayerElement = document.getElementById(mediaPlayerElementRef);
|
|
96
|
+
if (!isMediaElement(mediaPlayerElement))
|
|
97
|
+
return;
|
|
98
|
+
mediaPlayer = mediaPlayerElement;
|
|
99
|
+
}
|
|
100
|
+
if (initialTrack) {
|
|
101
|
+
// If supported type and not null, set the initial src
|
|
102
|
+
if (isExtendedMediaMetadata(initialTrack)) {
|
|
103
|
+
mediaPlayer.src = initialTrack.trackIdentifier;
|
|
104
|
+
}
|
|
105
|
+
else if (typeof initialTrack === "string") {
|
|
106
|
+
mediaPlayer.src = initialTrack;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Begin synchronizing a MediaSynchronizer for the player
|
|
110
|
+
const synchronizer = mediaSession.synchronize(mediaPlayer);
|
|
111
|
+
if (viewOnly !== undefined) {
|
|
112
|
+
// Set synchronizer to view only mode provided by developer
|
|
113
|
+
synchronizer.viewOnly = viewOnly;
|
|
114
|
+
}
|
|
115
|
+
if (!mediaSession.isInitialized) {
|
|
116
|
+
// Start synchronizing the media session
|
|
117
|
+
mediaSession.initialize(allowedRoles !== null && allowedRoles !== void 0 ? allowedRoles : []);
|
|
118
|
+
}
|
|
119
|
+
else if (initialTrack) {
|
|
120
|
+
// If we have already started the media session, the synchronizer won't have initial track
|
|
121
|
+
// data now that we are remounting.
|
|
122
|
+
// TODO: if player is loaded twice in one app at once, then this has a chance to disrupt the
|
|
123
|
+
// group state by resetting the track. MediaPlayerSynchronizer does not currently have a way to
|
|
124
|
+
// get the current track, so to fix this we need a better solution.
|
|
125
|
+
if (isExtendedMediaMetadata(initialTrack)) {
|
|
126
|
+
synchronizer.setTrack(initialTrack);
|
|
127
|
+
}
|
|
128
|
+
else if (typeof initialTrack === "string") {
|
|
129
|
+
synchronizer.setTrack({
|
|
130
|
+
trackIdentifier: initialTrack,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
setMediaSynchronizer(synchronizer);
|
|
135
|
+
return () => {
|
|
136
|
+
synchronizer.removeAllListeners();
|
|
137
|
+
mediaSession.removeAllListeners();
|
|
138
|
+
synchronizer === null || synchronizer === void 0 ? void 0 : synchronizer.end();
|
|
139
|
+
};
|
|
140
|
+
}, [mediaSession]);
|
|
141
|
+
/**
|
|
142
|
+
* Change view in media synchronizer only if prop changes
|
|
143
|
+
*/
|
|
144
|
+
React.useEffect(() => {
|
|
145
|
+
if ((mediaSynchronizer === null || mediaSynchronizer === void 0 ? void 0 : mediaSynchronizer.viewOnly) !== undefined &&
|
|
146
|
+
viewOnly !== undefined &&
|
|
147
|
+
mediaSynchronizer.viewOnly !== viewOnly) {
|
|
148
|
+
mediaSynchronizer.viewOnly = !!viewOnly;
|
|
149
|
+
}
|
|
150
|
+
}, [viewOnly, mediaSynchronizer === null || mediaSynchronizer === void 0 ? void 0 : mediaSynchronizer.viewOnly]);
|
|
151
|
+
return {
|
|
152
|
+
suspended: !!suspension,
|
|
153
|
+
mediaSynchronizer,
|
|
154
|
+
play,
|
|
155
|
+
pause,
|
|
156
|
+
seekTo,
|
|
157
|
+
setTrack,
|
|
158
|
+
beginSuspension,
|
|
159
|
+
endSuspension,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=useMediaSynchronizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMediaSynchronizer.js","sourceRoot":"","sources":["../../src/live-hooks/useMediaSynchronizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { IFluidContainer, LoadableObjectClass } from "fluid-framework";
|
|
2
|
+
import { AzureClientProps, AzureContainerServices } from "@fluidframework/azure-client";
|
|
3
|
+
import { FluidTurboClient } from "./internals";
|
|
4
|
+
export declare class AzureTurboClient extends FluidTurboClient {
|
|
5
|
+
private _client;
|
|
6
|
+
private _results;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new client instance using configuration parameters.
|
|
9
|
+
* @param props - Properties for initializing a new AzureClient instance
|
|
10
|
+
*/
|
|
11
|
+
constructor(props: AzureClientProps);
|
|
12
|
+
/**
|
|
13
|
+
* Get the Fluid join container results
|
|
14
|
+
*/
|
|
15
|
+
get results(): {
|
|
16
|
+
container: IFluidContainer;
|
|
17
|
+
services: AzureContainerServices;
|
|
18
|
+
} | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a new detached container instance in the Azure Fluid Relay.
|
|
21
|
+
* @param containerSchema - Container schema for the new container.
|
|
22
|
+
* @returns New detached container instance along with associated services.
|
|
23
|
+
*/
|
|
24
|
+
createContainer(additionalDynamicObjectTypes?: LoadableObjectClass<any>[]): Promise<{
|
|
25
|
+
container: IFluidContainer;
|
|
26
|
+
services: AzureContainerServices;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Accesses the existing container given its unique ID in the Azure Fluid Relay.
|
|
30
|
+
* @param id - Unique ID of the container in Azure Fluid Relay.
|
|
31
|
+
* @param containerSchema - Container schema used to access data objects in the container.
|
|
32
|
+
* @returns Existing container instance along with associated services.
|
|
33
|
+
*/
|
|
34
|
+
getContainer(id: string, additionalDynamicObjectTypes?: LoadableObjectClass<any>[]): Promise<{
|
|
35
|
+
container: IFluidContainer;
|
|
36
|
+
services: AzureContainerServices;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=AzureTurboClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureTurboClient.d.ts","sourceRoot":"","sources":["../../src/live-share-turbo/AzureTurboClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAEH,gBAAgB,EAChB,sBAAsB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,qBAAa,gBAAiB,SAAQ,gBAAgB;IAClD,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAKA;IAEhB;;;OAGG;gBACS,KAAK,EAAE,gBAAgB;IAKnC;;OAEG;IACH,IAAoB,OAAO,IACrB;QACI,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;KACpC,GACD,SAAS,CAEd;IAED;;;;OAIG;IACU,eAAe,CACxB,4BAA4B,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAC1D,OAAO,CAAC;QACP,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;KACpC,CAAC;IAOF;;;;;OAKG;IACU,YAAY,CACrB,EAAE,EAAE,MAAM,EACV,4BAA4B,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAC1D,OAAO,CAAC;QACP,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;KACpC,CAAC;CAML"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { getContainerSchema } from "../utils";
|
|
11
|
+
import { AzureClient, } from "@fluidframework/azure-client";
|
|
12
|
+
import { FluidTurboClient } from "./internals";
|
|
13
|
+
export class AzureTurboClient extends FluidTurboClient {
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new client instance using configuration parameters.
|
|
16
|
+
* @param props - Properties for initializing a new AzureClient instance
|
|
17
|
+
*/
|
|
18
|
+
constructor(props) {
|
|
19
|
+
super();
|
|
20
|
+
this._client = new AzureClient(props);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the Fluid join container results
|
|
24
|
+
*/
|
|
25
|
+
get results() {
|
|
26
|
+
return this._results;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new detached container instance in the Azure Fluid Relay.
|
|
30
|
+
* @param containerSchema - Container schema for the new container.
|
|
31
|
+
* @returns New detached container instance along with associated services.
|
|
32
|
+
*/
|
|
33
|
+
createContainer(additionalDynamicObjectTypes) {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
const schema = getContainerSchema(additionalDynamicObjectTypes);
|
|
36
|
+
this._results = yield this._client.createContainer(schema);
|
|
37
|
+
this.registerDynamicObjectListeners();
|
|
38
|
+
return this._results;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Accesses the existing container given its unique ID in the Azure Fluid Relay.
|
|
43
|
+
* @param id - Unique ID of the container in Azure Fluid Relay.
|
|
44
|
+
* @param containerSchema - Container schema used to access data objects in the container.
|
|
45
|
+
* @returns Existing container instance along with associated services.
|
|
46
|
+
*/
|
|
47
|
+
getContainer(id, additionalDynamicObjectTypes) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
const schema = getContainerSchema(additionalDynamicObjectTypes);
|
|
50
|
+
this._results = yield this._client.getContainer(id, schema);
|
|
51
|
+
this.registerDynamicObjectListeners();
|
|
52
|
+
return this._results;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=AzureTurboClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureTurboClient.js","sourceRoot":"","sources":["../../src/live-share-turbo/AzureTurboClient.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EACH,WAAW,GAGd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IASlD;;;OAGG;IACH,YAAY,KAAuB;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAoB,OAAO;QAMvB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACU,eAAe,CACxB,4BAAyD;;YAKzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,4BAA4B,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;KAAA;IAED;;;;;OAKG;IACU,YAAY,CACrB,EAAU,EACV,4BAAyD;;YAKzD,MAAM,MAAM,GAAG,kBAAkB,CAAC,4BAA4B,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;KAAA;CACJ"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { IFluidContainer, LoadableObjectClass } from "fluid-framework";
|
|
2
|
+
import { ILiveShareClientOptions, ILiveShareHost } from "@microsoft/live-share";
|
|
3
|
+
import { AzureContainerServices } from "@fluidframework/azure-client";
|
|
4
|
+
import { FluidTurboClient } from "./internals";
|
|
5
|
+
export declare class LiveShareTurboClient extends FluidTurboClient {
|
|
6
|
+
private _client;
|
|
7
|
+
private _results;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new `LiveShareTurbo` instance.
|
|
10
|
+
* @param host Host for the current Live Share session.
|
|
11
|
+
* @param options Optional. Configuration options for the client.
|
|
12
|
+
*/
|
|
13
|
+
constructor(host: ILiveShareHost, options?: ILiveShareClientOptions);
|
|
14
|
+
/**
|
|
15
|
+
* If true the client is configured to use a local test server.
|
|
16
|
+
*/
|
|
17
|
+
get isTesting(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Number of times the client should attempt to get the ID of the container to join for the
|
|
20
|
+
* current context.
|
|
21
|
+
*/
|
|
22
|
+
get maxContainerLookupTries(): number;
|
|
23
|
+
/**
|
|
24
|
+
* Set number of times the client should attempt to get the ID of the container to join for the
|
|
25
|
+
* current context.
|
|
26
|
+
*/
|
|
27
|
+
set maxContainerLookupTries(value: number);
|
|
28
|
+
/**
|
|
29
|
+
* Get the Fluid join container results
|
|
30
|
+
*/
|
|
31
|
+
get results(): {
|
|
32
|
+
container: IFluidContainer;
|
|
33
|
+
services: AzureContainerServices;
|
|
34
|
+
created: boolean;
|
|
35
|
+
} | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Connects to the fluid container for the current teams context.
|
|
38
|
+
*
|
|
39
|
+
* @remarks
|
|
40
|
+
* The first client joining the container will create the container resulting in the
|
|
41
|
+
* `onContainerFirstCreated` callback being called. This callback can be used to set the initial
|
|
42
|
+
* state of of the containers object prior to the container being attached.
|
|
43
|
+
* @param fluidContainerSchema Fluid objects to create.
|
|
44
|
+
* @param onContainerFirstCreated Optional. Callback that's called when the container is first created.
|
|
45
|
+
* @returns The fluid `container` and `services` objects to use along with a `created` flag that if true means the container had to be created.
|
|
46
|
+
*/
|
|
47
|
+
join(additionalDynamicObjectTypes?: LoadableObjectClass<any>[], onContainerFirstCreated?: (container: IFluidContainer) => void): Promise<{
|
|
48
|
+
container: IFluidContainer;
|
|
49
|
+
services: AzureContainerServices;
|
|
50
|
+
created: boolean;
|
|
51
|
+
}>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=LiveShareTurboClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveShareTurboClient.d.ts","sourceRoot":"","sources":["../../src/live-share-turbo/LiveShareTurboClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAEH,uBAAuB,EACvB,cAAc,EACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,gBAAgB;IACtD,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAMA;IAEhB;;;;OAIG;gBACS,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAKnE;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;OAGG;IACH,IAAW,uBAAuB,IAAI,MAAM,CAE3C;IAED;;;OAGG;IACH,IAAW,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAE/C;IAED;;OAEG;IACH,IAAoB,OAAO,IACrB;QACI,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC;KACpB,GACD,SAAS,CAEd;IAED;;;;;;;;;;OAUG;IACU,IAAI,CACb,4BAA4B,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,EACzD,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,GAC/D,OAAO,CAAC;QACP,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,sBAAsB,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC;KACpB,CAAC;CAWL"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { LiveShareClient, } from "@microsoft/live-share";
|
|
11
|
+
import { getLiveShareContainerSchema } from "../utils";
|
|
12
|
+
import { FluidTurboClient } from "./internals";
|
|
13
|
+
export class LiveShareTurboClient extends FluidTurboClient {
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new `LiveShareTurbo` instance.
|
|
16
|
+
* @param host Host for the current Live Share session.
|
|
17
|
+
* @param options Optional. Configuration options for the client.
|
|
18
|
+
*/
|
|
19
|
+
constructor(host, options) {
|
|
20
|
+
super();
|
|
21
|
+
this._client = new LiveShareClient(host, options);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* If true the client is configured to use a local test server.
|
|
25
|
+
*/
|
|
26
|
+
get isTesting() {
|
|
27
|
+
return this._client.isTesting;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Number of times the client should attempt to get the ID of the container to join for the
|
|
31
|
+
* current context.
|
|
32
|
+
*/
|
|
33
|
+
get maxContainerLookupTries() {
|
|
34
|
+
return this._client.maxContainerLookupTries;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set number of times the client should attempt to get the ID of the container to join for the
|
|
38
|
+
* current context.
|
|
39
|
+
*/
|
|
40
|
+
set maxContainerLookupTries(value) {
|
|
41
|
+
this._client.maxContainerLookupTries = value;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the Fluid join container results
|
|
45
|
+
*/
|
|
46
|
+
get results() {
|
|
47
|
+
return this._results;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Connects to the fluid container for the current teams context.
|
|
51
|
+
*
|
|
52
|
+
* @remarks
|
|
53
|
+
* The first client joining the container will create the container resulting in the
|
|
54
|
+
* `onContainerFirstCreated` callback being called. This callback can be used to set the initial
|
|
55
|
+
* state of of the containers object prior to the container being attached.
|
|
56
|
+
* @param fluidContainerSchema Fluid objects to create.
|
|
57
|
+
* @param onContainerFirstCreated Optional. Callback that's called when the container is first created.
|
|
58
|
+
* @returns The fluid `container` and `services` objects to use along with a `created` flag that if true means the container had to be created.
|
|
59
|
+
*/
|
|
60
|
+
join(additionalDynamicObjectTypes, onContainerFirstCreated) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
const schema = getLiveShareContainerSchema(additionalDynamicObjectTypes);
|
|
63
|
+
this._results = yield this._client.joinContainer(schema, onContainerFirstCreated);
|
|
64
|
+
this.registerDynamicObjectListeners();
|
|
65
|
+
return this._results;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=LiveShareTurboClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveShareTurboClient.js","sourceRoot":"","sources":["../../src/live-share-turbo/LiveShareTurboClient.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EACH,eAAe,GAGlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,oBAAqB,SAAQ,gBAAgB;IAUtD;;;;OAIG;IACH,YAAY,IAAoB,EAAE,OAAiC;QAC/D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,IAAW,uBAAuB,CAAC,KAAa;QAC5C,IAAI,CAAC,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,IAAoB,OAAO;QAOvB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;;;;;;;OAUG;IACU,IAAI,CACb,4BAAyD,EACzD,uBAA8D;;YAM9D,MAAM,MAAM,GAAG,2BAA2B,CACtC,4BAA4B,CAC/B,CAAC;YACF,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAC5C,MAAM,EACN,uBAAuB,CAC1B,CAAC;YACF,IAAI,CAAC,8BAA8B,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;KAAA;CACJ"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { IEvent } from "@fluidframework/common-definitions";
|
|
2
|
+
import { TypedEventEmitter } from "@fluidframework/common-utils";
|
|
3
|
+
import { IFluidLoadable } from "@fluidframework/core-interfaces";
|
|
4
|
+
import { ISharedObjectEvents } from "@fluidframework/shared-object-base";
|
|
5
|
+
import { SharedDataObject } from "../../live-share-react/bin/live-share-turbo/interfaces";
|
|
6
|
+
interface ITurboDataObject {
|
|
7
|
+
get disposed(): boolean;
|
|
8
|
+
get id(): string;
|
|
9
|
+
dispose(): void;
|
|
10
|
+
}
|
|
11
|
+
export declare class TurboDataObject<I extends ISharedObjectEvents = ISharedObjectEvents, T extends SharedDataObject = SharedDataObject> extends TypedEventEmitter<I & IEvent> implements ITurboDataObject {
|
|
12
|
+
private _dataObject;
|
|
13
|
+
private _eventNames;
|
|
14
|
+
private _onDidOverrideDataObject?;
|
|
15
|
+
constructor(dataObject: T, eventNames: string[], onDidOverrideDataObject?: () => void);
|
|
16
|
+
get disposed(): boolean;
|
|
17
|
+
get id(): string;
|
|
18
|
+
/**
|
|
19
|
+
* @hidden
|
|
20
|
+
*/
|
|
21
|
+
set dataObject(value: T);
|
|
22
|
+
/**
|
|
23
|
+
* @hidden
|
|
24
|
+
*/
|
|
25
|
+
get dataObject(): T;
|
|
26
|
+
get IFluidLoadable(): IFluidLoadable;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
private setupEventListeners;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=TurboDataObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurboDataObject.d.ts","sourceRoot":"","sources":["../../../src/live-share-turbo/dds-objects/TurboDataObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,UAAU,gBAAgB;IACtB,IAAI,QAAQ,IAAI,OAAO,CAAC;IACxB,IAAI,EAAE,IAAI,MAAM,CAAC;IACjB,OAAO,IAAI,IAAI,CAAC;CACnB;AAED,qBAAa,eAAe,CACpB,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,EACnD,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CAEjD,SAAQ,iBAAiB,CAAC,CAAC,GAAG,MAAM,CACpC,YAAW,gBAAgB;IAE3B,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,wBAAwB,CAAC,CAAa;gBAElC,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,uBAAuB,CAAC,EAAE,MAAM,IAAI;IAQrF,IAAI,QAAQ,IAAI,OAAO,CAKtB;IACD,IAAI,EAAE,IAAI,MAAM,CAEf;IACD;;OAEG;IACH,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,EAMtB;IACD;;OAEG;IACH,IAAI,UAAU,IAAI,CAAC,CAElB;IAKD,IAAI,cAAc,IAAI,cAAc,CAEnC;IAuBD,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,mBAAmB;CAO9B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { TypedEventEmitter } from "@fluidframework/common-utils";
|
|
2
|
+
export class TurboDataObject extends TypedEventEmitter {
|
|
3
|
+
constructor(dataObject, eventNames, onDidOverrideDataObject) {
|
|
4
|
+
super();
|
|
5
|
+
this._dataObject = dataObject;
|
|
6
|
+
this._eventNames = eventNames;
|
|
7
|
+
this._onDidOverrideDataObject = onDidOverrideDataObject;
|
|
8
|
+
this.setupEventListeners();
|
|
9
|
+
}
|
|
10
|
+
get disposed() {
|
|
11
|
+
if (this._dataObject.disposed !== undefined) {
|
|
12
|
+
return this._dataObject.disposed;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
get id() {
|
|
17
|
+
return this._dataObject.id;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @hidden
|
|
21
|
+
*/
|
|
22
|
+
set dataObject(value) {
|
|
23
|
+
var _a, _b, _c;
|
|
24
|
+
this._dataObject.removeAllListeners();
|
|
25
|
+
(_b = (_a = this._dataObject).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
26
|
+
this._dataObject = value;
|
|
27
|
+
this.setupEventListeners();
|
|
28
|
+
(_c = this._onDidOverrideDataObject) === null || _c === void 0 ? void 0 : _c.call(this);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @hidden
|
|
32
|
+
*/
|
|
33
|
+
get dataObject() {
|
|
34
|
+
return this._dataObject;
|
|
35
|
+
}
|
|
36
|
+
// get IFluidRouter(): this {
|
|
37
|
+
// return this;
|
|
38
|
+
// }
|
|
39
|
+
get IFluidLoadable() {
|
|
40
|
+
return this._dataObject.IFluidLoadable;
|
|
41
|
+
}
|
|
42
|
+
// finishInitialization(existing: boolean): Promise<void> {
|
|
43
|
+
// throw new Error("Method not implemented.");
|
|
44
|
+
// }
|
|
45
|
+
// getFluidObjectFromDirectory<T extends IFluidLoadable>(key: string, directory: IDirectory, getObjectFromDirectory?: ((id: string, directory: IDirectory) => IFluidHandle<FluidObject<unknown> & IFluidLoadable> | undefined) | undefined): Promise<T | undefined> {
|
|
46
|
+
// throw new Error("Method not implemented.");
|
|
47
|
+
// }
|
|
48
|
+
// protected getService<T extends FluidObject<unknown>>(id: string): Promise<T> {
|
|
49
|
+
// throw new Error("Method not implemented.");
|
|
50
|
+
// }
|
|
51
|
+
// protected preInitialize(): Promise<void> {
|
|
52
|
+
// throw new Error("Method not implemented.");
|
|
53
|
+
// }
|
|
54
|
+
// protected initializingFirstTime(props?: I["InitialState"] | undefined): Promise<void> {
|
|
55
|
+
// throw new Error("Method not implemented.");
|
|
56
|
+
// }
|
|
57
|
+
// protected initializingFromExisting(): Promise<void> {
|
|
58
|
+
// throw new Error("Method not implemented.");
|
|
59
|
+
// }
|
|
60
|
+
// protected hasInitialized(): Promise<void> {
|
|
61
|
+
// throw new Error("Method not implemented.");
|
|
62
|
+
// }
|
|
63
|
+
dispose() {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
(_b = (_a = this._dataObject).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
66
|
+
}
|
|
67
|
+
setupEventListeners() {
|
|
68
|
+
this._eventNames.forEach((eventName) => {
|
|
69
|
+
this._dataObject.on(eventName, (...args) => {
|
|
70
|
+
this.emit(eventName, ...args);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=TurboDataObject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurboDataObject.js","sourceRoot":"","sources":["../../../src/live-share-turbo/dds-objects/TurboDataObject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAWjE,MAAM,OAAO,eAIT,SAAQ,iBAA6B;IAOrC,YAAY,UAAa,EAAE,UAAoB,EAAE,uBAAoC;QACjF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,wBAAwB,GAAG,uBAAuB,CAAC;QACxD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,QAAQ;QACR,IAAK,IAAI,CAAC,WAAmB,CAAC,QAAQ,KAAK,SAAS,EAAE;YAClD,OAAQ,IAAI,CAAC,WAAmB,CAAC,QAAmB,CAAC;SACxD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IAC/B,CAAC;IACD;;OAEG;IACH,IAAI,UAAU,CAAC,KAAQ;;QACnB,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACtC,MAAA,MAAC,IAAI,CAAC,WAAmB,EAAC,OAAO,kDAAI,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,MAAA,IAAI,CAAC,wBAAwB,oDAAI,CAAC;IACtC,CAAC;IACD;;OAEG;IACH,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,6BAA6B;IAC7B,mBAAmB;IACnB,IAAI;IACJ,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IAC3C,CAAC;IACD,2DAA2D;IAC3D,kDAAkD;IAClD,IAAI;IACJ,qQAAqQ;IACrQ,kDAAkD;IAClD,IAAI;IACJ,iFAAiF;IACjF,kDAAkD;IAClD,IAAI;IACJ,6CAA6C;IAC7C,kDAAkD;IAClD,IAAI;IACJ,0FAA0F;IAC1F,kDAAkD;IAClD,IAAI;IACJ,wDAAwD;IACxD,kDAAkD;IAClD,IAAI;IACJ,8CAA8C;IAC9C,kDAAkD;IAClD,IAAI;IAEJ,OAAO;;QACH,MAAA,MAAC,IAAI,CAAC,WAAmB,EAAC,OAAO,kDAAI,CAAC;IAC1C,CAAC;IAEO,mBAAmB;QACvB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { IFluidTurboClient } from "../../live-share-react/bin/live-share-turbo/interfaces";
|
|
2
|
+
import { TurboDataObject } from "./TurboDataObject";
|
|
3
|
+
import { InkingManager, IUserInfo, LiveCanvas, LiveCursor } from "@microsoft/live-share-canvas";
|
|
4
|
+
import { UserMeetingRole } from "@microsoft/live-share";
|
|
5
|
+
export declare class TurboLiveCanvas extends TurboDataObject<any, LiveCanvas> {
|
|
6
|
+
private _isInitialized;
|
|
7
|
+
private _inkingManager?;
|
|
8
|
+
constructor(dataObject: LiveCanvas);
|
|
9
|
+
get isInitialized(): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Gets the current cursor sharing status of this client.
|
|
12
|
+
*/
|
|
13
|
+
get isCursorShared(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Sets the current cursor sharing status of this client.
|
|
16
|
+
*/
|
|
17
|
+
set isCursorShared(value: boolean);
|
|
18
|
+
/**
|
|
19
|
+
* Gets the list of roles that are allowed to emit wet stroke events.
|
|
20
|
+
*/
|
|
21
|
+
get allowedRoles(): UserMeetingRole[];
|
|
22
|
+
/**
|
|
23
|
+
* Sets the list of roles that are allowed to emit wet stroke events.
|
|
24
|
+
*/
|
|
25
|
+
set allowedRoles(value: UserMeetingRole[]);
|
|
26
|
+
/**
|
|
27
|
+
* Optional callback that allows the consuming application to provide a
|
|
28
|
+
* friendly display name and/or a picture that will be used on remote devices
|
|
29
|
+
* to render shared cursors.
|
|
30
|
+
*/
|
|
31
|
+
get onGetLocalUserInfo(): (() => IUserInfo | undefined) | undefined;
|
|
32
|
+
set onGetLocalUserInfo(value: (() => IUserInfo | undefined) | undefined);
|
|
33
|
+
/**
|
|
34
|
+
* Optional callback that allows the consuming application to provide its own
|
|
35
|
+
* live cursor visual representation by extending the abstract `LiveCursor`
|
|
36
|
+
* class. The callback is passed the user information retrieved via the
|
|
37
|
+
* `onGetLocalUserInfo` calback, if provided.
|
|
38
|
+
*/
|
|
39
|
+
get onCreateLiveCursor(): ((clientId: string, userInfo?: IUserInfo) => LiveCursor) | undefined;
|
|
40
|
+
set onCreateLiveCursor(value: ((clientId: string, userInfo?: IUserInfo) => LiveCursor) | undefined);
|
|
41
|
+
/**
|
|
42
|
+
* initialize the object.
|
|
43
|
+
* @param allowedRoles Optional. List of roles allowed to send events.
|
|
44
|
+
*/
|
|
45
|
+
initialize(inkingManager: InkingManager): Promise<void>;
|
|
46
|
+
static create(turboClient: IFluidTurboClient, uniqueKey: string, onDidFirstInitialize?: (dds: TurboLiveCanvas) => void): Promise<TurboLiveCanvas>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=TurboLiveCanvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurboLiveCanvas.d.ts","sourceRoot":"","sources":["../../../src/live-share-turbo/dds-objects/TurboLiveCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,qBAAa,eAAgB,SAAQ,eAAe,CAChD,GAAG,EACH,UAAU,CACb;IACG,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAgB;gBAE3B,UAAU,EAAE,UAAU;IAelC,IAAW,aAAa,IAAI,OAAO,CAElC;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,EAEhC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,eAAe,EAAE,CAEpC;IAED;;OAEG;IACH,IAAI,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,EAExC;IAED;;;;OAIG;IACH,IAAW,kBAAkB,IAAI,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,CAEzE;IAED,IAAW,kBAAkB,CAAC,KAAK,EAAE,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,EAE7E;IAED;;;;;OAKG;IACH,IAAW,kBAAkB,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,KAAK,UAAU,CAAC,GAAG,SAAS,CAEpG;IAED,IAAW,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,KAAK,UAAU,CAAC,GAAG,SAAS,EAExG;IAED;;;OAGG;IACU,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;WAMhD,MAAM,CACtB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,MAAM,EACjB,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,GACtD,OAAO,CAAC,eAAe,CAAC;CAiB9B"}
|