Spaces:
Running
on
T4
Running
on
T4
Justin Haaheim
commited on
Commit
•
a02a300
1
Parent(s):
34021fc
Make the react app usable on mobile devices/small screens, and clean up theme code (#167)
Browse files* Fix UI resizing as text comes in
* Get rid of unneeded font size theme code
* Get rid of zIndex hacks that we used for chrome extension
* Get rid of minHeight to remove empty bar at bottom
* WIP try to get font to shrink
* Get responsive font size working
* Wrap the volume slider for narrow vieports
* Make input source row evenly spaced
streaming-react-app/src/StreamingInterface.css
CHANGED
@@ -16,10 +16,6 @@
|
|
16 |
border-radius: 8px;
|
17 |
box-shadow: 0px 24px 30px rgba(0, 0, 0, 0.3);
|
18 |
border: 1px solid rgba(0, 0, 0, 0.05);
|
19 |
-
min-height: 300px;
|
20 |
-
/* max-height: 95vh; */
|
21 |
-
/* max-width: 625px; */
|
22 |
-
/* min-width: 580px; */
|
23 |
overflow: hidden;
|
24 |
}
|
25 |
|
|
|
16 |
border-radius: 8px;
|
17 |
box-shadow: 0px 24px 30px rgba(0, 0, 0, 0.3);
|
18 |
border: 1px solid rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
|
|
|
19 |
overflow: hidden;
|
20 |
}
|
21 |
|
streaming-react-app/src/StreamingInterface.tsx
CHANGED
@@ -59,6 +59,7 @@ import {getURLParams} from './URLParams';
|
|
59 |
import debug from './debug';
|
60 |
import DebugSection from './DebugSection';
|
61 |
import Switch from '@mui/material/Switch';
|
|
|
62 |
|
63 |
const AUDIO_STREAM_DEFAULTS: {
|
64 |
[key in SupportedInputSource]: BrowserAudioStreamConfig;
|
@@ -754,8 +755,7 @@ export default function StreamingInterface() {
|
|
754 |
<Box
|
755 |
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
756 |
// @ts-ignore Not sure why it's complaining about complexity here
|
757 |
-
|
758 |
-
maxWidth={'660px'}>
|
759 |
<div className="main-container-sra">
|
760 |
<div className="top-section-sra horizontal-padding-sra">
|
761 |
<div className="header-container-sra">
|
@@ -881,74 +881,83 @@ export default function StreamingInterface() {
|
|
881 |
</FormControl>
|
882 |
</Box>
|
883 |
|
884 |
-
<
|
885 |
-
<
|
886 |
-
<
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
<Stack
|
908 |
-
direction="column"
|
909 |
-
spacing={1}
|
910 |
-
alignItems="flex-start"
|
911 |
-
sx={{flexGrow: 1}}>
|
912 |
-
{currentAgent?.dynamicParams?.includes(
|
913 |
-
'expressive',
|
914 |
-
) && (
|
915 |
-
<FormControlLabel
|
916 |
-
control={
|
917 |
-
<Switch
|
918 |
-
checked={enableExpressive ?? false}
|
919 |
-
onChange={(
|
920 |
-
event: React.ChangeEvent<HTMLInputElement>,
|
921 |
-
) => {
|
922 |
-
const newValue = event.target.checked;
|
923 |
-
setEnableExpressive(newValue);
|
924 |
-
onSetDynamicConfig({expressive: newValue});
|
925 |
-
}}
|
926 |
-
/>
|
927 |
}
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
945 |
</Stack>
|
946 |
|
947 |
<Stack
|
948 |
direction="row"
|
949 |
spacing={2}
|
950 |
justifyContent="space-between">
|
951 |
-
<
|
952 |
<FormControl disabled={streamFixedConfigOptionsDisabled}>
|
953 |
<FormLabel id="input-source-radio-group-label">
|
954 |
Input Source
|
@@ -972,8 +981,8 @@ export default function StreamingInterface() {
|
|
972 |
))}
|
973 |
</RadioGroup>
|
974 |
</FormControl>
|
975 |
-
</
|
976 |
-
<
|
977 |
<FormControl disabled={streamFixedConfigOptionsDisabled}>
|
978 |
<FormLabel>Options</FormLabel>
|
979 |
<FormControlLabel
|
@@ -1022,7 +1031,7 @@ export default function StreamingInterface() {
|
|
1022 |
label="Server Debug Flag"
|
1023 |
/>
|
1024 |
</FormControl>
|
1025 |
-
</
|
1026 |
</Stack>
|
1027 |
|
1028 |
<Stack direction="row" spacing={2}>
|
|
|
59 |
import debug from './debug';
|
60 |
import DebugSection from './DebugSection';
|
61 |
import Switch from '@mui/material/Switch';
|
62 |
+
import {Grid} from '@mui/material';
|
63 |
|
64 |
const AUDIO_STREAM_DEFAULTS: {
|
65 |
[key in SupportedInputSource]: BrowserAudioStreamConfig;
|
|
|
755 |
<Box
|
756 |
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
757 |
// @ts-ignore Not sure why it's complaining about complexity here
|
758 |
+
sx={{width: '100%', maxWidth: '660px', minWidth: '320px'}}>
|
|
|
759 |
<div className="main-container-sra">
|
760 |
<div className="top-section-sra horizontal-padding-sra">
|
761 |
<div className="header-container-sra">
|
|
|
881 |
</FormControl>
|
882 |
</Box>
|
883 |
|
884 |
+
<Grid container>
|
885 |
+
<Grid item xs={12} sm={4}>
|
886 |
+
<FormControl
|
887 |
+
disabled={streamFixedConfigOptionsDisabled}>
|
888 |
+
<RadioGroup
|
889 |
+
aria-labelledby="output-modes-radio-group-label"
|
890 |
+
value={outputMode}
|
891 |
+
onChange={(e) =>
|
892 |
+
setOutputMode(
|
893 |
+
e.target.value as SupportedOutputMode,
|
894 |
+
)
|
895 |
+
}
|
896 |
+
name="output-modes-radio-buttons-group">
|
897 |
+
{
|
898 |
+
// TODO: Use supported modalities from agentCapabilities
|
899 |
+
SUPPORTED_OUTPUT_MODES.map(({value, label}) => (
|
900 |
+
<FormControlLabel
|
901 |
+
key={value}
|
902 |
+
value={value}
|
903 |
+
control={<Radio />}
|
904 |
+
label={label}
|
905 |
+
/>
|
906 |
+
))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
907 |
}
|
908 |
+
</RadioGroup>
|
909 |
+
</FormControl>
|
910 |
+
</Grid>
|
911 |
+
|
912 |
+
<Grid item xs={12} sm={8}>
|
913 |
+
<Stack
|
914 |
+
direction="column"
|
915 |
+
spacing={1}
|
916 |
+
alignItems="flex-start"
|
917 |
+
sx={{flexGrow: 1}}>
|
918 |
+
{currentAgent?.dynamicParams?.includes(
|
919 |
+
'expressive',
|
920 |
+
) && (
|
921 |
+
<FormControlLabel
|
922 |
+
control={
|
923 |
+
<Switch
|
924 |
+
checked={enableExpressive ?? false}
|
925 |
+
onChange={(
|
926 |
+
event: React.ChangeEvent<HTMLInputElement>,
|
927 |
+
) => {
|
928 |
+
const newValue = event.target.checked;
|
929 |
+
setEnableExpressive(newValue);
|
930 |
+
onSetDynamicConfig({
|
931 |
+
expressive: newValue,
|
932 |
+
});
|
933 |
+
}}
|
934 |
+
/>
|
935 |
+
}
|
936 |
+
label="Expressive"
|
937 |
+
/>
|
938 |
+
)}
|
939 |
+
|
940 |
+
{isListener && (
|
941 |
+
<Box
|
942 |
+
sx={{
|
943 |
+
flexGrow: 1,
|
944 |
+
paddingX: 1.5,
|
945 |
+
paddingY: 1.5,
|
946 |
+
width: '100%',
|
947 |
+
}}>
|
948 |
+
{volumeSliderNode}
|
949 |
+
</Box>
|
950 |
+
)}
|
951 |
+
</Stack>
|
952 |
+
</Grid>
|
953 |
+
</Grid>
|
954 |
</Stack>
|
955 |
|
956 |
<Stack
|
957 |
direction="row"
|
958 |
spacing={2}
|
959 |
justifyContent="space-between">
|
960 |
+
<Box sx={{flex: 1}}>
|
961 |
<FormControl disabled={streamFixedConfigOptionsDisabled}>
|
962 |
<FormLabel id="input-source-radio-group-label">
|
963 |
Input Source
|
|
|
981 |
))}
|
982 |
</RadioGroup>
|
983 |
</FormControl>
|
984 |
+
</Box>
|
985 |
+
<Box sx={{flex: 1}}>
|
986 |
<FormControl disabled={streamFixedConfigOptionsDisabled}>
|
987 |
<FormLabel>Options</FormLabel>
|
988 |
<FormControlLabel
|
|
|
1031 |
label="Server Debug Flag"
|
1032 |
/>
|
1033 |
</FormControl>
|
1034 |
+
</Box>
|
1035 |
</Stack>
|
1036 |
|
1037 |
<Stack direction="row" spacing={2}>
|
streaming-react-app/src/theme.ts
CHANGED
@@ -1,27 +1,4 @@
|
|
1 |
import {createTheme} from '@mui/material/styles';
|
2 |
-
// import {red} from '@mui/material/colors';
|
3 |
-
|
4 |
-
const Z_INDEX_BASE = 9999999;
|
5 |
-
|
6 |
-
function getHtmlFontSize(): number | null {
|
7 |
-
let fontSize: number | null = null;
|
8 |
-
try {
|
9 |
-
// NOTE: Even when this is not explicitly set it still returns a value
|
10 |
-
const fontSizeString = window
|
11 |
-
.getComputedStyle(document.getElementsByTagName('html')[0])
|
12 |
-
.getPropertyValue('font-size');
|
13 |
-
fontSize = parseInt(fontSizeString, 10);
|
14 |
-
} catch (e) {
|
15 |
-
console.error('Error getting font size', e);
|
16 |
-
}
|
17 |
-
|
18 |
-
return fontSize;
|
19 |
-
}
|
20 |
-
|
21 |
-
const htmlFontSize = getHtmlFontSize();
|
22 |
-
|
23 |
-
const htmlFontSizeObject =
|
24 |
-
htmlFontSize == null ? {} : {htmlFontSize: htmlFontSize};
|
25 |
|
26 |
const themeObject = {
|
27 |
palette: {
|
@@ -35,7 +12,6 @@ const themeObject = {
|
|
35 |
text: {primary: '#1C2A33'},
|
36 |
},
|
37 |
typography: {
|
38 |
-
...htmlFontSizeObject,
|
39 |
fontFamily: [
|
40 |
'Optimistic Text',
|
41 |
'Roboto',
|
@@ -43,26 +19,22 @@ const themeObject = {
|
|
43 |
'Arial',
|
44 |
'sans-serif',
|
45 |
].join(','),
|
46 |
-
h1: {fontSize:
|
47 |
-
body1: {fontSize: 16},
|
48 |
-
},
|
49 |
-
// Because our chrome extension uses a high z-index, we need to
|
50 |
-
// provide that base here so MUI stuff renders correctly
|
51 |
-
zIndex: {
|
52 |
-
mobileStepper: Z_INDEX_BASE + 1000,
|
53 |
-
fab: Z_INDEX_BASE + 1050,
|
54 |
-
speedDial: Z_INDEX_BASE + 1050,
|
55 |
-
appBar: Z_INDEX_BASE + 1100,
|
56 |
-
drawer: Z_INDEX_BASE + 1200,
|
57 |
-
modal: Z_INDEX_BASE + 1300,
|
58 |
-
snackbar: Z_INDEX_BASE + 1400,
|
59 |
-
tooltip: Z_INDEX_BASE + 1500,
|
60 |
},
|
61 |
};
|
62 |
|
63 |
-
console.log('themeObject', themeObject);
|
64 |
-
|
65 |
-
// A custom theme for this app
|
66 |
const theme = createTheme(themeObject);
|
67 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
export default theme;
|
|
|
1 |
import {createTheme} from '@mui/material/styles';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
const themeObject = {
|
4 |
palette: {
|
|
|
12 |
text: {primary: '#1C2A33'},
|
13 |
},
|
14 |
typography: {
|
|
|
15 |
fontFamily: [
|
16 |
'Optimistic Text',
|
17 |
'Roboto',
|
|
|
19 |
'Arial',
|
20 |
'sans-serif',
|
21 |
].join(','),
|
22 |
+
h1: {fontSize: '1rem', fontWeight: '500'},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
},
|
24 |
};
|
25 |
|
|
|
|
|
|
|
26 |
const theme = createTheme(themeObject);
|
27 |
|
28 |
+
/**
|
29 |
+
* Set up a responsive font size at the 600px breakpoint
|
30 |
+
*/
|
31 |
+
// default is 1rem (16px)
|
32 |
+
theme.typography.body1[theme.breakpoints.down('sm')] = {fontSize: '0.875rem'};
|
33 |
+
// default is 1rem (16px)
|
34 |
+
theme.typography.h1[theme.breakpoints.down('sm')] = {fontSize: '0.875rem'};
|
35 |
+
// default is 0.875rem (14px)
|
36 |
+
theme.typography.button[theme.breakpoints.down('sm')] = {fontSize: '0.75rem'};
|
37 |
+
// default is 0.875rem (14px)
|
38 |
+
theme.typography.body2[theme.breakpoints.down('sm')] = {fontSize: '0.75rem'};
|
39 |
+
|
40 |
export default theme;
|