UNPKG

@100mslive/roomkit-react

Version:

![Banner](https://github.com/100mslive/web-sdks/blob/06c65259912db6ccd8617f2ecb6fef51429251ec/prebuilt-banner.png)

144 lines (138 loc) 4.03 kB
import React from 'react'; import { selectPermissions, useHMSStore } from '@100mslive/react-sdk'; import { ChevronLeftIcon, ChevronRightIcon, CrossIcon, RecordIcon } from '@100mslive/react-icons'; import { Box, Flex, IconButton, slideLeftAndFade, Switch, Text } from '../../../'; export const StreamCard = ({ title, subtitle, Icon, imgSrc = '', css = {}, onClick, testId }) => { return ( <Flex css={{ w: '100%', p: '$10', r: '$1', cursor: 'pointer', bg: '$surface_bright', mb: '$10', mt: '$8', ...css, }} data-testid={testId} onClick={onClick} > <Text css={{ alignSelf: 'center', p: '$4' }}> {imgSrc ? <img src={imgSrc} height={40} width={40} alt="Streaming" /> : <Icon width={40} height={40} />} </Text> <Box css={{ flex: '1 1 0', mx: '$8' }}> <Text variant="h6" css={{ mb: '$4' }}> {title} </Text> <Text variant="sm" css={{ color: '$on_surface_medium' }}> {subtitle} </Text> </Box> <Text css={{ alignSelf: 'center' }}> <ChevronRightIcon /> </Text> </Flex> ); }; export const ContentHeader = ({ onBack, onClose, title = '', content }) => { return ( <Flex css={{ w: '100%', py: '$8', px: '$10', cursor: 'pointer', borderBottom: '1px solid $border_bright', mb: '$8' }} > {onBack ? ( <Flex align="center" css={{ mr: '$8', color: '$on_surface_high', }} onClick={onBack} data-testid="go_back" > <ChevronLeftIcon /> </Flex> ) : null} <Box css={{ flex: '1 1 0', display: 'flex', alignItems: 'center' }}> {title ? ( <Text variant="tiny" css={{ textTransform: 'uppercase', fontWeight: '$semiBold', color: '$on_surface_medium', }} > {title} </Text> ) : null} <Text variant="h6">{content}</Text> </Box> {onClose ? ( <IconButton onClick={onClose} css={{ alignSelf: 'flex-start' }} data-testid="close_stream_section"> <CrossIcon /> </IconButton> ) : null} </Flex> ); }; export const Container = ({ children, rounded = false }) => { return ( <Box css={{ size: '100%', zIndex: 2, position: 'absolute', top: 0, left: 0, bg: '$surface_dim', transform: 'translateX(10%)', animation: `${slideLeftAndFade('10%')} 100ms ease-out forwards`, display: 'flex', flexDirection: 'column', borderRadius: rounded ? '$2' : '0', }} > {children} </Box> ); }; export const ContentBody = ({ Icon, title, removeVerticalPadding = false, children }) => { return ( <Box css={{ p: removeVerticalPadding ? '$0 $10' : '$10' }}> <Text css={{ display: 'flex', alignItems: 'center', mb: '$4' }}> <Icon /> <Text as="span" css={{ fontWeight: '$semiBold', ml: '$4' }}> {title} </Text> </Text> <Text variant="sm" css={{ color: '$on_surface_medium' }}> {children} </Text> </Box> ); }; export const RecordStream = ({ record, setRecord, testId }) => { const permissions = useHMSStore(selectPermissions); return permissions?.browserRecording ? ( <Flex align="center" css={{ bg: '$surface_bright', m: '$8 $10', p: '$8', r: '$0' }}> <Text css={{ color: '$alert_error_default' }}> <RecordIcon /> </Text> <Text variant="sm" css={{ flex: '1 1 0', mx: '$8' }}> Record the stream </Text> <Switch checked={record} onCheckedChange={setRecord} data-testid={testId} /> </Flex> ) : null; }; export const ErrorText = ({ error }) => { if (!error) { return null; } return ( <Text variant="sm" css={{ my: '$4', color: '$alert_error_default' }}> {error} </Text> ); };