@100mslive/roomkit-react 0.3.24-alpha.0 → 0.3.24-alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. package/dist/Theme/ThemeProvider.d.ts +1 -0
  2. package/dist/index.cjs.css +2 -2
  3. package/dist/index.cjs.css.map +1 -1
  4. package/dist/index.cjs.js +34109 -37488
  5. package/dist/index.cjs.js.map +4 -4
  6. package/dist/index.css +2 -2
  7. package/dist/index.css.map +1 -1
  8. package/dist/index.js +36389 -73
  9. package/dist/index.js.map +4 -4
  10. package/dist/meta.cjs.json +5568 -5617
  11. package/dist/meta.esbuild.json +6032 -8744
  12. package/package.json +7 -7
  13. package/src/Prebuilt/App.tsx +3 -6
  14. package/src/Prebuilt/components/Chat/Chat.tsx +8 -12
  15. package/src/Prebuilt/components/Footer/WhiteboardToggle.tsx +11 -4
  16. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +3 -3
  17. package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +3 -0
  18. package/src/Prebuilt/components/Preview/PreviewJoin.tsx +3 -2
  19. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +30 -43
  20. package/src/Prebuilt/layouts/HLSView.jsx +2 -3
  21. package/src/Prebuilt/layouts/SidePane.tsx +6 -12
  22. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +64 -69
  23. package/src/Theme/ThemeProvider.tsx +9 -3
  24. package/dist/ConferenceScreen-CLPW3BGP.css +0 -2780
  25. package/dist/ConferenceScreen-CLPW3BGP.css.map +0 -7
  26. package/dist/ConferenceScreen-M6RBPTAJ.js +0 -1774
  27. package/dist/ConferenceScreen-M6RBPTAJ.js.map +0 -7
  28. package/dist/EmbedView-DDSO7ZCV.js +0 -17
  29. package/dist/EmbedView-DDSO7ZCV.js.map +0 -7
  30. package/dist/EmbedView-HGIUZHKA.css +0 -2780
  31. package/dist/EmbedView-HGIUZHKA.css.map +0 -7
  32. package/dist/EmojiReaction-23JDKJD4.js +0 -11
  33. package/dist/EmojiReaction-23JDKJD4.js.map +0 -7
  34. package/dist/HLSView-OW77EAAO.css +0 -2780
  35. package/dist/HLSView-OW77EAAO.css.map +0 -7
  36. package/dist/HLSView-Q6GEB3UM.js +0 -1666
  37. package/dist/HLSView-Q6GEB3UM.js.map +0 -7
  38. package/dist/LeaveScreen-BYTE73MT.js +0 -556
  39. package/dist/LeaveScreen-BYTE73MT.js.map +0 -7
  40. package/dist/LeaveScreen-P7AATEIF.css +0 -2780
  41. package/dist/LeaveScreen-P7AATEIF.css.map +0 -7
  42. package/dist/MoreSettings-LV5X2U6K.css +0 -2780
  43. package/dist/MoreSettings-LV5X2U6K.css.map +0 -7
  44. package/dist/MoreSettings-WSHMMNOC.js +0 -16
  45. package/dist/MoreSettings-WSHMMNOC.js.map +0 -7
  46. package/dist/PDFView-RIPRIIH6.css +0 -2780
  47. package/dist/PDFView-RIPRIIH6.css.map +0 -7
  48. package/dist/PDFView-ZFSG2ESE.js +0 -84
  49. package/dist/PDFView-ZFSG2ESE.js.map +0 -7
  50. package/dist/Polls-QWW5LTTB.js +0 -1584
  51. package/dist/Polls-QWW5LTTB.js.map +0 -7
  52. package/dist/Polls-ULYGUPPF.css +0 -2780
  53. package/dist/Polls-ULYGUPPF.css.map +0 -7
  54. package/dist/RaiseHand-K7NFLH7H.js +0 -10
  55. package/dist/RaiseHand-K7NFLH7H.js.map +0 -7
  56. package/dist/RoleProminence-235AFT7F.js +0 -116
  57. package/dist/RoleProminence-235AFT7F.js.map +0 -7
  58. package/dist/RoleProminence-6XN3POS5.css +0 -2780
  59. package/dist/RoleProminence-6XN3POS5.css.map +0 -7
  60. package/dist/RoomDetailsPane-O5TFMTPI.css +0 -2780
  61. package/dist/RoomDetailsPane-O5TFMTPI.css.map +0 -7
  62. package/dist/RoomDetailsPane-RF3D3TDR.js +0 -53
  63. package/dist/RoomDetailsPane-RF3D3TDR.js.map +0 -7
  64. package/dist/ScreenshareLayout-KNEB3AJJ.css +0 -2780
  65. package/dist/ScreenshareLayout-KNEB3AJJ.css.map +0 -7
  66. package/dist/ScreenshareLayout-PSQMS3NC.js +0 -358
  67. package/dist/ScreenshareLayout-PSQMS3NC.js.map +0 -7
  68. package/dist/SidePaneTabs-I6DECE5R.css +0 -2780
  69. package/dist/SidePaneTabs-I6DECE5R.css.map +0 -7
  70. package/dist/SidePaneTabs-NXHBI2JB.js +0 -1354
  71. package/dist/SidePaneTabs-NXHBI2JB.js.map +0 -7
  72. package/dist/VBPicker-2CQ3IIO7.js +0 -322
  73. package/dist/VBPicker-2CQ3IIO7.js.map +0 -7
  74. package/dist/VBPicker-DCNYGO23.css +0 -2780
  75. package/dist/VBPicker-DCNYGO23.css.map +0 -7
  76. package/dist/WaitingView-NZIUOXBI.js +0 -10
  77. package/dist/WaitingView-NZIUOXBI.js.map +0 -7
  78. package/dist/WhiteboardLayout-4YLFM3EY.js +0 -96
  79. package/dist/WhiteboardLayout-4YLFM3EY.js.map +0 -7
  80. package/dist/WhiteboardLayout-JUOBDFKY.css +0 -2780
  81. package/dist/WhiteboardLayout-JUOBDFKY.css.map +0 -7
  82. package/dist/chunk-3C7IESSI.js +0 -254
  83. package/dist/chunk-3C7IESSI.js.map +0 -7
  84. package/dist/chunk-7FD3VT6Q.js +0 -114
  85. package/dist/chunk-7FD3VT6Q.js.map +0 -7
  86. package/dist/chunk-AHI4HCY3.js +0 -62
  87. package/dist/chunk-AHI4HCY3.js.map +0 -7
  88. package/dist/chunk-BGSYLCVD.js +0 -6337
  89. package/dist/chunk-BGSYLCVD.js.map +0 -7
  90. package/dist/chunk-DANANDDE.js +0 -418
  91. package/dist/chunk-DANANDDE.js.map +0 -7
  92. package/dist/chunk-ETRNLEWQ.js +0 -2658
  93. package/dist/chunk-ETRNLEWQ.js.map +0 -7
  94. package/dist/chunk-EWPHJFZJ.js +0 -487
  95. package/dist/chunk-EWPHJFZJ.js.map +0 -7
  96. package/dist/chunk-F63YJBI4.js +0 -98
  97. package/dist/chunk-F63YJBI4.js.map +0 -7
  98. package/dist/chunk-GLAJUP3O.js +0 -576
  99. package/dist/chunk-GLAJUP3O.js.map +0 -7
  100. package/dist/chunk-GOXRTCTY.js +0 -90
  101. package/dist/chunk-GOXRTCTY.js.map +0 -7
  102. package/dist/chunk-HMCBZI3A.js +0 -59
  103. package/dist/chunk-HMCBZI3A.js.map +0 -7
  104. package/dist/chunk-HVYTC3PX.js +0 -171
  105. package/dist/chunk-HVYTC3PX.js.map +0 -7
  106. package/dist/chunk-LJVP6AWF.js +0 -262
  107. package/dist/chunk-LJVP6AWF.js.map +0 -7
  108. package/dist/chunk-LXJGCRKM.js +0 -30
  109. package/dist/chunk-LXJGCRKM.js.map +0 -7
  110. package/dist/chunk-MG3UGW66.js +0 -16800
  111. package/dist/chunk-MG3UGW66.js.map +0 -7
  112. package/dist/chunk-MUKUP7JU.js +0 -161
  113. package/dist/chunk-MUKUP7JU.js.map +0 -7
  114. package/dist/chunk-OV6MVDCL.js +0 -41
  115. package/dist/chunk-OV6MVDCL.js.map +0 -7
  116. package/dist/chunk-P6NV2XO4.js +0 -178
  117. package/dist/chunk-P6NV2XO4.js.map +0 -7
  118. package/dist/chunk-REL3HBSD.js +0 -71
  119. package/dist/chunk-REL3HBSD.js.map +0 -7
  120. package/dist/chunk-U4SQBXPZ.js +0 -830
  121. package/dist/chunk-U4SQBXPZ.js.map +0 -7
  122. package/dist/chunk-YEL5ZTFU.js +0 -136
  123. package/dist/chunk-YEL5ZTFU.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/Prebuilt/components/Footer/ParticipantList.tsx", "../src/Prebuilt/components/RemoveParticipant.tsx", "../src/Prebuilt/components/Footer/RoleAccordion.tsx", "../src/Prebuilt/components/Footer/RoleOptions.tsx", "../src/Prebuilt/components/hooks/useGroupOnStageActions.tsx", "../src/Prebuilt/components/hooks/usePeerOnStageActions.tsx"],
