@stream-io/video-react-sdk 0.3.27 → 0.3.29

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 (26) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/css/styles.css +10 -0
  3. package/dist/css/styles.css.map +1 -1
  4. package/dist/src/components/CallParticipantsList/CallParticipantListHeader.js +5 -3
  5. package/dist/src/components/CallParticipantsList/CallParticipantListHeader.js.map +1 -1
  6. package/dist/src/components/CallParticipantsList/EmptyParticipantSearchList.js +3 -1
  7. package/dist/src/components/CallParticipantsList/EmptyParticipantSearchList.js.map +1 -1
  8. package/dist/src/core/components/CallLayout/PaginatedGridLayout.js +2 -2
  9. package/dist/src/core/components/CallLayout/PaginatedGridLayout.js.map +1 -1
  10. package/dist/src/core/components/CallLayout/SpeakerLayout.d.ts +6 -1
  11. package/dist/src/core/components/CallLayout/SpeakerLayout.js +28 -12
  12. package/dist/src/core/components/CallLayout/SpeakerLayout.js.map +1 -1
  13. package/dist/src/core/hooks/useCalculateHardLimit.d.ts +4 -0
  14. package/dist/src/core/hooks/useCalculateHardLimit.js +56 -0
  15. package/dist/src/core/hooks/useCalculateHardLimit.js.map +1 -0
  16. package/dist/src/translations/en.json +3 -0
  17. package/dist/src/translations/index.d.ts +3 -0
  18. package/dist/version.d.ts +1 -1
  19. package/dist/version.js +1 -1
  20. package/package.json +4 -4
  21. package/src/components/CallParticipantsList/CallParticipantListHeader.tsx +10 -3
  22. package/src/components/CallParticipantsList/EmptyParticipantSearchList.tsx +4 -1
  23. package/src/core/components/CallLayout/PaginatedGridLayout.tsx +28 -32
  24. package/src/core/components/CallLayout/SpeakerLayout.tsx +71 -21
  25. package/src/core/hooks/useCalculateHardLimit.ts +72 -0
  26. package/src/translations/en.json +4 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ### [0.3.29](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.3.28...@stream-io/video-react-sdk-0.3.29) (2023-09-27)
