@techsee/techsee-nway-media-service-client 2.0.0 → 2.1.0
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/LICENSE.md +1 -0
- package/lib/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.d.ts.map +1 -1
- package/lib/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.js +30 -14
- package/lib/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.js.map +1 -1
- package/lib/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.scss +63 -2
- package/lib/components/ButtonPanels/ParticipantActionsMenu/ParticipantActionsMenu.d.ts +15 -0
- package/lib/components/ButtonPanels/ParticipantActionsMenu/ParticipantActionsMenu.d.ts.map +1 -0
- package/lib/components/ButtonPanels/ParticipantActionsMenu/ParticipantActionsMenu.js +107 -0
- package/lib/components/ButtonPanels/ParticipantActionsMenu/ParticipantActionsMenu.js.map +1 -0
- package/lib/components/ButtonPanels/ParticipantActionsMenu/ParticipantActionsMenu.scss +104 -0
- package/lib/components/ButtonPanels/RemoveButtonPanel/RemoveButtonPanel.d.ts +8 -0
- package/lib/components/ButtonPanels/RemoveButtonPanel/RemoveButtonPanel.d.ts.map +1 -0
- package/lib/components/ButtonPanels/RemoveButtonPanel/RemoveButtonPanel.js +22 -0
- package/lib/components/ButtonPanels/RemoveButtonPanel/RemoveButtonPanel.js.map +1 -0
- package/lib/components/ButtonPanels/index.d.ts +2 -0
- package/lib/components/ButtonPanels/index.d.ts.map +1 -1
- package/lib/components/ButtonPanels/index.js +5 -1
- package/lib/components/ButtonPanels/index.js.map +1 -1
- package/lib/components/JoinRequestBanner/JoinRequestBanner.d.ts +19 -0
- package/lib/components/JoinRequestBanner/JoinRequestBanner.d.ts.map +1 -0
- package/lib/components/JoinRequestBanner/JoinRequestBanner.js +107 -0
- package/lib/components/JoinRequestBanner/JoinRequestBanner.js.map +1 -0
- package/lib/components/JoinRequestBanner/JoinRequestBanner.scss +95 -0
- package/lib/components/Multiparty.d.ts +2 -1
- package/lib/components/Multiparty.d.ts.map +1 -1
- package/lib/components/Multiparty.js +12 -4
- package/lib/components/Multiparty.js.map +1 -1
- package/lib/components/Multiparty.types.d.ts +2 -1
- package/lib/components/Multiparty.types.d.ts.map +1 -1
- package/lib/components/Video/{Video.d.ts → NwayVideoContainer.d.ts} +5 -2
- package/lib/components/Video/NwayVideoContainer.d.ts.map +1 -0
- package/lib/components/Video/NwayVideoContainer.js +36 -0
- package/lib/components/Video/NwayVideoContainer.js.map +1 -0
- package/lib/components/Video/Video.scss +1 -1
- package/lib/components/Video/VideoDomRegistry.d.ts +7 -0
- package/lib/components/Video/VideoDomRegistry.d.ts.map +1 -0
- package/lib/components/Video/VideoDomRegistry.js +33 -0
- package/lib/components/Video/VideoDomRegistry.js.map +1 -0
- package/lib/components/Video/VideoPlaceholder.d.ts +3 -0
- package/lib/components/Video/VideoPlaceholder.d.ts.map +1 -1
- package/lib/components/Video/VideoPlaceholder.js.map +1 -1
- package/lib/components/VideoLayouts/AgentPinnedLayout/AgentPinnedLayout.js +2 -2
- package/lib/components/VideoLayouts/AgentPinnedLayout/AgentPinnedLayout.js.map +1 -1
- package/lib/components/VideoLayouts/AgentPinnedLayout/AgentPinnedLayout.scss +9 -0
- package/lib/components/VideoLayouts/BigMainVideoLayout/BigAreaLayout.d.ts +2 -6
- package/lib/components/VideoLayouts/BigMainVideoLayout/BigAreaLayout.d.ts.map +1 -1
- package/lib/components/VideoLayouts/BigMainVideoLayout/BigAreaLayout.js +93 -34
- package/lib/components/VideoLayouts/BigMainVideoLayout/BigAreaLayout.js.map +1 -1
- package/lib/components/VideoLayouts/BigMainVideoLayout/BigAreaLayout.scss +259 -31
- package/lib/components/VideoLayouts/VideoLayoutManager.d.ts +2 -1
- package/lib/components/VideoLayouts/VideoLayoutManager.d.ts.map +1 -1
- package/lib/components/VideoLayouts/VideoLayoutManager.js +2 -2
- package/lib/components/VideoLayouts/VideoLayoutManager.js.map +1 -1
- package/lib/components/WaitingForHost/WaitingForHost.d.ts +10 -0
- package/lib/components/WaitingForHost/WaitingForHost.d.ts.map +1 -0
- package/lib/components/WaitingForHost/WaitingForHost.js +23 -0
- package/lib/components/WaitingForHost/WaitingForHost.js.map +1 -0
- package/lib/components/WaitingForHost/WaitingForHost.scss +80 -0
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/services/ConnectionManager.d.ts +1 -0
- package/lib/services/ConnectionManager.d.ts.map +1 -1
- package/lib/services/ConnectionManager.js +13 -1
- package/lib/services/ConnectionManager.js.map +1 -1
- package/lib/services/MediaStateService.d.ts.map +1 -1
- package/lib/services/MediaStateService.js +4 -1
- package/lib/services/MediaStateService.js.map +1 -1
- package/lib/services/MultipartyController.d.ts +0 -3
- package/lib/services/MultipartyController.d.ts.map +1 -1
- package/lib/services/MultipartyController.js +69 -60
- package/lib/services/MultipartyController.js.map +1 -1
- package/lib/services/MultipartyEventTypes.d.ts +1 -0
- package/lib/services/MultipartyEventTypes.d.ts.map +1 -1
- package/lib/services/MultipartyEventTypes.js +1 -0
- package/lib/services/MultipartyEventTypes.js.map +1 -1
- package/lib/services/trafficLogManager.d.ts.map +1 -1
- package/lib/services/trafficLogManager.js +10 -7
- package/lib/services/trafficLogManager.js.map +1 -1
- package/package.json +27 -15
- package/lib/components/Video/Video.d.ts.map +0 -1
- package/lib/components/Video/Video.js +0 -23
- package/lib/components/Video/Video.js.map +0 -1
package/LICENSE.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaButtonsPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,OAAO,
|
|
1
|
+
{"version":3,"file":"MediaButtonsPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAmB,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAC,iBAAiB,EAAC,MAAM,mDAAmD,CAAC;AAEpF,OAAO,EAAC,uBAAuB,EAAC,MAAM,8BAA8B,CAAC;AAErE,UAAU,KAAK;IACX,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,YAAY,EAAE,uBAAuB,CAAC;IACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,oBAAY,cAAc;IACtB,KAAK,IAAA;IACL,MAAM,IAAA;CACT;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0H7C,CAAC"}
|
|
@@ -17,15 +17,13 @@ require("./MediaButtonsPanel.scss");
|
|
|
17
17
|
var react_1 = require("react");
|
|
18
18
|
var MultipartyButton_1 = require("../MultipartyButton/MultipartyButton");
|
|
19
19
|
var MediaConstants_1 = require("@techsee/techsee-media-service/lib/MediaConstants");
|
|
20
|
-
var simple_icon_1 = require("@techsee/techsee-ui-common/lib/icons/simple-icon");
|
|
21
20
|
var ButtonsSpacing;
|
|
22
21
|
(function (ButtonsSpacing) {
|
|
23
22
|
ButtonsSpacing[ButtonsSpacing["Dense"] = 0] = "Dense";
|
|
24
23
|
ButtonsSpacing[ButtonsSpacing["Sparse"] = 1] = "Sparse";
|
|
25
24
|
})(ButtonsSpacing = exports.ButtonsSpacing || (exports.ButtonsSpacing = {}));
|
|
26
25
|
var MediaButtonsPanel = function (_a) {
|
|
27
|
-
var _b;
|
|
28
|
-
var buttonsType = _a.buttonsType, isMuted = _a.isMuted, isVideoTurnedOff = _a.isVideoTurnedOff, _c = _a.isBackgroundVisible, isBackgroundVisible = _c === void 0 ? true : _c, _d = _a.isIconTransparencyEnabled, isIconTransparencyEnabled = _d === void 0 ? true : _d, _e = _a.buttonsSpacing, buttonsSpacing = _e === void 0 ? ButtonsSpacing.Sparse : _e, _f = _a.screenShareRole, screenShareRole = _f === void 0 ? undefined : _f, translations = _a.translations, onToggleMute = _a.onToggleMute, onToggleVideo = _a.onToggleVideo, onSwitchCamera = _a.onSwitchCamera, _g = _a.muteButtonDisabled, muteButtonDisabled = _g === void 0 ? false : _g, onShareScreen = _a.onShareScreen, onStopScreenShare = _a.onStopScreenShare, _h = _a.showScreenShareButton, showScreenShareButton = _h === void 0 ? false : _h;
|
|
26
|
+
var buttonsType = _a.buttonsType, isMuted = _a.isMuted, isVideoTurnedOff = _a.isVideoTurnedOff, _b = _a.isBackgroundVisible, isBackgroundVisible = _b === void 0 ? true : _b, _c = _a.isIconTransparencyEnabled, isIconTransparencyEnabled = _c === void 0 ? true : _c, _d = _a.buttonsSpacing, buttonsSpacing = _d === void 0 ? ButtonsSpacing.Sparse : _d, _e = _a.screenShareRole, screenShareRole = _e === void 0 ? undefined : _e, translations = _a.translations, onToggleMute = _a.onToggleMute, onToggleVideo = _a.onToggleVideo, onSwitchCamera = _a.onSwitchCamera, _f = _a.muteButtonDisabled, muteButtonDisabled = _f === void 0 ? false : _f, onShareScreen = _a.onShareScreen, onStopScreenShare = _a.onStopScreenShare, _g = _a.showScreenShareButton, showScreenShareButton = _g === void 0 ? false : _g;
|
|
29
27
|
var platformClass = 'mobile';
|
|
30
28
|
if (buttonsType === MultipartyButton_1.MultipartyButtonType.Desktop) {
|
|
31
29
|
platformClass = 'desktop';
|
|
@@ -34,24 +32,42 @@ var MediaButtonsPanel = function (_a) {
|
|
|
34
32
|
platformClass = 'desktop-obsolete';
|
|
35
33
|
}
|
|
36
34
|
platformClass += ' ' + (buttonsSpacing === ButtonsSpacing.Dense ? 'dense' : 'sparse');
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
|
|
35
|
+
var _h = (0, react_1.useState)(false), isLocallySharing = _h[0], setIsLocallySharing = _h[1];
|
|
36
|
+
var prevScreenShareRoleRef = (0, react_1.useRef)(screenShareRole);
|
|
37
|
+
// Sync local state with actual screenShareRole when it gets updated
|
|
38
|
+
(0, react_1.useEffect)(function () {
|
|
39
|
+
var prevScreenShareRole = prevScreenShareRoleRef.current;
|
|
40
|
+
if (screenShareRole === MediaConstants_1.SessionClientRole.USER && prevScreenShareRole !== MediaConstants_1.SessionClientRole.USER) {
|
|
41
|
+
setIsLocallySharing(true);
|
|
42
|
+
}
|
|
43
|
+
else if (screenShareRole === undefined && prevScreenShareRole === MediaConstants_1.SessionClientRole.USER) {
|
|
44
|
+
setIsLocallySharing(false);
|
|
45
|
+
}
|
|
46
|
+
prevScreenShareRoleRef.current = screenShareRole;
|
|
47
|
+
}, [screenShareRole, isLocallySharing]);
|
|
48
|
+
var userIsSharingScreen = (0, react_1.useMemo)(function () {
|
|
49
|
+
return !!(screenShareRole === MediaConstants_1.SessionClientRole.USER) || isLocallySharing;
|
|
50
|
+
}, [screenShareRole, isLocallySharing]);
|
|
51
|
+
var nonUserIsSharingScreen = (0, react_1.useMemo)(function () {
|
|
52
|
+
return !!(screenShareRole && screenShareRole !== MediaConstants_1.SessionClientRole.USER);
|
|
53
|
+
}, [screenShareRole]);
|
|
40
54
|
var onClickScreenShareButton = (0, react_1.useCallback)(function () {
|
|
41
|
-
if
|
|
42
|
-
|
|
55
|
+
// Don't allow sharing if another user is already sharing
|
|
56
|
+
if (nonUserIsSharingScreen) {
|
|
57
|
+
return;
|
|
43
58
|
}
|
|
44
|
-
if (!userIsSharingScreen && !nonUserIsSharingScreen) {
|
|
59
|
+
if (!userIsSharingScreen && !nonUserIsSharingScreen && onShareScreen) {
|
|
60
|
+
setIsLocallySharing(true);
|
|
45
61
|
onShareScreen();
|
|
46
62
|
}
|
|
47
|
-
}, [userIsSharingScreen, nonUserIsSharingScreen,
|
|
63
|
+
}, [userIsSharingScreen, nonUserIsSharingScreen, onShareScreen]);
|
|
48
64
|
var onClickStopScreenShareButton = (0, react_1.useCallback)(function () {
|
|
49
|
-
if (
|
|
50
|
-
|
|
65
|
+
if (onStopScreenShare) {
|
|
66
|
+
setIsLocallySharing(false);
|
|
51
67
|
onStopScreenShare();
|
|
52
68
|
}
|
|
53
|
-
}, [
|
|
54
|
-
return ((0, jsx_runtime_1.jsxs)("div", __assign({ className: "media-buttons-panel ".concat(platformClass) }, { children: [
|
|
69
|
+
}, [onStopScreenShare]);
|
|
70
|
+
return ((0, jsx_runtime_1.jsxs)("div", __assign({ className: "media-buttons-panel ".concat(platformClass) }, { children: [onToggleVideo && ((0, jsx_runtime_1.jsx)(MultipartyButton_1.MultipartyButton, { type: buttonsType, onClick: onToggleVideo, iconName: isVideoTurnedOff ? 'camera-off' : 'camera-on', isSwitchedOn: !isIconTransparencyEnabled || !isVideoTurnedOff, isBackgroundVisible: isBackgroundVisible })), onSwitchCamera && ((0, jsx_runtime_1.jsx)(MultipartyButton_1.MultipartyButton, { type: buttonsType, onClick: onSwitchCamera, iconName: 'switch-camera', isBackgroundVisible: isBackgroundVisible, disabled: isVideoTurnedOff })), showScreenShareButton && ((0, jsx_runtime_1.jsxs)("div", __assign({ className: 'share-screen-mobile' }, { children: [!userIsSharingScreen && onShareScreen && ((0, jsx_runtime_1.jsx)(MultipartyButton_1.MultipartyButton, { type: buttonsType, onClick: onClickScreenShareButton, iconName: 'Screen-Share', isBackgroundVisible: isBackgroundVisible, disabled: nonUserIsSharingScreen })), userIsSharingScreen && onStopScreenShare && ((0, jsx_runtime_1.jsx)(MultipartyButton_1.MultipartyButton, { type: buttonsType, onClick: onClickStopScreenShareButton, iconName: 'end-sharing', isBackgroundVisible: isBackgroundVisible, isSwitchedOn: true }))] }))), (0, jsx_runtime_1.jsx)(MultipartyButton_1.MultipartyButton, { type: buttonsType, onClick: onToggleMute, iconName: isMuted ? 'mic-off' : 'mic-on', isSwitchedOn: !isIconTransparencyEnabled || !isMuted, isBackgroundVisible: isBackgroundVisible, disabled: muteButtonDisabled })] })));
|
|
55
71
|
};
|
|
56
72
|
exports.MediaButtonsPanel = MediaButtonsPanel;
|
|
57
73
|
//# sourceMappingURL=MediaButtonsPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaButtonsPanel.js","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oCAAkC;AAElC,+
|
|
1
|
+
{"version":3,"file":"MediaButtonsPanel.js","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/MediaButtonsPanel/MediaButtonsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
.media-buttons-panel {
|
|
2
2
|
display: flex;
|
|
3
3
|
|
|
4
|
+
// Mobile //
|
|
4
5
|
&.mobile > * {
|
|
5
|
-
margin: 15px
|
|
6
|
+
margin: 15px 2px 15px 0;
|
|
7
|
+
|
|
8
|
+
&:last-child {
|
|
9
|
+
margin-right: 0;
|
|
10
|
+
}
|
|
6
11
|
}
|
|
7
12
|
|
|
8
13
|
&.desktop.sparse > * {
|
|
9
|
-
margin: 10px
|
|
14
|
+
margin: 10px 2px 10px 0;
|
|
10
15
|
|
|
11
16
|
&:last-child {
|
|
12
17
|
margin-right: 0;
|
|
@@ -28,4 +33,60 @@
|
|
|
28
33
|
& > *:last-child {
|
|
29
34
|
margin-right: 0;
|
|
30
35
|
}
|
|
36
|
+
|
|
37
|
+
// Mobile screen sharing styles - no custom styles needed, using MultipartyButton
|
|
38
|
+
&.mobile {
|
|
39
|
+
.share-screen-mobile {
|
|
40
|
+
display: flex;
|
|
41
|
+
flex-direction: row;
|
|
42
|
+
align-items: center;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.btn-rounded:disabled {
|
|
47
|
+
.border-rounded-icon.color-black.reverse-color.transparent-p50 {
|
|
48
|
+
background-color: transparent;
|
|
49
|
+
color: #ffffff;
|
|
50
|
+
border: none;
|
|
51
|
+
box-shadow: none;
|
|
52
|
+
fill: #ffffff;
|
|
53
|
+
|
|
54
|
+
&:hover,
|
|
55
|
+
&:focus,
|
|
56
|
+
&:active {
|
|
57
|
+
background-color: transparent;
|
|
58
|
+
color: #ffffff;
|
|
59
|
+
border: none;
|
|
60
|
+
box-shadow: none;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Preserve shadow box circle for switch camera button when disabled
|
|
64
|
+
&.icon-switch-camera {
|
|
65
|
+
background-color: black;
|
|
66
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.07);
|
|
67
|
+
|
|
68
|
+
&:hover,
|
|
69
|
+
&:focus,
|
|
70
|
+
&:active {
|
|
71
|
+
background-color: black;
|
|
72
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.07);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Preserve background circle for screen share button when disabled but add opacity
|
|
77
|
+
&.icon-Screen-Share {
|
|
78
|
+
background-color: rgba(0, 0, 0, 0.5) !important;
|
|
79
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.07);
|
|
80
|
+
opacity: 0.6;
|
|
81
|
+
|
|
82
|
+
&:hover,
|
|
83
|
+
&:focus,
|
|
84
|
+
&:active {
|
|
85
|
+
background-color: rgba(0, 0, 0, 0.5) !important;
|
|
86
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.07);
|
|
87
|
+
opacity: 0.6;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
31
92
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './ParticipantActionsMenu.scss';
|
|
3
|
+
type PinCallback = (() => void) | false | undefined;
|
|
4
|
+
type Props = {
|
|
5
|
+
isVideoHover: boolean;
|
|
6
|
+
isPinned: boolean;
|
|
7
|
+
onTogglePin?: PinCallback;
|
|
8
|
+
onRemove?: () => void;
|
|
9
|
+
pinLabel?: string;
|
|
10
|
+
pinnedLabel?: string;
|
|
11
|
+
removeLabel?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const ParticipantActionsMenu: React.FC<Props>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=ParticipantActionsMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParticipantActionsMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/ParticipantActionsMenu/ParticipantActionsMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkE,MAAM,OAAO,CAAC;AACvF,OAAO,+BAA+B,CAAC;AAevC,KAAK,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC;AAEpD,KAAK,KAAK,GAAG;IACT,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA4HlD,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ParticipantActionsMenu = void 0;
|
|
15
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
|
+
var react_1 = require("react");
|
|
17
|
+
require("./ParticipantActionsMenu.scss");
|
|
18
|
+
var VIEWPORT_PADDING = 8;
|
|
19
|
+
/** Matches SCSS min-width until we measure the real node */
|
|
20
|
+
var DROPDOWN_WIDTH_ESTIMATE = 200;
|
|
21
|
+
function computeDropdownLeft(rect, dropdownWidth) {
|
|
22
|
+
var left = rect.left;
|
|
23
|
+
if (left + dropdownWidth > window.innerWidth - VIEWPORT_PADDING) {
|
|
24
|
+
left = rect.right - dropdownWidth;
|
|
25
|
+
}
|
|
26
|
+
var maxLeft = window.innerWidth - dropdownWidth - VIEWPORT_PADDING;
|
|
27
|
+
return Math.max(VIEWPORT_PADDING, Math.min(left, maxLeft));
|
|
28
|
+
}
|
|
29
|
+
var ParticipantActionsMenu = function (_a) {
|
|
30
|
+
var isVideoHover = _a.isVideoHover, isPinned = _a.isPinned, onTogglePin = _a.onTogglePin, onRemove = _a.onRemove, pinLabel = _a.pinLabel, pinnedLabel = _a.pinnedLabel, removeLabel = _a.removeLabel;
|
|
31
|
+
var _b = (0, react_1.useState)(false), isOpen = _b[0], setIsOpen = _b[1];
|
|
32
|
+
var _c = (0, react_1.useState)({}), dropdownStyle = _c[0], setDropdownStyle = _c[1];
|
|
33
|
+
var containerRef = (0, react_1.useRef)(null);
|
|
34
|
+
var btnRef = (0, react_1.useRef)(null);
|
|
35
|
+
var dropdownRef = (0, react_1.useRef)(null);
|
|
36
|
+
var positionDropdown = (0, react_1.useCallback)(function () {
|
|
37
|
+
var _a;
|
|
38
|
+
if (!btnRef.current) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
var rect = btnRef.current.getBoundingClientRect();
|
|
42
|
+
var width = ((_a = dropdownRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || DROPDOWN_WIDTH_ESTIMATE;
|
|
43
|
+
var left = computeDropdownLeft(rect, width);
|
|
44
|
+
setDropdownStyle({
|
|
45
|
+
position: 'fixed',
|
|
46
|
+
top: rect.bottom + 4,
|
|
47
|
+
left: left,
|
|
48
|
+
zIndex: 99999
|
|
49
|
+
});
|
|
50
|
+
}, []);
|
|
51
|
+
(0, react_1.useEffect)(function () {
|
|
52
|
+
var handleClickOutside = function (e) {
|
|
53
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
54
|
+
setIsOpen(false);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
58
|
+
return function () { return document.removeEventListener('mousedown', handleClickOutside); };
|
|
59
|
+
}, []);
|
|
60
|
+
var handleToggle = function () {
|
|
61
|
+
if (!isOpen && btnRef.current) {
|
|
62
|
+
var rect = btnRef.current.getBoundingClientRect();
|
|
63
|
+
var left = computeDropdownLeft(rect, DROPDOWN_WIDTH_ESTIMATE);
|
|
64
|
+
setDropdownStyle({
|
|
65
|
+
position: 'fixed',
|
|
66
|
+
top: rect.bottom + 4,
|
|
67
|
+
left: left,
|
|
68
|
+
zIndex: 99999
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
setIsOpen(function (prev) { return !prev; });
|
|
72
|
+
};
|
|
73
|
+
(0, react_1.useLayoutEffect)(function () {
|
|
74
|
+
if (isOpen) {
|
|
75
|
+
positionDropdown();
|
|
76
|
+
}
|
|
77
|
+
}, [isOpen, positionDropdown]);
|
|
78
|
+
(0, react_1.useEffect)(function () {
|
|
79
|
+
if (!isOpen) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
var onResizeOrScroll = function () { return positionDropdown(); };
|
|
83
|
+
window.addEventListener('resize', onResizeOrScroll);
|
|
84
|
+
document.addEventListener('scroll', onResizeOrScroll, true);
|
|
85
|
+
return function () {
|
|
86
|
+
window.removeEventListener('resize', onResizeOrScroll);
|
|
87
|
+
document.removeEventListener('scroll', onResizeOrScroll, true);
|
|
88
|
+
};
|
|
89
|
+
}, [isOpen, positionDropdown]);
|
|
90
|
+
var hasPinAction = typeof onTogglePin === 'function';
|
|
91
|
+
var hasRemoveAction = typeof onRemove === 'function';
|
|
92
|
+
var hasActions = hasPinAction || hasRemoveAction;
|
|
93
|
+
if (!hasActions) {
|
|
94
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
|
|
95
|
+
}
|
|
96
|
+
return ((0, jsx_runtime_1.jsxs)("div", __assign({ className: 'participant-actions-menu', ref: containerRef }, { children: [(0, jsx_runtime_1.jsx)("div", __assign({ className: "participant-actions-trigger".concat(isVideoHover || isOpen ? ' visible' : '') }, { children: (0, jsx_runtime_1.jsx)("button", __assign({ ref: btnRef, className: 'participant-actions-btn', onClick: handleToggle }, { children: (0, jsx_runtime_1.jsx)("i", { className: 'icon icon-dots' }) })) })), isOpen && ((0, jsx_runtime_1.jsxs)("div", __assign({ ref: dropdownRef, className: 'participant-actions-dropdown', style: dropdownStyle }, { children: [hasPinAction && ((0, jsx_runtime_1.jsxs)("button", __assign({ className: "participant-action-item".concat(isPinned ? ' pinned' : ''), disabled: isPinned, onClick: function () {
|
|
97
|
+
if (!isPinned && onTogglePin) {
|
|
98
|
+
onTogglePin();
|
|
99
|
+
setIsOpen(false);
|
|
100
|
+
}
|
|
101
|
+
} }, { children: [(0, jsx_runtime_1.jsx)("i", { className: 'action-icon icon icon-pin' }), (0, jsx_runtime_1.jsx)("span", __assign({ className: 'action-label' }, { children: isPinned ? (pinnedLabel !== null && pinnedLabel !== void 0 ? pinnedLabel : 'Pinned') : pinLabel }))] }))), hasRemoveAction && ((0, jsx_runtime_1.jsxs)("button", __assign({ className: 'participant-action-item', onClick: function () {
|
|
102
|
+
onRemove === null || onRemove === void 0 ? void 0 : onRemove();
|
|
103
|
+
setIsOpen(false);
|
|
104
|
+
} }, { children: [(0, jsx_runtime_1.jsx)("i", { className: 'action-icon icon icon-stop-sign' }), (0, jsx_runtime_1.jsx)("span", __assign({ className: 'action-label' }, { children: removeLabel }))] })))] })))] })));
|
|
105
|
+
};
|
|
106
|
+
exports.ParticipantActionsMenu = ParticipantActionsMenu;
|
|
107
|
+
//# sourceMappingURL=ParticipantActionsMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParticipantActionsMenu.js","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/ParticipantActionsMenu/ParticipantActionsMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
.participant-actions-menu {
|
|
2
|
+
position: absolute;
|
|
3
|
+
top: 6px;
|
|
4
|
+
right: 6px;
|
|
5
|
+
z-index: 30;
|
|
6
|
+
|
|
7
|
+
@media screen and (max-width: 768px) {
|
|
8
|
+
// CSS max() — interpolate so Sass does not treat it as built-in max()
|
|
9
|
+
top: #{'max(6px, env(safe-area-inset-top, 0px))'};
|
|
10
|
+
right: 4px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.participant-actions-trigger {
|
|
14
|
+
opacity: 0;
|
|
15
|
+
transition: opacity 0.15s;
|
|
16
|
+
|
|
17
|
+
&.visible {
|
|
18
|
+
opacity: 1;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.participant-actions-btn {
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
justify-content: center;
|
|
25
|
+
width: 36px;
|
|
26
|
+
height: 36px;
|
|
27
|
+
border-radius: 8px;
|
|
28
|
+
border: none;
|
|
29
|
+
background: rgba(80, 80, 80, 0.75);
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
padding: 0;
|
|
32
|
+
|
|
33
|
+
&:hover {
|
|
34
|
+
background: rgba(80, 80, 80, 0.95);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
i {
|
|
38
|
+
color: #fff;
|
|
39
|
+
font-size: 18px;
|
|
40
|
+
transform: rotate(90deg);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.participant-actions-dropdown {
|
|
46
|
+
background: #fff;
|
|
47
|
+
border-radius: 8px;
|
|
48
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
49
|
+
min-width: 200px;
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
z-index: 1050;
|
|
52
|
+
|
|
53
|
+
.participant-action-item {
|
|
54
|
+
display: flex;
|
|
55
|
+
align-items: center;
|
|
56
|
+
gap: 14px;
|
|
57
|
+
width: 100%;
|
|
58
|
+
padding: 14px 18px;
|
|
59
|
+
background: none;
|
|
60
|
+
border: none;
|
|
61
|
+
border-bottom: 1px solid #ebebeb;
|
|
62
|
+
cursor: pointer;
|
|
63
|
+
font-size: 15px;
|
|
64
|
+
color: #222;
|
|
65
|
+
text-align: left;
|
|
66
|
+
transition: background 0.15s;
|
|
67
|
+
|
|
68
|
+
&:last-child {
|
|
69
|
+
border-bottom: none;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
&:hover:not(:disabled) {
|
|
73
|
+
background: #e8f0fe;
|
|
74
|
+
color: #1a73e8;
|
|
75
|
+
|
|
76
|
+
.action-icon {
|
|
77
|
+
color: #1a73e8;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&.pinned,
|
|
82
|
+
&:disabled {
|
|
83
|
+
color: #aaa;
|
|
84
|
+
cursor: default;
|
|
85
|
+
|
|
86
|
+
.action-icon {
|
|
87
|
+
color: #aaa;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.action-icon {
|
|
92
|
+
font-size: 18px;
|
|
93
|
+
color: #555;
|
|
94
|
+
flex-shrink: 0;
|
|
95
|
+
transition: color 0.15s;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.action-label {
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
font-weight: 500;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoveButtonPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/RemoveButtonPanel/RemoveButtonPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,KAAK,KAAK,GAAG;IACT,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAY7C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.RemoveButtonPanel = void 0;
|
|
15
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
|
+
var MultipartyButton_1 = require("../MultipartyButton/MultipartyButton");
|
|
17
|
+
var RemoveButtonPanel = function (_a) {
|
|
18
|
+
var onRemove = _a.onRemove, isVideoHover = _a.isVideoHover;
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)("div", __assign({ className: 'remove-buttons-panel' }, { children: onRemove && ((0, jsx_runtime_1.jsx)(MultipartyButton_1.MultipartyButton, { type: MultipartyButton_1.MultipartyButtonType.Desktop, onClick: onRemove, iconName: 'close', isSwitchedOn: true, isBackgroundVisible: isVideoHover })) })));
|
|
20
|
+
};
|
|
21
|
+
exports.RemoveButtonPanel = RemoveButtonPanel;
|
|
22
|
+
//# sourceMappingURL=RemoveButtonPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoveButtonPanel.js","sourceRoot":"","sources":["../../../../src/components/ButtonPanels/RemoveButtonPanel/RemoveButtonPanel.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,yEAA4F;AAOrF,IAAM,iBAAiB,GAAoB,UAAC,EAAwB;QAAvB,QAAQ,cAAA,EAAE,YAAY,kBAAA;IAAmB,OAAA,CACzF,yCAAK,SAAS,EAAC,sBAAsB,gBAChC,QAAQ,IAAI,CACT,uBAAC,mCAAgB,IACb,IAAI,EAAE,uCAAoB,CAAC,OAAO,EAClC,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAC,OAAO,EAChB,YAAY,EAAE,IAAI,EAClB,mBAAmB,EAAE,YAAY,GACnC,CACL,IACC,CACT;AAZ4F,CAY5F,CAAC;AAZW,QAAA,iBAAiB,qBAY5B"}
|
|
@@ -3,4 +3,6 @@ export { MediaButtonsPanel } from './MediaButtonsPanel/MediaButtonsPanel';
|
|
|
3
3
|
export { MultipartyButtonType } from './MultipartyButton/MultipartyButton';
|
|
4
4
|
export { SnapshotButtonPanel } from './SnapshotButtonPanel/SnapshotButtonPanel';
|
|
5
5
|
export { EndMeetingButtonPanel } from './EndMeetingButtonPanel/EndMeetingButtonPanel';
|
|
6
|
+
export { RemoveButtonPanel } from './RemoveButtonPanel/RemoveButtonPanel';
|
|
7
|
+
export { ParticipantActionsMenu } from './ParticipantActionsMenu/ParticipantActionsMenu';
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ButtonPanels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAC,qBAAqB,EAAC,MAAM,+CAA+C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ButtonPanels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAC,qBAAqB,EAAC,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAC,iBAAiB,EAAC,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAC,sBAAsB,EAAC,MAAM,iDAAiD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EndMeetingButtonPanel = exports.SnapshotButtonPanel = exports.MultipartyButtonType = exports.MediaButtonsPanel = exports.PinButtonPanel = void 0;
|
|
3
|
+
exports.ParticipantActionsMenu = exports.RemoveButtonPanel = exports.EndMeetingButtonPanel = exports.SnapshotButtonPanel = exports.MultipartyButtonType = exports.MediaButtonsPanel = exports.PinButtonPanel = void 0;
|
|
4
4
|
var PinButtonPanel_1 = require("./PinButtonPanel/PinButtonPanel");
|
|
5
5
|
Object.defineProperty(exports, "PinButtonPanel", { enumerable: true, get: function () { return PinButtonPanel_1.PinButtonPanel; } });
|
|
6
6
|
var MediaButtonsPanel_1 = require("./MediaButtonsPanel/MediaButtonsPanel");
|
|
@@ -11,4 +11,8 @@ var SnapshotButtonPanel_1 = require("./SnapshotButtonPanel/SnapshotButtonPanel")
|
|
|
11
11
|
Object.defineProperty(exports, "SnapshotButtonPanel", { enumerable: true, get: function () { return SnapshotButtonPanel_1.SnapshotButtonPanel; } });
|
|
12
12
|
var EndMeetingButtonPanel_1 = require("./EndMeetingButtonPanel/EndMeetingButtonPanel");
|
|
13
13
|
Object.defineProperty(exports, "EndMeetingButtonPanel", { enumerable: true, get: function () { return EndMeetingButtonPanel_1.EndMeetingButtonPanel; } });
|
|
14
|
+
var RemoveButtonPanel_1 = require("./RemoveButtonPanel/RemoveButtonPanel");
|
|
15
|
+
Object.defineProperty(exports, "RemoveButtonPanel", { enumerable: true, get: function () { return RemoveButtonPanel_1.RemoveButtonPanel; } });
|
|
16
|
+
var ParticipantActionsMenu_1 = require("./ParticipantActionsMenu/ParticipantActionsMenu");
|
|
17
|
+
Object.defineProperty(exports, "ParticipantActionsMenu", { enumerable: true, get: function () { return ParticipantActionsMenu_1.ParticipantActionsMenu; } });
|
|
14
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ButtonPanels/index.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAAvD,gHAAA,cAAc,OAAA;AACtB,2EAAwE;AAAhE,sHAAA,iBAAiB,OAAA;AACzB,wEAAyE;AAAjE,wHAAA,oBAAoB,OAAA;AAC5B,iFAA8E;AAAtE,0HAAA,mBAAmB,OAAA;AAC3B,uFAAoF;AAA5E,8HAAA,qBAAqB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ButtonPanels/index.ts"],"names":[],"mappings":";;;AAAA,kEAA+D;AAAvD,gHAAA,cAAc,OAAA;AACtB,2EAAwE;AAAhE,sHAAA,iBAAiB,OAAA;AACzB,wEAAyE;AAAjE,wHAAA,oBAAoB,OAAA;AAC5B,iFAA8E;AAAtE,0HAAA,mBAAmB,OAAA;AAC3B,uFAAoF;AAA5E,8HAAA,qBAAqB,OAAA;AAC7B,2EAAwE;AAAhE,sHAAA,iBAAiB,OAAA;AACzB,0FAAuF;AAA/E,gIAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './JoinRequestBanner.scss';
|
|
3
|
+
export type PendingParticipant = {
|
|
4
|
+
participantId: string;
|
|
5
|
+
firstName: string;
|
|
6
|
+
lastName: string;
|
|
7
|
+
};
|
|
8
|
+
type JoinRequestBannerProps = {
|
|
9
|
+
pendingParticipants: PendingParticipant[];
|
|
10
|
+
titleLabel: string;
|
|
11
|
+
bannerTemplate: string;
|
|
12
|
+
admitLabel: string;
|
|
13
|
+
rejectLabel: string;
|
|
14
|
+
onAdmit: (participantId: string) => Promise<void>;
|
|
15
|
+
onReject: (participantId: string) => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
export declare const JoinRequestBanner: React.FC<JoinRequestBannerProps>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=JoinRequestBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JoinRequestBanner.d.ts","sourceRoot":"","sources":["../../../src/components/JoinRequestBanner/JoinRequestBanner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAEtC,OAAO,0BAA0B,CAAC;AAElC,MAAM,MAAM,kBAAkB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC1B,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,QAAQ,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD,CAAC;AAsEF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA2B9D,CAAC"}
|