4
- "sourcesContent": ["import React, { Fragment, useCallback, useState } from 'react';\nimport { useDebounce, useMedia } from 'react-use';\nimport {\n HMSPeer,\n HMSPeerType,\n HMSRoleName,\n selectAvailableRoleNames,\n selectHandRaisedPeers,\n selectHasPeerHandRaised,\n selectIsLargeRoom,\n selectIsPeerAudioEnabled,\n selectLocalPeerID,\n selectPeerCount,\n selectPermissions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport {\n AddIcon,\n CallIcon,\n ChangeRoleIcon,\n CrossIcon,\n HandIcon,\n MicOffIcon,\n PeopleIcon,\n PersonSettingsIcon,\n SearchIcon,\n VerticalMenuIcon,\n} from '@100mslive/react-icons';\nimport { Accordion, Box, Button, config as cssConfig, Dropdown, Flex, Input, Text, textEllipsis } from '../../..';\n// @ts-ignore: No implicit Any\nimport IconButton from '../../IconButton';\nimport { ConnectionIndicator } from '../Connection/ConnectionIndicator';\nimport { RemoveParticipant } from '../RemoveParticipant';\nimport { RoleChangeModal } from '../RoleChangeModal';\nimport { RoleAccordion } from './RoleAccordion';\nimport { useRoomLayoutConferencingScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';\n// @ts-ignore: No implicit Any\nimport { useIsSidepaneTypeOpen, useSidepaneToggle } from '../AppData/useSidepane';\nimport { useSidepaneResetOnLayoutUpdate } from '../AppData/useSidepaneResetOnLayoutUpdate';\nimport { usePeerOnStageActions } from '../hooks/usePeerOnStageActions';\nimport { useParticipants } from '../../common/hooks';\n// @ts-ignore: No implicit Any\nimport { getFormattedCount } from '../../common/utils';\nimport { SIDE_PANE_OPTIONS } from '../../common/constants';\n\nexport const ParticipantList = ({\n offStageRoles = [],\n onActive,\n}: {\n offStageRoles: HMSRoleName[];\n onActive: (role: string) => void;\n}) => {\n const [filter, setFilter] = useState<{ search?: string } | undefined>();\n const { participants, isConnected, peerCount } = useParticipants(filter);\n const isLargeRoom = useHMSStore(selectIsLargeRoom);\n const peersOrderedByRoles: Record<string, HMSPeer[]> = {};\n\n const handRaisedPeers = useHMSStore(selectHandRaisedPeers);\n\n participants.forEach(participant => {\n if (participant.roleName) {\n if (peersOrderedByRoles[participant.roleName] === undefined) {\n peersOrderedByRoles[participant.roleName] = [];\n }\n peersOrderedByRoles[participant.roleName].push(participant);\n }\n });\n\n // prefill off_stage roles of large rooms to load more peers\n if (isLargeRoom) {\n offStageRoles.forEach(role => {\n if (!peersOrderedByRoles[role]) {\n peersOrderedByRoles[role] = [];\n }\n });\n }\n\n useSidepaneResetOnLayoutUpdate('participant_list', SIDE_PANE_OPTIONS.PARTICIPANTS);\n\n const onSearch = useCallback((value: string) => {\n setFilter(filterValue => {\n if (!filterValue) {\n filterValue = {};\n }\n filterValue.search = value.toLowerCase();\n return { ...filterValue };\n });\n }, []);\n\n if (peerCount === 0) {\n return null;\n }\n\n return (\n <Fragment>\n <Flex\n direction=\"column\"\n css={{\n size: '100%',\n gap: '$4',\n }}\n >\n {!filter?.search && participants.length === 0 ? null : <ParticipantSearch onSearch={onSearch} inSidePane />}\n <VirtualizedParticipants\n peersOrderedByRoles={peersOrderedByRoles}\n handRaisedList={handRaisedPeers}\n isConnected={!!isConnected}\n filter={filter}\n offStageRoles={offStageRoles}\n isLargeRoom={isLargeRoom}\n onActive={onActive}\n >\n {participants.length === 0 ? (\n <Flex\n align=\"center\"\n justify=\"center\"\n className=\"emptyParticipants\"\n css={{ w: '100%', p: '$8 0', display: 'none' }}\n >\n <Text variant=\"sm\">{!filter ? 'No participants' : 'No matching participants'}</Text>\n </Flex>\n ) : null}\n </VirtualizedParticipants>\n </Flex>\n </Fragment>\n );\n};\n\nexport const ParticipantCount = () => {\n const peerCount = useHMSStore(selectPeerCount);\n const toggleSidepane = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);\n const isPeerListOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.PARTICIPANTS);\n\n if (peerCount === 0) {\n return null;\n }\n return (\n <IconButton\n css={{\n w: 'auto',\n p: '$4',\n h: 'auto',\n bg: isPeerListOpen ? '$surface_brighter' : '',\n }}\n onClick={() => {\n if (peerCount > 0) {\n toggleSidepane();\n }\n }}\n data-testid=\"participant_list\"\n >\n <PeopleIcon />\n <Text variant=\"sm\" css={{ mx: '$4', c: 'inherit' }}>\n {getFormattedCount(peerCount)}\n </Text>\n </IconButton>\n );\n};\n\nexport const Participant = ({\n peer,\n isConnected,\n isHandRaisedAccordion,\n style,\n}: {\n peer: HMSPeer;\n isConnected: boolean;\n isHandRaisedAccordion?: boolean;\n style: React.CSSProperties;\n}) => {\n const localPeerId = useHMSStore(selectLocalPeerID);\n return (\n <Flex\n key={peer.id}\n css={{\n w: '100%',\n p: '$4 $8',\n pr: '$6',\n h: '$16',\n '&:hover .participant_item': { display: 'flex' },\n }}\n align=\"center\"\n justify=\"between\"\n data-testid={'participant_' + peer.name}\n style={style}\n >\n <Text\n variant=\"sm\"\n css={{ ...textEllipsis('100%'), flex: '1 1 0', mr: '$8', fontWeight: '$semiBold', color: '$on_surface_high' }}\n >\n {peer.name} {localPeerId === peer.id ? '(You)' : ''}\n </Text>\n {isConnected && peer.roleName ? (\n <ParticipantActions\n peerId={peer.id}\n peerType={peer.type}\n role={peer.roleName}\n isHandRaisedAccordion={isHandRaisedAccordion}\n />\n ) : null}\n </Flex>\n );\n};\n\nconst VirtualizedParticipants = ({\n peersOrderedByRoles = {},\n isConnected,\n filter,\n handRaisedList = [],\n offStageRoles,\n isLargeRoom,\n onActive,\n children,\n}: {\n peersOrderedByRoles: Record<string, HMSPeer[]>;\n isConnected: boolean;\n filter: undefined | { search?: string };\n handRaisedList: HMSPeer[];\n offStageRoles: HMSRoleName[];\n isLargeRoom: boolean;\n onActive: (role: string) => void;\n children: React.ReactNode;\n}) => {\n return (\n <Flex\n direction=\"column\"\n css={{\n gap: '$8',\n overflowY: 'auto',\n overflowX: 'hidden',\n pr: '$10',\n mr: '-$10',\n flex: '1 1 0',\n '& > div:empty ~ .emptyParticipants': {\n display: 'flex',\n },\n }}\n >\n <Accordion.Root type={isLargeRoom ? 'single' : 'multiple'} collapsible>\n {handRaisedList.length > 0 ? (\n <RoleAccordion\n peerList={handRaisedList}\n roleName=\"Hand Raised\"\n filter={filter}\n isConnected={isConnected}\n isHandRaisedAccordion\n offStageRoles={offStageRoles}\n />\n ) : null}\n {Object.keys(peersOrderedByRoles).map(role => (\n <RoleAccordion\n key={role}\n peerList={peersOrderedByRoles[role]}\n roleName={role}\n isConnected={isConnected}\n filter={filter}\n offStageRoles={offStageRoles}\n onActive={onActive}\n />\n ))}\n </Accordion.Root>\n {children}\n </Flex>\n );\n};\n\n/**\n * shows settings to change for a participant like changing their role\n */\nconst ParticipantActions = React.memo(\n ({\n peerId,\n peerType,\n role,\n isHandRaisedAccordion,\n }: {\n peerId: string;\n role: string;\n isHandRaisedAccordion?: boolean;\n peerType: HMSPeerType;\n }) => {\n const isHandRaised = useHMSStore(selectHasPeerHandRaised(peerId));\n const canChangeRole = useHMSStore(selectPermissions)?.changeRole;\n const canRemoveOthers = useHMSStore(selectPermissions)?.removeOthers;\n const { elements } = useRoomLayoutConferencingScreen();\n const { on_stage_exp } = elements || {};\n const shouldShowMoreActions = (on_stage_exp && canChangeRole) || canRemoveOthers;\n const isAudioMuted = !useHMSStore(selectIsPeerAudioEnabled(peerId));\n\n return (\n <Flex\n align=\"center\"\n css={{\n flexShrink: 0,\n gap: '$8',\n }}\n >\n {isHandRaisedAccordion ? (\n <HandRaisedAccordionParticipantActions peerId={peerId} role={role} />\n ) : (\n <>\n <ConnectionIndicator peerId={peerId} />\n {peerType === HMSPeerType.SIP && (\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{ p: '$1', c: '$on_surface_high', bg: '$surface_bright', borderRadius: '$round' }}\n >\n <CallIcon width={19} height={19} />\n </Flex>\n )}\n {isHandRaised && (\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{ p: '$1', c: '$on_surface_high', bg: '$surface_bright', borderRadius: '$round' }}\n >\n <HandIcon height={19} width={19} />\n </Flex>\n )}\n {isAudioMuted ? (\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{ p: '$2', c: '$on_surface_high', bg: '$surface_bright', borderRadius: '$round' }}\n >\n <MicOffIcon height={19} width={19} />\n </Flex>\n ) : null}\n\n {shouldShowMoreActions ? <ParticipantMoreActions peerId={peerId} role={role} /> : null}\n </>\n )}\n </Flex>\n );\n },\n);\n\nconst quickActionStyle = { p: '$1', borderRadius: '$round' };\nconst HandRaisedAccordionParticipantActions = ({ peerId, role }: { peerId: string; role: string }) => {\n const { handleStageAction, lowerPeerHand, shouldShowStageRoleChange, isInStage } = usePeerOnStageActions({\n peerId,\n role,\n });\n if (!shouldShowStageRoleChange) {\n return null;\n }\n return (\n <>\n <Button variant=\"standard\" css={quickActionStyle} onClick={lowerPeerHand}>\n <CrossIcon height={18} width={18} />\n </Button>\n {!isInStage && (\n <Button variant=\"primary\" onClick={handleStageAction} css={quickActionStyle}>\n <AddIcon height={18} width={18} />\n </Button>\n )}\n </>\n );\n};\n\nconst ParticipantMoreActions = ({ peerId, role }: { peerId: string; role: string }) => {\n const {\n open,\n setOpen,\n bring_to_stage_label,\n remove_from_stage_label,\n handleStageAction,\n isInStage,\n shouldShowStageRoleChange,\n } = usePeerOnStageActions({ peerId, role });\n const canChangeRole = !!useHMSStore(selectPermissions)?.changeRole;\n const [openRoleChangeModal, setOpenRoleChangeModal] = useState(false);\n const roles = useHMSStore(selectAvailableRoleNames);\n\n return (\n <>\n <Dropdown.Root open={open} onOpenChange={value => setOpen(value)} modal={false}>\n <Dropdown.Trigger\n asChild\n data-testid=\"participant_more_actions\"\n className=\"participant_item\"\n css={{\n p: '$1',\n r: '$0',\n c: '$on_surface_high',\n display: open ? 'flex' : 'none',\n '&:hover': {\n bg: '$surface_bright',\n },\n '@md': {\n display: 'flex',\n },\n }}\n tabIndex={0}\n >\n <Box css={{ my: 'auto' }}>\n <VerticalMenuIcon />\n </Box>\n </Dropdown.Trigger>\n <Dropdown.Portal>\n <Dropdown.Content align=\"end\" sideOffset={8} css={{ w: '$64', bg: '$surface_default' }}>\n {shouldShowStageRoleChange ? (\n <Dropdown.Item css={{ bg: '$surface_default' }} onClick={() => handleStageAction()}>\n <ChangeRoleIcon />\n <Text variant=\"sm\" css={{ ml: '$4', fontWeight: '$semiBold', c: '$on_surface_high' }}>\n {isInStage ? remove_from_stage_label : bring_to_stage_label}\n </Text>\n </Dropdown.Item>\n ) : null}\n\n {canChangeRole && roles.length > 1 ? (\n <Dropdown.Item css={{ bg: '$surface_default' }} onClick={() => setOpenRoleChangeModal(true)}>\n <PersonSettingsIcon />\n <Text variant=\"sm\" css={{ ml: '$4', fontWeight: '$semiBold', c: '$on_surface_high' }}>\n Switch Role\n </Text>\n </Dropdown.Item>\n ) : null}\n <RemoveParticipant peerId={peerId} />\n </Dropdown.Content>\n </Dropdown.Portal>\n </Dropdown.Root>\n {openRoleChangeModal && <RoleChangeModal peerId={peerId} onOpenChange={setOpenRoleChangeModal} />}\n </>\n );\n};\n\nexport const ParticipantSearch = ({\n onSearch,\n placeholder = 'Search for participants',\n inSidePane = false,\n}: {\n inSidePane?: boolean;\n placeholder?: string;\n onSearch: (val: string) => void;\n}) => {\n const [value, setValue] = React.useState('');\n const isMobile = useMedia(cssConfig.media.md);\n\n useDebounce(\n () => {\n onSearch(value);\n },\n 300,\n [value, onSearch],\n );\n\n return (\n <Flex\n align=\"center\"\n css={{\n p: isMobile ? '0' : '$2 0',\n mb: '$2',\n position: 'relative',\n color: '$on_surface_medium',\n mt: inSidePane ? '$4' : '',\n }}\n onClick={e => e.stopPropagation()}\n >\n <SearchIcon style={{ position: 'absolute', left: '0.5rem' }} />\n <Input\n type=\"text\"\n placeholder={placeholder}\n css={{ w: '100%', p: '$6', pl: '$14', bg: inSidePane ? '$surface_default' : '$surface_dim' }}\n value={value}\n onKeyDown={event => {\n event.stopPropagation();\n }}\n onChange={event => {\n setValue(event.currentTarget.value);\n }}\n autoComplete=\"off\"\n aria-autocomplete=\"none\"\n />\n </Flex>\n );\n};\n", "import React from 'react';\nimport { HMSPeerID, selectLocalPeerID, selectPermissions, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { PeopleRemoveIcon } from '@100mslive/react-icons';\n// @ts-ignore: No implicit Any\nimport { ToastManager } from './Toast/ToastManager';\nimport { Dropdown } from '../../Dropdown';\nimport { Text } from '../../Text';\n\nexport const RemoveParticipant = ({ peerId }: { peerId: HMSPeerID }) => {\n const canRemoveOthers = useHMSStore(selectPermissions)?.removeOthers;\n const localPeerId = useHMSStore(selectLocalPeerID);\n const actions = useHMSActions();\n\n if (peerId === localPeerId || !canRemoveOthers) {\n return null;\n }\n return (\n <Dropdown.Item\n css={{ color: '$alert_error_default', bg: '$surface_default' }}\n onClick={async () => {\n try {\n await actions.removePeer(peerId, '');\n } catch (error) {\n const ex = error as Error;\n ToastManager.addToast({ title: ex.message, variant: 'error' });\n }\n }}\n >\n <PeopleRemoveIcon />\n <Text variant=\"sm\" css={{ ml: '$4', color: 'inherit', fontWeight: '$semiBold' }}>\n Remove Participant\n </Text>\n </Dropdown.Item>\n );\n};\n", "import React, { useEffect } from 'react';\nimport { useMeasure } from 'react-use';\nimport { FixedSizeList } from 'react-window';\nimport { HMSPeer, selectIsLargeRoom, useHMSStore, usePaginatedParticipants } from '@100mslive/react-sdk';\nimport { AddIcon, ChevronRightIcon, CrossIcon } from '@100mslive/react-icons';\nimport { Accordion } from '../../../Accordion';\nimport { Button } from '../../../Button';\nimport { HorizontalDivider } from '../../../Divider';\nimport { Flex } from '../../../Layout';\nimport { Text } from '../../../Text';\nimport { Participant } from './ParticipantList';\nimport { RoleOptions } from './RoleOptions';\nimport { useGroupOnStageActions } from '../hooks/useGroupOnStageActions';\n// @ts-ignore: No implicit Any\nimport { getFormattedCount } from '../../common/utils';\n\nexport const ROW_HEIGHT = 50;\nconst ITER_TIMER = 5000;\n\nexport interface ItemData {\n peerList: HMSPeer[];\n isHandRaisedAccordion?: boolean;\n isConnected: boolean;\n}\n\nexport function itemKey(index: number, data: ItemData) {\n return data.peerList[index]?.id;\n}\n\nexport const VirtualizedParticipantItem = React.memo(\n ({ index, data, style }: { index: number; data: ItemData; style: React.CSSProperties }) => {\n return (\n <Participant\n key={data.peerList[index].id}\n peer={data.peerList[index]}\n isHandRaisedAccordion={data.isHandRaisedAccordion}\n isConnected={data.isConnected}\n style={style}\n />\n );\n },\n);\n\nexport const RoleAccordion = ({\n peerList = [],\n roleName,\n isConnected,\n filter,\n isHandRaisedAccordion = false,\n offStageRoles,\n onActive,\n}: ItemData & {\n roleName: string;\n isHandRaisedAccordion?: boolean;\n filter?: { search?: string };\n offStageRoles: string[];\n onActive?: (role: string) => void;\n}) => {\n const [ref, { width }] = useMeasure<HTMLDivElement>();\n const isLargeRoom = useHMSStore(selectIsLargeRoom);\n const { peers, total, loadPeers } = usePaginatedParticipants({ role: roleName, limit: 10 });\n const isOffStageRole = roleName && offStageRoles.includes(roleName);\n let peersInAccordion = peerList;\n // for large rooms, peer list would be empty\n if (isOffStageRole && isLargeRoom) {\n peersInAccordion = peers;\n if (filter?.search) {\n peersInAccordion = peersInAccordion.filter(peer => peer.name.toLowerCase().includes(filter.search || ''));\n }\n }\n const { bringAllToStage, bring_to_stage_label, canBringToStage, lowerAllHands } = useGroupOnStageActions({\n peers: peersInAccordion,\n });\n\n useEffect(() => {\n if (!isOffStageRole || !isLargeRoom) {\n return;\n }\n loadPeers();\n const interval = setInterval(() => {\n loadPeers();\n }, ITER_TIMER);\n return () => clearInterval(interval);\n }, [isOffStageRole, isLargeRoom]); //eslint-disable-line\n\n if (peersInAccordion.length === 0 || (isHandRaisedAccordion && filter?.search)) {\n return null;\n }\n\n const height = ROW_HEIGHT * peersInAccordion.length;\n const hasNext = total > peersInAccordion.length && !filter?.search;\n\n return (\n <Accordion.Item value={roleName} css={{ '&:hover .role_actions': { visibility: 'visible' }, mb: '$8' }} ref={ref}>\n <Accordion.Header\n chevronID={`role_accordion_btn_${roleName}`}\n iconStyles={{ c: '$on_surface_high' }}\n css={{\n textTransform: 'capitalize',\n p: '$6 $8',\n fontSize: '$sm',\n fontWeight: '$semiBold',\n c: '$on_surface_medium',\n borderRadius: '$1',\n border: '1px solid $border_default',\n '&[data-state=\"open\"]': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n }}\n >\n <Flex justify=\"between\" align=\"center\" css={{ flexGrow: 1, pr: '$6' }}>\n <Text\n variant=\"sm\"\n css={{ fontWeight: '$semiBold', textTransform: 'capitalize', color: '$on_surface_medium' }}\n >\n {roleName} {`(${getFormattedCount(isLargeRoom && isOffStageRole ? total : peerList.length)})`}\n </Text>\n <RoleOptions roleName={roleName} peerList={peersInAccordion} />\n </Flex>\n </Accordion.Header>\n <Accordion.Content contentStyles={{ border: '1px solid $border_default', borderTop: 'none' }}>\n <FixedSizeList\n itemSize={ROW_HEIGHT}\n itemData={{\n peerList: isHandRaisedAccordion\n ? peersInAccordion.sort((a, b) => {\n try {\n const aHandRaisedAt = JSON.parse(a.metadata || '{}').handRaisedAt;\n const bHandRaisedAt = JSON.parse(b.metadata || '{}').handRaisedAt;\n return aHandRaisedAt - bHandRaisedAt;\n } catch (err) {\n return 0;\n }\n })\n : peersInAccordion,\n isConnected,\n isHandRaisedAccordion,\n }}\n itemKey={itemKey}\n itemCount={peersInAccordion.length}\n width={width}\n height={height}\n >\n {VirtualizedParticipantItem}\n </FixedSizeList>\n {offStageRoles?.includes(roleName) && hasNext ? (\n <Flex\n align=\"center\"\n justify=\"end\"\n css={{\n gap: '$1',\n cursor: 'pointer',\n color: '$on_surface_high',\n p: '$6',\n borderTop: '1px solid $border_default',\n }}\n onClick={() => onActive?.(roleName)}\n >\n <Text variant=\"sm\" css={{ color: 'inherit' }}>\n View All\n </Text>\n <ChevronRightIcon />\n </Flex>\n ) : null}\n {isHandRaisedAccordion && canBringToStage && (\n <>\n <HorizontalDivider />\n <Flex css={{ w: '100%', p: '$6', gap: '$4' }} justify=\"center\">\n <Button variant=\"standard\" onClick={lowerAllHands} icon css={{ pl: '$2' }}>\n <CrossIcon /> Lower all hands\n </Button>\n\n <Button onClick={bringAllToStage} icon css={{ pl: '$2' }}>\n <AddIcon /> {bring_to_stage_label}\n </Button>\n </Flex>\n </>\n )}\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n", "import React, { useState } from 'react';\nimport { DefaultConferencingScreen_Elements } from '@100mslive/types-prebuilt';\nimport { match } from 'ts-pattern';\nimport {\n HMSPeer,\n selectPermissions,\n selectRoleByRoleName,\n selectTracksMap,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport {\n MicOffIcon,\n MicOnIcon,\n PersonRectangleIcon,\n RemoveUserIcon,\n VerticalMenuIcon,\n VideoOffIcon,\n VideoOnIcon,\n} from '@100mslive/react-icons';\nimport { Dropdown } from '../../../Dropdown';\nimport { Flex } from '../../../Layout';\nimport { Text } from '../../../Text';\nimport { useRoomLayoutConferencingScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';\n// @ts-ignore: No implicit Any\nimport { getMetadata } from '../../common/utils';\n\nconst dropdownItemCSS = { backgroundColor: '$surface_default', gap: '$4', p: '$8' };\nconst optionTextCSS = {\n fontWeight: '$semiBold',\n color: '$on_surface_high',\n textTransform: 'none',\n whiteSpace: 'nowrap',\n};\n\nconst DropdownWrapper = ({ children }: { children: React.ReactNode }) => {\n const [openOptions, setOpenOptions] = useState(false);\n if (React.Children.toArray(children).length === 0) {\n return null;\n }\n return (\n <Dropdown.Root open={openOptions} onOpenChange={setOpenOptions}>\n <Dropdown.Trigger\n data-testid=\"role_group_options\"\n onClick={e => e.stopPropagation()}\n className=\"role_actions\"\n asChild\n css={{\n p: '$1',\n r: '$0',\n c: '$on_surface_high',\n visibility: openOptions ? 'visible' : 'hidden',\n '&:hover': {\n c: '$on_surface_medium',\n },\n '@md': {\n visibility: 'visible',\n },\n }}\n >\n <Flex>\n <VerticalMenuIcon />\n </Flex>\n </Dropdown.Trigger>\n <Dropdown.Content\n onClick={e => e.stopPropagation()}\n css={{ w: 'max-content', bg: '$surface_default', py: 0 }}\n align=\"end\"\n >\n {children}\n </Dropdown.Content>\n </Dropdown.Root>\n );\n};\n\nexport const RoleOptions = ({ roleName, peerList }: { roleName: string; peerList: HMSPeer[] }) => {\n const permissions = useHMSStore(selectPermissions);\n const hmsActions = useHMSActions();\n const { elements } = useRoomLayoutConferencingScreen();\n const { on_stage_role, off_stage_roles = [] } = (elements as DefaultConferencingScreen_Elements)?.on_stage_exp || {};\n const canRemoveRoleFromStage = permissions?.changeRole && roleName === on_stage_role;\n const role = useHMSStore(selectRoleByRoleName(roleName));\n const tracks = useHMSStore(selectTracksMap);\n if (!role) {\n return null;\n }\n const canPublishAudio = role.publishParams.allowed.includes('audio');\n const canPublishVideo = role.publishParams.allowed.includes('video');\n\n let isVideoOnForSomePeers = false;\n let isAudioOnForSomePeers = false;\n\n peerList.forEach(peer => {\n if (peer.isLocal) {\n return;\n }\n const isAudioOn = !!peer.audioTrack && tracks[peer.audioTrack]?.enabled;\n const isVideoOn = !!peer.videoTrack && tracks[peer.videoTrack]?.enabled;\n isAudioOnForSomePeers = isAudioOnForSomePeers || isAudioOn;\n isVideoOnForSomePeers = isVideoOnForSomePeers || isVideoOn;\n });\n\n const setTrackEnabled = async (type: 'audio' | 'video', enabled = false) => {\n try {\n await hmsActions.setRemoteTracksEnabled({ roles: [roleName], source: 'regular', type, enabled });\n } catch (e) {\n console.error(e);\n }\n };\n\n // on stage and off stage roles\n const canRemoveRoleFromRoom =\n permissions?.removeOthers && (on_stage_role === roleName || off_stage_roles?.includes(roleName));\n\n if (\n peerList.length === 0 ||\n // if only local peer is present no need to show any options\n (peerList.length === 1 && peerList[0].isLocal) ||\n !role\n ) {\n return null;\n }\n\n const removeAllFromStage = () => {\n peerList.forEach(peer => {\n const prevRole = getMetadata(peer.metadata).prevRole;\n if (prevRole) {\n hmsActions.changeRoleOfPeer(peer.id, prevRole, true);\n }\n });\n };\n\n const removePeersFromRoom = async () => {\n try {\n peerList.forEach(async peer => {\n await hmsActions.removePeer(peer.id, '');\n });\n } catch (e) {\n console.error(e);\n }\n };\n\n return (\n <DropdownWrapper>\n {canRemoveRoleFromStage ? (\n <Dropdown.Item\n css={{ ...dropdownItemCSS, borderBottom: '1px solid $border_bright' }}\n onClick={removeAllFromStage}\n >\n <PersonRectangleIcon />\n <Text variant=\"sm\" css={optionTextCSS}>\n Remove all from Stage\n </Text>\n </Dropdown.Item>\n ) : null}\n\n {match({ canPublishAudio, isAudioOnForSomePeers, canMute: permissions?.mute, canUnmute: permissions?.unmute })\n .with({ canPublishAudio: true, isAudioOnForSomePeers: true, canMute: true }, () => {\n return (\n <Dropdown.Item css={dropdownItemCSS} onClick={() => setTrackEnabled('audio', false)}>\n <MicOffIcon />\n <Text variant=\"sm\" css={optionTextCSS}>\n Mute Audio for All\n </Text>\n </Dropdown.Item>\n );\n })\n .with({ canPublishAudio: true, isAudioOnForSomePeers: false, canUnmute: true }, () => {\n return (\n <Dropdown.Item css={dropdownItemCSS} onClick={() => setTrackEnabled('audio', true)}>\n <MicOnIcon />\n <Text variant=\"sm\" css={optionTextCSS}>\n Request to Unmute Audio for All\n </Text>\n </Dropdown.Item>\n );\n })\n .otherwise(() => null)}\n {match({ canPublishVideo, isVideoOnForSomePeers, canMute: permissions?.mute, canUnmute: permissions?.unmute })\n .with({ canPublishVideo: true, isVideoOnForSomePeers: true, canMute: true }, () => {\n return (\n <Dropdown.Item css={dropdownItemCSS} onClick={() => setTrackEnabled('video', false)}>\n <VideoOffIcon />\n <Text variant=\"sm\" css={optionTextCSS}>\n Mute Video for All\n </Text>\n </Dropdown.Item>\n );\n })\n .with({ canPublishVideo: true, isVideoOnForSomePeers: false, canUnmute: true }, () => {\n return (\n <Dropdown.Item css={dropdownItemCSS} onClick={() => setTrackEnabled('video', true)}>\n <VideoOnIcon />\n <Text variant=\"sm\" css={optionTextCSS}>\n Request to Unmute Video for All\n </Text>\n </Dropdown.Item>\n );\n })\n .otherwise(() => null)}\n\n {canRemoveRoleFromRoom ? (\n <Dropdown.Item\n css={{ ...dropdownItemCSS, borderTop: '1px solid $border_bright', color: '$alert_error_default' }}\n onClick={removePeersFromRoom}\n >\n <RemoveUserIcon />\n <Text variant=\"sm\" css={{ ...optionTextCSS, color: 'inherit' }}>\n Remove all from Room\n </Text>\n </Dropdown.Item>\n ) : null}\n </DropdownWrapper>\n );\n};\n", "import { match, P } from 'ts-pattern';\nimport { HMSPeer, selectPermissions, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { useRoomLayoutConferencingScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';\n\nexport const useGroupOnStageActions = ({ peers }: { peers: HMSPeer[] }) => {\n const hmsActions = useHMSActions();\n const { elements } = useRoomLayoutConferencingScreen();\n const {\n bring_to_stage_label,\n remove_from_stage_label,\n on_stage_role,\n off_stage_roles = [],\n skip_preview_for_role_change = false,\n } = elements.on_stage_exp || {};\n const canChangeRole = useHMSStore(selectPermissions)?.changeRole;\n\n const offStageRolePeers = peers.filter(peer =>\n match({ on_stage_role, bring_to_stage_label, roleName: peer.roleName })\n .with(\n {\n on_stage_role: P.when(role => !!role),\n bring_to_stage_label: P.when(label => !!label),\n roleName: P.when(role => !!role && off_stage_roles.includes(role)),\n },\n () => true,\n )\n .otherwise(() => false),\n );\n\n const lowerAllHands = async () => {\n return Promise.all(peers.map(peer => hmsActions.lowerRemotePeerHand(peer.id)));\n };\n\n const bringAllToStage = () => {\n if (!canChangeRole || !on_stage_role) {\n return;\n }\n return Promise.all(\n offStageRolePeers.map(peer => {\n return hmsActions.changeRoleOfPeer(peer.id, on_stage_role, skip_preview_for_role_change).then(() => {\n return skip_preview_for_role_change ? hmsActions.lowerRemotePeerHand(peer.id) : null;\n });\n }),\n );\n };\n\n return {\n lowerAllHands,\n bringAllToStage,\n canBringToStage: canChangeRole && offStageRolePeers.length > 0,\n bring_to_stage_label,\n remove_from_stage_label,\n };\n};\n", "import { useState } from 'react';\nimport { selectPeerMetadata, selectPermissions, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { useRoomLayoutConferencingScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';\n\nexport const usePeerOnStageActions = ({ peerId, role }: { peerId: string; role: string }) => {\n const hmsActions = useHMSActions();\n const { elements } = useRoomLayoutConferencingScreen();\n const {\n bring_to_stage_label,\n remove_from_stage_label,\n on_stage_role,\n off_stage_roles = [],\n skip_preview_for_role_change = false,\n } = elements.on_stage_exp || {};\n const isInStage = role === on_stage_role;\n const canChangeRole = useHMSStore(selectPermissions)?.changeRole;\n const shouldShowStageRoleChange =\n canChangeRole &&\n ((isInStage && remove_from_stage_label) || (off_stage_roles?.includes(role) && bring_to_stage_label));\n const prevRole = useHMSStore(selectPeerMetadata(peerId))?.prevRole;\n const [open, setOpen] = useState(false);\n\n const lowerPeerHand = async () => {\n await hmsActions.lowerRemotePeerHand(peerId);\n };\n\n const handleStageAction = async () => {\n if (isInStage) {\n prevRole && hmsActions.changeRoleOfPeer(peerId, prevRole, true);\n } else if (on_stage_role) {\n await hmsActions.changeRoleOfPeer(peerId, on_stage_role, skip_preview_for_role_change);\n if (skip_preview_for_role_change) {\n await lowerPeerHand();\n }\n }\n setOpen(false);\n };\n\n return {\n open,\n setOpen,\n lowerPeerHand,\n handleStageAction,\n shouldShowStageRoleChange,\n isInStage,\n bring_to_stage_label,\n remove_from_stage_label,\n };\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useState", "selectIsLargeRoom", "selectLocalPeerID", "selectPermissions", "useHMSStore", "AddIcon", "CrossIcon", "MicOffIcon", "VerticalMenuIcon", "React", "useHMSStore", "React", "selectPermissions", "useHMSActions", "useHMSStore", "React", "useHMSStore", "selectPermissions", "useHMSActions", "match", "selectPermissions", "useHMSActions", "useHMSStore", "useHMSActions", "useHMSStore", "selectPermissions", "match", "React", "useHMSStore", "useState", "selectPermissions", "useHMSActions", "useHMSStore", "useHMSActions", "useHMSStore", "selectPermissions", "useState", "useState", "useHMSStore", "selectIsLargeRoom", "React", "selectLocalPeerID", "selectPermissions", "MicOffIcon", "CrossIcon", "AddIcon", "VerticalMenuIcon"]
7
- }
@@ -1,136 +0,0 @@
1
- import {
2
- useVideoTileContext
3
- } from "./chunk-P6NV2XO4.js";
4
- import {
5
- AudioVideoToggle,
6
- VideoTile_default
7
- } from "./chunk-MG3UGW66.js";
8
- import {
9
- Text
10
- } from "./chunk-MUKUP7JU.js";
11
- import {
12
- Box,
13
- Flex
14
- } from "./chunk-GOXRTCTY.js";
15
- import {
16
- IconButton_default,
17
- useSetAppDataByKey
18
- } from "./chunk-BGSYLCVD.js";
19
- import {
20
- APP_DATA,
21
- __spreadProps,
22
- __spreadValues,
23
- config,
24
- init_define_process_env
25
- } from "./chunk-GLAJUP3O.js";
26
-
27
- // src/Prebuilt/components/InsetTile.tsx
28
- init_define_process_env();
29
- import React, { useEffect, useRef } from "react";
30
- import Draggable from "react-draggable";
31
- import { useMedia } from "react-use";
32
- import {
33
- selectIsAllowedToPublish,
34
- selectLocalPeer,
35
- selectPeerByID,
36
- selectVideoTrackByID,
37
- useHMSStore
38
- } from "@100mslive/react-sdk";
39
- import { ExpandIcon } from "@100mslive/react-icons";
40
- var MinimisedTile = ({ setMinimised }) => {
41
- return /* @__PURE__ */ React.createElement(Flex, { align: "center", css: { gap: "$6", r: "$1", bg: "$surface_default", p: "$4", color: "$on_surface_high" } }, /* @__PURE__ */ React.createElement(AudioVideoToggle, { hideOptions: true }), /* @__PURE__ */ React.createElement(Text, null, "You"), /* @__PURE__ */ React.createElement(
42
- IconButton_default,
43
- {
44
- className: "__cancel-drag-event",
45
- onClick: () => setMinimised(false),
46
- css: { bg: "transparent", border: "transparent" }
47
- },
48
- /* @__PURE__ */ React.createElement(ExpandIcon, null)
49
- ));
50
- };
51
- var insetHeightPx = 180;
52
- var insetMaxWidthPx = 240;
53
- var defaultMobileAspectRatio = 9 / 16;
54
- var desktopAspectRatio = 1 / defaultMobileAspectRatio;
55
- var InsetTile = ({ peerId }) => {
56
- const isMobile = useMedia(config.media.md);
57
- const isLandscape = useMedia(config.media.ls);
58
- const selector = peerId ? selectPeerByID(peerId) : selectLocalPeer;
59
- const peer = useHMSStore(selector);
60
- const [minimised, setMinimised] = useSetAppDataByKey(APP_DATA.minimiseInset);
61
- const videoTrack = useHMSStore(selectVideoTrackByID(peer == null ? void 0 : peer.videoTrack));
62
- const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);
63
- const videoTileProps = useVideoTileContext();
64
- let aspectRatio = isMobile ? defaultMobileAspectRatio : desktopAspectRatio;
65
- if ((videoTrack == null ? void 0 : videoTrack.width) && (videoTrack == null ? void 0 : videoTrack.height) && !isMobile) {
66
- aspectRatio = videoTrack.width / videoTrack.height;
67
- }
68
- let height = insetHeightPx;
69
- let width = height * aspectRatio;
70
- if (isLandscape && width > insetMaxWidthPx) {
71
- width = 240;
72
- height = width / aspectRatio;
73
- }
74
- const nodeRef = useRef(null);
75
- useEffect(() => {
76
- const node = nodeRef.current;
77
- if (!node || !window.ResizeObserver) {
78
- return;
79
- }
80
- const resizeObserver = new ResizeObserver((entries) => {
81
- entries.forEach((entry) => {
82
- if (entry.target === node.parentElement) {
83
- node.style.transform = `translate(0,0)`;
84
- }
85
- });
86
- });
87
- node.parentElement && resizeObserver.observe(node.parentElement);
88
- return () => {
89
- (node == null ? void 0 : node.parentElement) && (resizeObserver == null ? void 0 : resizeObserver.unobserve(node.parentElement));
90
- resizeObserver == null ? void 0 : resizeObserver.disconnect();
91
- };
92
- }, []);
93
- if (!isAllowedToPublish.video && !isAllowedToPublish.audio) {
94
- return null;
95
- }
96
- return /* @__PURE__ */ React.createElement(Draggable, { bounds: "parent", nodeRef, cancel: ".__cancel-drag-event" }, /* @__PURE__ */ React.createElement(
97
- Box,
98
- {
99
- ref: nodeRef,
100
- css: __spreadValues({
101
- position: "absolute",
102
- bottom: 0,
103
- right: 0,
104
- zIndex: 10,
105
- boxShadow: "0 0 8px 0 rgba(0,0,0,0.3)",
106
- r: "$2"
107
- }, !minimised ? {
108
- aspectRatio,
109
- h: height
110
- } : {})
111
- },
112
- minimised ? /* @__PURE__ */ React.createElement(MinimisedTile, { setMinimised }) : /* @__PURE__ */ React.createElement(
113
- VideoTile_default,
114
- __spreadProps(__spreadValues({
115
- peerId: peer == null ? void 0 : peer.id,
116
- trackId: peer == null ? void 0 : peer.videoTrack,
117
- rootCSS: {
118
- size: "100%",
119
- padding: 0
120
- },
121
- width,
122
- height,
123
- containerCSS: { background: "$surface_default" },
124
- canMinimise: true,
125
- isDragabble: true
126
- }, videoTileProps), {
127
- hideParticipantNameOnTile: true
128
- })
129
- )
130
- ));
131
- };
132
-
133
- export {
134
- InsetTile
135
- };
136
- //# sourceMappingURL=chunk-YEL5ZTFU.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/Prebuilt/components/InsetTile.tsx"],
4
- "sourcesContent": ["import React, { useEffect, useRef } from 'react';\nimport Draggable from 'react-draggable';\nimport { useMedia } from 'react-use';\nimport {\n selectIsAllowedToPublish,\n selectLocalPeer,\n selectPeerByID,\n selectVideoTrackByID,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { ExpandIcon } from '@100mslive/react-icons';\nimport { Box, Flex } from '../../Layout';\nimport { Text } from '../../Text';\nimport { config as cssConfig } from '../../Theme';\n// @ts-ignore: No implicit Any\nimport IconButton from '../IconButton';\n// @ts-ignore: No implicit Any\nimport { AudioVideoToggle } from './AudioVideoToggle';\n// @ts-ignore: No implicit Any\nimport VideoTile from './VideoTile';\n// @ts-ignore: No implicit Any\nimport { useSetAppDataByKey } from './AppData/useUISettings';\nimport { useVideoTileContext } from './hooks/useVideoTileLayout';\n// @ts-ignore: No implicit Any\nimport { APP_DATA } from '../common/constants';\n\nconst MinimisedTile = ({ setMinimised }: { setMinimised: (value: boolean) => void }) => {\n return (\n <Flex align=\"center\" css={{ gap: '$6', r: '$1', bg: '$surface_default', p: '$4', color: '$on_surface_high' }}>\n <AudioVideoToggle hideOptions={true} />\n <Text>You</Text>\n <IconButton\n className=\"__cancel-drag-event\"\n onClick={() => setMinimised(false)}\n css={{ bg: 'transparent', border: 'transparent' }}\n >\n <ExpandIcon />\n </IconButton>\n </Flex>\n );\n};\n\nconst insetHeightPx = 180;\nconst insetMaxWidthPx = 240;\nconst defaultMobileAspectRatio = 9 / 16;\nconst desktopAspectRatio = 1 / defaultMobileAspectRatio;\n\nexport const InsetTile = ({ peerId }: { peerId?: string }) => {\n const isMobile = useMedia(cssConfig.media.md);\n const isLandscape = useMedia(cssConfig.media.ls);\n const selector = peerId ? selectPeerByID(peerId) : selectLocalPeer;\n const peer = useHMSStore(selector);\n const [minimised, setMinimised] = useSetAppDataByKey(APP_DATA.minimiseInset);\n const videoTrack = useHMSStore(selectVideoTrackByID(peer?.videoTrack));\n const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);\n const videoTileProps = useVideoTileContext();\n let aspectRatio = isMobile ? defaultMobileAspectRatio : desktopAspectRatio;\n if (videoTrack?.width && videoTrack?.height && !isMobile) {\n aspectRatio = videoTrack.width / videoTrack.height;\n }\n let height = insetHeightPx;\n let width = height * aspectRatio;\n // Convert to 16/9 in landscape mode with a max width of 240\n if (isLandscape && width > insetMaxWidthPx) {\n width = 240;\n height = width / aspectRatio;\n }\n\n const nodeRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const node = nodeRef.current;\n if (!node || !window.ResizeObserver) {\n return;\n }\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n if (entry.target === node.parentElement) {\n // reset to original position on resize\n node.style.transform = `translate(0,0)`;\n }\n });\n });\n node.parentElement && resizeObserver.observe(node.parentElement);\n return () => {\n node?.parentElement && resizeObserver?.unobserve(node.parentElement);\n resizeObserver?.disconnect();\n };\n }, []);\n\n if (!isAllowedToPublish.video && !isAllowedToPublish.audio) {\n return null;\n }\n\n return (\n <Draggable bounds=\"parent\" nodeRef={nodeRef} cancel=\".__cancel-drag-event\">\n <Box\n ref={nodeRef}\n css={{\n position: 'absolute',\n bottom: 0,\n right: 0,\n zIndex: 10,\n boxShadow: '0 0 8px 0 rgba(0,0,0,0.3)',\n r: '$2',\n ...(!minimised\n ? {\n aspectRatio: aspectRatio,\n h: height,\n }\n : {}),\n }}\n >\n {minimised ? (\n <MinimisedTile setMinimised={setMinimised} />\n ) : (\n <VideoTile\n peerId={peer?.id}\n trackId={peer?.videoTrack}\n rootCSS={{\n size: '100%',\n padding: 0,\n }}\n width={width}\n height={height}\n containerCSS={{ background: '$surface_default' }}\n canMinimise\n isDragabble\n {...videoTileProps}\n hideParticipantNameOnTile\n />\n )}\n </Box>\n </Draggable>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": []
7
- }