6
+
7
+
8
+ ### Features
9
+
10
+ * **SpeakerLayout:** add participantsBarLimit ([#1090](https://github.com/GetStream/stream-video-js/issues/1090)) ([712f1e7](https://github.com/GetStream/stream-video-js/commit/712f1e7010fdb8859aaa6caba7e7d9e0f4557ccb))
11
+
12
+ ### [0.3.28](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.3.27...@stream-io/video-react-sdk-0.3.28) (2023-09-26)
13
+
14
+ ### Dependency Updates
15
+
16
+ * `@stream-io/video-client` updated to version `0.1.0`
17
+ * `@stream-io/video-react-bindings` updated to version `0.2.25`
18
+ * `@stream-io/video-styling` updated to version `0.1.9`
19
+
20
+ ### Features
21
+
22
+ * show the anonymous user count in the participant list ([#1109](https://github.com/GetStream/stream-video-js/issues/1109)) ([a253cbf](https://github.com/GetStream/stream-video-js/commit/a253cbfa7552a9ab4302ce824a72653a27dd324d))
23
+
5
24
  ### [0.3.27](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.3.26...@stream-io/video-react-sdk-0.3.27) (2023-09-26)
6
25
 
7
26
  ### Dependency Updates
@@ -436,6 +436,16 @@
436
436
  border-inline-start: var(--str-video__participant-list-header--title-count--border-inline-start);
437
437
  border-inline-end: var(--str-video__participant-list-header--title-count--border-inline-end);
438
438
  }
439
+ .str-video__participant-list .str-video__participant-list-header__title-anonymous {
440
+ background: var(--str-video__participant-list-header--title-anonymous--background-color);
441
+ color: var(--str-video__participant-list-header--title-anonymous--color);
442
+ box-shadow: var(--str-video__participant-list-header--title-anonymous--box-shadow);
443
+ border-radius: var(--str-video__participant-list-header--title-anonymous--border-radius);
444
+ border-block-start: var(--str-video__participant-list-header--title-anonymous--border-block-start);
445
+ border-block-end: var(--str-video__participant-list-header--title-anonymous--border-block-end);
446
+ border-inline-start: var(--str-video__participant-list-header--title-anonymous--border-inline-start);
447
+ border-inline-end: var(--str-video__participant-list-header--title-anonymous--border-inline-end);
448
+ }
439
449
  .str-video__participant-list .str-video__participant-list-header__close-button {
440
450
  background: var(--str-video__participant-list-header__close-button--background-color);
441
451
  color: var(--str-video__participant-list-header__close-button--color);
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../src/_base.scss","../../src/_global-theme-variables.scss","../../src/Avatar/Avatar-layout.scss","../../src/Avatar/Avatar-theme.scss","../../src/_utils.scss","../../src/Button/Button-layout.scss","../../src/Button/Button-theme.scss","../../src/CallControls/CallControls-layout.scss","../../src/CallParticipantList/CallParticipantList-layout.scss","../../src/CallParticipantList/CallParticipantList-theme.scss","../../src/CallParticipantList/CallParticiantListingItem-layout.scss","../../src/CallParticipantList/CallParticiantListingItem-theme.scss","../../src/CallRecodingList/CallRecordingList-layout.scss","../../src/CallRecodingList/CallRecordingList-theme.scss","../../src/CallStats.scss","../../src/DeviceSettings/DeviceSettings-layout.scss","../../src/DeviceSettings/DeviceSettings-theme.scss","../../src/LoadingIndicator/LoadingIndicator-layout.scss","../../src/LoadingIndicator/LoadingIndicator-theme.scss","../../src/Menu/Menu-layout.scss","../../src/Menu/Menu-theme.scss","../../src/Menu/GenericMenu-layout.scss","../../src/Menu/GenericMenu-theme.scss","../../src/Notification/Notification-layout.scss","../../src/Notification/Notification-theme.scss","../../src/RingingCall/RingingCall-layout.scss","../../src/RingingCall/RingingCall-theme.scss","../../src/Permissions/Permissions-layout.scss","../../src/Reaction/Reaction-layout.scss","../../src/Search/SearchInput-layout.scss","../../src/Search/SearchInput-theme.scss","../../src/StreamCall.scss","../../src/Tooltip/Tooltip-layout.scss","../../src/Tooltip/Tooltip-theme.scss","../../src/Video/Video-layout.scss","../../src/Video/Video-theme.scss","../../src/Video/VideoPlaceholder-layout.scss","../../src/Video/VideoPlaceholder-theme.scss","../../src/VideoPreview/VideoPreview-layout.scss","../../src/VideoPreview/VideoPreview-theme.scss","../../src/ParticipantView/ParticipantView-layout.scss","../../src/ScreenShareOverlay/ScreenShareOverlay-layout.scss","../../src/ScreenShareOverlay/ScreenShareOverlay-theme.scss","../../src/CallLayout/PaginatedGridLayout-layout.scss","../../src/CallLayout/SpeakerLayout-layout.scss","../../src/Icon/Icon-theme.scss","../../src/Icon/Icon-layout.scss","../../src/Debug.scss"],"names":[],"mappings":";AACE;AAAA;AAAA;EAGE;;AAGF;EACE;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;;;ACzBJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACxEF;EAJE;EACA;EAKA;;;AAGF;EATE;EACA;EAUA;EACA;EACA;;;ACZF;AACE;EACA;AAEA;EACA;AAEA;EACA;;;AAGF;ECSE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADZF;EACE;EACA;EACA;EACA;EACA;;;AEtBF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;;AAKN;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAIA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;EACA;EACA;EAGA;;;ACzEF;AACE;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;;;AAKF;EFFE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AEFA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;;AAEA;EACE;;AAIJ;EACE;;AAEA;EACE;;AAIJ;EACE;;;AClFJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACbN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKN;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKN;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EAEE,QADiB;EAEjB,OAFiB;EAGjB,WAHiB;EAIjB,mBAJiB;;AAQrB;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC7GJ;EACE;AAAA;AAAA;EAGA;AAAA;AAAA;EAIA;EAEA;AAAA;AAAA;EAIA;EACA;AAAA;AAAA;EAIA;;;AAGF;ELFE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AKFA;ELLA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EKAE;EACA;;AAGF;ELXA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AKUA;ELjBA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AKeE;ELlCF,YKoCM;ELnCN,oBKmCM;ELlCN;EACA;EACA;EACA;EACA,WKkCM;ELjCN,mBKiCM;ELhCN,kBK6BM;;AAQN;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EL5DJ,YK8DU;EL7DV,oBK6DU;EL5DV;EACA;EACA;EACA;EACA,WK0DU;ELzDV,mBKyDU;ELxDV,kBKuDU;;;ACvEZ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;ENbA;EACA;EAEA;EACA;EACA;;AMYA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACvBJ;EACE;;AAIA;EPEF;EACA,oBODQ;EPER;EACA;EACA;EACA;EACA,WOJQ;EPKR,mBOLQ;EPMR,kBOPQ;;AAKN;EPNF,YOQQ;EPPR,oBOOQ;EPNR;EACA;EACA;EACA;EACA,WOIQ;EPHR,mBOGQ;EPFR,kBOCQ;;AAKN;EPdF,YOgBQ;EPfR,oBOeQ;EPdR;EACA;EACA;EACA;EACA,WOYQ;EPXR,mBOWQ;EPVR,kBOSQ;;AAKN;EPtBF,YOwBQ;EPvBR,oBOuBQ;EPtBR;EACA;EACA;EACA;EACA,WOoBQ;EPnBR,mBOmBQ;EPlBR,kBOiBQ;;AAKN;EP9BF,YOgCQ;EP/BR,oBO+BQ;EP9BR;EACA;EACA;EACA;EACA,WO4BQ;EP3BR,mBO2BQ;EP1BR,kBOyBQ;;;ACzCV;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIA;EACE;EACA;;;AAKN;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAQR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;ERnGF;EACA;EAEA;EACA;EACA;;;ASJF;EACE;EACA;EACA;;;AAGF;ETEE;EACA,oBSDI;ETEJ;EACA;EACA;EACA;EACA,WSJI;ETKJ,mBSLI;ETMJ,kBSPI;;;AAKN;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;ETxBA,YS0BI;ETzBJ,oBSyBI;ETxBJ;EACA;EACA;EACA;EACA,WSsBI;ETrBJ,mBSqBI;ETpBJ,kBSmBI;;;AAMN;ETjCE,YSmCI;ETlCJ,oBSkCI;ETjCJ;EACA;EACA;EACA;EACA,WS+BI;ET9BJ,mBS8BI;ET7BJ,kBS4BI;;;AAMJ;EACE;EACA;;AAGA;EACE;;AAGF;EACE;EACA;;AAGF;ETxDF,YS0DQ;ETzDR,oBSyDQ;ETxDR;EACA;EACA;EACA;EACA,WSsDQ;ETrDR,mBSqDQ;ETpDR,kBSmDQ;;AAKN;EThEF,YSkEQ;ETjER,oBSiEQ;EThER;EACA;EACA;EACA;EACA,WS8DQ;ET7DR,mBS6DQ;ET5DR,kBS2DQ;;;AAUN;EACE;EACA;EACA;;;AC1FN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;;;AClDF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEF;EACE;;;ACrCR;AACE;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;;;AAGF;EZAE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AYHF;EZJE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AYCF;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;AACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;;AAMR;EACE;EACA;EACA;;AAEA;EZxEA,YY0EM;EZzEN,oBYyEM;EZxEN;EACA;EACA;EACA;EACA,WYsEM;EZrEN,mBYqEM;EZpEN,kBYmEM;;AAKN;EAEE;EACA;;;AAIJ;EACE;;;AClGF;EACE;EACA;EACA;;;ACDF;EdQE,YcNE;EdOF,oBcPE;EdQF;EACA;EACA;EACA;EACA,WAPmD;EAQnD,mBARmD;EASnD,kBcbE;EAEF;EACA;EACA;;;AAGF;EACE;IACE;;EAEF;IACE;;;ACjBJ;EACE;;;ACDF;EACE;;;ACDF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKJ;EACE;;AAEF;EACE;EACA;EACA;EACA;;;ACpCN;EACE;;AAGE;EACE;;AAGF;EACE;EACA;EACA;;;ACXN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;;ACXJ;EACE;EACA;EACA;;AAEA;EpBGA,YoBDI;EpBEJ,oBoBFI;EpBGJ;EACA;EACA;EACA;EACA,WoBLI;EpBMJ,mBoBNI;EpBOJ,kBoBRI;;AAKJ;EACE;;;AChBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAKN;EACE;EACA;;;ACxCJ;EACE;EACA;EACA;;;AAME;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EAGA,cACE;EAEF;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AClCR;EACE;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;ACnDN;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;ACRJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;;;ACxBJ;EACE;EACA;AAAA;AAAA;EAGA;AAAA;AAAA;EAGA;AAAA;EAEA;EACA;AAAA;EAEA;EAEA;EAEA;;;AAGF;EACE;;;AAEF;E1BHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;A0BDA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;E1B9BA,Y0BgCI;E1B/BJ,oB0B+BI;E1B9BJ;EACA;EACA;EACA;EACA,W0B4BI;E1B3BJ,mB0B2BI;E1B1BJ,kB0ByBI;;AAIJ;EACE;;AAEA;E1BxCF,Y0B0CM;E1BzCN,oB0ByCM;E1BxCN;EACA;EACA;EACA;EACA,W0BsCM;E1BrCN,mB0BqCM;E1BpCN,kB0BmCM;;;ACrDR;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACE;EACA;;;ACrBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACNF;AACE;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;;;AAGF;E7BNE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E6BCA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;;AC1CF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;ACZJ;EACE;;;ACDF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;ACnBJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;;ACbJ;EACE;EACA;EACA;EAEA,OADkB;EAElB;;AAEA;EACE;EACA;EACA;;AAGF;EAEE,QADiB;EAEjB,OAFiB;EAGjB,WAHiB;;AAMnB;EACE;;AAGF;EACE;;;ACxBJ;AACE;EACA;AAEA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAGA;EACA;AAAA;AAGA;EACA;AAAA;AAGA;EACA;AAAA;;;AAIF;EnCXE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EmCMA;;;ACjCF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIA;AAAA;AAAA;AAAA;EAEE;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAWA;AAAA;EAPE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EAKA;EACA;;AAGF;AAAA;EAbE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EAWA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EA1BE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EAwBA;EACA;;AAGF;AAAA;EAhCE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EA8BA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EA9CE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EA4CA;EACA;EACA;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;;ACjIR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACxBN;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;;ACbN;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EACE;;AAIF;EACE;;AAIF;EACE;;;ACrCR;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EAGE;;AAGF;EACE;;AAGF;AAAA;EAEE;;AAIJ;EACE;EACA;EACA;EACA;;AAGE;EACE;EACA;;AAIJ;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAIJ;EACE;;AACA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;EAEA;;AAKN;EACE;;AAEF;EACE;;AAEF;EACE;;AAKA;EACE;EACA;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAMF;EACE;;AAEF;EACE;;AAEF;EACE;;;ACjIN;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKF;EACE;EACA;;;AC3KJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACTF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA","file":"styles.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../src/_base.scss","../../src/_global-theme-variables.scss","../../src/Avatar/Avatar-layout.scss","../../src/Avatar/Avatar-theme.scss","../../src/_utils.scss","../../src/Button/Button-layout.scss","../../src/Button/Button-theme.scss","../../src/CallControls/CallControls-layout.scss","../../src/CallParticipantList/CallParticipantList-layout.scss","../../src/CallParticipantList/CallParticipantList-theme.scss","../../src/CallParticipantList/CallParticiantListingItem-layout.scss","../../src/CallParticipantList/CallParticiantListingItem-theme.scss","../../src/CallRecodingList/CallRecordingList-layout.scss","../../src/CallRecodingList/CallRecordingList-theme.scss","../../src/CallStats.scss","../../src/DeviceSettings/DeviceSettings-layout.scss","../../src/DeviceSettings/DeviceSettings-theme.scss","../../src/LoadingIndicator/LoadingIndicator-layout.scss","../../src/LoadingIndicator/LoadingIndicator-theme.scss","../../src/Menu/Menu-layout.scss","../../src/Menu/Menu-theme.scss","../../src/Menu/GenericMenu-layout.scss","../../src/Menu/GenericMenu-theme.scss","../../src/Notification/Notification-layout.scss","../../src/Notification/Notification-theme.scss","../../src/RingingCall/RingingCall-layout.scss","../../src/RingingCall/RingingCall-theme.scss","../../src/Permissions/Permissions-layout.scss","../../src/Reaction/Reaction-layout.scss","../../src/Search/SearchInput-layout.scss","../../src/Search/SearchInput-theme.scss","../../src/StreamCall.scss","../../src/Tooltip/Tooltip-layout.scss","../../src/Tooltip/Tooltip-theme.scss","../../src/Video/Video-layout.scss","../../src/Video/Video-theme.scss","../../src/Video/VideoPlaceholder-layout.scss","../../src/Video/VideoPlaceholder-theme.scss","../../src/VideoPreview/VideoPreview-layout.scss","../../src/VideoPreview/VideoPreview-theme.scss","../../src/ParticipantView/ParticipantView-layout.scss","../../src/ScreenShareOverlay/ScreenShareOverlay-layout.scss","../../src/ScreenShareOverlay/ScreenShareOverlay-theme.scss","../../src/CallLayout/PaginatedGridLayout-layout.scss","../../src/CallLayout/SpeakerLayout-layout.scss","../../src/Icon/Icon-theme.scss","../../src/Icon/Icon-layout.scss","../../src/Debug.scss"],"names":[],"mappings":";AACE;AAAA;AAAA;EAGE;;AAGF;EACE;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;;;ACzBJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACxEF;EAJE;EACA;EAKA;;;AAGF;EATE;EACA;EAUA;EACA;EACA;;;ACZF;AACE;EACA;AAEA;EACA;AAEA;EACA;;;AAGF;ECSE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADZF;EACE;EACA;EACA;EACA;EACA;;;AEtBF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;;AAKN;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAIA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;EACA;EACA;EAGA;;;ACzEF;AACE;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;;;AAKF;EFFE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AEFA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;;AAEA;EACE;;AAIJ;EACE;;AAEA;EACE;;AAIJ;EACE;;;AClFJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACbN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKN;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKN;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EAEE,QADiB;EAEjB,OAFiB;EAGjB,WAHiB;EAIjB,mBAJiB;;AAQrB;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC7GJ;EACE;AAAA;AAAA;EAGA;AAAA;AAAA;EAIA;EAEA;AAAA;AAAA;EAIA;EACA;AAAA;AAAA;EAIA;;;AAGF;ELFE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AKFA;ELLA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EKAE;EACA;;AAGF;ELXA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AKUA;ELjBA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AKgBA;ELvBA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AKqBE;ELxCF,YK0CM;ELzCN,oBKyCM;ELxCN;EACA;EACA;EACA;EACA,WKwCM;ELvCN,mBKuCM;ELtCN,kBKmCM;;AAQN;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;ELlEJ,YKoEQ;ELnER,oBKmEQ;ELlER;EACA;EACA;EACA;EACA,WKgEQ;EL/DR,mBK+DQ;EL9DR,kBK6DQ;;;AC7EV;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;ENbA;EACA;EAEA;EACA;EACA;;AMYA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACvBJ;EACE;;AAIA;EPEF;EACA,oBODQ;EPER;EACA;EACA;EACA;EACA,WOJQ;EPKR,mBOLQ;EPMR,kBOPQ;;AAKN;EPNF,YOQQ;EPPR,oBOOQ;EPNR;EACA;EACA;EACA;EACA,WOIQ;EPHR,mBOGQ;EPFR,kBOCQ;;AAKN;EPdF,YOgBQ;EPfR,oBOeQ;EPdR;EACA;EACA;EACA;EACA,WOYQ;EPXR,mBOWQ;EPVR,kBOSQ;;AAKN;EPtBF,YOwBQ;EPvBR,oBOuBQ;EPtBR;EACA;EACA;EACA;EACA,WOoBQ;EPnBR,mBOmBQ;EPlBR,kBOiBQ;;AAKN;EP9BF,YOgCQ;EP/BR,oBO+BQ;EP9BR;EACA;EACA;EACA;EACA,WO4BQ;EP3BR,mBO2BQ;EP1BR,kBOyBQ;;;ACzCV;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIA;EACE;EACA;;;AAKN;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAQR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;ERnGF;EACA;EAEA;EACA;EACA;;;ASJF;EACE;EACA;EACA;;;AAGF;ETEE;EACA,oBSDI;ETEJ;EACA;EACA;EACA;EACA,WSJI;ETKJ,mBSLI;ETMJ,kBSPI;;;AAKN;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;ETxBA,YS0BI;ETzBJ,oBSyBI;ETxBJ;EACA;EACA;EACA;EACA,WSsBI;ETrBJ,mBSqBI;ETpBJ,kBSmBI;;;AAMN;ETjCE,YSmCI;ETlCJ,oBSkCI;ETjCJ;EACA;EACA;EACA;EACA,WS+BI;ET9BJ,mBS8BI;ET7BJ,kBS4BI;;;AAMJ;EACE;EACA;;AAGA;EACE;;AAGF;EACE;EACA;;AAGF;ETxDF,YS0DQ;ETzDR,oBSyDQ;ETxDR;EACA;EACA;EACA;EACA,WSsDQ;ETrDR,mBSqDQ;ETpDR,kBSmDQ;;AAKN;EThEF,YSkEQ;ETjER,oBSiEQ;EThER;EACA;EACA;EACA;EACA,WS8DQ;ET7DR,mBS6DQ;ET5DR,kBS2DQ;;;AAUN;EACE;EACA;EACA;;;AC1FN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;;;AClDF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEF;EACE;;;ACrCR;AACE;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;;;AAGF;EZAE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AYHF;EZJE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AYCF;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;AACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;;AAMR;EACE;EACA;EACA;;AAEA;EZxEA,YY0EM;EZzEN,oBYyEM;EZxEN;EACA;EACA;EACA;EACA,WYsEM;EZrEN,mBYqEM;EZpEN,kBYmEM;;AAKN;EAEE;EACA;;;AAIJ;EACE;;;AClGF;EACE;EACA;EACA;;;ACDF;EdQE,YcNE;EdOF,oBcPE;EdQF;EACA;EACA;EACA;EACA,WAPmD;EAQnD,mBARmD;EASnD,kBcbE;EAEF;EACA;EACA;;;AAGF;EACE;IACE;;EAEF;IACE;;;ACjBJ;EACE;;;ACDF;EACE;;;ACDF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKJ;EACE;;AAEF;EACE;EACA;EACA;EACA;;;ACpCN;EACE;;AAGE;EACE;;AAGF;EACE;EACA;EACA;;;ACXN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;;ACXJ;EACE;EACA;EACA;;AAEA;EpBGA,YoBDI;EpBEJ,oBoBFI;EpBGJ;EACA;EACA;EACA;EACA,WoBLI;EpBMJ,mBoBNI;EpBOJ,kBoBRI;;AAKJ;EACE;;;AChBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAKN;EACE;EACA;;;ACxCJ;EACE;EACA;EACA;;;AAME;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EAGA,cACE;EAEF;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AClCR;EACE;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;ACnDN;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;ACRJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;;;ACxBJ;EACE;EACA;AAAA;AAAA;EAGA;AAAA;AAAA;EAGA;AAAA;EAEA;EACA;AAAA;EAEA;EAEA;EAEA;;;AAGF;EACE;;;AAEF;E1BHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;A0BDA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;E1B9BA,Y0BgCI;E1B/BJ,oB0B+BI;E1B9BJ;EACA;EACA;EACA;EACA,W0B4BI;E1B3BJ,mB0B2BI;E1B1BJ,kB0ByBI;;AAIJ;EACE;;AAEA;E1BxCF,Y0B0CM;E1BzCN,oB0ByCM;E1BxCN;EACA;EACA;EACA;EACA,W0BsCM;E1BrCN,mB0BqCM;E1BpCN,kB0BmCM;;;ACrDR;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACE;EACA;;;ACrBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACNF;AACE;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;AAEA;EACA;;;AAGF;E7BNE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E6BCA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;;AC1CF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;ACZJ;EACE;;;ACDF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;ACnBJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;;ACbJ;EACE;EACA;EACA;EAEA,OADkB;EAElB;;AAEA;EACE;EACA;EACA;;AAGF;EAEE,QADiB;EAEjB,OAFiB;EAGjB,WAHiB;;AAMnB;EACE;;AAGF;EACE;;;ACxBJ;AACE;EACA;AAEA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAAA;AAIA;EACA;AAAA;AAGA;EACA;AAAA;AAGA;EACA;AAAA;AAGA;EACA;AAAA;;;AAIF;EnCXE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EmCMA;;;ACjCF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIA;AAAA;AAAA;AAAA;EAEE;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;AAGF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAWA;AAAA;EAPE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EAKA;EACA;;AAGF;AAAA;EAbE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EAWA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EA1BE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EAwBA;EACA;;AAGF;AAAA;EAhCE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EA8BA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EA9CE,OADY;EAEZ,QAFY;EAGZ,WAHY;EAIZ,mBAJY;EAKZ;EA4CA;EACA;EACA;;AAIJ;AAAA;EACE;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;;;ACjIR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACxBN;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;;ACbN;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EACE;;AAIF;EACE;;AAIF;EACE;;;ACrCR;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EAGE;;AAGF;EACE;;AAGF;AAAA;EAEE;;AAIJ;EACE;EACA;EACA;EACA;;AAGE;EACE;EACA;;AAIJ;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAIJ;EACE;;AACA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;EAEA;;AAKN;EACE;;AAEF;EACE;;AAEF;EACE;;AAKA;EACE;EACA;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAMF;EACE;;AAEF;EACE;;AAEF;EACE;;;ACjIN;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKF;EACE;EACA;;;AC3KJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACTF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA","file":"styles.css"}
@@ -1,8 +1,10 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallStateHooks } from '@stream-io/video-react-bindings';
2
+ import { useCallStateHooks, useI18n } from '@stream-io/video-react-bindings';
3
3
  export const CallParticipantListHeader = ({ onClose, }) => {
4
- const { useParticipants } = useCallStateHooks();
4
+ const { useParticipants, useAnonymousParticipantCount } = useCallStateHooks();
5
5
  const participants = useParticipants();
6
- return (_jsxs("div", Object.assign({ className: "str-video__participant-list-header" }, { children: [_jsxs("div", Object.assign({ className: "str-video__participant-list-header__title" }, { children: ["Participants", ' ', _jsxs("span", Object.assign({ className: "str-video__participant-list-header__title-count" }, { children: ["(", participants.length, ")"] }))] })), _jsx("button", Object.assign({ onClick: onClose, className: "str-video__participant-list-header__close-button" }, { children: _jsx("span", { className: "str-video__participant-list-header__close-button--icon" }) }))] })));
6
+ const anonymousParticipantCount = useAnonymousParticipantCount();
7
+ const { t } = useI18n();
8
+ return (_jsxs("div", Object.assign({ className: "str-video__participant-list-header" }, { children: [_jsxs("div", Object.assign({ className: "str-video__participant-list-header__title" }, { children: [t('Participants'), ' ', _jsxs("span", Object.assign({ className: "str-video__participant-list-header__title-count" }, { children: ["(", participants.length, ")"] })), anonymousParticipantCount > 0 && (_jsx("span", Object.assign({ className: "str-video__participant-list-header__title-anonymous" }, { children: t('Anonymous', { count: anonymousParticipantCount }) })))] })), _jsx("button", Object.assign({ onClick: onClose, className: "str-video__participant-list-header__close-button" }, { children: _jsx("span", { className: "str-video__participant-list-header__close-button--icon" }) }))] })));
7
9
  };
8
10
  //# sourceMappingURL=CallParticipantListHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallParticipantListHeader.js","sourceRoot":"","sources":["../../../../src/components/CallParticipantsList/CallParticipantListHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAOpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACxC,OAAO,GACwB,EAAE,EAAE;IACnC,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,OAAO,CACL,6BAAK,SAAS,EAAC,oCAAoC,iBACjD,6BAAK,SAAS,EAAC,2CAA2C,iCAC3C,GAAG,EAChB,8BAAM,SAAS,EAAC,iDAAiD,sBAC7D,YAAY,CAAC,MAAM,UAChB,KACH,EACN,+BACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,kDAAkD,gBAE5D,eAAM,SAAS,EAAC,wDAAwD,GAAG,IACpE,KACL,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"CallParticipantListHeader.js","sourceRoot":"","sources":["../../../../src/components/CallParticipantsList/CallParticipantListHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAO7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACxC,OAAO,GACwB,EAAE,EAAE;IACnC,MAAM,EAAE,eAAe,EAAE,4BAA4B,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC9E,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,yBAAyB,GAAG,4BAA4B,EAAE,CAAC;IACjE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,OAAO,CACL,6BAAK,SAAS,EAAC,oCAAoC,iBACjD,6BAAK,SAAS,EAAC,2CAA2C,iBACvD,CAAC,CAAC,cAAc,CAAC,EAAE,GAAG,EACvB,8BAAM,SAAS,EAAC,iDAAiD,sBAC7D,YAAY,CAAC,MAAM,UAChB,EACN,yBAAyB,GAAG,CAAC,IAAI,CAChC,6BAAM,SAAS,EAAC,qDAAqD,gBAClE,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,IAChD,CACR,KACG,EACN,+BACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,kDAAkD,gBAE5D,eAAM,SAAS,EAAC,wDAAwD,GAAG,IACpE,KACL,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useI18n } from '@stream-io/video-react-bindings';
2
3
  export const EmptyParticipantSearchList = () => {
3
- return (_jsx("div", Object.assign({ className: "str-video__participant-list--empty" }, { children: "No participants found" })));
4
+ const { t } = useI18n();
5
+ return (_jsx("div", Object.assign({ className: "str-video__participant-list--empty" }, { children: t('No participants found') })));
4
6
  };
5
7
  //# sourceMappingURL=EmptyParticipantSearchList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyParticipantSearchList.js","sourceRoot":"","sources":["../../../../src/components/CallParticipantsList/EmptyParticipantSearchList.tsx"],"names":[],"mappings":";AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC7C,OAAO,CACL,4BAAK,SAAS,EAAC,oCAAoC,2CAE7C,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"EmptyParticipantSearchList.js","sourceRoot":"","sources":["../../../../src/components/CallParticipantsList/EmptyParticipantSearchList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,EAAE;IAC7C,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,OAAO,CACL,4BAAK,SAAS,EAAC,oCAAoC,gBAChD,CAAC,CAAC,uBAAuB,CAAC,IACvB,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useMemo, useState } from 'react';
3
3
  import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
4
4
  import clsx from 'clsx';
@@ -33,6 +33,6 @@ export const PaginatedGridLayout = ({ groupSize = GROUP_SIZE, excludeLocalPartic
33
33
  const selectedGroup = participantGroups[page];
34
34
  if (!call)
35
35
  return null;
36
- return (_jsxs(_Fragment, { children: [remoteParticipants.map((participant) => (_jsx(Audio, { participant: participant }, participant.sessionId))), _jsx("div", Object.assign({ className: "str-video__paginated-grid-layout__wrapper" }, { children: _jsxs("div", Object.assign({ className: "str-video__paginated-grid-layout" }, { children: [pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { icon: "caret-left", disabled: page === 0, onClick: () => setPage((currentPage) => Math.max(0, currentPage - 1)) })), selectedGroup && (_jsx(PaginatedGridLayoutGroup, { group: participantGroups[page], VideoPlaceholder: VideoPlaceholder, ParticipantViewUI: ParticipantViewUI })), pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { disabled: page === pageCount - 1, icon: "caret-right", onClick: () => setPage((currentPage) => Math.min(pageCount - 1, currentPage + 1)) }))] })) }))] }));
36
+ return (_jsxs("div", Object.assign({ className: "str-video__paginated-grid-layout__wrapper" }, { children: [remoteParticipants.map((participant) => (_jsx(Audio, { participant: participant }, participant.sessionId))), _jsxs("div", Object.assign({ className: "str-video__paginated-grid-layout" }, { children: [pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { icon: "caret-left", disabled: page === 0, onClick: () => setPage((currentPage) => Math.max(0, currentPage - 1)) })), selectedGroup && (_jsx(PaginatedGridLayoutGroup, { group: participantGroups[page], VideoPlaceholder: VideoPlaceholder, ParticipantViewUI: ParticipantViewUI })), pageArrowsVisible && pageCount > 1 && (_jsx(IconButton, { disabled: page === pageCount - 1, icon: "caret-right", onClick: () => setPage((currentPage) => Math.min(pageCount - 1, currentPage + 1)) }))] }))] })));
37
37
  };
38
38
  //# sourceMappingURL=PaginatedGridLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaginatedGridLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/PaginatedGridLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PaginatedGridLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/PaginatedGridLayout.tsx"],"names":[],"mappings":"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"}
@@ -7,5 +7,10 @@ export type SpeakerLayoutProps = {
7
7
  * Providing `null` will hide the bar.
8
8
  */
9
9
  participantsBarPosition?: 'top' | 'bottom' | 'left' | 'right' | null;
10
+ /**
11
+ * Hard limits the number of the participants rendered in the participants bar.
12
+ * Providing string `dynamic` will calculate hard limit based on screen width/height.
13
+ */
14
+ participantsBarLimit?: 'dynamic' | number;
10
15
  } & Pick<ParticipantViewProps, 'VideoPlaceholder'>;
11
- export declare const SpeakerLayout: ({ ParticipantViewUIBar, ParticipantViewUISpotlight, VideoPlaceholder, participantsBarPosition, }: SpeakerLayoutProps) => import("react/jsx-runtime").JSX.Element | null;
16
+ export declare const SpeakerLayout: ({ ParticipantViewUIBar, ParticipantViewUISpotlight, VideoPlaceholder, participantsBarPosition, participantsBarLimit, }: SpeakerLayoutProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -2,24 +2,33 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { useEffect, useState } from 'react';
3
3
  import { CallTypes, combineComparators, defaultSortPreset, screenSharing, SfuModels, speakerLayoutSortPreset, } from '@stream-io/video-client';
4
4
  import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
5
+ import clsx from 'clsx';
5
6
  import { DefaultParticipantViewUI, ParticipantView, } from '../ParticipantView';
6
7
  import { IconButton } from '../../../components';
7
8
  import { useHorizontalScrollPosition, useVerticalScrollPosition, } from '../../../hooks';
8
- import clsx from 'clsx';
9
+ import { useCalculateHardLimit } from '../../hooks/useCalculateHardLimit';
10
+ import { Audio } from '../Audio';
9
11
  const DefaultParticipantViewUIBar = () => (_jsx(DefaultParticipantViewUI, { menuPlacement: "top-end" }));
10
12
  const DefaultParticipantViewUISpotlight = () => _jsx(DefaultParticipantViewUI, {});
11
- export const SpeakerLayout = ({ ParticipantViewUIBar = DefaultParticipantViewUIBar, ParticipantViewUISpotlight = DefaultParticipantViewUISpotlight, VideoPlaceholder, participantsBarPosition = 'bottom', }) => {
13
+ export const SpeakerLayout = ({ ParticipantViewUIBar = DefaultParticipantViewUIBar, ParticipantViewUISpotlight = DefaultParticipantViewUISpotlight, VideoPlaceholder, participantsBarPosition = 'bottom', participantsBarLimit, }) => {
12
14
  const call = useCall();
13
- const { useParticipants } = useCallStateHooks();
15
+ const { useParticipants, useRemoteParticipants } = useCallStateHooks();
14
16
  const [participantInSpotlight, ...otherParticipants] = useParticipants();
15
- const [scrollWrapper, setScrollWrapper] = useState(null);
17
+ const remoteParticipants = useRemoteParticipants();
18
+ const [participantsBarWrapperElement, setParticipantsBarWrapperElement] = useState(null);
19
+ const [participantsBarElement, setParticipantsBarElement] = useState(null);
20
+ const [buttonsWrapperElement, setButtonsWrapperElement] = useState(null);
21
+ const isSpeakerScreenSharing = hasScreenShare(participantInSpotlight);
22
+ const hardLimit = useCalculateHardLimit(buttonsWrapperElement, participantsBarElement, participantsBarLimit);
23
+ const isVertical = participantsBarPosition === 'left' || participantsBarPosition === 'right';
24
+ const isHorizontal = participantsBarPosition === 'top' || participantsBarPosition === 'bottom';
16
25
  const isOneOnOneCall = otherParticipants.length === 1;
17
26
  useEffect(() => {
18
- if (!scrollWrapper || !call)
27
+ if (!participantsBarWrapperElement || !call)
19
28
  return;
20
- const cleanup = call.setViewport(scrollWrapper);
29
+ const cleanup = call.setViewport(participantsBarWrapperElement);
21
30
  return () => cleanup();
22
- }, [scrollWrapper, call]);
31
+ }, [participantsBarWrapperElement, call]);
23
32
  useEffect(() => {
24
33
  if (!call)
25
34
  return;
@@ -36,13 +45,20 @@ export const SpeakerLayout = ({ ParticipantViewUIBar = DefaultParticipantViewUIB
36
45
  call.setSortParticipantsBy(callConfig.options.sortParticipantsBy || defaultSortPreset);
37
46
  };
38
47
  }, [call, isOneOnOneCall]);
48
+ let participantsWithAppliedLimit = otherParticipants;
49
+ if (typeof participantsBarLimit !== 'undefined') {
50
+ const hardLimitToApply = isVertical
51
+ ? hardLimit.vertical
52
+ : hardLimit.horizontal;
53
+ participantsWithAppliedLimit = otherParticipants.slice(0,
54
+ // subtract 1 if speaker is sharing screen as
55
+ // that one is rendered independently from otherParticipants array
56
+ hardLimitToApply - (isSpeakerScreenSharing ? 1 : 0));
57
+ }
39
58
  if (!call)
40
59
  return null;
41
- const isSpeakerScreenSharing = hasScreenShare(participantInSpotlight);
42
- return (_jsx("div", Object.assign({ className: "str-video__speaker-layout__wrapper" }, { children: _jsxs("div", Object.assign({ className: clsx('str-video__speaker-layout', participantsBarPosition &&
43
- `str-video__speaker-layout--variant-${participantsBarPosition}`) }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__spotlight" }, { children: participantInSpotlight && (_jsx(ParticipantView, { participant: participantInSpotlight, muteAudio: isSpeakerScreenSharing, trackType: isSpeakerScreenSharing ? 'screenShareTrack' : 'videoTrack', ParticipantViewUI: ParticipantViewUISpotlight, VideoPlaceholder: VideoPlaceholder })) })), otherParticipants.length > 0 && participantsBarPosition && (_jsxs("div", Object.assign({ className: "str-video__speaker-layout__participants-bar-buttons-wrapper" }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__participants-bar-wrapper", ref: setScrollWrapper }, { children: _jsxs("div", Object.assign({ className: "str-video__speaker-layout__participants-bar" }, { children: [isSpeakerScreenSharing && (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participantInSpotlight, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder }) }), participantInSpotlight.sessionId)), otherParticipants.map((participant) => (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participant, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder }) }), participant.sessionId)))] })) })), (participantsBarPosition === 'left' ||
44
- participantsBarPosition === 'right') && (_jsx(VerticalScrollButtons, { scrollWrapper: scrollWrapper })), (participantsBarPosition === 'top' ||
45
- participantsBarPosition === 'bottom') && (_jsx(HorizontalScrollButtons, { scrollWrapper: scrollWrapper }))] })))] })) })));
60
+ return (_jsxs("div", Object.assign({ className: "str-video__speaker-layout__wrapper" }, { children: [remoteParticipants.map((participant) => (_jsx(Audio, { participant: participant }, participant.sessionId))), _jsxs("div", Object.assign({ className: clsx('str-video__speaker-layout', participantsBarPosition &&
61
+ `str-video__speaker-layout--variant-${participantsBarPosition}`) }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__spotlight" }, { children: participantInSpotlight && (_jsx(ParticipantView, { participant: participantInSpotlight, muteAudio: true, trackType: isSpeakerScreenSharing ? 'screenShareTrack' : 'videoTrack', ParticipantViewUI: ParticipantViewUISpotlight, VideoPlaceholder: VideoPlaceholder })) })), participantsWithAppliedLimit.length > 0 && participantsBarPosition && (_jsxs("div", Object.assign({ ref: setButtonsWrapperElement, className: "str-video__speaker-layout__participants-bar-buttons-wrapper" }, { children: [_jsx("div", Object.assign({ className: "str-video__speaker-layout__participants-bar-wrapper", ref: setParticipantsBarWrapperElement }, { children: _jsxs("div", Object.assign({ ref: setParticipantsBarElement, className: "str-video__speaker-layout__participants-bar" }, { children: [isSpeakerScreenSharing && (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participantInSpotlight, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder, muteAudio: true }) }), participantInSpotlight.sessionId)), participantsWithAppliedLimit.map((participant) => (_jsx("div", Object.assign({ className: "str-video__speaker-layout__participant-tile" }, { children: _jsx(ParticipantView, { participant: participant, ParticipantViewUI: ParticipantViewUIBar, VideoPlaceholder: VideoPlaceholder, muteAudio: true }) }), participant.sessionId)))] })) })), isVertical && (_jsx(VerticalScrollButtons, { scrollWrapper: participantsBarWrapperElement })), isHorizontal && (_jsx(HorizontalScrollButtons, { scrollWrapper: participantsBarWrapperElement }))] })))] }))] })));
46
62
  };
47
63
  const HorizontalScrollButtons = ({ scrollWrapper, }) => {
48
64
  const scrollPosition = useHorizontalScrollPosition(scrollWrapper);
@@ -1 +1 @@
1
- {"version":3,"file":"SpeakerLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/SpeakerLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpeakerLayout.js","sourceRoot":"","sources":["../../../../../src/core/components/CallLayout/SpeakerLayout.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const useCalculateHardLimit: (wrapperElement: HTMLDivElement | null, hostElement: HTMLDivElement | null, limit?: 'dynamic' | number) => {
2
+ vertical: number;
3
+ horizontal: number;
4
+ };
@@ -0,0 +1,56 @@
1
+ import { useEffect, useState } from 'react';
2
+ export const useCalculateHardLimit = (
3
+ /**
4
+ * Element that stretches to 100% of the whole layout component
5
+ */
6
+ wrapperElement,
7
+ /**
8
+ * Element that directly hosts individual `ParticipantView` (or wrapper) elements
9
+ */
10
+ hostElement, limit) => {
11
+ const [calculatedLimit, setCalculatedLimit] = useState({
12
+ vertical: typeof limit === 'number' ? limit : 1,
13
+ horizontal: typeof limit === 'number' ? limit : 1,
14
+ });
15
+ useEffect(() => {
16
+ if (!hostElement ||
17
+ !wrapperElement ||
18
+ typeof limit === 'number' ||
19
+ typeof limit === 'undefined')
20
+ return;
21
+ let childWidth = null;
22
+ let childHeight = null;
23
+ const resizeObserver = new ResizeObserver((entries, observer) => {
24
+ // this part should ideally run as little times as possible
25
+ // get child measurements and disconnect
26
+ // does not consider dynamically sized children
27
+ // this hook is for SpeakerLayout use only, where children in the bar are fixed size
28
+ if (entries.length > 1) {
29
+ const child = hostElement.firstChild;
30
+ if (child) {
31
+ childHeight = child.clientHeight;
32
+ childWidth = child.clientWidth;
33
+ observer.unobserve(hostElement);
34
+ }
35
+ }
36
+ // keep the state at { vertical: 1, horizontal: 1 }
37
+ // until we get the proper child measurements
38
+ if (childHeight === null || childWidth === null)
39
+ return;
40
+ const vertical = Math.floor(wrapperElement.clientHeight / childHeight);
41
+ const horizontal = Math.floor(wrapperElement.clientWidth / childWidth);
42
+ setCalculatedLimit((pv) => {
43
+ if (pv.vertical !== vertical || pv.horizontal !== horizontal)
44
+ return { vertical, horizontal };
45
+ return pv;
46
+ });
47
+ });
48
+ resizeObserver.observe(wrapperElement);
49
+ resizeObserver.observe(hostElement);
50
+ return () => {
51
+ resizeObserver.disconnect();
52
+ };
53
+ }, [hostElement, limit, wrapperElement]);
54
+ return calculatedLimit;
55
+ };
56
+ //# sourceMappingURL=useCalculateHardLimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCalculateHardLimit.js","sourceRoot":"","sources":["../../../../src/core/hooks/useCalculateHardLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG;AACnC;;GAEG;AACH,cAAqC;AACrC;;GAEG;AACH,WAAkC,EAClC,KAA0B,EAC1B,EAAE;IACF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAGnD;QACD,QAAQ,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,UAAU,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClD,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IACE,CAAC,WAAW;YACZ,CAAC,cAAc;YACf,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,KAAK,KAAK,WAAW;YAE5B,OAAO;QAET,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,WAAW,GAAkB,IAAI,CAAC;QAEtC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YAC9D,2DAA2D;YAC3D,wCAAwC;YACxC,+CAA+C;YAC/C,oFAAoF;YACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,MAAM,KAAK,GAAG,WAAW,CAAC,UAAgC,CAAC;gBAE3D,IAAI,KAAK,EAAE;oBACT,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;oBACjC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;oBAC/B,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;iBACjC;aACF;YAED,mDAAmD;YACnD,6CAA6C;YAC7C,IAAI,WAAW,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI;gBAAE,OAAO;YAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;YAEvE,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE;gBACxB,IAAI,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU;oBAC1D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;gBAClC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACvC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEpC,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAEzC,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC"}
@@ -59,6 +59,9 @@
59
59
  "Leave": "Leave",
60
60
  "{{ direction }} fullscreen": "{{ direction }} fullscreen",
61
61
  "{{ direction }} picture-in-picture": "{{ direction }} picture-in-picture",
62
+ "Participants": "Participants",
63
+ "Anonymous": ", and ({{ count }}) anonymous",
64
+ "No participants found": "No participants found",
62
65
  "Participants ({{ numberOfParticipants }})": "Participants ({{ numberOfParticipants }})",
63
66
  "{{ userName }} is sharing their screen": "{{ userName }} is sharing their screen",
64
67
  "{{ userName }} is requesting to speak": "{{ userName }} is requesting to speak",
@@ -60,6 +60,9 @@ export declare const translations: {
60
60
  Leave: string;
61
61
  "{{ direction }} fullscreen": string;
62
62
  "{{ direction }} picture-in-picture": string;
63
+ Participants: string;
64
+ Anonymous: string;
65
+ "No participants found": string;
63
66
  "Participants ({{ numberOfParticipants }})": string;
64
67
  "{{ userName }} is sharing their screen": string;
65
68
  "{{ userName }} is requesting to speak": string;
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "0.3.27";
1
+ export declare const version = "0.3.29";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '0.3.27';
1
+ export const version = '0.3.29';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-sdk",
3
- "version": "0.3.27",
3
+ "version": "0.3.29",
4
4
  "packageManager": "yarn@3.2.4",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -33,8 +33,8 @@
33
33
  "@nivo/core": "^0.80.0",
34
34
  "@nivo/line": "^0.80.0",
35
35
  "@stream-io/i18n": "^0.1.2",
36
- "@stream-io/video-client": "^0.3.23",
37
- "@stream-io/video-react-bindings": "^0.2.24",
36
+ "@stream-io/video-client": "^0.3.24",
37
+ "@stream-io/video-react-bindings": "^0.2.25",
38
38
  "clsx": "^1.2.1",
39
39
  "prop-types": "^15.8.1",
40
40
  "rxjs": "~7.8.1"
@@ -44,7 +44,7 @@
44
44
  "react-dom": "^18.0.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@stream-io/video-styling": "^0.1.8",
47
+ "@stream-io/video-styling": "^0.1.9",
48
48
  "@types/prop-types": "^15.7.5",
49
49
  "react": "^18.2.0",
50
50
  "react-dom": "^18.2.0",
@@ -1,4 +1,4 @@
1
- import { useCallStateHooks } from '@stream-io/video-react-bindings';
1
+ import { useCallStateHooks, useI18n } from '@stream-io/video-react-bindings';
2
2
 
3
3
  export type CallParticipantListHeaderProps = {
4
4
  /** Click event listener function to be invoked in order to dismiss / hide the CallParticipantsList from the UI */
@@ -8,16 +8,23 @@ export type CallParticipantListHeaderProps = {
8
8
  export const CallParticipantListHeader = ({
9
9
  onClose,
10
10
  }: CallParticipantListHeaderProps) => {
11
- const { useParticipants } = useCallStateHooks();
11
+ const { useParticipants, useAnonymousParticipantCount } = useCallStateHooks();
12
12
  const participants = useParticipants();
13
+ const anonymousParticipantCount = useAnonymousParticipantCount();
14
+ const { t } = useI18n();
13
15
 
14
16
  return (
15
17
  <div className="str-video__participant-list-header">
16
18
  <div className="str-video__participant-list-header__title">
17
- Participants{' '}
19
+ {t('Participants')}{' '}
18
20
  <span className="str-video__participant-list-header__title-count">
19
21
  ({participants.length})
20
22
  </span>
23
+ {anonymousParticipantCount > 0 && (
24
+ <span className="str-video__participant-list-header__title-anonymous">
25
+ {t('Anonymous', { count: anonymousParticipantCount })}
26
+ </span>
27
+ )}
21
28
  </div>
22
29
  <button
23
30
  onClick={onClose}
@@ -1,7 +1,10 @@
1
+ import { useI18n } from '@stream-io/video-react-bindings';
2
+
1
3
  export const EmptyParticipantSearchList = () => {
4
+ const { t } = useI18n();
2
5
  return (
3
6
  <div className="str-video__participant-list--empty">
4
- No participants found
7
+ {t('No participants found')}
5
8
  </div>
6
9
  );
7
10
  };
@@ -109,41 +109,37 @@ export const PaginatedGridLayout = ({
109
109
  if (!call) return null;
110
110
 
111
111
  return (
112
- <>
112
+ <div className="str-video__paginated-grid-layout__wrapper">
113
113
  {remoteParticipants.map((participant) => (
114
114
  <Audio key={participant.sessionId} participant={participant} />
115
115
  ))}
116
- <div className="str-video__paginated-grid-layout__wrapper">
117
- <div className="str-video__paginated-grid-layout">
118
- {pageArrowsVisible && pageCount > 1 && (
119
- <IconButton
120
- icon="caret-left"
121
- disabled={page === 0}
122
- onClick={() =>
123
- setPage((currentPage) => Math.max(0, currentPage - 1))
124
- }
125
- />
126
- )}
127
- {selectedGroup && (
128
- <PaginatedGridLayoutGroup
129
- group={participantGroups[page]}
130
- VideoPlaceholder={VideoPlaceholder}
131
- ParticipantViewUI={ParticipantViewUI}
132
- />
133
- )}
134
- {pageArrowsVisible && pageCount > 1 && (
135
- <IconButton
136
- disabled={page === pageCount - 1}
137
- icon="caret-right"
138
- onClick={() =>
139
- setPage((currentPage) =>
140
- Math.min(pageCount - 1, currentPage + 1),
141
- )
142
- }
143
- />
144
- )}
145
- </div>
116
+ <div className="str-video__paginated-grid-layout">
117
+ {pageArrowsVisible && pageCount > 1 && (
118
+ <IconButton
119
+ icon="caret-left"
120
+ disabled={page === 0}
121
+ onClick={() =>
122
+ setPage((currentPage) => Math.max(0, currentPage - 1))
123
+ }
124
+ />
125
+ )}
126
+ {selectedGroup && (
127
+ <PaginatedGridLayoutGroup
128
+ group={participantGroups[page]}
129
+ VideoPlaceholder={VideoPlaceholder}
130
+ ParticipantViewUI={ParticipantViewUI}
131
+ />
132
+ )}
133
+ {pageArrowsVisible && pageCount > 1 && (
134
+ <IconButton
135
+ disabled={page === pageCount - 1}
136
+ icon="caret-right"
137
+ onClick={() =>
138
+ setPage((currentPage) => Math.min(pageCount - 1, currentPage + 1))
139
+ }
140
+ />
141
+ )}
146
142
  </div>
147
- </>
143
+ </div>
148
144
  );
149
145
  };
@@ -1,5 +1,4 @@
1
1
  import { useEffect, useState } from 'react';
2
-
3
2
  import {
4
3
  CallTypes,
5
4
  combineComparators,
@@ -11,6 +10,7 @@ import {
11
10
  StreamVideoParticipant,
12
11
  } from '@stream-io/video-client';
13
12
  import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
13
+ import clsx from 'clsx';
14
14
 
15
15
  import {
16
16
  DefaultParticipantViewUI,
@@ -22,7 +22,8 @@ import {
22
22
  useHorizontalScrollPosition,
23
23
  useVerticalScrollPosition,
24
24
  } from '../../../hooks';
25
- import clsx from 'clsx';
25
+ import { useCalculateHardLimit } from '../../hooks/useCalculateHardLimit';
26
+ import { Audio } from '../Audio';
26
27
 
27
28
  export type SpeakerLayoutProps = {
28
29
  ParticipantViewUISpotlight?: ParticipantViewProps['ParticipantViewUI'];
@@ -32,6 +33,11 @@ export type SpeakerLayoutProps = {
32
33
  * Providing `null` will hide the bar.
33
34
  */
34
35
  participantsBarPosition?: 'top' | 'bottom' | 'left' | 'right' | null;
36
+ /**
37
+ * Hard limits the number of the participants rendered in the participants bar.
38
+ * Providing string `dynamic` will calculate hard limit based on screen width/height.
39
+ */
40
+ participantsBarLimit?: 'dynamic' | number;
35
41
  } & Pick<ParticipantViewProps, 'VideoPlaceholder'>;
36
42
 
37
43
  const DefaultParticipantViewUIBar = () => (
@@ -45,21 +51,38 @@ export const SpeakerLayout = ({
45
51
  ParticipantViewUISpotlight = DefaultParticipantViewUISpotlight,
46
52
  VideoPlaceholder,
47
53
  participantsBarPosition = 'bottom',
54
+ participantsBarLimit,
48
55
  }: SpeakerLayoutProps) => {
49
56
  const call = useCall();
50
- const { useParticipants } = useCallStateHooks();
57
+ const { useParticipants, useRemoteParticipants } = useCallStateHooks();
51
58
  const [participantInSpotlight, ...otherParticipants] = useParticipants();
52
- const [scrollWrapper, setScrollWrapper] = useState<HTMLDivElement | null>(
53
- null,
59
+ const remoteParticipants = useRemoteParticipants();
60
+ const [participantsBarWrapperElement, setParticipantsBarWrapperElement] =
61
+ useState<HTMLDivElement | null>(null);
62
+ const [participantsBarElement, setParticipantsBarElement] =
63
+ useState<HTMLDivElement | null>(null);
64
+ const [buttonsWrapperElement, setButtonsWrapperElement] =
65
+ useState<HTMLDivElement | null>(null);
66
+
67
+ const isSpeakerScreenSharing = hasScreenShare(participantInSpotlight);
68
+ const hardLimit = useCalculateHardLimit(
69
+ buttonsWrapperElement,
70
+ participantsBarElement,
71
+ participantsBarLimit,
54
72
  );
73
+
74
+ const isVertical =
75
+ participantsBarPosition === 'left' || participantsBarPosition === 'right';
76
+ const isHorizontal =
77
+ participantsBarPosition === 'top' || participantsBarPosition === 'bottom';
55
78
  const isOneOnOneCall = otherParticipants.length === 1;
56
79
 
57
80
  useEffect(() => {
58
- if (!scrollWrapper || !call) return;
81
+ if (!participantsBarWrapperElement || !call) return;
59
82
 
60
- const cleanup = call.setViewport(scrollWrapper);
83
+ const cleanup = call.setViewport(participantsBarWrapperElement);
61
84
  return () => cleanup();
62
- }, [scrollWrapper, call]);
85
+ }, [participantsBarWrapperElement, call]);
63
86
 
64
87
  useEffect(() => {
65
88
  if (!call) return;
@@ -79,11 +102,28 @@ export const SpeakerLayout = ({
79
102
  };
80
103
  }, [call, isOneOnOneCall]);
81
104
 
105
+ let participantsWithAppliedLimit = otherParticipants;
106
+
107
+ if (typeof participantsBarLimit !== 'undefined') {
108
+ const hardLimitToApply = isVertical
109
+ ? hardLimit.vertical
110
+ : hardLimit.horizontal;
111
+
112
+ participantsWithAppliedLimit = otherParticipants.slice(
113
+ 0,
114
+ // subtract 1 if speaker is sharing screen as
115
+ // that one is rendered independently from otherParticipants array
116
+ hardLimitToApply - (isSpeakerScreenSharing ? 1 : 0),
117
+ );
118
+ }
119
+
82
120
  if (!call) return null;
83
121
 
84
- const isSpeakerScreenSharing = hasScreenShare(participantInSpotlight);
85
122
  return (
86
123
  <div className="str-video__speaker-layout__wrapper">
124
+ {remoteParticipants.map((participant) => (
125
+ <Audio key={participant.sessionId} participant={participant} />
126
+ ))}
87
127
  <div
88
128
  className={clsx(
89
129
  'str-video__speaker-layout',
@@ -95,7 +135,7 @@ export const SpeakerLayout = ({
95
135
  {participantInSpotlight && (
96
136
  <ParticipantView
97
137
  participant={participantInSpotlight}
98
- muteAudio={isSpeakerScreenSharing}
138
+ muteAudio={true}
99
139
  trackType={
100
140
  isSpeakerScreenSharing ? 'screenShareTrack' : 'videoTrack'
101
141
  }
@@ -104,13 +144,19 @@ export const SpeakerLayout = ({
104
144
  />
105
145
  )}
106
146
  </div>
107
- {otherParticipants.length > 0 && participantsBarPosition && (
108
- <div className="str-video__speaker-layout__participants-bar-buttons-wrapper">
147
+ {participantsWithAppliedLimit.length > 0 && participantsBarPosition && (
148
+ <div
149
+ ref={setButtonsWrapperElement}
150
+ className="str-video__speaker-layout__participants-bar-buttons-wrapper"
151
+ >
109
152
  <div
110
153
  className="str-video__speaker-layout__participants-bar-wrapper"
111
- ref={setScrollWrapper}
154
+ ref={setParticipantsBarWrapperElement}
112
155
  >
113
- <div className="str-video__speaker-layout__participants-bar">
156
+ <div
157
+ ref={setParticipantsBarElement}
158
+ className="str-video__speaker-layout__participants-bar"
159
+ >
114
160
  {isSpeakerScreenSharing && (
115
161
  <div
116
162
  className="str-video__speaker-layout__participant-tile"
@@ -120,10 +166,11 @@ export const SpeakerLayout = ({
120
166
  participant={participantInSpotlight}
121
167
  ParticipantViewUI={ParticipantViewUIBar}
122
168
  VideoPlaceholder={VideoPlaceholder}
169
+ muteAudio={true}
123
170
  />
124
171
  </div>
125
172
  )}
126
- {otherParticipants.map((participant) => (
173
+ {participantsWithAppliedLimit.map((participant) => (
127
174
  <div
128
175
  className="str-video__speaker-layout__participant-tile"
129
176
  key={participant.sessionId}
@@ -132,18 +179,21 @@ export const SpeakerLayout = ({
132
179
  participant={participant}
133
180
  ParticipantViewUI={ParticipantViewUIBar}
134
181
  VideoPlaceholder={VideoPlaceholder}
182
+ muteAudio={true}
135
183
  />
136
184
  </div>
137
185
  ))}
138
186
  </div>
139
187
  </div>
140
- {(participantsBarPosition === 'left' ||
141
- participantsBarPosition === 'right') && (
142
- <VerticalScrollButtons scrollWrapper={scrollWrapper} />
188
+ {isVertical && (
189
+ <VerticalScrollButtons
190
+ scrollWrapper={participantsBarWrapperElement}
191
+ />
143
192
  )}
144
- {(participantsBarPosition === 'top' ||
145
- participantsBarPosition === 'bottom') && (
146
- <HorizontalScrollButtons scrollWrapper={scrollWrapper} />
193
+ {isHorizontal && (
194
+ <HorizontalScrollButtons
195
+ scrollWrapper={participantsBarWrapperElement}
196
+ />
147
197
  )}
148
198
  </div>
149
199
  )}
@@ -0,0 +1,72 @@
1
+ import { useEffect, useState } from 'react';
2
+
3
+ export const useCalculateHardLimit = (
4
+ /**
5
+ * Element that stretches to 100% of the whole layout component
6
+ */
7
+ wrapperElement: HTMLDivElement | null,
8
+ /**
9
+ * Element that directly hosts individual `ParticipantView` (or wrapper) elements
10
+ */
11
+ hostElement: HTMLDivElement | null,
12
+ limit?: 'dynamic' | number,
13
+ ) => {
14
+ const [calculatedLimit, setCalculatedLimit] = useState<{
15
+ vertical: number;
16
+ horizontal: number;
17
+ }>({
18
+ vertical: typeof limit === 'number' ? limit : 1,
19
+ horizontal: typeof limit === 'number' ? limit : 1,
20
+ });
21
+
22
+ useEffect(() => {
23
+ if (
24
+ !hostElement ||
25
+ !wrapperElement ||
26
+ typeof limit === 'number' ||
27
+ typeof limit === 'undefined'
28
+ )
29
+ return;
30
+
31
+ let childWidth: number | null = null;
32
+ let childHeight: number | null = null;
33
+
34
+ const resizeObserver = new ResizeObserver((entries, observer) => {
35
+ // this part should ideally run as little times as possible
36
+ // get child measurements and disconnect
37
+ // does not consider dynamically sized children
38
+ // this hook is for SpeakerLayout use only, where children in the bar are fixed size
39
+ if (entries.length > 1) {
40
+ const child = hostElement.firstChild as HTMLElement | null;
41
+
42
+ if (child) {
43
+ childHeight = child.clientHeight;
44
+ childWidth = child.clientWidth;
45
+ observer.unobserve(hostElement);
46
+ }
47
+ }
48
+
49
+ // keep the state at { vertical: 1, horizontal: 1 }
50
+ // until we get the proper child measurements
51
+ if (childHeight === null || childWidth === null) return;
52
+
53
+ const vertical = Math.floor(wrapperElement.clientHeight / childHeight);
54
+ const horizontal = Math.floor(wrapperElement.clientWidth / childWidth);
55
+
56
+ setCalculatedLimit((pv) => {
57
+ if (pv.vertical !== vertical || pv.horizontal !== horizontal)
58
+ return { vertical, horizontal };
59
+ return pv;
60
+ });
61
+ });
62
+
63
+ resizeObserver.observe(wrapperElement);
64
+ resizeObserver.observe(hostElement);
65
+
66
+ return () => {
67
+ resizeObserver.disconnect();
68
+ };
69
+ }, [hostElement, limit, wrapperElement]);
70
+
71
+ return calculatedLimit;
72
+ };
@@ -63,6 +63,10 @@
63
63
  "{{ direction }} fullscreen": "{{ direction }} fullscreen",
64
64
  "{{ direction }} picture-in-picture": "{{ direction }} picture-in-picture",
65
65
 
66
+ "Participants": "Participants",
67
+ "Anonymous": ", and ({{ count }}) anonymous",
68
+ "No participants found": "No participants found",
69
+
66
70
  "Participants ({{ numberOfParticipants }})": "Participants ({{ numberOfParticipants }})",
67
71
  "{{ userName }} is sharing their screen": "{{ userName }} is sharing their screen",
68
72
  "{{ userName }} is requesting to speak": "{{ userName }} is requesting to speak",